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
+1 -3
View File
@@ -377,8 +377,7 @@ 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),
@@ -388,7 +387,6 @@ When constructing the summary, try to stick to this template:
Layer.provide(Bus.layer), Layer.provide(Bus.layer),
Layer.provide(Config.defaultLayer), Layer.provide(Config.defaultLayer),
), ),
),
) )
const { runPromise } = makeRuntime(Service, defaultLayer) const { runPromise } = makeRuntime(Service, defaultLayer)
+2 -4
View File
@@ -594,8 +594,7 @@ 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),
@@ -603,10 +602,9 @@ export namespace SessionProcessor {
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.layer.pipe(Layer.provide(Bus.layer))), Layer.provide(SessionStatus.defaultLayer),
Layer.provide(Bus.layer), Layer.provide(Bus.layer),
Layer.provide(Config.defaultLayer), Layer.provide(Config.defaultLayer),
), ),
),
) )
} }
+8 -8
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,11 +1666,10 @@ 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.layer), Layer.provide(SessionRunState.defaultLayer),
Layer.provide(SessionStatus.layer), Layer.provide(SessionStatus.defaultLayer),
Layer.provide(SessionCompaction.defaultLayer), Layer.provide(SessionCompaction.defaultLayer),
Layer.provide(SessionProcessor.defaultLayer), Layer.provide(SessionProcessor.defaultLayer),
Layer.provide(Command.defaultLayer), Layer.provide(Command.defaultLayer),
@@ -1678,17 +1678,17 @@ NOTE: At any point in time through this workflow you should feel free to ask the
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.layer), Layer.provide(Truncate.defaultLayer),
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)
+2 -5
View File
@@ -150,18 +150,15 @@ export namespace SessionRevert {
}), }),
) )
export const defaultLayer = Layer.unwrap( export const defaultLayer = Layer.suspend(() =>
Effect.sync(() =>
layer.pipe( layer.pipe(
Layer.provide(SessionRunState.layer), Layer.provide(SessionRunState.defaultLayer),
Layer.provide(SessionStatus.layer),
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),
Layer.provide(SessionSummary.defaultLayer), Layer.provide(SessionSummary.defaultLayer),
), ),
),
) )
const { runPromise } = makeRuntime(Service, defaultLayer) const { runPromise } = makeRuntime(Service, defaultLayer)
+1 -3
View File
@@ -150,15 +150,13 @@ 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),
), ),
),
) )
const { runPromise } = makeRuntime(Service, defaultLayer) const { runPromise } = makeRuntime(Service, defaultLayer)
+1 -4
View File
@@ -289,8 +289,7 @@ 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),
@@ -298,13 +297,11 @@ export namespace ToolRegistry {
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(Skill.defaultLayer),
Layer.provide(LSP.defaultLayer), Layer.provide(LSP.defaultLayer),
Layer.provide(FileTime.defaultLayer), Layer.provide(FileTime.defaultLayer),
Layer.provide(Instruction.defaultLayer), Layer.provide(Instruction.defaultLayer),
Layer.provide(AppFileSystem.defaultLayer), Layer.provide(AppFileSystem.defaultLayer),
), ),
),
) )
const { runPromise } = makeRuntime(Service, defaultLayer) const { runPromise } = makeRuntime(Service, 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),