@qwen-code/qwen-code 0.10.0-preview.4 → 0.10.0-preview.6

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
@@ -71639,6 +71639,17 @@ var init_tools = __esm({
71639
71639
  });
71640
71640
 
71641
71641
  // packages/core/dist/src/tools/mcp-tool.js
71642
+ function wrapMcpCallToolResultAsParts(toolName, result) {
71643
+ const response = result.isError ? { error: result, content: result.content } : result;
71644
+ return [
71645
+ {
71646
+ functionResponse: {
71647
+ name: toolName,
71648
+ response
71649
+ }
71650
+ }
71651
+ ];
71652
+ }
71642
71653
  function transformTextBlock(block2) {
71643
71654
  return { text: block2.text };
71644
71655
  }
@@ -71756,8 +71767,10 @@ var init_mcp_tool = __esm({
71756
71767
  displayName;
71757
71768
  trust;
71758
71769
  cliConfig;
71770
+ mcpClient;
71771
+ mcpTimeout;
71759
71772
  static allowlist = /* @__PURE__ */ new Set();
71760
- constructor(mcpTool, serverName, serverToolName, displayName, trust, params = {}, cliConfig) {
71773
+ constructor(mcpTool, serverName, serverToolName, displayName, trust, params = {}, cliConfig, mcpClient, mcpTimeout) {
71761
71774
  super(params);
71762
71775
  this.mcpTool = mcpTool;
71763
71776
  this.serverName = serverName;
@@ -71765,6 +71778,8 @@ var init_mcp_tool = __esm({
71765
71778
  this.displayName = displayName;
71766
71779
  this.trust = trust;
71767
71780
  this.cliConfig = cliConfig;
71781
+ this.mcpClient = mcpClient;
71782
+ this.mcpTimeout = mcpTimeout;
71768
71783
  }
71769
71784
  async shouldConfirmExecute(_abortSignal) {
71770
71785
  const serverAllowListKey = this.serverName;
@@ -71808,7 +71823,63 @@ var init_mcp_tool = __esm({
71808
71823
  }
71809
71824
  return false;
71810
71825
  }
71811
- async execute(signal) {
71826
+ async execute(signal, updateOutput2) {
71827
+ if (this.mcpClient) {
71828
+ return this.executeWithDirectClient(signal, updateOutput2);
71829
+ }
71830
+ return this.executeWithCallableTool(signal);
71831
+ }
71832
+ /**
71833
+ * Execute using the raw MCP SDK Client, which supports progress
71834
+ * notifications via the onprogress callback. This enables real-time
71835
+ * streaming of progress updates to the user during long-running
71836
+ * MCP tool calls (e.g., browser automation).
71837
+ */
71838
+ async executeWithDirectClient(signal, updateOutput2) {
71839
+ const callToolResult = await this.mcpClient.callTool({
71840
+ name: this.serverToolName,
71841
+ arguments: this.params
71842
+ }, void 0, {
71843
+ onprogress: /* @__PURE__ */ __name((progress) => {
71844
+ if (updateOutput2) {
71845
+ const progressData = {
71846
+ type: "mcp_tool_progress",
71847
+ progress: progress.progress,
71848
+ ...progress.total != null && { total: progress.total },
71849
+ ...progress.message != null && { message: progress.message }
71850
+ };
71851
+ updateOutput2(progressData);
71852
+ }
71853
+ }, "onprogress"),
71854
+ timeout: this.mcpTimeout,
71855
+ signal
71856
+ });
71857
+ const rawResponseParts = wrapMcpCallToolResultAsParts(this.serverToolName, callToolResult);
71858
+ if (this.isMCPToolError(rawResponseParts)) {
71859
+ const errorMessage = `MCP tool '${this.serverToolName}' reported tool error for function call: ${safeJsonStringify({
71860
+ name: this.serverToolName,
71861
+ args: this.params
71862
+ })} with response: ${safeJsonStringify(rawResponseParts)}`;
71863
+ return {
71864
+ llmContent: errorMessage,
71865
+ returnDisplay: `Error: MCP tool '${this.serverToolName}' reported an error.`,
71866
+ error: {
71867
+ message: errorMessage,
71868
+ type: ToolErrorType.MCP_TOOL_ERROR
71869
+ }
71870
+ };
71871
+ }
71872
+ const transformedParts = transformMcpContentToParts(rawResponseParts);
71873
+ return {
71874
+ llmContent: transformedParts,
71875
+ returnDisplay: getStringifiedResultForDisplay(rawResponseParts)
71876
+ };
71877
+ }
71878
+ /**
71879
+ * Fallback: execute using the @google/genai CallableTool wrapper.
71880
+ * This path does NOT support progress notifications.
71881
+ */
71882
+ async executeWithCallableTool(signal) {
71812
71883
  const functionCalls = [
71813
71884
  {
71814
71885
  name: this.serverToolName,
@@ -71871,7 +71942,9 @@ var init_mcp_tool = __esm({
71871
71942
  parameterSchema;
71872
71943
  trust;
71873
71944
  cliConfig;
71874
- constructor(mcpTool, serverName, serverToolName, description, parameterSchema, trust, nameOverride, cliConfig) {
71945
+ mcpClient;
71946
+ mcpTimeout;
71947
+ constructor(mcpTool, serverName, serverToolName, description, parameterSchema, trust, nameOverride, cliConfig, mcpClient, mcpTimeout) {
71875
71948
  super(
71876
71949
  nameOverride ?? generateValidName(`mcp__${serverName}__${serverToolName}`),
71877
71950
  `${serverToolName} (${serverName} MCP Server)`,
@@ -71880,7 +71953,7 @@ var init_mcp_tool = __esm({
71880
71953
  parameterSchema,
71881
71954
  true,
71882
71955
  // isOutputMarkdown
71883
- false
71956
+ true
71884
71957
  );
71885
71958
  this.mcpTool = mcpTool;
71886
71959
  this.serverName = serverName;
@@ -71888,14 +71961,17 @@ var init_mcp_tool = __esm({
71888
71961
  this.parameterSchema = parameterSchema;
71889
71962
  this.trust = trust;
71890
71963
  this.cliConfig = cliConfig;
71964
+ this.mcpClient = mcpClient;
71965
+ this.mcpTimeout = mcpTimeout;
71891
71966
  }
71892
71967
  asFullyQualifiedTool() {
71893
- return new _DiscoveredMCPTool(this.mcpTool, this.serverName, this.serverToolName, this.description, this.parameterSchema, this.trust, generateValidName(`mcp__${this.serverName}__${this.serverToolName}`), this.cliConfig);
71968
+ return new _DiscoveredMCPTool(this.mcpTool, this.serverName, this.serverToolName, this.description, this.parameterSchema, this.trust, generateValidName(`mcp__${this.serverName}__${this.serverToolName}`), this.cliConfig, this.mcpClient, this.mcpTimeout);
71894
71969
  }
71895
71970
  createInvocation(params) {
71896
- return new DiscoveredMCPToolInvocation(this.mcpTool, this.serverName, this.serverToolName, this.displayName, this.trust, params, this.cliConfig);
71971
+ return new DiscoveredMCPToolInvocation(this.mcpTool, this.serverName, this.serverToolName, this.displayName, this.trust, params, this.cliConfig, this.mcpClient, this.mcpTimeout);
71897
71972
  }
71898
71973
  };
71974
+ __name(wrapMcpCallToolResultAsParts, "wrapMcpCallToolResultAsParts");
71899
71975
  __name(transformTextBlock, "transformTextBlock");
71900
71976
  __name(transformImageAudioBlock, "transformImageAudioBlock");
71901
71977
  __name(transformResourceBlock, "transformResourceBlock");
@@ -156351,7 +156427,7 @@ __export(geminiContentGenerator_exports, {
156351
156427
  createGeminiContentGenerator: () => createGeminiContentGenerator
156352
156428
  });
156353
156429
  function createGeminiContentGenerator(config2, gcConfig) {
156354
- const version2 = "0.10.0-preview.4";
156430
+ const version2 = "0.10.0-preview.6";
156355
156431
  const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
156356
156432
  const baseHeaders = {
156357
156433
  "User-Agent": userAgent2
@@ -210558,13 +210634,26 @@ async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfi
210558
210634
  if (!Array.isArray(tool.functionDeclarations)) {
210559
210635
  return [];
210560
210636
  }
210637
+ const mcpTimeout = mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC;
210561
210638
  const discoveredTools = [];
210562
210639
  for (const funcDecl of tool.functionDeclarations) {
210563
210640
  try {
210564
210641
  if (!isEnabled(funcDecl, mcpServerName, mcpServerConfig)) {
210565
210642
  continue;
210566
210643
  }
210567
- discoveredTools.push(new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? "", funcDecl.parametersJsonSchema ?? { type: "object", properties: {} }, mcpServerConfig.trust, void 0, cliConfig));
210644
+ discoveredTools.push(new DiscoveredMCPTool(
210645
+ mcpCallableTool,
210646
+ mcpServerName,
210647
+ funcDecl.name,
210648
+ funcDecl.description ?? "",
210649
+ funcDecl.parametersJsonSchema ?? { type: "object", properties: {} },
210650
+ mcpServerConfig.trust,
210651
+ void 0,
210652
+ cliConfig,
210653
+ mcpClient,
210654
+ // raw MCP Client for direct callTool with progress
210655
+ mcpTimeout
210656
+ ));
210568
210657
  } catch (error2) {
210569
210658
  debugLogger49.error(`Error discovering tool: '${funcDecl.name}' from MCP server '${mcpServerName}': ${error2.message}`);
210570
210659
  }
@@ -238711,11 +238800,11 @@ var init_extensionManager = __esm({
238711
238800
  installMetadata.source = path62.resolve(currentDir, installMetadata.source);
238712
238801
  }
238713
238802
  let tempDir;
238714
- if (installMetadata.type === "marketplace" && installMetadata.marketplaceConfig && !installMetadata.pluginName) {
238803
+ if (installMetadata.originSource === "Claude" && installMetadata.marketplaceConfig && !installMetadata.pluginName) {
238715
238804
  const pluginName = await this.requestChoicePlugin(installMetadata.marketplaceConfig);
238716
238805
  installMetadata.pluginName = pluginName;
238717
238806
  }
238718
- if (installMetadata.type === "marketplace" || installMetadata.type === "git" || installMetadata.type === "github-release") {
238807
+ if (installMetadata.type === "git" || installMetadata.type === "github-release") {
238719
238808
  tempDir = await ExtensionStorage.createTmpDir();
238720
238809
  try {
238721
238810
  const result = await downloadFromGitHubRelease(installMetadata, tempDir);
@@ -238725,7 +238814,7 @@ var init_extensionManager = __esm({
238725
238814
  }
238726
238815
  } catch (_error) {
238727
238816
  await cloneFromGit(installMetadata, tempDir);
238728
- if (installMetadata.type === "git" || installMetadata.type === "github-release") {
238817
+ if (installMetadata.type === "github-release") {
238729
238818
  installMetadata.type = "git";
238730
238819
  }
238731
238820
  }
@@ -247785,7 +247874,20 @@ async function parseInstallSource(source2) {
247785
247874
  let installMetadata;
247786
247875
  let repoSource = repo;
247787
247876
  let marketplaceConfig = null;
247788
- if (isGitUrl(repo)) {
247877
+ let isLocalPath = false;
247878
+ try {
247879
+ await stat7(repo);
247880
+ isLocalPath = true;
247881
+ } catch {
247882
+ }
247883
+ if (isLocalPath) {
247884
+ installMetadata = {
247885
+ source: repo,
247886
+ type: "local",
247887
+ pluginName
247888
+ };
247889
+ marketplaceConfig = await readLocalMarketplaceConfig(repo);
247890
+ } else if (isGitUrl(repo)) {
247789
247891
  installMetadata = {
247790
247892
  source: repoSource,
247791
247893
  type: "git",
@@ -247809,20 +247911,9 @@ async function parseInstallSource(source2) {
247809
247911
  } catch {
247810
247912
  }
247811
247913
  } else {
247812
- try {
247813
- await stat7(repo);
247814
- installMetadata = {
247815
- source: repo,
247816
- type: "local",
247817
- pluginName
247818
- };
247819
- marketplaceConfig = await readLocalMarketplaceConfig(repo);
247820
- } catch {
247821
- throw new Error(`Install source not found: ${repo}`);
247822
- }
247914
+ throw new Error(`Install source not found: ${repo}`);
247823
247915
  }
247824
247916
  if (marketplaceConfig) {
247825
- installMetadata.type = "marketplace";
247826
247917
  installMetadata.marketplaceConfig = marketplaceConfig;
247827
247918
  installMetadata.originSource = "Claude";
247828
247919
  }
@@ -296959,6 +297050,9 @@ var init_de = __esm({
296959
297050
  "(Use Enter to Set Auth)": "(Enter zum Festlegen der Authentifizierung)",
296960
297051
  "Terms of Services and Privacy Notice for Qwen Code": "Nutzungsbedingungen und Datenschutzhinweis f\xFCr Qwen Code",
296961
297052
  "Qwen OAuth": "Qwen OAuth",
297053
+ "Login with QwenChat account to use daily free quota.": "Melden Sie sich mit Ihrem QwenChat-Konto an, um das t\xE4gliche kostenlose Kontingent zu nutzen.",
297054
+ "API-KEY": "API-KEY",
297055
+ "Use coding plan credentials or your own api-keys/providers.": "Verwenden Sie Coding Plan-Anmeldedaten oder Ihre eigenen API-Schl\xFCssel/Anbieter.",
296962
297056
  OpenAI: "OpenAI",
296963
297057
  "Failed to login. Message: {{message}}": "Anmeldung fehlgeschlagen. Meldung: {{message}}",
296964
297058
  "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.": "Authentifizierung ist auf {{enforcedType}} festgelegt, aber Sie verwenden derzeit {{currentType}}.",
@@ -297313,7 +297407,18 @@ var init_de = __esm({
297313
297407
  "Add model configuration to modelProviders['openai'] (or other auth types)": "Modellkonfiguration zu modelProviders['openai'] (oder anderen Authentifizierungstypen) hinzuf\xFCgen",
297314
297408
  "Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "Jeder Anbieter ben\xF6tigt: id, envKey (erforderlich), plus optionale baseUrl, generationConfig",
297315
297409
  "Use /model command to select your preferred model from the configured list": "Verwenden Sie den /model-Befehl, um Ihr bevorzugtes Modell aus der konfigurierten Liste auszuw\xE4hlen",
297316
- "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "Unterst\xFCtzte Authentifizierungstypen: openai, anthropic, gemini, vertex-ai, usw."
297410
+ "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "Unterst\xFCtzte Authentifizierungstypen: openai, anthropic, gemini, vertex-ai, usw.",
297411
+ // ============================================================================
297412
+ // Auth Dialog - View Titles and Labels
297413
+ // ============================================================================
297414
+ "Coding Plan": "Coding Plan",
297415
+ "Paste your api key of Bailian Coding Plan and you're all set!": "F\xFCgen Sie Ihren Bailian Coding Plan API-Schl\xFCssel ein und Sie sind bereit!",
297416
+ Custom: "Benutzerdefiniert",
297417
+ "More instructions about configuring `modelProviders` manually.": "Weitere Anweisungen zur manuellen Konfiguration von `modelProviders`.",
297418
+ "Select API-KEY configuration mode:": "API-KEY-Konfigurationsmodus ausw\xE4hlen:",
297419
+ "(Press Escape to go back)": "(Escape dr\xFCcken zum Zur\xFCckgehen)",
297420
+ "(Press Enter to submit, Escape to cancel)": "(Enter zum Absenden, Escape zum Abbrechen)",
297421
+ "More instructions please check:": "Weitere Anweisungen finden Sie unter:"
297317
297422
  };
297318
297423
  }
297319
297424
  });
@@ -298004,6 +298109,9 @@ var init_en3 = __esm({
298004
298109
  "(Use Enter to Set Auth)": "(Use Enter to Set Auth)",
298005
298110
  "Terms of Services and Privacy Notice for Qwen Code": "Terms of Services and Privacy Notice for Qwen Code",
298006
298111
  "Qwen OAuth": "Qwen OAuth",
298112
+ "Login with QwenChat account to use daily free quota.": "Login with QwenChat account to use daily free quota.",
298113
+ "API-KEY": "API-KEY",
298114
+ "Use coding plan credentials or your own api-keys/providers.": "Use coding plan credentials or your own api-keys/providers.",
298007
298115
  OpenAI: "OpenAI",
298008
298116
  "Failed to login. Message: {{message}}": "Failed to login. Message: {{message}}",
298009
298117
  "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.": "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.",
@@ -298368,12 +298476,14 @@ var init_en3 = __esm({
298368
298476
  "Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig",
298369
298477
  "Use /model command to select your preferred model from the configured list": "Use /model command to select your preferred model from the configured list",
298370
298478
  "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.",
298479
+ "More instructions please check:": "More instructions please check:",
298371
298480
  // ============================================================================
298372
298481
  // Auth Dialog - View Titles and Labels
298373
298482
  // ============================================================================
298374
- "API-KEY": "API-KEY",
298375
298483
  "Coding Plan": "Coding Plan",
298484
+ "Paste your api key of Bailian Coding Plan and you're all set!": "Paste your api key of Bailian Coding Plan and you're all set!",
298376
298485
  Custom: "Custom",
298486
+ "More instructions about configuring `modelProviders` manually.": "More instructions about configuring `modelProviders` manually.",
298377
298487
  "Select API-KEY configuration mode:": "Select API-KEY configuration mode:",
298378
298488
  "(Press Escape to go back)": "(Press Escape to go back)",
298379
298489
  "(Press Enter to submit, Escape to cancel)": "(Press Enter to submit, Escape to cancel)"
@@ -298887,6 +298997,9 @@ var init_ja = __esm({
298887
298997
  "(Use Enter to Set Auth)": "(Enter \u3067\u8A8D\u8A3C\u3092\u8A2D\u5B9A)",
298888
298998
  "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",
298889
298999
  "Qwen OAuth": "Qwen OAuth",
299000
+ "Login with QwenChat account to use daily free quota.": "QwenChat\u30A2\u30AB\u30A6\u30F3\u30C8\u3067\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3001\u6BCE\u65E5\u306E\u7121\u6599\u30AF\u30A9\u30FC\u30BF\u3092\u3054\u5229\u7528\u304F\u3060\u3055\u3044\u3002",
299001
+ "API-KEY": "API-KEY",
299002
+ "Use coding plan credentials or your own api-keys/providers.": "Coding Plan\u306E\u8A8D\u8A3C\u60C5\u5831\u307E\u305F\u306F\u3054\u81EA\u8EAB\u306EAPI\u30AD\u30FC/\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u3054\u5229\u7528\u304F\u3060\u3055\u3044\u3002",
298890
299003
  OpenAI: "OpenAI",
298891
299004
  "Failed to login. Message: {{message}}": "\u30ED\u30B0\u30A4\u30F3\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30E1\u30C3\u30BB\u30FC\u30B8: {{message}}",
298892
299005
  "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",
@@ -299068,7 +299181,18 @@ var init_ja = __esm({
299068
299181
  "Add model configuration to modelProviders['openai'] (or other auth types)": "modelProviders['openai']\uFF08\u307E\u305F\u306F\u4ED6\u306E\u8A8D\u8A3C\u30BF\u30A4\u30D7\uFF09\u306B\u30E2\u30C7\u30EB\u8A2D\u5B9A\u3092\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044",
299069
299182
  "Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "\u5404\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u306B\u306F\uFF1Aid\u3001envKey\uFF08\u5FC5\u9808\uFF09\u3001\u304A\u3088\u3073\u30AA\u30D7\u30B7\u30E7\u30F3\u306E baseUrl\u3001generationConfig \u304C\u5FC5\u8981\u3067\u3059",
299070
299183
  "Use /model command to select your preferred model from the configured list": "/model \u30B3\u30DE\u30F3\u30C9\u3092\u4F7F\u7528\u3057\u3066\u3001\u8A2D\u5B9A\u6E08\u307F\u30EA\u30B9\u30C8\u304B\u3089\u304A\u597D\u307F\u306E\u30E2\u30C7\u30EB\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",
299071
- "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u8A8D\u8A3C\u30BF\u30A4\u30D7\uFF1Aopenai\u3001anthropic\u3001gemini\u3001vertex-ai \u306A\u3069"
299184
+ "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u8A8D\u8A3C\u30BF\u30A4\u30D7\uFF1Aopenai\u3001anthropic\u3001gemini\u3001vertex-ai \u306A\u3069",
299185
+ // ============================================================================
299186
+ // Auth Dialog - View Titles and Labels
299187
+ // ============================================================================
299188
+ "Coding Plan": "Coding Plan",
299189
+ "Paste your api key of Bailian Coding Plan and you're all set!": "Bailian Coding Plan\u306EAPI\u30AD\u30FC\u3092\u8CBC\u308A\u4ED8\u3051\u308B\u3060\u3051\u3067\u6E96\u5099\u5B8C\u4E86\u3067\u3059\uFF01",
299190
+ Custom: "\u30AB\u30B9\u30BF\u30E0",
299191
+ "More instructions about configuring `modelProviders` manually.": "`modelProviders`\u3092\u624B\u52D5\u3067\u8A2D\u5B9A\u3059\u308B\u65B9\u6CD5\u306E\u8A73\u7D30\u306F\u3053\u3061\u3089\u3002",
299192
+ "Select API-KEY configuration mode:": "API-KEY\u8A2D\u5B9A\u30E2\u30FC\u30C9\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A",
299193
+ "(Press Escape to go back)": "(Escape\u30AD\u30FC\u3067\u623B\u308B)",
299194
+ "(Press Enter to submit, Escape to cancel)": "(Enter\u3067\u9001\u4FE1\u3001Escape\u3067\u30AD\u30E3\u30F3\u30BB\u30EB)",
299195
+ "More instructions please check:": "\u8A73\u7D30\u306A\u624B\u9806\u306F\u3053\u3061\u3089\u3092\u3054\u78BA\u8A8D\u304F\u3060\u3055\u3044\uFF1A"
299072
299196
  };
299073
299197
  }
299074
299198
  });
@@ -299753,6 +299877,9 @@ var init_pt = __esm({
299753
299877
  "(Use Enter to Set Auth)": "(Use Enter para Definir Autentica\xE7\xE3o)",
299754
299878
  "Terms of Services and Privacy Notice for Qwen Code": "Termos de Servi\xE7o e Aviso de Privacidade do Qwen Code",
299755
299879
  "Qwen OAuth": "Qwen OAuth",
299880
+ "Login with QwenChat account to use daily free quota.": "Fa\xE7a login com sua conta QwenChat para usar a cota gratuita di\xE1ria.",
299881
+ "API-KEY": "API-KEY",
299882
+ "Use coding plan credentials or your own api-keys/providers.": "Use credenciais do Coding Plan ou suas pr\xF3prias chaves API/provedores.",
299756
299883
  OpenAI: "OpenAI",
299757
299884
  "Failed to login. Message: {{message}}": "Falha ao fazer login. Mensagem: {{message}}",
299758
299885
  "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.",
@@ -300106,7 +300233,18 @@ var init_pt = __esm({
300106
300233
  "Add model configuration to modelProviders['openai'] (or other auth types)": "Adicione a configura\xE7\xE3o do modelo a modelProviders['openai'] (ou outros tipos de autentica\xE7\xE3o)",
300107
300234
  "Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "Cada provedor precisa de: id, envKey (obrigat\xF3rio), al\xE9m de baseUrl e generationConfig opcionais",
300108
300235
  "Use /model command to select your preferred model from the configured list": "Use o comando /model para selecionar seu modelo preferido da lista configurada",
300109
- "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "Tipos de autentica\xE7\xE3o suportados: openai, anthropic, gemini, vertex-ai, etc."
300236
+ "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "Tipos de autentica\xE7\xE3o suportados: openai, anthropic, gemini, vertex-ai, etc.",
300237
+ // ============================================================================
300238
+ // Auth Dialog - View Titles and Labels
300239
+ // ============================================================================
300240
+ "Coding Plan": "Coding Plan",
300241
+ "Paste your api key of Bailian Coding Plan and you're all set!": "Cole sua chave de API do Bailian Coding Plan e pronto!",
300242
+ Custom: "Personalizado",
300243
+ "More instructions about configuring `modelProviders` manually.": "Mais instru\xE7\xF5es sobre como configurar `modelProviders` manualmente.",
300244
+ "Select API-KEY configuration mode:": "Selecione o modo de configura\xE7\xE3o da API-KEY:",
300245
+ "(Press Escape to go back)": "(Pressione Escape para voltar)",
300246
+ "(Press Enter to submit, Escape to cancel)": "(Pressione Enter para enviar, Escape para cancelar)",
300247
+ "More instructions please check:": "Mais instru\xE7\xF5es, consulte:"
300110
300248
  };
300111
300249
  }
300112
300250
  });
@@ -300797,6 +300935,9 @@ var init_ru = __esm({
300797
300935
  "(Use Enter to Set Auth)": "(Enter \u0434\u043B\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438)",
300798
300936
  "Terms of Services and Privacy Notice for Qwen Code": "\u0423\u0441\u043B\u043E\u0432\u0438\u044F \u043E\u0431\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u043D\u0438\u044F \u0438 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0435 \u043E \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438 \u0434\u043B\u044F Qwen Code",
300799
300937
  "Qwen OAuth": "Qwen OAuth",
300938
+ "Login with QwenChat account to use daily free quota.": "\u0412\u043E\u0439\u0434\u0438\u0442\u0435 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0430\u043A\u043A\u0430\u0443\u043D\u0442\u0430 QwenChat, \u0447\u0442\u043E\u0431\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0443\u044E \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u0443\u044E \u043A\u0432\u043E\u0442\u0443.",
300939
+ "API-KEY": "API-KEY",
300940
+ "Use coding plan credentials or your own api-keys/providers.": "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0443\u0447\u0435\u0442\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 Coding Plan \u0438\u043B\u0438 \u0441\u0432\u043E\u0438 \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 API-\u043A\u043B\u044E\u0447\u0438/\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u044B.",
300800
300941
  OpenAI: "OpenAI",
300801
300942
  "Failed to login. Message: {{message}}": "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0432\u043E\u0439\u0442\u0438. \u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435: {{message}}",
300802
300943
  "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.": "\u0410\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C {{enforcedType}}, \u043D\u043E \u0432\u044B \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435 {{currentType}}.",
@@ -301152,7 +301293,18 @@ var init_ru = __esm({
301152
301293
  "Add model configuration to modelProviders['openai'] (or other auth types)": "\u0414\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044E \u043C\u043E\u0434\u0435\u043B\u0438 \u0432 modelProviders['openai'] (\u0438\u043B\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043F\u044B \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438)",
301153
301294
  "Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "\u041A\u0430\u0436\u0434\u043E\u043C\u0443 \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u043D\u0443\u0436\u043D\u044B: id, envKey (\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E), \u0430 \u0442\u0430\u043A\u0436\u0435 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 baseUrl, generationConfig",
301154
301295
  "Use /model command to select your preferred model from the configured list": "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 /model, \u0447\u0442\u043E\u0431\u044B \u0432\u044B\u0431\u0440\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0438\u0442\u0430\u0435\u043C\u0443\u044E \u043C\u043E\u0434\u0435\u043B\u044C \u0438\u0437 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430",
301155
- "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043C\u044B\u0435 \u0442\u0438\u043F\u044B \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438: openai, anthropic, gemini, vertex-ai \u0438 \u0434\u0440."
301296
+ "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043C\u044B\u0435 \u0442\u0438\u043F\u044B \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438: openai, anthropic, gemini, vertex-ai \u0438 \u0434\u0440.",
301297
+ // ============================================================================
301298
+ // Auth Dialog - View Titles and Labels
301299
+ // ============================================================================
301300
+ "Coding Plan": "Coding Plan",
301301
+ "Paste your api key of Bailian Coding Plan and you're all set!": "\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0432\u0430\u0448 API-\u043A\u043B\u044E\u0447 Bailian Coding Plan \u0438 \u0432\u0441\u0451 \u0433\u043E\u0442\u043E\u0432\u043E!",
301302
+ Custom: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439",
301303
+ "More instructions about configuring `modelProviders` manually.": "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u0438 \u043F\u043E \u0440\u0443\u0447\u043D\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0435 `modelProviders`.",
301304
+ "Select API-KEY configuration mode:": "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0436\u0438\u043C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 API-KEY:",
301305
+ "(Press Escape to go back)": "(\u041D\u0430\u0436\u043C\u0438\u0442\u0435 Escape \u0434\u043B\u044F \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430)",
301306
+ "(Press Enter to submit, Escape to cancel)": "(\u041D\u0430\u0436\u043C\u0438\u0442\u0435 Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, Escape \u0434\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u044B)",
301307
+ "More instructions please check:": "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u0438 \u0441\u043C.:"
301156
301308
  };
301157
301309
  }
301158
301310
  });
@@ -301843,6 +301995,8 @@ var init_zh = __esm({
301843
301995
  "(Use Enter to Set Auth)": "\uFF08\u4F7F\u7528 Enter \u8BBE\u7F6E\u8BA4\u8BC1\uFF09",
301844
301996
  "Terms of Services and Privacy Notice for Qwen Code": "Qwen Code \u7684\u670D\u52A1\u6761\u6B3E\u548C\u9690\u79C1\u58F0\u660E",
301845
301997
  "Qwen OAuth": "Qwen OAuth (\u514D\u8D39)",
301998
+ "Login with QwenChat account to use daily free quota.": "\u4F7F\u7528 QwenChat \u8D26\u53F7\u767B\u5F55\uFF0C\u4EAB\u53D7\u6BCF\u65E5\u514D\u8D39\u989D\u5EA6\u3002",
301999
+ "Use coding plan credentials or your own api-keys/providers.": "\u4F7F\u7528 Coding Plan \u51ED\u8BC1\u6216\u60A8\u81EA\u5DF1\u7684 API \u5BC6\u94A5/\u63D0\u4F9B\u5546\u3002",
301846
302000
  OpenAI: "OpenAI",
301847
302001
  "Failed to login. Message: {{message}}": "\u767B\u5F55\u5931\u8D25\u3002\u6D88\u606F\uFF1A{{message}}",
301848
302002
  "Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.": "\u8BA4\u8BC1\u65B9\u5F0F\u88AB\u5F3A\u5236\u8BBE\u7F6E\u4E3A {{enforcedType}}\uFF0C\u4F46\u60A8\u5F53\u524D\u4F7F\u7528\u7684\u662F {{currentType}}",
@@ -302106,12 +302260,15 @@ var init_zh = __esm({
302106
302260
  "Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "\u6BCF\u4E2A\u63D0\u4F9B\u5546\u9700\u8981\uFF1Aid\u3001envKey\uFF08\u5FC5\u9700\uFF09\uFF0C\u4EE5\u53CA\u53EF\u9009\u7684 baseUrl\u3001generationConfig",
302107
302261
  "Use /model command to select your preferred model from the configured list": "\u4F7F\u7528 /model \u547D\u4EE4\u4ECE\u914D\u7F6E\u5217\u8868\u4E2D\u9009\u62E9\u60A8\u504F\u597D\u7684\u6A21\u578B",
302108
302262
  "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "\u652F\u6301\u7684\u8BA4\u8BC1\u7C7B\u578B\uFF1Aopenai\u3001anthropic\u3001gemini\u3001vertex-ai \u7B49",
302263
+ "More instructions please check:": "\u66F4\u591A\u8BF4\u660E\u8BF7\u67E5\u770B\uFF1A",
302109
302264
  // ============================================================================
302110
302265
  // Auth Dialog - View Titles and Labels
302111
302266
  // ============================================================================
302112
302267
  "API-KEY": "API-KEY",
302113
302268
  "Coding Plan": "Coding Plan",
302269
+ "Paste your api key of Bailian Coding Plan and you're all set!": "\u7C98\u8D34\u60A8\u7684\u767E\u70BC Coding Plan API Key\uFF0C\u5373\u53EF\u5B8C\u6210\u8BBE\u7F6E\uFF01",
302114
302270
  Custom: "\u81EA\u5B9A\u4E49",
302271
+ "More instructions about configuring `modelProviders` manually.": "\u5173\u4E8E\u624B\u52A8\u914D\u7F6E `modelProviders` \u7684\u66F4\u591A\u8BF4\u660E\u3002",
302115
302272
  "Select API-KEY configuration mode:": "\u9009\u62E9 API-KEY \u914D\u7F6E\u6A21\u5F0F\uFF1A",
302116
302273
  "(Press Escape to go back)": "(\u6309 Escape \u952E\u8FD4\u56DE)",
302117
302274
  "(Press Enter to submit, Escape to cancel)": "(\u6309 Enter \u63D0\u4EA4\uFF0CEscape \u53D6\u6D88)"
@@ -373161,7 +373318,7 @@ __name(getPackageJson, "getPackageJson");
373161
373318
  // packages/cli/src/utils/version.ts
373162
373319
  async function getCliVersion() {
373163
373320
  const pkgJson = await getPackageJson();
373164
- return "0.10.0-preview.4";
373321
+ return "0.10.0-preview.6";
373165
373322
  }
373166
373323
  __name(getCliVersion, "getCliVersion");
373167
373324
 
@@ -380684,7 +380841,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
380684
380841
 
380685
380842
  // packages/cli/src/generated/git-commit.ts
380686
380843
  init_esbuild_shims();
380687
- var GIT_COMMIT_INFO = "3f4cd8cb";
380844
+ var GIT_COMMIT_INFO = "71f320b6";
380688
380845
 
380689
380846
  // packages/cli/src/utils/systemInfo.ts
380690
380847
  async function getNpmVersion() {
@@ -387401,6 +387558,19 @@ async function buildSystemMessage(config2, sessionId, permissionMode, allowedBui
387401
387558
  return systemMessage;
387402
387559
  }
387403
387560
  __name(buildSystemMessage, "buildSystemMessage");
387561
+ function isMcpToolProgressData(output) {
387562
+ return typeof output === "object" && output !== null && "type" in output && output.type === "mcp_tool_progress";
387563
+ }
387564
+ __name(isMcpToolProgressData, "isMcpToolProgressData");
387565
+ function createToolProgressHandler(request4, adapter) {
387566
+ const handler = /* @__PURE__ */ __name((_callId, output) => {
387567
+ if (isMcpToolProgressData(output)) {
387568
+ adapter.emitToolProgress(request4, output);
387569
+ }
387570
+ }, "handler");
387571
+ return { handler };
387572
+ }
387573
+ __name(createToolProgressHandler, "createToolProgressHandler");
387404
387574
  function createTaskToolProgressHandler(config2, taskToolCallId, adapter) {
387405
387575
  const previousTaskStates = /* @__PURE__ */ new Map();
387406
387576
  const emittedToolUseIds = /* @__PURE__ */ new Set();
@@ -388233,6 +388403,16 @@ ${event.value}`, null);
388233
388403
  };
388234
388404
  this.emitMessageImpl(systemMessage);
388235
388405
  }
388406
+ /**
388407
+ * Emits a tool progress stream event.
388408
+ * Default implementation is a no-op. StreamJsonOutputAdapter overrides this
388409
+ * to emit stream events when includePartialMessages is enabled.
388410
+ *
388411
+ * @param _request - Tool call request info
388412
+ * @param _progress - Structured MCP progress data
388413
+ */
388414
+ emitToolProgress(_request, _progress) {
388415
+ }
388236
388416
  /**
388237
388417
  * Builds a result message from options.
388238
388418
  * Helper method used by both emitResult implementations.
@@ -388612,6 +388792,27 @@ var StreamJsonOutputAdapter = class extends BaseJsonOutputAdapter {
388612
388792
  );
388613
388793
  }
388614
388794
  }
388795
+ /**
388796
+ * Emits a tool progress stream event when partial messages are enabled.
388797
+ * This overrides the no-op in BaseJsonOutputAdapter.
388798
+ */
388799
+ emitToolProgress(request4, progress) {
388800
+ if (!this.includePartialMessages) {
388801
+ return;
388802
+ }
388803
+ const partial2 = {
388804
+ type: "stream_event",
388805
+ uuid: randomUUID8(),
388806
+ session_id: this.getSessionId(),
388807
+ parent_tool_use_id: null,
388808
+ event: {
388809
+ type: "tool_progress",
388810
+ tool_use_id: request4.callId,
388811
+ content: progress
388812
+ }
388813
+ };
388814
+ this.emitMessageImpl(partial2);
388815
+ }
388615
388816
  /**
388616
388817
  * Emits stream events when partial messages are enabled.
388617
388818
  * This is a private method specific to StreamJsonOutputAdapter.
@@ -389101,24 +389302,21 @@ async function runNonInteractive(config2, settings, input, prompt_id, options2 =
389101
389302
  const inputFormat = typeof config2.getInputFormat === "function" ? config2.getInputFormat() : InputFormat.TEXT;
389102
389303
  const toolCallUpdateCallback = inputFormat === InputFormat.STREAM_JSON && options2.controlService ? options2.controlService.permission.getToolCallUpdateCallback() : void 0;
389103
389304
  const isTaskTool = finalRequestInfo.name === "task";
389104
- const taskToolProgress = isTaskTool ? createTaskToolProgressHandler(
389305
+ const { handler: outputUpdateHandler } = isTaskTool ? createTaskToolProgressHandler(
389105
389306
  config2,
389106
389307
  finalRequestInfo.callId,
389107
389308
  adapter
389108
- ) : void 0;
389109
- const taskToolProgressHandler = taskToolProgress?.handler;
389309
+ ) : createToolProgressHandler(finalRequestInfo, adapter);
389110
389310
  const toolResponse = await executeToolCall(
389111
389311
  config2,
389112
389312
  finalRequestInfo,
389113
389313
  abortController.signal,
389114
- taskToolProgressHandler || toolCallUpdateCallback ? {
389115
- ...taskToolProgressHandler && {
389116
- outputUpdateHandler: taskToolProgressHandler
389117
- },
389314
+ {
389315
+ outputUpdateHandler,
389118
389316
  ...toolCallUpdateCallback && {
389119
389317
  onToolCallsUpdate: toolCallUpdateCallback
389120
389318
  }
389121
- } : void 0
389319
+ }
389122
389320
  );
389123
389321
  if (toolResponse.error) {
389124
389322
  handleToolError(
@@ -412938,6 +413136,15 @@ var useResultDisplayRenderer = /* @__PURE__ */ __name((resultDisplay) => import_
412938
413136
  data: resultDisplay
412939
413137
  };
412940
413138
  }
413139
+ if (typeof resultDisplay === "object" && resultDisplay !== null && "type" in resultDisplay && resultDisplay.type === "mcp_tool_progress") {
413140
+ const progress = resultDisplay;
413141
+ const msg = progress.message ?? `Progress: ${progress.progress}`;
413142
+ const totalStr = progress.total != null ? `/${progress.total}` : "";
413143
+ return {
413144
+ type: "string",
413145
+ data: `\u23F3 [${progress.progress}${totalStr}] ${msg}`
413146
+ };
413147
+ }
412941
413148
  if (typeof resultDisplay === "object" && resultDisplay !== null && "ansiOutput" in resultDisplay) {
412942
413149
  return { type: "ansi", data: resultDisplay.ansiOutput };
412943
413150
  }
@@ -417496,7 +417703,7 @@ function ApiKeyInput({
417496
417703
  );
417497
417704
  return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(Box_default, { flexDirection: "column", children: [
417498
417705
  /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Box_default, { marginBottom: 1, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Text3, { children: t4("Please enter your API key:") }) }),
417499
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(TextInput, { value: apiKey, onChange: setApiKey, placeholder: "sk-..." }),
417706
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(TextInput, { value: apiKey, onChange: setApiKey, placeholder: "sk-sp-..." }),
417500
417707
  error2 && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Text3, { color: Colors.AccentRed, children: error2 }) }),
417501
417708
  /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Text3, { color: Colors.Gray, children: t4("(Press Enter to submit, Escape to cancel)") }) })
417502
417709
  ] });
@@ -417583,6 +417790,7 @@ var useUIActions = /* @__PURE__ */ __name(() => {
417583
417790
 
417584
417791
  // packages/cli/src/ui/auth/AuthDialog.tsx
417585
417792
  var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1);
417793
+ var MODEL_PROVIDERS_DOCUMENTATION_URL = "https://qwenlm.github.io/qwen-code-docs/en/users/configuration/settings/#modelproviders";
417586
417794
  function parseDefaultAuthType(defaultAuthType) {
417587
417795
  if (defaultAuthType && Object.values(AuthType2).includes(defaultAuthType)) {
417588
417796
  return defaultAuthType;
@@ -417715,7 +417923,8 @@ function AuthDialog() {
417715
417923
  setSelectedIndex(index);
417716
417924
  }
417717
417925
  }
417718
- ) })
417926
+ ) }),
417927
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, paddingLeft: 2, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: currentSelectedAuthType === AuthType2.QWEN_OAUTH ? t4("Login with QwenChat account to use daily free quota.") : t4("Use coding plan credentials or your own api-keys/providers.") }) })
417719
417928
  ] }), "renderMainView");
417720
417929
  const renderApiKeySubView = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
417721
417930
  /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { children: t4("Select API-KEY configuration mode:") }) }),
@@ -417733,7 +417942,10 @@ function AuthDialog() {
417733
417942
  }
417734
417943
  }
417735
417944
  ) }),
417736
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: t4("(Press Escape to go back)") }) })
417945
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, paddingLeft: 2, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: apiKeySubItems[apiKeySubModeIndex]?.value === "coding-plan" ? t4("Paste your api key of Bailian Coding Plan and you're all set!") : t4(
417946
+ "More instructions about configuring `modelProviders` manually."
417947
+ ) }) }),
417948
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: theme?.text?.secondary, children: t4("(Press Escape to go back)") }) })
417737
417949
  ] }), "renderApiKeySubView");
417738
417950
  const renderApiKeyInputView = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ApiKeyInput, { onSubmit: handleApiKeyInputSubmit, onCancel: handleGoBack }) }), "renderApiKeyInputView");
417739
417951
  const renderCustomInfoView = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
@@ -417765,10 +417977,12 @@ function AuthDialog() {
417765
417977
  "Use /model command to select your preferred model from the configured list"
417766
417978
  )
417767
417979
  ] }) }),
417768
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: t4(
417980
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: theme?.text?.secondary, children: t4(
417769
417981
  "Supported auth types: openai, anthropic, gemini, vertex-ai, etc."
417770
417982
  ) }) }),
417771
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: t4("(Press Escape to go back)") }) })
417983
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: theme?.text?.secondary, underline: true, children: t4("More instructions please check:") }) }),
417984
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 0, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(dist_default6, { url: MODEL_PROVIDERS_DOCUMENTATION_URL, fallback: false, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.AccentGreen, underline: true, children: MODEL_PROVIDERS_DOCUMENTATION_URL }) }) }),
417985
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: theme?.text?.secondary, children: t4("(Press Escape to go back)") }) })
417772
417986
  ] }), "renderCustomInfoView");
417773
417987
  const getViewTitle = /* @__PURE__ */ __name(() => {
417774
417988
  switch (viewLevel) {
@@ -417788,7 +418002,7 @@ function AuthDialog() {
417788
418002
  Box_default,
417789
418003
  {
417790
418004
  borderStyle: "round",
417791
- borderColor: Colors.Gray,
418005
+ borderColor: theme?.border?.default,
417792
418006
  flexDirection: "column",
417793
418007
  padding: 1,
417794
418008
  width: "100%",
@@ -417801,7 +418015,7 @@ function AuthDialog() {
417801
418015
  (authError || errorMessage) && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.AccentRed, children: authError || errorMessage }) }),
417802
418016
  viewLevel === "main" && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
417803
418017
  /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.AccentPurple, children: t4("(Use Enter to Set Auth)") }) }),
417804
- hasApiKey && currentSelectedAuthType === AuthType2.QWEN_OAUTH && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: t4(
418018
+ hasApiKey && currentSelectedAuthType === AuthType2.QWEN_OAUTH && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: theme?.text?.secondary, children: t4(
417805
418019
  "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."
417806
418020
  ) }) }),
417807
418021
  /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { children: t4("Terms of Services and Privacy Notice for Qwen Code") }) }),
@@ -422781,15 +422995,15 @@ var CODING_PLAN_ENV_KEY = "BAILIAN_CODING_PLAN_API_KEY";
422781
422995
  var CODING_PLAN_TEMPLATE = [
422782
422996
  {
422783
422997
  id: "qwen3-coder-plus",
422784
- name: "qwen3-coder-plur",
422998
+ name: "qwen3-coder-plus",
422785
422999
  baseUrl: "https://coding.dashscope.aliyuncs.com/v1",
422786
- description: "Qwen3 Coder Plus model from Bailian Coding Plan",
423000
+ description: "qwen3-coder-plus model from Bailian Coding Plan",
422787
423001
  envKey: CODING_PLAN_ENV_KEY
422788
423002
  },
422789
423003
  {
422790
423004
  id: "qwen3-max-2026-01-23",
422791
423005
  name: "qwen3-max-2026-01-23",
422792
- description: "Qwen3 Max Thinking model from Bailian Coding Plan",
423006
+ description: "qwen3 max model from Bailian Coding Plan with thinking enabled",
422793
423007
  baseUrl: "https://coding.dashscope.aliyuncs.com/v1",
422794
423008
  envKey: CODING_PLAN_ENV_KEY,
422795
423009
  generationConfig: {
@@ -434980,7 +435194,7 @@ var GeminiAgent = class {
434980
435194
  name: APPROVAL_MODE_INFO[mode].name,
434981
435195
  description: APPROVAL_MODE_INFO[mode].description
434982
435196
  }));
434983
- const version2 = "0.10.0-preview.4";
435197
+ const version2 = "0.10.0-preview.6";
434984
435198
  return {
434985
435199
  protocolVersion: PROTOCOL_VERSION,
434986
435200
  agentInfo: {
package/locales/de.js CHANGED
@@ -946,6 +946,11 @@ export default {
946
946
  'Terms of Services and Privacy Notice for Qwen Code':
947
947
  'Nutzungsbedingungen und Datenschutzhinweis für Qwen Code',
948
948
  'Qwen OAuth': 'Qwen OAuth',
949
+ 'Login with QwenChat account to use daily free quota.':
950
+ 'Melden Sie sich mit Ihrem QwenChat-Konto an, um das tägliche kostenlose Kontingent zu nutzen.',
951
+ 'API-KEY': 'API-KEY',
952
+ 'Use coding plan credentials or your own api-keys/providers.':
953
+ 'Verwenden Sie Coding Plan-Anmeldedaten oder Ihre eigenen API-Schlüssel/Anbieter.',
949
954
  OpenAI: 'OpenAI',
950
955
  'Failed to login. Message: {{message}}':
951
956
  'Anmeldung fehlgeschlagen. Meldung: {{message}}',
@@ -1389,4 +1394,20 @@ export default {
1389
1394
  'Verwenden Sie den /model-Befehl, um Ihr bevorzugtes Modell aus der konfigurierten Liste auszuwählen',
1390
1395
  'Supported auth types: openai, anthropic, gemini, vertex-ai, etc.':
1391
1396
  'Unterstützte Authentifizierungstypen: openai, anthropic, gemini, vertex-ai, usw.',
1397
+
1398
+ // ============================================================================
1399
+ // Auth Dialog - View Titles and Labels
1400
+ // ============================================================================
1401
+ 'Coding Plan': 'Coding Plan',
1402
+ "Paste your api key of Bailian Coding Plan and you're all set!":
1403
+ 'Fügen Sie Ihren Bailian Coding Plan API-Schlüssel ein und Sie sind bereit!',
1404
+ Custom: 'Benutzerdefiniert',
1405
+ 'More instructions about configuring `modelProviders` manually.':
1406
+ 'Weitere Anweisungen zur manuellen Konfiguration von `modelProviders`.',
1407
+ 'Select API-KEY configuration mode:':
1408
+ 'API-KEY-Konfigurationsmodus auswählen:',
1409
+ '(Press Escape to go back)': '(Escape drücken zum Zurückgehen)',
1410
+ '(Press Enter to submit, Escape to cancel)':
1411
+ '(Enter zum Absenden, Escape zum Abbrechen)',
1412
+ 'More instructions please check:': 'Weitere Anweisungen finden Sie unter:',
1392
1413
  };
package/locales/en.js CHANGED
@@ -937,6 +937,11 @@ export default {
937
937
  'Terms of Services and Privacy Notice for Qwen Code':
938
938
  'Terms of Services and Privacy Notice for Qwen Code',
939
939
  'Qwen OAuth': 'Qwen OAuth',
940
+ 'Login with QwenChat account to use daily free quota.':
941
+ 'Login with QwenChat account to use daily free quota.',
942
+ 'API-KEY': 'API-KEY',
943
+ 'Use coding plan credentials or your own api-keys/providers.':
944
+ 'Use coding plan credentials or your own api-keys/providers.',
940
945
  OpenAI: 'OpenAI',
941
946
  'Failed to login. Message: {{message}}':
942
947
  'Failed to login. Message: {{message}}',
@@ -1388,13 +1393,17 @@ export default {
1388
1393
  'Use /model command to select your preferred model from the configured list',
1389
1394
  'Supported auth types: openai, anthropic, gemini, vertex-ai, etc.':
1390
1395
  'Supported auth types: openai, anthropic, gemini, vertex-ai, etc.',
1396
+ 'More instructions please check:': 'More instructions please check:',
1391
1397
 
1392
1398
  // ============================================================================
1393
1399
  // Auth Dialog - View Titles and Labels
1394
1400
  // ============================================================================
1395
- 'API-KEY': 'API-KEY',
1396
1401
  'Coding Plan': 'Coding Plan',
1402
+ "Paste your api key of Bailian Coding Plan and you're all set!":
1403
+ "Paste your api key of Bailian Coding Plan and you're all set!",
1397
1404
  Custom: 'Custom',
1405
+ 'More instructions about configuring `modelProviders` manually.':
1406
+ 'More instructions about configuring `modelProviders` manually.',
1398
1407
  'Select API-KEY configuration mode:': 'Select API-KEY configuration mode:',
1399
1408
  '(Press Escape to go back)': '(Press Escape to go back)',
1400
1409
  '(Press Enter to submit, Escape to cancel)':
package/locales/ja.js CHANGED
@@ -679,6 +679,11 @@ export default {
679
679
  'Terms of Services and Privacy Notice for Qwen Code':
680
680
  'Qwen Code の利用規約とプライバシー通知',
681
681
  'Qwen OAuth': 'Qwen OAuth',
682
+ 'Login with QwenChat account to use daily free quota.':
683
+ 'QwenChatアカウントでログインして、毎日の無料クォータをご利用ください。',
684
+ 'API-KEY': 'API-KEY',
685
+ 'Use coding plan credentials or your own api-keys/providers.':
686
+ 'Coding Planの認証情報またはご自身のAPIキー/プロバイダーをご利用ください。',
682
687
  OpenAI: 'OpenAI',
683
688
  'Failed to login. Message: {{message}}':
684
689
  'ログインに失敗しました。メッセージ: {{message}}',
@@ -900,4 +905,19 @@ export default {
900
905
  '/model コマンドを使用して、設定済みリストからお好みのモデルを選択してください',
901
906
  'Supported auth types: openai, anthropic, gemini, vertex-ai, etc.':
902
907
  'サポートされている認証タイプ:openai、anthropic、gemini、vertex-ai など',
908
+
909
+ // ============================================================================
910
+ // Auth Dialog - View Titles and Labels
911
+ // ============================================================================
912
+ 'Coding Plan': 'Coding Plan',
913
+ "Paste your api key of Bailian Coding Plan and you're all set!":
914
+ 'Bailian Coding PlanのAPIキーを貼り付けるだけで準備完了です!',
915
+ Custom: 'カスタム',
916
+ 'More instructions about configuring `modelProviders` manually.':
917
+ '`modelProviders`を手動で設定する方法の詳細はこちら。',
918
+ 'Select API-KEY configuration mode:': 'API-KEY設定モードを選択してください:',
919
+ '(Press Escape to go back)': '(Escapeキーで戻る)',
920
+ '(Press Enter to submit, Escape to cancel)':
921
+ '(Enterで送信、Escapeでキャンセル)',
922
+ 'More instructions please check:': '詳細な手順はこちらをご確認ください:',
903
923
  };
package/locales/pt.js CHANGED
@@ -958,6 +958,11 @@ export default {
958
958
  'Terms of Services and Privacy Notice for Qwen Code':
959
959
  'Termos de Serviço e Aviso de Privacidade do Qwen Code',
960
960
  'Qwen OAuth': 'Qwen OAuth',
961
+ 'Login with QwenChat account to use daily free quota.':
962
+ 'Faça login com sua conta QwenChat para usar a cota gratuita diária.',
963
+ 'API-KEY': 'API-KEY',
964
+ 'Use coding plan credentials or your own api-keys/providers.':
965
+ 'Use credenciais do Coding Plan ou suas próprias chaves API/provedores.',
961
966
  OpenAI: 'OpenAI',
962
967
  'Failed to login. Message: {{message}}':
963
968
  'Falha ao fazer login. Mensagem: {{message}}',
@@ -1403,4 +1408,20 @@ export default {
1403
1408
  'Use o comando /model para selecionar seu modelo preferido da lista configurada',
1404
1409
  'Supported auth types: openai, anthropic, gemini, vertex-ai, etc.':
1405
1410
  'Tipos de autenticação suportados: openai, anthropic, gemini, vertex-ai, etc.',
1411
+
1412
+ // ============================================================================
1413
+ // Auth Dialog - View Titles and Labels
1414
+ // ============================================================================
1415
+ 'Coding Plan': 'Coding Plan',
1416
+ "Paste your api key of Bailian Coding Plan and you're all set!":
1417
+ 'Cole sua chave de API do Bailian Coding Plan e pronto!',
1418
+ Custom: 'Personalizado',
1419
+ 'More instructions about configuring `modelProviders` manually.':
1420
+ 'Mais instruções sobre como configurar `modelProviders` manualmente.',
1421
+ 'Select API-KEY configuration mode:':
1422
+ 'Selecione o modo de configuração da API-KEY:',
1423
+ '(Press Escape to go back)': '(Pressione Escape para voltar)',
1424
+ '(Press Enter to submit, Escape to cancel)':
1425
+ '(Pressione Enter para enviar, Escape para cancelar)',
1426
+ 'More instructions please check:': 'Mais instruções, consulte:',
1406
1427
  };
package/locales/ru.js CHANGED
@@ -952,6 +952,11 @@ export default {
952
952
  'Terms of Services and Privacy Notice for Qwen Code':
953
953
  'Условия обслуживания и уведомление о конфиденциальности для Qwen Code',
954
954
  'Qwen OAuth': 'Qwen OAuth',
955
+ 'Login with QwenChat account to use daily free quota.':
956
+ 'Войдите с помощью аккаунта QwenChat, чтобы использовать ежедневную бесплатную квоту.',
957
+ 'API-KEY': 'API-KEY',
958
+ 'Use coding plan credentials or your own api-keys/providers.':
959
+ 'Используйте учетные данные Coding Plan или свои собственные API-ключи/провайдеры.',
955
960
  OpenAI: 'OpenAI',
956
961
  'Failed to login. Message: {{message}}':
957
962
  'Не удалось войти. Сообщение: {{message}}',
@@ -1393,4 +1398,19 @@ export default {
1393
1398
  'Используйте команду /model, чтобы выбрать предпочитаемую модель из настроенного списка',
1394
1399
  'Supported auth types: openai, anthropic, gemini, vertex-ai, etc.':
1395
1400
  'Поддерживаемые типы аутентификации: openai, anthropic, gemini, vertex-ai и др.',
1401
+
1402
+ // ============================================================================
1403
+ // Auth Dialog - View Titles and Labels
1404
+ // ============================================================================
1405
+ 'Coding Plan': 'Coding Plan',
1406
+ "Paste your api key of Bailian Coding Plan and you're all set!":
1407
+ 'Вставьте ваш API-ключ Bailian Coding Plan и всё готово!',
1408
+ Custom: 'Пользовательский',
1409
+ 'More instructions about configuring `modelProviders` manually.':
1410
+ 'Дополнительные инструкции по ручной настройке `modelProviders`.',
1411
+ 'Select API-KEY configuration mode:': 'Выберите режим конфигурации API-KEY:',
1412
+ '(Press Escape to go back)': '(Нажмите Escape для возврата)',
1413
+ '(Press Enter to submit, Escape to cancel)':
1414
+ '(Нажмите Enter для отправки, Escape для отмены)',
1415
+ 'More instructions please check:': 'Дополнительные инструкции см.:',
1396
1416
  };
package/locales/zh.js CHANGED
@@ -886,6 +886,10 @@ export default {
886
886
  'Terms of Services and Privacy Notice for Qwen Code':
887
887
  'Qwen Code 的服务条款和隐私声明',
888
888
  'Qwen OAuth': 'Qwen OAuth (免费)',
889
+ 'Login with QwenChat account to use daily free quota.':
890
+ '使用 QwenChat 账号登录,享受每日免费额度。',
891
+ 'Use coding plan credentials or your own api-keys/providers.':
892
+ '使用 Coding Plan 凭证或您自己的 API 密钥/提供商。',
889
893
  OpenAI: 'OpenAI',
890
894
  'Failed to login. Message: {{message}}': '登录失败。消息:{{message}}',
891
895
  'Authentication is enforced to be {{enforcedType}}, but you are currently using {{currentType}}.':
@@ -1224,13 +1228,18 @@ export default {
1224
1228
  '使用 /model 命令从配置列表中选择您偏好的模型',
1225
1229
  'Supported auth types: openai, anthropic, gemini, vertex-ai, etc.':
1226
1230
  '支持的认证类型:openai、anthropic、gemini、vertex-ai 等',
1231
+ 'More instructions please check:': '更多说明请查看:',
1227
1232
 
1228
1233
  // ============================================================================
1229
1234
  // Auth Dialog - View Titles and Labels
1230
1235
  // ============================================================================
1231
1236
  'API-KEY': 'API-KEY',
1232
1237
  'Coding Plan': 'Coding Plan',
1238
+ "Paste your api key of Bailian Coding Plan and you're all set!":
1239
+ '粘贴您的百炼 Coding Plan API Key,即可完成设置!',
1233
1240
  Custom: '自定义',
1241
+ 'More instructions about configuring `modelProviders` manually.':
1242
+ '关于手动配置 `modelProviders` 的更多说明。',
1234
1243
  'Select API-KEY configuration mode:': '选择 API-KEY 配置模式:',
1235
1244
  '(Press Escape to go back)': '(按 Escape 键返回)',
1236
1245
  '(Press Enter to submit, Escape to cancel)': '(按 Enter 提交,Escape 取消)',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwen-code/qwen-code",
3
- "version": "0.10.0-preview.4",
3
+ "version": "0.10.0-preview.6",
4
4
  "description": "Qwen Code - AI-powered coding assistant",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,7 +20,7 @@
20
20
  "locales"
21
21
  ],
22
22
  "config": {
23
- "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.10.0-preview.4"
23
+ "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.10.0-preview.6"
24
24
  },
25
25
  "dependencies": {},
26
26
  "optionalDependencies": {