diff --git a/packages/opencode/src/server/routes/instance/httpapi/server.ts b/packages/opencode/src/server/routes/instance/httpapi/server.ts index dd4c772e37..6a719d94be 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/server.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/server.ts @@ -8,7 +8,7 @@ import * as Observability from "@opencode-ai/core/effect/observability" import { InstanceBootstrap } from "@/project/bootstrap" import { Instance } from "@/project/instance" import { Pty } from "@/pty" -import { Session } from "@/session" +import { Session } from "@/session/session" import { lazy } from "@/util/lazy" import { Filesystem } from "@/util/filesystem" import { authorizationLayer } from "./auth" diff --git a/packages/opencode/src/server/routes/instance/httpapi/tui.ts b/packages/opencode/src/server/routes/instance/httpapi/tui.ts index 55f53df984..030644bff7 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/tui.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/tui.ts @@ -1,7 +1,9 @@ import { Bus } from "@/bus" import { TuiEvent } from "@/cli/cmd/tui/event" -import { Session } from "@/session" import { SessionID } from "@/session/schema" +import { SessionTable } from "@/session/session.sql" +import * as Database from "@/storage/db" +import { eq } from "drizzle-orm" import { Effect, Layer, Schema } from "effect" import { HttpApi, HttpApiBuilder, HttpApiEndpoint, HttpApiError, HttpApiGroup, OpenApi } from "effect/unstable/httpapi" import { nextTuiRequest, submitTuiResponse } from "../tui" @@ -181,7 +183,6 @@ export const TuiApi = HttpApi.make("tui") export const tuiHandlers = Layer.unwrap( Effect.gen(function* () { const bus = yield* Bus.Service - const session = yield* Session.Service const publishCommand = (command: typeof TuiEvent.CommandExecute.properties.Type.command) => bus.publish(TuiEvent.CommandExecute, { command }) @@ -250,9 +251,10 @@ export const tuiHandlers = Layer.unwrap( const selectSession = Effect.fn("TuiHttpApi.selectSession")(function* (ctx: { payload: typeof TuiEvent.SessionSelect.properties.Type }) { - yield* session - .get(ctx.payload.sessionID) - .pipe(Effect.catchCause(() => Effect.fail(new HttpApiError.NotFound({})))) + const row = yield* Effect.sync(() => + Database.use((db) => db.select({ id: SessionTable.id }).from(SessionTable).where(eq(SessionTable.id, ctx.payload.sessionID)).get()), + ) + if (!row) return yield* new HttpApiError.NotFound({}) yield* bus.publish(TuiEvent.SessionSelect, ctx.payload) return true }) diff --git a/packages/opencode/test/server/httpapi-tui.test.ts b/packages/opencode/test/server/httpapi-tui.test.ts index f5dac5ab4c..f47d11c670 100644 --- a/packages/opencode/test/server/httpapi-tui.test.ts +++ b/packages/opencode/test/server/httpapi-tui.test.ts @@ -7,7 +7,7 @@ import { Instance } from "../../src/project/instance" import { InstanceRoutes } from "../../src/server/routes/instance" import { TuiPaths } from "../../src/server/routes/instance/httpapi/tui" import { callTui } from "../../src/server/routes/instance/tui" -import { Log } from "../../src/util" +import * as Log from "@opencode-ai/core/util/log" import { resetDatabase } from "../fixture/db" import { tmpdir } from "../fixture/fixture"