/**
 * Permission Modes
 *
 * Five-tier permission system: default, plan, acceptEdits, dontAsk, bypassPermissions.
 * With managed setting to disable bypass, subagent-specific modes, and pattern-based allowlists.
 */
export type PermissionMode = 'default' | 'plan' | 'acceptEdits' | 'dontAsk' | 'bypassPermissions';
export interface PermissionModeConfig {
    mode: PermissionMode;
    disableBypass: boolean;
    subagentMode?: PermissionMode;
}
export interface PermissionDecision {
    allowed: boolean;
    reason: string;
    prompted: boolean;
}
export declare class PermissionModeManager {
    private config;
    private allowedPatterns;
    constructor(config?: Partial<PermissionModeConfig>);
    /**
     * Set the permission mode
     * Returns false if trying to set bypassPermissions when it's disabled
     */
    setMode(mode: PermissionMode): boolean;
    getMode(): PermissionMode;
    /**
     * Check permission for an action
     */
    checkPermission(action: string, toolName: string): PermissionDecision;
    /**
     * Default mode: prompt for everything except read-only
     */
    private checkDefault;
    /**
     * Plan mode: only allow read-only tools, block edits and destructive
     */
    private checkPlan;
    /**
     * Accept edits mode: auto-approve read and edit tools, prompt for destructive
     */
    private checkAcceptEdits;
    /**
     * Don't ask mode: auto-approve everything except destructive
     */
    private checkDontAsk;
    /**
     * Bypass mode: auto-approve everything
     */
    private checkBypass;
    /**
     * Tool classification
     */
    isReadOnlyTool(toolName: string): boolean;
    isEditTool(toolName: string): boolean;
    isDestructiveTool(toolName: string): boolean;
    /**
     * Add an allowed pattern
     */
    addAllowedPattern(pattern: string): void;
    /**
     * Check if an action matches any allowed pattern
     */
    isPatternAllowed(action: string): boolean;
    /**
     * Set subagent mode
     */
    setSubagentMode(mode: PermissionMode): void;
    getSubagentMode(): PermissionMode;
    /**
     * Set bypass disabled (managed setting)
     */
    setBypassDisabled(disabled: boolean): void;
    isBypassDisabled(): boolean;
}
