From 2bde20c2ba7b517e9e932b5d48c2480a29e92eeb Mon Sep 17 00:00:00 2001 From: James Long Date: Thu, 11 Jun 2026 10:03:46 -0400 Subject: [PATCH] test(opencode): simplify snapshot race layer wiring (#31827) --- .../test/session/snapshot-tool-race.test.ts | 124 +++--------------- 1 file changed, 21 insertions(+), 103 deletions(-) diff --git a/packages/opencode/test/session/snapshot-tool-race.test.ts b/packages/opencode/test/session/snapshot-tool-race.test.ts index 9e4ed2e3b..8a3701e12 100644 --- a/packages/opencode/test/session/snapshot-tool-race.test.ts +++ b/packages/opencode/test/session/snapshot-tool-race.test.ts @@ -13,52 +13,23 @@ */ import { expect } from "bun:test" import { Effect, Layer } from "effect" -import { FetchHttpClient } from "effect/unstable/http" +import { LayerNode } from "@opencode-ai/core/effect/layer-node" import fs from "fs/promises" import path from "path" import { Session } from "@/session/session" -import { LLM } from "../../src/session/llm" import { SessionPrompt } from "../../src/session/prompt" -import { SessionRevert } from "../../src/session/revert" import { SessionSummary } from "../../src/session/summary" import { MessageV2 } from "../../src/session/message-v2" import { SessionV1 } from "@opencode-ai/core/v1/session" +import { Database } from "@opencode-ai/core/database/database" +import { SessionProjector } from "@opencode-ai/core/session/projector" import { provideTmpdirServer } from "../fixture/fixture" import { testEffect } from "../lib/effect" import { TestLLMServer } from "../lib/llm-server" -// Same layer setup as prompt-effect.test.ts -import { NodeFileSystem } from "@effect/platform-node" -import { Database } from "@opencode-ai/core/database/database" -import { EventV2Bridge } from "@/event-v2-bridge" -import { Agent as AgentSvc } from "../../src/agent/agent" -import { BackgroundJob } from "@/background/job" -import { Git } from "../../src/git" -import { Command } from "../../src/command" -import { Config } from "@/config/config" import { LSP } from "@/lsp/lsp" import { MCP } from "../../src/mcp" -import { Permission } from "../../src/permission" -import { Plugin } from "../../src/plugin" -import { Provider as ProviderSvc } from "@/provider/provider" -import { Env } from "../../src/env" -import { Question } from "../../src/question" -import { Image } from "../../src/image/image" -import { Skill } from "../../src/skill" -import { SystemPrompt } from "../../src/session/system" -import { Todo } from "../../src/session/todo" -import { SessionCompaction } from "../../src/session/compaction" -import { Instruction } from "../../src/session/instruction" -import { SessionProcessor } from "../../src/session/processor" -import { SessionRunState } from "../../src/session/run-state" -import { SessionStatus } from "../../src/session/status" -import { Snapshot } from "../../src/snapshot" -import { ToolRegistry } from "@/tool/registry" -import { Truncate } from "@/tool/truncate" -import { FSUtil } from "@opencode-ai/core/fs-util" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" -import { Ripgrep } from "@opencode-ai/core/ripgrep" -import { Format } from "../../src/format" import { RuntimeFlags } from "@/effect/runtime-flags" const mcp = Layer.succeed( @@ -104,77 +75,24 @@ const lsp = Layer.succeed( }), ) -const status = SessionStatus.layer.pipe(Layer.provideMerge(EventV2Bridge.defaultLayer)) -const run = SessionRunState.layer.pipe(Layer.provide(status)) -const infra = Layer.mergeAll(NodeFileSystem.layer, CrossSpawnSpawner.defaultLayer) - -function makeHttp() { - const deps = Layer.mergeAll( - Session.defaultLayer, - Snapshot.defaultLayer, - LLM.defaultLayer, - Env.defaultLayer, - AgentSvc.defaultLayer, - Command.defaultLayer, - Permission.defaultLayer, - Plugin.defaultLayer, - Config.defaultLayer, - ProviderSvc.defaultLayer, - lsp, - mcp, - FSUtil.defaultLayer, - BackgroundJob.defaultLayer, - status, - Database.defaultLayer, - EventV2Bridge.defaultLayer, - ).pipe(Layer.provideMerge(infra)) - const question = Question.layer.pipe(Layer.provideMerge(deps)) - const todo = Todo.layer.pipe(Layer.provideMerge(deps)) - const registry = ToolRegistry.layer.pipe( - Layer.provide(Skill.defaultLayer), - Layer.provide(FetchHttpClient.layer), - Layer.provide(CrossSpawnSpawner.defaultLayer), - Layer.provide(Git.defaultLayer), - Layer.provide(Ripgrep.defaultLayer), - Layer.provide(Format.defaultLayer), - Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })), - Layer.provideMerge(todo), - Layer.provideMerge(question), - Layer.provideMerge(deps), - ) - const trunc = Truncate.layer.pipe(Layer.provideMerge(deps)) - const proc = SessionProcessor.layer.pipe( - Layer.provide(SessionSummary.defaultLayer), - Layer.provide(Image.defaultLayer), - Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })), - Layer.provideMerge(deps), - ) - const compact = SessionCompaction.layer.pipe( - Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })), - Layer.provideMerge(proc), - Layer.provideMerge(deps), - ) - return Layer.mergeAll( - TestLLMServer.layer, - SessionSummary.defaultLayer, - SessionPrompt.layer.pipe( - Layer.provide(SessionRevert.defaultLayer), - Layer.provide(Image.defaultLayer), - Layer.provide(SessionSummary.defaultLayer), - Layer.provideMerge(run), - Layer.provideMerge(compact), - Layer.provideMerge(proc), - Layer.provideMerge(registry), - Layer.provideMerge(trunc), - Layer.provide(Instruction.defaultLayer), - Layer.provide(SystemPrompt.defaultLayer), - Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })), - Layer.provideMerge(deps), - ), - ) -} - -const it = testEffect(makeHttp()) +const root = LayerNode.group([ + SessionPrompt.node, + Session.node, + SessionProjector.node, + SessionSummary.node, + Database.node, + CrossSpawnSpawner.node, + LayerNode.make(TestLLMServer.layer, []), +]) +const it = testEffect( + LayerNode.buildLayer(root, { + replacements: [ + LayerNode.replace(MCP.node, mcp), + LayerNode.replace(LSP.node, lsp), + LayerNode.replace(RuntimeFlags.node, RuntimeFlags.layer({ experimentalEventSystem: true })), + ], + }), +) const providerCfg = (url: string) => ({ provider: {