import * as z from "zod/mini"; export const MAX_DISPLAY_ATTENTION_COOLDOWN_MS = 365 * 24 * 60 * 60 * 1000; /** * Trusted runtime policy metadata consumed while assembling a display request. * These sparse fields are not a customer-facing flow authoring contract; * trusted policy resolution owns how opportunity facts and organization * controls produce them. */ export type DisplayAttentionPriority = "critical" | "high" | "normal" | "low"; export type DisplayAttentionMode = "exclusive" | "concurrent"; export type DisplayAttentionCooldown = { key: string; afterDisplayMs: number; }; /** Validates trusted runtime policy metadata at persistence and protocol boundaries. */ export const displayAttentionPolicySchema = z.object({ priority: z.optional(z.enum(["critical", "high", "normal", "low"])), attentionMode: z.optional(z.enum(["exclusive", "concurrent"])), cooldown: z.optional( z.union([ z.object({ key: z.string().check(z.trim(), z.minLength(1)), afterDisplayMs: z .number() .check(z.positive(), z.maximum(MAX_DISPLAY_ATTENTION_COOLDOWN_MS)), }), z.null(), ]), ), }); export type DisplayAttentionPolicy = z.output< typeof displayAttentionPolicySchema >;