Hmbown/CodeWhale · error
` ` is not a provider this Codewhale account can connect…
Error message
`{provider}` is not a provider this Codewhale account can connect. Known providers: {known} What it means
The CLI looks up the provider name supplied on the command line in the provider catalog fetched from the Codewhale account. If the name is not present in the catalog, it throws this error listing every known provider id so the developer can correct the name.
Solutions
- Run the list command (or read the error's `Known providers:` suffix) and use an exact provider id.
- Check provider spelling and casing.
- Refresh the account catalog (`codewhale account providers list` or re-login) if a newly added provider is missing.
Example fix
// before codewhale account providers connect openai-chat // after codewhale account providers connect openai
Defensive patterns
Strategy: validation
Validate before calling
let known: Vec<&str> = catalog.iter().map(|r| r.id.as_str()).collect();
if !known.contains(&provider) {
eprintln!("unknown provider; known: {}", known.join(", "));
} Prevention
- Fetch and cache the provider catalog, then select from it rather than typing ids.
- Match ids exactly (case-sensitive).
- Re-list providers after account or product changes.
When it happens
Trigger: Calling a cloud provider-connect command (e.g. `codewhale account providers connect <provider>`) with a provider string that does not exactly match any `row.id` in the account's provider catalog.
Common situations: Typo or wrong casing in the provider id; using a provider the account is not provisioned for; an outdated catalog cache after new providers were added.
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
- ` ` is not a valid provider id. Ids are 1-64 characters of…
- unknown provider ' '. Known
- A positive pull request number is required
- A provider and page loader are required.
- Antigravity is a retired, non-runnable legacy provider…
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/c86565843a4f4ce7.
Report an issue: GitHub.
Appendix: source
Thrown at crates/cli/src/cloud.rs:1172
fn is_ascii_control(character: char) -> bool {
character <= '\u{001f}' || character == '\u{007f}'
}
/// Find one catalog row by id, or fail naming what the account does offer.
///
/// A catalog miss is the common typo, so the message lists the ids rather than
/// leaving the user to guess or read a 404.
fn catalog_row<'a>(catalog: &'a [CatalogProvider], provider: &str) -> Result<&'a CatalogProvider> {
catalog
.iter()
.find(|row| row.id == provider)
.ok_or_else(|| {
let known = catalog
.iter()
.map(|row| row.id.as_str())
.collect::<Vec<_>>()
.join(", ");
anyhow!("`{provider}` is not a provider this Codewhale account can connect. Known providers: {known}")
})
}
fn resolve_local_key(
config: &ConfigStore,
secrets: &Secrets,
kind: ProviderKind,
) -> Result<Option<String>> {
let provider_config = config.config.providers.for_provider(kind);
let from_config = provider_config.api_key.clone().or_else(|| {
(kind == ProviderKind::Deepseek)
.then(|| config.config.api_key.clone())
.flatten()
});
if let Some(value) = from_config
.and_then(resolve_config_key_reference)
.filter(|value| !value.trim().is_empty())
{View on GitHub (pinned to 73e0f67d83)