import { Reference } from "./types"; export type CapabilityAuditStatus = "start" | "success" | "error" | "rejected" | "timeout"; export type CapabilityAuditEvent = { context: TContext; durationMs?: number; error?: Error; input: unknown; output?: unknown; status: CapabilityAuditStatus; tool: string; }; export type CapabilityAuditBufferOptions = { /** * Maximum audit events retained in memory. Extra events are dropped and * reported through `dropped` / `truncated` and `receiptOptions()`. */ maxEvents?: number; }; export type CapabilityAuditBufferSnapshot = { dropped: number; events: CapabilityAuditEvent[]; truncated: boolean; }; export type CapabilityAuditBuffer = { readonly dropped: number; readonly events: readonly CapabilityAuditEvent[]; readonly truncated: boolean; clear: () => void; onAudit: (event: CapabilityAuditEvent) => void; receiptOptions: () => { capabilityEvents: readonly CapabilityAuditEvent[]; capabilityEventsDropped: () => number; capabilityEventsTruncated: () => boolean; }; snapshot: () => CapabilityAuditBufferSnapshot; }; export type CapabilityValidator = (value: unknown) => T; export type CapabilityAuditRedactor = (value: unknown, context: TContext, tool: string) => unknown; export type CapabilityRisk = "read-only" | "read-write" | "network" | "filesystem" | "exec" | "unknown"; export type CapabilitySchemaDescriptor = string | { description?: string; name?: string; }; export type CapabilityManifestEntry = { concurrency?: number; description?: string; hasInputValidator: boolean; hasOutputValidator: boolean; input?: CapabilitySchemaDescriptor; maxOutputBytes?: number; name: string; output?: CapabilitySchemaDescriptor; redactsInput?: boolean; redactsOutput?: boolean; risk: CapabilityRisk; schemaVersion: 1; timeoutMs?: number; }; export type CapabilityTool = { concurrency?: number; description?: string; handler: (input: TInput, context: TContext) => TOutput | Promise; input?: CapabilitySchemaDescriptor; maxOutputBytes?: number; output?: CapabilitySchemaDescriptor; redactAuditInput?: CapabilityAuditRedactor; redactAuditOutput?: CapabilityAuditRedactor; risk?: CapabilityRisk; validateInput?: CapabilityValidator; validateOutput?: CapabilityValidator; timeoutMs?: number; }; export type InferCapabilityInput = TTool extends { validateInput: CapabilityValidator; } ? TInput : TTool extends CapabilityTool ? TInput : unknown; export type InferCapabilityOutput = TTool extends { validateOutput: CapabilityValidator; } ? TOutput : TTool extends CapabilityTool ? TOutput : unknown; export type InferCapabilityContext = TTool extends CapabilityTool ? TContext : unknown; type AnyCapabilityTool = CapabilityTool; export type CapabilityBrokerCall>> = { >(tool: TToolName, input: InferCapabilityInput): Promise>; (tool: string, input?: unknown): Promise; }; export type CapabilityBrokerFor>> = { call: CapabilityBrokerCall; manifest: () => CapabilityManifestEntry[]; reference: Reference<(tool: unknown, input?: unknown) => Promise>; }; type ValidatedCapabilityTool = Omit, "handler" | "validateInput"> & { handler: (input: TInput, context: TContext) => TOutput | Promise; validateInput: CapabilityValidator; }; export declare function defineCapabilityTool(tool: ValidatedCapabilityTool): CapabilityTool; export declare function defineCapabilityTool(tool: CapabilityTool): CapabilityTool; export type CapabilityBrokerOptions = { context: TContext; defaultConcurrency?: number; defaultMaxOutputBytes?: number; defaultTimeoutMs?: number; onAudit?: (event: CapabilityAuditEvent) => void; redactAuditInput?: CapabilityAuditRedactor; redactAuditOutput?: CapabilityAuditRedactor; }; export type CapabilityBroker = { call: (tool: string, input?: unknown) => Promise; manifest: () => CapabilityManifestEntry[]; reference: Reference<(tool: unknown, input?: unknown) => Promise>; }; export declare class CapabilityError extends Error { readonly code: string; readonly tool: string; constructor(tool: string, code: string, message: string); } export declare const createCapabilityAuditBuffer: (options?: CapabilityAuditBufferOptions) => CapabilityAuditBuffer; export declare const createCapabilityBroker: >, TContext = InferCapabilityContext>(tools: TTools, options: CapabilityBrokerOptions) => CapabilityBrokerFor; export {};