fix(session): harden shell cancellation (#24553)

This commit is contained in:
Kit Langton
2026-04-27 16:47:18 -04:00
committed by GitHub
parent e0f3df8252
commit 139c4fd555
5 changed files with 190 additions and 151 deletions

View File

@@ -1,6 +1,6 @@
import { InstanceState } from "@/effect/instance-state"
import { Runner } from "@/effect/runner"
import { Effect, Layer, Scope, Context } from "effect"
import { Effect, Latch, Layer, Scope, Context } from "effect"
import * as Session from "./session"
import { MessageV2 } from "./message-v2"
import { SessionID } from "./schema"
@@ -18,6 +18,7 @@ export interface Interface {
sessionID: SessionID,
onInterrupt: Effect.Effect<MessageV2.WithParts>,
work: Effect.Effect<MessageV2.WithParts>,
ready?: Latch.Latch,
) => Effect.Effect<MessageV2.WithParts>
}
@@ -95,8 +96,9 @@ export const layer = Layer.effect(
sessionID: SessionID,
onInterrupt: Effect.Effect<MessageV2.WithParts>,
work: Effect.Effect<MessageV2.WithParts>,
ready?: Latch.Latch,
) {
return yield* (yield* runner(sessionID, onInterrupt)).startShell(work)
return yield* (yield* runner(sessionID, onInterrupt)).startShell(work, ready)
})
return Service.of({ assertNotBusy, cancel, ensureRunning, startShell })