/**
 * PreToolUse permission-decision envelope (T-RJ-FOLLOWUPS FU.11).
 *
 * A PreToolUse hook signals a block in one of two ways:
 *   - `exit 2` — the simple path, BUT `--dangerously-skip-permissions`
 *     (= `bypassPermissions` mode) silently IGNORES it (proven live: a
 *     `git commit` the gate should block ran anyway).
 *   - a `permissionDecision: "deny"` JSON envelope on stdout (exit 0) — HONORED
 *     even under `bypassPermissions` (proven live: the call was denied).
 *
 * So opensquid emits the JSON envelope on every block, making drift gates
 * enforce in BOTH normal and bypass permission modes. Pure builder so the shape
 * is unit-testable without spawning the hook bin.
 */
export interface PreToolUseDeny {
    hookSpecificOutput: {
        hookEventName: 'PreToolUse';
        permissionDecision: 'deny';
        permissionDecisionReason: string;
    };
}
/**
 * Every drift/block message opensquid emits to the user carries a leading 🦑 so
 * it's unmistakably opensquid speaking — NOT the agent's own prose, NOT a chat
 * message (chat replies via chat_send are deliberately unprefixed). Added HERE at
 * the hook EMIT boundary (not in the dispatcher/verdict layer) so skill YAML
 * `message:` fields stay clean and the dispatch internals stay emoji-free.
 * Idempotent; empty string passes through untouched (nothing to surface).
 */
export declare const SQUID = "\uD83E\uDD91";
export declare function squidPrefix(message: string): string;
/** Build the deny envelope; falls back to a generic reason when none is given. */
export declare function buildPreToolUseDeny(reason: string): PreToolUseDeny;
//# sourceMappingURL=permission_decision.d.ts.map