From f99812443c97022d88957bf67cf98be3e790bb7d Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 10 Apr 2026 22:16:53 -0400 Subject: [PATCH] refactor: destroy SessionStatus facade (#21968) --- packages/opencode/specs/effect-migration.md | 1 + .../opencode/src/server/routes/session.ts | 2 +- packages/opencode/src/session/status.ts | 14 -------------- packages/opencode/test/session/retry.test.ts | 19 ++++++++++++------- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/packages/opencode/specs/effect-migration.md b/packages/opencode/specs/effect-migration.md index 7aa94d874d..dacf55b073 100644 --- a/packages/opencode/specs/effect-migration.md +++ b/packages/opencode/specs/effect-migration.md @@ -336,5 +336,6 @@ For each service, the migration is roughly: ### Migration log +- `SessionStatus` — migrated 2026-04-11. Replaced the last route and retry-policy callers with `AppRuntime.runPromise(SessionStatus.Service.use(...))` and removed the `makeRuntime(...)` facade. - `ShareNext` — migrated 2026-04-11. Swapped remaining async callers to `AppRuntime.runPromise(ShareNext.Service.use(...))`, removed the `makeRuntime(...)` facade, and kept instance bootstrap on the shared app runtime. - `Storage` — migrated 2026-04-10. One production caller (`Session.diff`) and all storage.test.ts tests converted to effectful style. Facades and `makeRuntime` removed. diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index cccaa75411..a2a15d59ec 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -94,7 +94,7 @@ export const SessionRoutes = lazy(() => }, }), async (c) => { - const result = await SessionStatus.list() + const result = await AppRuntime.runPromise(SessionStatus.Service.use((svc) => svc.list())) return c.json(Object.fromEntries(result)) }, ) diff --git a/packages/opencode/src/session/status.ts b/packages/opencode/src/session/status.ts index 16fccaf3e8..d54d8b7951 100644 --- a/packages/opencode/src/session/status.ts +++ b/packages/opencode/src/session/status.ts @@ -1,7 +1,6 @@ import { BusEvent } from "@/bus/bus-event" import { Bus } from "@/bus" import { InstanceState } from "@/effect/instance-state" -import { makeRuntime } from "@/effect/run-service" import { SessionID } from "./schema" import { Effect, Layer, ServiceMap } from "effect" import z from "zod" @@ -86,17 +85,4 @@ export namespace SessionStatus { ) export const defaultLayer = layer.pipe(Layer.provide(Bus.layer)) - const { runPromise } = makeRuntime(Service, defaultLayer) - - export async function get(sessionID: SessionID) { - return runPromise((svc) => svc.get(sessionID)) - } - - export async function list() { - return runPromise((svc) => svc.list()) - } - - export async function set(sessionID: SessionID, status: Info) { - return runPromise((svc) => svc.set(sessionID, status)) - } } diff --git a/packages/opencode/test/session/retry.test.ts b/packages/opencode/test/session/retry.test.ts index 0204c7a117..a598c37fcd 100644 --- a/packages/opencode/test/session/retry.test.ts +++ b/packages/opencode/test/session/retry.test.ts @@ -6,6 +6,7 @@ import { Effect, Schedule } from "effect" import { SessionRetry } from "../../src/session/retry" import { MessageV2 } from "../../src/session/message-v2" import { ProviderID } from "../../src/provider/schema" +import { AppRuntime } from "../../src/effect/app-runtime" import { SessionID } from "../../src/session/schema" import { SessionStatus } from "../../src/session/status" import { Instance } from "../../src/project/instance" @@ -94,12 +95,16 @@ describe("session.retry.delay", () => { parse: (err) => err as MessageV2.APIError, set: (info) => Effect.promise(() => - SessionStatus.set(sessionID, { - type: "retry", - attempt: info.attempt, - message: info.message, - next: info.next, - }), + AppRuntime.runPromise( + SessionStatus.Service.use((svc) => + svc.set(sessionID, { + type: "retry", + attempt: info.attempt, + message: info.message, + next: info.next, + }), + ), + ), ), }), ) @@ -108,7 +113,7 @@ describe("session.retry.delay", () => { }), ) - expect(await SessionStatus.get(sessionID)).toMatchObject({ + expect(await AppRuntime.runPromise(SessionStatus.Service.use((svc) => svc.get(sessionID)))).toMatchObject({ type: "retry", attempt: 2, message: "boom",