@@ -1505,3 +1505,87 @@ func TestConfig_configureSelectedModels(t *testing.T) {
1505 require.Equal(t, int64(100), large.MaxTokens)
1505 require.Equal(t, int64(100), large.MaxTokens)
1509+func TestConfig_configureProviders_HyperAPIKeyFromEnv(t *testing.T) {
1510+ // Test that HYPER_API_KEY environment variable works without config
1511+ knownProviders := []catwalk.Provider{
1514+ APIKey: "", // No API key in provider definition
1515+ DefaultLargeModelID: "large-model",
1516+ DefaultSmallModelID: "small-model",
1517+ Models: []catwalk.Model{
1520+ DefaultMaxTokens: 1000,
1524+ DefaultMaxTokens: 500,
1531+ cfg.setDefaults("/tmp", "")
1532+ env := env.NewFromMap(map[string]string{
1533+ "HYPER_API_KEY": "env-api-key",
1535+ resolver := NewEnvironmentVariableResolver(env)
1536+ err := cfg.configureProviders(testStore(cfg), env, resolver, knownProviders)
1537+ require.NoError(t, err)
1538+ require.Equal(t, 1, cfg.Providers.Len())
1540+ // Verify Hyper provider is configured with the env var API key
1541+ pc, ok := cfg.Providers.Get("hyper")
1542+ require.True(t, ok, "Hyper provider should be configured")
1543+ require.Equal(t, "env-api-key", pc.APIKey)
1544+ require.Equal(t, "env-api-key", pc.APIKeyTemplate)
1547+func TestConfig_configureProviders_HyperAPIKeyFromConfigOverrides(t *testing.T) {
1548+ // Test that config API key takes precedence when HYPER_API_KEY is also set
1549+ knownProviders := []catwalk.Provider{
1552+ APIKey: "provider-api-key",
1553+ DefaultLargeModelID: "large-model",
1554+ DefaultSmallModelID: "small-model",
1555+ Models: []catwalk.Model{
1558+ DefaultMaxTokens: 1000,
1562+ DefaultMaxTokens: 500,
1568+ // User has Hyper configured with an API key
1570+ Providers: csync.NewMapFrom(map[string]ProviderConfig{
1572+ APIKey: "config-api-key",
1576+ cfg.setDefaults("/tmp", "")
1578+ // But they also have HYPER_API_KEY set - env var should take precedence
1579+ env := env.NewFromMap(map[string]string{
1580+ "HYPER_API_KEY": "env-api-key",
1582+ resolver := NewEnvironmentVariableResolver(env)
1583+ err := cfg.configureProviders(testStore(cfg), env, resolver, knownProviders)
1584+ require.NoError(t, err)
1585+ require.Equal(t, 1, cfg.Providers.Len())
1587+ // Verify env var takes precedence (as per requirements)
1588+ pc, ok := cfg.Providers.Get("hyper")
1589+ require.True(t, ok, "Hyper provider should be configured")
1590+ require.Equal(t, "env-api-key", pc.APIKey)