paperclipai/paperclip · error · Error
eval-session provider is unsupported by CapabilityLiveSessio
Error message
eval-session provider is unsupported by CapabilityLiveSessionService
What it means
After the schema check, parseEvalSessionRequest validates the provider field. Only 'codex' (default), 'opencode', 'claude_managed', 'aws_agentcore', and 'acpx' are supported by CapabilityLiveSessionService; any other string throws this error. It also then cross-checks that the optional driver matches the expected driver for that provider.
Source
Thrown at packages/paperclip-runner/src/cli/eval-session-contract.ts:227
),
};
}
/** Fail-closed validation for the executable boundary. */
export function parseEvalSessionRequest(value: unknown): EvalSessionRequest {
const input = object(value, "request");
if (input.schema !== EVAL_SESSION_REQUEST_SCHEMA) {
throw new Error("unsupported request schema");
}
const providerValue = input.provider ?? "codex";
if (
providerValue !== "codex" &&
providerValue !== "opencode" &&
providerValue !== "claude_managed" &&
providerValue !== "aws_agentcore" &&
providerValue !== "acpx"
) {
throw new Error(
"eval-session provider is unsupported by CapabilityLiveSessionService",
);
}
const provider = providerValue;
const driver = expectedEvalSessionDriver(provider);
if (input.driver !== undefined && input.driver !== driver) {
throw new Error("eval-session provider/driver mismatch");
}
// The original Evalbook v1 producer serialized absent provider-specific
// options as JSON null. Preserve compatibility with those immutable request
// artifacts while continuing to reject non-null values for the wrong lane.
const acpxAgent = input.acpxAgent === null ? undefined : input.acpxAgent;
if (acpxAgent === "pi") throw new Error("The Pi ACPX profile is not available");
if (
acpxAgent !== undefined &&
acpxAgent !== "codex" &&
acpxAgent !== "claude"
) {View on GitHub (pinned to 01ad858492)
Solutions
- Set request.provider to one of: 'codex', 'opencode', 'claude_managed', 'aws_agentcore', 'acpx' (or omit it to default to 'codex')
- Fix casing/spelling to the exact lowercase literal
- Check which provider ids this runner build supports and align the caller
- If a genuinely new provider is needed, add it to the contract and CapabilityLiveSessionService first
Example fix
// before
const req = { schema: SCHEMA, provider: 'claude' };
// after
const req = { schema: SCHEMA, provider: 'claude_managed' }; Defensive patterns
Strategy: validation
Validate before calling
const SUPPORTED_PROVIDERS = ['codex', 'opencode', 'claude_managed', 'aws_agentcore', 'acpx'];
if (!SUPPORTED_PROVIDERS.includes(req.provider ?? 'codex')) {
throw new Error(`provider must be one of: ${SUPPORTED_PROVIDERS.join(', ')}`);
} Type guard
type Provider = 'codex' | 'opencode' | 'claude_managed' | 'aws_agentcore' | 'acpx';
function isSupportedProvider(v) {
return v === undefined || ['codex','opencode','claude_managed','aws_agentcore','acpx'].includes(v);
} Try / catch
try {
const request = parseEvalSessionRequest(raw);
} catch (err) {
if (err.message.includes('provider is unsupported')) {
throw new RequestValidationError('Use codex, opencode, claude_managed, aws_agentcore, or acpx (exact lowercase literals)', { cause: err });
}
throw err;
} Prevention
- Use the canonical provider id literals; never aliases or display names
- Keep provider values lowercase and exact — no casing normalization at the boundary
- Derive provider choices in the UI/CLI from the same constant list the contract uses
- When adding a new provider, update the contract and CapabilityLiveSessionService before shipping callers
When it happens
Trigger: Passing request.provider with a value outside the supported set — e.g. 'claude', 'codex-cli', 'gemini', a misspelling like 'opendcode', or an uppercase variant — instead of one of the five exact literals.
Common situations: A new provider was added to the caller before the runner gained support; a provider alias or display name was used instead of the canonical id; casing was normalized upstream to 'Codex'; a config file from a fork/experimental build lists an unsupported provider.
Related errors
- invalid_provider
- ${path} must be an object
- ${path} must be a non-empty string
- ${path} must be a positive safe integer
- ${path} must be a positive finite number
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-02).
Data as JSON: /api/errors/0fef35a39d9de0b7.
Report an issue: GitHub.