Compare commits

...

1 Commits

Author SHA1 Message Date
Kit Langton e8562cad22 refactor(llm): drop approval bridge 2026-04-30 23:05:10 -04:00
+18 -12
View File
@@ -21,7 +21,7 @@ import { SessionID } from "@/session/schema"
import { Auth } from "@/auth" import { Auth } from "@/auth"
import { Installation } from "@/installation" import { Installation } from "@/installation"
import { InstallationVersion } from "@opencode-ai/core/installation/version" 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 Option from "effect/Option"
import * as OtelTracer from "@effect/opentelemetry/Tracer" import * as OtelTracer from "@effect/opentelemetry/Tracer"
@@ -266,7 +266,8 @@ const live: Layer.Layer<
return !match || match.action !== "ask" return !match || match.action !== "ask"
}) })
const bridge = yield* EffectBridge.make() const instance = yield* InstanceState.context
const workspace = yield* InstanceState.workspaceID
const approvedToolsForSession = new Set<string>() const approvedToolsForSession = new Set<string>()
workflowModel.approvalHandler = InstanceState.bind(async (approvalTools) => { workflowModel.approvalHandler = InstanceState.bind(async (approvalTools) => {
const uniqueNames = [...new Set(approvalTools.map((t: { name: string }) => t.name))] as string[] 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[] const uniquePatterns = [...new Set(toolPatterns)] as string[]
await bridge.promise( await Effect.runPromise(
perm.ask({ perm
id, .ask({
sessionID: SessionID.make(input.sessionID), id,
permission: "workflow_tool_approval", sessionID: SessionID.make(input.sessionID),
patterns: uniquePatterns, permission: "workflow_tool_approval",
metadata: { tools: approvalTools }, patterns: uniquePatterns,
always: uniquePatterns, metadata: { tools: approvalTools },
ruleset: [], always: uniquePatterns,
}), ruleset: [],
})
.pipe(
Effect.provideService(InstanceRef, instance),
Effect.provideService(WorkspaceRef, workspace),
),
) )
for (const name of uniqueNames) approvedToolsForSession.add(name) for (const name of uniqueNames) approvedToolsForSession.add(name)
workflowModel.sessionPreapprovedTools = [...(workflowModel.sessionPreapprovedTools ?? []), ...uniqueNames] workflowModel.sessionPreapprovedTools = [...(workflowModel.sessionPreapprovedTools ?? []), ...uniqueNames]