@theia/ai-chat 1.75.0-next.8 → 1.75.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.
Files changed (100) hide show
  1. package/lib/browser/ai-chat-frontend-module.d.ts.map +1 -1
  2. package/lib/browser/ai-chat-frontend-module.js +4 -0
  3. package/lib/browser/ai-chat-frontend-module.js.map +1 -1
  4. package/lib/browser/change-set-file-element.d.ts +2 -0
  5. package/lib/browser/change-set-file-element.d.ts.map +1 -1
  6. package/lib/browser/change-set-file-element.js +10 -4
  7. package/lib/browser/change-set-file-element.js.map +1 -1
  8. package/lib/browser/change-set-file-service.js +1 -0
  9. package/lib/browser/change-set-file-service.js.map +1 -1
  10. package/lib/browser/chat-session-store-impl.js +1 -1
  11. package/lib/browser/chat-session-store-impl.js.map +1 -1
  12. package/lib/browser/chat-session-store-impl.spec.js +1 -2
  13. package/lib/browser/chat-session-store-impl.spec.js.map +1 -1
  14. package/lib/browser/chat-tool-request-service.js +1 -1
  15. package/lib/browser/chat-tool-request-service.js.map +1 -1
  16. package/lib/browser/file-chat-variable-contribution.js +1 -0
  17. package/lib/browser/file-chat-variable-contribution.js.map +1 -1
  18. package/lib/browser/file-read-tracker-impl.d.ts +55 -0
  19. package/lib/browser/file-read-tracker-impl.d.ts.map +1 -0
  20. package/lib/browser/file-read-tracker-impl.js +200 -0
  21. package/lib/browser/file-read-tracker-impl.js.map +1 -0
  22. package/lib/browser/file-read-tracker-impl.spec.d.ts +2 -0
  23. package/lib/browser/file-read-tracker-impl.spec.d.ts.map +1 -0
  24. package/lib/browser/file-read-tracker-impl.spec.js +251 -0
  25. package/lib/browser/file-read-tracker-impl.spec.js.map +1 -0
  26. package/lib/common/ai-chat-preferences.d.ts.map +1 -1
  27. package/lib/common/ai-chat-preferences.js +4 -0
  28. package/lib/common/ai-chat-preferences.js.map +1 -1
  29. package/lib/common/chat-agent-service.js +1 -0
  30. package/lib/common/chat-agent-service.js.map +1 -1
  31. package/lib/common/chat-agents.d.ts +8 -1
  32. package/lib/common/chat-agents.d.ts.map +1 -1
  33. package/lib/common/chat-agents.js +31 -2
  34. package/lib/common/chat-agents.js.map +1 -1
  35. package/lib/common/chat-agents.spec.js +51 -0
  36. package/lib/common/chat-agents.spec.js.map +1 -1
  37. package/lib/common/chat-content-deserializer.js +1 -1
  38. package/lib/common/chat-content-deserializer.js.map +1 -1
  39. package/lib/common/chat-request-parser.d.ts +1 -1
  40. package/lib/common/chat-request-parser.d.ts.map +1 -1
  41. package/lib/common/chat-request-parser.js +5 -2
  42. package/lib/common/chat-request-parser.js.map +1 -1
  43. package/lib/common/chat-request-parser.spec.js +32 -1
  44. package/lib/common/chat-request-parser.spec.js.map +1 -1
  45. package/lib/common/chat-service-session-restore.spec.d.ts +2 -0
  46. package/lib/common/chat-service-session-restore.spec.d.ts.map +1 -0
  47. package/lib/common/chat-service-session-restore.spec.js +165 -0
  48. package/lib/common/chat-service-session-restore.spec.js.map +1 -0
  49. package/lib/common/chat-service.d.ts +4 -1
  50. package/lib/common/chat-service.d.ts.map +1 -1
  51. package/lib/common/chat-service.js +17 -0
  52. package/lib/common/chat-service.js.map +1 -1
  53. package/lib/common/chat-session-summary-agent.d.ts +2 -0
  54. package/lib/common/chat-session-summary-agent.d.ts.map +1 -1
  55. package/lib/common/chat-session-summary-agent.js +5 -0
  56. package/lib/common/chat-session-summary-agent.js.map +1 -1
  57. package/lib/common/chat-tool-preferences.d.ts +2 -0
  58. package/lib/common/chat-tool-preferences.d.ts.map +1 -1
  59. package/lib/common/chat-tool-preferences.js +7 -7
  60. package/lib/common/chat-tool-preferences.js.map +1 -1
  61. package/lib/common/context-summary-variable.d.ts.map +1 -1
  62. package/lib/common/context-summary-variable.js +1 -1
  63. package/lib/common/context-summary-variable.js.map +1 -1
  64. package/lib/common/custom-chat-agent.d.ts +2 -0
  65. package/lib/common/custom-chat-agent.d.ts.map +1 -1
  66. package/lib/common/custom-chat-agent.js +6 -0
  67. package/lib/common/custom-chat-agent.js.map +1 -1
  68. package/lib/common/file-read-tracker.d.ts +12 -0
  69. package/lib/common/file-read-tracker.d.ts.map +1 -0
  70. package/lib/common/file-read-tracker.js +20 -0
  71. package/lib/common/file-read-tracker.js.map +1 -0
  72. package/lib/common/index.d.ts +1 -0
  73. package/lib/common/index.d.ts.map +1 -1
  74. package/lib/common/index.js +1 -0
  75. package/lib/common/index.js.map +1 -1
  76. package/package.json +11 -11
  77. package/src/browser/ai-chat-frontend-module.ts +5 -0
  78. package/src/browser/change-set-file-element.ts +8 -5
  79. package/src/browser/change-set-file-service.ts +2 -2
  80. package/src/browser/chat-session-store-impl.spec.ts +2 -3
  81. package/src/browser/chat-session-store-impl.ts +1 -1
  82. package/src/browser/chat-tool-request-service.ts +1 -1
  83. package/src/browser/file-chat-variable-contribution.ts +2 -2
  84. package/src/browser/file-read-tracker-impl.spec.ts +318 -0
  85. package/src/browser/file-read-tracker-impl.ts +208 -0
  86. package/src/common/ai-chat-preferences.ts +4 -0
  87. package/src/common/chat-agent-service.ts +1 -1
  88. package/src/common/chat-agents.spec.ts +72 -0
  89. package/src/common/chat-agents.ts +31 -3
  90. package/src/common/chat-content-deserializer.ts +1 -1
  91. package/src/common/chat-request-parser.spec.ts +39 -1
  92. package/src/common/chat-request-parser.ts +7 -4
  93. package/src/common/chat-service-session-restore.spec.ts +190 -0
  94. package/src/common/chat-service.ts +20 -3
  95. package/src/common/chat-session-summary-agent.ts +6 -2
  96. package/src/common/chat-tool-preferences.ts +2 -2
  97. package/src/common/context-summary-variable.ts +2 -1
  98. package/src/common/custom-chat-agent.ts +5 -1
  99. package/src/common/file-read-tracker.ts +29 -0
  100. package/src/common/index.ts +1 -0
