@opensumi/ide-ai-native 3.8.1-next-1740735952.0 → 3.8.1-next-1741061006.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 +4 -1
- package/lib/browser/ai-core.contribution.d.ts.map +1 -1
- package/lib/browser/ai-core.contribution.js +20 -1
- package/lib/browser/ai-core.contribution.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 +13 -0
- package/lib/browser/chat/chat-manager.service.js.map +1 -1
- package/lib/browser/chat/chat.internal.service.d.ts +1 -0
- package/lib/browser/chat/chat.internal.service.d.ts.map +1 -1
- package/lib/browser/chat/chat.internal.service.js +3 -0
- 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 +22 -3
- package/lib/browser/chat/chat.view.js.map +1 -1
- package/lib/browser/components/ChatHistory.d.ts +0 -1
- package/lib/browser/components/ChatHistory.d.ts.map +1 -1
- package/lib/browser/components/ChatHistory.js +14 -14
- package/lib/browser/components/ChatHistory.js.map +1 -1
- package/lib/browser/components/ChatInput.d.ts.map +1 -1
- package/lib/browser/components/ChatInput.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.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 +6 -0
- package/lib/browser/contrib/intelligent-completions/view/default.js.map +1 -1
- package/lib/browser/mcp/base-apply.service.d.ts +31 -40
- package/lib/browser/mcp/base-apply.service.d.ts.map +1 -1
- package/lib/browser/mcp/base-apply.service.js +233 -167
- package/lib/browser/mcp/base-apply.service.js.map +1 -1
- package/lib/browser/mcp/tools/components/EditFile.d.ts.map +1 -1
- package/lib/browser/mcp/tools/components/EditFile.js +55 -41
- package/lib/browser/mcp/tools/components/EditFile.js.map +1 -1
- package/lib/browser/mcp/tools/components/index.module.less +22 -3
- package/lib/browser/mcp/tools/editFile.js +1 -1
- package/lib/browser/mcp/tools/editFile.js.map +1 -1
- package/lib/browser/mcp/tools/handlers/EditFile.d.ts +5 -1
- package/lib/browser/mcp/tools/handlers/EditFile.d.ts.map +1 -1
- package/lib/browser/mcp/tools/handlers/EditFile.js +4 -4
- package/lib/browser/mcp/tools/handlers/EditFile.js.map +1 -1
- package/lib/browser/model/msg-history-manager.d.ts +1 -0
- package/lib/browser/model/msg-history-manager.d.ts.map +1 -1
- package/lib/browser/model/msg-history-manager.js +12 -2
- package/lib/browser/model/msg-history-manager.js.map +1 -1
- package/lib/browser/types.d.ts +1 -1
- package/lib/browser/types.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-manager.d.ts +6 -0
- package/lib/browser/widget/inline-diff/inline-diff-manager.d.ts.map +1 -0
- package/lib/browser/widget/inline-diff/inline-diff-manager.js +27 -0
- package/lib/browser/widget/inline-diff/inline-diff-manager.js.map +1 -0
- package/lib/browser/widget/inline-diff/inline-diff-widget.module.less +12 -0
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts +2 -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 +11 -4
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js.map +1 -1
- package/lib/common/types.d.ts +17 -0
- package/lib/common/types.d.ts.map +1 -1
- package/lib/common/types.js.map +1 -1
- package/lib/node/base-language-model.d.ts +1 -1
- package/lib/node/base-language-model.d.ts.map +1 -1
- package/lib/node/base-language-model.js +54 -3
- package/lib/node/base-language-model.js.map +1 -1
- package/package.json +23 -23
- package/src/browser/ai-core.contribution.ts +25 -1
- package/src/browser/chat/chat-manager.service.ts +12 -0
- package/src/browser/chat/chat.internal.service.ts +4 -0
- package/src/browser/chat/chat.view.tsx +25 -3
- package/src/browser/components/ChatHistory.tsx +21 -15
- package/src/browser/components/ChatInput.tsx +0 -1
- package/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts +1 -1
- package/src/browser/contrib/intelligent-completions/view/default.ts +7 -0
- package/src/browser/mcp/base-apply.service.ts +266 -213
- package/src/browser/mcp/tools/components/EditFile.tsx +82 -60
- package/src/browser/mcp/tools/components/index.module.less +22 -3
- package/src/browser/mcp/tools/editFile.ts +2 -2
- package/src/browser/mcp/tools/handlers/EditFile.ts +4 -4
- package/src/browser/model/msg-history-manager.ts +12 -2
- package/src/browser/types.ts +1 -1
- package/src/browser/widget/inline-diff/inline-diff-manager.tsx +38 -0
- package/src/browser/widget/inline-diff/inline-diff-widget.module.less +12 -0
- package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +13 -4
- package/src/common/types.ts +20 -0
- package/src/node/base-language-model.ts +63 -1
- /package/lib/browser/components/{chat-history.css → chat-history.module.less} +0 -0
- /package/src/browser/components/{chat-history.css → chat-history.module.less} +0 -0
package/lib/common/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IMarker } from '@opensumi/ide-core-browser';
|
|
1
2
|
export declare enum NearestCodeBlockType {
|
|
2
3
|
Block = "block",
|
|
3
4
|
Line = "line"
|
|
@@ -40,4 +41,20 @@ export interface MCPTool {
|
|
|
40
41
|
inputSchema: any;
|
|
41
42
|
providerName: string;
|
|
42
43
|
}
|
|
44
|
+
export interface CodeBlockData {
|
|
45
|
+
toolCallId: string;
|
|
46
|
+
codeEdit: string;
|
|
47
|
+
updatedCode?: string;
|
|
48
|
+
relativePath: string;
|
|
49
|
+
status: CodeBlockStatus;
|
|
50
|
+
iterationCount: number;
|
|
51
|
+
createdAt: number;
|
|
52
|
+
version: number;
|
|
53
|
+
instructions?: string;
|
|
54
|
+
applyResult?: {
|
|
55
|
+
diff: string;
|
|
56
|
+
diagnosticInfos: IMarker[];
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export type CodeBlockStatus = 'generating' | 'pending' | 'success' | 'rejected' | 'failed' | 'cancelled';
|
|
43
60
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":"AAAA,oBAAY,oBAAoB;IAC9B,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QACL,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,GAAG,EAAE;YACH,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,oBAAoB,CAAC;CAC7B;AAGD,MAAM,WAAW,sBAAsB;IACrC,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,GACR,OAAO,CAAC;QACT,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IAEH,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEnC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAEpE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,oBAAY,oBAAoB;IAC9B,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QACL,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,GAAG,EAAE;YACH,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,oBAAoB,CAAC;CAC7B;AAGD,MAAM,WAAW,sBAAsB;IACrC,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,GACR,OAAO,CAAC;QACT,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IAEH,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEnC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAEpE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,EAAE,OAAO,EAAE,CAAC;KAC5B,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC"}
|
package/lib/common/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":";;;AAEA,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,uCAAe,CAAA;IACf,qCAAa,CAAA;AACf,CAAC,EAHW,oBAAoB,oCAApB,oBAAoB,QAG/B"}
|
|
@@ -9,6 +9,6 @@ export declare abstract class BaseLanguageModel {
|
|
|
9
9
|
request(request: string, chatReadableStream: ChatReadableStream, options: IAIBackServiceOption, cancellationToken?: CancellationToken): Promise<any>;
|
|
10
10
|
private convertToolRequestToAITool;
|
|
11
11
|
protected abstract getModelIdentifier(provider: any, modelId?: string): any;
|
|
12
|
-
protected handleStreamingRequest(provider: any, request: string, tools: ToolRequest[], chatReadableStream: ChatReadableStream, history?: IChatMessage[], modelId?: string, temperature?: number, topP?: number, topK?: number, providerOptions?: Record<string, any>, cancellationToken?: CancellationToken): Promise<any>;
|
|
12
|
+
protected handleStreamingRequest(provider: any, request: string, tools: ToolRequest[], chatReadableStream: ChatReadableStream, history?: IChatMessage[], modelId?: string, temperature?: number, topP?: number, topK?: number, providerOptions?: Record<string, any>, trimTexts?: [string, string], cancellationToken?: CancellationToken): Promise<any>;
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=base-language-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-language-model.d.ts","sourceRoot":"","sources":["../../src/node/base-language-model.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,oBAAoB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EACL,8BAA8B,EAE9B,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAE5C,8BACsB,iBAAiB;IAErC,SAAS,CAAC,QAAQ,CAAC,6BAA6B,EAAE,8BAA8B,CAAC;IAEjF,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,GAAG;IAEzE,OAAO,CAAC,sBAAsB;IAexB,OAAO,CACX,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,oBAAoB,EAC7B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"base-language-model.d.ts","sourceRoot":"","sources":["../../src/node/base-language-model.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,oBAAoB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EACL,8BAA8B,EAE9B,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAE5C,8BACsB,iBAAiB;IAErC,SAAS,CAAC,QAAQ,CAAC,6BAA6B,EAAE,8BAA8B,CAAC;IAEjF,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,GAAG;IAEzE,OAAO,CAAC,sBAAsB;IAexB,OAAO,CACX,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,oBAAoB,EAC7B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,OAAO,CAAC,GAAG,CAAC;IA2Bf,OAAO,CAAC,0BAA0B;IAUlC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG;cAE3D,sBAAsB,CACpC,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,EAAE,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,GAAE,YAAY,EAAO,EAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,OAAO,CAAC,GAAG,CAAC;CAqJhB"}
|
|
@@ -29,7 +29,7 @@ let BaseLanguageModel = class BaseLanguageModel {
|
|
|
29
29
|
const registry = this.toolInvocationRegistryManager.getRegistry(clientId);
|
|
30
30
|
allFunctions = options.noTool ? [] : registry.getAllFunctions();
|
|
31
31
|
}
|
|
32
|
-
return this.handleStreamingRequest(provider, request, allFunctions, chatReadableStream, options.history || [], options.modelId, options.temperature, options.topP, options.topK, options.providerOptions, cancellationToken);
|
|
32
|
+
return this.handleStreamingRequest(provider, request, allFunctions, chatReadableStream, options.history || [], options.modelId, options.temperature, options.topP, options.topK, options.providerOptions, options.trimTexts, cancellationToken);
|
|
33
33
|
}
|
|
34
34
|
convertToolRequestToAITool(toolRequest) {
|
|
35
35
|
return (0, ai_1.tool)({
|
|
@@ -39,7 +39,7 @@ let BaseLanguageModel = class BaseLanguageModel {
|
|
|
39
39
|
execute: async (args, options) => await toolRequest.handler(JSON.stringify(args), options),
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
|
-
async handleStreamingRequest(provider, request, tools, chatReadableStream, history = [], modelId, temperature, topP, topK, providerOptions, cancellationToken) {
|
|
42
|
+
async handleStreamingRequest(provider, request, tools, chatReadableStream, history = [], modelId, temperature, topP, topK, providerOptions, trimTexts, cancellationToken) {
|
|
43
43
|
try {
|
|
44
44
|
const aiTools = Object.fromEntries(tools.map((tool) => [tool.name, this.convertToolRequestToAITool(tool)]));
|
|
45
45
|
const abortController = new AbortController();
|
|
@@ -68,9 +68,38 @@ let BaseLanguageModel = class BaseLanguageModel {
|
|
|
68
68
|
topK: topK || 1,
|
|
69
69
|
providerOptions,
|
|
70
70
|
});
|
|
71
|
+
// 状态跟踪变量
|
|
72
|
+
let isFirstChunk = true;
|
|
73
|
+
let bufferedText = '';
|
|
74
|
+
const pendingLines = [];
|
|
71
75
|
for await (const chunk of stream.fullStream) {
|
|
72
76
|
if (chunk.type === 'text-delta') {
|
|
73
|
-
|
|
77
|
+
if (trimTexts === null || trimTexts === void 0 ? void 0 : trimTexts.length) {
|
|
78
|
+
// 将收到的文本追加到缓冲区
|
|
79
|
+
bufferedText += chunk.textDelta;
|
|
80
|
+
// 处理第一个文本块的前缀(只处理一次)
|
|
81
|
+
if (isFirstChunk && bufferedText.includes(trimTexts[0])) {
|
|
82
|
+
bufferedText = bufferedText.substring(bufferedText.indexOf(trimTexts[0]) + trimTexts[0].length);
|
|
83
|
+
isFirstChunk = false;
|
|
84
|
+
}
|
|
85
|
+
// 检查是否有完整的行,并将它们添加到待发送行队列
|
|
86
|
+
const lines = bufferedText.split('\n');
|
|
87
|
+
// 最后一个元素可能是不完整的行,保留在缓冲区
|
|
88
|
+
bufferedText = lines.pop() || '';
|
|
89
|
+
// 将完整的行添加到待发送队列
|
|
90
|
+
if (lines.length > 0) {
|
|
91
|
+
pendingLines.push(...lines);
|
|
92
|
+
}
|
|
93
|
+
// 发送除最后几行外的所有行(保留足够的行以处理后缀)
|
|
94
|
+
while (pendingLines.length > 3) {
|
|
95
|
+
// 保留最后3行以确保能完整识别后缀
|
|
96
|
+
const lineToSend = pendingLines.shift() + '\n';
|
|
97
|
+
chatReadableStream.emitData({ kind: 'content', content: lineToSend });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
chatReadableStream.emitData({ kind: 'content', content: chunk.textDelta });
|
|
102
|
+
}
|
|
74
103
|
}
|
|
75
104
|
else if (chunk.type === 'tool-call') {
|
|
76
105
|
chatReadableStream.emitData({
|
|
@@ -121,6 +150,28 @@ let BaseLanguageModel = class BaseLanguageModel {
|
|
|
121
150
|
chatReadableStream.emitError(new Error(chunk.error));
|
|
122
151
|
}
|
|
123
152
|
}
|
|
153
|
+
if (trimTexts === null || trimTexts === void 0 ? void 0 : trimTexts[1]) {
|
|
154
|
+
// 完成处理所有块后,检查并发送剩余文本
|
|
155
|
+
// 将剩余缓冲区加入待发送行
|
|
156
|
+
if (bufferedText) {
|
|
157
|
+
pendingLines.push(bufferedText);
|
|
158
|
+
}
|
|
159
|
+
// 处理最后一行可能存在的后缀
|
|
160
|
+
if (pendingLines.length > 0) {
|
|
161
|
+
let lastLine = pendingLines[pendingLines.length - 1];
|
|
162
|
+
if (lastLine.endsWith(trimTexts[1])) {
|
|
163
|
+
// 移除后缀
|
|
164
|
+
lastLine = lastLine.substring(0, lastLine.length - trimTexts[1].length);
|
|
165
|
+
pendingLines[pendingLines.length - 1] = lastLine;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// 发送所有剩余的行
|
|
169
|
+
for (let i = 0; i < pendingLines.length; i++) {
|
|
170
|
+
const isLastLine = i === pendingLines.length - 1;
|
|
171
|
+
const lineToSend = pendingLines[i] + (isLastLine ? '' : '\n');
|
|
172
|
+
chatReadableStream.emitData({ kind: 'content', content: lineToSend });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
124
175
|
chatReadableStream.end();
|
|
125
176
|
}
|
|
126
177
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-language-model.js","sourceRoot":"","sources":["../../src/node/base-language-model.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base-language-model.js","sourceRoot":"","sources":["../../src/node/base-language-model.ts"],"names":[],"mappings":";;;;AAAA,2BAAqF;AAErF,qCAAqD;AAKrD,iFAI4C;AAGrC,IAAe,iBAAiB,GAAhC,MAAe,iBAAiB;IAM7B,sBAAsB,CAAC,IAAqB;QAClD,QAAQ,IAAI,EAAE,CAAC;YACb;gBACE,OAAO,QAAQ,CAAC;YAClB;gBACE,OAAO,MAAM,CAAC;YAChB;gBACE,OAAO,WAAW,CAAC;YACrB;gBACE,OAAO,MAAM,CAAC;YAChB;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAe,EACf,kBAAsC,EACtC,OAA6B,EAC7B,iBAAqC;QAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,IAAI,YAAY,GAAkB,EAAE,CAAC;QACrC,yBAAyB;QACzB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC1E,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC,sBAAsB,CAChC,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,kBAAkB,EAClB,OAAO,CAAC,OAAO,IAAI,EAAE,EACrB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,SAAS,EACjB,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAEO,0BAA0B,CAAC,WAAwB;QACzD,OAAO,IAAA,SAAI,EAAC;YACV,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;YAC1C,sCAAsC;YACtC,UAAU,EAAE,IAAA,eAAU,EAAC,WAAW,CAAC,UAAU,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,OAA6B,EAAE,EAAE,CAC1D,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;IAIS,KAAK,CAAC,sBAAsB,CACpC,QAAa,EACb,OAAe,EACf,KAAoB,EACpB,kBAAsC,EACtC,UAA0B,EAAE,EAC5B,OAAgB,EAChB,WAAoB,EACpB,IAAa,EACb,IAAa,EACb,eAAqC,EACrC,SAA4B,EAC5B,iBAAqC;QAErC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5G,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,IAAI,iBAAiB,EAAE,CAAC;gBACtB,iBAAiB,CAAC,uBAAuB,CAAC,GAAG,EAAE;oBAC7C,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,QAAQ,GAAkB;gBAC9B,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACvB,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAQ,EAAE,uBAAuB;oBAC3E,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC,CAAC;gBACH,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;aACnC,CAAC;YACF,MAAM,MAAM,GAAG,IAAA,eAAU,EAAC;gBACxB,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;gBACjD,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,OAAO;gBACd,QAAQ;gBACR,WAAW,EAAE,eAAe,CAAC,MAAM;gBACnC,8BAA8B,EAAE,IAAI;gBACpC,QAAQ,EAAE,EAAE;gBACZ,WAAW;gBACX,IAAI,EAAE,IAAI,IAAI,GAAG;gBACjB,IAAI,EAAE,IAAI,IAAI,CAAC;gBACf,eAAe;aAChB,CAAC,CAAC;YAEH,SAAS;YACT,IAAI,YAAY,GAAG,IAAI,CAAC;YACxB,IAAI,YAAY,GAAG,EAAE,CAAC;YACtB,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAChC,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,EAAE,CAAC;wBACtB,eAAe;wBACf,YAAY,IAAI,KAAK,CAAC,SAAS,CAAC;wBAEhC,qBAAqB;wBACrB,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BACxD,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;4BAChG,YAAY,GAAG,KAAK,CAAC;wBACvB,CAAC;wBAED,0BAA0B;wBAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAEvC,wBAAwB;wBACxB,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;wBAEjC,gBAAgB;wBAChB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACrB,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;wBAC9B,CAAC;wBAED,4BAA4B;wBAC5B,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC/B,mBAAmB;4BACnB,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;4BAC/C,kBAAkB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;wBACxE,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,kBAAkB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC7E,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACtC,kBAAkB,CAAC,QAAQ,CAAC;wBAC1B,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE;4BACP,EAAE,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;4BAC7C,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;4BACzE,KAAK,EAAE,UAAU;yBAClB;qBACF,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;oBACtD,kBAAkB,CAAC,QAAQ,CAAC;wBAC1B,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE;4BACP,EAAE,EAAE,KAAK,CAAC,UAAU;4BACpB,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE;4BAClC,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBAC5C,kBAAkB,CAAC,QAAQ,CAAC;wBAC1B,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE;4BACP,EAAE,EAAE,KAAK,CAAC,UAAU;4BACpB,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE;4BAClE,KAAK,EAAE,WAAW;yBACnB;qBACF,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACxC,kBAAkB,CAAC,QAAQ,CAAC;wBAC1B,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE;4BACP,EAAE,EAAE,KAAK,CAAC,UAAU;4BACpB,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;4BACzE,MAAM,EAAE,KAAK,CAAC,MAAM;4BACpB,KAAK,EAAE,QAAQ;yBAChB;qBACF,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAClC,kBAAkB,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YAED,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,CAAC,CAAC,EAAE,CAAC;gBACnB,qBAAqB;gBAErB,eAAe;gBACf,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClC,CAAC;gBAED,gBAAgB;gBAChB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,IAAI,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAErD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpC,OAAO;wBACP,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACxE,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;oBACnD,CAAC;gBACH,CAAC;gBAED,WAAW;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,MAAM,UAAU,GAAG,CAAC,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;oBACjD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC9D,kBAAkB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;YAED,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wDAAwD;YACxD,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;CACF,CAAA;AAnOqB,8CAAiB;AAElB;IADlB,IAAA,cAAS,EAAC,wDAA6B,CAAC;;wEACwC;4BAF7D,iBAAiB;IADtC,IAAA,eAAU,GAAE;GACS,iBAAiB,CAmOtC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-ai-native",
|
|
3
|
-
"version": "3.8.1-next-
|
|
3
|
+
"version": "3.8.1-next-1741061006.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src"
|
|
@@ -23,26 +23,26 @@
|
|
|
23
23
|
"@ai-sdk/deepseek": "^0.1.11",
|
|
24
24
|
"@ai-sdk/openai-compatible": "^0.1.11",
|
|
25
25
|
"@modelcontextprotocol/sdk": "^1.3.1",
|
|
26
|
-
"@opensumi/ide-addons": "3.8.1-next-
|
|
27
|
-
"@opensumi/ide-components": "3.8.1-next-
|
|
28
|
-
"@opensumi/ide-connection": "3.8.1-next-
|
|
29
|
-
"@opensumi/ide-core-common": "3.8.1-next-
|
|
30
|
-
"@opensumi/ide-core-node": "3.8.1-next-
|
|
31
|
-
"@opensumi/ide-debug": "3.8.1-next-
|
|
32
|
-
"@opensumi/ide-design": "3.8.1-next-
|
|
33
|
-
"@opensumi/ide-editor": "3.8.1-next-
|
|
34
|
-
"@opensumi/ide-file-search": "3.8.1-next-
|
|
35
|
-
"@opensumi/ide-file-service": "3.8.1-next-
|
|
36
|
-
"@opensumi/ide-main-layout": "3.8.1-next-
|
|
37
|
-
"@opensumi/ide-markers": "3.8.1-next-
|
|
38
|
-
"@opensumi/ide-monaco": "3.8.1-next-
|
|
39
|
-
"@opensumi/ide-overlay": "3.8.1-next-
|
|
40
|
-
"@opensumi/ide-preferences": "3.8.1-next-
|
|
41
|
-
"@opensumi/ide-search": "3.8.1-next-
|
|
42
|
-
"@opensumi/ide-terminal-next": "3.8.1-next-
|
|
43
|
-
"@opensumi/ide-theme": "3.8.1-next-
|
|
44
|
-
"@opensumi/ide-utils": "3.8.1-next-
|
|
45
|
-
"@opensumi/ide-workspace": "3.8.1-next-
|
|
26
|
+
"@opensumi/ide-addons": "3.8.1-next-1741061006.0",
|
|
27
|
+
"@opensumi/ide-components": "3.8.1-next-1741061006.0",
|
|
28
|
+
"@opensumi/ide-connection": "3.8.1-next-1741061006.0",
|
|
29
|
+
"@opensumi/ide-core-common": "3.8.1-next-1741061006.0",
|
|
30
|
+
"@opensumi/ide-core-node": "3.8.1-next-1741061006.0",
|
|
31
|
+
"@opensumi/ide-debug": "3.8.1-next-1741061006.0",
|
|
32
|
+
"@opensumi/ide-design": "3.8.1-next-1741061006.0",
|
|
33
|
+
"@opensumi/ide-editor": "3.8.1-next-1741061006.0",
|
|
34
|
+
"@opensumi/ide-file-search": "3.8.1-next-1741061006.0",
|
|
35
|
+
"@opensumi/ide-file-service": "3.8.1-next-1741061006.0",
|
|
36
|
+
"@opensumi/ide-main-layout": "3.8.1-next-1741061006.0",
|
|
37
|
+
"@opensumi/ide-markers": "3.8.1-next-1741061006.0",
|
|
38
|
+
"@opensumi/ide-monaco": "3.8.1-next-1741061006.0",
|
|
39
|
+
"@opensumi/ide-overlay": "3.8.1-next-1741061006.0",
|
|
40
|
+
"@opensumi/ide-preferences": "3.8.1-next-1741061006.0",
|
|
41
|
+
"@opensumi/ide-search": "3.8.1-next-1741061006.0",
|
|
42
|
+
"@opensumi/ide-terminal-next": "3.8.1-next-1741061006.0",
|
|
43
|
+
"@opensumi/ide-theme": "3.8.1-next-1741061006.0",
|
|
44
|
+
"@opensumi/ide-utils": "3.8.1-next-1741061006.0",
|
|
45
|
+
"@opensumi/ide-workspace": "3.8.1-next-1741061006.0",
|
|
46
46
|
"@xterm/xterm": "5.5.0",
|
|
47
47
|
"ai": "^4.1.45",
|
|
48
48
|
"ansi-regex": "^2.0.0",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"zod-to-json-schema": "^3.24.1"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@opensumi/ide-core-browser": "3.8.1-next-
|
|
60
|
+
"@opensumi/ide-core-browser": "3.8.1-next-1741061006.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "82226cbbc03f9b5b875d581216035e858c57163c"
|
|
63
63
|
}
|
|
@@ -59,7 +59,11 @@ import {
|
|
|
59
59
|
} from '@opensumi/ide-core-common';
|
|
60
60
|
import { DESIGN_MENU_BAR_RIGHT } from '@opensumi/ide-design';
|
|
61
61
|
import { IEditor, WorkbenchEditorService } from '@opensumi/ide-editor';
|
|
62
|
-
import {
|
|
62
|
+
import {
|
|
63
|
+
BrowserEditorContribution,
|
|
64
|
+
EditorComponentRegistry,
|
|
65
|
+
IEditorFeatureRegistry,
|
|
66
|
+
} from '@opensumi/ide-editor/lib/browser';
|
|
63
67
|
import { WorkbenchEditorServiceImpl } from '@opensumi/ide-editor/lib/browser/workbench-editor.service';
|
|
64
68
|
import { IMainLayoutService } from '@opensumi/ide-main-layout';
|
|
65
69
|
import { ISettingRegistry, SettingContribution } from '@opensumi/ide-preferences';
|
|
@@ -100,6 +104,7 @@ import {
|
|
|
100
104
|
AIRightTabRenderer,
|
|
101
105
|
} from './layout/tabbar.view';
|
|
102
106
|
import { AIChatLogoAvatar } from './layout/view/avatar/avatar.view';
|
|
107
|
+
import { BaseApplyService } from './mcp/base-apply.service';
|
|
103
108
|
import {
|
|
104
109
|
AINativeCoreContribution,
|
|
105
110
|
IChatFeatureRegistry,
|
|
@@ -116,6 +121,7 @@ import {
|
|
|
116
121
|
import { InlineChatEditorController } from './widget/inline-chat/inline-chat-editor.controller';
|
|
117
122
|
import { InlineChatFeatureRegistry } from './widget/inline-chat/inline-chat.feature.registry';
|
|
118
123
|
import { InlineChatService } from './widget/inline-chat/inline-chat.service';
|
|
124
|
+
import { InlineDiffManager } from './widget/inline-diff/inline-diff-manager';
|
|
119
125
|
import { InlineDiffController } from './widget/inline-diff/inline-diff.controller';
|
|
120
126
|
import { InlineHintController } from './widget/inline-hint/inline-hint.controller';
|
|
121
127
|
import { InlineInputController } from './widget/inline-input/inline-input.controller';
|
|
@@ -123,6 +129,8 @@ import { InlineInputService } from './widget/inline-input/inline-input.service';
|
|
|
123
129
|
import { InlineStreamDiffService } from './widget/inline-stream-diff/inline-stream-diff.service';
|
|
124
130
|
import { SumiLightBulbWidget } from './widget/light-bulb';
|
|
125
131
|
|
|
132
|
+
export const INLINE_DIFF_MANAGER_WIDGET_ID = 'inline-diff-manager-widget';
|
|
133
|
+
|
|
126
134
|
@Domain(
|
|
127
135
|
ClientAppContribution,
|
|
128
136
|
BrowserEditorContribution,
|
|
@@ -237,6 +245,9 @@ export class AINativeBrowserContribution
|
|
|
237
245
|
@Autowired(IChatInternalService)
|
|
238
246
|
private readonly chatInternalService: ChatInternalService;
|
|
239
247
|
|
|
248
|
+
@Autowired(BaseApplyService)
|
|
249
|
+
private readonly applyService: BaseApplyService;
|
|
250
|
+
|
|
240
251
|
constructor() {
|
|
241
252
|
this.registerFeature();
|
|
242
253
|
}
|
|
@@ -524,6 +535,19 @@ export class AINativeBrowserContribution
|
|
|
524
535
|
});
|
|
525
536
|
}
|
|
526
537
|
|
|
538
|
+
registerEditorComponent(registry: EditorComponentRegistry): void {
|
|
539
|
+
registry.registerEditorSideWidget({
|
|
540
|
+
id: INLINE_DIFF_MANAGER_WIDGET_ID,
|
|
541
|
+
component: InlineDiffManager,
|
|
542
|
+
displaysOnResource: (resource) => {
|
|
543
|
+
if (this.applyService.getUriPendingCodeBlock(resource.uri)) {
|
|
544
|
+
return true;
|
|
545
|
+
}
|
|
546
|
+
return false;
|
|
547
|
+
},
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
|
|
527
551
|
registerCommands(commands: CommandRegistry): void {
|
|
528
552
|
commands.registerCommand(AI_INLINE_CHAT_VISIBLE, {
|
|
529
553
|
execute: (value: boolean) => {
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
IStorage,
|
|
10
10
|
STORAGE_NAMESPACE,
|
|
11
11
|
StorageProvider,
|
|
12
|
+
debounce,
|
|
12
13
|
} from '@opensumi/ide-core-common';
|
|
13
14
|
import { ChatMessageRole, IChatMessage, IHistoryChatMessage } from '@opensumi/ide-core-common/lib/types/ai-native';
|
|
14
15
|
|
|
@@ -89,6 +90,7 @@ export class ChatManagerService extends Disposable {
|
|
|
89
90
|
const savedSessions = this.fromJSON(sessionsModelData);
|
|
90
91
|
savedSessions.forEach((session) => {
|
|
91
92
|
this.#sessionModels.set(session.sessionId, session);
|
|
93
|
+
this.listenSession(session);
|
|
92
94
|
});
|
|
93
95
|
await this.storageInitEmitter.fireAndAwait();
|
|
94
96
|
}
|
|
@@ -100,6 +102,7 @@ export class ChatManagerService extends Disposable {
|
|
|
100
102
|
startSession() {
|
|
101
103
|
const model = new ChatModel();
|
|
102
104
|
this.#sessionModels.set(model.sessionId, model);
|
|
105
|
+
this.listenSession(model);
|
|
103
106
|
return model;
|
|
104
107
|
}
|
|
105
108
|
|
|
@@ -196,6 +199,15 @@ export class ChatManagerService extends Disposable {
|
|
|
196
199
|
}
|
|
197
200
|
}
|
|
198
201
|
|
|
202
|
+
protected listenSession(session: ChatModel) {
|
|
203
|
+
this.addDispose(
|
|
204
|
+
session.history.onMessageAdditionalChange(() => {
|
|
205
|
+
this.saveSessions();
|
|
206
|
+
}),
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
@debounce(1000)
|
|
199
211
|
protected saveSessions() {
|
|
200
212
|
this._chatStorage.set('sessionModels', this.getSessions());
|
|
201
213
|
}
|
|
@@ -94,6 +94,10 @@ export class ChatInternalService extends Disposable {
|
|
|
94
94
|
return this.chatManagerService.getSessions();
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
getSession(sessionId: string) {
|
|
98
|
+
return this.chatManagerService.getSession(sessionId);
|
|
99
|
+
}
|
|
100
|
+
|
|
97
101
|
activateSession(sessionId: string) {
|
|
98
102
|
const targetSession = this.chatManagerService.getSession(sessionId);
|
|
99
103
|
if (!targetSession) {
|
|
@@ -89,6 +89,7 @@ export const AIChatView = () => {
|
|
|
89
89
|
const layoutService = useInjectable<IMainLayoutService>(IMainLayoutService);
|
|
90
90
|
const msgHistoryManager = aiChatService.sessionModel.history;
|
|
91
91
|
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
92
|
+
const autoScroll = React.useRef<boolean>(true);
|
|
92
93
|
const chatInputRef = React.useRef<{ setInputValue: (v: string) => void } | null>(null);
|
|
93
94
|
const dialogService = useInjectable<IDialogService>(IDialogService);
|
|
94
95
|
const aiNativeConfigService = useInjectable<AINativeConfigService>(AINativeConfigService);
|
|
@@ -165,8 +166,29 @@ export const AIChatView = () => {
|
|
|
165
166
|
[],
|
|
166
167
|
);
|
|
167
168
|
|
|
169
|
+
const onDidWheel = React.useCallback(
|
|
170
|
+
(e: WheelEvent) => {
|
|
171
|
+
// 向上滚动
|
|
172
|
+
if (e.deltaY < 0) {
|
|
173
|
+
autoScroll.current = false;
|
|
174
|
+
} else {
|
|
175
|
+
autoScroll.current = true;
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
[autoScroll],
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
React.useEffect(() => {
|
|
182
|
+
if (containerRef.current) {
|
|
183
|
+
containerRef.current.addEventListener('wheel', onDidWheel);
|
|
184
|
+
return () => {
|
|
185
|
+
containerRef.current?.removeEventListener('wheel', onDidWheel);
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}, [autoScroll]);
|
|
189
|
+
|
|
168
190
|
const scrollToBottom = React.useCallback(() => {
|
|
169
|
-
if (containerRef && containerRef.current) {
|
|
191
|
+
if (containerRef && containerRef.current && autoScroll.current) {
|
|
170
192
|
const lastElement = containerRef.current.lastElementChild;
|
|
171
193
|
if (lastElement) {
|
|
172
194
|
lastElement.scrollIntoView({ behavior: 'smooth', block: 'end' });
|
|
@@ -176,7 +198,7 @@ export const AIChatView = () => {
|
|
|
176
198
|
containerRef.current.classList.add(SCROLL_CLASSNAME);
|
|
177
199
|
}
|
|
178
200
|
}
|
|
179
|
-
}, [containerRef]);
|
|
201
|
+
}, [containerRef, autoScroll]);
|
|
180
202
|
|
|
181
203
|
const handleDispatchMessage = React.useCallback(
|
|
182
204
|
(dispatch: TDispatchAction) => {
|
|
@@ -198,7 +220,7 @@ export const AIChatView = () => {
|
|
|
198
220
|
disposer.addDispose(
|
|
199
221
|
chatApiService.onScrollToBottom(() => {
|
|
200
222
|
requestAnimationFrame(() => {
|
|
201
|
-
scrollToBottom();
|
|
223
|
+
// scrollToBottom();
|
|
202
224
|
});
|
|
203
225
|
}),
|
|
204
226
|
);
|
|
@@ -2,10 +2,11 @@ import cls from 'classnames';
|
|
|
2
2
|
import React, { FC, memo, useCallback, useEffect, useRef, useState } from 'react';
|
|
3
3
|
|
|
4
4
|
import { Icon, Input, Loading, Popover, PopoverPosition, PopoverTriggerType, getIcon } from '@opensumi/ide-components';
|
|
5
|
-
import './chat-history.css';
|
|
6
5
|
import { localize } from '@opensumi/ide-core-browser';
|
|
7
6
|
import { EnhanceIcon } from '@opensumi/ide-core-browser/lib/components/ai-native';
|
|
8
7
|
|
|
8
|
+
import styles from './chat-history.module.less';
|
|
9
|
+
|
|
9
10
|
export interface IChatHistoryItem {
|
|
10
11
|
id: string;
|
|
11
12
|
title: string;
|
|
@@ -162,22 +163,25 @@ const ChatHistory: FC<IChatHistoryProps> = memo(
|
|
|
162
163
|
(item: IChatHistoryItem) => (
|
|
163
164
|
<div
|
|
164
165
|
key={item.id}
|
|
165
|
-
className={cls(
|
|
166
|
+
className={cls(
|
|
167
|
+
styles['dm-chat-history-item'],
|
|
168
|
+
item.id === currentId ? styles['dm-chat-history-item-selected'] : '',
|
|
169
|
+
)}
|
|
166
170
|
onClick={() => handleHistoryItemSelect(item)}
|
|
167
171
|
>
|
|
168
|
-
<div className='dm-chat-history-item-content'>
|
|
172
|
+
<div className={styles['dm-chat-history-item-content']}>
|
|
169
173
|
{item.loading ? (
|
|
170
174
|
<Loading />
|
|
171
175
|
) : (
|
|
172
176
|
<Icon icon='message' style={{ width: '16px', height: '16px', marginRight: 4 }} />
|
|
173
177
|
)}
|
|
174
178
|
{!historyTitleEditable?.[item.id] ? (
|
|
175
|
-
<span id={`dm-chat-history-item-title-${item.id}`} className='dm-chat-history-item-title'>
|
|
179
|
+
<span id={`dm-chat-history-item-title-${item.id}`} className={styles['dm-chat-history-item-title']}>
|
|
176
180
|
{item.title}
|
|
177
181
|
</span>
|
|
178
182
|
) : (
|
|
179
183
|
<Input
|
|
180
|
-
className='dm-chat-history-item-title'
|
|
184
|
+
className={styles['dm-chat-history-item-title']}
|
|
181
185
|
defaultValue={item.title}
|
|
182
186
|
ref={inputRef}
|
|
183
187
|
onPressEnter={(e: any) => {
|
|
@@ -187,7 +191,7 @@ const ChatHistory: FC<IChatHistoryProps> = memo(
|
|
|
187
191
|
/>
|
|
188
192
|
)}
|
|
189
193
|
</div>
|
|
190
|
-
<div className='dm-chat-history-item-actions'>
|
|
194
|
+
<div className={styles['dm-chat-history-item-actions']}>
|
|
191
195
|
{/* <EditOutlined
|
|
192
196
|
title={localize('aiNative.operate.chatHistory.edit')}
|
|
193
197
|
style={{ marginRight: 8 }}
|
|
@@ -198,7 +202,7 @@ const ChatHistory: FC<IChatHistoryProps> = memo(
|
|
|
198
202
|
}}
|
|
199
203
|
/> */}
|
|
200
204
|
<EnhanceIcon
|
|
201
|
-
className={cls('dm-chat-history-item-actions-delete', getIcon('delete'))}
|
|
205
|
+
className={cls(styles['dm-chat-history-item-actions-delete'], getIcon('delete'))}
|
|
202
206
|
onClick={(e) => {
|
|
203
207
|
e.preventDefault();
|
|
204
208
|
e.stopPropagation();
|
|
@@ -237,10 +241,10 @@ const ChatHistory: FC<IChatHistoryProps> = memo(
|
|
|
237
241
|
value={searchValue}
|
|
238
242
|
onChange={handleSearchChange}
|
|
239
243
|
/>
|
|
240
|
-
<div className='dm-chat-history-list'>
|
|
244
|
+
<div className={styles['dm-chat-history-list']}>
|
|
241
245
|
{groupedHistoryList.map((group) => (
|
|
242
246
|
<div key={group.key} style={{ padding: '4px' }}>
|
|
243
|
-
<div className='dm-chat-history-time'>{group.key}</div>
|
|
247
|
+
<div className={styles['dm-chat-history-time']}>{group.key}</div>
|
|
244
248
|
{group.items.map(renderHistoryItem)}
|
|
245
249
|
</div>
|
|
246
250
|
))}
|
|
@@ -253,11 +257,11 @@ const ChatHistory: FC<IChatHistoryProps> = memo(
|
|
|
253
257
|
const getPopupContainer = useCallback((triggerNode: HTMLElement) => triggerNode.parentElement!, []);
|
|
254
258
|
|
|
255
259
|
return (
|
|
256
|
-
<div className={cls('dm-chat-history-header', className)}>
|
|
257
|
-
<div className='dm-chat-history-header-title'>
|
|
260
|
+
<div className={cls(styles['dm-chat-history-header'], className)}>
|
|
261
|
+
<div className={styles['dm-chat-history-header-title']}>
|
|
258
262
|
<span>{title}</span>
|
|
259
263
|
</div>
|
|
260
|
-
<div className='dm-chat-history-header-actions'>
|
|
264
|
+
<div className={styles['dm-chat-history-header-actions']}>
|
|
261
265
|
<Popover
|
|
262
266
|
id='dm-chat-history-header-actions-history'
|
|
263
267
|
content={renderHistory()}
|
|
@@ -267,10 +271,12 @@ const ChatHistory: FC<IChatHistoryProps> = memo(
|
|
|
267
271
|
getPopupContainer={getPopupContainer}
|
|
268
272
|
>
|
|
269
273
|
<div
|
|
270
|
-
className='dm-chat-history-header-actions-history'
|
|
274
|
+
className={styles['dm-chat-history-header-actions-history']}
|
|
271
275
|
title={localize('aiNative.operate.chatHistory.title')}
|
|
272
276
|
>
|
|
273
|
-
<EnhanceIcon
|
|
277
|
+
<EnhanceIcon
|
|
278
|
+
className={cls(styles['dm-chat-history-header-actions-history'], 'codicon codicon-history')}
|
|
279
|
+
/>
|
|
274
280
|
</div>
|
|
275
281
|
</Popover>
|
|
276
282
|
<Popover
|
|
@@ -279,7 +285,7 @@ const ChatHistory: FC<IChatHistoryProps> = memo(
|
|
|
279
285
|
title={localize('aiNative.operate.newChat.title')}
|
|
280
286
|
>
|
|
281
287
|
<EnhanceIcon
|
|
282
|
-
className={cls('dm-chat-history-header-actions-new', getIcon('plus'))}
|
|
288
|
+
className={cls(styles['dm-chat-history-header-actions-new'], getIcon('plus'))}
|
|
283
289
|
onClick={handleNewChat}
|
|
284
290
|
/>
|
|
285
291
|
</Popover>
|
|
@@ -15,7 +15,6 @@ import { ChatProxyService } from '../chat/chat-proxy.service';
|
|
|
15
15
|
import { ChatFeatureRegistry } from '../chat/chat.feature.registry';
|
|
16
16
|
import { IChatSlashCommandItem } from '../types';
|
|
17
17
|
|
|
18
|
-
import { ChatContext } from './ChatContext';
|
|
19
18
|
import styles from './components.module.less';
|
|
20
19
|
|
|
21
20
|
const INSTRUCTION_BOTTOM = 8;
|
|
@@ -290,7 +290,7 @@ export class IntelligentCompletionsController extends BaseAIMonacoEditorControll
|
|
|
290
290
|
const range = completionModel.items[0].range;
|
|
291
291
|
if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {
|
|
292
292
|
runWhenIdle(() => {
|
|
293
|
-
this.
|
|
293
|
+
this.hide();
|
|
294
294
|
});
|
|
295
295
|
}
|
|
296
296
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { AI_CODE_EDITS_COMMANDS } from '@opensumi/ide-core-browser/lib/ai-native/command';
|
|
2
|
+
import { CommandService } from '@opensumi/ide-core-common';
|
|
1
3
|
import {
|
|
2
4
|
InlineCompletionContext,
|
|
3
5
|
InlineCompletionTriggerKind,
|
|
@@ -27,6 +29,7 @@ import {
|
|
|
27
29
|
|
|
28
30
|
import { CodeEditsResultValue, ICodeEdit, ICodeEditsResult } from '../index';
|
|
29
31
|
|
|
32
|
+
|
|
30
33
|
import { BaseCodeEditsView } from './base';
|
|
31
34
|
|
|
32
35
|
/**
|
|
@@ -115,6 +118,10 @@ export class DefaultCodeEditsView extends BaseCodeEditsView {
|
|
|
115
118
|
return completionModel;
|
|
116
119
|
},
|
|
117
120
|
freeInlineCompletions: () => [],
|
|
121
|
+
handleRejection: (completions, item) => {
|
|
122
|
+
const commandService: CommandService = this.injector.get(CommandService);
|
|
123
|
+
commandService.executeCommand(AI_CODE_EDITS_COMMANDS.DISCARD.id);
|
|
124
|
+
},
|
|
118
125
|
} as InlineCompletionsProvider<ICodeEditsResult<ICodeEdit>>,
|
|
119
126
|
],
|
|
120
127
|
} as unknown as LanguageFeatureRegistry<InlineCompletionsProvider>,
|