import type { StandardSchemaV1 } from "@standard-schema/spec"; import { type ProviderInstrumentationTarget } from "../providers/index.js"; import type { TracingPort } from "../tracing/index.js"; /** Any Standard Schema compatible validator. */ export type AgentCapabilitySchema = StandardSchemaV1; /** Value or promise of that value. */ export type MaybePromise = T | Promise; /** Infer the input accepted by a capability schema. */ export type InferAgentCapabilitySchemaInput = StandardSchemaV1.InferInput; /** Infer the parsed output produced by a capability schema. */ export type InferAgentCapabilitySchemaOutput = StandardSchemaV1.InferOutput; /** A typed action that an authenticated agent transport may expose. */ export interface AgentCapabilityDef { readonly kind: "agentCapability"; readonly name: Name; readonly description: string; readonly input: Input; readonly output: Output; readonly handle: (args: { capability: AgentCapabilityDef; ctx: Ctx; principal: Principal; input: InferAgentCapabilitySchemaOutput; }) => MaybePromise>; } /** Broad capability definition shape tied to one context and principal. */ export interface AgentCapabilityFor { readonly kind: "agentCapability"; readonly name: string; readonly description: string; readonly input: AgentCapabilitySchema; readonly output: AgentCapabilitySchema; readonly handle: (args: { capability: never; ctx: Ctx; principal: Principal; input: never; }) => MaybePromise; } /** Broad capability definition shape used by registries and adapters. */ export type AnyAgentCapabilityDef = AgentCapabilityFor; /** Infer a capability's application context. */ export type AgentCapabilityContext = Capability extends { handle(args: { ctx: infer Ctx; }): unknown; } ? Ctx : never; /** Infer a capability's verified principal. */ export type AgentCapabilityPrincipal = Capability extends { handle(args: { principal: infer Principal; }): unknown; } ? Principal : never; /** Infer a capability's raw input. */ export type AgentCapabilityInput = InferAgentCapabilitySchemaInput; /** Infer the parsed input passed to capability context and execution. */ export type AgentCapabilityParsedInput = InferAgentCapabilitySchemaOutput; /** Infer a capability's validated output. */ export type AgentCapabilityOutput = InferAgentCapabilitySchemaOutput; /** Options accepted by `defineAgentCapability(...)`. */ export interface DefineAgentCapabilityOptions { description: string; input: Input; output: Output; handle(args: { capability: AgentCapabilityDef; ctx: Ctx; principal: Principal; input: InferAgentCapabilitySchemaOutput; }): MaybePromise>; } /** Context-bound capability definition helpers. */ export interface AgentCapabilities { defineAgentCapability(name: Name, options: DefineAgentCapabilityOptions): AgentCapabilityDef; defineAgentCapabilityRegistry[]>(definitions: Definitions): AgentCapabilityRegistry; } /** Bind application context and principal types once for capability definitions. */ export declare function createAgentCapabilities(): AgentCapabilities; /** Error thrown when a capability registry is ambiguous. */ export declare class AgentCapabilityRegistryError extends Error { constructor(message: string); } /** Registered capability definitions available to execution adapters. */ export interface AgentCapabilityRegistry { readonly definitions: Definitions; get(name: string): Definitions[number] | undefined; } /** Stable capability execution failure categories. */ export type AgentCapabilityErrorCode = "unknown_capability" | "invalid_input" | "invalid_output" | "execution_failed"; /** Error raised by capability lookup, validation, or execution. */ export declare class AgentCapabilityError extends Error { readonly code: AgentCapabilityErrorCode; readonly capabilityName: string; readonly issues?: readonly StandardSchemaV1.Issue[]; readonly cause?: unknown; constructor(args: { code: AgentCapabilityErrorCode; capabilityName: string; message: string; issues?: readonly StandardSchemaV1.Issue[]; cause?: unknown; }); } /** A parsed invocation passed to the app-owned context resolver. */ export type AgentCapabilityContextRequest = { [Capability in Definitions[number] as Capability["name"]]: { capability: Capability; name: Capability["name"]; principal: Principal; input: InferAgentCapabilitySchemaOutput; }; }[Definitions[number]["name"]]; /** Stage reached by an agent capability attempt. */ export type AgentCapabilityRunStage = "lookup" | "input" | "authorization" | "context" | "handler" | "output"; /** Successful capability lifecycle event with validated application data. */ export type AgentCapabilityCompletedRunEvent = Capability extends Definitions[number] ? { name: Capability["name"]; phase: "end"; stage: "output"; capability: Capability; ctx: Ctx; principal: Principal; input: AgentCapabilityParsedInput; output: AgentCapabilityOutput; durationMs: number; error?: undefined; } : never; /** Lifecycle event observed around a capability attempt. */ export type AgentCapabilityRunEvent = { name: string; phase: "start"; stage: "lookup"; capability?: Definitions[number]; ctx?: undefined; principal: Principal; input?: undefined; output?: undefined; durationMs?: undefined; error?: undefined; } | AgentCapabilityCompletedRunEvent | { name: string; phase: "error"; stage: AgentCapabilityRunStage; capability?: Definitions[number]; ctx?: Ctx; principal: Principal; /** Present only when input validation completed successfully. */ input?: unknown; output?: undefined; durationMs: number; error: unknown; }; /** Best-effort lifecycle observer for capability execution. */ export type AgentCapabilityHook = (event: AgentCapabilityRunEvent) => MaybePromise; /** Options for a capability executor. */ export interface CreateAgentCapabilityExecutorOptions { registry: AgentCapabilityRegistry; createContext(request: AgentCapabilityContextRequest): MaybePromise; hooks?: readonly AgentCapabilityHook[]; /** Independent target used to observe failures before context exists. */ instrumentation?: ProviderInstrumentationTarget; tracing?: TracingPort; } /** Raw dynamic invocation accepted by protocol adapters. */ export interface DynamicAgentCapabilityInvocation { name: string; principal: Principal; input: unknown; /** * Transport-owned authorization against the exact parsed input that will be * passed to context construction and the capability handler. */ authorize?(request: DynamicAgentCapabilityAuthorization): MaybePromise; } /** Parsed invocation exposed to a dynamic transport authorization callback. */ export interface DynamicAgentCapabilityAuthorization { capability: AnyAgentCapabilityDef; name: string; principal: Principal; input: unknown; } /** Typed and dynamic execution surface for one capability registry. */ export interface AgentCapabilityExecutor { execute(args: { name: Name; principal: Principal; input: AgentCapabilityInput>; }): Promise>>; executeDynamic(args: DynamicAgentCapabilityInvocation): Promise; } /** Create a validated, traced executor for a capability registry. */ export declare function createAgentCapabilityExecutor(options: CreateAgentCapabilityExecutorOptions, AgentCapabilityPrincipal, Definitions>): AgentCapabilityExecutor, Definitions>; //# sourceMappingURL=index.d.ts.map