From 022c93f9df4e46a5fa94d611ac3d4021a957d229 Mon Sep 17 00:00:00 2001 From: Sebastian Herrlinger Date: Fri, 17 Apr 2026 23:24:39 +0200 Subject: [PATCH] mitigate kv corruption --- packages/opencode/src/cli/cmd/tui/context/kv.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/context/kv.tsx b/packages/opencode/src/cli/cmd/tui/context/kv.tsx index 803752e766..bb440f5cff 100644 --- a/packages/opencode/src/cli/cmd/tui/context/kv.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/kv.tsx @@ -1,7 +1,7 @@ import { Global } from "@/global" import { Filesystem } from "@/util" import { createSignal, type Setter } from "solid-js" -import { createStore } from "solid-js/store" +import { createStore, unwrap } from "solid-js/store" import { createSimpleContext } from "./helper" import path from "path" @@ -11,12 +11,15 @@ export const { use: useKV, provider: KVProvider } = createSimpleContext({ const [ready, setReady] = createSignal(false) const [store, setStore] = createStore>() const filePath = path.join(Global.Path.state, "kv.json") + let write = Promise.resolve() Filesystem.readJson>(filePath) .then((x) => { setStore(x) }) - .catch(() => {}) + .catch((error) => { + console.error("Failed to read KV state", { filePath, error }) + }) .finally(() => { setReady(true) }) @@ -44,7 +47,12 @@ export const { use: useKV, provider: KVProvider } = createSimpleContext({ }, set(key: string, value: any) { setStore(key, value) - void Filesystem.writeJson(filePath, store) + const snapshot = structuredClone(unwrap(store)) + write = write + .then(() => Filesystem.writeJson(filePath, snapshot)) + .catch((error) => { + console.error("Failed to write KV state", { filePath, error }) + }) }, } return result