paperclipai/paperclip · error · Error

Unsupported local provider smoke profile: ${profile}

Error message

Unsupported local provider smoke profile: ${profile}

What it means

After expanding selected --profile values, parseProfiles verifies each expanded profile is a member of PROFILE_IDS. Any unrecognized profile name throws this error listing the offending value. This runs after the flag-shape check (error 110), so the flag was well-formed but the value was wrong.

Source

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

];

function parseProfiles(args) {
  const selected = [];
  for (let index = 0; index < args.length; index += 1) {
    if (args[index] !== "--profile" || !args[index + 1]) {
      throw new Error(
        `Usage: pnpm smoke:local-provider -- --profile <${PROFILE_IDS.join("|")}|all>`,
      );
    }
    selected.push(args[++index]);
  }
  if (selected.length === 0) return ["runner-acpx-claude"];
  const expanded = selected.flatMap((profile) =>
    profile === "all" ? PROFILE_IDS : [profile],
  );
  for (const profile of expanded) {
    if (!PROFILE_IDS.includes(profile)) {
      throw new Error(`Unsupported local provider smoke profile: ${profile}`);
    }
  }
  return [...new Set(expanded)];
}

function liveCandidate(id, candidateSlots) {
  const candidates = candidateSlots.flatMap((slot) => slot.candidates);
  if (id === "runner-acpx-claude") {
    return candidates.find(
      (candidate) => candidate.id === "acpx-claude-sonnet",
    );
  }
  if (id === "runner-acpx-codex") {
    return candidates.find((candidate) => candidate.id === "acpx-codex-sol");
  }
  if (id === "runner-codex") {
    const source = candidates.find(
      (candidate) => candidate.id === "codex-luna",

View on GitHub (pinned to 01ad858492)

Solutions

  1. Use an exact profile id from PROFILE_IDS in run-local-provider-smoke.mjs (e.g. runner-acpx-claude).
  2. Use `--profile all` to run every supported profile.
  3. Repeat the --profile flag instead of comma-separating: `--profile a --profile b`.

Example fix

// before
pnpm smoke:local-provider -- --profile claude-code
// after
pnpm smoke:local-provider -- --profile all
Defensive patterns

Strategy: validation

Validate before calling

const PROFILE_IDS = ['runner-acpx-claude']; // from script source
for (const p of myProfiles) if (!PROFILE_IDS.includes(p) && p !== 'all') throw new Error(`bad profile ${p}`);

Prevention

When it happens

Trigger: `pnpm smoke:local-provider -- --profile runner-foo` where runner-foo is not in PROFILE_IDS, or `--profile all,typo` style comma values (each comma-joined string is treated as one profile name).

Common situations: Guessing a profile name instead of checking the catalog, using a profile that exists in another eval script but not this one, or passing comma-separated values where the script expects repeated flags.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


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