/**
 * Shared types for the tips subsystem. Reconstructed from consumer
 * usages (tipRegistry, tipScheduler) after the original file was lost.
 */

/**
 * Context passed to each tip's `isRelevant` predicate. Kept as a
 * permissive record because the call sites above treat it as an
 * optional grab-bag of context flags; individual tips ignore it.
 */
export type TipContext = Record<string, unknown>

/**
 * A single user-facing tip. `content` is lazy so it can reference
 * keybindings or settings that are resolved only at render time.
 * `cooldownSessions` is the minimum number of startups to skip before
 * re-showing after a display.
 */
export interface Tip {
  id: string
  content: () => Promise<string>
  cooldownSessions: number
  isRelevant: (context?: TipContext) => Promise<boolean>
}
