{"record":{"id":"444add82f45d7b43","repo":"coleam00/Archon","slug":"unknown-provider-requestedprovider-availabl","errorCode":null,"errorMessage":"Unknown provider: '${requestedProvider}'. Available: ${registeredProviders.join(', ')}","messagePattern":"Unknown provider: '(.+?)'\\. Available: (.+?)","errorType":"exception","errorClass":"UnknownProviderError","httpStatus":null,"severity":"error","filePath":"packages/providers/src/registry.ts","lineNumber":63,"sourceCode":" * Register a provider. Throws on duplicate registration.\n */\nexport function registerProvider(entry: ProviderRegistration): void {\n  if (registry.has(entry.id)) {\n    throw new Error(`Provider '${entry.id}' is already registered`);\n  }\n  assertValidCapabilities(entry);\n  registry.set(entry.id, entry);\n  getLog().debug({ provider: entry.id, builtIn: entry.builtIn }, 'provider.registered');\n}\n\n/**\n * Get an instantiated agent provider by ID.\n * @throws UnknownProviderError if not registered\n */\nexport function getAgentProvider(id: string): IAgentProvider {\n  const entry = registry.get(id);\n  if (!entry) {\n    throw new UnknownProviderError(id, [...registry.keys()]);\n  }\n  getLog().debug({ provider: id }, 'provider_selected');\n  return entry.factory();\n}\n\n/**\n * Get the full registration entry for a provider.\n * @throws UnknownProviderError if not registered\n */\nexport function getRegistration(id: string): ProviderRegistration {\n  const entry = registry.get(id);\n  if (!entry) {\n    throw new UnknownProviderError(id, [...registry.keys()]);\n  }\n  return entry;\n}\n\n/**","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/coleam00/Archon/blob/0773b9745896ef0612e709c80845a0f7db315b19/packages/providers/src/registry.ts#L45-L81","documentation":"getAgentProvider looks up a registered provider by ID and instantiates it via its factory. The ID was not found in the registry, so it throws UnknownProviderError listing every currently registered provider ID. This guards against running work against a misspelled or not-yet-registered provider.","triggerScenarios":"Calling getAgentProvider(id) with an id that was never passed to registerProvider (typo, provider pack not loaded, call before registerBuiltinProviders runs).","commonSituations":"Typo in config ('claude-code' vs 'claude'); provider registration module not imported at startup; builtin registration skipped in a test harness; renamed provider ID after an upgrade while old config still references it.","solutions":["Compare your provider ID against the 'Available:' list in the error and fix the spelling","Ensure registerBuiltinProviders()/the provider pack registration runs before getAgentProvider is called","Import the module that registers the desired provider at startup","Update stale config to the current provider ID after a rename"],"exampleFix":"// before\nconst provider = getAgentProvider('claude-code');\n// after (matches a registered id)\nconst provider = getAgentProvider('claude');","handlingStrategy":"try-catch","validationCode":"import { getRegisteredProviders } from '@archon/providers';\nif (!getRegisteredProviders().includes(id)) {\n  console.error(`Provider '${id}' not registered. Available: ${getRegisteredProviders().join(', ')}`);\n}","typeGuard":null,"tryCatchPattern":"import { UnknownProviderError } from '@archon/providers';\ntry {\n  const provider = getAgentProvider(id);\n} catch (err) {\n  if (err instanceof UnknownProviderError) {\n    console.error(`'${err.requestedProvider}' is not registered. Available: ${err.registeredProviders.join(', ')}`);\n  }\n  throw err;\n}","preventionTips":["Copy provider IDs from the error's 'Available:' list, never from memory","Ensure registerBuiltinProviders() runs at startup before any lookup","Grep configs for provider IDs after any provider rename"],"tags":["provider-registry","unknown-provider","configuration"],"backgroundTag":"unknown-provider-id","analyzedSha":"0773b9745896ef0612e709c80845a0f7db315b19","analyzedAt":"2026-09-01T02:28:07.064Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}