can1357/oh-my-pi · error · DestinationUnavailableError
the destination is classified as ${metadata.status}
Error message
the destination is classified as ${metadata.status} What it means
createConfiguredUploader looks up BUILTIN_BLOB_DESTINATIONS metadata for the requested destination and refuses to build an uploader when the destination is marked "incompatible" or "defunct". The thrown DestinationUnavailableError carries the cataloged reason, or this default message when the catalog has none. It means the destination is intentionally unsupported, not misconfigured.
Source
Thrown at packages/coding-agent/src/blob-broker/uploaders.ts:136
};
}
/**
* Resolve one registry destination to its built-in uploader.
*
* Serving destinations deliberately return `null`; the broker selects those
* through its separate serve-kind predicate. Registry entries known to be
* unusable, and active entries without an implementation, fail explicitly
* before an upload can issue a network request.
*/
export function createConfiguredUploader(
destination: BlobDestinationId,
config: DestinationRuntimeConfig,
): BlobUploader | null {
const metadata: BlobDestinationMetadata = BUILTIN_BLOB_DESTINATIONS[destination];
if (metadata.status === "incompatible" || metadata.status === "defunct") {
const reason = metadata.reason ?? `the destination is classified as ${metadata.status}`;
throw new DestinationUnavailableError(destination, reason);
}
if (destination === "command") {
const command = optionString(config, "command");
if (!command) {
throw new DestinationUnavailableError(destination, "an upload command containing {file} is required");
}
return createCommandUploader(command);
}
const uploader =
createAnonymousUploader(destination, config) ??
createImageHostUploader(destination, config) ??
createCloudDriveUploader(destination, config) ??
createObjectStorageUploader(destination, config) ??
createSelfHostedUploader(destination, config) ??
createLegacyUploader(destination, config) ??
createDiscordUploader(destination, config);View on GitHub (pinned to 9690622007)
Solutions
- Switch config to a supported destination (e.g. another self-hosted uploader or the command destination)
- Check the destination's metadata.reason in BUILTIN_BLOB_DESTINATIONS for the official explanation
- Update or replace the discontinued server integration if a replacement exists
- Pin to a version where the destination was still supported only as a temporary measure
Example fix
// before
"images": { "urls": { "destination": "defunct-service" } }
// after
"images": { "urls": { "destination": "command", "command": "curl -sF 'file=@{file}' https://0x0.st" } } Defensive patterns
Strategy: validation
Validate before calling
import { BUILTIN_BLOB_DESTINATIONS } from "...";
const meta = BUILTIN_BLOB_DESTINATIONS[destination];
if (meta.status === "incompatible" || meta.status === "defunct") {
// choose another destination before configuring
} Type guard
function isUsableDestination(id: string): boolean {
const meta = BUILTIN_BLOB_DESTINATIONS[id as keyof typeof BUILTIN_BLOB_DESTINATIONS];
return meta !== undefined && meta.status !== "incompatible" && meta.status !== "defunct";
} Try / catch
try {
const uploader = createConfiguredUploader(destination, config);
} catch (err) {
if (err instanceof DestinationUnavailableError && /classified as (incompatible|defunct)/.test(err.message)) {
// fall back to a supported destination per metadata.reason
}
throw err;
} Prevention
- Check the destination's status/reason in BUILTIN_BLOB_DESTINATIONS before configuring
- After CLI upgrades, re-validate that configured destinations are still supported
- Prefer stable destinations (command, active self-hosted) over retired services
- Keep a fallback destination configured for image URL sharing
When it happens
Trigger: Selecting a destination id (in config or via the uploader() helper) whose catalog entry has status "incompatible" or "defunct" — e.g. a service that shut down or a protocol version the broker dropped. Passing such an id to createConfiguredUploader at any time raises it.
Common situations: Upgrading the CLI to a version that marked a previously working self-hosted destination defunct; copying a config from an old setup referencing a retired service; typos are NOT the cause here (typo yields a different lookup error).
Related errors
- Missing required destination option: ${key}
- an upload command containing {file} is required
- provider-native files must use the provider file channel
- No model configured
- Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/1629bc12f6d6d310.
Report an issue: GitHub.