@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.
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +1 -3
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/mcp/tools/getDiagnosticsByPath.d.ts +9 -3
- package/lib/browser/mcp/tools/getDiagnosticsByPath.d.ts.map +1 -1
- package/lib/browser/mcp/tools/getDiagnosticsByPath.js +68 -38
- package/lib/browser/mcp/tools/getDiagnosticsByPath.js.map +1 -1
- package/package.json +25 -25
- package/src/browser/index.ts +2 -4
- package/src/browser/mcp/tools/getDiagnosticsByPath.ts +63 -32
- package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.d.ts +0 -11
- package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.d.ts.map +0 -1
- package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.js +0 -120
- package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.js.map +0 -1
- package/src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts +0 -122
|
@@ -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;
|
|
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"}
|
package/lib/browser/index.js
CHANGED
|
@@ -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.
|
|
82
|
+
getDiagnosticsByPath_1.GetDiagnosticsTool,
|
|
85
83
|
runTerminalCmd_1.RunTerminalCommandTool,
|
|
86
84
|
// MCP Server Contributions END
|
|
87
85
|
// Context Service
|
package/lib/browser/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";;;;AAAA,qCAA+D;AAC/D,iEAaoC;AACpC,+DAMmC;AACnC,2HAAqH;AAErH,sCASmB;AACnB,uDAA+D;AAC/D,qEAAsF;AACtF,uFAAoH;AAEpH,iEAAqE;AACrE,wDAAoD;AACpD,kEAA6D;AAC7D,4EAAsE;AACtE,sEAAiE;AACjE,kEAA6D;AAC7D,8DAAsD;AACtD,wEAAmE;AACnE,wEAAmE;AACnE,sEAAiE;AACjE,iFAA4E;AAC5E,uEAAsE;AACtE,6FAA0F;AAC1F,oFAA4F;AAC5F,iIAA4H;AAC5H,yIAA4H;AAC5H,wHAAmH;AACnH,6DAAqE;AACrE,8GAAmG;AACnG,qGAAgG;AAChG,sFAA4F;AAC5F,wFAAoF;AACpF,4FAAuF;AACvF,iDAA4D;AAC5D,iEAA4D;AAC5D,0EAAgF;AAChF,kFAA6E;AAC7E,wEAAmE;AACnE,yFAAmF;AACnF,qFAAgF;AAChF,6EAAuE;AACvE,mFAAsE;AACtE,6EAA8E;AAC9E,mDAAoD;AACpD,uDAAwD;AACxD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
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
|
|
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":"
|
|
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.
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|
117
|
+
case ide_core_common_1.MarkerSeverity.Error:
|
|
96
118
|
return 'error';
|
|
97
|
-
case
|
|
119
|
+
case ide_core_common_1.MarkerSeverity.Warning:
|
|
98
120
|
return 'warning';
|
|
99
|
-
case
|
|
121
|
+
case ide_core_common_1.MarkerSeverity.Info:
|
|
100
122
|
return 'information';
|
|
101
|
-
case
|
|
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.
|
|
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
|
-
],
|
|
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)(
|
|
144
|
+
(0, di_1.Autowired)(ide_markers_1.IMarkerService),
|
|
115
145
|
tslib_1.__metadata("design:type", Object)
|
|
116
|
-
],
|
|
117
|
-
exports.
|
|
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
|
-
],
|
|
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":";;;;AAAA,
|
|
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-
|
|
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-
|
|
28
|
-
"@opensumi/ide-components": "3.9.1-next-
|
|
29
|
-
"@opensumi/ide-connection": "3.9.1-next-
|
|
30
|
-
"@opensumi/ide-core-common": "3.9.1-next-
|
|
31
|
-
"@opensumi/ide-core-node": "3.9.1-next-
|
|
32
|
-
"@opensumi/ide-debug": "3.9.1-next-
|
|
33
|
-
"@opensumi/ide-design": "3.9.1-next-
|
|
34
|
-
"@opensumi/ide-editor": "3.9.1-next-
|
|
35
|
-
"@opensumi/ide-file-search": "3.9.1-next-
|
|
36
|
-
"@opensumi/ide-file-service": "3.9.1-next-
|
|
37
|
-
"@opensumi/ide-main-layout": "3.9.1-next-
|
|
38
|
-
"@opensumi/ide-markers": "3.9.1-next-
|
|
39
|
-
"@opensumi/ide-monaco": "3.9.1-next-
|
|
40
|
-
"@opensumi/ide-outline": "3.9.1-next-
|
|
41
|
-
"@opensumi/ide-overlay": "3.9.1-next-
|
|
42
|
-
"@opensumi/ide-preferences": "3.9.1-next-
|
|
43
|
-
"@opensumi/ide-quick-open": "3.9.1-next-
|
|
44
|
-
"@opensumi/ide-search": "3.9.1-next-
|
|
45
|
-
"@opensumi/ide-terminal-next": "3.9.1-next-
|
|
46
|
-
"@opensumi/ide-theme": "3.9.1-next-
|
|
47
|
-
"@opensumi/ide-utils": "3.9.1-next-
|
|
48
|
-
"@opensumi/ide-workspace": "3.9.1-next-
|
|
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-
|
|
65
|
+
"@opensumi/ide-core-browser": "3.9.1-next-1755745798.0"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "3656dd7227b2d2f0f313acfcd5438ec448bf1e6d"
|
|
68
68
|
}
|
package/src/browser/index.ts
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
}
|