@rdmind/rdmind 0.2.2-alpha.4 → 0.2.2

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/cli.js CHANGED
@@ -8531,7 +8531,7 @@ var require_agent = __commonJS({
8531
8531
  return opts && opts.connections === 1 ? new Client3(origin, opts) : new Pool(origin, opts);
8532
8532
  }
8533
8533
  __name(defaultFactory, "defaultFactory");
8534
- var Agent3 = class extends DispatcherBase {
8534
+ var Agent4 = class extends DispatcherBase {
8535
8535
  static {
8536
8536
  __name(this, "Agent");
8537
8537
  }
@@ -8606,7 +8606,7 @@ var require_agent = __commonJS({
8606
8606
  await Promise.all(destroyPromises);
8607
8607
  }
8608
8608
  };
8609
- module2.exports = Agent3;
8609
+ module2.exports = Agent4;
8610
8610
  }
8611
8611
  });
8612
8612
 
@@ -8617,7 +8617,7 @@ var require_proxy_agent = __commonJS({
8617
8617
  init_esbuild_shims();
8618
8618
  var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
8619
8619
  var { URL: URL5 } = __require("node:url");
8620
- var Agent3 = require_agent();
8620
+ var Agent4 = require_agent();
8621
8621
  var Pool = require_pool();
8622
8622
  var DispatcherBase = require_dispatcher_base();
8623
8623
  var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors();
@@ -8695,7 +8695,7 @@ var require_proxy_agent = __commonJS({
8695
8695
  return this.#client.destroy(err);
8696
8696
  }
8697
8697
  };
8698
- var ProxyAgent3 = class extends DispatcherBase {
8698
+ var ProxyAgent4 = class extends DispatcherBase {
8699
8699
  static {
8700
8700
  __name(this, "ProxyAgent");
8701
8701
  }
@@ -8741,7 +8741,7 @@ var require_proxy_agent = __commonJS({
8741
8741
  return agentFactory(origin2, options2);
8742
8742
  }, "factory");
8743
8743
  this[kClient] = clientFactory(url2, { connect });
8744
- this[kAgent] = new Agent3({
8744
+ this[kAgent] = new Agent4({
8745
8745
  ...opts,
8746
8746
  factory,
8747
8747
  connect: /* @__PURE__ */ __name(async (opts2, callback) => {
@@ -8841,7 +8841,7 @@ var require_proxy_agent = __commonJS({
8841
8841
  }
8842
8842
  }
8843
8843
  __name(throwIfProxyAuthIsSent, "throwIfProxyAuthIsSent");
8844
- module2.exports = ProxyAgent3;
8844
+ module2.exports = ProxyAgent4;
8845
8845
  }
8846
8846
  });
8847
8847
 
@@ -8852,14 +8852,14 @@ var require_env_http_proxy_agent = __commonJS({
8852
8852
  init_esbuild_shims();
8853
8853
  var DispatcherBase = require_dispatcher_base();
8854
8854
  var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols();
8855
- var ProxyAgent3 = require_proxy_agent();
8856
- var Agent3 = require_agent();
8855
+ var ProxyAgent4 = require_proxy_agent();
8856
+ var Agent4 = require_agent();
8857
8857
  var DEFAULT_PORTS = {
8858
8858
  "http:": 80,
8859
8859
  "https:": 443
8860
8860
  };
8861
8861
  var experimentalWarned = false;
8862
- var EnvHttpProxyAgent3 = class extends DispatcherBase {
8862
+ var EnvHttpProxyAgent2 = class extends DispatcherBase {
8863
8863
  static {
8864
8864
  __name(this, "EnvHttpProxyAgent");
8865
8865
  }
@@ -8876,16 +8876,16 @@ var require_env_http_proxy_agent = __commonJS({
8876
8876
  });
8877
8877
  }
8878
8878
  const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts;
8879
- this[kNoProxyAgent] = new Agent3(agentOpts);
8879
+ this[kNoProxyAgent] = new Agent4(agentOpts);
8880
8880
  const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY;
8881
8881
  if (HTTP_PROXY) {
8882
- this[kHttpProxyAgent] = new ProxyAgent3({ ...agentOpts, uri: HTTP_PROXY });
8882
+ this[kHttpProxyAgent] = new ProxyAgent4({ ...agentOpts, uri: HTTP_PROXY });
8883
8883
  } else {
8884
8884
  this[kHttpProxyAgent] = this[kNoProxyAgent];
8885
8885
  }
8886
8886
  const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY;
8887
8887
  if (HTTPS_PROXY) {
8888
- this[kHttpsProxyAgent] = new ProxyAgent3({ ...agentOpts, uri: HTTPS_PROXY });
8888
+ this[kHttpsProxyAgent] = new ProxyAgent4({ ...agentOpts, uri: HTTPS_PROXY });
8889
8889
  } else {
8890
8890
  this[kHttpsProxyAgent] = this[kHttpProxyAgent];
8891
8891
  }
@@ -8981,7 +8981,7 @@ var require_env_http_proxy_agent = __commonJS({
8981
8981
  return process.env.no_proxy ?? process.env.NO_PROXY ?? "";
8982
8982
  }
8983
8983
  };
8984
- module2.exports = EnvHttpProxyAgent3;
8984
+ module2.exports = EnvHttpProxyAgent2;
8985
8985
  }
8986
8986
  });
8987
8987
 
@@ -11282,7 +11282,7 @@ var require_mock_agent = __commonJS({
11282
11282
  "use strict";
11283
11283
  init_esbuild_shims();
11284
11284
  var { kClients } = require_symbols();
11285
- var Agent3 = require_agent();
11285
+ var Agent4 = require_agent();
11286
11286
  var {
11287
11287
  kAgent,
11288
11288
  kMockAgentSet,
@@ -11312,7 +11312,7 @@ var require_mock_agent = __commonJS({
11312
11312
  if (opts?.agent && typeof opts.agent.dispatch !== "function") {
11313
11313
  throw new InvalidArgumentError("Argument opts.agent must implement Agent");
11314
11314
  }
11315
- const agent = opts?.agent ? opts.agent : new Agent3(opts);
11315
+ const agent = opts?.agent ? opts.agent : new Agent4(opts);
11316
11316
  this[kAgent] = agent;
11317
11317
  this[kClients] = agent[kClients];
11318
11318
  this[kOptions] = buildMockOptions(opts);
@@ -11417,9 +11417,9 @@ var require_global2 = __commonJS({
11417
11417
  init_esbuild_shims();
11418
11418
  var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
11419
11419
  var { InvalidArgumentError } = require_errors();
11420
- var Agent3 = require_agent();
11420
+ var Agent4 = require_agent();
11421
11421
  if (getGlobalDispatcher() === void 0) {
11422
- setGlobalDispatcher3(new Agent3());
11422
+ setGlobalDispatcher3(new Agent4());
11423
11423
  }
11424
11424
  function setGlobalDispatcher3(agent) {
11425
11425
  if (!agent || typeof agent.dispatch !== "function") {
@@ -18884,9 +18884,9 @@ var require_undici = __commonJS({
18884
18884
  var Dispatcher = require_dispatcher();
18885
18885
  var Pool = require_pool();
18886
18886
  var BalancedPool = require_balanced_pool();
18887
- var Agent3 = require_agent();
18888
- var ProxyAgent3 = require_proxy_agent();
18889
- var EnvHttpProxyAgent3 = require_env_http_proxy_agent();
18887
+ var Agent4 = require_agent();
18888
+ var ProxyAgent4 = require_proxy_agent();
18889
+ var EnvHttpProxyAgent2 = require_env_http_proxy_agent();
18890
18890
  var RetryAgent = require_retry_agent();
18891
18891
  var errors = require_errors();
18892
18892
  var util4 = require_util();
@@ -18907,9 +18907,9 @@ var require_undici = __commonJS({
18907
18907
  module2.exports.Client = Client3;
18908
18908
  module2.exports.Pool = Pool;
18909
18909
  module2.exports.BalancedPool = BalancedPool;
18910
- module2.exports.Agent = Agent3;
18911
- module2.exports.ProxyAgent = ProxyAgent3;
18912
- module2.exports.EnvHttpProxyAgent = EnvHttpProxyAgent3;
18910
+ module2.exports.Agent = Agent4;
18911
+ module2.exports.ProxyAgent = ProxyAgent4;
18912
+ module2.exports.EnvHttpProxyAgent = EnvHttpProxyAgent2;
18913
18913
  module2.exports.RetryAgent = RetryAgent;
18914
18914
  module2.exports.RetryHandler = RetryHandler;
18915
18915
  module2.exports.DecoratorHandler = DecoratorHandler;
@@ -20749,7 +20749,7 @@ var require_dist = __commonJS({
20749
20749
  var https_1 = __require("https");
20750
20750
  __exportStar(require_helpers(), exports2);
20751
20751
  var INTERNAL = Symbol("AgentBaseInternalState");
20752
- var Agent3 = class extends http7.Agent {
20752
+ var Agent4 = class extends http7.Agent {
20753
20753
  static {
20754
20754
  __name(this, "Agent");
20755
20755
  }
@@ -20863,7 +20863,7 @@ var require_dist = __commonJS({
20863
20863
  }
20864
20864
  }
20865
20865
  };
20866
- exports2.Agent = Agent3;
20866
+ exports2.Agent = Agent4;
20867
20867
  }
20868
20868
  });
20869
20869
 
@@ -105086,8 +105086,8 @@ function readableFromUint8Array(buff) {
105086
105086
  }
105087
105087
  function createHttpAgent(rawUrl, agentOptions) {
105088
105088
  const parsedUrl = new URL(rawUrl);
105089
- const Agent3 = parsedUrl.protocol === "http:" ? http3.Agent : https3.Agent;
105090
- return new Agent3(agentOptions);
105089
+ const Agent4 = parsedUrl.protocol === "http:" ? http3.Agent : https3.Agent;
105090
+ return new Agent4(agentOptions);
105091
105091
  }
105092
105092
  var init_http_transport_utils = __esm({
105093
105093
  "node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/http-transport-utils.js"() {
@@ -129147,17 +129147,17 @@ var init_tokenUsageReporter = __esm({
129147
129147
  requestId: item.requestId
129148
129148
  }
129149
129149
  );
129150
- } else {
129151
- if (this.queue.length % 10 === 0 || this.queue.length === 1) {
129150
+ } else if (this.queue.length === 1) {
129151
+ console.log(
129152
+ `[tokenUsageReporter] Token \u4F7F\u7528\u8BB0\u5F55\u4E0A\u62A5\u529F\u80FD\u5DF2\u542F\u7528\uFF08\u8FBE\u5230 ${BATCH_SIZE} \u6761\u6216 ${BATCH_INTERVAL_MS / 1e3} \u79D2\u540E\u4E0A\u62A5\uFF09`
129153
+ );
129154
+ }
129155
+ if (this.queue.length >= BATCH_SIZE) {
129156
+ if (isDebugEnabled()) {
129152
129157
  console.log(
129153
- `[tokenUsageReporter] \u5DF2\u6536\u96C6 ${this.queue.length} \u6761 Token \u4F7F\u7528\u8BB0\u5F55\uFF08\u8FBE\u5230 ${BATCH_SIZE} \u6761\u6216 ${BATCH_INTERVAL_MS / 1e3} \u79D2\u540E\u4E0A\u62A5\uFF09`
129158
+ `[tokenUsageReporter] \u961F\u5217\u8FBE\u5230\u6279\u91CF\u5927\u5C0F ${BATCH_SIZE}\uFF0C\u7ACB\u5373\u89E6\u53D1\u4E0A\u62A5`
129154
129159
  );
129155
129160
  }
129156
- }
129157
- if (this.queue.length >= BATCH_SIZE) {
129158
- console.log(
129159
- `[tokenUsageReporter] \u961F\u5217\u8FBE\u5230\u6279\u91CF\u5927\u5C0F ${BATCH_SIZE}\uFF0C\u7ACB\u5373\u89E6\u53D1\u4E0A\u62A5`
129160
- );
129161
129161
  debugLog(`\u961F\u5217\u8FBE\u5230\u6279\u91CF\u5927\u5C0F ${BATCH_SIZE}\uFF0C\u7ACB\u5373\u89E6\u53D1\u4E0A\u62A5`);
129162
129162
  this.flush();
129163
129163
  }
@@ -129237,9 +129237,11 @@ var init_tokenUsageReporter = __esm({
129237
129237
  const success = await this.reportToServer(rdmindSsoId, validItems);
129238
129238
  if (success) {
129239
129239
  this.lastFlushTime = Date.now();
129240
- console.log(
129241
- `[tokenUsageReporter] \u2705 \u6210\u529F\u4E0A\u62A5 ${validItems.length} \u6761 Token \u4F7F\u7528\u8BB0\u5F55`
129242
- );
129240
+ if (isDebugEnabled()) {
129241
+ console.log(
129242
+ `[tokenUsageReporter] \u2705 \u6210\u529F\u4E0A\u62A5 ${validItems.length} \u6761 Token \u4F7F\u7528\u8BB0\u5F55`
129243
+ );
129244
+ }
129243
129245
  debugLog(`\u2705 \u6210\u529F\u4E0A\u62A5 ${validItems.length} \u6761 Token \u4F7F\u7528\u8BB0\u5F55`);
129244
129246
  } else {
129245
129247
  const maxRetrySize = BATCH_SIZE * 2;
@@ -130575,30 +130577,6 @@ function isQwenQuotaExceededError(error2) {
130575
130577
  }
130576
130578
  return false;
130577
130579
  }
130578
- function isQwenThrottlingError(error2) {
130579
- const checkMessage = /* @__PURE__ */ __name((message) => {
130580
- const lowerMessage = message.toLowerCase();
130581
- return lowerMessage.includes("throttling") || lowerMessage.includes("requests throttling triggered") || lowerMessage.includes("rate limit") || lowerMessage.includes("too many requests");
130582
- }, "checkMessage");
130583
- const getStatusCode = /* @__PURE__ */ __name((error3) => {
130584
- if (error3 && typeof error3 === "object") {
130585
- const errorObj = error3;
130586
- return errorObj.status || errorObj.code;
130587
- }
130588
- return void 0;
130589
- }, "getStatusCode");
130590
- const statusCode = getStatusCode(error2);
130591
- if (typeof error2 === "string") {
130592
- return statusCode === 429 && checkMessage(error2) || error2.includes("throttling");
130593
- }
130594
- if (isStructuredError(error2)) {
130595
- return statusCode === 429 && checkMessage(error2.message);
130596
- }
130597
- if (isApiError(error2)) {
130598
- return error2.error.code === 429 && checkMessage(error2.error.message);
130599
- }
130600
- return false;
130601
- }
130602
130580
  var init_quotaErrorDetection = __esm({
130603
130581
  "packages/core/src/utils/quotaErrorDetection.ts"() {
130604
130582
  "use strict";
@@ -130608,7 +130586,6 @@ var init_quotaErrorDetection = __esm({
130608
130586
  __name(isProQuotaExceededError, "isProQuotaExceededError");
130609
130587
  __name(isGenericQuotaExceededError, "isGenericQuotaExceededError");
130610
130588
  __name(isQwenQuotaExceededError, "isQwenQuotaExceededError");
130611
- __name(isQwenThrottlingError, "isQwenThrottlingError");
130612
130589
  }
130613
130590
  });
130614
130591
 
@@ -133235,7 +133212,8 @@ var init_constants3 = __esm({
133235
133212
  "disableCacheControl",
133236
133213
  "schemaCompliance",
133237
133214
  "reasoning",
133238
- "customHeaders"
133215
+ "customHeaders",
133216
+ "extra_body"
133239
133217
  ];
133240
133218
  CREDENTIAL_FIELDS = [
133241
133219
  "model",
@@ -141468,7 +141446,7 @@ function detectRuntime() {
141468
141446
  }
141469
141447
  return "unknown";
141470
141448
  }
141471
- function buildRuntimeFetchOptions(sdkType) {
141449
+ function buildRuntimeFetchOptions(sdkType, proxyUrl) {
141472
141450
  const runtime = detectRuntime();
141473
141451
  switch (runtime) {
141474
141452
  case "bun": {
@@ -141492,17 +141470,14 @@ function buildRuntimeFetchOptions(sdkType) {
141492
141470
  }
141493
141471
  case "node": {
141494
141472
  try {
141495
- const agent = new import_undici.EnvHttpProxyAgent({
141496
- bodyTimeout: 0
141497
- // Disable to let SDK timeout control total request time
141498
- });
141473
+ const dispatcher = createDispatcher(proxyUrl);
141499
141474
  if (sdkType === "openai") {
141500
141475
  return {
141501
- dispatcher: agent
141476
+ dispatcher
141502
141477
  };
141503
141478
  } else {
141504
141479
  return {
141505
- httpAgent: agent
141480
+ httpAgent: dispatcher
141506
141481
  };
141507
141482
  }
141508
141483
  } catch {
@@ -141515,17 +141490,14 @@ function buildRuntimeFetchOptions(sdkType) {
141515
141490
  }
141516
141491
  default: {
141517
141492
  try {
141518
- const agent = new import_undici.EnvHttpProxyAgent({
141519
- bodyTimeout: 0
141520
- // Disable to let SDK timeout control total request time
141521
- });
141493
+ const dispatcher = createDispatcher(proxyUrl);
141522
141494
  if (sdkType === "openai") {
141523
141495
  return {
141524
- dispatcher: agent
141496
+ dispatcher
141525
141497
  };
141526
141498
  } else {
141527
141499
  return {
141528
- httpAgent: agent
141500
+ httpAgent: dispatcher
141529
141501
  };
141530
141502
  }
141531
141503
  } catch {
@@ -141538,6 +141510,19 @@ function buildRuntimeFetchOptions(sdkType) {
141538
141510
  }
141539
141511
  }
141540
141512
  }
141513
+ function createDispatcher(proxyUrl) {
141514
+ if (proxyUrl) {
141515
+ return new import_undici.ProxyAgent({
141516
+ uri: proxyUrl,
141517
+ headersTimeout: 0,
141518
+ bodyTimeout: 0
141519
+ });
141520
+ }
141521
+ return new import_undici.Agent({
141522
+ headersTimeout: 0,
141523
+ bodyTimeout: 0
141524
+ });
141525
+ }
141541
141526
  var import_undici;
141542
141527
  var init_runtimeFetchOptions = __esm({
141543
141528
  "packages/core/src/utils/runtimeFetchOptions.ts"() {
@@ -141546,6 +141531,7 @@ var init_runtimeFetchOptions = __esm({
141546
141531
  import_undici = __toESM(require_undici(), 1);
141547
141532
  __name(detectRuntime, "detectRuntime");
141548
141533
  __name(buildRuntimeFetchOptions, "buildRuntimeFetchOptions");
141534
+ __name(createDispatcher, "createDispatcher");
141549
141535
  }
141550
141536
  });
141551
141537
 
@@ -141585,7 +141571,10 @@ var init_default = __esm({
141585
141571
  maxRetries = DEFAULT_MAX_RETRIES
141586
141572
  } = this.contentGeneratorConfig;
141587
141573
  const defaultHeaders = this.buildHeaders();
141588
- const fetchOptions = buildRuntimeFetchOptions("openai");
141574
+ const fetchOptions = buildRuntimeFetchOptions(
141575
+ "openai",
141576
+ this.cliConfig.getProxy()
141577
+ );
141589
141578
  return new OpenAI({
141590
141579
  apiKey,
141591
141580
  baseURL: baseUrl,
@@ -141596,9 +141585,11 @@ var init_default = __esm({
141596
141585
  });
141597
141586
  }
141598
141587
  buildRequest(request4, _userPromptId) {
141588
+ const extraBody = this.contentGeneratorConfig.extra_body;
141599
141589
  return {
141600
- ...request4
141590
+ ...request4,
141601
141591
  // Preserve all original parameters including sampling params
141592
+ ...extraBody ? extraBody : {}
141602
141593
  };
141603
141594
  }
141604
141595
  getDefaultGenerationConfig() {
@@ -141783,6 +141774,8 @@ var init_tokenLimits = __esm({
141783
141774
  // -------------------
141784
141775
  // Moonshot / Kimi
141785
141776
  // -------------------
141777
+ [/^kimi-k2\.5.*$/, LIMITS["256k"]],
141778
+ // Kimi-k2.5: 256K context
141786
141779
  [/^kimi-k2-0905$/, LIMITS["256k"]],
141787
141780
  // Kimi-k2-0905-preview: 256K context
141788
141781
  [/^kimi-k2-turbo.*$/, LIMITS["256k"]],
@@ -141874,7 +141867,10 @@ var init_dashscope = __esm({
141874
141867
  maxRetries = DEFAULT_MAX_RETRIES
141875
141868
  } = this.contentGeneratorConfig;
141876
141869
  const defaultHeaders = this.buildHeaders();
141877
- const fetchOptions = buildRuntimeFetchOptions("openai");
141870
+ const fetchOptions = buildRuntimeFetchOptions(
141871
+ "openai",
141872
+ this.cliConfig.getProxy()
141873
+ );
141878
141874
  return new OpenAI({
141879
141875
  apiKey,
141880
141876
  baseURL: baseUrl,
@@ -141913,6 +141909,7 @@ var init_dashscope = __esm({
141913
141909
  request4,
141914
141910
  request4.model
141915
141911
  );
141912
+ const extraBody = this.contentGeneratorConfig.extra_body;
141916
141913
  if (this.isVisionModel(request4.model)) {
141917
141914
  return {
141918
141915
  ...requestWithTokenLimits,
@@ -141920,7 +141917,8 @@ var init_dashscope = __esm({
141920
141917
  ...tools ? { tools } : {},
141921
141918
  ...this.buildMetadata(userPromptId) || {},
141922
141919
  /* @ts-expect-error dashscope exclusive */
141923
- vl_high_resolution_images: true
141920
+ vl_high_resolution_images: true,
141921
+ ...extraBody ? extraBody : {}
141924
141922
  };
141925
141923
  }
141926
141924
  return {
@@ -141928,7 +141926,8 @@ var init_dashscope = __esm({
141928
141926
  // Preserve all original parameters including sampling params and adjusted max_tokens
141929
141927
  messages,
141930
141928
  ...tools ? { tools } : {},
141931
- ...this.buildMetadata(userPromptId) || {}
141929
+ ...this.buildMetadata(userPromptId) || {},
141930
+ ...extraBody ? extraBody : {}
141932
141931
  };
141933
141932
  }
141934
141933
  buildMetadata(userPromptId) {
@@ -151658,7 +151657,7 @@ var require_agent2 = __commonJS({
151658
151657
  console.log("[agentkeepalive:deprecated] %s", message);
151659
151658
  }
151660
151659
  __name(deprecate6, "deprecate");
151661
- var Agent3 = class extends OriginalAgent {
151660
+ var Agent4 = class extends OriginalAgent {
151662
151661
  static {
151663
151662
  __name(this, "Agent");
151664
151663
  }
@@ -151958,7 +151957,7 @@ var require_agent2 = __commonJS({
151958
151957
  socket.on("agentRemove", onRemove);
151959
151958
  }
151960
151959
  __name(installListeners, "installListeners");
151961
- module2.exports = Agent3;
151960
+ module2.exports = Agent4;
151962
151961
  function inspect3(obj) {
151963
151962
  const res = {};
151964
151963
  for (const key in obj) {
@@ -156875,17 +156874,21 @@ var init_anthropicContentGenerator = __esm({
156875
156874
  init_safeJsonParse();
156876
156875
  init_converter2();
156877
156876
  init_runtimeFetchOptions();
156877
+ init_constants2();
156878
156878
  AnthropicContentGenerator = class {
156879
156879
  constructor(contentGeneratorConfig, cliConfig) {
156880
156880
  this.contentGeneratorConfig = contentGeneratorConfig;
156881
156881
  this.cliConfig = cliConfig;
156882
156882
  const defaultHeaders = this.buildHeaders();
156883
156883
  const baseURL = contentGeneratorConfig.baseUrl;
156884
- const runtimeOptions = buildRuntimeFetchOptions("anthropic");
156884
+ const runtimeOptions = buildRuntimeFetchOptions(
156885
+ "anthropic",
156886
+ this.cliConfig.getProxy()
156887
+ );
156885
156888
  this.client = new sdk_default({
156886
156889
  apiKey: contentGeneratorConfig.apiKey,
156887
156890
  baseURL,
156888
- timeout: contentGeneratorConfig.timeout,
156891
+ timeout: contentGeneratorConfig.timeout || DEFAULT_TIMEOUT,
156889
156892
  maxRetries: contentGeneratorConfig.maxRetries,
156890
156893
  defaultHeaders,
156891
156894
  ...runtimeOptions
@@ -157359,7 +157362,7 @@ __export(geminiContentGenerator_exports2, {
157359
157362
  createGeminiContentGenerator: () => createGeminiContentGenerator
157360
157363
  });
157361
157364
  function createGeminiContentGenerator(config2, gcConfig) {
157362
- const version2 = "0.2.2-alpha.4";
157365
+ const version2 = "0.2.2";
157363
157366
  const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
157364
157367
  const baseHeaders = {
157365
157368
  "User-Agent": userAgent2
@@ -157579,17 +157582,8 @@ var init_contentGenerator = __esm({
157579
157582
 
157580
157583
  // packages/core/src/utils/retry.ts
157581
157584
  function defaultShouldRetry(error2) {
157582
- if (error2 && typeof error2.status === "number") {
157583
- const status = error2.status;
157584
- if (status === 429 || status >= 500 && status < 600) {
157585
- return true;
157586
- }
157587
- }
157588
- if (error2 instanceof Error && error2.message) {
157589
- if (error2.message.includes("429")) return true;
157590
- if (error2.message.match(/5\d{2}/)) return true;
157591
- }
157592
- return false;
157585
+ const status = getErrorStatus(error2);
157586
+ return status === 429 || status !== void 0 && status >= 500 && status < 600;
157593
157587
  }
157594
157588
  function delay(ms) {
157595
157589
  return new Promise((resolve30) => setTimeout(resolve30, ms));
@@ -157612,7 +157606,6 @@ async function retryWithBackoff(fn, options2) {
157612
157606
  };
157613
157607
  let attempt = 0;
157614
157608
  let currentDelay = initialDelayMs;
157615
- let consecutive429Count = 0;
157616
157609
  while (attempt < maxAttempts) {
157617
157610
  attempt++;
157618
157611
  try {
@@ -157632,26 +157625,16 @@ async function retryWithBackoff(fn, options2) {
157632
157625
  `Qwen API quota exceeded: Your Qwen API quota has been exhausted. Please wait for your quota to reset.`
157633
157626
  );
157634
157627
  }
157635
- if (errorStatus === 429) {
157636
- if (authType === "qwen-oauth" /* QWEN_OAUTH */ && isQwenThrottlingError(error2)) {
157637
- consecutive429Count = 0;
157638
- } else {
157639
- consecutive429Count++;
157640
- }
157641
- } else {
157642
- consecutive429Count = 0;
157643
- }
157644
- console.debug("consecutive429Count", consecutive429Count);
157645
157628
  if (attempt >= maxAttempts || !shouldRetryOnError(error2)) {
157646
157629
  throw error2;
157647
157630
  }
157648
- const { delayDurationMs, errorStatus: delayErrorStatus } = getDelayDurationAndStatus(error2);
157649
- if (delayDurationMs > 0) {
157631
+ const retryAfterMs = errorStatus === 429 ? getRetryAfterDelayMs(error2) : 0;
157632
+ if (retryAfterMs > 0) {
157650
157633
  console.warn(
157651
- `Attempt ${attempt} failed with status ${delayErrorStatus ?? "unknown"}. Retrying after explicit delay of ${delayDurationMs}ms...`,
157634
+ `Attempt ${attempt} failed with status ${errorStatus ?? "unknown"}. Retrying after explicit delay of ${retryAfterMs}ms...`,
157652
157635
  error2
157653
157636
  );
157654
- await delay(delayDurationMs);
157637
+ await delay(retryAfterMs);
157655
157638
  currentDelay = initialDelayMs;
157656
157639
  } else {
157657
157640
  logRetryAttempt(attempt, error2, errorStatus);
@@ -157665,18 +157648,12 @@ async function retryWithBackoff(fn, options2) {
157665
157648
  throw new Error("Retry attempts exhausted");
157666
157649
  }
157667
157650
  function getErrorStatus(error2) {
157668
- if (typeof error2 === "object" && error2 !== null) {
157669
- if ("status" in error2 && typeof error2.status === "number") {
157670
- return error2.status;
157671
- }
157672
- if ("response" in error2 && typeof error2.response === "object" && error2.response !== null) {
157673
- const response = error2.response;
157674
- if ("status" in response && typeof response.status === "number") {
157675
- return response.status;
157676
- }
157677
- }
157651
+ if (typeof error2 !== "object" || error2 === null) {
157652
+ return void 0;
157678
157653
  }
157679
- return void 0;
157654
+ const err = error2;
157655
+ const value = err.status ?? err.statusCode ?? err.response?.status ?? err.error?.code;
157656
+ return typeof value === "number" && value >= 100 && value <= 599 ? value : void 0;
157680
157657
  }
157681
157658
  function getRetryAfterDelayMs(error2) {
157682
157659
  if (typeof error2 === "object" && error2 !== null) {
@@ -157700,37 +157677,12 @@ function getRetryAfterDelayMs(error2) {
157700
157677
  }
157701
157678
  return 0;
157702
157679
  }
157703
- function getDelayDurationAndStatus(error2) {
157704
- const errorStatus = getErrorStatus(error2);
157705
- let delayDurationMs = 0;
157706
- if (errorStatus === 429) {
157707
- delayDurationMs = getRetryAfterDelayMs(error2);
157708
- }
157709
- return { delayDurationMs, errorStatus };
157710
- }
157711
157680
  function logRetryAttempt(attempt, error2, errorStatus) {
157712
- let message = `Attempt ${attempt} failed. Retrying with backoff...`;
157713
- if (errorStatus) {
157714
- message = `Attempt ${attempt} failed with status ${errorStatus}. Retrying with backoff...`;
157715
- }
157681
+ const message = errorStatus ? `Attempt ${attempt} failed with status ${errorStatus}. Retrying with backoff...` : `Attempt ${attempt} failed. Retrying with backoff...`;
157716
157682
  if (errorStatus === 429) {
157717
157683
  console.warn(message, error2);
157718
157684
  } else if (errorStatus && errorStatus >= 500 && errorStatus < 600) {
157719
157685
  console.error(message, error2);
157720
- } else if (error2 instanceof Error) {
157721
- if (error2.message.includes("429")) {
157722
- console.warn(
157723
- `Attempt ${attempt} failed with 429 error (no Retry-After header). Retrying with backoff...`,
157724
- error2
157725
- );
157726
- } else if (error2.message.match(/5\d{2}/)) {
157727
- console.error(
157728
- `Attempt ${attempt} failed with 5xx error. Retrying with backoff...`,
157729
- error2
157730
- );
157731
- } else {
157732
- console.warn(message, error2);
157733
- }
157734
157686
  } else {
157735
157687
  console.warn(message, error2);
157736
157688
  }
@@ -157743,8 +157695,8 @@ var init_retry = __esm({
157743
157695
  init_contentGenerator();
157744
157696
  init_quotaErrorDetection();
157745
157697
  DEFAULT_RETRY_OPTIONS = {
157746
- maxAttempts: 5,
157747
- initialDelayMs: 5e3,
157698
+ maxAttempts: 7,
157699
+ initialDelayMs: 1500,
157748
157700
  maxDelayMs: 3e4,
157749
157701
  // 30 seconds
157750
157702
  shouldRetryOnError: defaultShouldRetry
@@ -157754,7 +157706,6 @@ var init_retry = __esm({
157754
157706
  __name(retryWithBackoff, "retryWithBackoff");
157755
157707
  __name(getErrorStatus, "getErrorStatus");
157756
157708
  __name(getRetryAfterDelayMs, "getRetryAfterDelayMs");
157757
- __name(getDelayDurationAndStatus, "getDelayDurationAndStatus");
157758
157709
  __name(logRetryAttempt, "logRetryAttempt");
157759
157710
  }
157760
157711
  });
@@ -157954,7 +157905,7 @@ var init_baseLlmClient = __esm({
157954
157905
  init_errors();
157955
157906
  init_retry();
157956
157907
  init_generateContentResponseUtilities();
157957
- DEFAULT_MAX_ATTEMPTS = 5;
157908
+ DEFAULT_MAX_ATTEMPTS = 7;
157958
157909
  BaseLlmClient = class {
157959
157910
  constructor(contentGenerator, config2) {
157960
157911
  this.contentGenerator = contentGenerator;
@@ -158470,44 +158421,6 @@ var init_chatRecordingService = __esm({
158470
158421
  }
158471
158422
  });
158472
158423
 
158473
- // packages/core/src/fallback/handler.ts
158474
- async function handleFallback(config2, failedModel, authType, error2) {
158475
- if (authType === "qwen-oauth" /* QWEN_OAUTH */) {
158476
- return handleQwenOAuthError(error2);
158477
- }
158478
- return null;
158479
- }
158480
- async function handleQwenOAuthError(error2) {
158481
- if (!error2) {
158482
- return null;
158483
- }
158484
- const errorMessage = error2 instanceof Error ? error2.message.toLowerCase() : String(error2).toLowerCase();
158485
- const errorCode = error2?.status || error2?.code;
158486
- const isAuthError = errorCode === 401 || errorCode === 403 || errorMessage.includes("unauthorized") || errorMessage.includes("forbidden") || errorMessage.includes("invalid api key") || errorMessage.includes("authentication") || errorMessage.includes("access denied") || errorMessage.includes("token") && errorMessage.includes("expired");
158487
- const isRateLimitError = errorCode === 429 || errorMessage.includes("429") || errorMessage.includes("rate limit") || errorMessage.includes("too many requests");
158488
- if (isAuthError) {
158489
- console.warn("Qwen OAuth authentication error detected:", errorMessage);
158490
- console.log(
158491
- "Note: If this persists, you may need to re-authenticate with Qwen OAuth"
158492
- );
158493
- return null;
158494
- }
158495
- if (isRateLimitError) {
158496
- console.warn("Qwen API rate limit encountered:", errorMessage);
158497
- return null;
158498
- }
158499
- return null;
158500
- }
158501
- var init_handler = __esm({
158502
- "packages/core/src/fallback/handler.ts"() {
158503
- "use strict";
158504
- init_esbuild_shims();
158505
- init_contentGenerator();
158506
- __name(handleFallback, "handleFallback");
158507
- __name(handleQwenOAuthError, "handleQwenOAuthError");
158508
- }
158509
- });
158510
-
158511
158424
  // packages/core/src/core/geminiChat.ts
158512
158425
  function isValidResponse2(response) {
158513
158426
  if (response.usageMetadata) {
@@ -158597,7 +158510,6 @@ var init_geminiChat = __esm({
158597
158510
  init_loggers();
158598
158511
  init_chatRecordingService();
158599
158512
  init_types();
158600
- init_handler();
158601
158513
  init_uiTelemetry();
158602
158514
  StreamEventType = /* @__PURE__ */ ((StreamEventType2) => {
158603
158515
  StreamEventType2["CHUNK"] = "chunk";
@@ -158757,18 +158669,18 @@ var init_geminiChat = __esm({
158757
158669
  },
158758
158670
  prompt_id
158759
158671
  ), "apiCall");
158760
- const onPersistent429Callback = /* @__PURE__ */ __name(async (authType, error2) => await handleFallback(this.config, model, authType, error2), "onPersistent429Callback");
158761
158672
  const streamResponse2 = await retryWithBackoff(apiCall, {
158762
158673
  shouldRetryOnError: /* @__PURE__ */ __name((error2) => {
158763
- if (error2 instanceof ApiError && error2.message) {
158764
- if (error2.status === 400) return false;
158674
+ if (error2 instanceof Error) {
158765
158675
  if (isSchemaDepthError(error2.message)) return false;
158766
- if (error2.status === 429) return true;
158767
- if (error2.status >= 500 && error2.status < 600) return true;
158676
+ if (isInvalidArgumentError(error2.message)) return false;
158768
158677
  }
158678
+ const status = getErrorStatus(error2);
158679
+ if (status === 400) return false;
158680
+ if (status === 429) return true;
158681
+ if (status && status >= 500 && status < 600) return true;
158769
158682
  return false;
158770
158683
  }, "shouldRetryOnError"),
158771
- onPersistent429: onPersistent429Callback,
158772
158684
  authType: this.config.getContentGeneratorConfig()?.authType
158773
158685
  });
158774
158686
  return this.processStreamResponse(model, streamResponse2);
@@ -173360,12 +173272,11 @@ function isShellCommandReadOnly(command2) {
173360
173272
  }
173361
173273
  const segments = splitCommands(command2);
173362
173274
  for (const segment of segments) {
173363
- const isAllowed = evaluateShellSegment(segment);
173364
- if (!isAllowed) {
173275
+ if (!evaluateShellSegment(segment)) {
173365
173276
  return false;
173366
173277
  }
173367
173278
  }
173368
- return true;
173279
+ return segments.length > 0;
173369
173280
  }
173370
173281
  var import_shell_quote, READ_ONLY_ROOT_COMMANDS, BLOCKED_FIND_FLAGS, BLOCKED_FIND_PREFIXES, READ_ONLY_GIT_SUBCOMMANDS, BLOCKED_GIT_REMOTE_ACTIONS, BLOCKED_GIT_BRANCH_FLAGS, BLOCKED_SED_PREFIXES, AWK_SIDE_EFFECT_PATTERNS, SED_SIDE_EFFECT_PATTERNS, ENV_ASSIGNMENT_REGEX;
173371
173282
  var init_shellReadOnlyChecker = __esm({
@@ -173566,6 +173477,13 @@ function splitCommands(command2) {
173566
173477
  } else if (char === ";" || char === "&" || char === "|") {
173567
173478
  commands.push(currentCommand.trim());
173568
173479
  currentCommand = "";
173480
+ } else if (char === "\r" && nextChar === "\n") {
173481
+ commands.push(currentCommand.trim());
173482
+ currentCommand = "";
173483
+ i3++;
173484
+ } else if (char === "\n") {
173485
+ commands.push(currentCommand.trim());
173486
+ currentCommand = "";
173569
173487
  } else {
173570
173488
  currentCommand += char;
173571
173489
  }
@@ -174434,6 +174352,7 @@ var init_coreToolScheduler = __esm({
174434
174352
  "use strict";
174435
174353
  init_esbuild_shims();
174436
174354
  init_src2();
174355
+ init_tool_names();
174437
174356
  init_generateContentResponseUtilities();
174438
174357
  init_modifiable_tool();
174439
174358
  init_lib();
@@ -174658,15 +174577,21 @@ var init_coreToolScheduler = __esm({
174658
174577
  }
174659
174578
  }
174660
174579
  /**
174661
- * Generates a suggestion string for a tool name that was not found in the registry.
174662
- * Uses Levenshtein distance to suggest similar tool names for hallucinated or misspelled tools.
174663
- * Note: Excluded tools are handled separately before calling this method, so this only
174664
- * handles the case where a tool is truly not found (hallucinated or typo).
174665
- * @param unknownToolName The tool name that was not found.
174666
- * @param topN The number of suggestions to return. Defaults to 3.
174667
- * @returns A suggestion string like " Did you mean 'tool'?" or " Did you mean one of: 'tool1', 'tool2'?",
174668
- * or an empty string if no suggestions are found.
174580
+ * Generates error message for unknown tool. Returns early with skill-specific
174581
+ * message if the name matches a skill, otherwise uses Levenshtein suggestions.
174669
174582
  */
174583
+ getToolNotFoundMessage(unknownToolName, topN = 3) {
174584
+ const skillTool = this.toolRegistry.getTool(ToolNames.SKILL);
174585
+ if (skillTool instanceof SkillTool) {
174586
+ const availableSkillNames = skillTool.getAvailableSkillNames();
174587
+ if (availableSkillNames.includes(unknownToolName)) {
174588
+ return `"${unknownToolName}" is a skill name, not a tool name. To use this skill, invoke the "${ToolNames.SKILL}" tool with parameter: skill: "${unknownToolName}"`;
174589
+ }
174590
+ }
174591
+ const suggestion = this.getToolSuggestion(unknownToolName, topN);
174592
+ return `Tool "${unknownToolName}" not found in registry. Tools must use the exact names that are registered.${suggestion}`;
174593
+ }
174594
+ /** Suggests similar tool names using Levenshtein distance. */
174670
174595
  getToolSuggestion(unknownToolName, topN = 3) {
174671
174596
  const allToolNames = this.toolRegistry.getAllToolNames();
174672
174597
  const matches = allToolNames.map((toolName) => ({
@@ -174747,8 +174672,7 @@ var init_coreToolScheduler = __esm({
174747
174672
  }
174748
174673
  const toolInstance = this.toolRegistry.getTool(reqInfo.name);
174749
174674
  if (!toolInstance) {
174750
- const suggestion = this.getToolSuggestion(reqInfo.name);
174751
- const errorMessage = `Tool "${reqInfo.name}" not found in registry. Tools must use the exact names that are registered.${suggestion}`;
174675
+ const errorMessage = this.getToolNotFoundMessage(reqInfo.name);
174752
174676
  return {
174753
174677
  status: "error",
174754
174678
  request: reqInfo,
@@ -175844,12 +175768,14 @@ var init_subagent = __esm({
175844
175768
  const hadFunctionCallsFromHelper = resp.functionCalls && resp.functionCalls.length > 0;
175845
175769
  for (const p2 of parts) {
175846
175770
  const txt = p2.text;
175847
- if (txt) roundText += txt;
175771
+ const isThought = p2.thought ?? false;
175772
+ if (txt && !isThought) roundText += txt;
175848
175773
  if (txt)
175849
175774
  this.eventEmitter?.emit("stream_text" /* STREAM_TEXT */, {
175850
175775
  subagentId: this.subagentId,
175851
175776
  round: turnCounter,
175852
175777
  text: txt,
175778
+ thought: isThought,
175853
175779
  timestamp: Date.now()
175854
175780
  });
175855
175781
  if (!hadFunctionCallsFromHelper) {
@@ -182224,7 +182150,6 @@ var init_client2 = __esm({
182224
182150
  init_retry();
182225
182151
  init_ideContext();
182226
182152
  init_types7();
182227
- init_handler();
182228
182153
  MAX_TURNS = 100;
182229
182154
  GeminiClient = class {
182230
182155
  constructor(config2) {
@@ -182643,12 +182568,7 @@ var init_client2 = __esm({
182643
182568
  this.lastPromptId
182644
182569
  );
182645
182570
  }, "apiCall");
182646
- const onPersistent429Callback = /* @__PURE__ */ __name(async (authType, error2) => (
182647
- // Pass the captured model to the centralized handler.
182648
- await handleFallback(this.config, currentAttemptModel, authType, error2)
182649
- ), "onPersistent429Callback");
182650
182571
  const result = await retryWithBackoff(apiCall, {
182651
- onPersistent429: onPersistent429Callback,
182652
182572
  authType: this.config.getContentGeneratorConfig()?.authType
182653
182573
  });
182654
182574
  return result;
@@ -223513,7 +223433,7 @@ function createFsWatchInstance(path129, options2, listener, errHandler, emitRaw)
223513
223433
  }
223514
223434
  }
223515
223435
  var STR_DATA, STR_END, STR_CLOSE, EMPTY_FN, pl, isWindows2, isMacos, isLinux, isFreeBSD, isIBMi, EVENTS, EV, THROTTLE_MODE_WATCH, statMethods, KEY_LISTENERS, KEY_ERR, KEY_RAW, HANDLER_KEYS, binaryExtensions, isBinaryPath, foreach, addAndConvert, clearItem, delFromSet, isEmptySet, FsWatchInstances, fsWatchBroadcast, setFsWatchListener, FsWatchFileInstances, setFsWatchFileListener, NodeFsHandler;
223516
- var init_handler2 = __esm({
223436
+ var init_handler = __esm({
223517
223437
  "node_modules/chokidar/esm/handler.js"() {
223518
223438
  init_esbuild_shims();
223519
223439
  STR_DATA = "data";
@@ -224335,7 +224255,7 @@ var init_esm21 = __esm({
224335
224255
  "node_modules/chokidar/esm/index.js"() {
224336
224256
  init_esbuild_shims();
224337
224257
  init_esm20();
224338
- init_handler2();
224258
+ init_handler();
224339
224259
  SLASH = "/";
224340
224260
  SLASH_SLASH = "//";
224341
224261
  ONE_DOT = ".";
@@ -234477,7 +234397,9 @@ var init_storage2 = __esm({
234477
234397
  return storage.getExtensionsDir();
234478
234398
  }
234479
234399
  static async createTmpDir() {
234480
- return await fs60.promises.mkdtemp(path62.join(os24.tmpdir(), "rdmind-extension"));
234400
+ return await fs60.promises.mkdtemp(
234401
+ path62.join(os24.tmpdir(), "rdmind-extension")
234402
+ );
234481
234403
  }
234482
234404
  };
234483
234405
  }
@@ -236951,22 +236873,24 @@ async function convertClaudePluginPackage(extensionDir, pluginName) {
236951
236873
  const tmpDir = await ExtensionStorage.createTmpDir();
236952
236874
  try {
236953
236875
  await copyDirectory(pluginSource, tmpDir);
236954
- if (mergedConfig.commands) {
236955
- const commandsDestDir = path64.join(tmpDir, "commands");
236956
- await collectResources(
236957
- mergedConfig.commands,
236958
- pluginSource,
236959
- commandsDestDir
236960
- );
236961
- }
236962
- if (mergedConfig.skills) {
236963
- const skillsDestDir = path64.join(tmpDir, "skills");
236964
- await collectResources(mergedConfig.skills, pluginSource, skillsDestDir);
236876
+ const resourceConfigs = [
236877
+ { name: "commands", config: mergedConfig.commands },
236878
+ { name: "skills", config: mergedConfig.skills },
236879
+ { name: "agents", config: mergedConfig.agents }
236880
+ ];
236881
+ for (const { name: name3, config: config2 } of resourceConfigs) {
236882
+ const folderPath = path64.join(tmpDir, name3);
236883
+ const sourceFolderPath = path64.join(pluginSource, name3);
236884
+ if (config2) {
236885
+ if (fs62.existsSync(folderPath)) {
236886
+ fs62.rmSync(folderPath, { recursive: true, force: true });
236887
+ }
236888
+ await collectResources(config2, pluginSource, folderPath);
236889
+ } else if (!fs62.existsSync(sourceFolderPath) && fs62.existsSync(folderPath)) {
236890
+ fs62.rmSync(folderPath, { recursive: true, force: true });
236891
+ }
236965
236892
  }
236966
236893
  const agentsDestDir = path64.join(tmpDir, "agents");
236967
- if (mergedConfig.agents) {
236968
- await collectResources(mergedConfig.agents, pluginSource, agentsDestDir);
236969
- }
236970
236894
  await convertAgentFiles(agentsDestDir);
236971
236895
  const qwenConfig = convertClaudeToQwenConfig(mergedConfig);
236972
236896
  const qwenConfigPath = path64.join(tmpDir, "rdmind-extension.json");
@@ -237009,6 +236933,7 @@ async function collectResources(resourcePaths, pluginRoot, destDir) {
237009
236933
  );
237010
236934
  continue;
237011
236935
  }
236936
+ const finalDestDir = path64.join(destDir, dirName);
237012
236937
  const files = await glob("**/*", {
237013
236938
  cwd: resolvedPath,
237014
236939
  nodir: true,
@@ -237016,7 +236941,7 @@ async function collectResources(resourcePaths, pluginRoot, destDir) {
237016
236941
  });
237017
236942
  for (const file of files) {
237018
236943
  const srcFile = path64.join(resolvedPath, file);
237019
- const destFile = path64.join(destDir, file);
236944
+ const destFile = path64.join(finalDestDir, file);
237020
236945
  const destFileDir = path64.dirname(destFile);
237021
236946
  if (!fs62.existsSync(destFileDir)) {
237022
236947
  fs62.mkdirSync(destFileDir, { recursive: true });
@@ -247481,7 +247406,7 @@ var init_config3 = __esm({
247481
247406
  contentGeneratorConfigSources = {};
247482
247407
  contentGenerator;
247483
247408
  embeddingModel;
247484
- _modelsConfig;
247409
+ modelsConfig;
247485
247410
  modelProvidersConfig;
247486
247411
  sandbox;
247487
247412
  targetDir;
@@ -247665,7 +247590,7 @@ var init_config3 = __esm({
247665
247590
  if (params.contextFileName) {
247666
247591
  setGeminiMdFilename(params.contextFileName);
247667
247592
  }
247668
- this._modelsConfig = new ModelsConfig({
247593
+ this.modelsConfig = new ModelsConfig({
247669
247594
  initialAuthType: params.authType ?? params.generationConfig?.authType,
247670
247595
  modelProvidersConfig: this.modelProvidersConfig,
247671
247596
  generationConfig: {
@@ -247742,8 +247667,8 @@ var init_config3 = __esm({
247742
247667
  * Get the ModelsConfig instance for model-related operations.
247743
247668
  * External code (e.g., CLI) can use this to access model configuration.
247744
247669
  */
247745
- get modelsConfig() {
247746
- return this._modelsConfig;
247670
+ getModelsConfig() {
247671
+ return this.modelsConfig;
247747
247672
  }
247748
247673
  /**
247749
247674
  * Updates the credentials in the generation config.
@@ -247751,22 +247676,22 @@ var init_config3 = __esm({
247751
247676
  * Delegates to ModelsConfig.
247752
247677
  */
247753
247678
  updateCredentials(credentials, settingsGenerationConfig) {
247754
- this._modelsConfig.updateCredentials(credentials, settingsGenerationConfig);
247679
+ this.modelsConfig.updateCredentials(credentials, settingsGenerationConfig);
247755
247680
  }
247756
247681
  /**
247757
247682
  * Refresh authentication and rebuild ContentGenerator.
247758
247683
  */
247759
247684
  async refreshAuth(authMethod, isInitialAuth) {
247760
- const modelId = this._modelsConfig.getModel();
247761
- this._modelsConfig.syncAfterAuthRefresh(authMethod, modelId);
247762
- const requireCached = this._modelsConfig.consumeRequireCachedCredentialsFlag();
247685
+ const modelId = this.modelsConfig.getModel();
247686
+ this.modelsConfig.syncAfterAuthRefresh(authMethod, modelId);
247687
+ const requireCached = this.modelsConfig.consumeRequireCachedCredentialsFlag();
247763
247688
  const { config: config2, sources } = resolveContentGeneratorConfigWithSources(
247764
247689
  this,
247765
247690
  authMethod,
247766
- this._modelsConfig.getGenerationConfig(),
247767
- this._modelsConfig.getGenerationConfigSources(),
247691
+ this.modelsConfig.getGenerationConfig(),
247692
+ this.modelsConfig.getGenerationConfigSources(),
247768
247693
  {
247769
- strictModelProvider: this._modelsConfig.isStrictModelProviderSelection()
247694
+ strictModelProvider: this.modelsConfig.isStrictModelProviderSelection()
247770
247695
  }
247771
247696
  );
247772
247697
  const newContentGeneratorConfig = config2;
@@ -247834,20 +247759,20 @@ var init_config3 = __esm({
247834
247759
  return this.contentGeneratorConfig;
247835
247760
  }
247836
247761
  getContentGeneratorConfigSources() {
247837
- if (Object.keys(this.contentGeneratorConfigSources).length === 0 && this._modelsConfig) {
247838
- return this._modelsConfig.getGenerationConfigSources();
247762
+ if (Object.keys(this.contentGeneratorConfigSources).length === 0 && this.modelsConfig) {
247763
+ return this.modelsConfig.getGenerationConfigSources();
247839
247764
  }
247840
247765
  return this.contentGeneratorConfigSources;
247841
247766
  }
247842
247767
  getModel() {
247843
- return this.contentGeneratorConfig?.model || this._modelsConfig.getModel();
247768
+ return this.contentGeneratorConfig?.model || this.modelsConfig.getModel();
247844
247769
  }
247845
247770
  /**
247846
247771
  * Set model programmatically (e.g., VLM auto-switch, fallback).
247847
247772
  * Delegates to ModelsConfig.
247848
247773
  */
247849
247774
  async setModel(newModel, metadata) {
247850
- await this._modelsConfig.setModel(newModel, metadata);
247775
+ await this.modelsConfig.setModel(newModel, metadata);
247851
247776
  if (this.contentGeneratorConfig) {
247852
247777
  this.contentGeneratorConfig.model = newModel;
247853
247778
  }
@@ -247864,10 +247789,10 @@ var init_config3 = __esm({
247864
247789
  const { config: config2, sources } = resolveContentGeneratorConfigWithSources(
247865
247790
  this,
247866
247791
  authType,
247867
- this._modelsConfig.getGenerationConfig(),
247868
- this._modelsConfig.getGenerationConfigSources(),
247792
+ this.modelsConfig.getGenerationConfig(),
247793
+ this.modelsConfig.getGenerationConfigSources(),
247869
247794
  {
247870
- strictModelProvider: this._modelsConfig.isStrictModelProviderSelection()
247795
+ strictModelProvider: this.modelsConfig.isStrictModelProviderSelection()
247871
247796
  }
247872
247797
  );
247873
247798
  this.contentGeneratorConfig.model = config2.model;
@@ -247891,14 +247816,14 @@ var init_config3 = __esm({
247891
247816
  * Delegates to ModelsConfig.
247892
247817
  */
247893
247818
  getAvailableModels() {
247894
- return this._modelsConfig.getAvailableModels();
247819
+ return this.modelsConfig.getAvailableModels();
247895
247820
  }
247896
247821
  /**
247897
247822
  * Get available models for a specific authType.
247898
247823
  * Delegates to ModelsConfig.
247899
247824
  */
247900
247825
  getAvailableModelsForAuthType(authType) {
247901
- return this._modelsConfig.getAvailableModelsForAuthType(authType);
247826
+ return this.modelsConfig.getAvailableModelsForAuthType(authType);
247902
247827
  }
247903
247828
  /**
247904
247829
  * Switch authType+model via registry-backed selection.
@@ -247911,7 +247836,7 @@ var init_config3 = __esm({
247911
247836
  * @param metadata - Metadata for logging/tracking
247912
247837
  */
247913
247838
  async switchModel(authType, modelId, options2, metadata) {
247914
- await this._modelsConfig.switchModel(authType, modelId, options2, metadata);
247839
+ await this.modelsConfig.switchModel(authType, modelId, options2, metadata);
247915
247840
  }
247916
247841
  getMaxSessionTurns() {
247917
247842
  return this.maxSessionTurns;
@@ -254755,8 +254680,8 @@ var init_git_commit = __esm({
254755
254680
  "packages/core/src/generated/git-commit.ts"() {
254756
254681
  "use strict";
254757
254682
  init_esbuild_shims();
254758
- GIT_COMMIT_INFO = "ebe48cf8a";
254759
- CLI_VERSION = "0.2.2-alpha.4";
254683
+ GIT_COMMIT_INFO = "2ca4ee323";
254684
+ CLI_VERSION = "0.2.2";
254760
254685
  }
254761
254686
  });
254762
254687
 
@@ -255970,7 +255895,6 @@ __export(core_exports5, {
255970
255895
  isPrivateIp: () => isPrivateIp,
255971
255896
  isProQuotaExceededError: () => isProQuotaExceededError,
255972
255897
  isQwenQuotaExceededError: () => isQwenQuotaExceededError,
255973
- isQwenThrottlingError: () => isQwenThrottlingError,
255974
255898
  isSchemaDepthError: () => isSchemaDepthError,
255975
255899
  isSdkMcpServerConfig: () => isSdkMcpServerConfig,
255976
255900
  isStructuredError: () => isStructuredError,
@@ -290123,12 +290047,12 @@ var require_backend = __commonJS({
290123
290047
  (_console = console).log.apply(_console, ["%cAgent %c".concat(methodName), "color: purple; font-weight: bold;", "font-weight: bold;"].concat(args));
290124
290048
  }
290125
290049
  }, "debug");
290126
- var Agent3 = /* @__PURE__ */ function(_EventEmitter) {
290127
- agent_inherits(Agent4, _EventEmitter);
290128
- var _super = agent_createSuper(Agent4);
290129
- function Agent4(bridge) {
290050
+ var Agent4 = /* @__PURE__ */ function(_EventEmitter) {
290051
+ agent_inherits(Agent5, _EventEmitter);
290052
+ var _super = agent_createSuper(Agent5);
290053
+ function Agent5(bridge) {
290130
290054
  var _this;
290131
- agent_classCallCheck(this, Agent4);
290055
+ agent_classCallCheck(this, Agent5);
290132
290056
  _this = _super.call(this);
290133
290057
  agent_defineProperty(agent_assertThisInitialized(_this), "_isProfiling", false);
290134
290058
  agent_defineProperty(agent_assertThisInitialized(_this), "_recordChangeDescriptions", false);
@@ -290528,8 +290452,8 @@ var require_backend = __commonJS({
290528
290452
  TraceUpdates_initialize(agent_assertThisInitialized(_this));
290529
290453
  return _this;
290530
290454
  }
290531
- __name(Agent4, "Agent");
290532
- agent_createClass(Agent4, [{
290455
+ __name(Agent5, "Agent");
290456
+ agent_createClass(Agent5, [{
290533
290457
  key: "getInstanceAndStyle",
290534
290458
  value: /* @__PURE__ */ __name(function getInstanceAndStyle(_ref22) {
290535
290459
  var id = _ref22.id, rendererID = _ref22.rendererID;
@@ -290601,7 +290525,7 @@ var require_backend = __commonJS({
290601
290525
  return this._rendererInterfaces;
290602
290526
  }, "get")
290603
290527
  }]);
290604
- return Agent4;
290528
+ return Agent5;
290605
290529
  }(EventEmitter12);
290606
290530
  ;
290607
290531
  function hook_typeof(obj) {
@@ -292469,7 +292393,7 @@ var require_backend = __commonJS({
292469
292393
  if (window.__REACT_DEVTOOLS_COMPONENT_FILTERS__ == null) {
292470
292394
  bridge.send("overrideComponentFilters", savedComponentFilters);
292471
292395
  }
292472
- var agent2 = new Agent3(bridge);
292396
+ var agent2 = new Agent4(bridge);
292473
292397
  agent2.addListener("shutdown", function() {
292474
292398
  hook.emit("shutdown");
292475
292399
  });
@@ -294269,8 +294193,54 @@ var init_trustedFolders = __esm({
294269
294193
  }
294270
294194
  });
294271
294195
 
294196
+ // packages/cli/src/i18n/languages.ts
294197
+ function getLanguageNameFromLocale(locale) {
294198
+ const lang = SUPPORTED_LANGUAGES.find((l3) => l3.code === locale);
294199
+ return lang?.fullName || "English";
294200
+ }
294201
+ function getLanguageSettingsOptions() {
294202
+ return [
294203
+ { value: "auto", label: "Auto (detect from system)" },
294204
+ ...SUPPORTED_LANGUAGES.map((l3) => ({
294205
+ value: l3.code,
294206
+ label: l3.nativeName ? `${l3.nativeName} (${l3.fullName})` : `${l3.fullName} (${l3.id})`
294207
+ }))
294208
+ ];
294209
+ }
294210
+ function getSupportedLanguageIds(separator = "|") {
294211
+ return SUPPORTED_LANGUAGES.map((l3) => l3.id).join(separator);
294212
+ }
294213
+ var SUPPORTED_LANGUAGES;
294214
+ var init_languages = __esm({
294215
+ "packages/cli/src/i18n/languages.ts"() {
294216
+ "use strict";
294217
+ init_esbuild_shims();
294218
+ SUPPORTED_LANGUAGES = [
294219
+ {
294220
+ code: "en",
294221
+ id: "en-US",
294222
+ fullName: "English",
294223
+ nativeName: "English"
294224
+ },
294225
+ {
294226
+ code: "zh",
294227
+ id: "zh-CN",
294228
+ fullName: "Chinese",
294229
+ nativeName: "\u4E2D\u6587"
294230
+ }
294231
+ ];
294232
+ __name(getLanguageNameFromLocale, "getLanguageNameFromLocale");
294233
+ __name(getLanguageSettingsOptions, "getLanguageSettingsOptions");
294234
+ __name(getSupportedLanguageIds, "getSupportedLanguageIds");
294235
+ }
294236
+ });
294237
+
294272
294238
  // packages/cli/src/config/settingsSchema.ts
294273
294239
  function getSettingsSchema() {
294240
+ const schema = SETTINGS_SCHEMA;
294241
+ if (schema["general"]?.properties?.["language"]) {
294242
+ schema["general"].properties["language"].options = getLanguageSettingsOptions();
294243
+ }
294274
294244
  return SETTINGS_SCHEMA;
294275
294245
  }
294276
294246
  var TOGGLE_TYPES, SETTINGS_SCHEMA;
@@ -294279,6 +294249,7 @@ var init_settingsSchema = __esm({
294279
294249
  "use strict";
294280
294250
  init_esbuild_shims();
294281
294251
  init_core5();
294252
+ init_languages();
294282
294253
  TOGGLE_TYPES = /* @__PURE__ */ new Set([
294283
294254
  "boolean",
294284
294255
  "enum"
@@ -294397,11 +294368,7 @@ var init_settingsSchema = __esm({
294397
294368
  default: "auto",
294398
294369
  description: 'The language for the user interface. Use "auto" to detect from system settings. You can also use custom language codes (e.g., "es", "fr") by placing JS language files in ~/.rdmind/locales/ (e.g., ~/.rdmind/locales/es.js).',
294399
294370
  showInDialog: true,
294400
- options: [
294401
- { value: "auto", label: "Auto (detect from system)" },
294402
- { value: "en", label: "English" },
294403
- { value: "zh", label: "\u4E2D\u6587 (Chinese)" }
294404
- ]
294371
+ options: []
294405
294372
  },
294406
294373
  outputLanguage: {
294407
294374
  type: "string",
@@ -294409,7 +294376,7 @@ var init_settingsSchema = __esm({
294409
294376
  category: "General",
294410
294377
  requiresRestart: true,
294411
294378
  default: "auto",
294412
- description: 'The language for LLM output. Use "auto" to detect from system settings, or set a specific language (e.g., "English", "\u4E2D\u6587", "\u65E5\u672C\u8A9E").',
294379
+ description: 'The language for LLM output. Use "auto" to detect from system settings, or set a specific language.',
294413
294380
  showInDialog: true
294414
294381
  },
294415
294382
  terminalBell: {
@@ -304292,7 +304259,7 @@ var init_en3 = __esm({
304292
304259
  // ============================================================================
304293
304260
  // System Information Fields
304294
304261
  // ============================================================================
304295
- "RDMind": "RDMind",
304262
+ RDMind: "RDMind",
304296
304263
  Runtime: "Runtime",
304297
304264
  OS: "OS",
304298
304265
  Auth: "Auth",
@@ -304604,6 +304571,17 @@ var init_en3 = __esm({
304604
304571
  "Update all extensions.": "Update all extensions.",
304605
304572
  "Either an extension name or --all must be provided": "Either an extension name or --all must be provided",
304606
304573
  "Lists installed extensions.": "Lists installed extensions.",
304574
+ "Path:": "Path:",
304575
+ "Source:": "Source:",
304576
+ "Type:": "Type:",
304577
+ "Ref:": "Ref:",
304578
+ "Release tag:": "Release tag:",
304579
+ "Enabled (User):": "Enabled (User):",
304580
+ "Enabled (Workspace):": "Enabled (Workspace):",
304581
+ "Context files:": "Context files:",
304582
+ "Skills:": "Skills:",
304583
+ "Agents:": "Agents:",
304584
+ "MCP servers:": "MCP servers:",
304607
304585
  "Link extension failed to install.": "Link extension failed to install.",
304608
304586
  'Extension "{{name}}" linked successfully and enabled.': 'Extension "{{name}}" linked successfully and enabled.',
304609
304587
  "Links an extension from a local path. Updates made to the local path will always be reflected.": "Links an extension from a local path. Updates made to the local path will always be reflected.",
@@ -304662,18 +304640,19 @@ var init_en3 = __esm({
304662
304640
  // ============================================================================
304663
304641
  // Commands - Language
304664
304642
  // ============================================================================
304665
- "Invalid language. Available: en-US, zh-CN": "Invalid language. Available: en-US, zh-CN",
304643
+ "Invalid language. Available: {{options}}": "Invalid language. Available: {{options}}",
304666
304644
  "Language subcommands do not accept additional arguments.": "Language subcommands do not accept additional arguments.",
304667
304645
  "Current UI language: {{lang}}": "Current UI language: {{lang}}",
304668
304646
  "Current LLM output language: {{lang}}": "Current LLM output language: {{lang}}",
304669
304647
  "LLM output language not set": "LLM output language not set",
304670
304648
  "Set UI language": "Set UI language",
304671
304649
  "Set LLM output language": "Set LLM output language",
304672
- "Usage: /language ui [zh-CN|en-US]": "Usage: /language ui [zh-CN|en-US]",
304650
+ "Usage: /language ui [{{options}}]": "Usage: /language ui [{{options}}]",
304673
304651
  "Usage: /language output <language>": "Usage: /language output <language>",
304674
304652
  "Example: /language output \u4E2D\u6587": "Example: /language output \u4E2D\u6587",
304675
304653
  "Example: /language output English": "Example: /language output English",
304676
304654
  "Example: /language output \u65E5\u672C\u8A9E": "Example: /language output \u65E5\u672C\u8A9E",
304655
+ "Example: /language output Portugu\xEAs": "Example: /language output Portugu\xEAs",
304677
304656
  "UI language changed to {{lang}}": "UI language changed to {{lang}}",
304678
304657
  "LLM output language set to {{lang}}": "LLM output language set to {{lang}}",
304679
304658
  "LLM output language rule file generated at {{path}}": "LLM output language rule file generated at {{path}}",
@@ -304683,10 +304662,7 @@ var init_en3 = __esm({
304683
304662
  "Available subcommands:": "Available subcommands:",
304684
304663
  "To request additional UI language packs, please open an issue on GitHub.": "To request additional UI language packs, please open an issue on GitHub.",
304685
304664
  "Available options:": "Available options:",
304686
- " - zh-CN: Simplified Chinese": " - zh-CN: Simplified Chinese",
304687
- " - en-US: English": " - en-US: English",
304688
- "Set UI language to Simplified Chinese (zh-CN)": "Set UI language to Simplified Chinese (zh-CN)",
304689
- "Set UI language to English (en-US)": "Set UI language to English (en-US)",
304665
+ "Set UI language to {{name}}": "Set UI language to {{name}}",
304690
304666
  // ============================================================================
304691
304667
  // Commands - Approval Mode
304692
304668
  // ============================================================================
@@ -305043,6 +305019,7 @@ var init_en3 = __esm({
305043
305019
  "RDMind now supports custom commands, sub-agents, skills and other features. Check the documentation for usage help.": "RDMind now supports custom commands, sub-agents, skills and other features. Check the documentation for usage help.",
305044
305020
  "Try asking RDMind to help you commit code.": "Try asking RDMind to help you commit code.",
305045
305021
  "RDMind can read REDoc. Please do not upload documents involving user privacy and core algorithms.": "RDMind can read REDoc. Please do not upload documents involving user privacy and core algorithms.",
305022
+ "If you find RDMind useful, feel free to recommend it to your colleagues~": "If you find RDMind useful, feel free to recommend it to your colleagues~",
305046
305023
  // ============================================================================
305047
305024
  // Exit Screen / Stats
305048
305025
  // ============================================================================
@@ -305288,6 +305265,1719 @@ var init_en3 = __esm({
305288
305265
  }
305289
305266
  });
305290
305267
 
305268
+ // packages/cli/src/i18n/locales/ja.js
305269
+ var ja_exports = {};
305270
+ __export(ja_exports, {
305271
+ default: () => ja_default
305272
+ });
305273
+ var ja_default;
305274
+ var init_ja = __esm({
305275
+ "packages/cli/src/i18n/locales/ja.js"() {
305276
+ "use strict";
305277
+ init_esbuild_shims();
305278
+ ja_default = {
305279
+ // ============================================================================
305280
+ // Help / UI Components
305281
+ // ============================================================================
305282
+ "Basics:": "\u57FA\u672C\u64CD\u4F5C:",
305283
+ "Add context": "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u8FFD\u52A0",
305284
+ "Use {{symbol}} to specify files for context (e.g., {{example}}) to target specific files or folders.": "{{symbol}} \u3092\u4F7F\u7528\u3057\u3066\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u7528\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u6307\u5B9A\u3057\u307E\u3059(\u4F8B: {{example}}) \u307E\u305F\u3001\u7279\u5B9A\u306E\u30D5\u30A1\u30A4\u30EB\u3084\u30D5\u30A9\u30EB\u30C0\u3092\u5BFE\u8C61\u306B\u3067\u304D\u307E\u3059",
305285
+ "@": "@",
305286
+ "@src/myFile.ts": "@src/myFile.ts",
305287
+ "Shell mode": "\u30B7\u30A7\u30EB\u30E2\u30FC\u30C9",
305288
+ "YOLO mode": "YOLO\u30E2\u30FC\u30C9",
305289
+ "plan mode": "\u30D7\u30E9\u30F3\u30E2\u30FC\u30C9",
305290
+ "auto-accept edits": "\u7DE8\u96C6\u3092\u81EA\u52D5\u627F\u8A8D",
305291
+ "Accepting edits": "\u7DE8\u96C6\u3092\u627F\u8A8D\u4E2D",
305292
+ "(shift + tab to cycle)": "(Shift + Tab \u3067\u5207\u308A\u66FF\u3048)",
305293
+ "Execute shell commands via {{symbol}} (e.g., {{example1}}) or use natural language (e.g., {{example2}}).": "{{symbol}} \u3067\u30B7\u30A7\u30EB\u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C(\u4F8B: {{example1}})\u3001\u307E\u305F\u306F\u81EA\u7136\u8A00\u8A9E\u3067\u5165\u529B(\u4F8B: {{example2}})",
305294
+ "!": "!",
305295
+ "!npm run start": "!npm run start",
305296
+ "start server": "\u30B5\u30FC\u30D0\u30FC\u3092\u8D77\u52D5",
305297
+ "Commands:": "\u30B3\u30DE\u30F3\u30C9:",
305298
+ "shell command": "\u30B7\u30A7\u30EB\u30B3\u30DE\u30F3\u30C9",
305299
+ "Model Context Protocol command (from external servers)": "Model Context Protocol \u30B3\u30DE\u30F3\u30C9(\u5916\u90E8\u30B5\u30FC\u30D0\u30FC\u304B\u3089)",
305300
+ "Keyboard Shortcuts:": "\u30AD\u30FC\u30DC\u30FC\u30C9\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8:",
305301
+ "Jump through words in the input": "\u5165\u529B\u6B04\u306E\u5358\u8A9E\u9593\u3092\u79FB\u52D5",
305302
+ "Close dialogs, cancel requests, or quit application": "\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u9589\u3058\u308B\u3001\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3001\u307E\u305F\u306F\u30A2\u30D7\u30EA\u3092\u7D42\u4E86",
305303
+ "New line": "\u6539\u884C",
305304
+ "New line (Alt+Enter works for certain linux distros)": "\u6539\u884C(\u4E00\u90E8\u306ELinux\u30C7\u30A3\u30B9\u30C8\u30EA\u30D3\u30E5\u30FC\u30B7\u30E7\u30F3\u3067\u306FAlt+Enter\u304C\u6709\u52B9)",
305305
+ "Clear the screen": "\u753B\u9762\u3092\u30AF\u30EA\u30A2",
305306
+ "Open input in external editor": "\u5916\u90E8\u30A8\u30C7\u30A3\u30BF\u3067\u5165\u529B\u3092\u958B\u304F",
305307
+ "Send message": "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u4FE1",
305308
+ "Initializing...": "\u521D\u671F\u5316\u4E2D...",
305309
+ "Connecting to MCP servers... ({{connected}}/{{total}})": "MCP\u30B5\u30FC\u30D0\u30FC\u306B\u63A5\u7D9A\u4E2D... ({{connected}}/{{total}})",
305310
+ "Type your message or @path/to/file": "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u3001@\u30D1\u30B9/\u30D5\u30A1\u30A4\u30EB\u3067\u30D5\u30A1\u30A4\u30EB\u3092\u6DFB\u4ED8(D&D\u5BFE\u5FDC)",
305311
+ "Press 'i' for INSERT mode and 'Esc' for NORMAL mode.": "'i' \u3067INSERT\u30E2\u30FC\u30C9\u3001'Esc' \u3067NORMAL\u30E2\u30FC\u30C9",
305312
+ "Cancel operation / Clear input (double press)": "\u64CD\u4F5C\u3092\u30AD\u30E3\u30F3\u30BB\u30EB / \u5165\u529B\u3092\u30AF\u30EA\u30A2(2\u56DE\u62BC\u3057)",
305313
+ "Cycle approval modes": "\u627F\u8A8D\u30E2\u30FC\u30C9\u3092\u5207\u308A\u66FF\u3048",
305314
+ "Cycle through your prompt history": "\u30D7\u30ED\u30F3\u30D7\u30C8\u5C65\u6B74\u3092\u9806\u306B\u8868\u793A",
305315
+ "For a full list of shortcuts, see {{docPath}}": "\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u306E\u5B8C\u5168\u306A\u30EA\u30B9\u30C8\u306F {{docPath}} \u3092\u53C2\u7167",
305316
+ "docs/keyboard-shortcuts.md": "docs/keyboard-shortcuts.md",
305317
+ "for help on Qwen Code": "Qwen Code \u306E\u30D8\u30EB\u30D7",
305318
+ "show version info": "\u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\u8868\u793A",
305319
+ "submit a bug report": "\u30D0\u30B0\u30EC\u30DD\u30FC\u30C8\u3092\u9001\u4FE1",
305320
+ "About Qwen Code": "Qwen Code \u306B\u3064\u3044\u3066",
305321
+ // ============================================================================
305322
+ // System Information Fields
305323
+ // ============================================================================
305324
+ "CLI Version": "CLI\u30D0\u30FC\u30B8\u30E7\u30F3",
305325
+ "Git Commit": "Git\u30B3\u30DF\u30C3\u30C8",
305326
+ Model: "\u30E2\u30C7\u30EB",
305327
+ Sandbox: "\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9",
305328
+ "OS Platform": "OS\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0",
305329
+ "OS Arch": "OS\u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3",
305330
+ "OS Release": "OS\u30EA\u30EA\u30FC\u30B9",
305331
+ "Node.js Version": "Node.js \u30D0\u30FC\u30B8\u30E7\u30F3",
305332
+ "NPM Version": "NPM \u30D0\u30FC\u30B8\u30E7\u30F3",
305333
+ "Session ID": "\u30BB\u30C3\u30B7\u30E7\u30F3ID",
305334
+ "Auth Method": "\u8A8D\u8A3C\u65B9\u5F0F",
305335
+ "Base URL": "\u30D9\u30FC\u30B9URL",
305336
+ "Memory Usage": "\u30E1\u30E2\u30EA\u4F7F\u7528\u91CF",
305337
+ "IDE Client": "IDE\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8",
305338
+ // ============================================================================
305339
+ // Commands - General
305340
+ // ============================================================================
305341
+ "Analyzes the project and creates a tailored QWEN.md file.": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u5206\u6790\u3057\u3001\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u3055\u308C\u305F QWEN.md \u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210",
305342
+ "list available Qwen Code tools. Usage: /tools [desc]": "\u5229\u7528\u53EF\u80FD\u306A Qwen Code \u30C4\u30FC\u30EB\u3092\u4E00\u89A7\u8868\u793A\u3002\u4F7F\u3044\u65B9: /tools [desc]",
305343
+ "Available Qwen Code CLI tools:": "\u5229\u7528\u53EF\u80FD\u306A Qwen Code CLI \u30C4\u30FC\u30EB:",
305344
+ "No tools available": "\u5229\u7528\u53EF\u80FD\u306A\u30C4\u30FC\u30EB\u306F\u3042\u308A\u307E\u305B\u3093",
305345
+ "View or change the approval mode for tool usage": "\u30C4\u30FC\u30EB\u4F7F\u7528\u306E\u627F\u8A8D\u30E2\u30FC\u30C9\u3092\u8868\u793A\u307E\u305F\u306F\u5909\u66F4",
305346
+ "View or change the language setting": "\u8A00\u8A9E\u8A2D\u5B9A\u3092\u8868\u793A\u307E\u305F\u306F\u5909\u66F4",
305347
+ "change the theme": "\u30C6\u30FC\u30DE\u3092\u5909\u66F4",
305348
+ "Select Theme": "\u30C6\u30FC\u30DE\u3092\u9078\u629E",
305349
+ Preview: "\u30D7\u30EC\u30D3\u30E5\u30FC",
305350
+ "(Use Enter to select, Tab to configure scope)": "(Enter \u3067\u9078\u629E\u3001Tab \u3067\u30B9\u30B3\u30FC\u30D7\u3092\u8A2D\u5B9A)",
305351
+ "(Use Enter to apply scope, Tab to select theme)": "(Enter \u3067\u30B9\u30B3\u30FC\u30D7\u3092\u9069\u7528\u3001Tab \u3067\u30C6\u30FC\u30DE\u3092\u9078\u629E)",
305352
+ "Theme configuration unavailable due to NO_COLOR env variable.": "NO_COLOR \u74B0\u5883\u5909\u6570\u306E\u305F\u3081\u30C6\u30FC\u30DE\u8A2D\u5B9A\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
305353
+ 'Theme "{{themeName}}" not found.': '\u30C6\u30FC\u30DE "{{themeName}}" \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093',
305354
+ 'Theme "{{themeName}}" not found in selected scope.': '\u9078\u629E\u3057\u305F\u30B9\u30B3\u30FC\u30D7\u306B\u30C6\u30FC\u30DE "{{themeName}}" \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093',
305355
+ "Clear conversation history and free up context": "\u4F1A\u8A71\u5C65\u6B74\u3092\u30AF\u30EA\u30A2\u3057\u3066\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u89E3\u653E",
305356
+ "Compresses the context by replacing it with a summary.": "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u8981\u7D04\u306B\u7F6E\u304D\u63DB\u3048\u3066\u5727\u7E2E",
305357
+ "open full Qwen Code documentation in your browser": "\u30D6\u30E9\u30A6\u30B6\u3067 Qwen Code \u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u958B\u304F",
305358
+ "Configuration not available.": "\u8A2D\u5B9A\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
305359
+ "change the auth method": "\u8A8D\u8A3C\u65B9\u5F0F\u3092\u5909\u66F4",
305360
+ "Copy the last result or code snippet to clipboard": "\u6700\u5F8C\u306E\u7D50\u679C\u307E\u305F\u306F\u30B3\u30FC\u30C9\u30B9\u30CB\u30DA\u30C3\u30C8\u3092\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC",
305361
+ // ============================================================================
305362
+ // Commands - Agents
305363
+ // ============================================================================
305364
+ "Manage subagents for specialized task delegation.": "\u5C02\u9580\u30BF\u30B9\u30AF\u3092\u59D4\u4EFB\u3059\u308B\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u7BA1\u7406",
305365
+ "Manage existing subagents (view, edit, delete).": "\u65E2\u5B58\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u7BA1\u7406(\u8868\u793A\u3001\u7DE8\u96C6\u3001\u524A\u9664)",
305366
+ "Create a new subagent with guided setup.": "\u30AC\u30A4\u30C9\u4ED8\u304D\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3067\u65B0\u3057\u3044\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u4F5C\u6210",
305367
+ // ============================================================================
305368
+ // Agents - Management Dialog
305369
+ // ============================================================================
305370
+ Agents: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8",
305371
+ "Choose Action": "\u30A2\u30AF\u30B7\u30E7\u30F3\u3092\u9078\u629E",
305372
+ "Edit {{name}}": "{{name}} \u3092\u7DE8\u96C6",
305373
+ "Edit Tools: {{name}}": "\u30C4\u30FC\u30EB\u3092\u7DE8\u96C6: {{name}}",
305374
+ "Edit Color: {{name}}": "\u8272\u3092\u7DE8\u96C6: {{name}}",
305375
+ "Delete {{name}}": "{{name}} \u3092\u524A\u9664",
305376
+ "Unknown Step": "\u4E0D\u660E\u306A\u30B9\u30C6\u30C3\u30D7",
305377
+ "Esc to close": "Esc \u3067\u9589\u3058\u308B",
305378
+ "Enter to select, \u2191\u2193 to navigate, Esc to close": "Enter \u3067\u9078\u629E\u3001\u2191\u2193 \u3067\u79FB\u52D5\u3001Esc \u3067\u9589\u3058\u308B",
305379
+ "Esc to go back": "Esc \u3067\u623B\u308B",
305380
+ "Enter to confirm, Esc to cancel": "Enter \u3067\u78BA\u5B9A\u3001Esc \u3067\u30AD\u30E3\u30F3\u30BB\u30EB",
305381
+ "Enter to select, \u2191\u2193 to navigate, Esc to go back": "Enter \u3067\u9078\u629E\u3001\u2191\u2193 \u3067\u79FB\u52D5\u3001Esc \u3067\u623B\u308B",
305382
+ "Invalid step: {{step}}": "\u7121\u52B9\u306A\u30B9\u30C6\u30C3\u30D7: {{step}}",
305383
+ "No subagents found.": "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
305384
+ "Use '/agents create' to create your first subagent.": "'/agents create' \u3067\u6700\u521D\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044",
305385
+ "(built-in)": "(\u7D44\u307F\u8FBC\u307F)",
305386
+ "(overridden by project level agent)": "(\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30EC\u30D9\u30EB\u306E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3067\u4E0A\u66F8\u304D)",
305387
+ "Project Level ({{path}})": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30EC\u30D9\u30EB ({{path}})",
305388
+ "User Level ({{path}})": "\u30E6\u30FC\u30B6\u30FC\u30EC\u30D9\u30EB ({{path}})",
305389
+ "Built-in Agents": "\u7D44\u307F\u8FBC\u307F\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8",
305390
+ "Using: {{count}} agents": "\u4F7F\u7528\u4E2D: {{count}} \u30A8\u30FC\u30B8\u30A7\u30F3\u30C8",
305391
+ "View Agent": "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u8868\u793A",
305392
+ "Edit Agent": "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u7DE8\u96C6",
305393
+ "Delete Agent": "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u524A\u9664",
305394
+ Back: "\u623B\u308B",
305395
+ "No agent selected": "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
305396
+ "File Path: ": "\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9: ",
305397
+ "Tools: ": "\u30C4\u30FC\u30EB: ",
305398
+ "Color: ": "\u8272: ",
305399
+ "Description:": "\u8AAC\u660E:",
305400
+ "System Prompt:": "\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8:",
305401
+ "Open in editor": "\u30A8\u30C7\u30A3\u30BF\u3067\u958B\u304F",
305402
+ "Edit tools": "\u30C4\u30FC\u30EB\u3092\u7DE8\u96C6",
305403
+ "Edit color": "\u8272\u3092\u7DE8\u96C6",
305404
+ "\u274C Error:": "\u274C \u30A8\u30E9\u30FC:",
305405
+ 'Are you sure you want to delete agent "{{name}}"?': '\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8 "{{name}}" \u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B?',
305406
+ "Project Level (.qwen/agents/)": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30EC\u30D9\u30EB (.qwen/agents/)",
305407
+ "User Level (~/.qwen/agents/)": "\u30E6\u30FC\u30B6\u30FC\u30EC\u30D9\u30EB (~/.qwen/agents/)",
305408
+ "\u2705 Subagent Created Successfully!": "\u2705 \u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u4F5C\u6210\u306B\u6210\u529F\u3057\u307E\u3057\u305F!",
305409
+ 'Subagent "{{name}}" has been saved to {{level}} level.': '\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8 "{{name}}" \u3092 {{level}} \u306B\u4FDD\u5B58\u3057\u307E\u3057\u305F',
305410
+ "Name: ": "\u540D\u524D: ",
305411
+ "Location: ": "\u5834\u6240: ",
305412
+ "\u274C Error saving subagent:": "\u274C \u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u4FDD\u5B58\u30A8\u30E9\u30FC:",
305413
+ "Warnings:": "\u8B66\u544A:",
305414
+ "Step {{n}}: Choose Location": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u5834\u6240\u3092\u9078\u629E",
305415
+ "Step {{n}}: Choose Generation Method": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u4F5C\u6210\u65B9\u6CD5\u3092\u9078\u629E",
305416
+ "Generate with Qwen Code (Recommended)": "Qwen Code \u3067\u751F\u6210(\u63A8\u5968)",
305417
+ "Manual Creation": "\u624B\u52D5\u4F5C\u6210",
305418
+ "Generating subagent configuration...": "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u8A2D\u5B9A\u3092\u751F\u6210\u4E2D...",
305419
+ "Failed to generate subagent: {{error}}": "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u751F\u6210\u306B\u5931\u6557: {{error}}",
305420
+ "Step {{n}}: Describe Your Subagent": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u8AAC\u660E",
305421
+ "Step {{n}}: Enter Subagent Name": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u540D\u3092\u5165\u529B",
305422
+ "Step {{n}}: Enter System Prompt": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u5165\u529B",
305423
+ "Step {{n}}: Enter Description": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u8AAC\u660E\u3092\u5165\u529B",
305424
+ "Step {{n}}: Select Tools": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u30C4\u30FC\u30EB\u3092\u9078\u629E",
305425
+ "All Tools (Default)": "\u5168\u30C4\u30FC\u30EB(\u30C7\u30D5\u30A9\u30EB\u30C8)",
305426
+ "All Tools": "\u5168\u30C4\u30FC\u30EB",
305427
+ "Read-only Tools": "\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30C4\u30FC\u30EB",
305428
+ "Read & Edit Tools": "\u8AAD\u307F\u53D6\u308A\uFF06\u7DE8\u96C6\u30C4\u30FC\u30EB",
305429
+ "Read & Edit & Execution Tools": "\u8AAD\u307F\u53D6\u308A\uFF06\u7DE8\u96C6\uFF06\u5B9F\u884C\u30C4\u30FC\u30EB",
305430
+ "Selected tools:": "\u9078\u629E\u3055\u308C\u305F\u30C4\u30FC\u30EB:",
305431
+ "Step {{n}}: Choose Background Color": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u80CC\u666F\u8272\u3092\u9078\u629E",
305432
+ "Step {{n}}: Confirm and Save": "\u30B9\u30C6\u30C3\u30D7 {{n}}: \u78BA\u8A8D\u3057\u3066\u4FDD\u5B58",
305433
+ "Esc to cancel": "Esc \u3067\u30AD\u30E3\u30F3\u30BB\u30EB",
305434
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
305435
+ "go back": "\u623B\u308B",
305436
+ "\u2191\u2193 to navigate, ": "\u2191\u2193 \u3067\u79FB\u52D5\u3001",
305437
+ "Name cannot be empty.": "\u540D\u524D\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093",
305438
+ "System prompt cannot be empty.": "\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093",
305439
+ "Description cannot be empty.": "\u8AAC\u660E\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093",
305440
+ "Failed to launch editor: {{error}}": "\u30A8\u30C7\u30A3\u30BF\u306E\u8D77\u52D5\u306B\u5931\u6557: {{error}}",
305441
+ "Failed to save and edit subagent: {{error}}": "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u4FDD\u5B58\u3068\u7DE8\u96C6\u306B\u5931\u6557: {{error}}",
305442
+ 'Name "{{name}}" already exists at {{level}} level - will overwrite existing subagent': '"{{name}}" \u306F {{level}} \u306B\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059 - \u65E2\u5B58\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059',
305443
+ 'Name "{{name}}" exists at user level - project level will take precedence': '"{{name}}" \u306F\u30E6\u30FC\u30B6\u30FC\u30EC\u30D9\u30EB\u306B\u5B58\u5728\u3057\u307E\u3059 - \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30EC\u30D9\u30EB\u304C\u512A\u5148\u3055\u308C\u307E\u3059',
305444
+ 'Name "{{name}}" exists at project level - existing subagent will take precedence': '"{{name}}" \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30EC\u30D9\u30EB\u306B\u5B58\u5728\u3057\u307E\u3059 - \u65E2\u5B58\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u512A\u5148\u3055\u308C\u307E\u3059',
305445
+ "Description is over {{length}} characters": "\u8AAC\u660E\u304C {{length}} \u6587\u5B57\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
305446
+ "System prompt is over {{length}} characters": "\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u304C {{length}} \u6587\u5B57\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
305447
+ "Describe what this subagent should do and when it should be used. (Be comprehensive for best results)": "\u3053\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u5F79\u5272\u3068\u4F7F\u7528\u30BF\u30A4\u30DF\u30F3\u30B0\u3092\u8AAC\u660E\u3057\u3066\u304F\u3060\u3055\u3044(\u8A73\u7D30\u306B\u8A18\u8FF0\u3059\u308B\u307B\u3069\u826F\u3044\u7D50\u679C\u304C\u5F97\u3089\u308C\u307E\u3059)",
305448
+ "e.g., Expert code reviewer that reviews code based on best practices...": "\u4F8B: \u30D9\u30B9\u30C8\u30D7\u30E9\u30AF\u30C6\u30A3\u30B9\u306B\u57FA\u3065\u3044\u3066\u30B3\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u30A8\u30AD\u30B9\u30D1\u30FC\u30C8\u30EC\u30D3\u30E5\u30A2\u30FC...",
305449
+ "All tools selected, including MCP tools": "MCP\u30C4\u30FC\u30EB\u3092\u542B\u3080\u3059\u3079\u3066\u306E\u30C4\u30FC\u30EB\u3092\u9078\u629E",
305450
+ "Read-only tools:": "\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30C4\u30FC\u30EB:",
305451
+ "Edit tools:": "\u7DE8\u96C6\u30C4\u30FC\u30EB:",
305452
+ "Execution tools:": "\u5B9F\u884C\u30C4\u30FC\u30EB:",
305453
+ "Press Enter to save, e to save and edit, Esc to go back": "Enter \u3067\u4FDD\u5B58\u3001e \u3067\u4FDD\u5B58\u3057\u3066\u7DE8\u96C6\u3001Esc \u3067\u623B\u308B",
305454
+ "Press Enter to continue, {{navigation}}Esc to {{action}}": "Enter \u3067\u7D9A\u884C\u3001{{navigation}}Esc \u3067{{action}}",
305455
+ "Enter a clear, unique name for this subagent.": "\u3053\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u660E\u78BA\u3067\u4E00\u610F\u306A\u540D\u524D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
305456
+ "e.g., Code Reviewer": "\u4F8B: \u30B3\u30FC\u30C9\u30EC\u30D3\u30E5\u30A2\u30FC",
305457
+ "Write the system prompt that defines this subagent's behavior. Be comprehensive for best results.": "\u3053\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u52D5\u4F5C\u3092\u5B9A\u7FA9\u3059\u308B\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044 (\u8A73\u7D30\u306B\u66F8\u304F\u307B\u3069\u826F\u3044\u7D50\u679C\u304C\u5F97\u3089\u308C\u307E\u3059)",
305458
+ "e.g., You are an expert code reviewer...": "\u4F8B: \u3042\u306A\u305F\u306F\u30A8\u30AD\u30B9\u30D1\u30FC\u30C8\u30B3\u30FC\u30C9\u30EC\u30D3\u30E5\u30A2\u30FC\u3067\u3059...",
305459
+ "Describe when and how this subagent should be used.": "\u3053\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u3044\u3064\u3069\u306E\u3088\u3046\u306B\u4F7F\u7528\u3059\u308B\u304B\u3092\u8AAC\u660E\u3057\u3066\u304F\u3060\u3055\u3044",
305460
+ "e.g., Reviews code for best practices and potential bugs.": "\u4F8B: \u30D9\u30B9\u30C8\u30D7\u30E9\u30AF\u30C6\u30A3\u30B9\u3068\u6F5C\u5728\u7684\u306A\u30D0\u30B0\u306B\u3064\u3044\u3066\u30B3\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3057\u307E\u3059\u3002",
305461
+ // Commands - General (continued)
305462
+ "(Use Enter to select{{tabText}})": "(Enter \u3067\u9078\u629E{{tabText}})",
305463
+ ", Tab to change focus": "\u3001Tab \u3067\u30D5\u30A9\u30FC\u30AB\u30B9\u5909\u66F4",
305464
+ "To see changes, Qwen Code must be restarted. Press r to exit and apply changes now.": "\u5909\u66F4\u3092\u78BA\u8A8D\u3059\u308B\u306B\u306F Qwen Code \u3092\u518D\u8D77\u52D5\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 r \u3092\u62BC\u3057\u3066\u7D42\u4E86\u3057\u3001\u5909\u66F4\u3092\u9069\u7528\u3057\u3066\u304F\u3060\u3055\u3044",
305465
+ 'The command "/{{command}}" is not supported in non-interactive mode.': '\u30B3\u30DE\u30F3\u30C9 "/{{command}}" \u306F\u975E\u5BFE\u8A71\u30E2\u30FC\u30C9\u3067\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093',
305466
+ "View and edit Qwen Code settings": "Qwen Code \u306E\u8A2D\u5B9A\u3092\u8868\u793A\u30FB\u7DE8\u96C6",
305467
+ Settings: "\u8A2D\u5B9A",
305468
+ "Vim Mode": "Vim \u30E2\u30FC\u30C9",
305469
+ "Disable Auto Update": "\u81EA\u52D5\u66F4\u65B0\u3092\u7121\u52B9\u5316",
305470
+ Language: "\u8A00\u8A9E",
305471
+ "Output Format": "\u51FA\u529B\u5F62\u5F0F",
305472
+ "Hide Tips": "\u30D2\u30F3\u30C8\u3092\u975E\u8868\u793A",
305473
+ "Hide Banner": "\u30D0\u30CA\u30FC\u3092\u975E\u8868\u793A",
305474
+ "Show Memory Usage": "\u30E1\u30E2\u30EA\u4F7F\u7528\u91CF\u3092\u8868\u793A",
305475
+ "Show Line Numbers": "\u884C\u756A\u53F7\u3092\u8868\u793A",
305476
+ Text: "\u30C6\u30AD\u30B9\u30C8",
305477
+ JSON: "JSON",
305478
+ Plan: "\u30D7\u30E9\u30F3",
305479
+ Default: "\u30C7\u30D5\u30A9\u30EB\u30C8",
305480
+ "Auto Edit": "\u81EA\u52D5\u7DE8\u96C6",
305481
+ YOLO: "YOLO",
305482
+ "toggle vim mode on/off": "Vim \u30E2\u30FC\u30C9\u306E\u30AA\u30F3/\u30AA\u30D5\u3092\u5207\u308A\u66FF\u3048",
305483
+ "exit the cli": "CLI\u3092\u7D42\u4E86",
305484
+ Timeout: "\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8",
305485
+ "Max Retries": "\u6700\u5927\u30EA\u30C8\u30E9\u30A4\u56DE\u6570",
305486
+ "Auto Accept": "\u81EA\u52D5\u627F\u8A8D",
305487
+ "Folder Trust": "\u30D5\u30A9\u30EB\u30C0\u306E\u4FE1\u983C",
305488
+ "Enable Prompt Completion": "\u30D7\u30ED\u30F3\u30D7\u30C8\u88DC\u5B8C\u3092\u6709\u52B9\u5316",
305489
+ "Debug Keystroke Logging": "\u30AD\u30FC\u30B9\u30C8\u30ED\u30FC\u30AF\u306E\u30C7\u30D0\u30C3\u30B0\u30ED\u30B0",
305490
+ "Hide Window Title": "\u30A6\u30A3\u30F3\u30C9\u30A6\u30BF\u30A4\u30C8\u30EB\u3092\u975E\u8868\u793A",
305491
+ "Show Status in Title": "\u30BF\u30A4\u30C8\u30EB\u306B\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8868\u793A",
305492
+ "Hide Context Summary": "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u8981\u7D04\u3092\u975E\u8868\u793A",
305493
+ "Hide CWD": "\u4F5C\u696D\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u975E\u8868\u793A",
305494
+ "Hide Sandbox Status": "\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u72B6\u614B\u3092\u975E\u8868\u793A",
305495
+ "Hide Model Info": "\u30E2\u30C7\u30EB\u60C5\u5831\u3092\u975E\u8868\u793A",
305496
+ "Hide Footer": "\u30D5\u30C3\u30BF\u30FC\u3092\u975E\u8868\u793A",
305497
+ "Show Citations": "\u5F15\u7528\u3092\u8868\u793A",
305498
+ "Custom Witty Phrases": "\u30AB\u30B9\u30BF\u30E0\u30A6\u30A3\u30C3\u30C8\u30D5\u30EC\u30FC\u30BA",
305499
+ "Enable Welcome Back": "\u30A6\u30A7\u30EB\u30AB\u30E0\u30D0\u30C3\u30AF\u6A5F\u80FD\u3092\u6709\u52B9\u5316",
305500
+ "Disable Loading Phrases": "\u30ED\u30FC\u30C7\u30A3\u30F3\u30B0\u30D5\u30EC\u30FC\u30BA\u3092\u7121\u52B9\u5316",
305501
+ "Screen Reader Mode": "\u30B9\u30AF\u30EA\u30FC\u30F3\u30EA\u30FC\u30C0\u30FC\u30E2\u30FC\u30C9",
305502
+ "IDE Mode": "IDE\u30E2\u30FC\u30C9",
305503
+ "Max Session Turns": "\u6700\u5927\u30BB\u30C3\u30B7\u30E7\u30F3\u30BF\u30FC\u30F3\u6570",
305504
+ "Skip Next Speaker Check": "\u6B21\u306E\u767A\u8A00\u8005\u30C1\u30A7\u30C3\u30AF\u3092\u30B9\u30AD\u30C3\u30D7",
305505
+ "Skip Loop Detection": "\u30EB\u30FC\u30D7\u691C\u51FA\u3092\u30B9\u30AD\u30C3\u30D7",
305506
+ "Skip Startup Context": "\u8D77\u52D5\u6642\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u30B9\u30AD\u30C3\u30D7",
305507
+ "Enable OpenAI Logging": "OpenAI \u30ED\u30B0\u3092\u6709\u52B9\u5316",
305508
+ "OpenAI Logging Directory": "OpenAI \u30ED\u30B0\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA",
305509
+ "Disable Cache Control": "\u30AD\u30E3\u30C3\u30B7\u30E5\u5236\u5FA1\u3092\u7121\u52B9\u5316",
305510
+ "Memory Discovery Max Dirs": "\u30E1\u30E2\u30EA\u691C\u51FA\u306E\u6700\u5927\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u6570",
305511
+ "Load Memory From Include Directories": "\u30A4\u30F3\u30AF\u30EB\u30FC\u30C9\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304B\u3089\u30E1\u30E2\u30EA\u3092\u8AAD\u307F\u8FBC\u307F",
305512
+ "Respect .gitignore": ".gitignore \u3092\u512A\u5148",
305513
+ "Respect .qwenignore": ".qwenignore \u3092\u512A\u5148",
305514
+ "Enable Recursive File Search": "\u518D\u5E30\u7684\u30D5\u30A1\u30A4\u30EB\u691C\u7D22\u3092\u6709\u52B9\u5316",
305515
+ "Disable Fuzzy Search": "\u30D5\u30A1\u30B8\u30FC\u691C\u7D22\u3092\u7121\u52B9\u5316",
305516
+ "Enable Interactive Shell": "\u5BFE\u8A71\u578B\u30B7\u30A7\u30EB\u3092\u6709\u52B9\u5316",
305517
+ "Show Color": "\u8272\u3092\u8868\u793A",
305518
+ "Use Ripgrep": "Ripgrep \u3092\u4F7F\u7528",
305519
+ "Use Builtin Ripgrep": "\u7D44\u307F\u8FBC\u307F Ripgrep \u3092\u4F7F\u7528",
305520
+ "Enable Tool Output Truncation": "\u30C4\u30FC\u30EB\u51FA\u529B\u306E\u5207\u308A\u8A70\u3081\u3092\u6709\u52B9\u5316",
305521
+ "Tool Output Truncation Threshold": "\u30C4\u30FC\u30EB\u51FA\u529B\u5207\u308A\u8A70\u3081\u306E\u3057\u304D\u3044\u5024",
305522
+ "Tool Output Truncation Lines": "\u30C4\u30FC\u30EB\u51FA\u529B\u306E\u5207\u308A\u8A70\u3081\u884C\u6570",
305523
+ "Vision Model Preview": "\u30D3\u30B8\u30E7\u30F3\u30E2\u30C7\u30EB\u30D7\u30EC\u30D3\u30E5\u30FC",
305524
+ "Tool Schema Compliance": "\u30C4\u30FC\u30EB\u30B9\u30AD\u30FC\u30DE\u6E96\u62E0",
305525
+ "Auto (detect from system)": "\u81EA\u52D5(\u30B7\u30B9\u30C6\u30E0\u304B\u3089\u691C\u51FA)",
305526
+ "check session stats. Usage: /stats [model|tools]": "\u30BB\u30C3\u30B7\u30E7\u30F3\u7D71\u8A08\u3092\u78BA\u8A8D\u3002\u4F7F\u3044\u65B9: /stats [model|tools]",
305527
+ "Show model-specific usage statistics.": "\u30E2\u30C7\u30EB\u5225\u306E\u4F7F\u7528\u7D71\u8A08\u3092\u8868\u793A",
305528
+ "Show tool-specific usage statistics.": "\u30C4\u30FC\u30EB\u5225\u306E\u4F7F\u7528\u7D71\u8A08\u3092\u8868\u793A",
305529
+ "list configured MCP servers and tools, or authenticate with OAuth-enabled servers": "\u8A2D\u5B9A\u6E08\u307F\u306EMCP\u30B5\u30FC\u30D0\u30FC\u3068\u30C4\u30FC\u30EB\u3092\u4E00\u89A7\u8868\u793A\u3001\u307E\u305F\u306FOAuth\u5BFE\u5FDC\u30B5\u30FC\u30D0\u30FC\u3067\u8A8D\u8A3C",
305530
+ "Manage workspace directories": "\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u7BA1\u7406",
305531
+ "Add directories to the workspace. Use comma to separate multiple paths": "\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u8FFD\u52A0\u3002\u8907\u6570\u30D1\u30B9\u306F\u30AB\u30F3\u30DE\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044",
305532
+ "Show all directories in the workspace": "\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u5185\u306E\u3059\u3079\u3066\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u8868\u793A",
305533
+ "set external editor preference": "\u5916\u90E8\u30A8\u30C7\u30A3\u30BF\u306E\u8A2D\u5B9A",
305534
+ "Manage extensions": "\u62E1\u5F35\u6A5F\u80FD\u3092\u7BA1\u7406",
305535
+ "List active extensions": "\u6709\u52B9\u306A\u62E1\u5F35\u6A5F\u80FD\u3092\u4E00\u89A7\u8868\u793A",
305536
+ "Update extensions. Usage: update <extension-names>|--all": "\u62E1\u5F35\u6A5F\u80FD\u3092\u66F4\u65B0\u3002\u4F7F\u3044\u65B9: update <\u62E1\u5F35\u6A5F\u80FD\u540D>|--all",
305537
+ "manage IDE integration": "IDE\u9023\u643A\u3092\u7BA1\u7406",
305538
+ "check status of IDE integration": "IDE\u9023\u643A\u306E\u72B6\u614B\u3092\u78BA\u8A8D",
305539
+ "install required IDE companion for {{ideName}}": "{{ideName}} \u7528\u306E\u5FC5\u8981\u306AIDE\u30B3\u30F3\u30D1\u30CB\u30AA\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",
305540
+ "enable IDE integration": "IDE\u9023\u643A\u3092\u6709\u52B9\u5316",
305541
+ "disable IDE integration": "IDE\u9023\u643A\u3092\u7121\u52B9\u5316",
305542
+ "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.": "\u73FE\u5728\u306E\u74B0\u5883\u3067\u306FIDE\u9023\u643A\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u3053\u306E\u6A5F\u80FD\u3092\u4F7F\u7528\u3059\u308B\u306B\u306F\u3001VS Code \u307E\u305F\u306F VS Code \u6D3E\u751F\u30A8\u30C7\u30A3\u30BF\u3067 Qwen Code \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044",
305543
+ "Set up GitHub Actions": "GitHub Actions \u3092\u8A2D\u5B9A",
305544
+ "Configure terminal keybindings for multiline input (VS Code, Cursor, Windsurf, Trae)": "\u8907\u6570\u884C\u5165\u529B\u7528\u306E\u30BF\u30FC\u30DF\u30CA\u30EB\u30AD\u30FC\u30D0\u30A4\u30F3\u30C9\u3092\u8A2D\u5B9A(VS Code\u3001Cursor\u3001Windsurf\u3001Trae)",
305545
+ "Please restart your terminal for the changes to take effect.": "\u5909\u66F4\u3092\u6709\u52B9\u306B\u3059\u308B\u306B\u306F\u30BF\u30FC\u30DF\u30CA\u30EB\u3092\u518D\u8D77\u52D5\u3057\u3066\u304F\u3060\u3055\u3044",
305546
+ "Failed to configure terminal: {{error}}": "\u30BF\u30FC\u30DF\u30CA\u30EB\u306E\u8A2D\u5B9A\u306B\u5931\u6557: {{error}}",
305547
+ "Could not determine {{terminalName}} config path on Windows: APPDATA environment variable is not set.": "Windows \u3067 {{terminalName}} \u306E\u8A2D\u5B9A\u30D1\u30B9\u3092\u7279\u5B9A\u3067\u304D\u307E\u305B\u3093: APPDATA \u74B0\u5883\u5909\u6570\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
305548
+ "{{terminalName}} keybindings.json exists but is not a valid JSON array. Please fix the file manually or delete it to allow automatic configuration.": "{{terminalName}} \u306E keybindings.json \u306F\u5B58\u5728\u3057\u307E\u3059\u304C\u3001\u6709\u52B9\u306AJSON\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u30D5\u30A1\u30A4\u30EB\u3092\u624B\u52D5\u3067\u4FEE\u6B63\u3059\u308B\u304B\u3001\u524A\u9664\u3057\u3066\u81EA\u52D5\u8A2D\u5B9A\u3092\u8A31\u53EF\u3057\u3066\u304F\u3060\u3055\u3044",
305549
+ "File: {{file}}": "\u30D5\u30A1\u30A4\u30EB: {{file}}",
305550
+ "Failed to parse {{terminalName}} keybindings.json. The file contains invalid JSON. Please fix the file manually or delete it to allow automatic configuration.": "{{terminalName}} \u306E keybindings.json \u306E\u89E3\u6790\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30D5\u30A1\u30A4\u30EB\u306B\u7121\u52B9\u306AJSON\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u624B\u52D5\u3067\u4FEE\u6B63\u3059\u308B\u304B\u3001\u524A\u9664\u3057\u3066\u81EA\u52D5\u8A2D\u5B9A\u3092\u8A31\u53EF\u3057\u3066\u304F\u3060\u3055\u3044",
305551
+ "Error: {{error}}": "\u30A8\u30E9\u30FC: {{error}}",
305552
+ "Shift+Enter binding already exists": "Shift+Enter \u30D0\u30A4\u30F3\u30C9\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059",
305553
+ "Ctrl+Enter binding already exists": "Ctrl+Enter \u30D0\u30A4\u30F3\u30C9\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059",
305554
+ "Existing keybindings detected. Will not modify to avoid conflicts.": "\u65E2\u5B58\u306E\u30AD\u30FC\u30D0\u30A4\u30F3\u30C9\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F\u3002\u7AF6\u5408\u3092\u907F\u3051\u308B\u305F\u3081\u5909\u66F4\u3092\u3057\u307E\u305B\u3093",
305555
+ "Please check and modify manually if needed: {{file}}": "\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u624B\u52D5\u3067\u78BA\u8A8D\u30FB\u5909\u66F4\u3057\u3066\u304F\u3060\u3055\u3044: {{file}}",
305556
+ "Added Shift+Enter and Ctrl+Enter keybindings to {{terminalName}}.": "{{terminalName}} \u306B Shift+Enter \u3068 Ctrl+Enter \u306E\u30AD\u30FC\u30D0\u30A4\u30F3\u30C9\u3092\u8FFD\u52A0\u3057\u307E\u3057\u305F",
305557
+ "Modified: {{file}}": "\u5909\u66F4\u6E08\u307F: {{file}}",
305558
+ "{{terminalName}} keybindings already configured.": "{{terminalName}} \u306E\u30AD\u30FC\u30D0\u30A4\u30F3\u30C9\u306F\u65E2\u306B\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059",
305559
+ "Failed to configure {{terminalName}}.": "{{terminalName}} \u306E\u8A2D\u5B9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
305560
+ "Your terminal is already configured for an optimal experience with multiline input (Shift+Enter and Ctrl+Enter).": "\u30BF\u30FC\u30DF\u30CA\u30EB\u306F\u8907\u6570\u884C\u5165\u529B(Shift+Enter \u3068 Ctrl+Enter)\u306B\u6700\u9069\u5316\u3055\u308C\u3066\u3044\u307E\u3059",
305561
+ "Could not detect terminal type. Supported terminals: VS Code, Cursor, Windsurf, and Trae.": "\u30BF\u30FC\u30DF\u30CA\u30EB\u306E\u7A2E\u985E\u3092\u691C\u51FA\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30BF\u30FC\u30DF\u30CA\u30EB: VS Code\u3001Cursor\u3001Windsurf\u3001Trae",
305562
+ 'Terminal "{{terminal}}" is not supported yet.': '\u30BF\u30FC\u30DF\u30CA\u30EB "{{terminal}}" \u306F\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093',
305563
+ // Commands - Language
305564
+ "Invalid language. Available: {{options}}": "\u7121\u52B9\u306A\u8A00\u8A9E\u3067\u3059\u3002\u4F7F\u7528\u53EF\u80FD: {{options}}",
305565
+ "Language subcommands do not accept additional arguments.": "\u8A00\u8A9E\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306F\u8FFD\u52A0\u306E\u5F15\u6570\u3092\u53D7\u3051\u4ED8\u3051\u307E\u305B\u3093",
305566
+ "Current UI language: {{lang}}": "\u73FE\u5728\u306EUI\u8A00\u8A9E: {{lang}}",
305567
+ "Current LLM output language: {{lang}}": "\u73FE\u5728\u306ELLM\u51FA\u529B\u8A00\u8A9E: {{lang}}",
305568
+ "LLM output language not set": "LLM\u51FA\u529B\u8A00\u8A9E\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
305569
+ "Set UI language": "UI\u8A00\u8A9E\u3092\u8A2D\u5B9A",
305570
+ "Set LLM output language": "LLM\u51FA\u529B\u8A00\u8A9E\u3092\u8A2D\u5B9A",
305571
+ "Usage: /language ui [{{options}}]": "\u4F7F\u3044\u65B9: /language ui [{{options}}]",
305572
+ "Usage: /language output <language>": "\u4F7F\u3044\u65B9: /language output <\u8A00\u8A9E>",
305573
+ "Example: /language output \u4E2D\u6587": "\u4F8B: /language output \u4E2D\u6587",
305574
+ "Example: /language output English": "\u4F8B: /language output English",
305575
+ "Example: /language output \u65E5\u672C\u8A9E": "\u4F8B: /language output \u65E5\u672C\u8A9E",
305576
+ "Example: /language output Portugu\xEAs": "\u4F8B: /language output Portugu\xEAs",
305577
+ "UI language changed to {{lang}}": "UI\u8A00\u8A9E\u3092 {{lang}} \u306B\u5909\u66F4\u3057\u307E\u3057\u305F",
305578
+ "LLM output language rule file generated at {{path}}": "LLM\u51FA\u529B\u8A00\u8A9E\u30EB\u30FC\u30EB\u30D5\u30A1\u30A4\u30EB\u3092 {{path}} \u306B\u751F\u6210\u3057\u307E\u3057\u305F",
305579
+ "Please restart the application for the changes to take effect.": "\u5909\u66F4\u3092\u6709\u52B9\u306B\u3059\u308B\u306B\u306F\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u518D\u8D77\u52D5\u3057\u3066\u304F\u3060\u3055\u3044",
305580
+ "Failed to generate LLM output language rule file: {{error}}": "LLM\u51FA\u529B\u8A00\u8A9E\u30EB\u30FC\u30EB\u30D5\u30A1\u30A4\u30EB\u306E\u751F\u6210\u306B\u5931\u6557: {{error}}",
305581
+ "Invalid command. Available subcommands:": "\u7121\u52B9\u306A\u30B3\u30DE\u30F3\u30C9\u3067\u3059\u3002\u4F7F\u7528\u53EF\u80FD\u306A\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9:",
305582
+ "Available subcommands:": "\u4F7F\u7528\u53EF\u80FD\u306A\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9:",
305583
+ "To request additional UI language packs, please open an issue on GitHub.": "\u8FFD\u52A0\u306EUI\u8A00\u8A9E\u30D1\u30C3\u30AF\u3092\u30EA\u30AF\u30A8\u30B9\u30C8\u3059\u308B\u306B\u306F\u3001GitHub \u3067 Issue \u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044",
305584
+ "Available options:": "\u4F7F\u7528\u53EF\u80FD\u306A\u30AA\u30D7\u30B7\u30E7\u30F3:",
305585
+ "Set UI language to {{name}}": "UI\u8A00\u8A9E\u3092 {{name}} \u306B\u8A2D\u5B9A",
305586
+ // Approval Mode
305587
+ "Approval Mode": "\u627F\u8A8D\u30E2\u30FC\u30C9",
305588
+ "Current approval mode: {{mode}}": "\u73FE\u5728\u306E\u627F\u8A8D\u30E2\u30FC\u30C9: {{mode}}",
305589
+ "Available approval modes:": "\u5229\u7528\u53EF\u80FD\u306A\u627F\u8A8D\u30E2\u30FC\u30C9:",
305590
+ "Approval mode changed to: {{mode}}": "\u627F\u8A8D\u30E2\u30FC\u30C9\u3092\u5909\u66F4\u3057\u307E\u3057\u305F: {{mode}}",
305591
+ "Approval mode changed to: {{mode}} (saved to {{scope}} settings{{location}})": "\u627F\u8A8D\u30E2\u30FC\u30C9\u3092 {{mode}} \u306B\u5909\u66F4\u3057\u307E\u3057\u305F({{scope}} \u8A2D\u5B9A{{location}}\u306B\u4FDD\u5B58)",
305592
+ "Usage: /approval-mode <mode> [--session|--user|--project]": "\u4F7F\u3044\u65B9: /approval-mode <\u30E2\u30FC\u30C9> [--session|--user|--project]",
305593
+ "Scope subcommands do not accept additional arguments.": "\u30B9\u30B3\u30FC\u30D7\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306F\u8FFD\u52A0\u306E\u5F15\u6570\u3092\u53D7\u3051\u4ED8\u3051\u307E\u305B\u3093",
305594
+ "Plan mode - Analyze only, do not modify files or execute commands": "\u30D7\u30E9\u30F3\u30E2\u30FC\u30C9 - \u5206\u6790\u306E\u307F\u3001\u30D5\u30A1\u30A4\u30EB\u306E\u5909\u66F4\u3084\u30B3\u30DE\u30F3\u30C9\u306E\u5B9F\u884C\u306F\u3057\u307E\u305B\u3093",
305595
+ "Default mode - Require approval for file edits or shell commands": "\u30C7\u30D5\u30A9\u30EB\u30C8\u30E2\u30FC\u30C9 - \u30D5\u30A1\u30A4\u30EB\u7DE8\u96C6\u3084\u30B7\u30A7\u30EB\u30B3\u30DE\u30F3\u30C9\u306B\u306F\u627F\u8A8D\u304C\u5FC5\u8981",
305596
+ "Auto-edit mode - Automatically approve file edits": "\u81EA\u52D5\u7DE8\u96C6\u30E2\u30FC\u30C9 - \u30D5\u30A1\u30A4\u30EB\u7DE8\u96C6\u3092\u81EA\u52D5\u627F\u8A8D",
305597
+ "YOLO mode - Automatically approve all tools": "YOLO\u30E2\u30FC\u30C9 - \u3059\u3079\u3066\u306E\u30C4\u30FC\u30EB\u3092\u81EA\u52D5\u627F\u8A8D",
305598
+ "{{mode}} mode": "{{mode}}\u30E2\u30FC\u30C9",
305599
+ "Settings service is not available; unable to persist the approval mode.": "\u8A2D\u5B9A\u30B5\u30FC\u30D3\u30B9\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u627F\u8A8D\u30E2\u30FC\u30C9\u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093",
305600
+ "Failed to save approval mode: {{error}}": "\u627F\u8A8D\u30E2\u30FC\u30C9\u306E\u4FDD\u5B58\u306B\u5931\u6557: {{error}}",
305601
+ "Failed to change approval mode: {{error}}": "\u627F\u8A8D\u30E2\u30FC\u30C9\u306E\u5909\u66F4\u306B\u5931\u6557: {{error}}",
305602
+ "Apply to current session only (temporary)": "\u73FE\u5728\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u307F\u306B\u9069\u7528(\u4E00\u6642\u7684)",
305603
+ "Persist for this project/workspace": "\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8/\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u4FDD\u5B58",
305604
+ "Persist for this user on this machine": "\u3053\u306E\u30DE\u30B7\u30F3\u306E\u3053\u306E\u30E6\u30FC\u30B6\u30FC\u306B\u4FDD\u5B58",
305605
+ "Analyze only, do not modify files or execute commands": "\u5206\u6790\u306E\u307F\u3001\u30D5\u30A1\u30A4\u30EB\u306E\u5909\u66F4\u3084\u30B3\u30DE\u30F3\u30C9\u306E\u5B9F\u884C\u306F\u3057\u307E\u305B\u3093",
305606
+ "Require approval for file edits or shell commands": "\u30D5\u30A1\u30A4\u30EB\u7DE8\u96C6\u3084\u30B7\u30A7\u30EB\u30B3\u30DE\u30F3\u30C9\u306B\u306F\u627F\u8A8D\u304C\u5FC5\u8981",
305607
+ "Automatically approve file edits": "\u30D5\u30A1\u30A4\u30EB\u7DE8\u96C6\u3092\u81EA\u52D5\u627F\u8A8D",
305608
+ "Automatically approve all tools": "\u3059\u3079\u3066\u306E\u30C4\u30FC\u30EB\u3092\u81EA\u52D5\u627F\u8A8D",
305609
+ "Workspace approval mode exists and takes priority. User-level change will have no effect.": "\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306E\u627F\u8A8D\u30E2\u30FC\u30C9\u304C\u5B58\u5728\u3057\u3001\u512A\u5148\u3055\u308C\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u30EC\u30D9\u30EB\u306E\u5909\u66F4\u306F\u52B9\u679C\u304C\u3042\u308A\u307E\u305B\u3093",
305610
+ "(Use Enter to select, Tab to change focus)": "(Enter \u3067\u9078\u629E\u3001Tab \u3067\u30D5\u30A9\u30FC\u30AB\u30B9\u5909\u66F4)",
305611
+ "Apply To": "\u9069\u7528\u5148",
305612
+ "User Settings": "\u30E6\u30FC\u30B6\u30FC\u8A2D\u5B9A",
305613
+ "Workspace Settings": "\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u8A2D\u5B9A",
305614
+ // Memory
305615
+ "Commands for interacting with memory.": "\u30E1\u30E2\u30EA\u64CD\u4F5C\u306E\u30B3\u30DE\u30F3\u30C9",
305616
+ "Show the current memory contents.": "\u73FE\u5728\u306E\u30E1\u30E2\u30EA\u5185\u5BB9\u3092\u8868\u793A",
305617
+ "Show project-level memory contents.": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30EC\u30D9\u30EB\u306E\u30E1\u30E2\u30EA\u5185\u5BB9\u3092\u8868\u793A",
305618
+ "Show global memory contents.": "\u30B0\u30ED\u30FC\u30D0\u30EB\u30E1\u30E2\u30EA\u5185\u5BB9\u3092\u8868\u793A",
305619
+ "Add content to project-level memory.": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30EC\u30D9\u30EB\u306E\u30E1\u30E2\u30EA\u306B\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8FFD\u52A0",
305620
+ "Add content to global memory.": "\u30B0\u30ED\u30FC\u30D0\u30EB\u30E1\u30E2\u30EA\u306B\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8FFD\u52A0",
305621
+ "Refresh the memory from the source.": "\u30BD\u30FC\u30B9\u304B\u3089\u30E1\u30E2\u30EA\u3092\u66F4\u65B0",
305622
+ "Usage: /memory add --project <text to remember>": "\u4F7F\u3044\u65B9: /memory add --project <\u8A18\u61B6\u3059\u308B\u30C6\u30AD\u30B9\u30C8>",
305623
+ "Usage: /memory add --global <text to remember>": "\u4F7F\u3044\u65B9: /memory add --global <\u8A18\u61B6\u3059\u308B\u30C6\u30AD\u30B9\u30C8>",
305624
+ 'Attempting to save to project memory: "{{text}}"': '\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30E2\u30EA\u3078\u306E\u4FDD\u5B58\u3092\u8A66\u884C\u4E2D: "{{text}}"',
305625
+ 'Attempting to save to global memory: "{{text}}"': '\u30B0\u30ED\u30FC\u30D0\u30EB\u30E1\u30E2\u30EA\u3078\u306E\u4FDD\u5B58\u3092\u8A66\u884C\u4E2D: "{{text}}"',
305626
+ "Current memory content from {{count}} file(s):": "{{count}} \u500B\u306E\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u306E\u73FE\u5728\u306E\u30E1\u30E2\u30EA\u5185\u5BB9:",
305627
+ "Memory is currently empty.": "\u30E1\u30E2\u30EA\u306F\u73FE\u5728\u7A7A\u3067\u3059",
305628
+ "Project memory file not found or is currently empty.": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30E2\u30EA\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u304B\u3001\u73FE\u5728\u7A7A\u3067\u3059",
305629
+ "Global memory file not found or is currently empty.": "\u30B0\u30ED\u30FC\u30D0\u30EB\u30E1\u30E2\u30EA\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u304B\u3001\u73FE\u5728\u7A7A\u3067\u3059",
305630
+ "Global memory is currently empty.": "\u30B0\u30ED\u30FC\u30D0\u30EB\u30E1\u30E2\u30EA\u306F\u73FE\u5728\u7A7A\u3067\u3059",
305631
+ "Global memory content:\n\n---\n{{content}}\n---": "\u30B0\u30ED\u30FC\u30D0\u30EB\u30E1\u30E2\u30EA\u5185\u5BB9:\n\n---\n{{content}}\n---",
305632
+ "Project memory content from {{path}}:\n\n---\n{{content}}\n---": "{{path}} \u304B\u3089\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30E2\u30EA\u5185\u5BB9:\n\n---\n{{content}}\n---",
305633
+ "Project memory is currently empty.": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30E2\u30EA\u306F\u73FE\u5728\u7A7A\u3067\u3059",
305634
+ "Refreshing memory from source files...": "\u30BD\u30FC\u30B9\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30E1\u30E2\u30EA\u3092\u66F4\u65B0\u4E2D...",
305635
+ "Add content to the memory. Use --global for global memory or --project for project memory.": "\u30E1\u30E2\u30EA\u306B\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8FFD\u52A0\u3002\u30B0\u30ED\u30FC\u30D0\u30EB\u30E1\u30E2\u30EA\u306B\u306F --global\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30E2\u30EA\u306B\u306F --project \u3092\u4F7F\u7528",
305636
+ "Usage: /memory add [--global|--project] <text to remember>": "\u4F7F\u3044\u65B9: /memory add [--global|--project] <\u8A18\u61B6\u3059\u308B\u30C6\u30AD\u30B9\u30C8>",
305637
+ 'Attempting to save to memory {{scope}}: "{{fact}}"': '\u30E1\u30E2\u30EA {{scope}} \u3078\u306E\u4FDD\u5B58\u3092\u8A66\u884C\u4E2D: "{{fact}}"',
305638
+ // MCP
305639
+ "Authenticate with an OAuth-enabled MCP server": "OAuth\u5BFE\u5FDC\u306EMCP\u30B5\u30FC\u30D0\u30FC\u3067\u8A8D\u8A3C",
305640
+ "List configured MCP servers and tools": "\u8A2D\u5B9A\u6E08\u307F\u306EMCP\u30B5\u30FC\u30D0\u30FC\u3068\u30C4\u30FC\u30EB\u3092\u4E00\u89A7\u8868\u793A",
305641
+ "No MCP servers configured.": "MCP\u30B5\u30FC\u30D0\u30FC\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
305642
+ "Restarts MCP servers.": "MCP\u30B5\u30FC\u30D0\u30FC\u3092\u518D\u8D77\u52D5\u3057\u307E\u3059",
305643
+ "Config not loaded.": "\u8A2D\u5B9A\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u3066\u3044\u307E\u305B\u3093",
305644
+ "Could not retrieve tool registry.": "\u30C4\u30FC\u30EB\u30EC\u30B8\u30B9\u30C8\u30EA\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F",
305645
+ "No MCP servers configured with OAuth authentication.": "OAuth\u8A8D\u8A3C\u304C\u8A2D\u5B9A\u3055\u308C\u305FMCP\u30B5\u30FC\u30D0\u30FC\u306F\u3042\u308A\u307E\u305B\u3093",
305646
+ "MCP servers with OAuth authentication:": "OAuth\u8A8D\u8A3C\u306EMCP\u30B5\u30FC\u30D0\u30FC:",
305647
+ "Use /mcp auth <server-name> to authenticate.": "\u8A8D\u8A3C\u3059\u308B\u306B\u306F /mcp auth <\u30B5\u30FC\u30D0\u30FC\u540D> \u3092\u4F7F\u7528",
305648
+ "MCP server '{{name}}' not found.": "MCP\u30B5\u30FC\u30D0\u30FC '{{name}}' \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
305649
+ "Successfully authenticated and refreshed tools for '{{name}}'.": "'{{name}}' \u306E\u8A8D\u8A3C\u3068\u30C4\u30FC\u30EB\u66F4\u65B0\u306B\u6210\u529F\u3057\u307E\u3057\u305F",
305650
+ "Failed to authenticate with MCP server '{{name}}': {{error}}": "MCP\u30B5\u30FC\u30D0\u30FC '{{name}}' \u3067\u306E\u8A8D\u8A3C\u306B\u5931\u6557: {{error}}",
305651
+ "Re-discovering tools from '{{name}}'...": "'{{name}}' \u304B\u3089\u30C4\u30FC\u30EB\u3092\u518D\u691C\u51FA\u4E2D...",
305652
+ "Configured MCP servers:": "\u8A2D\u5B9A\u6E08\u307FMCP\u30B5\u30FC\u30D0\u30FC:",
305653
+ Ready: "\u6E96\u5099\u5B8C\u4E86",
305654
+ Disconnected: "\u5207\u65AD",
305655
+ "{{count}} tool": "{{count}} \u30C4\u30FC\u30EB",
305656
+ "{{count}} tools": "{{count}} \u30C4\u30FC\u30EB",
305657
+ "Restarting MCP servers...": "MCP\u30B5\u30FC\u30D0\u30FC\u3092\u518D\u8D77\u52D5\u4E2D...",
305658
+ // Chat
305659
+ "Manage conversation history.": "\u4F1A\u8A71\u5C65\u6B74\u3092\u7BA1\u7406\u3057\u307E\u3059",
305660
+ "List saved conversation checkpoints": "\u4FDD\u5B58\u3055\u308C\u305F\u4F1A\u8A71\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u4E00\u89A7\u8868\u793A",
305661
+ "No saved conversation checkpoints found.": "\u4FDD\u5B58\u3055\u308C\u305F\u4F1A\u8A71\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
305662
+ "List of saved conversations:": "\u4FDD\u5B58\u3055\u308C\u305F\u4F1A\u8A71\u306E\u4E00\u89A7:",
305663
+ "Note: Newest last, oldest first": "\u6CE8: \u6700\u65B0\u306E\u3082\u306E\u304C\u4E0B\u306B\u3042\u308A\u3001\u904E\u53BB\u306E\u3082\u306E\u304C\u4E0A\u306B\u3042\u308A\u307E\u3059",
305664
+ "Save the current conversation as a checkpoint. Usage: /chat save <tag>": "\u73FE\u5728\u306E\u4F1A\u8A71\u3092\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u3068\u3057\u3066\u4FDD\u5B58\u3002\u4F7F\u3044\u65B9: /chat save <\u30BF\u30B0>",
305665
+ "Missing tag. Usage: /chat save <tag>": "\u30BF\u30B0\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002\u4F7F\u3044\u65B9: /chat save <\u30BF\u30B0>",
305666
+ "Delete a conversation checkpoint. Usage: /chat delete <tag>": "\u4F1A\u8A71\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u524A\u9664\u3002\u4F7F\u3044\u65B9: /chat delete <\u30BF\u30B0>",
305667
+ "Missing tag. Usage: /chat delete <tag>": "\u30BF\u30B0\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002\u4F7F\u3044\u65B9: /chat delete <\u30BF\u30B0>",
305668
+ "Conversation checkpoint '{{tag}}' has been deleted.": "\u4F1A\u8A71\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8 '{{tag}}' \u3092\u524A\u9664\u3057\u307E\u3057\u305F",
305669
+ "Error: No checkpoint found with tag '{{tag}}'.": "\u30A8\u30E9\u30FC: \u30BF\u30B0 '{{tag}}' \u306E\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
305670
+ "Resume a conversation from a checkpoint. Usage: /chat resume <tag>": "\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u304B\u3089\u4F1A\u8A71\u3092\u518D\u958B\u3002\u4F7F\u3044\u65B9: /chat resume <\u30BF\u30B0>",
305671
+ "Missing tag. Usage: /chat resume <tag>": "\u30BF\u30B0\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002\u4F7F\u3044\u65B9: /chat resume <\u30BF\u30B0>",
305672
+ "No saved checkpoint found with tag: {{tag}}.": "\u30BF\u30B0 {{tag}} \u306E\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
305673
+ "A checkpoint with the tag {{tag}} already exists. Do you want to overwrite it?": "\u30BF\u30B0 {{tag}} \u306E\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B?",
305674
+ "No chat client available to save conversation.": "\u4F1A\u8A71\u3092\u4FDD\u5B58\u3059\u308B\u305F\u3081\u306E\u30C1\u30E3\u30C3\u30C8\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u304C\u3042\u308A\u307E\u305B\u3093",
305675
+ "Conversation checkpoint saved with tag: {{tag}}.": "\u30BF\u30B0 {{tag}} \u3067\u4F1A\u8A71\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F",
305676
+ "No conversation found to save.": "\u4FDD\u5B58\u3059\u308B\u4F1A\u8A71\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
305677
+ "No chat client available to share conversation.": "\u4F1A\u8A71\u3092\u5171\u6709\u3059\u308B\u305F\u3081\u306E\u30C1\u30E3\u30C3\u30C8\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u304C\u3042\u308A\u307E\u305B\u3093",
305678
+ "Invalid file format. Only .md and .json are supported.": "\u7121\u52B9\u306A\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u3067\u3059\u3002.md \u3068 .json \u306E\u307F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u3059",
305679
+ "Error sharing conversation: {{error}}": "\u4F1A\u8A71\u306E\u5171\u6709\u4E2D\u306B\u30A8\u30E9\u30FC: {{error}}",
305680
+ "Conversation shared to {{filePath}}": "\u4F1A\u8A71\u3092 {{filePath}} \u306B\u5171\u6709\u3057\u307E\u3057\u305F",
305681
+ "No conversation found to share.": "\u5171\u6709\u3059\u308B\u4F1A\u8A71\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
305682
+ "Share the current conversation to a markdown or json file. Usage: /chat share <file>": "\u73FE\u5728\u306E\u4F1A\u8A71\u3092markdown\u307E\u305F\u306Fjson\u30D5\u30A1\u30A4\u30EB\u306B\u5171\u6709\u3002\u4F7F\u3044\u65B9: /chat share <\u30D5\u30A1\u30A4\u30EB>",
305683
+ // Summary
305684
+ "Generate a project summary and save it to .qwen/PROJECT_SUMMARY.md": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B5\u30DE\u30EA\u30FC\u3092\u751F\u6210\u3057\u3001.qwen/PROJECT_SUMMARY.md \u306B\u4FDD\u5B58",
305685
+ "No chat client available to generate summary.": "\u30B5\u30DE\u30EA\u30FC\u3092\u751F\u6210\u3059\u308B\u305F\u3081\u306E\u30C1\u30E3\u30C3\u30C8\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u304C\u3042\u308A\u307E\u305B\u3093",
305686
+ "Already generating summary, wait for previous request to complete": "\u30B5\u30DE\u30EA\u30FC\u751F\u6210\u4E2D\u3067\u3059\u3002\u524D\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u5B8C\u4E86\u3092\u304A\u5F85\u3061\u304F\u3060\u3055\u3044",
305687
+ "No conversation found to summarize.": "\u8981\u7D04\u3059\u308B\u4F1A\u8A71\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
305688
+ "Failed to generate project context summary: {{error}}": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30B5\u30DE\u30EA\u30FC\u306E\u751F\u6210\u306B\u5931\u6557: {{error}}",
305689
+ "Saved project summary to {{filePathForDisplay}}.": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B5\u30DE\u30EA\u30FC\u3092 {{filePathForDisplay}} \u306B\u4FDD\u5B58\u3057\u307E\u3057\u305F",
305690
+ "Saving project summary...": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B5\u30DE\u30EA\u30FC\u3092\u4FDD\u5B58\u4E2D...",
305691
+ "Generating project summary...": "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B5\u30DE\u30EA\u30FC\u3092\u751F\u6210\u4E2D...",
305692
+ "Failed to generate summary - no text content received from LLM response": "\u30B5\u30DE\u30EA\u30FC\u306E\u751F\u6210\u306B\u5931\u6557 - LLM\u30EC\u30B9\u30DD\u30F3\u30B9\u304B\u3089\u30C6\u30AD\u30B9\u30C8\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u53D7\u4FE1\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F",
305693
+ // Model
305694
+ "Switch the model for this session": "\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u30E2\u30C7\u30EB\u3092\u5207\u308A\u66FF\u3048",
305695
+ "Content generator configuration not available.": "\u30B3\u30F3\u30C6\u30F3\u30C4\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\u30FC\u8A2D\u5B9A\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
305696
+ "Authentication type not available.": "\u8A8D\u8A3C\u30BF\u30A4\u30D7\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
305697
+ "No models available for the current authentication type ({{authType}}).": "\u73FE\u5728\u306E\u8A8D\u8A3C\u30BF\u30A4\u30D7({{authType}})\u3067\u5229\u7528\u53EF\u80FD\u306A\u30E2\u30C7\u30EB\u306F\u3042\u308A\u307E\u305B\u3093",
305698
+ // Clear
305699
+ "Starting a new session, resetting chat, and clearing terminal.": "\u65B0\u3057\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u958B\u59CB\u3057\u3001\u30C1\u30E3\u30C3\u30C8\u3092\u30EA\u30BB\u30C3\u30C8\u3057\u3001\u30BF\u30FC\u30DF\u30CA\u30EB\u3092\u30AF\u30EA\u30A2\u3057\u3066\u3044\u307E\u3059",
305700
+ "Starting a new session and clearing.": "\u65B0\u3057\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u958B\u59CB\u3057\u3066\u30AF\u30EA\u30A2\u3057\u3066\u3044\u307E\u3059",
305701
+ // Compress
305702
+ "Already compressing, wait for previous request to complete": "\u5727\u7E2E\u4E2D\u3067\u3059\u3002\u524D\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u5B8C\u4E86\u3092\u304A\u5F85\u3061\u304F\u3060\u3055\u3044",
305703
+ "Failed to compress chat history.": "\u30C1\u30E3\u30C3\u30C8\u5C65\u6B74\u306E\u5727\u7E2E\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
305704
+ "Failed to compress chat history: {{error}}": "\u30C1\u30E3\u30C3\u30C8\u5C65\u6B74\u306E\u5727\u7E2E\u306B\u5931\u6557: {{error}}",
305705
+ "Compressing chat history": "\u30C1\u30E3\u30C3\u30C8\u5C65\u6B74\u3092\u5727\u7E2E\u4E2D",
305706
+ "Chat history compressed from {{originalTokens}} to {{newTokens}} tokens.": "\u30C1\u30E3\u30C3\u30C8\u5C65\u6B74\u3092 {{originalTokens}} \u30C8\u30FC\u30AF\u30F3\u304B\u3089 {{newTokens}} \u30C8\u30FC\u30AF\u30F3\u306B\u5727\u7E2E\u3057\u307E\u3057\u305F",
305707
+ "Compression was not beneficial for this history size.": "\u3053\u306E\u5C65\u6B74\u30B5\u30A4\u30BA\u306B\u306F\u5727\u7E2E\u306E\u52B9\u679C\u304C\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F",
305708
+ "Chat history compression did not reduce size. This may indicate issues with the compression prompt.": "\u30C1\u30E3\u30C3\u30C8\u5C65\u6B74\u306E\u5727\u7E2E\u3067\u30B5\u30A4\u30BA\u304C\u6E1B\u5C11\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5727\u7E2E\u30D7\u30ED\u30F3\u30D7\u30C8\u306B\u554F\u984C\u304C\u3042\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059",
305709
+ "Could not compress chat history due to a token counting error.": "\u30C8\u30FC\u30AF\u30F3\u30AB\u30A6\u30F3\u30C8\u30A8\u30E9\u30FC\u306E\u305F\u3081\u3001\u30C1\u30E3\u30C3\u30C8\u5C65\u6B74\u3092\u5727\u7E2E\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F",
305710
+ "Chat history is already compressed.": "\u30C1\u30E3\u30C3\u30C8\u5C65\u6B74\u306F\u65E2\u306B\u5727\u7E2E\u3055\u308C\u3066\u3044\u307E\u3059",
305711
+ // Directory
305712
+ "Configuration is not available.": "\u8A2D\u5B9A\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093",
305713
+ "Please provide at least one path to add.": "\u8FFD\u52A0\u3059\u308B\u30D1\u30B9\u3092\u5C11\u306A\u304F\u3068\u30821\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",
305714
+ "The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.": "\u5236\u9650\u7684\u306A\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u3067\u306F /directory add \u30B3\u30DE\u30F3\u30C9\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u4EE3\u308F\u308A\u306B\u30BB\u30C3\u30B7\u30E7\u30F3\u958B\u59CB\u6642\u306B --include-directories \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044",
305715
+ "Error adding '{{path}}': {{error}}": "'{{path}}' \u306E\u8FFD\u52A0\u4E2D\u306B\u30A8\u30E9\u30FC: {{error}}",
305716
+ "Successfully added QWEN.md files from the following directories if there are:\n- {{directories}}": "\u4EE5\u4E0B\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304B\u3089 QWEN.md \u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0\u3057\u307E\u3057\u305F(\u5B58\u5728\u3059\u308B\u5834\u5408):\n- {{directories}}",
305717
+ "Error refreshing memory: {{error}}": "\u30E1\u30E2\u30EA\u306E\u66F4\u65B0\u4E2D\u306B\u30A8\u30E9\u30FC: {{error}}",
305718
+ "Successfully added directories:\n- {{directories}}": "\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u6B63\u5E38\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F:\n- {{directories}}",
305719
+ "Current workspace directories:\n{{directories}}": "\u73FE\u5728\u306E\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA:\n{{directories}}",
305720
+ // Docs
305721
+ "Please open the following URL in your browser to view the documentation:\n{{url}}": "\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u8868\u793A\u3059\u308B\u306B\u306F\u3001\u30D6\u30E9\u30A6\u30B6\u3067\u4EE5\u4E0B\u306EURL\u3092\u958B\u3044\u3066\u304F\u3060\u3055\u3044:\n{{url}}",
305722
+ "Opening documentation in your browser: {{url}}": " \u30D6\u30E9\u30A6\u30B6\u3067\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u958B\u304D\u307E\u3057\u305F: {{url}}",
305723
+ // Dialogs - Tool Confirmation
305724
+ "Do you want to proceed?": "\u7D9A\u884C\u3057\u307E\u3059\u304B?",
305725
+ "Yes, allow once": "\u306F\u3044(\u4ECA\u56DE\u306E\u307F\u8A31\u53EF)",
305726
+ "Allow always": "\u5E38\u306B\u8A31\u53EF\u3059\u308B",
305727
+ No: "\u3044\u3044\u3048",
305728
+ "No (esc)": "\u3044\u3044\u3048 (Esc)",
305729
+ "Yes, allow always for this session": "\u306F\u3044\u3001\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3067\u5E38\u306B\u8A31\u53EF",
305730
+ "Modify in progress:": "\u5909\u66F4\u4E2D:",
305731
+ "Save and close external editor to continue": "\u7D9A\u884C\u3059\u308B\u306B\u306F\u5916\u90E8\u30A8\u30C7\u30A3\u30BF\u3092\u4FDD\u5B58\u3057\u3066\u9589\u3058\u3066\u304F\u3060\u3055\u3044",
305732
+ "Apply this change?": "\u3053\u306E\u5909\u66F4\u3092\u9069\u7528\u3057\u307E\u3059\u304B?",
305733
+ "Yes, allow always": "\u306F\u3044\u3001\u5E38\u306B\u8A31\u53EF",
305734
+ "Modify with external editor": "\u5916\u90E8\u30A8\u30C7\u30A3\u30BF\u3067\u7DE8\u96C6",
305735
+ "No, suggest changes (esc)": "\u3044\u3044\u3048\u3001\u5909\u66F4\u3092\u63D0\u6848 (Esc)",
305736
+ "Allow execution of: '{{command}}'?": "'{{command}}' \u306E\u5B9F\u884C\u3092\u8A31\u53EF\u3057\u307E\u3059\u304B?",
305737
+ "Yes, allow always ...": "\u306F\u3044\u3001\u5E38\u306B\u8A31\u53EF...",
305738
+ "Yes, and auto-accept edits": "\u306F\u3044\u3001\u7DE8\u96C6\u3092\u81EA\u52D5\u627F\u8A8D",
305739
+ "Yes, and manually approve edits": "\u306F\u3044\u3001\u7DE8\u96C6\u3092\u624B\u52D5\u627F\u8A8D",
305740
+ "No, keep planning (esc)": "\u3044\u3044\u3048\u3001\u8A08\u753B\u3092\u7D9A\u3051\u308B (Esc)",
305741
+ "URLs to fetch:": "\u53D6\u5F97\u3059\u308BURL:",
305742
+ "MCP Server: {{server}}": "MCP\u30B5\u30FC\u30D0\u30FC: {{server}}",
305743
+ "Tool: {{tool}}": "\u30C4\u30FC\u30EB: {{tool}}",
305744
+ 'Allow execution of MCP tool "{{tool}}" from server "{{server}}"?': '\u30B5\u30FC\u30D0\u30FC "{{server}}" \u304B\u3089\u306E MCP\u30C4\u30FC\u30EB "{{tool}}" \u306E\u5B9F\u884C\u3092\u8A31\u53EF\u3057\u307E\u3059\u304B?',
305745
+ 'Yes, always allow tool "{{tool}}" from server "{{server}}"': '\u306F\u3044\u3001\u30B5\u30FC\u30D0\u30FC "{{server}}" \u304B\u3089\u306E\u30C4\u30FC\u30EB "{{tool}}" \u3092\u5E38\u306B\u8A31\u53EF',
305746
+ 'Yes, always allow all tools from server "{{server}}"': '\u306F\u3044\u3001\u30B5\u30FC\u30D0\u30FC "{{server}}" \u304B\u3089\u306E\u3059\u3079\u3066\u306E\u30C4\u30FC\u30EB\u3092\u5E38\u306B\u8A31\u53EF',
305747
+ // Dialogs - Shell Confirmation
305748
+ "Shell Command Execution": "\u30B7\u30A7\u30EB\u30B3\u30DE\u30F3\u30C9\u5B9F\u884C",
305749
+ "A custom command wants to run the following shell commands:": "\u30AB\u30B9\u30BF\u30E0\u30B3\u30DE\u30F3\u30C9\u304C\u4EE5\u4E0B\u306E\u30B7\u30A7\u30EB\u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059:",
305750
+ // Dialogs - Pro Quota
305751
+ "Pro quota limit reached for {{model}}.": "{{model}} \u306EPro\u30AF\u30A9\u30FC\u30BF\u4E0A\u9650\u306B\u9054\u3057\u307E\u3057\u305F",
305752
+ "Change auth (executes the /auth command)": "\u8A8D\u8A3C\u3092\u5909\u66F4(/auth \u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C)",
305753
+ "Continue with {{model}}": "{{model}} \u3067\u7D9A\u884C",
305754
+ // Dialogs - Welcome Back
305755
+ "Current Plan:": "\u73FE\u5728\u306E\u30D7\u30E9\u30F3:",
305756
+ "Progress: {{done}}/{{total}} tasks completed": "\u9032\u6357: {{done}}/{{total}} \u30BF\u30B9\u30AF\u5B8C\u4E86",
305757
+ ", {{inProgress}} in progress": "\u3001{{inProgress}} \u9032\u884C\u4E2D",
305758
+ "Pending Tasks:": "\u4FDD\u7559\u4E2D\u306E\u30BF\u30B9\u30AF:",
305759
+ "What would you like to do?": "\u4F55\u3092\u3057\u307E\u3059\u304B?",
305760
+ "Choose how to proceed with your session:": "\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u7D9A\u884C\u65B9\u6CD5\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",
305761
+ "Start new chat session": "\u65B0\u3057\u3044\u30C1\u30E3\u30C3\u30C8\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u958B\u59CB",
305762
+ "Continue previous conversation": "\u524D\u56DE\u306E\u4F1A\u8A71\u3092\u7D9A\u884C",
305763
+ "\u{1F44B} Welcome back! (Last updated: {{timeAgo}})": "\u{1F44B} \u304A\u304B\u3048\u308A\u306A\u3055\u3044!(\u6700\u7D42\u66F4\u65B0: {{timeAgo}})",
305764
+ "\u{1F3AF} Overall Goal:": "\u{1F3AF} \u5168\u4F53\u76EE\u6A19:",
305765
+ // Dialogs - Auth
305766
+ "Get started": "\u59CB\u3081\u308B",
305767
+ "How would you like to authenticate for this project?": "\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u8A8D\u8A3C\u65B9\u6CD5\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",
305768
+ "OpenAI API key is required to use OpenAI authentication.": "OpenAI\u8A8D\u8A3C\u3092\u4F7F\u7528\u3059\u308B\u306B\u306F OpenAI API\u30AD\u30FC\u304C\u5FC5\u8981\u3067\u3059",
305769
+ "You must select an auth method to proceed. Press Ctrl+C again to exit.": "\u7D9A\u884C\u3059\u308B\u306B\u306F\u8A8D\u8A3C\u65B9\u6CD5\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002Ctrl+C \u3092\u3082\u3046\u4E00\u5EA6\u62BC\u3059\u3068\u7D42\u4E86\u3057\u307E\u3059",
305770
+ "(Use Enter to Set Auth)": "(Enter \u3067\u8A8D\u8A3C\u3092\u8A2D\u5B9A)",
305771
+ "Terms of Services and Privacy Notice for Qwen Code": "Qwen Code \u306E\u5229\u7528\u898F\u7D04\u3068\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u901A\u77E5",
305772
+ "Qwen OAuth": "Qwen OAuth",
305773
+ OpenAI: "OpenAI",
305774
+ "Failed to login. Message: {{message}}": "\u30ED\u30B0\u30A4\u30F3\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30E1\u30C3\u30BB\u30FC\u30B8: {{message}}",
305775
+ "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.": "\u8A8D\u8A3C\u306F {{enforcedType}} \u306B\u5F37\u5236\u3055\u308C\u3066\u3044\u307E\u3059\u304C\u3001\u73FE\u5728 {{currentType}} \u3092\u4F7F\u7528\u3057\u3066\u3044\u307E\u3059",
305776
+ "Qwen OAuth authentication timed out. Please try again.": "Qwen OAuth\u8A8D\u8A3C\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
305777
+ "Qwen OAuth authentication cancelled.": "Qwen OAuth\u8A8D\u8A3C\u304C\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F",
305778
+ "Qwen OAuth Authentication": "Qwen OAuth\u8A8D\u8A3C",
305779
+ "Please visit this URL to authorize:": "\u8A8D\u8A3C\u3059\u308B\u306B\u306F\u4EE5\u4E0B\u306EURL\u306B\u30A2\u30AF\u30BB\u30B9\u3057\u3066\u304F\u3060\u3055\u3044:",
305780
+ "Or scan the QR code below:": "\u307E\u305F\u306F\u4EE5\u4E0B\u306EQR\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3:",
305781
+ "Waiting for authorization": "\u8A8D\u8A3C\u3092\u5F85\u3063\u3066\u3044\u307E\u3059",
305782
+ "Time remaining:": "\u6B8B\u308A\u6642\u9593:",
305783
+ "(Press ESC or CTRL+C to cancel)": "(ESC \u307E\u305F\u306F CTRL+C \u3067\u30AD\u30E3\u30F3\u30BB\u30EB)",
305784
+ "Qwen OAuth Authentication Timeout": "Qwen OAuth\u8A8D\u8A3C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8",
305785
+ "OAuth token expired (over {{seconds}} seconds). Please select authentication method again.": "OAuth\u30C8\u30FC\u30AF\u30F3\u304C\u671F\u9650\u5207\u308C\u3067\u3059({{seconds}}\u79D2\u4EE5\u4E0A)\u3002\u8A8D\u8A3C\u65B9\u6CD5\u3092\u518D\u5EA6\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",
305786
+ "Press any key to return to authentication type selection.": "\u8A8D\u8A3C\u30BF\u30A4\u30D7\u9078\u629E\u306B\u623B\u308B\u306B\u306F\u4EFB\u610F\u306E\u30AD\u30FC\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044",
305787
+ "Waiting for Qwen OAuth authentication...": "Qwen OAuth\u8A8D\u8A3C\u3092\u5F85\u3063\u3066\u3044\u307E\u3059...",
305788
+ "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.": "\u6CE8: Qwen OAuth\u3092\u4F7F\u7528\u3057\u3066\u3082\u3001settings.json\u5185\u306E\u65E2\u5B58\u306EAPI\u30AD\u30FC\u306F\u30AF\u30EA\u30A2\u3055\u308C\u307E\u305B\u3093\u3002\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u5F8C\u3067OpenAI\u8A8D\u8A3C\u306B\u5207\u308A\u66FF\u3048\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059",
305789
+ "Authentication timed out. Please try again.": "\u8A8D\u8A3C\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
305790
+ "Waiting for auth... (Press ESC or CTRL+C to cancel)": "\u8A8D\u8A3C\u3092\u5F85\u3063\u3066\u3044\u307E\u3059... (ESC \u307E\u305F\u306F CTRL+C \u3067\u30AD\u30E3\u30F3\u30BB\u30EB)",
305791
+ "Failed to authenticate. Message: {{message}}": "\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30E1\u30C3\u30BB\u30FC\u30B8: {{message}}",
305792
+ "Authenticated successfully with {{authType}} credentials.": "{{authType}} \u8A8D\u8A3C\u60C5\u5831\u3067\u6B63\u5E38\u306B\u8A8D\u8A3C\u3055\u308C\u307E\u3057\u305F",
305793
+ 'Invalid QWEN_DEFAULT_AUTH_TYPE value: "{{value}}". Valid values are: {{validValues}}': '\u7121\u52B9\u306A QWEN_DEFAULT_AUTH_TYPE \u5024: "{{value}}"\u3002\u6709\u52B9\u306A\u5024: {{validValues}}',
305794
+ "OpenAI Configuration Required": "OpenAI\u8A2D\u5B9A\u304C\u5FC5\u8981\u3067\u3059",
305795
+ "Please enter your OpenAI configuration. You can get an API key from": "OpenAI\u8A2D\u5B9A\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002API\u30AD\u30FC\u306F\u4EE5\u4E0B\u304B\u3089\u53D6\u5F97\u3067\u304D\u307E\u3059",
305796
+ "API Key:": "API\u30AD\u30FC:",
305797
+ "Invalid credentials: {{errorMessage}}": "\u7121\u52B9\u306A\u8A8D\u8A3C\u60C5\u5831: {{errorMessage}}",
305798
+ "Failed to validate credentials": "\u8A8D\u8A3C\u60C5\u5831\u306E\u691C\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
305799
+ "Press Enter to continue, Tab/\u2191\u2193 to navigate, Esc to cancel": "Enter \u3067\u7D9A\u884C\u3001Tab/\u2191\u2193 \u3067\u79FB\u52D5\u3001Esc \u3067\u30AD\u30E3\u30F3\u30BB\u30EB",
305800
+ // Dialogs - Model
305801
+ "Select Model": "\u30E2\u30C7\u30EB\u3092\u9078\u629E",
305802
+ "(Press Esc to close)": "(Esc \u3067\u9589\u3058\u308B)",
305803
+ "The latest Qwen Coder model from Alibaba Cloud ModelStudio (version: qwen3-coder-plus-2025-09-23)": "Alibaba Cloud ModelStudio\u306E\u6700\u65B0Qwen Coder\u30E2\u30C7\u30EB(\u30D0\u30FC\u30B8\u30E7\u30F3: qwen3-coder-plus-2025-09-23)",
305804
+ "The latest Qwen Vision model from Alibaba Cloud ModelStudio (version: qwen3-vl-plus-2025-09-23)": "Alibaba Cloud ModelStudio\u306E\u6700\u65B0Qwen Vision\u30E2\u30C7\u30EB(\u30D0\u30FC\u30B8\u30E7\u30F3: qwen3-vl-plus-2025-09-23)",
305805
+ // Dialogs - Permissions
305806
+ "Manage folder trust settings": "\u30D5\u30A9\u30EB\u30C0\u4FE1\u983C\u8A2D\u5B9A\u3092\u7BA1\u7406",
305807
+ // Status Bar
305808
+ "Using:": "\u4F7F\u7528\u4E2D:",
305809
+ "{{count}} open file": "{{count}} \u500B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u3044\u3066\u3044\u307E\u3059",
305810
+ "{{count}} open files": "{{count}} \u500B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u3044\u3066\u3044\u307E\u3059",
305811
+ "(ctrl+g to view)": "(Ctrl+G \u3067\u8868\u793A)",
305812
+ "{{count}} {{name}} file": "{{count}} {{name}} \u30D5\u30A1\u30A4\u30EB",
305813
+ "{{count}} {{name}} files": "{{count}} {{name}} \u30D5\u30A1\u30A4\u30EB",
305814
+ "{{count}} MCP server": "{{count}} MCP\u30B5\u30FC\u30D0\u30FC",
305815
+ "{{count}} MCP servers": "{{count}} MCP\u30B5\u30FC\u30D0\u30FC",
305816
+ "{{count}} Blocked": "{{count}} \u30D6\u30ED\u30C3\u30AF",
305817
+ "(ctrl+t to view)": "(Ctrl+T \u3067\u8868\u793A)",
305818
+ "(ctrl+t to toggle)": "(Ctrl+T \u3067\u5207\u308A\u66FF\u3048)",
305819
+ "Press Ctrl+C again to exit.": "Ctrl+C \u3092\u3082\u3046\u4E00\u5EA6\u62BC\u3059\u3068\u7D42\u4E86\u3057\u307E\u3059",
305820
+ "Press Ctrl+D again to exit.": "Ctrl+D \u3092\u3082\u3046\u4E00\u5EA6\u62BC\u3059\u3068\u7D42\u4E86\u3057\u307E\u3059",
305821
+ "Press Esc again to clear.": "Esc \u3092\u3082\u3046\u4E00\u5EA6\u62BC\u3059\u3068\u30AF\u30EA\u30A2\u3057\u307E\u3059",
305822
+ // MCP Status
305823
+ "Please view MCP documentation in your browser:": "\u30D6\u30E9\u30A6\u30B6\u3067MCP\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044:",
305824
+ "or use the cli /docs command": "\u307E\u305F\u306F CLI \u306E /docs \u30B3\u30DE\u30F3\u30C9\u3092\u4F7F\u7528",
305825
+ "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 MCP\u30B5\u30FC\u30D0\u30FC\u3092\u8D77\u52D5\u4E2D({{count}} \u521D\u671F\u5316\u4E2D)...",
305826
+ "Note: First startup may take longer. Tool availability will update automatically.": "\u6CE8: \u521D\u56DE\u8D77\u52D5\u306B\u306F\u6642\u9593\u304C\u304B\u304B\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002\u30C4\u30FC\u30EB\u306E\u5229\u7528\u53EF\u80FD\u72B6\u6CC1\u306F\u81EA\u52D5\u7684\u306B\u66F4\u65B0\u3055\u308C\u307E\u3059",
305827
+ "Starting... (first startup may take longer)": "\u8D77\u52D5\u4E2D...(\u521D\u56DE\u8D77\u52D5\u306B\u306F\u6642\u9593\u304C\u304B\u304B\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059)",
305828
+ "{{count}} prompt": "{{count}} \u30D7\u30ED\u30F3\u30D7\u30C8",
305829
+ "{{count}} prompts": "{{count}} \u30D7\u30ED\u30F3\u30D7\u30C8",
305830
+ "(from {{extensionName}})": "({{extensionName}} \u304B\u3089)",
305831
+ OAuth: "OAuth",
305832
+ "OAuth expired": "OAuth \u671F\u9650\u5207\u308C",
305833
+ "OAuth not authenticated": "OAuth \u672A\u8A8D\u8A3C",
305834
+ "tools and prompts will appear when ready": "\u30C4\u30FC\u30EB\u3068\u30D7\u30ED\u30F3\u30D7\u30C8\u306F\u6E96\u5099\u5B8C\u4E86\u5F8C\u306B\u8868\u793A\u3055\u308C\u307E\u3059",
305835
+ "{{count}} tools cached": "{{count}} \u30C4\u30FC\u30EB(\u30AD\u30E3\u30C3\u30B7\u30E5\u6E08\u307F)",
305836
+ "Tools:": "\u30C4\u30FC\u30EB:",
305837
+ "Parameters:": "\u30D1\u30E9\u30E1\u30FC\u30BF:",
305838
+ "Prompts:": "\u30D7\u30ED\u30F3\u30D7\u30C8:",
305839
+ Blocked: "\u30D6\u30ED\u30C3\u30AF",
305840
+ "\u{1F4A1} Tips:": "\u{1F4A1} \u30D2\u30F3\u30C8:",
305841
+ Use: "\u4F7F\u7528",
305842
+ "to show server and tool descriptions": "\u30B5\u30FC\u30D0\u30FC\u3068\u30C4\u30FC\u30EB\u306E\u8AAC\u660E\u3092\u8868\u793A",
305843
+ "to show tool parameter schemas": "\u30C4\u30FC\u30EB\u30D1\u30E9\u30E1\u30FC\u30BF\u30B9\u30AD\u30FC\u30DE\u3092\u8868\u793A",
305844
+ "to hide descriptions": "\u8AAC\u660E\u3092\u975E\u8868\u793A",
305845
+ "to authenticate with OAuth-enabled servers": "OAuth\u5BFE\u5FDC\u30B5\u30FC\u30D0\u30FC\u3067\u8A8D\u8A3C",
305846
+ Press: "\u62BC\u3059",
305847
+ "to toggle tool descriptions on/off": "\u30C4\u30FC\u30EB\u8AAC\u660E\u306E\u8868\u793A/\u975E\u8868\u793A\u3092\u5207\u308A\u66FF\u3048",
305848
+ "Starting OAuth authentication for MCP server '{{name}}'...": "MCP\u30B5\u30FC\u30D0\u30FC '{{name}}' \u306EOAuth\u8A8D\u8A3C\u3092\u958B\u59CB\u4E2D...",
305849
+ // Startup Tips
305850
+ "Tips for getting started:": "\u59CB\u3081\u308B\u305F\u3081\u306E\u30D2\u30F3\u30C8:",
305851
+ "1. Ask questions, edit files, or run commands.": "1. \u8CEA\u554F\u3057\u305F\u308A\u3001\u30D5\u30A1\u30A4\u30EB\u3092\u7DE8\u96C6\u3057\u305F\u308A\u3001\u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3057\u305F\u308A\u3067\u304D\u307E\u3059",
305852
+ "2. Be specific for the best results.": "2. \u5177\u4F53\u7684\u306B\u6307\u793A\u3059\u308B\u3068\u6700\u826F\u306E\u7D50\u679C\u304C\u5F97\u3089\u308C\u307E\u3059",
305853
+ "files to customize your interactions with Qwen Code.": "Qwen Code \u3068\u306E\u5BFE\u8A71\u3092\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u3059\u308B\u305F\u3081\u306E\u30D5\u30A1\u30A4\u30EB",
305854
+ "for more information.": "\u8A73\u7D30\u60C5\u5831\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059",
305855
+ // Exit Screen / Stats
305856
+ "Agent powering down. Goodbye!": "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002\u3055\u3088\u3046\u306A\u3089!",
305857
+ "To continue this session, run": "\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u7D9A\u884C\u3059\u308B\u306B\u306F\u3001\u6B21\u3092\u5B9F\u884C:",
305858
+ "Interaction Summary": "\u30A4\u30F3\u30BF\u30E9\u30AF\u30B7\u30E7\u30F3\u6982\u8981",
305859
+ "Session ID:": "\u30BB\u30C3\u30B7\u30E7\u30F3ID:",
305860
+ "Tool Calls:": "\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057:",
305861
+ "Success Rate:": "\u6210\u529F\u7387:",
305862
+ "User Agreement:": "\u30E6\u30FC\u30B6\u30FC\u540C\u610F:",
305863
+ reviewed: "\u30EC\u30D3\u30E5\u30FC\u6E08\u307F",
305864
+ "Code Changes:": "\u30B3\u30FC\u30C9\u5909\u66F4:",
305865
+ Performance: "\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9",
305866
+ "Wall Time:": "\u7D4C\u904E\u6642\u9593:",
305867
+ "Agent Active:": "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u7A3C\u50CD\u6642\u9593:",
305868
+ "API Time:": "API\u6642\u9593:",
305869
+ "Tool Time:": "\u30C4\u30FC\u30EB\u6642\u9593:",
305870
+ "Session Stats": "\u30BB\u30C3\u30B7\u30E7\u30F3\u7D71\u8A08",
305871
+ "Model Usage": "\u30E2\u30C7\u30EB\u4F7F\u7528\u91CF",
305872
+ Reqs: "\u30EA\u30AF\u30A8\u30B9\u30C8",
305873
+ "Input Tokens": "\u5165\u529B\u30C8\u30FC\u30AF\u30F3",
305874
+ "Output Tokens": "\u51FA\u529B\u30C8\u30FC\u30AF\u30F3",
305875
+ "Savings Highlight:": "\u7BC0\u7D04\u30CF\u30A4\u30E9\u30A4\u30C8:",
305876
+ "of input tokens were served from the cache, reducing costs.": "\u5165\u529B\u30C8\u30FC\u30AF\u30F3\u304C\u30AD\u30E3\u30C3\u30B7\u30E5\u304B\u3089\u63D0\u4F9B\u3055\u308C\u3001\u30B3\u30B9\u30C8\u3092\u524A\u6E1B\u3057\u307E\u3057\u305F",
305877
+ "Tip: For a full token breakdown, run `/stats model`.": "\u30D2\u30F3\u30C8: \u30C8\u30FC\u30AF\u30F3\u306E\u8A73\u7D30\u306A\u5185\u8A33\u306F `/stats model` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044",
305878
+ "Model Stats For Nerds": "\u30DE\u30CB\u30A2\u5411\u3051\u30E2\u30C7\u30EB\u7D71\u8A08",
305879
+ "Tool Stats For Nerds": "\u30DE\u30CB\u30A2\u5411\u3051\u30C4\u30FC\u30EB\u7D71\u8A08",
305880
+ Metric: "\u30E1\u30C8\u30EA\u30C3\u30AF",
305881
+ API: "API",
305882
+ Requests: "\u30EA\u30AF\u30A8\u30B9\u30C8",
305883
+ Errors: "\u30A8\u30E9\u30FC",
305884
+ "Avg Latency": "\u5E73\u5747\u30EC\u30A4\u30C6\u30F3\u30B7",
305885
+ Tokens: "\u30C8\u30FC\u30AF\u30F3",
305886
+ Total: "\u5408\u8A08",
305887
+ Prompt: "\u30D7\u30ED\u30F3\u30D7\u30C8",
305888
+ Cached: "\u30AD\u30E3\u30C3\u30B7\u30E5",
305889
+ Thoughts: "\u601D\u8003",
305890
+ Tool: "\u30C4\u30FC\u30EB",
305891
+ Output: "\u51FA\u529B",
305892
+ "No API calls have been made in this session.": "\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3067\u306FAPI\u547C\u3073\u51FA\u3057\u304C\u884C\u308F\u308C\u3066\u3044\u307E\u305B\u3093",
305893
+ "Tool Name": "\u30C4\u30FC\u30EB\u540D",
305894
+ Calls: "\u547C\u3073\u51FA\u3057",
305895
+ "Success Rate": "\u6210\u529F\u7387",
305896
+ "Avg Duration": "\u5E73\u5747\u6642\u9593",
305897
+ "User Decision Summary": "\u30E6\u30FC\u30B6\u30FC\u6C7A\u5B9A\u30B5\u30DE\u30EA\u30FC",
305898
+ "Total Reviewed Suggestions:": "\u7DCF\u30EC\u30D3\u30E5\u30FC\u63D0\u6848\u6570:",
305899
+ " \xBB Accepted:": " \xBB \u627F\u8A8D:",
305900
+ " \xBB Rejected:": " \xBB \u5374\u4E0B:",
305901
+ " \xBB Modified:": " \xBB \u5909\u66F4:",
305902
+ " Overall Agreement Rate:": " \u5168\u4F53\u627F\u8A8D\u7387:",
305903
+ "No tool calls have been made in this session.": "\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3067\u306F\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u304C\u884C\u308F\u308C\u3066\u3044\u307E\u305B\u3093",
305904
+ "Session start time is unavailable, cannot calculate stats.": "\u30BB\u30C3\u30B7\u30E7\u30F3\u958B\u59CB\u6642\u523B\u304C\u5229\u7528\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u7D71\u8A08\u3092\u8A08\u7B97\u3067\u304D\u307E\u305B\u3093",
305905
+ // Loading
305906
+ "Waiting for user confirmation...": "\u30E6\u30FC\u30B6\u30FC\u306E\u78BA\u8A8D\u3092\u5F85\u3063\u3066\u3044\u307E\u3059...",
305907
+ "(esc to cancel, {{time}})": "(Esc \u3067\u30AD\u30E3\u30F3\u30BB\u30EB\u3001{{time}})",
305908
+ // Witty Loading Phrases
305909
+ WITTY_LOADING_PHRASES: [
305910
+ "\u904B\u4EFB\u305B\u3067\u691C\u7D22\u4E2D...",
305911
+ "\u4E2D\u306E\u4EBA\u304C\u30BF\u30A4\u30D4\u30F3\u30B0\u4E2D...",
305912
+ "\u30ED\u30B8\u30C3\u30AF\u3092\u6700\u9069\u5316\u4E2D...",
305913
+ "\u96FB\u5B50\u306E\u6570\u3092\u78BA\u8A8D\u4E2D...",
305914
+ "\u5B87\u5B99\u306E\u30D0\u30B0\u3092\u30C1\u30A7\u30C3\u30AF\u4E2D...",
305915
+ "\u5927\u91CF\u306E0\u30681\u3092\u30B3\u30F3\u30D1\u30A4\u30EB\u4E2D...",
305916
+ "HDD\u3068\u601D\u3044\u51FA\u3092\u30C7\u30D5\u30E9\u30B0\u4E2D...",
305917
+ "\u30D3\u30C3\u30C8\u3092\u3053\u3063\u305D\u308A\u5165\u308C\u66FF\u3048\u4E2D...",
305918
+ "\u30CB\u30E5\u30FC\u30ED\u30F3\u306E\u63A5\u7D9A\u3092\u518D\u69CB\u7BC9\u4E2D...",
305919
+ "\u3069\u3053\u304B\u306B\u884C\u3063\u305F\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u635C\u7D22\u4E2D...",
305920
+ "\u30D5\u30E9\u30C3\u30AF\u30B9\u30AD\u30E3\u30D1\u30B7\u30BF\u3092\u8ABF\u6574\u4E2D...",
305921
+ "\u30D5\u30A9\u30FC\u30B9\u3068\u4EA4\u611F\u4E2D...",
305922
+ "\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u3092\u30C1\u30E5\u30FC\u30CB\u30F3\u30B0\u4E2D...",
305923
+ "\u767D\u3044\u30A6\u30B5\u30AE\u3092\u8FFD\u8DE1\u4E2D...",
305924
+ "\u30AB\u30BB\u30C3\u30C8\u30D5\u30FC\u30D5\u30FC\u4E2D...",
305925
+ "\u30ED\u30FC\u30C7\u30A3\u30F3\u30B0\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8003\u3048\u4E2D...",
305926
+ "\u307B\u307C\u5B8C\u4E86...\u591A\u5206...",
305927
+ "\u6700\u65B0\u306E\u30DF\u30FC\u30E0\u306B\u3064\u3044\u3066\u8ABF\u67FB\u4E2D...",
305928
+ "\u3053\u306E\u8868\u793A\u3092\u6539\u5584\u3059\u308B\u30A2\u30A4\u30C7\u30A2\u3092\u601D\u7D22\u4E2D...",
305929
+ "\u3053\u306E\u554F\u984C\u3092\u8003\u3048\u4E2D...",
305930
+ "\u305D\u308C\u306F\u30D0\u30B0\u3067\u306A\u304F\u8AB0\u3082\u77E5\u3089\u306A\u3044\u65B0\u6A5F\u80FD\u3060\u3088",
305931
+ "\u30C0\u30A4\u30E4\u30EB\u30A2\u30C3\u30D7\u63A5\u7D9A\u97F3\u304C\u7D42\u308F\u308B\u306E\u3092\u5F85\u6A5F\u4E2D...",
305932
+ "\u30B3\u30FC\u30C9\u306B\u6CB9\u3092\u8FFD\u52A0\u4E2D...",
305933
+ // かなり意訳が入ってるもの
305934
+ "\u30A4\u30E4\u30DB\u30F3\u3092\u307B\u3069\u304D\u4E2D...",
305935
+ "\u30AB\u30D5\u30A7\u30A4\u30F3\u3092\u30B3\u30FC\u30C9\u306B\u5909\u63DB\u4E2D...",
305936
+ "\u5929\u52D5\u8AAC\u3092\u5730\u52D5\u8AAC\u306B\u66F8\u304D\u63DB\u3048\u4E2D...",
305937
+ "\u30D7\u30FC\u30EB\u3067\u6642\u8A08\u306E\u5B8C\u6210\u3092\u5F85\u6A5F\u4E2D...",
305938
+ "\u7B11\u6483\u7684\u306A\u56DE\u7B54\u3092\u7528\u610F\u4E2D...",
305939
+ "\u9069\u5207\u306A\u30DF\u30FC\u30E0\u3092\u8A18\u8FF0\u4E2D...",
305940
+ "A\u30DC\u30BF\u30F3\u3092\u62BC\u3057\u3066\u6B21\u3078...",
305941
+ "\u30B3\u30FC\u30C9\u306B\u30EA\u30C3\u30AF\u30ED\u30FC\u30EB\u3092\u4ED5\u8FBC\u307F\u4E2D...",
305942
+ "\u30D7\u30ED\u30B0\u30E9\u30DE\u30FC\u304C\u8CA7\u4E4F\u306A\u306E\u306F\u30AD\u30E3\u30C3\u30B7\u30E5\u3092\u4F7F\u3044\u3059\u304E\u308B\u304B\u3089...",
305943
+ "\u30D7\u30ED\u30B0\u30E9\u30DE\u30FC\u304C\u30C0\u30FC\u30AF\u30E2\u30FC\u30C9\u306A\u306E\u306F\u30D0\u30B0\u3092\u898B\u305F\u304F\u306A\u3044\u304B\u3089...",
305944
+ "\u30B3\u30FC\u30C9\u304C\u58CA\u308C\u305F?\u53E9\u3051\u3070\u6CBB\u308B\u3055",
305945
+ "USB\u306E\u5DEE\u3057\u8FBC\u307F\u306B\u6311\u6226\u4E2D..."
305946
+ ]
305947
+ };
305948
+ }
305949
+ });
305950
+
305951
+ // packages/cli/src/i18n/locales/pt.js
305952
+ var pt_exports = {};
305953
+ __export(pt_exports, {
305954
+ default: () => pt_default
305955
+ });
305956
+ var pt_default;
305957
+ var init_pt = __esm({
305958
+ "packages/cli/src/i18n/locales/pt.js"() {
305959
+ "use strict";
305960
+ init_esbuild_shims();
305961
+ pt_default = {
305962
+ // ============================================================================
305963
+ // Help / UI Components
305964
+ // ============================================================================
305965
+ "Basics:": "No\xE7\xF5es b\xE1sicas:",
305966
+ "Add context": "Adicionar contexto",
305967
+ "Use {{symbol}} to specify files for context (e.g., {{example}}) to target specific files or folders.": "Use {{symbol}} para especificar arquivos para o contexto (ex: {{example}}) para atingir arquivos ou pastas espec\xEDficos.",
305968
+ "@": "@",
305969
+ "@src/myFile.ts": "@src/myFile.ts",
305970
+ "Shell mode": "Modo shell",
305971
+ "YOLO mode": "Modo YOLO",
305972
+ "plan mode": "modo planejamento",
305973
+ "auto-accept edits": "aceitar edi\xE7\xF5es automaticamente",
305974
+ "Accepting edits": "Aceitando edi\xE7\xF5es",
305975
+ "(shift + tab to cycle)": "(shift + tab para alternar)",
305976
+ "Execute shell commands via {{symbol}} (e.g., {{example1}}) or use natural language (e.g., {{example2}}).": "Execute comandos shell via {{symbol}} (ex: {{example1}}) ou use linguagem natural (ex: {{example2}}).",
305977
+ "!": "!",
305978
+ "!npm run start": "!npm run start",
305979
+ "start server": "iniciar servidor",
305980
+ "Commands:": "Comandos:",
305981
+ "shell command": "comando shell",
305982
+ "Model Context Protocol command (from external servers)": "Comando Model Context Protocol (de servidores externos)",
305983
+ "Keyboard Shortcuts:": "Atalhos de teclado:",
305984
+ "Toggle this help display": "Alternar exibi\xE7\xE3o desta ajuda",
305985
+ "Toggle shell mode": "Alternar modo shell",
305986
+ "Open command menu": "Abrir menu de comandos",
305987
+ "Add file context": "Adicionar contexto de arquivo",
305988
+ "Accept suggestion / Autocomplete": "Aceitar sugest\xE3o / Autocompletar",
305989
+ "Reverse search history": "Pesquisa reversa no hist\xF3rico",
305990
+ "Press ? again to close": "Pressione ? novamente para fechar",
305991
+ // Keyboard shortcuts panel descriptions
305992
+ "for shell mode": "para modo shell",
305993
+ "for commands": "para comandos",
305994
+ "for file paths": "para caminhos de arquivo",
305995
+ "to clear input": "para limpar entrada",
305996
+ "to cycle approvals": "para alternar aprova\xE7\xF5es",
305997
+ "to quit": "para sair",
305998
+ "for newline": "para nova linha",
305999
+ "to clear screen": "para limpar a tela",
306000
+ "to search history": "para pesquisar no hist\xF3rico",
306001
+ "to paste images": "para colar imagens",
306002
+ "for external editor": "para editor externo",
306003
+ "Jump through words in the input": "Pular palavras na entrada",
306004
+ "Close dialogs, cancel requests, or quit application": "Fechar di\xE1logos, cancelar solicita\xE7\xF5es ou sair do aplicativo",
306005
+ "New line": "Nova linha",
306006
+ "New line (Alt+Enter works for certain linux distros)": "Nova linha (Alt+Enter funciona em certas distros linux)",
306007
+ "Clear the screen": "Limpar a tela",
306008
+ "Open input in external editor": "Abrir entrada no editor externo",
306009
+ "Send message": "Enviar mensagem",
306010
+ "Initializing...": "Inicializando...",
306011
+ "Connecting to MCP servers... ({{connected}}/{{total}})": "Conectando aos servidores MCP... ({{connected}}/{{total}})",
306012
+ "Type your message or @path/to/file": "Digite sua mensagem ou @caminho/do/arquivo",
306013
+ "? for shortcuts": "? para atalhos",
306014
+ "Press 'i' for INSERT mode and 'Esc' for NORMAL mode.": "Pressione 'i' para modo INSER\xC7\xC3O e 'Esc' para modo NORMAL.",
306015
+ "Cancel operation / Clear input (double press)": "Cancelar opera\xE7\xE3o / Limpar entrada (pressionar duas vezes)",
306016
+ "Cycle approval modes": "Alternar modos de aprova\xE7\xE3o",
306017
+ "Cycle through your prompt history": "Alternar hist\xF3rico de prompts",
306018
+ "For a full list of shortcuts, see {{docPath}}": "Para uma lista completa de atalhos, consulte {{docPath}}",
306019
+ "docs/keyboard-shortcuts.md": "docs/keyboard-shortcuts.md",
306020
+ "for help on Qwen Code": "para ajuda sobre o Qwen Code",
306021
+ "show version info": "mostrar informa\xE7\xF5es de vers\xE3o",
306022
+ "submit a bug report": "enviar um relat\xF3rio de erro",
306023
+ "About Qwen Code": "Sobre o Qwen Code",
306024
+ Status: "Status",
306025
+ // ============================================================================
306026
+ // System Information Fields
306027
+ // ============================================================================
306028
+ "Qwen Code": "Qwen Code",
306029
+ Runtime: "Runtime",
306030
+ OS: "SO",
306031
+ Auth: "Autentica\xE7\xE3o",
306032
+ "CLI Version": "Vers\xE3o da CLI",
306033
+ "Git Commit": "Commit do Git",
306034
+ Model: "Modelo",
306035
+ Sandbox: "Sandbox",
306036
+ "OS Platform": "Plataforma do SO",
306037
+ "OS Arch": "Arquitetura do SO",
306038
+ "OS Release": "Vers\xE3o do SO",
306039
+ "Node.js Version": "Vers\xE3o do Node.js",
306040
+ "NPM Version": "Vers\xE3o do NPM",
306041
+ "Session ID": "ID da Sess\xE3o",
306042
+ "Auth Method": "M\xE9todo de Autentica\xE7\xE3o",
306043
+ "Base URL": "URL Base",
306044
+ Proxy: "Proxy",
306045
+ "Memory Usage": "Uso de Mem\xF3ria",
306046
+ "IDE Client": "Cliente IDE",
306047
+ // ============================================================================
306048
+ // Commands - General
306049
+ // ============================================================================
306050
+ "Analyzes the project and creates a tailored QWEN.md file.": "Analisa o projeto e cria um arquivo QWEN.md personalizado.",
306051
+ "list available Qwen Code tools. Usage: /tools [desc]": "listar ferramentas Qwen Code dispon\xEDveis. Uso: /tools [desc]",
306052
+ "Available Qwen Code CLI tools:": "Ferramentas CLI do Qwen Code dispon\xEDveis:",
306053
+ "No tools available": "Nenhuma ferramenta dispon\xEDvel",
306054
+ "View or change the approval mode for tool usage": "Ver ou alterar o modo de aprova\xE7\xE3o para uso de ferramentas",
306055
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}': 'Modo de aprova\xE7\xE3o inv\xE1lido "{{arg}}". Modos v\xE1lidos: {{modes}}',
306056
+ 'Approval mode set to "{{mode}}"': 'Modo de aprova\xE7\xE3o definido como "{{mode}}"',
306057
+ "View or change the language setting": "Ver ou alterar a configura\xE7\xE3o de idioma",
306058
+ "change the theme": "alterar o tema",
306059
+ "Select Theme": "Selecionar Tema",
306060
+ Preview: "Visualizar",
306061
+ "(Use Enter to select, Tab to configure scope)": "(Use Enter para selecionar, Tab para configurar o escopo)",
306062
+ "(Use Enter to apply scope, Tab to go back)": "(Use Enter para aplicar o escopo, Tab para voltar)",
306063
+ "Theme configuration unavailable due to NO_COLOR env variable.": "Configura\xE7\xE3o de tema indispon\xEDvel devido \xE0 vari\xE1vel de ambiente NO_COLOR.",
306064
+ 'Theme "{{themeName}}" not found.': 'Tema "{{themeName}}" n\xE3o encontrado.',
306065
+ 'Theme "{{themeName}}" not found in selected scope.': 'Tema "{{themeName}}" n\xE3o encontrado no escopo selecionado.',
306066
+ "Clear conversation history and free up context": "Limpar hist\xF3rico de conversa e liberar contexto",
306067
+ "Compresses the context by replacing it with a summary.": "Comprime o contexto substituindo-o por um resumo.",
306068
+ "open full Qwen Code documentation in your browser": "abrir documenta\xE7\xE3o completa do Qwen Code no seu navegador",
306069
+ "Configuration not available.": "Configura\xE7\xE3o n\xE3o dispon\xEDvel.",
306070
+ "change the auth method": "alterar o m\xE9todo de autentica\xE7\xE3o",
306071
+ "Copy the last result or code snippet to clipboard": "Copiar o \xFAltimo resultado ou trecho de c\xF3digo para a \xE1rea de transfer\xEAncia",
306072
+ // ============================================================================
306073
+ // Commands - Agents
306074
+ // ============================================================================
306075
+ "Manage subagents for specialized task delegation.": "Gerenciar subagentes para delega\xE7\xE3o de tarefas especializadas.",
306076
+ "Manage existing subagents (view, edit, delete).": "Gerenciar subagentes existentes (ver, editar, excluir).",
306077
+ "Create a new subagent with guided setup.": "Criar um novo subagente com configura\xE7\xE3o guiada.",
306078
+ // ============================================================================
306079
+ // Agents - Management Dialog
306080
+ // ============================================================================
306081
+ Agents: "Agentes",
306082
+ "Choose Action": "Escolher A\xE7\xE3o",
306083
+ "Edit {{name}}": "Editar {{name}}",
306084
+ "Edit Tools: {{name}}": "Editar Ferramentas: {{name}}",
306085
+ "Edit Color: {{name}}": "Editar Cor: {{name}}",
306086
+ "Delete {{name}}": "Excluir {{name}}",
306087
+ "Unknown Step": "Etapa Desconhecida",
306088
+ "Esc to close": "Esc para fechar",
306089
+ "Enter to select, \u2191\u2193 to navigate, Esc to close": "Enter para selecionar, \u2191\u2193 para navegar, Esc para fechar",
306090
+ "Esc to go back": "Esc para voltar",
306091
+ "Enter to confirm, Esc to cancel": "Enter para confirmar, Esc para cancelar",
306092
+ "Enter to select, \u2191\u2193 to navigate, Esc to go back": "Enter para selecionar, \u2191\u2193 para navegar, Esc para voltar",
306093
+ "Invalid step: {{step}}": "Etapa inv\xE1lida: {{step}}",
306094
+ "No subagents found.": "Nenhum subagente encontrado.",
306095
+ "Use '/agents create' to create your first subagent.": "Use '/agents create' para criar seu primeiro subagente.",
306096
+ "(built-in)": "(integrado)",
306097
+ "(overridden by project level agent)": "(substitu\xEDdo por agente de n\xEDvel de projeto)",
306098
+ "Project Level ({{path}})": "N\xEDvel de Projeto ({{path}})",
306099
+ "User Level ({{path}})": "N\xEDvel de Usu\xE1rio ({{path}})",
306100
+ "Built-in Agents": "Agentes Integrados",
306101
+ "Extension Agents": "Agentes de Extens\xE3o",
306102
+ "Using: {{count}} agents": "Usando: {{count}} agentes",
306103
+ "View Agent": "Ver Agente",
306104
+ "Edit Agent": "Editar Agente",
306105
+ "Delete Agent": "Excluir Agente",
306106
+ Back: "Voltar",
306107
+ "No agent selected": "Nenhum agente selecionado",
306108
+ "File Path: ": "Caminho do Arquivo: ",
306109
+ "Tools: ": "Ferramentas: ",
306110
+ "Color: ": "Cor: ",
306111
+ "Description:": "Descri\xE7\xE3o:",
306112
+ "System Prompt:": "Prompt do Sistema:",
306113
+ "Open in editor": "Abrir no editor",
306114
+ "Edit tools": "Editar ferramentas",
306115
+ "Edit color": "Editar cor",
306116
+ "\u274C Error:": "\u274C Erro:",
306117
+ 'Are you sure you want to delete agent "{{name}}"?': 'Tem certeza que deseja excluir o agente "{{name}}"?',
306118
+ // ============================================================================
306119
+ // Agents - Creation Wizard
306120
+ // ============================================================================
306121
+ "Project Level (.qwen/agents/)": "N\xEDvel de Projeto (.qwen/agents/)",
306122
+ "User Level (~/.qwen/agents/)": "N\xEDvel de Usu\xE1rio (~/.qwen/agents/)",
306123
+ "\u2705 Subagent Created Successfully!": "\u2705 Subagente criado com sucesso!",
306124
+ 'Subagent "{{name}}" has been saved to {{level}} level.': 'O subagente "{{name}}" foi salvo no n\xEDvel {{level}}.',
306125
+ "Name: ": "Nome: ",
306126
+ "Location: ": "Localiza\xE7\xE3o: ",
306127
+ "\u274C Error saving subagent:": "\u274C Erro ao salvar subagente:",
306128
+ "Warnings:": "Avisos:",
306129
+ 'Name "{{name}}" already exists at {{level}} level - will overwrite existing subagent': 'O nome "{{name}}" j\xE1 existe no n\xEDvel {{level}} - o subagente existente ser\xE1 substitu\xEDdo',
306130
+ 'Name "{{name}}" exists at user level - project level will take precedence': 'O nome "{{name}}" existe no n\xEDvel de usu\xE1rio - o n\xEDvel de projeto ter\xE1 preced\xEAncia',
306131
+ 'Name "{{name}}" exists at project level - existing subagent will take precedence': 'O nome "{{name}}" existe no n\xEDvel de projeto - o subagente existente ter\xE1 preced\xEAncia',
306132
+ "Description is over {{length}} characters": "A descri\xE7\xE3o tem mais de {{length}} caracteres",
306133
+ "System prompt is over {{length}} characters": "O prompt do sistema tem mais de {{length}} caracteres",
306134
+ // ============================================================================
306135
+ // Agents - Creation Wizard Steps
306136
+ // ============================================================================
306137
+ "Step {{n}}: Choose Location": "Etapa {{n}}: Escolher Localiza\xE7\xE3o",
306138
+ "Step {{n}}: Choose Generation Method": "Etapa {{n}}: Escolher M\xE9todo de Gera\xE7\xE3o",
306139
+ "Generate with Qwen Code (Recommended)": "Gerar com Qwen Code (Recomendado)",
306140
+ "Manual Creation": "Cria\xE7\xE3o Manual",
306141
+ "Describe what this subagent should do and when it should be used. (Be comprehensive for best results)": "Descreva o que este subagente deve fazer e quando deve ser usado. (Seja abrangente para melhores resultados)",
306142
+ "e.g., Expert code reviewer that reviews code based on best practices...": "ex: Revisor de c\xF3digo especialista que revisa c\xF3digo com base em melhores pr\xE1ticas...",
306143
+ "Generating subagent configuration...": "Gerando configura\xE7\xE3o do subagente...",
306144
+ "Failed to generate subagent: {{error}}": "Falha ao gerar subagente: {{error}}",
306145
+ "Step {{n}}: Describe Your Subagent": "Etapa {{n}}: Descreva Seu Subagente",
306146
+ "Step {{n}}: Enter Subagent Name": "Etapa {{n}}: Digite o Nome do Subagente",
306147
+ "Step {{n}}: Enter System Prompt": "Etapa {{n}}: Digite o Prompt do Sistema",
306148
+ "Step {{n}}: Enter Description": "Etapa {{n}}: Digite a Descri\xE7\xE3o",
306149
+ // ============================================================================
306150
+ // Agents - Tool Selection
306151
+ // ============================================================================
306152
+ "Step {{n}}: Select Tools": "Etapa {{n}}: Selecionar Ferramentas",
306153
+ "All Tools (Default)": "Todas as Ferramentas (Padr\xE3o)",
306154
+ "All Tools": "Todas as Ferramentas",
306155
+ "Read-only Tools": "Ferramentas de Somente Leitura",
306156
+ "Read & Edit Tools": "Ferramentas de Leitura e Edi\xE7\xE3o",
306157
+ "Read & Edit & Execution Tools": "Ferramentas de Leitura, Edi\xE7\xE3o e Execu\xE7\xE3o",
306158
+ "All tools selected, including MCP tools": "Todas as ferramentas selecionadas, incluindo ferramentas MCP",
306159
+ "Selected tools:": "Ferramentas selecionadas:",
306160
+ "Read-only tools:": "Ferramentas de somente leitura:",
306161
+ "Edit tools:": "Ferramentas de edi\xE7\xE3o:",
306162
+ "Execution tools:": "Ferramentas de execu\xE7\xE3o:",
306163
+ "Step {{n}}: Choose Background Color": "Etapa {{n}}: Escolher Cor de Fundo",
306164
+ "Step {{n}}: Confirm and Save": "Etapa {{n}}: Confirmar e Salvar",
306165
+ // ============================================================================
306166
+ // Agents - Navigation & Instructions
306167
+ // ============================================================================
306168
+ "Esc to cancel": "Esc para cancelar",
306169
+ "Press Enter to save, e to save and edit, Esc to go back": "Pressione Enter para salvar, e para salvar e editar, Esc para voltar",
306170
+ "Press Enter to continue, {{navigation}}Esc to {{action}}": "Pressione Enter para continuar, {{navigation}}Esc para {{action}}",
306171
+ cancel: "cancelar",
306172
+ "go back": "voltar",
306173
+ "\u2191\u2193 to navigate, ": "\u2191\u2193 para navegar, ",
306174
+ "Enter a clear, unique name for this subagent.": "Digite um nome claro e \xFAnico para este subagente.",
306175
+ "e.g., Code Reviewer": "ex: Revisor de C\xF3digo",
306176
+ "Name cannot be empty.": "O nome n\xE3o pode estar vazio.",
306177
+ "Write the system prompt that defines this subagent's behavior. Be comprehensive for best results.": "Escreva o prompt do sistema que define o comportamento deste subagente. Seja abrangente para melhores resultados.",
306178
+ "e.g., You are an expert code reviewer...": "ex: Voc\xEA \xE9 um revisor de c\xF3digo especialista...",
306179
+ "System prompt cannot be empty.": "O prompt do sistema n\xE3o pode estar vazio.",
306180
+ "Describe when and how this subagent should be used.": "Descreva quando e como este subagente deve ser usado.",
306181
+ "e.g., Reviews code for best practices and potential bugs.": "ex: Revisa o c\xF3digo em busca de melhores pr\xE1ticas e erros potenciais.",
306182
+ "Description cannot be empty.": "A descri\xE7\xE3o n\xE3o pode estar vazia.",
306183
+ "Failed to launch editor: {{error}}": "Falha ao iniciar editor: {{error}}",
306184
+ "Failed to save and edit subagent: {{error}}": "Falha ao salvar e editar subagente: {{error}}",
306185
+ // ============================================================================
306186
+ // Commands - General (continued)
306187
+ // ============================================================================
306188
+ "View and edit Qwen Code settings": "Ver e editar configura\xE7\xF5es do Qwen Code",
306189
+ Settings: "Configura\xE7\xF5es",
306190
+ "To see changes, Qwen Code must be restarted. Press r to exit and apply changes now.": "Para ver as altera\xE7\xF5es, o Qwen Code deve ser reiniciado. Pressione r para sair e aplicar as altera\xE7\xF5es agora.",
306191
+ 'The command "/{{command}}" is not supported in non-interactive mode.': 'O comando "/{{command}}" n\xE3o \xE9 suportado no modo n\xE3o interativo.',
306192
+ // ============================================================================
306193
+ // Settings Labels
306194
+ // ============================================================================
306195
+ "Vim Mode": "Modo Vim",
306196
+ "Disable Auto Update": "Desativar Atualiza\xE7\xE3o Autom\xE1tica",
306197
+ "Attribution: commit": "Atribui\xE7\xE3o: commit",
306198
+ "Terminal Bell Notification": "Notifica\xE7\xE3o Sonora do Terminal",
306199
+ "Enable Usage Statistics": "Ativar Estat\xEDsticas de Uso",
306200
+ Theme: "Tema",
306201
+ "Preferred Editor": "Editor Preferido",
306202
+ "Auto-connect to IDE": "Conex\xE3o Autom\xE1tica com IDE",
306203
+ "Enable Prompt Completion": "Ativar Autocompletar de Prompts",
306204
+ "Debug Keystroke Logging": "Log de Depura\xE7\xE3o de Teclas",
306205
+ "Language: UI": "Idioma: Interface",
306206
+ "Language: Model": "Idioma: Modelo",
306207
+ "Output Format": "Formato de Sa\xEDda",
306208
+ "Hide Window Title": "Ocultar T\xEDtulo da Janela",
306209
+ "Show Status in Title": "Mostrar Status no T\xEDtulo",
306210
+ "Hide Tips": "Ocultar Dicas",
306211
+ "Show Line Numbers in Code": "Mostrar N\xFAmeros de Linhas no C\xF3digo",
306212
+ "Show Citations": "Mostrar Cita\xE7\xF5es",
306213
+ "Custom Witty Phrases": "Frases de Efeito Personalizadas",
306214
+ "Show Welcome Back Dialog": "Mostrar Di\xE1logo de Bem-vindo de Volta",
306215
+ "Enable User Feedback": "Ativar Feedback do Usu\xE1rio",
306216
+ "How is Qwen doing this session? (optional)": "Como o Qwen est\xE1 se saindo nesta sess\xE3o? (opcional)",
306217
+ Bad: "Ruim",
306218
+ Fine: "Bom",
306219
+ Good: "\xD3timo",
306220
+ Dismiss: "Ignorar",
306221
+ "Not Sure Yet": "N\xE3o tenho certeza ainda",
306222
+ "Any other key": "Qualquer outra tecla",
306223
+ "Disable Loading Phrases": "Desativar Frases de Carregamento",
306224
+ "Screen Reader Mode": "Modo de Leitor de Tela",
306225
+ "IDE Mode": "Modo IDE",
306226
+ "Max Session Turns": "M\xE1ximo de Turnos da Sess\xE3o",
306227
+ "Skip Next Speaker Check": "Pular Verifica\xE7\xE3o do Pr\xF3ximo Falante",
306228
+ "Skip Loop Detection": "Pular Detec\xE7\xE3o de Loop",
306229
+ "Skip Startup Context": "Pular Contexto de Inicializa\xE7\xE3o",
306230
+ "Enable OpenAI Logging": "Ativar Log do OpenAI",
306231
+ "OpenAI Logging Directory": "Diret\xF3rio de Log do OpenAI",
306232
+ Timeout: "Tempo Limite",
306233
+ "Max Retries": "M\xE1ximo de Tentativas",
306234
+ "Disable Cache Control": "Desativar Controle de Cache",
306235
+ "Memory Discovery Max Dirs": "Descoberta de Mem\xF3ria M\xE1x. Diretorios",
306236
+ "Load Memory From Include Directories": "Carregar Mem\xF3ria de Diret\xF3rios Inclu\xEDdos",
306237
+ "Respect .gitignore": "Respeitar .gitignore",
306238
+ "Respect .qwenignore": "Respeitar .qwenignore",
306239
+ "Enable Recursive File Search": "Ativar Pesquisa Recursiva de Arquivos",
306240
+ "Disable Fuzzy Search": "Desativar Pesquisa Difusa",
306241
+ "Interactive Shell (PTY)": "Shell Interativo (PTY)",
306242
+ "Show Color": "Mostrar Cores",
306243
+ "Auto Accept": "Aceitar Automaticamente",
306244
+ "Use Ripgrep": "Usar Ripgrep",
306245
+ "Use Builtin Ripgrep": "Usar Ripgrep Integrado",
306246
+ "Enable Tool Output Truncation": "Ativar Truncamento de Sa\xEDda de Ferramenta",
306247
+ "Tool Output Truncation Threshold": "Limite de Truncamento de Sa\xEDda de Ferramenta",
306248
+ "Tool Output Truncation Lines": "Linhas de Truncamento de Sa\xEDda de Ferramenta",
306249
+ "Folder Trust": "Confian\xE7a de Pasta",
306250
+ "Vision Model Preview": "Visualiza\xE7\xE3o de Modelo de Vis\xE3o",
306251
+ "Tool Schema Compliance": "Conformidade de Esquema de Ferramenta",
306252
+ "Experimental: Skills": "Experimental: Habilidades",
306253
+ // Settings enum options
306254
+ "Auto (detect from system)": "Autom\xE1tico (detectar do sistema)",
306255
+ Text: "Texto",
306256
+ JSON: "JSON",
306257
+ Plan: "Planejamento",
306258
+ Default: "Padr\xE3o",
306259
+ "Auto Edit": "Edi\xE7\xE3o Autom\xE1tica",
306260
+ YOLO: "YOLO",
306261
+ "toggle vim mode on/off": "alternar modo vim ligado/desligado",
306262
+ "check session stats. Usage: /stats [model|tools]": "verificar estat\xEDsticas da sess\xE3o. Uso: /stats [model|tools]",
306263
+ "Show model-specific usage statistics.": "Mostrar estat\xEDsticas de uso espec\xEDficas do modelo.",
306264
+ "Show tool-specific usage statistics.": "Mostrar estat\xEDsticas de uso espec\xEDficas da ferramenta.",
306265
+ "exit the cli": "sair da cli",
306266
+ "list configured MCP servers and tools, or authenticate with OAuth-enabled servers": "listar servidores e ferramentas MCP configurados, ou autenticar com servidores habilitados para OAuth",
306267
+ "Manage workspace directories": "Gerenciar diret\xF3rios do workspace",
306268
+ "Add directories to the workspace. Use comma to separate multiple paths": "Adicionar diret\xF3rios ao workspace. Use v\xEDrgula para separar v\xE1rios caminhos",
306269
+ "Show all directories in the workspace": "Mostrar todos os diret\xF3rios no workspace",
306270
+ "set external editor preference": "definir prefer\xEAncia de editor externo",
306271
+ "Select Editor": "Selecionar Editor",
306272
+ "Editor Preference": "Prefer\xEAncia de Editor",
306273
+ "These editors are currently supported. Please note that some editors cannot be used in sandbox mode.": "Estes editores s\xE3o suportados atualmente. Note que alguns editores n\xE3o podem ser usados no modo sandbox.",
306274
+ "Your preferred editor is:": "Seu editor preferido \xE9:",
306275
+ "Manage extensions": "Gerenciar extens\xF5es",
306276
+ "List active extensions": "Listar extens\xF5es ativas",
306277
+ "Update extensions. Usage: update <extension-names>|--all": "Atualizar extens\xF5es. Uso: update <nomes-das-extensoes>|--all",
306278
+ "Disable an extension": "Desativar uma extens\xE3o",
306279
+ "Enable an extension": "Ativar uma extens\xE3o",
306280
+ "Install an extension from a git repo or local path": "Instalar uma extens\xE3o de um reposit\xF3rio git ou caminho local",
306281
+ "Uninstall an extension": "Desinstalar uma extens\xE3o",
306282
+ "No extensions installed.": "Nenhuma extens\xE3o instalada.",
306283
+ "Usage: /extensions update <extension-names>|--all": "Uso: /extensions update <nomes-das-extensoes>|--all",
306284
+ 'Extension "{{name}}" not found.': 'Extens\xE3o "{{name}}" n\xE3o encontrada.',
306285
+ "No extensions to update.": "Nenhuma extens\xE3o para atualizar.",
306286
+ "Usage: /extensions install <source>": "Uso: /extensions install <fonte>",
306287
+ 'Installing extension from "{{source}}"...': 'Instalando extens\xE3o de "{{source}}"...',
306288
+ 'Extension "{{name}}" installed successfully.': 'Extens\xE3o "{{name}}" instalada com sucesso.',
306289
+ 'Failed to install extension from "{{source}}": {{error}}': 'Falha ao instalar extens\xE3o de "{{source}}": {{error}}',
306290
+ "Usage: /extensions uninstall <extension-name>": "Uso: /extensions uninstall <nome-da-extensao>",
306291
+ 'Uninstalling extension "{{name}}"...': 'Desinstalando extens\xE3o "{{name}}"...',
306292
+ 'Extension "{{name}}" uninstalled successfully.': 'Extens\xE3o "{{name}}" desinstalada com sucesso.',
306293
+ 'Failed to uninstall extension "{{name}}": {{error}}': 'Falha ao desinstalar extens\xE3o "{{name}}": {{error}}',
306294
+ "Usage: /extensions {{command}} <extension> [--scope=<user|workspace>]": "Uso: /extensions {{command}} <extensao> [--scope=<user|workspace>]",
306295
+ 'Unsupported scope "{{scope}}", deve ser um de "user" ou "workspace"': 'Escopo n\xE3o suportado "{{scope}}", deve ser um de "user" ou "workspace"',
306296
+ 'Extension "{{name}}" disabled for scope "{{scope}}"': 'Extens\xE3o "{{name}}" desativada para o escopo "{{scope}}"',
306297
+ 'Extension "{{name}}" enabled for scope "{{scope}}"': 'Extens\xE3o "{{name}}" ativada para o escopo "{{scope}}"',
306298
+ "Do you want to continue? [Y/n]: ": "Voc\xEA deseja continuar? [Y/n]: ",
306299
+ "Do you want to continue?": "Voc\xEA deseja continuar?",
306300
+ 'Installing extension "{{name}}".': 'Instalando extens\xE3o "{{name}}".',
306301
+ "**Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.**": "**As extens\xF5es podem introduzir comportamentos inesperados. Certifique-se de ter investigado a fonte da extens\xE3o e confie no autor.**",
306302
+ "This extension will run the following MCP servers:": "Esta extens\xE3o executar\xE1 os seguintes servidores MCP:",
306303
+ local: "local",
306304
+ remote: "remoto",
306305
+ "This extension will add the following commands: {{commands}}.": "Esta extens\xE3o adicionar\xE1 os seguintes comandos: {{commands}}.",
306306
+ "This extension will append info to your QWEN.md context using {{fileName}}": "Esta extens\xE3o anexar\xE1 informa\xE7\xF5es ao seu contexto QWEN.md usando {{fileName}}",
306307
+ "This extension will exclude the following core tools: {{tools}}": "Esta extens\xE3o excluir\xE1 as seguintes ferramentas principais: {{tools}}",
306308
+ "This extension will install the following skills:": "Esta extens\xE3o instalar\xE1 as seguintes habilidades:",
306309
+ "This extension will install the following subagents:": "Esta extens\xE3o instalar\xE1 os seguintes subagentes:",
306310
+ 'Installation cancelled for "{{name}}".': 'Instala\xE7\xE3o cancelada para "{{name}}".',
306311
+ "--ref and --auto-update are not applicable for marketplace extensions.": "--ref e --auto-update n\xE3o s\xE3o aplic\xE1veis para extens\xF5es de marketplace.",
306312
+ 'Extension "{{name}}" installed successfully and enabled.': 'Extens\xE3o "{{name}}" instalada com sucesso e ativada.',
306313
+ "Installs an extension from a git repository URL, local path, or claude marketplace (marketplace-url:plugin-name).": "Instala uma extens\xE3o de uma URL de reposit\xF3rio git, caminho local ou marketplace do claude (marketplace-url:plugin-name).",
306314
+ "The github URL, local path, or marketplace source (marketplace-url:plugin-name) of the extension to install.": "A URL do github, caminho local ou fonte do marketplace (marketplace-url:plugin-name) da extens\xE3o para instalar.",
306315
+ "The git ref to install from.": "A refer\xEAncia git para instalar.",
306316
+ "Enable auto-update for this extension.": "Ativar atualiza\xE7\xE3o autom\xE1tica para esta extens\xE3o.",
306317
+ "Enable pre-release versions for this extension.": "Ativar vers\xF5es de pr\xE9-lan\xE7amento para esta extens\xE3o.",
306318
+ "Acknowledge the security risks of installing an extension and skip the confirmation prompt.": "Reconhecer os riscos de seguran\xE7a de instalar uma extens\xE3o e pular o prompt de confirma\xE7\xE3o.",
306319
+ "The source argument must be provided.": "O argumento fonte deve ser fornecido.",
306320
+ 'Extension "{{name}}" successfully uninstalled.': 'Extens\xE3o "{{name}}" desinstalada com sucesso.',
306321
+ "Uninstalls an extension.": "Desinstala uma extens\xE3o.",
306322
+ "The name or source path of the extension to uninstall.": "O nome ou caminho da fonte da extens\xE3o para desinstalar.",
306323
+ "Please include the name of the extension to uninstall as a positional argument.": "Inclua o nome da extens\xE3o para desinstalar como um argumento posicional.",
306324
+ "Enables an extension.": "Ativa uma extens\xE3o.",
306325
+ "The name of the extension to enable.": "O nome da extens\xE3o para ativar.",
306326
+ "The scope to enable the extenison in. If not set, will be enabled in all scopes.": "O escopo para ativar a extens\xE3o. Se n\xE3o definido, ser\xE1 ativada em todos os escopos.",
306327
+ 'Extension "{{name}}" successfully enabled for scope "{{scope}}".': 'Extens\xE3o "{{name}}" ativada com sucesso para o escopo "{{scope}}".',
306328
+ 'Extension "{{name}}" successfully enabled in all scopes.': 'Extens\xE3o "{{name}}" ativada com sucesso em todos os escopos.',
306329
+ "Invalid scope: {{scope}}. Please use one of {{scopes}}.": "Escopo inv\xE1lido: {{scope}}. Use um de {{scopes}}.",
306330
+ "Disables an extension.": "Desativa uma extens\xE3o.",
306331
+ "The name of the extension to disable.": "O nome da extens\xE3o para desativar.",
306332
+ "The scope to disable the extenison in.": "O escopo para desativar a extens\xE3o.",
306333
+ 'Extension "{{name}}" successfully disabled for scope "{{scope}}".': 'Extens\xE3o "{{name}}" desativada com sucesso para o escopo "{{scope}}".',
306334
+ 'Extension "{{name}}" successfully updated: {{oldVersion}} \u2192 {{newVersion}}.': 'Extens\xE3o "{{name}}" atualizada com sucesso: {{oldVersion}} \u2192 {{newVersion}}.',
306335
+ 'Unable to install extension "{{name}}" due to missing install metadata': 'N\xE3o foi poss\xEDvel instalar a extens\xE3o "{{name}}" devido \xE0 falta de metadados de instala\xE7\xE3o',
306336
+ 'Extension "{{name}}" is already up to date.': 'A extens\xE3o "{{name}}" j\xE1 est\xE1 atualizada.',
306337
+ "Updates all extensions or a named extension to the latest version.": "Atualiza todas as extens\xF5es ou uma extens\xE3o nomeada para a \xFAltima vers\xE3o.",
306338
+ "Update all extensions.": "Atualizar todas as extens\xF5es.",
306339
+ "Either an extension name or --all must be provided": "Um nome de extens\xE3o ou --all deve ser fornecido",
306340
+ "Lists installed extensions.": "Lista as extens\xF5es instaladas.",
306341
+ "Link extension failed to install.": "Falha ao instalar link da extens\xE3o.",
306342
+ 'Extension "{{name}}" linked successfully and enabled.': 'Extens\xE3o "{{name}}" vinculada com sucesso e ativada.',
306343
+ "Links an extension from a local path. Updates made to the local path will always be reflected.": "Vincula uma extens\xE3o de um caminho local. Atualiza\xE7\xF5es feitas no caminho local sempre ser\xE3o refletidas.",
306344
+ "The name of the extension to link.": "O nome da extens\xE3o para vincular.",
306345
+ "Set a specific setting for an extension.": "Define uma configura\xE7\xE3o espec\xEDfica para uma extens\xE3o.",
306346
+ "Name of the extension to configure.": "Nome da extens\xE3o para configurar.",
306347
+ "The setting to configure (name or env var).": "A configura\xE7\xE3o para configurar (nome ou var env).",
306348
+ "The scope to set the setting in.": "O escopo para definir a configura\xE7\xE3o.",
306349
+ "List all settings for an extension.": "Listar todas as configura\xE7\xF5es de uma extens\xE3o.",
306350
+ "Name of the extension.": "Nome da extens\xE3o.",
306351
+ 'Extension "{{name}}" has no settings to configure.': 'A extens\xE3o "{{name}}" n\xE3o tem configura\xE7\xF5es para configurar.',
306352
+ 'Settings for "{{name}}":': 'Configura\xE7\xF5es para "{{name}}":',
306353
+ "(workspace)": "(workspace)",
306354
+ "(user)": "(usu\xE1rio)",
306355
+ "[not set]": "[n\xE3o definido]",
306356
+ "[value stored in keychain]": "[valor armazenado no chaveiro]",
306357
+ "Value:": "Valor:",
306358
+ "Manage extension settings.": "Gerenciar configura\xE7\xF5es de extens\xE3o.",
306359
+ "You need to specify a command (set or list).": "Voc\xEA precisa especificar um comando (set ou list).",
306360
+ // ============================================================================
306361
+ // Plugin Choice / Marketplace
306362
+ // ============================================================================
306363
+ "No plugins available in this marketplace.": "Nenhum plugin dispon\xEDvel neste marketplace.",
306364
+ 'Select a plugin to install from marketplace "{{name}}":': 'Selecione um plugin para instalar do marketplace "{{name}}":',
306365
+ "Plugin selection cancelled.": "Sele\xE7\xE3o de plugin cancelada.",
306366
+ 'Select a plugin from "{{name}}"': 'Selecione um plugin de "{{name}}"',
306367
+ "Use \u2191\u2193 or j/k to navigate, Enter to select, Escape to cancel": "Use \u2191\u2193 ou j/k para navegar, Enter para selecionar, Escape para cancelar",
306368
+ "{{count}} more above": "{{count}} mais acima",
306369
+ "{{count}} more below": "{{count}} mais abaixo",
306370
+ "manage IDE integration": "gerenciar integra\xE7\xE3o com IDE",
306371
+ "check status of IDE integration": "verificar status da integra\xE7\xE3o com IDE",
306372
+ "install required IDE companion for {{ideName}}": "instalar companion IDE necess\xE1rio para {{ideName}}",
306373
+ "enable IDE integration": "ativar integra\xE7\xE3o com IDE",
306374
+ "disable IDE integration": "desativar integra\xE7\xE3o com IDE",
306375
+ "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.": "A integra\xE7\xE3o com IDE n\xE3o \xE9 suportada no seu ambiente atual. Para usar este recurso, execute o Qwen Code em um destes IDEs suportados: VS Code ou forks do VS Code.",
306376
+ "Set up GitHub Actions": "Configurar GitHub Actions",
306377
+ "Configure terminal keybindings for multiline input (VS Code, Cursor, Windsurf, Trae)": "Configurar atalhos de terminal para entrada multilinhas (VS Code, Cursor, Windsurf, Trae)",
306378
+ "Please restart your terminal for the changes to take effect.": "Reinicie seu terminal para que as altera\xE7\xF5es tenham efeito.",
306379
+ "Failed to configure terminal: {{error}}": "Falha ao configurar terminal: {{error}}",
306380
+ "Could not determine {{terminalName}} config path on Windows: APPDATA environment variable is not set.": "N\xE3o foi poss\xEDvel determinar o caminho de configura\xE7\xE3o de {{terminalName}} no Windows: vari\xE1vel de ambiente APPDATA n\xE3o est\xE1 definida.",
306381
+ "{{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 existe mas n\xE3o \xE9 um array JSON v\xE1lido. Corrija o arquivo manualmente ou exclua-o para permitir a configura\xE7\xE3o autom\xE1tica.",
306382
+ "File: {{file}}": "Arquivo: {{file}}",
306383
+ "Failed to parse {{terminalName}} keybindings.json. The file contains invalid JSON. Please fix the file manually or delete it to allow automatic configuration.": "Falha ao analisar {{terminalName}} keybindings.json. O arquivo cont\xE9m JSON inv\xE1lido. Corrija o arquivo manualmente ou exclua-o para permitir a configura\xE7\xE3o autom\xE1tica.",
306384
+ "Error: {{error}}": "Erro: {{error}}",
306385
+ "Shift+Enter binding already exists": "Atalho Shift+Enter j\xE1 existe",
306386
+ "Ctrl+Enter binding already exists": "Atalho Ctrl+Enter j\xE1 existe",
306387
+ "Existing keybindings detected. Will not modify to avoid conflicts.": "Atalhos existentes detectados. N\xE3o ser\xE3o modificados para evitar conflitos.",
306388
+ "Please check and modify manually if needed: {{file}}": "Verifique e modifique manualmente se necess\xE1rio: {{file}}",
306389
+ "Added Shift+Enter and Ctrl+Enter keybindings to {{terminalName}}.": "Adicionados atalhos Shift+Enter e Ctrl+Enter para {{terminalName}}.",
306390
+ "Modified: {{file}}": "Modificado: {{file}}",
306391
+ "{{terminalName}} keybindings already configured.": "Atalhos de {{terminalName}} j\xE1 configurados.",
306392
+ "Failed to configure {{terminalName}}.": "Falha ao configurar {{terminalName}}.",
306393
+ "Your terminal is already configured for an optimal experience with multiline input (Shift+Enter and Ctrl+Enter).": "Seu terminal j\xE1 est\xE1 configurado para uma experi\xEAncia ideal com entrada multilinhas (Shift+Enter e Ctrl+Enter).",
306394
+ "Could not detect terminal type. Supported terminals: VS Code, Cursor, Windsurf, and Trae.": "N\xE3o foi poss\xEDvel detectar o tipo de terminal. Terminais suportados: VS Code, Cursor, Windsurf e Trae.",
306395
+ 'Terminal "{{terminal}}" is not supported yet.': 'O terminal "{{terminal}}" ainda n\xE3o \xE9 suportado.',
306396
+ // ============================================================================
306397
+ // Commands - Language
306398
+ // ============================================================================
306399
+ "Invalid language. Available: {{options}}": "Idioma inv\xE1lido. Dispon\xEDveis: {{options}}",
306400
+ "Language subcommands do not accept additional arguments.": "Subcomandos de idioma n\xE3o aceitam argumentos adicionais.",
306401
+ "Current UI language: {{lang}}": "Idioma atual da interface: {{lang}}",
306402
+ "Current LLM output language: {{lang}}": "Idioma atual da sa\xEDda do LLM: {{lang}}",
306403
+ "LLM output language not set": "Idioma de sa\xEDda do LLM n\xE3o definido",
306404
+ "Set UI language": "Definir idioma da interface",
306405
+ "Set LLM output language": "Definir idioma de sa\xEDda do LLM",
306406
+ "Usage: /language ui [{{options}}]": "Uso: /language ui [{{options}}]",
306407
+ "Usage: /language output <language>": "Uso: /language output <idioma>",
306408
+ "Example: /language output \u4E2D\u6587": "Exemplo: /language output Portugu\xEAs",
306409
+ "Example: /language output English": "Exemplo: /language output Ingl\xEAs",
306410
+ "Example: /language output \u65E5\u672C\u8A9E": "Exemplo: /language output Japon\xEAs",
306411
+ "Example: /language output Portugu\xEAs": "Exemplo: /language output Portugu\xEAs",
306412
+ "UI language changed to {{lang}}": "Idioma da interface alterado para {{lang}}",
306413
+ "LLM output language set to {{lang}}": "Idioma de sa\xEDda do LLM definido para {{lang}}",
306414
+ "LLM output language rule file generated at {{path}}": "Arquivo de regra de idioma de sa\xEDda do LLM gerado em {{path}}",
306415
+ "Please restart the application for the changes to take effect.": "Reinicie o aplicativo para que as altera\xE7\xF5es tenham efeito.",
306416
+ "Failed to generate LLM output language rule file: {{error}}": "Falha ao gerar arquivo de regra de idioma de sa\xEDda do LLM: {{error}}",
306417
+ "Invalid command. Available subcommands:": "Comando inv\xE1lido. Subcomandos dispon\xEDveis:",
306418
+ "Available subcommands:": "Subcomandos dispon\xEDveis:",
306419
+ "To request additional UI language packs, please open an issue on GitHub.": "Para solicitar pacotes de idiomas de interface adicionais, abra um problema no GitHub.",
306420
+ "Available options:": "Op\xE7\xF5es dispon\xEDveis:",
306421
+ "Set UI language to {{name}}": "Definir idioma da interface para {{name}}",
306422
+ // ============================================================================
306423
+ // Commands - Approval Mode
306424
+ // ============================================================================
306425
+ "Tool Approval Mode": "Modo de Aprova\xE7\xE3o de Ferramenta",
306426
+ "Current approval mode: {{mode}}": "Modo de aprova\xE7\xE3o atual: {{mode}}",
306427
+ "Available approval modes:": "Modos de aprova\xE7\xE3o dispon\xEDveis:",
306428
+ "Approval mode changed to: {{mode}}": "Modo de aprova\xE7\xE3o alterado para: {{mode}}",
306429
+ "Approval mode changed to: {{mode}} (saved to {{scope}} settings{{location}})": "Modo de aprova\xE7\xE3o alterado para: {{mode}} (salvo nas configura\xE7\xF5es de {{scope}}{{location}})",
306430
+ "Usage: /approval-mode <mode> [--session|--user|--project]": "Uso: /approval-mode <mode> [--session|--user|--project]",
306431
+ "Scope subcommands do not accept additional arguments.": "Subcomandos de escopo n\xE3o aceitam argumentos adicionais.",
306432
+ "Plan mode - Analyze only, do not modify files or execute commands": "Modo planejamento - Apenas analisa, n\xE3o modifica arquivos nem executa comandos",
306433
+ "Default mode - Require approval for file edits or shell commands": "Modo padr\xE3o - Exige aprova\xE7\xE3o para edi\xE7\xF5es de arquivos ou comandos shell",
306434
+ "Auto-edit mode - Automatically approve file edits": "Modo auto-edi\xE7\xE3o - Aprova automaticamente edi\xE7\xF5es de arquivos",
306435
+ "YOLO mode - Automatically approve all tools": "Modo YOLO - Aprova automaticamente todas as ferramentas",
306436
+ "{{mode}} mode": "Modo {{mode}}",
306437
+ "Settings service is not available; unable to persist the approval mode.": "Servi\xE7o de configura\xE7\xF5es n\xE3o dispon\xEDvel; n\xE3o foi poss\xEDvel persistir o modo de aprova\xE7\xE3o.",
306438
+ "Failed to save approval mode: {{error}}": "Falha ao salvar modo de aprova\xE7\xE3o: {{error}}",
306439
+ "Failed to change approval mode: {{error}}": "Falha ao alterar modo de aprova\xE7\xE3o: {{error}}",
306440
+ "Apply to current session only (temporary)": "Aplicar apenas \xE0 sess\xE3o atual (tempor\xE1rio)",
306441
+ "Persist for this project/workspace": "Persistir para este projeto/workspace",
306442
+ "Persist for this user on this machine": "Persistir para este usu\xE1rio nesta m\xE1quina",
306443
+ "Analyze only, do not modify files or execute commands": "Apenas analisar, n\xE3o modificar arquivos nem executar comandos",
306444
+ "Require approval for file edits or shell commands": "Exigir aprova\xE7\xE3o para edi\xE7\xF5es de arquivos ou comandos shell",
306445
+ "Automatically approve file edits": "Aprovar automaticamente edi\xE7\xF5es de arquivos",
306446
+ "Automatically approve all tools": "Aprovar automaticamente todas as ferramentas",
306447
+ "Workspace approval mode exists and takes priority. User-level change will have no effect.": "O modo de aprova\xE7\xE3o do workspace existe e tem prioridade. A altera\xE7\xE3o no n\xEDvel do usu\xE1rio n\xE3o ter\xE1 efeito.",
306448
+ "Apply To": "Aplicar A",
306449
+ "User Settings": "Configura\xE7\xF5es do Usu\xE1rio",
306450
+ "Workspace Settings": "Configura\xE7\xF5es do Workspace",
306451
+ // ============================================================================
306452
+ // Commands - Memory
306453
+ // ============================================================================
306454
+ "Commands for interacting with memory.": "Comandos para interagir com a mem\xF3ria.",
306455
+ "Show the current memory contents.": "Mostrar os conte\xFAdos atuais da mem\xF3ria.",
306456
+ "Show project-level memory contents.": "Mostrar conte\xFAdos da mem\xF3ria de n\xEDvel de projeto.",
306457
+ "Show global memory contents.": "Mostrar conte\xFAdos da mem\xF3ria global.",
306458
+ "Add content to project-level memory.": "Adicionar conte\xFAdo \xE0 mem\xF3ria de n\xEDvel de projeto.",
306459
+ "Add content to global memory.": "Adicionar conte\xFAdo \xE0 mem\xF3ria global.",
306460
+ "Refresh the memory from the source.": "Atualizar a mem\xF3ria da fonte.",
306461
+ "Usage: /memory add --project <text to remember>": "Uso: /memory add --project <texto para lembrar>",
306462
+ "Usage: /memory add --global <text to remember>": "Uso: /memory add --global <texto para lembrar>",
306463
+ 'Attempting to save to project memory: "{{text}}"': 'Tentando salvar na mem\xF3ria do projeto: "{{text}}"',
306464
+ 'Attempting to save to global memory: "{{text}}"': 'Tentando salvar na mem\xF3ria global: "{{text}}"',
306465
+ "Current memory content from {{count}} file(s):": "Conte\xFAdo da mem\xF3ria atual de {{count}} arquivo(s):",
306466
+ "Memory is currently empty.": "A mem\xF3ria est\xE1 vazia no momento.",
306467
+ "Project memory file not found or is currently empty.": "Arquivo de mem\xF3ria do projeto n\xE3o encontrado ou est\xE1 vazio.",
306468
+ "Global memory file not found or is currently empty.": "Arquivo de mem\xF3ria global n\xE3o encontrado ou est\xE1 vazio.",
306469
+ "Global memory is currently empty.": "A mem\xF3ria global est\xE1 vazia no momento.",
306470
+ "Global memory content:\n\n---\n{{content}}\n---": "Conte\xFAdo da mem\xF3ria global:\n\n---\n{{content}}\n---",
306471
+ "Project memory content from {{path}}:\n\n---\n{{content}}\n---": "Conte\xFAdo da mem\xF3ria do projeto de {{path}}:\n\n---\n{{content}}\n---",
306472
+ "Project memory is currently empty.": "A mem\xF3ria do projeto est\xE1 vazia no momento.",
306473
+ "Refreshing memory from source files...": "Atualizando mem\xF3ria dos arquivos fonte...",
306474
+ "Add content to the memory. Use --global for global memory or --project for project memory.": "Adicionar conte\xFAdo \xE0 mem\xF3ria. Use --global para mem\xF3ria global ou --project para mem\xF3ria do projeto.",
306475
+ "Usage: /memory add [--global|--project] <text to remember>": "Uso: /memory add [--global|--project] <texto para lembrar>",
306476
+ 'Attempting to save to memory {{scope}}: "{{fact}}"': 'Tentando salvar na mem\xF3ria {{scope}}: "{{fact}}"',
306477
+ // ============================================================================
306478
+ // Commands - MCP
306479
+ // ============================================================================
306480
+ "Authenticate with an OAuth-enabled MCP server": "Autenticar com um servidor MCP habilitado para OAuth",
306481
+ "List configured MCP servers and tools": "Listar servidores e ferramentas MCP configurados",
306482
+ "Restarts MCP servers.": "Reinicia os servidores MCP.",
306483
+ "Config not loaded.": "Configura\xE7\xE3o n\xE3o carregada.",
306484
+ "Could not retrieve tool registry.": "N\xE3o foi poss\xEDvel recuperar o registro de ferramentas.",
306485
+ "No MCP servers configured with OAuth authentication.": "Nenhum servidor MCP configurado com autentica\xE7\xE3o OAuth.",
306486
+ "MCP servers with OAuth authentication:": "Servidores MCP com autentica\xE7\xE3o OAuth:",
306487
+ "Use /mcp auth <server-name> to authenticate.": "Use /mcp auth <nome-do-servidor> para autenticar.",
306488
+ "MCP server '{{name}}' not found.": "Servidor MCP '{{name}}' n\xE3o encontrado.",
306489
+ "Successfully authenticated and refreshed tools for '{{name}}'.": "Autenticado com sucesso e ferramentas atualizadas para '{{name}}'.",
306490
+ "Failed to authenticate with MCP server '{{name}}': {{error}}": "Falha ao autenticar com o servidor MCP '{{name}}': {{error}}",
306491
+ "Re-discovering tools from '{{name}}'...": "Redescobrindo ferramentas de '{{name}}'...",
306492
+ // ============================================================================
306493
+ // Commands - Chat
306494
+ // ============================================================================
306495
+ "Manage conversation history.": "Gerenciar hist\xF3rico de conversas.",
306496
+ "List saved conversation checkpoints": "Listar checkpoints de conversa salvos",
306497
+ "No saved conversation checkpoints found.": "Nenhum checkpoint de conversa salvo encontrado.",
306498
+ "List of saved conversations:": "Lista de conversas salvas:",
306499
+ "Note: Newest last, oldest first": "Nota: Mais novos por \xFAltimo, mais antigos primeiro",
306500
+ "Save the current conversation as a checkpoint. Usage: /chat save <tag>": "Salvar a conversa atual como um checkpoint. Uso: /chat save <tag>",
306501
+ "Missing tag. Usage: /chat save <tag>": "Tag ausente. Uso: /chat save <tag>",
306502
+ "Delete a conversation checkpoint. Usage: /chat delete <tag>": "Excluir um checkpoint de conversa. Uso: /chat delete <tag>",
306503
+ "Missing tag. Usage: /chat delete <tag>": "Tag ausente. Uso: /chat delete <tag>",
306504
+ "Conversation checkpoint '{{tag}}' has been deleted.": "O checkpoint de conversa '{{tag}}' foi exclu\xEDdo.",
306505
+ "Error: No checkpoint found with tag '{{tag}}'.": "Erro: Nenhum checkpoint encontrado com a tag '{{tag}}'.",
306506
+ "Resume a conversation from a checkpoint. Usage: /chat resume <tag>": "Retomar uma conversa de um checkpoint. Uso: /chat resume <tag>",
306507
+ "Missing tag. Usage: /chat resume <tag>": "Tag ausente. Uso: /chat resume <tag>",
306508
+ "No saved checkpoint found with tag: {{tag}}.": "Nenhum checkpoint salvo encontrado com a tag: {{tag}}.",
306509
+ "A checkpoint with the tag {{tag}} already exists. Do you want to overwrite it?": "Um checkpoint com a tag {{tag}} j\xE1 existe. Voc\xEA deseja substitu\xED-lo?",
306510
+ "No chat client available to save conversation.": "Nenhum cliente de chat dispon\xEDvel para salvar a conversa.",
306511
+ "Conversation checkpoint saved with tag: {{tag}}.": "Checkpoint de conversa salvo com a tag: {{tag}}.",
306512
+ "No conversation found to save.": "Nenhuma conversa encontrada para salvar.",
306513
+ "No chat client available to share conversation.": "Nenhum cliente de chat dispon\xEDvel para compartilhar a conversa.",
306514
+ "Invalid file format. Only .md and .json are supported.": "Formato de arquivo inv\xE1lido. Apenas .md e .json s\xE3o suportados.",
306515
+ "Error sharing conversation: {{error}}": "Erro ao compartilhar conversa: {{error}}",
306516
+ "Conversation shared to {{filePath}}": "Conversa compartilhada em {{filePath}}",
306517
+ "No conversation found to share.": "Nenhuma conversa encontrada para compartilhar.",
306518
+ "Share the current conversation to a markdown or json file. Usage: /chat share <file>": "Compartilhar a conversa atual para um arquivo markdown ou json. Uso: /chat share <arquivo>",
306519
+ // ============================================================================
306520
+ // Commands - Summary
306521
+ // ============================================================================
306522
+ "Generate a project summary and save it to .qwen/PROJECT_SUMMARY.md": "Gerar um resumo do projeto e salv\xE1-lo em .qwen/PROJECT_SUMMARY.md",
306523
+ "No chat client available to generate summary.": "Nenhum cliente de chat dispon\xEDvel para gerar o resumo.",
306524
+ "Already generating summary, wait for previous request to complete": "J\xE1 gerando resumo, aguarde a conclus\xE3o da solicita\xE7\xE3o anterior",
306525
+ "No conversation found to summarize.": "Nenhuma conversa encontrada para resumir.",
306526
+ "Failed to generate project context summary: {{error}}": "Falha ao gerar resumo do contexto do projeto: {{error}}",
306527
+ "Saved project summary to {{filePathForDisplay}}.": "Resumo do projeto salvo em {{filePathForDisplay}}.",
306528
+ "Saving project summary...": "Salvando resumo do projeto...",
306529
+ "Generating project summary...": "Gerando resumo do projeto...",
306530
+ "Failed to generate summary - no text content received from LLM response": "Falha ao gerar resumo - nenhum conte\xFAdo de texto recebido da resposta do LLM",
306531
+ // ============================================================================
306532
+ // Commands - Model
306533
+ // ============================================================================
306534
+ "Switch the model for this session": "Trocar o modelo para esta sess\xE3o",
306535
+ "Content generator configuration not available.": "Configura\xE7\xE3o do gerador de conte\xFAdo n\xE3o dispon\xEDvel.",
306536
+ "Authentication type not available.": "Tipo de autentica\xE7\xE3o n\xE3o dispon\xEDvel.",
306537
+ "No models available for the current authentication type ({{authType}}).": "Nenhum modelo dispon\xEDvel para o tipo de autentica\xE7\xE3o atual ({{authType}}).",
306538
+ // ============================================================================
306539
+ // Commands - Clear
306540
+ // ============================================================================
306541
+ "Starting a new session, resetting chat, and clearing terminal.": "Iniciando uma nova sess\xE3o, resetando o chat e limpando o terminal.",
306542
+ "Starting a new session and clearing.": "Iniciando uma nova sess\xE3o e limpando.",
306543
+ // ============================================================================
306544
+ // Commands - Compress
306545
+ // ============================================================================
306546
+ "Already compressing, wait for previous request to complete": "J\xE1 comprimindo, aguarde a conclus\xE3o da solicita\xE7\xE3o anterior",
306547
+ "Failed to compress chat history.": "Falha ao comprimir hist\xF3rico do chat.",
306548
+ "Failed to compress chat history: {{error}}": "Falha ao comprimir hist\xF3rico do chat: {{error}}",
306549
+ "Compressing chat history": "Comprimindo hist\xF3rico do chat",
306550
+ "Chat history compressed from {{originalTokens}} to {{newTokens}} tokens.": "Hist\xF3rico do chat comprimido de {{originalTokens}} para {{newTokens}} tokens.",
306551
+ "Compression was not beneficial for this history size.": "A compress\xE3o n\xE3o foi ben\xE9fica para este tamanho de hist\xF3rico.",
306552
+ "Chat history compression did not reduce size. This may indicate issues with the compression prompt.": "A compress\xE3o do hist\xF3rico do chat n\xE3o reduziu o tamanho. Isso pode indicar problemas com o prompt de compress\xE3o.",
306553
+ "Could not compress chat history due to a token counting error.": "N\xE3o foi poss\xEDvel comprimir o hist\xF3rico do chat devido a um erro de contagem de tokens.",
306554
+ "Chat history is already compressed.": "O hist\xF3rico do chat j\xE1 est\xE1 comprimido.",
306555
+ // ============================================================================
306556
+ // Commands - Directory
306557
+ // ============================================================================
306558
+ "Configuration is not available.": "A configura\xE7\xE3o n\xE3o est\xE1 dispon\xEDvel.",
306559
+ "Please provide at least one path to add.": "Forne\xE7a pelo menos um caminho para adicionar.",
306560
+ "The /directory add command is not supported in restrictive sandbox profiles. Please use --include-directories when starting the session instead.": "O comando /directory add n\xE3o \xE9 suportado em perfis de sandbox restritivos. Use --include-directories ao iniciar a sess\xE3o.",
306561
+ "Error adding '{{path}}': {{error}}": "Erro ao adicionar '{{path}}': {{error}}",
306562
+ "Successfully added QWEN.md files from the following directories if there are:\n- {{directories}}": "Arquivos QWEN.md adicionados com sucesso dos seguintes diret\xF3rios, se houverem:\n- {{directories}}",
306563
+ "Error refreshing memory: {{error}}": "Erro ao atualizar mem\xF3ria: {{error}}",
306564
+ "Successfully added directories:\n- {{directories}}": "Diret\xF3rios adicionados com sucesso:\n- {{directories}}",
306565
+ "Current workspace directories:\n{{directories}}": "Diret\xF3rios atuais do workspace:\n{{directories}}",
306566
+ // ============================================================================
306567
+ // Commands - Docs
306568
+ // ============================================================================
306569
+ "Please open the following URL in your browser to view the documentation:\n{{url}}": "Abra a seguinte URL no seu navegador para ver a documenta\xE7\xE3o:\n{{url}}",
306570
+ "Opening documentation in your browser: {{url}}": "Abrindo documenta\xE7\xE3o no seu navegador: {{url}}",
306571
+ // ============================================================================
306572
+ // Dialogs - Tool Confirmation
306573
+ // ============================================================================
306574
+ "Do you want to proceed?": "Voc\xEA deseja prosseguir?",
306575
+ "Yes, allow once": "Sim, permitir uma vez",
306576
+ "Allow always": "Permitir sempre",
306577
+ No: "N\xE3o",
306578
+ "No (esc)": "N\xE3o (esc)",
306579
+ "Yes, allow always for this session": "Sim, permitir sempre para esta sess\xE3o",
306580
+ "Modify in progress:": "Modifica\xE7\xE3o em progresso:",
306581
+ "Save and close external editor to continue": "Salve e feche o editor externo para continuar",
306582
+ "Apply this change?": "Aplicar esta altera\xE7\xE3o?",
306583
+ "Yes, allow always": "Sim, permitir sempre",
306584
+ "Modify with external editor": "Modificar com editor externo",
306585
+ "No, suggest changes (esc)": "N\xE3o, sugerir altera\xE7\xF5es (esc)",
306586
+ "Allow execution of: '{{command}}'?": "Permitir a execu\xE7\xE3o de: '{{command}}'?",
306587
+ "Yes, allow always ...": "Sim, permitir sempre ...",
306588
+ "Yes, and auto-accept edits": "Sim, e aceitar edi\xE7\xF5es automaticamente",
306589
+ "Yes, and manually approve edits": "Sim, e aprovar edi\xE7\xF5es manualmente",
306590
+ "No, keep planning (esc)": "N\xE3o, continuar planejando (esc)",
306591
+ "URLs to fetch:": "URLs para buscar:",
306592
+ "MCP Server: {{server}}": "Servidor MCP: {{server}}",
306593
+ "Tool: {{tool}}": "Ferramenta: {{tool}}",
306594
+ 'Allow execution of MCP tool "{{tool}}" from server "{{server}}"?': 'Permitir a execu\xE7\xE3o da ferramenta MCP "{{tool}}" do servidor "{{server}}"?',
306595
+ 'Yes, always allow tool "{{tool}}" from server "{{server}}"': 'Sim, sempre permitir a ferramenta "{{tool}}" do servidor "{{server}}"',
306596
+ 'Yes, always allow all tools from server "{{server}}"': 'Sim, sempre permitir todas as ferramentas do servidor "{{server}}"',
306597
+ // ============================================================================
306598
+ // Dialogs - Shell Confirmation
306599
+ // ============================================================================
306600
+ "Shell Command Execution": "Execu\xE7\xE3o de Comando Shell",
306601
+ "A custom command wants to run the following shell commands:": "Um comando personalizado deseja executar os seguintes comandos shell:",
306602
+ // ============================================================================
306603
+ // Dialogs - Pro Quota
306604
+ // ============================================================================
306605
+ "Pro quota limit reached for {{model}}.": "Limite de cota Pro atingido para {{model}}.",
306606
+ "Change auth (executes the /auth command)": "Alterar autentica\xE7\xE3o (executa o comando /auth)",
306607
+ "Continue with {{model}}": "Continuar com {{model}}",
306608
+ // ============================================================================
306609
+ // Dialogs - Welcome Back
306610
+ // ============================================================================
306611
+ "Current Plan:": "Plano Atual:",
306612
+ "Progress: {{done}}/{{total}} tasks completed": "Progresso: {{done}}/{{total}} tarefas conclu\xEDdas",
306613
+ ", {{inProgress}} in progress": ", {{inProgress}} em progresso",
306614
+ "Pending Tasks:": "Tarefas Pendentes:",
306615
+ "What would you like to do?": "O que voc\xEA gostaria de fazer?",
306616
+ "Choose how to proceed with your session:": "Escolha como proceder com sua sess\xE3o:",
306617
+ "Start new chat session": "Iniciar nova sess\xE3o de chat",
306618
+ "Continue previous conversation": "Continuar conversa anterior",
306619
+ "\u{1F44B} Welcome back! (Last updated: {{timeAgo}})": "\u{1F44B} Bem-vindo de volta! (\xDAltima atualiza\xE7\xE3o: {{timeAgo}})",
306620
+ "\u{1F3AF} Overall Goal:": "\u{1F3AF} Objetivo Geral:",
306621
+ // ============================================================================
306622
+ // Dialogs - Auth
306623
+ // ============================================================================
306624
+ "Get started": "Come\xE7ar",
306625
+ "How would you like to authenticate for this project?": "Como voc\xEA gostaria de se autenticar para este projeto?",
306626
+ "OpenAI API key is required to use OpenAI authentication.": "A chave da API do OpenAI \xE9 necess\xE1ria para usar a autentica\xE7\xE3o do OpenAI.",
306627
+ "You must select an auth method to proceed. Press Ctrl+C again to exit.": "Voc\xEA deve selecionar um m\xE9todo de autentica\xE7\xE3o para prosseguir. Pressione Ctrl+C novamente para sair.",
306628
+ "(Use Enter to Set Auth)": "(Use Enter para Definir Autentica\xE7\xE3o)",
306629
+ "Terms of Services and Privacy Notice for Qwen Code": "Termos de Servi\xE7o e Aviso de Privacidade do Qwen Code",
306630
+ "Qwen OAuth": "Qwen OAuth",
306631
+ OpenAI: "OpenAI",
306632
+ "Failed to login. Message: {{message}}": "Falha ao fazer login. Mensagem: {{message}}",
306633
+ "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.": "A autentica\xE7\xE3o \xE9 for\xE7ada para {{enforcedType}}, mas voc\xEA est\xE1 usando {{currentType}} no momento.",
306634
+ "Qwen OAuth authentication timed out. Please try again.": "A autentica\xE7\xE3o Qwen OAuth expirou. Tente novamente.",
306635
+ "Qwen OAuth authentication cancelled.": "Autentica\xE7\xE3o Qwen OAuth cancelada.",
306636
+ "Qwen OAuth Authentication": "Autentica\xE7\xE3o Qwen OAuth",
306637
+ "Please visit this URL to authorize:": "Visite esta URL para autorizar:",
306638
+ "Or scan the QR code below:": "Ou escaneie o c\xF3digo QR abaixo:",
306639
+ "Waiting for authorization": "Aguardando autoriza\xE7\xE3o",
306640
+ "Time remaining:": "Tempo restante:",
306641
+ "(Press ESC or CTRL+C to cancel)": "(Pressione ESC ou CTRL+C para cancelar)",
306642
+ "Qwen OAuth Authentication Timeout": "Tempo Limite de Autentica\xE7\xE3o Qwen OAuth",
306643
+ "OAuth token expired (over {{seconds}} seconds). Please select authentication method again.": "Token OAuth expirado (mais de {{seconds}} segundos). Selecione o m\xE9todo de autentica\xE7\xE3o novamente.",
306644
+ "Press any key to return to authentication type selection.": "Pressione qualquer tecla para retornar \xE0 sele\xE7\xE3o do tipo de autentica\xE7\xE3o.",
306645
+ "Waiting for Qwen OAuth authentication...": "Aguardando autentica\xE7\xE3o Qwen OAuth...",
306646
+ "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.": "Nota: Sua chave de API existente no settings.json n\xE3o ser\xE1 limpa ao usar o Qwen OAuth. Voc\xEA pode voltar para a autentica\xE7\xE3o do OpenAI mais tarde, se necess\xE1rio.",
306647
+ "Authentication timed out. Please try again.": "A autentica\xE7\xE3o expirou. Tente novamente.",
306648
+ "Waiting for auth... (Press ESC or CTRL+C to cancel)": "Aguardando autentica\xE7\xE3o... (Pressione ESC ou CTRL+C para cancelar)",
306649
+ "Missing API key for OpenAI-compatible auth. Set settings.security.auth.apiKey, or set the {{envKeyHint}} environment variable.": "Chave de API ausente para autentica\xE7\xE3o compat\xEDvel com OpenAI. Defina settings.security.auth.apiKey ou a vari\xE1vel de ambiente {{envKeyHint}}.",
306650
+ "{{envKeyHint}} environment variable not found.": "Vari\xE1vel de ambiente {{envKeyHint}} n\xE3o encontrada.",
306651
+ "{{envKeyHint}} environment variable not found. Please set it in your .env file or environment variables.": "Vari\xE1vel de ambiente {{envKeyHint}} n\xE3o encontrada. Defina-a no seu arquivo .env ou vari\xE1veis de ambiente.",
306652
+ "{{envKeyHint}} environment variable not found (or set settings.security.auth.apiKey). Please set it in your .env file or environment variables.": "Vari\xE1vel de ambiente {{envKeyHint}} n\xE3o encontrada (ou defina settings.security.auth.apiKey). Defina-a no seu arquivo .env ou vari\xE1veis de ambiente.",
306653
+ "Missing API key for OpenAI-compatible auth. Set the {{envKeyHint}} environment variable.": "Chave de API ausente para autentica\xE7\xE3o compat\xEDvel com OpenAI. Defina a vari\xE1vel de ambiente {{envKeyHint}}.",
306654
+ "Anthropic provider missing required baseUrl in modelProviders[].baseUrl.": "Provedor Anthropic sem a baseUrl necess\xE1ria em modelProviders[].baseUrl.",
306655
+ "ANTHROPIC_BASE_URL environment variable not found.": "Vari\xE1vel de ambiente ANTHROPIC_BASE_URL n\xE3o encontrada.",
306656
+ "Invalid auth method selected.": "M\xE9todo de autentica\xE7\xE3o inv\xE1lido selecionado.",
306657
+ "Failed to authenticate. Message: {{message}}": "Falha ao autenticar. Mensagem: {{message}}",
306658
+ "Authenticated successfully with {{authType}} credentials.": "Autenticado com sucesso com credenciais {{authType}}.",
306659
+ 'Invalid QWEN_DEFAULT_AUTH_TYPE value: "{{value}}". Valid values are: {{validValues}}': 'Valor QWEN_DEFAULT_AUTH_TYPE inv\xE1lido: "{{value}}". Valores v\xE1lidos s\xE3o: {{validValues}}',
306660
+ "OpenAI Configuration Required": "Configura\xE7\xE3o do OpenAI Necess\xE1ria",
306661
+ "Please enter your OpenAI configuration. You can get an API key from": "Insira sua configura\xE7\xE3o do OpenAI. Voc\xEA pode obter uma chave de API de",
306662
+ "API Key:": "Chave da API:",
306663
+ "Invalid credentials: {{errorMessage}}": "Credenciais inv\xE1lidas: {{errorMessage}}",
306664
+ "Failed to validate credentials": "Falha ao validar credenciais",
306665
+ "Press Enter to continue, Tab/\u2191\u2193 to navigate, Esc to cancel": "Pressione Enter para continuar, Tab/\u2191\u2193 para navegar, Esc para cancelar",
306666
+ // ============================================================================
306667
+ // Dialogs - Model
306668
+ // ============================================================================
306669
+ "Select Model": "Selecionar Modelo",
306670
+ "(Press Esc to close)": "(Pressione Esc para fechar)",
306671
+ "Current (effective) configuration": "Configura\xE7\xE3o atual (efetiva)",
306672
+ AuthType: "AuthType",
306673
+ "API Key": "Chave da API",
306674
+ unset: "n\xE3o definido",
306675
+ "(default)": "(padr\xE3o)",
306676
+ "(set)": "(definido)",
306677
+ "(not set)": "(n\xE3o definido)",
306678
+ "Failed to switch model to '{{modelId}}'.\n\n{{error}}": "Falha ao trocar o modelo para '{{modelId}}'.\n\n{{error}}",
306679
+ "The latest Qwen Coder model from Alibaba Cloud ModelStudio (version: qwen3-coder-plus-2025-09-23)": "O modelo Qwen Coder mais recente do Alibaba Cloud ModelStudio (vers\xE3o: qwen3-coder-plus-2025-09-23)",
306680
+ "The latest Qwen Vision model from Alibaba Cloud ModelStudio (version: qwen3-vl-plus-2025-09-23)": "O modelo Qwen Vision mais recente do Alibaba Cloud ModelStudio (vers\xE3o: qwen3-vl-plus-2025-09-23)",
306681
+ // ============================================================================
306682
+ // Dialogs - Permissions
306683
+ // ============================================================================
306684
+ "Manage folder trust settings": "Gerenciar configura\xE7\xF5es de confian\xE7a de pasta",
306685
+ // ============================================================================
306686
+ // Status Bar
306687
+ // ============================================================================
306688
+ "Using:": "Usando:",
306689
+ "{{count}} open file": "{{count}} arquivo aberto",
306690
+ "{{count}} open files": "{{count}} arquivos abertos",
306691
+ "(ctrl+g to view)": "(ctrl+g para ver)",
306692
+ "{{count}} {{name}} file": "{{count}} arquivo {{name}}",
306693
+ "{{count}} {{name}} files": "{{count}} arquivos {{name}}",
306694
+ "{{count}} MCP server": "{{count}} servidor MCP",
306695
+ "{{count}} MCP servers": "{{count}} servidores MCP",
306696
+ "{{count}} Blocked": "{{count}} Bloqueados",
306697
+ "(ctrl+t to view)": "(ctrl+t para ver)",
306698
+ "(ctrl+t to toggle)": "(ctrl+t para alternar)",
306699
+ "Press Ctrl+C again to exit.": "Pressione Ctrl+C novamente para sair.",
306700
+ "Press Ctrl+D again to exit.": "Pressione Ctrl+D novamente para sair.",
306701
+ "Press Esc again to clear.": "Pressione Esc novamente para limpar.",
306702
+ // ============================================================================
306703
+ // MCP Status
306704
+ // ============================================================================
306705
+ "No MCP servers configured.": "Nenhum servidor MCP configurado.",
306706
+ "Please view MCP documentation in your browser:": "Veja a documenta\xE7\xE3o do MCP no seu navegador:",
306707
+ "or use the cli /docs command": "ou use o comando cli /docs",
306708
+ "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 Servidores MCP est\xE3o iniciando ({{count}} inicializando)...",
306709
+ "Note: First startup may take longer. Tool availability will update automatically.": "Nota: A primeira inicializa\xE7\xE3o pode demorar mais. A disponibilidade da ferramenta ser\xE1 atualizada automaticamente.",
306710
+ "Configured MCP servers:": "Servidores MCP configurados:",
306711
+ Ready: "Pronto",
306712
+ "Starting... (first startup may take longer)": "Iniciando... (a primeira inicializa\xE7\xE3o pode demorar mais)",
306713
+ Disconnected: "Desconectado",
306714
+ "{{count}} tool": "{{count}} ferramenta",
306715
+ "{{count}} tools": "{{count}} ferramentas",
306716
+ "{{count}} prompt": "{{count}} prompt",
306717
+ "{{count}} prompts": "{{count}} prompts",
306718
+ "(from {{extensionName}})": "(de {{extensionName}})",
306719
+ OAuth: "OAuth",
306720
+ "OAuth expired": "OAuth expirado",
306721
+ "OAuth not authenticated": "OAuth n\xE3o autenticado",
306722
+ "tools and prompts will appear when ready": "ferramentas e prompts aparecer\xE3o quando estiverem prontos",
306723
+ "{{count}} tools cached": "{{count}} ferramentas em cache",
306724
+ "Tools:": "Ferramentas:",
306725
+ "Parameters:": "Par\xE2metros:",
306726
+ "Prompts:": "Prompts:",
306727
+ Blocked: "Bloqueado",
306728
+ "\u{1F4A1} Tips:": "\u{1F4A1} Dicas:",
306729
+ Use: "Use",
306730
+ "to show server and tool descriptions": "para mostrar descri\xE7\xF5es de servidores e ferramentas",
306731
+ "to show tool parameter schemas": "para mostrar esquemas de par\xE2metros de ferramentas",
306732
+ "to hide descriptions": "para ocultar descri\xE7\xF5es",
306733
+ "to authenticate with OAuth-enabled servers": "para autenticar com servidores habilitados para OAuth",
306734
+ Press: "Pressione",
306735
+ "to toggle tool descriptions on/off": "para alternar descri\xE7\xF5es de ferramentas ligadas/desligadas",
306736
+ "Starting OAuth authentication for MCP server '{{name}}'...": "Iniciando autentica\xE7\xE3o OAuth para servidor MCP '{{name}}'...",
306737
+ "Restarting MCP servers...": "Reiniciando servidores MCP...",
306738
+ // ============================================================================
306739
+ // Startup Tips
306740
+ // ============================================================================
306741
+ "Tips:": "Dicas:",
306742
+ "Use /compress when the conversation gets long to summarize history and free up context.": "Use /compress quando a conversa ficar longa para resumir o hist\xF3rico e liberar contexto.",
306743
+ "Start a fresh idea with /clear or /new; the previous session stays available in history.": "Comece uma nova ideia com /clear ou /new; a sess\xE3o anterior permanece dispon\xEDvel no hist\xF3rico.",
306744
+ "Use /bug to submit issues to the maintainers when something goes off.": "Use /bug para enviar problemas aos mantenedores quando algo der errado.",
306745
+ "Switch auth type quickly with /auth.": "Troque o tipo de autentica\xE7\xE3o rapidamente com /auth.",
306746
+ "You can run any shell commands from Qwen Code using ! (e.g. !ls).": "Voc\xEA pode executar quaisquer comandos shell do Qwen Code usando ! (ex: !ls).",
306747
+ "Type / to open the command popup; Tab autocompletes slash commands and saved prompts.": "Digite / para abrir o popup de comandos; Tab autocompleta comandos de barra e prompts salvos.",
306748
+ "You can resume a previous conversation by running qwen --continue or qwen --resume.": "Voc\xEA pode retomar uma conversa anterior executando qwen --continue ou qwen --resume.",
306749
+ "You can switch permission mode quickly with Shift+Tab or /approval-mode.": "Voc\xEA pode alternar o modo de permiss\xE3o rapidamente com Shift+Tab ou /approval-mode.",
306750
+ // ============================================================================
306751
+ // Exit Screen / Stats
306752
+ // ============================================================================
306753
+ "Agent powering down. Goodbye!": "Agente desligando. Adeus!",
306754
+ "To continue this session, run": "Para continuar esta sess\xE3o, execute",
306755
+ "Interaction Summary": "Resumo da Intera\xE7\xE3o",
306756
+ "Session ID:": "ID da Sess\xE3o:",
306757
+ "Tool Calls:": "Chamadas de Ferramenta:",
306758
+ "Success Rate:": "Taxa de Sucesso:",
306759
+ "User Agreement:": "Acordo do Usu\xE1rio:",
306760
+ reviewed: "revisado",
306761
+ "Code Changes:": "Altera\xE7\xF5es de C\xF3digo:",
306762
+ Performance: "Desempenho",
306763
+ "Wall Time:": "Tempo Total:",
306764
+ "Agent Active:": "Agente Ativo:",
306765
+ "API Time:": "Tempo de API:",
306766
+ "Tool Time:": "Tempo de Ferramenta:",
306767
+ "Session Stats": "Estat\xEDsticas da Sess\xE3o",
306768
+ "Model Usage": "Uso do Modelo",
306769
+ Reqs: "Reqs",
306770
+ "Input Tokens": "Tokens de Entrada",
306771
+ "Output Tokens": "Tokens de Sa\xEDda",
306772
+ "Savings Highlight:": "Destaque de Economia:",
306773
+ "of input tokens were served from the cache, reducing costs.": "de tokens de entrada foram servidos do cache, reduzindo custos.",
306774
+ "Tip: For a full token breakdown, run `/stats model`.": "Dica: Para um detalhamento completo de tokens, execute `/stats model`.",
306775
+ "Model Stats For Nerds": "Estat\xEDsticas de Modelo Para Nerds",
306776
+ "Tool Stats For Nerds": "Estat\xEDsticas de Ferramenta Para Nerds",
306777
+ Metric: "M\xE9trica",
306778
+ API: "API",
306779
+ Requests: "Solicita\xE7\xF5es",
306780
+ Errors: "Erros",
306781
+ "Avg Latency": "Lat\xEAncia M\xE9dia",
306782
+ Tokens: "Tokens",
306783
+ Total: "Total",
306784
+ Prompt: "Prompt",
306785
+ Cached: "Cacheado",
306786
+ Thoughts: "Pensamentos",
306787
+ Tool: "Ferramenta",
306788
+ Output: "Sa\xEDda",
306789
+ "No API calls have been made in this session.": "Nenhuma chamada de API foi feita nesta sess\xE3o.",
306790
+ "Tool Name": "Nome da Ferramenta",
306791
+ Calls: "Chamadas",
306792
+ "Success Rate": "Taxa de Sucesso",
306793
+ "Avg Duration": "Dura\xE7\xE3o M\xE9dia",
306794
+ "User Decision Summary": "Resumo de Decis\xE3o do Usu\xE1rio",
306795
+ "Total Reviewed Suggestions:": "Total de Sugest\xF5es Revisadas:",
306796
+ " \xBB Accepted:": " \xBB Aceitas:",
306797
+ " \xBB Rejected:": " \xBB Rejeitadas:",
306798
+ " \xBB Modified:": " \xBB Modificadas:",
306799
+ " Overall Agreement Rate:": " Taxa Geral de Acordo:",
306800
+ "No tool calls have been made in this session.": "Nenhuma chamada de ferramenta foi feita nesta sess\xE3o.",
306801
+ "Session start time is unavailable, cannot calculate stats.": "Hora de in\xEDcio da sess\xE3o indispon\xEDvel, n\xE3o \xE9 poss\xEDvel calcular estat\xEDsticas.",
306802
+ // ============================================================================
306803
+ // Command Format Migration
306804
+ // ============================================================================
306805
+ "Command Format Migration": "Migra\xE7\xE3o de Formato de Comando",
306806
+ "Found {{count}} TOML command file:": "Encontrado {{count}} arquivo de comando TOML:",
306807
+ "Found {{count}} TOML command files:": "Encontrados {{count}} arquivos de comando TOML:",
306808
+ "... and {{count}} more": "... e mais {{count}}",
306809
+ "The TOML format is deprecated. Would you like to migrate them to Markdown format?": "O formato TOML est\xE1 obsoleto. Voc\xEA gostaria de migr\xE1-los para o formato Markdown?",
306810
+ "(Backups will be created and original files will be preserved)": "(Backups ser\xE3o criados e arquivos originais ser\xE3o preservados)",
306811
+ // ============================================================================
306812
+ // Loading Phrases
306813
+ // ============================================================================
306814
+ "Waiting for user confirmation...": "Aguardando confirma\xE7\xE3o do usu\xE1rio...",
306815
+ "(esc to cancel, {{time}})": "(esc para cancelar, {{time}})",
306816
+ WITTY_LOADING_PHRASES: [
306817
+ "Estou com sorte",
306818
+ "Enviando maravilhas...",
306819
+ "Pintando os serifos de volta...",
306820
+ "Navegando pelo mofo limoso...",
306821
+ "Consultando os esp\xEDritos digitais...",
306822
+ "Reticulando splines...",
306823
+ "Aquecendo os hamsters da IA...",
306824
+ "Perguntando \xE0 concha m\xE1gica...",
306825
+ "Gerando r\xE9plica espirituosa...",
306826
+ "Polindo os algoritmos...",
306827
+ "N\xE3o apresse a perfei\xE7\xE3o (ou meu c\xF3digo)...",
306828
+ "Preparando bytes frescos...",
306829
+ "Contando el\xE9trons...",
306830
+ "Engajando processadores cognitivos...",
306831
+ "Verificando erros de sintaxe no universo...",
306832
+ "Um momento, otimizando o humor...",
306833
+ "Embaralhando piadas...",
306834
+ "Desembara\xE7ando redes neurais...",
306835
+ "Compilando brilhantismo...",
306836
+ "Carregando humor.exe...",
306837
+ "Invocando a nuvem da sabedoria...",
306838
+ "Preparando uma resposta espirituosa...",
306839
+ "S\xF3 um segundo, estou depurando a realidade...",
306840
+ "Confundindo as op\xE7\xF5es...",
306841
+ "Sintonizando as frequ\xEAncias c\xF3smicas...",
306842
+ "Criando uma resposta digna da sua paci\xEAncia...",
306843
+ "Compilando os 1s e 0s...",
306844
+ "Resolvendo depend\xEAncias... e crises existenciais...",
306845
+ "Desfragmentando mem\xF3rias... tanto RAM quanto pessoais...",
306846
+ "Reiniciando o m\xF3dulo de humor...",
306847
+ "Fazendo cache do essencial (principalmente memes de gatos)...",
306848
+ "Otimizando para velocidade absurda",
306849
+ "Trocando bits... n\xE3o conte para os bytes...",
306850
+ "Coletando lixo... volto j\xE1...",
306851
+ "Montando a internet...",
306852
+ "Convertendo caf\xE9 em c\xF3digo...",
306853
+ "Atualizando a sintaxe da realidade...",
306854
+ "Reconectando as sinapses...",
306855
+ "Procurando um ponto e v\xEDrgula perdido...",
306856
+ "Lubrificando as engrenagens da m\xE1quina...",
306857
+ "Pr\xE9-aquecendo os servidores...",
306858
+ "Calibrando o capacitor de fluxo...",
306859
+ "Engajando o motor de improbabilidade...",
306860
+ "Canalizando a For\xE7a...",
306861
+ "Alinhando as estrelas para uma resposta ideal...",
306862
+ "Assim dizemos todos...",
306863
+ "Carregando a pr\xF3xima grande ideia...",
306864
+ "S\xF3 um momento, estou na zona...",
306865
+ "Preparando para deslumbr\xE1-lo com brilhantismo...",
306866
+ "S\xF3 um tique, estou polindo minha intelig\xEAncia...",
306867
+ "Segure firme, estou criando uma obra-prima...",
306868
+ "S\xF3 um instante, estou depurando o universo...",
306869
+ "S\xF3 um momento, estou alinhando os pixels...",
306870
+ "S\xF3 um segundo, estou otimizando o humor...",
306871
+ "S\xF3 um momento, estou ajustando os algoritmos...",
306872
+ "Velocidade de dobra engajada...",
306873
+ "Minerando mais cristais de Dilithium...",
306874
+ "N\xE3o entre em p\xE2nico...",
306875
+ "Seguindo o coelho branco...",
306876
+ "A verdade est\xE1 l\xE1 fora... em algum lugar...",
306877
+ "Soprando o cartucho...",
306878
+ "Carregando... Fa\xE7a um barrel roll!",
306879
+ "Aguardando o respawn...",
306880
+ "Terminando a Kessel Run em menos de 12 parsecs...",
306881
+ "O bolo n\xE3o \xE9 uma mentira, s\xF3 ainda est\xE1 carregando...",
306882
+ "Mexendo na tela de cria\xE7\xE3o de personagem...",
306883
+ "S\xF3 um momento, estou encontrando o meme certo...",
306884
+ "Pressionando 'A' para continuar...",
306885
+ "Pastoreando gatos digitais...",
306886
+ "Polindo os pixels...",
306887
+ "Encontrando um trocadilho adequado para a tela de carregamento...",
306888
+ "Distraindo voc\xEA com esta frase espirituosa...",
306889
+ "Quase l\xE1... provavelmente...",
306890
+ "Nossos hamsters est\xE3o trabalhando o mais r\xE1pido que podem...",
306891
+ "Dando um tapinha na cabe\xE7a do Cloudy...",
306892
+ "Acariciando o gato...",
306893
+ "Dando um Rickroll no meu chefe...",
306894
+ "Never gonna give you up, never gonna let you down...",
306895
+ "Tocando o baixo...",
306896
+ "Provando as amoras...",
306897
+ "Estou indo longe, estou indo pela velocidade...",
306898
+ "Isso \xE9 vida real? Ou \xE9 apenas fantasia?...",
306899
+ "Tenho um bom pressentimento sobre isso...",
306900
+ "Cutucando o urso...",
306901
+ "Fazendo pesquisa sobre os \xFAltimos memes...",
306902
+ "Descobrindo como tornar isso mais espirituoso...",
306903
+ "Hmmm... deixe-me pensar...",
306904
+ "O que voc\xEA chama de um peixe sem olhos? Um pxe...",
306905
+ "Por que o computador foi \xE0 terapia? Porque tinha muitos bytes...",
306906
+ "Por que programadores n\xE3o gostam da natureza? Porque tem muitos bugs...",
306907
+ "Por que programadores preferem o modo escuro? Porque a luz atrai bugs...",
306908
+ "Por que o desenvolvedor faliu? Porque usou todo o seu cache...",
306909
+ "O que voc\xEA pode fazer com um l\xE1pis quebrado? Nada, ele n\xE3o tem ponta...",
306910
+ "Aplicando manuten\xE7\xE3o percussiva...",
306911
+ "Procurando a orienta\xE7\xE3o correta do USB...",
306912
+ "Garantindo que a fuma\xE7a m\xE1gica permane\xE7a dentro dos fios...",
306913
+ "Tentando sair do Vim...",
306914
+ "Girando a roda do hamster...",
306915
+ "Isso n\xE3o \xE9 um bug, \xE9 um recurso n\xE3o documentado...",
306916
+ "Engajar.",
306917
+ "Eu voltarei... com uma resposta.",
306918
+ "Meu outro processo \xE9 uma TARDIS...",
306919
+ "Comungando com o esp\xEDrito da m\xE1quina...",
306920
+ "Deixando os pensamentos marinarem...",
306921
+ "Lembrei agora onde coloquei minhas chaves...",
306922
+ "Ponderando a orbe...",
306923
+ "Eu vi coisas que voc\xEAs n\xE3o acreditariam... como um usu\xE1rio que l\xEA mensagens de carregamento.",
306924
+ "Iniciando olhar pensativo...",
306925
+ "Qual \xE9 o lanche favorito de um computador? Microchips.",
306926
+ "Por que desenvolvedores Java usam \xF3culos? Porque eles n\xE3o C#.",
306927
+ "Carregando o laser... pew pew!",
306928
+ "Dividindo por zero... s\xF3 brincando!",
306929
+ "Procurando por um supervisor adulto... digo, processando.",
306930
+ "Fazendo bip boop.",
306931
+ "Buffering... porque at\xE9 as IAs precisam de um momento.",
306932
+ "Entrela\xE7ando part\xEDculas qu\xE2nticas para uma resposta mais r\xE1pida...",
306933
+ "Polindo o cromo... nos algoritmos.",
306934
+ "Voc\xEA n\xE3o est\xE1 entretido? (Trabalhando nisso!)",
306935
+ "Invocando os gremlins do c\xF3digo... para ajudar, \xE9 claro.",
306936
+ "S\xF3 esperando o som da conex\xE3o discada terminar...",
306937
+ "Recalibrando o humor\xF4metro.",
306938
+ "Minha outra tela de carregamento \xE9 ainda mais engra\xE7ada.",
306939
+ "Tenho quase certeza que tem um gato andando no teclado em algum lugar...",
306940
+ "Aumentando... Aumentando... Ainda carregando.",
306941
+ "N\xE3o \xE9 um bug, \xE9 um recurso... desta tela de carregamento.",
306942
+ "Voc\xEA j\xE1 tentou desligar e ligar de novo? (A tela de carregamento, n\xE3o eu.)",
306943
+ "Construindo pilares adicionais..."
306944
+ ],
306945
+ // ============================================================================
306946
+ // Extension Settings Input
306947
+ // ============================================================================
306948
+ "Enter value...": "Digite o valor...",
306949
+ "Enter sensitive value...": "Digite o valor sens\xEDvel...",
306950
+ "Press Enter to submit, Escape to cancel": "Pressione Enter para enviar, Escape para cancelar",
306951
+ // ============================================================================
306952
+ // Command Migration Tool
306953
+ // ============================================================================
306954
+ "Markdown file already exists: {{filename}}": "Arquivo Markdown j\xE1 existe: {{filename}}",
306955
+ "TOML Command Format Deprecation Notice": "Aviso de Obsolesc\xEAncia do Formato de Comando TOML",
306956
+ "Found {{count}} command file(s) in TOML format:": "Encontrado(s) {{count}} arquivo(s) de comando no formato TOML:",
306957
+ "The TOML format for commands is being deprecated in favor of Markdown format.": "O formato TOML para comandos est\xE1 sendo descontinuado em favor do formato Markdown.",
306958
+ "Markdown format is more readable and easier to edit.": "O formato Markdown \xE9 mais leg\xEDvel e f\xE1cil de editar.",
306959
+ "You can migrate these files automatically using:": "Voc\xEA pode migrar esses arquivos automaticamente usando:",
306960
+ "Or manually convert each file:": "Ou converter manualmente cada arquivo:",
306961
+ 'TOML: prompt = "..." / description = "..."': 'TOML: prompt = "..." / description = "..."',
306962
+ "Markdown: YAML frontmatter + content": "Markdown: YAML frontmatter + conte\xFAdo",
306963
+ "The migration tool will:": "A ferramenta de migra\xE7\xE3o ir\xE1:",
306964
+ "Convert TOML files to Markdown": "Converter arquivos TOML para Markdown",
306965
+ "Create backups of original files": "Criar backups dos arquivos originais",
306966
+ "Preserve all command functionality": "Preservar toda a funcionalidade do comando",
306967
+ "TOML format will continue to work for now, but migration is recommended.": "O formato TOML continuar\xE1 a funcionar por enquanto, mas a migra\xE7\xE3o \xE9 recomendada.",
306968
+ // ============================================================================
306969
+ // Extensions - Explore Command
306970
+ // ============================================================================
306971
+ "Open extensions page in your browser": "Abrir p\xE1gina de extens\xF5es no seu navegador",
306972
+ "Unknown extensions source: {{source}}.": "Fonte de extens\xF5es desconhecida: {{source}}.",
306973
+ "Would open extensions page in your browser: {{url}} (skipped in test environment)": "Abriria a p\xE1gina de extens\xF5es no seu navegador: {{url}} (pulado no ambiente de teste)",
306974
+ "View available extensions at {{url}}": "Ver extens\xF5es dispon\xEDveis em {{url}}",
306975
+ "Opening extensions page in your browser: {{url}}": "Abrindo p\xE1gina de extens\xF5es no seu navegador: {{url}}",
306976
+ "Failed to open browser. Check out the extensions gallery at {{url}}": "Falha ao abrir o navegador. Confira a galeria de extens\xF5es em {{url}}"
306977
+ };
306978
+ }
306979
+ });
306980
+
305291
306981
  // packages/cli/src/i18n/locales/zh.js
305292
306982
  var zh_exports = {};
305293
306983
  __export(zh_exports, {
@@ -305365,7 +307055,7 @@ var init_zh = __esm({
305365
307055
  // ============================================================================
305366
307056
  // System Information Fields
305367
307057
  // ============================================================================
305368
- "RDMind": "RDMind",
307058
+ RDMind: "RDMind",
305369
307059
  Runtime: "\u8FD0\u884C\u73AF\u5883",
305370
307060
  OS: "\u64CD\u4F5C\u7CFB\u7EDF",
305371
307061
  Auth: "\u8BA4\u8BC1",
@@ -305678,6 +307368,17 @@ var init_zh = __esm({
305678
307368
  "Update all extensions.": "\u66F4\u65B0\u6240\u6709\u6269\u5C55\u3002",
305679
307369
  "Either an extension name or --all must be provided": "\u5FC5\u987B\u63D0\u4F9B\u6269\u5C55\u540D\u79F0\u6216 --all",
305680
307370
  "Lists installed extensions.": "\u5217\u51FA\u5DF2\u5B89\u88C5\u7684\u6269\u5C55\u3002",
307371
+ "Path:": "\u8DEF\u5F84\uFF1A",
307372
+ "Source:": "\u6765\u6E90\uFF1A",
307373
+ "Type:": "\u7C7B\u578B\uFF1A",
307374
+ "Ref:": "\u5F15\u7528\uFF1A",
307375
+ "Release tag:": "\u53D1\u5E03\u6807\u7B7E\uFF1A",
307376
+ "Enabled (User):": "\u5DF2\u542F\u7528\uFF08\u7528\u6237\uFF09\uFF1A",
307377
+ "Enabled (Workspace):": "\u5DF2\u542F\u7528\uFF08\u5DE5\u4F5C\u533A\uFF09\uFF1A",
307378
+ "Context files:": "\u4E0A\u4E0B\u6587\u6587\u4EF6\uFF1A",
307379
+ "Skills:": "\u6280\u80FD\uFF1A",
307380
+ "Agents:": "\u4EE3\u7406\uFF1A",
307381
+ "MCP servers:": "MCP \u670D\u52A1\u5668\uFF1A",
305681
307382
  "Link extension failed to install.": "\u94FE\u63A5\u6269\u5C55\u5B89\u88C5\u5931\u8D25\u3002",
305682
307383
  'Extension "{{name}}" linked successfully and enabled.': '\u6269\u5C55 "{{name}}" \u94FE\u63A5\u6210\u529F\u5E76\u5DF2\u542F\u7528\u3002',
305683
307384
  "Links an extension from a local path. Updates made to the local path will always be reflected.": "\u4ECE\u672C\u5730\u8DEF\u5F84\u94FE\u63A5\u6269\u5C55\u3002\u5BF9\u672C\u5730\u8DEF\u5F84\u7684\u66F4\u65B0\u5C06\u59CB\u7EC8\u53CD\u6620\u3002",
@@ -305735,18 +307436,19 @@ var init_zh = __esm({
305735
307436
  // ============================================================================
305736
307437
  // Commands - Language
305737
307438
  // ============================================================================
305738
- "Invalid language. Available: en-US, zh-CN": "\u65E0\u6548\u7684\u8BED\u8A00\u3002\u53EF\u7528\u9009\u9879\uFF1Aen-US, zh-CN",
307439
+ "Invalid language. Available: {{options}}": "\u65E0\u6548\u7684\u8BED\u8A00\u3002\u53EF\u7528\u9009\u9879\uFF1A{{options}}",
305739
307440
  "Language subcommands do not accept additional arguments.": "\u8BED\u8A00\u5B50\u547D\u4EE4\u4E0D\u63A5\u53D7\u989D\u5916\u53C2\u6570",
305740
307441
  "Current UI language: {{lang}}": "\u5F53\u524D UI \u8BED\u8A00\uFF1A{{lang}}",
305741
307442
  "Current LLM output language: {{lang}}": "\u5F53\u524D LLM \u8F93\u51FA\u8BED\u8A00\uFF1A{{lang}}",
305742
307443
  "LLM output language not set": "\u672A\u8BBE\u7F6E LLM \u8F93\u51FA\u8BED\u8A00",
305743
307444
  "Set UI language": "\u8BBE\u7F6E UI \u8BED\u8A00",
305744
307445
  "Set LLM output language": "\u8BBE\u7F6E LLM \u8F93\u51FA\u8BED\u8A00",
305745
- "Usage: /language ui [zh-CN|en-US]": "\u7528\u6CD5\uFF1A/language ui [zh-CN|en-US]",
307446
+ "Usage: /language ui [{{options}}]": "\u7528\u6CD5\uFF1A/language ui [{{options}}]",
305746
307447
  "Usage: /language output <language>": "\u7528\u6CD5\uFF1A/language output <\u8BED\u8A00>",
305747
307448
  "Example: /language output \u4E2D\u6587": "\u793A\u4F8B\uFF1A/language output \u4E2D\u6587",
305748
307449
  "Example: /language output English": "\u793A\u4F8B\uFF1A/language output English",
305749
307450
  "Example: /language output \u65E5\u672C\u8A9E": "\u793A\u4F8B\uFF1A/language output \u65E5\u672C\u8A9E",
307451
+ "Example: /language output Portugu\xEAs": "\u793A\u4F8B\uFF1A/language output Portugu\xEAs",
305750
307452
  "UI language changed to {{lang}}": "UI \u8BED\u8A00\u5DF2\u66F4\u6539\u4E3A {{lang}}",
305751
307453
  "LLM output language set to {{lang}}": "LLM \u8F93\u51FA\u8BED\u8A00\u5DF2\u8BBE\u7F6E\u4E3A {{lang}}",
305752
307454
  "LLM output language rule file generated at {{path}}": "LLM \u8F93\u51FA\u8BED\u8A00\u89C4\u5219\u6587\u4EF6\u5DF2\u751F\u6210\u4E8E {{path}}",
@@ -305756,10 +307458,7 @@ var init_zh = __esm({
305756
307458
  "Available subcommands:": "\u53EF\u7528\u7684\u5B50\u547D\u4EE4\uFF1A",
305757
307459
  "To request additional UI language packs, please open an issue on GitHub.": "\u5982\u9700\u8BF7\u6C42\u5176\u4ED6 UI \u8BED\u8A00\u5305\uFF0C\u8BF7\u5728 GitHub \u4E0A\u63D0\u4EA4 issue",
305758
307460
  "Available options:": "\u53EF\u7528\u9009\u9879\uFF1A",
305759
- " - zh-CN: Simplified Chinese": " - zh-CN: \u7B80\u4F53\u4E2D\u6587",
305760
- " - en-US: English": " - en-US: English",
305761
- "Set UI language to Simplified Chinese (zh-CN)": "\u5C06 UI \u8BED\u8A00\u8BBE\u7F6E\u4E3A\u7B80\u4F53\u4E2D\u6587 (zh-CN)",
305762
- "Set UI language to English (en-US)": "\u5C06 UI \u8BED\u8A00\u8BBE\u7F6E\u4E3A\u82F1\u8BED (en-US)",
307461
+ "Set UI language to {{name}}": "\u5C06 UI \u8BED\u8A00\u8BBE\u7F6E\u4E3A {{name}}",
305763
307462
  // ============================================================================
305764
307463
  // Commands - Approval Mode
305765
307464
  // ============================================================================
@@ -306116,6 +307815,7 @@ var init_zh = __esm({
306116
307815
  "RDMind now supports custom commands, sub-agents, skills and other features. Check the documentation for usage help.": "RDMind \u73B0\u5DF2\u652F\u6301\u81EA\u5B9A\u4E49\u547D\u4EE4\u3001\u5B50\u4EE3\u7406\u3001\u6280\u80FD\u7B49\u7279\u6027\uFF0C\u67E5\u9605\u6587\u6863\u83B7\u5F97\u4F7F\u7528\u5E2E\u52A9\u3002",
306117
307816
  "Try asking RDMind to help you commit code.": "\u8BD5\u8BD5\u8BA9 RDMind \u5E2E\u4F60\u63D0\u4EA4\u4EE3\u7801\u3002",
306118
307817
  "RDMind can read REDoc. Please do not upload documents involving user privacy and core algorithms.": "RDMind \u53EF\u4EE5\u8BFB\u61C2 REDoc\uFF0C\u6CE8\u610F\u4E0D\u8981\u4E0A\u4F20\u6D89\u53CA\u7528\u6237\u9690\u79C1\u548C\u6838\u5FC3\u7B97\u6CD5\u7684\u6587\u6863\u3002",
307818
+ "If you find RDMind useful, feel free to recommend it to your colleagues~": "\u5982\u679C\u89C9\u5F97 RDMind \u597D\u7528\uFF0C\u6B22\u8FCE\u5411\u540C\u4E8B\u63A8\u8350~",
306119
307819
  // ============================================================================
306120
307820
  // Exit Screen / Stats
306121
307821
  // ============================================================================
@@ -342508,7 +344208,7 @@ var patchConsole = /* @__PURE__ */ __name((callback) => {
342508
344208
  var dist_default2 = patchConsole;
342509
344209
 
342510
344210
  // node_modules/ink/build/ink.js
342511
- var import_constants31 = __toESM(require_constants12(), 1);
344211
+ var import_constants32 = __toESM(require_constants12(), 1);
342512
344212
 
342513
344213
  // node_modules/yoga-layout/dist/src/index.js
342514
344214
  init_esbuild_shims();
@@ -344571,7 +346271,7 @@ __name(wrapAnsi, "wrapAnsi");
344571
346271
  // node_modules/ink/build/reconciler.js
344572
346272
  init_esbuild_shims();
344573
346273
  var import_react_reconciler = __toESM(require_react_reconciler(), 1);
344574
- var import_constants30 = __toESM(require_constants12(), 1);
346274
+ var import_constants31 = __toESM(require_constants12(), 1);
344575
346275
  import process16 from "node:process";
344576
346276
  var import_react = __toESM(require_react(), 1);
344577
346277
 
@@ -345542,7 +347242,7 @@ var cleanupYogaNode = /* @__PURE__ */ __name((node) => {
345542
347242
  node?.unsetMeasureFunc();
345543
347243
  node?.freeRecursive();
345544
347244
  }, "cleanupYogaNode");
345545
- var currentUpdatePriority = import_constants30.NoEventPriority;
347245
+ var currentUpdatePriority = import_constants31.NoEventPriority;
345546
347246
  var currentRootNode;
345547
347247
  var reconciler_default = (0, import_react_reconciler.default)({
345548
347248
  getRootHostContext: /* @__PURE__ */ __name(() => ({
@@ -345699,10 +347399,10 @@ var reconciler_default = (0, import_react_reconciler.default)({
345699
347399
  },
345700
347400
  getCurrentUpdatePriority: /* @__PURE__ */ __name(() => currentUpdatePriority, "getCurrentUpdatePriority"),
345701
347401
  resolveUpdatePriority() {
345702
- if (currentUpdatePriority !== import_constants30.NoEventPriority) {
347402
+ if (currentUpdatePriority !== import_constants31.NoEventPriority) {
345703
347403
  return currentUpdatePriority;
345704
347404
  }
345705
- return import_constants30.DefaultEventPriority;
347405
+ return import_constants31.DefaultEventPriority;
345706
347406
  },
345707
347407
  maySuspendCommit() {
345708
347408
  return false;
@@ -348220,7 +349920,7 @@ var Ink = class {
348220
349920
  this.fullStaticOutput = "";
348221
349921
  this.container = reconciler_default.createContainer(
348222
349922
  this.rootNode,
348223
- import_constants31.LegacyRoot,
349923
+ import_constants32.LegacyRoot,
348224
349924
  null,
348225
349925
  false,
348226
349926
  null,
@@ -348675,34 +350375,17 @@ init_settings();
348675
350375
 
348676
350376
  // packages/cli/src/i18n/index.ts
348677
350377
  init_esbuild_shims();
350378
+ init_languages();
348678
350379
  import * as fs80 from "node:fs";
348679
350380
  import * as path83 from "node:path";
348680
350381
  import { fileURLToPath as fileURLToPath8, pathToFileURL as pathToFileURL2 } from "node:url";
348681
350382
  import { homedir as homedir18 } from "node:os";
348682
350383
 
348683
- // packages/cli/src/i18n/languages.ts
348684
- init_esbuild_shims();
348685
- var SUPPORTED_LANGUAGES = [
348686
- {
348687
- code: "en",
348688
- id: "en-US",
348689
- fullName: "English"
348690
- },
348691
- {
348692
- code: "zh",
348693
- id: "zh-CN",
348694
- fullName: "Chinese"
348695
- }
348696
- ];
348697
- function getLanguageNameFromLocale(locale) {
348698
- const lang = SUPPORTED_LANGUAGES.find((l3) => l3.code === locale);
348699
- return lang?.fullName || "English";
348700
- }
348701
- __name(getLanguageNameFromLocale, "getLanguageNameFromLocale");
348702
-
348703
350384
  // import("./locales/**/*.js") in packages/cli/src/i18n/index.ts
348704
350385
  var globImport_locales_js = __glob({
348705
350386
  "./locales/en.js": () => Promise.resolve().then(() => (init_en3(), en_exports)),
350387
+ "./locales/ja.js": () => Promise.resolve().then(() => (init_ja(), ja_exports)),
350388
+ "./locales/pt.js": () => Promise.resolve().then(() => (init_pt(), pt_exports)),
348706
350389
  "./locales/zh.js": () => Promise.resolve().then(() => (init_zh(), zh_exports))
348707
350390
  });
348708
350391
 
@@ -348722,11 +350405,16 @@ var getLocalePath = /* @__PURE__ */ __name((lang, useUserDir = false) => {
348722
350405
  }, "getLocalePath");
348723
350406
  function detectSystemLanguage() {
348724
350407
  const envLang = process.env["RDMind_LANG"] || process.env["LANG"];
348725
- if (envLang?.startsWith("zh")) return "zh";
348726
- if (envLang?.startsWith("en")) return "en";
350408
+ if (envLang) {
350409
+ for (const lang of SUPPORTED_LANGUAGES) {
350410
+ if (envLang.startsWith(lang.code)) return lang.code;
350411
+ }
350412
+ }
348727
350413
  try {
348728
350414
  const locale = Intl.DateTimeFormat().resolvedOptions().locale;
348729
- if (locale.startsWith("zh")) return "zh";
350415
+ for (const lang of SUPPORTED_LANGUAGES) {
350416
+ if (locale.startsWith(lang.code)) return lang.code;
350417
+ }
348730
350418
  } catch {
348731
350419
  }
348732
350420
  return "en";
@@ -348866,7 +350554,7 @@ function findModelConfig(modelProviders, authType, modelId) {
348866
350554
  __name(findModelConfig, "findModelConfig");
348867
350555
  function hasApiKeyForAuth(authType, settings, config2) {
348868
350556
  const modelProviders = settings.modelProviders;
348869
- const modelId = config2?.modelsConfig.getModel() ?? settings.model?.name;
350557
+ const modelId = config2?.getModelsConfig().getModel() ?? settings.model?.name;
348870
350558
  const modelConfig = findModelConfig(modelProviders, authType, modelId);
348871
350559
  if (modelConfig?.envKey) {
348872
350560
  const hasKey2 = !!process.env[modelConfig.envKey];
@@ -348955,7 +350643,7 @@ function validateAuthMethod(authMethod, config2) {
348955
350643
  return apiKeyError;
348956
350644
  }
348957
350645
  const modelProviders = settings.merged.modelProviders;
348958
- const modelId = config2?.modelsConfig.getModel() ?? settings.merged.model?.name;
350646
+ const modelId = config2?.getModelsConfig().getModel() ?? settings.merged.model?.name;
348959
350647
  const modelConfig = findModelConfig(modelProviders, authMethod, modelId);
348960
350648
  if (modelConfig && !modelConfig.baseUrl) {
348961
350649
  return t4(
@@ -349449,26 +351137,26 @@ function extensionToOutputString(extension, extensionManager, workspaceDir, inli
349449
351137
  const status = workspaceEnabled ? import_chalk5.default.green("\u2713") : import_chalk5.default.red("\u2717");
349450
351138
  let output = `${inline2 ? "" : status} ${extension.config.name} (${extension.config.version})`;
349451
351139
  output += `
349452
- Path: ${extension.path}`;
351140
+ ${t4("Path:")} ${extension.path}`;
349453
351141
  if (extension.installMetadata) {
349454
351142
  output += `
349455
- Source: ${extension.installMetadata.source} (Type: ${extension.installMetadata.type})`;
351143
+ ${t4("Source:")} ${extension.installMetadata.source} (${t4("Type:")} ${extension.installMetadata.type})`;
349456
351144
  if (extension.installMetadata.ref) {
349457
351145
  output += `
349458
- Ref: ${extension.installMetadata.ref}`;
351146
+ ${t4("Ref:")} ${extension.installMetadata.ref}`;
349459
351147
  }
349460
351148
  if (extension.installMetadata.releaseTag) {
349461
351149
  output += `
349462
- Release tag: ${extension.installMetadata.releaseTag}`;
351150
+ ${t4("Release tag:")} ${extension.installMetadata.releaseTag}`;
349463
351151
  }
349464
351152
  }
349465
351153
  output += `
349466
- Enabled (User): ${userEnabled}`;
351154
+ ${t4("Enabled (User):")} ${userEnabled}`;
349467
351155
  output += `
349468
- Enabled (Workspace): ${workspaceEnabled}`;
351156
+ ${t4("Enabled (Workspace):")} ${workspaceEnabled}`;
349469
351157
  if (extension.contextFiles.length > 0) {
349470
351158
  output += `
349471
- Context files:`;
351159
+ ${t4("Context files:")}`;
349472
351160
  extension.contextFiles.forEach((contextFile) => {
349473
351161
  output += `
349474
351162
  ${contextFile}`;
@@ -349476,15 +351164,31 @@ function extensionToOutputString(extension, extensionManager, workspaceDir, inli
349476
351164
  }
349477
351165
  if (extension.commands && extension.commands.length > 0) {
349478
351166
  output += `
349479
- Commands:`;
351167
+ ${t4("Commands:")}`;
349480
351168
  extension.commands.forEach((command2) => {
349481
351169
  output += `
349482
351170
  /${command2}`;
349483
351171
  });
349484
351172
  }
351173
+ if (extension.skills && extension.skills.length > 0) {
351174
+ output += `
351175
+ ${t4("Skills:")}`;
351176
+ extension.skills.forEach((skill) => {
351177
+ output += `
351178
+ ${skill.name}`;
351179
+ });
351180
+ }
351181
+ if (extension.agents && extension.agents.length > 0) {
351182
+ output += `
351183
+ ${t4("Agents:")}`;
351184
+ extension.agents.forEach((agent) => {
351185
+ output += `
351186
+ ${agent.name}`;
351187
+ });
351188
+ }
349485
351189
  if (extension.config.mcpServers) {
349486
351190
  output += `
349487
- MCP servers:`;
351191
+ ${t4("MCP servers:")}`;
349488
351192
  Object.keys(extension.config.mcpServers).forEach((key) => {
349489
351193
  output += `
349490
351194
  ${key}`;
@@ -355440,7 +357144,7 @@ __name(getPackageJson, "getPackageJson");
355440
357144
  // packages/cli/src/utils/version.ts
355441
357145
  async function getCliVersion() {
355442
357146
  const pkgJson = await getPackageJson();
355443
- return "0.2.2-alpha.4";
357147
+ return "0.2.2";
355444
357148
  }
355445
357149
  __name(getCliVersion, "getCliVersion");
355446
357150
 
@@ -362731,126 +364435,11 @@ function validateTheme(settings) {
362731
364435
  }
362732
364436
  __name(validateTheme, "validateTheme");
362733
364437
 
362734
- // packages/cli/src/utils/languageUtils.ts
362735
- init_esbuild_shims();
362736
- init_core5();
362737
- import * as fs83 from "node:fs";
362738
- import * as path91 from "node:path";
362739
- var LLM_OUTPUT_LANGUAGE_RULE_FILENAME = "output-language.md";
362740
- var LLM_OUTPUT_LANGUAGE_MARKER_PREFIX = "rdmind:llm-output-language:";
362741
- var OUTPUT_LANGUAGE_AUTO = "auto";
362742
- function isAutoLanguage(value) {
362743
- return !value || value.toLowerCase() === OUTPUT_LANGUAGE_AUTO;
362744
- }
362745
- __name(isAutoLanguage, "isAutoLanguage");
362746
- function normalizeOutputLanguage(language) {
362747
- const lowered = language.toLowerCase();
362748
- const fullName = getLanguageNameFromLocale(lowered);
362749
- if (fullName !== "English" || lowered === "en") {
362750
- return fullName;
362751
- }
362752
- return language;
362753
- }
362754
- __name(normalizeOutputLanguage, "normalizeOutputLanguage");
362755
- function resolveOutputLanguage(value) {
362756
- if (isAutoLanguage(value)) {
362757
- const detectedLocale = detectSystemLanguage();
362758
- return getLanguageNameFromLocale(detectedLocale);
362759
- }
362760
- return normalizeOutputLanguage(value);
362761
- }
362762
- __name(resolveOutputLanguage, "resolveOutputLanguage");
362763
- function getOutputLanguageFilePath() {
362764
- return path91.join(
362765
- Storage.getGlobalQwenDir(),
362766
- LLM_OUTPUT_LANGUAGE_RULE_FILENAME
362767
- );
362768
- }
362769
- __name(getOutputLanguageFilePath, "getOutputLanguageFilePath");
362770
- function sanitizeForMarker(language) {
362771
- return language.replace(/[\r\n]/g, " ").replace(/--!?>/g, "").replace(/--/g, "");
362772
- }
362773
- __name(sanitizeForMarker, "sanitizeForMarker");
362774
- function generateOutputLanguageFileContent(language) {
362775
- const safeLanguage = sanitizeForMarker(language);
362776
- return `# Output language preference: ${language}
362777
- <!-- ${LLM_OUTPUT_LANGUAGE_MARKER_PREFIX} ${safeLanguage} -->
362778
-
362779
- ## Goal
362780
- Prefer responding in **${language}** for normal assistant messages and explanations.
362781
-
362782
- ## Keep technical artifacts unchanged
362783
- Do **not** translate or rewrite:
362784
- - Code blocks, CLI commands, file paths, stack traces, logs, JSON keys, identifiers
362785
- - Exact quoted text from the user (keep quotes verbatim)
362786
-
362787
- ## When a conflict exists
362788
- If higher-priority instructions (system/developer) require a different behavior, follow them.
362789
-
362790
- ## Tool / system outputs
362791
- Raw tool/system outputs may contain fixed-format English. Preserve them verbatim, and if needed, add a short **${language}** explanation below.
362792
- `;
362793
- }
362794
- __name(generateOutputLanguageFileContent, "generateOutputLanguageFileContent");
362795
- function parseOutputLanguageFromContent(content) {
362796
- const markerRegex = new RegExp(
362797
- String.raw`<!--\s*${LLM_OUTPUT_LANGUAGE_MARKER_PREFIX}\s*(.*?)\s*-->`,
362798
- "i"
362799
- );
362800
- const markerMatch = content.match(markerRegex);
362801
- if (markerMatch?.[1]?.trim()) {
362802
- return markerMatch[1].trim();
362803
- }
362804
- const headingMatch = content.match(
362805
- /^#.*?CRITICAL:\s*(.*?)\s+Output Language Rule\b/im
362806
- );
362807
- if (headingMatch?.[1]?.trim()) {
362808
- return headingMatch[1].trim();
362809
- }
362810
- return null;
362811
- }
362812
- __name(parseOutputLanguageFromContent, "parseOutputLanguageFromContent");
362813
- function readOutputLanguageFromFile() {
362814
- const filePath = getOutputLanguageFilePath();
362815
- if (!fs83.existsSync(filePath)) {
362816
- return null;
362817
- }
362818
- try {
362819
- const content = fs83.readFileSync(filePath, "utf-8");
362820
- return parseOutputLanguageFromContent(content);
362821
- } catch {
362822
- return null;
362823
- }
362824
- }
362825
- __name(readOutputLanguageFromFile, "readOutputLanguageFromFile");
362826
- function writeOutputLanguageFile(language) {
362827
- const filePath = getOutputLanguageFilePath();
362828
- const content = generateOutputLanguageFileContent(language);
362829
- const dir = path91.dirname(filePath);
362830
- fs83.mkdirSync(dir, { recursive: true });
362831
- fs83.writeFileSync(filePath, content, "utf-8");
362832
- }
362833
- __name(writeOutputLanguageFile, "writeOutputLanguageFile");
362834
- function updateOutputLanguageFile(settingValue) {
362835
- const resolved = resolveOutputLanguage(settingValue);
362836
- writeOutputLanguageFile(resolved);
362837
- }
362838
- __name(updateOutputLanguageFile, "updateOutputLanguageFile");
362839
- function initializeLlmOutputLanguage(outputLanguage) {
362840
- const resolved = resolveOutputLanguage(outputLanguage);
362841
- const currentFileLanguage = readOutputLanguageFromFile();
362842
- if (currentFileLanguage !== resolved) {
362843
- writeOutputLanguageFile(resolved);
362844
- }
362845
- }
362846
- __name(initializeLlmOutputLanguage, "initializeLlmOutputLanguage");
362847
-
362848
364438
  // packages/cli/src/core/initializer.ts
362849
364439
  async function initializeApp(config2, settings) {
362850
364440
  const languageSetting = process.env["RDMind_LANG"] || settings.merged.general?.language || "auto";
362851
364441
  await initializeI18n(languageSetting);
362852
- initializeLlmOutputLanguage(settings.merged.general?.outputLanguage);
362853
- const authType = config2.modelsConfig.getCurrentAuthType();
364442
+ const authType = config2.getModelsConfig().getCurrentAuthType();
362854
364443
  const authError = await performInitialAuth(config2, authType);
362855
364444
  if (authError) {
362856
364445
  settings.setValue(
@@ -362860,7 +364449,7 @@ async function initializeApp(config2, settings) {
362860
364449
  );
362861
364450
  }
362862
364451
  const themeError = validateTheme(settings);
362863
- const shouldOpenAuthDialog = !config2.modelsConfig.wasAuthTypeExplicitlyProvided() || !!authError;
364452
+ const shouldOpenAuthDialog = !config2.getModelsConfig().wasAuthTypeExplicitlyProvided() || !!authError;
362864
364453
  if (config2.getIdeMode()) {
362865
364454
  const ideClient = await IdeClient.getInstance();
362866
364455
  await ideClient.connect();
@@ -363255,7 +364844,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
363255
364844
 
363256
364845
  // packages/cli/src/generated/git-commit.ts
363257
364846
  init_esbuild_shims();
363258
- var GIT_COMMIT_INFO2 = "ebe48cf8a";
364847
+ var GIT_COMMIT_INFO2 = "2ca4ee323";
363259
364848
 
363260
364849
  // packages/cli/src/utils/systemInfo.ts
363261
364850
  async function getNpmVersion() {
@@ -363896,11 +365485,11 @@ var copyCommand = {
363896
365485
 
363897
365486
  // packages/cli/src/ui/commands/createCommand.ts
363898
365487
  init_esbuild_shims();
363899
- import * as fs84 from "fs";
363900
- import * as path92 from "path";
365488
+ import * as fs83 from "fs";
365489
+ import * as path91 from "path";
363901
365490
  import { fileURLToPath as fileURLToPath14 } from "url";
363902
365491
  var __filename6 = fileURLToPath14(import.meta.url);
363903
- var __dirname9 = path92.dirname(__filename6);
365492
+ var __dirname9 = path91.dirname(__filename6);
363904
365493
  function validateProjectName(name3) {
363905
365494
  return /^[a-z][a-z0-9-]*[a-z0-9]$|^[a-z]$/.test(name3);
363906
365495
  }
@@ -363914,20 +365503,20 @@ function getIdlExamplePath() {
363914
365503
  // 1. npm 发布:
363915
365504
  // __dirname 就是 node_modules/@rdmind/rdmind/
363916
365505
  // 模板在 node_modules/@rdmind/rdmind/templates/
363917
- path92.join(__dirname9, "templates", "idl-template/wiki/example"),
365506
+ path91.join(__dirname9, "templates", "idl-template/wiki/example"),
363918
365507
  // 2. 开发环境:相对于工作区根目录的idl-template
363919
- path92.join(
365508
+ path91.join(
363920
365509
  __dirname9,
363921
365510
  "..",
363922
365511
  "packages/cli/templates/idl-template/wiki/example"
363923
365512
  )
363924
365513
  ];
363925
365514
  for (const templatePath of possiblePaths) {
363926
- if (fs84.existsSync(templatePath)) {
365515
+ if (fs83.existsSync(templatePath)) {
363927
365516
  return templatePath;
363928
365517
  }
363929
365518
  }
363930
- return path92.join(process.cwd(), "idl-template");
365519
+ return path91.join(process.cwd(), "idl-template");
363931
365520
  }
363932
365521
  __name(getIdlExamplePath, "getIdlExamplePath");
363933
365522
  function getTemplatePath() {
@@ -363935,16 +365524,16 @@ function getTemplatePath() {
363935
365524
  // 1. npm 安装
363936
365525
  // __dirname 就是 node_modules/@rdmind/rdmind/
363937
365526
  // 模板在 node_modules/@rdmind/rdmind/template/
363938
- path92.join(__dirname9, "template"),
365527
+ path91.join(__dirname9, "template"),
363939
365528
  // 2. 开发环境:
363940
- path92.join(__dirname9, "..", "packages/cli/template")
365529
+ path91.join(__dirname9, "..", "packages/cli/template")
363941
365530
  ];
363942
365531
  for (const templatePath of possiblePaths) {
363943
- if (fs84.existsSync(templatePath)) {
365532
+ if (fs83.existsSync(templatePath)) {
363944
365533
  return templatePath;
363945
365534
  }
363946
365535
  }
363947
- return path92.join(process.cwd(), "sns-demo");
365536
+ return path91.join(process.cwd(), "sns-demo");
363948
365537
  }
363949
365538
  __name(getTemplatePath, "getTemplatePath");
363950
365539
  function replaceIdlProjectNames(content, oldName, newName) {
@@ -363999,18 +365588,18 @@ function replaceProjectNames(content, oldName, newName, businessModule) {
363999
365588
  }
364000
365589
  __name(replaceProjectNames, "replaceProjectNames");
364001
365590
  async function copyAndReplaceFile(srcFile, destFile, oldName, newName, businessModule, isIdlProject = false) {
364002
- const destDir = path92.dirname(destFile);
364003
- if (!fs84.existsSync(destDir)) {
364004
- fs84.mkdirSync(destDir, { recursive: true });
365591
+ const destDir = path91.dirname(destFile);
365592
+ if (!fs83.existsSync(destDir)) {
365593
+ fs83.mkdirSync(destDir, { recursive: true });
364005
365594
  }
364006
- const content = fs84.readFileSync(srcFile, "utf8");
365595
+ const content = fs83.readFileSync(srcFile, "utf8");
364007
365596
  let newContent;
364008
365597
  if (isIdlProject) {
364009
365598
  newContent = replaceIdlProjectNames(content, oldName, newName);
364010
365599
  } else {
364011
365600
  newContent = replaceProjectNames(content, oldName, newName, businessModule);
364012
365601
  }
364013
- fs84.writeFileSync(destFile, newContent, "utf8");
365602
+ fs83.writeFileSync(destFile, newContent, "utf8");
364014
365603
  }
364015
365604
  __name(copyAndReplaceFile, "copyAndReplaceFile");
364016
365605
  function shouldSkipItem(itemName) {
@@ -364048,12 +365637,12 @@ function shouldSkipItem(itemName) {
364048
365637
  }
364049
365638
  __name(shouldSkipItem, "shouldSkipItem");
364050
365639
  async function copyAndReplaceDir(srcDir, destDir, oldName, newName, businessModule, isIdlProject = false) {
364051
- if (!fs84.existsSync(destDir)) {
364052
- fs84.mkdirSync(destDir, { recursive: true });
365640
+ if (!fs83.existsSync(destDir)) {
365641
+ fs83.mkdirSync(destDir, { recursive: true });
364053
365642
  }
364054
- const items = fs84.readdirSync(srcDir);
365643
+ const items = fs83.readdirSync(srcDir);
364055
365644
  for (const item of items) {
364056
- const srcPath = path92.join(srcDir, item);
365645
+ const srcPath = path91.join(srcDir, item);
364057
365646
  if (shouldSkipItem(item)) {
364058
365647
  continue;
364059
365648
  }
@@ -364064,7 +365653,7 @@ async function copyAndReplaceDir(srcDir, destDir, oldName, newName, businessModu
364064
365653
  const pathParts = newName.split("-");
364065
365654
  const currentDestPath = destDir;
364066
365655
  for (let i3 = 0; i3 < pathParts.length; i3++) {
364067
- const partPath = path92.join(
365656
+ const partPath = path91.join(
364068
365657
  currentDestPath,
364069
365658
  ...pathParts.slice(0, i3 + 1)
364070
365659
  );
@@ -364078,8 +365667,8 @@ async function copyAndReplaceDir(srcDir, destDir, oldName, newName, businessModu
364078
365667
  isIdlProject
364079
365668
  );
364080
365669
  } else {
364081
- if (!fs84.existsSync(partPath)) {
364082
- fs84.mkdirSync(partPath, { recursive: true });
365670
+ if (!fs83.existsSync(partPath)) {
365671
+ fs83.mkdirSync(partPath, { recursive: true });
364083
365672
  }
364084
365673
  }
364085
365674
  }
@@ -364093,7 +365682,7 @@ async function copyAndReplaceDir(srcDir, destDir, oldName, newName, businessModu
364093
365682
  const pathParts = packageDirName.split("-");
364094
365683
  const currentDestPath = destDir;
364095
365684
  for (let i3 = 0; i3 < pathParts.length; i3++) {
364096
- const partPath = path92.join(
365685
+ const partPath = path91.join(
364097
365686
  currentDestPath,
364098
365687
  ...pathParts.slice(0, i3 + 1)
364099
365688
  );
@@ -364107,8 +365696,8 @@ async function copyAndReplaceDir(srcDir, destDir, oldName, newName, businessModu
364107
365696
  isIdlProject
364108
365697
  );
364109
365698
  } else {
364110
- if (!fs84.existsSync(partPath)) {
364111
- fs84.mkdirSync(partPath, { recursive: true });
365699
+ if (!fs83.existsSync(partPath)) {
365700
+ fs83.mkdirSync(partPath, { recursive: true });
364112
365701
  }
364113
365702
  }
364114
365703
  }
@@ -364124,8 +365713,8 @@ async function copyAndReplaceDir(srcDir, destDir, oldName, newName, businessModu
364124
365713
  destItemName = item.replace(/sns-demo/g, newName);
364125
365714
  }
364126
365715
  }
364127
- const destPath = path92.join(destDir, destItemName);
364128
- const stats = fs84.statSync(srcPath);
365716
+ const destPath = path91.join(destDir, destItemName);
365717
+ const stats = fs83.statSync(srcPath);
364129
365718
  if (stats.isDirectory()) {
364130
365719
  await copyAndReplaceDir(
364131
365720
  srcPath,
@@ -364150,7 +365739,7 @@ async function copyAndReplaceDir(srcDir, destDir, oldName, newName, businessModu
364150
365739
  __name(copyAndReplaceDir, "copyAndReplaceDir");
364151
365740
  async function createJavaProject(context2, projectName, businessModule) {
364152
365741
  const templatePath = getTemplatePath();
364153
- if (!fs84.existsSync(templatePath)) {
365742
+ if (!fs83.existsSync(templatePath)) {
364154
365743
  context2.ui.addItem(
364155
365744
  {
364156
365745
  type: "error" /* ERROR */,
@@ -364161,8 +365750,8 @@ async function createJavaProject(context2, projectName, businessModule) {
364161
365750
  );
364162
365751
  return;
364163
365752
  }
364164
- const targetPath = path92.join(process.cwd(), projectName);
364165
- if (fs84.existsSync(targetPath)) {
365753
+ const targetPath = path91.join(process.cwd(), projectName);
365754
+ if (fs83.existsSync(targetPath)) {
364166
365755
  context2.ui.addItem(
364167
365756
  {
364168
365757
  type: "error" /* ERROR */,
@@ -364211,9 +365800,9 @@ ${projectName}/
364211
365800
  Date.now()
364212
365801
  );
364213
365802
  } catch (error2) {
364214
- if (fs84.existsSync(targetPath)) {
365803
+ if (fs83.existsSync(targetPath)) {
364215
365804
  try {
364216
- fs84.rmSync(targetPath, { recursive: true, force: true });
365805
+ fs83.rmSync(targetPath, { recursive: true, force: true });
364217
365806
  } catch (cleanupError) {
364218
365807
  console.warn(
364219
365808
  "Warning: Could not clean up failed project creation:",
@@ -364299,7 +365888,7 @@ var javaFlsCommand = {
364299
365888
  };
364300
365889
  async function createIdlProject(context2, projectName) {
364301
365890
  const templatePath = getIdlExamplePath();
364302
- if (!fs84.existsSync(templatePath)) {
365891
+ if (!fs83.existsSync(templatePath)) {
364303
365892
  context2.ui.addItem(
364304
365893
  {
364305
365894
  type: "error" /* ERROR */,
@@ -364311,8 +365900,8 @@ async function createIdlProject(context2, projectName) {
364311
365900
  return;
364312
365901
  }
364313
365902
  const projectDirectoryName = projectName;
364314
- const targetPath = path92.join(process.cwd(), projectDirectoryName);
364315
- if (fs84.existsSync(targetPath)) {
365903
+ const targetPath = path91.join(process.cwd(), projectDirectoryName);
365904
+ if (fs83.existsSync(targetPath)) {
364316
365905
  context2.ui.addItem(
364317
365906
  {
364318
365907
  type: "error" /* ERROR */,
@@ -364387,9 +365976,9 @@ ${projectDirectoryName}/
364387
365976
  Date.now()
364388
365977
  );
364389
365978
  } catch (error2) {
364390
- if (fs84.existsSync(targetPath)) {
365979
+ if (fs83.existsSync(targetPath)) {
364391
365980
  try {
364392
- fs84.rmSync(targetPath, { recursive: true, force: true });
365981
+ fs83.rmSync(targetPath, { recursive: true, force: true });
364393
365982
  } catch (cleanupError) {
364394
365983
  console.warn(
364395
365984
  "Warning: Could not clean up failed project creation:",
@@ -364581,8 +366170,8 @@ var docsCommand = {
364581
366170
  init_esbuild_shims();
364582
366171
  init_core5();
364583
366172
  import * as os34 from "node:os";
364584
- import * as path93 from "node:path";
364585
- import * as fs85 from "node:fs/promises";
366173
+ import * as path92 from "node:path";
366174
+ import * as fs84 from "node:fs/promises";
364586
366175
  function expandHomeDir(p2) {
364587
366176
  if (!p2) {
364588
366177
  return "";
@@ -364593,7 +366182,7 @@ function expandHomeDir(p2) {
364593
366182
  } else if (p2 === "~" || p2.startsWith("~/")) {
364594
366183
  expandedPath = os34.homedir() + p2.substring(1);
364595
366184
  }
364596
- return path93.normalize(expandedPath);
366185
+ return path92.normalize(expandedPath);
364597
366186
  }
364598
366187
  __name(expandHomeDir, "expandHomeDir");
364599
366188
  var directoryCommand = {
@@ -364898,25 +366487,25 @@ async function resolveCompletionPaths(partialPath, baseDir) {
364898
366487
  resolvedPath = baseDir;
364899
366488
  displayPrefix = "";
364900
366489
  } else if (partialPath.startsWith("~")) {
364901
- resolvedPath = path93.join(os34.homedir(), partialPath.slice(1));
366490
+ resolvedPath = path92.join(os34.homedir(), partialPath.slice(1));
364902
366491
  } else {
364903
- resolvedPath = path93.isAbsolute(partialPath) ? path93.resolve(partialPath || "/") : path93.resolve(baseDir, partialPath || ".");
366492
+ resolvedPath = path92.isAbsolute(partialPath) ? path92.resolve(partialPath || "/") : path92.resolve(baseDir, partialPath || ".");
364904
366493
  }
364905
366494
  let targetDir = resolvedPath;
364906
366495
  let filterPrefix = "";
364907
366496
  if (partialPath && !partialPath.endsWith("/") && !/^\.\/?$/.test(partialPath)) {
364908
- targetDir = path93.dirname(resolvedPath);
364909
- filterPrefix = path93.basename(resolvedPath);
366497
+ targetDir = path92.dirname(resolvedPath);
366498
+ filterPrefix = path92.basename(resolvedPath);
364910
366499
  }
364911
- const entries = await fs85.readdir(targetDir, { withFileTypes: true });
366500
+ const entries = await fs84.readdir(targetDir, { withFileTypes: true });
364912
366501
  return entries.filter((entry) => entry.isDirectory()).filter((entry) => !filterPrefix || entry.name.startsWith(filterPrefix)).map((entry) => {
364913
366502
  let completionPath;
364914
366503
  if (partialPath.endsWith("/")) {
364915
- completionPath = path93.posix.join(displayPrefix, entry.name) + "/";
366504
+ completionPath = path92.posix.join(displayPrefix, entry.name) + "/";
364916
366505
  } else {
364917
- const prefixDir = displayPrefix.includes("/") ? path93.posix.dirname(displayPrefix) : "";
366506
+ const prefixDir = displayPrefix.includes("/") ? path92.posix.dirname(displayPrefix) : "";
364918
366507
  if (prefixDir && prefixDir !== ".") {
364919
- completionPath = path93.posix.join(prefixDir, entry.name) + "/";
366508
+ completionPath = path92.posix.join(prefixDir, entry.name) + "/";
364920
366509
  } else {
364921
366510
  completionPath = entry.name + "/";
364922
366511
  if (displayPrefix && displayPrefix !== "." && !displayPrefix.includes("/")) {
@@ -365546,7 +367135,7 @@ var helpCommand = {
365546
367135
  init_esbuild_shims();
365547
367136
  init_core5();
365548
367137
  init_core5();
365549
- import path94 from "node:path";
367138
+ import path93 from "node:path";
365550
367139
  init_settings();
365551
367140
  function getIdeStatusMessage(ideClient) {
365552
367141
  const connection = ideClient.getConnectionStatus();
@@ -365577,13 +367166,13 @@ __name(getIdeStatusMessage, "getIdeStatusMessage");
365577
367166
  function formatFileList(openFiles) {
365578
367167
  const basenameCounts = /* @__PURE__ */ new Map();
365579
367168
  for (const file of openFiles) {
365580
- const basename26 = path94.basename(file.path);
367169
+ const basename26 = path93.basename(file.path);
365581
367170
  basenameCounts.set(basename26, (basenameCounts.get(basename26) || 0) + 1);
365582
367171
  }
365583
367172
  const fileList = openFiles.map((file) => {
365584
- const basename26 = path94.basename(file.path);
367173
+ const basename26 = path93.basename(file.path);
365585
367174
  const isDuplicate = (basenameCounts.get(basename26) || 0) > 1;
365586
- const parentDir = path94.basename(path94.dirname(file.path));
367175
+ const parentDir = path93.basename(path93.dirname(file.path));
365587
367176
  const displayName = isDuplicate ? `${basename26} (/${parentDir})` : basename26;
365588
367177
  return ` - ${displayName}${file.isActive ? " (active)" : ""}`;
365589
367178
  }).join("\n");
@@ -366575,8 +368164,8 @@ var importCommand = {
366575
368164
  // packages/cli/src/ui/commands/initCommand.ts
366576
368165
  init_esbuild_shims();
366577
368166
  init_core5();
366578
- import * as fs86 from "node:fs";
366579
- import * as path95 from "node:path";
368167
+ import * as fs85 from "node:fs";
368168
+ import * as path94 from "node:path";
366580
368169
  var import_react27 = __toESM(require_react(), 1);
366581
368170
  var initCommand = {
366582
368171
  name: "init",
@@ -366594,11 +368183,11 @@ var initCommand = {
366594
368183
  }
366595
368184
  const targetDir = context2.services.config.getTargetDir();
366596
368185
  const contextFileName = getCurrentGeminiMdFilename();
366597
- const contextFilePath = path95.join(targetDir, contextFileName);
368186
+ const contextFilePath = path94.join(targetDir, contextFileName);
366598
368187
  try {
366599
- if (fs86.existsSync(contextFilePath)) {
368188
+ if (fs85.existsSync(contextFilePath)) {
366600
368189
  try {
366601
- const existing = fs86.readFileSync(contextFilePath, "utf8");
368190
+ const existing = fs85.readFileSync(contextFilePath, "utf8");
366602
368191
  if (existing && existing.trim().length > 0) {
366603
368192
  if (!context2.overwriteConfirmed) {
366604
368193
  return {
@@ -366620,7 +368209,7 @@ var initCommand = {
366620
368209
  }
366621
368210
  }
366622
368211
  try {
366623
- fs86.writeFileSync(contextFilePath, "", "utf8");
368212
+ fs85.writeFileSync(contextFilePath, "", "utf8");
366624
368213
  context2.ui.addItem(
366625
368214
  {
366626
368215
  type: "info",
@@ -366686,6 +368275,123 @@ Write the complete content to the \`${contextFileName}\` file. The output must b
366686
368275
  // packages/cli/src/ui/commands/languageCommand.ts
366687
368276
  init_esbuild_shims();
366688
368277
  init_settings();
368278
+ init_languages();
368279
+
368280
+ // packages/cli/src/utils/languageUtils.ts
368281
+ init_esbuild_shims();
368282
+ init_core5();
368283
+ import * as fs86 from "node:fs";
368284
+ import * as path95 from "node:path";
368285
+ var LLM_OUTPUT_LANGUAGE_RULE_FILENAME = "output-language.md";
368286
+ var LLM_OUTPUT_LANGUAGE_MARKER_PREFIX = "rdmind:llm-output-language:";
368287
+ var OUTPUT_LANGUAGE_AUTO = "auto";
368288
+ function isAutoLanguage(value) {
368289
+ return !value || value.toLowerCase() === OUTPUT_LANGUAGE_AUTO;
368290
+ }
368291
+ __name(isAutoLanguage, "isAutoLanguage");
368292
+ function normalizeOutputLanguage(language) {
368293
+ const lowered = language.toLowerCase();
368294
+ const fullName = getLanguageNameFromLocale(lowered);
368295
+ if (fullName !== "English" || lowered === "en") {
368296
+ return fullName;
368297
+ }
368298
+ return language;
368299
+ }
368300
+ __name(normalizeOutputLanguage, "normalizeOutputLanguage");
368301
+ function resolveOutputLanguage(value) {
368302
+ if (isAutoLanguage(value)) {
368303
+ const detectedLocale = detectSystemLanguage();
368304
+ return getLanguageNameFromLocale(detectedLocale);
368305
+ }
368306
+ return normalizeOutputLanguage(value);
368307
+ }
368308
+ __name(resolveOutputLanguage, "resolveOutputLanguage");
368309
+ function getOutputLanguageFilePath() {
368310
+ return path95.join(
368311
+ Storage.getGlobalQwenDir(),
368312
+ LLM_OUTPUT_LANGUAGE_RULE_FILENAME
368313
+ );
368314
+ }
368315
+ __name(getOutputLanguageFilePath, "getOutputLanguageFilePath");
368316
+ function sanitizeForMarker(language) {
368317
+ return language.replace(/[\r\n]/g, " ").replace(/--!?>/g, "").replace(/--/g, "");
368318
+ }
368319
+ __name(sanitizeForMarker, "sanitizeForMarker");
368320
+ function generateOutputLanguageFileContent(language) {
368321
+ const safeLanguage = sanitizeForMarker(language);
368322
+ return `# Output language preference: ${language}
368323
+ <!-- ${LLM_OUTPUT_LANGUAGE_MARKER_PREFIX} ${safeLanguage} -->
368324
+
368325
+ ## Goal
368326
+ Prefer responding in **${language}** for normal assistant messages and explanations.
368327
+
368328
+ ## Keep technical artifacts unchanged
368329
+ Do **not** translate or rewrite:
368330
+ - Code blocks, CLI commands, file paths, stack traces, logs, JSON keys, identifiers
368331
+ - Exact quoted text from the user (keep quotes verbatim)
368332
+
368333
+ ## When a conflict exists
368334
+ If higher-priority instructions (system/developer) require a different behavior, follow them.
368335
+
368336
+ ## Tool / system outputs
368337
+ Raw tool/system outputs may contain fixed-format English. Preserve them verbatim, and if needed, add a short **${language}** explanation below.
368338
+ `;
368339
+ }
368340
+ __name(generateOutputLanguageFileContent, "generateOutputLanguageFileContent");
368341
+ function parseOutputLanguageFromContent(content) {
368342
+ const markerRegex = new RegExp(
368343
+ String.raw`<!--\s*${LLM_OUTPUT_LANGUAGE_MARKER_PREFIX}\s*(.*?)\s*-->`,
368344
+ "i"
368345
+ );
368346
+ const markerMatch = content.match(markerRegex);
368347
+ if (markerMatch?.[1]?.trim()) {
368348
+ return markerMatch[1].trim();
368349
+ }
368350
+ const headingMatch = content.match(
368351
+ /^#.*?CRITICAL:\s*(.*?)\s+Output Language Rule\b/im
368352
+ );
368353
+ if (headingMatch?.[1]?.trim()) {
368354
+ return headingMatch[1].trim();
368355
+ }
368356
+ return null;
368357
+ }
368358
+ __name(parseOutputLanguageFromContent, "parseOutputLanguageFromContent");
368359
+ function readOutputLanguageFromFile() {
368360
+ const filePath = getOutputLanguageFilePath();
368361
+ if (!fs86.existsSync(filePath)) {
368362
+ return null;
368363
+ }
368364
+ try {
368365
+ const content = fs86.readFileSync(filePath, "utf-8");
368366
+ return parseOutputLanguageFromContent(content);
368367
+ } catch {
368368
+ return null;
368369
+ }
368370
+ }
368371
+ __name(readOutputLanguageFromFile, "readOutputLanguageFromFile");
368372
+ function writeOutputLanguageFile(language) {
368373
+ const filePath = getOutputLanguageFilePath();
368374
+ const content = generateOutputLanguageFileContent(language);
368375
+ const dir = path95.dirname(filePath);
368376
+ fs86.mkdirSync(dir, { recursive: true });
368377
+ fs86.writeFileSync(filePath, content, "utf-8");
368378
+ }
368379
+ __name(writeOutputLanguageFile, "writeOutputLanguageFile");
368380
+ function updateOutputLanguageFile(settingValue) {
368381
+ const resolved = resolveOutputLanguage(settingValue);
368382
+ writeOutputLanguageFile(resolved);
368383
+ }
368384
+ __name(updateOutputLanguageFile, "updateOutputLanguageFile");
368385
+ function initializeLlmOutputLanguage(outputLanguage) {
368386
+ const resolved = resolveOutputLanguage(outputLanguage);
368387
+ const currentFileLanguage = readOutputLanguageFromFile();
368388
+ if (currentFileLanguage !== resolved) {
368389
+ writeOutputLanguageFile(resolved);
368390
+ }
368391
+ }
368392
+ __name(initializeLlmOutputLanguage, "initializeLlmOutputLanguage");
368393
+
368394
+ // packages/cli/src/ui/commands/languageCommand.ts
366689
368395
  function getCurrentOutputLanguage(context2) {
366690
368396
  const settingValue = context2?.services?.settings?.merged?.general?.outputLanguage || OUTPUT_LANGUAGE_AUTO;
366691
368397
  const resolved = resolveOutputLanguage(settingValue);
@@ -366705,7 +368411,8 @@ function parseUiLanguageArg(input) {
366705
368411
  __name(parseUiLanguageArg, "parseUiLanguageArg");
366706
368412
  function formatUiLanguageDisplay(lang) {
366707
368413
  const option2 = SUPPORTED_LANGUAGES.find((o3) => o3.code === lang);
366708
- return option2 ? `${option2.fullName}\uFF08${option2.id}\uFF09` : lang;
368414
+ if (!option2) return lang;
368415
+ return option2.nativeName && option2.nativeName !== option2.fullName ? `${option2.nativeName} (${option2.fullName}) [${option2.id}]` : `${option2.fullName} [${option2.id}]`;
366709
368416
  }
366710
368417
  __name(formatUiLanguageDisplay, "formatUiLanguageDisplay");
366711
368418
  async function setUiLanguage(context2, lang) {
@@ -366815,7 +368522,7 @@ var languageCommand = {
366815
368522
  messageType: "error",
366816
368523
  content: [
366817
368524
  t4("Invalid command. Available subcommands:"),
366818
- ` - /language ui [${SUPPORTED_LANGUAGES.map((o3) => o3.id).join("|")}] - ${t4("Set UI language")}`,
368525
+ ` - /language ui [${getSupportedLanguageIds()}] - ${t4("Set UI language")}`,
366819
368526
  ` - /language output <language> - ${t4("Set LLM output language")}`
366820
368527
  ].join("\n")
366821
368528
  };
@@ -366833,7 +368540,7 @@ var languageCommand = {
366833
368540
  t4("Current LLM output language: {{lang}}", { lang: outputLangDisplay }),
366834
368541
  "",
366835
368542
  t4("Available subcommands:"),
366836
- ` /language ui [${SUPPORTED_LANGUAGES.map((o3) => o3.id).join("|")}] - ${t4("Set UI language")}`,
368543
+ ` /language ui [${getSupportedLanguageIds()}] - ${t4("Set UI language")}`,
366837
368544
  ` /language output <language> - ${t4("Set LLM output language")}`
366838
368545
  ].join("\n")
366839
368546
  };
@@ -366856,12 +368563,12 @@ var languageCommand = {
366856
368563
  t4("Set UI language"),
366857
368564
  "",
366858
368565
  t4("Usage: /language ui [{{options}}]", {
366859
- options: SUPPORTED_LANGUAGES.map((o3) => o3.id).join("|")
368566
+ options: getSupportedLanguageIds()
366860
368567
  }),
366861
368568
  "",
366862
368569
  t4("Available options:"),
366863
368570
  ...SUPPORTED_LANGUAGES.map(
366864
- (o3) => ` - ${o3.id}: ${t4(o3.fullName)}`
368571
+ (o3) => ` - ${o3.id}: ${o3.nativeName || o3.fullName}`
366865
368572
  ),
366866
368573
  "",
366867
368574
  t4(
@@ -366876,7 +368583,7 @@ var languageCommand = {
366876
368583
  type: "message",
366877
368584
  messageType: "error",
366878
368585
  content: t4("Invalid language. Available: {{options}}", {
366879
- options: SUPPORTED_LANGUAGES.map((o3) => o3.id).join(",")
368586
+ options: getSupportedLanguageIds(",")
366880
368587
  })
366881
368588
  };
366882
368589
  }
@@ -366887,7 +368594,9 @@ var languageCommand = {
366887
368594
  (lang) => ({
366888
368595
  name: lang.id,
366889
368596
  get description() {
366890
- return t4("Set UI language to {{name}}", { name: lang.fullName });
368597
+ return t4("Set UI language to {{name}}", {
368598
+ name: lang.nativeName || lang.fullName
368599
+ });
366891
368600
  },
366892
368601
  kind: "built-in" /* BUILT_IN */,
366893
368602
  action: /* @__PURE__ */ __name(async (context2, args) => {
@@ -399686,7 +401395,8 @@ var startupTips = [
399686
401395
  "You can switch permission mode quickly with Shift+Tab or /approval-mode.",
399687
401396
  "RDMind now supports custom commands, sub-agents, skills and other features. Check the documentation for usage help.",
399688
401397
  "Try asking RDMind to help you commit code.",
399689
- "RDMind can read REDoc. Please do not upload documents involving user privacy and core algorithms."
401398
+ "RDMind can read REDoc. Please do not upload documents involving user privacy and core algorithms.",
401399
+ "If you find RDMind useful, feel free to recommend it to your colleagues~"
399690
401400
  ];
399691
401401
  var Tips = /* @__PURE__ */ __name(() => {
399692
401402
  const selectedTip = (0, import_react69.useMemo)(() => {
@@ -402964,6 +404674,13 @@ var XHS_SSO_MODELS = [
402964
404674
  baseUrl: "https://runway.devops.xiaohongshu.com/openai/zhipu/paas/v4/",
402965
404675
  contextWindow: "200K",
402966
404676
  description: "\u667A\u8C31\u6700\u65B0\u65D7\u8230\u6A21\u578B\uFF0C\u9762\u5411 Agentic Coding \u573A\u666F\u5F3A\u5316"
404677
+ },
404678
+ {
404679
+ id: "kimi-k2.5",
404680
+ displayName: "kimi-k2.5",
404681
+ baseUrl: "https://runway.devops.xiaohongshu.com/openai/moonshot/v1",
404682
+ contextWindow: "256K",
404683
+ description: "\u5728 Agent\u3001\u4EE3\u7801\u3001\u89C6\u89C9\u7406\u89E3\u53CA\u4E00\u7CFB\u5217\u901A\u7528\u667A\u80FD\u4EFB\u52A1\u4E0A\u53D6\u5F97\u5F00\u6E90 SoTA \u8868\u73B0"
402967
404684
  }
402968
404685
  ];
402969
404686
 
@@ -416312,7 +418029,9 @@ var WebSocketClient = class {
416312
418029
  type: "server_heart_pong"
416313
418030
  });
416314
418031
  if (this.ws && this.ws.readyState === wrapper_default.OPEN) {
416315
- console.log(`[ws-send:server_heart_pong] ${serverHeartPong}`);
418032
+ if (this.options.debug) {
418033
+ console.debug(`[ws-send:server_heart_pong] ${serverHeartPong}`);
418034
+ }
416316
418035
  this.ws.send(serverHeartPong);
416317
418036
  }
416318
418037
  } catch (err) {
@@ -416465,7 +418184,9 @@ var WebSocketClient = class {
416465
418184
  if (!this.ws || this.ws.readyState !== wrapper_default.OPEN) return;
416466
418185
  try {
416467
418186
  const heartbeatMsg = JSON.stringify({ type: "client_heart_ping" });
416468
- console.log(`[ws-send:client_heart_ping] ${heartbeatMsg}`);
418187
+ if (this.options.debug) {
418188
+ console.debug(`[ws-send:client_heart_ping] ${heartbeatMsg}`);
418189
+ }
416469
418190
  this.ws.send(heartbeatMsg);
416470
418191
  this.armHeartbeatTimeout();
416471
418192
  } catch (err) {
@@ -416995,7 +418716,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
416995
418716
  setAuthState("updating" /* Updating */);
416996
418717
  }, [onAuthError, cancelAuthentication, setAuthState]);
416997
418718
  (0, import_react135.useEffect)(() => {
416998
- const currentAuthType = config2.modelsConfig.getCurrentAuthType();
418719
+ const currentAuthType = config2.getModelsConfig().getCurrentAuthType();
416999
418720
  if (settings.merged.security?.auth?.enforcedType && currentAuthType && settings.merged.security?.auth.enforcedType !== currentAuthType) {
417000
418721
  onAuthError(
417001
418722
  t4(
@@ -418971,7 +420692,7 @@ init_core5();
418971
420692
  init_settings();
418972
420693
  async function validateNonInteractiveAuth(useExternalAuth, nonInteractiveConfig, settings) {
418973
420694
  try {
418974
- const authType = nonInteractiveConfig.modelsConfig.getCurrentAuthType();
420695
+ const authType = nonInteractiveConfig.getModelsConfig().getCurrentAuthType();
418975
420696
  if (!authType) {
418976
420697
  throw new Error(
418977
420698
  "No auth type is selected. Please configure an auth type (e.g. via settings or `--auth-type`) before running in non-interactive mode."
@@ -419318,7 +421039,9 @@ var usageSchema = external_exports.object({
419318
421039
  var sessionUpdateMetaSchema = external_exports.object({
419319
421040
  usage: usageSchema.optional().nullable(),
419320
421041
  durationMs: external_exports.number().optional().nullable(),
419321
- toolName: external_exports.string().optional().nullable()
421042
+ toolName: external_exports.string().optional().nullable(),
421043
+ parentToolCallId: external_exports.string().optional().nullable(),
421044
+ subagentType: external_exports.string().optional().nullable()
419322
421045
  });
419323
421046
  var requestPermissionResponseSchema = external_exports.object({
419324
421047
  outcome: requestPermissionOutcomeSchema
@@ -420004,7 +421727,7 @@ var MessageEmitter = class extends BaseEmitter {
420004
421727
  /**
420005
421728
  * Emits usage metadata.
420006
421729
  */
420007
- async emitUsageMetadata(usageMetadata, text = "", durationMs) {
421730
+ async emitUsageMetadata(usageMetadata, text = "", durationMs, subagentMeta) {
420008
421731
  const usage2 = {
420009
421732
  promptTokens: usageMetadata.promptTokenCount,
420010
421733
  completionTokens: usageMetadata.candidatesTokenCount,
@@ -420012,7 +421735,7 @@ var MessageEmitter = class extends BaseEmitter {
420012
421735
  totalTokens: usageMetadata.totalTokenCount,
420013
421736
  cachedTokens: usageMetadata.cachedContentTokenCount
420014
421737
  };
420015
- const meta = typeof durationMs === "number" ? { usage: usage2, durationMs } : { usage: usage2 };
421738
+ const meta = typeof durationMs === "number" ? { usage: usage2, durationMs, ...subagentMeta } : { usage: usage2, ...subagentMeta };
420016
421739
  await this.sendUpdate({
420017
421740
  sessionUpdate: "agent_message_chunk",
420018
421741
  content: { type: "text", text },
@@ -420139,7 +421862,10 @@ var ToolCallEmitter = class extends BaseEmitter {
420139
421862
  locations,
420140
421863
  kind: kind2,
420141
421864
  rawInput: params.args ?? {},
420142
- _meta: { toolName: params.toolName }
421865
+ _meta: {
421866
+ toolName: params.toolName,
421867
+ ...params.subagentMeta
421868
+ }
420143
421869
  });
420144
421870
  return true;
420145
421871
  }
@@ -420181,7 +421907,10 @@ var ToolCallEmitter = class extends BaseEmitter {
420181
421907
  toolCallId: params.callId,
420182
421908
  status: params.success ? "completed" : "failed",
420183
421909
  content: contentArray,
420184
- _meta: { toolName: params.toolName }
421910
+ _meta: {
421911
+ toolName: params.toolName,
421912
+ ...params.subagentMeta
421913
+ }
420185
421914
  };
420186
421915
  if (params.resultDisplay !== void 0) {
420187
421916
  update2["rawOutput"] = params.resultDisplay;
@@ -420193,9 +421922,11 @@ var ToolCallEmitter = class extends BaseEmitter {
420193
421922
  * Use this for explicit error handling when not using emitResult.
420194
421923
  *
420195
421924
  * @param callId - The tool call ID
421925
+ * @param toolName - The tool name
420196
421926
  * @param error - The error that occurred
421927
+ * @param subagentMeta - Optional subagent metadata
420197
421928
  */
420198
- async emitError(callId, toolName, error2) {
421929
+ async emitError(callId, toolName, error2, subagentMeta) {
420199
421930
  await this.sendUpdate({
420200
421931
  sessionUpdate: "tool_call_update",
420201
421932
  toolCallId: callId,
@@ -420203,7 +421934,10 @@ var ToolCallEmitter = class extends BaseEmitter {
420203
421934
  content: [
420204
421935
  { type: "content", content: { type: "text", text: error2.message } }
420205
421936
  ],
420206
- _meta: { toolName }
421937
+ _meta: {
421938
+ toolName,
421939
+ ...subagentMeta
421940
+ }
420207
421941
  });
420208
421942
  }
420209
421943
  // ==================== Public Utilities ====================
@@ -420481,9 +422215,11 @@ var basicPermissionOptions = [
420481
422215
  }
420482
422216
  ];
420483
422217
  var SubAgentTracker = class {
420484
- constructor(ctx, client) {
422218
+ constructor(ctx, client, parentToolCallId, subagentType) {
420485
422219
  this.ctx = ctx;
420486
422220
  this.client = client;
422221
+ this.parentToolCallId = parentToolCallId;
422222
+ this.subagentType = subagentType;
420487
422223
  this.toolCallEmitter = new ToolCallEmitter(ctx);
420488
422224
  this.messageEmitter = new MessageEmitter(ctx);
420489
422225
  }
@@ -420493,6 +422229,15 @@ var SubAgentTracker = class {
420493
422229
  toolCallEmitter;
420494
422230
  messageEmitter;
420495
422231
  toolStates = /* @__PURE__ */ new Map();
422232
+ /**
422233
+ * Gets the subagent metadata to attach to all events.
422234
+ */
422235
+ getSubagentMeta() {
422236
+ return {
422237
+ parentToolCallId: this.parentToolCallId,
422238
+ subagentType: this.subagentType
422239
+ };
422240
+ }
420496
422241
  /**
420497
422242
  * Sets up event listeners for a sub-agent's tool events.
420498
422243
  *
@@ -420505,16 +422250,19 @@ var SubAgentTracker = class {
420505
422250
  const onToolResult = this.createToolResultHandler(abortSignal);
420506
422251
  const onApproval = this.createApprovalHandler(abortSignal);
420507
422252
  const onUsageMetadata = this.createUsageMetadataHandler(abortSignal);
422253
+ const onStreamText = this.createStreamTextHandler(abortSignal);
420508
422254
  eventEmitter.on("tool_call" /* TOOL_CALL */, onToolCall);
420509
422255
  eventEmitter.on("tool_result" /* TOOL_RESULT */, onToolResult);
420510
422256
  eventEmitter.on("tool_waiting_approval" /* TOOL_WAITING_APPROVAL */, onApproval);
420511
422257
  eventEmitter.on("usage_metadata" /* USAGE_METADATA */, onUsageMetadata);
422258
+ eventEmitter.on("stream_text" /* STREAM_TEXT */, onStreamText);
420512
422259
  return [
420513
422260
  () => {
420514
422261
  eventEmitter.off("tool_call" /* TOOL_CALL */, onToolCall);
420515
422262
  eventEmitter.off("tool_result" /* TOOL_RESULT */, onToolResult);
420516
422263
  eventEmitter.off("tool_waiting_approval" /* TOOL_WAITING_APPROVAL */, onApproval);
420517
422264
  eventEmitter.off("usage_metadata" /* USAGE_METADATA */, onUsageMetadata);
422265
+ eventEmitter.off("stream_text" /* STREAM_TEXT */, onStreamText);
420518
422266
  this.toolStates.clear();
420519
422267
  }
420520
422268
  ];
@@ -420544,7 +422292,8 @@ var SubAgentTracker = class {
420544
422292
  void this.toolCallEmitter.emitStart({
420545
422293
  toolName: event.name,
420546
422294
  callId: event.callId,
420547
- args: event.args
422295
+ args: event.args,
422296
+ subagentMeta: this.getSubagentMeta()
420548
422297
  });
420549
422298
  };
420550
422299
  }
@@ -420562,7 +422311,8 @@ var SubAgentTracker = class {
420562
422311
  success: event.success,
420563
422312
  message: event.responseParts ?? [],
420564
422313
  resultDisplay: event.resultDisplay,
420565
- args: state?.args
422314
+ args: state?.args,
422315
+ subagentMeta: this.getSubagentMeta()
420566
422316
  });
420567
422317
  this.toolStates.delete(event.callId);
420568
422318
  };
@@ -420624,7 +422374,27 @@ var SubAgentTracker = class {
420624
422374
  return (...args) => {
420625
422375
  const event = args[0];
420626
422376
  if (abortSignal.aborted) return;
420627
- this.messageEmitter.emitUsageMetadata(event.usage, "", event.durationMs);
422377
+ this.messageEmitter.emitUsageMetadata(
422378
+ event.usage,
422379
+ "",
422380
+ event.durationMs,
422381
+ this.getSubagentMeta()
422382
+ );
422383
+ };
422384
+ }
422385
+ /**
422386
+ * Creates a handler for stream text events.
422387
+ * Emits agent message or thought chunks for text content from subagent model responses.
422388
+ */
422389
+ createStreamTextHandler(abortSignal) {
422390
+ return (...args) => {
422391
+ const event = args[0];
422392
+ if (abortSignal.aborted) return;
422393
+ void this.messageEmitter.emitMessage(
422394
+ event.text,
422395
+ "assistant",
422396
+ event.thought ?? false
422397
+ );
420628
422398
  };
420629
422399
  }
420630
422400
  /**
@@ -420982,7 +422752,14 @@ var Session3 = class {
420982
422752
  const invocation = tool.build(args);
420983
422753
  if (isTaskTool && "eventEmitter" in invocation) {
420984
422754
  const taskEventEmitter = invocation.eventEmitter;
420985
- const subAgentTracker = new SubAgentTracker(this, this.client);
422755
+ const parentToolCallId = callId;
422756
+ const subagentType = args["subagent_type"] ?? "";
422757
+ const subAgentTracker = new SubAgentTracker(
422758
+ this,
422759
+ this.client,
422760
+ parentToolCallId,
422761
+ subagentType
422762
+ );
420986
422763
  subAgentCleanupFunctions = subAgentTracker.setup(
420987
422764
  taskEventEmitter,
420988
422765
  abortSignal
@@ -421534,7 +423311,7 @@ var GeminiAgent = class {
421534
423311
  name: APPROVAL_MODE_INFO[mode].name,
421535
423312
  description: APPROVAL_MODE_INFO[mode].description
421536
423313
  }));
421537
- const version2 = "0.2.2-alpha.4";
423314
+ const version2 = "0.2.2";
421538
423315
  return {
421539
423316
  protocolVersion: PROTOCOL_VERSION,
421540
423317
  agentInfo: {
@@ -421693,7 +423470,7 @@ var GeminiAgent = class {
421693
423470
  return session.setModel(params);
421694
423471
  }
421695
423472
  async ensureAuthenticated(config2) {
421696
- const selectedType = this.settings.merged.security?.auth?.selectedType;
423473
+ const selectedType = config2.getModelsConfig().getCurrentAuthType();
421697
423474
  if (!selectedType) {
421698
423475
  throw RequestError.authRequired(
421699
423476
  "Use RDMind CLI to authenticate first."
@@ -421911,7 +423688,7 @@ async function main() {
421911
423688
  );
421912
423689
  if (!settings.merged.security?.auth?.useExternal) {
421913
423690
  try {
421914
- const authType = partialConfig.modelsConfig.getCurrentAuthType();
423691
+ const authType = partialConfig.getModelsConfig().getCurrentAuthType();
421915
423692
  if (authType) {
421916
423693
  const err = validateAuthMethod(authType, partialConfig);
421917
423694
  if (err) {
@@ -421962,6 +423739,7 @@ ${finalArgs[promptIndex + 1]}`;
421962
423739
  }
421963
423740
  argv = { ...argv, resume: selectedSessionId };
421964
423741
  }
423742
+ initializeLlmOutputLanguage(settings.merged.general?.outputLanguage);
421965
423743
  {
421966
423744
  const config2 = await loadCliConfig(
421967
423745
  settings.merged,