@opensumi/ide-ai-native 3.9.1-next-1753350817.0 → 3.9.1-next-1755745798.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAGL,qBAAqB,EACrB,aAAa,EASd,MAAM,4BAA4B,CAAC;AAyEpC,qBACa,cAAe,SAAQ,aAAa;IAE/C,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;;IAOzD,oBAAoB,WAAqD;IACzE,SAAS,EAAE,QAAQ,EAAE,CAsInB;IAEF,YAAY;;;;;;;;;;;;SAcV;CACH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAGL,qBAAqB,EACrB,aAAa,EASd,MAAM,4BAA4B,CAAC;AAwEpC,qBACa,cAAe,SAAQ,aAAa;IAE/C,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;;IAOzD,oBAAoB,WAAqD;IACzE,SAAS,EAAE,QAAQ,EAAE,CAqInB;IAEF,YAAY;;;;;;;;;;;;SAcV;CACH"}
@@ -46,7 +46,6 @@ const createNewFileWithText_1 = require("./mcp/tools/createNewFileWithText");
46
46
  const editFile_1 = require("./mcp/tools/editFile");
47
47
  const fileSearch_1 = require("./mcp/tools/fileSearch");
48
48
  const getDiagnosticsByPath_1 = require("./mcp/tools/getDiagnosticsByPath");
49
- const getOpenEditorFileDiagnostics_1 = require("./mcp/tools/getOpenEditorFileDiagnostics");
50
49
  const grepSearch_1 = require("./mcp/tools/grepSearch");
51
50
  const listDir_1 = require("./mcp/tools/listDir");
52
51
  const readFile_1 = require("./mcp/tools/readFile");
@@ -78,10 +77,9 @@ let AINativeModule = class AINativeModule extends ide_core_browser_1.BrowserModu
78
77
  readFile_1.ReadFileTool,
79
78
  editFile_1.EditFileTool,
80
79
  createNewFileWithText_1.CreateNewFileWithTextTool,
81
- getOpenEditorFileDiagnostics_1.GetOpenEditorFileDiagnosticsTool,
82
80
  fileSearch_1.FileSearchTool,
83
81
  grepSearch_1.GrepSearchTool,
84
- getDiagnosticsByPath_1.GetDiagnosticsByPathTool,
82
+ getDiagnosticsByPath_1.GetDiagnosticsTool,
85
83
  runTerminalCmd_1.RunTerminalCommandTool,
86
84
  // MCP Server Contributions END
