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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/cli.js +40 -176
  2. package/package.json +2 -2
package/cli.js CHANGED
@@ -71639,17 +71639,6 @@ 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
- }
71653
71642
  function transformTextBlock(block2) {
71654
71643
  return { text: block2.text };
71655
71644
  }
@@ -71767,10 +71756,8 @@ var init_mcp_tool = __esm({
71767
71756
  displayName;
71768
71757
  trust;
71769
71758
  cliConfig;
71770
- mcpClient;
71771
- mcpTimeout;
71772
71759
  static allowlist = /* @__PURE__ */ new Set();
71773
- constructor(mcpTool, serverName, serverToolName, displayName, trust, params = {}, cliConfig, mcpClient, mcpTimeout) {
71760
+ constructor(mcpTool, serverName, serverToolName, displayName, trust, params = {}, cliConfig) {
71774
71761
  super(params);
71775
71762
  this.mcpTool = mcpTool;
71776
71763
  this.serverName = serverName;
@@ -71778,8 +71765,6 @@ var init_mcp_tool = __esm({
71778
71765
  this.displayName = displayName;
71779
71766
  this.trust = trust;
71780
71767
  this.cliConfig = cliConfig;
71781
- this.mcpClient = mcpClient;
71782
- this.mcpTimeout = mcpTimeout;
71783
71768
  }
71784
71769
  async shouldConfirmExecute(_abortSignal) {
71785
71770
  const serverAllowListKey = this.serverName;
@@ -71823,63 +71808,7 @@ var init_mcp_tool = __esm({
71823
71808
  }
71824
71809
  return false;
71825
71810
  }
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) {
71811
+ async execute(signal) {
71883
71812
  const functionCalls = [
71884
71813
  {
71885
71814
  name: this.serverToolName,
@@ -71942,9 +71871,7 @@ var init_mcp_tool = __esm({
71942
71871
  parameterSchema;
71943
71872
  trust;
71944
71873
  cliConfig;
71945
- mcpClient;
71946
- mcpTimeout;
71947
- constructor(mcpTool, serverName, serverToolName, description, parameterSchema, trust, nameOverride, cliConfig, mcpClient, mcpTimeout) {
71874
+ constructor(mcpTool, serverName, serverToolName, description, parameterSchema, trust, nameOverride, cliConfig) {
71948
71875
  super(
71949
71876
  nameOverride ?? generateValidName(`mcp__${serverName}__${serverToolName}`),
71950
71877
  `${serverToolName} (${serverName} MCP Server)`,
@@ -71953,7 +71880,7 @@ var init_mcp_tool = __esm({
71953
71880
  parameterSchema,
71954
71881
  true,
71955
71882
  // isOutputMarkdown
71956
- true
71883
+ false
71957
71884
  );
71958
71885
  this.mcpTool = mcpTool;
71959
71886
  this.serverName = serverName;
@@ -71961,17 +71888,14 @@ var init_mcp_tool = __esm({
71961
71888
  this.parameterSchema = parameterSchema;
71962
71889
  this.trust = trust;
71963
71890
  this.cliConfig = cliConfig;
71964
- this.mcpClient = mcpClient;
71965
- this.mcpTimeout = mcpTimeout;
71966
71891
  }
71967
71892
  asFullyQualifiedTool() {
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);
71893
+ return new _DiscoveredMCPTool(this.mcpTool, this.serverName, this.serverToolName, this.description, this.parameterSchema, this.trust, generateValidName(`mcp__${this.serverName}__${this.serverToolName}`), this.cliConfig);
71969
71894
  }
71970
71895
  createInvocation(params) {
71971
- return new DiscoveredMCPToolInvocation(this.mcpTool, this.serverName, this.serverToolName, this.displayName, this.trust, params, this.cliConfig, this.mcpClient, this.mcpTimeout);
71896
+ return new DiscoveredMCPToolInvocation(this.mcpTool, this.serverName, this.serverToolName, this.displayName, this.trust, params, this.cliConfig);
71972
71897
  }
71973
71898
  };
71974
- __name(wrapMcpCallToolResultAsParts, "wrapMcpCallToolResultAsParts");
71975
71899
  __name(transformTextBlock, "transformTextBlock");
71976
71900
  __name(transformImageAudioBlock, "transformImageAudioBlock");
71977
71901
  __name(transformResourceBlock, "transformResourceBlock");
@@ -156388,7 +156312,7 @@ __export(geminiContentGenerator_exports, {
156388
156312
  createGeminiContentGenerator: () => createGeminiContentGenerator
156389
156313
  });
156390
156314
  function createGeminiContentGenerator(config2, gcConfig) {
156391
- const version2 = "0.10.0-preview.3";
156315
+ const version2 = "0.10.0-preview.5";
156392
156316
  const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
156393
156317
  const baseHeaders = {
156394
156318
  "User-Agent": userAgent2
@@ -210595,26 +210519,13 @@ async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfi
210595
210519
  if (!Array.isArray(tool.functionDeclarations)) {
210596
210520
  return [];
210597
210521
  }
210598
- const mcpTimeout = mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC;
210599
210522
  const discoveredTools = [];
210600
210523
  for (const funcDecl of tool.functionDeclarations) {
210601
210524
  try {
210602
210525
  if (!isEnabled(funcDecl, mcpServerName, mcpServerConfig)) {
210603
210526
  continue;
210604
210527
  }
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
- ));
210528
+ discoveredTools.push(new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? "", funcDecl.parametersJsonSchema ?? { type: "object", properties: {} }, mcpServerConfig.trust, void 0, cliConfig));
210618
210529
  } catch (error2) {
210619
210530
  debugLogger49.error(`Error discovering tool: '${funcDecl.name}' from MCP server '${mcpServerName}': ${error2.message}`);
210620
210531
  }
@@ -238761,11 +238672,11 @@ var init_extensionManager = __esm({
238761
238672
  installMetadata.source = path62.resolve(currentDir, installMetadata.source);
238762
238673
  }
238763
238674
  let tempDir;
238764
- if (installMetadata.type === "marketplace" && installMetadata.marketplaceConfig && !installMetadata.pluginName) {
238675
+ if (installMetadata.originSource === "Claude" && installMetadata.marketplaceConfig && !installMetadata.pluginName) {
238765
238676
  const pluginName = await this.requestChoicePlugin(installMetadata.marketplaceConfig);
238766
238677
  installMetadata.pluginName = pluginName;
238767
238678
  }
238768
- if (installMetadata.type === "marketplace" || installMetadata.type === "git" || installMetadata.type === "github-release") {
238679
+ if (installMetadata.type === "git" || installMetadata.type === "github-release") {
238769
238680
  tempDir = await ExtensionStorage.createTmpDir();
238770
238681
  try {
238771
238682
  const result = await downloadFromGitHubRelease(installMetadata, tempDir);
@@ -238775,7 +238686,7 @@ var init_extensionManager = __esm({
238775
238686
  }
238776
238687
  } catch (_error) {
238777
238688
  await cloneFromGit(installMetadata, tempDir);
238778
- if (installMetadata.type === "git" || installMetadata.type === "github-release") {
238689
+ if (installMetadata.type === "github-release") {
238779
238690
  installMetadata.type = "git";
238780
238691
  }
238781
238692
  }
@@ -247825,7 +247736,20 @@ async function parseInstallSource(source2) {
247825
247736
  let installMetadata;
247826
247737
  let repoSource = repo;
247827
247738
  let marketplaceConfig = null;
247828
- if (isGitUrl(repo)) {
247739
+ let isLocalPath = false;
247740
+ try {
247741
+ await stat7(repo);
247742
+ isLocalPath = true;
247743
+ } catch {
247744
+ }
247745
+ if (isLocalPath) {
247746
+ installMetadata = {
247747
+ source: repo,
247748
+ type: "local",
247749
+ pluginName
247750
+ };
247751
+ marketplaceConfig = await readLocalMarketplaceConfig(repo);
247752
+ } else if (isGitUrl(repo)) {
247829
247753
  installMetadata = {
247830
247754
  source: repoSource,
247831
247755
  type: "git",
@@ -247849,20 +247773,9 @@ async function parseInstallSource(source2) {
247849
247773
  } catch {
247850
247774
  }
247851
247775
  } else {
247852
- try {
247853
- await stat7(repo);
247854
- installMetadata = {
247855
- source: repo,
247856
- type: "local",
247857
- pluginName
247858
- };
247859
- marketplaceConfig = await readLocalMarketplaceConfig(repo);
247860
- } catch {
247861
- throw new Error(`Install source not found: ${repo}`);
247862
- }
247776
+ throw new Error(`Install source not found: ${repo}`);
247863
247777
  }
247864
247778
  if (marketplaceConfig) {
247865
- installMetadata.type = "marketplace";
247866
247779
  installMetadata.marketplaceConfig = marketplaceConfig;
247867
247780
  installMetadata.originSource = "Claude";
247868
247781
  }
@@ -373111,7 +373024,7 @@ __name(getPackageJson, "getPackageJson");
373111
373024
  // packages/cli/src/utils/version.ts
373112
373025
  async function getCliVersion() {
373113
373026
  const pkgJson = await getPackageJson();
373114
- return "0.10.0-preview.3";
373027
+ return "0.10.0-preview.5";
373115
373028
  }
373116
373029
  __name(getCliVersion, "getCliVersion");
373117
373030
 
@@ -380634,7 +380547,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
380634
380547
 
380635
380548
  // packages/cli/src/generated/git-commit.ts
380636
380549
  init_esbuild_shims();
380637
- var GIT_COMMIT_INFO = "4ee4bd08";
380550
+ var GIT_COMMIT_INFO = "e9669164";
380638
380551
 
380639
380552
  // packages/cli/src/utils/systemInfo.ts
380640
380553
  async function getNpmVersion() {
@@ -387351,19 +387264,6 @@ async function buildSystemMessage(config2, sessionId, permissionMode, allowedBui
387351
387264
  return systemMessage;
387352
387265
  }
387353
387266
  __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");
387367
387267
  function createTaskToolProgressHandler(config2, taskToolCallId, adapter) {
387368
387268
  const previousTaskStates = /* @__PURE__ */ new Map();
387369
387269
  const emittedToolUseIds = /* @__PURE__ */ new Set();
@@ -388196,16 +388096,6 @@ ${event.value}`, null);
388196
388096
  };
388197
388097
  this.emitMessageImpl(systemMessage);
388198
388098
  }
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
- }
388209
388099
  /**
388210
388100
  * Builds a result message from options.
388211
388101
  * Helper method used by both emitResult implementations.
@@ -388585,27 +388475,6 @@ var StreamJsonOutputAdapter = class extends BaseJsonOutputAdapter {
388585
388475
  );
388586
388476
  }
388587
388477
  }
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
- }
388609
388478
  /**
388610
388479
  * Emits stream events when partial messages are enabled.
388611
388480
  * This is a private method specific to StreamJsonOutputAdapter.
@@ -389095,21 +388964,24 @@ async function runNonInteractive(config2, settings, input, prompt_id, options2 =
389095
388964
  const inputFormat = typeof config2.getInputFormat === "function" ? config2.getInputFormat() : InputFormat.TEXT;
389096
388965
  const toolCallUpdateCallback = inputFormat === InputFormat.STREAM_JSON && options2.controlService ? options2.controlService.permission.getToolCallUpdateCallback() : void 0;
389097
388966
  const isTaskTool = finalRequestInfo.name === "task";
389098
- const { handler: outputUpdateHandler } = isTaskTool ? createTaskToolProgressHandler(
388967
+ const taskToolProgress = isTaskTool ? createTaskToolProgressHandler(
389099
388968
  config2,
389100
388969
  finalRequestInfo.callId,
389101
388970
  adapter
389102
- ) : createToolProgressHandler(finalRequestInfo, adapter);
388971
+ ) : void 0;
388972
+ const taskToolProgressHandler = taskToolProgress?.handler;
389103
388973
  const toolResponse = await executeToolCall(
389104
388974
  config2,
389105
388975
  finalRequestInfo,
389106
388976
  abortController.signal,
389107
- {
389108
- outputUpdateHandler,
388977
+ taskToolProgressHandler || toolCallUpdateCallback ? {
388978
+ ...taskToolProgressHandler && {
388979
+ outputUpdateHandler: taskToolProgressHandler
388980
+ },
389109
388981
  ...toolCallUpdateCallback && {
389110
388982
  onToolCallsUpdate: toolCallUpdateCallback
389111
388983
  }
389112
- }
388984
+ } : void 0
389113
388985
  );
389114
388986
  if (toolResponse.error) {
389115
388987
  handleToolError(
@@ -412929,15 +412801,6 @@ var useResultDisplayRenderer = /* @__PURE__ */ __name((resultDisplay) => import_
412929
412801
  data: resultDisplay
412930
412802
  };
412931
412803
  }
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
- }
412941
412804
  if (typeof resultDisplay === "object" && resultDisplay !== null && "ansiOutput" in resultDisplay) {
412942
412805
  return { type: "ansi", data: resultDisplay.ansiOutput };
412943
412806
  }
@@ -415132,9 +414995,10 @@ var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1);
415132
414995
  var AppHeader = /* @__PURE__ */ __name(({ version: version2 }) => {
415133
414996
  const settings = useSettings();
415134
414997
  const config2 = useConfig();
414998
+ const uiState = useUIState();
415135
414999
  const contentGeneratorConfig = config2.getContentGeneratorConfig();
415136
415000
  const authType = contentGeneratorConfig?.authType;
415137
- const model = config2.getModel();
415001
+ const model = uiState.currentModel;
415138
415002
  const targetDir = config2.getTargetDir();
415139
415003
  const showBanner = !config2.getScreenReader();
415140
415004
  const showTips = !(settings.merged.ui?.hideTips || config2.getScreenReader());
@@ -415209,7 +415073,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
415209
415073
  ],
415210
415074
  children: (item) => item
415211
415075
  },
415212
- uiState.historyRemountKey
415076
+ `${uiState.historyRemountKey}-${uiState.currentModel}`
415213
415077
  ),
415214
415078
  /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(OverflowProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Box_default, { flexDirection: "column", children: [
415215
415079
  pendingHistoryItems.map((item, i3) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
@@ -434952,7 +434816,7 @@ var GeminiAgent = class {
434952
434816
  name: APPROVAL_MODE_INFO[mode].name,
434953
434817
  description: APPROVAL_MODE_INFO[mode].description
434954
434818
  }));
434955
- const version2 = "0.10.0-preview.3";
434819
+ const version2 = "0.10.0-preview.5";
434956
434820
  return {
434957
434821
  protocolVersion: PROTOCOL_VERSION,
434958
434822
  agentInfo: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwen-code/qwen-code",
3
- "version": "0.10.0-preview.3",
3
+ "version": "0.10.0-preview.5",
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.3"
23
+ "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.10.0-preview.5"
24
24
  },
25
25
  "dependencies": {},
26
26
  "optionalDependencies": {