import { ExecutionPolicyDecision } from './ExecutionModePolicy';
import { ExecutorKind } from './TaskExecutor';
export interface ConsequencePath {
    id: string;
    description: string;
    policy: ExecutionPolicyDecision;
    executors: ExecutorKind[];
    consequences: string[];
    score: number;
}
/** Story 14.3 (v1.5) — Brain-derived enrichment layered on top of the heuristic forecast. */
export interface BrainForecastEnrichment {
    riskAmplifiers: string[];
    opportunityFactors: string[];
    overallVerdict: 'safe' | 'caution' | 'block';
    rationale: string;
    source: 'brain' | 'cache' | 'heuristic';
    cachedAt?: string;
}
export interface ConsequenceHorizon {
    impact: string;
    recommendedAction: string;
    risk: 'low' | 'medium' | 'high';
}
export interface ValueScore {
    criterion: 'safety' | 'usefulness' | 'reversibility' | 'cost';
    score: number;
    rationale: string;
}
export interface ConsequenceForecast {
    selectedPath: ConsequencePath;
    consideredPaths: ConsequencePath[];
    executiveSummary: string;
    valueScores: ValueScore[];
    horizons: Record<'now' | '24h' | '7d' | '30d', ConsequenceHorizon>;
    brain?: BrainForecastEnrichment;
}
export declare class ConsequenceForecaster {
    forecast(goal: string, governanceRisk: 'low' | 'medium' | 'high', basePolicy: ExecutionPolicyDecision, executors: ExecutorKind[]): ConsequenceForecast;
    /**
     * Story 14.3 (v1.5) — Brain-enriched forecast with persistent cache.
     *
     * Calls `forecast()` first, then layers a Brain-derived
     * `BrainForecastEnrichment` on top (riskAmplifiers / opportunityFactors /
     * overallVerdict / rationale). The enrichment is cached at
     * `.openlife/forecasts/<sha256(goal)>.json` keyed by goalHash + governanceRisk
     * so repeated forecasts for the same goal don't burn tokens.
     *
     * Falls back gracefully:
     *   • Cache hit fresher than TTL (default 24h) → cached enrichment, source='cache'
     *   • Brain key absent → no enrichment attached; pure heuristic forecast
     *   • Brain available + parseable → fresh enrichment cached, source='brain'
     *   • Brain available + garbage → no enrichment attached
     *
     * Disable cache via OPENLIFE_FORECAST_CACHE=off. Custom TTL via
     * OPENLIFE_FORECAST_CACHE_TTL_HOURS.
     */
    forecastWithBrain(goal: string, governanceRisk: 'low' | 'medium' | 'high', basePolicy: ExecutionPolicyDecision, executors: ExecutorKind[]): Promise<ConsequenceForecast>;
    private parseBrainEnrichment;
    private readForecastCache;
    private writeForecastCache;
    private cacheFile;
    private buildConservativePath;
    private buildBalancedPath;
    private buildAggressivePath;
    private pickBest;
    private buildExecutiveSummary;
    private goalBias;
    private scoreValues;
    private buildHorizons;
    private scorePath;
}
