router-for-me/CLIProxyAPI · error
download %s: %w
Error message
download %s: %w
What it means
During installRelease, downloading the platform archive asset (DownloadAsset on the archive ReleaseAsset) failed; the error names the asset filename and wraps the underlying cause (network failure, HTTP status, size cap). This is the archive half of the two-download install flow (archive + checksums.txt).
Source
Thrown at internal/pluginstore/install.go:123
releaseVersion, errVersion := ReleaseVersion(release)
if errVersion != nil {
return InstallResult{}, errVersion
}
if releaseVersion != version {
return InstallResult{}, fmt.Errorf("release tag %q resolved version %q, want %q", releaseTag, releaseVersion, version)
}
plugin.Version = version
return c.installRelease(ctx, plugin, release, version, options)
}
func (c Client) installRelease(ctx context.Context, plugin Plugin, release Release, version string, options InstallOptions) (InstallResult, error) {
archiveAsset, checksumAsset, errAssets := SelectReleaseAssets(release, plugin.ID, plugin.Version, options.GOOS, options.GOARCH)
if errAssets != nil {
return InstallResult{}, errAssets
}
archiveData, errArchive := c.DownloadAsset(ctx, archiveAsset)
if errArchive != nil {
return InstallResult{}, fmt.Errorf("download %s: %w", archiveAsset.Name, errArchive)
}
checksumData, errChecksum := c.DownloadAsset(ctx, checksumAsset)
if errChecksum != nil {
return InstallResult{}, fmt.Errorf("download checksums.txt: %w", errChecksum)
}
checksums, errParse := ParseChecksums(checksumData)
if errParse != nil {
return InstallResult{}, errParse
}
if errVerify := VerifyChecksum(archiveAsset.Name, archiveData, checksums); errVerify != nil {
return InstallResult{}, errVerify
}
plugin.Version = version
result, errInstall := InstallArchive(archiveData, plugin, options)
if errInstall != nil {
return InstallResult{}, errInstall
}
result.InstallType = InstallTypeGitHubReleaseView on GitHub (pinned to 78f0c4079e)
Solutions
- Retry the install — asset download failures are frequently transient
- Check GitHub API rate limits and add a token if installing frequently in CI
- Verify the asset still exists on the release page (it may have been deleted/replaced)
- Fix the underlying network condition named by the wrapped error
Defensive patterns
Strategy: retry
Validate before calling
if archiveAsset.Size > 0 && archiveAsset.Size > yourBudget {
return fmt.Errorf("archive %s too large (%d bytes)", archiveAsset.Name, archiveAsset.Size)
} Try / catch
if err != nil && strings.Contains(err.Error(), "download ") {
// classify wrapped cause: network -> retry with backoff; 404/rate-limit -> fix auth or asset
} Prevention
- Retry asset downloads with exponential backoff
- Authenticate GitHub requests in CI to avoid rate limits
- Check asset existence/size from the release listing before downloading
When it happens
Trigger: InstallVersion/InstallFromManifest when the archive asset download errors: network drop, 404 after the release listing (asset deleted), rate limit, or response exceeding the size cap.
Common situations: GitHub rate limiting unauthenticated CI installs; asset removed after listing was cached; flaky network during a large download.
Related errors
- download checksums.txt: %w
- download artifact: %w
- response exceeds maximum allowed size of %d bytes
- request %s failed: %w
- release asset %s not found
AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15).
Data as JSON: /api/errors/18df2bb224b5aa89.
Report an issue: GitHub.