paperclipai/paperclip · error · Error

Provider pack deployment unexpectedly claimed the stable Nod

Error message

Provider pack deployment unexpectedly claimed the stable Node path

What it means

Guard in build-provider-pack.mjs after the Node version check: the deployed pack's Node interpreter path resolved to the stable/system Node path rather than the qualified build interpreter the script intended to bind. It means pnpm deploy redirected or shimmed the interpreter, so the pack would run an unqualified Node at runtime; the build aborts.

Source

Thrown at packages/paperclip-runner/scripts/build-provider-pack.mjs:158

  // Reuse the already-qualified build interpreter instead of introducing a
  // package-manager lifecycle hook or a second binary supply chain. The pack
  // manifest binds the copied bytes, platform, architecture, and minimum
  // version before any provider is launched.
  const minimumNodeVersion = [24, 11, 0];
  const actualNodeVersion = process.versions.node.split(".").map(Number);
  if (
    actualNodeVersion[0] < minimumNodeVersion[0] ||
    (actualNodeVersion[0] === minimumNodeVersion[0] &&
      (actualNodeVersion[1] < minimumNodeVersion[1] ||
        (actualNodeVersion[1] === minimumNodeVersion[1] &&
          actualNodeVersion[2] < minimumNodeVersion[2])))
  ) {
    throw new Error("Provider pack build Node is older than 24.11.0");
  }
  const stableNodeRoot = join(temporaryRoot, "node_modules", "node");
  if (existsSync(stableNodeRoot)) {
    throw new Error(
      "Provider pack deployment unexpectedly claimed the stable Node path",
    );
  }
  const stableNodeCommand = join(stableNodeRoot, "bin", "node");
  mkdirSync(dirname(stableNodeCommand), { recursive: true, mode: 0o755 });
  copyFileSync(process.execPath, stableNodeCommand);
  chmodSync(stableNodeCommand, 0o755);

  // pnpm's generated .bin shims embed the temporary deployment directory in
  // NODE_PATH. That makes an otherwise identical provider pack hash differ on
  // every build and leaks a nonexistent host path after relocation. Replace
  // every provider-facing shim with a pack-relative launcher that always uses
  // the pinned Node executable owned by this pack.
  // The image exposes these same installations to every adapter. Never add a
  // separate global/runner-only CLI version; refresh these packages and their
  // qualification digests together to the latest stable releases.
  writePortableNodeShim("codex", "@openai/codex/bin/codex.js");
  const claudeAcpRequire = createRequire(

View on GitHub (pinned to 01ad858492)

Solutions

  1. Ensure the deploy step preserves the qualified interpreter path (no shim/symlink to stable Node)
  2. Pin the interpreter explicitly in the pack manifest and avoid pnpm rewriting the bin path
  3. Rebuild after correcting the toolchain so the qualified Node is the one resolved
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/paperclip-runner/scripts/build-provider-pack.mjs:158 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10). Data as JSON: /api/errors/9fe56ba3dff5857b. Report an issue: GitHub.