Files
hermes-agent/apps/desktop/src/lib/clipboard.ts
T

29 lines
846 B
TypeScript

// Routes `navigator.clipboard.writeText` through Electron IPC, since the
// renderer's clipboard API throws "Write permission denied" whenever the
// document loses focus (e.g. clicking a portaled Radix dropdown). The IPC
// path runs in the main process and is unconditional.
export function installClipboardShim() {
const ipc = window.hermesDesktop?.writeClipboard
if (!ipc || !navigator.clipboard) {
return
}
const native = navigator.clipboard.writeText?.bind(navigator.clipboard)
const writeText = async (text: string) => {
try {
await ipc(text)
} catch {
await native?.(text)
}
}
try {
Object.defineProperty(navigator.clipboard, 'writeText', { configurable: true, value: writeText, writable: true })
} catch {
// Browser refused override; primitives keep using the native API.
}
}