@opensumi/ide-ai-native 3.8.1-next-1740452912.0 → 3.8.1-next-1740463566.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.
- package/lib/browser/ai-core.contribution.d.ts.map +1 -1
- package/lib/browser/ai-core.contribution.js +10 -3
- package/lib/browser/ai-core.contribution.js.map +1 -1
- package/lib/browser/chat/chat-manager.service.d.ts +5 -0
- package/lib/browser/chat/chat-manager.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-manager.service.js +18 -1
- package/lib/browser/chat/chat-manager.service.js.map +1 -1
- package/lib/browser/chat/chat-model.d.ts +2 -0
- package/lib/browser/chat/chat-model.d.ts.map +1 -1
- package/lib/browser/chat/chat-model.js +8 -2
- package/lib/browser/chat/chat-model.js.map +1 -1
- package/lib/browser/chat/chat.view.d.ts.map +1 -1
- package/lib/browser/chat/chat.view.js +31 -8
- package/lib/browser/chat/chat.view.js.map +1 -1
- package/lib/browser/components/ChatContext/index.js +2 -2
- package/lib/browser/components/ChatContext/index.js.map +1 -1
- package/lib/browser/context/llm-context.service.d.ts +16 -5
- package/lib/browser/context/llm-context.service.d.ts.map +1 -1
- package/lib/browser/context/llm-context.service.js +78 -47
- package/lib/browser/context/llm-context.service.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +4 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/mcp/config/components/mcp-config.module.less +178 -0
- package/lib/browser/mcp/config/components/mcp-config.view.d.ts +3 -0
- package/lib/browser/mcp/config/components/mcp-config.view.d.ts.map +1 -0
- package/lib/browser/mcp/config/components/mcp-config.view.js +150 -0
- package/lib/browser/mcp/config/components/mcp-config.view.js.map +1 -0
- package/lib/browser/mcp/config/components/mcp-server-form.d.ts +16 -0
- package/lib/browser/mcp/config/components/mcp-server-form.d.ts.map +1 -0
- package/lib/browser/mcp/config/components/mcp-server-form.js +84 -0
- package/lib/browser/mcp/config/components/mcp-server-form.js.map +1 -0
- package/lib/browser/mcp/config/components/mcp-server-form.module.less +78 -0
- package/lib/browser/mcp/config/mcp-config.commands.d.ts +10 -0
- package/lib/browser/mcp/config/mcp-config.commands.d.ts.map +1 -0
- package/lib/browser/mcp/config/mcp-config.commands.js +35 -0
- package/lib/browser/mcp/config/mcp-config.commands.js.map +1 -0
- package/lib/browser/mcp/config/mcp-config.contribution.d.ts +16 -0
- package/lib/browser/mcp/config/mcp-config.contribution.d.ts.map +1 -0
- package/lib/browser/mcp/config/mcp-config.contribution.js +62 -0
- package/lib/browser/mcp/config/mcp-config.contribution.js.map +1 -0
- package/lib/browser/mcp/mcp-server-proxy.service.d.ts +6 -0
- package/lib/browser/mcp/mcp-server-proxy.service.d.ts.map +1 -1
- package/lib/browser/mcp/mcp-server-proxy.service.js +10 -1
- package/lib/browser/mcp/mcp-server-proxy.service.js.map +1 -1
- package/lib/browser/mcp/mcp-server.feature.registry.d.ts.map +1 -1
- package/lib/browser/mcp/mcp-server.feature.registry.js +3 -2
- package/lib/browser/mcp/mcp-server.feature.registry.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/RunCommand.d.ts.map +1 -1
- package/lib/browser/mcp/tools/handlers/RunCommand.js +2 -0
- package/lib/browser/mcp/tools/handlers/RunCommand.js.map +1 -1
- package/lib/browser/preferences/schema.d.ts.map +1 -1
- package/lib/browser/preferences/schema.js +16 -0
- package/lib/browser/preferences/schema.js.map +1 -1
- package/lib/common/index.d.ts +8 -1
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +3 -1
- package/lib/common/index.js.map +1 -1
- package/lib/common/llm-context.d.ts +12 -9
- package/lib/common/llm-context.d.ts.map +1 -1
- package/lib/common/llm-context.js.map +1 -1
- package/lib/common/mcp-server-manager.d.ts +17 -1
- package/lib/common/mcp-server-manager.d.ts.map +1 -1
- package/lib/common/mcp-server-manager.js.map +1 -1
- package/lib/common/prompts/context-prompt-provider.d.ts +2 -3
- package/lib/common/prompts/context-prompt-provider.d.ts.map +1 -1
- package/lib/common/prompts/context-prompt-provider.js +21 -22
- package/lib/common/prompts/context-prompt-provider.js.map +1 -1
- package/lib/common/tool-invocation-registry.d.ts +2 -2
- package/lib/common/tool-invocation-registry.d.ts.map +1 -1
- package/lib/common/tool-invocation-registry.js +1 -1
- package/lib/common/tool-invocation-registry.js.map +1 -1
- package/lib/common/types.d.ts +6 -0
- package/lib/common/types.d.ts.map +1 -1
- package/lib/common/utils.d.ts.map +1 -1
- package/lib/common/utils.js +2 -1
- package/lib/common/utils.js.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.d.ts +17 -3
- package/lib/node/mcp/sumi-mcp-server.d.ts.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.js +59 -6
- package/lib/node/mcp/sumi-mcp-server.js.map +1 -1
- package/lib/node/mcp-server-manager-impl.d.ts +4 -3
- package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
- package/lib/node/mcp-server-manager-impl.js +26 -6
- package/lib/node/mcp-server-manager-impl.js.map +1 -1
- package/lib/node/mcp-server.d.ts +5 -16
- package/lib/node/mcp-server.d.ts.map +1 -1
- package/lib/node/mcp-server.js +12 -6
- package/lib/node/mcp-server.js.map +1 -1
- package/lib/node/openai/openai-language-model.d.ts +4 -3
- package/lib/node/openai/openai-language-model.d.ts.map +1 -1
- package/lib/node/openai/openai-language-model.js +3 -2
- package/lib/node/openai/openai-language-model.js.map +1 -1
- package/package.json +27 -27
- package/src/browser/ai-core.contribution.ts +13 -4
- package/src/browser/chat/chat-manager.service.ts +17 -1
- package/src/browser/chat/chat-model.ts +18 -3
- package/src/browser/chat/chat.view.tsx +48 -8
- package/src/browser/components/ChatContext/index.tsx +2 -2
- package/src/browser/context/llm-context.service.ts +90 -54
- package/src/browser/index.ts +4 -0
- package/src/browser/mcp/config/components/mcp-config.module.less +178 -0
- package/src/browser/mcp/config/components/mcp-config.view.tsx +215 -0
- package/src/browser/mcp/config/components/mcp-server-form.module.less +78 -0
- package/src/browser/mcp/config/components/mcp-server-form.tsx +144 -0
- package/src/browser/mcp/config/mcp-config.commands.ts +29 -0
- package/src/browser/mcp/config/mcp-config.contribution.ts +65 -0
- package/src/browser/mcp/mcp-server-proxy.service.ts +14 -2
- package/src/browser/mcp/mcp-server.feature.registry.ts +3 -2
- package/src/browser/mcp/tools/handlers/RunCommand.ts +2 -0
- package/src/browser/preferences/schema.ts +16 -0
- package/src/common/index.ts +7 -1
- package/src/common/llm-context.ts +10 -4
- package/src/common/mcp-server-manager.ts +17 -1
- package/src/common/prompts/context-prompt-provider.ts +26 -28
- package/src/common/tool-invocation-registry.ts +2 -2
- package/src/common/types.ts +6 -0
- package/src/common/utils.ts +3 -1
- package/src/node/mcp/sumi-mcp-server.ts +67 -9
- package/src/node/mcp-server-manager-impl.ts +30 -9
- package/src/node/mcp-server.ts +11 -14
- package/src/node/openai/openai-language-model.ts +7 -4
|
@@ -5,6 +5,9 @@ const utils_1 = require("../common/utils");
|
|
|
5
5
|
const mcp_server_1 = require("./mcp-server");
|
|
6
6
|
// 这应该是 Browser Tab 维度的,每个 Tab 对应一个 MCPServerManagerImpl
|
|
7
7
|
class MCPServerManagerImpl {
|
|
8
|
+
getServers() {
|
|
9
|
+
return this.servers;
|
|
10
|
+
}
|
|
8
11
|
constructor(toolInvocationRegistryManager, logger) {
|
|
9
12
|
this.toolInvocationRegistryManager = toolInvocationRegistryManager;
|
|
10
13
|
this.logger = logger;
|
|
@@ -13,13 +16,19 @@ class MCPServerManagerImpl {
|
|
|
13
16
|
setClientId(clientId) {
|
|
14
17
|
this.clientId = clientId;
|
|
15
18
|
}
|
|
19
|
+
unregisterServerTools(serverName) {
|
|
20
|
+
const registry = this.toolInvocationRegistryManager.getRegistry(this.clientId);
|
|
21
|
+
registry.unregisterProviderTools(serverName);
|
|
22
|
+
}
|
|
16
23
|
async stopServer(serverName) {
|
|
17
24
|
const server = this.servers.get(serverName);
|
|
18
25
|
if (!server) {
|
|
19
26
|
throw new Error(`MCP server "${serverName}" not found.`);
|
|
20
27
|
}
|
|
21
|
-
server.stop();
|
|
22
|
-
|
|
28
|
+
await server.stop();
|
|
29
|
+
// 停止服务器后,需要从注册表中移除该服务器的所有工具
|
|
30
|
+
this.unregisterServerTools(serverName);
|
|
31
|
+
this.logger.log(`MCP server "${serverName}" stopped and tools unregistered.`);
|
|
23
32
|
}
|
|
24
33
|
async getStartedServers() {
|
|
25
34
|
const startedServers = [];
|
|
@@ -43,6 +52,7 @@ class MCPServerManagerImpl {
|
|
|
43
52
|
throw new Error(`MCP server "${serverName}" not found.`);
|
|
44
53
|
}
|
|
45
54
|
await server.start();
|
|
55
|
+
await this.registerTools(serverName);
|
|
46
56
|
}
|
|
47
57
|
async getServerNames() {
|
|
48
58
|
return Array.from(this.servers.keys());
|
|
@@ -95,29 +105,39 @@ class MCPServerManagerImpl {
|
|
|
95
105
|
existingServer.update(command, args, env);
|
|
96
106
|
}
|
|
97
107
|
else {
|
|
98
|
-
const newServer = new mcp_server_1.
|
|
108
|
+
const newServer = new mcp_server_1.StdioMCPServerImpl(name, command, args, env, this.logger);
|
|
99
109
|
this.servers.set(name, newServer);
|
|
100
110
|
}
|
|
101
111
|
}
|
|
102
112
|
addOrUpdateServerDirectly(server) {
|
|
103
113
|
this.servers.set(server.getServerName(), server);
|
|
104
114
|
}
|
|
105
|
-
|
|
115
|
+
// enabled 为 true 时,会自动启动内置服务器, 并注册工具
|
|
116
|
+
async initBuiltinServer(builtinMCPServer, enabled = true) {
|
|
106
117
|
this.addOrUpdateServerDirectly(builtinMCPServer);
|
|
107
|
-
|
|
118
|
+
if (enabled) {
|
|
119
|
+
await builtinMCPServer.start();
|
|
120
|
+
await this.registerTools(builtinMCPServer.getServerName());
|
|
121
|
+
}
|
|
108
122
|
}
|
|
109
123
|
async addExternalMCPServers(servers) {
|
|
110
124
|
for (const server of servers) {
|
|
111
125
|
this.addOrUpdateServer(server);
|
|
126
|
+
if (!server.enabled) {
|
|
127
|
+
// 如果是 enabled 为 false 的 server,则不进行启动
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
112
130
|
await this.startServer(server.name);
|
|
113
|
-
await this.registerTools(server.name);
|
|
114
131
|
}
|
|
115
132
|
}
|
|
116
133
|
removeServer(name) {
|
|
117
134
|
const server = this.servers.get(name);
|
|
118
135
|
if (server) {
|
|
119
136
|
server.stop();
|
|
137
|
+
// 移除服务器时,也需要从注册表中移除该服务器的所有工具
|
|
138
|
+
this.unregisterServerTools(name);
|
|
120
139
|
this.servers.delete(name);
|
|
140
|
+
this.logger.log(`MCP server "${name}" removed and tools unregistered.`);
|
|
121
141
|
}
|
|
122
142
|
else {
|
|
123
143
|
this.logger.warn(`MCP server "${name}" not found.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-manager-impl.js","sourceRoot":"","sources":["../../src/node/mcp-server-manager-impl.ts"],"names":[],"mappings":";;;AAMA,2CAA8C;AAG9C,
|
|
1
|
+
{"version":3,"file":"mcp-server-manager-impl.js","sourceRoot":"","sources":["../../src/node/mcp-server-manager-impl.ts"],"names":[],"mappings":"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"}
|
package/lib/node/mcp-server.d.ts
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
1
|
import { ILogger } from '@opensumi/ide-core-common';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
start(): Promise<void>;
|
|
6
|
-
getServerName(): string;
|
|
7
|
-
callTool(toolName: string, toolCallId: string, arg_string: string): ReturnType<Client['callTool']>;
|
|
8
|
-
getTools(): ReturnType<Client['listTools']>;
|
|
9
|
-
update(command: string, args?: string[], env?: {
|
|
10
|
-
[key: string]: string;
|
|
11
|
-
}): void;
|
|
12
|
-
stop(): void;
|
|
13
|
-
}
|
|
14
|
-
export declare class MCPServerImpl implements IMCPServer {
|
|
2
|
+
import { IMCPServer } from '../common/mcp-server-manager';
|
|
3
|
+
export declare class StdioMCPServerImpl implements IMCPServer {
|
|
15
4
|
private readonly logger?;
|
|
16
5
|
private name;
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
command: string;
|
|
7
|
+
args?: string[];
|
|
19
8
|
private client;
|
|
20
9
|
private env?;
|
|
21
10
|
private started;
|
|
@@ -202,6 +191,6 @@ export declare class MCPServerImpl implements IMCPServer {
|
|
|
202
191
|
update(command: string, args?: string[], env?: {
|
|
203
192
|
[key: string]: string;
|
|
204
193
|
}): void;
|
|
205
|
-
stop(): void
|
|
194
|
+
stop(): Promise<void>;
|
|
206
195
|
}
|
|
207
196
|
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/node/mcp-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/node/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/lib/node/mcp-server.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.StdioMCPServerImpl = void 0;
|
|
4
4
|
// have to import with extension since the exports map is ./* -> ./dist/cjs/*
|
|
5
5
|
const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
|
|
6
6
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
|
|
7
|
-
class
|
|
7
|
+
class StdioMCPServerImpl {
|
|
8
8
|
constructor(name, command, args, env, logger) {
|
|
9
9
|
this.logger = logger;
|
|
10
10
|
this.started = false;
|
|
@@ -78,15 +78,21 @@ class MCPServerImpl {
|
|
|
78
78
|
this.args = args;
|
|
79
79
|
this.env = env;
|
|
80
80
|
}
|
|
81
|
-
stop() {
|
|
82
|
-
var _a;
|
|
81
|
+
async stop() {
|
|
82
|
+
var _a, _b, _c;
|
|
83
83
|
if (!this.started || !this.client) {
|
|
84
84
|
return;
|
|
85
85
|
}
|
|
86
86
|
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.log(`Stopping MCP server "${this.name}"`);
|
|
87
|
-
|
|
87
|
+
try {
|
|
88
|
+
await this.client.close();
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
(_b = this.logger) === null || _b === void 0 ? void 0 : _b.error(`Failed to stop MCP server "${this.name}":`, error);
|
|
92
|
+
}
|
|
93
|
+
(_c = this.logger) === null || _c === void 0 ? void 0 : _c.log(`MCP server "${this.name}" stopped`);
|
|
88
94
|
this.started = false;
|
|
89
95
|
}
|
|
90
96
|
}
|
|
91
|
-
exports.
|
|
97
|
+
exports.StdioMCPServerImpl = StdioMCPServerImpl;
|
|
92
98
|
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/node/mcp-server.ts"],"names":[],"mappings":";;;AAAA,6EAA6E;AAC7E,wEAAmE;AACnE,wEAAiF;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/node/mcp-server.ts"],"names":[],"mappings":";;;AAAA,6EAA6E;AAC7E,wEAAmE;AACnE,wEAAiF;AAMjF,MAAa,kBAAkB;IAQ7B,YACE,IAAY,EACZ,OAAe,EACf,IAAe,EACf,GAA4B,EACX,MAAgB;QAAhB,WAAM,GAAN,MAAM,CAAU;QAP3B,YAAO,GAAY,KAAK,CAAC;QAS/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CACd,oBAAoB,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,OAAO,cAAc,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,CACvF,GAAG,CACJ,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACzC,CAAC;QACF,iDAAiD;QACjD,MAAM,YAAY,GAA2B,MAAM,CAAC,WAAW,CAC7D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CACjG,CAAC;QAEF,MAAM,SAAS,GAA2B;YACxC,GAAG,YAAY;YACf,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;SACpB,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,+BAAoB,CAAC;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;;YAC5B,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAM,CACtB;YACE,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE,EAAE;SACjB,CACF,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;;YAC9B,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,UAAkB,EAAE,UAAkB;;QACrE,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAChB,+CAA+C,QAAQ,oBAAoB,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,OAAO;gCAC3F,UAAU,EAAE,EACpC,KAAK,CACN,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI;YACf,UAAU;SACX,CAAC;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,IAAe,EAAE,GAA+B;QACtE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI;;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QACD,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CAAC,wBAAwB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,8BAA8B,IAAI,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CAAC,eAAe,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;CACF;AAnHD,gDAmHC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OpenAICompatibleProvider } from '@ai-sdk/openai-compatible';
|
|
2
|
+
import { LanguageModelV1 } from 'ai';
|
|
2
3
|
import { IAIBackServiceOption } from '@opensumi/ide-core-common';
|
|
3
4
|
import { BaseLanguageModel } from '../base-language-model';
|
|
4
5
|
export declare const DeepSeekModelIdentifier: unique symbol;
|
|
5
6
|
export declare class OpenAIModel extends BaseLanguageModel {
|
|
6
|
-
protected initializeProvider(options: IAIBackServiceOption):
|
|
7
|
-
protected getModelIdentifier(provider:
|
|
7
|
+
protected initializeProvider(options: IAIBackServiceOption): OpenAICompatibleProvider;
|
|
8
|
+
protected getModelIdentifier(provider: OpenAICompatibleProvider, modelId?: string): LanguageModelV1;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=openai-language-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-language-model.d.ts","sourceRoot":"","sources":["../../../src/node/openai/openai-language-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"openai-language-model.d.ts","sourceRoot":"","sources":["../../../src/node/openai/openai-language-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA0B,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAGrC,OAAO,EAA6B,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,eAAO,MAAM,uBAAuB,eAAoC,CAAC;AAEzE,qBACa,WAAY,SAAQ,iBAAiB;IAChD,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,wBAAwB;IAYrF,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe;CAGpG"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OpenAIModel = exports.DeepSeekModelIdentifier = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const
|
|
5
|
+
const openai_compatible_1 = require("@ai-sdk/openai-compatible");
|
|
6
6
|
const di_1 = require("@opensumi/di");
|
|
7
7
|
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
8
8
|
const base_language_model_1 = require("../base-language-model");
|
|
@@ -13,9 +13,10 @@ let OpenAIModel = class OpenAIModel extends base_language_model_1.BaseLanguageMo
|
|
|
13
13
|
if (!apiKey) {
|
|
14
14
|
throw new Error(`Please provide OpenAI API Key in preferences (${ide_core_common_1.AINativeSettingSectionsId.OpenaiApiKey})`);
|
|
15
15
|
}
|
|
16
|
-
return (0,
|
|
16
|
+
return (0, openai_compatible_1.createOpenAICompatible)({
|
|
17
17
|
apiKey,
|
|
18
18
|
baseURL: options.baseURL || 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
19
|
+
name: 'openai',
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
22
|
getModelIdentifier(provider, modelId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-language-model.js","sourceRoot":"","sources":["../../../src/node/openai/openai-language-model.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"openai-language-model.js","sourceRoot":"","sources":["../../../src/node/openai/openai-language-model.ts"],"names":[],"mappings":";;;;AAAA,iEAA6F;AAG7F,qCAA0C;AAC1C,+DAA4F;AAE5F,gEAA2D;AAE9C,QAAA,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAGlE,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,uCAAiB;IACtC,kBAAkB,CAAC,OAA6B;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,2CAAyB,CAAC,YAAY,GAAG,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,IAAA,0CAAsB,EAAC;YAC5B,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,mDAAmD;YAC/E,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAES,kBAAkB,CAAC,QAAkC,EAAE,OAAgB;QAC/E,OAAO,QAAQ,CAAC,OAAO,IAAI,UAAU,CAAC,CAAC;IACzC,CAAC;CACF,CAAA;AAhBY,kCAAW;sBAAX,WAAW;IADvB,IAAA,eAAU,GAAE;GACA,WAAW,CAgBvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-ai-native",
|
|
3
|
-
"version": "3.8.1-next-
|
|
3
|
+
"version": "3.8.1-next-1740463566.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src"
|
|
@@ -19,32 +19,32 @@
|
|
|
19
19
|
"url": "git@github.com:opensumi/core.git"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ai-sdk/anthropic": "^1.1.
|
|
23
|
-
"@ai-sdk/deepseek": "^0.1.
|
|
24
|
-
"@ai-sdk/openai": "^
|
|
22
|
+
"@ai-sdk/anthropic": "^1.1.9",
|
|
23
|
+
"@ai-sdk/deepseek": "^0.1.11",
|
|
24
|
+
"@ai-sdk/openai-compatible": "^0.1.11",
|
|
25
25
|
"@modelcontextprotocol/sdk": "^1.3.1",
|
|
26
|
-
"@opensumi/ide-addons": "3.8.1-next-
|
|
27
|
-
"@opensumi/ide-components": "3.8.1-next-
|
|
28
|
-
"@opensumi/ide-connection": "3.8.1-next-
|
|
29
|
-
"@opensumi/ide-core-common": "3.8.1-next-
|
|
30
|
-
"@opensumi/ide-core-node": "3.8.1-next-
|
|
31
|
-
"@opensumi/ide-debug": "3.8.1-next-
|
|
32
|
-
"@opensumi/ide-design": "3.8.1-next-
|
|
33
|
-
"@opensumi/ide-editor": "3.8.1-next-
|
|
34
|
-
"@opensumi/ide-file-search": "3.8.1-next-
|
|
35
|
-
"@opensumi/ide-file-service": "3.8.1-next-
|
|
36
|
-
"@opensumi/ide-main-layout": "3.8.1-next-
|
|
37
|
-
"@opensumi/ide-markers": "3.8.1-next-
|
|
38
|
-
"@opensumi/ide-monaco": "3.8.1-next-
|
|
39
|
-
"@opensumi/ide-overlay": "3.8.1-next-
|
|
40
|
-
"@opensumi/ide-preferences": "3.8.1-next-
|
|
41
|
-
"@opensumi/ide-search": "3.8.1-next-
|
|
42
|
-
"@opensumi/ide-terminal-next": "3.8.1-next-
|
|
43
|
-
"@opensumi/ide-theme": "3.8.1-next-
|
|
44
|
-
"@opensumi/ide-utils": "3.8.1-next-
|
|
45
|
-
"@opensumi/ide-workspace": "3.8.1-next-
|
|
26
|
+
"@opensumi/ide-addons": "3.8.1-next-1740463566.0",
|
|
27
|
+
"@opensumi/ide-components": "3.8.1-next-1740463566.0",
|
|
28
|
+
"@opensumi/ide-connection": "3.8.1-next-1740463566.0",
|
|
29
|
+
"@opensumi/ide-core-common": "3.8.1-next-1740463566.0",
|
|
30
|
+
"@opensumi/ide-core-node": "3.8.1-next-1740463566.0",
|
|
31
|
+
"@opensumi/ide-debug": "3.8.1-next-1740463566.0",
|
|
32
|
+
"@opensumi/ide-design": "3.8.1-next-1740463566.0",
|
|
33
|
+
"@opensumi/ide-editor": "3.8.1-next-1740463566.0",
|
|
34
|
+
"@opensumi/ide-file-search": "3.8.1-next-1740463566.0",
|
|
35
|
+
"@opensumi/ide-file-service": "3.8.1-next-1740463566.0",
|
|
36
|
+
"@opensumi/ide-main-layout": "3.8.1-next-1740463566.0",
|
|
37
|
+
"@opensumi/ide-markers": "3.8.1-next-1740463566.0",
|
|
38
|
+
"@opensumi/ide-monaco": "3.8.1-next-1740463566.0",
|
|
39
|
+
"@opensumi/ide-overlay": "3.8.1-next-1740463566.0",
|
|
40
|
+
"@opensumi/ide-preferences": "3.8.1-next-1740463566.0",
|
|
41
|
+
"@opensumi/ide-search": "3.8.1-next-1740463566.0",
|
|
42
|
+
"@opensumi/ide-terminal-next": "3.8.1-next-1740463566.0",
|
|
43
|
+
"@opensumi/ide-theme": "3.8.1-next-1740463566.0",
|
|
44
|
+
"@opensumi/ide-utils": "3.8.1-next-1740463566.0",
|
|
45
|
+
"@opensumi/ide-workspace": "3.8.1-next-1740463566.0",
|
|
46
46
|
"@xterm/xterm": "5.5.0",
|
|
47
|
-
"ai": "^4.1.
|
|
47
|
+
"ai": "^4.1.45",
|
|
48
48
|
"ansi-regex": "^2.0.0",
|
|
49
49
|
"diff": "^7.0.0",
|
|
50
50
|
"dom-align": "^1.7.0",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"zod-to-json-schema": "^3.24.1"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@opensumi/ide-core-browser": "3.8.1-next-
|
|
60
|
+
"@opensumi/ide-core-browser": "3.8.1-next-1740463566.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "69200390907e8915d44bfdb9f7ba48783f95a639"
|
|
63
63
|
}
|
|
@@ -72,6 +72,7 @@ import {
|
|
|
72
72
|
AI_CHAT_LOGO_AVATAR_ID,
|
|
73
73
|
AI_CHAT_VIEW_ID,
|
|
74
74
|
AI_MENU_BAR_DEBUG_TOOLBAR,
|
|
75
|
+
BUILTIN_MCP_SERVER_NAME,
|
|
75
76
|
ChatProxyServiceToken,
|
|
76
77
|
IChatInternalService,
|
|
77
78
|
IChatManagerService,
|
|
@@ -327,15 +328,23 @@ export class AINativeBrowserContribution
|
|
|
327
328
|
}
|
|
328
329
|
|
|
329
330
|
if (supportsMCP) {
|
|
330
|
-
// 初始化内置 MCP Server
|
|
331
|
-
this.sumiMCPServerBackendProxy.initBuiltinMCPServer();
|
|
332
|
-
|
|
333
331
|
// 从 preferences 获取并初始化外部 MCP Servers
|
|
334
332
|
const mcpServers = this.preferenceService.getValid<MCPServerDescription[]>(
|
|
335
333
|
AINativeSettingSectionsId.MCPServers,
|
|
336
334
|
);
|
|
335
|
+
|
|
336
|
+
// 查找内置 MCP Server 的配置
|
|
337
|
+
const builtinServer = mcpServers?.find((server) => server.name === BUILTIN_MCP_SERVER_NAME);
|
|
338
|
+
|
|
339
|
+
// 总是初始化内置服务器,根据配置决定是否启用
|
|
340
|
+
this.sumiMCPServerBackendProxy.initBuiltinMCPServer(builtinServer?.enabled ?? true);
|
|
341
|
+
|
|
342
|
+
// 初始化其他外部 MCP Servers
|
|
337
343
|
if (mcpServers && mcpServers.length > 0) {
|
|
338
|
-
|
|
344
|
+
const externalServers = mcpServers.filter((server) => server.name !== BUILTIN_MCP_SERVER_NAME);
|
|
345
|
+
if (externalServers.length > 0) {
|
|
346
|
+
this.sumiMCPServerBackendProxy.initExternalMCPServers(externalServers);
|
|
347
|
+
}
|
|
339
348
|
}
|
|
340
349
|
}
|
|
341
350
|
});
|
|
@@ -13,6 +13,8 @@ import {
|
|
|
13
13
|
import { ChatMessageRole, IChatMessage, IHistoryChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
|
|
14
14
|
|
|
15
15
|
import { IChatAgentService, IChatFollowup, IChatRequestMessage, IChatResponseErrorDetails } from '../../common';
|
|
16
|
+
import { LLMContextService, LLMContextServiceToken } from '../../common/llm-context';
|
|
17
|
+
import { ChatAgentPromptProvider } from '../../common/prompts/context-prompt-provider';
|
|
16
18
|
import { MsgHistoryManager } from '../model/msg-history-manager';
|
|
17
19
|
|
|
18
20
|
import { ChatModel, ChatRequestModel, ChatResponseModel, IChatProgressResponseContent } from './chat-model';
|
|
@@ -49,6 +51,12 @@ export class ChatManagerService extends Disposable {
|
|
|
49
51
|
@Autowired(StorageProvider)
|
|
50
52
|
private storageProvider: StorageProvider;
|
|
51
53
|
|
|
54
|
+
@Autowired(ChatAgentPromptProvider)
|
|
55
|
+
protected readonly promptProvider: ChatAgentPromptProvider;
|
|
56
|
+
|
|
57
|
+
@Autowired(LLMContextServiceToken)
|
|
58
|
+
protected readonly contextService: LLMContextService;
|
|
59
|
+
|
|
52
60
|
private _chatStorage: IStorage;
|
|
53
61
|
|
|
54
62
|
protected fromJSON(data: ISessionModel[]) {
|
|
@@ -98,11 +106,19 @@ export class ChatManagerService extends Disposable {
|
|
|
98
106
|
}
|
|
99
107
|
|
|
100
108
|
startSession() {
|
|
101
|
-
const model = new ChatModel(
|
|
109
|
+
const model = new ChatModel({
|
|
110
|
+
provideContext: this.provideContextPrompt.bind(this),
|
|
111
|
+
});
|
|
102
112
|
this.#sessionModels.set(model.sessionId, model);
|
|
103
113
|
return model;
|
|
104
114
|
}
|
|
105
115
|
|
|
116
|
+
private provideContextPrompt(message: string) {
|
|
117
|
+
const context = this.contextService.serialize();
|
|
118
|
+
const fullMessage = this.promptProvider.provideContextPrompt(context, message);
|
|
119
|
+
return fullMessage;
|
|
120
|
+
}
|
|
121
|
+
|
|
106
122
|
getSession(sessionId: string): ChatModel | undefined {
|
|
107
123
|
return this.#sessionModels.get(sessionId);
|
|
108
124
|
}
|
|
@@ -274,13 +274,22 @@ export class ChatRequestModel implements IChatRequestModel {
|
|
|
274
274
|
export class ChatModel extends Disposable implements IChatModel {
|
|
275
275
|
private static requestIdPool = 0;
|
|
276
276
|
|
|
277
|
-
|
|
277
|
+
private provideContextPrompt?: (string) => string;
|
|
278
|
+
|
|
279
|
+
constructor(initParams?: {
|
|
280
|
+
sessionId?: string;
|
|
281
|
+
history?: MsgHistoryManager;
|
|
282
|
+
requests?: ChatRequestModel[];
|
|
283
|
+
provideContext?: (msg: string) => string;
|
|
284
|
+
}) {
|
|
278
285
|
super();
|
|
279
286
|
this.#sessionId = initParams?.sessionId ?? uuid();
|
|
280
287
|
this.history = initParams?.history ?? new MsgHistoryManager();
|
|
281
288
|
if (initParams?.requests) {
|
|
282
289
|
this.#requests = new Map(initParams.requests.map((r) => [r.requestId, r]));
|
|
283
290
|
}
|
|
291
|
+
|
|
292
|
+
this.provideContextPrompt = initParams?.provideContext;
|
|
284
293
|
}
|
|
285
294
|
|
|
286
295
|
#sessionId: string;
|
|
@@ -300,9 +309,15 @@ export class ChatModel extends Disposable implements IChatModel {
|
|
|
300
309
|
readonly history: MsgHistoryManager;
|
|
301
310
|
|
|
302
311
|
addRequest(message: IChatRequestMessage): ChatRequestModel {
|
|
312
|
+
const msg = message;
|
|
313
|
+
// first msg
|
|
314
|
+
if (ChatModel.requestIdPool === 0 && this.provideContextPrompt) {
|
|
315
|
+
msg.prompt = this.provideContextPrompt(msg.prompt);
|
|
316
|
+
}
|
|
317
|
+
|
|
303
318
|
const requestId = `${this.sessionId}_request_${ChatModel.requestIdPool++}`;
|
|
304
|
-
const response = new ChatResponseModel(requestId, this,
|
|
305
|
-
const request = new ChatRequestModel(requestId, this,
|
|
319
|
+
const response = new ChatResponseModel(requestId, this, msg.agentId);
|
|
320
|
+
const request = new ChatRequestModel(requestId, this, msg, response);
|
|
306
321
|
|
|
307
322
|
this.#requests.set(requestId, request);
|
|
308
323
|
return request;
|
|
@@ -3,6 +3,7 @@ import { MessageList } from 'react-chat-elements';
|
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
AINativeConfigService,
|
|
6
|
+
CommandService,
|
|
6
7
|
getIcon,
|
|
7
8
|
useEventEffect,
|
|
8
9
|
useInjectable,
|
|
@@ -41,8 +42,6 @@ import {
|
|
|
41
42
|
IChatMessageStructure,
|
|
42
43
|
TokenMCPServerProxyService,
|
|
43
44
|
} from '../../common';
|
|
44
|
-
import { LLMContextService, LLMContextServiceToken } from '../../common/llm-context';
|
|
45
|
-
import { ChatAgentPromptProvider } from '../../common/prompts/context-prompt-provider';
|
|
46
45
|
import { ChatContext } from '../components/ChatContext';
|
|
47
46
|
import { CodeBlockWrapperInput } from '../components/ChatEditor';
|
|
48
47
|
import ChatHistory, { IChatHistoryItem } from '../components/ChatHistory';
|
|
@@ -52,6 +51,7 @@ import { ChatNotify, ChatReply } from '../components/ChatReply';
|
|
|
52
51
|
import { SlashCustomRender } from '../components/SlashCustomRender';
|
|
53
52
|
import { MessageData, createMessageByAI, createMessageByUser } from '../components/utils';
|
|
54
53
|
import { WelcomeMessage } from '../components/WelcomeMsg';
|
|
54
|
+
import { OPEN_MCP_CONFIG_COMMAND } from '../mcp/config/mcp-config.commands';
|
|
55
55
|
import { MCPServerProxyService } from '../mcp/mcp-server-proxy.service';
|
|
56
56
|
import { MCPToolsDialog } from '../mcp/mcp-tools-dialog.view';
|
|
57
57
|
import { ChatViewHeaderRender, TSlashCommandCustomRender } from '../types';
|
|
@@ -63,6 +63,7 @@ import { ChatFeatureRegistry } from './chat.feature.registry';
|
|
|
63
63
|
import { ChatInternalService } from './chat.internal.service';
|
|
64
64
|
import styles from './chat.module.less';
|
|
65
65
|
import { ChatRenderRegistry } from './chat.render.registry';
|
|
66
|
+
|
|
66
67
|
const SCROLL_CLASSNAME = 'chat_scroll';
|
|
67
68
|
|
|
68
69
|
interface TDispatchAction {
|
|
@@ -79,13 +80,15 @@ export const AIChatView = () => {
|
|
|
79
80
|
const chatAgentService = useInjectable<IChatAgentService>(IChatAgentService);
|
|
80
81
|
const chatFeatureRegistry = useInjectable<ChatFeatureRegistry>(ChatFeatureRegistryToken);
|
|
81
82
|
const chatRenderRegistry = useInjectable<ChatRenderRegistry>(ChatRenderRegistryToken);
|
|
82
|
-
const
|
|
83
|
-
const promptProvider = useInjectable<ChatAgentPromptProvider>(ChatAgentPromptProvider);
|
|
83
|
+
const mcpServerProxyService = useInjectable<MCPServerProxyService>(TokenMCPServerProxyService);
|
|
84
84
|
|
|
85
85
|
const layoutService = useInjectable<IMainLayoutService>(IMainLayoutService);
|
|
86
86
|
const msgHistoryManager = aiChatService.sessionModel.history;
|
|
87
87
|
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
88
88
|
const chatInputRef = React.useRef<{ setInputValue: (v: string) => void } | null>(null);
|
|
89
|
+
const dialogService = useInjectable<IDialogService>(IDialogService);
|
|
90
|
+
const aiNativeConfigService = useInjectable<AINativeConfigService>(AINativeConfigService);
|
|
91
|
+
const commandService = useInjectable<CommandService>(CommandService);
|
|
89
92
|
|
|
90
93
|
const [shortcutCommands, setShortcutCommands] = React.useState<ChatSlashCommandItemModel[]>([]);
|
|
91
94
|
|
|
@@ -107,6 +110,8 @@ export const AIChatView = () => {
|
|
|
107
110
|
const [defaultAgentId, setDefaultAgentId] = React.useState<string>('');
|
|
108
111
|
const [command, setCommand] = React.useState('');
|
|
109
112
|
const [theme, setTheme] = React.useState<string | null>(null);
|
|
113
|
+
const [mcpToolsCount, setMcpToolsCount] = React.useState<number>(0);
|
|
114
|
+
const [mcpServersCount, setMcpServersCount] = React.useState<number>(0);
|
|
110
115
|
|
|
111
116
|
React.useEffect(() => {
|
|
112
117
|
const featureSlashCommands = chatFeatureRegistry.getAllShortcutSlashCommand();
|
|
@@ -506,10 +511,7 @@ export const AIChatView = () => {
|
|
|
506
511
|
const { message, agentId, command, reportExtra } = value;
|
|
507
512
|
const { actionType, actionSource } = reportExtra || {};
|
|
508
513
|
|
|
509
|
-
const
|
|
510
|
-
const fullMessage = await promptProvider.provideContextPrompt(context, message);
|
|
511
|
-
|
|
512
|
-
const request = aiChatService.createRequest(fullMessage, agentId!, command);
|
|
514
|
+
const request = aiChatService.createRequest(message, agentId!, command);
|
|
513
515
|
if (!request) {
|
|
514
516
|
return;
|
|
515
517
|
}
|
|
@@ -658,6 +660,32 @@ export const AIChatView = () => {
|
|
|
658
660
|
};
|
|
659
661
|
}, [aiChatService.sessionModel]);
|
|
660
662
|
|
|
663
|
+
useEventEffect(
|
|
664
|
+
mcpServerProxyService.onChangeMCPServers,
|
|
665
|
+
() => {
|
|
666
|
+
mcpServerProxyService.getAllMCPTools().then((tools) => {
|
|
667
|
+
setMcpToolsCount(tools.length);
|
|
668
|
+
});
|
|
669
|
+
mcpServerProxyService.$getServers().then((servers) => {
|
|
670
|
+
setMcpServersCount(servers.length);
|
|
671
|
+
});
|
|
672
|
+
},
|
|
673
|
+
[mcpServerProxyService],
|
|
674
|
+
);
|
|
675
|
+
|
|
676
|
+
const handleShowMCPTools = React.useCallback(async () => {
|
|
677
|
+
const tools = await mcpServerProxyService.getAllMCPTools();
|
|
678
|
+
dialogService.open({
|
|
679
|
+
message: <MCPToolsDialog tools={tools} />,
|
|
680
|
+
type: MessageType.Empty,
|
|
681
|
+
buttons: ['关闭'],
|
|
682
|
+
});
|
|
683
|
+
}, [mcpServerProxyService, dialogService]);
|
|
684
|
+
|
|
685
|
+
const handleShowMCPConfig = React.useCallback(() => {
|
|
686
|
+
commandService.executeCommand(OPEN_MCP_CONFIG_COMMAND.id);
|
|
687
|
+
}, [commandService]);
|
|
688
|
+
|
|
661
689
|
return (
|
|
662
690
|
<div id={styles.ai_chat_view}>
|
|
663
691
|
<div className={styles.header_container}>
|
|
@@ -697,6 +725,18 @@ export const AIChatView = () => {
|
|
|
697
725
|
</Popover>
|
|
698
726
|
))}
|
|
699
727
|
</div>
|
|
728
|
+
<div className={styles.header_operate_right}>
|
|
729
|
+
{aiNativeConfigService.capabilities.supportsMCP && (
|
|
730
|
+
<>
|
|
731
|
+
<div className={styles.tag} onClick={handleShowMCPConfig}>
|
|
732
|
+
{`MCP Servers: ${mcpServersCount}`}
|
|
733
|
+
</div>
|
|
734
|
+
<div className={styles.tag} onClick={handleShowMCPTools}>
|
|
735
|
+
{`MCP Tools: ${mcpToolsCount}`}
|
|
736
|
+
</div>
|
|
737
|
+
</>
|
|
738
|
+
)}
|
|
739
|
+
</div>
|
|
700
740
|
</div>
|
|
701
741
|
<ChatInputWrapperRender
|
|
702
742
|
onSend={(value, agentId, command) =>
|
|
@@ -39,7 +39,7 @@ export const ChatContext = memo(() => {
|
|
|
39
39
|
50,
|
|
40
40
|
)((files) => {
|
|
41
41
|
if (files) {
|
|
42
|
-
updateAddedFiles(files);
|
|
42
|
+
updateAddedFiles([...files.attached]);
|
|
43
43
|
}
|
|
44
44
|
}, contextService);
|
|
45
45
|
|
|
@@ -57,7 +57,7 @@ export const ChatContext = memo(() => {
|
|
|
57
57
|
}, []);
|
|
58
58
|
|
|
59
59
|
const onDidDeselect = useCallback((uri: URI) => {
|
|
60
|
-
contextService.removeFileFromContext(uri);
|
|
60
|
+
contextService.removeFileFromContext(uri, true);
|
|
61
61
|
}, []);
|
|
62
62
|
|
|
63
63
|
const onDidClickFile = useCallback((uri: URI) => {
|