cloudaxe-opencode/packages/opencode/src/server/project.ts

80 lines
2.1 KiB
TypeScript
Raw Normal View History

import { Hono } from "hono"
2025-12-09 18:55:39 +00:00
import { describeRoute, validator } from "hono-openapi"
import { resolver } from "hono-openapi"
import { Instance } from "../project/instance"
import { Project } from "../project/project"
2025-12-09 18:55:39 +00:00
import z from "zod"
import { errors } from "./error"
export const ProjectRoute = new Hono()
.get(
"/",
describeRoute({
2025-12-08 00:58:04 +00:00
summary: "List all projects",
description: "Get a list of projects that have been opened with OpenCode.",
operationId: "project.list",
responses: {
200: {
description: "List of projects",
content: {
"application/json": {
schema: resolver(Project.Info.array()),
},
},
},
},
}),
async (c) => {
const projects = await Project.list()
return c.json(projects)
},
)
.get(
"/current",
describeRoute({
2025-12-08 00:58:04 +00:00
summary: "Get current project",
description: "Retrieve the currently active project that OpenCode is working with.",
operationId: "project.current",
responses: {
200: {
2025-12-08 00:58:04 +00:00
description: "Current project information",
content: {
"application/json": {
schema: resolver(Project.Info),
},
},
},
},
}),
async (c) => {
return c.json(Instance.project)
},
)
2025-12-09 18:55:39 +00:00
.patch(
"/:projectID",
describeRoute({
summary: "Update project",
2025-12-09 19:29:59 +00:00
description: "Update project properties such as name, icon and color.",
2025-12-09 18:55:39 +00:00
operationId: "project.update",
responses: {
200: {
description: "Updated project information",
content: {
"application/json": {
schema: resolver(Project.Info),
},
},
},
...errors(400, 404),
},
}),
validator("param", z.object({ projectID: z.string() })),
validator("json", Project.update.schema.omit({ projectID: true })),
async (c) => {
const projectID = c.req.valid("param").projectID
const body = c.req.valid("json")
const project = await Project.update({ ...body, projectID })
return c.json(project)
},
)