From 07b357de04090f9f912fae37d266f7b008a73cd1 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 20 May 2026 20:16:50 -0400 Subject: [PATCH] refactor(opencode): drop AppRuntime from instance-runtime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Builds a local ManagedRuntime over InstanceLayer.layer with the shared process-wide memoMap, so the four exported Promise helpers (load, disposeInstance, disposeAllInstances, reloadInstance) no longer go through AppRuntime. Service identity is preserved via memoMap; every caller's behavior is unchanged. One step in the broader AppRuntime removal. All public-facing exports stay the same — callers in src/cli/bootstrap, src/cli/cmd/tui/worker, src/acp/runtime, and the test fixtures don't need to change. --- .../opencode/src/project/instance-runtime.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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"