diff --git a/src/vs/platform/agentHost/common/sessionDataService.ts b/src/vs/platform/agentHost/common/sessionDataService.ts index 0f6f2c45763..61bc8ba757b 100644 --- a/src/vs/platform/agentHost/common/sessionDataService.ts +++ b/src/vs/platform/agentHost/common/sessionDataService.ts @@ -81,6 +81,12 @@ export interface ISessionDatabase extends IDisposable { * Returns `undefined` if no edit exists for the given key. */ readFileEditContent(toolCallId: string, filePath: string): Promise; + + /** + * Close the database connection. After calling this method, the object is + * considered disposed and all other methods will reject with an error. + */ + close(): Promise; } /** diff --git a/src/vs/platform/agentHost/test/node/sessionDataService.test.ts b/src/vs/platform/agentHost/test/node/sessionDataService.test.ts index 9675c4dac0b..4faf0573777 100644 --- a/src/vs/platform/agentHost/test/node/sessionDataService.test.ts +++ b/src/vs/platform/agentHost/test/node/sessionDataService.test.ts @@ -115,6 +115,7 @@ suite('SessionDataService — openDatabase ref-counting', () => { await ref.object.createTurn('turn-1'); const edits = await ref.object.getFileEdits([]); assert.deepStrictEqual(edits, []); + await ref.object.close(); }); test('multiple references share the same database', async () => { @@ -126,6 +127,7 @@ suite('SessionDataService — openDatabase ref-counting', () => { ref1.dispose(); ref2.dispose(); + await ref1.object.close(); }); test('database remains usable until last reference is disposed', async () => { @@ -139,6 +141,8 @@ suite('SessionDataService — openDatabase ref-counting', () => { await ref2.object.createTurn('turn-1'); ref2.dispose(); + + await ref1.object.close(); }); test('new reference after all disposed gets a fresh database', async () => { @@ -152,5 +156,7 @@ suite('SessionDataService — openDatabase ref-counting', () => { // New reference — may or may not be the same object, but must be functional await ref2.object.createTurn('turn-1'); assert.notStrictEqual(ref2.object, db1); + + await ref2.object.close(); }); }); diff --git a/src/vs/platform/agentHost/test/node/sessionDatabase.test.ts b/src/vs/platform/agentHost/test/node/sessionDatabase.test.ts index e540ace59f9..8c4734b31c4 100644 --- a/src/vs/platform/agentHost/test/node/sessionDatabase.test.ts +++ b/src/vs/platform/agentHost/test/node/sessionDatabase.test.ts @@ -371,18 +371,18 @@ suite('SessionDatabase', () => { test('methods throw after dispose', async () => { db = await SessionDatabase.open(dbPath()); - db.dispose(); + db.close(); await assert.rejects( - () => db.createTurn('turn-1'), + () => db!.createTurn('turn-1'), /disposed/, ); }); test('double dispose is safe', async () => { db = await SessionDatabase.open(dbPath()); - db.dispose(); - db.dispose(); // should not throw + await db.close(); + await db.close(); // should not throw }); }); @@ -417,8 +417,8 @@ suite('SessionDatabase', () => { test('dispose during open rejects subsequent calls', async () => { db = new SessionDatabase(dbPath()); - db.dispose(); - await assert.rejects(() => db.createTurn('turn-1'), /disposed/); + await db.close(); + await assert.rejects(() => db!.createTurn('turn-1'), /disposed/); }); }); });