50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import { FileDiff } from "@opencode-ai/schema/file-diff"
|
|
import { Location } from "@opencode-ai/schema/location"
|
|
import { NonNegativeInt } from "@opencode-ai/schema/schema"
|
|
import { Vcs } from "@opencode-ai/schema/vcs"
|
|
import { Schema } from "effect"
|
|
import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
|
|
import { LocationQuery, locationQueryOpenApi } from "./location.js"
|
|
|
|
const DiffQuery = Schema.Struct({
|
|
...LocationQuery.fields,
|
|
mode: Vcs.Mode,
|
|
context: Schema.NumberFromString.pipe(Schema.decodeTo(NonNegativeInt), Schema.optional),
|
|
})
|
|
|
|
export const VcsGroup = HttpApiGroup.make("server.vcs")
|
|
.add(
|
|
HttpApiEndpoint.get("vcs.status", "/api/vcs/status", {
|
|
query: LocationQuery,
|
|
success: Location.response(Schema.Array(Vcs.FileStatus)),
|
|
})
|
|
.annotateMerge(locationQueryOpenApi)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "v2.vcs.status",
|
|
summary: "VCS status",
|
|
description: "List uncommitted working-copy changes relative to the requested location.",
|
|
}),
|
|
),
|
|
)
|
|
.add(
|
|
HttpApiEndpoint.get("vcs.diff", "/api/vcs/diff", {
|
|
query: DiffQuery,
|
|
success: Location.response(Schema.Array(FileDiff.Info)),
|
|
})
|
|
.annotateMerge(locationQueryOpenApi)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "v2.vcs.diff",
|
|
summary: "VCS diff",
|
|
description:
|
|
"Diff the working copy against HEAD (mode git) or the default-branch merge base (mode branch) for the requested location.",
|
|
}),
|
|
),
|
|
)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
title: "vcs",
|
|
description: "Location-scoped version control routes.",
|
|
}),
|
|
)
|