|
1 | 1 | import { GlobalBus } from "@/bus/global" |
2 | 2 | import { WorkspaceContext } from "@/control-plane/workspace-context" |
3 | 3 | import { InstanceRef } from "@/effect/instance-ref" |
4 | | -import { disposeInstance } from "@/effect/instance-registry" |
| 4 | +import { disposeInstance as runDisposers } from "@/effect/instance-registry" |
5 | 5 | import { makeRuntime } from "@/effect/run-service" |
6 | 6 | import { AppFileSystem } from "@opencode-ai/core/filesystem" |
7 | 7 | import { Context, Deferred, Duration, Effect, Exit, Layer, Scope } from "effect" |
@@ -94,7 +94,7 @@ export const layer: Layer.Layer<Service, never, Project.Service> = Layer.effect( |
94 | 94 |
|
95 | 95 | const disposeContext = Effect.fn("InstanceStore.disposeContext")(function* (ctx: InstanceContext) { |
96 | 96 | yield* Effect.logInfo("disposing instance", { directory: ctx.directory }) |
97 | | - yield* Effect.promise(() => disposeInstance(ctx.directory)) |
| 97 | + yield* Effect.promise(() => runDisposers(ctx.directory)) |
98 | 98 | yield* emitDisposed({ directory: ctx.directory, project: ctx.project.id }) |
99 | 99 | }) |
100 | 100 |
|
@@ -135,7 +135,7 @@ export const layer: Layer.Layer<Service, never, Project.Service> = Layer.effect( |
135 | 135 | yield* Effect.logInfo("reloading instance", { directory }) |
136 | 136 | if (previous) { |
137 | 137 | yield* Deferred.await(previous.deferred).pipe(Effect.ignore) |
138 | | - yield* Effect.promise(() => disposeInstance(directory)) |
| 138 | + yield* Effect.promise(() => runDisposers(directory)) |
139 | 139 | yield* emitDisposed({ directory, project: input.project?.id }) |
140 | 140 | } |
141 | 141 | yield* completeLoad(directory, input, entry) |
@@ -197,4 +197,11 @@ export const defaultLayer = layer.pipe(Layer.provide(Project.defaultLayer)) |
197 | 197 |
|
198 | 198 | export const runtime = makeRuntime(Service, defaultLayer) |
199 | 199 |
|
| 200 | +// Promise-returning helpers for callers without an Effect runtime in scope. |
| 201 | +// They route through `runtime` (not a yielded Service from a fresh runtime) |
| 202 | +// so they share the cache that `Instance.provide` populates. |
| 203 | +export const disposeInstance = (ctx: InstanceContext) => runtime.runPromise((store) => store.dispose(ctx)) |
| 204 | +export const disposeAllInstances = () => runtime.runPromise((store) => store.disposeAll()) |
| 205 | +export const reloadInstance = (input: LoadInput) => runtime.runPromise((store) => store.reload(input)) |
| 206 | + |
200 | 207 | export * as InstanceStore from "./instance-store" |
0 commit comments