/** Event union — every payload is JSON-serialisable. */
export type DashboardEvent = {
    type: 'session.spawned';
    body: {
        session: any;
    };
} | {
    type: 'session.update';
    body: {
        sessionId: string;
        patch: Record<string, any>;
    };
} | {
    type: 'session.exited';
    body: {
        sessionId: string;
        reason?: string;
    };
} | {
    type: 'schedule.created';
    body: {
        schedule: any;
    };
} | {
    type: 'schedule.updated';
    body: {
        id: string;
        patch: Record<string, any>;
    };
} | {
    type: 'schedule.deleted';
    body: {
        id: string;
    };
} | {
    type: 'schedule.fired';
    body: {
        id: string;
        runAt: number;
        status: 'ok' | 'error';
        error?: string;
    };
} | {
    type: 'heartbeat';
    body: {
        ts: number;
    };
};
export type Subscriber = (event: DashboardEvent) => void;
export declare class DashboardEventBus {
    private subs;
    subscribe(fn: Subscriber): () => void;
    publish(event: DashboardEvent): void;
}
/** Process-wide singleton — daemon publishers and IPC SSE handler share. */
export declare const dashboardEventBus: DashboardEventBus;
//# sourceMappingURL=dashboard-events.d.ts.map