{"record":{"id":"0fef35a39d9de0b7","repo":"paperclipai/paperclip","slug":"eval-session-provider-is-unsupported-by-capability","errorCode":null,"errorMessage":"eval-session provider is unsupported by CapabilityLiveSessionService","messagePattern":"eval-session provider is unsupported by CapabilityLiveSessionService","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/cli/eval-session-contract.ts","lineNumber":227,"sourceCode":"    ),\n  };\n}\n\n/** Fail-closed validation for the executable boundary. */\nexport function parseEvalSessionRequest(value: unknown): EvalSessionRequest {\n  const input = object(value, \"request\");\n  if (input.schema !== EVAL_SESSION_REQUEST_SCHEMA) {\n    throw new Error(\"unsupported request schema\");\n  }\n  const providerValue = input.provider ?? \"codex\";\n  if (\n    providerValue !== \"codex\" &&\n    providerValue !== \"opencode\" &&\n    providerValue !== \"claude_managed\" &&\n    providerValue !== \"aws_agentcore\" &&\n    providerValue !== \"acpx\"\n  ) {\n    throw new Error(\n      \"eval-session provider is unsupported by CapabilityLiveSessionService\",\n    );\n  }\n  const provider = providerValue;\n  const driver = expectedEvalSessionDriver(provider);\n  if (input.driver !== undefined && input.driver !== driver) {\n    throw new Error(\"eval-session provider/driver mismatch\");\n  }\n  // The original Evalbook v1 producer serialized absent provider-specific\n  // options as JSON null. Preserve compatibility with those immutable request\n  // artifacts while continuing to reject non-null values for the wrong lane.\n  const acpxAgent = input.acpxAgent === null ? undefined : input.acpxAgent;\n  if (acpxAgent === \"pi\") throw new Error(\"The Pi ACPX profile is not available\");\n  if (\n    acpxAgent !== undefined &&\n    acpxAgent !== \"codex\" &&\n    acpxAgent !== \"claude\"\n  ) {","sourceCodeStart":209,"sourceCodeEnd":245,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/cli/eval-session-contract.ts#L209-L245","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nconst req = { schema: SCHEMA, provider: 'claude' };\n// after\nconst req = { schema: SCHEMA, provider: 'claude_managed' };","handlingStrategy":"validation","validationCode":"const SUPPORTED_PROVIDERS = ['codex', 'opencode', 'claude_managed', 'aws_agentcore', 'acpx'];\nif (!SUPPORTED_PROVIDERS.includes(req.provider ?? 'codex')) {\n  throw new Error(`provider must be one of: ${SUPPORTED_PROVIDERS.join(', ')}`);\n}","typeGuard":"type Provider = 'codex' | 'opencode' | 'claude_managed' | 'aws_agentcore' | 'acpx';\nfunction isSupportedProvider(v) {\n  return v === undefined || ['codex','opencode','claude_managed','aws_agentcore','acpx'].includes(v);\n}","tryCatchPattern":"try {\n  const request = parseEvalSessionRequest(raw);\n} catch (err) {\n  if (err.message.includes('provider is unsupported')) {\n    throw new RequestValidationError('Use codex, opencode, claude_managed, aws_agentcore, or acpx (exact lowercase literals)', { cause: err });\n  }\n  throw err;\n}","preventionTips":["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"],"tags":["validation","contract","provider"],"backgroundTag":"unsupported-provider","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-02T18:44:00.616Z","contentChangedAt":"2026-09-02T18:44:00.616Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}