import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "@effect/platform"; import { Schema } from "effect"; import { ScopeId, ToolId, ToolNotFoundError } from "@executor/sdk"; import { InternalError } from "../observability"; // --------------------------------------------------------------------------- // Params // --------------------------------------------------------------------------- const scopeIdParam = HttpApiSchema.param("scopeId", ScopeId); const toolIdParam = HttpApiSchema.param("toolId", ToolId); // --------------------------------------------------------------------------- // Response schemas // --------------------------------------------------------------------------- const ToolMetadataResponse = Schema.Struct({ id: ToolId, pluginId: 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 }), ), inputSchema: Schema.optional(Schema.Unknown), outputSchema: Schema.optional(Schema.Unknown), }); // --------------------------------------------------------------------------- // 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), ) .addError(InternalError) {}