paperclipai/paperclip · error · Error
Installed CLI smoke check reported ${reportedVersion || "no
Error message
Installed CLI smoke check reported ${reportedVersion || "no version"}; expected ${expectedVersion}. What it means
Error "Installed CLI smoke check reported ${reportedVersion || "no version"}; expected ${expectedVersion}." thrown in paperclipai/paperclip.
Source
Thrown at cli/src/commands/install.ts:178
export async function resolveGitHubRef(repo: string, ref: string, runCommand: CommandRunner): Promise<string> {
const result = await runGitHubCurl(["--fail", "--silent", "--show-error", "--location", "--header", "Accept: application/vnd.github+json", "--header", "User-Agent: paperclipai-install", `https://api.github.com/repos/${repo}/commits/${encodeURIComponent(ref)}`], runCommand, { maxBuffer: 4 * 1024 * 1024 });
let sha: unknown;
try { sha = (JSON.parse(result.stdout) as { sha?: unknown }).sha; } catch { throw new Error(`GitHub returned an invalid response while resolving ${repo}@${ref}.`); }
if (typeof sha !== "string" || !/^[0-9a-f]{40}$/i.test(sha)) throw new Error(`GitHub did not return a full commit SHA for ${repo}@${ref}.`);
return sha.toLowerCase();
}
function payloadEntrypoint(payloadPath: string): string {
return path.join(payloadPath, "node_modules", "paperclipai", "dist", "index.js");
}
export async function smokePayload(payloadPath: string, expectedVersion: string, runCommand: CommandRunner): Promise<void> {
const entrypoint = payloadEntrypoint(payloadPath);
if (!fs.existsSync(entrypoint)) throw new Error(`Installed package is missing its CLI entrypoint: ${entrypoint}`);
const result = await runCommand(process.execPath, [entrypoint, "--version"], { maxBuffer: 1024 * 1024 });
const reportedVersion = result.stdout.trim().split(/\s+/)[0];
if (reportedVersion !== expectedVersion) {
throw new Error(`Installed CLI smoke check reported ${reportedVersion || "no version"}; expected ${expectedVersion}.`);
}
}
export async function installNpmPayload(
version: string,
runCommand: CommandRunner,
paths = resolveInstallStorePaths(),
): Promise<{ payloadPath: string; reused: boolean }> {
const payloadPath = payloadPathFor(paths, "npm", version);
if (fs.existsSync(payloadPath)) {
await smokePayload(payloadPath, version, runCommand);
return { payloadPath, reused: true };
}
const sourceRoot = path.dirname(payloadPath);
fs.mkdirSync(sourceRoot, { recursive: true, mode: 0o700 });
const sourceStat = fs.lstatSync(sourceRoot);
if (!sourceStat.isDirectory() || sourceStat.isSymbolicLink()) {
throw new Error(`Refusing to install into unsafe payload root ${sourceRoot}.`);View on GitHub (pinned to 67001ec6eb)
When it happens
Trigger: Thrown at cli/src/commands/install.ts:178 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12).
Data as JSON: /api/errors/86f262f91b685000.
Report an issue: GitHub.