export interface RawHit {
    title: string;
    url: string;
    snippet: string;
    /** 由 L2 抓取回填(V0 不填) */
    content?: string;
    publishedAt?: string;
    /** source 自带排序分(neural source 用),L3 重排前的参考 */
    rawScore?: number;
    /** 命中的 SourceProvider.id */
    source: string;
}
export interface SourceCapabilities {
    /** 神经/语义召回(Exa=true,SearXNG=false) */
    semantic: boolean;
    /** 支持时效过滤 */
    freshness: boolean;
    /** 原生支持域名过滤(否则在聚合层兜底) */
    domainFilter: boolean;
}
export interface SourceQueryOptions {
    maxResults?: number;
    allowedDomains?: string[];
    blockedDomains?: string[];
    freshness?: "day" | "week" | "month" | "year" | "any";
    lang?: string;
}
export interface SourceProvider {
    readonly id: string;
    readonly kind: "serp" | "neural" | "provider-native" | "mcp";
    readonly capabilities: SourceCapabilities;
    /**
     * 只负责"召回原始链接+snippet"。
     * 必须接收并尊重 signal —— 取消/硬超时由聚合层经 AbortSignal 强制透传。
     */
    search(query: string, opts: SourceQueryOptions, signal: AbortSignal): Promise<RawHit[]>;
    /** 可选主动健康检查(熔断器冷却后探活) */
    health?(signal: AbortSignal): Promise<boolean>;
}
