Skip to content

Commit eca11ca

Browse files
authored
refactor(effect): use SessionRevert service in prompt (#21796)
1 parent 17bd166 commit eca11ca

8 files changed

Lines changed: 75 additions & 83 deletions

File tree

packages/opencode/src/session/compaction.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -377,17 +377,15 @@ When constructing the summary, try to stick to this template:
377377
}),
378378
)
379379

380-
export const defaultLayer = Layer.unwrap(
381-
Effect.sync(() =>
382-
layer.pipe(
383-
Layer.provide(Provider.defaultLayer),
384-
Layer.provide(Session.defaultLayer),
385-
Layer.provide(SessionProcessor.defaultLayer),
386-
Layer.provide(Agent.defaultLayer),
387-
Layer.provide(Plugin.defaultLayer),
388-
Layer.provide(Bus.layer),
389-
Layer.provide(Config.defaultLayer),
390-
),
380+
export const defaultLayer = Layer.suspend(() =>
381+
layer.pipe(
382+
Layer.provide(Provider.defaultLayer),
383+
Layer.provide(Session.defaultLayer),
384+
Layer.provide(SessionProcessor.defaultLayer),
385+
Layer.provide(Agent.defaultLayer),
386+
Layer.provide(Plugin.defaultLayer),
387+
Layer.provide(Bus.layer),
388+
Layer.provide(Config.defaultLayer),
391389
),
392390
)
393391

packages/opencode/src/session/processor.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -594,19 +594,17 @@ export namespace SessionProcessor {
594594
}),
595595
)
596596

