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) {}
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) {}