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