@theia/ai-chat 1.68.0-next.9 → 1.68.1

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 (157) hide show
  1. package/README.md +64 -0
  2. package/lib/browser/agent-delegation-tool.d.ts.map +1 -1
  3. package/lib/browser/agent-delegation-tool.js +14 -11
  4. package/lib/browser/agent-delegation-tool.js.map +1 -1
  5. package/lib/browser/ai-chat-frontend-contribution.js +1 -2
  6. package/lib/browser/ai-chat-frontend-contribution.js.map +1 -1
  7. package/lib/browser/change-set-decorator-service.d.ts +0 -1
  8. package/lib/browser/change-set-decorator-service.d.ts.map +1 -1
  9. package/lib/browser/change-set-decorator-service.js +2 -3
  10. package/lib/browser/change-set-decorator-service.js.map +1 -1
  11. package/lib/browser/change-set-file-element-deserializer.js +3 -3
  12. package/lib/browser/change-set-file-element-deserializer.js.map +1 -1
  13. package/lib/browser/change-set-file-element.js +17 -26
  14. package/lib/browser/change-set-file-element.js.map +1 -1
  15. package/lib/browser/change-set-file-resource.js +2 -2
  16. package/lib/browser/change-set-file-resource.js.map +1 -1
  17. package/lib/browser/change-set-file-service.js +4 -5
  18. package/lib/browser/change-set-file-service.js.map +1 -1
  19. package/lib/browser/chat-session-store-impl.d.ts +30 -4
  20. package/lib/browser/chat-session-store-impl.d.ts.map +1 -1
  21. package/lib/browser/chat-session-store-impl.js +178 -14
  22. package/lib/browser/chat-session-store-impl.js.map +1 -1
  23. package/lib/browser/chat-session-store-impl.spec.js +171 -5
  24. package/lib/browser/chat-session-store-impl.spec.js.map +1 -1
  25. package/lib/browser/chat-tool-preference-bindings.d.ts +16 -3
  26. package/lib/browser/chat-tool-preference-bindings.d.ts.map +1 -1
  27. package/lib/browser/chat-tool-preference-bindings.js +28 -9
  28. package/lib/browser/chat-tool-preference-bindings.js.map +1 -1
  29. package/lib/browser/chat-tool-preference-bindings.spec.d.ts +2 -0
  30. package/lib/browser/chat-tool-preference-bindings.spec.d.ts.map +1 -0
  31. package/lib/browser/chat-tool-preference-bindings.spec.js +168 -0
  32. package/lib/browser/chat-tool-preference-bindings.spec.js.map +1 -0
  33. package/lib/browser/chat-tool-request-service.d.ts +7 -6
  34. package/lib/browser/chat-tool-request-service.d.ts.map +1 -1
  35. package/lib/browser/chat-tool-request-service.js +56 -19
  36. package/lib/browser/chat-tool-request-service.js.map +1 -1
  37. package/lib/browser/custom-agent-frontend-application-contribution.js +3 -5
  38. package/lib/browser/custom-agent-frontend-application-contribution.js.map +1 -1
  39. package/lib/browser/delegation-response-content.js +2 -2
  40. package/lib/browser/delegation-response-content.js.map +1 -1
  41. package/lib/browser/file-chat-variable-contribution.js +1 -1
  42. package/lib/browser/file-chat-variable-contribution.js.map +1 -1
  43. package/lib/browser/image-context-variable-contribution.js +4 -7
  44. package/lib/browser/image-context-variable-contribution.js.map +1 -1
  45. package/lib/browser/task-context-service.d.ts +2 -1
  46. package/lib/browser/task-context-service.d.ts.map +1 -1
  47. package/lib/browser/task-context-service.js +5 -6
  48. package/lib/browser/task-context-service.js.map +1 -1
  49. package/lib/browser/task-context-storage-service.js +1 -1
  50. package/lib/browser/task-context-variable-contribution.js +1 -1
  51. package/lib/browser/task-context-variable-contribution.js.map +1 -1
  52. package/lib/browser/task-context-variable-label-provider.js +1 -2
  53. package/lib/browser/task-context-variable-label-provider.js.map +1 -1
  54. package/lib/common/ai-chat-preferences.d.ts +2 -0
  55. package/lib/common/ai-chat-preferences.d.ts.map +1 -1
  56. package/lib/common/ai-chat-preferences.js +14 -1
  57. package/lib/common/ai-chat-preferences.js.map +1 -1
  58. package/lib/common/change-set.js +4 -6
  59. package/lib/common/change-set.js.map +1 -1
  60. package/lib/common/chat-agents.d.ts +4 -3
  61. package/lib/common/chat-agents.d.ts.map +1 -1
  62. package/lib/common/chat-agents.js +19 -16
  63. package/lib/common/chat-agents.js.map +1 -1
  64. package/lib/common/chat-auto-save.spec.js +18 -6
  65. package/lib/common/chat-auto-save.spec.js.map +1 -1
  66. package/lib/common/chat-content-deserializer.spec.js +32 -46
  67. package/lib/common/chat-content-deserializer.spec.js.map +1 -1
  68. package/lib/common/chat-model-serialization.d.ts +44 -0
  69. package/lib/common/chat-model-serialization.d.ts.map +1 -1
  70. package/lib/common/chat-model-serialization.js.map +1 -1
  71. package/lib/common/chat-model-serialization.spec.js +288 -6
  72. package/lib/common/chat-model-serialization.spec.js.map +1 -1
  73. package/lib/common/chat-model-util.js +8 -10
  74. package/lib/common/chat-model-util.js.map +1 -1
  75. package/lib/common/chat-model.d.ts +77 -16
  76. package/lib/common/chat-model.d.ts.map +1 -1
  77. package/lib/common/chat-model.js +278 -99
  78. package/lib/common/chat-model.js.map +1 -1
  79. package/lib/common/chat-request-parser.js +2 -3
  80. package/lib/common/chat-request-parser.js.map +1 -1
  81. package/lib/common/chat-request-parser.spec.js +147 -30
  82. package/lib/common/chat-request-parser.spec.js.map +1 -1
  83. package/lib/common/chat-service-deletion.spec.js +16 -3
  84. package/lib/common/chat-service-deletion.spec.js.map +1 -1
  85. package/lib/common/chat-service-pinned-agent.spec.d.ts +2 -0
  86. package/lib/common/chat-service-pinned-agent.spec.d.ts.map +1 -0
  87. package/lib/common/chat-service-pinned-agent.spec.js +194 -0
  88. package/lib/common/chat-service-pinned-agent.spec.js.map +1 -0
  89. package/lib/common/chat-service.d.ts +19 -3
  90. package/lib/common/chat-service.d.ts.map +1 -1
  91. package/lib/common/chat-service.js +60 -22
  92. package/lib/common/chat-service.js.map +1 -1
  93. package/lib/common/chat-session-naming-service.js +4 -3
  94. package/lib/common/chat-session-naming-service.js.map +1 -1
  95. package/lib/common/chat-session-store.d.ts +8 -1
  96. package/lib/common/chat-session-store.d.ts.map +1 -1
  97. package/lib/common/chat-session-summary-agent.js +3 -2
  98. package/lib/common/chat-session-summary-agent.js.map +1 -1
  99. package/lib/common/chat-string-utils.js +2 -3
  100. package/lib/common/chat-string-utils.js.map +1 -1
  101. package/lib/common/chat-tool-preferences.js +3 -3
  102. package/lib/common/chat-tool-preferences.js.map +1 -1
  103. package/lib/common/chat-tool-request-service.d.ts +61 -8
  104. package/lib/common/chat-tool-request-service.d.ts.map +1 -1
  105. package/lib/common/chat-tool-request-service.js +80 -2
  106. package/lib/common/chat-tool-request-service.js.map +1 -1
  107. package/lib/common/chat-tool-request-service.spec.d.ts +2 -0
  108. package/lib/common/chat-tool-request-service.spec.d.ts.map +1 -0
  109. package/lib/common/chat-tool-request-service.spec.js +83 -0
  110. package/lib/common/chat-tool-request-service.spec.js.map +1 -0
  111. package/lib/common/image-context-variable.js +2 -3
  112. package/lib/common/image-context-variable.js.map +1 -1
  113. package/lib/common/index.d.ts +1 -0
  114. package/lib/common/index.d.ts.map +1 -1
  115. package/lib/common/index.js +1 -0
  116. package/lib/common/index.js.map +1 -1
  117. package/lib/common/parse-contents-with-incomplete-parts.spec.js +2 -4
  118. package/lib/common/parse-contents-with-incomplete-parts.spec.js.map +1 -1
  119. package/lib/common/parse-contents.js +2 -3
  120. package/lib/common/parse-contents.js.map +1 -1
  121. package/lib/common/parse-contents.spec.js +1 -2
  122. package/lib/common/parse-contents.spec.js.map +1 -1
  123. package/lib/common/parsed-chat-request.d.ts +13 -5
  124. package/lib/common/parsed-chat-request.d.ts.map +1 -1
  125. package/lib/common/parsed-chat-request.js +66 -3
  126. package/lib/common/parsed-chat-request.js.map +1 -1
  127. package/lib/common/response-content-matcher.js +2 -4
  128. package/lib/common/response-content-matcher.js.map +1 -1
  129. package/lib/common/tool-call-response-content.spec.d.ts +2 -0
  130. package/lib/common/tool-call-response-content.spec.d.ts.map +1 -0
  131. package/lib/common/tool-call-response-content.spec.js +128 -0
  132. package/lib/common/tool-call-response-content.spec.js.map +1 -0
  133. package/package.json +10 -10
  134. package/src/browser/agent-delegation-tool.ts +15 -11
  135. package/src/browser/chat-session-store-impl.spec.ts +223 -9
  136. package/src/browser/chat-session-store-impl.ts +204 -19
  137. package/src/browser/chat-tool-preference-bindings.spec.ts +203 -0
  138. package/src/browser/chat-tool-preference-bindings.ts +30 -9
  139. package/src/browser/chat-tool-request-service.ts +62 -23
  140. package/src/browser/task-context-service.ts +5 -3
  141. package/src/browser/task-context-storage-service.ts +1 -1
  142. package/src/common/ai-chat-preferences.ts +18 -0
  143. package/src/common/chat-agents.ts +17 -4
  144. package/src/common/chat-auto-save.spec.ts +24 -8
  145. package/src/common/chat-model-serialization.spec.ts +334 -7
  146. package/src/common/chat-model-serialization.ts +54 -0
  147. package/src/common/chat-model.ts +330 -44
  148. package/src/common/chat-request-parser.spec.ts +173 -32
  149. package/src/common/chat-service-deletion.spec.ts +17 -1
  150. package/src/common/chat-service-pinned-agent.spec.ts +218 -0
  151. package/src/common/chat-service.ts +57 -3
  152. package/src/common/chat-session-store.ts +8 -1
  153. package/src/common/chat-tool-request-service.spec.ts +97 -0
  154. package/src/common/chat-tool-request-service.ts +96 -9
  155. package/src/common/index.ts +1 -0
  156. package/src/common/parsed-chat-request.ts +75 -5
  157. package/src/common/tool-call-response-content.spec.ts +231 -0
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session-store-impl.d.ts","sourceRoot":"","sources":["../../src/browser/chat-session-store-impl.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAE9H,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oCAAoC,CAAC;AAI3F,qBACa,oBAAqB,YAAW,gBAAgB;IAEzD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAG5C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAGtD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IAGjD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGnC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAExD,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;IAC5B,SAAS,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IACxC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAqB;IAEpD,aAAa,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDzF,OAAO,CAAC,uBAAuB;IAIzB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAsBvE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB/C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAM5C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAWtD,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;cAiB9B,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,qBAAqB,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxG,SAAS,CAAC,wBAAwB,IAAI,MAAM;cAI5B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cAuD7B,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA8CtD,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI,mBAAmB;cAiB7D,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjE,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB;CAa3D"}
1
+ {"version":3,"file":"chat-session-store-impl.d.ts","sourceRoot":"","sources":["../../src/browser/chat-session-store-impl.ts"],"names":[],"mappings":"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"}
@@ -20,22 +20,45 @@ const tslib_1 = require("tslib");
20
20
  const inversify_1 = require("@theia/core/shared/inversify");
