@opensumi/ide-ai-native 3.8.3-next-1745805174.0 → 3.8.3-next-1745835516.0

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 (93) hide show
  1. package/lib/browser/ai-core.contribution.d.ts +2 -0
  2. package/lib/browser/ai-core.contribution.d.ts.map +1 -1
  3. package/lib/browser/ai-core.contribution.js +58 -12
  4. package/lib/browser/ai-core.contribution.js.map +1 -1
  5. package/lib/browser/components/ChatInput.js +1 -1
  6. package/lib/browser/components/ChatInput.js.map +1 -1
  7. package/lib/browser/components/ChatMentionInput.js +1 -1
  8. package/lib/browser/components/ChatMentionInput.js.map +1 -1
  9. package/lib/browser/components/ChatToolResult.module.less +0 -2
  10. package/lib/browser/components/mention-input/mention-input.d.ts.map +1 -1
  11. package/lib/browser/components/mention-input/mention-input.js +9 -7
  12. package/lib/browser/components/mention-input/mention-input.js.map +1 -1
  13. package/lib/browser/index.d.ts.map +1 -1
  14. package/lib/browser/index.js +15 -0
  15. package/lib/browser/index.js.map +1 -1
  16. package/lib/browser/mcp/config/components/mcp-config.module.less +4 -1
  17. package/lib/browser/mcp/config/components/mcp-config.view.d.ts.map +1 -1
  18. package/lib/browser/mcp/config/components/mcp-config.view.js +27 -119
  19. package/lib/browser/mcp/config/components/mcp-config.view.js.map +1 -1
  20. package/lib/browser/mcp/config/components/mcp-server-form.d.ts +1 -1
  21. package/lib/browser/mcp/config/components/mcp-server-form.d.ts.map +1 -1
  22. package/lib/browser/mcp/config/components/mcp-server-form.js +8 -8
  23. package/lib/browser/mcp/config/components/mcp-server-form.js.map +1 -1
  24. package/lib/browser/mcp/config/mcp-config.commands.d.ts +11 -4
  25. package/lib/browser/mcp/config/mcp-config.commands.d.ts.map +1 -1
  26. package/lib/browser/mcp/config/mcp-config.commands.js +23 -6
  27. package/lib/browser/mcp/config/mcp-config.commands.js.map +1 -1
  28. package/lib/browser/mcp/config/mcp-config.contribution.d.ts +4 -1
  29. package/lib/browser/mcp/config/mcp-config.contribution.d.ts.map +1 -1
  30. package/lib/browser/mcp/config/mcp-config.contribution.js +20 -1
  31. package/lib/browser/mcp/config/mcp-config.contribution.js.map +1 -1
  32. package/lib/browser/mcp/config/mcp-config.service.d.ts +30 -0
  33. package/lib/browser/mcp/config/mcp-config.service.d.ts.map +1 -0
  34. package/lib/browser/mcp/config/mcp-config.service.js +236 -0
  35. package/lib/browser/mcp/config/mcp-config.service.js.map +1 -0
  36. package/lib/browser/mcp/mcp-folder-preference-provider.d.ts +6 -0
  37. package/lib/browser/mcp/mcp-folder-preference-provider.d.ts.map +1 -0
  38. package/lib/browser/mcp/mcp-folder-preference-provider.js +29 -0
  39. package/lib/browser/mcp/mcp-folder-preference-provider.js.map +1 -0
  40. package/lib/browser/mcp/mcp-preferences-contribution.d.ts +15 -0
  41. package/lib/browser/mcp/mcp-preferences-contribution.d.ts.map +1 -0
  42. package/lib/browser/mcp/mcp-preferences-contribution.js +49 -0
  43. package/lib/browser/mcp/mcp-preferences-contribution.js.map +1 -0
  44. package/lib/browser/mcp/mcp-preferences.d.ts +6 -0
  45. package/lib/browser/mcp/mcp-preferences.d.ts.map +1 -0
  46. package/lib/browser/mcp/mcp-preferences.js +47 -0
  47. package/lib/browser/mcp/mcp-preferences.js.map +1 -0
  48. package/lib/browser/preferences/schema.d.ts.map +1 -1
  49. package/lib/browser/preferences/schema.js +3 -0
  50. package/lib/browser/preferences/schema.js.map +1 -1
  51. package/lib/common/mcp-server-manager.d.ts +2 -1
  52. package/lib/common/mcp-server-manager.d.ts.map +1 -1
  53. package/lib/common/mcp-server-manager.js +2 -1
  54. package/lib/common/mcp-server-manager.js.map +1 -1
  55. package/lib/common/types.d.ts +1 -1
  56. package/lib/common/types.d.ts.map +1 -1
  57. package/lib/node/mcp/sumi-mcp-server.d.ts +3 -3
  58. package/lib/node/mcp/sumi-mcp-server.js +1 -1
  59. package/lib/node/mcp/sumi-mcp-server.js.map +1 -1
  60. package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
  61. package/lib/node/mcp-server-manager-impl.js +9 -4
  62. package/lib/node/mcp-server-manager-impl.js.map +1 -1
  63. package/lib/node/mcp-server.sse.d.ts +10 -37
  64. package/lib/node/mcp-server.sse.d.ts.map +1 -1
  65. package/lib/node/mcp-server.sse.js +43 -15
  66. package/lib/node/mcp-server.sse.js.map +1 -1
  67. package/lib/node/mcp-server.stdio.d.ts +7 -34
  68. package/lib/node/mcp-server.stdio.d.ts.map +1 -1
  69. package/lib/node/mcp-server.stdio.js +27 -2
  70. package/lib/node/mcp-server.stdio.js.map +1 -1
  71. package/package.json +24 -24
  72. package/src/browser/ai-core.contribution.ts +71 -16
  73. package/src/browser/components/ChatInput.tsx +2 -2
  74. package/src/browser/components/ChatMentionInput.tsx +2 -2
  75. package/src/browser/components/ChatToolResult.module.less +0 -2
  76. package/src/browser/components/mention-input/mention-input.tsx +27 -23
  77. package/src/browser/index.ts +16 -0
  78. package/src/browser/mcp/config/components/mcp-config.module.less +4 -1
  79. package/src/browser/mcp/config/components/mcp-config.view.tsx +37 -125
  80. package/src/browser/mcp/config/components/mcp-server-form.tsx +10 -10
  81. package/src/browser/mcp/config/mcp-config.commands.ts +22 -6
  82. package/src/browser/mcp/config/mcp-config.contribution.ts +24 -2
  83. package/src/browser/mcp/config/mcp-config.service.ts +285 -0
  84. package/src/browser/mcp/mcp-folder-preference-provider.ts +23 -0
  85. package/src/browser/mcp/mcp-preferences-contribution.ts +62 -0
  86. package/src/browser/mcp/mcp-preferences.ts +48 -0
  87. package/src/browser/preferences/schema.ts +3 -0
  88. package/src/common/mcp-server-manager.ts +3 -1
  89. package/src/common/types.ts +1 -1
  90. package/src/node/mcp/sumi-mcp-server.ts +1 -1
  91. package/src/node/mcp-server-manager-impl.ts +8 -4
  92. package/src/node/mcp-server.sse.ts +41 -14
  93. package/src/node/mcp-server.stdio.ts +26 -2
