diff --git a/packages/opencode/src/storage/db-effect.ts b/packages/opencode/src/storage/db-effect.ts index 8cbf889279..9eb223d7d8 100644 --- a/packages/opencode/src/storage/db-effect.ts +++ b/packages/opencode/src/storage/db-effect.ts @@ -7,6 +7,18 @@ const schema = { ...StorageSchema } export class Service extends Context.Service>()("@opencode/DatabaseEffect") {} -export const layer = Layer.sync(Service, () => drizzle({ client: Database.Client().$client, schema })) +export const layer = Layer.sync(Service, () => { + let current: EffectSQLiteDatabase | undefined + + return new Proxy({} as EffectSQLiteDatabase, { + get(_target, property) { + const client = Database.Client().$client + if (current?.$client !== client) current = drizzle({ client, schema }) + + const value = Reflect.get(current, property) + return typeof value === "function" ? value.bind(current) : value + }, + }) +}) export * as DatabaseEffect from "./db-effect"