import type { PersonaTree, InsightRecord } from "../types.js";
import type { FeedbackEvent, ImplicitFeedbackSignal } from "./types.js";
/**
 * Process a feedback event and return an updated PersonaTree.
 * Does NOT mutate the input.
 */
export declare function processFeedback(persona: PersonaTree, feedback: FeedbackEvent): PersonaTree;
/**
 * Process implicit feedback signals and return an updated PersonaTree.
 */
export declare function processImplicitFeedback(persona: PersonaTree, signals: ImplicitFeedbackSignal[]): PersonaTree;
/**
 * Infer the most likely conversation topic from LLM extraction results and user text.
 * Three-level fallback: extraction domain → user text keyword match → persona recentFocus.
 */
export declare function inferTopicFromContext(persona: PersonaTree, extraction: {
    domains?: Array<{
        name: string;
    }>;
}, userText: string): string | undefined;
/**
 * Extract implicit feedback signals from a conversation turn.
 */
export declare function extractImplicitSignals(userMessage: string, responseLatencyMs?: number, topic?: string, previousTopics?: string[]): ImplicitFeedbackSignal[];
/**
 * Process explicit feedback on a delivered insight and return updated PersonaTree.
 * Updates topic bandits, trust, and proactive frequency — does NOT mutate input.
 */
export declare function processInsightFeedback(persona: PersonaTree, insight: InsightRecord, feedback: "positive" | "negative" | "neutral" | "engaged"): PersonaTree;
/**
 * Record that an insight was delivered without explicit user feedback.
 * Updates lastProactiveAt only — does NOT change bandits or trust.
 */
export declare function processInsightDeliverySignal(persona: PersonaTree, insight: InsightRecord): PersonaTree;
export type NoResponseContext = {
    previousDomains: string[];
    previousMode?: string;
};
export declare function processNoResponse(persona: PersonaTree, context?: NoResponseContext): PersonaTree;
export declare function resetNoResponseStreak(persona: PersonaTree): PersonaTree;
