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
- Run `pnpm build:typescript` and `pnpm build:runner-binaries`, then rerun the smoke.
- Verify the specific artifacts exist under packages/paperclip-runner/dist (and the opencode proxy .cjs if using runner-opencode).
- 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
- Run builds once after fresh clone
- Build all profile binaries before switching profiles
- Add build as a prerequisite step in CI
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
- ${label} smoke artifacts are older than their source. Rebuil
- ${label} does not exist at ${resolved}.
- ${entrypoint.name} bundle retained a non-builtin import: ${d
- Expected ${expectedName}@${OPENCODE_VERSION}, received ${Str
- Pinned OpenCode materialization requires linux/x64, received
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/97b1fa5accf73ae5.
Report an issue: GitHub.