597-
export const defaultLayer = Layer.unwrap(
598-
Effect.sync(() =>
599-
layer.pipe(
600-
Layer.provide(Session.defaultLayer),
601-
Layer.provide(Snapshot.defaultLayer),
602-
Layer.provide(Agent.defaultLayer),
603-
Layer.provide(LLM.defaultLayer),
604-
Layer.provide(Permission.defaultLayer),
605-
Layer.provide(Plugin.defaultLayer),
606-
Layer.provide(SessionStatus.layer.pipe(Layer.provide(Bus.layer))),
607-
Layer.provide(Bus.layer),
608-
Layer.provide(Config.defaultLayer),
609-
),
597+
export const defaultLayer = Layer.suspend(() =>
598+
layer.pipe(
599+
Layer.provide(Session.defaultLayer),
600+
Layer.provide(Snapshot.defaultLayer),
601+
Layer.provide(Agent.defaultLayer),
602+
Layer.provide(LLM.defaultLayer),
603+
Layer.provide(Permission.defaultLayer),
604+
Layer.provide(Plugin.defaultLayer),
605+
Layer.provide(SessionStatus.defaultLayer),
606+
Layer.provide(Bus.layer),
607+
Layer.provide(Config.defaultLayer),
610608
),
611609
)
612610
}

packages/opencode/src/session/prompt.ts

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ export namespace SessionPrompt {
9999
const scope = yield* Scope.Scope
100100
const instruction = yield* Instruction.Service
101101
const state = yield* SessionRunState.Service
102+
const revert = yield* SessionRevert.Service
102103

103104
const cancel = Effect.fn("SessionPrompt.cancel")(function* (sessionID: SessionID) {
104105
log.info("cancel", { sessionID })
@@ -708,7 +709,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
708709
const ctx = yield* InstanceState.context
709710
const session = yield* sessions.get(input.sessionID)
710711
if (session.revert) {
711-
yield* Effect.promise(() => SessionRevert.cleanup(session))
712+
yield* revert.cleanup(session)
712713
}
713714
const agent = yield* agents.get(input.agent)
714715
if (!agent) {
@@ -1269,7 +1270,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
12691270
const prompt: (input: PromptInput) => Effect.Effect<MessageV2.WithParts> = Effect.fn("SessionPrompt.prompt")(
12701271
function* (input: PromptInput) {
12711272
const session = yield* sessions.get(input.sessionID)
1272-
yield* Effect.promise(() => SessionRevert.cleanup(session))
1273+
yield* revert.cleanup(session)
12731274
const message = yield* createUserMessage(input)
12741275
yield* sessions.touch(input.sessionID)
12751276

@@ -1665,29 +1666,28 @@ NOTE: At any point in time through this workflow you should feel free to ask the
16651666
}),
16661667
)
16671668

1668-
const defaultLayer = Layer.unwrap(
1669-
Effect.sync(() =>
1670-
layer.pipe(
1671-
Layer.provide(SessionRunState.layer),
1672-
Layer.provide(SessionStatus.layer),
1673-
Layer.provide(SessionCompaction.defaultLayer),
1674-
Layer.provide(SessionProcessor.defaultLayer),
1675-
Layer.provide(Command.defaultLayer),
1676-
Layer.provide(Permission.defaultLayer),
1677-
Layer.provide(MCP.defaultLayer),
1678-
Layer.provide(LSP.defaultLayer),
1679-
Layer.provide(FileTime.defaultLayer),
1680-
Layer.provide(ToolRegistry.defaultLayer),
1681-
Layer.provide(Truncate.layer),
1682-
Layer.provide(Provider.defaultLayer),
1683-
Layer.provide(Instruction.defaultLayer),
1684-
Layer.provide(AppFileSystem.defaultLayer),
1685-
Layer.provide(Plugin.defaultLayer),
1686-
Layer.provide(Session.defaultLayer),
1687-
Layer.provide(Agent.defaultLayer),
1688-
Layer.provide(Bus.layer),
1689-
Layer.provide(CrossSpawnSpawner.defaultLayer),
1690-
),
1669+
const defaultLayer = Layer.suspend(() =>
1670+
layer.pipe(
1671+
Layer.provide(SessionRunState.defaultLayer),
1672+
Layer.provide(SessionStatus.defaultLayer),
1673+
Layer.provide(SessionCompaction.defaultLayer),
1674+
Layer.provide(SessionProcessor.defaultLayer),
1675+
Layer.provide(Command.defaultLayer),
1676+
Layer.provide(Permission.defaultLayer),
1677+
Layer.provide(MCP.defaultLayer),
1678+
Layer.provide(LSP.defaultLayer),
1679+
Layer.provide(FileTime.defaultLayer),
1680+
Layer.provide(ToolRegistry.defaultLayer),
1681+
Layer.provide(Truncate.defaultLayer),
1682+
Layer.provide(Provider.defaultLayer),
1683+
Layer.provide(Instruction.defaultLayer),
1684+
Layer.provide(AppFileSystem.defaultLayer),
1685+
Layer.provide(Plugin.defaultLayer),
1686+
Layer.provide(Session.defaultLayer),
1687+
Layer.provide(SessionRevert.defaultLayer),
1688+
Layer.provide(Agent.defaultLayer),
1689+
Layer.provide(Bus.layer),
1690+
Layer.provide(CrossSpawnSpawner.defaultLayer),
16911691
),
16921692
)
16931693
const { runPromise } = makeRuntime(Service, defaultLayer)

packages/opencode/src/session/revert.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,17 +150,14 @@ export namespace SessionRevert {
150150
}),
151151
)
152152

153-
export const defaultLayer = Layer.unwrap(
154-
Effect.sync(() =>
155-
layer.pipe(
156-
Layer.provide(SessionRunState.layer),
157-
Layer.provide(SessionStatus.layer),
158-
Layer.provide(Session.defaultLayer),
159-
Layer.provide(Snapshot.defaultLayer),
160-
Layer.provide(Storage.defaultLayer),
161-
Layer.provide(Bus.layer),
162-
Layer.provide(SessionSummary.defaultLayer),
163-
),
153+
export const defaultLayer = Layer.suspend(() =>
154+
layer.pipe(
155+
Layer.provide(SessionRunState.defaultLayer),
156+
Layer.provide(Session.defaultLayer),
157+
Layer.provide(Snapshot.defaultLayer),
158+
Layer.provide(Storage.defaultLayer),
159+
Layer.provide(Bus.layer),
160+
Layer.provide(SessionSummary.defaultLayer),
164161
),
165162
)
166163

packages/opencode/src/session/summary.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,12 @@ export namespace SessionSummary {
150150
}),
151151
)
152152

153-
export const defaultLayer = Layer.unwrap(
154-
Effect.sync(() =>
155-
layer.pipe(
156-
Layer.provide(Session.defaultLayer),
157-
Layer.provide(Snapshot.defaultLayer),
158-
Layer.provide(Storage.defaultLayer),
159-
Layer.provide(Bus.layer),
160-
),
153+
export const defaultLayer = Layer.suspend(() =>
154+
layer.pipe(
155+
Layer.provide(Session.defaultLayer),
156+
Layer.provide(Snapshot.defaultLayer),
157+
Layer.provide(Storage.defaultLayer),
158+
Layer.provide(Bus.layer),
161159
),
162160
)
163161

packages/opencode/src/tool/registry.ts

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -289,21 +289,18 @@ export namespace ToolRegistry {
289289
}),
290290
)
291291

292-
export const defaultLayer = Layer.unwrap(
293-
Effect.sync(() =>
294-
layer.pipe(
295-
Layer.provide(Config.defaultLayer),
296-
Layer.provide(Plugin.defaultLayer),
297-
Layer.provide(Question.defaultLayer),
298-
Layer.provide(Todo.defaultLayer),
299-
Layer.provide(Skill.defaultLayer),
300-
Layer.provide(Agent.defaultLayer),
301-
Layer.provide(Skill.defaultLayer),
302-
Layer.provide(LSP.defaultLayer),
303-
Layer.provide(FileTime.defaultLayer),
304-
Layer.provide(Instruction.defaultLayer),
305-
Layer.provide(AppFileSystem.defaultLayer),
306-
),
292+
export const defaultLayer = Layer.suspend(() =>
293+
layer.pipe(
294+
Layer.provide(Config.defaultLayer),
295+
Layer.provide(Plugin.defaultLayer),
296+
Layer.provide(Question.defaultLayer),
297+
Layer.provide(Todo.defaultLayer),
298+
Layer.provide(Skill.defaultLayer),
299+
Layer.provide(Agent.defaultLayer),
300+
Layer.provide(LSP.defaultLayer),
301+
Layer.provide(FileTime.defaultLayer),
302+
Layer.provide(Instruction.defaultLayer),
303+
Layer.provide(AppFileSystem.defaultLayer),
307304
),
308305
)
309306

packages/opencode/test/session/prompt-effect.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { SessionCompaction } from "../../src/session/compaction"
2525
import { Instruction } from "../../src/session/instruction"
2626
import { SessionProcessor } from "../../src/session/processor"
2727
import { SessionPrompt } from "../../src/session/prompt"
28+
import { SessionRevert } from "../../src/session/revert"
2829
import { SessionRunState } from "../../src/session/run-state"
2930
import { MessageID, PartID, SessionID } from "../../src/session/schema"
3031
import { SessionStatus } from "../../src/session/status"
@@ -178,6 +179,7 @@ function makeHttp() {
178179
return Layer.mergeAll(
179180
TestLLMServer.layer,
180181
SessionPrompt.layer.pipe(
182+
Layer.provide(SessionRevert.defaultLayer),
181183
Layer.provideMerge(run),
182184
Layer.provideMerge(compact),
183185
Layer.provideMerge(proc),

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import path from "path"
1818
import { Session } from "../../src/session"
1919
import { LLM } from "../../src/session/llm"
2020
import { SessionPrompt } from "../../src/session/prompt"
21+
import { SessionRevert } from "../../src/session/revert"
2122
import { SessionSummary } from "../../src/session/summary"
2223
import { MessageV2 } from "../../src/session/message-v2"
2324
import { Log } from "../../src/util/log"
@@ -143,6 +144,7 @@ function makeHttp() {
143144
return Layer.mergeAll(
144145
TestLLMServer.layer,
145146
SessionPrompt.layer.pipe(
147+
Layer.provide(SessionRevert.defaultLayer),
146148
Layer.provideMerge(run),
147149
Layer.provideMerge(compact),
148150
Layer.provideMerge(proc),

0 commit comments

Comments
 (0)