diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts
index 8d11a93b39..b027c8c945 100644
--- a/packages/opencode/src/agent/agent.ts
+++ b/packages/opencode/src/agent/agent.ts
@@ -20,7 +20,7 @@ import path from "path"
import { Plugin } from "@/plugin"
import { Skill } from "../skill"
import { Effect, Context, Layer } from "effect"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import * as Option from "effect/Option"
import * as OtelTracer from "@effect/opentelemetry/Tracer"
diff --git a/packages/opencode/src/bus/bus.ts b/packages/opencode/src/bus/bus.ts
index fe9169171c..12d7f246cd 100644
--- a/packages/opencode/src/bus/bus.ts
+++ b/packages/opencode/src/bus/bus.ts
@@ -1,10 +1,10 @@
import z from "zod"
import { Effect, Exit, Layer, PubSub, Scope, Context, Stream } from "effect"
-import { EffectBridge } from "@/effect/bridge"
+import { EffectBridge } from "@/effect"
import { Log } from "../util/log"
import { BusEvent } from "./bus-event"
import { GlobalBus } from "./global"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { makeRuntime } from "@/effect/run-service"
const log = Log.create({ service: "bus" })
diff --git a/packages/opencode/src/command/command.ts b/packages/opencode/src/command/command.ts
index fe9005edb2..4ea1325240 100644
--- a/packages/opencode/src/command/command.ts
+++ b/packages/opencode/src/command/command.ts
@@ -1,6 +1,6 @@
import { BusEvent } from "@/bus/bus-event"
-import { InstanceState } from "@/effect/instance-state"
-import { EffectBridge } from "@/effect/bridge"
+import { InstanceState } from "@/effect"
+import { EffectBridge } from "@/effect"
import type { InstanceContext } from "@/project/instance"
import { SessionID, MessageID } from "@/session/schema"
import { Effect, Layer, Context } from "effect"
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 43ec8d7099..7eeacf1ffc 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -32,7 +32,7 @@ import { isRecord } from "@/util/record"
import { ConfigPaths } from "./paths"
import type { ConsoleState } from "./console-state"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Context, Duration, Effect, Exit, Fiber, Layer, Option } from "effect"
import { EffectFlock } from "@opencode-ai/shared/util/effect-flock"
diff --git a/packages/opencode/src/config/tui.ts b/packages/opencode/src/config/tui.ts
index 163bd4d7d7..24ccefecdb 100644
--- a/packages/opencode/src/config/tui.ts
+++ b/packages/opencode/src/config/tui.ts
@@ -10,7 +10,7 @@ import { Flag } from "@/flag/flag"
import { Log } from "@/util/log"
import { isRecord } from "@/util/record"
import { Global } from "@/global"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { makeRuntime } from "@/effect/run-service"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
diff --git a/packages/opencode/src/effect/bridge.ts b/packages/opencode/src/effect/bridge.ts
index bafa5a0ea6..9ca7b50ad9 100644
--- a/packages/opencode/src/effect/bridge.ts
+++ b/packages/opencode/src/effect/bridge.ts
@@ -5,45 +5,43 @@ import { LocalContext } from "@/util/local-context"
import { InstanceRef, WorkspaceRef } from "./instance-ref"
import { attachWith } from "./run-service"
-export namespace EffectBridge {
- export interface Shape {
- readonly promise: (effect: Effect.Effect) => Promise
- readonly fork: (effect: Effect.Effect) => Fiber.Fiber
- }
-
- function restore(instance: InstanceContext | undefined, workspace: string | undefined, fn: () => R): R {
- if (instance && workspace !== undefined) {
- return WorkspaceContext.restore(workspace, () => Instance.restore(instance, fn))
- }
- if (instance) return Instance.restore(instance, fn)
- if (workspace !== undefined) return WorkspaceContext.restore(workspace, fn)
- return fn()
- }
-
- export function make(): Effect.Effect {
- return Effect.gen(function* () {
- const ctx = yield* Effect.context()
- const value = yield* InstanceRef
- const instance =
- value ??
- (() => {
- try {
- return Instance.current
- } catch (err) {
- if (!(err instanceof LocalContext.NotFound)) throw err
- }
- })()
- const workspace = (yield* WorkspaceRef) ?? WorkspaceContext.workspaceID
- const attach = (effect: Effect.Effect) => attachWith(effect, { instance, workspace })
- const wrap = (effect: Effect.Effect) =>
- attach(effect).pipe(Effect.provide(ctx)) as Effect.Effect
-
- return {
- promise: (effect: Effect.Effect) =>
- restore(instance, workspace, () => Effect.runPromise(wrap(effect))),
- fork: (effect: Effect.Effect) =>
- restore(instance, workspace, () => Effect.runFork(wrap(effect))),
- } satisfies Shape
- })
- }
+export interface Shape {
+ readonly promise: (effect: Effect.Effect) => Promise
+ readonly fork: (effect: Effect.Effect) => Fiber.Fiber
+}
+
+function restore(instance: InstanceContext | undefined, workspace: string | undefined, fn: () => R): R {
+ if (instance && workspace !== undefined) {
+ return WorkspaceContext.restore(workspace, () => Instance.restore(instance, fn))
+ }
+ if (instance) return Instance.restore(instance, fn)
+ if (workspace !== undefined) return WorkspaceContext.restore(workspace, fn)
+ return fn()
+}
+
+export function make(): Effect.Effect {
+ return Effect.gen(function* () {
+ const ctx = yield* Effect.context()
+ const value = yield* InstanceRef
+ const instance =
+ value ??
+ (() => {
+ try {
+ return Instance.current
+ } catch (err) {
+ if (!(err instanceof LocalContext.NotFound)) throw err
+ }
+ })()
+ const workspace = (yield* WorkspaceRef) ?? WorkspaceContext.workspaceID
+ const attach = (effect: Effect.Effect) => attachWith(effect, { instance, workspace })
+ const wrap = (effect: Effect.Effect) =>
+ attach(effect).pipe(Effect.provide(ctx)) as Effect.Effect
+
+ return {
+ promise: (effect: Effect.Effect) =>
+ restore(instance, workspace, () => Effect.runPromise(wrap(effect))),
+ fork: (effect: Effect.Effect) =>
+ restore(instance, workspace, () => Effect.runFork(wrap(effect))),
+ } satisfies Shape
+ })
}
diff --git a/packages/opencode/src/effect/index.ts b/packages/opencode/src/effect/index.ts
new file mode 100644
index 0000000000..d10afdff2b
--- /dev/null
+++ b/packages/opencode/src/effect/index.ts
@@ -0,0 +1,2 @@
+export * as InstanceState from "./instance-state"
+export * as EffectBridge from "./bridge"
diff --git a/packages/opencode/src/effect/instance-state.ts b/packages/opencode/src/effect/instance-state.ts
index b3392d1563..2a51931ada 100644
--- a/packages/opencode/src/effect/instance-state.ts
+++ b/packages/opencode/src/effect/instance-state.ts
@@ -13,72 +13,70 @@ export interface InstanceState {
readonly cache: ScopedCache.ScopedCache
}
-export namespace InstanceState {
- export const bind = any>(fn: F): F => {
- try {
- return Instance.bind(fn)
- } catch (err) {
- if (!(err instanceof LocalContext.NotFound)) throw err
- }
- const fiber = Fiber.getCurrent()
- const ctx = fiber ? Context.getReferenceUnsafe(fiber.context, InstanceRef) : undefined
- if (!ctx) return fn
- return ((...args: any[]) => Instance.restore(ctx, () => fn(...args))) as F
+export const bind = any>(fn: F): F => {
+ try {
+ return Instance.bind(fn)
+ } catch (err) {
+ if (!(err instanceof LocalContext.NotFound)) throw err
}
-
- export const context = Effect.gen(function* () {
- return (yield* InstanceRef) ?? Instance.current
- })
-
- export const workspaceID = Effect.gen(function* () {
- return (yield* WorkspaceRef) ?? WorkspaceContext.workspaceID
- })
-
- export const directory = Effect.map(context, (ctx) => ctx.directory)
-
- export const make = (
- init: (ctx: InstanceContext) => Effect.Effect,
- ): Effect.Effect>, never, R | Scope.Scope> =>
- Effect.gen(function* () {
- const cache = yield* ScopedCache.make({
- capacity: Number.POSITIVE_INFINITY,
- lookup: () =>
- Effect.gen(function* () {
- return yield* init(yield* context)
- }),
- })
-
- const off = registerDisposer((directory) =>
- Effect.runPromise(ScopedCache.invalidate(cache, directory).pipe(Effect.provide(EffectLogger.layer))),
- )
- yield* Effect.addFinalizer(() => Effect.sync(off))
-
- return {
- [TypeId]: TypeId,
- cache,
- }
- })
-
- export const get = (self: InstanceState) =>
- Effect.gen(function* () {
- return yield* ScopedCache.get(self.cache, yield* directory)
- })
-
- export const use = (self: InstanceState, select: (value: A) => B) =>
- Effect.map(get(self), select)
-
- export const useEffect = (
- self: InstanceState,
- select: (value: A) => Effect.Effect,
- ) => Effect.flatMap(get(self), select)
-
- export const has = (self: InstanceState) =>
- Effect.gen(function* () {
- return yield* ScopedCache.has(self.cache, yield* directory)
- })
-
- export const invalidate = (self: InstanceState) =>
- Effect.gen(function* () {
- return yield* ScopedCache.invalidate(self.cache, yield* directory)
- })
+ const fiber = Fiber.getCurrent()
+ const ctx = fiber ? Context.getReferenceUnsafe(fiber.context, InstanceRef) : undefined
+ if (!ctx) return fn
+ return ((...args: any[]) => Instance.restore(ctx, () => fn(...args))) as F
}
+
+export const context = Effect.gen(function* () {
+ return (yield* InstanceRef) ?? Instance.current
+})
+
+export const workspaceID = Effect.gen(function* () {
+ return (yield* WorkspaceRef) ?? WorkspaceContext.workspaceID
+})
+
+export const directory = Effect.map(context, (ctx) => ctx.directory)
+
+export const make = (
+ init: (ctx: InstanceContext) => Effect.Effect,
+): Effect.Effect>, never, R | Scope.Scope> =>
+ Effect.gen(function* () {
+ const cache = yield* ScopedCache.make({
+ capacity: Number.POSITIVE_INFINITY,
+ lookup: () =>
+ Effect.gen(function* () {
+ return yield* init(yield* context)
+ }),
+ })
+
+ const off = registerDisposer((directory) =>
+ Effect.runPromise(ScopedCache.invalidate(cache, directory).pipe(Effect.provide(EffectLogger.layer))),
+ )
+ yield* Effect.addFinalizer(() => Effect.sync(off))
+
+ return {
+ [TypeId]: TypeId,
+ cache,
+ }
+ })
+
+export const get = (self: InstanceState) =>
+ Effect.gen(function* () {
+ return yield* ScopedCache.get(self.cache, yield* directory)
+ })
+
+export const use = (self: InstanceState, select: (value: A) => B) =>
+ Effect.map(get(self), select)
+
+export const useEffect = (
+ self: InstanceState,
+ select: (value: A) => Effect.Effect,
+) => Effect.flatMap(get(self), select)
+
+export const has = (self: InstanceState) =>
+ Effect.gen(function* () {
+ return yield* ScopedCache.has(self.cache, yield* directory)
+ })
+
+export const invalidate = (self: InstanceState) =>
+ Effect.gen(function* () {
+ return yield* ScopedCache.invalidate(self.cache, yield* directory)
+ })
diff --git a/packages/opencode/src/env/env.ts b/packages/opencode/src/env/env.ts
index 0ffd5ebdc3..618ae32684 100644
--- a/packages/opencode/src/env/env.ts
+++ b/packages/opencode/src/env/env.ts
@@ -1,5 +1,5 @@
import { Context, Effect, Layer } from "effect"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
type State = Record
diff --git a/packages/opencode/src/file/file.ts b/packages/opencode/src/file/file.ts
index a101574f61..35f2a8740a 100644
--- a/packages/opencode/src/file/file.ts
+++ b/packages/opencode/src/file/file.ts
@@ -1,5 +1,5 @@
import { BusEvent } from "@/bus/bus-event"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Git } from "@/git"
diff --git a/packages/opencode/src/file/time.ts b/packages/opencode/src/file/time.ts
index 853da3bd98..86b6b4116b 100644
--- a/packages/opencode/src/file/time.ts
+++ b/packages/opencode/src/file/time.ts
@@ -1,5 +1,5 @@
import { DateTime, Effect, Layer, Option, Semaphore, Context } from "effect"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Flag } from "@/flag/flag"
import type { SessionID } from "@/session/schema"
diff --git a/packages/opencode/src/file/watcher.ts b/packages/opencode/src/file/watcher.ts
index 4dcec5094c..ab5942547d 100644
--- a/packages/opencode/src/file/watcher.ts
+++ b/packages/opencode/src/file/watcher.ts
@@ -7,7 +7,7 @@ import path from "path"
import z from "zod"
import { Bus } from "@/bus"
import { BusEvent } from "@/bus/bus-event"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Flag } from "@/flag/flag"
import { Git } from "@/git"
import { Instance } from "@/project/instance"
diff --git a/packages/opencode/src/format/format.ts b/packages/opencode/src/format/format.ts
index 6df00d3db3..2ce922495e 100644
--- a/packages/opencode/src/format/format.ts
+++ b/packages/opencode/src/format/format.ts
@@ -1,7 +1,7 @@
import { Effect, Layer, Context } from "effect"
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process"
import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import path from "path"
import { mergeDeep } from "remeda"
import z from "zod"
diff --git a/packages/opencode/src/lsp/index.ts b/packages/opencode/src/lsp/index.ts
index 4daacd30b8..f567868f68 100644
--- a/packages/opencode/src/lsp/index.ts
+++ b/packages/opencode/src/lsp/index.ts
@@ -12,7 +12,7 @@ import { Flag } from "@/flag/flag"
import { Process } from "../util/process"
import { spawn as lspspawn } from "./launch"
import { Effect, Layer, Context } from "effect"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
export namespace LSP {
const log = Log.create({ service: "lsp" })
diff --git a/packages/opencode/src/mcp/mcp.ts b/packages/opencode/src/mcp/mcp.ts
index 947f29c05b..f5179b224d 100644
--- a/packages/opencode/src/mcp/mcp.ts
+++ b/packages/opencode/src/mcp/mcp.ts
@@ -25,8 +25,8 @@ import { Bus } from "@/bus"
import { TuiEvent } from "@/cli/cmd/tui/event"
import open from "open"
import { Effect, Exit, Layer, Option, Context, Stream } from "effect"
-import { EffectBridge } from "@/effect/bridge"
-import { InstanceState } from "@/effect/instance-state"
+import { EffectBridge } from "@/effect"
+import { InstanceState } from "@/effect"
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process"
import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner"
diff --git a/packages/opencode/src/permission/permission.ts b/packages/opencode/src/permission/permission.ts
index a5f6ded329..e2dead8fe2 100644
--- a/packages/opencode/src/permission/permission.ts
+++ b/packages/opencode/src/permission/permission.ts
@@ -1,7 +1,7 @@
import { Bus } from "@/bus"
import { BusEvent } from "@/bus/bus-event"
import { Config } from "@/config"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { ProjectID } from "@/project/schema"
import { MessageID, SessionID } from "@/session/schema"
import { PermissionTable } from "@/session/session.sql"
diff --git a/packages/opencode/src/plugin/plugin.ts b/packages/opencode/src/plugin/plugin.ts
index 537794138a..23c807ebe7 100644
--- a/packages/opencode/src/plugin/plugin.ts
+++ b/packages/opencode/src/plugin/plugin.ts
@@ -18,8 +18,8 @@ import { gitlabAuthPlugin as GitlabAuthPlugin } from "opencode-gitlab-auth"
import { PoeAuthPlugin } from "opencode-poe-auth"
import { CloudflareAIGatewayAuthPlugin, CloudflareWorkersAuthPlugin } from "./cloudflare"
import { Effect, Layer, Context, Stream } from "effect"
-import { EffectBridge } from "@/effect/bridge"
-import { InstanceState } from "@/effect/instance-state"
+import { EffectBridge } from "@/effect"
+import { InstanceState } from "@/effect"
import { errorMessage } from "@/util/error"
import { PluginLoader } from "./loader"
import { parsePluginSpecifier, readPluginId, readV1Plugin, resolvePluginId } from "./shared"
diff --git a/packages/opencode/src/project/vcs.ts b/packages/opencode/src/project/vcs.ts
index e4093fd456..187c616602 100644
--- a/packages/opencode/src/project/vcs.ts
+++ b/packages/opencode/src/project/vcs.ts
@@ -3,7 +3,7 @@ import { formatPatch, structuredPatch } from "diff"
import path from "path"
import { Bus } from "@/bus"
import { BusEvent } from "@/bus/bus-event"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { FileWatcher } from "@/file/watcher"
import { Git } from "@/git"
diff --git a/packages/opencode/src/provider/auth.ts b/packages/opencode/src/provider/auth.ts
index 0f2923a587..fd71f2f7a3 100644
--- a/packages/opencode/src/provider/auth.ts
+++ b/packages/opencode/src/provider/auth.ts
@@ -1,7 +1,7 @@
import type { AuthOAuthResult, Hooks } from "@opencode-ai/plugin"
import { NamedError } from "@opencode-ai/shared/util/error"
import { Auth } from "@/auth"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { zod } from "@/util/effect-zod"
import { withStatics } from "@/util/schema"
import { Plugin } from "../plugin"
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index fed4d93583..ef6cbd61e7 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -19,8 +19,8 @@ import { iife } from "@/util/iife"
import { Global } from "../global"
import path from "path"
import { Effect, Layer, Context } from "effect"
-import { EffectBridge } from "@/effect/bridge"
-import { InstanceState } from "@/effect/instance-state"
+import { EffectBridge } from "@/effect"
+import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { isRecord } from "@/util/record"
diff --git a/packages/opencode/src/pty/service.ts b/packages/opencode/src/pty/service.ts
index 3359d0aabf..ff52095b4f 100644
--- a/packages/opencode/src/pty/service.ts
+++ b/packages/opencode/src/pty/service.ts
@@ -1,6 +1,6 @@
import { BusEvent } from "@/bus/bus-event"
import { Bus } from "@/bus"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Instance } from "@/project/instance"
import type { Proc } from "#pty"
import z from "zod"
@@ -10,7 +10,7 @@ import { Shell } from "@/shell/shell"
import { Plugin } from "@/plugin"
import { PtyID } from "./schema"
import { Effect, Layer, Context } from "effect"
-import { EffectBridge } from "@/effect/bridge"
+import { EffectBridge } from "@/effect"
const log = Log.create({ service: "pty" })
diff --git a/packages/opencode/src/question/index.ts b/packages/opencode/src/question/index.ts
index ba76efa640..8d023c18bf 100644
--- a/packages/opencode/src/question/index.ts
+++ b/packages/opencode/src/question/index.ts
@@ -1,7 +1,7 @@
import { Deferred, Effect, Layer, Schema, Context } from "effect"
import { Bus } from "@/bus"
import { BusEvent } from "@/bus/bus-event"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { SessionID, MessageID } from "@/session/schema"
import { zod } from "@/util/effect-zod"
import { Log } from "@/util/log"
diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts
index 644a76752d..3d39a60555 100644
--- a/packages/opencode/src/session/compaction.ts
+++ b/packages/opencode/src/session/compaction.ts
@@ -14,7 +14,7 @@ import { Config } from "@/config"
import { NotFoundError } from "@/storage/db"
import { ModelID, ProviderID } from "@/provider/schema"
import { Effect, Layer, Context } from "effect"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { isOverflow as overflow } from "./overflow"
export namespace SessionCompaction {
diff --git a/packages/opencode/src/session/instruction.ts b/packages/opencode/src/session/instruction.ts
index 23dd88ff5a..076c81ec75 100644
--- a/packages/opencode/src/session/instruction.ts
+++ b/packages/opencode/src/session/instruction.ts
@@ -3,7 +3,7 @@ import path from "path"
import { Effect, Layer, Context } from "effect"
import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http"
import { Config } from "@/config"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Flag } from "@/flag/flag"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { withTransientReadRetry } from "@/util/effect-http-client"
diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts
index 3db1c99d6b..bde36d2638 100644
--- a/packages/opencode/src/session/llm.ts
+++ b/packages/opencode/src/session/llm.ts
@@ -20,7 +20,7 @@ import { Wildcard } from "@/util/wildcard"
import { SessionID } from "@/session/schema"
import { Auth } from "@/auth"
import { Installation } from "@/installation"
-import { EffectBridge } from "@/effect/bridge"
+import { EffectBridge } from "@/effect"
import * as Option from "effect/Option"
import * as OtelTracer from "@effect/opentelemetry/Tracer"
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index b699676897..7a74939034 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -45,10 +45,10 @@ import { decodeDataUrl } from "@/util/data-url"
import { Process } from "@/util/process"
import { Cause, Effect, Exit, Layer, Option, Scope, Context } from "effect"
import { EffectLogger } from "@/effect/logger"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { TaskTool, type TaskPromptOps } from "@/tool/task"
import { SessionRunState } from "./run-state"
-import { EffectBridge } from "@/effect/bridge"
+import { EffectBridge } from "@/effect"
// @ts-ignore
globalThis.AI_SDK_LOG_WARNINGS = false
diff --git a/packages/opencode/src/session/run-state.ts b/packages/opencode/src/session/run-state.ts
index f67c726ec7..922daf1178 100644
--- a/packages/opencode/src/session/run-state.ts
+++ b/packages/opencode/src/session/run-state.ts
@@ -1,4 +1,4 @@
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Runner } from "@/effect/runner"
import { Effect, Layer, Scope, Context } from "effect"
import { Session } from "."
diff --git a/packages/opencode/src/session/session.ts b/packages/opencode/src/session/session.ts
index 12ecd85529..0b82d8b99f 100644
--- a/packages/opencode/src/session/session.ts
+++ b/packages/opencode/src/session/session.ts
@@ -18,7 +18,7 @@ import { Log } from "../util/log"
import { updateSchema } from "../util/update-schema"
import { MessageV2 } from "./message-v2"
import { Instance } from "../project/instance"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Snapshot } from "@/snapshot"
import { ProjectID } from "../project/schema"
import { WorkspaceID } from "../control-plane/schema"
diff --git a/packages/opencode/src/session/status.ts b/packages/opencode/src/session/status.ts
index 5800cb7322..f0d4e6cf79 100644
--- a/packages/opencode/src/session/status.ts
+++ b/packages/opencode/src/session/status.ts
@@ -1,6 +1,6 @@
import { BusEvent } from "@/bus/bus-event"
import { Bus } from "@/bus"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { SessionID } from "./schema"
import { Effect, Layer, Context } from "effect"
import z from "zod"
diff --git a/packages/opencode/src/share/share-next.ts b/packages/opencode/src/share/share-next.ts
index c764c20b99..9b345ac8ef 100644
--- a/packages/opencode/src/share/share-next.ts
+++ b/packages/opencode/src/share/share-next.ts
@@ -3,7 +3,7 @@ import { Effect, Exit, Layer, Option, Schema, Scope, Context, Stream } from "eff
import { FetchHttpClient, HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
import { Account } from "@/account"
import { Bus } from "@/bus"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Provider } from "@/provider"
import { ModelID, ProviderID } from "@/provider/schema"
import { Session } from "@/session"
@@ -142,7 +142,7 @@ export namespace ShareNext {
})
}
- const state: InstanceState = yield* InstanceState.make(
+ const state: InstanceState.InstanceState = yield* InstanceState.make(
Effect.fn("ShareNext.state")(function* (_ctx) {
const cache: State = { queue: new Map(), scope: yield* Scope.make() }
diff --git a/packages/opencode/src/skill/skill.ts b/packages/opencode/src/skill/skill.ts
index afc6446678..3122115cd3 100644
--- a/packages/opencode/src/skill/skill.ts
+++ b/packages/opencode/src/skill/skill.ts
@@ -6,7 +6,7 @@ import { Effect, Layer, Context } from "effect"
import { NamedError } from "@opencode-ai/shared/util/error"
import type { Agent } from "@/agent/agent"
import { Bus } from "@/bus"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Flag } from "@/flag/flag"
import { Global } from "@/global"
import { Permission } from "@/permission"
diff --git a/packages/opencode/src/snapshot/snapshot.ts b/packages/opencode/src/snapshot/snapshot.ts
index 6624dee986..7aa3a4debf 100644
--- a/packages/opencode/src/snapshot/snapshot.ts
+++ b/packages/opencode/src/snapshot/snapshot.ts
@@ -4,7 +4,7 @@ import { formatPatch, structuredPatch } from "diff"
import path from "path"
import z from "zod"
import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Hash } from "@opencode-ai/shared/util/hash"
import { Config } from "../config"
diff --git a/packages/opencode/src/storage/db.ts b/packages/opencode/src/storage/db.ts
index 68a41e471f..247cb347cb 100644
--- a/packages/opencode/src/storage/db.ts
+++ b/packages/opencode/src/storage/db.ts
@@ -12,7 +12,7 @@ import path from "path"
import { readFileSync, readdirSync, existsSync } from "fs"
import { Flag } from "../flag/flag"
import { CHANNEL } from "../installation/meta"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { iife } from "@/util/iife"
import { init } from "#db"
diff --git a/packages/opencode/src/tool/external-directory.ts b/packages/opencode/src/tool/external-directory.ts
index 352cc07390..c91b698038 100644
--- a/packages/opencode/src/tool/external-directory.ts
+++ b/packages/opencode/src/tool/external-directory.ts
@@ -1,7 +1,7 @@
import path from "path"
import { Effect } from "effect"
import { EffectLogger } from "@/effect/logger"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import type { Tool } from "./tool"
import { Instance } from "../project/instance"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
diff --git a/packages/opencode/src/tool/glob.ts b/packages/opencode/src/tool/glob.ts
index 778a74ddcf..0a0a8f1e25 100644
--- a/packages/opencode/src/tool/glob.ts
+++ b/packages/opencode/src/tool/glob.ts
@@ -2,7 +2,7 @@ import path from "path"
import z from "zod"
import { Effect, Option } from "effect"
import * as Stream from "effect/Stream"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Ripgrep } from "../file/ripgrep"
import { assertExternalDirectoryEffect } from "./external-directory"
diff --git a/packages/opencode/src/tool/grep.ts b/packages/opencode/src/tool/grep.ts
index 9a2bab5b2d..b6b4a063f0 100644
--- a/packages/opencode/src/tool/grep.ts
+++ b/packages/opencode/src/tool/grep.ts
@@ -1,7 +1,7 @@
import path from "path"
import z from "zod"
import { Effect, Option } from "effect"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { Ripgrep } from "../file/ripgrep"
import { assertExternalDirectoryEffect } from "./external-directory"
diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts
index b9870d194d..6171e4366e 100644
--- a/packages/opencode/src/tool/registry.ts
+++ b/packages/opencode/src/tool/registry.ts
@@ -35,7 +35,7 @@ import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner
import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner"
import { Ripgrep } from "../file/ripgrep"
import { Format } from "../format"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
import { Question } from "../question"
import { Todo } from "../session/todo"
import { LSP } from "../lsp"
diff --git a/packages/opencode/src/worktree/worktree.ts b/packages/opencode/src/worktree/worktree.ts
index 674d4d7570..fab9ce57fa 100644
--- a/packages/opencode/src/worktree/worktree.ts
+++ b/packages/opencode/src/worktree/worktree.ts
@@ -19,7 +19,7 @@ import { NodePath } from "@effect/platform-node"
import { AppFileSystem } from "@opencode-ai/shared/filesystem"
import { BootstrapRuntime } from "@/effect/bootstrap-runtime"
import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner"
-import { InstanceState } from "@/effect/instance-state"
+import { InstanceState } from "@/effect"
const log = Log.create({ service: "worktree" })
diff --git a/packages/opencode/test/effect/app-runtime-logger.test.ts b/packages/opencode/test/effect/app-runtime-logger.test.ts
index 7388748f92..91f367ff3e 100644
--- a/packages/opencode/test/effect/app-runtime-logger.test.ts
+++ b/packages/opencode/test/effect/app-runtime-logger.test.ts
@@ -1,7 +1,7 @@
import { expect, test } from "bun:test"
import { Context, Effect, Layer, Logger } from "effect"
import { AppRuntime } from "../../src/effect/app-runtime"
-import { EffectBridge } from "../../src/effect/bridge"
+import { EffectBridge } from "../../src/effect"
import { InstanceRef } from "../../src/effect/instance-ref"
import { EffectLogger } from "../../src/effect/logger"
import { makeRuntime } from "../../src/effect/run-service"
diff --git a/packages/opencode/test/effect/instance-state.test.ts b/packages/opencode/test/effect/instance-state.test.ts
index ca74c915be..50206ba84f 100644
--- a/packages/opencode/test/effect/instance-state.test.ts
+++ b/packages/opencode/test/effect/instance-state.test.ts
@@ -1,11 +1,11 @@
import { afterEach, expect, test } from "bun:test"
import { Deferred, Duration, Effect, Exit, Fiber, Layer, ManagedRuntime, Context } from "effect"
-import { InstanceState } from "../../src/effect/instance-state"
+import { InstanceState } from "../../src/effect"
import { InstanceRef } from "../../src/effect/instance-ref"
import { Instance } from "../../src/project/instance"
import { tmpdir } from "../fixture/fixture"
-async function access(state: InstanceState, dir: string) {
+async function access(state: InstanceState.InstanceState, dir: string) {
return Instance.provide({
directory: dir,
fn: () => Effect.runPromise(InstanceState.get(state)),