import type { SessionFileOperation } from '../types/api';
export interface ToolActivityHighlight {
    startLine?: number;
    endLine?: number;
    reason: 'read' | 'write' | 'apply_patch';
    callId?: string;
    status: 'streaming' | 'success' | 'error';
}
export interface ToolActivityAnnotation {
    id: string;
    reason: 'write' | 'apply_patch';
    callId?: string;
    status: 'streaming' | 'success' | 'error';
    lineTones: Array<[number, 'add' | 'remove']>;
    createdAt: number;
}
export interface ToolChangeCount {
    additions: number;
    removals: number;
}
export type ToolPatchPreviewName = 'apply_patch' | 'edit' | 'multiedit';
export interface ToolPreviewTabInput {
    path: string;
    toolName: 'write' | ToolPatchPreviewName;
    callId?: string;
    content?: string;
    baseContent?: string;
    patch?: string;
    changedLines?: number[];
    previewContent?: string;
    resultContent?: string;
    previewLineTones?: Array<[number, 'add' | 'remove']>;
    previewFirstLine?: number;
    previewLatestLine?: number;
    changeCount?: ToolChangeCount;
    status: 'streaming' | 'success' | 'error';
    error?: string;
}
export type ToolPatchPreview = Omit<ToolPreviewTabInput, 'toolName' | 'content'> & {
    toolName: ToolPatchPreviewName;
};
export type ToolWritePreview = Omit<ToolPreviewTabInput, 'toolName' | 'baseContent' | 'patch' | 'changedLines' | 'previewContent' | 'resultContent' | 'previewLineTones' | 'previewFirstLine' | 'previewLatestLine'> & {
    toolName: 'write';
};
export type ViewerTab = {
    id: string;
    type: 'git-diff';
    title: string;
    path: string;
    staged: boolean;
} | {
    id: string;
    type: 'session-file-diff';
    title: string;
    path: string;
    operations: SessionFileOperation[];
    selectedOperationIndex: number;
} | {
    id: string;
    type: 'file';
    title: string;
    path: string;
    highlight?: ToolActivityHighlight;
    annotations?: ToolActivityAnnotation[];
    patchPreview?: ToolPatchPreview;
    writePreview?: ToolWritePreview;
} | {
    id: string;
    type: 'tool-preview';
    title: string;
    path: string;
    toolName: 'write' | ToolPatchPreviewName;
    callId?: string;
    content?: string;
    baseContent?: string;
    patch?: string;
    changedLines?: number[];
    previewContent?: string;
    resultContent?: string;
    previewLineTones?: Array<[number, 'add' | 'remove']>;
    previewFirstLine?: number;
    previewLatestLine?: number;
    changeCount?: ToolChangeCount;
    status: 'streaming' | 'success' | 'error';
    error?: string;
} | {
    id: string;
    type: 'skill-file';
    title: string;
    skill: string;
    file: string | null;
} | {
    id: string;
    type: 'browser';
    title: string;
    url: string;
    kind: 'browser' | 'simulator';
    reloadKey: number;
};
export type ViewerMode = 'work' | 'preview';
interface ViewerTabsState {
    tabs: ViewerTab[];
    activeTabId: string | null;
    activeMode: ViewerMode;
    activeWorkTabId: string | null;
    activePreviewTabId: string | null;
    followToolActivity: boolean;
    toggleFollowToolActivity: () => void;
    setFollowToolActivity: (enabled: boolean) => void;
    setViewerMode: (mode: ViewerMode) => void;
    openGitDiffTab: (path: string, staged: boolean) => void;
    openSessionFileDiffTab: (path: string, operations: SessionFileOperation[]) => void;
    openFileTab: (path: string) => void;
    openToolReadTab: (path: string, highlight: ToolActivityHighlight) => void;
    openToolPreviewTab: (preview: ToolPreviewTabInput) => void;
    openSkillFileTab: (skill: string, file: string | null) => void;
    openBrowserTab: (url?: string, options?: {
        kind?: 'browser' | 'simulator';
        title?: string;
        newTab?: boolean;
    }) => void;
    updateBrowserTabUrl: (id: string, url: string) => void;
    reloadBrowserTab: (id: string) => void;
    setActiveTab: (id: string) => void;
    closeTab: (id: string) => void;
    updateSessionFileOperationIndex: (id: string, index: number) => void;
    closeAllTabs: () => void;
}
export declare const useViewerTabsStore: import("zustand").UseBoundStore<import("zustand").StoreApi<ViewerTabsState>>;
export {};
//# sourceMappingURL=viewerTabsStore.d.ts.map