@@ -0,0 +1,55 @@
1
+ import { Event, URI } from '@theia/core';
2
+ import { FileService } from '@theia/filesystem/lib/browser/file-service';
3
+ import { FileChangesEvent } from '@theia/filesystem/lib/common/files';
4
+ import { MonacoWorkspace } from '@theia/monaco/lib/browser/monaco-workspace';
5
+ import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service';
6
+ import { FileReadTracker } from '../common/file-read-tracker';
7
+ /** The content an agent saw, and whether anything has since signalled a possible change. */
8
+ interface TrackedFile {
9
+ /** `undefined` until the read determining it returns, so that it matches no content. */
10
+ seenHash?: number;
11
+ maybeStale: boolean;
12
+ }
13
+ export declare class FileReadTrackerImpl implements FileReadTracker {
14
+ protected readonly fileService: FileService;
15
+ protected readonly monacoWorkspace: MonacoWorkspace;
16
+ protected readonly workspaceService: WorkspaceService;
17
+ /** Session id -> tracked file uri -> state. Both levels are insertion ordered and bounded. */
18
+ protected readonly sessions: Map<string, Map<string, TrackedFile>>;
19
+ /**
20
+ * Arbitrary bounds. Sessions are never disposed here, as that would mean depending on the `ChatService`
21
+ * that owns the agents using this service, so the least recently used are evicted; that only loses a notice.
22
+ */
23
+ protected readonly maxSessions: number;
24
+ protected readonly maxFilesPerSession: number;
25
+ /** A file grown past this is not read to compare, so a flagged one stays reported as changed. The read tools hand an agent far less. */
26
+ protected readonly maxComparedFileSize: number;
27
+ /** Only flags entries; reading and hashing happens in {@link isStale} and {@link getChangedFiles}. */
28
+ protected init(): void;
29
+ protected get fileChanges(): Event<FileChangesEvent>;
30
+ /** Uris of documents whose unsaved content changed, which never reaches the file system. */
31
+ protected get documentChanges(): Event<string>;
32
+ recordRead(sessionId: string, uri: URI, content?: string): Promise<void>;
33
+ isStale(sessionId: string, uri: URI): Promise<boolean>;
34
+ getChangedFiles(sessionId: string): Promise<string[]>;
35
+ /**
36
+ * Flags the tracked files the event touched, by uri lookup rather than {@link FileChangesEvent.contains},
37
+ * which scans the whole change list. A deleted parent folder is therefore only noticed on the next read.
38
+ */
39
+ protected handleFileChanges(event: FileChangesEvent): void;
40
+ /** Compares a flagged file against what the agent saw, clearing the flag when the contents match again. */
41
+ protected recheck(files: Map<string, TrackedFile>, key: string, tracked: TrackedFile): Promise<'unchanged' | 'changed' | 'gone'>;
42
+ protected isFileNotFound(error: unknown): boolean;
43
+ /** `undefined` when the content cannot be read at all. */
44
+ protected resolveContent(uri: URI): Promise<string | undefined>;
45
+ /** The content the agent would be handed now, preferring the open editor document as `getFileContent` does. */
46
+ protected readCurrentContent(uri: URI): Promise<string>;
47
+ /** A path the agent can pass back to `getFileContent`, which takes `<rootName>/<relativePath>` as well as a uri. */
48
+ protected getLabel(uri: URI): string;
49
+ protected invalidate(uriString: string): void;
50
+ protected touchSession(sessionId: string): Map<string, TrackedFile>;
51
+ /** Drops entries from the front, which insertion order makes the least recently used ones. */
52
+ protected evictOverflow(entries: Map<string, unknown>, limit: number): void;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=file-read-tracker-impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-read-tracker-impl.d.ts","sourceRoot":"","sources":["../../src/browser/file-read-tracker-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAA2C,MAAM,oCAAoC,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,4FAA4F;AAC5F,UAAU,WAAW;IACjB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,qBACa,mBAAoB,YAAW,eAAe;IAGvD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAG5C,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAGpD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEtD,8FAA8F;IAC9F,SAAS,CAAC,QAAQ,CAAC,QAAQ,wCAA+C;IAE1E;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAM;IAC5C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAO;IAEpD,wIAAwI;IACxI,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAmB;IAEjE,sGAAsG;IAEtG,SAAS,CAAC,IAAI,IAAI,IAAI;IAKtB,SAAS,KAAK,WAAW,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAEnD;IAED,4FAA4F;IAC5F,SAAS,KAAK,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,CAE7C;IAEK,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAatD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW3D;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAM1D,2GAA2G;cAC3F,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAkBtI,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIjD,0DAA0D;cAC1C,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQrE,+GAA+G;cAC/F,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ7D,oHAAoH;IACpH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;IAYpC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAS7C,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IASnE,8FAA8F;IAC9F,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAQ9E"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 Ehab Younes.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.FileReadTrackerImpl = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const core_1 = require("@theia/core");
21
+ const hash_1 = require("@theia/core/lib/common/hash");
22
+ const inversify_1 = require("@theia/core/shared/inversify");
23
+ const file_service_1 = require("@theia/filesystem/lib/browser/file-service");
24
+ const files_1 = require("@theia/filesystem/lib/common/files");
25
+ const monaco_workspace_1 = require("@theia/monaco/lib/browser/monaco-workspace");
26
+ const workspace_service_1 = require("@theia/workspace/lib/browser/workspace-service");
27
+ let FileReadTrackerImpl = class FileReadTrackerImpl {
28
+ constructor() {
29
+ /** Session id -> tracked file uri -> state. Both levels are insertion ordered and bounded. */
30
+ this.sessions = new Map();
31
+ /**
32
+ * Arbitrary bounds. Sessions are never disposed here, as that would mean depending on the `ChatService`
33
+ * that owns the agents using this service, so the least recently used are evicted; that only loses a notice.
34
+ */
35
+ this.maxSessions = 32;
36
+ this.maxFilesPerSession = 200;
37
+ /** A file grown past this is not read to compare, so a flagged one stays reported as changed. The read tools hand an agent far less. */
38
+ this.maxComparedFileSize = 4 * 1024 * 1024;
39
+ }
40
+ /** Only flags entries; reading and hashing happens in {@link isStale} and {@link getChangedFiles}. */
41
+ init() {
42
+ this.fileChanges(event => this.handleFileChanges(event));
43
+ this.documentChanges(uri => this.invalidate(uri));
44
+ }
45
+ get fileChanges() {
46
+ return this.fileService.onDidFilesChange;
47
+ }
48
+ /** Uris of documents whose unsaved content changed, which never reaches the file system. */
49
+ get documentChanges() {
50
+ return core_1.Event.map(this.monacoWorkspace.onDidChangeTextDocument, event => event.model.uri);
51
+ }
52
+ async recordRead(sessionId, uri, content) {
53
+ const key = uri.toString();
54
+ const files = this.touchSession(sessionId);
55
+ // Re-insert to move the key last, so eviction drops the least recently used.
56
+ files.delete(key);
57
+ // Tracked before the read, so a change arriving during it flags this entry instead of being overwritten.
58
+ const tracked = { maybeStale: false };
59
+ files.set(key, tracked);
60
+ this.evictOverflow(files, this.maxFilesPerSession);
61
+ const current = content ?? await this.resolveContent(uri);
62
+ if (current === undefined) {
63
+ if (files.get(key) === tracked) { // a later read may own the entry by now
64
+ files.delete(key);
65
+ }
66
+ return;
67
+ }
68
+ tracked.seenHash = (0, hash_1.hash)(current);
69
+ }
70
+ async isStale(sessionId, uri) {
71
+ const files = this.sessions.get(sessionId);
72
+ if (!files) {
73
+ return false;
74
+ }
75
+ const key = uri.toString();
76
+ const tracked = files.get(key);
77
+ if (!tracked?.maybeStale) {
78
+ return false;
79
+ }
80
+ return await this.recheck(files, key, tracked) === 'changed';
81
+ }
82
+ async getChangedFiles(sessionId) {
83
+ const files = this.sessions.get(sessionId);
84
+ if (!files) {
85
+ return [];
86
+ }
87
+ const labels = await Promise.all([...files]
88
+ .filter(([, tracked]) => tracked.maybeStale)
89
+ .map(async ([key, tracked]) => await this.recheck(files, key, tracked) === 'unchanged' ? undefined : this.getLabel(new core_1.URI(key))));
90
+ return labels.filter((label) => label !== undefined);
91
+ }
92
+ /**
93
+ * Flags the tracked files the event touched, by uri lookup rather than {@link FileChangesEvent.contains},
94
+ * which scans the whole change list. A deleted parent folder is therefore only noticed on the next read.
95
+ */
96
+ handleFileChanges(event) {
97
+ for (const change of event.changes) {
98
+ this.invalidate(change.resource.toString());
99
+ }
100
+ }
101
+ /** Compares a flagged file against what the agent saw, clearing the flag when the contents match again. */
102
+ async recheck(files, key, tracked) {
103
+ let current;
104
+ try {
105
+ current = await this.readCurrentContent(new core_1.URI(key));
106
+ }
107
+ catch (error) {
108
+ if (this.isFileNotFound(error)) {
109
+ files.delete(key);
110
+ return 'gone';
111
+ }
112
+ return 'changed';
113
+ }
114
+ if ((0, hash_1.hash)(current) === tracked.seenHash) {
115
+ tracked.maybeStale = false;
116
+ return 'unchanged';
117
+ }
118
+ return 'changed';
119
+ }
120
+ isFileNotFound(error) {
121
+ return error instanceof files_1.FileOperationError && error.fileOperationResult === 1 /* FileOperationResult.FILE_NOT_FOUND */;
122
+ }
123
+ /** `undefined` when the content cannot be read at all. */
124
+ async resolveContent(uri) {
125
+ try {
126
+ return await this.readCurrentContent(uri);
127
+ }
128
+ catch {
129
+ return undefined;
130
+ }
131
+ }
132
+ /** The content the agent would be handed now, preferring the open editor document as `getFileContent` does. */
133
+ async readCurrentContent(uri) {
134
+ const document = this.monacoWorkspace.getTextDocument(uri.toString());
135
+ if (document) {
136
+ return document.getText();
137
+ }
138
+ return (await this.fileService.read(uri, { limits: { size: this.maxComparedFileSize } })).value;
139
+ }
140
+ /** A path the agent can pass back to `getFileContent`, which takes `<rootName>/<relativePath>` as well as a uri. */
141
+ getLabel(uri) {
142
+ const roots = this.workspaceService.tryGetRoots().map(root => root.resource);
143
+ for (const root of roots) {
144
+ const relativePath = root.relative(uri)?.toString();
145
+ // A basename shared with another root would resolve to that other root.
146
+ if (relativePath && !roots.some(other => other.path.base === root.path.base && !other.isEqual(root))) {
147
+ return `${root.path.base}/${relativePath}`;
148
+ }
149
+ }
150
+ return uri.toString();
151
+ }
152
+ invalidate(uriString) {
153
+ for (const files of this.sessions.values()) {
154
+ const tracked = files.get(uriString);
155
+ if (tracked) {
156
+ tracked.maybeStale = true;
157
+ }
158
+ }
159
+ }
160
+ touchSession(sessionId) {
161
+ const files = this.sessions.get(sessionId) ?? new Map();
162
+ // Re-insert to move the key last, so eviction drops the least recently used.
163
+ this.sessions.delete(sessionId);
164
+ this.sessions.set(sessionId, files);
165
+ this.evictOverflow(this.sessions, this.maxSessions);
166
+ return files;
167
+ }
168
+ /** Drops entries from the front, which insertion order makes the least recently used ones. */
169
+ evictOverflow(entries, limit) {
170
+ for (const key of entries.keys()) {
171
+ if (entries.size <= limit) {
172
+ return;
173
+ }
174
+ entries.delete(key);
175
+ }
176
+ }
177
+ };
178
+ exports.FileReadTrackerImpl = FileReadTrackerImpl;
179
+ tslib_1.__decorate([
180
+ (0, inversify_1.inject)(file_service_1.FileService),
181
+ tslib_1.__metadata("design:type", file_service_1.FileService)
182
+ ], FileReadTrackerImpl.prototype, "fileService", void 0);
183
+ tslib_1.__decorate([
184
+ (0, inversify_1.inject)(monaco_workspace_1.MonacoWorkspace),
185
+ tslib_1.__metadata("design:type", monaco_workspace_1.MonacoWorkspace)
186
+ ], FileReadTrackerImpl.prototype, "monacoWorkspace", void 0);
187
+ tslib_1.__decorate([
188
+ (0, inversify_1.inject)(workspace_service_1.WorkspaceService),
189
+ tslib_1.__metadata("design:type", workspace_service_1.WorkspaceService)
190
+ ], FileReadTrackerImpl.prototype, "workspaceService", void 0);
191
+ tslib_1.__decorate([
192
+ (0, inversify_1.postConstruct)(),
193
+ tslib_1.__metadata("design:type", Function),
194
+ tslib_1.__metadata("design:paramtypes", []),
195
+ tslib_1.__metadata("design:returntype", void 0)
196
+ ], FileReadTrackerImpl.prototype, "init", null);
197
+ exports.FileReadTrackerImpl = FileReadTrackerImpl = tslib_1.__decorate([
198
+ (0, inversify_1.injectable)()
199
+ ], FileReadTrackerImpl);
200
+ //# sourceMappingURL=file-read-tracker-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-read-tracker-impl.js","sourceRoot":"","sources":["../../src/browser/file-read-tracker-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=file-read-tracker-impl.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-read-tracker-impl.spec.d.ts","sourceRoot":"","sources":["../../src/browser/file-read-tracker-impl.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 Ehab Younes.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
19
+ const disableJSDOM = (0, jsdom_1.enableJSDOM)();
20
+ const frontend_application_config_provider_1 = require("@theia/core/lib/browser/frontend-application-config-provider");
21
+ frontend_application_config_provider_1.FrontendApplicationConfigProvider.set({});
22
+ const core_1 = require("@theia/core");
23
+ const buffer_1 = require("@theia/core/lib/common/buffer");
24
+ const files_1 = require("@theia/filesystem/lib/common/files");
25
+ const chai_1 = require("chai");
26
+ const file_read_tracker_impl_1 = require("./file-read-tracker-impl");
27
+ disableJSDOM();
28
+ const SESSION = 'session-1';
29
+ const OTHER_SESSION = 'session-2';
30
+ const ROOT = new core_1.URI('file:///workspace');
31
+ const FILE = ROOT.resolve('a.ts');
32
+ /** As `resolveRelativePath` expects it back: root name plus path within that root. */
33
+ const FILE_LABEL = 'workspace/a.ts';
34
+ /** Drives the tracker against in-memory content: `contents` stands in for the files on disk. */
35
+ class TestFileReadTracker extends file_read_tracker_impl_1.FileReadTrackerImpl {
36
+ constructor() {
37
+ super();
38
+ this.contents = new Map([[FILE.toString(), 'original']]);
39
+ /** Makes reading fail as a file too large to compare would, rather than as a missing one. */
40
+ this.readFails = false;
41
+ /** The encoding the files are stored in: `read` decodes with it, `readFile` hands back their bytes. */
42
+ this.encoding = 'utf8';
43
+ this.maxFilesPerSession = 2;
44
+ /** The workspace roots labels are built against. */
45
+ this.roots = [ROOT];
46
+ this.workspaceService = {
47
+ tryGetRoots: () => this.roots.map(resource => ({ resource }))
48
+ };
49
+ this.monacoWorkspace = { getTextDocument: () => undefined };
50
+ /** Both decoders, so that a test can tell which one the tracker reads through. */
51
+ this.fileService = {
52
+ read: async (uri) => ({ value: this.contentOf(uri) }),
53
+ readFile: async (uri) => ({ value: buffer_1.BinaryBuffer.wrap(Buffer.from(this.contentOf(uri), this.encoding)) })
54
+ };
55
+ this.fileChangeEmitter = new core_1.Emitter();
56
+ this.documentChangeEmitter = new core_1.Emitter();
57
+ // `@postConstruct` only runs on container resolution, so wire the listeners here.
58
+ this.init();
59
+ }
60
+ get fileChanges() {
61
+ return this.fileChangeEmitter.event;
62
+ }
63
+ get documentChanges() {
64
+ return this.documentChangeEmitter.event;
65
+ }
66
+ /** Stands in for the file on disk, failing the way the file service would. */
67
+ contentOf(uri) {
68
+ if (this.readFails) {
69
+ throw new files_1.FileOperationError(`${uri} is too large`, 7 /* FileOperationResult.FILE_TOO_LARGE */);
70
+ }
71
+ const content = this.contents.get(uri.toString());
72
+ if (content === undefined) {
73
+ throw new files_1.FileOperationError(`${uri} does not exist`, 1 /* FileOperationResult.FILE_NOT_FOUND */);
74
+ }
75
+ const during = this.duringNextRead;
76
+ this.duringNextRead = undefined;
77
+ during?.();
78
+ return content;
79
+ }
80
+ /** Records what the agent saw, as `getFileContent` does. */
81
+ agentRead(uri = FILE, sessionId = SESSION) {
82
+ return this.recordRead(sessionId, uri, this.contents.get(uri.toString()));
83
+ }
84
+ /** Changes content behind the agent's back and notifies the tracker, as the workspace would. */
85
+ somebodyElseChanges(content, uri = FILE) {
86
+ this.contents.set(uri.toString(), content);
87
+ this.fileChanged(uri);
88
+ }
89
+ somebodyElseDeletes(uri = FILE) {
90
+ this.contents.delete(uri.toString());
91
+ this.fileChanged(uri);
92
+ }
93
+ fileChanged(...uris) {
94
+ this.fileChangeEmitter.fire(new files_1.FileChangesEvent(uris.map(resource => ({ resource, type: 0 /* FileChangeType.UPDATED */ }))));
95
+ }
96
+ documentChanged(uri = FILE) {
97
+ this.documentChangeEmitter.fire(uri.toString());
98
+ }
99
+ }
100
+ describe('FileReadTrackerImpl', () => {
101
+ it('reports a file that changed after it was read', async () => {
102
+ const tracker = new TestFileReadTracker();
103
+ await tracker.agentRead();
104
+ tracker.somebodyElseChanges('changed');
105
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal([FILE_LABEL]);
106
+ (0, chai_1.expect)(await tracker.isStale(SESSION, FILE)).to.be.true;
107
+ });
108
+ it('reports a file whose unsaved document changed', async () => {
109
+ const tracker = new TestFileReadTracker();
110
+ await tracker.agentRead();
111
+ tracker.contents.set(FILE.toString(), 'the user typed something');
112
+ tracker.documentChanged();
113
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal([FILE_LABEL]);
114
+ });
115
+ it('keeps reporting a change until the file is read again', async () => {
116
+ const tracker = new TestFileReadTracker();
117
+ await tracker.agentRead();
118
+ tracker.somebodyElseChanges('changed');
119
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.have.lengthOf(1);
120
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.have.lengthOf(1);
121
+ await tracker.agentRead();
122
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.be.empty;
123
+ (0, chai_1.expect)(await tracker.isStale(SESSION, FILE)).to.be.false;
124
+ });
125
+ it('ignores files that were never read', async () => {
126
+ const tracker = new TestFileReadTracker();
127
+ tracker.somebodyElseChanges('changed');
128
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.be.empty;
129
+ (0, chai_1.expect)(await tracker.isStale(SESSION, FILE)).to.be.false;
130
+ });
131
+ it('ignores a change that left the content untouched', async () => {
132
+ const tracker = new TestFileReadTracker();
133
+ await tracker.agentRead();
134
+ // e.g. saving an unmodified document, or a formatter that had nothing to do
135
+ tracker.fileChanged(FILE);
136
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.be.empty;
137
+ (0, chai_1.expect)(await tracker.isStale(SESSION, FILE)).to.be.false;
138
+ });
139
+ it('stops reporting once an edit is undone', async () => {
140
+ const tracker = new TestFileReadTracker();
141
+ await tracker.agentRead();
142
+ tracker.somebodyElseChanges('changed');
143
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.have.lengthOf(1);
144
+ tracker.somebodyElseChanges('original');
145
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.be.empty;
146
+ });
147
+ it('reports a deleted file once, then forgets it and allows writing it', async () => {
148
+ const tracker = new TestFileReadTracker();
149
+ await tracker.agentRead();
150
+ tracker.somebodyElseDeletes();
151
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal([FILE_LABEL]);
152
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.be.empty;
153
+ (0, chai_1.expect)(await tracker.isStale(SESSION, FILE)).to.be.false;
154
+ });
155
+ it('forgets a file that no longer exists when it is recorded', async () => {
156
+ const tracker = new TestFileReadTracker();
157
+ await tracker.agentRead();
158
+ tracker.somebodyElseDeletes();
159
+ // as the change set element does after applying a deletion
160
+ await tracker.recordRead(SESSION, FILE);
161
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.be.empty;
162
+ });
163
+ it('keeps reporting a file it cannot read, and does not allow overwriting it', async () => {
164
+ const tracker = new TestFileReadTracker();
165
+ await tracker.agentRead();
166
+ tracker.fileChanged(FILE);
167
+ tracker.readFails = true;
168
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal([FILE_LABEL]);
169
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal([FILE_LABEL]);
170
+ (0, chai_1.expect)(await tracker.isStale(SESSION, FILE)).to.be.true;
171
+ });
172
+ it('reports a change made while the read recording it was still in flight', async () => {
173
+ const tracker = new TestFileReadTracker();
174
+ tracker.duringNextRead = () => {
175
+ tracker.contents.set(FILE.toString(), 'the user typed something');
176
+ tracker.documentChanged();
177
+ };
178
+ // no content handed in, so the tracker reads it itself
179
+ await tracker.recordRead(SESSION, FILE);
180
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal([FILE_LABEL]);
181
+ (0, chai_1.expect)(await tracker.isStale(SESSION, FILE)).to.be.true;
182
+ });
183
+ it('records nothing when the content cannot be read', async () => {
184
+ const tracker = new TestFileReadTracker();
185
+ tracker.readFails = true;
186
+ await tracker.recordRead(SESSION, FILE);
187
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.be.empty;
188
+ });
189
+ it('treats a write by another session as an external change', async () => {
190
+ const tracker = new TestFileReadTracker();
191
+ await tracker.agentRead();
192
+ await tracker.agentRead(FILE, OTHER_SESSION);
193
+ tracker.somebodyElseChanges('written by the other session');
194
+ await tracker.recordRead(OTHER_SESSION, FILE);
195
+ (0, chai_1.expect)(await tracker.getChangedFiles(OTHER_SESSION)).to.be.empty;
196
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal([FILE_LABEL]);
197
+ });
198
+ it('compares a file the read tools decode as UTF-16, not as UTF-8', async () => {
199
+ const tracker = new TestFileReadTracker();
200
+ tracker.encoding = 'utf16le'; // as a Windows-written `.ps1` is stored
201
+ await tracker.agentRead();
202
+ tracker.fileChanged(FILE);
203
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.be.empty;
204
+ });
205
+ describe('naming changed files', () => {
206
+ /** How the notice names `file` after it changed, in a workspace with the given extra roots. */
207
+ async function nameOf(file, ...extraRoots) {
208
+ const tracker = new TestFileReadTracker();
209
+ tracker.roots.push(...extraRoots);
210
+ tracker.contents.set(file.toString(), 'original');
211
+ await tracker.agentRead(file);
212
+ tracker.somebodyElseChanges('changed', file);
213
+ return tracker.getChangedFiles(SESSION);
214
+ }
215
+ it('names a file by the root it is in', async () => {
216
+ (0, chai_1.expect)(await nameOf(new core_1.URI('file:///elsewhere/lib/b.ts'), new core_1.URI('file:///elsewhere/lib'))).to.deep.equal(['lib/b.ts']);
217
+ });
218
+ it('names a file by its root when that root is listed twice', async () => {
219
+ (0, chai_1.expect)(await nameOf(FILE, ROOT)).to.deep.equal([FILE_LABEL]);
220
+ });
221
+ it('names a file by uri when two roots share the name it would use', async () => {
222
+ (0, chai_1.expect)(await nameOf(FILE, new core_1.URI('file:///elsewhere/workspace'))).to.deep.equal([FILE.toString()]);
223
+ });
224
+ it('names a file by uri when it is outside every root', async () => {
225
+ (0, chai_1.expect)(await nameOf(new core_1.URI('file:///etc/hosts'))).to.deep.equal(['file:///etc/hosts']);
226
+ });
227
+ });
228
+ it('evicts the least recently recorded file beyond the per-session limit', async () => {
229
+ const tracker = new TestFileReadTracker();
230
+ const files = ['a', 'b', 'c'].map(name => new core_1.URI(`file:///workspace/${name}.ts`));
231
+ for (const uri of files) {
232
+ tracker.contents.set(uri.toString(), 'original');
233
+ await tracker.agentRead(uri);
234
+ }
235
+ files.forEach(uri => tracker.somebodyElseChanges('changed', uri));
236
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal(['workspace/b.ts', 'workspace/c.ts']);
237
+ });
238
+ it('keeps a re-read file tracked, evicting the one untouched for longest', async () => {
239
+ const tracker = new TestFileReadTracker();
240
+ const [a, b, c] = ['a', 'b', 'c'].map(name => new core_1.URI(`file:///workspace/${name}.ts`));
241
+ [a, b, c].forEach(uri => tracker.contents.set(uri.toString(), 'original'));
242
+ await tracker.agentRead(a);
243
+ await tracker.agentRead(b);
244
+ await tracker.agentRead(a);
245
+ await tracker.agentRead(c);
246
+ tracker.somebodyElseChanges('changed', a);
247
+ tracker.somebodyElseChanges('changed', b);
248
+ (0, chai_1.expect)(await tracker.getChangedFiles(SESSION)).to.deep.equal(['workspace/a.ts']);
249
+ });
250
+ });
251
+ //# sourceMappingURL=file-read-tracker-impl.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-read-tracker-impl.spec.js","sourceRoot":"","sources":["../../src/browser/file-read-tracker-impl.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-chat-preferences.d.ts","sourceRoot":"","sources":["../../src/common/ai-chat-preferences.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAO,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,eAAO,MAAM,mBAAmB,kCAAkC,CAAC;AACnE,eAAO,MAAM,6BAA6B,4CAA4C,CAAC;AACvF,eAAO,MAAM,4BAA4B,2CAA2C,CAAC;AACrF,eAAO,MAAM,oBAAoB,yCAAyC,CAAC;AAC3E,eAAO,MAAM,4BAA4B,2CAA2C,CAAC;AAErF,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEzD,eAAO,MAAM,iBAAiB,EAAE,gBA2D/B,CAAC"}
1
+ {"version":3,"file":"ai-chat-preferences.d.ts","sourceRoot":"","sources":["../../src/common/ai-chat-preferences.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAO,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,eAAO,MAAM,mBAAmB,kCAAkC,CAAC;AACnE,eAAO,MAAM,6BAA6B,4CAA4C,CAAC;AACvF,eAAO,MAAM,4BAA4B,2CAA2C,CAAC;AACrF,eAAO,MAAM,oBAAoB,yCAAyC,CAAC;AAC3E,eAAO,MAAM,4BAA4B,2CAA2C,CAAC;AAErF,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEzD,eAAO,MAAM,iBAAiB,EAAE,gBA+D/B,CAAC"}
@@ -65,6 +65,10 @@ exports.aiChatPreferences = {
65
65
  [exports.SESSION_STORAGE_PREF]: {
66
66
  type: 'string',
67
67
  enum: ['workspace', 'global'],
68
+ enumItemLabels: [
69
+ core_1.nls.localizeByDefault('Workspace'),
70
+ core_1.nls.localizeByDefault('Global')
71
+ ],
68
72
  enumDescriptions: [
69
73
  core_1.nls.localize('theia/ai/chat/sessionStorageScope/workspace', 'Store chat sessions in workspace-specific metadata storage. Sessions are associated with the workspace but stored outside the workspace directory.'),
70
74
  core_1.nls.localize('theia/ai/chat/sessionStorageScope/global', 'Store chat sessions in a single store, shared across all workspaces.')
@@ -1 +1 @@
1
- {"version":3,"file":"ai-chat-preferences.js","sourceRoot":"","sources":["../../src/common/ai-chat-preferences.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,uFAA0F;AAC1F,sCAAoD;AAEvC,QAAA,uBAAuB,GAAG,mCAAmC,CAAC;AAC9D,QAAA,mBAAmB,GAAG,+BAA+B,CAAC;AACtD,QAAA,6BAA6B,GAAG,yCAAyC,CAAC;AAC1E,QAAA,4BAA4B,GAAG,wCAAwC,CAAC;AACxE,QAAA,oBAAoB,GAAG,sCAAsC,CAAC;AAC9D,QAAA,4BAA4B,GAAG,wCAAwC,CAAC;AAIxE,QAAA,iBAAiB,GAAqB;IAC/C,UAAU,EAAE;QACR,CAAC,+BAAuB,CAAC,EAAE;YACvB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,wCAAwC,EAC9D;6EAC6D,CAAC;YAClE,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,2BAAmB,CAAC,EAAE;YACnB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,wCAAwC,EAC9D;yDACyC,CAAC;YAC9C,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,qCAA6B,CAAC,EAAE;YAC7B,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,kDAAkD,EACxE,0JAA0J,CAAC;YAC/J,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,oCAA4B,CAAC,EAAE;YAC5B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,iDAAiD,EACvE,+GAA+G;gBAC/G,oHAAoH,CAAC;YACzH,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,CAAC,CAAC;YACX,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,oCAA4B,CAAC,EAAE;YAC5B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,iDAAiD,EACvE,8GAA8G;gBAC9G,oHAAoH;gBACpH,2GAA2G,CAAC;YAChH,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,4BAAoB,CAAC,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAiC;YAC7D,gBAAgB,EAAE;gBACd,UAAG,CAAC,QAAQ,CAAC,6CAA6C,EACtD,oJAAoJ,CAAC;gBACzJ,UAAG,CAAC,QAAQ,CAAC,0CAA0C,EACnD,sEAAsE,CAAC;aAC9E;YACD,OAAO,EAAE,WAAkC;YAC3C,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,+CAA+C,EACrE,wGAAwG;gBACxG,qEAAqE,CAAC;YAC1E,KAAK,EAAE,+CAAyB;SACnC;KACJ;CACJ,CAAC"}
1
+ {"version":3,"file":"ai-chat-preferences.js","sourceRoot":"","sources":["../../src/common/ai-chat-preferences.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,uFAA0F;AAC1F,sCAAoD;AAEvC,QAAA,uBAAuB,GAAG,mCAAmC,CAAC;AAC9D,QAAA,mBAAmB,GAAG,+BAA+B,CAAC;AACtD,QAAA,6BAA6B,GAAG,yCAAyC,CAAC;AAC1E,QAAA,4BAA4B,GAAG,wCAAwC,CAAC;AACxE,QAAA,oBAAoB,GAAG,sCAAsC,CAAC;AAC9D,QAAA,4BAA4B,GAAG,wCAAwC,CAAC;AAIxE,QAAA,iBAAiB,GAAqB;IAC/C,UAAU,EAAE;QACR,CAAC,+BAAuB,CAAC,EAAE;YACvB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,wCAAwC,EAC9D;6EAC6D,CAAC;YAClE,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,2BAAmB,CAAC,EAAE;YACnB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,wCAAwC,EAC9D;yDACyC,CAAC;YAC9C,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,qCAA6B,CAAC,EAAE;YAC7B,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,kDAAkD,EACxE,0JAA0J,CAAC;YAC/J,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,oCAA4B,CAAC,EAAE;YAC5B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,iDAAiD,EACvE,+GAA+G;gBAC/G,oHAAoH,CAAC;YACzH,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,CAAC,CAAC;YACX,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,oCAA4B,CAAC,EAAE;YAC5B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,iDAAiD,EACvE,8GAA8G;gBAC9G,oHAAoH;gBACpH,2GAA2G,CAAC;YAChH,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,4BAAoB,CAAC,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAiC;YAC7D,cAAc,EAAE;gBACZ,UAAG,CAAC,iBAAiB,CAAC,WAAW,CAAC;gBAClC,UAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC;aAClC;YACD,gBAAgB,EAAE;gBACd,UAAG,CAAC,QAAQ,CAAC,6CAA6C,EACtD,oJAAoJ,CAAC;gBACzJ,UAAG,CAAC,QAAQ,CAAC,0CAA0C,EACnD,sEAAsE,CAAC;aAC9E;YACD,OAAO,EAAE,WAAkC;YAC3C,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,+CAA+C,EACrE,wGAAwG;gBACxG,qEAAqE,CAAC;YAC1E,KAAK,EAAE,+CAAyB;SACnC;KACJ;CACJ,CAAC"}
@@ -177,6 +177,7 @@ tslib_1.__decorate([
177
177
  ], ChatAgentServiceImpl.prototype, "agentContributions", void 0);
178
178
  tslib_1.__decorate([
179
179
  (0, inversify_1.inject)(core_1.ILogger),
180
+ (0, inversify_1.named)('ai-chat:ChatAgentServiceImpl'),
180
181
  tslib_1.__metadata("design:type", Object)
181
182
  ], ChatAgentServiceImpl.prototype, "logger", void 0);
182
183
  tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"chat-agent-service.js","sourceRoot":"","sources":["../../src/common/chat-agent-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-agent-service.js","sourceRoot":"","sources":["../../src/common/chat-agent-service.ts"],"names":[],"mappings":"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"}