diff --git a/packages/opencode/src/project/instance-runtime.ts b/packages/opencode/src/project/instance-runtime.ts index c8803847a0..4924ec71f5 100644 --- a/packages/opencode/src/project/instance-runtime.ts +++ b/packages/opencode/src/project/instance-runtime.ts @@ -1,16 +1,21 @@ -import { AppRuntime } from "@/effect/app-runtime" +import { Effect, ManagedRuntime } from "effect" +import { memoMap } from "@opencode-ai/core/effect/memo-map" import { type InstanceContext } from "./instance-context" +import { InstanceLayer } from "./instance-layer" import { InstanceStore, type LoadInput } from "./instance-store" // Bridge for Promise/ALS callers that cannot yet yield InstanceStore.Service. // Delete this module once those callers are migrated to Effect boundaries that // provide InstanceStore directly. -export const load = (input: LoadInput) => AppRuntime.runPromise(InstanceStore.Service.use((store) => store.load(input))) -export const disposeInstance = (ctx: InstanceContext) => - AppRuntime.runPromise(InstanceStore.Service.use((store) => store.dispose(ctx))) -export const disposeAllInstances = () => AppRuntime.runPromise(InstanceStore.Service.use((store) => store.disposeAll())) -export const reloadInstance = (input: LoadInput) => - AppRuntime.runPromise(InstanceStore.Service.use((store) => store.reload(input))) +const runtime = ManagedRuntime.make(InstanceLayer.layer, { memoMap }) + +const run = (fn: (store: InstanceStore.Interface) => Effect.Effect) => + runtime.runPromise(InstanceStore.Service.use(fn)) + +export const load = (input: LoadInput) => run((store) => store.load(input)) +export const disposeInstance = (ctx: InstanceContext) => run((store) => store.dispose(ctx)) +export const disposeAllInstances = () => run((store) => store.disposeAll()) +export const reloadInstance = (input: LoadInput) => run((store) => store.reload(input)) export * as InstanceRuntime from "./instance-runtime"