import { copyToClipboard } from "@earendil-works/pi-coding-agent"; import { formatTranscript } from "./format.js"; export type NotifyLevel = "info" | "warning" | "error"; export interface CopyAllContext { sessionManager: { getBranch(): readonly unknown[]; }; ui: { notify(message: string, level?: NotifyLevel): void; }; } export interface CopyAllResult { copied: boolean; messageCount: number; text: string; error?: string; } export type ClipboardWriter = (text: string) => Promise; export async function copyAllTranscript( ctx: CopyAllContext, writeClipboard: ClipboardWriter = copyToClipboard, ): Promise { const result = formatTranscript(ctx.sessionManager.getBranch()); if (result.messageCount === 0) { ctx.ui.notify("No user or assistant messages to copy.", "warning"); return { copied: false, messageCount: 0, text: "" }; } try { await writeClipboard(result.text); ctx.ui.notify( `Copied ${result.messageCount} messages to clipboard.`, "info", ); return { copied: true, messageCount: result.messageCount, text: result.text, }; } catch (error) { const message = error instanceof Error ? error.message : String(error); ctx.ui.notify(message, "error"); return { copied: false, messageCount: result.messageCount, text: result.text, error: message, }; } }