87
85
  // Context Service
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,15 @@
1
- import { IMCPServerRegistry, MCPServerContribution, MCPToolDefinition } from '../../types';
2
- export declare class GetDiagnosticsByPathTool implements MCPServerContribution {
1
+ import { URI } from '@opensumi/ide-core-common';
2
+ import { IMarkerService } from '@opensumi/ide-markers';
3
+ import { IMCPServerRegistry, MCPLogger, MCPServerContribution, MCPToolDefinition } from '../../types';
4
+ export declare class GetDiagnosticsTool implements MCPServerContribution {
3
5
  private readonly workspaceService;
4
- private readonly markerService;
6
+ private readonly fileServiceClient;
7
+ private readonly modelService;
8
+ protected readonly markerService: IMarkerService;
5
9
  registerMCPServer(registry: IMCPServerRegistry): void;
6
10
  getToolDefinition(): MCPToolDefinition;
11
+ protected checkFilePath(filePathInProject: string, logger: MCPLogger): Promise<URI>;
12
+ protected ensureModelCreated(uri: URI): Promise<void>;
7
13
  private handler;
8
14
  private getSeverityString;
9
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getDiagnosticsByPath.d.ts","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/getDiagnosticsByPath.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAa,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMtG,qBACa,wBAAyB,YAAW,qBAAqB;IAEpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAE/C,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIrD,iBAAiB,IAAI,iBAAiB;YA2BxB,OAAO;IAsDrB,OAAO,CAAC,iBAAiB;CAc1B"}
1
+ {"version":3,"file":"getDiagnosticsByPath.d.ts","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/getDiagnosticsByPath.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoC,GAAG,EAAQ,MAAM,2BAA2B,CAAC;AAGxF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMtG,qBACa,kBAAmB,YAAW,qBAAqB;IAE9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IAGvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;IAG3D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IAEjD,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIrD,iBAAiB,IAAI,iBAAiB;cA2BtB,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;cA6B1D,kBAAkB,CAAC,GAAG,EAAE,GAAG;YAmB7B,OAAO;IAgCrB,OAAO,CAAC,iBAAiB;CAc1B"}
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GetDiagnosticsByPathTool = void 0;
3
+ exports.GetDiagnosticsTool = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const path = tslib_1.__importStar(require("path"));
6
5
  const zod_1 = require("zod");
7
6
  const di_1 = require("@opensumi/di");
8
7
  const ide_core_common_1 = require("@opensumi/ide-core-common");
8
+ const browser_1 = require("@opensumi/ide-editor/lib/browser");
9
+ const ide_file_service_1 = require("@opensumi/ide-file-service");
10
+ const ide_markers_1 = require("@opensumi/ide-markers");
9
11
  const ide_workspace_1 = require("@opensumi/ide-workspace");
10
- const uri_1 = require("@opensumi/monaco-editor-core/esm/vs/base/common/uri");
11
- const markers_1 = require("@opensumi/monaco-editor-core/esm/vs/platform/markers/common/markers");
12
12
  const types_1 = require("../../types");
13
13
  const inputSchema = zod_1.z.object({
14
14
  filePathInProject: zod_1.z.string().describe('The relative path to the file to get diagnostics for'),
15
15
  });
16
- let GetDiagnosticsByPathTool = class GetDiagnosticsByPathTool {
16
+ let GetDiagnosticsTool = class GetDiagnosticsTool {
17
17
  registerMCPServer(registry) {
18
18
  registry.registerMCPTool(this.getToolDefinition());
19
19
  }
@@ -42,32 +42,54 @@ let GetDiagnosticsByPathTool = class GetDiagnosticsByPathTool {
42
42
  handler: this.handler.bind(this),
43
43
  };
44
44
  }
45
+ async checkFilePath(filePathInProject, logger) {
46
+ // Get workspace roots
47
+ const workspaceRoots = this.workspaceService.tryGetRoots();
48
+ if (!workspaceRoots || workspaceRoots.length === 0) {
49
+ logger.appendLine('Error: Cannot determine project directory');
50
+ throw new Error('Cannot determine project directory');
51
+ }
52
+ // Validate file path
53
+ if (filePathInProject.startsWith('..') || filePathInProject.startsWith('/')) {
54
+ logger.appendLine('Error: File is outside of project scope');
55
+ throw new Error('File is outside of project scope');
56
+ }
57
+ // Construct full file path
58
+ const rootUri = ide_core_common_1.URI.parse(workspaceRoots[0].uri);
59
+ const fullPathUri = ide_core_common_1.URI.file(ide_core_common_1.path.join(rootUri.codeUri.fsPath, filePathInProject));
60
+ // Check if file exists
61
+ const fileExists = await this.fileServiceClient.access(fullPathUri.toString());
62
+ if (!fileExists) {
63
+ logger.appendLine(`Error: File does not exist: ${fullPathUri.toString()}`);
64
+ throw new Error('File does not exist');
65
+ }
66
+ return fullPathUri;
67
+ }
68
+ // 确保model已创建
69
+ async ensureModelCreated(uri) {
70
+ const models = this.modelService.getAllModels();
71
+ if (!models.some((model) => model.uri.isEqual(uri))) {
72
+ const markerChangeDeferred = new ide_core_common_1.Deferred();
73
+ // TODO: 诊断信息更新延迟问题如何彻底解决?现在事件都是从插件单向通知上来的
74
+ // 首次打开文件时最大4s, 如果4s内marker没有变化,则认为marker本身就是空的
75
+ this.markerService.getManager().onMarkerChanged((e) => {
76
+ if (e.some((uriStr) => uriStr === uri.toString())) {
77
+ markerChangeDeferred.resolve();
78
+ }
79
+ });
80
+ await this.modelService.createModelReference(uri);
81
+ await new Promise((resolve) => setTimeout(resolve, 4000)).then(() => {
82
+ markerChangeDeferred.resolve();
83
+ });
84
+ await markerChangeDeferred.promise;
85
+ }
86
+ }
45
87
  async handler(args, logger) {
46
88
  try {
47
- // 获取工作区根目录
48
- const workspaceRoots = this.workspaceService.tryGetRoots();
49
- if (!workspaceRoots || workspaceRoots.length === 0) {
50
- logger.appendLine('Error: Cannot determine project directory');
51
- return {
52
- content: [{ type: 'text', text: '[]' }],
53
- isError: true,
54
- };
55
- }
56
- // 构建完整的文件路径
57
- const rootUri = ide_core_common_1.URI.parse(workspaceRoots[0].uri);
58
- const fullPath = path.join(rootUri.codeUri.fsPath, args.filePathInProject);
59
- const uri = uri_1.URI.file(fullPath);
60
- // 检查文件是否在项目目录内
61
- const relativePath = path.relative(rootUri.codeUri.fsPath, fullPath);
62
- if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
63
- logger.appendLine('Error: File is outside of project scope');
64
- return {
65
- content: [{ type: 'text', text: '[]' }],
66
- isError: true,
67
- };
68
- }
89
+ const uri = await this.checkFilePath(args.filePathInProject, logger);
90
+ await this.ensureModelCreated(uri);
69
91
  // 获取文件的诊断信息
70
- const markers = this.markerService.read({ resource: uri });
92
+ const markers = this.markerService.getManager().getMarkers({ resource: uri.toString() });
71
93
  // 转换诊断信息
72
94
  const diagnosticInfos = markers.map((marker) => ({
73
95
  path: args.filePathInProject,
@@ -92,29 +114,37 @@ let GetDiagnosticsByPathTool = class GetDiagnosticsByPathTool {
92
114
  }
93
115
  getSeverityString(severity) {
94
116
  switch (severity) {
95
- case markers_1.MarkerSeverity.Error:
117
+ case ide_core_common_1.MarkerSeverity.Error:
96
118
  return 'error';
97
- case markers_1.MarkerSeverity.Warning:
119
+ case ide_core_common_1.MarkerSeverity.Warning:
98
120
  return 'warning';
99
- case markers_1.MarkerSeverity.Info:
121
+ case ide_core_common_1.MarkerSeverity.Info:
100
122
  return 'information';
101
- case markers_1.MarkerSeverity.Hint:
123
+ case ide_core_common_1.MarkerSeverity.Hint:
102
124
  return 'hint';
103
125
  default:
104
126
  return 'unknown';
105
127
  }
106
128
  }
107
129
  };
108
- exports.GetDiagnosticsByPathTool = GetDiagnosticsByPathTool;
130
+ exports.GetDiagnosticsTool = GetDiagnosticsTool;
109
131
  tslib_1.__decorate([
110
132
  (0, di_1.Autowired)(ide_workspace_1.IWorkspaceService),
111
133
  tslib_1.__metadata("design:type", Object)
112
- ], GetDiagnosticsByPathTool.prototype, "workspaceService", void 0);
134
+ ], GetDiagnosticsTool.prototype, "workspaceService", void 0);
135
+ tslib_1.__decorate([
136
+ (0, di_1.Autowired)(ide_file_service_1.IFileServiceClient),
137
+ tslib_1.__metadata("design:type", Object)
138
+ ], GetDiagnosticsTool.prototype, "fileServiceClient", void 0);
139
+ tslib_1.__decorate([
140
+ (0, di_1.Autowired)(browser_1.IEditorDocumentModelService),
141
+ tslib_1.__metadata("design:type", Object)
142
+ ], GetDiagnosticsTool.prototype, "modelService", void 0);
113
143
  tslib_1.__decorate([
114
- (0, di_1.Autowired)(markers_1.IMarkerService),
144
+ (0, di_1.Autowired)(ide_markers_1.IMarkerService),
115
145
  tslib_1.__metadata("design:type", Object)
116
- ], GetDiagnosticsByPathTool.prototype, "markerService", void 0);
117
- exports.GetDiagnosticsByPathTool = GetDiagnosticsByPathTool = tslib_1.__decorate([
146
+ ], GetDiagnosticsTool.prototype, "markerService", void 0);
147
+ exports.GetDiagnosticsTool = GetDiagnosticsTool = tslib_1.__decorate([
118
148
  (0, ide_core_common_1.Domain)(types_1.MCPServerContribution)
119
- ], GetDiagnosticsByPathTool);
149
+ ], GetDiagnosticsTool);
120
150
  //# sourceMappingURL=getDiagnosticsByPath.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getDiagnosticsByPath.js","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/getDiagnosticsByPath.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getDiagnosticsByPath.js","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/getDiagnosticsByPath.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensumi/ide-ai-native",
3
- "version": "3.9.1-next-1753350817.0",
3
+ "version": "3.9.1-next-1755745798.0",
4
4
  "files": [
5
5
  "lib",
6
6
  "src"
@@ -24,28 +24,28 @@
24
24
  "@ai-sdk/openai": "^1.1.9",
25
25
  "@ai-sdk/openai-compatible": "^0.1.11",
26
26
  "@modelcontextprotocol/sdk": "^1.11.4",
27
- "@opensumi/ide-addons": "3.9.1-next-1753350817.0",
28
- "@opensumi/ide-components": "3.9.1-next-1753350817.0",
29
- "@opensumi/ide-connection": "3.9.1-next-1753350817.0",
30
- "@opensumi/ide-core-common": "3.9.1-next-1753350817.0",
31
- "@opensumi/ide-core-node": "3.9.1-next-1753350817.0",
32
- "@opensumi/ide-debug": "3.9.1-next-1753350817.0",
33
- "@opensumi/ide-design": "3.9.1-next-1753350817.0",
34
- "@opensumi/ide-editor": "3.9.1-next-1753350817.0",
35
- "@opensumi/ide-file-search": "3.9.1-next-1753350817.0",
36
- "@opensumi/ide-file-service": "3.9.1-next-1753350817.0",
37
- "@opensumi/ide-main-layout": "3.9.1-next-1753350817.0",
38
- "@opensumi/ide-markers": "3.9.1-next-1753350817.0",
39
- "@opensumi/ide-monaco": "3.9.1-next-1753350817.0",
40
- "@opensumi/ide-outline": "3.9.1-next-1753350817.0",
41
- "@opensumi/ide-overlay": "3.9.1-next-1753350817.0",
42
- "@opensumi/ide-preferences": "3.9.1-next-1753350817.0",
43
- "@opensumi/ide-quick-open": "3.9.1-next-1753350817.0",
44
- "@opensumi/ide-search": "3.9.1-next-1753350817.0",
45
- "@opensumi/ide-terminal-next": "3.9.1-next-1753350817.0",
46
- "@opensumi/ide-theme": "3.9.1-next-1753350817.0",
47
- "@opensumi/ide-utils": "3.9.1-next-1753350817.0",
48
- "@opensumi/ide-workspace": "3.9.1-next-1753350817.0",
27
+ "@opensumi/ide-addons": "3.9.1-next-1755745798.0",
28
+ "@opensumi/ide-components": "3.9.1-next-1755745798.0",
29
+ "@opensumi/ide-connection": "3.9.1-next-1755745798.0",
30
+ "@opensumi/ide-core-common": "3.9.1-next-1755745798.0",
31
+ "@opensumi/ide-core-node": "3.9.1-next-1755745798.0",
32
+ "@opensumi/ide-debug": "3.9.1-next-1755745798.0",
33
+ "@opensumi/ide-design": "3.9.1-next-1755745798.0",
34
+ "@opensumi/ide-editor": "3.9.1-next-1755745798.0",
35
+ "@opensumi/ide-file-search": "3.9.1-next-1755745798.0",
36
+ "@opensumi/ide-file-service": "3.9.1-next-1755745798.0",
37
+ "@opensumi/ide-main-layout": "3.9.1-next-1755745798.0",
38
+ "@opensumi/ide-markers": "3.9.1-next-1755745798.0",
39
+ "@opensumi/ide-monaco": "3.9.1-next-1755745798.0",
40
+ "@opensumi/ide-outline": "3.9.1-next-1755745798.0",
41
+ "@opensumi/ide-overlay": "3.9.1-next-1755745798.0",
42
+ "@opensumi/ide-preferences": "3.9.1-next-1755745798.0",
43
+ "@opensumi/ide-quick-open": "3.9.1-next-1755745798.0",
44
+ "@opensumi/ide-search": "3.9.1-next-1755745798.0",
45
+ "@opensumi/ide-terminal-next": "3.9.1-next-1755745798.0",
46
+ "@opensumi/ide-theme": "3.9.1-next-1755745798.0",
47
+ "@opensumi/ide-utils": "3.9.1-next-1755745798.0",
48
+ "@opensumi/ide-workspace": "3.9.1-next-1755745798.0",
49
49
  "@xterm/xterm": "5.5.0",
50
50
  "ai": "^4.3.16",
51
51
  "ansi-regex": "^2.0.0",
@@ -62,7 +62,7 @@
62
62
  "zod-to-json-schema": "^3.24.1"
63
63
  },
64
64
  "devDependencies": {
65
- "@opensumi/ide-core-browser": "3.9.1-next-1753350817.0"
65
+ "@opensumi/ide-core-browser": "3.9.1-next-1755745798.0"
66
66
  },
67
- "gitHead": "8fbbea3371716bd8697f9e5e75e3e8cb6c99d259"
67
+ "gitHead": "3656dd7227b2d2f0f313acfcd5438ec448bf1e6d"
68
68
  }
@@ -71,8 +71,7 @@ import { MCPServerRegistry } from './mcp/mcp-server.feature.registry';
71
71
  import { CreateNewFileWithTextTool } from './mcp/tools/createNewFileWithText';
72
72
  import { EditFileTool } from './mcp/tools/editFile';
73
73
  import { FileSearchTool } from './mcp/tools/fileSearch';
74
- import { GetDiagnosticsByPathTool } from './mcp/tools/getDiagnosticsByPath';
75
- import { GetOpenEditorFileDiagnosticsTool } from './mcp/tools/getOpenEditorFileDiagnostics';
74
+ import { GetDiagnosticsTool } from './mcp/tools/getDiagnosticsByPath';
76
75
  import { GrepSearchTool } from './mcp/tools/grepSearch';
77
76
  import { ListDirTool } from './mcp/tools/listDir';
78
77
  import { ReadFileTool } from './mcp/tools/readFile';
@@ -113,10 +112,9 @@ export class AINativeModule extends BrowserModule {
113
112
  ReadFileTool,
114
113
  EditFileTool,
115
114
  CreateNewFileWithTextTool,
116
- GetOpenEditorFileDiagnosticsTool,
117
115
  FileSearchTool,
118
116
  GrepSearchTool,
119
- GetDiagnosticsByPathTool,
117
+ GetDiagnosticsTool,
120
118
  RunTerminalCommandTool,
121
119
  // MCP Server Contributions END
122
120
 
@@ -1,12 +1,11 @@
1
- import * as path from 'path';
2
-
3
1
  import { z } from 'zod';
4
2
 
5
3
  import { Autowired } from '@opensumi/di';
6
- import { Domain, URI } from '@opensumi/ide-core-common';
4
+ import { Deferred, Domain, MarkerSeverity, URI, path } from '@opensumi/ide-core-common';
5
+ import { IEditorDocumentModelService } from '@opensumi/ide-editor/lib/browser';
6
+ import { IFileServiceClient } from '@opensumi/ide-file-service';
7
+ import { IMarkerService } from '@opensumi/ide-markers';
7
8
  import { IWorkspaceService } from '@opensumi/ide-workspace';
8
- import { URI as MonacoURI } from '@opensumi/monaco-editor-core/esm/vs/base/common/uri';
9
- import { IMarkerService, MarkerSeverity } from '@opensumi/monaco-editor-core/esm/vs/platform/markers/common/markers';
10
9
 
11
10
  import { IMCPServerRegistry, MCPLogger, MCPServerContribution, MCPToolDefinition } from '../../types';
12
11
 
@@ -15,12 +14,18 @@ const inputSchema = z.object({
15
14
  });
16
15
 
17
16
  @Domain(MCPServerContribution)
18
- export class GetDiagnosticsByPathTool implements MCPServerContribution {
17
+ export class GetDiagnosticsTool implements MCPServerContribution {
19
18
  @Autowired(IWorkspaceService)
20
19
  private readonly workspaceService: IWorkspaceService;
21
20
 
21
+ @Autowired(IFileServiceClient)
22
+ private readonly fileServiceClient: IFileServiceClient;
23
+
24
+ @Autowired(IEditorDocumentModelService)
25
+ private readonly modelService: IEditorDocumentModelService;
26
+
22
27
  @Autowired(IMarkerService)
23
- private readonly markerService: IMarkerService;
28
+ protected readonly markerService: IMarkerService;
24
29
 
25
30
  registerMCPServer(registry: IMCPServerRegistry): void {
26
31
  registry.registerMCPTool(this.getToolDefinition());
@@ -53,35 +58,61 @@ export class GetDiagnosticsByPathTool implements MCPServerContribution {
53
58
  };
54
59
  }
55
60
 
61
+ protected async checkFilePath(filePathInProject: string, logger: MCPLogger) {
62
+ // Get workspace roots
63
+ const workspaceRoots = this.workspaceService.tryGetRoots();
64
+ if (!workspaceRoots || workspaceRoots.length === 0) {
65
+ logger.appendLine('Error: Cannot determine project directory');
66
+ throw new Error('Cannot determine project directory');
67
+ }
68
+
69
+ // Validate file path
70
+ if (filePathInProject.startsWith('..') || filePathInProject.startsWith('/')) {
71
+ logger.appendLine('Error: File is outside of project scope');
72
+ throw new Error('File is outside of project scope');
73
+ }
74
+
75
+ // Construct full file path
76
+ const rootUri = URI.parse(workspaceRoots[0].uri);
77
+ const fullPathUri = URI.file(path.join(rootUri.codeUri.fsPath, filePathInProject));
78
+
79
+ // Check if file exists
80
+ const fileExists = await this.fileServiceClient.access(fullPathUri.toString());
81
+ if (!fileExists) {
82
+ logger.appendLine(`Error: File does not exist: ${fullPathUri.toString()}`);
83
+ throw new Error('File does not exist');
84
+ }
85
+
86
+ return fullPathUri;
87
+ }
88
+
89
+ // 确保model已创建
90
+ protected async ensureModelCreated(uri: URI) {
91
+ const models = this.modelService.getAllModels();
92
+ if (!models.some((model) => model.uri.isEqual(uri))) {
93
+ const markerChangeDeferred = new Deferred<void>();
94
+ // TODO: 诊断信息更新延迟问题如何彻底解决?现在事件都是从插件单向通知上来的
95
+ // 首次打开文件时最大4s, 如果4s内marker没有变化,则认为marker本身就是空的
96
+ this.markerService.getManager().onMarkerChanged((e) => {
97
+ if (e.some((uriStr) => uriStr === uri.toString())) {
98
+ markerChangeDeferred.resolve();
99
+ }
100
+ });
101
+ await this.modelService.createModelReference(uri);
102
+ await new Promise((resolve) => setTimeout(resolve, 4000)).then(() => {
103
+ markerChangeDeferred.resolve();
104
+ });
105
+ await markerChangeDeferred.promise;
106
+ }
107
+ }
108
+
56
109
  private async handler(args: z.infer<typeof inputSchema>, logger: MCPLogger) {
57
110
  try {
58
- // 获取工作区根目录
59
- const workspaceRoots = this.workspaceService.tryGetRoots();
60
- if (!workspaceRoots || workspaceRoots.length === 0) {
61
- logger.appendLine('Error: Cannot determine project directory');
62
- return {
63
- content: [{ type: 'text', text: '[]' }],
64
- isError: true,
65
- };
66
- }
67
-
68
- // 构建完整的文件路径
69
- const rootUri = URI.parse(workspaceRoots[0].uri);
70
- const fullPath = path.join(rootUri.codeUri.fsPath, args.filePathInProject);
71
- const uri = MonacoURI.file(fullPath);
72
-
73
- // 检查文件是否在项目目录内
74
- const relativePath = path.relative(rootUri.codeUri.fsPath, fullPath);
75
- if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
76
- logger.appendLine('Error: File is outside of project scope');
77
- return {
78
- content: [{ type: 'text', text: '[]' }],
79
- isError: true,
80
- };
81
- }
111
+ const uri = await this.checkFilePath(args.filePathInProject, logger);
112
+ await this.ensureModelCreated(uri);
82
113
 
83
114
  // 获取文件的诊断信息
84
- const markers = this.markerService.read({ resource: uri });
115
+ const markers = this.markerService.getManager().getMarkers({ resource: uri.toString() });
85
116
 
86
117
  // 转换诊断信息
87
118
  const diagnosticInfos = markers.map((marker) => ({
@@ -1,11 +0,0 @@
1
- import { IMCPServerRegistry, MCPServerContribution, MCPToolDefinition } from '../../types';
2
- export declare class GetOpenEditorFileDiagnosticsTool implements MCPServerContribution {
3
- private readonly editorService;
4
- private readonly workspaceService;
5
- private readonly markerService;
6
- registerMCPServer(registry: IMCPServerRegistry): void;
7
- getToolDefinition(): MCPToolDefinition;
8
- private handler;
9
- private getSeverityString;
10
- }
11
- //# sourceMappingURL=getOpenEditorFileDiagnostics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getOpenEditorFileDiagnostics.d.ts","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,kBAAkB,EAAa,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAItG,qBACa,gCAAiC,YAAW,qBAAqB;IAE5E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAGvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAE/C,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIrD,iBAAiB,IAAI,iBAAiB;YAyBxB,OAAO;IAoDrB,OAAO,CAAC,iBAAiB;CAc1B"}
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GetOpenEditorFileDiagnosticsTool = void 0;
4
- const tslib_1 = require("tslib");
5
- const path = tslib_1.__importStar(require("path"));
6
- const zod_1 = require("zod");
7
- const di_1 = require("@opensumi/di");
8
- const ide_core_common_1 = require("@opensumi/ide-core-common");
9
- const ide_editor_1 = require("@opensumi/ide-editor");
10
- const ide_workspace_1 = require("@opensumi/ide-workspace");
11
- const uri_1 = require("@opensumi/monaco-editor-core/esm/vs/base/common/uri");
12
- const markers_1 = require("@opensumi/monaco-editor-core/esm/vs/platform/markers/common/markers");
13
- const types_1 = require("../../types");
14
- const inputSchema = zod_1.z.object({});
15
- let GetOpenEditorFileDiagnosticsTool = class GetOpenEditorFileDiagnosticsTool {
16
- registerMCPServer(registry) {
17
- registry.registerMCPTool(this.getToolDefinition());
18
- }
19
- getToolDefinition() {
20
- return {
21
- name: 'get_open_in_editor_file_diagnostics',
22
- label: 'Get Current Editor Diagnostics',
23
- order: 8,
24
- description: 'Retrieves diagnostic information (errors, warnings, etc.) from the currently active file in VS Code editor. ' +
25
- 'Use this tool to get information about problems in your current file. ' +
26
- 'IMPORTANT: This tool should be called after any code generation or modification operations to verify and fix potential issues. ' +
27
- 'Returns a JSON-formatted list of diagnostics, where each entry contains: ' +
28
- '- path: The file path where the diagnostic was found ' +
29
- '- line: The line number (1-based) of the diagnostic ' +
30
- '- severity: The severity level ("error", "warning", "information", or "hint") ' +
31
- '- message: The diagnostic message ' +
32
- 'Returns an empty list ([]) if no diagnostics are found or no file is open. ' +
33
- 'Best Practice: Always check diagnostics after code generation to ensure code quality and fix any issues immediately. ' +
34
- 'Diagnostic Severity Handling Guidelines: ' +
35
- '- "error": Must be fixed immediately as they indicate critical issues that will prevent code from working correctly. ' +
36
- '- "warning": For user code, preserve unless the warning indicates a clear improvement opportunity. For generated code, optimize to remove warnings. ' +
37
- '- "information"/"hint": For user code, preserve as they might reflect intentional patterns. For generated code, optimize if it improves code quality without changing functionality.',
38
- inputSchema,
39
- handler: this.handler.bind(this),
40
- };
41
- }
42
- async handler(args, logger) {
43
- try {
44
- // 获取当前活动的编辑器
45
- const editor = this.editorService.currentEditor;
46
- if (!editor || !editor.currentUri) {
47
- logger.appendLine('Error: No active text editor found');
48
- return {
49
- content: [{ type: 'text', text: '[]' }],
50
- isError: true,
51
- };
52
- }
53
- // 获取工作区根目录
54
- const workspaceRoots = this.workspaceService.tryGetRoots();
55
- if (!workspaceRoots || workspaceRoots.length === 0) {
56
- logger.appendLine('Error: Cannot determine project directory');
57
- return {
58
- content: [{ type: 'text', text: '[]' }],
59
- isError: true,
60
- };
61
- }
62
- // 获取当前文件的诊断信息
63
- const monacoUri = uri_1.URI.parse(editor.currentUri.toString());
64
- const markers = this.markerService.read({ resource: monacoUri });
65
- const rootUri = ide_core_common_1.URI.parse(workspaceRoots[0].uri);
66
- const relativePath = path.relative(rootUri.codeUri.fsPath, editor.currentUri.codeUri.fsPath);
67
- // 转换诊断信息
68
- const diagnosticInfos = markers.map((marker) => ({
69
- path: relativePath,
70
- line: marker.startLineNumber,
71
- severity: this.getSeverityString(marker.severity),
72
- message: marker.message,
73
- }));
74
- // 将结果转换为 JSON 字符串
75
- const resultJson = JSON.stringify(diagnosticInfos, null, 2);
76
- logger.appendLine(`Found ${diagnosticInfos.length} diagnostics in current file`);
77
- return {
78
- content: [{ type: 'text', text: resultJson }],
79
- };
80
- }
81
- catch (error) {
82
- logger.appendLine(`Error getting diagnostics: ${error}`);
83
- return {
84
- content: [{ type: 'text', text: '[]' }],
85
- isError: true,
86
- };
87
- }
88
- }
89
- getSeverityString(severity) {
90
- switch (severity) {
91
- case markers_1.MarkerSeverity.Error:
92
- return 'error';
93
- case markers_1.MarkerSeverity.Warning:
94
- return 'warning';
95
- case markers_1.MarkerSeverity.Info:
96
- return 'information';
97
- case markers_1.MarkerSeverity.Hint:
98
- return 'hint';
99
- default:
100
- return 'unknown';
101
- }
102
- }
103
- };
104
- exports.GetOpenEditorFileDiagnosticsTool = GetOpenEditorFileDiagnosticsTool;
105
- tslib_1.__decorate([
106
- (0, di_1.Autowired)(ide_editor_1.WorkbenchEditorService),
107
- tslib_1.__metadata("design:type", ide_editor_1.WorkbenchEditorService)
108
- ], GetOpenEditorFileDiagnosticsTool.prototype, "editorService", void 0);
109
- tslib_1.__decorate([
110
- (0, di_1.Autowired)(ide_workspace_1.IWorkspaceService),
111
- tslib_1.__metadata("design:type", Object)
112
- ], GetOpenEditorFileDiagnosticsTool.prototype, "workspaceService", void 0);
113
- tslib_1.__decorate([
114
- (0, di_1.Autowired)(markers_1.IMarkerService),
115
- tslib_1.__metadata("design:type", Object)
116
- ], GetOpenEditorFileDiagnosticsTool.prototype, "markerService", void 0);
117
- exports.GetOpenEditorFileDiagnosticsTool = GetOpenEditorFileDiagnosticsTool = tslib_1.__decorate([
118
- (0, ide_core_common_1.Domain)(types_1.MCPServerContribution)
119
- ], GetOpenEditorFileDiagnosticsTool);
120
- //# sourceMappingURL=getOpenEditorFileDiagnostics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getOpenEditorFileDiagnostics.js","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts"],"names":[],"mappings":"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"}
@@ -1,122 +0,0 @@
1
- import * as path from 'path';
2
-
3
- import { z } from 'zod';
4
-
5
- import { Autowired } from '@opensumi/di';
6
- import { Domain, URI } from '@opensumi/ide-core-common';
7
- import { WorkbenchEditorService } from '@opensumi/ide-editor';
8
- import { IWorkspaceService } from '@opensumi/ide-workspace';
9
- import { URI as MonacoURI } from '@opensumi/monaco-editor-core/esm/vs/base/common/uri';
10
- import { IMarkerService, MarkerSeverity } from '@opensumi/monaco-editor-core/esm/vs/platform/markers/common/markers';
11
-
12
- import { IMCPServerRegistry, MCPLogger, MCPServerContribution, MCPToolDefinition } from '../../types';
13
-
14
- const inputSchema = z.object({});
15
-
16
- @Domain(MCPServerContribution)
17
- export class GetOpenEditorFileDiagnosticsTool implements MCPServerContribution {
18
- @Autowired(WorkbenchEditorService)
19
- private readonly editorService: WorkbenchEditorService;
20
-
21
- @Autowired(IWorkspaceService)
22
- private readonly workspaceService: IWorkspaceService;
23
-
24
- @Autowired(IMarkerService)
25
- private readonly markerService: IMarkerService;
26
-
27
- registerMCPServer(registry: IMCPServerRegistry): void {
28
- registry.registerMCPTool(this.getToolDefinition());
29
- }
30
-
31
- getToolDefinition(): MCPToolDefinition {
32
- return {
33
- name: 'get_open_in_editor_file_diagnostics',
34
- label: 'Get Current Editor Diagnostics',
35
- order: 8,
36
- description:
37
- 'Retrieves diagnostic information (errors, warnings, etc.) from the currently active file in VS Code editor. ' +
38
- 'Use this tool to get information about problems in your current file. ' +
39
- 'IMPORTANT: This tool should be called after any code generation or modification operations to verify and fix potential issues. ' +
40
- 'Returns a JSON-formatted list of diagnostics, where each entry contains: ' +
41
- '- path: The file path where the diagnostic was found ' +
42
- '- line: The line number (1-based) of the diagnostic ' +
43
- '- severity: The severity level ("error", "warning", "information", or "hint") ' +
44
- '- message: The diagnostic message ' +
45
- 'Returns an empty list ([]) if no diagnostics are found or no file is open. ' +
46
- 'Best Practice: Always check diagnostics after code generation to ensure code quality and fix any issues immediately. ' +
47
- 'Diagnostic Severity Handling Guidelines: ' +
48
- '- "error": Must be fixed immediately as they indicate critical issues that will prevent code from working correctly. ' +
49
- '- "warning": For user code, preserve unless the warning indicates a clear improvement opportunity. For generated code, optimize to remove warnings. ' +
50
- '- "information"/"hint": For user code, preserve as they might reflect intentional patterns. For generated code, optimize if it improves code quality without changing functionality.',
51
- inputSchema,
52
- handler: this.handler.bind(this),
53
- };
54
- }
55
-
56
- private async handler(args: z.infer<typeof inputSchema>, logger: MCPLogger) {
57
- try {
58
- // 获取当前活动的编辑器
59
- const editor = this.editorService.currentEditor;
60
- if (!editor || !editor.currentUri) {
61
- logger.appendLine('Error: No active text editor found');
62
- return {
63
- content: [{ type: 'text', text: '[]' }],
64
- isError: true,
65
- };
66
- }
67
-
68
- // 获取工作区根目录
69
- const workspaceRoots = this.workspaceService.tryGetRoots();
70
- if (!workspaceRoots || workspaceRoots.length === 0) {
71
- logger.appendLine('Error: Cannot determine project directory');
72
- return {
73
- content: [{ type: 'text', text: '[]' }],
74
- isError: true,
75
- };
76
- }
77
-
78
- // 获取当前文件的诊断信息
79
- const monacoUri = MonacoURI.parse(editor.currentUri.toString());
80
- const markers = this.markerService.read({ resource: monacoUri });
81
- const rootUri = URI.parse(workspaceRoots[0].uri);
82
- const relativePath = path.relative(rootUri.codeUri.fsPath, editor.currentUri.codeUri.fsPath);
83
-
84
- // 转换诊断信息
85
- const diagnosticInfos = markers.map((marker) => ({
86
- path: relativePath,
87
- line: marker.startLineNumber,
88
- severity: this.getSeverityString(marker.severity),
89
- message: marker.message,
90
- }));
91
-
92
- // 将结果转换为 JSON 字符串
93
- const resultJson = JSON.stringify(diagnosticInfos, null, 2);
94
- logger.appendLine(`Found ${diagnosticInfos.length} diagnostics in current file`);
95
-
96
- return {
97
- content: [{ type: 'text', text: resultJson }],
98
- };
99
- } catch (error) {
100
- logger.appendLine(`Error getting diagnostics: ${error}`);
101
- return {
102
- content: [{ type: 'text', text: '[]' }],
103
- isError: true,
104
- };
105
- }
106
- }
107
-
108
- private getSeverityString(severity: MarkerSeverity): string {
109
- switch (severity) {
110
- case MarkerSeverity.Error:
111
- return 'error';
112
- case MarkerSeverity.Warning:
113
- return 'warning';
114
- case MarkerSeverity.Info:
115
- return 'information';
116
- case MarkerSeverity.Hint:
117
- return 'hint';
118
- default:
119
- return 'unknown';
120
- }
121
- }
122
- }