56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import { FileSystem } from "@opencode-ai/core/filesystem"
|
|
import { Location } from "@opencode-ai/core/location"
|
|
import { RelativePath } from "@opencode-ai/core/schema"
|
|
import { Schema } from "effect"
|
|
import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
|
|
import { LocationQuery, locationQueryOpenApi, LocationMiddleware } from "./location"
|
|
|
|
const ReadQuery = Schema.Struct({
|
|
...LocationQuery.fields,
|
|
path: RelativePath,
|
|
reference: Schema.String.pipe(Schema.optional),
|
|
})
|
|
|
|
const ListQuery = Schema.Struct({
|
|
...LocationQuery.fields,
|
|
path: RelativePath.pipe(Schema.optional),
|
|
reference: Schema.String.pipe(Schema.optional),
|
|
})
|
|
|
|
export const FileSystemGroup = HttpApiGroup.make("server.fs")
|
|
.add(
|
|
HttpApiEndpoint.get("fs.read", "/api/fs/read", {
|
|
query: ReadQuery,
|
|
success: Location.response(FileSystem.Content),
|
|
})
|
|
.annotateMerge(locationQueryOpenApi)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "v2.fs.read",
|
|
summary: "Read file",
|
|
description: "Read one file relative to the requested location.",
|
|
}),
|
|
),
|
|
)
|
|
.add(
|
|
HttpApiEndpoint.get("fs.list", "/api/fs/list", {
|
|
query: ListQuery,
|
|
success: Location.response(Schema.Array(FileSystem.Entry)),
|
|
})
|
|
.annotateMerge(locationQueryOpenApi)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "v2.fs.list",
|
|
summary: "List directory",
|
|
description: "List direct children of one directory relative to the requested location.",
|
|
}),
|
|
),
|
|
)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
title: "filesystem",
|
|
description: "Experimental location-scoped filesystem routes.",
|
|
}),
|
|
)
|
|
.middleware(LocationMiddleware)
|