/** * Promo-row orchestrator — the single entry point the statusline hook calls * (ADR-301). Applies, in order: * * 1. Control precedence (env / enterprise / user / project / remote) — * any disable → nothing renders, ever. * 2. Environment gates — CI never sees funnel content. * 3. Disclosure gate — an upgraded install shows the disclosure text * (with the disable instruction) before any message; promotional * content only after the grace window. * 4. ADR-313 sponsored-downtime override — preempts everything below * while rate-limited (unconditional, not slot-based). * 5. Local insight ticker (insights.ts) — a reserved 1-in-5 slot shows an * environment/task-aware suggestion (CVEs, uncommitted changes, * power-saver state) when one exists; otherwise falls through. * 6. Rotation — 4:1 educational:promotional, 30-min promo repeat cap. * * Output is plain text (no ANSI — the renderer applies its own fixed * style), ≤ 80 columns, already sanitized by the message pipeline. */ import type { PromoRow } from './types.js'; import { type LocalInsightContext } from './insights.js'; export interface PromoContext { cwd?: string; env?: NodeJS.ProcessEnv; now?: Date; /** * Whether the calling surface is an interactive session. The statusline * hook is spawned with piped stdio by an interactive host, so the caller * asserts interactivity; directly-run non-TTY invocations pass false. */ interactive: boolean; /** * Local environment/task signal for the insight ticker (insights.ts) — * optional and additive. Callers that don't pass it simply never see a * local insight; the remote rotation is entirely unaffected either way. */ localInsights?: LocalInsightContext; } export declare function getFunnelPromo(ctx: PromoContext): PromoRow | null; //# sourceMappingURL=promo.d.ts.map