import type { ExecutionMode, Difficulty } from './common/index.js';
export interface Estimation {
    devHours: number;
    reviewHours: number;
    recommendedModel: 'opus' | 'sonnet' | 'mixed';
    tokensOpus: number;
    tokensSonnet: number;
    apiCostUsd: number;
    hourlyRate: number;
    humanCostUsd: number;
    totalCostUsd: number;
    tokenOptimization: TokenStrategy;
}
export interface TokenStrategy {
    mode: ExecutionMode;
    reasoning: string;
    estimatedTokens: number;
    savings: string;
}
export interface Actuals {
    devHours: number;
    reviewHours: number;
    tokensOpus: number;
    tokensSonnet: number;
    apiCostUsd: number;
    humanCostUsd: number;
    totalCostUsd: number;
    completedAt: string;
    notes: string;
    /** True when token/cost fields were auto-estimated (agent did not provide them) */
    estimated?: boolean;
}
export interface ImpactAnalysis {
    affectedModules: string[];
    affectedFiles: string[];
    breakingChanges: boolean;
    requiresMigration: boolean;
    migrationReversible: boolean;
    requiresFeatureFlag: boolean;
    rollbackPlan: string;
    testingStrategy: TestStrategy;
    environments: string[];
}
export interface TestStrategy {
    unitTests: string[];
    integrationTests: string[];
    e2eTests: string[];
    manualTests: string[];
}
export interface EstimateInput {
    specId: string;
    projectId: string;
}
export interface ReverseEngineerInput {
    path: string;
    projectId: string;
    depth?: 'shallow' | 'deep' | 'deep-v2';
}
export interface ValidateInput {
    specId: string;
    projectId?: string;
    projectPath?: string;
}
export interface EstimateResult {
    difficulty: Difficulty;
    estimation: Estimation;
    confidence: 'low' | 'medium' | 'high';
    reasoning: string;
    similarSpecs: string[];
    /** SPEC-570: Predictive correction from historical actuals */
    correctedHours?: number;
    /** SPEC-570: [lower, upper] bound in hours */
    confidenceInterval?: [number, number];
    /** SPEC-570: Human-readable description of the calibration data used */
    calibrationBasis?: string;
}
export interface ReverseEngineerResult {
    specId: string;
    specPath: string;
    technicalPath: string;
    analysis: {
        filesAnalyzed: number;
        interfacesDetected: string[];
        dependenciesFound: string[];
        layersIdentified: string[];
    };
    message: string;
}
export interface TimeRecord {
    specId: string;
    implementingStartedAt?: string;
    doneAt?: string;
    actualHours?: number;
    debugHours?: number;
    scopeCreepCriteria?: number;
    validateFailures?: number;
}
export interface VibeTaxResult {
    specId: string;
    estimatedHours: number;
    actualHours: number;
    varianceHours: number;
    variancePct: number;
    debugHours: number;
    scopeCreepCriteria: number;
    validateFailures: number;
    vibeTaxScore: number;
    assessment: 'excellent' | 'good' | 'fair' | 'poor';
}
export interface ProjectProductivityReport {
    specCount: number;
    averageVariancePct: number;
    totalDebugHours: number;
    totalVibeTaxHours: number;
    overallAssessment: string;
    calibrationFactor: number;
    trendDirection: 'improving' | 'stable' | 'worsening';
}
/** Shape of the estimation-tables JSON config file (SPEC-205). */
export interface EstimationTablesConfig {
    defaultConfig: {
        defaultLocale: string;
        defaultExperienceLevel: string;
        hourlyRate: number;
        pricingOpusPerMToken: number;
        pricingSonnetPerMToken: number;
    };
    baseHoursByType: {
        id: string;
        hours: number;
    }[];
    scopeMultiplier: {
        id: string;
        multiplier: number;
    }[];
    difficultyMultiplier: {
        id: string;
        multiplier: number;
    }[];
    reviewRatio: {
        id: string;
        ratio: number;
    }[];
    tokensPerDevHour: {
        opus: number;
        sonnet: number;
    };
    modeReduction: {
        id: string;
        factor: number;
    }[];
}
//# sourceMappingURL=estimation.d.ts.map