/**
 * Recording Types
 *
 * Type definitions for session recording and playback.
 *
 * @since v1.33.3
 */
import type { Tier } from '../../core/types/auth.js';
/**
 * A complete recording of a dev session
 */
export interface Recording {
    id: string;
    name: string;
    description?: string;
    createdAt: string;
    duration: number;
    events: RecordedEvent[];
    initialState: AppState;
    finalState: AppState;
    metadata: RecordingMetadata;
}
/**
 * Summary info for listing recordings
 */
export interface RecordingSummary {
    id: string;
    name: string;
    description?: string;
    createdAt: string;
    duration: number;
    eventCount: number;
    tier: Tier;
}
/**
 * Metadata about the recording environment
 */
export interface RecordingMetadata {
    version: string;
    tier: Tier;
    terminalSize: {
        width: number;
        height: number;
    };
    platform: string;
    nodeVersion: string;
}
/**
 * Event types that can be recorded
 */
export type EventType = 'keypress' | 'navigation' | 'command' | 'tier-change' | 'api-call' | 'api-response' | 'state-change' | 'error' | 'marker-created' | 'note-added' | 'session-start' | 'session-end';
/**
 * A single recorded event
 */
export interface RecordedEvent {
    timestamp: number;
    type: EventType;
    data: EventData;
    stateBefore?: Partial<AppState>;
    stateAfter?: Partial<AppState>;
}
/**
 * Event data union type
 */
export type EventData = KeypressEventData | NavigationEventData | CommandEventData | TierChangeEventData | ApiCallEventData | ApiResponseEventData | StateChangeEventData | ErrorEventData | MarkerCreatedEventData | NoteAddedEventData | SessionEventData;
/**
 * Keypress event data
 */
export interface KeypressEventData {
    key: string;
    ctrl: boolean;
    meta: boolean;
    shift: boolean;
    alt: boolean;
}
/**
 * Navigation event data
 */
export interface NavigationEventData {
    from: string;
    to: string;
    trigger: 'keyboard' | 'command' | 'programmatic';
}
/**
 * Command execution event data
 */
export interface CommandEventData {
    commandId: string;
    commandName: string;
    args?: Record<string, unknown>;
}
/**
 * Tier change event data
 */
export interface TierChangeEventData {
    from: Tier;
    to: Tier;
}
/**
 * API call event data
 */
export interface ApiCallEventData {
    endpoint: string;
    method: string;
    body?: unknown;
    mockResponse?: unknown;
}
/**
 * API response event data
 */
export interface ApiResponseEventData {
    endpoint: string;
    status: number;
    body?: unknown;
    error?: string;
    duration: number;
}
/**
 * State change event data
 */
export interface StateChangeEventData {
    path: string;
    oldValue: unknown;
    newValue: unknown;
}
/**
 * Error event data
 */
export interface ErrorEventData {
    message: string;
    stack?: string;
    context?: string;
}
/**
 * Marker created event data
 */
export interface MarkerCreatedEventData {
    markerId: string;
    title: string;
    severity: string;
    file: string;
    lineStart: number;
}
/**
 * Note added event data
 */
export interface NoteAddedEventData {
    noteId: string;
    content: string;
}
/**
 * Session start/end event data
 */
export interface SessionEventData {
    sessionId: string;
    name: string;
}
/**
 * Application state snapshot for recording
 */
export interface AppState {
    currentView: string;
    selectedIndex: number;
    tier: Tier;
    isAuthenticated: boolean;
    showHelp: boolean;
    showCommandPalette: boolean;
    showDebugPanel: boolean;
    showQuickNote: boolean;
    isRecording: boolean;
    markerCount: number;
    terminalWidth: number;
    terminalHeight: number;
}
/**
 * Create default app state
 */
export declare function createDefaultAppState(): AppState;
/**
 * Playback options
 */
export interface PlaybackOptions {
    speed: number;
    pauseOnError: boolean;
    validateState: boolean;
    interactive: boolean;
}
/**
 * Default playback options
 */
export declare const DEFAULT_PLAYBACK_OPTIONS: PlaybackOptions;
/**
 * Playback result
 */
export interface PlaybackResult {
    success: boolean;
    eventsPlayed: number;
    totalEvents: number;
    errors: PlaybackError[];
    stateValidationFailures: StateValidationFailure[];
    duration: number;
    aborted: boolean;
}
/**
 * Playback error
 */
export interface PlaybackError {
    eventIndex: number;
    eventType: EventType;
    error: string;
}
/**
 * State validation failure
 */
export interface StateValidationFailure {
    eventIndex: number;
    expected: Partial<AppState>;
    actual: Partial<AppState>;
    differences: StateDifference[];
}
/**
 * A single state difference
 */
export interface StateDifference {
    path: string;
    expected: unknown;
    actual: unknown;
}
/**
 * Playback status for UI
 */
export type PlaybackStatus = 'idle' | 'loading' | 'playing' | 'paused' | 'completed' | 'error';
/**
 * Playback progress info
 */
export interface PlaybackProgress {
    status: PlaybackStatus;
    currentIndex: number;
    totalEvents: number;
    elapsedTime: number;
    currentEvent?: RecordedEvent;
    errors: PlaybackError[];
}
/**
 * Recording store version
 */
export declare const RECORDING_STORE_VERSION = 1;
/**
 * Generate a unique recording ID
 */
export declare function generateRecordingId(): string;
/**
 * Format duration in human-readable format
 */
export declare function formatDuration(ms: number): string;
/**
 * Slugify a string for filenames
 */
export declare function slugify(str: string): string;
/**
 * Event type display info
 */
export declare const EVENT_TYPE_DISPLAY: Record<EventType, {
    label: string;
    symbol: string;
    color: string;
}>;
//# sourceMappingURL=recording-types.d.ts.map