refactor(effect): use SessionRevert service in prompt (#21796)

This commit is contained in:
Kit Langton
2026-04-09 22:28:11 -04:00
committed by GitHub
parent 17bd16667c
commit eca11ca71a
8 changed files with 75 additions and 83 deletions
+9 -11
View File
@@ -377,17 +377,15 @@ When constructing the summary, try to stick to this template:
}), }),
) )
export const defaultLayer = Layer.unwrap( export const defaultLayer = Layer.suspend(() =>
Effect.sync(() => layer.pipe(
layer.pipe( Layer.provide(Provider.defaultLayer),
Layer.provide(Provider.defaultLayer), Layer.provide(Session.defaultLayer),
Layer.provide(Session.defaultLayer), Layer.provide(SessionProcessor.defaultLayer),
Layer.provide(SessionProcessor.defaultLayer), Layer.provide(Agent.defaultLayer),
Layer.provide(Agent.defaultLayer), Layer.provide(Plugin.defaultLayer),
Layer.provide(Plugin.defaultLayer), Layer.provide(Bus.layer),
Layer.provide(Bus.layer), Layer.provide(Config.defaultLayer),
Layer.provide(Config.defaultLayer),
),
), ),
) )
+11 -13
View File
@@ -594,19 +594,17 @@ export namespace SessionProcessor {
}), }),
) )
export const defaultLayer = Layer.unwrap( export const defaultLayer = Layer.suspend(() =>
Effect.sync(() => layer.pipe(
layer.pipe( Layer.provide(Session.defaultLayer),
Layer.provide(Session.defaultLayer), Layer.provide(Snapshot.defaultLayer),
Layer.provide(Snapshot.defaultLayer), Layer.provide(Agent.defaultLayer),
Layer.provide(Agent.defaultLayer), Layer.provide(LLM.defaultLayer),
Layer.provide(LLM.defaultLayer), Layer.provide(Permission.defaultLayer),
Layer.provide(Permission.defaultLayer), Layer.provide(Plugin.defaultLayer),
Layer.provide(Plugin.defaultLayer), Layer.provide(SessionStatus.defaultLayer),
Layer.provide(SessionStatus.layer.pipe(Layer.provide(Bus.layer))), Layer.provide(Bus.layer),
Layer.provide(Bus.layer), Layer.provide(Config.defaultLayer),
Layer.provide(Config.defaultLayer),
),
), ),
) )
} }
+25 -25
View File
@@ -99,6 +99,7 @@ export namespace SessionPrompt {
const scope = yield* Scope.Scope const scope = yield* Scope.Scope
const instruction = yield* Instruction.Service const instruction = yield* Instruction.Service
const state = yield* SessionRunState.Service const state = yield* SessionRunState.Service
const revert = yield* SessionRevert.Service
const cancel = Effect.fn("SessionPrompt.cancel")(function* (sessionID: SessionID) { const cancel = Effect.fn("SessionPrompt.cancel")(function* (sessionID: SessionID) {
log.info("cancel", { sessionID }) log.info("cancel", { sessionID })
@@ -708,7 +709,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
const ctx = yield* InstanceState.context const ctx = yield* InstanceState.context
const session = yield* sessions.get(input.sessionID) const session = yield* sessions.get(input.sessionID)
if (session.revert) { if (session.revert) {
yield* Effect.promise(() => SessionRevert.cleanup(session)) yield* revert.cleanup(session)
} }
const agent = yield* agents.get(input.agent) const agent = yield* agents.get(input.agent)
if (!agent) { if (!agent) {
@@ -1269,7 +1270,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
const prompt: (input: PromptInput) => Effect.Effect<MessageV2.WithParts> = Effect.fn("SessionPrompt.prompt")( const prompt: (input: PromptInput) => Effect.Effect<MessageV2.WithParts> = Effect.fn("SessionPrompt.prompt")(
function* (input: PromptInput) { function* (input: PromptInput) {
const session = yield* sessions.get(input.sessionID) const session = yield* sessions.get(input.sessionID)
yield* Effect.promise(() => SessionRevert.cleanup(session)) yield* revert.cleanup(session)
const message = yield* createUserMessage(input) const message = yield* createUserMessage(input)
yield* sessions.touch(input.sessionID) yield* sessions.touch(input.sessionID)
@@ -1665,29 +1666,28 @@ NOTE: At any point in time through this workflow you should feel free to ask the
}), }),
) )
const defaultLayer = Layer.unwrap( const defaultLayer = Layer.suspend(() =>
Effect.sync(() => layer.pipe(
layer.pipe( Layer.provide(SessionRunState.defaultLayer),
Layer.provide(SessionRunState.layer), Layer.provide(SessionStatus.defaultLayer),
Layer.provide(SessionStatus.layer), Layer.provide(SessionCompaction.defaultLayer),
Layer.provide(SessionCompaction.defaultLayer), Layer.provide(SessionProcessor.defaultLayer),
Layer.provide(SessionProcessor.defaultLayer), Layer.provide(Command.defaultLayer),
Layer.provide(Command.defaultLayer), Layer.provide(Permission.defaultLayer),
Layer.provide(Permission.defaultLayer), Layer.provide(MCP.defaultLayer),
Layer.provide(MCP.defaultLayer), Layer.provide(LSP.defaultLayer),
Layer.provide(LSP.defaultLayer), Layer.provide(FileTime.defaultLayer),
Layer.provide(FileTime.defaultLayer), Layer.provide(ToolRegistry.defaultLayer),
Layer.provide(ToolRegistry.defaultLayer), Layer.provide(Truncate.defaultLayer),
Layer.provide(Truncate.layer), Layer.provide(Provider.defaultLayer),
Layer.provide(Provider.defaultLayer), Layer.provide(Instruction.defaultLayer),
Layer.provide(Instruction.defaultLayer), Layer.provide(AppFileSystem.defaultLayer),
Layer.provide(AppFileSystem.defaultLayer), Layer.provide(Plugin.defaultLayer),
Layer.provide(Plugin.defaultLayer), Layer.provide(Session.defaultLayer),
Layer.provide(Session.defaultLayer), Layer.provide(SessionRevert.defaultLayer),
Layer.provide(Agent.defaultLayer), Layer.provide(Agent.defaultLayer),
Layer.provide(Bus.layer), Layer.provide(Bus.layer),
Layer.provide(CrossSpawnSpawner.defaultLayer), Layer.provide(CrossSpawnSpawner.defaultLayer),
),
), ),
) )
const { runPromise } = makeRuntime(Service, defaultLayer) const { runPromise } = makeRuntime(Service, defaultLayer)
+8 -11
View File
@@ -150,17 +150,14 @@ export namespace SessionRevert {
}), }),
) )
export const defaultLayer = Layer.unwrap( export const defaultLayer = Layer.suspend(() =>
Effect.sync(() => layer.pipe(
layer.pipe( Layer.provide(SessionRunState.defaultLayer),
Layer.provide(SessionRunState.layer), Layer.provide(Session.defaultLayer),
Layer.provide(SessionStatus.layer), Layer.provide(Snapshot.defaultLayer),
Layer.provide(Session.defaultLayer), Layer.provide(Storage.defaultLayer),
Layer.provide(Snapshot.defaultLayer), Layer.provide(Bus.layer),
Layer.provide(Storage.defaultLayer), Layer.provide(SessionSummary.defaultLayer),
Layer.provide(Bus.layer),
Layer.provide(SessionSummary.defaultLayer),
),
), ),
) )
+6 -8
View File
@@ -150,14 +150,12 @@ export namespace SessionSummary {
}), }),
) )
export const defaultLayer = Layer.unwrap( export const defaultLayer = Layer.suspend(() =>
Effect.sync(() => layer.pipe(
layer.pipe( Layer.provide(Session.defaultLayer),
Layer.provide(Session.defaultLayer), Layer.provide(Snapshot.defaultLayer),
Layer.provide(Snapshot.defaultLayer), Layer.provide(Storage.defaultLayer),
Layer.provide(Storage.defaultLayer), Layer.provide(Bus.layer),
Layer.provide(Bus.layer),
),
), ),
) )
+12 -15
View File
@@ -289,21 +289,18 @@ export namespace ToolRegistry {
}), }),
) )
export const defaultLayer = Layer.unwrap( export const defaultLayer = Layer.suspend(() =>
Effect.sync(() => layer.pipe(
layer.pipe( Layer.provide(Config.defaultLayer),
Layer.provide(Config.defaultLayer), Layer.provide(Plugin.defaultLayer),
Layer.provide(Plugin.defaultLayer), Layer.provide(Question.defaultLayer),
Layer.provide(Question.defaultLayer), Layer.provide(Todo.defaultLayer),
Layer.provide(Todo.defaultLayer), Layer.provide(Skill.defaultLayer),
Layer.provide(Skill.defaultLayer), Layer.provide(Agent.defaultLayer),
Layer.provide(Agent.defaultLayer), Layer.provide(LSP.defaultLayer),
Layer.provide(Skill.defaultLayer), Layer.provide(FileTime.defaultLayer),
Layer.provide(LSP.defaultLayer), Layer.provide(Instruction.defaultLayer),
Layer.provide(FileTime.defaultLayer), Layer.provide(AppFileSystem.defaultLayer),
Layer.provide(Instruction.defaultLayer),
Layer.provide(AppFileSystem.defaultLayer),
),
), ),
) )
@@ -25,6 +25,7 @@ import { SessionCompaction } from "../../src/session/compaction"
import { Instruction } from "../../src/session/instruction" import { Instruction } from "../../src/session/instruction"
import { SessionProcessor } from "../../src/session/processor" import { SessionProcessor } from "../../src/session/processor"
import { SessionPrompt } from "../../src/session/prompt" import { SessionPrompt } from "../../src/session/prompt"
import { SessionRevert } from "../../src/session/revert"
import { SessionRunState } from "../../src/session/run-state" import { SessionRunState } from "../../src/session/run-state"
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"
@@ -178,6 +179,7 @@ function makeHttp() {
return Layer.mergeAll( return Layer.mergeAll(
TestLLMServer.layer, TestLLMServer.layer,
SessionPrompt.layer.pipe( SessionPrompt.layer.pipe(
Layer.provide(SessionRevert.defaultLayer),
Layer.provideMerge(run), Layer.provideMerge(run),
Layer.provideMerge(compact), Layer.provideMerge(compact),
Layer.provideMerge(proc), Layer.provideMerge(proc),
@@ -18,6 +18,7 @@ import path from "path"
import { Session } from "../../src/session" import { Session } from "../../src/session"
import { LLM } from "../../src/session/llm" import { LLM } from "../../src/session/llm"
import { SessionPrompt } from "../../src/session/prompt" import { SessionPrompt } from "../../src/session/prompt"
import { SessionRevert } from "../../src/session/revert"
import { SessionSummary } from "../../src/session/summary" import { SessionSummary } from "../../src/session/summary"
import { MessageV2 } from "../../src/session/message-v2" import { MessageV2 } from "../../src/session/message-v2"
import { Log } from "../../src/util/log" import { Log } from "../../src/util/log"
@@ -143,6 +144,7 @@ function makeHttp() {
return Layer.mergeAll( return Layer.mergeAll(
TestLLMServer.layer, TestLLMServer.layer,
SessionPrompt.layer.pipe( SessionPrompt.layer.pipe(
Layer.provide(SessionRevert.defaultLayer),
Layer.provideMerge(run), Layer.provideMerge(run),
Layer.provideMerge(compact), Layer.provideMerge(compact),
Layer.provideMerge(proc), Layer.provideMerge(proc),