@qwen-code/qwen-code 0.10.0-preview.1 → 0.10.0-preview.3

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/README.md CHANGED
@@ -36,7 +36,7 @@ Qwen Code is an open-source AI agent for the terminal, optimized for [Qwen3-Code
36
36
  #### Linux / macOS
37
37
 
38
38
  ```bash
39
- eval "$(curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh)"
39
+ curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash
40
40
  ```
41
41
 
42
42
  #### Windows (Run as Administrator CMD)
package/cli.js CHANGED
@@ -60297,8 +60297,8 @@ var require_resolve = __commonJS({
60297
60297
  return count;
60298
60298
  }
60299
60299
  __name(countKeys, "countKeys");
60300
- function getFullPath(resolver, id = "", normalize11) {
60301
- if (normalize11 !== false)
60300
+ function getFullPath(resolver, id = "", normalize12) {
60301
+ if (normalize12 !== false)
60302
60302
  id = normalizeId(id);
60303
60303
  const p2 = resolver.parse(id);
60304
60304
  return _getFullPath(resolver, p2);
@@ -61674,7 +61674,7 @@ var require_fast_uri = __commonJS({
61674
61674
  init_esbuild_shims();
61675
61675
  var { normalizeIPv6, normalizeIPv4, removeDotSegments, recomposeAuthority, normalizeComponentEncoding } = require_utils2();
61676
61676
  var SCHEMES = require_schemes();
61677
- function normalize11(uri, options2) {
61677
+ function normalize12(uri, options2) {
61678
61678
  if (typeof uri === "string") {
61679
61679
  uri = serialize2(parse14(uri, options2), options2);
61680
61680
  } else if (typeof uri === "object") {
@@ -61682,7 +61682,7 @@ var require_fast_uri = __commonJS({
61682
61682
  }
61683
61683
  return uri;
61684
61684
  }
61685
- __name(normalize11, "normalize");
61685
+ __name(normalize12, "normalize");
61686
61686
  function resolve30(baseURI, relativeURI, options2) {
61687
61687
  const schemelessOptions = Object.assign({ scheme: "null" }, options2);
61688
61688
  const resolved = resolveComponents(parse14(baseURI, schemelessOptions), parse14(relativeURI, schemelessOptions), schemelessOptions, true);
@@ -61919,7 +61919,7 @@ var require_fast_uri = __commonJS({
61919
61919
  __name(parse14, "parse");
61920
61920
  var fastUri = {
61921
61921
  SCHEMES,
61922
- normalize: normalize11,
61922
+ normalize: normalize12,
61923
61923
  resolve: resolve30,
61924
61924
  resolveComponents,
61925
61925
  equal,
@@ -67311,8 +67311,8 @@ var require_resolve2 = __commonJS({
67311
67311
  return count;
67312
67312
  }
67313
67313
  __name(countKeys, "countKeys");
67314
- function getFullPath(resolver, id = "", normalize11) {
67315
- if (normalize11 !== false)
67314
+ function getFullPath(resolver, id = "", normalize12) {
67315
+ if (normalize12 !== false)
67316
67316
  id = normalizeId(id);
67317
67317
  const p2 = resolver.parse(id);
67318
67318
  return _getFullPath(resolver, p2);
@@ -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,16 +71942,18 @@ 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
- nameOverride ?? generateValidName(serverToolName),
71949
+ nameOverride ?? generateValidName(`mcp__${serverName}__${serverToolName}`),
71877
71950
  `${serverToolName} (${serverName} MCP Server)`,
71878
71951
  description,
71879
71952
  Kind.Other,
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, `${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");
@@ -87601,13 +87677,13 @@ var require_path = __commonJS({
87601
87677
  return /^(?:\/|\w+:)/.test(path124);
87602
87678
  }, "isAbsolute")
87603
87679
  );
87604
- var normalize11 = (
87680
+ var normalize12 = (
87605
87681
  /**
87606
87682
  * Normalizes the specified path.
87607
87683
  * @param {string} path Path to normalize
87608
87684
  * @returns {string} Normalized path
87609
87685
  */
87610
- path123.normalize = /* @__PURE__ */ __name(function normalize12(path124) {
87686
+ path123.normalize = /* @__PURE__ */ __name(function normalize13(path124) {
87611
87687
  path124 = path124.replace(/\\/g, "/").replace(/\/{2,}/g, "/");
87612
87688
  var parts = path124.split("/"), absolute = isAbsolute13(path124), prefix = "";
87613
87689
  if (absolute)
@@ -87630,12 +87706,12 @@ var require_path = __commonJS({
87630
87706
  );
87631
87707
  path123.resolve = /* @__PURE__ */ __name(function resolve30(originPath, includePath, alreadyNormalized) {
87632
87708
  if (!alreadyNormalized)
87633
- includePath = normalize11(includePath);
87709
+ includePath = normalize12(includePath);
87634
87710
  if (isAbsolute13(includePath))
87635
87711
  return includePath;
87636
87712
  if (!alreadyNormalized)
87637
- originPath = normalize11(originPath);
87638
- return (originPath = originPath.replace(/(?:\/|^)[^/]+$/, "")).length ? normalize11(originPath + "/" + includePath) : includePath;
87713
+ originPath = normalize12(originPath);
87714
+ return (originPath = originPath.replace(/(?:\/|^)[^/]+$/, "")).length ? normalize12(originPath + "/" + includePath) : includePath;
87639
87715
  }, "resolve");
87640
87716
  }
87641
87717
  });
@@ -124436,7 +124512,7 @@ var require_require_in_the_middle = __commonJS({
124436
124512
  return _resolve(moduleName2, basedir);
124437
124513
  }
124438
124514
  __name(resolve30, "resolve");
124439
- var normalize11 = /([/\\]index)?(\.js)?$/;
124515
+ var normalize12 = /([/\\]index)?(\.js)?$/;
124440
124516
  var ExportsCache = class {
124441
124517
  static {
124442
124518
  __name(this, "ExportsCache");
@@ -124638,7 +124714,7 @@ var require_require_in_the_middle = __commonJS({
124638
124714
  };
124639
124715
  function resolveModuleName(stat10) {
124640
124716
  const normalizedPath = path123.sep !== "/" ? stat10.path.split(path123.sep).join("/") : stat10.path;
124641
- return path123.posix.join(stat10.name, normalizedPath).replace(normalize11, "");
124717
+ return path123.posix.join(stat10.name, normalizedPath).replace(normalize12, "");
124642
124718
  }
124643
124719
  __name(resolveModuleName, "resolveModuleName");
124644
124720
  }
@@ -133399,57 +133475,16 @@ var init_modelsConfig = __esm({
133399
133475
  detail: "baseUrl"
133400
133476
  };
133401
133477
  const gc = model.generationConfig;
133402
- this._generationConfig.samplingParams = { ...gc.samplingParams || {} };
133403
- this.generationConfigSources["samplingParams"] = {
133404
- kind: "modelProviders",
133405
- authType: model.authType,
133406
- modelId: model.id,
133407
- detail: "generationConfig.samplingParams"
133408
- };
133409
- this._generationConfig.timeout = gc.timeout;
133410
- this.generationConfigSources["timeout"] = {
133411
- kind: "modelProviders",
133412
- authType: model.authType,
133413
- modelId: model.id,
133414
- detail: "generationConfig.timeout"
133415
- };
133416
- this._generationConfig.maxRetries = gc.maxRetries;
133417
- this.generationConfigSources["maxRetries"] = {
133418
- kind: "modelProviders",
133419
- authType: model.authType,
133420
- modelId: model.id,
133421
- detail: "generationConfig.maxRetries"
133422
- };
133423
- this._generationConfig.enableCacheControl = gc.enableCacheControl;
133424
- this.generationConfigSources["enableCacheControl"] = {
133425
- kind: "modelProviders",
133426
- authType: model.authType,
133427
- modelId: model.id,
133428
- detail: "generationConfig.enableCacheControl"
133429
- };
133430
- this._generationConfig.schemaCompliance = gc.schemaCompliance;
133431
- this.generationConfigSources["schemaCompliance"] = {
133432
- kind: "modelProviders",
133433
- authType: model.authType,
133434
- modelId: model.id,
133435
- detail: "generationConfig.schemaCompliance"
133436
- };
133437
- this._generationConfig.reasoning = gc.reasoning;
133438
- this.generationConfigSources["reasoning"] = {
133439
- kind: "modelProviders",
133440
- authType: model.authType,
133441
- modelId: model.id,
133442
- detail: "generationConfig.reasoning"
133443
- };
133444
- if (gc.contextWindowSize !== void 0) {
133445
- this._generationConfig.contextWindowSize = gc.contextWindowSize;
133446
- this.generationConfigSources["contextWindowSize"] = {
133478
+ for (const field of MODEL_GENERATION_CONFIG_FIELDS) {
133479
+ this._generationConfig[field] = gc[field];
133480
+ this.generationConfigSources[field] = {
133447
133481
  kind: "modelProviders",
133448
133482
  authType: model.authType,
133449
133483
  modelId: model.id,
133450
- detail: "generationConfig.contextWindowSize"
133484
+ detail: `generationConfig.${field}`
133451
133485
  };
133452
- } else {
133486
+ }
133487
+ if (gc.contextWindowSize === void 0) {
133453
133488
  this._generationConfig.contextWindowSize = tokenLimit(model.id, "input");
133454
133489
  this.generationConfigSources["contextWindowSize"] = {
133455
133490
  kind: "computed",
@@ -145073,12 +145108,12 @@ var require_tr46 = __commonJS({
145073
145108
  TRANSITIONAL: 0,
145074
145109
  NONTRANSITIONAL: 1
145075
145110
  };
145076
- function normalize11(str2) {
145111
+ function normalize12(str2) {
145077
145112
  return str2.split("\0").map(function(s5) {
145078
145113
  return s5.normalize("NFC");
145079
145114
  }).join("\0");
145080
145115
  }
145081
- __name(normalize11, "normalize");
145116
+ __name(normalize12, "normalize");
145082
145117
  function findStatus(val) {
145083
145118
  var start = 0;
145084
145119
  var end = mappingTable.length - 1;
@@ -145157,7 +145192,7 @@ var require_tr46 = __commonJS({
145157
145192
  processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;
145158
145193
  }
145159
145194
  var error2 = false;
145160
- if (normalize11(label) !== label || label[3] === "-" && label[4] === "-" || label[0] === "-" || label[label.length - 1] === "-" || label.indexOf(".") !== -1 || label.search(combiningMarksRegex) === 0) {
145195
+ if (normalize12(label) !== label || label[3] === "-" && label[4] === "-" || label[0] === "-" || label[label.length - 1] === "-" || label.indexOf(".") !== -1 || label.search(combiningMarksRegex) === 0) {
145161
145196
  error2 = true;
145162
145197
  }
145163
145198
  var len = countSymbols(label);
@@ -145176,7 +145211,7 @@ var require_tr46 = __commonJS({
145176
145211
  __name(validateLabel, "validateLabel");
145177
145212
  function processing(domain_name, useSTD3, processing_option) {
145178
145213
  var result = mapChars(domain_name, useSTD3, processing_option);
145179
- result.string = normalize11(result.string);
145214
+ result.string = normalize12(result.string);
145180
145215
  var labels = result.string.split(".");
145181
145216
  for (var i3 = 0; i3 < labels.length; ++i3) {
145182
145217
  try {
@@ -156353,7 +156388,7 @@ __export(geminiContentGenerator_exports, {
156353
156388
  createGeminiContentGenerator: () => createGeminiContentGenerator
156354
156389
  });
156355
156390
  function createGeminiContentGenerator(config2, gcConfig) {
156356
- const version2 = "0.10.0-preview.1";
156391
+ const version2 = "0.10.0-preview.3";
156357
156392
  const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
156358
156393
  const baseHeaders = {
156359
156394
  "User-Agent": userAgent2
@@ -172357,8 +172392,8 @@ function checkCommandPermissions(command2, config2, sessionAllowlist) {
172357
172392
  isHardDenial: true
172358
172393
  };
172359
172394
  }
172360
- const normalize11 = /* @__PURE__ */ __name((cmd) => cmd.trim().replace(/\s+/g, " "), "normalize");
172361
- const commandsToValidate = splitCommands(command2).map(normalize11);
172395
+ const normalize12 = /* @__PURE__ */ __name((cmd) => cmd.trim().replace(/\s+/g, " "), "normalize");
172396
+ const commandsToValidate = splitCommands(command2).map(normalize12);
172362
172397
  const invocation = {
172363
172398
  params: { command: "" }
172364
172399
  };
@@ -172993,8 +173028,19 @@ function convertToFunctionResponse(toolName, callId, llmContent) {
172993
173028
  return [createFunctionResponsePart(callId, toolName, contentToProcess)];
172994
173029
  }
172995
173030
  if (Array.isArray(contentToProcess)) {
172996
- const functionResponse = createFunctionResponsePart(callId, toolName, "Tool execution succeeded.");
172997
- return [functionResponse, ...toParts(contentToProcess)];
173031
+ const textParts = [];
173032
+ const mediaParts = [];
173033
+ for (const part of toParts(contentToProcess)) {
173034
+ if (part.text !== void 0) {
173035
+ textParts.push(part.text);
173036
+ } else if (part.inlineData) {
173037
+ mediaParts.push({ inlineData: part.inlineData });
173038
+ } else if (part.fileData) {
173039
+ mediaParts.push({ fileData: part.fileData });
173040
+ }
173041
+ }
173042
+ const output = textParts.length > 0 ? textParts.join("\n") : "Tool execution succeeded.";
173043
+ return [createFunctionResponsePart(callId, toolName, output, mediaParts)];
172998
173044
  }
172999
173045
  if (contentToProcess.functionResponse) {
173000
173046
  if (contentToProcess.functionResponse.response?.["content"]) {
@@ -208647,8 +208693,8 @@ var init_constants6 = __esm({
208647
208693
  "packages/core/dist/src/mcp/constants.js"() {
208648
208694
  "use strict";
208649
208695
  init_esbuild_shims();
208650
- MCP_OAUTH_CLIENT_NAME = "Gemini CLI MCP Client";
208651
- MCP_SA_IMPERSONATION_CLIENT_NAME = "Gemini CLI (Service Account Impersonation)";
208696
+ MCP_OAUTH_CLIENT_NAME = "Qwen Code MCP Client";
208697
+ MCP_SA_IMPERSONATION_CLIENT_NAME = "Qwen Code (Service Account Impersonation)";
208652
208698
  OAUTH_REDIRECT_PORT = 7777;
208653
208699
  OAUTH_REDIRECT_PATH = "/oauth/callback";
208654
208700
  }
@@ -209482,7 +209528,7 @@ var init_hybrid_token_storage = __esm({
209482
209528
  init_base_token_storage();
209483
209529
  init_file_token_storage();
209484
209530
  init_types9();
209485
- FORCE_FILE_STORAGE_ENV_VAR = "GEMINI_FORCE_FILE_STORAGE";
209531
+ FORCE_FILE_STORAGE_ENV_VAR = "QWEN_CODE_FORCE_FILE_STORAGE";
209486
209532
  HybridTokenStorage = class extends BaseTokenStorage {
209487
209533
  static {
209488
209534
  __name(this, "HybridTokenStorage");
@@ -209955,12 +210001,22 @@ var init_oauth_utils = __esm({
209955
210001
  /**
209956
210002
  * Build a resource parameter for OAuth requests.
209957
210003
  *
209958
- * @param endpointUrl The endpoint URL
209959
- * @returns The resource parameter value
210004
+ * Per MCP spec and RFC 8707, the resource parameter MUST be the
210005
+ * canonical URI of the MCP server. Clients SHOULD provide the most
210006
+ * specific URI they can. The URI MUST NOT include a fragment and
210007
+ * SHOULD NOT include a query component.
210008
+ *
210009
+ * @param endpointUrl The MCP server endpoint URL
210010
+ * @returns The canonical resource URI
209960
210011
  */
209961
210012
  static buildResourceParameter(endpointUrl) {
209962
210013
  const url2 = new URL(endpointUrl);
209963
- return `${url2.protocol}//${url2.host}`;
210014
+ const path123 = url2.pathname === "/" ? "" : url2.pathname;
210015
+ let canonical = `${url2.protocol}//${url2.host}${path123}`;
210016
+ if (canonical.endsWith("/") && path123 !== "") {
210017
+ canonical = canonical.slice(0, -1);
210018
+ }
210019
+ return canonical;
209964
210020
  }
209965
210021
  };
209966
210022
  }
@@ -210096,7 +210152,7 @@ var init_oauth_provider = __esm({
210096
210152
  <html>
210097
210153
  <body>
210098
210154
  <h1>Authentication Successful!</h1>
210099
- <p>You can close this window and return to Gemini CLI.</p>
210155
+ <p>You can close this window and return to Qwen Code.</p>
210100
210156
  <script>window.close();</script>
210101
210157
  </body>
210102
210158
  </html>
@@ -210539,13 +210595,26 @@ async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfi
210539
210595
  if (!Array.isArray(tool.functionDeclarations)) {
210540
210596
  return [];
210541
210597
  }
210598
+ const mcpTimeout = mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC;
210542
210599
  const discoveredTools = [];
210543
210600
  for (const funcDecl of tool.functionDeclarations) {
210544
210601
  try {
210545
210602
  if (!isEnabled(funcDecl, mcpServerName, mcpServerConfig)) {
210546
210603
  continue;
210547
210604
  }
210548
- discoveredTools.push(new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? "", funcDecl.parametersJsonSchema ?? { type: "object", properties: {} }, mcpServerConfig.trust, void 0, cliConfig));
210605
+ discoveredTools.push(new DiscoveredMCPTool(
210606
+ mcpCallableTool,
210607
+ mcpServerName,
210608
+ funcDecl.name,
210609
+ funcDecl.description ?? "",
210610
+ funcDecl.parametersJsonSchema ?? { type: "object", properties: {} },
210611
+ mcpServerConfig.trust,
210612
+ void 0,
210613
+ cliConfig,
210614
+ mcpClient,
210615
+ // raw MCP Client for direct callTool with progress
210616
+ mcpTimeout
210617
+ ));
210549
210618
  } catch (error2) {
210550
210619
  debugLogger49.error(`Error discovering tool: '${funcDecl.name}' from MCP server '${mcpServerName}': ${error2.message}`);
210551
210620
  }
@@ -246219,7 +246288,7 @@ function asciiFuzzyIndex(input, pattern, caseSensitive) {
246219
246288
  }
246220
246289
  return firstIdx;
246221
246290
  }
246222
- function calculateScore(caseSensitive, normalize11, text, pattern, sidx, eidx, withPos) {
246291
+ function calculateScore(caseSensitive, normalize12, text, pattern, sidx, eidx, withPos) {
246223
246292
  let pidx = 0, score = 0, inGap = false, consecutive = 0, firstBonus = toShort(0);
246224
246293
  const pos2 = createPosSet(withPos);
246225
246294
  let prevCharClass = 0;
@@ -246236,7 +246305,7 @@ function calculateScore(caseSensitive, normalize11, text, pattern, sidx, eidx, w
246236
246305
  rune = String.fromCodePoint(rune).toLowerCase().codePointAt(0);
246237
246306
  }
246238
246307
  }
246239
- if (normalize11) {
246308
+ if (normalize12) {
246240
246309
  rune = normalizeRune(rune);
246241
246310
  }
246242
246311
  if (rune === pattern[pidx]) {
@@ -246646,14 +246715,14 @@ var init_fzf_es = __esm({
246646
246715
  __name(trySkip, "trySkip");
246647
246716
  __name(isAscii, "isAscii");
246648
246717
  __name(asciiFuzzyIndex, "asciiFuzzyIndex");
246649
- fuzzyMatchV2 = /* @__PURE__ */ __name((caseSensitive, normalize11, forward, input, pattern, withPos, slab2) => {
246718
+ fuzzyMatchV2 = /* @__PURE__ */ __name((caseSensitive, normalize12, forward, input, pattern, withPos, slab2) => {
246650
246719
  const M2 = pattern.length;
246651
246720
  if (M2 === 0) {
246652
246721
  return [{ start: 0, end: 0, score: 0 }, createPosSet(withPos)];
246653
246722
  }
246654
246723
  const N2 = input.length;
246655
246724
  if (slab2 !== null && N2 * M2 > slab2.i16.length) {
246656
- return fuzzyMatchV1(caseSensitive, normalize11, forward, input, pattern, withPos);
246725
+ return fuzzyMatchV1(caseSensitive, normalize12, forward, input, pattern, withPos);
246657
246726
  }
246658
246727
  const idx = asciiFuzzyIndex(input, pattern, caseSensitive);
246659
246728
  if (idx < 0) {
@@ -246686,7 +246755,7 @@ var init_fzf_es = __esm({
246686
246755
  if (!caseSensitive && charClass === 2) {
246687
246756
  char = String.fromCodePoint(char).toLowerCase().codePointAt(0);
246688
246757
  }
246689
- if (normalize11) {
246758
+ if (normalize12) {
246690
246759
  char = normalizeRune(char);
246691
246760
  }
246692
246761
  }
@@ -246827,7 +246896,7 @@ var init_fzf_es = __esm({
246827
246896
  return [{ start: j2, end: maxScorePos + 1, score: maxScore }, pos2];
246828
246897
  }, "fuzzyMatchV2");
246829
246898
  __name(calculateScore, "calculateScore");
246830
- fuzzyMatchV1 = /* @__PURE__ */ __name((caseSensitive, normalize11, forward, text, pattern, withPos, slab2) => {
246899
+ fuzzyMatchV1 = /* @__PURE__ */ __name((caseSensitive, normalize12, forward, text, pattern, withPos, slab2) => {
246831
246900
  if (pattern.length === 0) {
246832
246901
  return [{ start: 0, end: 0, score: 0 }, null];
246833
246902
  }
@@ -246846,7 +246915,7 @@ var init_fzf_es = __esm({
246846
246915
  rune = String.fromCodePoint(rune).toLowerCase().codePointAt(0);
246847
246916
  }
246848
246917
  }
246849
- if (normalize11) {
246918
+ if (normalize12) {
246850
246919
  rune = normalizeRune(rune);
246851
246920
  }
246852
246921
  const pchar = pattern[indexAt(pidx, lenPattern, forward)];
@@ -246890,7 +246959,7 @@ var init_fzf_es = __esm({
246890
246959
  }
246891
246960
  const [score, pos2] = calculateScore(
246892
246961
  caseSensitive,
246893
- normalize11,
246962
+ normalize12,
246894
246963
  text,
246895
246964
  pattern,
246896
246965
  sidx,
@@ -246901,7 +246970,7 @@ var init_fzf_es = __esm({
246901
246970
  }
246902
246971
  return [{ start: -1, end: -1, score: 0 }, null];
246903
246972
  }, "fuzzyMatchV1");
246904
- exactMatchNaive = /* @__PURE__ */ __name((caseSensitive, normalize11, forward, text, pattern, withPos, slab2) => {
246973
+ exactMatchNaive = /* @__PURE__ */ __name((caseSensitive, normalize12, forward, text, pattern, withPos, slab2) => {
246905
246974
  if (pattern.length === 0) {
246906
246975
  return [{ start: 0, end: 0, score: 0 }, null];
246907
246976
  }
@@ -246925,7 +246994,7 @@ var init_fzf_es = __esm({
246925
246994
  rune = String.fromCodePoint(rune).toLowerCase().codePointAt(0);
246926
246995
  }
246927
246996
  }
246928
- if (normalize11) {
246997
+ if (normalize12) {
246929
246998
  rune = normalizeRune(rune);
246930
246999
  }
246931
247000
  const pidx_ = indexAt(pidx, lenPattern, forward);
@@ -246962,7 +247031,7 @@ var init_fzf_es = __esm({
246962
247031
  sidx = lenRunes - (bestPos + 1);
246963
247032
  eidx = lenRunes - (bestPos - lenPattern + 1);
246964
247033
  }
246965
- const [score] = calculateScore(caseSensitive, normalize11, text, pattern, sidx, eidx, false);
247034
+ const [score] = calculateScore(caseSensitive, normalize12, text, pattern, sidx, eidx, false);
246966
247035
  return [{ start: sidx, end: eidx, score }, null];
246967
247036
  }
246968
247037
  return [{ start: -1, end: -1, score: 0 }, null];
@@ -246971,7 +247040,7 @@ var init_fzf_es = __esm({
246971
247040
  SLAB_32_SIZE = 2048;
246972
247041
  __name(makeSlab, "makeSlab");
246973
247042
  slab = makeSlab(SLAB_16_SIZE, SLAB_32_SIZE);
246974
- buildPatternForBasicMatch = /* @__PURE__ */ __name((query, casing, normalize11) => {
247043
+ buildPatternForBasicMatch = /* @__PURE__ */ __name((query, casing, normalize12) => {
246975
247044
  let caseSensitive = false;
246976
247045
  switch (casing) {
246977
247046
  case "smart-case":
@@ -246988,7 +247057,7 @@ var init_fzf_es = __esm({
246988
247057
  break;
246989
247058
  }
246990
247059
  let queryRunes = strToRunes(query);
246991
- if (normalize11) {
247060
+ if (normalize12) {
246992
247061
  queryRunes = queryRunes.map(normalizeRune);
246993
247062
  }
246994
247063
  return {
@@ -297005,8 +297074,6 @@ var init_de = __esm({
297005
297074
  // MCP Status
297006
297075
  // ============================================================================
297007
297076
  "No MCP servers configured.": "Keine MCP-Server konfiguriert.",
297008
- "Please view MCP documentation in your browser:": "Bitte sehen Sie die MCP-Dokumentation in Ihrem Browser:",
297009
- "or use the cli /docs command": "oder verwenden Sie den CLI-Befehl /docs",
297010
297077
  "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 MCP-Server werden gestartet ({{count}} werden initialisiert)...",
297011
297078
  "Note: First startup may take longer. Tool availability will update automatically.": "Hinweis: Der erste Start kann l\xE4nger dauern. Werkzeugverf\xFCgbarkeit wird automatisch aktualisiert.",
297012
297079
  "Configured MCP servers:": "Konfigurierte MCP-Server:",
@@ -298042,8 +298109,6 @@ var init_en3 = __esm({
298042
298109
  // MCP Status
298043
298110
  // ============================================================================
298044
298111
  "No MCP servers configured.": "No MCP servers configured.",
298045
- "Please view MCP documentation in your browser:": "Please view MCP documentation in your browser:",
298046
- "or use the cli /docs command": "or use the cli /docs command",
298047
298112
  "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 MCP servers are starting up ({{count}} initializing)...",
298048
298113
  "Note: First startup may take longer. Tool availability will update automatically.": "Note: First startup may take longer. Tool availability will update automatically.",
298049
298114
  "Configured MCP servers:": "Configured MCP servers:",
@@ -298877,8 +298942,6 @@ var init_ja = __esm({
298877
298942
  "Press Ctrl+D again to exit.": "Ctrl+D \u3092\u3082\u3046\u4E00\u5EA6\u62BC\u3059\u3068\u7D42\u4E86\u3057\u307E\u3059",
298878
298943
  "Press Esc again to clear.": "Esc \u3092\u3082\u3046\u4E00\u5EA6\u62BC\u3059\u3068\u30AF\u30EA\u30A2\u3057\u307E\u3059",
298879
298944
  // MCP Status
298880
- "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:",
298881
- "or use the cli /docs command": "\u307E\u305F\u306F CLI \u306E /docs \u30B3\u30DE\u30F3\u30C9\u3092\u4F7F\u7528",
298882
298945
  "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 MCP\u30B5\u30FC\u30D0\u30FC\u3092\u8D77\u52D5\u4E2D({{count}} \u521D\u671F\u5316\u4E2D)...",
298883
298946
  "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",
298884
298947
  "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)",
@@ -299760,8 +299823,6 @@ var init_pt = __esm({
299760
299823
  // MCP Status
299761
299824
  // ============================================================================
299762
299825
  "No MCP servers configured.": "Nenhum servidor MCP configurado.",
299763
- "Please view MCP documentation in your browser:": "Veja a documenta\xE7\xE3o do MCP no seu navegador:",
299764
- "or use the cli /docs command": "ou use o comando cli /docs",
299765
299826
  "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 Servidores MCP est\xE3o iniciando ({{count}} inicializando)...",
299766
299827
  "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.",
299767
299828
  "Configured MCP servers:": "Servidores MCP configurados:",
@@ -300796,8 +300857,6 @@ var init_ru = __esm({
300796
300857
  // Статус MCP
300797
300858
  // ============================================================================
300798
300859
  "No MCP servers configured.": "\u041D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043E MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u043E\u0432.",
300799
- "Please view MCP documentation in your browser:": "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0438\u0442\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044E MCP \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435:",
300800
- "or use the cli /docs command": "\u0438\u043B\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 cli /docs",
300801
300860
  "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u044B \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u044E\u0442\u0441\u044F ({{count}} \u0438\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044F)...",
300802
300861
  "Note: First startup may take longer. Tool availability will update automatically.": "\u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u041F\u0435\u0440\u0432\u044B\u0439 \u0437\u0430\u043F\u0443\u0441\u043A \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u043D\u044F\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435 \u0432\u0440\u0435\u043C\u0435\u043D\u0438. \u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E\u0441\u0442\u044C \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u0441\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438.",
300803
300862
  "Configured MCP servers:": "\u041D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0435 MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u044B:",
@@ -301834,8 +301893,6 @@ var init_zh = __esm({
301834
301893
  // MCP Status
301835
301894
  // ============================================================================
301836
301895
  "No MCP servers configured.": "\u672A\u914D\u7F6E MCP \u670D\u52A1\u5668",
301837
- "Please view MCP documentation in your browser:": "\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u67E5\u770B MCP \u6587\u6863\uFF1A",
301838
- "or use the cli /docs command": "\u6216\u4F7F\u7528 cli /docs \u547D\u4EE4",
301839
301896
  "\u23F3 MCP servers are starting up ({{count}} initializing)...": "\u23F3 MCP \u670D\u52A1\u5668\u6B63\u5728\u542F\u52A8\uFF08{{count}} \u4E2A\u6B63\u5728\u521D\u59CB\u5316\uFF09...",
301840
301897
  "Note: First startup may take longer. Tool availability will update automatically.": "\u6CE8\u610F\uFF1A\u9996\u6B21\u542F\u52A8\u53EF\u80FD\u9700\u8981\u66F4\u957F\u65F6\u95F4\u3002\u5DE5\u5177\u53EF\u7528\u6027\u5C06\u81EA\u52A8\u66F4\u65B0",
301841
301898
  "Configured MCP servers:": "\u5DF2\u914D\u7F6E\u7684 MCP \u670D\u52A1\u5668\uFF1A",
@@ -308459,9 +308516,9 @@ var require_make_warning = __commonJS({
308459
308516
  var require_normalize2 = __commonJS({
308460
308517
  "node_modules/normalize-package-data/lib/normalize.js"(exports2, module2) {
308461
308518
  init_esbuild_shims();
308462
- module2.exports = normalize11;
308519
+ module2.exports = normalize12;
308463
308520
  var fixer = require_fixer();
308464
- normalize11.fixer = fixer;
308521
+ normalize12.fixer = fixer;
308465
308522
  var makeWarning = require_make_warning();
308466
308523
  var fieldsToFix = [
308467
308524
  "name",
@@ -308484,7 +308541,7 @@ var require_normalize2 = __commonJS({
308484
308541
  return ucFirst(fieldName) + "Field";
308485
308542
  });
308486
308543
  thingsToFix = thingsToFix.concat(otherThingsToFix);
308487
- function normalize11(data, warn, strict) {
308544
+ function normalize12(data, warn, strict) {
308488
308545
  if (warn === true) {
308489
308546
  warn = null;
308490
308547
  strict = true;
@@ -308507,7 +308564,7 @@ var require_normalize2 = __commonJS({
308507
308564
  });
308508
308565
  data._id = data.name + "@" + data.version;
308509
308566
  }
308510
- __name(normalize11, "normalize");
308567
+ __name(normalize12, "normalize");
308511
308568
  function ucFirst(string4) {
308512
308569
  return string4.charAt(0).toUpperCase() + string4.slice(1);
308513
308570
  }
@@ -311054,8 +311111,8 @@ var require_resolve4 = __commonJS({
311054
311111
  return count;
311055
311112
  }
311056
311113
  __name(countKeys, "countKeys");
311057
- function getFullPath(resolver, id = "", normalize11) {
311058
- if (normalize11 !== false)
311114
+ function getFullPath(resolver, id = "", normalize12) {
311115
+ if (normalize12 !== false)
311059
311116
  id = normalizeId(id);
311060
311117
  const p2 = resolver.parse(id);
311061
311118
  return _getFullPath(resolver, p2);
@@ -353991,13 +354048,13 @@ var require_envKeyToSetting = __commonJS({
353991
354048
  module2.exports = function(x3) {
353992
354049
  const colonIndex = x3.indexOf(":");
353993
354050
  if (colonIndex === -1) {
353994
- return normalize11(x3);
354051
+ return normalize12(x3);
353995
354052
  }
353996
354053
  const firstPart = x3.substr(0, colonIndex);
353997
354054
  const secondPart = x3.substr(colonIndex + 1);
353998
- return `${normalize11(firstPart)}:${normalize11(secondPart)}`;
354055
+ return `${normalize12(firstPart)}:${normalize12(secondPart)}`;
353999
354056
  };
354000
- function normalize11(s5) {
354057
+ function normalize12(s5) {
354001
354058
  s5 = s5.toLowerCase();
354002
354059
  if (s5 === "_authtoken") return "_authToken";
354003
354060
  let r5 = s5[0];
@@ -354006,7 +354063,7 @@ var require_envKeyToSetting = __commonJS({
354006
354063
  }
354007
354064
  return r5;
354008
354065
  }
354009
- __name(normalize11, "normalize");
354066
+ __name(normalize12, "normalize");
354010
354067
  }
354011
354068
  });
354012
354069
 
@@ -364275,6 +364332,17 @@ var SETTINGS_SCHEMA = {
364275
364332
  showInDialog: false,
364276
364333
  mergeStrategy: "replace" /* REPLACE */
364277
364334
  },
364335
+ // Environment variables fallback
364336
+ env: {
364337
+ type: "object",
364338
+ label: "Environment Variables",
364339
+ category: "Advanced",
364340
+ requiresRestart: true,
364341
+ default: {},
364342
+ description: "Environment variables to set as fallback defaults. These are loaded with the lowest priority: system environment variables > .env files > settings.env.",
364343
+ showInDialog: false,
364344
+ mergeStrategy: "shallow_merge" /* SHALLOW_MERGE */
364345
+ },
364278
364346
  general: {
364279
364347
  type: "object",
364280
364348
  label: "General",
@@ -365985,24 +366053,31 @@ function createMinimalSettings() {
365985
366053
  );
365986
366054
  }
365987
366055
  __name(createMinimalSettings, "createMinimalSettings");
365988
- function findEnvFile(startDir) {
366056
+ function findEnvFile(settings, startDir) {
366057
+ const homeDir = homedir15();
366058
+ const isTrusted = isWorkspaceTrusted(settings).isTrusted;
366059
+ const userLevelPaths = /* @__PURE__ */ new Set([
366060
+ path81.normalize(path81.join(homeDir, ".env")),
366061
+ path81.normalize(path81.join(homeDir, QWEN_DIR4, ".env"))
366062
+ ]);
366063
+ const canUseEnvFile = /* @__PURE__ */ __name((filePath) => isTrusted !== false || userLevelPaths.has(path81.normalize(filePath)), "canUseEnvFile");
365989
366064
  let currentDir = path81.resolve(startDir);
365990
366065
  while (true) {
365991
366066
  const geminiEnvPath = path81.join(currentDir, QWEN_DIR4, ".env");
365992
- if (fs79.existsSync(geminiEnvPath)) {
366067
+ if (fs79.existsSync(geminiEnvPath) && canUseEnvFile(geminiEnvPath)) {
365993
366068
  return geminiEnvPath;
365994
366069
  }
365995
366070
  const envPath = path81.join(currentDir, ".env");
365996
- if (fs79.existsSync(envPath)) {
366071
+ if (fs79.existsSync(envPath) && canUseEnvFile(envPath)) {
365997
366072
  return envPath;
365998
366073
  }
365999
366074
  const parentDir = path81.dirname(currentDir);
366000
366075
  if (parentDir === currentDir || !parentDir) {
366001
- const homeGeminiEnvPath = path81.join(homedir15(), QWEN_DIR4, ".env");
366076
+ const homeGeminiEnvPath = path81.join(homeDir, QWEN_DIR4, ".env");
366002
366077
  if (fs79.existsSync(homeGeminiEnvPath)) {
366003
366078
  return homeGeminiEnvPath;
366004
366079
  }
366005
- const homeEnvPath = path81.join(homedir15(), ".env");
366080
+ const homeEnvPath = path81.join(homeDir, ".env");
366006
366081
  if (fs79.existsSync(homeEnvPath)) {
366007
366082
  return homeEnvPath;
366008
366083
  }
@@ -366027,10 +366102,7 @@ function setUpCloudShellEnvironment(envFilePath) {
366027
366102
  }
366028
366103
  __name(setUpCloudShellEnvironment, "setUpCloudShellEnvironment");
366029
366104
  function loadEnvironment(settings) {
366030
- const envFilePath = findEnvFile(process27.cwd());
366031
- if (!isWorkspaceTrusted(settings).isTrusted) {
366032
- return;
366033
- }
366105
+ const envFilePath = findEnvFile(settings, process27.cwd());
366034
366106
  if (process27.env["CLOUD_SHELL"] === "true") {
366035
366107
  setUpCloudShellEnvironment(envFilePath);
366036
366108
  }
@@ -366053,6 +366125,13 @@ function loadEnvironment(settings) {
366053
366125
  } catch (_e2) {
366054
366126
  }
366055
366127
  }
366128
+ if (settings.env) {
366129
+ for (const [key, value] of Object.entries(settings.env)) {
366130
+ if (!Object.hasOwn(process27.env, key) && typeof value === "string") {
366131
+ process27.env[key] = value;
366132
+ }
366133
+ }
366134
+ }
366056
366135
  }
366057
366136
  __name(loadEnvironment, "loadEnvironment");
366058
366137
  function loadSettings(workspaceDir = process27.cwd()) {
@@ -367652,7 +367731,7 @@ import { fileURLToPath as fileURLToPath9 } from "url";
367652
367731
  // node_modules/yargs-parser/build/lib/index.js
367653
367732
  init_esbuild_shims();
367654
367733
  import { format } from "util";
367655
- import { normalize as normalize8, resolve as resolve24 } from "path";
367734
+ import { normalize as normalize9, resolve as resolve24 } from "path";
367656
367735
 
367657
367736
  // node_modules/yargs-parser/build/lib/string-utils.js
367658
367737
  init_esbuild_shims();
@@ -368654,7 +368733,7 @@ var parser5 = new YargsParser({
368654
368733
  return env4;
368655
368734
  }, "env"),
368656
368735
  format,
368657
- normalize: normalize8,
368736
+ normalize: normalize9,
368658
368737
  resolve: resolve24,
368659
368738
  // TODO: figure out a way to combine ESM and CJS coverage, such that
368660
368739
  // we can exercise all the lines below:
@@ -372984,16 +373063,16 @@ __name(toPath2, "toPath");
372984
373063
 
372985
373064
  // node_modules/read-pkg/index.js
372986
373065
  var getPackagePath = /* @__PURE__ */ __name((cwd7) => path85.resolve(toPath2(cwd7) ?? ".", "package.json"), "getPackagePath");
372987
- var _readPackage = /* @__PURE__ */ __name((file, normalize11) => {
373066
+ var _readPackage = /* @__PURE__ */ __name((file, normalize12) => {
372988
373067
  const json2 = typeof file === "string" ? parseJson(file) : file;
372989
- if (normalize11) {
373068
+ if (normalize12) {
372990
373069
  (0, import_normalize_package_data.default)(json2);
372991
373070
  }
372992
373071
  return json2;
372993
373072
  }, "_readPackage");
372994
- async function readPackage({ cwd: cwd7, normalize: normalize11 = true } = {}) {
373073
+ async function readPackage({ cwd: cwd7, normalize: normalize12 = true } = {}) {
372995
373074
  const packageFile = await fsPromises4.readFile(getPackagePath(cwd7), "utf8");
372996
- return _readPackage(packageFile, normalize11);
373075
+ return _readPackage(packageFile, normalize12);
372997
373076
  }
372998
373077
  __name(readPackage, "readPackage");
372999
373078
 
@@ -373032,7 +373111,7 @@ __name(getPackageJson, "getPackageJson");
373032
373111
  // packages/cli/src/utils/version.ts
373033
373112
  async function getCliVersion() {
373034
373113
  const pkgJson = await getPackageJson();
373035
- return "0.10.0-preview.1";
373114
+ return "0.10.0-preview.3";
373036
373115
  }
373037
373116
  __name(getCliVersion, "getCliVersion");
373038
373117
 
@@ -373227,13 +373306,12 @@ var addCommand = {
373227
373306
  alias: "s",
373228
373307
  describe: "Configuration scope (user or project)",
373229
373308
  type: "string",
373230
- default: "project",
373309
+ default: "user",
373231
373310
  choices: ["user", "project"]
373232
373311
  }).option("transport", {
373233
373312
  alias: "t",
373234
- describe: "Transport type (stdio, sse, http)",
373313
+ describe: "Transport type (stdio, sse, http). Auto-detected from URL if not specified.",
373235
373314
  type: "string",
373236
- default: "stdio",
373237
373315
  choices: ["stdio", "sse", "http"]
373238
373316
  }).option("env", {
373239
373317
  alias: "e",
@@ -373267,6 +373345,14 @@ var addCommand = {
373267
373345
  const existingArgs = argv["args"] || [];
373268
373346
  argv["args"] = [...existingArgs, ...argv["--"]];
373269
373347
  }
373348
+ if (!argv["transport"]) {
373349
+ const commandOrUrl = argv["commandOrUrl"];
373350
+ if (commandOrUrl && (commandOrUrl.startsWith("http://") || commandOrUrl.startsWith("https://"))) {
373351
+ argv["transport"] = "http";
373352
+ } else {
373353
+ argv["transport"] = "stdio";
373354
+ }
373355
+ }
373270
373356
  }), "builder"),
373271
373357
  handler: /* @__PURE__ */ __name(async (argv) => {
373272
373358
  await addMcpServer(
@@ -373302,13 +373388,18 @@ async function removeMcpServer(name3, options2) {
373302
373388
  }
373303
373389
  delete mcpServers[name3];
373304
373390
  settings.setValue(settingsScope, "mcpServers", mcpServers);
373391
+ try {
373392
+ const tokenStorage = new MCPOAuthTokenStorage();
373393
+ await tokenStorage.deleteCredentials(name3);
373394
+ } catch {
373395
+ }
373305
373396
  writeStdoutLine(`Server "${name3}" removed from ${scope} settings.`);
373306
373397
  }
373307
373398
  __name(removeMcpServer, "removeMcpServer");
373308
373399
  var removeCommand = {
373309
373400
  command: "remove <name>",
373310
373401
  describe: "Remove a server",
373311
- builder: /* @__PURE__ */ __name((yargs) => yargs.usage("Usage: gemini mcp remove [options] <name>").positional("name", {
373402
+ builder: /* @__PURE__ */ __name((yargs) => yargs.usage("Usage: qwen mcp remove [options] <name>").positional("name", {
373312
373403
  describe: "Name of the server",
373313
373404
  type: "string",
373314
373405
  demandOption: true
@@ -373316,7 +373407,7 @@ var removeCommand = {
373316
373407
  alias: "s",
373317
373408
  describe: "Configuration scope (user or project)",
373318
373409
  type: "string",
373319
- default: "project",
373410
+ default: "user",
373320
373411
  choices: ["user", "project"]
373321
373412
  }), "builder"),
373322
373413
  handler: /* @__PURE__ */ __name(async (argv) => {
@@ -377028,7 +377119,7 @@ function normalizeOutputFormat(format4) {
377028
377119
  __name(normalizeOutputFormat, "normalizeOutputFormat");
377029
377120
  async function parseArguments() {
377030
377121
  let rawArgv = hideBin(process.argv);
377031
- if (rawArgv.length > 0 && (rawArgv[0].endsWith("/dist/qwen-cli/cli.js") || rawArgv[0].endsWith("/dist/cli.js"))) {
377122
+ if (rawArgv.length > 0 && (rawArgv[0].endsWith("/dist/qwen-cli/cli.js") || rawArgv[0].endsWith("/dist/cli.js") || rawArgv[0].endsWith("/dist/cli/cli.js"))) {
377032
377123
  rawArgv = rawArgv.slice(1);
377033
377124
  }
377034
377125
  const yargsInstance = yargs_default(rawArgv).locale("en").scriptName("qwen").usage(
@@ -380543,7 +380634,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
380543
380634
 
380544
380635
  // packages/cli/src/generated/git-commit.ts
380545
380636
  init_esbuild_shims();
380546
- var GIT_COMMIT_INFO = "11d33e3a";
380637
+ var GIT_COMMIT_INFO = "4ee4bd08";
380547
380638
 
380548
380639
  // packages/cli/src/utils/systemInfo.ts
380549
380640
  async function getNpmVersion() {
@@ -387260,6 +387351,19 @@ async function buildSystemMessage(config2, sessionId, permissionMode, allowedBui
387260
387351
  return systemMessage;
387261
387352
  }
387262
387353
  __name(buildSystemMessage, "buildSystemMessage");
387354
+ function isMcpToolProgressData(output) {
387355
+ return typeof output === "object" && output !== null && "type" in output && output.type === "mcp_tool_progress";
387356
+ }
387357
+ __name(isMcpToolProgressData, "isMcpToolProgressData");
387358
+ function createToolProgressHandler(request4, adapter) {
387359
+ const handler = /* @__PURE__ */ __name((_callId, output) => {
387360
+ if (isMcpToolProgressData(output)) {
387361
+ adapter.emitToolProgress(request4, output);
387362
+ }
387363
+ }, "handler");
387364
+ return { handler };
387365
+ }
387366
+ __name(createToolProgressHandler, "createToolProgressHandler");
387263
387367
  function createTaskToolProgressHandler(config2, taskToolCallId, adapter) {
387264
387368
  const previousTaskStates = /* @__PURE__ */ new Map();
387265
387369
  const emittedToolUseIds = /* @__PURE__ */ new Set();
@@ -388092,6 +388196,16 @@ ${event.value}`, null);
388092
388196
  };
388093
388197
  this.emitMessageImpl(systemMessage);
388094
388198
  }
388199
+ /**
388200
+ * Emits a tool progress stream event.
388201
+ * Default implementation is a no-op. StreamJsonOutputAdapter overrides this
388202
+ * to emit stream events when includePartialMessages is enabled.
388203
+ *
388204
+ * @param _request - Tool call request info
388205
+ * @param _progress - Structured MCP progress data
388206
+ */
388207
+ emitToolProgress(_request, _progress) {
388208
+ }
388095
388209
  /**
388096
388210
  * Builds a result message from options.
388097
388211
  * Helper method used by both emitResult implementations.
@@ -388471,6 +388585,27 @@ var StreamJsonOutputAdapter = class extends BaseJsonOutputAdapter {
388471
388585
  );
388472
388586
  }
388473
388587
  }
388588
+ /**
388589
+ * Emits a tool progress stream event when partial messages are enabled.
388590
+ * This overrides the no-op in BaseJsonOutputAdapter.
388591
+ */
388592
+ emitToolProgress(request4, progress) {
388593
+ if (!this.includePartialMessages) {
388594
+ return;
388595
+ }
388596
+ const partial2 = {
388597
+ type: "stream_event",
388598
+ uuid: randomUUID8(),
388599
+ session_id: this.getSessionId(),
388600
+ parent_tool_use_id: null,
388601
+ event: {
388602
+ type: "tool_progress",
388603
+ tool_use_id: request4.callId,
388604
+ content: progress
388605
+ }
388606
+ };
388607
+ this.emitMessageImpl(partial2);
388608
+ }
388474
388609
  /**
388475
388610
  * Emits stream events when partial messages are enabled.
388476
388611
  * This is a private method specific to StreamJsonOutputAdapter.
@@ -388960,24 +389095,21 @@ async function runNonInteractive(config2, settings, input, prompt_id, options2 =
388960
389095
  const inputFormat = typeof config2.getInputFormat === "function" ? config2.getInputFormat() : InputFormat.TEXT;
388961
389096
  const toolCallUpdateCallback = inputFormat === InputFormat.STREAM_JSON && options2.controlService ? options2.controlService.permission.getToolCallUpdateCallback() : void 0;
388962
389097
  const isTaskTool = finalRequestInfo.name === "task";
388963
- const taskToolProgress = isTaskTool ? createTaskToolProgressHandler(
389098
+ const { handler: outputUpdateHandler } = isTaskTool ? createTaskToolProgressHandler(
388964
389099
  config2,
388965
389100
  finalRequestInfo.callId,
388966
389101
  adapter
388967
- ) : void 0;
388968
- const taskToolProgressHandler = taskToolProgress?.handler;
389102
+ ) : createToolProgressHandler(finalRequestInfo, adapter);
388969
389103
  const toolResponse = await executeToolCall(
388970
389104
  config2,
388971
389105
  finalRequestInfo,
388972
389106
  abortController.signal,
388973
- taskToolProgressHandler || toolCallUpdateCallback ? {
388974
- ...taskToolProgressHandler && {
388975
- outputUpdateHandler: taskToolProgressHandler
388976
- },
389107
+ {
389108
+ outputUpdateHandler,
388977
389109
  ...toolCallUpdateCallback && {
388978
389110
  onToolCallsUpdate: toolCallUpdateCallback
388979
389111
  }
388980
- } : void 0
389112
+ }
388981
389113
  );
388982
389114
  if (toolResponse.error) {
388983
389115
  handleToolError(
@@ -412797,6 +412929,15 @@ var useResultDisplayRenderer = /* @__PURE__ */ __name((resultDisplay) => import_
412797
412929
  data: resultDisplay
412798
412930
  };
412799
412931
  }
412932
+ if (typeof resultDisplay === "object" && resultDisplay !== null && "type" in resultDisplay && resultDisplay.type === "mcp_tool_progress") {
412933
+ const progress = resultDisplay;
412934
+ const msg = progress.message ?? `Progress: ${progress.progress}`;
412935
+ const totalStr = progress.total != null ? `/${progress.total}` : "";
412936
+ return {
412937
+ type: "string",
412938
+ data: `\u23F3 [${progress.progress}${totalStr}] ${msg}`
412939
+ };
412940
+ }
412800
412941
  if (typeof resultDisplay === "object" && resultDisplay !== null && "ansiOutput" in resultDisplay) {
412801
412942
  return { type: "ansi", data: resultDisplay.ansiOutput };
412802
412943
  }
@@ -414372,16 +414513,7 @@ var McpStatus = /* @__PURE__ */ __name(({
414372
414513
  }) => {
414373
414514
  const serverNames = Object.keys(servers);
414374
414515
  if (serverNames.length === 0 && blockedServers.length === 0) {
414375
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Box_default, { flexDirection: "column", children: [
414376
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Text3, { children: t4("No MCP servers configured.") }),
414377
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Text3, { children: [
414378
- t4("Please view MCP documentation in your browser:"),
414379
- " ",
414380
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Text3, { color: theme.text.link, children: "https://goo.gle/gemini-cli-docs-mcp" }),
414381
- " ",
414382
- t4("or use the cli /docs command")
414383
- ] })
414384
- ] });
414516
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Box_default, { flexDirection: "column", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Text3, { children: t4("No MCP servers configured.") }) });
414385
414517
  }
414386
414518
  return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Box_default, { flexDirection: "column", children: [
414387
414519
  discoveryInProgress && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Box_default, { flexDirection: "column", marginBottom: 1, children: [
@@ -414916,8 +415048,8 @@ var Header2 = /* @__PURE__ */ __name(({
414916
415048
  availableInfoPanelWidth - infoPanelChromeWidth
414917
415049
  );
414918
415050
  const authModelText = `${formattedAuthType} | ${model}`;
414919
- const authHintText = " (/auth to change)";
414920
- const showAuthHint = infoPanelContentWidth > 0 && getCachedStringWidth(authModelText + authHintText) <= infoPanelContentWidth;
415051
+ const modelHintText = " (/model to change)";
415052
+ const showModelHint = infoPanelContentWidth > 0 && getCachedStringWidth(authModelText + modelHintText) <= infoPanelContentWidth;
414921
415053
  const tildeifiedPath = tildeifyPath(workingDirectory);
414922
415054
  const shortenedPath = shortenPath(tildeifiedPath, Math.max(3, maxPathLength));
414923
415055
  const displayPath = maxPathLength <= 0 ? "" : shortenedPath.length > maxPathLength ? shortenedPath.slice(0, maxPathLength) : shortenedPath;
@@ -414959,7 +415091,7 @@ var Header2 = /* @__PURE__ */ __name(({
414959
415091
  /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Text3, { children: " " }),
414960
415092
  /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Text3, { children: [
414961
415093
  /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Text3, { color: theme.text.secondary, children: authModelText }),
414962
- showAuthHint && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Text3, { color: theme.text.secondary, children: authHintText })
415094
+ showModelHint && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Text3, { color: theme.text.secondary, children: modelHintText })
414963
415095
  ] }),
414964
415096
  /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Text3, { color: theme.text.secondary, children: displayPath })
414965
415097
  ]
@@ -434820,7 +434952,7 @@ var GeminiAgent = class {
434820
434952
  name: APPROVAL_MODE_INFO[mode].name,
434821
434953
  description: APPROVAL_MODE_INFO[mode].description
434822
434954
  }));
434823
- const version2 = "0.10.0-preview.1";
434955
+ const version2 = "0.10.0-preview.3";
434824
434956
  return {
434825
434957
  protocolVersion: PROTOCOL_VERSION,
434826
434958
  agentInfo: {
package/locales/de.js CHANGED
@@ -1055,9 +1055,6 @@ export default {
1055
1055
  // MCP Status
1056
1056
  // ============================================================================
1057
1057
  'No MCP servers configured.': 'Keine MCP-Server konfiguriert.',
1058
- 'Please view MCP documentation in your browser:':
1059
- 'Bitte sehen Sie die MCP-Dokumentation in Ihrem Browser:',
1060
- 'or use the cli /docs command': 'oder verwenden Sie den CLI-Befehl /docs',
1061
1058
  '⏳ MCP servers are starting up ({{count}} initializing)...':
1062
1059
  '⏳ MCP-Server werden gestartet ({{count}} werden initialisiert)...',
1063
1060
  'Note: First startup may take longer. Tool availability will update automatically.':
package/locales/en.js CHANGED
@@ -1042,9 +1042,6 @@ export default {
1042
1042
  // MCP Status
1043
1043
  // ============================================================================
1044
1044
  'No MCP servers configured.': 'No MCP servers configured.',
1045
- 'Please view MCP documentation in your browser:':
1046
- 'Please view MCP documentation in your browser:',
1047
- 'or use the cli /docs command': 'or use the cli /docs command',
1048
1045
  '⏳ MCP servers are starting up ({{count}} initializing)...':
1049
1046
  '⏳ MCP servers are starting up ({{count}} initializing)...',
1050
1047
  'Note: First startup may take longer. Tool availability will update automatically.':
package/locales/ja.js CHANGED
@@ -746,9 +746,6 @@ export default {
746
746
  'Press Ctrl+D again to exit.': 'Ctrl+D をもう一度押すと終了します',
747
747
  'Press Esc again to clear.': 'Esc をもう一度押すとクリアします',
748
748
  // MCP Status
749
- 'Please view MCP documentation in your browser:':
750
- 'ブラウザでMCPドキュメントを確認してください:',
751
- 'or use the cli /docs command': 'または CLI の /docs コマンドを使用',
752
749
  '⏳ MCP servers are starting up ({{count}} initializing)...':
753
750
  '⏳ MCPサーバーを起動中({{count}} 初期化中)...',
754
751
  'Note: First startup may take longer. Tool availability will update automatically.':
package/locales/pt.js CHANGED
@@ -1065,9 +1065,6 @@ export default {
1065
1065
  // MCP Status
1066
1066
  // ============================================================================
1067
1067
  'No MCP servers configured.': 'Nenhum servidor MCP configurado.',
1068
- 'Please view MCP documentation in your browser:':
1069
- 'Veja a documentação do MCP no seu navegador:',
1070
- 'or use the cli /docs command': 'ou use o comando cli /docs',
1071
1068
  '⏳ MCP servers are starting up ({{count}} initializing)...':
1072
1069
  '⏳ Servidores MCP estão iniciando ({{count}} inicializando)...',
1073
1070
  'Note: First startup may take longer. Tool availability will update automatically.':
package/locales/ru.js CHANGED
@@ -1057,9 +1057,6 @@ export default {
1057
1057
  // Статус MCP
1058
1058
  // ============================================================================
1059
1059
  'No MCP servers configured.': 'Не настроено MCP-серверов.',
1060
- 'Please view MCP documentation in your browser:':
1061
- 'Пожалуйста, просмотрите документацию MCP в браузере:',
1062
- 'or use the cli /docs command': 'или используйте команду cli /docs',
1063
1060
  '⏳ MCP servers are starting up ({{count}} initializing)...':
1064
1061
  '⏳ MCP-серверы запускаются ({{count}} инициализируется)...',
1065
1062
  'Note: First startup may take longer. Tool availability will update automatically.':
package/locales/zh.js CHANGED
@@ -985,9 +985,6 @@ export default {
985
985
  // MCP Status
986
986
  // ============================================================================
987
987
  'No MCP servers configured.': '未配置 MCP 服务器',
988
- 'Please view MCP documentation in your browser:':
989
- '请在浏览器中查看 MCP 文档:',
990
- 'or use the cli /docs command': '或使用 cli /docs 命令',
991
988
  '⏳ MCP servers are starting up ({{count}} initializing)...':
992
989
  '⏳ MCP 服务器正在启动({{count}} 个正在初始化)...',
993
990
  'Note: First startup may take longer. Tool availability will update automatically.':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwen-code/qwen-code",
3
- "version": "0.10.0-preview.1",
3
+ "version": "0.10.0-preview.3",
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.1"
23
+ "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.10.0-preview.3"
24
24
  },
25
25
  "dependencies": {},
26
26
  "optionalDependencies": {