From 1e24514d61556e6681d1fc8738f51e6cc50f096f Mon Sep 17 00:00:00 2001 From: Tyler Gannon Date: Tue, 28 Oct 2025 21:39:22 -0600 Subject: [PATCH] add OpenAPI annotations to tui.ts control endpoints (#3519) --- packages/opencode/src/server/tui.ts | 65 +++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/packages/opencode/src/server/tui.ts b/packages/opencode/src/server/tui.ts index 60ac5eef..48c79ae0 100644 --- a/packages/opencode/src/server/tui.ts +++ b/packages/opencode/src/server/tui.ts @@ -1,10 +1,14 @@ import { Hono, type Context } from "hono" +import { describeRoute, resolver, validator } from "hono-openapi" +import { z } from "zod" import { AsyncQueue } from "../util/queue" -interface Request { - path: string - body: any -} +const TuiRequest = z.object({ + path: z.string(), + body: z.any(), +}) + +type Request = z.infer const request = new AsyncQueue() const response = new AsyncQueue() @@ -19,12 +23,47 @@ export async function callTui(ctx: Context) { } export const TuiRoute = new Hono() - .get("/next", async (c) => { - const req = await request.next() - return c.json(req) - }) - .post("/response", async (c) => { - const body = await c.req.json() - response.push(body) - return c.json(true) - }) + .get( + "/next", + describeRoute({ + description: "Get the next TUI request from the queue", + operationId: "tui.control.next", + responses: { + 200: { + description: "Next TUI request", + content: { + "application/json": { + schema: resolver(TuiRequest), + }, + }, + }, + }, + }), + async (c) => { + const req = await request.next() + return c.json(req) + }, + ) + .post( + "/response", + describeRoute({ + description: "Submit a response to the TUI request queue", + operationId: "tui.control.response", + responses: { + 200: { + description: "Response submitted successfully", + content: { + "application/json": { + schema: resolver(z.boolean()), + }, + }, + }, + }, + }), + validator("json", z.any()), + async (c) => { + const body = c.req.valid("json") + response.push(body) + return c.json(true) + }, + )