From 91561bbdfb90688a7e0a6552e388104753014792 Mon Sep 17 00:00:00 2001 From: James Long Date: Mon, 29 Jun 2026 23:03:57 -0400 Subject: [PATCH] refactor(opencode): remove app service layer exports (#34517) --- packages/opencode/src/acp/directory.ts | 10 +----- packages/opencode/src/acp/usage.ts | 8 +---- packages/opencode/src/agent/agent.ts | 11 +----- packages/opencode/src/command/index.ts | 8 +---- .../opencode/src/control-plane/workspace.ts | 15 +------- packages/opencode/src/lsp/lsp.ts | 8 +---- packages/opencode/src/mcp/index.ts | 12 +------ packages/opencode/src/plugin/index.ts | 8 +---- packages/opencode/src/project/bootstrap.ts | 15 +------- packages/opencode/src/provider/auth.ts | 6 +--- packages/opencode/src/provider/provider.ts | 14 +------- packages/opencode/src/session/compaction.ts | 15 +------- packages/opencode/src/session/instruction.ts | 10 +----- packages/opencode/src/session/llm.ts | 19 ++-------- packages/opencode/src/session/processor.ts | 19 +--------- packages/opencode/src/session/prompt.ts | 36 +------------------ packages/opencode/src/session/revert.ts | 13 +------ packages/opencode/src/session/run-state.ts | 7 +--- packages/opencode/src/session/session.ts | 15 +------- packages/opencode/src/session/status.ts | 4 +-- packages/opencode/src/session/summary.ts | 11 +----- packages/opencode/src/session/system.ts | 8 +---- packages/opencode/src/session/todo.ts | 4 +-- packages/opencode/src/share/session.ts | 9 +---- packages/opencode/src/share/share-next.ts | 12 +------ packages/opencode/src/skill/index.ts | 11 +----- packages/opencode/src/tool/registry.ts | 30 ++-------------- packages/opencode/src/worktree/index.ts | 17 +-------- 28 files changed, 31 insertions(+), 324 deletions(-) diff --git a/packages/opencode/src/acp/directory.ts b/packages/opencode/src/acp/directory.ts index ed6270debd..2301c8929a 100644 --- a/packages/opencode/src/acp/directory.ts +++ b/packages/opencode/src/acp/directory.ts @@ -141,7 +141,7 @@ export const loaderLayer = Layer.effect( }), ) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const loader = yield* Loader @@ -201,14 +201,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(loaderLayer), - Layer.provide(Provider.defaultLayer), - Layer.provide(Agent.defaultLayer), - Layer.provide(Command.defaultLayer), - Layer.provide(LayerNode.compile(InstanceStore.node, [[InstanceStore.bootstrapNode, InstanceBootstrap.node]])), -) - export const loaderNode = LayerNode.make({ service: Loader, layer: loaderLayer, diff --git a/packages/opencode/src/acp/usage.ts b/packages/opencode/src/acp/usage.ts index 32b46e8b91..737275768e 100644 --- a/packages/opencode/src/acp/usage.ts +++ b/packages/opencode/src/acp/usage.ts @@ -135,7 +135,7 @@ export const contextLimitLoaderLayer = Layer.effect( }), ) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const messageLoader = yield* MessageLoader @@ -226,12 +226,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(contextLimitLoaderLayer), - Layer.provide(Provider.defaultLayer), - Layer.provide(LayerNode.compile(InstanceStore.node, [[InstanceStore.bootstrapNode, InstanceBootstrap.node]])), -) - export const messageLoaderNode = LayerNode.unbound(MessageLoader, Node.tags.values.global) export const contextLimitLoaderNode = makeGlobalNode({ diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts index 1b079a7db3..536a642fe4 100644 --- a/packages/opencode/src/agent/agent.ts +++ b/packages/opencode/src/agent/agent.ts @@ -85,7 +85,7 @@ export class Service extends Context.Service()("@opencode/Ag export const use = serviceUse(Service) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const config = yield* Config.Service @@ -438,15 +438,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(Plugin.defaultLayer), - Layer.provide(Provider.defaultLayer), - Layer.provide(Auth.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(Skill.defaultLayer), - Layer.provide(locationServiceMapLayer), -) - const locationServiceMapNode = LayerNode.make({ service: LocationServiceMap.Service, layer: locationServiceMapLayer, diff --git a/packages/opencode/src/command/index.ts b/packages/opencode/src/command/index.ts index 9dd882db13..057754cd9e 100644 --- a/packages/opencode/src/command/index.ts +++ b/packages/opencode/src/command/index.ts @@ -55,7 +55,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/Command") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const config = yield* Config.Service @@ -172,12 +172,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(Config.defaultLayer), - Layer.provide(MCP.defaultLayer), - Layer.provide(Skill.defaultLayer), -) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [Config.node, MCP.node, Skill.node] }) export * as Command from "." diff --git a/packages/opencode/src/control-plane/workspace.ts b/packages/opencode/src/control-plane/workspace.ts index e5952e12e5..a11af085f1 100644 --- a/packages/opencode/src/control-plane/workspace.ts +++ b/packages/opencode/src/control-plane/workspace.ts @@ -150,7 +150,7 @@ export class Service extends Context.Service()("@opencode/Wo export const use = serviceUse(Service) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const auth = yield* Auth.Service @@ -893,19 +893,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(Auth.defaultLayer), - Layer.provide(Session.defaultLayer), - Layer.provide(SessionPrompt.defaultLayer), - Layer.provide(Project.defaultLayer), - Layer.provide(Vcs.defaultLayer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(Database.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(FetchHttpClient.layer), - Layer.provide(RuntimeFlags.defaultLayer), -) - const TIMEOUT = 5000 type HistoryEvent = { diff --git a/packages/opencode/src/lsp/lsp.ts b/packages/opencode/src/lsp/lsp.ts index 16fb10f7bf..1ab3a0b823 100644 --- a/packages/opencode/src/lsp/lsp.ts +++ b/packages/opencode/src/lsp/lsp.ts @@ -135,7 +135,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/LSP") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const config = yield* Config.Service @@ -496,12 +496,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(Config.defaultLayer), - Layer.provide(RuntimeFlags.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), -) - export * as Diagnostic from "./diagnostic" export const node = LayerNode.make({ diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts index c72fb47b20..e574e20fba 100644 --- a/packages/opencode/src/mcp/index.ts +++ b/packages/opencode/src/mcp/index.ts @@ -194,7 +194,7 @@ export class Service extends Context.Service()("@opencode/MC export const use = serviceUse(Service) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const spawner = yield* ChildProcessSpawner.ChildProcessSpawner @@ -1003,16 +1003,6 @@ export const layer = Layer.effect( export type AuthStatus = "authenticated" | "expired" | "not_authenticated" -// --- Per-service runtime --- - -export const defaultLayer = layer.pipe( - Layer.provide(McpAuth.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(CrossSpawnSpawner.defaultLayer), - Layer.provide(FSUtil.defaultLayer), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/plugin/index.ts b/packages/opencode/src/plugin/index.ts index 0bef896429..1558c707c3 100644 --- a/packages/opencode/src/plugin/index.ts +++ b/packages/opencode/src/plugin/index.ts @@ -120,7 +120,7 @@ async function applyPlugin(load: PluginLoader.Loaded, input: PluginInput, hooks: } } -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const events = yield* EventV2Bridge.Service @@ -305,12 +305,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(RuntimeFlags.defaultLayer), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/project/bootstrap.ts b/packages/opencode/src/project/bootstrap.ts index 2e32b4b11c..acf0caed3c 100644 --- a/packages/opencode/src/project/bootstrap.ts +++ b/packages/opencode/src/project/bootstrap.ts @@ -14,7 +14,7 @@ import { Service } from "./bootstrap-service" export { Service } from "./bootstrap-service" export type { Interface } from "./bootstrap-service" -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { // Yield each bootstrap dep at layer init so `run` itself has R = never. @@ -49,19 +49,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer: Layer.Layer = layer.pipe( - Layer.provide([ - Config.defaultLayer, - Format.defaultLayer, - LSP.defaultLayer, - Plugin.defaultLayer, - Project.defaultLayer, - ShareNext.defaultLayer, - Snapshot.defaultLayer, - Vcs.defaultLayer, - ]), -) - export const node = makeGlobalNode({ service: Service, layer: layer, diff --git a/packages/opencode/src/provider/auth.ts b/packages/opencode/src/provider/auth.ts index 6f21b75eae..416a3ea7b0 100644 --- a/packages/opencode/src/provider/auth.ts +++ b/packages/opencode/src/provider/auth.ts @@ -106,7 +106,7 @@ export class Service extends Context.Service()("@opencode/Pr export const use = serviceUse(Service) -export const layer: Layer.Layer = Layer.effect( +const layer: Layer.Layer = Layer.effect( Service, Effect.gen(function* () { const auth = yield* Auth.Service @@ -224,10 +224,6 @@ export const layer: Layer.Layer = }), ) -export const defaultLayer = Layer.suspend(() => - layer.pipe(Layer.provide(Auth.defaultLayer), Layer.provide(Plugin.defaultLayer)), -) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [Auth.node, Plugin.node] }) export * as ProviderAuth from "./auth" diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 409d890057..0ece8e9ead 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1299,7 +1299,7 @@ function modelSuggestions(provider: Info | undefined, modelID: ModelV2.ID, enabl .map((item) => item.id) } -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const fs = yield* FSUtil.Service @@ -1949,18 +1949,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = Layer.suspend(() => - layer.pipe( - Layer.provide(FSUtil.defaultLayer), - Layer.provide(Env.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(Auth.defaultLayer), - Layer.provide(Plugin.defaultLayer), - Layer.provide(ModelsDev.defaultLayer), - Layer.provide(RuntimeFlags.defaultLayer), - ), -) - const priority = ["gpt-5", "claude-sonnet-4", "big-pickle", "gemini-3-pro"] const smallModelFamilyPriority = ["gemini-flash", "gpt-nano", "claude-haiku"] export function sort(models: T[]) { diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index 5bdbfa0342..fa439e4eff 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -153,7 +153,7 @@ export class Service extends Context.Service()("@opencode/Se export const use = serviceUse(Service) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const config = yield* Config.Service @@ -544,19 +544,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = Layer.suspend(() => - layer.pipe( - Layer.provide(Provider.defaultLayer), - Layer.provide(Session.defaultLayer), - Layer.provide(SessionProcessor.defaultLayer), - Layer.provide(Agent.defaultLayer), - Layer.provide(Plugin.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(RuntimeFlags.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - ), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/session/instruction.ts b/packages/opencode/src/session/instruction.ts index df4c87df5c..7f593550d4 100644 --- a/packages/opencode/src/session/instruction.ts +++ b/packages/opencode/src/session/instruction.ts @@ -45,7 +45,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/Instruction") {} -export const layer: Layer.Layer< +const layer: Layer.Layer< Service, never, FSUtil.Service | Config.Service | Global.Service | HttpClient.HttpClient | RuntimeFlags.Service @@ -224,14 +224,6 @@ export const layer: Layer.Layer< }), ) -export const defaultLayer = layer.pipe( - Layer.provide(Config.defaultLayer), - Layer.provide(Global.layer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(FetchHttpClient.layer), - Layer.provide(RuntimeFlags.defaultLayer), -) - export function loaded(messages: SessionV1.WithParts[]) { return extract(messages) } diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index 199b4694d6..a99f8acff2 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -8,7 +8,7 @@ import { Context, Effect, Layer } from "effect" import * as Stream from "effect/Stream" import { streamText, wrapLanguageModel, type ModelMessage, type Tool } from "ai" import type { LLMEvent } from "@opencode-ai/llm" -import { LLMClient, RequestExecutor, WebSocketExecutor } from "@opencode-ai/llm/route" +import { LLMClient } from "@opencode-ai/llm/route" import type { LLMClientService } from "@opencode-ai/llm/route" import { GitLabWorkflowLanguageModel } from "gitlab-ai-provider" import { ProviderTransform } from "@/provider/transform" @@ -384,26 +384,11 @@ const live: Layer.Layer< }), ) -export const layer = live.pipe(Layer.provide(Permission.defaultLayer), Layer.provide(EventV2Bridge.defaultLayer)) - -export const defaultLayer = Layer.suspend(() => - layer.pipe( - Layer.provide(Auth.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(Provider.defaultLayer), - Layer.provide(Plugin.defaultLayer), - Layer.provide( - LLMClient.layer.pipe(Layer.provide(Layer.mergeAll(RequestExecutor.defaultLayer, WebSocketExecutor.layer))), - ), - Layer.provide(RuntimeFlags.defaultLayer), - ), -) - export const hasToolCalls = LLMRequestPrep.hasToolCalls export const node = LayerNode.make({ service: Service, - layer: layer, + layer: live, deps: [ Auth.node, Config.node, diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 55ffda5eb8..d09e6ac711 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -78,7 +78,7 @@ type StreamEvent = LLMEvent export class Service extends Context.Service()("@opencode/SessionProcessor") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const session = yield* Session.Service @@ -694,23 +694,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = Layer.suspend(() => - layer.pipe( - Layer.provide(Session.defaultLayer), - Layer.provide(Snapshot.defaultLayer), - Layer.provide(Agent.defaultLayer), - Layer.provide(LLM.defaultLayer), - Layer.provide(Permission.defaultLayer), - Layer.provide(Plugin.defaultLayer), - Layer.provide(SessionSummary.defaultLayer), - Layer.provide(SessionStatus.defaultLayer), - Layer.provide(Image.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(Database.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - ), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 6093758812..6734a1f5ac 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -110,7 +110,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SessionPrompt") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const status = yield* SessionStatus.Service @@ -1490,40 +1490,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = Layer.suspend(() => - layer.pipe( - Layer.provide(SessionRunState.defaultLayer), - Layer.provide(SessionStatus.defaultLayer), - Layer.provide(SessionCompaction.defaultLayer), - Layer.provide(SessionProcessor.defaultLayer), - Layer.provide(Command.defaultLayer), - Layer.provide(Permission.defaultLayer), - Layer.provide(MCP.defaultLayer), - Layer.provide(LSP.defaultLayer), - Layer.provide(ToolRegistry.defaultLayer), - Layer.provide(Truncate.defaultLayer), - Layer.provide(Provider.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(Instruction.defaultLayer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(Plugin.defaultLayer), - Layer.provide(Session.defaultLayer), - Layer.provide(SessionRevert.defaultLayer), - Layer.provide(SessionSummary.defaultLayer), - Layer.provide(Image.defaultLayer), - Layer.provide( - Layer.mergeAll( - Agent.defaultLayer, - Database.defaultLayer, - SystemPrompt.defaultLayer, - LLM.defaultLayer, - CrossSpawnSpawner.defaultLayer, - RuntimeFlags.defaultLayer, - EventV2Bridge.defaultLayer, - ), - ), - ), -) const ModelRef = Schema.Struct({ providerID: ProviderV2.ID, modelID: ModelV2.ID, diff --git a/packages/opencode/src/session/revert.ts b/packages/opencode/src/session/revert.ts index 4ddf38e67d..79fef2cda9 100644 --- a/packages/opencode/src/session/revert.ts +++ b/packages/opencode/src/session/revert.ts @@ -25,7 +25,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SessionRevert") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const sessions = yield* Session.Service @@ -137,17 +137,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = Layer.suspend(() => - layer.pipe( - Layer.provide(SessionRunState.defaultLayer), - Layer.provide(Session.defaultLayer), - Layer.provide(Snapshot.defaultLayer), - Layer.provide(Storage.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(SessionSummary.defaultLayer), - ), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/session/run-state.ts b/packages/opencode/src/session/run-state.ts index 17b0efaeaa..5cefdd04a3 100644 --- a/packages/opencode/src/session/run-state.ts +++ b/packages/opencode/src/session/run-state.ts @@ -26,7 +26,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SessionRunState") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const background = yield* BackgroundJob.Service @@ -108,11 +108,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(BackgroundJob.defaultLayer), - Layer.provide(SessionStatus.defaultLayer), -) - const cancelBackgroundJobs = Effect.fn("SessionRunState.cancelBackgroundJobs")(function* ( background: BackgroundJob.Interface, sessionID: SessionID, diff --git a/packages/opencode/src/session/session.ts b/packages/opencode/src/session/session.ts index f4edf50ed6..0882f17941 100644 --- a/packages/opencode/src/session/session.ts +++ b/packages/opencode/src/session/session.ts @@ -488,7 +488,7 @@ export type Patch = Omit, "time" | "share" | "summary" | "revert" permission?: Info["permission"] | null } -export const layer: Layer.Layer< +const layer: Layer.Layer< Service, never, BackgroundJob.Service | RuntimeFlags.Service | Database.Service | EventV2Bridge.Service @@ -940,19 +940,6 @@ export const layer: Layer.Layer< }), ) -export const defaultLayer = layer.pipe( - Layer.provide(BackgroundJob.defaultLayer), - Layer.provide(Database.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide( - SessionV2.defaultLayer.pipe( - Layer.provide(SessionExecutionLocal.defaultLayer), - Layer.provide(locationServiceMapLayer), - ), - ), - Layer.provide(RuntimeFlags.defaultLayer), -) - const cancelBackgroundJobs = Effect.fn("Session.cancelBackgroundJobs")(function* ( background: BackgroundJob.Interface, sessionID: SessionID, diff --git a/packages/opencode/src/session/status.ts b/packages/opencode/src/session/status.ts index 2a7830ba71..11140acfee 100644 --- a/packages/opencode/src/session/status.ts +++ b/packages/opencode/src/session/status.ts @@ -18,7 +18,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SessionStatus") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const events = yield* EventV2Bridge.Service @@ -51,8 +51,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(EventV2Bridge.defaultLayer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [EventV2Bridge.node] }) export * as SessionStatus from "./status" diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts index e36fe6116f..6484730d0b 100644 --- a/packages/opencode/src/session/summary.ts +++ b/packages/opencode/src/session/summary.ts @@ -71,7 +71,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SessionSummary") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const sessions = yield* Session.Service @@ -145,15 +145,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = Layer.suspend(() => - layer.pipe( - Layer.provide(Session.defaultLayer), - Layer.provide(Snapshot.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(Config.defaultLayer), - ), -) - export const DiffInput = Schema.Struct({ sessionID: SessionID, messageID: Schema.optional(MessageID), diff --git a/packages/opencode/src/session/system.ts b/packages/opencode/src/session/system.ts index a4664b9b37..6e5b83ec31 100644 --- a/packages/opencode/src/session/system.ts +++ b/packages/opencode/src/session/system.ts @@ -47,7 +47,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SystemPrompt") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const skill = yield* Skill.Service @@ -128,12 +128,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(Skill.defaultLayer), - Layer.provide(MCP.defaultLayer), - Layer.provide(locationServiceMapLayer), -) - const locationServiceMapNode = LayerNode.make({ service: LocationServiceMap.Service, layer: locationServiceMapLayer, diff --git a/packages/opencode/src/session/todo.ts b/packages/opencode/src/session/todo.ts index bdcbf0a6e3..cd80828de6 100644 --- a/packages/opencode/src/session/todo.ts +++ b/packages/opencode/src/session/todo.ts @@ -20,7 +20,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SessionTodo") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const events = yield* EventV2Bridge.Service @@ -69,8 +69,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(EventV2Bridge.defaultLayer), Layer.provide(Database.defaultLayer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [EventV2Bridge.node, Database.node] }) export * as Todo from "./todo" diff --git a/packages/opencode/src/share/session.ts b/packages/opencode/src/share/session.ts index 91f4b1feef..a4ef77fbfd 100644 --- a/packages/opencode/src/share/session.ts +++ b/packages/opencode/src/share/session.ts @@ -14,7 +14,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SessionShare") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const cfg = yield* Config.Service @@ -49,13 +49,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(ShareNext.defaultLayer), - Layer.provide(Session.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(RuntimeFlags.defaultLayer), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/share/share-next.ts b/packages/opencode/src/share/share-next.ts index d102548086..60112e10d9 100644 --- a/packages/opencode/src/share/share-next.ts +++ b/packages/opencode/src/share/share-next.ts @@ -109,7 +109,7 @@ function key(item: Data) { } } -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const account = yield* Account.Service @@ -362,16 +362,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(Account.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(Database.defaultLayer), - Layer.provide(FetchHttpClient.layer), - Layer.provide(Provider.defaultLayer), - Layer.provide(Session.defaultLayer), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/skill/index.ts b/packages/opencode/src/skill/index.ts index 14a378ac16..5a04ec2139 100644 --- a/packages/opencode/src/skill/index.ts +++ b/packages/opencode/src/skill/index.ts @@ -247,7 +247,7 @@ const loadSkills = Effect.fnUntraced(function* ( export class Service extends Context.Service()("@opencode/Skill") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const discovery = yield* Discovery.Service @@ -318,15 +318,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(Discovery.defaultLayer), - Layer.provide(Config.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(Global.layer), - Layer.provide(RuntimeFlags.defaultLayer), -) - export function fmt(list: Info[], opts: { verbose: boolean }) { const described = list.filter((skill) => skill.description !== undefined) if (described.length === 0) return "No skills are currently available." diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts index 553fa1ebaf..50a0d4d242 100644 --- a/packages/opencode/src/tool/registry.ts +++ b/packages/opencode/src/tool/registry.ts @@ -33,7 +33,6 @@ import { Glob } from "@opencode-ai/core/util/glob" import path from "path" import { pathToFileURL } from "url" import { Effect, Layer, Context } from "effect" -import { FetchHttpClient, HttpClient } from "effect/unstable/http" import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { Format } from "../format" @@ -80,7 +79,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/ToolRegistry") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const config = yield* Config.Service @@ -315,30 +314,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = Layer.suspend(() => - layer - .pipe( - Layer.provide(Config.defaultLayer), - Layer.provide(Plugin.defaultLayer), - Layer.provide(Question.defaultLayer), - Layer.provide(Todo.defaultLayer), - Layer.provide(Skill.defaultLayer), - Layer.provide(Agent.defaultLayer), - Layer.provide(Session.defaultLayer), - Layer.provide(BackgroundJob.defaultLayer), - Layer.provide(Provider.defaultLayer), - Layer.provide(LSP.defaultLayer), - Layer.provide(Instruction.defaultLayer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(FetchHttpClient.layer), - Layer.provide(Format.defaultLayer), - Layer.provide(CrossSpawnSpawner.defaultLayer), - Layer.provide(Truncate.defaultLayer), - ) - .pipe(Layer.provide(Database.defaultLayer), Layer.provide(RuntimeFlags.defaultLayer)), -) - function isZodType(value: unknown): value is z.ZodType { return typeof value === "object" && value !== null && "_zod" in value } @@ -417,7 +392,7 @@ function isJsonSchemaObject(value: unknown): value is Record { export const node = LayerNode.make({ service: Service, - layer: layer.pipe(Layer.provide(Ripgrep.defaultLayer)), + layer, deps: [ Config.node, Plugin.node, @@ -438,6 +413,7 @@ export const node = LayerNode.make({ Truncate.node, RuntimeFlags.node, Database.node, + Ripgrep.node, ], }) diff --git a/packages/opencode/src/worktree/index.ts b/packages/opencode/src/worktree/index.ts index e6f939be62..a0c43ed2c3 100644 --- a/packages/opencode/src/worktree/index.ts +++ b/packages/opencode/src/worktree/index.ts @@ -1,7 +1,6 @@ import { LayerNode } from "@opencode-ai/core/effect/layer-node" import { path } from "@opencode-ai/core/effect/app-node-platform" import { Global } from "@opencode-ai/core/global" -import { InstanceBootstrap } from "@/project/bootstrap" import { InstanceStore } from "@/project/instance-store" import { Project } from "@/project/project" import { Database } from "@opencode-ai/core/database/database" @@ -14,7 +13,6 @@ import { GlobalBus } from "@/bus/global" import { Git } from "@/git" import { Effect, Layer, Path, Schema, Scope, Context } from "effect" import { ChildProcess } from "effect/unstable/process" -import { NodePath } from "@effect/platform-node" import { FSUtil } from "@opencode-ai/core/fs-util" import { AppProcess } from "@opencode-ai/core/process" import { InstanceState } from "@/effect/instance-state" @@ -131,7 +129,7 @@ export class Service extends Context.Service()("@opencode/Wo type GitResult = { code: number; text: string; stderr: string } -export const layer: Layer.Layer< +const layer: Layer.Layer< Service, never, | FSUtil.Service @@ -616,19 +614,6 @@ export const layer: Layer.Layer< }), ) -export const appLayer = layer.pipe( - Layer.provide(Git.defaultLayer), - Layer.provide(AppProcess.defaultLayer), - Layer.provide(Project.defaultLayer), - Layer.provide(Database.defaultLayer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(NodePath.layer), -) - -export const defaultLayer = appLayer.pipe( - Layer.provide(LayerNode.compile(InstanceStore.node, [[InstanceStore.bootstrapNode, InstanceBootstrap.node]])), -) - export const node = LayerNode.make({ service: Service, layer: layer,