import { createRequire } from "node:module"; import { dirname, join } from "node:path"; import { pathToFileURL } from "node:url"; import * as Clipboard from "@mariozechner/clipboard"; type ClipboardImage = { bytes: Uint8Array; mimeType: string; }; type ReadClipboardImage = () => Promise; let readClipboardImageLoader: Promise | undefined; export async function hasClipboardImage(): Promise { if (hasClipboardImageViaNative()) { return true; } try { const readClipboardImage = await loadPiClipboardImageReader(); if (!readClipboardImage) { return false; } return (await readClipboardImage()) !== null; } catch { return false; } } function hasClipboardImageViaNative(): boolean { try { return Clipboard.hasImage(); } catch { return false; } } async function loadPiClipboardImageReader(): Promise { if (!readClipboardImageLoader) { readClipboardImageLoader = (async () => { try { const require = createRequire(import.meta.url); const piEntry = require.resolve("@mariozechner/pi-coding-agent"); const piDistDir = dirname(piEntry); const clipboardImageModulePath = join(piDistDir, "utils", "clipboard-image.js"); const module = await import(pathToFileURL(clipboardImageModulePath).href); const readClipboardImage = (module as { readClipboardImage?: ReadClipboardImage }).readClipboardImage; return typeof readClipboardImage === "function" ? readClipboardImage : undefined; } catch { return undefined; } })(); } return await readClipboardImageLoader; }