/** Schema of src/config/deny-rules-registry.json — loaded by stack-detectors. */
export interface DenyRulesRegistry {
    schemaVersion: number;
    alwaysDeny: string[];
    stackRules: {
        detectionId: string;
        patterns: string[];
    }[];
}
/** Schema of src/config/detection-signals.json — loaded by stack-detectors. */
export interface DetectionSignalsRegistry {
    schemaVersion: number;
    signals: {
        frameworkId: string;
        ecosystem: string;
        type: string;
        pattern: string;
        manager?: string;
    }[];
    deployTargets: {
        id: string;
        type: string;
        pattern: string;
        additionalMatch?: string;
    }[];
    databases: {
        id: string;
        type: string;
        pattern: string;
        manager?: string;
    }[];
    aliases?: {
        alias: string;
        canonical: string;
    }[];
}
/** Permission configuration mode:
 * - minimal: only mcp__planu__* + always-on deny rules
 * - recommended: above + family allowlists + stack-specific deny
 * - full: above + Bash(*) blanket (deny still wins)
 */
export type PermissionsMode = 'minimal' | 'recommended' | 'full';
/** A single allow or deny rule (e.g. "Bash(git status*)", "Read") */
export type PermissionRule = string;
/** The Claude Code .claude/settings.json structure we manage */
export interface ClaudeCodeSettings {
    permissions?: {
        allow?: PermissionRule[];
        deny?: PermissionRule[];
        defaultMode?: string;
    };
    [key: string]: unknown;
}
/** Template for a given mode */
export interface PermissionTemplate {
    mode: PermissionsMode;
    allow: PermissionRule[];
    deny: PermissionRule[];
    /** Preferred defaultMode for new files. Never downgrades existing value. */
    defaultMode: string;
}
/** A deny rule originating from a detected stack */
export interface StackDenyRule {
    /** The stack token that triggered this rule (e.g. 'vercel', 'prisma') */
    stack: string;
    /** The deny pattern (e.g. 'Bash(vercel --prod*)') */
    rule: PermissionRule;
}
/** Represents what mergePermissions will do (for dryRun) */
export interface PermissionMergePlan {
    allowToAdd: PermissionRule[];
    allowAlreadyPresent: PermissionRule[];
    denyToAdd: PermissionRule[];
    denyAlreadyPresent: PermissionRule[];
    defaultModeAction: 'set' | 'upgrade' | 'keep' | 'skip';
    defaultModeValue: string | null;
}
/** Result of actually applying a permissions merge */
export interface PermissionMergeResult {
    modified: boolean;
    plan: PermissionMergePlan;
    final: ClaudeCodeSettings;
}
/** Result of configure_permissions tool */
export interface ConfigurePermissionsResult {
    projectPath: string;
    mode: PermissionsMode;
    settingsPath: string;
    dryRun: boolean;
    plan: PermissionMergePlan;
    applied: boolean;
    stackRulesInjected: StackDenyRule[];
    message: string;
}
//# sourceMappingURL=permissions-config.d.ts.map