diff --git a/cmd/chat_config_gateways_test.go b/cmd/chat_config_gateways_test.go index a8a03851..6da0014e 100644 --- a/cmd/chat_config_gateways_test.go +++ b/cmd/chat_config_gateways_test.go @@ -7,9 +7,9 @@ import ( "charm.land/bubbles/v2/textarea" "charm.land/bubbles/v2/textinput" tea "charm.land/bubbletea/v2" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" "github.com/GrayCodeAI/hawk/internal/engine" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func chatModelForConfigPasteTest() chatModel { diff --git a/cmd/chat_config_keys_test.go b/cmd/chat_config_keys_test.go index a0db2378..680ea8fb 100644 --- a/cmd/chat_config_keys_test.go +++ b/cmd/chat_config_keys_test.go @@ -5,8 +5,8 @@ import ( "testing" tea "charm.land/bubbletea/v2" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func TestConfigGatewaysView_KeyHintsWithCredentials(t *testing.T) { diff --git a/cmd/chat_config_remove_test.go b/cmd/chat_config_remove_test.go index 1118a0cf..14092944 100644 --- a/cmd/chat_config_remove_test.go +++ b/cmd/chat_config_remove_test.go @@ -4,8 +4,8 @@ import ( "strings" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func TestConfigGatewayRows_ShowsSavedKey(t *testing.T) { diff --git a/cmd/chat_config_tabs_test.go b/cmd/chat_config_tabs_test.go index 1aab5b58..743e7787 100644 --- a/cmd/chat_config_tabs_test.go +++ b/cmd/chat_config_tabs_test.go @@ -4,8 +4,8 @@ import ( "strings" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" "github.com/GrayCodeAI/hawk/internal/ui/icons" ) diff --git a/cmd/chat_config_xiaomi_test.go b/cmd/chat_config_xiaomi_test.go index efd5e36b..f8507213 100644 --- a/cmd/chat_config_xiaomi_test.go +++ b/cmd/chat_config_xiaomi_test.go @@ -4,8 +4,8 @@ import ( "strings" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func TestStartConfigXiaomiTokenPlanRegion_WithSavedRegion(t *testing.T) { diff --git a/cmd/chat_journey_e2e_test.go b/cmd/chat_journey_e2e_test.go index 4b27e9b0..08423cca 100644 --- a/cmd/chat_journey_e2e_test.go +++ b/cmd/chat_journey_e2e_test.go @@ -5,8 +5,8 @@ import ( "strings" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func requireChatModel(t *testing.T, model any) *chatModel { diff --git a/cmd/chat_model_test.go b/cmd/chat_model_test.go index fb6c4ad1..a9f32071 100644 --- a/cmd/chat_model_test.go +++ b/cmd/chat_model_test.go @@ -10,11 +10,11 @@ import ( "charm.land/bubbles/v2/textarea" "charm.land/bubbles/v2/viewport" lipgloss "charm.land/lipgloss/v2" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" "github.com/GrayCodeAI/hawk/internal/bridge/sessioncapture" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" "github.com/GrayCodeAI/hawk/internal/engine" "github.com/GrayCodeAI/hawk/internal/feature/shellmode" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" "github.com/GrayCodeAI/hawk/internal/session" "github.com/GrayCodeAI/hawk/internal/storage" "github.com/GrayCodeAI/hawk/internal/tool" diff --git a/cmd/chat_multiturn_e2e_test.go b/cmd/chat_multiturn_e2e_test.go index 062b2fbb..c1eb67a0 100644 --- a/cmd/chat_multiturn_e2e_test.go +++ b/cmd/chat_multiturn_e2e_test.go @@ -6,9 +6,9 @@ import ( "testing" tea "charm.land/bubbletea/v2" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" "github.com/GrayCodeAI/hawk/internal/engine" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func configureReadyChatState(t *testing.T) { diff --git a/cmd/chat_status_test.go b/cmd/chat_status_test.go index 7ac543a1..e0688ece 100644 --- a/cmd/chat_status_test.go +++ b/cmd/chat_status_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" "github.com/GrayCodeAI/hawk/internal/engine" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" "github.com/charmbracelet/x/ansi" ) diff --git a/cmd/diagnostics_test.go b/cmd/diagnostics_test.go index 9230b632..0845a830 100644 --- a/cmd/diagnostics_test.go +++ b/cmd/diagnostics_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" "github.com/GrayCodeAI/hawk/internal/resilience/health" ) diff --git a/cmd/options_welcome_test.go b/cmd/options_welcome_test.go index 9e4a6f47..b003a1d8 100644 --- a/cmd/options_welcome_test.go +++ b/cmd/options_welcome_test.go @@ -7,8 +7,8 @@ import ( "strings" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func isolateCredentialHome(t *testing.T) { diff --git a/cmd/path_test.go b/cmd/path_test.go index e4efb761..ae0d3dc8 100644 --- a/cmd/path_test.go +++ b/cmd/path_test.go @@ -5,8 +5,8 @@ import ( "strings" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func TestPathCmdRuns(t *testing.T) { diff --git a/cmd/session_sync_test.go b/cmd/session_sync_test.go index 7ff9d745..c78046d4 100644 --- a/cmd/session_sync_test.go +++ b/cmd/session_sync_test.go @@ -5,9 +5,9 @@ import ( "strings" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" "github.com/GrayCodeAI/hawk/internal/engine" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func TestSyncSessionFromPersistedSelection_FillsEmptySessionModel(t *testing.T) { diff --git a/cmd/version_display_test.go b/cmd/version_display_test.go index afbf640c..7047f4b3 100644 --- a/cmd/version_display_test.go +++ b/cmd/version_display_test.go @@ -5,8 +5,8 @@ import ( "path/filepath" "testing" - "github.com/GrayCodeAI/hawk/internal/provider/gateway" hawkconfig "github.com/GrayCodeAI/hawk/internal/config" + "github.com/GrayCodeAI/hawk/internal/provider/gateway" ) func TestDisplayVersion_FromVERSIONFile(t *testing.T) { diff --git a/external/eyrie b/external/eyrie index ee3cb6c0..71a03937 160000 --- a/external/eyrie +++ b/external/eyrie @@ -1 +1 @@ -Subproject commit ee3cb6c0390b1bd9c8b93f1cd3dc5a132d9c1285 +Subproject commit 71a03937cb0613964b5fef6eb0a74d0a614d21ce diff --git a/go.mod b/go.mod index a87ba80b..00175fd9 100644 --- a/go.mod +++ b/go.mod @@ -11,8 +11,8 @@ require ( charm.land/bubbles/v2 v2.1.0 charm.land/bubbletea/v2 v2.0.7 charm.land/lipgloss/v2 v2.0.3 - github.com/GrayCodeAI/eyrie v0.2.2-0.20260720045400-b2cab575ecc0 - github.com/GrayCodeAI/hawk-core-contracts v0.1.6 + github.com/GrayCodeAI/eyrie v0.2.2-0.20260721015934-71a03937cb06 + github.com/GrayCodeAI/hawk-core-contracts v0.1.7-0.20260720234904-ceb290ffdc7e github.com/GrayCodeAI/inspect v0.1.4 github.com/GrayCodeAI/sight v0.1.4 github.com/GrayCodeAI/tok v0.1.4 diff --git a/go.sum b/go.sum index f4a4b210..f77303c0 100644 --- a/go.sum +++ b/go.sum @@ -16,10 +16,12 @@ github.com/BobuSumisu/aho-corasick v1.0.3 h1:uuf+JHwU9CHP2Vx+wAy6jcksJThhJS9ehR8 github.com/BobuSumisu/aho-corasick v1.0.3/go.mod h1:hm4jLcvZKI2vRF2WDU1N4p/jpWtpOzp3nLmi9AzX/XE= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/GrayCodeAI/eyrie v0.2.2-0.20260720045400-b2cab575ecc0 h1:zKAtRFVKjSOOOyQ3dnKuxBivRq+wQ0JQ58QuwGoq3xI= -github.com/GrayCodeAI/eyrie v0.2.2-0.20260720045400-b2cab575ecc0/go.mod h1:8zw4jj5pvD9/tUqDhRaT4nnvl3Q8Zl2x4mJyEve7Obc= -github.com/GrayCodeAI/hawk-core-contracts v0.1.6 h1:jLbFQIFSaV9inpVvIkgI6lDAhIcFOn+wfLCvrKxqUmY= -github.com/GrayCodeAI/hawk-core-contracts v0.1.6/go.mod h1:BXbh68YrCf+s9HVqND5F8DAvl2MnE5NcOwZZZB56HGA= +github.com/GrayCodeAI/eyrie v0.2.2-0.20260720234854-ee3cb6c0390b h1:tZK+Sad/fmh7DioTO/uHMtUzg7x6dfe/i9lclZmZwjU= +github.com/GrayCodeAI/eyrie v0.2.2-0.20260720234854-ee3cb6c0390b/go.mod h1:xLOdncvu2kUbjlU9RlK9A3QClmxFrsEvNruuQwhW5BM= +github.com/GrayCodeAI/eyrie v0.2.2-0.20260721015934-71a03937cb06 h1:gxo+h45lf3VZjkZllh00TBh1W72b7O4Qg7xluQUhaTs= +github.com/GrayCodeAI/eyrie v0.2.2-0.20260721015934-71a03937cb06/go.mod h1:xLOdncvu2kUbjlU9RlK9A3QClmxFrsEvNruuQwhW5BM= +github.com/GrayCodeAI/hawk-core-contracts v0.1.7-0.20260720234904-ceb290ffdc7e h1:bRhh1OZOtzUPnFA7/Qa2+NxWuYGZPt5OSju/DbjIgAM= +github.com/GrayCodeAI/hawk-core-contracts v0.1.7-0.20260720234904-ceb290ffdc7e/go.mod h1:BXbh68YrCf+s9HVqND5F8DAvl2MnE5NcOwZZZB56HGA= github.com/GrayCodeAI/inspect v0.1.4 h1:tQAcD9UuHkrqA20CZqdTcBgWKU/lhxxHBh8hlXY3FVw= github.com/GrayCodeAI/inspect v0.1.4/go.mod h1:MfZT8sWGr6M0G9RJyLEwO+WzzYe4cw0k07kLYEcr1Lk= github.com/GrayCodeAI/sight v0.1.4 h1:wFfRdbwoI0RIRnaj2H1Ytsed5B2pGBu+1csFRvpuMzA= diff --git a/internal/engine/session.go b/internal/engine/session.go index a1875701..c937428f 100644 --- a/internal/engine/session.go +++ b/internal/engine/session.go @@ -367,6 +367,7 @@ func (s *Session) Model() string { defer s.mu.RUnlock() return s.model } + func (s *Session) Provider() string { s.mu.RLock() defer s.mu.RUnlock() diff --git a/internal/provider/gateway/engine_client.go b/internal/provider/gateway/engine_client.go index 917d3b24..c859a20a 100644 --- a/internal/provider/gateway/engine_client.go +++ b/internal/provider/gateway/engine_client.go @@ -122,147 +122,195 @@ func newEngineProvider(eng *eyrieengine.Engine) *engineProvider { func (p *engineProvider) Generate(ctx context.Context, req eyrieengine.GenerateRequest) (*eyrieengine.GenerateResponse, error) { return p.eng.Generate(ctx, req) } + func (p *engineProvider) Stream(ctx context.Context, req eyrieengine.GenerateRequest) (*eyrieengine.Stream, error) { return p.eng.Stream(ctx, req) } + func (p *engineProvider) ListModels(ctx context.Context, providerID string, refresh bool) ([]eyrieengine.Model, error) { return p.eng.ListModels(ctx, providerID, refresh) } + func (p *engineProvider) ListLiveModels(ctx context.Context, providerID string) ([]eyrieengine.Model, error) { return p.eng.ListLiveModels(ctx, providerID) } + func (p *engineProvider) ListPublicModels(ctx context.Context, providerID string) ([]eyrieengine.Model, error) { return p.eng.ListPublicModels(ctx, providerID) } + func (p *engineProvider) ModelInfo(ctx context.Context, modelID string) (eyrieengine.Model, bool, error) { return p.eng.ModelInfo(ctx, modelID) } + func (p *engineProvider) ModelProviders(ctx context.Context) ([]string, error) { return p.eng.ModelProviders(ctx) } + func (p *engineProvider) DefaultModel(ctx context.Context, provider, fallback string) string { return p.eng.DefaultModel(ctx, provider, fallback) } + func (p *engineProvider) PreferredModel(ctx context.Context, provider string, class eyrieengine.ModelClass, fallback string) string { return p.eng.PreferredModel(ctx, provider, class, fallback) } + func (p *engineProvider) PreferredModels(ctx context.Context, primaryProvider string, class eyrieengine.ModelClass, limit int) []string { return p.eng.PreferredModels(ctx, primaryProvider, class, limit) } + func (p *engineProvider) ModelClassOf(ctx context.Context, modelID string) eyrieengine.ModelClass { return p.eng.ModelClassOf(ctx, modelID) } + func (p *engineProvider) ProviderForModel(ctx context.Context, modelID string) string { return p.eng.ProviderForModel(ctx, modelID) } + func (p *engineProvider) PrimaryModel(ctx context.Context) string { return p.eng.PrimaryModel(ctx) } + func (p *engineProvider) ModelNames(ctx context.Context) []string { return p.eng.ModelNames(ctx) } + func (p *engineProvider) StatePaths() eyrieengine.StatePaths { return p.eng.StatePaths() } + func (p *engineProvider) DefaultProviderFilter(ctx context.Context) string { return p.eng.DefaultProviderFilter(ctx) } + func (p *engineProvider) Catalog(ctx context.Context) (eyrieengine.CatalogSnapshot, error) { return p.eng.Catalog(ctx) } + func (p *engineProvider) RefreshCatalog(ctx context.Context, providerID string) (eyrieengine.CatalogSnapshot, error) { return p.eng.RefreshCatalog(ctx, providerID) } + func (p *engineProvider) ApplyCredentials(ctx context.Context, providerID string) (eyrieengine.CatalogSnapshot, error) { return p.eng.ApplyCredentials(ctx, providerID) } + func (p *engineProvider) SaveCredential(ctx context.Context, providerID, secret string) (eyrieengine.CredentialStatus, error) { return p.eng.SaveCredential(ctx, providerID, secret) } + func (p *engineProvider) RemoveCredential(ctx context.Context, providerID string) error { return p.eng.RemoveCredential(ctx, providerID) } + func (p *engineProvider) CredentialStatus(ctx context.Context, providerID string) (eyrieengine.CredentialStatus, error) { return p.eng.CredentialStatus(ctx, providerID) } + func (p *engineProvider) SaveCredentialEnv(ctx context.Context, envVar, secret string) error { return p.eng.SaveCredentialEnv(ctx, envVar, secret) } + func (p *engineProvider) HasCredentialEnv(ctx context.Context, envVar string) bool { return p.eng.HasCredentialEnv(ctx, envVar) } + func (p *engineProvider) CredentialEnvKeys(providerID string) []string { return p.eng.CredentialEnvKeys(providerID) } + func (p *engineProvider) ResolveCredential(ctx context.Context, secret string) eyrieengine.CredentialResolution { return p.eng.ResolveCredential(ctx, secret) } + func (p *engineProvider) CredentialProviders(ctx context.Context) []eyrieengine.CredentialProvider { return p.eng.CredentialProviders(ctx) } + func (p *engineProvider) GatewayDefinitions() []eyrieengine.Gateway { return p.eng.GatewayDefinitions() } + func (p *engineProvider) Gateways(ctx context.Context) []eyrieengine.Gateway { return p.eng.Gateways(ctx) } + func (p *engineProvider) GatewayRegion(providerID string) (string, bool) { return p.eng.GatewayRegion(providerID) } + func (p *engineProvider) SetGatewayRegion(ctx context.Context, providerID, value string) error { return p.eng.SetGatewayRegion(ctx, providerID, value) } + func (p *engineProvider) GatewayForModel(ctx context.Context, modelID string) string { return p.eng.GatewayForModel(ctx, modelID) } + func (p *engineProvider) CanonicalModel(ctx context.Context, modelID string) string { return p.eng.CanonicalModel(ctx, modelID) } + func (p *engineProvider) DeploymentRoutingEnabled(override *bool) bool { return p.eng.DeploymentRoutingEnabled(override) } + func (p *engineProvider) DeploymentStatus(ctx context.Context, activeModel string) (string, error) { return p.eng.DeploymentStatus(ctx, activeModel) } + func (p *engineProvider) DeploymentSummary(ctx context.Context, activeModel string) (eyrieengine.DeploymentSummary, error) { return p.eng.DeploymentSummary(ctx, activeModel) } + func (p *engineProvider) RoutingPreview(ctx context.Context, modelID string) (string, error) { return p.eng.RoutingPreview(ctx, modelID) } + func (p *engineProvider) CatalogHealth(ctx context.Context) eyrieengine.CatalogHealth { return p.eng.CatalogHealth(ctx) } + func (p *engineProvider) PreflightWithOptions(ctx context.Context, opts eyrieengine.PreflightOptions) eyrieengine.PreflightReport { return p.eng.PreflightWithOptions(ctx, opts) } + func (p *engineProvider) ActiveSelection(ctx context.Context) eyrieengine.Route { return p.eng.ActiveSelection(ctx) } + func (p *engineProvider) EffectiveSelection(ctx context.Context, opts eyrieengine.SelectionOptions) eyrieengine.Selection { return p.eng.EffectiveSelection(ctx, opts) } + func (p *engineProvider) SetActiveProvider(ctx context.Context, provider string) error { return p.eng.SetActiveProvider(ctx, provider) } + func (p *engineProvider) SetActiveModel(ctx context.Context, modelID string) error { return p.eng.SetActiveModel(ctx, modelID) } + func (p *engineProvider) SetSelection(ctx context.Context, provider, modelID string) error { return p.eng.SetSelection(ctx, provider, modelID) } + func (p *engineProvider) ClearSelection(ctx context.Context) error { return p.eng.ClearSelection(ctx) } + func (p *engineProvider) ProviderStateSecurityStatus() eyrieengine.ProviderStateSecurity { return p.eng.ProviderStateSecurityStatus() } + func (p *engineProvider) MigrateProviderSecrets() error { return p.eng.MigrateProviderSecrets() } + func (p *engineProvider) SupportsNativeCompaction(ctx context.Context, provider, model string) bool { return p.eng.SupportsNativeCompaction(ctx, provider, model) } + func (p *engineProvider) CompactNative(ctx context.Context, req eyrieengine.NativeCompactionRequest) (string, error) { return p.eng.CompactNative(ctx, req) } diff --git a/internal/provider/gateway/gateway.go b/internal/provider/gateway/gateway.go index a7f7a51e..ff442c67 100644 --- a/internal/provider/gateway/gateway.go +++ b/internal/provider/gateway/gateway.go @@ -10,7 +10,6 @@ import ( "context" "sync" - "github.com/GrayCodeAI/eyrie/credentials" eyrieengine "github.com/GrayCodeAI/eyrie/engine" "github.com/GrayCodeAI/hawk-core-contracts/llm" ) @@ -43,7 +42,7 @@ type Gateway struct { // identity is always declared before any credential read, no matter which New // path runs first. var declareHawkIdentity = sync.OnceFunc(func() { - credentials.SetServiceName("hawk") + eyrieengine.SetSecretStoreServiceName("hawk") }) // New composes the Eyrie engine for one effective settings snapshot and wraps it @@ -390,24 +389,20 @@ func ParseInlineToolCalls(content string) (string, []eyrieengine.ToolCall) { } // --- Test fixtures ----------------------------------------------------- -// Re-exported so hawk tests inject credential fixtures through the single -// gateway boundary instead of importing eyrie/credentials directly. These are -// thin aliases only; gateway still owns the eyrie relationship. -// -// Keep this block last and the symbols minimal — it exists purely to keep test -// code behind the boundary. +// Re-exported from engine so hawk tests inject credential fixtures through the +// single gateway+engine boundary. These are thin aliases only. // SetDefaultStore replaces the process-wide credential store (for tests). -var SetDefaultStore = credentials.SetDefaultStore +var SetDefaultStore = eyrieengine.SetDefaultStore // DefaultStore returns the process-wide credential store (for tests). -var DefaultStore = credentials.DefaultStore +var DefaultStore = eyrieengine.DefaultStore // MapStore is the in-memory credential store for tests (alias). -type MapStore = credentials.MapStore +type MapStore = eyrieengine.MapStore // AccountForEnv returns the keychain account name for an env var. -func AccountForEnv(envVar string) string { return credentials.AccountForEnv(envVar) } +func AccountForEnv(envVar string) string { return eyrieengine.AccountForEnv(envVar) } // HasSecret reports whether a secret exists for an env var (for tests). -func HasSecret(ctx context.Context, envKey string) bool { return credentials.HasSecret(ctx, envKey) } +func HasSecret(ctx context.Context, envKey string) bool { return eyrieengine.HasSecret(ctx, envKey) } diff --git a/internal/provider/gateway/provider_stub_test.go b/internal/provider/gateway/provider_stub_test.go index 0df0df82..82468f0a 100644 --- a/internal/provider/gateway/provider_stub_test.go +++ b/internal/provider/gateway/provider_stub_test.go @@ -19,21 +19,27 @@ type stubProvider struct { func (s *stubProvider) Resolve(context.Context, eyrieengine.SelectionRequest) (eyrieengine.Route, error) { return eyrieengine.Route{}, nil } + func (s *stubProvider) Generate(context.Context, eyrieengine.GenerateRequest) (*eyrieengine.GenerateResponse, error) { return s.resp, s.err } + func (s *stubProvider) Stream(context.Context, eyrieengine.GenerateRequest) (*eyrieengine.Stream, error) { return nil, nil } + func (s *stubProvider) ListModels(context.Context, string, bool) ([]eyrieengine.Model, error) { return nil, nil } + func (s *stubProvider) ListLiveModels(context.Context, string) ([]eyrieengine.Model, error) { return nil, nil } + func (s *stubProvider) ListPublicModels(context.Context, string) ([]eyrieengine.Model, error) { return nil, nil } + func (s *stubProvider) ModelInfo(context.Context, string) (eyrieengine.Model, bool, error) { return eyrieengine.Model{}, false, nil } @@ -42,9 +48,11 @@ func (s *stubProvider) DefaultModel(context.Context, string, string) string { re func (s *stubProvider) PreferredModel(context.Context, string, eyrieengine.ModelClass, string) string { return "" } + func (s *stubProvider) PreferredModels(context.Context, string, eyrieengine.ModelClass, int) []string { return nil } + func (s *stubProvider) ModelClassOf(context.Context, string) eyrieengine.ModelClass { return ModelClassEconomical } @@ -56,12 +64,15 @@ func (s *stubProvider) DefaultProviderFilter(context.Context) string { return func (s *stubProvider) Catalog(context.Context) (eyrieengine.CatalogSnapshot, error) { return eyrieengine.CatalogSnapshot{}, nil } + func (s *stubProvider) RefreshCatalog(context.Context, string) (eyrieengine.CatalogSnapshot, error) { return eyrieengine.CatalogSnapshot{}, nil } + func (s *stubProvider) ApplyCredentials(context.Context, string) (eyrieengine.CatalogSnapshot, error) { return eyrieengine.CatalogSnapshot{}, nil } + func (s *stubProvider) SaveCredential(context.Context, string, string) (eyrieengine.CredentialStatus, error) { return eyrieengine.CredentialStatus{}, nil } @@ -75,6 +86,7 @@ func (s *stubProvider) CredentialEnvKeys(string) []string func (s *stubProvider) ResolveCredential(context.Context, string) eyrieengine.CredentialResolution { return eyrieengine.CredentialResolution{} } + func (s *stubProvider) CredentialProviders(context.Context) []eyrieengine.CredentialProvider { return nil } @@ -89,6 +101,7 @@ func (s *stubProvider) DeploymentRoutingEnabled(*bool) bool { func (s *stubProvider) DeploymentStatus(context.Context, string) (string, error) { return "", nil } + func (s *stubProvider) DeploymentSummary(context.Context, string) (eyrieengine.DeploymentSummary, error) { return eyrieengine.DeploymentSummary{}, nil } @@ -96,13 +109,17 @@ func (s *stubProvider) RoutingPreview(context.Context, string) (string, error) { func (s *stubProvider) CatalogHealth(context.Context) eyrieengine.CatalogHealth { return eyrieengine.CatalogHealth{} } + func (s *stubProvider) Preflight(context.Context) eyrieengine.PreflightReport { return eyrieengine.PreflightReport{} } + func (s *stubProvider) PreflightWithOptions(context.Context, eyrieengine.PreflightOptions) eyrieengine.PreflightReport { return eyrieengine.PreflightReport{} } + func (s *stubProvider) ActiveSelection(context.Context) eyrieengine.Route { return eyrieengine.Route{} } + func (s *stubProvider) EffectiveSelection(context.Context, eyrieengine.SelectionOptions) eyrieengine.Selection { return eyrieengine.Selection{} } @@ -116,6 +133,7 @@ func (s *stubProvider) ProviderStateSecurityStatus() eyrieengine.ProviderStateSe func (s *stubProvider) MigrateProviderSecrets() error { return nil } func (s *stubProvider) MigrateProviderSecretsContext(context.Context) error { return nil } func (s *stubProvider) SupportsNativeCompaction(context.Context, string, string) bool { return false } + func (s *stubProvider) CompactNative(context.Context, eyrieengine.NativeCompactionRequest) (string, error) { return "", nil }