import { SubAgent, SubAgentConfig } from "./interfaces/SubAgent";
export interface AgentMetric {
    name: string;
    type: "counter" | "gauge" | "histogram";
    unit?: string;
    value?: number;
    history?: {
        timestamp: string;
        value: number;
    }[];
}
export interface AgentDefinition {
    name: string;
    description: string;
    scopes: string[];
    capabilities: string[];
    triggers?: string[];
    metrics?: AgentMetric[];
    implementation: string;
    config: SubAgentConfig;
}
export interface AgentRegistryEntry {
    definition: AgentDefinition;
    agent: SubAgent<any, any>;
    registeredAt: string;
    lastRun?: string;
    runCount: number;
    errorCount: number;
    successCount: number;
}
export interface AgentMetricsReport {
    totalAgents: number;
    totalRuns: number;
    totalErrors: number;
    totalSuccesses: number;
    byCapability: Record<string, number>;
    byScope: Record<string, number>;
    agents: Array<{
        name: string;
        runCount: number;
        errorCount: number;
        successCount: number;
        lastRun?: string;
    }>;
}
export declare class AgentRegistry {
    private entries;
    private persistencePath;
    constructor(persistencePath?: string);
    setPersistencePath(p: string): void;
    register<TInput, TOutput>(definition: Omit<AgentDefinition, "metrics"> & {
        metrics?: AgentMetric[];
    }, agent: SubAgent<TInput, TOutput>): void;
    get(name: string): SubAgent<any, any> | undefined;
    getDefinition(name: string): AgentDefinition | undefined;
    list(): SubAgent<any, any>[];
    listDefinitions(): AgentDefinition[];
    findByCapability(capability: string): AgentDefinition[];
    findByScope(scope: string): AgentDefinition[];
    findByTrigger(trigger: string): AgentDefinition[];
    remove(name: string): boolean;
    recordRun(name: string, success: boolean): void;
    getEntry(name: string): AgentRegistryEntry | undefined;
    getMetricsReport(): AgentMetricsReport;
    load(): Promise<void>;
    save(): Promise<void>;
}
export declare function getDefaultRegistry(): AgentRegistry;
export declare function setDefaultRegistry(registry: AgentRegistry): void;
//# sourceMappingURL=registry.d.ts.map