@@ -11,19 +11,20 @@ import { SSEClientTransportOptions } from '../common/types';
11
11
  global.EventSource = EventSource as any;
12
12
  export class SSEMCPServer implements IMCPServer {
13
13
  private name: string;
14
- public serverHost: string;
14
+ public url: string;
15
15
  private transportOptions?: SSEClientTransportOptions;
16
16
  private client: Client;
17
17
  private started: boolean = false;
18
+ private toolNameMap: Map<string, string> = new Map(); // Map sanitized tool names to original names
18
19
 
19
20
  constructor(
20
21
  name: string,
21
- serverHost: string,
22
+ url: string,
22
23
  private readonly logger?: ILogger,
23
24
  private readonly options?: SSEClientTransportOptions,
24
25
  ) {
25
26
  this.name = name;
26
- this.serverHost = serverHost;
27
+ this.url = url;
27
28
  this.transportOptions = options;
28
29
  }
29
30
 
@@ -43,11 +44,11 @@ export class SSEMCPServer implements IMCPServer {
43
44
  if (this.started) {
44
45
  return;
45
46
  }
46
- this.logger?.log(`Starting server "${this.name}" with serverHost: ${this.serverHost}`);
47
+ this.logger?.log(`Starting server "${this.name}" with url: ${this.url}`);
47
48
 
48
49
  const SSEClientTransport = (await import('@modelcontextprotocol/sdk/client/sse.js')).SSEClientTransport;
49
50
 
50
- const transport = new SSEClientTransport(new URL(this.serverHost), this.transportOptions);
51
+ const transport = new SSEClientTransport(new URL(this.url), this.transportOptions);
51
52
 
52
53
  transport.onerror = (error) => {
53
54
  this.logger?.error('Transport Error:', error);
@@ -66,8 +67,13 @@ export class SSEMCPServer implements IMCPServer {
66
67
  this.logger?.error('Error in MCP client:', error);
67
68
  };
68
69
 
69
- await this.client.connect(transport);
70
- this.started = true;
70
+ try {
71
+ await this.client.connect(transport);
72
+ this.started = true;
73
+ } catch (error) {
74
+ this.logger?.error(`Error in startServer for ${this.name}:`, error);
75
+ throw error;
76
+ }
71
77
  }
72
78
 
73
79
  async callTool(toolName: string, toolCallId: string, arg_string: string) {
@@ -76,13 +82,15 @@ export class SSEMCPServer implements IMCPServer {
76
82
  args = JSON.parse(arg_string);
77
83
  } catch (error) {
78
84
  this.logger?.error(
79
- `Failed to parse arguments for calling tool "${toolName}" in MCP server "${this.name}" with serverHost "${this.serverHost}".
85
+ `Failed to parse arguments for calling tool "${toolName}" in MCP server "${this.name}" with url "${this.url}".
80
86
  Invalid JSON: ${arg_string}`,
81
87
  error,
82
88
  );
83
89
  }
90
+ // Convert sanitized tool name back to original name if it exists in the map
91
+ const originalToolName = this.toolNameMap.get(toolName) || toolName;
84
92
  const params = {
85
- name: toolName,
93
+ name: originalToolName,
86
94
  arguments: args,
87
95
  toolCallId,
88
96
  };
@@ -90,13 +98,32 @@ export class SSEMCPServer implements IMCPServer {
90
98
  }
91
99
 
92
100
  async getTools() {
93
- const tools = await this.client.listTools();
94
- this.logger?.log(`Got tools from MCP server "${this.name}" with serverHost "${this.serverHost}":`, tools);
95
- return tools;
101
+ const originalTools = await this.client.listTools();
102
+ this.toolNameMap.clear();
103
+ const toolsArray = originalTools.tools || [];
104
+ const sanitizedToolsArray = toolsArray.map((tool) => {
105
+ const originalName = tool.name;
106
+ // Remove Chinese characters from the tool name
107
+ // Claude 3.5+ Sonnet 不支持中文 Tool Name
108
+ const sanitizedName = originalName.replace(/[\u4e00-\u9fa5]/g, '');
109
+ // If the name changed, store the mapping
110
+ if (sanitizedName !== originalName) {
111
+ this.toolNameMap.set(sanitizedName, originalName);
112
+ return { ...tool, name: sanitizedName };
113
+ }
114
+ return tool;
115
+ });
116
+ const sanitizedTools = {
117
+ ...originalTools,
118
+ tools: sanitizedToolsArray,
119
+ };
120
+ this.logger?.log(`Got tools from MCP server "${this.name}" with url "${this.url}":`, sanitizedTools);
121
+ this.logger?.log('Tool name mapping: ', Object.fromEntries(this.toolNameMap));
122
+ return sanitizedTools;
96
123
  }
97
124
 
98
- update(serverHost: string): void {
99
- this.serverHost = serverHost;
125
+ update(url: string): void {
126
+ this.url = url;
100
127
  }
101
128
 
102
129
  async stop(): Promise<void> {
@@ -14,6 +14,7 @@ export class StdioMCPServer implements IMCPServer {
14
14
  private client: Client;
15
15
  private env?: { [key: string]: string };
16
16
  private started: boolean = false;
17
+ private toolNameMap: Map<string, string> = new Map(); // Map sanitized tool names to original names
17
18
 
18
19
  constructor(
19
20
  name: string,
@@ -95,8 +96,10 @@ export class StdioMCPServer implements IMCPServer {
95
96
  error,
96
97
  );
97
98
  }
99
+ // Convert sanitized tool name back to original name if it exists in the map
100
+ const originalToolName = this.toolNameMap.get(toolName) || toolName;
98
101
  const params = {
99
- name: toolName,
102
+ name: originalToolName,
100
103
  arguments: args,
101
104
  toolCallId,
102
105
  };
@@ -104,7 +107,28 @@ export class StdioMCPServer implements IMCPServer {
104
107
  }
105
108
 
106
109
  async getTools() {
107
- return await this.client.listTools();
110
+ const originalTools = await this.client.listTools();
111
+ this.toolNameMap.clear();
112
+ // Process tool names to remove Chinese characters and create mapping
113
+ const toolsArray = originalTools.tools || [];
114
+ const sanitizedToolsArray = toolsArray.map((tool) => {
115
+ const originalName = tool.name;
116
+ // Remove Chinese characters from the tool name
117
+ // Claude 3.5+ Sonnet 不支持中文 Tool Name
118
+ const sanitizedName = originalName.replace(/[\u4e00-\u9fa5]/g, '');
119
+ if (sanitizedName !== originalName) {
120
+ this.toolNameMap.set(sanitizedName, originalName);
121
+ return { ...tool, name: sanitizedName };
122
+ }
123
+ return tool;
124
+ });
125
+ const sanitizedTools = {
126
+ ...originalTools,
127
+ tools: sanitizedToolsArray,
128
+ };
129
+ this.logger?.log(`Got tools from MCP server "${this.name}":`, sanitizedTools);
130
+ this.logger?.log('Tool name mapping: ', Object.fromEntries(this.toolNameMap));
131
+ return sanitizedTools;
108
132
  }
109
133
 
110
134
  update(command: string, args?: string[], env?: { [key: string]: string }): void {