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 = InstallTypeGitHubRelease

View on GitHub (pinned to 78f0c4079e)

Solutions

  1. Retry the install — asset download failures are frequently transient
  2. Check GitHub API rate limits and add a token if installing frequently in CI
  3. Verify the asset still exists on the release page (it may have been deleted/replaced)
  4. 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

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


AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15). Data as JSON: /api/errors/18df2bb224b5aa89. Report an issue: GitHub.