paperclipai/paperclip · error · Error

Local provider smoke artifacts are missing. Run build:typesc

Error message

Local provider smoke artifacts are missing. Run build:typescript and build:runner-binaries once.

What it means

Before running, the script checks that all required build artifacts (including per-profile artifacts like the opencode app-server proxy) exist using fs/access over the requiredArtifacts list. If any are missing, the Promise.all rejects and the script throws this guidance error pointing at the two build commands.

Source

Thrown at packages/paperclip-runner/scripts/run-local-provider-smoke.mjs:149

  packageRoot,
  "runner",
  "target",
  "debug",
  process.platform === "win32" ? "paperclip-runnerd.exe" : "paperclip-runnerd",
);
const requiredArtifacts = [
  runnerd,
  resolve(packageRoot, "dist", "eval", "index.js"),
  ...(profiles.some((profile) => profile.startsWith("runner-acpx-"))
    ? [resolve(packageRoot, "dist", "cli", "acpx-runtime-sidecar.cjs")]
    : []),
  ...(profiles.includes("runner-opencode")
    ? [resolve(packageRoot, "dist", "cli", "opencode-app-server-proxy.cjs")]
    : []),
];
await Promise.all(requiredArtifacts.map((artifact) => access(artifact))).catch(
  () => {
    throw new Error(
      "Local provider smoke artifacts are missing. Run build:typescript and build:runner-binaries once.",
    );
  },
);

const typescriptSources = await filesUnder(
  resolve(packageRoot, "src"),
  (path) => path.endsWith(".ts") && !path.endsWith(".test.ts"),
  (path) =>
    /\/(?:browser|devtools|issue-thread|react|scenarios|standalone)$/u.test(
      path,
    ),
);
await assertArtifactsFresh(
  "TypeScript",
  [
    resolve(packageRoot, "package.json"),
    resolve(packageRoot, "tsconfig.json"),

View on GitHub (pinned to 01ad858492)

Solutions

  1. Run `pnpm build:typescript` and `pnpm build:runner-binaries`, then rerun the smoke.
  2. Verify the specific artifacts exist under packages/paperclip-runner/dist (and the opencode proxy .cjs if using runner-opencode).
  3. If artifacts should exist, check the build output directory matches what the script resolves (packageRoot/dist).

Example fix

// before
pnpm smoke:local-provider -- --profile runner-opencode
// after
pnpm build:typescript && pnpm build:runner-binaries && pnpm smoke:local-provider -- --profile runner-opencode
Defensive patterns

Strategy: validation

Validate before calling

const { accessSync } = require('fs');
for (const a of ['packages/paperclip-runner/dist/...']) { try { accessSync(a); } catch { console.error('run build:typescript && build:runner-binaries'); } }

Try / catch

try { runSmoke(); } catch (e) { if (e.message.includes('artifacts are missing')) { execSync('pnpm build:typescript && pnpm build:runner-binaries', {stdio:'inherit'}); runSmoke(); } else throw e; }

Prevention

When it happens

Trigger: Running `pnpm smoke:local-provider` in a fresh clone without ever building, after `pnpm clean`, or with a profile selected (e.g. runner-opencode) whose specific artifact (dist/cli/opencode-app-server-proxy.cjs) was never produced.

Common situations: New machine setup, CI cache that skipped build steps, switching to a profile for the first time whose binary was never built.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


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