/**
 * Operating Modes System
 *
 * Based on Amp's Smart/Rush modes:
 * - Quality: Best model, thorough analysis, higher cost
 * - Balanced: Default mode, good trade-off
 * - Fast: Speed optimized, lower cost, simple tasks
 *
 * Allows users to control the quality/cost/speed tradeoff.
 */
import { EventEmitter } from 'events';
import type { AgentProfile } from './profiles/index.js';
export type OperatingMode = 'quality' | 'balanced' | 'fast' | 'plan' | 'ask' | 'custom';
export interface ModeConfig {
    name: string;
    description: string;
    preferredModel: string;
    fallbackModel?: string;
    maxInputTokens: number;
    maxOutputTokens: number;
    maxContextTokens: number;
    enableExtendedThinking: boolean;
    thinkingBudget: number;
    maxToolRounds: number;
    parallelToolCalls: boolean;
    allowedTools: string[] | 'all' | 'none';
    enableSelfReview: boolean;
    enableIterativeRefinement: boolean;
    maxRefinementRounds: number;
    enableRAG: boolean;
    ragTopK: number;
    enableRepoMap: boolean;
    maxCostPerRequest: number;
    warnAtCost: number;
    streamResponse: boolean;
    eagerExecution: boolean;
    systemPromptAddition?: string;
}
export declare class OperatingModeManager extends EventEmitter {
    private currentMode;
    private customConfig;
    private modeHistory;
    private userProfiles;
    private activeProfile;
    constructor(initialMode?: OperatingMode);
    /**
     * Get current mode
     */
    getMode(): OperatingMode;
    /**
     * Get current mode configuration
     */
    getModeConfig(): ModeConfig;
    /**
     * Set operating mode
     */
    setMode(mode: OperatingMode, reason?: string): void;
    /**
     * Set custom configuration
     */
    setCustomConfig(config: Partial<ModeConfig>): void;
    /**
     * Check if a tool is allowed in the current mode
     */
    isToolAllowed(toolName: string): boolean;
    /**
     * Get system prompt addition for the current mode
     */
    getSystemPromptAddition(): string;
    /**
     * Auto-select mode based on task characteristics
     */
    autoSelectMode(task: {
        estimatedComplexity: 'low' | 'medium' | 'high';
        urgency?: 'low' | 'normal' | 'high';
        costSensitive?: boolean;
        requiresAccuracy?: boolean;
    }): OperatingMode;
    /**
     * Get recommended model for current mode
     */
    getRecommendedModel(): string;
    /**
     * Check if a feature is enabled in current mode
     */
    isFeatureEnabled(feature: keyof ModeConfig): boolean;
    /**
     * Get token budget for current mode
     */
    getTokenBudget(): {
        input: number;
        output: number;
        context: number;
        thinking: number;
    };
    /**
     * Get cost limits for current mode
     */
    getCostLimits(): {
        max: number;
        warn: number;
    };
    /**
     * Get all available modes
     */
    getAvailableModes(): Array<{
        mode: OperatingMode;
        name: string;
        description: string;
    }>;
    /**
     * Get mode history
     */
    getModeHistory(): Array<{
        mode: OperatingMode;
        timestamp: number;
        reason?: string;
    }>;
    /**
     * Get mode statistics
     */
    getModeStats(): Record<OperatingMode, number>;
    /**
     * Format mode status for display
     */
    formatModeStatus(): string;
    /**
     * Get help text for modes
     */
    static getModeHelp(): string;
    /**
     * Temporarily use a different mode for one operation
     */
    withMode<T>(mode: OperatingMode, fn: () => T): T;
    /**
     * Async version of withMode
     */
    withModeAsync<T>(mode: OperatingMode, fn: () => Promise<T>): Promise<T>;
    /**
     * Load user profiles from disk.
     */
    loadUserProfiles(): void;
    /**
     * Get all loaded user profiles.
     */
    getUserProfiles(): AgentProfile[];
    /**
     * Activate a user profile by ID. Returns false if not found.
     */
    activateProfile(profileId: string): boolean;
    /**
     * Deactivate the current profile.
     */
    deactivateProfile(): void;
    /**
     * Get the active profile.
     */
    getActiveProfile(): AgentProfile | null;
    /**
     * Get mode config with active profile overrides applied.
     */
    getEffectiveModeConfig(): ModeConfig;
    /**
     * Dispose and clean up resources
     */
    dispose(): void;
}
export declare function getOperatingModeManager(initialMode?: OperatingMode): OperatingModeManager;
export declare function resetOperatingModeManager(): void;
