import type { CockpitState } from '@generacy-ai/cockpit'; import type { SnapshotMap } from './snapshot.js'; export type CockpitEventKind = 'issue' | 'pr'; export type CockpitEventDiscriminator = 'label-change' | 'issue-closed' | 'pr-merged' | 'pr-closed' | 'pr-checks'; export interface CockpitEvent { type: 'issue-transition'; ts: string; repo: string; kind: CockpitEventKind; number: number; from: CockpitState | null; to: CockpitState | null; sourceLabel: string | null; url: string; event: CockpitEventDiscriminator; labels: string[]; initial?: true; checks?: 'green' | 'red' | 'pending'; } /** * Compute the set of transitions between two SnapshotMaps. Events for the same * key are emitted in the order: label-change → lifecycle → pr-checks. * * First-poll (prev empty): emits one line per actionable snapshot in `curr`, * each marked `initial: true`. Non-actionable snapshots stay silent. * * Mid-stream first-sight (#935): on polls 2..N, a key present in `curr` but * absent from `prev` (e.g. `cockpit scope add` appended a new ref to the epic * body) emits one `label-change` event with `initial: true` if actionable — * matching `computeInitialSweep`'s per-key shape. Non-actionable snapshots * stay silent. Removals stay silent (mirrors FR-002 "removal emits nothing"). */ export declare function computeTransitions(prev: SnapshotMap, curr: SnapshotMap, now?: () => string): CockpitEvent[]; //# sourceMappingURL=diff.d.ts.map