From 89026373bbdca0ad4cd9e3ca9f77ada61dc7571b Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2026 11:47:08 +0800 Subject: [PATCH] fix(desktop): ignore late draft flushes (#44584) Co-authored-by: Brendonovich <14191578+Brendonovich@users.noreply.github.com> --- packages/desktop/src/main/storage/drafts.test.ts | 13 +++++++++++++ packages/desktop/src/main/storage/drafts.ts | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/packages/desktop/src/main/storage/drafts.test.ts b/packages/desktop/src/main/storage/drafts.test.ts index def7fdefb5..0fd08c300b 100644 --- a/packages/desktop/src/main/storage/drafts.test.ts +++ b/packages/desktop/src/main/storage/drafts.test.ts @@ -14,3 +14,16 @@ test("flushes the latest buffered draft and stores blobs", () => { expect(store.getBlob(id)).toEqual(bytes) store.close() }) + +test("allows repeated flushes until closing", () => { + const store = createDesktopDraftStore(":memory:") + store.set("prompt", "first") + store.flush() + store.set("prompt", "draft") + store.flush() + expect(store.get("prompt")).toBe("draft") + store.close() + + expect(() => store.flush()).not.toThrow() + expect(() => store.close()).not.toThrow() +}) diff --git a/packages/desktop/src/main/storage/drafts.ts b/packages/desktop/src/main/storage/drafts.ts index 839eff26af..0700614722 100644 --- a/packages/desktop/src/main/storage/drafts.ts +++ b/packages/desktop/src/main/storage/drafts.ts @@ -36,11 +36,14 @@ export function createDesktopDraftStore(filename: string) { .forEach(({ id }) => db.delete(blobs).where(eq(blobs.id, id)).run()) const pending = new Map() let timer: ReturnType | undefined + let closed = false const flush = () => { if (timer) clearTimeout(timer) timer = undefined + if (closed) return const writes = [...pending] pending.clear() + if (!writes.length) return db.transaction((tx) => { writes.forEach(([key, value]) => { if (value === null) tx.delete(documents).where(eq(documents.key, key)).run() @@ -75,7 +78,9 @@ export function createDesktopDraftStore(filename: string) { getBlob: (id: string) => db.select({ data: blobs.data }).from(blobs).where(eq(blobs.id, id)).get()?.data ?? null, flush, close() { + if (closed) return flush() + closed = true native.close() }, }