summaryrefslogtreecommitdiffhomepage
path: root/src/features/conversation-cache
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/conversation-cache')
-rw-r--r--src/features/conversation-cache/cache.test.ts24
-rw-r--r--src/features/conversation-cache/cache.ts7
2 files changed, 31 insertions, 0 deletions
diff --git a/src/features/conversation-cache/cache.test.ts b/src/features/conversation-cache/cache.test.ts
index c68ed0d..89e81b8 100644
--- a/src/features/conversation-cache/cache.test.ts
+++ b/src/features/conversation-cache/cache.test.ts
@@ -171,3 +171,27 @@ describe("cache.evictIfOverBudget", () => {
expect(evicted).toEqual([]);
});
});
+
+describe("cache.delete", () => {
+ it("removes the conversation from the store", async () => {
+ const store = createFakeStore();
+ const cache = createConversationCache(store);
+
+ await store.append("conv-1", [chunk(1), chunk(2)]);
+ await cache.delete("conv-1");
+
+ const stored = await store.load("conv-1");
+ expect(stored).toEqual([]);
+ });
+
+ it("then load returns []", async () => {
+ const store = createFakeStore();
+ const cache = createConversationCache(store);
+
+ await cache.commit("conv-1", [chunk(1), chunk(2), chunk(3)]);
+ await cache.delete("conv-1");
+
+ const result = await cache.load("conv-1");
+ expect(result).toEqual([]);
+ });
+});
diff --git a/src/features/conversation-cache/cache.ts b/src/features/conversation-cache/cache.ts
index 4aab487..3d5743a 100644
--- a/src/features/conversation-cache/cache.ts
+++ b/src/features/conversation-cache/cache.ts
@@ -20,6 +20,9 @@ export interface ConversationCache {
* Returns the evicted conversationIds.
*/
evictIfOverBudget(activeConversationId: string | null): Promise<readonly string[]>;
+
+ /** Delete all cached data for a single conversation (local forget). */
+ delete(conversationId: string): Promise<void>;
}
export interface ConversationCacheOptions {
@@ -67,5 +70,9 @@ export function createConversationCache(
}
return toEvict;
},
+
+ async delete(conversationId) {
+ await store.delete(conversationId);
+ },
};
}