feat(server): add permission request endpoints (#33774)

This commit is contained in:
Dax
2026-06-25 13:55:17 +00:00
committed by GitHub
parent bcff162c60
commit 7f40aeab21
5 changed files with 287 additions and 2 deletions
+38 -1
View File
@@ -4,7 +4,7 @@ import { PermissionSaved } from "@opencode-ai/core/permission/saved"
import { Effect } from "effect"
import { HttpApiBuilder, HttpApiSchema } from "effect/unstable/httpapi"
import { Api } from "../api"
import { PermissionNotFoundError } from "@opencode-ai/protocol/errors"
import { PermissionNotFoundError, SessionNotFoundError } from "@opencode-ai/protocol/errors"
import { response } from "../location"
function missingRequest(id: PermissionV2.ID) {
@@ -20,6 +20,35 @@ export const PermissionHandler = HttpApiBuilder.group(Api, "server.permission",
return yield* response((yield* PermissionV2.Service).list())
}),
)
.handle(
"session.permission.create",
Effect.fn(function* (ctx) {
const permission = yield* PermissionV2.Service
return {
data: yield* permission
.ask({
id: ctx.payload.id,
sessionID: ctx.params.sessionID,
action: ctx.payload.action,
resources: ctx.payload.resources,
save: ctx.payload.save,
metadata: ctx.payload.metadata,
source: ctx.payload.source,
agent: ctx.payload.agent,
})
.pipe(
Effect.catchTag(
"Session.NotFoundError",
(error) =>
new SessionNotFoundError({
sessionID: error.sessionID,
message: `Session not found: ${error.sessionID}`,
}),
),
),
}
}),
)
.handle(
"session.permission.list",
Effect.fn(function* (ctx) {
@@ -27,6 +56,14 @@ export const PermissionHandler = HttpApiBuilder.group(Api, "server.permission",
return { data: yield* permission.forSession(ctx.params.sessionID) }
}),
)
.handle(
"session.permission.get",
Effect.fn(function* (ctx) {
const request = yield* (yield* PermissionV2.Service).get(ctx.params.requestID)
if (!request || request.sessionID !== ctx.params.sessionID) return yield* missingRequest(ctx.params.requestID)
return { data: request }
}),
)
.handle(
"session.permission.reply",
Effect.fn(function* (ctx) {