@opensumi/ide-ai-native 3.7.2-next-1740066619.0 → 3.7.2-next-1740323956.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/ai-core.contribution.d.ts.map +1 -1
- package/lib/browser/ai-core.contribution.js +4 -0
- package/lib/browser/ai-core.contribution.js.map +1 -1
- package/lib/browser/chat/chat-agent.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-agent.service.js +6 -0
- package/lib/browser/chat/chat-agent.service.js.map +1 -1
- package/lib/browser/chat/chat-model.d.ts.map +1 -1
- package/lib/browser/chat/chat-model.js +5 -23
- package/lib/browser/chat/chat-model.js.map +1 -1
- package/lib/browser/chat/chat-proxy.service.d.ts +1 -0
- package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-proxy.service.js +8 -1
- package/lib/browser/chat/chat-proxy.service.js.map +1 -1
- package/lib/browser/chat/chat.internal.service.d.ts +4 -0
- package/lib/browser/chat/chat.internal.service.d.ts.map +1 -1
- package/lib/browser/chat/chat.internal.service.js +10 -1
- package/lib/browser/chat/chat.internal.service.js.map +1 -1
- package/lib/browser/chat/chat.view.d.ts.map +1 -1
- package/lib/browser/chat/chat.view.js +2 -2
- package/lib/browser/chat/chat.view.js.map +1 -1
- package/lib/browser/components/ChatContext/index.d.ts.map +1 -1
- package/lib/browser/components/ChatContext/index.js +18 -2
- package/lib/browser/components/ChatContext/index.js.map +1 -1
- package/lib/browser/components/ChatContext/style.module.less +12 -0
- package/lib/browser/components/ChatEditor.d.ts +1 -0
- package/lib/browser/components/ChatEditor.d.ts.map +1 -1
- package/lib/browser/components/ChatEditor.js +3 -3
- package/lib/browser/components/ChatEditor.js.map +1 -1
- package/lib/browser/components/ChatMarkdown.d.ts +1 -0
- package/lib/browser/components/ChatMarkdown.d.ts.map +1 -1
- package/lib/browser/components/ChatMarkdown.js +2 -2
- package/lib/browser/components/ChatMarkdown.js.map +1 -1
- package/lib/browser/components/ChatReply.d.ts.map +1 -1
- package/lib/browser/components/ChatReply.js +6 -8
- package/lib/browser/components/ChatReply.js.map +1 -1
- package/lib/browser/components/ChatToolRender.d.ts +1 -0
- package/lib/browser/components/ChatToolRender.d.ts.map +1 -1
- package/lib/browser/components/ChatToolRender.js +25 -7
- package/lib/browser/components/ChatToolRender.js.map +1 -1
- package/lib/browser/components/components.module.less +3 -2
- package/lib/browser/context/llm-context.service.d.ts +1 -0
- package/lib/browser/context/llm-context.service.d.ts.map +1 -1
- package/lib/browser/context/llm-context.service.js +24 -18
- package/lib/browser/context/llm-context.service.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +11 -12
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/mcp/base-apply.service.d.ts +67 -0
- package/lib/browser/mcp/base-apply.service.d.ts.map +1 -0
- package/lib/browser/mcp/base-apply.service.js +290 -0
- package/lib/browser/mcp/base-apply.service.js.map +1 -0
- package/lib/browser/mcp/mcp-server-proxy.service.d.ts +6 -1
- package/lib/browser/mcp/mcp-server-proxy.service.d.ts.map +1 -1
- package/lib/browser/mcp/mcp-server-proxy.service.js +2 -1
- package/lib/browser/mcp/mcp-server-proxy.service.js.map +1 -1
- package/lib/browser/mcp/mcp-server.feature.registry.d.ts +5 -1
- package/lib/browser/mcp/mcp-server.feature.registry.d.ts.map +1 -1
- package/lib/browser/mcp/mcp-server.feature.registry.js +17 -1
- package/lib/browser/mcp/mcp-server.feature.registry.js.map +1 -1
- package/lib/browser/mcp/tools/components/EditFile.d.ts +3 -0
- package/lib/browser/mcp/tools/components/EditFile.d.ts.map +1 -0
- package/lib/browser/mcp/tools/components/EditFile.js +101 -0
- package/lib/browser/mcp/tools/components/EditFile.js.map +1 -0
- package/lib/browser/mcp/tools/components/SearchResult.d.ts +11 -0
- package/lib/browser/mcp/tools/components/SearchResult.d.ts.map +1 -0
- package/lib/browser/mcp/tools/components/SearchResult.js +60 -0
- package/lib/browser/mcp/tools/components/SearchResult.js.map +1 -0
- package/lib/browser/mcp/tools/components/index.module.less +132 -0
- package/lib/browser/mcp/tools/createNewFileWithText.d.ts.map +1 -1
- package/lib/browser/mcp/tools/createNewFileWithText.js +1 -2
- package/lib/browser/mcp/tools/createNewFileWithText.js.map +1 -1
- package/lib/browser/mcp/tools/{getSelectedText.d.ts → editFile.d.ts} +3 -3
- package/lib/browser/mcp/tools/editFile.d.ts.map +1 -0
- package/lib/browser/mcp/tools/editFile.js +95 -0
- package/lib/browser/mcp/tools/editFile.js.map +1 -0
- package/lib/browser/mcp/tools/{findFilesByNameSubstring.d.ts → fileSearch.d.ts} +3 -2
- package/lib/browser/mcp/tools/fileSearch.d.ts.map +1 -0
- package/lib/browser/mcp/tools/fileSearch.js +94 -0
- package/lib/browser/mcp/tools/fileSearch.js.map +1 -0
- package/lib/browser/mcp/tools/getDiagnosticsByPath.d.ts.map +1 -1
- package/lib/browser/mcp/tools/getDiagnosticsByPath.js +1 -2
- package/lib/browser/mcp/tools/getDiagnosticsByPath.js.map +1 -1
- package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.d.ts.map +1 -1
- package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.js +1 -2
- package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.js.map +1 -1
- package/lib/browser/mcp/tools/{getFileTextByPath.d.ts → grepSearch.d.ts} +4 -3
- package/lib/browser/mcp/tools/grepSearch.d.ts.map +1 -0
- package/lib/browser/mcp/tools/grepSearch.js +118 -0
- package/lib/browser/mcp/tools/grepSearch.js.map +1 -0
- package/lib/browser/mcp/tools/handlers/EditFile.d.ts +10 -0
- package/lib/browser/mcp/tools/handlers/EditFile.d.ts.map +1 -0
- package/lib/browser/mcp/tools/handlers/EditFile.js +28 -0
- package/lib/browser/mcp/tools/handlers/EditFile.js.map +1 -0
- package/lib/browser/mcp/tools/handlers/ReadFile.d.ts +6 -0
- package/lib/browser/mcp/tools/handlers/ReadFile.d.ts.map +1 -1
- package/lib/browser/mcp/tools/handlers/ReadFile.js +14 -0
- package/lib/browser/mcp/tools/handlers/ReadFile.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/utils.d.ts +2 -0
- package/lib/browser/mcp/tools/handlers/utils.d.ts.map +1 -0
- package/lib/browser/mcp/tools/handlers/utils.js +7 -0
- package/lib/browser/mcp/tools/handlers/utils.js.map +1 -0
- package/lib/browser/mcp/tools/listDir.d.ts.map +1 -1
- package/lib/browser/mcp/tools/listDir.js +3 -4
- package/lib/browser/mcp/tools/listDir.js.map +1 -1
- package/lib/browser/mcp/tools/readFile.d.ts.map +1 -1
- package/lib/browser/mcp/tools/readFile.js +3 -4
- package/lib/browser/mcp/tools/readFile.js.map +1 -1
- package/lib/browser/mcp/tools/runTerminalCmd.d.ts.map +1 -1
- package/lib/browser/mcp/tools/runTerminalCmd.js +1 -2
- package/lib/browser/mcp/tools/runTerminalCmd.js.map +1 -1
- package/lib/browser/model/msg-history-manager.d.ts +5 -0
- package/lib/browser/model/msg-history-manager.d.ts.map +1 -1
- package/lib/browser/model/msg-history-manager.js +14 -0
- package/lib/browser/model/msg-history-manager.js.map +1 -1
- package/lib/browser/preferences/schema.d.ts.map +1 -1
- package/lib/browser/preferences/schema.js +5 -0
- package/lib/browser/preferences/schema.js.map +1 -1
- package/lib/browser/types.d.ts +14 -10
- package/lib/browser/types.d.ts.map +1 -1
- package/lib/browser/types.js +1 -2
- package/lib/browser/types.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts +1 -0
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts.map +1 -1
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js +3 -0
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.component.d.ts +4 -0
- package/lib/browser/widget/inline-stream-diff/live-preview.component.d.ts.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.component.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js +1 -0
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js.map +1 -1
- package/lib/common/index.d.ts +1 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js.map +1 -1
- package/lib/common/mcp-server-manager.d.ts +1 -1
- package/lib/common/mcp-server-manager.d.ts.map +1 -1
- package/lib/common/mcp-server-manager.js.map +1 -1
- package/lib/common/prompts/context-prompt-provider.d.ts +14 -0
- package/lib/common/prompts/context-prompt-provider.d.ts.map +1 -0
- package/lib/common/prompts/context-prompt-provider.js +38 -0
- package/lib/common/prompts/context-prompt-provider.js.map +1 -0
- package/lib/common/tool-invocation-registry.d.ts +2 -1
- package/lib/common/tool-invocation-registry.d.ts.map +1 -1
- package/lib/common/tool-invocation-registry.js.map +1 -1
- package/lib/common/utils.d.ts +1 -0
- package/lib/common/utils.d.ts.map +1 -1
- package/lib/common/utils.js +3 -1
- package/lib/common/utils.js.map +1 -1
- package/lib/node/base-language-model.d.ts +2 -2
- package/lib/node/base-language-model.d.ts.map +1 -1
- package/lib/node/base-language-model.js +9 -5
- package/lib/node/base-language-model.js.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.d.ts +1 -1
- package/lib/node/mcp/sumi-mcp-server.d.ts.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.js +5 -2
- package/lib/node/mcp/sumi-mcp-server.js.map +1 -1
- package/lib/node/mcp-server-manager-impl.d.ts +1 -1
- package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
- package/lib/node/mcp-server-manager-impl.js +6 -5
- package/lib/node/mcp-server-manager-impl.js.map +1 -1
- package/lib/node/mcp-server.d.ts +2 -2
- package/lib/node/mcp-server.d.ts.map +1 -1
- package/lib/node/mcp-server.js +2 -1
- package/lib/node/mcp-server.js.map +1 -1
- package/lib/node/openai/openai-language-model.d.ts +1 -1
- package/lib/node/openai/openai-language-model.d.ts.map +1 -1
- package/lib/node/openai/openai-language-model.js +2 -2
- package/lib/node/openai/openai-language-model.js.map +1 -1
- package/package.json +24 -25
- package/src/browser/ai-core.contribution.ts +4 -0
- package/src/browser/chat/chat-agent.service.ts +7 -0
- package/src/browser/chat/chat-model.ts +0 -2
- package/src/browser/chat/chat-proxy.service.ts +12 -2
- package/src/browser/chat/chat.internal.service.ts +12 -1
- package/src/browser/chat/chat.view.tsx +2 -1
- package/src/browser/components/ChatContext/index.tsx +19 -3
- package/src/browser/components/ChatContext/style.module.less +12 -0
- package/src/browser/components/ChatEditor.tsx +13 -10
- package/src/browser/components/ChatMarkdown.tsx +3 -1
- package/src/browser/components/ChatReply.tsx +8 -15
- package/src/browser/components/ChatToolRender.tsx +36 -17
- package/src/browser/components/components.module.less +3 -2
- package/src/browser/context/llm-context.service.ts +30 -18
- package/src/browser/index.ts +11 -12
- package/src/browser/mcp/base-apply.service.ts +349 -0
- package/src/browser/mcp/mcp-server-proxy.service.ts +4 -2
- package/src/browser/mcp/mcp-server.feature.registry.ts +27 -4
- package/src/browser/mcp/tools/components/EditFile.tsx +144 -0
- package/src/browser/mcp/tools/components/SearchResult.tsx +92 -0
- package/src/browser/mcp/tools/components/index.module.less +132 -0
- package/src/browser/mcp/tools/createNewFileWithText.ts +1 -2
- package/src/browser/mcp/tools/editFile.ts +100 -0
- package/src/browser/mcp/tools/fileSearch.ts +99 -0
- package/src/browser/mcp/tools/getDiagnosticsByPath.ts +1 -2
- package/src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts +1 -2
- package/src/browser/mcp/tools/grepSearch.ts +121 -0
- package/src/browser/mcp/tools/handlers/EditFile.ts +21 -0
- package/src/browser/mcp/tools/handlers/ReadFile.ts +19 -1
- package/src/browser/mcp/tools/handlers/utils.ts +3 -0
- package/src/browser/mcp/tools/listDir.ts +3 -4
- package/src/browser/mcp/tools/readFile.ts +3 -4
- package/src/browser/mcp/tools/runTerminalCmd.ts +1 -2
- package/src/browser/model/msg-history-manager.ts +19 -0
- package/src/browser/preferences/schema.ts +5 -0
- package/src/browser/types.ts +15 -11
- package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +4 -0
- package/src/browser/widget/inline-stream-diff/live-preview.component.tsx +4 -0
- package/src/browser/widget/inline-stream-diff/live-preview.decoration.tsx +1 -0
- package/src/common/index.ts +1 -0
- package/src/common/mcp-server-manager.ts +18 -13
- package/src/common/prompts/context-prompt-provider.ts +46 -0
- package/src/common/tool-invocation-registry.ts +122 -124
- package/src/common/utils.ts +2 -0
- package/src/node/base-language-model.ts +20 -6
- package/src/node/mcp/sumi-mcp-server.ts +5 -2
- package/src/node/mcp-server-manager-impl.ts +13 -5
- package/src/node/mcp-server.ts +3 -2
- package/src/node/openai/openai-language-model.ts +2 -2
- package/lib/browser/mcp/tools/findFilesByNameSubstring.d.ts.map +0 -1
- package/lib/browser/mcp/tools/findFilesByNameSubstring.js +0 -92
- package/lib/browser/mcp/tools/findFilesByNameSubstring.js.map +0 -1
- package/lib/browser/mcp/tools/getCurrentFilePath.d.ts +0 -8
- package/lib/browser/mcp/tools/getCurrentFilePath.d.ts.map +0 -1
- package/lib/browser/mcp/tools/getCurrentFilePath.js +0 -49
- package/lib/browser/mcp/tools/getCurrentFilePath.js.map +0 -1
- package/lib/browser/mcp/tools/getFileTextByPath.d.ts.map +0 -1
- package/lib/browser/mcp/tools/getFileTextByPath.js +0 -97
- package/lib/browser/mcp/tools/getFileTextByPath.js.map +0 -1
- package/lib/browser/mcp/tools/getOpenEditorFileText.d.ts +0 -8
- package/lib/browser/mcp/tools/getOpenEditorFileText.d.ts.map +0 -1
- package/lib/browser/mcp/tools/getOpenEditorFileText.js +0 -50
- package/lib/browser/mcp/tools/getOpenEditorFileText.js.map +0 -1
- package/lib/browser/mcp/tools/getSelectedText.d.ts.map +0 -1
- package/lib/browser/mcp/tools/getSelectedText.js +0 -57
- package/lib/browser/mcp/tools/getSelectedText.js.map +0 -1
- package/lib/browser/mcp/tools/replaceOpenEditorFile.d.ts +0 -8
- package/lib/browser/mcp/tools/replaceOpenEditorFile.d.ts.map +0 -1
- package/lib/browser/mcp/tools/replaceOpenEditorFile.js +0 -79
- package/lib/browser/mcp/tools/replaceOpenEditorFile.js.map +0 -1
- package/lib/browser/mcp/tools/replaceOpenEditorFileByDiffPreviewer.d.ts +0 -8
- package/lib/browser/mcp/tools/replaceOpenEditorFileByDiffPreviewer.d.ts.map +0 -1
- package/lib/browser/mcp/tools/replaceOpenEditorFileByDiffPreviewer.js +0 -84
- package/lib/browser/mcp/tools/replaceOpenEditorFileByDiffPreviewer.js.map +0 -1
- package/src/browser/mcp/tools/findFilesByNameSubstring.ts +0 -93
- package/src/browser/mcp/tools/getCurrentFilePath.ts +0 -49
- package/src/browser/mcp/tools/getFileTextByPath.ts +0 -97
- package/src/browser/mcp/tools/getOpenEditorFileText.ts +0 -50
- package/src/browser/mcp/tools/getSelectedText.ts +0 -57
- package/src/browser/mcp/tools/replaceOpenEditorFile.ts +0 -80
- package/src/browser/mcp/tools/replaceOpenEditorFileByDiffPreviewer.ts +0 -91
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EditFileToolComponent = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const classnames_1 = tslib_1.__importDefault(require("classnames"));
|
|
6
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
7
|
+
const ide_components_1 = require("@opensumi/ide-components");
|
|
8
|
+
const ide_core_browser_1 = require("@opensumi/ide-core-browser");
|
|
9
|
+
const ai_native_1 = require("@opensumi/ide-core-browser/lib/components/ai-native");
|
|
10
|
+
const language_1 = require("@opensumi/monaco-editor-core/esm/vs/editor/common/languages/language");
|
|
11
|
+
const model_1 = require("@opensumi/monaco-editor-core/esm/vs/editor/common/services/model");
|
|
12
|
+
const standaloneServices_1 = require("@opensumi/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices");
|
|
13
|
+
const ChatMarkdown_1 = require("../../../components/ChatMarkdown");
|
|
14
|
+
const base_apply_service_1 = require("../../base-apply.service");
|
|
15
|
+
const index_module_less_1 = tslib_1.__importDefault(require("./index.module.less"));
|
|
16
|
+
const renderStatus = (codeBlockData) => {
|
|
17
|
+
const status = codeBlockData.status;
|
|
18
|
+
switch (status) {
|
|
19
|
+
case 'generating':
|
|
20
|
+
return react_1.default.createElement(ai_native_1.Loading, null);
|
|
21
|
+
case 'pending':
|
|
22
|
+
return (react_1.default.createElement(ide_components_1.Popover, { title: status, id: 'edit-file-tool-status-pending' },
|
|
23
|
+
react_1.default.createElement(ide_components_1.Icon, { iconClass: 'codicon codicon-circle-large' })));
|
|
24
|
+
case 'success':
|
|
25
|
+
return (react_1.default.createElement(ide_components_1.Popover, { title: status, id: 'edit-file-tool-status-success' },
|
|
26
|
+
react_1.default.createElement(ide_components_1.Icon, { iconClass: 'codicon codicon-check-all' })));
|
|
27
|
+
case 'failed':
|
|
28
|
+
return (react_1.default.createElement(ide_components_1.Popover, { title: status, id: 'edit-file-tool-status-failed' },
|
|
29
|
+
react_1.default.createElement(ide_components_1.Icon, { iconClass: 'codicon codicon-error', color: 'var(--vscode-input-errorForeground)' })));
|
|
30
|
+
case 'cancelled':
|
|
31
|
+
return (react_1.default.createElement(ide_components_1.Popover, { title: status, id: 'edit-file-tool-status-cancelled' },
|
|
32
|
+
react_1.default.createElement(ide_components_1.Icon, { iconClass: 'codicon codicon-close', color: 'var(--vscode-input-placeholderForeground)' })));
|
|
33
|
+
default:
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const EditFileToolComponent = (props) => {
|
|
38
|
+
var _a;
|
|
39
|
+
const { args, messageId, toolCallId } = props;
|
|
40
|
+
const labelService = (0, ide_core_browser_1.useInjectable)(ide_core_browser_1.LabelService);
|
|
41
|
+
const appConfig = (0, ide_core_browser_1.useInjectable)(ide_core_browser_1.AppConfig);
|
|
42
|
+
const applyService = (0, ide_core_browser_1.useInjectable)(base_apply_service_1.BaseApplyService);
|
|
43
|
+
const { target_file = '', code_edit, instructions } = args || {};
|
|
44
|
+
const absolutePath = ide_core_browser_1.path.join(appConfig.workspaceDir, target_file);
|
|
45
|
+
const codeBlockData = applyService.getCodeBlock(absolutePath, messageId);
|
|
46
|
+
(0, ide_core_browser_1.useAutorun)(applyService.codeBlockMapObservable);
|
|
47
|
+
if (toolCallId && codeBlockData) {
|
|
48
|
+
applyService.initToolCallId(codeBlockData.id, toolCallId);
|
|
49
|
+
}
|
|
50
|
+
const icon = (0, react_1.useMemo)(() => {
|
|
51
|
+
if (!target_file) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const icon = `file-icon ${labelService.getIcon(ide_core_browser_1.URI.file(absolutePath))}`;
|
|
55
|
+
return icon;
|
|
56
|
+
}, [target_file, absolutePath]);
|
|
57
|
+
const languageId = (0, react_1.useMemo)(() => {
|
|
58
|
+
if (!target_file) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const modelService = standaloneServices_1.StandaloneServices.get(model_1.IModelService);
|
|
62
|
+
const languageService = standaloneServices_1.StandaloneServices.get(language_1.ILanguageService);
|
|
63
|
+
const detectedModeId = (0, ide_core_browser_1.detectModeId)(modelService, languageService, ide_core_browser_1.Uri.file(absolutePath));
|
|
64
|
+
return detectedModeId;
|
|
65
|
+
}, [target_file, absolutePath]);
|
|
66
|
+
// 多次迭代时,仅在首处tool组件中展示
|
|
67
|
+
if (!args || !codeBlockData || (toolCallId && toolCallId !== codeBlockData.initToolCallId)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
return [
|
|
71
|
+
instructions && react_1.default.createElement("p", null, instructions),
|
|
72
|
+
react_1.default.createElement("div", { className: index_module_less_1.default['edit-file-tool'], key: `edit-file-tool-${codeBlockData.id}` },
|
|
73
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(index_module_less_1.default['edit-file-tool-header'], {
|
|
74
|
+
clickable: codeBlockData.status === 'pending' || codeBlockData.status === 'success',
|
|
75
|
+
}), onClick: () => {
|
|
76
|
+
if (codeBlockData.status === 'pending') {
|
|
77
|
+
applyService.reRenderPendingApply();
|
|
78
|
+
}
|
|
79
|
+
else if (codeBlockData.status === 'success') {
|
|
80
|
+
applyService.revealApplyPosition(codeBlockData.id);
|
|
81
|
+
}
|
|
82
|
+
} },
|
|
83
|
+
icon && react_1.default.createElement("span", { className: icon }),
|
|
84
|
+
react_1.default.createElement("span", { className: index_module_less_1.default['edit-file-tool-file-name'] }, target_file),
|
|
85
|
+
codeBlockData.iterationCount > 1 && (react_1.default.createElement("span", { className: index_module_less_1.default['edit-file-tool-iteration-count'] },
|
|
86
|
+
codeBlockData.iterationCount,
|
|
87
|
+
"/3")),
|
|
88
|
+
renderStatus(codeBlockData)),
|
|
89
|
+
react_1.default.createElement(ChatMarkdown_1.ChatMarkdown, { markdown: `\`\`\`${languageId || ''}\n${code_edit}\n\`\`\``, hideInsert: true })),
|
|
90
|
+
codeBlockData.applyResult && codeBlockData.applyResult.diagnosticInfos.length > 0 && (react_1.default.createElement("div", { className: index_module_less_1.default['edit-file-tool-diagnostic-errors'], key: `edit-file-tool-diagnostic-errors-${codeBlockData.id}` },
|
|
91
|
+
react_1.default.createElement("div", { className: index_module_less_1.default['title'] }, "Found Lints:"), (_a = codeBlockData.applyResult) === null || _a === void 0 ? void 0 :
|
|
92
|
+
_a.diagnosticInfos.map((info) => (react_1.default.createElement("div", { key: info.message, className: (0, classnames_1.default)({
|
|
93
|
+
[index_module_less_1.default['error']]: info.severity === ide_core_browser_1.MarkerSeverity.Error,
|
|
94
|
+
[index_module_less_1.default['warning']]: info.severity === ide_core_browser_1.MarkerSeverity.Warning,
|
|
95
|
+
}) },
|
|
96
|
+
react_1.default.createElement(ide_components_1.Icon, { className: `codicon codicon-${info.severity === ide_core_browser_1.MarkerSeverity.Error ? 'error' : 'warning'}` }),
|
|
97
|
+
info.message.split('\n')[0]))))),
|
|
98
|
+
];
|
|
99
|
+
};
|
|
100
|
+
exports.EditFileToolComponent = EditFileToolComponent;
|
|
101
|
+
//# sourceMappingURL=EditFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditFile.js","sourceRoot":"","sources":["../../../../../src/browser/mcp/tools/components/EditFile.tsx"],"names":[],"mappings":";;;;AAAA,oEAA6B;AAC7B,uDAAkD;AAElD,6DAAyD;AACzD,iEAUoC;AACpC,mFAA8E;AAC9E,mGAAwG;AACxG,4FAAiG;AACjG,yHAAsH;AAEtH,mEAAgE;AAEhE,iEAA2E;AAE3E,oFAAyC;AAEzC,MAAM,YAAY,GAAG,CAAC,aAA4B,EAAE,EAAE;IACpD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IACpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO,8BAAC,mBAAO,OAAG,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,CACL,8BAAC,wBAAO,IAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,+BAA+B;gBACzD,8BAAC,qBAAI,IAAC,SAAS,EAAC,8BAA8B,GAAG,CACzC,CACX,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,CACL,8BAAC,wBAAO,IAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,+BAA+B;gBACzD,8BAAC,qBAAI,IAAC,SAAS,EAAC,2BAA2B,GAAG,CACtC,CACX,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,8BAAC,wBAAO,IAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,8BAA8B;gBACxD,8BAAC,qBAAI,IAAC,SAAS,EAAC,uBAAuB,EAAC,KAAK,EAAC,qCAAqC,GAAG,CAC9E,CACX,CAAC;QACJ,KAAK,WAAW;YACd,OAAO,CACL,8BAAC,wBAAO,IAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,iCAAiC;gBAC3D,8BAAC,qBAAI,IAAC,SAAS,EAAC,uBAAuB,EAAC,KAAK,EAAC,2CAA2C,GAAG,CACpF,CACX,CAAC;QACJ;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEK,MAAM,qBAAqB,GAAG,CAAC,KAAmC,EAAE,EAAE;;IAC3E,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAA,gCAAa,EAAC,+BAAY,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAA,gCAAa,EAAY,4BAAS,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,IAAA,gCAAa,EAAmB,qCAAgB,CAAC,CAAC;IACvE,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;IACjE,MAAM,YAAY,GAAG,uBAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAEzE,IAAA,6BAAU,EAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAEhD,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;QAChC,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACxB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,YAAY,CAAC,OAAO,CAAC,sBAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,YAAY,GAAG,uCAAkB,CAAC,GAAG,CAAC,qBAAa,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,uCAAkB,CAAC,GAAG,CAAC,2BAAgB,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,IAAA,+BAAY,EAAC,YAAY,EAAE,eAAe,EAAE,sBAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAC3F,OAAO,cAAc,CAAC;IACxB,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhC,sBAAsB;IACtB,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,YAAY,IAAI,yCAAI,YAAY,CAAK;QACrC,uCAAK,SAAS,EAAE,2BAAM,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,kBAAkB,aAAa,CAAC,EAAE,EAAE;YACjF,uCACE,SAAS,EAAE,IAAA,oBAAG,EAAC,2BAAM,CAAC,uBAAuB,CAAC,EAAE;oBAC9C,SAAS,EAAE,aAAa,CAAC,MAAM,KAAK,SAAS,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS;iBACpF,CAAC,EACF,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACvC,YAAY,CAAC,oBAAoB,EAAE,CAAC;oBACtC,CAAC;yBAAM,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAC9C,YAAY,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;gBAEA,IAAI,IAAI,wCAAM,SAAS,EAAE,IAAI,GAAS;gBACvC,wCAAM,SAAS,EAAE,2BAAM,CAAC,0BAA0B,CAAC,IAAG,WAAW,CAAQ;gBACxE,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CACnC,wCAAM,SAAS,EAAE,2BAAM,CAAC,gCAAgC,CAAC;oBAAG,aAAa,CAAC,cAAc;yBAAU,CACnG;gBACA,YAAY,CAAC,aAAa,CAAC,CACxB;YACN,8BAAC,2BAAY,IAAC,QAAQ,EAAE,SAAS,UAAU,IAAI,EAAE,KAAK,SAAS,UAAU,EAAE,UAAU,EAAE,IAAI,GAAI,CAC3F;QACN,aAAa,CAAC,WAAW,IAAI,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CACnF,uCACE,SAAS,EAAE,2BAAM,CAAC,kCAAkC,CAAC,EACrD,GAAG,EAAE,oCAAoC,aAAa,CAAC,EAAE,EAAE;YAE3D,uCAAK,SAAS,EAAE,2BAAM,CAAC,OAAO,CAAC,mBAAoB,EAClD,MAAA,aAAa,CAAC,WAAW;eAAE,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxD,uCACE,GAAG,EAAE,IAAI,CAAC,OAAO,EACjB,SAAS,EAAE,IAAA,oBAAG,EAAC;oBACb,CAAC,2BAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,KAAK,iCAAc,CAAC,KAAK;oBACzD,CAAC,2BAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,KAAK,iCAAc,CAAC,OAAO;iBAC9D,CAAC;gBAEF,8BAAC,qBAAI,IAAC,SAAS,EAAE,mBAAmB,IAAI,CAAC,QAAQ,KAAK,iCAAc,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,GAAI;gBACrG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACxB,CACP,CAAC,CACE,CACP;KACF,CAAC;AACJ,CAAC,CAAC;AAnFW,QAAA,qBAAqB,yBAmFhC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface SearchResultProps {
|
|
3
|
+
args: any;
|
|
4
|
+
toolCallId: string;
|
|
5
|
+
messageId: string;
|
|
6
|
+
toolName: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const FileSearchToolComponent: React.FC<SearchResultProps>;
|
|
9
|
+
export declare const GrepSearchToolComponent: React.FC<SearchResultProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=SearchResult.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchResult.d.ts","sourceRoot":"","sources":["../../../../../src/browser/mcp/tools/components/SearchResult.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAW5D,UAAU,iBAAiB;IACzB,IAAI,EAAE,GAAG,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAE/D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAE/D,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GrepSearchToolComponent = exports.FileSearchToolComponent = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const ide_core_browser_1 = require("@opensumi/ide-core-browser");
|
|
7
|
+
const ide_editor_1 = require("@opensumi/ide-editor");
|
|
8
|
+
const ide_workspace_1 = require("@opensumi/ide-workspace");
|
|
9
|
+
const common_1 = require("../../../../common");
|
|
10
|
+
const index_module_less_1 = tslib_1.__importDefault(require("./index.module.less"));
|
|
11
|
+
const FileSearchToolComponent = ({ args, toolCallId, messageId }) => (react_1.default.createElement(SearchResult, { args: args, toolCallId: toolCallId, messageId: messageId, toolName: 'fileSearch' }));
|
|
12
|
+
exports.FileSearchToolComponent = FileSearchToolComponent;
|
|
13
|
+
const GrepSearchToolComponent = ({ args, toolCallId, messageId }) => (react_1.default.createElement(SearchResult, { args: args, toolCallId: toolCallId, messageId: messageId, toolName: 'grepSearch' }));
|
|
14
|
+
exports.GrepSearchToolComponent = GrepSearchToolComponent;
|
|
15
|
+
const SearchResult = ({ args, toolCallId, toolName, messageId }) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
const [isExpanded, setIsExpanded] = (0, react_1.useState)(false);
|
|
18
|
+
const labelService = (0, ide_core_browser_1.useInjectable)(ide_core_browser_1.LabelService);
|
|
19
|
+
const editorService = (0, ide_core_browser_1.useInjectable)(ide_editor_1.WorkbenchEditorService);
|
|
20
|
+
const workspaceService = (0, ide_core_browser_1.useInjectable)(ide_workspace_1.IWorkspaceService);
|
|
21
|
+
const workspaceRoot = (0, react_1.useMemo)(() => { var _a, _b; return ide_core_browser_1.URI.parse((_b = (_a = workspaceService.tryGetRoots()) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.uri); }, []);
|
|
22
|
+
const chatService = (0, ide_core_browser_1.useInjectable)(common_1.IChatInternalService);
|
|
23
|
+
const [files, setFiles] = (0, react_1.useState)(((_b = (_a = chatService.sessionModel.history.getMessageAdditional(messageId)) === null || _a === void 0 ? void 0 : _a[toolCallId]) === null || _b === void 0 ? void 0 : _b.files) || []);
|
|
24
|
+
(0, react_1.useEffect)(() => {
|
|
25
|
+
const toDispose = chatService.sessionModel.history.onMessageAdditionalChange((additional) => {
|
|
26
|
+
var _a;
|
|
27
|
+
setFiles(((_a = additional[toolCallId]) === null || _a === void 0 ? void 0 : _a.files) || []);
|
|
28
|
+
});
|
|
29
|
+
return () => {
|
|
30
|
+
toDispose.dispose();
|
|
31
|
+
};
|
|
32
|
+
}, []);
|
|
33
|
+
const handleFileClick = (uri) => {
|
|
34
|
+
// 处理文件点击跳转
|
|
35
|
+
editorService.open(uri);
|
|
36
|
+
};
|
|
37
|
+
const parsedFiles = (0, react_1.useMemo)(() => files.map((file) => {
|
|
38
|
+
const uri = ide_core_browser_1.URI.parse(file);
|
|
39
|
+
const iconClass = labelService.getIcon(uri);
|
|
40
|
+
return {
|
|
41
|
+
iconClass,
|
|
42
|
+
name: uri.path.base,
|
|
43
|
+
path: ide_core_browser_1.path.relative(workspaceRoot.codeUri.fsPath, uri.path.dir.toString()),
|
|
44
|
+
};
|
|
45
|
+
}), [files]);
|
|
46
|
+
return (react_1.default.createElement("div", { className: index_module_less_1.default.container },
|
|
47
|
+
react_1.default.createElement("div", { className: index_module_less_1.default.header, onClick: () => setIsExpanded(!isExpanded) },
|
|
48
|
+
react_1.default.createElement("span", { style: { transform: `rotate(${isExpanded ? '90deg' : '0deg'})` } }, "\u25B6"),
|
|
49
|
+
react_1.default.createElement("span", null,
|
|
50
|
+
toolName === 'fileSearch' ? `Searched files "${args.query}"` : `Grepped codebase "${args.query}"`,
|
|
51
|
+
" \u00B7",
|
|
52
|
+
' ',
|
|
53
|
+
files.length,
|
|
54
|
+
" files")),
|
|
55
|
+
isExpanded && (react_1.default.createElement("ul", { className: index_module_less_1.default.fileList }, parsedFiles.map((file, index) => (react_1.default.createElement("li", { key: index, className: index_module_less_1.default.fileItem, onClick: () => handleFileClick(ide_core_browser_1.URI.file(ide_core_browser_1.path.join(workspaceRoot.codeUri.fsPath, file.path, file.name))) },
|
|
56
|
+
react_1.default.createElement("span", { className: file.iconClass }),
|
|
57
|
+
react_1.default.createElement("span", { style: { flex: 1 } }, file.name),
|
|
58
|
+
react_1.default.createElement("span", { className: index_module_less_1.default.filePath }, file.path))))))));
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=SearchResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchResult.js","sourceRoot":"","sources":["../../../../../src/browser/mcp/tools/components/SearchResult.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
.edit-file-tool-header {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
padding: 2px 8px;
|
|
5
|
+
border-bottom: 1px solid var(--vscode-commandCenter-inactiveBorder);
|
|
6
|
+
background-color: var(--design-block-background);
|
|
7
|
+
font-size: 10px;
|
|
8
|
+
margin-bottom: -4px;
|
|
9
|
+
border-radius: 8px 8px 0 0;
|
|
10
|
+
> span {
|
|
11
|
+
margin-right: 4px;
|
|
12
|
+
}
|
|
13
|
+
:global(span.codicon) {
|
|
14
|
+
font-size: 12px;
|
|
15
|
+
}
|
|
16
|
+
:global(.kt-popover-trigger) {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
.edit-file-tool {
|
|
23
|
+
border: 1px solid var(--vscode-commandCenter-inactiveBorder);
|
|
24
|
+
border-radius: 4px;
|
|
25
|
+
margin: 8px 0;
|
|
26
|
+
:global(.language-badge) {
|
|
27
|
+
border-top-left-radius: 0;
|
|
28
|
+
}
|
|
29
|
+
pre > code {
|
|
30
|
+
border-radius: 0 0 8px 8px !important;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
.edit-file-tool-iteration-count {
|
|
34
|
+
color: var(--vscode-input-placeholderForeground);
|
|
35
|
+
margin-left: 4px;
|
|
36
|
+
}
|
|
37
|
+
:global(.clickable) {
|
|
38
|
+
cursor: pointer;
|
|
39
|
+
}
|
|
40
|
+
.edit-file-tool-diagnostic-errors {
|
|
41
|
+
padding: 8px;
|
|
42
|
+
border: 1px solid var(--vscode-commandCenter-inactiveBorder);
|
|
43
|
+
background-color: var(--design-block-background);
|
|
44
|
+
border-radius: 8px;
|
|
45
|
+
font-size: 12px;
|
|
46
|
+
margin: 4px 0;
|
|
47
|
+
> div {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
padding: 2px 0;
|
|
51
|
+
}
|
|
52
|
+
:global(.codicon) {
|
|
53
|
+
margin-right: 4px;
|
|
54
|
+
}
|
|
55
|
+
.title {
|
|
56
|
+
margin-bottom: 3px;
|
|
57
|
+
display: inline-block;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
.error,
|
|
61
|
+
.error > span {
|
|
62
|
+
color: var(--debugConsole-errorForeground);
|
|
63
|
+
}
|
|
64
|
+
.warning,
|
|
65
|
+
.warning > span {
|
|
66
|
+
color: var(--debugConsole-warningForeground);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.container {
|
|
70
|
+
border: 1px solid var(--vscode-commandCenter-inactiveBorder);
|
|
71
|
+
border-radius: 8px;
|
|
72
|
+
margin: 8px 0;
|
|
73
|
+
overflow: hidden;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.header {
|
|
77
|
+
padding: 8px 12px;
|
|
78
|
+
background-color: var(--design-block-background);
|
|
79
|
+
border-bottom: 1px solid var(--vscode-commandCenter-inactiveBorder);
|
|
80
|
+
cursor: pointer;
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
gap: 4px;
|
|
84
|
+
color: var(--design-text-foreground);
|
|
85
|
+
font-size: 12px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.fileList {
|
|
89
|
+
margin: 0;
|
|
90
|
+
padding: 0;
|
|
91
|
+
list-style: none;
|
|
92
|
+
display: block;
|
|
93
|
+
background-color: var(--design-block-background);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.fileList.collapsed {
|
|
97
|
+
display: none;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.fileItem {
|
|
101
|
+
padding: 2px 6px;
|
|
102
|
+
font-size: 12px;
|
|
103
|
+
margin: 0px 6px;
|
|
104
|
+
border-radius: 4px;
|
|
105
|
+
display: flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
gap: 8px;
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
color: var(--design-text-primary);
|
|
110
|
+
&:hover {
|
|
111
|
+
background-color: var(--design-block-background);
|
|
112
|
+
}
|
|
113
|
+
> span {
|
|
114
|
+
overflow: hidden;
|
|
115
|
+
text-overflow: ellipsis;
|
|
116
|
+
white-space: nowrap;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.fileIcon {
|
|
121
|
+
color: var(--design-text-secondary);
|
|
122
|
+
font-size: 12px;
|
|
123
|
+
width: 16px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.filePath {
|
|
127
|
+
color: var(--design-text-secondary);
|
|
128
|
+
font-size: 12px;
|
|
129
|
+
margin-left: auto;
|
|
130
|
+
flex-basis: 0px;
|
|
131
|
+
flex-grow: 1;
|
|
132
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNewFileWithText.d.ts","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/createNewFileWithText.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createNewFileWithText.d.ts","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/createNewFileWithText.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAa,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOtG,qBACa,yBAA0B,YAAW,qBAAqB;IAErE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIrD,iBAAiB,IAAI,iBAAiB;YAkBxB,OAAO;CAqCtB"}
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CreateNewFileWithTextTool = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
|
-
const zod_to_json_schema_1 = require("zod-to-json-schema");
|
|
7
6
|
const di_1 = require("@opensumi/di");
|
|
8
7
|
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
9
8
|
const ide_file_service_1 = require("@opensumi/ide-file-service");
|
|
@@ -29,7 +28,7 @@ let CreateNewFileWithTextTool = class CreateNewFileWithTextTool {
|
|
|
29
28
|
'"ok" if the file was successfully created and populated, ' +
|
|
30
29
|
'"can\'t find project dir" if the project directory cannot be determined. ' +
|
|
31
30
|
'Note: Creates any necessary parent directories automatically.',
|
|
32
|
-
inputSchema
|
|
31
|
+
inputSchema,
|
|
33
32
|
handler: this.handler.bind(this),
|
|
34
33
|
};
|
|
35
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNewFileWithText.js","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/createNewFileWithText.ts"],"names":[],"mappings":";;;;AAAA,6BAAwB;
|
|
1
|
+
{"version":3,"file":"createNewFileWithText.js","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/createNewFileWithText.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { IMCPServerRegistry, MCPServerContribution, MCPToolDefinition } from '../../types';
|
|
2
|
-
export declare class
|
|
3
|
-
private readonly
|
|
2
|
+
export declare class EditFileTool implements MCPServerContribution {
|
|
3
|
+
private readonly editFileHandler;
|
|
4
4
|
registerMCPServer(registry: IMCPServerRegistry): void;
|
|
5
5
|
getToolDefinition(): MCPToolDefinition;
|
|
6
6
|
private handler;
|
|
7
7
|
}
|
|
8
|
-
//# sourceMappingURL=
|
|
8
|
+
//# sourceMappingURL=editFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editFile.d.ts","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/editFile.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAa,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA6BtG,qBACa,YAAa,YAAW,qBAAqB;IAExD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAElD,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAKrD,iBAAiB,IAAI,iBAAiB;YA2BxB,OAAO;CA4BtB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EditFileTool = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const di_1 = require("@opensumi/di");
|
|
7
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
8
|
+
const types_1 = require("../../types");
|
|
9
|
+
const EditFile_1 = require("./components/EditFile");
|
|
10
|
+
const EditFile_2 = require("./handlers/EditFile");
|
|
11
|
+
const inputSchema = zod_1.z
|
|
12
|
+
.object({
|
|
13
|
+
target_file: zod_1.z
|
|
14
|
+
.string()
|
|
15
|
+
.describe('The target file to modify. Always specify the target file as the first argument and use the relative path in the workspace of the file to edit'),
|
|
16
|
+
instructions: zod_1.z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('A single sentence instruction describing what you are going to do for the sketched edit. This is used to assist the less intelligent model in applying the edit. Please use the first person to describe what you are going to do. Dont repeat what you have said previously in normal messages. And use it to disambiguate uncertainty in the edit.'),
|
|
20
|
+
code_edit: zod_1.z
|
|
21
|
+
.string()
|
|
22
|
+
.describe("Specify ONLY the precise lines of code that you wish to edit. **NEVER specify or write out unchanged code**. Instead, represent all unchanged code using the comment of the language you're editing in - example: `// ... existing code ...`"),
|
|
23
|
+
})
|
|
24
|
+
.transform((data) => ({
|
|
25
|
+
targetFile: data.target_file,
|
|
26
|
+
instructions: data.instructions,
|
|
27
|
+
codeEdit: data.code_edit,
|
|
28
|
+
}));
|
|
29
|
+
let EditFileTool = class EditFileTool {
|
|
30
|
+
registerMCPServer(registry) {
|
|
31
|
+
registry.registerMCPTool(this.getToolDefinition());
|
|
32
|
+
registry.registerToolComponent('edit_file', EditFile_1.EditFileToolComponent);
|
|
33
|
+
}
|
|
34
|
+
getToolDefinition() {
|
|
35
|
+
return {
|
|
36
|
+
name: 'edit_file',
|
|
37
|
+
label: 'Edit File',
|
|
38
|
+
description: `Use this tool to propose an edit to an existing file.
|
|
39
|
+
This will be read by a less intelligent model, which will quickly apply the edit. You should make it clear what the edit is, while also minimizing the unchanged code you write.
|
|
40
|
+
When writing the edit, you should specify each edit in sequence, with the special comment \`// ... existing code ...\` to represent unchanged code in between edited lines.
|
|
41
|
+
For example:
|
|
42
|
+
\`\`\`
|
|
43
|
+
// ... existing code ...
|
|
44
|
+
FIRST_EDIT
|
|
45
|
+
// ... existing code ...
|
|
46
|
+
SECOND_EDIT
|
|
47
|
+
// ... existing code ...
|
|
48
|
+
THIRD_EDIT
|
|
49
|
+
// ... existing code ...
|
|
50
|
+
\`\`\`
|
|
51
|
+
You should bias towards repeating as few lines of the original file as possible to convey the change.
|
|
52
|
+
But, each edit should contain sufficient context of unchanged lines around the code you're editing to resolve ambiguity.
|
|
53
|
+
DO NOT omit spans of pre-existing code without using the \`// ... existing code ...\` comment to indicate its absence.
|
|
54
|
+
Make sure it is clear what the edit should be.
|
|
55
|
+
You should specify the following arguments before the others: [target_file]`,
|
|
56
|
+
inputSchema,
|
|
57
|
+
handler: this.handler.bind(this),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async handler(args, logger) {
|
|
61
|
+
const result = await this.editFileHandler.handler(args.targetFile, args.codeEdit, args.instructions);
|
|
62
|
+
return {
|
|
63
|
+
content: [
|
|
64
|
+
{
|
|
65
|
+
type: 'text',
|
|
66
|
+
// TODO: lint error
|
|
67
|
+
text: result.applyResult
|
|
68
|
+
? `The apply model made the following changes to the file:
|
|
69
|
+
|
|
70
|
+
\`\`\`
|
|
71
|
+
${result.applyResult.diff}
|
|
72
|
+
\`\`\`
|
|
73
|
+
${result.applyResult.diagnosticInfos.length > 0
|
|
74
|
+
? `The edit introduced the following new linter errors:
|
|
75
|
+
${result.applyResult.diagnosticInfos
|
|
76
|
+
.map((error) => `Line ${error.startLineNumber}: ${error.message.split('\n')[0]}`)
|
|
77
|
+
.join('\n')}
|
|
78
|
+
|
|
79
|
+
Please fix the linter errors if it is clear how to (or you can easily figure out how to). Do not make uneducated guesses. And do not loop more than 3 times on fixing linter errors on the same file.`
|
|
80
|
+
: ''}`
|
|
81
|
+
: 'User cancelled the edit.',
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
exports.EditFileTool = EditFileTool;
|
|
88
|
+
tslib_1.__decorate([
|
|
89
|
+
(0, di_1.Autowired)(EditFile_2.EditFileHandler),
|
|
90
|
+
tslib_1.__metadata("design:type", EditFile_2.EditFileHandler)
|
|
91
|
+
], EditFileTool.prototype, "editFileHandler", void 0);
|
|
92
|
+
exports.EditFileTool = EditFileTool = tslib_1.__decorate([
|
|
93
|
+
(0, ide_core_common_1.Domain)(types_1.MCPServerContribution)
|
|
94
|
+
], EditFileTool);
|
|
95
|
+
//# sourceMappingURL=editFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editFile.js","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/editFile.ts"],"names":[],"mappings":";;;;AAAA,6BAAwB;AAExB,qCAAyC;AACzC,+DAAmD;AAEnD,uCAAsG;AAEtG,oDAA8D;AAC9D,kDAAsD;AACtD,MAAM,WAAW,GAAG,OAAC;KAClB,MAAM,CAAC;IACN,WAAW,EAAE,OAAC;SACX,MAAM,EAAE;SACR,QAAQ,CACP,gJAAgJ,CACjJ;IACH,YAAY,EAAE,OAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sVAAsV,CACvV;IACH,SAAS,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,CACP,8OAA8O,CAC/O;CACJ,CAAC;KACD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,UAAU,EAAE,IAAI,CAAC,WAAW;IAC5B,YAAY,EAAE,IAAI,CAAC,YAAY;IAC/B,QAAQ,EAAE,IAAI,CAAC,SAAS;CACzB,CAAC,CAAC,CAAC;AAGC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAIvB,iBAAiB,CAAC,QAA4B;QAC5C,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACnD,QAAQ,CAAC,qBAAqB,CAAC,WAAW,EAAE,gCAAqB,CAAC,CAAC;IACrE,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE;;;;;;;;;;;;;;;;;4EAiByD;YACtE,WAAW;YACX,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;SACjC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAiC,EAAE,MAAiB;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACrG,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,mBAAmB;oBACnB,IAAI,EAAE,MAAM,CAAC,WAAW;wBACtB,CAAC,CAAC;;;EAGZ,MAAM,CAAC,WAAW,CAAC,IAAI;;EAGvB,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;4BAC3C,CAAC,CAAC;EACJ,MAAM,CAAC,WAAW,CAAC,eAAe;iCACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,eAAe,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iCAChF,IAAI,CAAC,IAAI,CAAC;;sMAEyL;4BAClM,CAAC,CAAC,EACN,EAAE;wBACU,CAAC,CAAC,0BAA0B;iBAC/B;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAhEY,oCAAY;AAEN;IADhB,IAAA,cAAS,EAAC,0BAAe,CAAC;sCACO,0BAAe;qDAAC;uBAFvC,YAAY;IADxB,IAAA,wBAAM,EAAC,6BAAqB,CAAC;GACjB,YAAY,CAgExB"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { IMCPServerRegistry, MCPServerContribution, MCPToolDefinition } from '../../types';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class FileSearchTool implements MCPServerContribution {
|
|
3
3
|
private readonly workspaceService;
|
|
4
4
|
private readonly fileSearchService;
|
|
5
|
+
private readonly chatInternalService;
|
|
5
6
|
registerMCPServer(registry: IMCPServerRegistry): void;
|
|
6
7
|
getToolDefinition(): MCPToolDefinition;
|
|
7
8
|
private handler;
|
|
8
9
|
}
|
|
9
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=fileSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSearch.d.ts","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/fileSearch.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAa,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAatG,qBACa,cAAe,YAAW,qBAAqB;IAE1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IAGvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAE1D,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAKrD,iBAAiB,IAAI,iBAAiB;YAWxB,OAAO;CAiDtB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileSearchTool = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const di_1 = require("@opensumi/di");
|
|
7
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
8
|
+
const common_1 = require("@opensumi/ide-file-search/lib/common");
|
|
9
|
+
const ide_workspace_1 = require("@opensumi/ide-workspace");
|
|
10
|
+
const common_2 = require("../../../common");
|
|
11
|
+
const chat_internal_service_1 = require("../../chat/chat.internal.service");
|
|
12
|
+
const types_1 = require("../../types");
|
|
13
|
+
const SearchResult_1 = require("./components/SearchResult");
|
|
14
|
+
const inputSchema = zod_1.z.object({
|
|
15
|
+
query: zod_1.z.string().describe('Fuzzy filename to search for'),
|
|
16
|
+
explanation: zod_1.z
|
|
17
|
+
.string()
|
|
18
|
+
.describe('One sentence explanation as to why this tool is being used, and how it contributes to the goal.'),
|
|
19
|
+
});
|
|
20
|
+
const MAX_RESULTS = 10;
|
|
21
|
+
let FileSearchTool = class FileSearchTool {
|
|
22
|
+
registerMCPServer(registry) {
|
|
23
|
+
registry.registerMCPTool(this.getToolDefinition());
|
|
24
|
+
registry.registerToolComponent('file_search', SearchResult_1.FileSearchToolComponent);
|
|
25
|
+
}
|
|
26
|
+
getToolDefinition() {
|
|
27
|
+
return {
|
|
28
|
+
name: 'file_search',
|
|
29
|
+
label: 'Search Files',
|
|
30
|
+
description: "Fast file search based on fuzzy matching against file path. Use if you know part of the file path but don't know where it's located exactly. Response will be capped to 10 results. Make your query more specific if need to filter results further.",
|
|
31
|
+
inputSchema,
|
|
32
|
+
handler: this.handler.bind(this),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async handler(args, logger) {
|
|
36
|
+
if (!args.query) {
|
|
37
|
+
throw new Error('No fileSearch parameters provided. Need to give a query.');
|
|
38
|
+
}
|
|
39
|
+
// 获取工作区根目录
|
|
40
|
+
const workspaceRoots = this.workspaceService.tryGetRoots();
|
|
41
|
+
if (!workspaceRoots || workspaceRoots.length === 0) {
|
|
42
|
+
throw new Error('Cannot determine project directory');
|
|
43
|
+
}
|
|
44
|
+
// 使用 OpenSumi 的文件搜索 API
|
|
45
|
+
const searchPattern = args.query;
|
|
46
|
+
const searchResults = await this.fileSearchService.find(searchPattern, {
|
|
47
|
+
rootUris: [new ide_core_common_1.URI(workspaceRoots[0].uri).codeUri.fsPath],
|
|
48
|
+
// TODO: 忽略配置
|
|
49
|
+
excludePatterns: ['**/node_modules/**'],
|
|
50
|
+
limit: 100,
|
|
51
|
+
useGitIgnore: true,
|
|
52
|
+
noIgnoreParent: true,
|
|
53
|
+
fuzzyMatch: true,
|
|
54
|
+
});
|
|
55
|
+
const files = searchResults.slice(0, MAX_RESULTS).map((file) => {
|
|
56
|
+
const uri = ide_core_common_1.URI.parse(file);
|
|
57
|
+
return uri.codeUri.fsPath;
|
|
58
|
+
});
|
|
59
|
+
const messages = this.chatInternalService.sessionModel.history.getMessages();
|
|
60
|
+
this.chatInternalService.sessionModel.history.setMessageAdditional(messages[messages.length - 1].id, {
|
|
61
|
+
[args.toolCallId]: {
|
|
62
|
+
files,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
logger.appendLine(`Found ${files.length} files matching "${args.query}"`);
|
|
66
|
+
return {
|
|
67
|
+
content: [
|
|
68
|
+
{
|
|
69
|
+
type: 'text',
|
|
70
|
+
text: `${files.join('\n')}\n${searchResults.length > MAX_RESULTS
|
|
71
|
+
? `\nFound ${searchResults.length} files matching "${args.query}", only return the first ${MAX_RESULTS} results`
|
|
72
|
+
: ''}`,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
exports.FileSearchTool = FileSearchTool;
|
|
79
|
+
tslib_1.__decorate([
|
|
80
|
+
(0, di_1.Autowired)(ide_workspace_1.IWorkspaceService),
|
|
81
|
+
tslib_1.__metadata("design:type", Object)
|
|
82
|
+
], FileSearchTool.prototype, "workspaceService", void 0);
|
|
83
|
+
tslib_1.__decorate([
|
|
84
|
+
(0, di_1.Autowired)(common_1.FileSearchServicePath),
|
|
85
|
+
tslib_1.__metadata("design:type", Object)
|
|
86
|
+
], FileSearchTool.prototype, "fileSearchService", void 0);
|
|
87
|
+
tslib_1.__decorate([
|
|
88
|
+
(0, di_1.Autowired)(common_2.IChatInternalService),
|
|
89
|
+
tslib_1.__metadata("design:type", chat_internal_service_1.ChatInternalService)
|
|
90
|
+
], FileSearchTool.prototype, "chatInternalService", void 0);
|
|
91
|
+
exports.FileSearchTool = FileSearchTool = tslib_1.__decorate([
|
|
92
|
+
(0, ide_core_common_1.Domain)(types_1.MCPServerContribution)
|
|
93
|
+
], FileSearchTool);
|
|
94
|
+
//# sourceMappingURL=fileSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSearch.js","sourceRoot":"","sources":["../../../../src/browser/mcp/tools/fileSearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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;YAyBxB,OAAO;IAsDrB,OAAO,CAAC,iBAAiB;CAc1B"}
|
|
@@ -4,7 +4,6 @@ exports.GetDiagnosticsByPathTool = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const path = tslib_1.__importStar(require("path"));
|
|
6
6
|
const zod_1 = require("zod");
|
|
7
|
-
const zod_to_json_schema_1 = require("zod-to-json-schema");
|
|
8
7
|
const di_1 = require("@opensumi/di");
|
|
9
8
|
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
10
9
|
const ide_workspace_1 = require("@opensumi/ide-workspace");
|
|
@@ -37,7 +36,7 @@ let GetDiagnosticsByPathTool = class GetDiagnosticsByPathTool {
|
|
|
37
36
|
'- "error": Must be fixed immediately as they indicate critical issues that will prevent code from working correctly. ' +
|
|
38
37
|
'- "warning": For user code, preserve unless the warning indicates a clear improvement opportunity. For generated code, optimize to remove warnings. ' +
|
|
39
38
|
'- "information"/"hint": For user code, preserve as they might reflect intentional patterns. For generated code, optimize if it improves code quality without changing functionality.',
|
|
40
|
-
inputSchema
|
|
39
|
+
inputSchema,
|
|
41
40
|
handler: this.handler.bind(this),
|
|
42
41
|
};
|
|
43
42
|
}
|