/** * Dynamic Handler Registry * * The core system for learning and creating handlers dynamically. * Manages: * - Observation of successful extractions * - Detection and application of pattern templates * - Learning and storage of site-specific quirks * - Creation and lifecycle of dynamic handlers */ import type { DynamicHandler, SiteQuirks, ExtractionObservation, ExtractionRule, ApiPattern, HandlerTemplate, LearningConfig, HandlerMatch, SerializedHandlerRegistry } from './types.js'; /** * Dynamic Handler Registry */ export declare class DynamicHandlerRegistry { private handlers; private learnedSites; private quirks; private observations; private config; constructor(config?: Partial); /** * Record an observation from a successful extraction */ recordObservation(observation: ExtractionObservation): void; /** * Record a failure for learning (to detect quirks) */ recordFailure(url: string, error: string, context: { statusCode?: number; headers?: Record; strategy?: string; }): void; /** * Learn from accumulated observations for a domain */ private learnFromObservations; /** * Create a new handler from observations */ private createHandler; /** * Update an existing handler with new observations */ private updateHandler; /** * Analyze observations to extract patterns */ private analyzeObservations; /** * Learn quirks from a failure */ private learnQuirksFromFailure; /** * Get quirks for a domain */ getQuirks(domain: string): SiteQuirks | undefined; /** * Update quirks manually */ updateQuirks(domain: string, updates: Partial): void; /** * Find a handler for the given URL */ findHandler(url: string): HandlerMatch | null; /** * Get all handlers for a domain */ getHandlersForDomain(domain: string): DynamicHandler[]; /** * Check if we have learned anything about a domain */ hasLearnedDomain(domain: string): boolean; /** * Get the best extraction approach for a URL */ getExtractionApproach(url: string, html?: string): { template: HandlerTemplate; quirks?: SiteQuirks; rules: ExtractionRule[]; apis: ApiPattern[]; confidence: number; }; /** * Serialize the registry for persistence */ serialize(): SerializedHandlerRegistry; /** * Load from serialized data */ deserialize(data: SerializedHandlerRegistry): void; /** * Get statistics about the registry */ getStats(): { totalHandlers: number; totalQuirks: number; totalObservations: number; topDomains: Array<{ domain: string; observations: number; }>; }; private extractDomain; private calculateConfidence; private inferTemplateFromStrategy; private inferFieldFromSelector; private inferFieldFromPath; private extractApiPattern; private toDynamicHandler; } export declare const dynamicHandlerRegistry: DynamicHandlerRegistry; //# sourceMappingURL=registry.d.ts.map