60 lines · 2.0 KB · TypeScript
RawDownload
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "@effect/platform";import { Schema } from "effect";import {  ScopeId,  ToolId,  ToolNotFoundError,} from "@executor/sdk"; // ---------------------------------------------------------------------------// Params// --------------------------------------------------------------------------- const scopeIdParam = HttpApiSchema.param("scopeId", ScopeId);const toolIdParam = HttpApiSchema.param("toolId", ToolId); // ---------------------------------------------------------------------------// Response schemas// --------------------------------------------------------------------------- const ToolMetadataResponse = Schema.Struct({  id: ToolId,  pluginKey: Schema.String,  sourceId: Schema.String,  name: Schema.String,  description: Schema.optional(Schema.String),  mayElicit: Schema.optional(Schema.Boolean),}); const ToolSchemaResponse = Schema.Struct({  id: ToolId,  inputTypeScript: Schema.optional(Schema.String),  outputTypeScript: Schema.optional(Schema.String),  typeScriptDefinitions: Schema.optional(    Schema.Record({ key: Schema.String, value: Schema.String }),  ),}); // ---------------------------------------------------------------------------// Error schemas with HTTP status annotations// --------------------------------------------------------------------------- const ToolNotFound = ToolNotFoundError.annotations(  HttpApiSchema.annotations({ status: 404 }),); // ---------------------------------------------------------------------------// Group// --------------------------------------------------------------------------- export class ToolsApi extends HttpApiGroup.make("tools")  .add(    HttpApiEndpoint.get("list")`/scopes/${scopeIdParam}/tools`      .addSuccess(Schema.Array(ToolMetadataResponse)),  )  .add(    HttpApiEndpoint.get("schema")`/scopes/${scopeIdParam}/tools/${toolIdParam}/schema`      .addSuccess(ToolSchemaResponse)      .addError(ToolNotFound),  )  .prefix("/v1") {}