/** * Policy gate — composes existing primitives (AccessGate, QuietHours) with * user-supplied predicates. Each predicate runs in order; the first to return * `{ proceed: false }` short-circuits the pipeline. * * Returning `{ proceed: true }` is a soft pass (other predicates still run). * Returning `null`/`undefined` means "this predicate has no opinion". */ import type { PipelineContext, PipelineAction, PipelineStep, StepResult } from './types.js'; import type { AccessGate } from '../gate/access_gate.js'; import type { QuietHours } from '../util/quiet_hours.js'; export interface PolicyVerdict { proceed: boolean; reason?: string; action?: PipelineAction; } export type PolicyPredicate = (ctx: C) => Promise | PolicyVerdict | null | undefined; export interface PolicyGateOptions { accessGate?: AccessGate | null; quietHours?: QuietHours | null; predicates?: PolicyPredicate[]; stepName?: string; } export declare class PolicyGate implements PipelineStep { readonly name: string; readonly accessGate: AccessGate | null; readonly quietHours: QuietHours | null; readonly predicates: PolicyPredicate[]; constructor({ accessGate, quietHours, predicates, stepName }?: PolicyGateOptions); run(ctx: C, _decision: unknown): Promise; } //# sourceMappingURL=policy.d.ts.map