/**
 * Long-running edit ops (e.g. copy-items) return from HTTP before CreatedItemIds exist.
 * EditorShell sends operation:completed over the socket with the final payload; we bridge
 * that to a window event so operations.duplicateItem / copyItems can await the result.
 */
export declare const EDIT_OPERATION_TERMINAL_EVENT = "parhelia:edit-operation-terminal";
export type EditOperationTerminalResult = {
    createdItemIds?: string[];
    errorMessage?: string;
    successCount?: number;
    failureCount?: number;
    summary?: string;
};
type EditOperationTerminalDetail = EditOperationTerminalResult & {
    operationId?: string;
    id?: string;
};
export declare function editOperationNeedsTerminalCompletion(result: Record<string, unknown>): boolean;
export declare const copyItemsNeedsTerminalCompletion: typeof editOperationNeedsTerminalCompletion;
export declare function normalizeOpId(id: string): string;
export declare function cacheEditOperationTerminalResult(detail: EditOperationTerminalDetail): void;
export declare function waitForEditOperationTerminal(operationId: string, timeoutMs: number): Promise<EditOperationTerminalResult>;
export {};
