From 3544ea02444bcbe1c93bb4633e6cbd69b0ff9606 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Thu, 30 Apr 2026 22:25:52 -0400 Subject: [PATCH] refactor(httpapi): drop session prompt bridge (#25210) --- .../instance/httpapi/handlers/session.ts | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts index e08e09495a..324d75730f 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts @@ -1,5 +1,5 @@ import * as InstanceState from "@/effect/instance-state" -import { EffectBridge } from "@/effect/bridge" +import { InstanceRef, WorkspaceRef } from "@/effect/instance-ref" import { Agent } from "@/agent/agent" import { Bus } from "@/bus" import { Command } from "@/command" @@ -259,15 +259,14 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session", params: { sessionID: SessionID } payload: typeof PromptPayload.Type }) { - const bridge = yield* EffectBridge.make() + const instance = yield* InstanceState.context + const workspace = yield* InstanceState.workspaceID return HttpServerResponse.stream( Stream.fromEffect( - bridge.run( - promptSvc.prompt({ - ...ctx.payload, - sessionID: ctx.params.sessionID, - }), - ), + promptSvc.prompt({ + ...ctx.payload, + sessionID: ctx.params.sessionID, + }).pipe(Effect.provideService(InstanceRef, instance), Effect.provideService(WorkspaceRef, workspace)), ).pipe( Stream.map((message) => JSON.stringify(message)), Stream.encodeText, @@ -280,10 +279,13 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session", params: { sessionID: SessionID } payload: typeof PromptPayload.Type }) { - const bridge = yield* EffectBridge.make() - yield* Effect.sync(() => { - bridge.fork( + const instance = yield* InstanceState.context + const workspace = yield* InstanceState.workspaceID + yield* Effect.sync(() => + Effect.runFork( promptSvc.prompt({ ...ctx.payload, sessionID: ctx.params.sessionID }).pipe( + Effect.provideService(InstanceRef, instance), + Effect.provideService(WorkspaceRef, workspace), Effect.catchCause((cause) => Effect.gen(function* () { yield* Effect.logError("prompt_async failed", { sessionID: ctx.params.sessionID, cause }) @@ -294,8 +296,8 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session", }), ), ), - ) - }) + ), + ) return HttpApiSchema.NoContent.make() })