/**
 * MentorStageBForensics — the "look under the hood" analysis of Stage B
 * (FRAMEWORK-ONBOARDING-MENTOR-SPEC §3.2, §19.4 deep-forensics follow-on).
 *
 * After Stage A drives the mentee, Stage B reads the mentee's actual signals
 * (recent rollout/session activity + server-log errors/sentinel events) and
 * classifies what went wrong into the three buckets, writing findings to the
 * ledger. This module is the PURE core: prompt assembly + defensive parsing of
 * the LLM's classification. The I/O (reading rollouts/logs) and the LLM call are
 * injected, so it's fully unit-testable without an LLM or the filesystem.
 *
 * Signal-only: produces ForensicFinding[] for the ledger; never gates or acts.
 */
import { type ForensicFinding } from '../monitoring/FrameworkIssueLedger.js';
/**
 * Build the Stage-B forensic prompt. The model is asked to classify ONLY what
 * the signals actually evidence into the three buckets, and to output a strict
 * JSON array — no prose. Conservative by instruction: report nothing rather than
 * speculate (false findings poison the ledger/playbook).
 */
export declare function buildForensicPrompt(framework: string, signals: string): string;
/**
 * Parse the model's forensic output into validated findings. Defensive: tolerates
 * markdown fences / surrounding prose, drops malformed or invalid-enum entries,
 * caps count + field lengths, and derives a conservative dedupKey when the model
 * omits one. Returns [] on any parse failure (never throws — a bad forensic read
 * must not crash a tick).
 */
export declare function parseForensicFindings(raw: string, framework: string): ForensicFinding[];
export interface AnalyzeForensicsInput {
    framework: string;
    /** Assembled forensic signals (log tail + session digest). Empty ⇒ no findings. */
    signals: string;
    /** The LLM call (injected — IntelligenceProvider.evaluate in production). */
    evaluate: (prompt: string) => Promise<string>;
}
/**
 * Run the Stage-B forensic analysis: classify the assembled signals into findings.
 * Returns [] when there are no signals (nothing observed this tick) so the tick
 * still records a run in the funnel. Never throws.
 */
export declare function analyzeForensics(input: AnalyzeForensicsInput): Promise<ForensicFinding[]>;
//# sourceMappingURL=MentorStageBForensics.d.ts.map