fix(opencode): avoid shell cancel race (#30641)

This commit is contained in:
Aiden Cline
2026-06-03 22:44:25 -05:00
committed by GitHub
parent 9251e5d8c4
commit 2a33addd29
2 changed files with 4 additions and 5 deletions

View File

@@ -78,7 +78,7 @@ export const layer = Layer.effect(
yield* cancelBackgroundJobs(background, sessionID) yield* cancelBackgroundJobs(background, sessionID)
const data = yield* InstanceState.get(state) const data = yield* InstanceState.get(state)
const existing = data.runners.get(sessionID) const existing = data.runners.get(sessionID)
if (!existing || !existing.busy) { if (!existing) {
yield* status.set(sessionID, { type: "idle" }) yield* status.set(sessionID, { type: "idle" })
return return
} }

View File

@@ -320,10 +320,9 @@ const useServerConfig = Effect.fn("test.useServerConfig")(function* (config: (ur
return { dir, llm } return { dir, llm }
}) })
// Wait for a session's runner to enter a busy state. SessionStatus is flipped to // Wait for a session's runner to enter a busy state. SessionStatus is flipped
// "busy" inside Runner.startShell's modifyEffect at the same moment the runner // inside Runner.startShell's serialized transition, so cancel can't no-op once
// is registered, so this is a deterministic readiness signal — cancel can't // we observe it.
// no-op once we observe it.
const waitForBusy = (sessionID: SessionID, duration: Duration.Input = "2 seconds") => const waitForBusy = (sessionID: SessionID, duration: Duration.Input = "2 seconds") =>
pollWithTimeout( pollWithTimeout(
Effect.gen(function* () { Effect.gen(function* () {