From e8562cad22901557fd8ca17d1a8945af28d38968 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Thu, 30 Apr 2026 23:05:10 -0400 Subject: [PATCH] refactor(llm): drop approval bridge --- packages/opencode/src/session/llm.ts | 30 +++++++++++++++++----------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index 58677debc0..bd7bf3d275 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -21,7 +21,7 @@ import { SessionID } from "@/session/schema" import { Auth } from "@/auth" import { Installation } from "@/installation" import { InstallationVersion } from "@opencode-ai/core/installation/version" -import { EffectBridge } from "@/effect/bridge" +import { InstanceRef, WorkspaceRef } from "@/effect/instance-ref" import * as Option from "effect/Option" import * as OtelTracer from "@effect/opentelemetry/Tracer" @@ -266,7 +266,8 @@ const live: Layer.Layer< return !match || match.action !== "ask" }) - const bridge = yield* EffectBridge.make() + const instance = yield* InstanceState.context + const workspace = yield* InstanceState.workspaceID const approvedToolsForSession = new Set() workflowModel.approvalHandler = InstanceState.bind(async (approvalTools) => { const uniqueNames = [...new Set(approvalTools.map((t: { name: string }) => t.name))] as string[] @@ -292,16 +293,21 @@ const live: Layer.Layer< } }) const uniquePatterns = [...new Set(toolPatterns)] as string[] - await bridge.promise( - perm.ask({ - id, - sessionID: SessionID.make(input.sessionID), - permission: "workflow_tool_approval", - patterns: uniquePatterns, - metadata: { tools: approvalTools }, - always: uniquePatterns, - ruleset: [], - }), + await Effect.runPromise( + perm + .ask({ + id, + sessionID: SessionID.make(input.sessionID), + permission: "workflow_tool_approval", + patterns: uniquePatterns, + metadata: { tools: approvalTools }, + always: uniquePatterns, + ruleset: [], + }) + .pipe( + Effect.provideService(InstanceRef, instance), + Effect.provideService(WorkspaceRef, workspace), + ), ) for (const name of uniqueNames) approvedToolsForSession.add(name) workflowModel.sessionPreapprovedTools = [...(workflowModel.sessionPreapprovedTools ?? []), ...uniqueNames]