/**
 * Permission evaluation for PreToolUse hooks across all AI platforms.
 *
 * Provides the `evaluate_permission` MCP-AQL READ operation, enabling
 * Claude Code, Cursor, Gemini CLI, Windsurf, and Codex to use
 * DollhouseMCP as their permission evaluation backend via hooks.
 *
 * Three-stage evaluation pipeline:
 * 1. Rate limiting — prevents abuse
 * 2. Static tool classification — built-in allow/deny rules
 * 3. Element policy evaluation — active element gatekeeper policies
 *
 * Returns platform-specific response formats so each platform's hook
 * script receives the JSON shape it expects.
 */
import type { RateLimiter } from '../../utils/RateLimiter.js';
import type { ToolClassificationResult, CliToolPolicyResult } from './policies/ToolClassification.js';
import type { ActiveElement } from './policies/ElementPolicies.js';
/** Error thrown when permission evaluation fails at a specific stage */
export declare class PermissionEvaluationError extends Error {
    readonly stage: 'rate_limit' | 'classification' | 'policy' | 'element_fetch';
    readonly toolName: string;
    constructor(message: string, stage: 'rate_limit' | 'classification' | 'policy' | 'element_fetch', toolName: string, cause?: unknown);
}
/** Dependencies injected from MCPAQLHandler */
export interface EvaluatePermissionDeps {
    permissionPromptLimiter: RateLimiter;
    classifyTool: (toolName: string, toolInput: Record<string, unknown>) => ToolClassificationResult;
    evaluateCliToolPolicy: (toolName: string, toolInput: Record<string, unknown>, elements: ActiveElement[]) => CliToolPolicyResult;
    getActiveElements: (sessionId?: string) => Promise<ActiveElement[]>;
}
/** Known platform identifiers */
export declare const SUPPORTED_PLATFORMS: string[];
/**
 * Format permission evaluation response for platform-specific hook scripts.
 * Each platform expects a different JSON shape from its hook response.
 *
 * Unknown platforms default to claude_code format with a warning log.
 */
export declare function formatPermissionResponse(decision: 'allow' | 'deny' | 'ask', platform: string, _input: Record<string, unknown>, reason?: string): Record<string, unknown>;
/**
 * Evaluate a CLI permission request for PreToolUse hooks.
 *
 * @param params - Tool name, input, and target platform
 * @param deps - Injected dependencies from MCPAQLHandler
 * @returns Platform-formatted permission decision
 */
export declare function evaluatePermission(params: {
    tool_name?: unknown;
    input?: unknown;
    platform?: unknown;
    session_id?: unknown;
}, deps: EvaluatePermissionDeps): Promise<Record<string, unknown>>;
//# sourceMappingURL=evaluatePermission.d.ts.map