fix(coding-agent): guard clipboard native load

This commit is contained in:
Mario Zechner 2026-02-02 00:23:12 +01:00
parent ad8026f821
commit 287a0b606d
3 changed files with 28 additions and 21 deletions

View file

@ -1,22 +1,8 @@
import { spawnSync } from "child_process";
import { createRequire } from "module";
import { clipboard } from "./clipboard-native.js";
import { loadPhoton } from "./photon.js";
type ClipboardModule = {
hasImage: () => boolean;
getImageBinary: () => Promise<Array<number>>;
};
const require = createRequire(import.meta.url);
let Clipboard: ClipboardModule | null = null;
try {
Clipboard = require("@mariozechner/clipboard") as ClipboardModule;
} catch {
Clipboard = null;
}
export type ClipboardImage = {
bytes: Uint8Array;
mimeType: string;
@ -191,11 +177,11 @@ export async function readClipboardImage(options?: {
if (platform === "linux" && isWaylandSession(env)) {
image = readClipboardImageViaWlPaste() ?? readClipboardImageViaXclip();
} else {
if (!Clipboard || !Clipboard.hasImage()) {
if (!clipboard || !clipboard.hasImage()) {
return null;
}
const imageData = await Clipboard.getImageBinary();
const imageData = await clipboard.getImageBinary();
if (!imageData || imageData.length === 0) {
return null;
}

View file

@ -0,0 +1,21 @@
import { createRequire } from "module";
export type ClipboardModule = {
hasImage: () => boolean;
getImageBinary: () => Promise<Array<number>>;
};
const require = createRequire(import.meta.url);
let clipboard: ClipboardModule | null = null;
const hasDisplay = process.platform !== "linux" || Boolean(process.env.DISPLAY || process.env.WAYLAND_DISPLAY);
if (!process.env.TERMUX_VERSION && hasDisplay) {
try {
clipboard = require("@mariozechner/clipboard") as ClipboardModule;
} catch {
clipboard = null;
}
}
export { clipboard };