import type { DomainVerbosity } from '../runtime/notifications/types.js';
import type { FeatureFlagReader } from '../runtime/feature-flags/index.js';
export type ModePreset = 'default' | 'vibecoding' | 'justvibes' | (string & Record<never, never>);
export interface VerbosityDefaults {
    write: string;
    edit: string;
    read: string;
    grep: string;
    glob: string;
    exec: string;
}
export interface ModeDefinition {
    name: ModePreset;
    description: string;
    verbosityDefaults: Partial<VerbosityDefaults>;
    enforcement: 'strict' | 'advisory';
}
export type HITLMode = 'quiet' | 'balanced' | 'operator';
export interface HITLModeDefinition {
    name: HITLMode;
    description: string;
    defaultDomainVerbosity: DomainVerbosity;
    quietWhileTyping: boolean;
    batchWindowMs: number;
}
export declare const HITL_QUIET: HITLModeDefinition;
export declare const HITL_BALANCED: HITLModeDefinition;
export declare const HITL_OPERATOR: HITLModeDefinition;
export declare class ModeManager {
    private currentMode;
    private modes;
    private readonly featureFlags;
    private hitlMode;
    private domainOverrides;
    constructor(options?: {
        readonly featureFlags?: FeatureFlagReader;
    });
    private hitlEnabled;
    private requireHitlEnabled;
    getMode(): ModePreset;
    getModeDefinition(): ModeDefinition;
    setMode(mode: ModePreset): void;
    listModes(): ModeDefinition[];
    registerMode(def: ModeDefinition): void;
    getVerbosityDefaults(): Partial<VerbosityDefaults>;
    getHITLMode(): HITLMode;
    getHITLPreset(): HITLModeDefinition;
    /**
     * Switch the active HITL mode.
     *
     * Switching modes clears all per-domain verbosity overrides that may have
     * been set via {@link setDomainVerbosity}. This ensures the new mode's
     * `defaultDomainVerbosity` applies uniformly until the caller re-establishes
     * any domain-specific overrides.
     */
    setHITLMode(mode: HITLMode): void;
    listHITLPresets(): HITLModeDefinition[];
    setDomainVerbosity(domain: string, verbosity: DomainVerbosity): void;
    getDomainVerbosity(domain: string): DomainVerbosity;
    getDomainOverrides(): Record<string, DomainVerbosity>;
    applyToRouter(router: {
        setQuietWhileTyping(enabled: boolean): void;
        setBatchWindowMs?(ms: number): void;
        setDefaultDomainVerbosity?(verbosity: DomainVerbosity): void;
        setDomainVerbosity(domain: string, verbosity: DomainVerbosity): void;
    }): void;
}
//# sourceMappingURL=mode-manager.d.ts.map