| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import { FileSystem } from "@opencode-ai/schema/filesystem"
- import { Location } from "@opencode-ai/schema/location"
- import { PositiveInt, RelativePath } from "@opencode-ai/schema/schema"
- import { Schema } from "effect"
- import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi"
- import { LocationQuery, locationQueryOpenApi } from "./location"
- const ListQuery = Schema.Struct({
- ...LocationQuery.fields,
- path: RelativePath.pipe(Schema.optional),
- })
- const FindQuery = Schema.Struct({
- ...LocationQuery.fields,
- query: FileSystem.FindInput.fields.query,
- type: FileSystem.FindInput.fields.type,
- limit: Schema.NumberFromString.pipe(Schema.decodeTo(PositiveInt), Schema.optional),
- })
- export const FileSystemGroup = HttpApiGroup.make("server.fs")
- .add(
- HttpApiEndpoint.get("fs.read", "/api/fs/read/*", {
- query: LocationQuery,
- success: Schema.Uint8Array.pipe(HttpApiSchema.asUint8Array()),
- })
- .annotateMerge(locationQueryOpenApi)
- .annotateMerge(
- OpenApi.annotations({
- identifier: "v2.fs.read",
- summary: "Read file",
- description: "Serve 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.",
- }),
- ),
- )
- .add(
- HttpApiEndpoint.get("fs.find", "/api/fs/find", {
- query: FindQuery,
- success: Location.response(Schema.Array(FileSystem.Entry)),
- })
- .annotateMerge(locationQueryOpenApi)
- .annotateMerge(
- OpenApi.annotations({
- identifier: "v2.fs.find",
- summary: "Find files",
- description: "Find recursively ranked filesystem entries relative to the requested location.",
- }),
- ),
- )
- .annotateMerge(
- OpenApi.annotations({
- title: "filesystem",
- description: "Experimental location-scoped filesystem routes.",
- }),
- )
|