21
21
  const file_service_1 = require("@theia/filesystem/lib/browser/file-service");
22
22
  const browser_1 = require("@theia/workspace/lib/browser");
23
- const env_variables_1 = require("@theia/core/lib/common/env-variables");
24
23
  const common_1 = require("@theia/core/lib/common");
25
24
  const browser_2 = require("@theia/core/lib/browser");
26
25
  const core_1 = require("@theia/core");
27
26
  const buffer_1 = require("@theia/core/lib/common/buffer");
28
27
  const logger_1 = require("@theia/core/lib/common/logger");
28
+ const env_variables_1 = require("@theia/core/lib/common/env-variables");
29
29
  const ai_chat_preferences_1 = require("../common/ai-chat-preferences");
30
30
  const chat_model_serialization_1 = require("../common/chat-model-serialization");
31
31
  const INDEX_FILE = 'index.json';
32
32
  let ChatSessionStoreImpl = class ChatSessionStoreImpl {
33
33
  constructor() {
34
+ this.storageInitialized = false;
34
35
  this.storePromise = Promise.resolve();
36
+ this.toDispose = new core_1.DisposableCollection();
37
+ }
38
+ init() {
39
+ this.toDispose.push(this.preferenceService.onPreferenceChanged(async (event) => {
40
+ if (event.preferenceName === ai_chat_preferences_1.SESSION_STORAGE_PREF) {
41
+ this.logger.debug('Session storage preference changed: invalidating cache.', { preference: event.preferenceName });
42
+ this.invalidateStorageCache();
43
+ }
44
+ }));
45
+ }
46
+ invalidateStorageCache() {
47
+ this.storageRoot = undefined;
48
+ this.storageInitialized = false;
49
+ this.indexCache = undefined;
50
+ // Clear workspace metadata store reference so it will be recreated
51
+ if (this.workspaceMetadataStore) {
52
+ this.workspaceMetadataStore = undefined;
53
+ }
35
54
  }
36
55
  async storeSessions(...sessions) {
37
56
  this.storePromise = this.storePromise.then(async () => {
38
- const root = await this.getStorageRoot();
57
+ const root = await this.ensureStorageReady();
58
+ if (!root) {
59
+ this.logger.debug('Session persistence is disabled: skipping store.');
60
+ return;
61
+ }
39
62
  this.logger.debug('Starting to store sessions', { totalSessions: sessions.length, storageRoot: root.toString() });
40
63
  // Normalize to SessionWithTitle and filter empty sessions
41
64
  const nonEmptySessions = sessions
@@ -77,7 +100,11 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
77
100
  return 'model' in session;
78
101
  }
79
102
  async readSession(sessionId) {
80
- const root = await this.getStorageRoot();
103
+ const root = await this.ensureStorageReady();
104
+ if (!root) {
105
+ this.logger.debug('Session persistence is disabled: cannot read session.', { sessionId });
106
+ return undefined;
107
+ }
81
108
  const sessionFile = root.resolve(`${sessionId}.json`);
82
109
  this.logger.debug('Reading session from file', { sessionId, filePath: sessionFile.toString() });
83
110
  try {
@@ -99,7 +126,11 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
99
126
  }
100
127
  async deleteSession(sessionId) {
101
128
  this.storePromise = this.storePromise.then(async () => {
102
- const root = await this.getStorageRoot();
129
+ const root = await this.ensureStorageReady();
130
+ if (!root) {
131
+ this.logger.debug('Session persistence is disabled: skipping delete.', { sessionId });
132
+ return;
133
+ }
103
134
  const sessionFile = root.resolve(`${sessionId}.json`);
104
135
  this.logger.debug('Deleting session', { sessionId, filePath: sessionFile.toString() });
105
136
  try {
@@ -119,7 +150,11 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
119
150
  }
120
151
  async clearAllSessions() {
121
152
  this.storePromise = this.storePromise.then(async () => {
122
- const root = await this.getStorageRoot();
153
+ const root = await this.ensureStorageReady();
154
+ if (!root) {
155
+ this.logger.debug('Session persistence is disabled: skipping clear.');
156
+ return;
157
+ }
123
158
  try {
124
159
  await this.fileService.delete(root, { recursive: true });
125
160
  await this.fileService.createFolder(root);
@@ -147,19 +182,87 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
147
182
  });
148
183
  return this.storePromise;
149
184
  }
185
+ /**
186
+ * Gets the storage root URI.
187
+ * Use {@link ensureStorageReady} when you need actually to access the storage.
188
+ */
150
189
  async getStorageRoot() {
151
- if (this.storageRoot) {
190
+ if (this.storageRoot !== undefined) {
152
191
  return this.storageRoot;
153
192
  }
154
- const configDir = await this.envServer.getConfigDirUri();
155
- this.storageRoot = new core_1.URI(configDir).resolve('chatSessions');
193
+ const resolved = await this.resolveStorageRoot();
194
+ if (!resolved) {
195
+ // Persistence is disabled
196
+ return undefined;
197
+ }
198
+ this.storageRoot = resolved;
199
+ return this.storageRoot;
200
+ }
201
+ /**
202
+ * Ensures the storage directory exists and is initialized on disk.
203
+ * This should be called before any disk I/O operations.
204
+ */
205
+ async ensureStorageReady() {
206
+ const root = await this.getStorageRoot();
207
+ if (!root) {
208
+ return undefined;
209
+ }
210
+ if (!this.storageInitialized) {
211
+ await this.initializeStorage(root);
212
+ this.storageInitialized = true;
213
+ }
214
+ return root;
215
+ }
216
+ /**
217
+ * Initializes the storage directory on disk, creating it if necessary.
218
+ */
219
+ async initializeStorage(root) {
156
220
  try {
157
- await this.fileService.createFolder(this.storageRoot);
221
+ await this.fileService.createFolder(root);
158
222
  }
159
223
  catch (e) {
160
224
  // Folder may already exist
161
225
  }
162
- return this.storageRoot;
226
+ }
227
+ async getStorageScope() {
228
+ // Wait for preferences to be ready before reading storage configuration
229
+ await this.preferenceService.ready;
230
+ return this.preferenceService.get(ai_chat_preferences_1.SESSION_STORAGE_PREF, 'workspace');
231
+ }
232
+ async getGlobalStorageRoot() {
233
+ const configDirUri = await this.envServer.getConfigDirUri();
234
+ return new core_1.URI(configDirUri).resolve('chatSessions');
235
+ }
236
+ async resolveStorageRoot() {
237
+ const scope = await this.getStorageScope();
238
+ if (scope === 'workspace') {
239
+ if (this.workspaceService.tryGetRoots().length === 0) {
240
+ this.logger.debug('No workspace open: falling back to global storage.');
241
+ return this.getGlobalStorageRoot();
242
+ }
243
+ try {
244
+ // Reuse existing store or get/create one from the service
245
+ if (!this.workspaceMetadataStore) {
246
+ this.workspaceMetadataStore = await this.metadataStorageService.getOrCreateStore('chatSessions');
247
+ // Set up location change listener
248
+ this.toDispose.push(this.workspaceMetadataStore.onDidChangeLocation(newLocation => {
249
+ this.logger.debug('Workspace metadata store location changed: invalidating cache.', { oldRoot: this.storageRoot?.toString(), newRoot: newLocation.toString() });
250
+ this.invalidateStorageCache();
251
+ }));
252
+ this.toDispose.push(this.workspaceMetadataStore);
253
+ }
254
+ this.logger.debug('Using workspace metadata storage', { location: this.workspaceMetadataStore.location.toString() });
255
+ return this.workspaceMetadataStore.location;
256
+ }
257
+ catch (error) {
258
+ this.logger.error('Failed to create workspace metadata store, falling back to global storage', error);
259
+ return this.getGlobalStorageRoot();
260
+ }
261
+ }
262
+ // Global storage mode
263
+ const globalPath = await this.getGlobalStorageRoot();
264
+ this.logger.debug('Using global storage path', { path: globalPath.toString() });
265
+ return globalPath;
163
266
  }
164
267
  async updateIndex(sessions) {
165
268
  const index = await this.loadIndex();
@@ -180,6 +283,10 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
180
283
  return this.preferenceService.get(ai_chat_preferences_1.PERSISTED_SESSION_LIMIT_PREF, 25);
181
284
  }
182
285
  async trimSessions() {
286
+ const root = await this.ensureStorageReady();
287
+ if (!root) {
288
+ return;
289
+ }
183
290
  const maxSessions = this.getPersistedSessionLimit();
184
291
  // -1 means unlimited, skip trimming
185
292
  if (maxSessions === -1) {
@@ -191,7 +298,6 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
191
298
  if (maxSessions === 0) {
192
299
  this.logger.debug('Session persistence disabled, deleting all sessions', { sessionCount: sessions.length });
193
300
  for (const session of sessions) {
194
- const root = await this.getStorageRoot();
195
301
  const sessionFile = root.resolve(`${session.sessionId}.json`);
196
302
  try {
197
303
  await this.fileService.delete(sessionFile);
@@ -214,7 +320,6 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
214
320
  const sessionsToDelete = sessions.slice(0, sessions.length - maxSessions);
215
321
  this.logger.debug('Deleting oldest sessions', { deleteCount: sessionsToDelete.length, sessionIds: sessionsToDelete.map(s => s.sessionId) });
216
322
  for (const session of sessionsToDelete) {
217
- const root = await this.getStorageRoot();
218
323
  const sessionFile = root.resolve(`${session.sessionId}.json`);
219
324
  try {
220
325
  await this.fileService.delete(sessionFile);
@@ -230,7 +335,11 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
230
335
  if (this.indexCache) {
231
336
  return this.indexCache;
232
337
  }
233
- const root = await this.getStorageRoot();
338
+ const root = await this.ensureStorageReady();
339
+ if (!root) {
340
+ this.indexCache = {};
341
+ return this.indexCache;
342
+ }
234
343
  const indexFile = root.resolve(INDEX_FILE);
235
344
  try {
236
345
  const content = await this.fileService.readFile(indexFile);
@@ -280,7 +389,10 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
280
389
  }
281
390
  async saveIndex(index) {
282
391
  this.indexCache = index;
283
- const root = await this.getStorageRoot();
392
+ const root = await this.ensureStorageReady();
393
+ if (!root) {
394
+ return;
395
+ }
284
396
  const indexFile = root.resolve(INDEX_FILE);
285
397
  await this.fileService.writeFile(indexFile, buffer_1.BinaryBuffer.fromString(JSON.stringify(index, undefined, 2)));
286
398
  }
@@ -293,6 +405,48 @@ let ChatSessionStoreImpl = class ChatSessionStoreImpl {
293
405
  }
294
406
  return parsed;
295
407
  }
408
+ async hasPersistedSessions() {
409
+ // If we already have cached sessions, return true immediately
410
+ if (this.indexCache && Object.keys(this.indexCache).length > 0) {
411
+ return true;
412
+ }
413
+ const storageRoot = await this.getStorageRoot();
414
+ if (!storageRoot) {
415
+ return false;
416
+ }
417
+ const indexFile = storageRoot.resolve(INDEX_FILE);
418
+ try {
419
+ const exists = await this.fileService.exists(indexFile);
420
+ if (!exists) {
421
+ return false;
422
+ }
423
+ const content = await this.fileService.readFile(indexFile);
424
+ const index = JSON.parse(content.value.toString());
425
+ return Object.keys(index).length > 0;
426
+ }
427
+ catch (e) {
428
+ return false;
429
+ }
430
+ }
431
+ async hasGlobalSessions() {
432
+ const globalRoot = await this.getGlobalStorageRoot();
433
+ try {
434
+ const indexFile = globalRoot.resolve(INDEX_FILE);
435
+ const exists = await this.fileService.exists(indexFile);
436
+ if (!exists) {
437
+ return false;
438
+ }
439
+ const content = await this.fileService.readFile(indexFile);
440
+ const index = JSON.parse(content.value.toString());
441
+ return Object.keys(index).length > 0;
442
+ }
443
+ catch (e) {
444
+ return false;
445
+ }
446
+ }
447
+ dispose() {
448
+ this.toDispose.dispose();
449
+ }
296
450
  };
297
451
  exports.ChatSessionStoreImpl = ChatSessionStoreImpl;
298
452
  tslib_1.__decorate([
@@ -303,6 +457,10 @@ tslib_1.__decorate([
303
457
  (0, inversify_1.inject)(browser_1.WorkspaceService),
304
458
  tslib_1.__metadata("design:type", browser_1.WorkspaceService)
305
459
  ], ChatSessionStoreImpl.prototype, "workspaceService", void 0);
460
+ tslib_1.__decorate([
461
+ (0, inversify_1.inject)(browser_1.WorkspaceMetadataStorageService),
462
+ tslib_1.__metadata("design:type", Object)
463
+ ], ChatSessionStoreImpl.prototype, "metadataStorageService", void 0);
306
464
  tslib_1.__decorate([
307
465
  (0, inversify_1.inject)(env_variables_1.EnvVariablesServer),
308
466
  tslib_1.__metadata("design:type", Object)
@@ -320,6 +478,12 @@ tslib_1.__decorate([
320
478
  (0, inversify_1.inject)(common_1.PreferenceService),
321
479
  tslib_1.__metadata("design:type", Object)
322
480
  ], ChatSessionStoreImpl.prototype, "preferenceService", void 0);
481
+ tslib_1.__decorate([
482
+ (0, inversify_1.postConstruct)(),
483
+ tslib_1.__metadata("design:type", Function),
484
+ tslib_1.__metadata("design:paramtypes", []),
485
+ tslib_1.__metadata("design:returntype", void 0)
486
+ ], ChatSessionStoreImpl.prototype, "init", null);
323
487
  exports.ChatSessionStoreImpl = ChatSessionStoreImpl = tslib_1.__decorate([
324
488
  (0, inversify_1.injectable)()
325
489
  ], ChatSessionStoreImpl);
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session-store-impl.js","sourceRoot":"","sources":["../../src/browser/chat-session-store-impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-session-store-impl.js","sourceRoot":"","sources":["../../src/browser/chat-session-store-impl.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,7 @@ const env_variables_1 = require("@theia/core/lib/common/env-variables");
29
29
  const common_1 = require("@theia/core/lib/common");
30
30
  const browser_2 = require("@theia/core/lib/browser");
31
31
  const logger_1 = require("@theia/core/lib/common/logger");
32
+ const core_1 = require("@theia/core");
32
33
  const buffer_1 = require("@theia/core/lib/common/buffer");
33
34
  const ai_chat_preferences_1 = require("../common/ai-chat-preferences");
34
35
  const chat_agents_1 = require("../common/chat-agents");
@@ -40,8 +41,16 @@ describe('ChatSessionStoreImpl', () => {
40
41
  let mockFileService;
41
42
  let mockPreferenceService;
42
43
  let mockEnvServer;
44
+ let mockWorkspaceService;
43
45
  let deletedFiles;
44
- const STORAGE_ROOT = 'file:///config/chatSessions';
46
+ let preferenceChangeCallback;
47
+ // Use obviously fake paths that will not exist on real systems to prevent any accidental
48
+ // interaction with actual user data if mocking were to misconfigured
49
+ const STORAGE_ROOT = 'file:///__test__/mock-config/chatSessions';
50
+ const WORKSPACE_METADATA_STORAGE = 'file:///__test__/mock-config/workspace-metadata/test-uuid/chatSessions';
51
+ const WORKSPACE_ROOT = 'file:///__test__/mock-workspace/my-project';
52
+ const GLOBAL_CONFIG_DIR = 'file:///__test__/mock-config';
53
+ const DEFAULT_STORAGE_SCOPE = 'workspace';
45
54
  function createMockSessionMetadata(id, saveDate) {
46
55
  return {
47
56
  sessionId: id,
@@ -66,6 +75,7 @@ describe('ChatSessionStoreImpl', () => {
66
75
  beforeEach(() => {
67
76
  sandbox = sinon.createSandbox();
68
77
  deletedFiles = [];
78
+ preferenceChangeCallback = undefined;
69
79
  container = new inversify_1.Container();
70
80
  mockFileService = {
71
81
  readFile: sandbox.stub(),
@@ -73,15 +83,25 @@ describe('ChatSessionStoreImpl', () => {
73
83
  delete: sandbox.stub().callsFake(async (uri) => {
74
84
  deletedFiles.push(uri.toString());
75
85
  }),
76
- createFolder: sandbox.stub().resolves()
86
+ createFolder: sandbox.stub().resolves(),
87
+ exists: sandbox.stub().resolves(true),
88
+ copy: sandbox.stub().resolves(),
89
+ resolve: sandbox.stub().resolves({ children: [] })
77
90
  };
78
91
  mockPreferenceService = {
79
- get: sandbox.stub()
92
+ ready: Promise.resolve(),
93
+ get: sandbox.stub(),
94
+ onPreferenceChanged: sandbox.stub().callsFake((callback) => {
95
+ preferenceChangeCallback = callback;
96
+ return { dispose: () => { preferenceChangeCallback = undefined; } };
97
+ })
80
98
  };
81
99
  mockEnvServer = {
82
- getConfigDirUri: sandbox.stub().resolves('file:///config')
100
+ getConfigDirUri: sandbox.stub().resolves(GLOBAL_CONFIG_DIR)
101
+ };
102
+ mockWorkspaceService = {
103
+ tryGetRoots: () => []
83
104
  };
84
- const mockWorkspaceService = {};
85
105
  const mockStorageService = {};
86
106
  const mockLogger = {
87
107
  debug: sandbox.stub(),
@@ -89,15 +109,32 @@ describe('ChatSessionStoreImpl', () => {
89
109
  warn: sandbox.stub(),
90
110
  error: sandbox.stub()
91
111
  };
112
+ // Create a mock WorkspaceMetadataStore
113
+ const locationChangeEmitter = new core_1.Emitter();
114
+ const mockMetadataStore = {
115
+ key: 'chatSessions',
116
+ location: new core_1.URI(WORKSPACE_METADATA_STORAGE),
117
+ onDidChangeLocation: locationChangeEmitter.event,
118
+ ensureExists: sandbox.stub().resolves(),
119
+ delete: sandbox.stub().resolves(),
120
+ dispose: () => locationChangeEmitter.dispose()
121
+ };
122
+ // Create a mock for WorkspaceMetadataStorageService
123
+ const mockMetadataStorageService = {
124
+ getOrCreateStore: sandbox.stub().resolves(mockMetadataStore)
125
+ };
92
126
  container.bind(file_service_1.FileService).toConstantValue(mockFileService);
93
127
  container.bind(common_1.PreferenceService).toConstantValue(mockPreferenceService);
94
128
  container.bind(env_variables_1.EnvVariablesServer).toConstantValue(mockEnvServer);
95
129
  container.bind(browser_1.WorkspaceService).toConstantValue(mockWorkspaceService);
130
+ container.bind(browser_1.WorkspaceMetadataStorageService).toConstantValue(mockMetadataStorageService);
96
131
  container.bind(browser_2.StorageService).toConstantValue(mockStorageService);
97
132
  container.bind('ChatSessionStore').toConstantValue(mockLogger);
98
133
  container.bind(logger_1.ILogger).toConstantValue(mockLogger).whenTargetNamed('ChatSessionStore');
99
134
  container.bind(chat_session_store_impl_1.ChatSessionStoreImpl).toSelf().inSingletonScope();
100
135
  chatSessionStore = container.get(chat_session_store_impl_1.ChatSessionStoreImpl);
136
+ // Set up default storage preferences for all tests
137
+ mockPreferenceService.get.withArgs(ai_chat_preferences_1.SESSION_STORAGE_PREF, 'workspace').returns(DEFAULT_STORAGE_SCOPE);
101
138
  });
102
139
  afterEach(() => {
103
140
  sandbox.restore();
@@ -379,5 +416,134 @@ describe('ChatSessionStoreImpl', () => {
379
416
  (0, chai_1.expect)(result).to.equal(100);
380
417
  });
381
418
  });
419
+ describe('resolveStorageRoot', () => {
420
+ describe('when scope is workspace', () => {
421
+ it('should use workspace storage path when workspace is open', async () => {
422
+ mockWorkspaceService.tryGetRoots = () => [
423
+ { resource: new core_1.URI(WORKSPACE_ROOT), isDirectory: true }
424
+ ];
425
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
426
+ const result = await chatSessionStore.resolveStorageRoot();
427
+ (0, chai_1.expect)(result.toString()).to.equal(WORKSPACE_METADATA_STORAGE);
428
+ });
429
+ it('should use workspace metadata storage', async () => {
430
+ mockWorkspaceService.tryGetRoots = () => [
431
+ { resource: new core_1.URI(WORKSPACE_ROOT), isDirectory: true }
432
+ ];
433
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
434
+ const result = await chatSessionStore.resolveStorageRoot();
435
+ (0, chai_1.expect)(result.toString()).to.equal(WORKSPACE_METADATA_STORAGE);
436
+ });
437
+ it('should fall back to global storage when no workspace is open', async () => {
438
+ mockWorkspaceService.tryGetRoots = () => [];
439
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
440
+ const result = await chatSessionStore.resolveStorageRoot();
441
+ (0, chai_1.expect)(result.toString()).to.equal(`${GLOBAL_CONFIG_DIR}/chatSessions`);
442
+ });
443
+ });
444
+ describe('when scope is global', () => {
445
+ beforeEach(() => {
446
+ mockPreferenceService.get.withArgs(ai_chat_preferences_1.SESSION_STORAGE_PREF, 'workspace').returns('global');
447
+ });
448
+ it('should use global storage path', async () => {
449
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
450
+ const result = await chatSessionStore.resolveStorageRoot();
451
+ (0, chai_1.expect)(result.toString()).to.equal(`${GLOBAL_CONFIG_DIR}/chatSessions`);
452
+ });
453
+ it('should ignore workspace even when open', async () => {
454
+ mockWorkspaceService.tryGetRoots = () => [
455
+ { resource: new core_1.URI(WORKSPACE_ROOT), isDirectory: true }
456
+ ];
457
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
458
+ const result = await chatSessionStore.resolveStorageRoot();
459
+ (0, chai_1.expect)(result.toString()).to.equal(`${GLOBAL_CONFIG_DIR}/chatSessions`);
460
+ });
461
+ });
462
+ });
463
+ describe('cache invalidation', () => {
464
+ it('should invalidate cache when storage preference changes scope', async () => {
465
+ mockWorkspaceService.tryGetRoots = () => [
466
+ { resource: new core_1.URI(WORKSPACE_ROOT), isDirectory: true }
467
+ ];
468
+ // First call to establish cache
469
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
470
+ const firstResult = await chatSessionStore.getStorageRoot();
471
+ (0, chai_1.expect)(firstResult.toString()).to.equal(WORKSPACE_METADATA_STORAGE);
472
+ // Change scope to global
473
+ mockPreferenceService.get.withArgs(ai_chat_preferences_1.SESSION_STORAGE_PREF, 'workspace').returns('global');
474
+ // Trigger preference change
475
+ (0, chai_1.expect)(preferenceChangeCallback).to.not.be.undefined;
476
+ preferenceChangeCallback({ preferenceName: ai_chat_preferences_1.SESSION_STORAGE_PREF });
477
+ // Next call should resolve new path
478
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
479
+ const secondResult = await chatSessionStore.getStorageRoot();
480
+ (0, chai_1.expect)(secondResult.toString()).to.equal(`${GLOBAL_CONFIG_DIR}/chatSessions`);
481
+ });
482
+ it('should invalidate cache when workspace path preference changes', async () => {
483
+ mockWorkspaceService.tryGetRoots = () => [
484
+ { resource: new core_1.URI(WORKSPACE_ROOT), isDirectory: true }
485
+ ];
486
+ // First call to establish cache
487
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
488
+ const firstResult = await chatSessionStore.getStorageRoot();
489
+ (0, chai_1.expect)(firstResult.toString()).to.equal(WORKSPACE_METADATA_STORAGE);
490
+ // Workspace path changes are no longer applicable as we use WorkspaceMetadataStore
491
+ // Trigger preference change event (scope remains 'workspace')
492
+ mockPreferenceService.get.withArgs(ai_chat_preferences_1.SESSION_STORAGE_PREF, 'workspace').returns('workspace');
493
+ // Trigger preference change
494
+ (0, chai_1.expect)(preferenceChangeCallback).to.not.be.undefined;
495
+ preferenceChangeCallback({ preferenceName: ai_chat_preferences_1.SESSION_STORAGE_PREF });
496
+ // Path should remain the same since WorkspaceMetadataStore manages the location
497
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
498
+ const secondResult = await chatSessionStore.getStorageRoot();
499
+ (0, chai_1.expect)(secondResult.toString()).to.equal(WORKSPACE_METADATA_STORAGE);
500
+ });
501
+ it('should maintain same global path since paths are no longer customizable', async () => {
502
+ mockPreferenceService.get.withArgs(ai_chat_preferences_1.SESSION_STORAGE_PREF, 'workspace').returns('global');
503
+ // First call to establish cache
504
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
505
+ const firstResult = await chatSessionStore.getStorageRoot();
506
+ (0, chai_1.expect)(firstResult.toString()).to.equal(`${GLOBAL_CONFIG_DIR}/chatSessions`);
507
+ // Trigger preference change (but scope remains 'global')
508
+ (0, chai_1.expect)(preferenceChangeCallback).to.not.be.undefined;
509
+ preferenceChangeCallback({ preferenceName: ai_chat_preferences_1.SESSION_STORAGE_PREF });
510
+ // Path should remain the same since global path is fixed
511
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
512
+ const secondResult = await chatSessionStore.getStorageRoot();
513
+ (0, chai_1.expect)(secondResult.toString()).to.equal(`${GLOBAL_CONFIG_DIR}/chatSessions`);
514
+ });
515
+ it('should use workspace metadata storage for workspace scope', async () => {
516
+ mockWorkspaceService.tryGetRoots = () => [
517
+ { resource: new core_1.URI(WORKSPACE_ROOT), isDirectory: true }
518
+ ];
519
+ // First call to establish cache
520
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
521
+ const firstResult = await chatSessionStore.getStorageRoot();
522
+ (0, chai_1.expect)(firstResult.toString()).to.equal(WORKSPACE_METADATA_STORAGE);
523
+ // Workspace location changes are now handled by WorkspaceMetadataStore.onDidChangeLocation
524
+ // The store will emit this event and the chat store will invalidate its cache automatically
525
+ });
526
+ it('should invalidate index cache along with storage root', async () => {
527
+ mockWorkspaceService.tryGetRoots = () => [
528
+ { resource: new core_1.URI(WORKSPACE_ROOT), isDirectory: true }
529
+ ];
530
+ // Setup index file response
531
+ const index = { 'session-1': { sessionId: 'session-1', title: 'Test', saveDate: 1000, location: 'panel' } };
532
+ mockFileService.readFile.resolves({
533
+ value: buffer_1.BinaryBuffer.fromString(JSON.stringify(index))
534
+ });
535
+ // Load index (establishes cache)
536
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
537
+ await chatSessionStore.loadIndex();
538
+ // Change scope to trigger invalidation
539
+ mockPreferenceService.get.withArgs(ai_chat_preferences_1.SESSION_STORAGE_PREF, 'workspace').returns('global');
540
+ preferenceChangeCallback({ preferenceName: ai_chat_preferences_1.SESSION_STORAGE_PREF });
541
+ // Load index again - should read from file again
542
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
543
+ await chatSessionStore.loadIndex();
544
+ // readFile should have been called twice
545
+ (0, chai_1.expect)(mockFileService.readFile.callCount).to.equal(2);
546
+ });
547
+ });
382
548
  });
383
549
  //# sourceMappingURL=chat-session-store-impl.spec.js.map