charmbracelet/crush · error

Crush was unable to fetch updated information from Hyper: %w

Error message

Crush was unable to fetch updated information from Hyper: %w

What it means

Thrown when the Hyper provider catalog syncer fails to refresh Hyper's endpoint and model list. Unlike catwalk, Hyper's endpoint and models live only in the catalog, so a failed refresh would sign a logged-in user out of Hyper; the error preserves the underlying cause instead of silently dropping the provider.

Source

Thrown at internal/config/provider.go:230

			var refresher func(context.Context) error
			if len(opts) > 0 {
				refresher = opts[0]
			}
			hyperSyncer.Init(realHyperClient{
				baseURL:      hyper.BaseURL(),
				resolveKey:   func() string { return resolveHyperAPIKey(cfgSnapshot) },
				refreshToken: refresher,
			}, path, autoupdate)

			// As above: keep whatever provider we were handed. The syncer
			// already falls back to the cached or embedded copy, so an
			// error here means "could not refresh", not "no Hyper". This
			// matters more than for other providers because Hyper's
			// endpoint and model list live in the catalog rather than in
			// the user's config: dropping it signs a logged-in user out.
			item, err := hyperSyncer.Get(ctx)
			if err != nil {
				hyperErr = fmt.Errorf("Crush was unable to fetch updated information from Hyper: %w", err) //nolint:staticcheck
			}
			hyperProvider = item
		})

		wg.Wait()

		if hyperProvider.ID != "" {
			providerList = append([]catwalk.Provider{hyperProvider}, slices.Collect(providers.Seq())...)
		} else {
			providerList = slices.Collect(providers.Seq())
		}
		providerErr = errors.Join(catwalkErr, hyperErr)
	})
	return providerList, providerErr
}

// UpdateProviderInList replaces a provider in the memoized provider list
// returned by Providers(). This is used after re-fetching a single

View on GitHub (pinned to 7944b8e522)

Solutions

  1. Check connectivity to Hyper's endpoint and retry.
  2. Fix proxy/firewall/DNS settings blocking the Hyper catalog host.
  3. Re-run `crush` once the network is available so the refresh succeeds.
  4. If persistent, check Hyper's service status or re-login via `crush login`.
Defensive patterns

Strategy: fallback

Validate before calling

// probe Hyper's catalog endpoint before starting
resp, err := http.Get(hyperCatalogURL)
if err != nil || resp.StatusCode != 200 { /* warn user */ }

Try / catch

item, err := hyperSyncer.Get(ctx)
if err != nil {
    log.Warn(err) // keep previous hyperProvider to avoid logout
}

Prevention

When it happens

Trigger: hyperSyncer.Get(ctx) returns an error during Init/provider refresh: network failure, Hyper catalog endpoint unreachable, invalid response, or authentication failure while fetching the catalog.

Common situations: User is logged into Hyper and the machine goes offline or behind a blocking proxy; Hyper's catalog service is temporarily down; DNS/TLS problems.

Related errors


AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29). Data as JSON: /api/errors/95934aae0fe94fb2. Report an issue: GitHub.