@opensumi/ide-ai-native 3.9.1-next-1749204089.0 → 3.9.1-next-1749538805.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 +9 -4
- package/lib/browser/ai-core.contribution.js.map +1 -1
- package/lib/browser/chat/apply.service.d.ts +3 -0
- package/lib/browser/chat/apply.service.d.ts.map +1 -1
- package/lib/browser/chat/apply.service.js +47 -0
- package/lib/browser/chat/apply.service.js.map +1 -1
- package/lib/browser/chat/chat-manager.service.d.ts +1 -0
- package/lib/browser/chat/chat-manager.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-manager.service.js +9 -3
- package/lib/browser/chat/chat-manager.service.js.map +1 -1
- package/lib/browser/chat/chat-model.d.ts +8 -1
- package/lib/browser/chat/chat-model.d.ts.map +1 -1
- package/lib/browser/chat/chat-model.js +113 -76
- package/lib/browser/chat/chat-model.js.map +1 -1
- package/lib/browser/chat/chat-proxy.service.d.ts +0 -2
- package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-proxy.service.js +50 -57
- package/lib/browser/chat/chat-proxy.service.js.map +1 -1
- package/lib/browser/chat/chat.feature.registry.d.ts +4 -1
- package/lib/browser/chat/chat.feature.registry.d.ts.map +1 -1
- package/lib/browser/chat/chat.feature.registry.js +6 -0
- package/lib/browser/chat/chat.feature.registry.js.map +1 -1
- package/lib/browser/chat/chat.view.d.ts.map +1 -1
- package/lib/browser/chat/chat.view.js +50 -10
- package/lib/browser/chat/chat.view.js.map +1 -1
- package/lib/browser/components/ChatEditor.js +2 -2
- package/lib/browser/components/ChatEditor.js.map +1 -1
- package/lib/browser/components/ChatHistory.d.ts.map +1 -1
- package/lib/browser/components/ChatHistory.js +2 -1
- package/lib/browser/components/ChatHistory.js.map +1 -1
- package/lib/browser/components/ChatMentionInput.d.ts.map +1 -1
- package/lib/browser/components/ChatMentionInput.js +148 -30
- package/lib/browser/components/ChatMentionInput.js.map +1 -1
- package/lib/browser/components/ChatReply.js +2 -2
- package/lib/browser/components/ChatReply.js.map +1 -1
- package/lib/browser/components/ChatToolRender.d.ts.map +1 -1
- package/lib/browser/components/ChatToolRender.js +7 -2
- package/lib/browser/components/ChatToolRender.js.map +1 -1
- package/lib/browser/components/ChatToolRender.module.less +25 -0
- package/lib/browser/components/components.module.less +37 -8
- package/lib/browser/components/mention-input/mention-input.d.ts.map +1 -1
- package/lib/browser/components/mention-input/mention-input.js +150 -14
- package/lib/browser/components/mention-input/mention-input.js.map +1 -1
- package/lib/browser/components/mention-input/mention-input.module.less +165 -1
- package/lib/browser/components/mention-input/mention-select.d.ts +28 -0
- package/lib/browser/components/mention-input/mention-select.d.ts.map +1 -0
- package/lib/browser/components/mention-input/mention-select.js +136 -0
- package/lib/browser/components/mention-input/mention-select.js.map +1 -0
- package/lib/browser/components/mention-input/mention-select.module.less +297 -0
- package/lib/browser/components/mention-input/types.d.ts +28 -1
- package/lib/browser/components/mention-input/types.d.ts.map +1 -1
- package/lib/browser/components/mention-input/types.js +1 -0
- package/lib/browser/components/mention-input/types.js.map +1 -1
- package/lib/browser/components/utils.d.ts +2 -2
- package/lib/browser/context/llm-context.service.d.ts +21 -2
- package/lib/browser/context/llm-context.service.d.ts.map +1 -1
- package/lib/browser/context/llm-context.service.js +162 -20
- package/lib/browser/context/llm-context.service.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/decoration/additions-deletions.decoration.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/decoration/additions-deletions.decoration.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/diff-computer.js +1 -1
- package/lib/browser/contrib/intelligent-completions/diff-computer.js.map +1 -1
- package/lib/browser/contrib/terminal/terminal.feature.registry.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +7 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/layout/ai-layout.d.ts.map +1 -1
- package/lib/browser/layout/ai-layout.js +6 -4
- package/lib/browser/layout/ai-layout.js.map +1 -1
- package/lib/browser/layout/tabbar.view.d.ts +1 -1
- package/lib/browser/layout/tabbar.view.d.ts.map +1 -1
- package/lib/browser/layout/tabbar.view.js +5 -12
- package/lib/browser/layout/tabbar.view.js.map +1 -1
- package/lib/browser/mcp/base-apply.service.d.ts +5 -4
- package/lib/browser/mcp/base-apply.service.d.ts.map +1 -1
- package/lib/browser/mcp/base-apply.service.js +23 -5
- package/lib/browser/mcp/base-apply.service.js.map +1 -1
- package/lib/browser/mcp/mcp-server-proxy.service.d.ts +3 -1
- package/lib/browser/mcp/mcp-server-proxy.service.d.ts.map +1 -1
- package/lib/browser/mcp/mcp-server-proxy.service.js +4 -0
- package/lib/browser/mcp/mcp-server-proxy.service.js.map +1 -1
- package/lib/browser/mcp/mcp-server.feature.registry.d.ts.map +1 -1
- package/lib/browser/mcp/mcp-server.feature.registry.js +7 -1
- package/lib/browser/mcp/mcp-server.feature.registry.js.map +1 -1
- package/lib/browser/mcp/tools/createNewFileWithText.d.ts +1 -3
- package/lib/browser/mcp/tools/createNewFileWithText.d.ts.map +1 -1
- package/lib/browser/mcp/tools/createNewFileWithText.js +14 -40
- package/lib/browser/mcp/tools/createNewFileWithText.js.map +1 -1
- package/lib/browser/mcp/tools/fileSearch.d.ts.map +1 -1
- package/lib/browser/mcp/tools/fileSearch.js +9 -5
- package/lib/browser/mcp/tools/fileSearch.js.map +1 -1
- package/lib/browser/mcp/tools/getDiagnosticsByPath.js.map +1 -1
- package/lib/browser/mcp/tools/getOpenEditorFileDiagnostics.js.map +1 -1
- package/lib/browser/mcp/tools/grepSearch.d.ts.map +1 -1
- package/lib/browser/mcp/tools/grepSearch.js +22 -10
- package/lib/browser/mcp/tools/grepSearch.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/CreateNewFileWithText.d.ts +15 -0
- package/lib/browser/mcp/tools/handlers/CreateNewFileWithText.d.ts.map +1 -0
- package/lib/browser/mcp/tools/handlers/CreateNewFileWithText.js +53 -0
- package/lib/browser/mcp/tools/handlers/CreateNewFileWithText.js.map +1 -0
- package/lib/browser/mcp/tools/handlers/ListDir.js +1 -1
- package/lib/browser/mcp/tools/handlers/ListDir.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/ReadFile.js +1 -1
- package/lib/browser/mcp/tools/handlers/ReadFile.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/RunCommand.d.ts +11 -1
- package/lib/browser/mcp/tools/handlers/RunCommand.d.ts.map +1 -1
- package/lib/browser/mcp/tools/handlers/RunCommand.js +11 -4
- package/lib/browser/mcp/tools/handlers/RunCommand.js.map +1 -1
- package/lib/browser/mcp/tools/listDir.d.ts.map +1 -1
- package/lib/browser/mcp/tools/listDir.js +19 -15
- package/lib/browser/mcp/tools/listDir.js.map +1 -1
- package/lib/browser/mcp/tools/runTerminalCmd.js.map +1 -1
- package/lib/browser/model/msg-history-manager.d.ts +47 -1
- package/lib/browser/model/msg-history-manager.d.ts.map +1 -1
- package/lib/browser/model/msg-history-manager.js +127 -2
- 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/rules/rules.contribution.d.ts +29 -0
- package/lib/browser/rules/rules.contribution.d.ts.map +1 -0
- package/lib/browser/rules/rules.contribution.js +94 -0
- package/lib/browser/rules/rules.contribution.js.map +1 -0
- package/lib/browser/rules/rules.module.less +175 -0
- package/lib/browser/rules/rules.service.d.ts +25 -0
- package/lib/browser/rules/rules.service.d.ts.map +1 -0
- package/lib/browser/rules/rules.service.js +180 -0
- package/lib/browser/rules/rules.service.js.map +1 -0
- package/lib/browser/rules/rules.view.d.ts +3 -0
- package/lib/browser/rules/rules.view.d.ts.map +1 -0
- package/lib/browser/rules/rules.view.js +76 -0
- package/lib/browser/rules/rules.view.js.map +1 -0
- package/lib/browser/types.d.ts +12 -1
- package/lib/browser/types.d.ts.map +1 -1
- package/lib/browser/types.js.map +1 -1
- 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/common/image-compression.d.ts +25 -0
- package/lib/common/image-compression.d.ts.map +1 -0
- package/lib/common/image-compression.js +153 -0
- package/lib/common/image-compression.js.map +1 -0
- package/lib/common/index.d.ts +5 -1
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +2 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/llm-context.d.ts +19 -0
- package/lib/common/llm-context.d.ts.map +1 -1
- package/lib/common/llm-context.js.map +1 -1
- package/lib/common/mdc-parser.d.ts +60 -0
- package/lib/common/mdc-parser.d.ts.map +1 -0
- package/lib/common/mdc-parser.js +246 -0
- package/lib/common/mdc-parser.js.map +1 -0
- package/lib/common/model.d.ts +1 -0
- package/lib/common/model.d.ts.map +1 -1
- package/lib/common/model.js.map +1 -1
- package/lib/common/prompts/context-prompt-provider.d.ts +0 -2
- package/lib/common/prompts/context-prompt-provider.d.ts.map +1 -1
- package/lib/common/prompts/context-prompt-provider.js +35 -29
- package/lib/common/prompts/context-prompt-provider.js.map +1 -1
- package/lib/common/prompts/system-prompt.d.ts +2 -0
- package/lib/common/prompts/system-prompt.d.ts.map +1 -0
- package/lib/common/prompts/system-prompt.js +5 -0
- package/lib/common/prompts/system-prompt.js.map +1 -0
- package/lib/common/types.d.ts +21 -0
- package/lib/common/types.d.ts.map +1 -1
- package/lib/common/types.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 +5 -2
- package/lib/common/utils.js.map +1 -1
- package/lib/node/anthropic/anthropic-language-model.d.ts +1 -1
- package/lib/node/base-language-model.d.ts +2 -1
- package/lib/node/base-language-model.d.ts.map +1 -1
- package/lib/node/base-language-model.js +12 -2
- package/lib/node/base-language-model.js.map +1 -1
- package/lib/node/deepseek/deepseek-language-model.d.ts +1 -1
- package/lib/node/mcp/sumi-mcp-server.d.ts +3 -1
- package/lib/node/mcp/sumi-mcp-server.d.ts.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.js +7 -1
- package/lib/node/mcp/sumi-mcp-server.js.map +1 -1
- package/lib/node/mcp-server-manager-impl.d.ts +3 -1
- package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
- package/lib/node/mcp-server-manager-impl.js +14 -2
- package/lib/node/mcp-server-manager-impl.js.map +1 -1
- package/lib/node/mcp-server.sse.d.ts +187 -1
- package/lib/node/mcp-server.sse.d.ts.map +1 -1
- package/lib/node/mcp-server.sse.js +2 -2
- package/lib/node/mcp-server.sse.js.map +1 -1
- package/lib/node/mcp-server.stdio.d.ts +187 -1
- package/lib/node/mcp-server.stdio.d.ts.map +1 -1
- package/package.json +27 -26
- package/src/browser/ai-core.contribution.ts +14 -4
- package/src/browser/chat/apply.service.ts +62 -1
- package/src/browser/chat/chat-manager.service.ts +16 -7
- package/src/browser/chat/chat-model.ts +130 -73
- package/src/browser/chat/chat-proxy.service.ts +68 -81
- package/src/browser/chat/chat.feature.registry.ts +17 -1
- package/src/browser/chat/chat.view.tsx +73 -12
- package/src/browser/components/ChatEditor.tsx +1 -1
- package/src/browser/components/ChatHistory.tsx +2 -1
- package/src/browser/components/ChatMentionInput.tsx +180 -35
- package/src/browser/components/ChatReply.tsx +4 -4
- package/src/browser/components/ChatToolRender.module.less +25 -0
- package/src/browser/components/ChatToolRender.tsx +10 -2
- package/src/browser/components/components.module.less +37 -8
- package/src/browser/components/mention-input/mention-input.module.less +165 -1
- package/src/browser/components/mention-input/mention-input.tsx +232 -31
- package/src/browser/components/mention-input/mention-select.module.less +297 -0
- package/src/browser/components/mention-input/mention-select.tsx +256 -0
- package/src/browser/components/mention-input/types.ts +29 -0
- package/src/browser/context/llm-context.service.ts +182 -21
- package/src/browser/contrib/intelligent-completions/decoration/additions-deletions.decoration.ts +1 -1
- package/src/browser/contrib/intelligent-completions/diff-computer.ts +1 -1
- package/src/browser/contrib/terminal/terminal.feature.registry.ts +1 -1
- package/src/browser/index.ts +8 -0
- package/src/browser/layout/ai-layout.tsx +12 -8
- package/src/browser/layout/tabbar.view.tsx +10 -23
- package/src/browser/mcp/base-apply.service.ts +30 -10
- package/src/browser/mcp/mcp-server-proxy.service.ts +6 -1
- package/src/browser/mcp/mcp-server.feature.registry.ts +6 -1
- package/src/browser/mcp/tools/createNewFileWithText.ts +17 -46
- package/src/browser/mcp/tools/fileSearch.ts +8 -5
- package/src/browser/mcp/tools/getDiagnosticsByPath.ts +1 -1
- package/src/browser/mcp/tools/getOpenEditorFileDiagnostics.ts +1 -1
- package/src/browser/mcp/tools/grepSearch.ts +32 -21
- package/src/browser/mcp/tools/handlers/CreateNewFileWithText.ts +49 -0
- package/src/browser/mcp/tools/handlers/ListDir.ts +2 -2
- package/src/browser/mcp/tools/handlers/ReadFile.ts +2 -2
- package/src/browser/mcp/tools/handlers/RunCommand.ts +21 -14
- package/src/browser/mcp/tools/listDir.ts +15 -12
- package/src/browser/mcp/tools/runTerminalCmd.ts +1 -1
- package/src/browser/model/msg-history-manager.ts +181 -2
- package/src/browser/preferences/schema.ts +5 -0
- package/src/browser/rules/rules.contribution.ts +105 -0
- package/src/browser/rules/rules.module.less +175 -0
- package/src/browser/rules/rules.service.ts +189 -0
- package/src/browser/rules/rules.view.tsx +127 -0
- package/src/browser/types.ts +18 -0
- package/src/browser/widget/inline-stream-diff/live-preview.component.tsx +0 -1
- package/src/common/image-compression.ts +174 -0
- package/src/common/index.ts +6 -1
- package/src/common/llm-context.ts +23 -0
- package/src/common/mdc-parser.ts +295 -0
- package/src/common/model.ts +1 -0
- package/src/common/prompts/context-prompt-provider.ts +55 -40
- package/src/common/prompts/system-prompt.ts +2 -0
- package/src/common/types.ts +18 -0
- package/src/common/utils.ts +4 -1
- package/src/node/base-language-model.ts +11 -14
- package/src/node/mcp/sumi-mcp-server.ts +10 -2
- package/src/node/mcp-server-manager-impl.ts +17 -2
- package/src/node/mcp-server.sse.ts +1 -2
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-1749538805.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src"
|
|
@@ -23,30 +23,31 @@
|
|
|
23
23
|
"@ai-sdk/deepseek": "^0.1.11",
|
|
24
24
|
"@ai-sdk/openai": "^1.1.9",
|
|
25
25
|
"@ai-sdk/openai-compatible": "^0.1.11",
|
|
26
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
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-
|
|
44
|
-
"@opensumi/ide-
|
|
45
|
-
"@opensumi/ide-
|
|
46
|
-
"@opensumi/ide-
|
|
47
|
-
"@opensumi/ide-
|
|
26
|
+
"@modelcontextprotocol/sdk": "^1.11.4",
|
|
27
|
+
"@opensumi/ide-addons": "3.9.1-next-1749538805.0",
|
|
28
|
+
"@opensumi/ide-components": "3.9.1-next-1749538805.0",
|
|
29
|
+
"@opensumi/ide-connection": "3.9.1-next-1749538805.0",
|
|
30
|
+
"@opensumi/ide-core-common": "3.9.1-next-1749538805.0",
|
|
31
|
+
"@opensumi/ide-core-node": "3.9.1-next-1749538805.0",
|
|
32
|
+
"@opensumi/ide-debug": "3.9.1-next-1749538805.0",
|
|
33
|
+
"@opensumi/ide-design": "3.9.1-next-1749538805.0",
|
|
34
|
+
"@opensumi/ide-editor": "3.9.1-next-1749538805.0",
|
|
35
|
+
"@opensumi/ide-file-search": "3.9.1-next-1749538805.0",
|
|
36
|
+
"@opensumi/ide-file-service": "3.9.1-next-1749538805.0",
|
|
37
|
+
"@opensumi/ide-main-layout": "3.9.1-next-1749538805.0",
|
|
38
|
+
"@opensumi/ide-markers": "3.9.1-next-1749538805.0",
|
|
39
|
+
"@opensumi/ide-monaco": "3.9.1-next-1749538805.0",
|
|
40
|
+
"@opensumi/ide-outline": "3.9.1-next-1749538805.0",
|
|
41
|
+
"@opensumi/ide-overlay": "3.9.1-next-1749538805.0",
|
|
42
|
+
"@opensumi/ide-preferences": "3.9.1-next-1749538805.0",
|
|
43
|
+
"@opensumi/ide-quick-open": "3.9.1-next-1749538805.0",
|
|
44
|
+
"@opensumi/ide-search": "3.9.1-next-1749538805.0",
|
|
45
|
+
"@opensumi/ide-terminal-next": "3.9.1-next-1749538805.0",
|
|
46
|
+
"@opensumi/ide-theme": "3.9.1-next-1749538805.0",
|
|
47
|
+
"@opensumi/ide-utils": "3.9.1-next-1749538805.0",
|
|
48
|
+
"@opensumi/ide-workspace": "3.9.1-next-1749538805.0",
|
|
48
49
|
"@xterm/xterm": "5.5.0",
|
|
49
|
-
"ai": "^4.
|
|
50
|
+
"ai": "^4.3.16",
|
|
50
51
|
"ansi-regex": "^2.0.0",
|
|
51
52
|
"ansi_up": "^5.1.0",
|
|
52
53
|
"diff": "^7.0.0",
|
|
@@ -61,7 +62,7 @@
|
|
|
61
62
|
"zod-to-json-schema": "^3.24.1"
|
|
62
63
|
},
|
|
63
64
|
"devDependencies": {
|
|
64
|
-
"@opensumi/ide-core-browser": "3.9.1-next-
|
|
65
|
+
"@opensumi/ide-core-browser": "3.9.1-next-1749538805.0"
|
|
65
66
|
},
|
|
66
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "9d68f85049a688ddbc5e385daf0a18d3d113794f"
|
|
67
68
|
}
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
SlotLocation,
|
|
25
25
|
SlotRendererContribution,
|
|
26
26
|
SlotRendererRegistry,
|
|
27
|
+
TabbarBehaviorConfig,
|
|
27
28
|
getIcon,
|
|
28
29
|
localize,
|
|
29
30
|
} from '@opensumi/ide-core-browser';
|
|
@@ -813,15 +814,24 @@ export class AINativeBrowserContribution
|
|
|
813
814
|
}
|
|
814
815
|
|
|
815
816
|
registerRenderer(registry: SlotRendererRegistry): void {
|
|
817
|
+
const tabbarConfig: TabbarBehaviorConfig = {
|
|
818
|
+
isLatter: true,
|
|
819
|
+
};
|
|
816
820
|
if (this.designLayoutConfig.supportExternalChatPanel) {
|
|
817
|
-
registry.registerSlotRenderer(AI_CHAT_VIEW_ID, AIChatTabRendererWithTab);
|
|
821
|
+
registry.registerSlotRenderer(AI_CHAT_VIEW_ID, AIChatTabRendererWithTab, tabbarConfig);
|
|
818
822
|
} else {
|
|
819
|
-
registry.registerSlotRenderer(AI_CHAT_VIEW_ID, AIChatTabRenderer);
|
|
823
|
+
registry.registerSlotRenderer(AI_CHAT_VIEW_ID, AIChatTabRenderer, tabbarConfig);
|
|
820
824
|
}
|
|
821
825
|
|
|
822
826
|
if (this.designLayoutConfig.useMergeRightWithLeftPanel) {
|
|
823
|
-
registry.registerSlotRenderer(
|
|
824
|
-
|
|
827
|
+
registry.registerSlotRenderer(
|
|
828
|
+
SlotLocation.view,
|
|
829
|
+
AILeftTabRenderer,
|
|
830
|
+
Object.assign({}, tabbarConfig, {
|
|
831
|
+
isLatter: false,
|
|
832
|
+
}),
|
|
833
|
+
);
|
|
834
|
+
registry.registerSlotRenderer(SlotLocation.extendView, AIRightTabRenderer, tabbarConfig);
|
|
825
835
|
}
|
|
826
836
|
}
|
|
827
837
|
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { Autowired, Injectable } from '@opensumi/di';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
AIBackSerivcePath,
|
|
4
|
+
CancellationTokenSource,
|
|
5
|
+
IAIBackService,
|
|
6
|
+
IChatProgress,
|
|
7
|
+
URI,
|
|
8
|
+
path,
|
|
9
|
+
} from '@opensumi/ide-core-browser';
|
|
10
|
+
import { CommandService } from '@opensumi/ide-core-common/lib/command';
|
|
3
11
|
import { IEditorDocumentModelService } from '@opensumi/ide-editor/lib/browser';
|
|
12
|
+
import { CodeAction, CodeActionContext, CodeActionTriggerType, ICodeEditor } from '@opensumi/ide-monaco';
|
|
13
|
+
import { languageFeaturesService } from '@opensumi/ide-monaco/lib/browser/monaco-api/languages';
|
|
4
14
|
import { SumiReadableStream } from '@opensumi/ide-utils/lib/stream';
|
|
5
15
|
import { Range } from '@opensumi/monaco-editor-core';
|
|
6
16
|
|
|
@@ -10,8 +20,59 @@ import { BaseApplyService } from '../mcp/base-apply.service';
|
|
|
10
20
|
|
|
11
21
|
import { ChatProxyService } from './chat-proxy.service';
|
|
12
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Filter code actions to only apply batch fixes
|
|
25
|
+
* Skip individual fixes as consecutive WorkspaceEdits may interfere with each other
|
|
26
|
+
* @param codeAction The code action to check
|
|
27
|
+
* @returns boolean indicating if the action is auto-fixable
|
|
28
|
+
*/
|
|
29
|
+
function isAutoFixable(codeAction: CodeAction): boolean {
|
|
30
|
+
return codeAction.title.toLowerCase().includes('all');
|
|
31
|
+
}
|
|
32
|
+
|
|
13
33
|
@Injectable()
|
|
14
34
|
export class ApplyService extends BaseApplyService {
|
|
35
|
+
@Autowired(CommandService)
|
|
36
|
+
private commandService: CommandService;
|
|
37
|
+
|
|
38
|
+
protected async postApplyHandler(editor: ICodeEditor): Promise<void> {
|
|
39
|
+
const model = editor.getModel();
|
|
40
|
+
if (!model) {
|
|
41
|
+
return Promise.resolve();
|
|
42
|
+
}
|
|
43
|
+
const providers = languageFeaturesService.codeActionProvider.ordered(model);
|
|
44
|
+
|
|
45
|
+
if (!providers) {
|
|
46
|
+
return Promise.resolve();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const [provider] = providers;
|
|
50
|
+
const range = model.getFullModelRange();
|
|
51
|
+
const context: CodeActionContext = {
|
|
52
|
+
trigger: CodeActionTriggerType.Auto,
|
|
53
|
+
};
|
|
54
|
+
const ts = new CancellationTokenSource();
|
|
55
|
+
const actionList = await provider.provideCodeActions(model, range, context, ts.token);
|
|
56
|
+
|
|
57
|
+
// 提取所有可修复的代码操作
|
|
58
|
+
const fixableActions = actionList?.actions.filter(isAutoFixable) || [];
|
|
59
|
+
|
|
60
|
+
if (fixableActions.length === 0) {
|
|
61
|
+
return Promise.resolve();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// 执行所有可修复的代码操作
|
|
65
|
+
await Promise.allSettled(
|
|
66
|
+
fixableActions.map(async (action) => {
|
|
67
|
+
if (action.command) {
|
|
68
|
+
try {
|
|
69
|
+
await this.commandService.executeCommand(action.command.id, ...(action.command.arguments || []));
|
|
70
|
+
} catch (err) {}
|
|
71
|
+
}
|
|
72
|
+
}),
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
15
76
|
@Autowired(IEditorDocumentModelService)
|
|
16
77
|
private readonly modelService: IEditorDocumentModelService;
|
|
17
78
|
|
|
@@ -15,12 +15,13 @@ import {
|
|
|
15
15
|
StorageProvider,
|
|
16
16
|
debounce,
|
|
17
17
|
} from '@opensumi/ide-core-common';
|
|
18
|
-
import { IHistoryChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
|
|
18
|
+
import { ChatFeatureRegistryToken, IHistoryChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
|
|
19
19
|
|
|
20
20
|
import { IChatAgentService, IChatFollowup, IChatRequestMessage, IChatResponseErrorDetails } from '../../common';
|
|
21
21
|
import { MsgHistoryManager } from '../model/msg-history-manager';
|
|
22
22
|
|
|
23
23
|
import { ChatModel, ChatRequestModel, ChatResponseModel, IChatProgressResponseContent } from './chat-model';
|
|
24
|
+
import { ChatFeatureRegistry } from './chat.feature.registry';
|
|
24
25
|
|
|
25
26
|
interface ISessionModel {
|
|
26
27
|
sessionId: string;
|
|
@@ -78,17 +79,23 @@ export class ChatManagerService extends Disposable {
|
|
|
78
79
|
@Autowired(PreferenceService)
|
|
79
80
|
private preferenceService: PreferenceService;
|
|
80
81
|
|
|
82
|
+
@Autowired(ChatFeatureRegistryToken)
|
|
83
|
+
private chatFeatureRegistry: ChatFeatureRegistry;
|
|
84
|
+
|
|
81
85
|
private _chatStorage: IStorage;
|
|
82
86
|
|
|
83
87
|
protected fromJSON(data: ISessionModel[]) {
|
|
84
88
|
return data
|
|
85
89
|
.filter((item) => item.history.messages.length > 0)
|
|
86
90
|
.map((item) => {
|
|
87
|
-
const model = new ChatModel(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
const model = new ChatModel(
|
|
92
|
+
this.chatFeatureRegistry,
|
|
93
|
+
{
|
|
94
|
+
sessionId: item.sessionId,
|
|
95
|
+
history: new MsgHistoryManager(this.chatFeatureRegistry, item.history),
|
|
96
|
+
modelId: item.modelId,
|
|
97
|
+
},
|
|
98
|
+
);
|
|
92
99
|
const requests = item.requests.map(
|
|
93
100
|
(request) =>
|
|
94
101
|
new ChatRequestModel(
|
|
@@ -131,7 +138,9 @@ export class ChatManagerService extends Disposable {
|
|
|
131
138
|
}
|
|
132
139
|
|
|
133
140
|
startSession() {
|
|
134
|
-
const model = new ChatModel(
|
|
141
|
+
const model = new ChatModel(
|
|
142
|
+
this.chatFeatureRegistry,
|
|
143
|
+
);
|
|
135
144
|
this.#sessionModels.set(model.sessionId, model);
|
|
136
145
|
this.listenSession(model);
|
|
137
146
|
return model;
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
import { MsgHistoryManager } from '../model/msg-history-manager';
|
|
29
29
|
import { IChatSlashCommandItem } from '../types';
|
|
30
30
|
|
|
31
|
-
import
|
|
31
|
+
import { ChatFeatureRegistry } from './chat.feature.registry';
|
|
32
32
|
|
|
33
33
|
export type IChatProgressResponseContent =
|
|
34
34
|
| IChatMarkdownContent
|
|
@@ -296,10 +296,13 @@ export class ChatRequestModel implements IChatRequestModel {
|
|
|
296
296
|
export class ChatModel extends Disposable implements IChatModel {
|
|
297
297
|
private requestIdPool = 0;
|
|
298
298
|
|
|
299
|
-
constructor(
|
|
299
|
+
constructor(
|
|
300
|
+
private chatFeatureRegistry: ChatFeatureRegistry,
|
|
301
|
+
initParams?: { sessionId?: string; history?: MsgHistoryManager; modelId?: string },
|
|
302
|
+
) {
|
|
300
303
|
super();
|
|
301
304
|
this.#sessionId = initParams?.sessionId ?? uuid();
|
|
302
|
-
this.history = initParams?.history ?? new MsgHistoryManager();
|
|
305
|
+
this.history = initParams?.history ?? new MsgHistoryManager(this.chatFeatureRegistry);
|
|
303
306
|
this.#modelId = initParams?.modelId;
|
|
304
307
|
}
|
|
305
308
|
|
|
@@ -336,88 +339,142 @@ export class ChatModel extends Disposable implements IChatModel {
|
|
|
336
339
|
this.#modelId = modelId;
|
|
337
340
|
}
|
|
338
341
|
|
|
339
|
-
|
|
342
|
+
private processMemorySummaries(): CoreMessage[] {
|
|
343
|
+
const memorySummaries = this.history.getMemorySummaries();
|
|
344
|
+
if (memorySummaries.length === 0) {
|
|
345
|
+
return [];
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
const processedSummaries = memorySummaries
|
|
349
|
+
.map((summary) => {
|
|
350
|
+
try {
|
|
351
|
+
const parsed = JSON.parse(summary.content);
|
|
352
|
+
return parsed.memory || parsed.content || summary.content;
|
|
353
|
+
} catch {
|
|
354
|
+
return summary.content;
|
|
355
|
+
}
|
|
356
|
+
})
|
|
357
|
+
.filter((content) => content && content !== 'no_memory_needed')
|
|
358
|
+
.filter((content, index, self) => self.indexOf(content) === index);
|
|
359
|
+
|
|
360
|
+
return processedSummaries.length > 0
|
|
361
|
+
? [
|
|
362
|
+
{
|
|
363
|
+
role: 'system',
|
|
364
|
+
content: '以下是之前对话的总结:\n' + processedSummaries.join('\n\n'),
|
|
365
|
+
},
|
|
366
|
+
]
|
|
367
|
+
: [];
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
private processToolCall(part: IChatToolContent, history: CoreMessage[]): void {
|
|
371
|
+
if (history[history.length - 1].role !== 'assistant') {
|
|
372
|
+
history.push({
|
|
373
|
+
role: 'assistant',
|
|
374
|
+
content: [],
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
const toolCallId = part.content.id;
|
|
379
|
+
const toolCallInfo = {
|
|
380
|
+
id: toolCallId,
|
|
381
|
+
name: part.content.function.name,
|
|
382
|
+
args: this.parseJsonSafely(part.content.function.arguments || '{}', 'tool call arguments'),
|
|
383
|
+
result: this.parseJsonSafely(part.content.result || '{}', 'tool result'),
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
this.history.addToolCall(toolCallInfo);
|
|
387
|
+
this.history.setMessageAdditional(part.content.id, { toolCallId });
|
|
388
|
+
|
|
389
|
+
const lastMessage = history[history.length - 1];
|
|
390
|
+
lastMessage.content = [
|
|
391
|
+
{
|
|
392
|
+
type: 'tool-call',
|
|
393
|
+
toolCallId: part.content.id,
|
|
394
|
+
toolName: part.content.function.name,
|
|
395
|
+
args: toolCallInfo.args,
|
|
396
|
+
},
|
|
397
|
+
];
|
|
398
|
+
|
|
399
|
+
history.push({
|
|
400
|
+
role: 'tool',
|
|
401
|
+
content: [
|
|
402
|
+
{
|
|
403
|
+
type: 'tool-result',
|
|
404
|
+
toolCallId: part.content.id,
|
|
405
|
+
toolName: part.content.function.name,
|
|
406
|
+
result: toolCallInfo.result,
|
|
407
|
+
},
|
|
408
|
+
],
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
private parseJsonSafely(jsonString: string, context: string): any {
|
|
413
|
+
try {
|
|
414
|
+
return JSON.parse(jsonString);
|
|
415
|
+
} catch (e) {
|
|
416
|
+
console.error(`[ChatModel] Failed to parse ${context}:`, e);
|
|
417
|
+
return {};
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
private processRecentMessages(): CoreMessage[] {
|
|
340
422
|
const history: CoreMessage[] = [];
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
423
|
+
// 从 MsgHistoryManager 获取消息,并过滤掉已总结的消息
|
|
424
|
+
const recentMessages = this.history
|
|
425
|
+
.getMessages()
|
|
426
|
+
.filter((msg) => !msg.isSummarized)
|
|
427
|
+
.slice(-this.history.memoryConfig.shortTermSize);
|
|
428
|
+
|
|
429
|
+
for (const message of recentMessages) {
|
|
345
430
|
history.push({
|
|
346
431
|
role: 'user',
|
|
347
|
-
content:
|
|
348
|
-
? [
|
|
349
|
-
{ type: 'text', text: request.message.prompt },
|
|
350
|
-
...request.message.images.map((image) => ({ type: 'image', image: new URL(image) } as ImagePart)),
|
|
351
|
-
]
|
|
352
|
-
: request.message.prompt,
|
|
432
|
+
content: message.content,
|
|
353
433
|
});
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
content: [
|
|
362
|
-
{
|
|
363
|
-
type: 'text',
|
|
364
|
-
text: part.kind === 'markdownContent' ? part.content.value : part.content,
|
|
365
|
-
},
|
|
366
|
-
],
|
|
367
|
-
});
|
|
434
|
+
|
|
435
|
+
// 如果有响应内容,添加响应
|
|
436
|
+
const additional = this.history.getMessageAdditional(message.id);
|
|
437
|
+
if (additional?.response) {
|
|
438
|
+
const response = additional.response;
|
|
439
|
+
if (response.kind === 'toolCall') {
|
|
440
|
+
this.processToolCall(response, history);
|
|
368
441
|
} else {
|
|
369
|
-
// 直接开始toolCall场景
|
|
370
|
-
if (history[history.length - 1].role !== 'assistant') {
|
|
371
|
-
history.push({
|
|
372
|
-
role: 'assistant',
|
|
373
|
-
content: [],
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
(history[history.length - 1].content as Array<TextPart | ToolCallPart>).push({
|
|
377
|
-
type: 'tool-call',
|
|
378
|
-
toolCallId: part.content.id,
|
|
379
|
-
toolName: part.content.function.name,
|
|
380
|
-
args: (() => {
|
|
381
|
-
try {
|
|
382
|
-
return JSON.parse(part.content.function.arguments || '{}');
|
|
383
|
-
} catch (e) {
|
|
384
|
-
console.error('Failed to parse tool call arguments:', e);
|
|
385
|
-
return {};
|
|
386
|
-
}
|
|
387
|
-
})(),
|
|
388
|
-
});
|
|
389
442
|
history.push({
|
|
390
|
-
role: '
|
|
391
|
-
content:
|
|
392
|
-
{
|
|
393
|
-
type: 'tool-result',
|
|
394
|
-
toolCallId: part.content.id,
|
|
395
|
-
toolName: part.content.function.name,
|
|
396
|
-
result: (() => {
|
|
397
|
-
try {
|
|
398
|
-
return JSON.parse(part.content.result || '{}');
|
|
399
|
-
} catch (e) {
|
|
400
|
-
console.error('Failed to parse tool result:', e);
|
|
401
|
-
return {};
|
|
402
|
-
}
|
|
403
|
-
})(),
|
|
404
|
-
},
|
|
405
|
-
],
|
|
443
|
+
role: 'assistant',
|
|
444
|
+
content: response.kind === 'markdownContent' ? response.content.value : response.content,
|
|
406
445
|
});
|
|
407
446
|
}
|
|
408
447
|
}
|
|
409
448
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
449
|
+
|
|
450
|
+
return history;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
private limitTokens(history: CoreMessage[], contextWindow?: number): CoreMessage[] {
|
|
454
|
+
if (!contextWindow) {
|
|
455
|
+
return history;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
let currentHistory = history;
|
|
459
|
+
let tokenCount = JSON.stringify(currentHistory).length / 3;
|
|
460
|
+
|
|
461
|
+
while (tokenCount > contextWindow && currentHistory.length > 1) {
|
|
462
|
+
if (currentHistory[0].role === 'system' && currentHistory.length > 2) {
|
|
463
|
+
currentHistory = [currentHistory[0], ...currentHistory.slice(2)];
|
|
464
|
+
} else {
|
|
465
|
+
currentHistory = currentHistory.slice(1);
|
|
418
466
|
}
|
|
467
|
+
tokenCount = JSON.stringify(currentHistory).length / 3;
|
|
419
468
|
}
|
|
420
|
-
|
|
469
|
+
|
|
470
|
+
return currentHistory;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
getMessageHistory(contextWindow?: number): CoreMessage[] {
|
|
474
|
+
const memorySummaries = this.processMemorySummaries();
|
|
475
|
+
const recentMessages = this.processRecentMessages();
|
|
476
|
+
const history = [...memorySummaries, ...recentMessages];
|
|
477
|
+
return this.limitTokens(history, contextWindow);
|
|
421
478
|
}
|
|
422
479
|
|
|
423
480
|
addRequest(message: IChatRequestMessage): ChatRequestModel {
|