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)),