paperclipai/paperclip · error · Error
Refusing unsafe provider-pack output path: ${outputRoot}
Error message
Refusing unsafe provider-pack output path: ${outputRoot} What it means
Safety guard at the top of build-provider-pack.mjs: the resolved output root (CLI argument or default provider-pack dir) equals the workspace root, the package root, or another explicitly refused location. The script writes/deletes trees and refuses destructive output paths that would clobber the repository itself.
Source
Thrown at packages/paperclip-runner/scripts/build-provider-pack.mjs:34
} from "node:fs";
import { tmpdir } from "node:os";
import { dirname, join, relative, resolve } from "node:path";
import { createRequire } from "node:module";
import { fileURLToPath } from "node:url";
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
const workspaceRoot = resolve(packageRoot, "../..");
const outputArgument = process.argv.slice(2).find((value) => value !== "--");
const outputRoot = resolve(
process.cwd(),
outputArgument ?? join(packageRoot, "provider-pack"),
);
if (
outputRoot === workspaceRoot ||
outputRoot === packageRoot ||
outputRoot === "/"
) {
throw new Error(`Refusing unsafe provider-pack output path: ${outputRoot}`);
}
const temporaryParent = mkdtempSync(join(tmpdir(), "paperclip-provider-pack-"));
const temporaryRoot = join(temporaryParent, "pack");
function canonicalJson(value) {
if (Array.isArray(value)) return `[${value.map(canonicalJson).join(",")}]`;
if (value && typeof value === "object") {
return `{${Object.keys(value)
.sort()
.map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`)
.join(",")}}`;
}
return JSON.stringify(value);
}
function sha256File(path) {
return `sha256:${createHash("sha256")View on GitHub (pinned to 01ad858492)
Solutions
- Pass an explicit output directory outside the workspace and package roots
- Use the default provider-pack output path instead of overriding it
- If the default now collides with a refused path, move the workspace layout or update the refused-path list in the script
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/paperclip-runner/scripts/build-provider-pack.mjs:34 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/2b037654c8a6d53f.
Report an issue: GitHub.