@opensumi/ide-ai-native 3.8.1-next-1741253659.0 → 3.8.1-next-1741255322.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/chat/chat-proxy.service.d.ts +0 -8
- package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-proxy.service.js +25 -30
- package/lib/browser/chat/chat-proxy.service.js.map +1 -1
- package/lib/browser/components/ChatInput.js +1 -1
- package/lib/browser/components/ChatInput.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +0 -6
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/mcp/config/components/mcp-config.view.d.ts.map +1 -1
- package/lib/browser/mcp/config/components/mcp-config.view.js +2 -0
- package/lib/browser/mcp/config/components/mcp-config.view.js.map +1 -1
- package/lib/browser/mcp/config/components/mcp-server-form.d.ts +5 -2
- package/lib/browser/mcp/config/components/mcp-server-form.d.ts.map +1 -1
- package/lib/browser/mcp/config/components/mcp-server-form.js +79 -33
- package/lib/browser/mcp/config/components/mcp-server-form.js.map +1 -1
- package/lib/browser/mcp/config/components/mcp-server-form.module.less +24 -1
- package/lib/common/mcp-server-manager.d.ts +21 -3
- package/lib/common/mcp-server-manager.d.ts.map +1 -1
- package/lib/common/mcp-server-manager.js.map +1 -1
- package/lib/common/types.d.ts +4 -0
- package/lib/common/types.d.ts.map +1 -1
- package/lib/common/types.js +6 -1
- package/lib/common/types.js.map +1 -1
- package/lib/node/base-language-model.js +1 -1
- package/lib/node/base-language-model.js.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.d.ts +10 -1
- package/lib/node/mcp/sumi-mcp-server.d.ts.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.js +13 -4
- package/lib/node/mcp/sumi-mcp-server.js.map +1 -1
- package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
- package/lib/node/mcp-server-manager-impl.js +22 -8
- package/lib/node/mcp-server-manager-impl.js.map +1 -1
- package/lib/node/mcp-server.sse.d.ts +192 -0
- package/lib/node/mcp-server.sse.d.ts.map +1 -0
- package/lib/node/mcp-server.sse.js +86 -0
- package/lib/node/mcp-server.sse.js.map +1 -0
- package/lib/node/{mcp-server.d.ts → mcp-server.stdio.d.ts} +2 -2
- package/lib/node/mcp-server.stdio.d.ts.map +1 -0
- package/lib/node/{mcp-server.js → mcp-server.stdio.js} +8 -6
- package/lib/node/mcp-server.stdio.js.map +1 -0
- package/package.json +23 -23
- package/src/browser/chat/chat-proxy.service.ts +22 -28
- package/src/browser/components/ChatInput.tsx +1 -1
- package/src/browser/index.ts +0 -6
- package/src/browser/mcp/config/components/mcp-config.view.tsx +2 -0
- package/src/browser/mcp/config/components/mcp-server-form.module.less +24 -1
- package/src/browser/mcp/config/components/mcp-server-form.tsx +149 -63
- package/src/common/mcp-server-manager.ts +22 -3
- package/src/common/types.ts +5 -0
- package/src/node/base-language-model.ts +1 -1
- package/src/node/mcp/sumi-mcp-server.ts +12 -7
- package/src/node/mcp-server-manager-impl.ts +20 -9
- package/src/node/mcp-server.sse.ts +97 -0
- package/src/node/{mcp-server.ts → mcp-server.stdio.ts} +4 -3
- package/lib/browser/chat/apply.service.d.ts +0 -16
- package/lib/browser/chat/apply.service.d.ts.map +0 -1
- package/lib/browser/chat/apply.service.js +0 -52
- package/lib/browser/chat/apply.service.js.map +0 -1
- package/lib/node/mcp-server.d.ts.map +0 -1
- package/lib/node/mcp-server.js.map +0 -1
- package/src/browser/chat/apply.service.ts +0 -55
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
2
|
|
|
3
|
+
import { MCP_SERVER_TYPE } from './types';
|
|
4
|
+
|
|
3
5
|
export interface IMCPServer {
|
|
4
6
|
isStarted(): boolean;
|
|
5
7
|
start(): Promise<void>;
|
|
@@ -36,7 +38,18 @@ export type MCPTool = Awaited<ReturnType<MCPServerManager['getTools']>>['tools']
|
|
|
36
38
|
|
|
37
39
|
export type MCPToolParameter = Awaited<ReturnType<MCPServerManager['getTools']>>['tools'][number]['inputSchema'];
|
|
38
40
|
|
|
39
|
-
export interface
|
|
41
|
+
export interface BaseMCPServerDescription {
|
|
42
|
+
/**
|
|
43
|
+
* The unique name of the MCP server.
|
|
44
|
+
*/
|
|
45
|
+
name: string;
|
|
46
|
+
/**
|
|
47
|
+
* Whether to enable the MCP server.
|
|
48
|
+
*/
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface StdioMCPServerDescription extends BaseMCPServerDescription {
|
|
40
53
|
/**
|
|
41
54
|
* The unique name of the MCP server.
|
|
42
55
|
*/
|
|
@@ -56,12 +69,18 @@ export interface MCPServerDescription {
|
|
|
56
69
|
* Optional environment variables to set when starting the server.
|
|
57
70
|
*/
|
|
58
71
|
env?: { [key: string]: string };
|
|
72
|
+
}
|
|
59
73
|
|
|
74
|
+
export interface SSEMCPServerDescription extends BaseMCPServerDescription {
|
|
60
75
|
/**
|
|
61
|
-
*
|
|
76
|
+
* The host of the MCP server.
|
|
62
77
|
*/
|
|
63
|
-
|
|
78
|
+
serverHost: string;
|
|
64
79
|
}
|
|
65
80
|
|
|
81
|
+
export type MCPServerDescription =
|
|
82
|
+
| ({ type: MCP_SERVER_TYPE.STDIO } & StdioMCPServerDescription)
|
|
83
|
+
| ({ type: MCP_SERVER_TYPE.SSE } & SSEMCPServerDescription);
|
|
84
|
+
|
|
66
85
|
export const MCPServerManager = Symbol('MCPServerManager');
|
|
67
86
|
export const MCPServerManagerPath = 'ServicesMCPServerManager';
|
package/src/common/types.ts
CHANGED
|
@@ -198,7 +198,7 @@ export abstract class BaseLanguageModel {
|
|
|
198
198
|
|
|
199
199
|
// 处理最后一行可能存在的后缀
|
|
200
200
|
if (pendingLines.length > 0) {
|
|
201
|
-
let lastLine = pendingLines[pendingLines.length - 1]
|
|
201
|
+
let lastLine = pendingLines[pendingLines.length - 1];
|
|
202
202
|
|
|
203
203
|
if (lastLine.endsWith(trimTexts[1])) {
|
|
204
204
|
// 移除后缀
|
|
@@ -13,10 +13,10 @@ import { INodeLogger } from '@opensumi/ide-core-node';
|
|
|
13
13
|
import { BUILTIN_MCP_SERVER_NAME, ISumiMCPServerBackend } from '../../common';
|
|
14
14
|
import { IMCPServer, MCPServerDescription } from '../../common/mcp-server-manager';
|
|
15
15
|
import { IToolInvocationRegistryManager, ToolInvocationRegistryManager } from '../../common/tool-invocation-registry';
|
|
16
|
-
import { IMCPServerProxyService, MCPTool } from '../../common/types';
|
|
17
|
-
import { StdioMCPServerImpl } from '../mcp-server';
|
|
16
|
+
import { IMCPServerProxyService, MCPTool, MCP_SERVER_TYPE } from '../../common/types';
|
|
18
17
|
import { MCPServerManagerImpl } from '../mcp-server-manager-impl';
|
|
19
|
-
|
|
18
|
+
import { SSEMCPServer } from '../mcp-server.sse';
|
|
19
|
+
import { StdioMCPServer } from '../mcp-server.stdio';
|
|
20
20
|
// 每个 BrowserTab 都对应了一个 SumiMCPServerBackend 实例
|
|
21
21
|
// SumiMCPServerBackend 需要做的事情:
|
|
22
22
|
// 维护 Browser 端工具的注册和调用
|
|
@@ -152,18 +152,23 @@ export class SumiMCPServerBackend extends RPCService<IMCPServerProxyService> imp
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
// 第三方 Stdio 类型的 MCP Server
|
|
155
|
-
if (server instanceof
|
|
155
|
+
if (server instanceof StdioMCPServer) {
|
|
156
156
|
return {
|
|
157
157
|
name: server.getServerName(),
|
|
158
158
|
isStarted: server.isStarted(),
|
|
159
|
-
type:
|
|
159
|
+
type: MCP_SERVER_TYPE.STDIO,
|
|
160
160
|
command: server.command + ' ' + (server.args?.join(' ') || ''),
|
|
161
161
|
tools: toolNames,
|
|
162
162
|
};
|
|
163
|
+
} else if (server instanceof SSEMCPServer) {
|
|
164
|
+
return {
|
|
165
|
+
name: server.getServerName(),
|
|
166
|
+
isStarted: server.isStarted(),
|
|
167
|
+
type: MCP_SERVER_TYPE.SSE,
|
|
168
|
+
serverHost: server.serverHost,
|
|
169
|
+
};
|
|
163
170
|
}
|
|
164
171
|
|
|
165
|
-
// TODO SSE 类型的 MCP Server
|
|
166
|
-
|
|
167
172
|
return {
|
|
168
173
|
name: server.getServerName(),
|
|
169
174
|
isStarted: server.isStarted(),
|
|
@@ -4,10 +4,12 @@ import { ILogger } from '@opensumi/ide-core-common';
|
|
|
4
4
|
|
|
5
5
|
import { IMCPServer, MCPServerDescription, MCPServerManager, MCPTool } from '../common/mcp-server-manager';
|
|
6
6
|
import { IToolInvocationRegistryManager, ToolRequest } from '../common/tool-invocation-registry';
|
|
7
|
+
import { MCP_SERVER_TYPE } from '../common/types';
|
|
7
8
|
import { getToolName } from '../common/utils';
|
|
8
9
|
|
|
9
10
|
import { BuiltinMCPServer } from './mcp/sumi-mcp-server';
|
|
10
|
-
import {
|
|
11
|
+
import { SSEMCPServer } from './mcp-server.sse';
|
|
12
|
+
import { StdioMCPServer } from './mcp-server.stdio';
|
|
11
13
|
// 这应该是 Browser Tab 维度的,每个 Tab 对应一个 MCPServerManagerImpl
|
|
12
14
|
export class MCPServerManagerImpl implements MCPServerManager {
|
|
13
15
|
protected servers: Map<string, IMCPServer> = new Map();
|
|
@@ -127,14 +129,23 @@ export class MCPServerManagerImpl implements MCPServerManager {
|
|
|
127
129
|
}
|
|
128
130
|
|
|
129
131
|
addOrUpdateServer(description: MCPServerDescription): void {
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
const existingServer = this.servers.get(description.name);
|
|
133
|
+
if (description.type === MCP_SERVER_TYPE.STDIO) {
|
|
134
|
+
const { name, command, args, env } = description;
|
|
135
|
+
if (existingServer) {
|
|
136
|
+
existingServer.update(command, args, env);
|
|
137
|
+
} else {
|
|
138
|
+
const newServer = new StdioMCPServer(name, command, args, env, this.logger);
|
|
139
|
+
this.servers.set(name, newServer);
|
|
140
|
+
}
|
|
141
|
+
} else if (description.type === MCP_SERVER_TYPE.SSE) {
|
|
142
|
+
const { name, serverHost } = description;
|
|
143
|
+
if (existingServer) {
|
|
144
|
+
existingServer.update(serverHost);
|
|
145
|
+
} else {
|
|
146
|
+
const newServer = new SSEMCPServer(name, serverHost, this.logger);
|
|
147
|
+
this.servers.set(name, newServer);
|
|
148
|
+
}
|
|
138
149
|
}
|
|
139
150
|
}
|
|
140
151
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// have to import with extension since the exports map is ./* -> ./dist/cjs/*
|
|
2
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
3
|
+
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
4
|
+
|
|
5
|
+
import { ILogger } from '@opensumi/ide-core-common';
|
|
6
|
+
|
|
7
|
+
import pkg from '../../package.json';
|
|
8
|
+
import { IMCPServer } from '../common/mcp-server-manager';
|
|
9
|
+
|
|
10
|
+
export class SSEMCPServer implements IMCPServer {
|
|
11
|
+
private name: string;
|
|
12
|
+
public serverHost: string;
|
|
13
|
+
private client: Client;
|
|
14
|
+
private started: boolean = false;
|
|
15
|
+
|
|
16
|
+
constructor(name: string, serverHost: string, private readonly logger?: ILogger) {
|
|
17
|
+
this.name = name;
|
|
18
|
+
this.serverHost = serverHost;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
isStarted(): boolean {
|
|
22
|
+
return this.started;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
getServerName(): string {
|
|
26
|
+
return this.name;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async start(): Promise<void> {
|
|
30
|
+
if (this.started) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.logger?.log(`Starting server "${this.name}" with serverHost: ${this.serverHost}`);
|
|
34
|
+
|
|
35
|
+
const transport = new SSEClientTransport(new URL(this.serverHost));
|
|
36
|
+
transport.onerror = (error) => {
|
|
37
|
+
this.logger?.error('Transport Error:', error);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
this.client = new Client(
|
|
41
|
+
{
|
|
42
|
+
name: 'sumi-ide-sse-mcp-client',
|
|
43
|
+
version: pkg.version,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
capabilities: {},
|
|
47
|
+
},
|
|
48
|
+
);
|
|
49
|
+
this.client.onerror = (error) => {
|
|
50
|
+
this.logger?.error('Error in MCP client:', error);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
await this.client.connect(transport);
|
|
54
|
+
this.started = true;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async callTool(toolName: string, toolCallId: string, arg_string: string) {
|
|
58
|
+
let args;
|
|
59
|
+
try {
|
|
60
|
+
args = JSON.parse(arg_string);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
this.logger?.error(
|
|
63
|
+
`Failed to parse arguments for calling tool "${toolName}" in MCP server "${this.name}" with serverHost "${this.serverHost}".
|
|
64
|
+
Invalid JSON: ${arg_string}`,
|
|
65
|
+
error,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
const params = {
|
|
69
|
+
name: toolName,
|
|
70
|
+
arguments: args,
|
|
71
|
+
toolCallId,
|
|
72
|
+
};
|
|
73
|
+
return this.client.callTool(params);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async getTools() {
|
|
77
|
+
return await this.client.listTools();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
update(serverHost: string): void {
|
|
81
|
+
this.serverHost = serverHost;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async stop(): Promise<void> {
|
|
85
|
+
if (!this.started || !this.client) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.logger?.log(`Stopping MCP server "${this.name}"`);
|
|
89
|
+
try {
|
|
90
|
+
await this.client.close();
|
|
91
|
+
} catch (error) {
|
|
92
|
+
this.logger?.error(`Failed to stop MCP server "${this.name}":`, error);
|
|
93
|
+
}
|
|
94
|
+
this.logger?.log(`MCP server "${this.name}" stopped`);
|
|
95
|
+
this.started = false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -4,9 +4,10 @@ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'
|
|
|
4
4
|
|
|
5
5
|
import { ILogger } from '@opensumi/ide-core-common';
|
|
6
6
|
|
|
7
|
+
import pkg from '../../package.json';
|
|
7
8
|
import { IMCPServer } from '../common/mcp-server-manager';
|
|
8
9
|
|
|
9
|
-
export class
|
|
10
|
+
export class StdioMCPServer implements IMCPServer {
|
|
10
11
|
private name: string;
|
|
11
12
|
public command: string;
|
|
12
13
|
public args?: string[];
|
|
@@ -64,8 +65,8 @@ export class StdioMCPServerImpl implements IMCPServer {
|
|
|
64
65
|
|
|
65
66
|
this.client = new Client(
|
|
66
67
|
{
|
|
67
|
-
name: '
|
|
68
|
-
version:
|
|
68
|
+
name: 'sumi-ide-stdio-mcp-client',
|
|
69
|
+
version: pkg.version,
|
|
69
70
|
},
|
|
70
71
|
{
|
|
71
72
|
capabilities: {},
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { IChatProgress } from '@opensumi/ide-core-browser';
|
|
2
|
-
import { SumiReadableStream } from '@opensumi/ide-utils/lib/stream';
|
|
3
|
-
import { Range } from '@opensumi/monaco-editor-core';
|
|
4
|
-
import { CodeBlockData } from '../../common/types';
|
|
5
|
-
import { BaseApplyService } from '../mcp/base-apply.service';
|
|
6
|
-
export declare class ApplyService extends BaseApplyService {
|
|
7
|
-
private readonly modelService;
|
|
8
|
-
private readonly aiBackService;
|
|
9
|
-
private readonly chatProxyService;
|
|
10
|
-
protected doApply(codeBlock: CodeBlockData): Promise<{
|
|
11
|
-
range?: Range;
|
|
12
|
-
stream?: SumiReadableStream<IChatProgress, Error>;
|
|
13
|
-
result?: string;
|
|
14
|
-
}>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=apply.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply.service.d.ts","sourceRoot":"","sources":["../../../src/browser/chat/apply.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,aAAa,EAAa,MAAM,4BAA4B,CAAC;AAEzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAI7D,qBACa,YAAa,SAAQ,gBAAgB;IAEhD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;IAG3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAE/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;cAEpC,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC;QACzD,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,CAAC,EAAE,kBAAkB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CA4BH"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ApplyService = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const di_1 = require("@opensumi/di");
|
|
6
|
-
const ide_core_browser_1 = require("@opensumi/ide-core-browser");
|
|
7
|
-
const browser_1 = require("@opensumi/ide-editor/lib/browser");
|
|
8
|
-
const common_1 = require("../../common");
|
|
9
|
-
const base_apply_service_1 = require("../mcp/base-apply.service");
|
|
10
|
-
const chat_proxy_service_1 = require("./chat-proxy.service");
|
|
11
|
-
let ApplyService = class ApplyService extends base_apply_service_1.BaseApplyService {
|
|
12
|
-
async doApply(codeBlock) {
|
|
13
|
-
const uri = new ide_core_browser_1.URI(ide_core_browser_1.path.join(this.appConfig.workspaceDir, codeBlock.relativePath));
|
|
14
|
-
const modelReference = await this.modelService.createModelReference(uri);
|
|
15
|
-
const fileContent = modelReference.instance.getMonacoModel().getValue();
|
|
16
|
-
const stream = await this.aiBackService.requestStream(`Merge all changes from the <update> snippet into the <code> below.
|
|
17
|
-
- Preserve the code's structure, order, comments, and indentation exactly.
|
|
18
|
-
- Output only the updated code, enclosed within <updated-code> and </updated-code> tags.
|
|
19
|
-
- Do not include any additional text, explanations, placeholders, ellipses, or code fences.
|
|
20
|
-
|
|
21
|
-
<code>${fileContent}</code>
|
|
22
|
-
|
|
23
|
-
<update>${codeBlock.codeEdit}</update>
|
|
24
|
-
|
|
25
|
-
Provide the complete updated code.
|
|
26
|
-
`, {
|
|
27
|
-
...this.chatProxyService.getRequestOptions(),
|
|
28
|
-
trimTexts: ['<updated-code>', '</updated-code>'],
|
|
29
|
-
system: 'You are a coding assistant that helps merge code updates, ensuring every modification is fully integrated.',
|
|
30
|
-
});
|
|
31
|
-
return {
|
|
32
|
-
stream,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
exports.ApplyService = ApplyService;
|
|
37
|
-
tslib_1.__decorate([
|
|
38
|
-
(0, di_1.Autowired)(browser_1.IEditorDocumentModelService),
|
|
39
|
-
tslib_1.__metadata("design:type", Object)
|
|
40
|
-
], ApplyService.prototype, "modelService", void 0);
|
|
41
|
-
tslib_1.__decorate([
|
|
42
|
-
(0, di_1.Autowired)(ide_core_browser_1.AIBackSerivcePath),
|
|
43
|
-
tslib_1.__metadata("design:type", Object)
|
|
44
|
-
], ApplyService.prototype, "aiBackService", void 0);
|
|
45
|
-
tslib_1.__decorate([
|
|
46
|
-
(0, di_1.Autowired)(common_1.ChatProxyServiceToken),
|
|
47
|
-
tslib_1.__metadata("design:type", chat_proxy_service_1.ChatProxyService)
|
|
48
|
-
], ApplyService.prototype, "chatProxyService", void 0);
|
|
49
|
-
exports.ApplyService = ApplyService = tslib_1.__decorate([
|
|
50
|
-
(0, di_1.Injectable)()
|
|
51
|
-
], ApplyService);
|
|
52
|
-
//# sourceMappingURL=apply.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply.service.js","sourceRoot":"","sources":["../../../src/browser/chat/apply.service.ts"],"names":[],"mappings":";;;;AAAA,qCAAqD;AACrD,iEAAyG;AACzG,8DAA+E;AAI/E,yCAAqD;AAErD,kEAA6D;AAE7D,6DAAwD;AAGjD,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,qCAAgB;IAStC,KAAK,CAAC,OAAO,CAAC,SAAwB;QAK9C,MAAM,GAAG,GAAG,IAAI,sBAAG,CAAC,uBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CACnD;;;;;YAKM,WAAW;;cAET,SAAS,CAAC,QAAQ;;;CAG/B,EACK;YACE,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;YAC5C,SAAS,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;YAChD,MAAM,EACJ,4GAA4G;SAC/G,CACF,CAAC;QAEF,OAAO;YACL,MAAM;SACP,CAAC;IACJ,CAAC;CACF,CAAA;AAzCY,oCAAY;AAEN;IADhB,IAAA,cAAS,EAAC,qCAA2B,CAAC;;kDACoB;AAG1C;IADhB,IAAA,cAAS,EAAC,oCAAiB,CAAC;;mDACkB;AAE9B;IADhB,IAAA,cAAS,EAAC,8BAAqB,CAAC;sCACE,qCAAgB;sDAAC;uBAPzC,YAAY;IADxB,IAAA,eAAU,GAAE;GACA,YAAY,CAyCxB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/node/mcp-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,qBAAa,kBAAmB,YAAW,UAAU;IAajD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAZ1B,OAAO,CAAC,IAAI,CAAS;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAC,CAA4B;IACxC,OAAO,CAAC,OAAO,CAAkB;gBAG/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACX,MAAM,CAAC,EAAE,OAAO,YAAA;IAQnC,SAAS,IAAI,OAAO;IAIpB,aAAa,IAAI,MAAM;IAIjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4CtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;sBA2C+loC,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;;wBAAiE,KAAK,kBAAkB,KAAK,mBAAmB,KAAK;yBAAuC,KAAK;yBAA+C,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;yBAA8C,KAAK;yBAA+C,KAAK;kBAA+B,KAAK,qCAAqC,KAAK;yBAA6C,KAAK;yBAA+C,KAAK;kBAA+B,KAAK,sCAAsC,KAAK;yBAAuC,KAAK;yBAAgD,KAAK;6BAA0C,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;yBAA8C,KAAK;yBAAgD,KAAK;6BAA0C,KAAK;kBAA+B,KAAK,qCAAqC,KAAK;yBAA6C,KAAK;yBAAgD,KAAK;6BAA0C,KAAK;kBAA+B,KAAK,sCAAsC,KAAK;yBAAuC,KAAK;6BAAuD,KAAK,mBAAmB,KAAK,mBAAmB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;sCAAmD,KAAK,qBAAqB,KAAK,0BAA0B,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,qCAAqC,KAAK,yBAAyB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,sCAAsC,KAAK,mBAAmB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;sCAAmD,KAAK,qBAAqB,KAAK,0BAA0B,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,qCAAqC,KAAK,yBAAyB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK;iCAAkE,KAAK,qBAAqB,KAAK;yBAA8C,KAAK;6BAAuD,KAAK,mBAAmB,KAAK,mBAAmB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;sCAAmD,KAAK,qBAAqB,KAAK,0BAA0B,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,qCAAqC,KAAK,yBAAyB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,sCAAsC,KAAK,mBAAmB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;sCAAmD,KAAK,qBAAqB,KAAK,0BAA0B,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,qCAAqC,KAAK,yBAAyB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK;kBAAmD,KAAK,qCAAqC,KAAK;yBAA6C,KAAK;6BAAuD,KAAK,mBAAmB,KAAK,mBAAmB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;sCAAmD,KAAK,qBAAqB,KAAK,0BAA0B,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,qCAAqC,KAAK,yBAAyB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,sCAAsC,KAAK,mBAAmB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;sCAAmD,KAAK,qBAAqB,KAAK,0BAA0B,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK,qCAAqC,KAAK,yBAAyB,KAAK;4BAAuD,KAAK;iCAA8C,KAAK,qBAAqB,KAAK;;6BAA4D,KAAK;uBAAoC,KAAK;kBAAmD,KAAK;wBAAkE,KAAK,qBAAqB,KAAK,oBAAoB,KAAK;;sBAA+J,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;;2BAAoE,KAAK;;IAxB1u4C,QAAQ;sBAwB0/4C,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;;2BAAoE,KAAK,qBAAqB,KAAK;;sBAA8C,KAAK,kBAAkB,KAAK;yBAAuC,KAAK;gCAA6C,KAAK,qBAAqB,KAAK;gCAA8C,KAAK;6BAA2C,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;qCAAqE,KAAK,qBAAqB,KAAK;6BAAkD,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;sBAAsD,KAAK,qCAAqC,KAAK;6BAAiD,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;sBAAsD,KAAK;iCAAgE,KAAK,qBAAqB,KAAK;yBAA8C,KAAK;gCAA6C,KAAK,qBAAqB,KAAK;gCAA8C,KAAK;6BAA2C,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;qCAAqE,KAAK,qBAAqB,KAAK;6BAAkD,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;sBAAsD,KAAK,qCAAqC,KAAK;6BAAiD,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;sBAAsD,KAAK;kBAAiD,KAAK,qCAAqC,KAAK;yBAA6C,KAAK;gCAA6C,KAAK,qBAAqB,KAAK;gCAA8C,KAAK;6BAA2C,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;qCAAqE,KAAK,qBAAqB,KAAK;6BAAkD,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;sBAAsD,KAAK,qCAAqC,KAAK;6BAAiD,KAAK;mCAA2D,KAAK,qBAAqB,KAAK,sCAAsC,KAAK,qBAAqB,KAAK,8BAA8B,KAAK,qCAAqC,KAAK,6BAA6B,KAAK;sBAAsD,KAAK;kBAAiD,KAAK;;IApB5uiD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAMzE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAa5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/node/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Autowired, Injectable } from '@opensumi/di';
|
|
2
|
-
import { AIBackSerivcePath, IAIBackService, IChatProgress, URI, path } from '@opensumi/ide-core-browser';
|
|
3
|
-
import { IEditorDocumentModelService } from '@opensumi/ide-editor/lib/browser';
|
|
4
|
-
import { SumiReadableStream } from '@opensumi/ide-utils/lib/stream';
|
|
5
|
-
import { Range } from '@opensumi/monaco-editor-core';
|
|
6
|
-
|
|
7
|
-
import { ChatProxyServiceToken } from '../../common';
|
|
8
|
-
import { CodeBlockData } from '../../common/types';
|
|
9
|
-
import { BaseApplyService } from '../mcp/base-apply.service';
|
|
10
|
-
|
|
11
|
-
import { ChatProxyService } from './chat-proxy.service';
|
|
12
|
-
|
|
13
|
-
@Injectable()
|
|
14
|
-
export class ApplyService extends BaseApplyService {
|
|
15
|
-
@Autowired(IEditorDocumentModelService)
|
|
16
|
-
private readonly modelService: IEditorDocumentModelService;
|
|
17
|
-
|
|
18
|
-
@Autowired(AIBackSerivcePath)
|
|
19
|
-
private readonly aiBackService: IAIBackService;
|
|
20
|
-
@Autowired(ChatProxyServiceToken)
|
|
21
|
-
private readonly chatProxyService: ChatProxyService;
|
|
22
|
-
|
|
23
|
-
protected async doApply(codeBlock: CodeBlockData): Promise<{
|
|
24
|
-
range?: Range;
|
|
25
|
-
stream?: SumiReadableStream<IChatProgress, Error>;
|
|
26
|
-
result?: string;
|
|
27
|
-
}> {
|
|
28
|
-
const uri = new URI(path.join(this.appConfig.workspaceDir, codeBlock.relativePath));
|
|
29
|
-
const modelReference = await this.modelService.createModelReference(uri);
|
|
30
|
-
const fileContent = modelReference.instance.getMonacoModel().getValue();
|
|
31
|
-
const stream = await this.aiBackService.requestStream(
|
|
32
|
-
`Merge all changes from the <update> snippet into the <code> below.
|
|
33
|
-
- Preserve the code's structure, order, comments, and indentation exactly.
|
|
34
|
-
- Output only the updated code, enclosed within <updated-code> and </updated-code> tags.
|
|
35
|
-
- Do not include any additional text, explanations, placeholders, ellipses, or code fences.
|
|
36
|
-
|
|
37
|
-
<code>${fileContent}</code>
|
|
38
|
-
|
|
39
|
-
<update>${codeBlock.codeEdit}</update>
|
|
40
|
-
|
|
41
|
-
Provide the complete updated code.
|
|
42
|
-
`,
|
|
43
|
-
{
|
|
44
|
-
...this.chatProxyService.getRequestOptions(),
|
|
45
|
-
trimTexts: ['<updated-code>', '</updated-code>'],
|
|
46
|
-
system:
|
|
47
|
-
'You are a coding assistant that helps merge code updates, ensuring every modification is fully integrated.',
|
|
48
|
-
},
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
stream,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|