mirror of
https://github.com/anomalyco/opencode.git
synced 2026-04-29 01:07:04 +00:00
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import { Hono } from "hono"
|
|
import { describeRoute, validator, resolver } from "hono-openapi"
|
|
import z from "zod"
|
|
import { Permission } from "@/permission"
|
|
import { PermissionID } from "@/permission/schema"
|
|
import { errors } from "../error"
|
|
import { lazy } from "../../util/lazy"
|
|
|
|
export const PermissionRoutes = lazy(() =>
|
|
new Hono()
|
|
.post(
|
|
"/:requestID/reply",
|
|
describeRoute({
|
|
summary: "Respond to permission request",
|
|
description: "Approve or deny a permission request from the AI assistant.",
|
|
operationId: "permission.reply",
|
|
responses: {
|
|
200: {
|
|
description: "Permission processed successfully",
|
|
content: {
|
|
"application/json": {
|
|
schema: resolver(z.boolean()),
|
|
},
|
|
},
|
|
},
|
|
...errors(400, 404),
|
|
},
|
|
}),
|
|
validator(
|
|
"param",
|
|
z.object({
|
|
requestID: PermissionID.zod,
|
|
}),
|
|
),
|
|
validator("json", z.object({ reply: Permission.Reply, message: z.string().optional() })),
|
|
async (c) => {
|
|
const params = c.req.valid("param")
|
|
const json = c.req.valid("json")
|
|
await Permission.reply({
|
|
requestID: params.requestID,
|
|
reply: json.reply,
|
|
message: json.message,
|
|
})
|
|
return c.json(true)
|
|
},
|
|
)
|
|
.get(
|
|
"/",
|
|
describeRoute({
|
|
summary: "List pending permissions",
|
|
description: "Get all pending permission requests across all sessions.",
|
|
operationId: "permission.list",
|
|
responses: {
|
|
200: {
|
|
description: "List of pending permissions",
|
|
content: {
|
|
"application/json": {
|
|
schema: resolver(Permission.Request.array()),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
async (c) => {
|
|
const permissions = await Permission.list()
|
|
return c.json(permissions)
|
|
},
|
|
),
|
|
)
|