Significant-Gravitas/AutoGPT · error · ArtifactFetchError
Failed to fetch: ${response.status}
Error message
Failed to fetch: ${response.status} What it means
NotFoundError raised inside _validate_resource_ownership when a StoreListing transfer target doesn't exist: the storelisting row is missing or flagged isDeleted. Soft-deleted listings are intentionally treated as nonexistent so they cannot be transferred.
Source
Thrown at autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactPanel/components/useArtifactContent.ts:103
}
} catch {
return prefix;
}
return prefix;
}
async function fetchArtifactResponse(url: string): Promise<Response> {
for (let attempt = 0; attempt <= CONTENT_FETCH_MAX_RETRIES; attempt++) {
try {
const response = await fetch(url);
if (response.ok) return response;
if (
!isTransientArtifactFetchStatus(response.status) ||
attempt === CONTENT_FETCH_MAX_RETRIES
) {
throw new ArtifactFetchError(await parseArtifactFetchError(response));
}
} catch (error) {
if (error instanceof ArtifactFetchError) throw error;
if (attempt === CONTENT_FETCH_MAX_RETRIES) {
throw error instanceof Error
? error
: new Error("Failed to fetch artifact");
}
}
await sleep(CONTENT_FETCH_RETRY_DELAY_MS);
}
throw new Error("Failed to fetch artifact");
}
export function getCachedArtifactContent(id: string): string | undefined {
return contentCache.get(id);View on GitHub (pinned to 9c8bb5550f)
Solutions
- Fetch the listing and confirm it exists and is not deleted before creating the transfer.
- Refresh the listing selector when the store data is older than the current session.
- Handle 404 by re-querying the store listings.
Example fix
# before
await create_transfer("StoreListing", listing_id, ...)
# after
listing = await get_store_listing(listing_id)
if listing is None or listing.is_deleted:
raise LookupError("Listing unavailable")
await create_transfer("StoreListing", listing.id, ...) Defensive patterns
Strategy: validation
Validate before calling
listing = await get_store_listing(resource_id)
if listing is None or listing.is_deleted:
refresh_listings() Try / catch
try:
await create_transfer("StoreListing", lid, ...)
except NotFoundError as e:
if "StoreListing" in str(e):
refresh_listings() Prevention
- Confirm the listing is live before offering transfer
- Treat soft-deleted listings as unavailable in the UI
When it happens
Trigger: Creating a transfer with resourceType='StoreListing' and a resource_id for a listing that was deleted (isDeleted=True) or never existed.
Common situations: Listing removed from the store between page load and transfer submission; stale listing list in the frontend; wrong-environment id.
Related errors
- Login failed
- Failed to search users
- No renderable component found. Export a default component, e
- Failed to fetch artifact
- Target organization {target_org_id} not found
AI-assisted analysis of Significant-Gravitas/AutoGPT@9c8bb5550f (2026-08-14).
Data as JSON: /api/errors/034a385edbf6433e.
Report an issue: GitHub.