54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { Project } from "@opencode-ai/schema/project"
|
|
import { Schema } from "effect"
|
|
import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
|
|
import { LocationQuery, locationQueryOpenApi } from "./location.js"
|
|
|
|
const root = "/api/project"
|
|
|
|
export const ProjectGroup = HttpApiGroup.make("server.project")
|
|
.add(
|
|
HttpApiEndpoint.get("project.list", root, {
|
|
success: Schema.Array(Project.Info),
|
|
}).annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "v2.project.list",
|
|
summary: "List projects",
|
|
description: "List known projects.",
|
|
}),
|
|
),
|
|
)
|
|
.add(
|
|
HttpApiEndpoint.get("project.current", `${root}/current`, {
|
|
query: LocationQuery,
|
|
success: Project.Current,
|
|
})
|
|
.annotateMerge(locationQueryOpenApi)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "v2.project.current",
|
|
summary: "Get current project",
|
|
description: "Resolve the project for the requested location.",
|
|
}),
|
|
),
|
|
)
|
|
.add(
|
|
HttpApiEndpoint.get("project.directories", `${root}/:projectID/directories`, {
|
|
params: { projectID: Project.ID },
|
|
query: LocationQuery,
|
|
success: Project.Directories,
|
|
})
|
|
.annotateMerge(locationQueryOpenApi)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "v2.project.directories",
|
|
summary: "List project directories",
|
|
description: "List known local absolute directories for a project.",
|
|
}),
|
|
),
|
|
)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
title: "project",
|
|
description: "Location-scoped project routes.",
|
|
}),
|
|
)
|