{"record":{"id":"97b1fa5accf73ae5","repo":"paperclipai/paperclip","slug":"local-provider-smoke-artifacts-are-missing-run-bu","errorCode":null,"errorMessage":"Local provider smoke artifacts are missing. Run build:typescript and build:runner-binaries once.","messagePattern":"Local provider smoke artifacts are missing\\. Run build:typescript and build:runner-binaries once\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/scripts/run-local-provider-smoke.mjs","lineNumber":149,"sourceCode":"  packageRoot,\n  \"runner\",\n  \"target\",\n  \"debug\",\n  process.platform === \"win32\" ? \"paperclip-runnerd.exe\" : \"paperclip-runnerd\",\n);\nconst requiredArtifacts = [\n  runnerd,\n  resolve(packageRoot, \"dist\", \"eval\", \"index.js\"),\n  ...(profiles.some((profile) => profile.startsWith(\"runner-acpx-\"))\n    ? [resolve(packageRoot, \"dist\", \"cli\", \"acpx-runtime-sidecar.cjs\")]\n    : []),\n  ...(profiles.includes(\"runner-opencode\")\n    ? [resolve(packageRoot, \"dist\", \"cli\", \"opencode-app-server-proxy.cjs\")]\n    : []),\n];\nawait Promise.all(requiredArtifacts.map((artifact) => access(artifact))).catch(\n  () => {\n    throw new Error(\n      \"Local provider smoke artifacts are missing. Run build:typescript and build:runner-binaries once.\",\n    );\n  },\n);\n\nconst typescriptSources = await filesUnder(\n  resolve(packageRoot, \"src\"),\n  (path) => path.endsWith(\".ts\") && !path.endsWith(\".test.ts\"),\n  (path) =>\n    /\\/(?:browser|devtools|issue-thread|react|scenarios|standalone)$/u.test(\n      path,\n    ),\n);\nawait assertArtifactsFresh(\n  \"TypeScript\",\n  [\n    resolve(packageRoot, \"package.json\"),\n    resolve(packageRoot, \"tsconfig.json\"),","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/scripts/run-local-provider-smoke.mjs#L131-L167","documentation":"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.","triggerScenarios":"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.","commonSituations":"New machine setup, CI cache that skipped build steps, switching to a profile for the first time whose binary was never built.","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)."],"exampleFix":"// before\npnpm smoke:local-provider -- --profile runner-opencode\n// after\npnpm build:typescript && pnpm build:runner-binaries && pnpm smoke:local-provider -- --profile runner-opencode","handlingStrategy":"validation","validationCode":"const { accessSync } = require('fs');\nfor (const a of ['packages/paperclip-runner/dist/...']) { try { accessSync(a); } catch { console.error('run build:typescript && build:runner-binaries'); } }","typeGuard":null,"tryCatchPattern":"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; }","preventionTips":["Run builds once after fresh clone","Build all profile binaries before switching profiles","Add build as a prerequisite step in CI"],"tags":["build","missing-artifacts","file-not-found","smoke-test"],"backgroundTag":"file-not-found","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}