From bf9a4155415743f69d1eb6aa8090182ad70a3111 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 8 Jan 2026 04:50:37 +0100 Subject: [PATCH] Switch to @mariozechner/clipboard fork with musl support fixes #533 --- package-lock.json | 294 +++++++++--------- packages/coding-agent/CHANGELOG.md | 1 + packages/coding-agent/package.json | 2 +- .../coding-agent/src/utils/clipboard-image.ts | 2 +- .../coding-agent/test/clipboard-image.test.ts | 6 +- 5 files changed, 155 insertions(+), 150 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6aec7b1c..018a2ac1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -260,150 +260,6 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/@crosscopy/clipboard": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard/-/clipboard-0.2.8.tgz", - "integrity": "sha512-0qRWscafAHzQ+DdfXX+YgPN2KDTIzWBNfN5Q6z1CgCWsRxtkwK8HfQUc00xIejfRWSGWPIxcCTg82hvg06bodg==", - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@crosscopy/clipboard-darwin-arm64": "0.2.8", - "@crosscopy/clipboard-darwin-universal": "0.2.8", - "@crosscopy/clipboard-darwin-x64": "0.2.8", - "@crosscopy/clipboard-linux-arm64-gnu": "0.2.8", - "@crosscopy/clipboard-linux-riscv64-gnu": "0.2.8", - "@crosscopy/clipboard-linux-x64-gnu": "0.2.8", - "@crosscopy/clipboard-win32-arm64-msvc": "0.2.8", - "@crosscopy/clipboard-win32-x64-msvc": "0.2.8" - } - }, - "node_modules/@crosscopy/clipboard-darwin-arm64": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard-darwin-arm64/-/clipboard-darwin-arm64-0.2.8.tgz", - "integrity": "sha512-Y36ST9k5JZgtDE6SBT45bDNkPKBHd4UEIZgWnC0iC4kAWwdjPmsZ8Mn8e5W0YUKowJ/BDcO+EGm2tVTPQOQKXg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@crosscopy/clipboard-darwin-universal": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard-darwin-universal/-/clipboard-darwin-universal-0.2.8.tgz", - "integrity": "sha512-btGV1tLpJWZ4iKa66niahvpZpVRJzgQnYUE+PUX3YYZzaWD0ESuHuVtKVC8sR+b4dsXIiWW5skXbcRmLsF4rtA==", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@crosscopy/clipboard-darwin-x64": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard-darwin-x64/-/clipboard-darwin-x64-0.2.8.tgz", - "integrity": "sha512-0QMKf0XrLZrprYYXU4lgaTuzbnYPh9wH6PvsfDB1FZvWf6rOi0syTaBZYnoghbQe700qwLPEfBRjgljJ3Tn6oA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@crosscopy/clipboard-linux-arm64-gnu": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard-linux-arm64-gnu/-/clipboard-linux-arm64-gnu-0.2.8.tgz", - "integrity": "sha512-8YrU03MRsygymqEcHkNgqCqSCQbYRmJCnMXeS4i8FYeOkAxBEeRvPbHoNmI10uppXJZNZgfIKM7Qqk9tEHiwqQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@crosscopy/clipboard-linux-riscv64-gnu": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard-linux-riscv64-gnu/-/clipboard-linux-riscv64-gnu-0.2.8.tgz", - "integrity": "sha512-/QWLhnb0QYVjEv5GOAC1q+1DaezYU8Th+IoDKUCsR5i43Cqm+g+N/I2K35yo3J+HHkK9XNbtIDZDXlFgK6tRUg==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@crosscopy/clipboard-linux-x64-gnu": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard-linux-x64-gnu/-/clipboard-linux-x64-gnu-0.2.8.tgz", - "integrity": "sha512-j17eaF/onP/6VAGGKtxA1KmmkErmdjta9gMdMV/yUmgeBYzJ9fMpWUzbk2vmaOyXfhaSzR/sk1P6VLBmvCpqHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@crosscopy/clipboard-win32-arm64-msvc": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard-win32-arm64-msvc/-/clipboard-win32-arm64-msvc-0.2.8.tgz", - "integrity": "sha512-MVkMyuYN3y5v0s4HrijM0iA8hZVmpUhHd8X4zKG30t4nE6MbOjOt/8EabMrVmGZlsLeOL2sa0o8Wo9bvhWU+vA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@crosscopy/clipboard-win32-x64-msvc": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@crosscopy/clipboard-win32-x64-msvc/-/clipboard-win32-x64-msvc-0.2.8.tgz", - "integrity": "sha512-/GpiB4B3lSgg7eCLDQw9NfFjtQFjo0S88IL+EK54Hx7ZgAP4Ad/ezP/8dw0cA+N/M6iPYy0reCIjW9st82/uxw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@emnapi/runtime": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", @@ -1488,6 +1344,154 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/@mariozechner/clipboard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard/-/clipboard-0.3.0.tgz", + "integrity": "sha512-tQrCRAtr58BLmWcvwCqlJo5GJgqBGb3zwOBFFBKCEKvRgD8y/EawhCyXsfOh9XOOde1NTAYsYuYyVOYw2tLnoQ==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@mariozechner/clipboard-darwin-arm64": "0.3.0", + "@mariozechner/clipboard-darwin-universal": "0.3.0", + "@mariozechner/clipboard-darwin-x64": "0.3.0", + "@mariozechner/clipboard-linux-arm64-gnu": "0.3.0", + "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.0", + "@mariozechner/clipboard-linux-x64-gnu": "0.3.0", + "@mariozechner/clipboard-linux-x64-musl": "0.3.0", + "@mariozechner/clipboard-win32-arm64-msvc": "0.3.0", + "@mariozechner/clipboard-win32-x64-msvc": "0.3.0" + } + }, + "node_modules/@mariozechner/clipboard-darwin-arm64": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-arm64/-/clipboard-darwin-arm64-0.3.0.tgz", + "integrity": "sha512-7i4bitLzRSij0fj6q6tPmmf+JrwHqfBsBmf8mOcLVv0LVexD+4gEsyMait4i92exKYmCfna6uHKVS84G4nqehg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-darwin-universal": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-universal/-/clipboard-darwin-universal-0.3.0.tgz", + "integrity": "sha512-FVZLGdIkmvqtPQjD0GQwKLVheL+zV7DjA6I5NcsHGjBeWpG2nACS6COuelNf8ruMoPxJFw7RoB4fjw6mmjT+Nw==", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-darwin-x64": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-x64/-/clipboard-darwin-x64-0.3.0.tgz", + "integrity": "sha512-KuurQYEqRhalvBji3CH5xIq1Ts23IgVRE3rjanhqFDI77luOhCnlNbDtqv3No5OxJhEBLykQNrAzfgjqPsPWdA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-linux-arm64-gnu": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-arm64-gnu/-/clipboard-linux-arm64-gnu-0.3.0.tgz", + "integrity": "sha512-nWpGMlk43bch7ztGfnALcSi5ZREVziPYzrFKjoJimbwaiULrfY0fGce0gWBynP9ak0nHgDLp0nSa7b4cCl+cIw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-linux-riscv64-gnu": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-riscv64-gnu/-/clipboard-linux-riscv64-gnu-0.3.0.tgz", + "integrity": "sha512-4BC08CIaOXSSAGRZLEjqJmQfioED8ohAzwt0k2amZPEbH96YKoBNorq5EdwPf5VT+odS0DeyCwhwtxokRLZIvQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-linux-x64-musl": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-musl/-/clipboard-linux-x64-musl-0.3.0.tgz", + "integrity": "sha512-+PnR48/x9GMY5Kh8BLjzHMx6trOegMtxAuqTM9X/bhV3QuW6sLLd7nojDHSGj/ZueK6i0tcQxvOrgNLozVtNDA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-win32-arm64-msvc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-arm64-msvc/-/clipboard-win32-arm64-msvc-0.3.0.tgz", + "integrity": "sha512-+dy2vZ1Ph4EYj0cotB+bVUVk/uKl2bh9LOp/zlnFqoCCYDN6sm+L0VyIOPPo3hjoEVdGpHe1MUxp3qG/OLwXgg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-win32-x64-msvc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-x64-msvc/-/clipboard-win32-x64-msvc-0.3.0.tgz", + "integrity": "sha512-dfpHrUpKHl7ad3xVGE1+gIN3cEnjjPZa4I0BIYMuj2OKq07Gf1FKTXMypB41rDFv6XNzcfhYQnY+ZNgIu9FB8A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard/node_modules/@mariozechner/clipboard-linux-x64-gnu": { + "optional": true + }, "node_modules/@mariozechner/mini-lit": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@mariozechner/mini-lit/-/mini-lit-0.2.1.tgz", @@ -7444,7 +7448,7 @@ "version": "0.37.8", "license": "MIT", "dependencies": { - "@crosscopy/clipboard": "^0.2.8", + "@mariozechner/clipboard": "^0.3.0", "@mariozechner/pi-agent-core": "^0.37.8", "@mariozechner/pi-ai": "^0.37.8", "@mariozechner/pi-tui": "^0.37.8", diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 11620c64..134de81f 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -31,6 +31,7 @@ - OpenAI Codex context window reduced from 400k to 272k tokens to match Codex CLI defaults and prevent 400 errors ([#536](https://github.com/badlogic/pi-mono/pull/536) by [@ghoulr](https://github.com/ghoulr)) - Context overflow detection now recognizes `context_length_exceeded` errors. - Key presses no longer dropped when input is batched over SSH ([#538](https://github.com/badlogic/pi-mono/issues/538)) +- Clipboard image support now works on Alpine Linux and other musl-based distros ([#533](https://github.com/badlogic/pi-mono/issues/533)) ## [0.37.8] - 2026-01-07 diff --git a/packages/coding-agent/package.json b/packages/coding-agent/package.json index a727ee27..be02ab8e 100644 --- a/packages/coding-agent/package.json +++ b/packages/coding-agent/package.json @@ -38,7 +38,7 @@ "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { - "@crosscopy/clipboard": "^0.2.8", + "@mariozechner/clipboard": "^0.3.0", "@mariozechner/pi-agent-core": "^0.37.8", "@mariozechner/pi-ai": "^0.37.8", "@mariozechner/pi-tui": "^0.37.8", diff --git a/packages/coding-agent/src/utils/clipboard-image.ts b/packages/coding-agent/src/utils/clipboard-image.ts index 761d5aaf..6c0fdbe6 100644 --- a/packages/coding-agent/src/utils/clipboard-image.ts +++ b/packages/coding-agent/src/utils/clipboard-image.ts @@ -1,4 +1,4 @@ -import Clipboard from "@crosscopy/clipboard"; +import Clipboard from "@mariozechner/clipboard"; import { spawnSync } from "child_process"; export type ClipboardImage = { diff --git a/packages/coding-agent/test/clipboard-image.test.ts b/packages/coding-agent/test/clipboard-image.test.ts index 4cdd7cb6..a146820c 100644 --- a/packages/coding-agent/test/clipboard-image.test.ts +++ b/packages/coding-agent/test/clipboard-image.test.ts @@ -17,7 +17,7 @@ vi.mock("child_process", () => { }; }); -vi.mock("@crosscopy/clipboard", () => { +vi.mock("@mariozechner/clipboard", () => { return { default: mocks.clipboard, }; @@ -54,7 +54,7 @@ describe("readClipboardImage", () => { mocks.clipboard.getImageBinary.mockReset(); }); - test("Wayland: uses wl-paste and never calls @crosscopy/clipboard", async () => { + test("Wayland: uses wl-paste and never calls @mariozechner/clipboard", async () => { mocks.clipboard.hasImage.mockImplementation(() => { throw new Error("clipboard.hasImage should not be called on Wayland"); }); @@ -107,7 +107,7 @@ describe("readClipboardImage", () => { expect(Array.from(result?.bytes ?? [])).toEqual([9, 8]); }); - test("Non-Wayland: uses @crosscopy/clipboard", async () => { + test("Non-Wayland: uses @mariozechner/clipboard", async () => { mocks.spawnSync.mockImplementation(() => { throw new Error("spawnSync should not be called for non-Wayland sessions"); });