import type { RepoConfigResolutionOptions } from "../config.js"; import type { ResponderProfile, BreakpointContext } from "../types.js"; /** * A responder profile augmented with a relevance score. */ export interface ScoredResponder { responder: ResponderProfile; score: number; matchedDomains: string[]; matchedTopics: string[]; matchedKeywords: string[]; } export interface ResponderMatcherOptions extends RepoConfigResolutionOptions { responders?: ResponderProfile[]; } /** * Loads responder profiles from disk and matches them to breakpoints * based on domain, tag, and keyword overlap. */ export declare class ResponderMatcher { private responders; private loaded; private readonly options; constructor(options?: string | ResponderMatcherOptions); /** * Read all .json / .yaml files from the responder directory, * parse them, and validate against the ResponderProfile schema. * Invalid files are silently skipped (logged to stderr). */ loadResponders(): Promise; /** * Return all loaded responders. */ getResponders(): ResponderProfile[]; /** * Score and rank responders by relevance to a breakpoint. * * Scoring algorithm: * - For each domain of each responder: * - +3 per domain keyword match * - For each tag of each responder: * - +2 per tag match * - Responders with availability=false receive a 0 score * * Returns responders sorted by descending score (only those with score > 0). */ matchResponders(breakpointText: string, context?: BreakpointContext, requiredDomains?: string[]): ScoredResponder[]; } //# sourceMappingURL=responder-matcher.d.ts.map