/**
 * SlackPermissionGate — the conversational authority gate (Pillar 2, Slice 0).
 *
 * Given a VERIFIED principal and a natural-language request, returns a
 * {allow | clarify | refuse | step-up} verdict with a conversational message.
 * It composes, in order:
 *
 *   overheard?            → undirected actionable request is never actioned (§6.9)
 *   tier 0 / chat?        → no authority needed
 *   unregistered?         → refuse + route to registration
 *   ambiguous + possibly-floor (low confidence)?  → clarify, never guess
 *   FLOOR action?         → Layer 0: needs owner role OR an explicit grant; else refuse
 *   tiered action?        → role ceiling must cover the tier
 *   would-allow a FLOOR action + anomalous?  → step-up (anomaly raises the bar, §7.4)
 *
 * Layer 0 (floor) is deterministic and fail-closed. The judgment band may consult
 * an LLM classifier, but the floor never depends on one.
 *
 * Design: docs/specs/SLACK-ORG-INTEGRATION-SPEC.md §6.6–6.9, §7.4.
 */
import type { PermissionVerdict, Principal, AuthorityGrant } from './types.js';
import { RolePolicy } from './RolePolicy.js';
import type { IntentClassifier } from './IntentClassifier.js';
import type { AnomalyScorer } from './AnomalyScorer.js';
/** Lookup for active authority grants (a Coordination Mandate, in production). */
export interface GrantStore {
    activeGrant(slackUserId: string, scope: string, now: number): AuthorityGrant | undefined;
}
export interface SlackPermissionGateDeps {
    rolePolicy?: RolePolicy;
    classifier: IntentClassifier;
    anomalyScorer?: AnomalyScorer;
    grants?: GrantStore;
    /** Anomaly score at/above which a would-be-allowed floor action requires step-up. Default 0.5. */
    stepUpThreshold?: number;
    /** Confidence below which a possibly-floor action routes to clarify. Default 0.6. */
    clarifyThreshold?: number;
    /** Out-of-band channels offered for step-up, in priority order. */
    stepUpChannels?: string[];
    /** Injectable clock for deterministic tests. */
    now?: () => number;
}
export interface EvaluateInput {
    principal: Principal;
    text: string;
    /** Was the request directed at the agent (mention / clear ask)? */
    directed: boolean;
    channel?: string;
}
export declare class SlackPermissionGate {
    private readonly rolePolicy;
    private readonly classifier;
    private readonly anomaly;
    private readonly grants?;
    private readonly stepUpThreshold;
    private readonly clarifyThreshold;
    private readonly stepUpChannels;
    private readonly now;
    constructor(deps: SlackPermissionGateDeps);
    evaluate(input: EvaluateInput): Promise<PermissionVerdict>;
}
//# sourceMappingURL=SlackPermissionGate.d.ts.map