declare const threadStatusTextIndicatesBusy: typeof import("./chatgpt-dom-snapshot-shared.js").threadStatusTextIndicatesBusy; export { threadStatusTextIndicatesBusy }; export type ThreadAttachmentButton = { afterLastUserMessage?: boolean; artifactIndexInAssistantTurn?: number; assistantTurnId?: string; assistantTurnIndex?: number; behaviorButton?: boolean; download?: boolean; href: string | null; insideAssistantMessage?: boolean; insideFinalAssistantMessage?: boolean; tag: string; text: string; }; export type ThreadAssistantDownloadButton = ThreadAttachmentButton & { artifactIndex: number; hrefLabel: string; label: string; }; export type ThreadAssistantSnapshot = { afterLastUserMessage?: boolean; assistantTurnId?: string; assistantTurnIndex?: number; contentSource?: 'deep-research-iframe'; deepResearchParentAnchor?: { signature: string; text: string; }; hasCopyButton: boolean; modelSlug?: string; precedingUserMessageSignature?: string; precedingUserTurnId?: string; precedingUserTurnIndex?: number; signature: string; text: string; }; export type ThreadCaptureIdentity = { artifacts: Array<{ artifactIndexInAssistantTurn: number; assistantTurnId: string; assistantTurnIndex: number; href: string | null; label: string; contentSha256?: string; }>; assistantResponse: { assistantTurnId: string; assistantTurnIndex: number; precedingUserMessageSignature: string; precedingUserTurnId: string; precedingUserTurnIndex: number; responseSha256: string; signature: string; contentSource?: 'deep-research-iframe'; parentAnchor?: { responseSha256: string; signature: string; }; } | null; browserEndpoint: string; chatUrl: string; committedUserTurn: { signature: string; turnId: string; turnIndex: number; }; expectedContentSource?: 'deep-research-iframe'; schemaVersion: 1 | 2; targetId: string; }; export type ThreadSnapshot = { capabilityLimitText?: string; assistantFailureTexts: string[]; assistantSnapshots: ThreadAssistantSnapshot[]; attachmentButtons: ThreadAttachmentButton[]; bodyText: string; codeBlocks: string[]; href: string; patchMarkers: { addFile: boolean; beginPatch: boolean; deleteFile: boolean; diffGit: boolean; updateFile: boolean; }; statusBusy: boolean; statusTexts: string[]; stopVisible: boolean; title: string; userSnapshots: Array<{ signature: string; turnId: string; turnIndex: number; }>; }; export type ExportedThreadSnapshot = ThreadSnapshot & { capturedAt: string; chatUrl: string; }; export declare function normalizeThreadSnapshot(snapshot: Partial | null | undefined): ThreadSnapshot; export declare function declaredSingleArtifactSha256(responseText: string, artifactCount: number): string | undefined; export declare function captureIdentityDigest(value: unknown): string; export declare function isCaptureIdentityDigest(value: unknown): value is string; export declare function mergeDeepResearchReportSnapshot(pageSnapshot: Partial | null | undefined, deepResearchSnapshot: Partial | null | undefined, capture: ThreadCaptureIdentity): ThreadSnapshot; export declare function scopeThreadSnapshotToCaptureIdentity(snapshot: Partial | null | undefined, capture: ThreadCaptureIdentity | undefined): ThreadSnapshot; export declare function completeThreadCaptureIdentity(capture: ThreadCaptureIdentity, snapshot: Partial | null | undefined): ThreadCaptureIdentity; export declare function parseThreadCaptureIdentity(value: unknown): ThreadCaptureIdentity; export declare function normalizeAttachmentValue(value: unknown): string; export declare function deriveAttachmentHrefLabel(href: string | null | undefined): string; export declare function deriveAttachmentLabel(item: Pick | string): string; export declare function isChatConversationHref(href: string | null | undefined): boolean; export declare function isThreadAttachmentCandidate(item: ThreadAttachmentButton): boolean; export declare function hasAssistantDownloadableHref(href: string | null | undefined): boolean; export declare function isAssistantDownloadControl(item: ThreadAttachmentButton): boolean; export declare function extractAssistantDownloadButtons(snapshot: Pick | Partial | null | undefined): ThreadAssistantDownloadButton[]; export declare function isPatchArtifactAttachment(item: ThreadAttachmentButton): boolean; export declare function extractAssistantArtifactButtons(snapshot: Pick | Partial | null | undefined): ThreadAttachmentButton[]; export declare function extractAssistantArtifactLabels(snapshot: Pick | Partial | null | undefined): string[]; export declare function snapshotHasAssistantArtifacts(snapshot: Partial | null | undefined): boolean; export declare function threadStatusTextIndicatesComplete(value: string): boolean; export declare function assistantSnapshotLooksTerminal(snapshot: Partial | null | undefined): boolean; export declare function assistantSnapshotLooksIncomplete(snapshot: Partial | null | undefined): boolean; export declare function snapshotHasPatchArtifacts(snapshot: Partial | null | undefined): boolean; type SnapshotBusyInput = Partial>; export declare function snapshotBusyReason(snapshot: SnapshotBusyInput | null | undefined): 'assistant-settling' | 'idle' | 'status-busy' | 'stop-visible'; export declare function snapshotIndicatesBusy(snapshot: SnapshotBusyInput | null | undefined): boolean; export declare function hasThreadPayload(snapshot: Partial | null | undefined): boolean; export declare function buildCaptureThreadSnapshotExpression(): string;