Skip to content

Commit 2bde20c

Browse files
authored
test(opencode): simplify snapshot race layer wiring (anomalyco#31827)
1 parent 92c70c9 commit 2bde20c

1 file changed

Lines changed: 21 additions & 103 deletions

File tree

packages/opencode/test/session/snapshot-tool-race.test.ts

Lines changed: 21 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -13,52 +13,23 @@
1313
*/
1414
import { expect } from "bun:test"
1515
import { Effect, Layer } from "effect"
16-
import { FetchHttpClient } from "effect/unstable/http"
16+
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
1717
import fs from "fs/promises"
1818
import path from "path"
1919
import { Session } from "@/session/session"
20-
import { LLM } from "../../src/session/llm"
2120
import { SessionPrompt } from "../../src/session/prompt"
22-
import { SessionRevert } from "../../src/session/revert"
2321
import { SessionSummary } from "../../src/session/summary"
2422
import { MessageV2 } from "../../src/session/message-v2"
2523
import { SessionV1 } from "@opencode-ai/core/v1/session"
24+
import { Database } from "@opencode-ai/core/database/database"
25+
import { SessionProjector } from "@opencode-ai/core/session/projector"
2626
import { provideTmpdirServer } from "../fixture/fixture"
2727
import { testEffect } from "../lib/effect"
2828
import { TestLLMServer } from "../lib/llm-server"
2929

30-
// Same layer setup as prompt-effect.test.ts
31-
import { NodeFileSystem } from "@effect/platform-node"
32-
import { Database } from "@opencode-ai/core/database/database"
33-
import { EventV2Bridge } from "@/event-v2-bridge"
34-
import { Agent as AgentSvc } from "../../src/agent/agent"
35-
import { BackgroundJob } from "@/background/job"
36-
import { Git } from "../../src/git"
37-
import { Command } from "../../src/command"
38-
import { Config } from "@/config/config"
3930
import { LSP } from "@/lsp/lsp"
4031
import { MCP } from "../../src/mcp"
41-
import { Permission } from "../../src/permission"
42-
import { Plugin } from "../../src/plugin"
43-
import { Provider as ProviderSvc } from "@/provider/provider"
44-
import { Env } from "../../src/env"
45-
import { Question } from "../../src/question"
46-
import { Image } from "../../src/image/image"
47-
import { Skill } from "../../src/skill"
48-
import { SystemPrompt } from "../../src/session/system"
49-
import { Todo } from "../../src/session/todo"
50-
import { SessionCompaction } from "../../src/session/compaction"
51-
import { Instruction } from "../../src/session/instruction"
52-
import { SessionProcessor } from "../../src/session/processor"
53-
import { SessionRunState } from "../../src/session/run-state"
54-
import { SessionStatus } from "../../src/session/status"
55-
import { Snapshot } from "../../src/snapshot"
56-
import { ToolRegistry } from "@/tool/registry"
57-
import { Truncate } from "@/tool/truncate"
58-
import { FSUtil } from "@opencode-ai/core/fs-util"
5932
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
60-
import { Ripgrep } from "@opencode-ai/core/ripgrep"
61-
import { Format } from "../../src/format"
6233
import { RuntimeFlags } from "@/effect/runtime-flags"
6334

6435
const mcp = Layer.succeed(
@@ -104,77 +75,24 @@ const lsp = Layer.succeed(
10475
}),
10576
)
10677

107-
const status = SessionStatus.layer.pipe(Layer.provideMerge(EventV2Bridge.defaultLayer))
108-
const run = SessionRunState.layer.pipe(Layer.provide(status))
109-
const infra = Layer.mergeAll(NodeFileSystem.layer, CrossSpawnSpawner.defaultLayer)
110-
111-
function makeHttp() {
112-
const deps = Layer.mergeAll(
113-
Session.defaultLayer,
114-
Snapshot.defaultLayer,
115-
LLM.defaultLayer,
116-
Env.defaultLayer,
117-
AgentSvc.defaultLayer,
118-
Command.defaultLayer,
119-
Permission.defaultLayer,
120-
Plugin.defaultLayer,
121-
Config.defaultLayer,
122-
ProviderSvc.defaultLayer,
123-
lsp,
124-
mcp,
125-
FSUtil.defaultLayer,
126-
BackgroundJob.defaultLayer,
127-
status,
128-
Database.defaultLayer,
129-
EventV2Bridge.defaultLayer,
130-
).pipe(Layer.provideMerge(infra))
131-
const question = Question.layer.pipe(Layer.provideMerge(deps))
132-
const todo = Todo.layer.pipe(Layer.provideMerge(deps))
133-
const registry = ToolRegistry.layer.pipe(
134-
Layer.provide(Skill.defaultLayer),
135-
Layer.provide(FetchHttpClient.layer),
136-
Layer.provide(CrossSpawnSpawner.defaultLayer),
137-
Layer.provide(Git.defaultLayer),
138-
Layer.provide(Ripgrep.defaultLayer),
139-
Layer.provide(Format.defaultLayer),
140-
Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })),
141-
Layer.provideMerge(todo),
142-
Layer.provideMerge(question),
143-
Layer.provideMerge(deps),
144-
)
145-
const trunc = Truncate.layer.pipe(Layer.provideMerge(deps))
146-
const proc = SessionProcessor.layer.pipe(
147-
Layer.provide(SessionSummary.defaultLayer),
148-
Layer.provide(Image.defaultLayer),
149-
Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })),
150-
Layer.provideMerge(deps),
151-
)
152-
const compact = SessionCompaction.layer.pipe(
153-
Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })),
154-
Layer.provideMerge(proc),
155-
Layer.provideMerge(deps),
156-
)
157-
return Layer.mergeAll(
158-
TestLLMServer.layer,
159-
SessionSummary.defaultLayer,
160-
SessionPrompt.layer.pipe(
161-
Layer.provide(SessionRevert.defaultLayer),
162-
Layer.provide(Image.defaultLayer),
163-
Layer.provide(SessionSummary.defaultLayer),
164-
Layer.provideMerge(run),
165-
Layer.provideMerge(compact),
166-
Layer.provideMerge(proc),
167-
Layer.provideMerge(registry),
168-
Layer.provideMerge(trunc),
169-
Layer.provide(Instruction.defaultLayer),
170-
Layer.provide(SystemPrompt.defaultLayer),
171-
Layer.provide(RuntimeFlags.layer({ experimentalEventSystem: true })),
172-
Layer.provideMerge(deps),
173-
),
174-
)
175-
}
176-
177-
const it = testEffect(makeHttp())
78+
const root = LayerNode.group([
79+
SessionPrompt.node,
80+
Session.node,
81+
SessionProjector.node,
82+
SessionSummary.node,
83+
Database.node,
84+
CrossSpawnSpawner.node,
85+
LayerNode.make(TestLLMServer.layer, []),
86+
])
87+
const it = testEffect(
88+
LayerNode.buildLayer(root, {
89+
replacements: [
90+
LayerNode.replace(MCP.node, mcp),
91+
LayerNode.replace(LSP.node, lsp),
92+
LayerNode.replace(RuntimeFlags.node, RuntimeFlags.layer({ experimentalEventSystem: true })),
93+
],
94+
}),
95+
)
17896

17997
const providerCfg = (url: string) => ({
18098
provider: {

0 commit comments

Comments
 (0)