import { PolicyViolationError } from './policy-gate.js';
export interface PolicyToolDefinition {
    name: string;
    category: string;
    execute: (args: Record<string, unknown>) => Promise<unknown>;
}
/** @deprecated Use PolicyToolDefinition instead */
export type ToolDefinition = PolicyToolDefinition;
/**
 * EnforcedToolRouter is the single entry point for all tool execution.
 * Tools registered here are automatically gated by the PolicyGate.
 *
 * Usage:
 *   const router = getEnforcedToolRouter();
 *   router.registerTool({
 *     name: 'web_browser',
 *     category: 'automation',
 *     execute: async (args) => { ... }
 *   });
 *
 *   // This will check all REQUIRED policies before executing
 *   const result = await router.executeTool('web_browser', { url: '...' });
 */
export declare class EnforcedToolRouter {
    private tools;
    private _gate;
    private get gate();
    /**
     * Register a tool. All registered tools are policy-gated.
     */
    registerTool(tool: ToolDefinition): void;
    /**
     * Execute a tool through the policy gate.
     * Throws PolicyViolationError if any REQUIRED policy blocks it.
     */
    executeTool(name: string, args?: Record<string, unknown>, stage?: 'pre-exec' | 'post-exec' | 'review' | 'always'): Promise<unknown>;
    /**
     * Check if a tool call would be allowed without executing it.
     */
    wouldAllow(name: string, args?: Record<string, unknown>, stage?: 'pre-exec' | 'post-exec' | 'review' | 'always'): Promise<{
        allowed: boolean;
        reasons: string[];
    }>;
    /**
     * List all registered tools.
     */
    listTools(): ToolDefinition[];
    /**
     * Check if a tool is registered.
     */
    hasTool(name: string): boolean;
}
export declare function getEnforcedToolRouter(): EnforcedToolRouter;
export { PolicyViolationError };
//# sourceMappingURL=enforced-tool-router.d.ts.map