@opensumi/ide-ai-native 3.8.1-next-1741253659.0 → 3.8.1-next-1741255538.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 (62) hide show
  1. package/lib/browser/chat/chat-proxy.service.d.ts +0 -8
  2. package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
  3. package/lib/browser/chat/chat-proxy.service.js +25 -30
  4. package/lib/browser/chat/chat-proxy.service.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/index.d.ts.map +1 -1
  8. package/lib/browser/index.js +0 -6
  9. package/lib/browser/index.js.map +1 -1
  10. package/lib/browser/mcp/config/components/mcp-config.view.d.ts.map +1 -1
  11. package/lib/browser/mcp/config/components/mcp-config.view.js +2 -0
  12. package/lib/browser/mcp/config/components/mcp-config.view.js.map +1 -1
  13. package/lib/browser/mcp/config/components/mcp-server-form.d.ts +5 -2
  14. package/lib/browser/mcp/config/components/mcp-server-form.d.ts.map +1 -1
  15. package/lib/browser/mcp/config/components/mcp-server-form.js +79 -33
  16. package/lib/browser/mcp/config/components/mcp-server-form.js.map +1 -1
  17. package/lib/browser/mcp/config/components/mcp-server-form.module.less +24 -1
  18. package/lib/common/mcp-server-manager.d.ts +21 -3
  19. package/lib/common/mcp-server-manager.d.ts.map +1 -1
  20. package/lib/common/mcp-server-manager.js.map +1 -1
  21. package/lib/common/types.d.ts +4 -0
  22. package/lib/common/types.d.ts.map +1 -1
  23. package/lib/common/types.js +6 -1
  24. package/lib/common/types.js.map +1 -1
  25. package/lib/node/base-language-model.js +1 -1
  26. package/lib/node/base-language-model.js.map +1 -1
  27. package/lib/node/mcp/sumi-mcp-server.d.ts +10 -1
  28. package/lib/node/mcp/sumi-mcp-server.d.ts.map +1 -1
  29. package/lib/node/mcp/sumi-mcp-server.js +13 -4
  30. package/lib/node/mcp/sumi-mcp-server.js.map +1 -1
  31. package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
  32. package/lib/node/mcp-server-manager-impl.js +22 -8
  33. package/lib/node/mcp-server-manager-impl.js.map +1 -1
  34. package/lib/node/mcp-server.sse.d.ts +192 -0
  35. package/lib/node/mcp-server.sse.d.ts.map +1 -0
  36. package/lib/node/mcp-server.sse.js +86 -0
  37. package/lib/node/mcp-server.sse.js.map +1 -0
  38. package/lib/node/{mcp-server.d.ts → mcp-server.stdio.d.ts} +2 -2
  39. package/lib/node/mcp-server.stdio.d.ts.map +1 -0
  40. package/lib/node/{mcp-server.js → mcp-server.stdio.js} +8 -6
  41. package/lib/node/mcp-server.stdio.js.map +1 -0
  42. package/package.json +23 -23
  43. package/src/browser/chat/chat-proxy.service.ts +22 -28
  44. package/src/browser/components/ChatInput.tsx +1 -1
  45. package/src/browser/index.ts +0 -6
  46. package/src/browser/mcp/config/components/mcp-config.view.tsx +2 -0
  47. package/src/browser/mcp/config/components/mcp-server-form.module.less +24 -1
  48. package/src/browser/mcp/config/components/mcp-server-form.tsx +149 -63
  49. package/src/common/mcp-server-manager.ts +22 -3
  50. package/src/common/types.ts +5 -0
  51. package/src/node/base-language-model.ts +1 -1
  52. package/src/node/mcp/sumi-mcp-server.ts +12 -7
  53. package/src/node/mcp-server-manager-impl.ts +20 -9
  54. package/src/node/mcp-server.sse.ts +97 -0
  55. package/src/node/{mcp-server.ts → mcp-server.stdio.ts} +4 -3
  56. package/lib/browser/chat/apply.service.d.ts +0 -16
  57. package/lib/browser/chat/apply.service.d.ts.map +0 -1
  58. package/lib/browser/chat/apply.service.js +0 -52
  59. package/lib/browser/chat/apply.service.js.map +0 -1
  60. package/lib/node/mcp-server.d.ts.map +0 -1
  61. package/lib/node/mcp-server.js.map +0 -1
  62. 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 MCPServerDescription {
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
- * Whether to enable the MCP server.
76
+ * The host of the MCP server.
62
77
  */
63
- enabled?: boolean;
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';
@@ -49,6 +49,11 @@ export interface MCPTool {
49
49
  providerName: string;
50
50
  }
51
51
 
52
+ export enum MCP_SERVER_TYPE {
53
+ STDIO = 'stdio',
54
+ SSE = 'sse',
55
+ }
56
+
52
57
  export interface CodeBlockData {
53
58
  messageId: string;
54
59
  toolCallId: string;
@@ -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].trim();
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 StdioMCPServerImpl) {
155
+ if (server instanceof StdioMCPServer) {
156
156
  return {
157
157
  name: server.getServerName(),
158
158
  isStarted: server.isStarted(),
159
- type: 'stdio',
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 { StdioMCPServerImpl } from './mcp-server';
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 { name, command, args, env } = description;
131
- const existingServer = this.servers.get(name);
132
-
133
- if (existingServer) {
134
- existingServer.update(command, args, env);
135
- } else {
136
- const newServer = new StdioMCPServerImpl(name, command, args, env, this.logger);
137
- this.servers.set(name, newServer);
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 StdioMCPServerImpl implements IMCPServer {
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: 'opensumi-mcp-client',
68
- version: '1.0.0',
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":"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"}
@@ -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
- }