/** * Pure trigger policy for the action advisor. Decides whether the crawler * should consult the advisor on a given step, based on stall counters, * pending invariant violations, and budget caps. No I/O, no provider * coupling — kept pure so the policy can be unit-tested without mocking * the crawler or the model. * * See `docs/superpowers/specs/2026-05-01-vlm-action-advisor-design.md` §4 * for the design rationale. */ export interface TriggerPolicy { maxCallsPerCrawl: number; maxCallsPerPage: number; noveltyStallThreshold: number; consultOnInvariantViolation: boolean; minCandidatesToConsult: number; } export interface TriggerState { callsThisCrawl: number; callsThisPage: number; consecutiveZeroNovelty: number; pendingInvariantViolation: boolean; } export type TriggerReason = "novelty_stall" | "invariant_violation" | "explicit_request"; export type TriggerSkipReason = "budget_crawl" | "budget_page" | "few_candidates" | "not_stalled"; export interface TriggerDecision { consult: boolean; reason?: TriggerReason; skipReason?: TriggerSkipReason; } export declare function defaultTriggerPolicy(): TriggerPolicy; export declare function decideTrigger(state: TriggerState, policy: TriggerPolicy, candidateCount: number): TriggerDecision; //# sourceMappingURL=trigger.d.ts.map