import type { HookRegistry } from "../contracts/hooks.js";
import type { NotificationMethod, NotificationMethodMap } from "../protocol/notifications.js";
import type { AcpPermissionRequestParams } from "../protocol/wire/index.js";
import type { ToolCatalog } from "../runtime/ports/index.js";
import { type RuntimePermissionChecker, type RuntimePermissionRuleEngine } from "./permission-runtime-service.js";
export { createApprovalResponseFromAcpOption } from "./permission-approval-bridge.js";
export interface PermissionBootstrapDeps {
    config: Record<string, unknown>;
    toolCatalog: ToolCatalog;
    hooks: HookRegistry;
    log: {
        info(message: string): void;
        warn(message: string): void;
    };
    sessionId: string;
    getTurnId(): string;
    getActiveProjectRoot(): string;
    /**
     * The live active tool workdir (where file/exec relative paths resolve). The
     * cross-workspace classifier compares tool target paths against THIS, not
     * getActiveProjectRoot — the latter is a (possibly snapshotted) project root
     * used for memory/sessions and does not track the per-turn tool workdir.
     */
    getActiveWorkdir(): string;
    getAcpPermissionSession(): {
        sessionId: string;
        requestPermission(params: AcpPermissionRequestParams): Promise<{
            optionId?: string;
        }>;
    } | undefined;
    sendNotification<M extends NotificationMethod>(method: M, params: NotificationMethodMap[M]): void;
    isPetActive(): boolean;
    currentUnregister?: (() => void) | null;
}
export interface PermissionBootstrapResult {
    permissionChecker: RuntimePermissionChecker;
    permissionUnregister: () => void;
    ruleEngine: RuntimePermissionRuleEngine;
}
export declare function configurePermissionBootstrap(deps: PermissionBootstrapDeps): PermissionBootstrapResult;
