@opensumi/ide-ai-native 3.8.1-next-1741232004.0 → 3.8.1-next-1741250387.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.contextkeys.d.ts +1 -1
- package/lib/browser/ai-core.contextkeys.d.ts.map +1 -1
- package/lib/browser/ai-core.contextkeys.js +1 -1
- package/lib/browser/ai-core.contextkeys.js.map +1 -1
- package/lib/browser/ai-core.contribution.d.ts +0 -5
- package/lib/browser/ai-core.contribution.d.ts.map +1 -1
- package/lib/browser/ai-core.contribution.js +9 -71
- package/lib/browser/ai-core.contribution.js.map +1 -1
- package/lib/browser/chat/chat-agent.service.d.ts +3 -11
- package/lib/browser/chat/chat-agent.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-agent.service.js +5 -43
- package/lib/browser/chat/chat-agent.service.js.map +1 -1
- package/lib/browser/chat/chat-manager.service.d.ts +0 -1
- package/lib/browser/chat/chat-manager.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-manager.service.js +8 -6
- package/lib/browser/chat/chat-manager.service.js.map +1 -1
- package/lib/browser/chat/chat-model.d.ts +1 -4
- package/lib/browser/chat/chat-model.d.ts.map +1 -1
- package/lib/browser/chat/chat-model.js +2 -57
- package/lib/browser/chat/chat-model.js.map +1 -1
- package/lib/browser/chat/chat-proxy.service.d.ts.map +1 -1
- package/lib/browser/chat/chat-proxy.service.js +6 -13
- package/lib/browser/chat/chat-proxy.service.js.map +1 -1
- package/lib/browser/chat/chat.api.service.d.ts +2 -1
- package/lib/browser/chat/chat.api.service.d.ts.map +1 -1
- package/lib/browser/chat/chat.api.service.js +4 -0
- package/lib/browser/chat/chat.api.service.js.map +1 -1
- package/lib/browser/chat/chat.internal.service.d.ts +0 -2
- package/lib/browser/chat/chat.internal.service.d.ts.map +1 -1
- package/lib/browser/chat/chat.internal.service.js +0 -3
- package/lib/browser/chat/chat.internal.service.js.map +1 -1
- package/lib/browser/chat/chat.module.less +2 -1
- package/lib/browser/chat/chat.view.d.ts.map +1 -1
- package/lib/browser/chat/chat.view.js +29 -46
- package/lib/browser/chat/chat.view.js.map +1 -1
- package/lib/browser/components/ChatContext/index.js +2 -2
- package/lib/browser/components/ChatContext/index.js.map +1 -1
- package/lib/browser/components/ChatInput.d.ts.map +1 -1
- package/lib/browser/components/ChatInput.js +1 -29
- package/lib/browser/components/ChatInput.js.map +1 -1
- package/lib/browser/components/ChatReply.js +1 -6
- package/lib/browser/components/ChatReply.js.map +1 -1
- package/lib/browser/components/ChatThinking.d.ts +2 -0
- package/lib/browser/components/ChatThinking.d.ts.map +1 -1
- package/lib/browser/components/ChatThinking.js +10 -2
- package/lib/browser/components/ChatThinking.js.map +1 -1
- package/lib/browser/components/ChatToolRender.d.ts.map +1 -1
- package/lib/browser/components/ChatToolRender.js +3 -2
- package/lib/browser/components/ChatToolRender.js.map +1 -1
- package/lib/browser/components/WelcomeMsg.js +1 -1
- package/lib/browser/components/WelcomeMsg.js.map +1 -1
- package/lib/browser/components/chat-history.module.less +1 -2
- package/lib/browser/components/components.module.less +0 -22
- package/lib/browser/context/llm-context.service.d.ts +5 -18
- package/lib/browser/context/llm-context.service.d.ts.map +1 -1
- package/lib/browser/context/llm-context.service.js +47 -81
- package/lib/browser/context/llm-context.service.js.map +1 -1
- package/lib/browser/contrib/inline-completions/inline-completions.controller.js +1 -1
- package/lib/browser/contrib/inline-completions/inline-completions.controller.js.map +1 -1
- package/lib/browser/contrib/inline-completions/prompt/matcher.js +2 -2
- package/lib/browser/contrib/inline-completions/prompt/similarSnippets.d.ts +1 -1
- package/lib/browser/contrib/inline-completions/prompt/similarSnippets.js +2 -2
- package/lib/browser/contrib/intelligent-completions/index.d.ts +1 -2
- package/lib/browser/contrib/intelligent-completions/index.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/index.js +1 -4
- package/lib/browser/contrib/intelligent-completions/index.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js +2 -2
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js +5 -6
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/view/code-edits-previewer.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/view/code-edits-previewer.js +2 -4
- package/lib/browser/contrib/intelligent-completions/view/code-edits-previewer.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/view/default.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/view/default.js +11 -23
- package/lib/browser/contrib/intelligent-completions/view/default.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +0 -4
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/layout/layout.module.less +4 -4
- package/lib/browser/mcp/base-apply.service.d.ts +11 -26
- package/lib/browser/mcp/base-apply.service.d.ts.map +1 -1
- package/lib/browser/mcp/base-apply.service.js +103 -255
- package/lib/browser/mcp/base-apply.service.js.map +1 -1
- package/lib/browser/mcp/mcp-server-proxy.service.d.ts +0 -6
- package/lib/browser/mcp/mcp-server-proxy.service.d.ts.map +1 -1
- package/lib/browser/mcp/mcp-server-proxy.service.js +1 -10
- package/lib/browser/mcp/mcp-server-proxy.service.js.map +1 -1
- package/lib/browser/mcp/mcp-server.feature.registry.d.ts +0 -8
- package/lib/browser/mcp/mcp-server.feature.registry.d.ts.map +1 -1
- package/lib/browser/mcp/mcp-server.feature.registry.js +3 -28
- package/lib/browser/mcp/mcp-server.feature.registry.js.map +1 -1
- package/lib/browser/mcp/tools/components/EditFile.d.ts.map +1 -1
- package/lib/browser/mcp/tools/components/EditFile.js +9 -15
- package/lib/browser/mcp/tools/components/EditFile.js.map +1 -1
- 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/{ExpandableFileList.js → SearchResult.js} +19 -29
- package/lib/browser/mcp/tools/components/SearchResult.js.map +1 -0
- package/lib/browser/mcp/tools/components/Terminal.d.ts.map +1 -1
- package/lib/browser/mcp/tools/components/Terminal.js +2 -10
- package/lib/browser/mcp/tools/components/Terminal.js.map +1 -1
- package/lib/browser/mcp/tools/components/index.module.less +0 -4
- package/lib/browser/mcp/tools/createNewFileWithText.d.ts +0 -1
- package/lib/browser/mcp/tools/createNewFileWithText.d.ts.map +1 -1
- package/lib/browser/mcp/tools/createNewFileWithText.js +11 -19
- package/lib/browser/mcp/tools/createNewFileWithText.js.map +1 -1
- package/lib/browser/mcp/tools/fileSearch.d.ts +0 -1
- package/lib/browser/mcp/tools/fileSearch.d.ts.map +1 -1
- package/lib/browser/mcp/tools/fileSearch.js +5 -14
- package/lib/browser/mcp/tools/fileSearch.js.map +1 -1
- package/lib/browser/mcp/tools/getDiagnosticsByPath.d.ts.map +1 -1
- package/lib/browser/mcp/tools/getDiagnosticsByPath.js +0 -1
- package/lib/browser/mcp/tools/getDiagnosticsByPath.js.map +1 -1
- package/lib/browser/mcp/tools/grepSearch.d.ts.map +1 -1
- package/lib/browser/mcp/tools/grepSearch.js +3 -6
- package/lib/browser/mcp/tools/grepSearch.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/EditFile.js +1 -1
- package/lib/browser/mcp/tools/handlers/EditFile.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/ListDir.d.ts +0 -1
- package/lib/browser/mcp/tools/handlers/ListDir.d.ts.map +1 -1
- package/lib/browser/mcp/tools/handlers/ListDir.js +0 -3
- package/lib/browser/mcp/tools/handlers/ListDir.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/RunCommand.d.ts.map +1 -1
- package/lib/browser/mcp/tools/handlers/RunCommand.js +0 -2
- package/lib/browser/mcp/tools/handlers/RunCommand.js.map +1 -1
- package/lib/browser/mcp/tools/listDir.d.ts +0 -1
- package/lib/browser/mcp/tools/listDir.d.ts.map +1 -1
- package/lib/browser/mcp/tools/listDir.js +4 -35
- package/lib/browser/mcp/tools/listDir.js.map +1 -1
- package/lib/browser/mcp/tools/runTerminalCmd.d.ts.map +1 -1
- package/lib/browser/mcp/tools/runTerminalCmd.js +0 -1
- package/lib/browser/mcp/tools/runTerminalCmd.js.map +1 -1
- package/lib/browser/model/msg-history-manager.d.ts +2 -2
- package/lib/browser/model/msg-history-manager.d.ts.map +1 -1
- package/lib/browser/model/msg-history-manager.js +10 -4
- 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 +2 -22
- package/lib/browser/preferences/schema.js.map +1 -1
- package/lib/browser/types.d.ts +0 -4
- package/lib/browser/types.d.ts.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat-controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat-controller.js +1 -6
- package/lib/browser/widget/inline-chat/inline-chat-controller.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-manager.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-manager.js +8 -68
- package/lib/browser/widget/inline-diff/inline-diff-manager.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts +4 -10
- package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-previewer.js +3 -14
- package/lib/browser/widget/inline-diff/inline-diff-previewer.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-widget.module.less +4 -25
- package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts +3 -3
- package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff.controller.js +5 -10
- package/lib/browser/widget/inline-diff/inline-diff.controller.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts +17 -46
- 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 +53 -110
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts +0 -4
- 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 -26
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js.map +1 -1
- package/lib/common/index.d.ts +4 -13
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +1 -5
- package/lib/common/index.js.map +1 -1
- package/lib/common/llm-context.d.ts +9 -13
- package/lib/common/llm-context.d.ts.map +1 -1
- package/lib/common/llm-context.js.map +1 -1
- package/lib/common/mcp-server-manager.d.ts +1 -17
- 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 +3 -4
- package/lib/common/prompts/context-prompt-provider.d.ts.map +1 -1
- package/lib/common/prompts/context-prompt-provider.js +22 -33
- package/lib/common/prompts/context-prompt-provider.js.map +1 -1
- package/lib/common/tool-invocation-registry.d.ts +2 -2
- package/lib/common/tool-invocation-registry.d.ts.map +1 -1
- package/lib/common/tool-invocation-registry.js +1 -1
- package/lib/common/tool-invocation-registry.js.map +1 -1
- package/lib/common/types.d.ts +0 -8
- package/lib/common/types.d.ts.map +1 -1
- package/lib/common/utils.d.ts.map +1 -1
- package/lib/common/utils.js +1 -2
- package/lib/common/utils.js.map +1 -1
- package/lib/node/anthropic/anthropic-language-model.d.ts +1 -3
- package/lib/node/anthropic/anthropic-language-model.d.ts.map +1 -1
- package/lib/node/anthropic/anthropic-language-model.js +2 -6
- package/lib/node/anthropic/anthropic-language-model.js.map +1 -1
- package/lib/node/base-language-model.d.ts +3 -6
- package/lib/node/base-language-model.d.ts.map +1 -1
- package/lib/node/base-language-model.js +31 -14
- package/lib/node/base-language-model.js.map +1 -1
- package/lib/node/deepseek/deepseek-language-model.d.ts +1 -3
- package/lib/node/deepseek/deepseek-language-model.d.ts.map +1 -1
- package/lib/node/deepseek/deepseek-language-model.js +2 -6
- package/lib/node/deepseek/deepseek-language-model.js.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.d.ts +3 -17
- package/lib/node/mcp/sumi-mcp-server.d.ts.map +1 -1
- package/lib/node/mcp/sumi-mcp-server.js +6 -59
- package/lib/node/mcp/sumi-mcp-server.js.map +1 -1
- package/lib/node/mcp-server-manager-impl.d.ts +3 -4
- package/lib/node/mcp-server-manager-impl.d.ts.map +1 -1
- package/lib/node/mcp-server-manager-impl.js +6 -26
- package/lib/node/mcp-server-manager-impl.js.map +1 -1
- package/lib/node/mcp-server.d.ts +16 -5
- package/lib/node/mcp-server.d.ts.map +1 -1
- package/lib/node/mcp-server.js +6 -12
- package/lib/node/mcp-server.js.map +1 -1
- package/lib/node/openai/openai-language-model.d.ts +2 -4
- package/lib/node/openai/openai-language-model.d.ts.map +1 -1
- package/lib/node/openai/openai-language-model.js +4 -6
- package/lib/node/openai/openai-language-model.js.map +1 -1
- package/package.json +26 -27
- package/src/browser/ai-core.contextkeys.ts +3 -3
- package/src/browser/ai-core.contribution.ts +12 -89
- package/src/browser/chat/chat-agent.service.ts +9 -53
- package/src/browser/chat/chat-manager.service.ts +8 -10
- package/src/browser/chat/chat-model.ts +5 -63
- package/src/browser/chat/chat-proxy.service.ts +8 -16
- package/src/browser/chat/chat.api.service.ts +5 -1
- package/src/browser/chat/chat.internal.service.ts +0 -4
- package/src/browser/chat/chat.module.less +2 -1
- package/src/browser/chat/chat.view.tsx +69 -63
- package/src/browser/components/ChatContext/index.tsx +2 -2
- package/src/browser/components/ChatInput.tsx +6 -81
- package/src/browser/components/ChatReply.tsx +6 -6
- package/src/browser/components/ChatThinking.tsx +9 -3
- package/src/browser/components/ChatToolRender.tsx +2 -1
- package/src/browser/components/WelcomeMsg.tsx +1 -1
- package/src/browser/components/chat-history.module.less +1 -2
- package/src/browser/components/components.module.less +0 -22
- package/src/browser/context/llm-context.service.ts +54 -100
- package/src/browser/contrib/inline-completions/inline-completions.controller.ts +1 -1
- package/src/browser/contrib/inline-completions/prompt/matcher.ts +2 -2
- package/src/browser/contrib/inline-completions/prompt/similarSnippets.ts +2 -2
- package/src/browser/contrib/intelligent-completions/index.ts +1 -5
- package/src/browser/contrib/intelligent-completions/intelligent-completions.contribution.ts +3 -3
- package/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts +6 -7
- package/src/browser/contrib/intelligent-completions/view/code-edits-previewer.ts +2 -4
- package/src/browser/contrib/intelligent-completions/view/default.ts +19 -34
- package/src/browser/index.ts +0 -4
- package/src/browser/layout/layout.module.less +4 -4
- package/src/browser/mcp/base-apply.service.ts +109 -306
- package/src/browser/mcp/mcp-server-proxy.service.ts +2 -14
- package/src/browser/mcp/mcp-server.feature.registry.ts +4 -35
- package/src/browser/mcp/tools/components/EditFile.tsx +9 -16
- package/src/browser/mcp/tools/components/SearchResult.tsx +92 -0
- package/src/browser/mcp/tools/components/Terminal.tsx +2 -13
- package/src/browser/mcp/tools/components/index.module.less +0 -4
- package/src/browser/mcp/tools/createNewFileWithText.ts +12 -21
- package/src/browser/mcp/tools/fileSearch.ts +4 -14
- package/src/browser/mcp/tools/getDiagnosticsByPath.ts +0 -1
- package/src/browser/mcp/tools/grepSearch.ts +3 -6
- package/src/browser/mcp/tools/handlers/EditFile.ts +1 -1
- package/src/browser/mcp/tools/handlers/ListDir.ts +0 -4
- package/src/browser/mcp/tools/handlers/RunCommand.ts +0 -2
- package/src/browser/mcp/tools/listDir.ts +5 -36
- package/src/browser/mcp/tools/runTerminalCmd.ts +0 -1
- package/src/browser/model/msg-history-manager.ts +11 -5
- package/src/browser/preferences/schema.ts +2 -22
- package/src/browser/types.ts +0 -1
- package/src/browser/widget/inline-chat/inline-chat-controller.ts +1 -5
- package/src/browser/widget/inline-diff/inline-diff-manager.tsx +21 -143
- package/src/browser/widget/inline-diff/inline-diff-previewer.ts +7 -25
- package/src/browser/widget/inline-diff/inline-diff-widget.module.less +4 -25
- package/src/browser/widget/inline-diff/inline-diff.controller.ts +8 -16
- package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +68 -139
- package/src/browser/widget/inline-stream-diff/live-preview.decoration.tsx +1 -30
- package/src/common/index.ts +4 -15
- package/src/common/llm-context.ts +4 -10
- package/src/common/mcp-server-manager.ts +1 -17
- package/src/common/prompts/context-prompt-provider.ts +29 -38
- package/src/common/tool-invocation-registry.ts +2 -2
- package/src/common/types.ts +0 -8
- package/src/common/utils.ts +1 -3
- package/src/node/anthropic/anthropic-language-model.ts +2 -7
- package/src/node/base-language-model.ts +38 -25
- package/src/node/deepseek/deepseek-language-model.ts +2 -7
- package/src/node/mcp/sumi-mcp-server.ts +9 -67
- package/src/node/mcp-server-manager-impl.ts +9 -30
- package/src/node/mcp-server.ts +14 -11
- package/src/node/openai/openai-language-model.ts +4 -8
- package/lib/browser/mcp/config/components/mcp-config.module.less +0 -178
- package/lib/browser/mcp/config/components/mcp-config.view.d.ts +0 -3
- package/lib/browser/mcp/config/components/mcp-config.view.d.ts.map +0 -1
- package/lib/browser/mcp/config/components/mcp-config.view.js +0 -150
- package/lib/browser/mcp/config/components/mcp-config.view.js.map +0 -1
- package/lib/browser/mcp/config/components/mcp-server-form.d.ts +0 -16
- package/lib/browser/mcp/config/components/mcp-server-form.d.ts.map +0 -1
- package/lib/browser/mcp/config/components/mcp-server-form.js +0 -84
- package/lib/browser/mcp/config/components/mcp-server-form.js.map +0 -1
- package/lib/browser/mcp/config/components/mcp-server-form.module.less +0 -78
- package/lib/browser/mcp/config/mcp-config.commands.d.ts +0 -10
- package/lib/browser/mcp/config/mcp-config.commands.d.ts.map +0 -1
- package/lib/browser/mcp/config/mcp-config.commands.js +0 -35
- package/lib/browser/mcp/config/mcp-config.commands.js.map +0 -1
- package/lib/browser/mcp/config/mcp-config.contribution.d.ts +0 -16
- package/lib/browser/mcp/config/mcp-config.contribution.d.ts.map +0 -1
- package/lib/browser/mcp/config/mcp-config.contribution.js +0 -62
- package/lib/browser/mcp/config/mcp-config.contribution.js.map +0 -1
- package/lib/browser/mcp/tools/components/ExpandableFileList.d.ts +0 -13
- package/lib/browser/mcp/tools/components/ExpandableFileList.d.ts.map +0 -1
- package/lib/browser/mcp/tools/components/ExpandableFileList.js.map +0 -1
- package/lib/common/model.d.ts +0 -12
- package/lib/common/model.d.ts.map +0 -1
- package/lib/common/model.js +0 -83
- package/lib/common/model.js.map +0 -1
- package/lib/node/openai-compatible/openai-compatible-language-model.d.ts +0 -10
- package/lib/node/openai-compatible/openai-compatible-language-model.d.ts.map +0 -1
- package/lib/node/openai-compatible/openai-compatible-language-model.js +0 -32
- package/lib/node/openai-compatible/openai-compatible-language-model.js.map +0 -1
- package/src/browser/mcp/config/components/mcp-config.module.less +0 -178
- package/src/browser/mcp/config/components/mcp-config.view.tsx +0 -215
- package/src/browser/mcp/config/components/mcp-server-form.module.less +0 -78
- package/src/browser/mcp/config/components/mcp-server-form.tsx +0 -144
- package/src/browser/mcp/config/mcp-config.commands.ts +0 -29
- package/src/browser/mcp/config/mcp-config.contribution.ts +0 -65
- package/src/browser/mcp/tools/components/ExpandableFileList.tsx +0 -133
- package/src/common/model.ts +0 -90
- package/src/node/openai-compatible/openai-compatible-language-model.ts +0 -30
|
@@ -44,13 +44,10 @@ export enum EComputerMode {
|
|
|
44
44
|
|
|
45
45
|
const inlineStreamDiffComputer = new InlineStreamDiffComputer();
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* Abstract base class for inline streaming diff handlers
|
|
49
|
-
*/
|
|
50
47
|
@Injectable({ multiple: true })
|
|
51
|
-
export
|
|
48
|
+
export class InlineStreamDiffHandler extends Disposable implements IInlineDiffPreviewerNode {
|
|
52
49
|
@Autowired(INJECTOR_TOKEN)
|
|
53
|
-
|
|
50
|
+
private readonly injector: Injector;
|
|
54
51
|
|
|
55
52
|
protected readonly _onDidEditChange = this.registerDispose(new Emitter<void>());
|
|
56
53
|
public readonly onDidEditChange: Event<void> = this._onDidEditChange.event;
|
|
@@ -60,14 +57,15 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
60
57
|
|
|
61
58
|
public previewerOptions: IDiffPreviewerOptions;
|
|
62
59
|
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
private originalModel: ITextModel;
|
|
61
|
+
private virtualModel: ITextModel;
|
|
65
62
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
private rawOriginalTextLines: string[];
|
|
64
|
+
private rawOriginalTextLinesTokens: LineTokens[] = [];
|
|
65
|
+
private undoRedoGroup: UndoRedoGroup = new UndoRedoGroup();
|
|
69
66
|
|
|
70
|
-
|
|
67
|
+
private readonly diffModel: ISettableObservable<IComputeDiffData | undefined> = observableValue(this, undefined);
|
|
68
|
+
private readonly finallyDiffModel: ISettableObservable<IComputeDiffData | undefined> = observableValue(
|
|
71
69
|
this,
|
|
72
70
|
undefined,
|
|
73
71
|
);
|
|
@@ -75,15 +73,14 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
75
73
|
public livePreviewDiffDecorationModel: LivePreviewDiffDecorationModel;
|
|
76
74
|
|
|
77
75
|
public get uri() {
|
|
78
|
-
return this.
|
|
76
|
+
return this.originalModel.uri;
|
|
79
77
|
}
|
|
80
78
|
|
|
81
|
-
constructor(
|
|
79
|
+
constructor(private readonly monacoEditor: ICodeEditor) {
|
|
82
80
|
super();
|
|
83
81
|
|
|
84
82
|
const modelService = StandaloneServices.get(IModelService);
|
|
85
|
-
|
|
86
|
-
const setModel = modelService.createModel(
|
|
83
|
+
this.virtualModel = modelService.createModel(
|
|
87
84
|
'',
|
|
88
85
|
null,
|
|
89
86
|
Uri.from({
|
|
@@ -92,8 +89,7 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
92
89
|
}),
|
|
93
90
|
true,
|
|
94
91
|
);
|
|
95
|
-
this.
|
|
96
|
-
this.virtualModel = setModel;
|
|
92
|
+
this.originalModel = this.monacoEditor.getModel()!;
|
|
97
93
|
|
|
98
94
|
this.livePreviewDiffDecorationModel = this.injector.get(LivePreviewDiffDecorationModel, [this.monacoEditor]);
|
|
99
95
|
this.addDispose(this.livePreviewDiffDecorationModel);
|
|
@@ -117,21 +113,45 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
117
113
|
});
|
|
118
114
|
}
|
|
119
115
|
|
|
120
|
-
|
|
116
|
+
initialize(selection: Selection): void {
|
|
117
|
+
const eol = this.originalModel.getEOL();
|
|
118
|
+
const startPosition = selection.getStartPosition();
|
|
119
|
+
const endPosition = selection.getEndPosition();
|
|
120
|
+
|
|
121
|
+
this.rawOriginalTextLines = this.originalModel
|
|
122
|
+
.getValueInRange(Range.fromPositions(startPosition, endPosition))
|
|
123
|
+
.split(eol);
|
|
124
|
+
|
|
125
|
+
this.rawOriginalTextLinesTokens = this.rawOriginalTextLines.map((_, index) => {
|
|
126
|
+
const lineNumber = startPosition.lineNumber + index;
|
|
127
|
+
this.originalModel.tokenization.forceTokenization(lineNumber);
|
|
128
|
+
const lineTokens = this.originalModel.tokenization.getLineTokens(lineNumber);
|
|
129
|
+
return lineTokens;
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const zone = LineRange.fromRangeInclusive(
|
|
133
|
+
Range.fromPositions(
|
|
134
|
+
{ lineNumber: selection.startLineNumber, column: 1 },
|
|
135
|
+
{ lineNumber: selection.endLineNumber, column: Number.MAX_SAFE_INTEGER },
|
|
136
|
+
),
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
this.livePreviewDiffDecorationModel.initialize(zone);
|
|
140
|
+
}
|
|
121
141
|
|
|
122
142
|
getVirtualModelValue() {
|
|
123
143
|
return this.virtualModel.getValue();
|
|
124
144
|
}
|
|
125
145
|
|
|
126
146
|
getOriginModelValue() {
|
|
127
|
-
return this.
|
|
147
|
+
return this.rawOriginalTextLines.join('\n');
|
|
128
148
|
}
|
|
129
149
|
|
|
130
150
|
get onPartialEditWidgetListChange() {
|
|
131
151
|
return this.livePreviewDiffDecorationModel.onPartialEditWidgetListChange;
|
|
132
152
|
}
|
|
133
153
|
|
|
134
|
-
|
|
154
|
+
private computeDiff(
|
|
135
155
|
originalTextLines: string[],
|
|
136
156
|
newTextLines: string[],
|
|
137
157
|
computerMode: EComputerMode = EComputerMode.default,
|
|
@@ -265,12 +285,7 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
265
285
|
},
|
|
266
286
|
textLines: removedTextLines.map((text, index) => ({
|
|
267
287
|
text,
|
|
268
|
-
lineTokens:
|
|
269
|
-
this.rawOriginTextLinesTokens?.[removedLinesOriginalRange.startLineNumber - 1 + index] ||
|
|
270
|
-
LineTokens.createEmpty(text, {
|
|
271
|
-
encodeLanguageId: () => 0,
|
|
272
|
-
decodeLanguageId: () => 'plaintext',
|
|
273
|
-
}),
|
|
288
|
+
lineTokens: this.rawOriginalTextLinesTokens[removedLinesOriginalRange.startLineNumber - 1 + index],
|
|
274
289
|
})),
|
|
275
290
|
});
|
|
276
291
|
}
|
|
@@ -283,11 +298,6 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
283
298
|
});
|
|
284
299
|
}
|
|
285
300
|
|
|
286
|
-
/**
|
|
287
|
-
* Get the original model for diff operations
|
|
288
|
-
*/
|
|
289
|
-
protected abstract getOriginalModel(): ITextModel;
|
|
290
|
-
|
|
291
301
|
/**
|
|
292
302
|
* 令当前的 inline diff 在流式渲染过程当中使用 pushEditOperations 进行编辑的操作都放在同一组 undo/redo 堆栈里
|
|
293
303
|
* 一旦撤销到最顶层则关闭当前的 inline diff
|
|
@@ -300,24 +310,22 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
300
310
|
});
|
|
301
311
|
}
|
|
302
312
|
|
|
303
|
-
|
|
313
|
+
private renderDiffEdits(diffModel: IComputeDiffData): void {
|
|
304
314
|
const { activeLine, newFullRangeTextLines, pendingRange } = diffModel;
|
|
315
|
+
const eol = this.originalModel.getEOL();
|
|
305
316
|
const zone = this.getZone();
|
|
306
317
|
|
|
307
|
-
const originalModel = this.getOriginalModel();
|
|
308
|
-
const eol = originalModel.getEOL();
|
|
309
|
-
|
|
310
318
|
const validZone =
|
|
311
319
|
zone.startLineNumber < zone.endLineNumberExclusive
|
|
312
320
|
? new Range(
|
|
313
321
|
zone.startLineNumber,
|
|
314
322
|
1,
|
|
315
323
|
zone.endLineNumberExclusive - 1,
|
|
316
|
-
originalModel.getLineMaxColumn(zone.endLineNumberExclusive - 1),
|
|
324
|
+
this.originalModel.getLineMaxColumn(zone.endLineNumberExclusive - 1),
|
|
317
325
|
)
|
|
318
326
|
: new Range(zone.startLineNumber, 1, zone.startLineNumber, 1);
|
|
319
327
|
|
|
320
|
-
const newOriginalTextLines = originalModel.getValueInRange(validZone).split(eol);
|
|
328
|
+
const newOriginalTextLines = this.originalModel.getValueInRange(validZone).split(eol);
|
|
321
329
|
const diffComputation = linesDiffComputers.getDefault().computeDiff(newOriginalTextLines, newFullRangeTextLines, {
|
|
322
330
|
computeMoves: false,
|
|
323
331
|
maxComputationTimeMs: 200,
|
|
@@ -362,7 +370,7 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
362
370
|
validZone.startLineNumber + change.original.startLineNumber - 1,
|
|
363
371
|
1,
|
|
364
372
|
validZone.startLineNumber + change.original.endLineNumberExclusive - 2,
|
|
365
|
-
originalModel.getLineMaxColumn(validZone.startLineNumber + change.original.endLineNumberExclusive - 2),
|
|
373
|
+
this.originalModel.getLineMaxColumn(validZone.startLineNumber + change.original.endLineNumberExclusive - 2),
|
|
366
374
|
);
|
|
367
375
|
}
|
|
368
376
|
const edit = {
|
|
@@ -373,7 +381,7 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
373
381
|
realTimeChanges.push(edit);
|
|
374
382
|
}
|
|
375
383
|
}
|
|
376
|
-
originalModel.pushEditOperations(null, realTimeChanges, () => null, this.undoRedoGroup);
|
|
384
|
+
this.originalModel.pushEditOperations(null, realTimeChanges, () => null, this.undoRedoGroup);
|
|
377
385
|
|
|
378
386
|
/**
|
|
379
387
|
* 根据 newFullRangeTextLines 内容长度重新计算 zone,避免超过最大长度,进而影响未选中的代码区域
|
|
@@ -413,20 +421,17 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
413
421
|
this._onDidEditChange.fire();
|
|
414
422
|
}
|
|
415
423
|
|
|
416
|
-
public recompute(computerMode: EComputerMode,
|
|
417
|
-
if (
|
|
418
|
-
this.virtualModel.setValue(
|
|
424
|
+
public recompute(computerMode: EComputerMode, newContent?: string): IComputeDiffData {
|
|
425
|
+
if (newContent) {
|
|
426
|
+
this.virtualModel.setValue(newContent);
|
|
419
427
|
}
|
|
420
428
|
|
|
421
|
-
const
|
|
422
|
-
return this.
|
|
429
|
+
const newTextLines = this.virtualModel.getLinesContent();
|
|
430
|
+
return this.computeDiff(this.rawOriginalTextLines, newTextLines, computerMode);
|
|
423
431
|
}
|
|
424
432
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
protected abstract processDiffComputation(currentText: string[], computerMode?: EComputerMode): IComputeDiffData;
|
|
429
|
-
|
|
433
|
+
private currentEditLine = 0;
|
|
434
|
+
private isEditing = false;
|
|
430
435
|
public async rateRenderEditController(): Promise<void> {
|
|
431
436
|
if (this.isEditing === false) {
|
|
432
437
|
this.isEditing = true;
|
|
@@ -438,14 +443,19 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
438
443
|
|
|
439
444
|
const virtualTextLines = this.virtualModel.getLinesContent();
|
|
440
445
|
const currentText = virtualTextLines.slice(0, this.currentEditLine);
|
|
441
|
-
const currentDiffModel = this.
|
|
446
|
+
const currentDiffModel = this.computeDiff(this.rawOriginalTextLines, currentText);
|
|
447
|
+
transaction((tx) => {
|
|
448
|
+
this.diffModel.set(currentDiffModel, tx);
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
this.onDiffFinishedEmitter.fire(currentDiffModel);
|
|
442
452
|
|
|
443
|
-
if (this.
|
|
453
|
+
if (this.originalModel.id === this.monacoEditor.getModel()?.id) {
|
|
444
454
|
this.renderDiffEdits(currentDiffModel);
|
|
445
455
|
}
|
|
446
456
|
|
|
447
457
|
this.currentEditLine += 1;
|
|
448
|
-
|
|
458
|
+
|
|
449
459
|
await sleep(FRAME_THREE);
|
|
450
460
|
}
|
|
451
461
|
|
|
@@ -459,7 +469,10 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
459
469
|
}
|
|
460
470
|
|
|
461
471
|
public addLinesToDiff(newText: string, computerMode: EComputerMode = EComputerMode.default): void {
|
|
462
|
-
this.recompute(computerMode, newText);
|
|
472
|
+
const diffModel = this.recompute(computerMode, newText);
|
|
473
|
+
transaction((tx) => {
|
|
474
|
+
this.diffModel.set(diffModel, tx);
|
|
475
|
+
});
|
|
463
476
|
}
|
|
464
477
|
|
|
465
478
|
public pushRateFinallyDiffStack(diffModel: IComputeDiffData): void {
|
|
@@ -475,17 +488,14 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
475
488
|
public finallyRender(diffModel: IComputeDiffData): void {
|
|
476
489
|
transaction((tx) => {
|
|
477
490
|
this.finallyDiffModel.set(diffModel, tx);
|
|
491
|
+
this.diffModel.set(diffModel, tx);
|
|
478
492
|
});
|
|
479
493
|
|
|
480
|
-
if (this.
|
|
494
|
+
if (this.originalModel.id !== this.monacoEditor.getModel()?.id) {
|
|
481
495
|
return;
|
|
482
496
|
}
|
|
483
497
|
|
|
484
498
|
this.onDiffFinishedEmitter.fire(diffModel);
|
|
485
|
-
|
|
486
|
-
if (this.livePreviewDiffDecorationModel.disposed) {
|
|
487
|
-
return;
|
|
488
|
-
}
|
|
489
499
|
this.renderPartialEditWidgets(diffModel);
|
|
490
500
|
this.renderDiffEdits(diffModel);
|
|
491
501
|
this.pushStackElement();
|
|
@@ -527,84 +537,3 @@ export abstract class BaseInlineStreamDiffHandler extends Disposable implements
|
|
|
527
537
|
return this.livePreviewDiffDecorationModel.getTotalCodeInfo();
|
|
528
538
|
}
|
|
529
539
|
}
|
|
530
|
-
|
|
531
|
-
/**
|
|
532
|
-
* Regular inline stream diff handler (non-reverse mode)
|
|
533
|
-
*/
|
|
534
|
-
@Injectable({ multiple: true })
|
|
535
|
-
export class InlineStreamDiffHandler extends BaseInlineStreamDiffHandler {
|
|
536
|
-
initialize(selection: Selection): void {
|
|
537
|
-
const eol = this.savedModel.getEOL();
|
|
538
|
-
const startPosition = selection.getStartPosition();
|
|
539
|
-
const endPosition = selection.getEndPosition();
|
|
540
|
-
|
|
541
|
-
this.rawSavedTextLines = this.savedModel
|
|
542
|
-
.getValueInRange(Range.fromPositions(startPosition, endPosition))
|
|
543
|
-
.split(eol);
|
|
544
|
-
|
|
545
|
-
const zone = LineRange.fromRangeInclusive(
|
|
546
|
-
Range.fromPositions(
|
|
547
|
-
{ lineNumber: selection.startLineNumber, column: 1 },
|
|
548
|
-
{ lineNumber: selection.endLineNumber, column: Number.MAX_SAFE_INTEGER },
|
|
549
|
-
),
|
|
550
|
-
);
|
|
551
|
-
|
|
552
|
-
this.livePreviewDiffDecorationModel.initialize(zone);
|
|
553
|
-
this.rawOriginTextLinesTokens = this.rawSavedTextLines.map((_, index) => {
|
|
554
|
-
const lineNumber = startPosition.lineNumber + index;
|
|
555
|
-
this.savedModel.tokenization.forceTokenization(lineNumber);
|
|
556
|
-
const lineTokens = this.savedModel.tokenization.getLineTokens(lineNumber);
|
|
557
|
-
return lineTokens;
|
|
558
|
-
});
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
protected processDiffComputation(currentText: string[], computerMode?: EComputerMode): IComputeDiffData {
|
|
562
|
-
return this.computeDiff(this.rawSavedTextLines, currentText, computerMode);
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
protected getOriginalModel(): ITextModel {
|
|
566
|
-
return this.savedModel;
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
/**
|
|
571
|
-
* Reverse inline stream diff handler
|
|
572
|
-
* In reverse mode, the roles of savedModel and virtualModel are swapped
|
|
573
|
-
*/
|
|
574
|
-
@Injectable({ multiple: true })
|
|
575
|
-
export class ReverseInlineStreamDiffHandler extends BaseInlineStreamDiffHandler {
|
|
576
|
-
recompute(computerMode: EComputerMode, content?: string): IComputeDiffData {
|
|
577
|
-
const result = super.recompute(computerMode, content);
|
|
578
|
-
this.rawOriginTextLinesTokens = this.virtualModel.getLinesContent().map((_, index) => {
|
|
579
|
-
const lineNumber = index + 1;
|
|
580
|
-
this.virtualModel.tokenization.forceTokenization(lineNumber);
|
|
581
|
-
const lineTokens = this.virtualModel.tokenization.getLineTokens(lineNumber);
|
|
582
|
-
return lineTokens;
|
|
583
|
-
});
|
|
584
|
-
return result;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
initialize(): void {
|
|
588
|
-
const eol = this.savedModel.getEOL();
|
|
589
|
-
|
|
590
|
-
// reverse 模式不支持 range
|
|
591
|
-
this.rawSavedTextLines = this.savedModel.getValue().split(eol);
|
|
592
|
-
|
|
593
|
-
// TODO: reverse 模式暂不支持 range
|
|
594
|
-
const zone = LineRange.fromRangeInclusive(
|
|
595
|
-
Range.fromPositions(
|
|
596
|
-
{ lineNumber: 1, column: 1 },
|
|
597
|
-
{ lineNumber: this.virtualModel.getLineCount(), column: Number.MAX_SAFE_INTEGER },
|
|
598
|
-
),
|
|
599
|
-
);
|
|
600
|
-
this.livePreviewDiffDecorationModel.initialize(zone);
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
protected getOriginalModel(): ITextModel {
|
|
604
|
-
return this.virtualModel;
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
protected processDiffComputation(currentText: string[], computerMode?: EComputerMode): IComputeDiffData {
|
|
608
|
-
return this.computeDiff(currentText, this.rawSavedTextLines, computerMode);
|
|
609
|
-
}
|
|
610
|
-
}
|
|
@@ -7,13 +7,11 @@ import {
|
|
|
7
7
|
Emitter,
|
|
8
8
|
Event,
|
|
9
9
|
IAIReporter,
|
|
10
|
-
localize,
|
|
11
10
|
runWhenIdle,
|
|
12
11
|
} from '@opensumi/ide-core-common';
|
|
13
12
|
import { ISingleEditOperation } from '@opensumi/ide-editor';
|
|
14
13
|
import { ICodeEditor, IEditorDecorationsCollection, ITextModel, Position, Range } from '@opensumi/ide-monaco';
|
|
15
14
|
import { StandaloneServices } from '@opensumi/ide-monaco/lib/browser/monaco-api/services';
|
|
16
|
-
import { IMessageService } from '@opensumi/ide-overlay';
|
|
17
15
|
import { EditOperation } from '@opensumi/monaco-editor-core/esm/vs/editor/common/core/editOperation';
|
|
18
16
|
import { LineRange } from '@opensumi/monaco-editor-core/esm/vs/editor/common/core/lineRange';
|
|
19
17
|
import { ModelDecorationOptions } from '@opensumi/monaco-editor-core/esm/vs/editor/common/model/textModel';
|
|
@@ -69,9 +67,6 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
69
67
|
@Autowired(InlineDiffService)
|
|
70
68
|
private readonly inlineDiffService: InlineDiffService;
|
|
71
69
|
|
|
72
|
-
@Autowired(IMessageService)
|
|
73
|
-
private readonly messageService: IMessageService;
|
|
74
|
-
|
|
75
70
|
private activeLineDec: IEditorDecorationsCollection;
|
|
76
71
|
private pendingRangeDec: IEditorDecorationsCollection;
|
|
77
72
|
private aiNativeContextKey: AINativeContextKey;
|
|
@@ -92,10 +87,6 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
92
87
|
private removedZoneWidgets: RemovedZoneWidget[] = [];
|
|
93
88
|
private zone: LineRange;
|
|
94
89
|
|
|
95
|
-
public get partialEditWidgetCount() {
|
|
96
|
-
return this.partialEditWidgetList.length;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
90
|
constructor(private readonly monacoEditor: ICodeEditor) {
|
|
100
91
|
super();
|
|
101
92
|
this.model = this.monacoEditor.getModel()!;
|
|
@@ -625,7 +616,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
625
616
|
if (this.options.renderRemovedWidgetImmediately) {
|
|
626
617
|
run();
|
|
627
618
|
} else {
|
|
628
|
-
|
|
619
|
+
runWhenIdle(run);
|
|
629
620
|
}
|
|
630
621
|
}
|
|
631
622
|
|
|
@@ -690,26 +681,6 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
690
681
|
}
|
|
691
682
|
}
|
|
692
683
|
|
|
693
|
-
currentChangeIndex: number = 0;
|
|
694
|
-
|
|
695
|
-
revealSiblingChange(direction: 'up' | 'down') {
|
|
696
|
-
this.currentChangeIndex = this.currentChangeIndex + (direction === 'up' ? -1 : 1);
|
|
697
|
-
if (this.currentChangeIndex >= 0 && this.currentChangeIndex < this.partialEditWidgetList.length) {
|
|
698
|
-
const siblingChange = this.partialEditWidgetList[this.currentChangeIndex];
|
|
699
|
-
const pos = siblingChange.getPosition();
|
|
700
|
-
if (pos?.position) {
|
|
701
|
-
this.monacoEditor.revealLineInCenter(pos.position!.lineNumber);
|
|
702
|
-
return this.currentChangeIndex;
|
|
703
|
-
}
|
|
704
|
-
} else {
|
|
705
|
-
this.messageService.info(
|
|
706
|
-
direction === 'up'
|
|
707
|
-
? localize('aiNative.inlineDiff.noMoreChangesUp')
|
|
708
|
-
: localize('aiNative.inlineDiff.noMoreChangesDown'),
|
|
709
|
-
);
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
|
|
713
684
|
setPreviewerOptions(options: IModelOptions) {
|
|
714
685
|
this.options = options;
|
|
715
686
|
}
|
package/src/common/index.ts
CHANGED
|
@@ -12,18 +12,13 @@ import {
|
|
|
12
12
|
IMarkdownString,
|
|
13
13
|
Uri,
|
|
14
14
|
} from '@opensumi/ide-core-common';
|
|
15
|
+
import { IChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
|
|
15
16
|
import { DESIGN_MENUBAR_CONTAINER_VIEW_ID } from '@opensumi/ide-design/lib/common/constants';
|
|
16
17
|
import { IPosition, ITextModel, InlineCompletionContext } from '@opensumi/ide-monaco/lib/common';
|
|
17
18
|
|
|
18
19
|
import { MCPServerDescription } from './mcp-server-manager';
|
|
19
20
|
import { MCPTool } from './types';
|
|
20
21
|
|
|
21
|
-
import type { CoreMessage } from 'ai';
|
|
22
|
-
|
|
23
|
-
export type { CoreMessage };
|
|
24
|
-
|
|
25
|
-
export * from './model';
|
|
26
|
-
|
|
27
22
|
export const IAINativeService = Symbol('IAINativeService');
|
|
28
23
|
|
|
29
24
|
/**
|
|
@@ -36,9 +31,6 @@ export const AI_CHAT_CONTAINER_ID = 'AI-Chat-Container';
|
|
|
36
31
|
export const AI_CHAT_LOGO_AVATAR_ID = 'AI-Chat-Logo-Avatar';
|
|
37
32
|
export const AI_MENU_BAR_DEBUG_TOOLBAR = 'AI_MENU_BAR_DEBUG_TOOLBAR';
|
|
38
33
|
|
|
39
|
-
// 内置 MCP 服务器名称
|
|
40
|
-
export const BUILTIN_MCP_SERVER_NAME = 'sumi-builtin';
|
|
41
|
-
|
|
42
34
|
/**
|
|
43
35
|
* @deprecated Use {@link DESIGN_MENUBAR_CONTAINER_VIEW_ID} instead
|
|
44
36
|
*/
|
|
@@ -131,12 +123,9 @@ export const ChatProxyServiceToken = Symbol('ChatProxyServiceToken');
|
|
|
131
123
|
export const TokenMCPServerProxyService = Symbol('TokenMCPServerProxyService');
|
|
132
124
|
|
|
133
125
|
export interface ISumiMCPServerBackend {
|
|
134
|
-
initBuiltinMCPServer(
|
|
126
|
+
initBuiltinMCPServer(): void;
|
|
135
127
|
initExternalMCPServers(servers: MCPServerDescription[]): void;
|
|
136
128
|
getAllMCPTools(): Promise<MCPTool[]>;
|
|
137
|
-
getServers(): Promise<Array<{ name: string; isStarted: boolean }>>;
|
|
138
|
-
startServer(serverName: string): Promise<void>;
|
|
139
|
-
stopServer(serverName: string): Promise<void>;
|
|
140
129
|
}
|
|
141
130
|
|
|
142
131
|
export const SumiMCPServerProxyServicePath = 'SumiMCPServerProxyServicePath';
|
|
@@ -149,7 +138,7 @@ export interface IChatAgentService {
|
|
|
149
138
|
id: string,
|
|
150
139
|
request: IChatAgentRequest,
|
|
151
140
|
progress: (part: IChatProgress) => void,
|
|
152
|
-
history:
|
|
141
|
+
history: IChatMessage[],
|
|
153
142
|
token: CancellationToken,
|
|
154
143
|
): Promise<IChatAgentResult>;
|
|
155
144
|
getAgents(): Array<IChatAgent>;
|
|
@@ -170,7 +159,7 @@ export interface IChatAgent extends IChatAgentData {
|
|
|
170
159
|
invoke(
|
|
171
160
|
request: IChatAgentRequest,
|
|
172
161
|
progress: (part: IChatProgress) => void,
|
|
173
|
-
history:
|
|
162
|
+
history: IChatMessage[],
|
|
174
163
|
token: CancellationToken,
|
|
175
164
|
): Promise<IChatAgentResult>;
|
|
176
165
|
provideFollowups?(sessionId: string, token: CancellationToken): Promise<IChatFollowup[]>;
|
|
@@ -15,13 +15,13 @@ export interface LLMContextService {
|
|
|
15
15
|
*/
|
|
16
16
|
cleanFileContext(): void;
|
|
17
17
|
|
|
18
|
-
onDidContextFilesChangeEvent: Event<
|
|
18
|
+
onDidContextFilesChangeEvent: Event<FileContext[]>;
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* 从 context 中移除文件
|
|
22
22
|
* @param uri URI
|
|
23
23
|
*/
|
|
24
|
-
removeFileFromContext(uri: URI
|
|
24
|
+
removeFileFromContext(uri: URI): void;
|
|
25
25
|
|
|
26
26
|
/** 导出为可序列化格式 */
|
|
27
27
|
serialize(): SerializedContext;
|
|
@@ -30,18 +30,12 @@ export interface LLMContextService {
|
|
|
30
30
|
export interface FileContext {
|
|
31
31
|
uri: URI;
|
|
32
32
|
selection?: [number, number];
|
|
33
|
+
isManual: boolean;
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
export const LLMContextServiceToken = Symbol('LLMContextService');
|
|
36
37
|
|
|
37
|
-
export interface AttachFileContext {
|
|
38
|
-
content: string;
|
|
39
|
-
lineErrors: string[];
|
|
40
|
-
path: string;
|
|
41
|
-
language: string;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
38
|
export interface SerializedContext {
|
|
45
39
|
recentlyViewFiles: string[];
|
|
46
|
-
attachedFiles: Array<
|
|
40
|
+
attachedFiles: Array<{ content: string; lineErrors: string[]; path: string; language: string }>;
|
|
47
41
|
}
|
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
2
|
|
|
3
|
-
export interface IMCPServer {
|
|
4
|
-
isStarted(): boolean;
|
|
5
|
-
start(): Promise<void>;
|
|
6
|
-
getServerName(): string;
|
|
7
|
-
callTool(toolName: string, toolCallId: string, arg_string: string): ReturnType<Client['callTool']>;
|
|
8
|
-
getTools(): ReturnType<Client['listTools']>;
|
|
9
|
-
update(command: string, args?: string[], env?: { [key: string]: string }): void;
|
|
10
|
-
stop(): void;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
3
|
export interface MCPServerManager {
|
|
14
4
|
callTool(
|
|
15
5
|
serverName: string,
|
|
@@ -21,7 +11,7 @@ export interface MCPServerManager {
|
|
|
21
11
|
addOrUpdateServer(description: MCPServerDescription): void;
|
|
22
12
|
// invoke in node.js only
|
|
23
13
|
addOrUpdateServerDirectly(server: any): void;
|
|
24
|
-
initBuiltinServer(builtinMCPServer: any
|
|
14
|
+
initBuiltinServer(builtinMCPServer: any): void;
|
|
25
15
|
getTools(serverName: string): ReturnType<Client['listTools']>;
|
|
26
16
|
getServerNames(): Promise<string[]>;
|
|
27
17
|
startServer(serverName: string): Promise<void>;
|
|
@@ -29,7 +19,6 @@ export interface MCPServerManager {
|
|
|
29
19
|
getStartedServers(): Promise<string[]>;
|
|
30
20
|
registerTools(serverName: string): Promise<void>;
|
|
31
21
|
addExternalMCPServers(servers: MCPServerDescription[]): void;
|
|
32
|
-
getServers(): Map<string, IMCPServer>;
|
|
33
22
|
}
|
|
34
23
|
|
|
35
24
|
export type MCPTool = Awaited<ReturnType<MCPServerManager['getTools']>>['tools'][number];
|
|
@@ -56,11 +45,6 @@ export interface MCPServerDescription {
|
|
|
56
45
|
* Optional environment variables to set when starting the server.
|
|
57
46
|
*/
|
|
58
47
|
env?: { [key: string]: string };
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Whether to enable the MCP server.
|
|
62
|
-
*/
|
|
63
|
-
enabled?: boolean;
|
|
64
48
|
}
|
|
65
49
|
|
|
66
50
|
export const MCPServerManager = Symbol('MCPServerManager');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Injectable } from '@opensumi/di';
|
|
2
|
+
import { MaybePromise } from '@opensumi/ide-core-common/lib/utils';
|
|
3
3
|
|
|
4
4
|
import { SerializedContext } from '../llm-context';
|
|
5
5
|
|
|
@@ -10,46 +10,37 @@ export interface ChatAgentPromptProvider {
|
|
|
10
10
|
* 提供上下文提示
|
|
11
11
|
* @param context 上下文
|
|
12
12
|
*/
|
|
13
|
-
provideContextPrompt(context: SerializedContext, userMessage: string): string
|
|
13
|
+
provideContextPrompt(context: SerializedContext, userMessage: string): MaybePromise<string>;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
@Injectable()
|
|
17
17
|
export class DefaultChatAgentPromptProvider implements ChatAgentPromptProvider {
|
|
18
|
-
|
|
19
|
-
protected readonly workbenchEditorService: WorkbenchEditorService;
|
|
20
|
-
|
|
21
|
-
provideContextPrompt(context: SerializedContext, userMessage: string): string {
|
|
22
|
-
const editor = this.workbenchEditorService.currentEditor;
|
|
23
|
-
const currentModel = editor?.currentDocumentModel;
|
|
18
|
+
provideContextPrompt(context: SerializedContext, userMessage: string): MaybePromise<string> {
|
|
24
19
|
return `
|
|
25
|
-
<additional_data>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
${context.recentlyViewFiles.map((file, idx) =>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
</additional_data>
|
|
51
|
-
<user_query>
|
|
52
|
-
${userMessage}
|
|
53
|
-
</user_query>`;
|
|
20
|
+
<additional_data>
|
|
21
|
+
Below are some potentially helpful/relevant pieces of information for figuring out to respond
|
|
22
|
+
<recently_viewed_files>
|
|
23
|
+
${context.recentlyViewFiles.map((file, idx) => `${idx + 1} : ${file}`)}
|
|
24
|
+
</recently_viewed_files>
|
|
25
|
+
<attached_files>
|
|
26
|
+
${context.attachedFiles.map(
|
|
27
|
+
(file) =>
|
|
28
|
+
`
|
|
29
|
+
<file_contents>
|
|
30
|
+
\`\`\`${file.language} ${file.path}
|
|
31
|
+
${file.content}
|
|
32
|
+
\`\`\`
|
|
33
|
+
</file_contents>
|
|
34
|
+
<linter_errors>
|
|
35
|
+
${file.lineErrors.join('\n')}
|
|
36
|
+
</linter_errors>
|
|
37
|
+
`,
|
|
38
|
+
)}
|
|
39
|
+
|
|
40
|
+
</attached_files>
|
|
41
|
+
</additional_data>
|
|
42
|
+
<user_query>
|
|
43
|
+
${userMessage}
|
|
44
|
+
</user_query>`;
|
|
54
45
|
}
|
|
55
46
|
}
|
|
@@ -72,7 +72,7 @@ export interface ToolInvocationRegistry {
|
|
|
72
72
|
*
|
|
73
73
|
* @param providerName - 要移除其工具的工具提供者名称(在 `ToolRequest` 中指定)
|
|
74
74
|
*/
|
|
75
|
-
|
|
75
|
+
unregisterAllTools(providerName: string): void;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
export const ToolProvider = Symbol('ToolProvider');
|
|
@@ -83,7 +83,7 @@ export interface ToolProvider {
|
|
|
83
83
|
export class ToolInvocationRegistryImpl implements ToolInvocationRegistry {
|
|
84
84
|
private tools: Map<string, ToolRequest> = new Map<string, ToolRequest>();
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
unregisterAllTools(providerName: string): void {
|
|
87
87
|
const toolsToRemove: string[] = [];
|
|
88
88
|
for (const [id, tool] of this.tools.entries()) {
|
|
89
89
|
if (tool.providerName === providerName) {
|