From 38536cf733f5052d53bd6d9f22e896e5c75481c9 Mon Sep 17 00:00:00 2001 From: James Long Date: Wed, 10 Jun 2026 22:55:21 -0400 Subject: [PATCH] test(opencode): simplify processor layer wiring (#31823) --- .../test/session/processor-effect.test.ts | 69 +++++++------------ 1 file changed, 25 insertions(+), 44 deletions(-) diff --git a/packages/opencode/test/session/processor-effect.test.ts b/packages/opencode/test/session/processor-effect.test.ts index d68873ec7..d85d41bfb 100644 --- a/packages/opencode/test/session/processor-effect.test.ts +++ b/packages/opencode/test/session/processor-effect.test.ts @@ -1,6 +1,6 @@ -import { NodeFileSystem } from "@effect/platform-node" import { SessionV1 } from "@opencode-ai/core/v1/session" import { Database } from "@opencode-ai/core/database/database" +import { LayerNode } from "@opencode-ai/core/effect/layer-node" import { EventV2Bridge } from "@/event-v2-bridge" import { expect } from "bun:test" import { tool } from "ai" @@ -8,11 +8,6 @@ import { Cause, Effect, Exit, Fiber, Layer, Stream } from "effect" import path from "path" import z from "zod" import type { Agent } from "../../src/agent/agent" -import { Agent as AgentSvc } from "../../src/agent/agent" -import { Config } from "@/config/config" -import { Image } from "@/image/image" -import { Permission } from "../../src/permission" -import { Plugin } from "../../src/plugin" import { Provider } from "@/provider/provider" import { Session } from "@/session/session" @@ -22,7 +17,6 @@ import { SessionProcessor } from "../../src/session/processor" import { MessageID, PartID, SessionID } from "../../src/session/schema" import { SessionStatus } from "../../src/session/status" import { SessionSummary } from "../../src/session/summary" -import { Snapshot } from "../../src/snapshot" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { provideTmpdirInstance, provideTmpdirServer } from "../fixture/fixture" import { testEffect } from "../lib/effect" @@ -31,6 +25,7 @@ import { RuntimeFlags } from "@/effect/runtime-flags" import { ProviderV2 } from "@opencode-ai/core/provider" import { ModelV2 } from "@opencode-ai/core/model" import { SessionEvent } from "@opencode-ai/core/session/event" +import { SessionProjector } from "@opencode-ai/core/session/projector" import { LLMEvent } from "@opencode-ai/llm" const summary = Layer.succeed( @@ -171,29 +166,23 @@ const assistant = Effect.fn("TestSession.assistant")(function* ( return msg }) -const status = SessionStatus.layer.pipe(Layer.provideMerge(EventV2Bridge.defaultLayer)) -const infra = Layer.mergeAll(NodeFileSystem.layer, CrossSpawnSpawner.defaultLayer) -const deps = Layer.mergeAll( - Session.defaultLayer, - Snapshot.defaultLayer, - AgentSvc.defaultLayer, - Permission.defaultLayer, - Plugin.defaultLayer, - Config.defaultLayer, - LLM.defaultLayer, - Provider.defaultLayer, - status, - Database.defaultLayer, - EventV2Bridge.defaultLayer, -).pipe(Layer.provideMerge(infra)) -const env = Layer.mergeAll( - TestLLMServer.layer, - SessionProcessor.layer.pipe( - Layer.provide(summary), - Layer.provide(Image.defaultLayer), - Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })), - Layer.provideMerge(deps), - ), +const root = LayerNode.group([ + SessionProcessor.node, + Session.node, + SessionProjector.node, + Provider.node, + Database.node, + EventV2Bridge.node, + SessionStatus.node, + CrossSpawnSpawner.node, +]) +const replacements = [ + LayerNode.replace(SessionSummary.node, summary), + LayerNode.replace(RuntimeFlags.node, RuntimeFlags.layer({ experimentalEventSystem: true })), +] +const env = LayerNode.buildLayer( + LayerNode.group([root, LayerNode.make(TestLLMServer.layer, [])]), + { replacements }, ) const it = testEffect(env) @@ -218,13 +207,9 @@ const providerErrorLLM = Layer.succeed( ), }), ) -const providerErrorEnv = SessionProcessor.layer.pipe( - Layer.provide(summary), - Layer.provide(Image.defaultLayer), - Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })), - Layer.provide(providerErrorLLM), - Layer.provideMerge(deps), -) +const providerErrorEnv = LayerNode.buildLayer(root, { + replacements: [...replacements, LayerNode.replace(LLM.node, providerErrorLLM)], +}) const itProviderError = testEffect(providerErrorEnv) const fragmentFailureLLM = Layer.succeed( @@ -241,13 +226,9 @@ const fragmentFailureLLM = Layer.succeed( ), }), ) -const fragmentFailureEnv = SessionProcessor.layer.pipe( - Layer.provide(summary), - Layer.provide(Image.defaultLayer), - Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })), - Layer.provide(fragmentFailureLLM), - Layer.provideMerge(deps), -) +const fragmentFailureEnv = LayerNode.buildLayer(root, { + replacements: [...replacements, LayerNode.replace(LLM.node, fragmentFailureLLM)], +}) const itFragmentFailure = testEffect(fragmentFailureEnv) const boot = Effect.fn("test.boot")(function* () {