test(opencode): simplify processor layer wiring (#31823)

This commit is contained in:
James Long
2026-06-10 22:55:21 -04:00
committed by GitHub
parent 8bf0675997
commit 38536cf733
@@ -1,6 +1,6 @@
import { NodeFileSystem } from "@effect/platform-node"
import { SessionV1 } from "@opencode-ai/core/v1/session" import { SessionV1 } from "@opencode-ai/core/v1/session"
import { Database } from "@opencode-ai/core/database/database" import { Database } from "@opencode-ai/core/database/database"
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
import { EventV2Bridge } from "@/event-v2-bridge" import { EventV2Bridge } from "@/event-v2-bridge"
import { expect } from "bun:test" import { expect } from "bun:test"
import { tool } from "ai" import { tool } from "ai"
@@ -8,11 +8,6 @@ import { Cause, Effect, Exit, Fiber, Layer, Stream } from "effect"
import path from "path" import path from "path"
import z from "zod" import z from "zod"
import type { Agent } from "../../src/agent/agent" 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 { Provider } from "@/provider/provider"
import { Session } from "@/session/session" import { Session } from "@/session/session"
@@ -22,7 +17,6 @@ import { SessionProcessor } from "../../src/session/processor"
import { MessageID, PartID, SessionID } from "../../src/session/schema" import { MessageID, PartID, SessionID } from "../../src/session/schema"
import { SessionStatus } from "../../src/session/status" import { SessionStatus } from "../../src/session/status"
import { SessionSummary } from "../../src/session/summary" import { SessionSummary } from "../../src/session/summary"
import { Snapshot } from "../../src/snapshot"
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
import { provideTmpdirInstance, provideTmpdirServer } from "../fixture/fixture" import { provideTmpdirInstance, provideTmpdirServer } from "../fixture/fixture"
import { testEffect } from "../lib/effect" import { testEffect } from "../lib/effect"
@@ -31,6 +25,7 @@ import { RuntimeFlags } from "@/effect/runtime-flags"
import { ProviderV2 } from "@opencode-ai/core/provider" import { ProviderV2 } from "@opencode-ai/core/provider"
import { ModelV2 } from "@opencode-ai/core/model" import { ModelV2 } from "@opencode-ai/core/model"
import { SessionEvent } from "@opencode-ai/core/session/event" import { SessionEvent } from "@opencode-ai/core/session/event"
import { SessionProjector } from "@opencode-ai/core/session/projector"
import { LLMEvent } from "@opencode-ai/llm" import { LLMEvent } from "@opencode-ai/llm"
const summary = Layer.succeed( const summary = Layer.succeed(
@@ -171,29 +166,23 @@ const assistant = Effect.fn("TestSession.assistant")(function* (
return msg return msg
}) })
const status = SessionStatus.layer.pipe(Layer.provideMerge(EventV2Bridge.defaultLayer)) const root = LayerNode.group([
const infra = Layer.mergeAll(NodeFileSystem.layer, CrossSpawnSpawner.defaultLayer) SessionProcessor.node,
const deps = Layer.mergeAll( Session.node,
Session.defaultLayer, SessionProjector.node,
Snapshot.defaultLayer, Provider.node,
AgentSvc.defaultLayer, Database.node,
Permission.defaultLayer, EventV2Bridge.node,
Plugin.defaultLayer, SessionStatus.node,
Config.defaultLayer, CrossSpawnSpawner.node,
LLM.defaultLayer, ])
Provider.defaultLayer, const replacements = [
status, LayerNode.replace(SessionSummary.node, summary),
Database.defaultLayer, LayerNode.replace(RuntimeFlags.node, RuntimeFlags.layer({ experimentalEventSystem: true })),
EventV2Bridge.defaultLayer, ]
).pipe(Layer.provideMerge(infra)) const env = LayerNode.buildLayer(
const env = Layer.mergeAll( LayerNode.group([root, LayerNode.make(TestLLMServer.layer, [])]),
TestLLMServer.layer, { replacements },
SessionProcessor.layer.pipe(
Layer.provide(summary),
Layer.provide(Image.defaultLayer),
Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })),
Layer.provideMerge(deps),
),
) )
const it = testEffect(env) const it = testEffect(env)
@@ -218,13 +207,9 @@ const providerErrorLLM = Layer.succeed(
), ),
}), }),
) )
const providerErrorEnv = SessionProcessor.layer.pipe( const providerErrorEnv = LayerNode.buildLayer(root, {
Layer.provide(summary), replacements: [...replacements, LayerNode.replace(LLM.node, providerErrorLLM)],
Layer.provide(Image.defaultLayer), })
Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })),
Layer.provide(providerErrorLLM),
Layer.provideMerge(deps),
)
const itProviderError = testEffect(providerErrorEnv) const itProviderError = testEffect(providerErrorEnv)
const fragmentFailureLLM = Layer.succeed( const fragmentFailureLLM = Layer.succeed(
@@ -241,13 +226,9 @@ const fragmentFailureLLM = Layer.succeed(
), ),
}), }),
) )
const fragmentFailureEnv = SessionProcessor.layer.pipe( const fragmentFailureEnv = LayerNode.buildLayer(root, {
Layer.provide(summary), replacements: [...replacements, LayerNode.replace(LLM.node, fragmentFailureLLM)],
Layer.provide(Image.defaultLayer), })
Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })),
Layer.provide(fragmentFailureLLM),
Layer.provideMerge(deps),
)
const itFragmentFailure = testEffect(fragmentFailureEnv) const itFragmentFailure = testEffect(fragmentFailureEnv)
const boot = Effect.fn("test.boot")(function* () { const boot = Effect.fn("test.boot")(function* () {