@opensumi/ide-ai-native 3.8.0 → 3.8.1-next-1740452092.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/components/ChatContext/index.js +2 -2
- package/lib/browser/components/ChatContext/index.js.map +1 -1
- package/lib/browser/context/llm-context.service.d.ts +16 -5
- package/lib/browser/context/llm-context.service.d.ts.map +1 -1
- package/lib/browser/context/llm-context.service.js +75 -47
- package/lib/browser/context/llm-context.service.js.map +1 -1
- package/lib/common/llm-context.d.ts +12 -9
- package/lib/common/llm-context.d.ts.map +1 -1
- package/lib/common/llm-context.js.map +1 -1
- package/package.json +23 -23
- package/src/browser/components/ChatContext/index.tsx +2 -2
- package/src/browser/context/llm-context.service.ts +87 -55
- package/src/common/llm-context.ts +10 -4
|
@@ -31,7 +31,7 @@ exports.ChatContext = (0, react_1.memo)(() => {
|
|
|
31
31
|
(0, react_1.useEffect)(() => {
|
|
32
32
|
const disposable = utils_1.Event.debounce(contextService.onDidContextFilesChangeEvent, (_, e) => e, 50)((files) => {
|
|
33
33
|
if (files) {
|
|
34
|
-
updateAddedFiles(files);
|
|
34
|
+
updateAddedFiles([...files.attached]);
|
|
35
35
|
}
|
|
36
36
|
}, contextService);
|
|
37
37
|
return () => {
|
|
@@ -45,7 +45,7 @@ exports.ChatContext = (0, react_1.memo)(() => {
|
|
|
45
45
|
contextService.addFileToContext(uri, undefined, true);
|
|
46
46
|
}, []);
|
|
47
47
|
const onDidDeselect = (0, react_1.useCallback)((uri) => {
|
|
48
|
-
contextService.removeFileFromContext(uri);
|
|
48
|
+
contextService.removeFileFromContext(uri, true);
|
|
49
49
|
}, []);
|
|
50
50
|
const onDidClickFile = (0, react_1.useCallback)((uri) => {
|
|
51
51
|
workbenchEditorService.open(uri);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/components/ChatContext/index.tsx"],"names":[],"mappings":";;;;AAAA,mEAA8C;AAC9C,uDAAsE;AAEtE,wCAAsC;AAEtC,iEAA8D;AAC9D,0EAA6E;AAC7E,mFAAkF;AAClF,kGAA4F;AAC5F,oGAA2F;AAC3F,yFAAqF;AACrF,qEAAkE;AAClE,+DAAiE;AACjE,kEAAgF;AAEhF,6DAAqG;AAErG,uDAAoD;AACpD,oFAAyC;AAEzC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7D,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5E,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AACnE,MAAM,qBAAqB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAE,KAAyB,CAAC,YAAY,KAAK,QAAQ,CAAC;AAEpF,QAAA,WAAW,GAAG,IAAA,YAAI,EAAC,GAAG,EAAE;IACnC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAgB,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE/D,MAAM,YAAY,GAAG,IAAA,gCAAa,EAAe,4BAAY,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAA,gCAAa,EAAY,2BAAS,CAAC,CAAC;IACtD,MAAM,sBAAsB,GAAG,IAAA,gCAAa,EAAyB,8BAAsB,CAAC,CAAC;IAC7F,MAAM,cAAc,GAAG,IAAA,gCAAa,EAAoB,oCAAsB,CAAC,CAAC;IAEhF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,aAAK,CAAC,QAAQ,CAC/B,cAAc,CAAC,4BAA4B,EAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAE,EACZ,EAAE,CACH,CAAC,CAAC,KAAK,EAAE,EAAE;YACV,IAAI,KAAK,EAAE,CAAC;gBACV,gBAAgB,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/components/ChatContext/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,17 +9,28 @@ export declare class LLMContextServiceImpl extends WithEventBus implements LLMCo
|
|
|
9
9
|
protected readonly docModelManager: IEditorDocumentModelService;
|
|
10
10
|
protected readonly markerService: IMarkerService;
|
|
11
11
|
private isAutoCollecting;
|
|
12
|
-
private
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
|
|
12
|
+
private readonly maxAttachFilesLimit;
|
|
13
|
+
private readonly maxViewFilesLimit;
|
|
14
|
+
private readonly attachedFiles;
|
|
15
|
+
private readonly recentlyViewFiles;
|
|
16
|
+
private readonly onDidContextFilesChangeEmitter;
|
|
17
|
+
onDidContextFilesChangeEvent: import("@opensumi/ide-utils/lib/event").Event<{
|
|
18
|
+
viewed: FileContext[];
|
|
19
|
+
attached: FileContext[];
|
|
20
|
+
}>;
|
|
21
|
+
private addFileToList;
|
|
16
22
|
addFileToContext(uri: URI, selection?: [number, number], isManual?: boolean): void;
|
|
23
|
+
private notifyContextChange;
|
|
17
24
|
cleanFileContext(): void;
|
|
18
25
|
private getAllContextFiles;
|
|
19
|
-
removeFileFromContext(uri: URI): void;
|
|
26
|
+
removeFileFromContext(uri: URI, isManual?: boolean): void;
|
|
20
27
|
startAutoCollection(): void;
|
|
21
28
|
private startAutoCollectionInternal;
|
|
22
29
|
stopAutoCollection(): void;
|
|
23
30
|
serialize(): SerializedContext;
|
|
31
|
+
private serializeRecentlyViewFiles;
|
|
32
|
+
private serializeAttachedFiles;
|
|
33
|
+
private serializeAttachedFile;
|
|
34
|
+
private getFileErrors;
|
|
24
35
|
}
|
|
25
36
|
//# sourceMappingURL=llm-context.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-context.service.d.ts","sourceRoot":"","sources":["../../../src/browser/context/llm-context.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gEAAgE,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAEvF,OAAO,EAAW,GAAG,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAIL,2BAA2B,EAC5B,MAAM,kDAAkD,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,
|
|
1
|
+
{"version":3,"file":"llm-context.service.d.ts","sourceRoot":"","sources":["../../../src/browser/context/llm-context.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gEAAgE,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAEvF,OAAO,EAAW,GAAG,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAIL,2BAA2B,EAC5B,MAAM,kDAAkD,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,EAAqB,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEhH,qBACa,qBAAsB,SAAQ,YAAa,YAAW,iBAAiB;IAElF,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAGxC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,2BAA2B,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IAEjD,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAM;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IACvD,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAqE;IACpH,4BAA4B;gBAD4C,WAAW,EAAE;kBAAY,WAAW,EAAE;OACrC;IAEzE,OAAO,CAAC,aAAa;IAYrB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,UAAQ,GAAG,IAAI;IAahF,OAAO,CAAC,mBAAmB;IAI3B,gBAAgB;IAKhB,OAAO,CAAC,kBAAkB;IAO1B,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,UAAQ,GAAG,IAAI;IASvD,mBAAmB,IAAI,IAAI;IAS3B,OAAO,CAAC,2BAA2B;IAmDnC,kBAAkB,IAAI,IAAI;IAI1B,SAAS,IAAI,iBAAiB;IAU9B,OAAO,CAAC,0BAA0B;IAMlC,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,aAAa;CAStB"}
|
|
@@ -14,32 +14,53 @@ let LLMContextServiceImpl = class LLMContextServiceImpl extends event_decorator_
|
|
|
14
14
|
constructor() {
|
|
15
15
|
super(...arguments);
|
|
16
16
|
this.isAutoCollecting = false;
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
17
|
+
this.maxAttachFilesLimit = 10;
|
|
18
|
+
this.maxViewFilesLimit = 20;
|
|
19
|
+
this.attachedFiles = [];
|
|
20
|
+
this.recentlyViewFiles = [];
|
|
19
21
|
this.onDidContextFilesChangeEmitter = new utils_1.Emitter();
|
|
20
22
|
this.onDidContextFilesChangeEvent = this.onDidContextFilesChangeEmitter.event;
|
|
21
23
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
this.contextFiles.shift();
|
|
24
|
+
addFileToList(file, list, maxLimit) {
|
|
25
|
+
const existingIndex = list.findIndex((f) => f.uri.toString() === file.uri.toString());
|
|
26
|
+
if (existingIndex > -1) {
|
|
27
|
+
list.splice(existingIndex, 1);
|
|
27
28
|
}
|
|
29
|
+
list.push(file);
|
|
30
|
+
if (list.length > maxLimit) {
|
|
31
|
+
list.shift();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
addFileToContext(uri, selection, isManual = false) {
|
|
35
|
+
if (!uri) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const file = { uri, selection };
|
|
39
|
+
const targetList = isManual ? this.attachedFiles : this.recentlyViewFiles;
|
|
40
|
+
const maxLimit = isManual ? this.maxAttachFilesLimit : this.maxViewFilesLimit;
|
|
41
|
+
this.addFileToList(file, targetList, maxLimit);
|
|
42
|
+
this.notifyContextChange();
|
|
43
|
+
}
|
|
44
|
+
notifyContextChange() {
|
|
28
45
|
this.onDidContextFilesChangeEmitter.fire(this.getAllContextFiles());
|
|
29
46
|
}
|
|
30
47
|
cleanFileContext() {
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
48
|
+
this.attachedFiles.length = 0;
|
|
49
|
+
this.notifyContextChange();
|
|
33
50
|
}
|
|
34
51
|
getAllContextFiles() {
|
|
35
|
-
return
|
|
52
|
+
return {
|
|
53
|
+
viewed: this.recentlyViewFiles,
|
|
54
|
+
attached: this.attachedFiles,
|
|
55
|
+
};
|
|
36
56
|
}
|
|
37
|
-
removeFileFromContext(uri) {
|
|
38
|
-
const
|
|
57
|
+
removeFileFromContext(uri, isManual = false) {
|
|
58
|
+
const targetList = isManual ? this.attachedFiles : this.recentlyViewFiles;
|
|
59
|
+
const index = targetList.findIndex((file) => file.uri.toString() === uri.toString());
|
|
39
60
|
if (index > -1) {
|
|
40
|
-
|
|
41
|
-
this.onDidContextFilesChangeEmitter.fire(this.getAllContextFiles());
|
|
61
|
+
targetList.splice(index, 1);
|
|
42
62
|
}
|
|
63
|
+
this.notifyContextChange();
|
|
43
64
|
}
|
|
44
65
|
startAutoCollection() {
|
|
45
66
|
if (this.isAutoCollecting) {
|
|
@@ -53,13 +74,13 @@ let LLMContextServiceImpl = class LLMContextServiceImpl extends event_decorator_
|
|
|
53
74
|
if (event.payload.uri.scheme !== 'file') {
|
|
54
75
|
return;
|
|
55
76
|
}
|
|
56
|
-
|
|
57
|
-
// this.addFileToContext(event.payload.uri);
|
|
77
|
+
this.addFileToContext(event.payload.uri, undefined, false);
|
|
58
78
|
}));
|
|
59
79
|
this.disposables.push(this.eventBus.on(types_1.EditorDocumentModelRemovalEvent, (event) => {
|
|
60
80
|
if (event.payload.scheme !== 'file') {
|
|
61
81
|
return;
|
|
62
82
|
}
|
|
83
|
+
this.removeFileFromContext(event.payload, false);
|
|
63
84
|
}));
|
|
64
85
|
this.disposables.push(this.eventBus.on(types_1.EditorDocumentModelSavedEvent, (event) => {
|
|
65
86
|
if (event.payload.scheme !== 'file') {
|
|
@@ -74,10 +95,10 @@ let LLMContextServiceImpl = class LLMContextServiceImpl extends event_decorator_
|
|
|
74
95
|
event.payload.selections[0].positionLineNumber,
|
|
75
96
|
].sort();
|
|
76
97
|
if (selection[0] === selection[1]) {
|
|
77
|
-
this.addFileToContext(event.payload.editorUri, undefined);
|
|
98
|
+
this.addFileToContext(event.payload.editorUri, undefined, false);
|
|
78
99
|
}
|
|
79
100
|
else {
|
|
80
|
-
this.addFileToContext(event.payload.editorUri, selection.sort((a, b) => a - b));
|
|
101
|
+
this.addFileToContext(event.payload.editorUri, selection.sort((a, b) => a - b), false);
|
|
81
102
|
}
|
|
82
103
|
}
|
|
83
104
|
}));
|
|
@@ -87,40 +108,47 @@ let LLMContextServiceImpl = class LLMContextServiceImpl extends event_decorator_
|
|
|
87
108
|
}
|
|
88
109
|
serialize() {
|
|
89
110
|
const files = this.getAllContextFiles();
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
111
|
+
const workspaceRoot = utils_1.URI.file(this.appConfig.workspaceDir);
|
|
112
|
+
return {
|
|
113
|
+
recentlyViewFiles: this.serializeRecentlyViewFiles(files.viewed, workspaceRoot),
|
|
114
|
+
attachedFiles: this.serializeAttachedFiles(files.attached, workspaceRoot),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
serializeRecentlyViewFiles(files, workspaceRoot) {
|
|
118
|
+
return files
|
|
119
|
+
.map((file) => { var _a; return ((_a = workspaceRoot.relative(file.uri)) === null || _a === void 0 ? void 0 : _a.toString()) || file.uri.parent.toString(); })
|
|
120
|
+
.filter(Boolean);
|
|
121
|
+
}
|
|
122
|
+
serializeAttachedFiles(files, workspaceRoot) {
|
|
123
|
+
return files
|
|
124
|
+
.map((file) => this.serializeAttachedFile(file, workspaceRoot))
|
|
99
125
|
.filter(Boolean);
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
126
|
+
}
|
|
127
|
+
serializeAttachedFile(file, workspaceRoot) {
|
|
128
|
+
try {
|
|
103
129
|
const ref = this.docModelManager.getModelReference(file.uri);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.getMarkers({
|
|
108
|
-
resource: file.uri.toString(),
|
|
109
|
-
severities: markers_1.MarkerSeverity.Error,
|
|
110
|
-
})
|
|
111
|
-
.map((marker) => marker.message);
|
|
130
|
+
if (!ref) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
112
133
|
return {
|
|
113
|
-
content,
|
|
114
|
-
lineErrors,
|
|
115
|
-
path:
|
|
116
|
-
language: ref
|
|
134
|
+
content: ref.instance.getText(),
|
|
135
|
+
lineErrors: this.getFileErrors(file.uri),
|
|
136
|
+
path: workspaceRoot.relative(file.uri).toString(),
|
|
137
|
+
language: ref.instance.languageId,
|
|
117
138
|
};
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
getFileErrors(uri) {
|
|
145
|
+
return this.markerService
|
|
146
|
+
.getManager()
|
|
147
|
+
.getMarkers({
|
|
148
|
+
resource: uri.toString(),
|
|
149
|
+
severities: markers_1.MarkerSeverity.Error,
|
|
118
150
|
})
|
|
119
|
-
.
|
|
120
|
-
return {
|
|
121
|
-
recentlyViewFiles,
|
|
122
|
-
attachedFiles,
|
|
123
|
-
};
|
|
151
|
+
.map((marker) => marker.message);
|
|
124
152
|
}
|
|
125
153
|
};
|
|
126
154
|
exports.LLMContextServiceImpl = LLMContextServiceImpl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-context.service.js","sourceRoot":"","sources":["../../../src/browser/context/llm-context.service.ts"],"names":[],"mappings":";;;;AAAA,qCAAqD;AACrD,oGAA2F;AAC3F,6FAAuF;AACvF,iFAAqF;AACrF,+DAAmE;AACnE,4EAK0D;AAC1D,kEAAoF;AACpF,kEAAwE;AAKjE,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,8BAAY;IAAhD;;QAUG,qBAAgB,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-context.service.js","sourceRoot":"","sources":["../../../src/browser/context/llm-context.service.ts"],"names":[],"mappings":";;;;AAAA,qCAAqD;AACrD,oGAA2F;AAC3F,6FAAuF;AACvF,iFAAqF;AACrF,+DAAmE;AACnE,4EAK0D;AAC1D,kEAAoF;AACpF,kEAAwE;AAKjE,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,8BAAY;IAAhD;;QAUG,qBAAgB,GAAG,KAAK,CAAC;QAEhB,wBAAmB,GAAG,EAAE,CAAC;QACzB,sBAAiB,GAAG,EAAE,CAAC;QACvB,kBAAa,GAAkB,EAAE,CAAC;QAClC,sBAAiB,GAAkB,EAAE,CAAC;QACtC,mCAA8B,GAAG,IAAI,eAAO,EAAsD,CAAC;QACpH,iCAA4B,GAAG,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;IAqK3E,CAAC;IAnKS,aAAa,CAAC,IAAiB,EAAE,IAAmB,EAAE,QAAgB;QAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtF,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,GAAQ,EAAE,SAA4B,EAAE,QAAQ,GAAG,KAAK;QACvE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAE9E,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEO,kBAAkB;QACxB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,iBAAiB;YAC9B,QAAQ,EAAE,IAAI,CAAC,aAAa;SAC7B,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,GAAQ,EAAE,QAAQ,GAAG,KAAK;QAC9C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrF,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YACf,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED,mBAAmB;QACjB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAEO,2BAA2B;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,wCAAgC,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,uCAA+B,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qCAA6B,EAAE,CAAC,KAAK,EAAE,EAAE;YACxD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpC,OAAO;YACT,CAAC;YACD,gBAAgB;QAClB,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,kCAA0B,EAAE,CAAC,KAAK,EAAE,EAAE;YACrD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG;oBAChB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,wBAAwB;oBACpD,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB;iBAC/C,CAAC,IAAI,EAAsB,CAAC;gBAE7B,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,gBAAgB,CACnB,KAAK,CAAC,OAAO,CAAC,SAAS,EACvB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAC/B,KAAK,CACN,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,SAAS;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAE5D,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;YAC/E,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC1E,CAAC;IACJ,CAAC;IAEO,0BAA0B,CAAC,KAAoB,EAAE,aAAkB;QACzE,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,0CAAE,QAAQ,EAAE,KAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAC;aACzF,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEO,sBAAsB,CAAC,KAAoB,EAAE,aAAkB;QACrE,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;aAC9D,MAAM,CAAC,OAAO,CAAmC,CAAC;IACvD,CAAC;IAEO,qBAAqB,CAAC,IAAiB,EAAE,aAAkB;QACjE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC/B,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;gBACxC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC,QAAQ,EAAE;gBAClD,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAW;aACnC,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,GAAQ;QAC5B,OAAO,IAAI,CAAC,aAAa;aACtB,UAAU,EAAE;aACZ,UAAU,CAAC;YACV,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE;YACxB,UAAU,EAAE,wBAAc,CAAC,KAAK;SACjC,CAAC;aACD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AAtLY,sDAAqB;AAEb;IADlB,IAAA,cAAS,EAAC,2BAAS,CAAC;;wDACmB;AAGrB;IADlB,IAAA,cAAS,EAAC,mCAA2B,CAAC;;8DACyB;AAG7C;IADlB,IAAA,cAAS,EAAC,sBAAc,CAAC;;4DACuB;gCARtC,qBAAqB;IADjC,IAAA,eAAU,GAAE;GACA,qBAAqB,CAsLjC"}
|
|
@@ -10,28 +10,31 @@ export interface LLMContextService {
|
|
|
10
10
|
* 清除上下文
|
|
11
11
|
*/
|
|
12
12
|
cleanFileContext(): void;
|
|
13
|
-
onDidContextFilesChangeEvent: Event<
|
|
13
|
+
onDidContextFilesChangeEvent: Event<{
|
|
14
|
+
viewed: FileContext[];
|
|
15
|
+
attached: FileContext[];
|
|
16
|
+
}>;
|
|
14
17
|
/**
|
|
15
18
|
* 从 context 中移除文件
|
|
16
19
|
* @param uri URI
|
|
17
20
|
*/
|
|
18
|
-
removeFileFromContext(uri: URI): void;
|
|
21
|
+
removeFileFromContext(uri: URI, isManual?: boolean): void;
|
|
19
22
|
/** 导出为可序列化格式 */
|
|
20
23
|
serialize(): SerializedContext;
|
|
21
24
|
}
|
|
22
25
|
export interface FileContext {
|
|
23
26
|
uri: URI;
|
|
24
27
|
selection?: [number, number];
|
|
25
|
-
isManual: boolean;
|
|
26
28
|
}
|
|
27
29
|
export declare const LLMContextServiceToken: unique symbol;
|
|
30
|
+
export interface AttachFileContext {
|
|
31
|
+
content: string;
|
|
32
|
+
lineErrors: string[];
|
|
33
|
+
path: string;
|
|
34
|
+
language: string;
|
|
35
|
+
}
|
|
28
36
|
export interface SerializedContext {
|
|
29
37
|
recentlyViewFiles: string[];
|
|
30
|
-
attachedFiles: Array<
|
|
31
|
-
content: string;
|
|
32
|
-
lineErrors: string[];
|
|
33
|
-
path: string;
|
|
34
|
-
language: string;
|
|
35
|
-
}>;
|
|
38
|
+
attachedFiles: Array<AttachFileContext>;
|
|
36
39
|
}
|
|
37
40
|
//# sourceMappingURL=llm-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-context.d.ts","sourceRoot":"","sources":["../../src/common/llm-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,IAAI,IAAI,CAAC;IAE5B,kBAAkB,IAAI,IAAI,CAAC;IAE3B;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnF;;OAEG;IACH,gBAAgB,IAAI,IAAI,CAAC;IAEzB,4BAA4B,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-context.d.ts","sourceRoot":"","sources":["../../src/common/llm-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,IAAI,IAAI,CAAC;IAE5B,kBAAkB,IAAI,IAAI,CAAC;IAE3B;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnF;;OAEG;IACH,gBAAgB,IAAI,IAAI,CAAC;IAEzB,4BAA4B,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAAC,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC,CAAC;IAExF;;;OAGG;IACH,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAE1D,gBAAgB;IAChB,SAAS,IAAI,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,eAAO,MAAM,sBAAsB,eAA8B,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;CACzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-context.js","sourceRoot":"","sources":["../../src/common/llm-context.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"llm-context.js","sourceRoot":"","sources":["../../src/common/llm-context.ts"],"names":[],"mappings":";;;AAkCa,QAAA,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-ai-native",
|
|
3
|
-
"version": "3.8.0",
|
|
3
|
+
"version": "3.8.1-next-1740452092.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src"
|
|
@@ -23,26 +23,26 @@
|
|
|
23
23
|
"@ai-sdk/deepseek": "^0.1.8",
|
|
24
24
|
"@ai-sdk/openai": "^1.1.9",
|
|
25
25
|
"@modelcontextprotocol/sdk": "^1.3.1",
|
|
26
|
-
"@opensumi/ide-addons": "3.8.0",
|
|
27
|
-
"@opensumi/ide-components": "3.8.0",
|
|
28
|
-
"@opensumi/ide-connection": "3.8.0",
|
|
29
|
-
"@opensumi/ide-core-common": "3.8.0",
|
|
30
|
-
"@opensumi/ide-core-node": "3.8.0",
|
|
31
|
-
"@opensumi/ide-debug": "3.8.0",
|
|
32
|
-
"@opensumi/ide-design": "3.8.0",
|
|
33
|
-
"@opensumi/ide-editor": "3.8.0",
|
|
34
|
-
"@opensumi/ide-file-search": "3.8.0",
|
|
35
|
-
"@opensumi/ide-file-service": "3.8.0",
|
|
36
|
-
"@opensumi/ide-main-layout": "3.8.0",
|
|
37
|
-
"@opensumi/ide-markers": "3.8.0",
|
|
38
|
-
"@opensumi/ide-monaco": "3.8.0",
|
|
39
|
-
"@opensumi/ide-overlay": "3.8.0",
|
|
40
|
-
"@opensumi/ide-preferences": "3.8.0",
|
|
41
|
-
"@opensumi/ide-search": "3.8.0",
|
|
42
|
-
"@opensumi/ide-terminal-next": "3.8.0",
|
|
43
|
-
"@opensumi/ide-theme": "3.8.0",
|
|
44
|
-
"@opensumi/ide-utils": "3.8.0",
|
|
45
|
-
"@opensumi/ide-workspace": "3.8.0",
|
|
26
|
+
"@opensumi/ide-addons": "3.8.1-next-1740452092.0",
|
|
27
|
+
"@opensumi/ide-components": "3.8.1-next-1740452092.0",
|
|
28
|
+
"@opensumi/ide-connection": "3.8.1-next-1740452092.0",
|
|
29
|
+
"@opensumi/ide-core-common": "3.8.1-next-1740452092.0",
|
|
30
|
+
"@opensumi/ide-core-node": "3.8.1-next-1740452092.0",
|
|
31
|
+
"@opensumi/ide-debug": "3.8.1-next-1740452092.0",
|
|
32
|
+
"@opensumi/ide-design": "3.8.1-next-1740452092.0",
|
|
33
|
+
"@opensumi/ide-editor": "3.8.1-next-1740452092.0",
|
|
34
|
+
"@opensumi/ide-file-search": "3.8.1-next-1740452092.0",
|
|
35
|
+
"@opensumi/ide-file-service": "3.8.1-next-1740452092.0",
|
|
36
|
+
"@opensumi/ide-main-layout": "3.8.1-next-1740452092.0",
|
|
37
|
+
"@opensumi/ide-markers": "3.8.1-next-1740452092.0",
|
|
38
|
+
"@opensumi/ide-monaco": "3.8.1-next-1740452092.0",
|
|
39
|
+
"@opensumi/ide-overlay": "3.8.1-next-1740452092.0",
|
|
40
|
+
"@opensumi/ide-preferences": "3.8.1-next-1740452092.0",
|
|
41
|
+
"@opensumi/ide-search": "3.8.1-next-1740452092.0",
|
|
42
|
+
"@opensumi/ide-terminal-next": "3.8.1-next-1740452092.0",
|
|
43
|
+
"@opensumi/ide-theme": "3.8.1-next-1740452092.0",
|
|
44
|
+
"@opensumi/ide-utils": "3.8.1-next-1740452092.0",
|
|
45
|
+
"@opensumi/ide-workspace": "3.8.1-next-1740452092.0",
|
|
46
46
|
"@xterm/xterm": "5.5.0",
|
|
47
47
|
"ai": "^4.1.21",
|
|
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.0"
|
|
60
|
+
"@opensumi/ide-core-browser": "3.8.1-next-1740452092.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "7141eb9be9489c0442a31e595cfff5d2e420e0de"
|
|
63
63
|
}
|
|
@@ -39,7 +39,7 @@ export const ChatContext = memo(() => {
|
|
|
39
39
|
50,
|
|
40
40
|
)((files) => {
|
|
41
41
|
if (files) {
|
|
42
|
-
updateAddedFiles(files);
|
|
42
|
+
updateAddedFiles([...files.attached]);
|
|
43
43
|
}
|
|
44
44
|
}, contextService);
|
|
45
45
|
|
|
@@ -57,7 +57,7 @@ export const ChatContext = memo(() => {
|
|
|
57
57
|
}, []);
|
|
58
58
|
|
|
59
59
|
const onDidDeselect = useCallback((uri: URI) => {
|
|
60
|
-
contextService.removeFileFromContext(uri);
|
|
60
|
+
contextService.removeFileFromContext(uri, true);
|
|
61
61
|
}, []);
|
|
62
62
|
|
|
63
63
|
const onDidClickFile = useCallback((uri: URI) => {
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import { EditorSelectionChangeEvent } from '@opensumi/ide-editor/lib/browser/types';
|
|
13
13
|
import { IMarkerService } from '@opensumi/ide-markers/lib/common/types';
|
|
14
14
|
|
|
15
|
-
import { FileContext, LLMContextService, SerializedContext } from '../../common/llm-context';
|
|
15
|
+
import { AttachFileContext, FileContext, LLMContextService, SerializedContext } from '../../common/llm-context';
|
|
16
16
|
|
|
17
17
|
@Injectable()
|
|
18
18
|
export class LLMContextServiceImpl extends WithEventBus implements LLMContextService {
|
|
@@ -27,40 +27,61 @@ export class LLMContextServiceImpl extends WithEventBus implements LLMContextSer
|
|
|
27
27
|
|
|
28
28
|
private isAutoCollecting = false;
|
|
29
29
|
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
private onDidContextFilesChangeEmitter = new Emitter<FileContext[]>();
|
|
30
|
+
private readonly maxAttachFilesLimit = 10;
|
|
31
|
+
private readonly maxViewFilesLimit = 20;
|
|
32
|
+
private readonly attachedFiles: FileContext[] = [];
|
|
33
|
+
private readonly recentlyViewFiles: FileContext[] = [];
|
|
34
|
+
private readonly onDidContextFilesChangeEmitter = new Emitter<{ viewed: FileContext[]; attached: FileContext[] }>();
|
|
35
35
|
onDidContextFilesChangeEvent = this.onDidContextFilesChangeEmitter.event;
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
private addFileToList(file: FileContext, list: FileContext[], maxLimit: number) {
|
|
38
|
+
const existingIndex = list.findIndex((f) => f.uri.toString() === file.uri.toString());
|
|
39
|
+
if (existingIndex > -1) {
|
|
40
|
+
list.splice(existingIndex, 1);
|
|
41
|
+
}
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
list.push(file);
|
|
44
|
+
if (list.length > maxLimit) {
|
|
45
|
+
list.shift();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
addFileToContext(uri: URI, selection?: [number, number], isManual = false): void {
|
|
50
|
+
if (!uri) {
|
|
51
|
+
return;
|
|
44
52
|
}
|
|
45
53
|
|
|
54
|
+
const file = { uri, selection };
|
|
55
|
+
const targetList = isManual ? this.attachedFiles : this.recentlyViewFiles;
|
|
56
|
+
const maxLimit = isManual ? this.maxAttachFilesLimit : this.maxViewFilesLimit;
|
|
57
|
+
|
|
58
|
+
this.addFileToList(file, targetList, maxLimit);
|
|
59
|
+
this.notifyContextChange();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private notifyContextChange(): void {
|
|
46
63
|
this.onDidContextFilesChangeEmitter.fire(this.getAllContextFiles());
|
|
47
64
|
}
|
|
48
65
|
|
|
49
66
|
cleanFileContext() {
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
67
|
+
this.attachedFiles.length = 0;
|
|
68
|
+
this.notifyContextChange();
|
|
52
69
|
}
|
|
53
70
|
|
|
54
71
|
private getAllContextFiles() {
|
|
55
|
-
return
|
|
72
|
+
return {
|
|
73
|
+
viewed: this.recentlyViewFiles,
|
|
74
|
+
attached: this.attachedFiles,
|
|
75
|
+
};
|
|
56
76
|
}
|
|
57
77
|
|
|
58
|
-
removeFileFromContext(uri: URI): void {
|
|
59
|
-
const
|
|
78
|
+
removeFileFromContext(uri: URI, isManual = false): void {
|
|
79
|
+
const targetList = isManual ? this.attachedFiles : this.recentlyViewFiles;
|
|
80
|
+
const index = targetList.findIndex((file) => file.uri.toString() === uri.toString());
|
|
60
81
|
if (index > -1) {
|
|
61
|
-
|
|
62
|
-
this.onDidContextFilesChangeEmitter.fire(this.getAllContextFiles());
|
|
82
|
+
targetList.splice(index, 1);
|
|
63
83
|
}
|
|
84
|
+
this.notifyContextChange();
|
|
64
85
|
}
|
|
65
86
|
|
|
66
87
|
startAutoCollection(): void {
|
|
@@ -78,8 +99,7 @@ export class LLMContextServiceImpl extends WithEventBus implements LLMContextSer
|
|
|
78
99
|
if (event.payload.uri.scheme !== 'file') {
|
|
79
100
|
return;
|
|
80
101
|
}
|
|
81
|
-
|
|
82
|
-
// this.addFileToContext(event.payload.uri);
|
|
102
|
+
this.addFileToContext(event.payload.uri, undefined, false);
|
|
83
103
|
}),
|
|
84
104
|
);
|
|
85
105
|
|
|
@@ -88,6 +108,8 @@ export class LLMContextServiceImpl extends WithEventBus implements LLMContextSer
|
|
|
88
108
|
if (event.payload.scheme !== 'file') {
|
|
89
109
|
return;
|
|
90
110
|
}
|
|
111
|
+
|
|
112
|
+
this.removeFileFromContext(event.payload, false);
|
|
91
113
|
}),
|
|
92
114
|
);
|
|
93
115
|
|
|
@@ -109,11 +131,12 @@ export class LLMContextServiceImpl extends WithEventBus implements LLMContextSer
|
|
|
109
131
|
].sort() as [number, number];
|
|
110
132
|
|
|
111
133
|
if (selection[0] === selection[1]) {
|
|
112
|
-
this.addFileToContext(event.payload.editorUri, undefined);
|
|
134
|
+
this.addFileToContext(event.payload.editorUri, undefined, false);
|
|
113
135
|
} else {
|
|
114
136
|
this.addFileToContext(
|
|
115
137
|
event.payload.editorUri,
|
|
116
138
|
selection.sort((a, b) => a - b),
|
|
139
|
+
false,
|
|
117
140
|
);
|
|
118
141
|
}
|
|
119
142
|
}
|
|
@@ -127,42 +150,51 @@ export class LLMContextServiceImpl extends WithEventBus implements LLMContextSer
|
|
|
127
150
|
|
|
128
151
|
serialize(): SerializedContext {
|
|
129
152
|
const files = this.getAllContextFiles();
|
|
130
|
-
const
|
|
131
|
-
.filter((v) => !v.selection)
|
|
132
|
-
.map((file) => {
|
|
133
|
-
const relativePath = URI.file(this.appConfig.workspaceDir).relative(file.uri);
|
|
134
|
-
if (relativePath) {
|
|
135
|
-
return relativePath.toString();
|
|
136
|
-
}
|
|
137
|
-
return file.uri.parent.toString();
|
|
138
|
-
})
|
|
139
|
-
.filter(Boolean);
|
|
140
|
-
|
|
141
|
-
const attachedFiles = files
|
|
142
|
-
.filter((v) => v.selection)
|
|
143
|
-
.map((file) => {
|
|
144
|
-
const ref = this.docModelManager.getModelReference(file.uri);
|
|
145
|
-
const content = ref!.instance.getText();
|
|
146
|
-
const lineErrors = this.markerService
|
|
147
|
-
.getManager()
|
|
148
|
-
.getMarkers({
|
|
149
|
-
resource: file.uri.toString(),
|
|
150
|
-
severities: MarkerSeverity.Error,
|
|
151
|
-
})
|
|
152
|
-
.map((marker) => marker.message);
|
|
153
|
-
|
|
154
|
-
return {
|
|
155
|
-
content,
|
|
156
|
-
lineErrors,
|
|
157
|
-
path: URI.file(this.appConfig.workspaceDir).relative(file.uri)!.toString(),
|
|
158
|
-
language: ref?.instance.languageId!,
|
|
159
|
-
};
|
|
160
|
-
})
|
|
161
|
-
.filter(Boolean);
|
|
153
|
+
const workspaceRoot = URI.file(this.appConfig.workspaceDir);
|
|
162
154
|
|
|
163
155
|
return {
|
|
164
|
-
recentlyViewFiles,
|
|
165
|
-
attachedFiles,
|
|
156
|
+
recentlyViewFiles: this.serializeRecentlyViewFiles(files.viewed, workspaceRoot),
|
|
157
|
+
attachedFiles: this.serializeAttachedFiles(files.attached, workspaceRoot),
|
|
166
158
|
};
|
|
167
159
|
}
|
|
160
|
+
|
|
161
|
+
private serializeRecentlyViewFiles(files: FileContext[], workspaceRoot: URI): string[] {
|
|
162
|
+
return files
|
|
163
|
+
.map((file) => workspaceRoot.relative(file.uri)?.toString() || file.uri.parent.toString())
|
|
164
|
+
.filter(Boolean);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private serializeAttachedFiles(files: FileContext[], workspaceRoot: URI): AttachFileContext[] {
|
|
168
|
+
return files
|
|
169
|
+
.map((file) => this.serializeAttachedFile(file, workspaceRoot))
|
|
170
|
+
.filter(Boolean) as unknown as AttachFileContext[];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private serializeAttachedFile(file: FileContext, workspaceRoot: URI) {
|
|
174
|
+
try {
|
|
175
|
+
const ref = this.docModelManager.getModelReference(file.uri);
|
|
176
|
+
if (!ref) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return {
|
|
181
|
+
content: ref.instance.getText(),
|
|
182
|
+
lineErrors: this.getFileErrors(file.uri),
|
|
183
|
+
path: workspaceRoot.relative(file.uri)!.toString(),
|
|
184
|
+
language: ref.instance.languageId!,
|
|
185
|
+
};
|
|
186
|
+
} catch (e) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private getFileErrors(uri: URI): string[] {
|
|
192
|
+
return this.markerService
|
|
193
|
+
.getManager()
|
|
194
|
+
.getMarkers({
|
|
195
|
+
resource: uri.toString(),
|
|
196
|
+
severities: MarkerSeverity.Error,
|
|
197
|
+
})
|
|
198
|
+
.map((marker) => marker.message);
|
|
199
|
+
}
|
|
168
200
|
}
|
|
@@ -15,13 +15,13 @@ export interface LLMContextService {
|
|
|
15
15
|
*/
|
|
16
16
|
cleanFileContext(): void;
|
|
17
17
|
|
|
18
|
-
onDidContextFilesChangeEvent: Event<FileContext[]>;
|
|
18
|
+
onDidContextFilesChangeEvent: Event<{ viewed: FileContext[]; attached: FileContext[] }>;
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* 从 context 中移除文件
|
|
22
22
|
* @param uri URI
|
|
23
23
|
*/
|
|
24
|
-
removeFileFromContext(uri: URI): void;
|
|
24
|
+
removeFileFromContext(uri: URI, isManual?: boolean): void;
|
|
25
25
|
|
|
26
26
|
/** 导出为可序列化格式 */
|
|
27
27
|
serialize(): SerializedContext;
|
|
@@ -30,12 +30,18 @@ export interface LLMContextService {
|
|
|
30
30
|
export interface FileContext {
|
|
31
31
|
uri: URI;
|
|
32
32
|
selection?: [number, number];
|
|
33
|
-
isManual: boolean;
|
|
34
33
|
}
|
|
35
34
|
|
|
36
35
|
export const LLMContextServiceToken = Symbol('LLMContextService');
|
|
37
36
|
|
|
37
|
+
export interface AttachFileContext {
|
|
38
|
+
content: string;
|
|
39
|
+
lineErrors: string[];
|
|
40
|
+
path: string;
|
|
41
|
+
language: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
38
44
|
export interface SerializedContext {
|
|
39
45
|
recentlyViewFiles: string[];
|
|
40
|
-
attachedFiles: Array<
|
|
46
|
+
attachedFiles: Array<AttachFileContext>;
|
|
41
47
|
}
|