From cd3cf08eb0def7346ac2b12e7cb9f3618ab91f1e Mon Sep 17 00:00:00 2001 From: James Long Date: Mon, 29 Jun 2026 18:08:28 -0400 Subject: [PATCH 1/4] refactor(opencode): remove app service layer exports --- 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, From 324fcaa4301abc7310ad93345a65a2f37f7813bb Mon Sep 17 00:00:00 2001 From: James Long Date: Mon, 29 Jun 2026 18:09:10 -0400 Subject: [PATCH 2/4] refactor(opencode): remove core service layer exports --- packages/opencode/src/account/account.ts | 4 +--- packages/opencode/src/account/repo.ts | 4 +--- packages/opencode/src/acp/session.ts | 4 +--- packages/opencode/src/auth/index.ts | 4 +--- packages/opencode/src/background/job.ts | 4 +--- packages/opencode/src/config/config.ts | 12 +----------- packages/opencode/src/effect/runtime-flags.ts | 4 +--- packages/opencode/src/env/index.ts | 4 +--- packages/opencode/src/event-v2-bridge.ts | 4 +--- packages/opencode/src/format/index.ts | 8 +------- packages/opencode/src/git/index.ts | 4 +--- packages/opencode/src/image/image.ts | 4 +--- packages/opencode/src/mcp/auth.ts | 4 +--- packages/opencode/src/permission/index.ts | 4 +--- packages/opencode/src/project/instance-store.ts | 4 +--- packages/opencode/src/project/project.ts | 13 +------------ packages/opencode/src/project/vcs.ts | 4 +--- packages/opencode/src/question/index.ts | 4 +--- packages/opencode/src/skill/discovery.ts | 8 +------- packages/opencode/src/snapshot/index.ts | 8 +------- packages/opencode/src/storage/storage.ts | 4 +--- packages/opencode/src/tool/truncate.ts | 4 +--- 22 files changed, 22 insertions(+), 95 deletions(-) diff --git a/packages/opencode/src/account/account.ts b/packages/opencode/src/account/account.ts index 5772355ac4..af8ef761eb 100644 --- a/packages/opencode/src/account/account.ts +++ b/packages/opencode/src/account/account.ts @@ -186,7 +186,7 @@ export class Service extends Context.Service()("@opencode/Ac export const use = serviceUse(Service) -export const layer: Layer.Layer = Layer.effect( +const layer: Layer.Layer = Layer.effect( Service, Effect.gen(function* () { const repo = yield* AccountRepo.Service @@ -456,8 +456,6 @@ export const layer: Layer.Layer()("@opencode/Ac export const use = serviceUse(Service) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const { db } = yield* Database.Service @@ -166,8 +166,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(Database.defaultLayer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [Database.node] }) export * as AccountRepo from "./repo" diff --git a/packages/opencode/src/acp/session.ts b/packages/opencode/src/acp/session.ts index ea76cd91f8..f6a7a56bac 100644 --- a/packages/opencode/src/acp/session.ts +++ b/packages/opencode/src/acp/session.ts @@ -94,7 +94,7 @@ export class Service extends Context.Service()("@opencode/AC type State = Map -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const sessions = yield* Ref.make(new Map()) @@ -201,8 +201,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer - export const node = LayerNode.make({ service: Service, layer, deps: [] }) function makeSession(input: StoreInput): Info { diff --git a/packages/opencode/src/auth/index.ts b/packages/opencode/src/auth/index.ts index 0ec33eea04..a133e88498 100644 --- a/packages/opencode/src/auth/index.ts +++ b/packages/opencode/src/auth/index.ts @@ -49,7 +49,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/Auth") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const fsys = yield* FSUtil.Service @@ -92,8 +92,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(FSUtil.defaultLayer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [FSUtil.node] }) export * as Auth from "." diff --git a/packages/opencode/src/background/job.ts b/packages/opencode/src/background/job.ts index 8095826efc..261f5ad02b 100644 --- a/packages/opencode/src/background/job.ts +++ b/packages/opencode/src/background/job.ts @@ -15,7 +15,7 @@ export { } from "@opencode-ai/core/background-job" /** Keeps the legacy service instance-scoped while sharing the core registry engine. */ -export const layer = Layer.effect( +const layer = Layer.effect( CoreBackgroundJob.Service, Effect.gen(function* () { const state = yield* InstanceState.make(() => CoreBackgroundJob.make) @@ -32,8 +32,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer - export const node = LayerNode.make({ service: CoreBackgroundJob.Service, layer, deps: [] }) export * as BackgroundJob from "./job" diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 4db0dbcef3..35bd2e0cce 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -172,7 +172,7 @@ function writableGlobal(info: Info) { return next } -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const fs = yield* FSUtil.Service @@ -671,16 +671,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(EffectFlock.defaultLayer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(Env.defaultLayer), - Layer.provide(Auth.defaultLayer), - Layer.provide(Account.defaultLayer), - Layer.provide(Npm.defaultLayer), - Layer.provide(FetchHttpClient.layer), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/effect/runtime-flags.ts b/packages/opencode/src/effect/runtime-flags.ts index 1f8e590111..f2e5e53192 100644 --- a/packages/opencode/src/effect/runtime-flags.ts +++ b/packages/opencode/src/effect/runtime-flags.ts @@ -71,9 +71,7 @@ export const layer = (overrides: Partial = {}) => }), ).pipe(Layer.provide(emptyConfigLayer)) -export const defaultLayer = Service.defaultLayer.pipe(Layer.orDie) - -export const node = LayerNode.make({ service: Service, layer: defaultLayer, deps: [] }) +export const node = LayerNode.make({ service: Service, layer: Service.defaultLayer.pipe(Layer.orDie), deps: [] }) export * as RuntimeFlags from "./runtime-flags" import { LayerNode } from "@opencode-ai/core/effect/layer-node" diff --git a/packages/opencode/src/env/index.ts b/packages/opencode/src/env/index.ts index 98dd0b3004..5879f27fe3 100644 --- a/packages/opencode/src/env/index.ts +++ b/packages/opencode/src/env/index.ts @@ -16,7 +16,7 @@ export class Service extends Context.Service()("@opencode/En export const use = serviceUse(Service) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const state = yield* InstanceState.make(Effect.fn("Env.state")(() => Effect.succeed({ ...process.env }))) @@ -36,8 +36,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer - export const node = LayerNode.make({ service: Service, layer: layer, deps: [] }) export * as Env from "." diff --git a/packages/opencode/src/event-v2-bridge.ts b/packages/opencode/src/event-v2-bridge.ts index 0231207334..8e65f2752d 100644 --- a/packages/opencode/src/event-v2-bridge.ts +++ b/packages/opencode/src/event-v2-bridge.ts @@ -11,7 +11,7 @@ import { Context, Effect, Layer } from "effect" export class Service extends Context.Service()("@opencode/EventV2Bridge") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const events = yield* EventV2.Service @@ -66,8 +66,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(EventV2.defaultLayer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [EventV2.node] }) export * as EventV2Bridge from "./event-v2-bridge" diff --git a/packages/opencode/src/format/index.ts b/packages/opencode/src/format/index.ts index 413c147d64..4288f83efc 100644 --- a/packages/opencode/src/format/index.ts +++ b/packages/opencode/src/format/index.ts @@ -28,7 +28,7 @@ export class Service extends Context.Service()("@opencode/Fo export const use = serviceUse(Service) -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const config = yield* Config.Service @@ -194,12 +194,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(Config.defaultLayer), - Layer.provide(AppProcess.defaultLayer), - Layer.provide(RuntimeFlags.defaultLayer), -) - export const node = LayerNode.make({ service: Service, layer: layer, diff --git a/packages/opencode/src/git/index.ts b/packages/opencode/src/git/index.ts index 81358ef960..968e394a95 100644 --- a/packages/opencode/src/git/index.ts +++ b/packages/opencode/src/git/index.ts @@ -100,7 +100,7 @@ const kind = (code: string): Kind => { export class Service extends Context.Service()("@opencode/Git") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const appProcess = yield* AppProcess.Service @@ -343,8 +343,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(AppProcess.defaultLayer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [AppProcess.node] }) export * as Git from "." diff --git a/packages/opencode/src/image/image.ts b/packages/opencode/src/image/image.ts index a2edf352e4..744bd3fc95 100644 --- a/packages/opencode/src/image/image.ts +++ b/packages/opencode/src/image/image.ts @@ -56,7 +56,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/Image") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const config = yield* Config.Service @@ -167,8 +167,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(Config.defaultLayer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [Config.node] }) export * as Image from "./image" diff --git a/packages/opencode/src/mcp/auth.ts b/packages/opencode/src/mcp/auth.ts index f877824e02..808aa30296 100644 --- a/packages/opencode/src/mcp/auth.ts +++ b/packages/opencode/src/mcp/auth.ts @@ -56,7 +56,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 fs = yield* FSUtil.Service @@ -158,8 +158,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(EffectFlock.defaultLayer), Layer.provide(FSUtil.defaultLayer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [FSUtil.node, EffectFlock.node] }) export * as McpAuth from "./auth" diff --git a/packages/opencode/src/permission/index.ts b/packages/opencode/src/permission/index.ts index e1eb13ccc8..396d192018 100644 --- a/packages/opencode/src/permission/index.ts +++ b/packages/opencode/src/permission/index.ts @@ -39,7 +39,7 @@ export function evaluate(permission: string, pattern: string, ...rulesets: Permi export class Service extends Context.Service()("@opencode/Permission") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const events = yield* EventV2Bridge.Service @@ -213,8 +213,6 @@ export function disabled(tools: string[], ruleset: PermissionV1.Ruleset): Set } -export const layer: Layer.Layer = Layer.effect( +const layer: Layer.Layer = Layer.effect( Service, Effect.gen(function* () { const project = yield* Project.Service @@ -202,8 +202,6 @@ export const layer: Layer.Layer()("@opencode/Pr type GitResult = { code: number; text: string; stderr: string } -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const fs = yield* FSUtil.Service @@ -463,17 +463,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe( - Layer.provide(EventV2Bridge.defaultLayer), - Layer.provide(ProjectV2.defaultLayer), - Layer.provide(ProjectDirectories.defaultLayer), - Layer.provide(AppProcess.defaultLayer), - Layer.provide(CrossSpawnSpawner.defaultLayer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(Database.defaultLayer), - Layer.provide(RuntimeFlags.defaultLayer), -) - export const use = serviceUse(Service) export const node = LayerNode.make({ diff --git a/packages/opencode/src/project/vcs.ts b/packages/opencode/src/project/vcs.ts index 164bcbbd2d..eca56c0501 100644 --- a/packages/opencode/src/project/vcs.ts +++ b/packages/opencode/src/project/vcs.ts @@ -295,7 +295,7 @@ interface State { export class Service extends Context.Service()("@opencode/Vcs") {} -export const layer: Layer.Layer = Layer.effect( +const layer: Layer.Layer = Layer.effect( Service, Effect.gen(function* () { const git = yield* Git.Service @@ -418,8 +418,6 @@ export const layer: Layer.Layer()("@opencode/Question") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const events = yield* EventV2Bridge.Service @@ -156,8 +156,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 Question from "." diff --git a/packages/opencode/src/skill/discovery.ts b/packages/opencode/src/skill/discovery.ts index ba7d2e25a9..b56a67610f 100644 --- a/packages/opencode/src/skill/discovery.ts +++ b/packages/opencode/src/skill/discovery.ts @@ -26,7 +26,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/SkillDiscovery") {} -export const layer: Layer.Layer = Layer.effect( +const layer: Layer.Layer = Layer.effect( Service, Effect.gen(function* () { const fs = yield* FSUtil.Service @@ -135,12 +135,6 @@ export const layer: Layer.Layer = layer.pipe( - Layer.provide(FetchHttpClient.layer), - Layer.provide(FSUtil.defaultLayer), - Layer.provide(NodePath.layer), -) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [FSUtil.node, path, httpClient] }) export * as Discovery from "./discovery" diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts index 0ab48604a5..4da9bc3ca8 100644 --- a/packages/opencode/src/snapshot/index.ts +++ b/packages/opencode/src/snapshot/index.ts @@ -46,7 +46,7 @@ export interface Interface { export class Service extends Context.Service()("@opencode/Snapshot") {} -export const layer: Layer.Layer = Layer.effect( +const layer: Layer.Layer = Layer.effect( Service, Effect.gen(function* () { const fs = yield* FSUtil.Service @@ -798,12 +798,6 @@ export const layer: Layer.Layer()("@opencode/Truncate") {} -export const layer = Layer.effect( +const layer = Layer.effect( Service, Effect.gen(function* () { const fs = yield* FSUtil.Service @@ -151,8 +151,6 @@ export const layer = Layer.effect( }), ) -export const defaultLayer = layer.pipe(Layer.provide(FSUtil.defaultLayer), Layer.provide(NodePath.layer)) - export const node = LayerNode.make({ service: Service, layer: layer, deps: [FSUtil.node] }) export * as Truncate from "./truncate" From ca3eb4dab2ed539930b5ac4af969ea5c5e4250cc Mon Sep 17 00:00:00 2001 From: James Long Date: Mon, 29 Jun 2026 23:18:48 -0400 Subject: [PATCH 3/4] chore(opencode): trigger checks From ae4399155a6635fe75f1649a7e7e9bde6fa5e3d8 Mon Sep 17 00:00:00 2001 From: James Long Date: Mon, 29 Jun 2026 18:10:07 -0400 Subject: [PATCH 4/4] refactor(opencode): keep plugin pty environment route local --- packages/opencode/src/server/routes/instance/httpapi/server.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/server.ts b/packages/opencode/src/server/routes/instance/httpapi/server.ts index 73de083f97..17cd30f30c 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/server.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/server.ts @@ -102,7 +102,6 @@ import { handlers } from "@opencode-ai/server/handlers" import { locationServiceMapLayer } from "@opencode-ai/core/location-services" import { layer as locationLayer } from "@opencode-ai/server/location" import { sessionLocationLayer } from "@opencode-ai/server/middleware/session-location" -import { PtyEnvironment } from "@opencode-ai/server/pty-environment" import { schemaErrorLayer as v2SchemaErrorLayer } from "@opencode-ai/server/middleware/schema-error" import { workspaceHandlers } from "./handlers/workspace" import { instanceContextLayer } from "./middleware/instance-context" @@ -293,7 +292,6 @@ export function createRoutes( Layer.provide(sessionLocationLayer), Layer.provide(locationLayer), - Layer.provide(PtyEnvironment.layer), Layer.provide( SessionV2.defaultLayer.pipe( Layer.provide(SessionExecutionLocal.defaultLayer),