From e5de74c11de794b21e127bea64b5d61993226727 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Fri, 7 Aug 2026 00:05:20 +0200 Subject: [PATCH 01/10] feat(ext): support authenticated principals and config --- config/config.example.yaml | 7 ++ config/config.go | 29 ++++++++ config/config_test.go | 55 ++++++++++++++ ext/auth.go | 49 +++++++++++++ ext/registry.go | 35 +++++++-- ext/registry_test.go | 20 +++++ internal/app/app.go | 1 + internal/app/app_test.go | 14 +++- internal/auditlog/auditlog.go | 22 +++--- internal/auditlog/enrich.go | 17 ++++- internal/auditlog/middleware.go | 4 + internal/auditlog/middleware_test.go | 12 +++ internal/auditlog/reader_mongodb.go | 2 + internal/auditlog/reader_sql.go | 6 +- internal/auditlog/store_mongodb.go | 3 + internal/auditlog/store_sql.go | 12 ++- internal/auditlog/store_sql_test.go | 14 ++-- internal/auditlog/stream_wrapper.go | 19 ++--- internal/server/auth.go | 105 +++++++++++++++++++++------ internal/server/auth_test.go | 68 +++++++++++++++++ internal/server/http.go | 5 +- run/run.go | 14 ++++ run/run_test.go | 35 +++++++++ 23 files changed, 485 insertions(+), 63 deletions(-) create mode 100644 ext/auth.go diff --git a/config/config.example.yaml b/config/config.example.yaml index 9805425a2..b3820cf94 100644 --- a/config/config.example.yaml +++ b/config/config.example.yaml @@ -536,3 +536,10 @@ providers: # input_per_mtok: 0 # output_per_mtok: 0 # - Gemma4-31B + +# Custom distributions may define strictly validated configuration in named +# extension sections. Core preserves these values without depending on the +# extension's schema; the owning extension decodes and validates its section. +# extensions: +# example: +# enabled: true diff --git a/config/config.go b/config/config.go index 865ebc9a1..5738c8477 100644 --- a/config/config.go +++ b/config/config.go @@ -39,6 +39,11 @@ type Config struct { Session SessionConfig `yaml:"session"` MCP MCPConfig `yaml:"mcp"` + // Extensions holds configuration owned by custom distributions. Core keeps + // the values opaque; an extension decodes its named section with + // LoadResult.DecodeExtension. + Extensions map[string]yaml.Node `yaml:"extensions,omitempty"` + // VirtualModels declares redirects, load balancers, and access policies as // infrastructure-as-code. They override admin-store rows of the same source. VirtualModels []VirtualModelConfig `yaml:"virtual_models"` @@ -52,6 +57,30 @@ type LoadResult struct { RawProviders map[string]RawProviderConfig } +// DecodeExtension strictly decodes one named extensions: section into target. +// It returns false when the section is absent. Core deliberately does not know +// any extension's schema, while each extension still gets unknown-key safety. +func (r *LoadResult) DecodeExtension(name string, target any) (bool, error) { + if r == nil || r.Config == nil || target == nil { + return false, nil + } + name = strings.TrimSpace(name) + node, ok := r.Config.Extensions[name] + if !ok { + return false, nil + } + data, err := yaml.Marshal(&node) + if err != nil { + return false, fmt.Errorf("encode extensions.%s: %w", name, err) + } + decoder := yaml.NewDecoder(strings.NewReader(string(data))) + decoder.KnownFields(true) + if err := decoder.Decode(target); err != nil { + return false, fmt.Errorf("decode extensions.%s: %w", name, err) + } + return true, nil +} + // buildDefaultConfig returns the single source of truth for all configuration defaults. func buildDefaultConfig() *Config { return &Config{ diff --git a/config/config_test.go b/config/config_test.go index b062d55dc..747574e04 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -256,6 +256,61 @@ func TestBuildDefaultConfig(t *testing.T) { } } +func TestDecodeExtensionStrictlyDecodesOpaqueConfig(t *testing.T) { + var node yaml.Node + if err := yaml.Unmarshal([]byte("enabled: true\npkce_enabled: false\n"), &node); err != nil { + t.Fatal(err) + } + type ssoConfig struct { + Enabled bool `yaml:"enabled"` + PKCEEnabled bool `yaml:"pkce_enabled"` + } + result := &LoadResult{Config: &Config{Extensions: map[string]yaml.Node{"sso": node}}} + var got ssoConfig + found, err := result.DecodeExtension("sso", &got) + if err != nil { + t.Fatal(err) + } + if !found || !got.Enabled || got.PKCEEnabled { + t.Fatalf("found=%v config=%+v", found, got) + } + + var unknown yaml.Node + if err := yaml.Unmarshal([]byte("unknown: true\n"), &unknown); err != nil { + t.Fatal(err) + } + result.Config.Extensions["sso"] = unknown + if _, err := result.DecodeExtension("sso", &got); err == nil { + t.Fatal("expected extension-owned unknown key to be rejected") + } +} + +func TestLoadPreservesOpaqueExtensionConfiguration(t *testing.T) { + clearAllConfigEnvVars(t) + withTempDir(t, func(dir string) { + contents := []byte("extensions:\n sso:\n enabled: true\n provider_specific_option: value\n") + if err := os.WriteFile(filepath.Join(dir, "config.yaml"), contents, 0o644); err != nil { + t.Fatal(err) + } + + result, err := Load() + if err != nil { + t.Fatalf("Load() rejected extension-owned keys: %v", err) + } + var decoded struct { + Enabled bool `yaml:"enabled"` + ProviderSpecificOption string `yaml:"provider_specific_option"` + } + found, err := result.DecodeExtension("sso", &decoded) + if err != nil { + t.Fatal(err) + } + if !found || !decoded.Enabled || decoded.ProviderSpecificOption != "value" { + t.Fatalf("found=%v config=%+v", found, decoded) + } + }) +} + func TestLoadBudgetEnvUserPath(t *testing.T) { clearAllConfigEnvVars(t) diff --git a/ext/auth.go b/ext/auth.go new file mode 100644 index 000000000..66ef5c77b --- /dev/null +++ b/ext/auth.go @@ -0,0 +1,49 @@ +package ext + +import ( + "context" + "net/http" + "slices" +) + +type authenticationContextKey struct{} + +// Authentication describes an identity established by an extension. +// PrincipalID must be a stable, non-secret identifier within the +// authenticator's namespace. UserPath is the existing GoModel authorization +// and accounting subject; it is deliberately separate because a login identity +// and a policy hierarchy are not the same thing. +type Authentication struct { + PrincipalID string + UserPath string + Labels []string + DashboardAccess bool + Method string +} + +// RequestAuthenticator authenticates requests using a mechanism other than +// the core bearer-token authenticators (for example an OIDC browser session). +// A nil result with a nil error means the mechanism does not apply to the +// request. Implementations must be safe for concurrent use. +type RequestAuthenticator interface { + Name() string + AuthenticateRequest(ctx context.Context, request *http.Request) (*Authentication, error) +} + +// WithAuthentication attaches an extension-established identity to a request +// context. Core calls this after accepting an authenticator result. +func WithAuthentication(ctx context.Context, authentication Authentication) context.Context { + authentication.Labels = slices.Clone(authentication.Labels) + return context.WithValue(ctx, authenticationContextKey{}, authentication) +} + +// AuthenticationFromContext returns the extension-established identity, if +// the request was authenticated by an extension. +func AuthenticationFromContext(ctx context.Context) (Authentication, bool) { + if ctx == nil { + return Authentication{}, false + } + authentication, ok := ctx.Value(authenticationContextKey{}).(Authentication) + authentication.Labels = slices.Clone(authentication.Labels) + return authentication, ok +} diff --git a/ext/registry.go b/ext/registry.go index ec91f8a13..67af0b7dc 100644 --- a/ext/registry.go +++ b/ext/registry.go @@ -11,13 +11,22 @@ import ( // Register everything before the server is constructed (before run.Run or // app.New); core snapshots each registration list during initialization. type Registry struct { - mu sync.Mutex - rewriters []RequestRewriter - middleware []echo.MiddlewareFunc - routes []func(*echo.Echo) - publicPaths []string - routeSelector RouteSelector - settings []RuntimeSetting + mu sync.Mutex + rewriters []RequestRewriter + middleware []echo.MiddlewareFunc + routes []func(*echo.Echo) + publicPaths []string + routeSelector RouteSelector + settings []RuntimeSetting + authenticators []RequestAuthenticator +} + +// RegisterAuthenticator adds a request authentication mechanism. Core bearer +// tokens keep precedence when a request explicitly supplies one. +func (r *Registry) RegisterAuthenticator(authenticator RequestAuthenticator) { + r.mu.Lock() + defer r.mu.Unlock() + r.authenticators = append(r.authenticators, authenticator) } // RegisterSetting adds a deployment-wide setting exposed through the generic @@ -112,6 +121,13 @@ func (r *Registry) Settings() []RuntimeSetting { return slices.Clone(r.settings) } +// Authenticators returns a defensive copy of registered request authenticators. +func (r *Registry) Authenticators() []RequestAuthenticator { + r.mu.Lock() + defer r.mu.Unlock() + return slices.Clone(r.authenticators) +} + // Default is the process-wide registry used by package-level helpers and, by // default, by run.Run. var Default = &Registry{} @@ -133,3 +149,8 @@ func RegisterRouteSelector(sel RouteSelector) { Default.RegisterRouteSelector(se // RegisterSetting registers a runtime setting on the Default registry. func RegisterSetting(setting RuntimeSetting) { Default.RegisterSetting(setting) } + +// RegisterAuthenticator registers a request authenticator on the Default registry. +func RegisterAuthenticator(authenticator RequestAuthenticator) { + Default.RegisterAuthenticator(authenticator) +} diff --git a/ext/registry_test.go b/ext/registry_test.go index b687940c3..e175dbef4 100644 --- a/ext/registry_test.go +++ b/ext/registry_test.go @@ -2,6 +2,7 @@ package ext import ( "context" + "net/http" "sync" "testing" @@ -12,6 +13,14 @@ import ( type namedRewriter struct{ name string } +type namedAuthenticator struct{ name string } + +func (a *namedAuthenticator) Name() string { return a.name } + +func (a *namedAuthenticator) AuthenticateRequest(context.Context, *http.Request) (*Authentication, error) { + return nil, nil +} + type testRuntimeSetting struct{ value string } func (s *testRuntimeSetting) Descriptor() SettingDescriptor { @@ -69,6 +78,17 @@ func TestRegistryCollectsMiddlewareAndRoutes(t *testing.T) { assert.Len(t, reg.Routes(), 1) } +func TestRegistryCollectsRequestAuthenticators(t *testing.T) { + reg := &Registry{} + reg.RegisterAuthenticator(&namedAuthenticator{name: "oidc"}) + + snapshot := reg.Authenticators() + require.Len(t, snapshot, 1) + assert.Equal(t, "oidc", snapshot[0].Name()) + reg.RegisterAuthenticator(&namedAuthenticator{name: "other"}) + assert.Len(t, snapshot, 1, "earlier snapshot must not grow") +} + func TestRegistryCollectsRuntimeSettings(t *testing.T) { reg := &Registry{} reg.RegisterSetting(&testRuntimeSetting{value: "high"}) diff --git a/internal/app/app.go b/internal/app/app.go index 608c611fc..b4132ff7f 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -119,6 +119,7 @@ func applyExtensions(serverCfg *server.Config, extensions *ext.Registry) { serverCfg.ExtraMiddleware = extensions.Middleware() serverCfg.ExtraRoutes = extensions.Routes() serverCfg.ExtraAuthSkipPaths = extensions.PublicPaths() + serverCfg.RequestAuthenticators = extensions.Authenticators() } // routeSelectorHooks adapts upstream client lifecycle events into route diff --git a/internal/app/app_test.go b/internal/app/app_test.go index b944b8194..b3c41a92f 100644 --- a/internal/app/app_test.go +++ b/internal/app/app_test.go @@ -697,6 +697,7 @@ func TestApplyExtensionsSnapshotsRegistryIntoServerConfig(t *testing.T) { reg.UseMiddleware(func(next echo.HandlerFunc) echo.HandlerFunc { return next }) reg.RegisterRoutes(func(_ *echo.Echo) {}) reg.AddPublicPaths("/sso/callback", "/sso/*") + reg.RegisterAuthenticator(&appTestAuthenticator{}) serverCfg := &server.Config{} applyExtensions(serverCfg, reg) @@ -713,15 +714,26 @@ func TestApplyExtensionsSnapshotsRegistryIntoServerConfig(t *testing.T) { if len(serverCfg.ExtraAuthSkipPaths) != 2 { t.Errorf("ExtraAuthSkipPaths not copied: %v", serverCfg.ExtraAuthSkipPaths) } + if len(serverCfg.RequestAuthenticators) != 1 { + t.Errorf("RequestAuthenticators not copied: %v", serverCfg.RequestAuthenticators) + } // A nil registry must leave the config untouched. empty := &server.Config{} applyExtensions(empty, nil) - if empty.RequestRewriters != nil || empty.ExtraMiddleware != nil || empty.ExtraRoutes != nil || empty.ExtraAuthSkipPaths != nil { + if empty.RequestRewriters != nil || empty.ExtraMiddleware != nil || empty.ExtraRoutes != nil || empty.ExtraAuthSkipPaths != nil || empty.RequestAuthenticators != nil { t.Error("nil registry must not modify server config") } } +type appTestAuthenticator struct{} + +func (*appTestAuthenticator) Name() string { return "test" } + +func (*appTestAuthenticator) AuthenticateRequest(context.Context, *http.Request) (*ext.Authentication, error) { + return nil, nil +} + type staticRewriter struct{ name string } func (r *staticRewriter) Name() string { return r.name } diff --git a/internal/auditlog/auditlog.go b/internal/auditlog/auditlog.go index 6f4680861..4c52ad87b 100644 --- a/internal/auditlog/auditlog.go +++ b/internal/auditlog/auditlog.go @@ -36,6 +36,7 @@ const ( AuthMethodAPIKey = "api_key" AuthMethodMasterKey = "master_key" AuthMethodNoKey = "no_key" + AuthMethodSSO = "sso" ) const ( @@ -98,16 +99,17 @@ type LogEntry struct { StatusCode int `json:"status_code" bson:"status_code"` // Extracted fields for efficient filtering (indexed in relational DBs) - RequestID string `json:"request_id,omitempty" bson:"request_id,omitempty"` - AuthKeyID string `json:"auth_key_id,omitempty" bson:"auth_key_id,omitempty"` - AuthMethod string `json:"auth_method,omitempty" bson:"auth_method,omitempty"` - ClientIP string `json:"client_ip,omitempty" bson:"client_ip,omitempty"` - Method string `json:"method,omitempty" bson:"method,omitempty"` - Path string `json:"path,omitempty" bson:"path,omitempty"` - UserPath string `json:"user_path,omitempty" bson:"user_path,omitempty"` - SessionID string `json:"session_id,omitempty" bson:"session_id,omitempty"` - Stream bool `json:"stream,omitempty" bson:"stream,omitempty"` - ErrorType string `json:"error_type,omitempty" bson:"error_type,omitempty"` + RequestID string `json:"request_id,omitempty" bson:"request_id,omitempty"` + PrincipalID string `json:"principal_id,omitempty" bson:"principal_id,omitempty"` + AuthKeyID string `json:"auth_key_id,omitempty" bson:"auth_key_id,omitempty"` + AuthMethod string `json:"auth_method,omitempty" bson:"auth_method,omitempty"` + ClientIP string `json:"client_ip,omitempty" bson:"client_ip,omitempty"` + Method string `json:"method,omitempty" bson:"method,omitempty"` + Path string `json:"path,omitempty" bson:"path,omitempty"` + UserPath string `json:"user_path,omitempty" bson:"user_path,omitempty"` + SessionID string `json:"session_id,omitempty" bson:"session_id,omitempty"` + Stream bool `json:"stream,omitempty" bson:"stream,omitempty"` + ErrorType string `json:"error_type,omitempty" bson:"error_type,omitempty"` // Data contains flexible request/response information as JSON Data *LogData `json:"data,omitempty" bson:"data,omitempty"` diff --git a/internal/auditlog/enrich.go b/internal/auditlog/enrich.go index 99f8b65e6..645225a4a 100644 --- a/internal/auditlog/enrich.go +++ b/internal/auditlog/enrich.go @@ -305,7 +305,7 @@ func EnrichEntryWithAuthMethod(c *echo.Context, method string) { } method = strings.ToLower(strings.TrimSpace(method)) switch method { - case AuthMethodAPIKey, AuthMethodMasterKey, AuthMethodNoKey, "unknown": + case AuthMethodAPIKey, AuthMethodMasterKey, AuthMethodNoKey, AuthMethodSSO, "unknown": default: return } @@ -327,6 +327,21 @@ func EnrichEntryWithAuthKeyID(c *echo.Context, authKeyID string) { publishLiveAuditUpdate(c, entry) } +// EnrichEntryWithPrincipalID attaches an extension-authenticated principal to +// the live audit entry. +func EnrichEntryWithPrincipalID(c *echo.Context, principalID string) { + entry := entryFromContext(c) + if entry == nil { + return + } + principalID = strings.TrimSpace(principalID) + if principalID == "" { + return + } + entry.PrincipalID = principalID + publishLiveAuditUpdate(c, entry) +} + // EnrichEntryWithUserPath attaches the effective user path to the live audit entry. func EnrichEntryWithUserPath(c *echo.Context, userPath string) { entry := entryFromContext(c) diff --git a/internal/auditlog/middleware.go b/internal/auditlog/middleware.go index 1767cca29..be8517647 100644 --- a/internal/auditlog/middleware.go +++ b/internal/auditlog/middleware.go @@ -21,6 +21,7 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v5" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/core" ) @@ -207,6 +208,9 @@ func applyAuthentication(entry *LogEntry, ctx context.Context) { if authKeyID := strings.TrimSpace(core.GetAuthKeyID(ctx)); authKeyID != "" { entry.AuthKeyID = authKeyID } + if authentication, ok := ext.AuthenticationFromContext(ctx); ok { + entry.PrincipalID = strings.TrimSpace(authentication.PrincipalID) + } if userPath := strings.TrimSpace(core.UserPathFromContext(ctx)); userPath != "" { entry.UserPath = userPath } diff --git a/internal/auditlog/middleware_test.go b/internal/auditlog/middleware_test.go index 81a767838..7ead70b8d 100644 --- a/internal/auditlog/middleware_test.go +++ b/internal/auditlog/middleware_test.go @@ -9,6 +9,7 @@ import ( "github.com/labstack/echo/v5" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/core" ) @@ -33,6 +34,17 @@ func TestApplyAuthenticationKeepsLabelsWhenContextHasNone(t *testing.T) { } } +func TestApplyAuthenticationPersistsExtensionPrincipal(t *testing.T) { + entry := &LogEntry{} + ctx := ext.WithAuthentication(t.Context(), ext.Authentication{PrincipalID: "oidc:principal-1"}) + + applyAuthentication(entry, ctx) + + if entry.PrincipalID != "oidc:principal-1" { + t.Fatalf("PrincipalID = %q, want oidc:principal-1", entry.PrincipalID) + } +} + func TestEnrichEntryWithWorkflow_PrefersProviderNameForResolvedModel(t *testing.T) { e := echo.New() req := httptest.NewRequest(http.MethodGet, "/", nil) diff --git a/internal/auditlog/reader_mongodb.go b/internal/auditlog/reader_mongodb.go index 918539fa1..d46270845 100644 --- a/internal/auditlog/reader_mongodb.go +++ b/internal/auditlog/reader_mongodb.go @@ -32,6 +32,7 @@ type mongoLogRow struct { CacheType string `bson:"cache_type"` StatusCode int `bson:"status_code"` RequestID string `bson:"request_id"` + PrincipalID string `bson:"principal_id"` AuthKeyID string `bson:"auth_key_id"` AuthMethod string `bson:"auth_method"` ClientIP string `bson:"client_ip"` @@ -58,6 +59,7 @@ func (r mongoLogRow) toLogEntry() *LogEntry { CacheType: normalizeCacheType(r.CacheType), StatusCode: r.StatusCode, RequestID: r.RequestID, + PrincipalID: r.PrincipalID, AuthKeyID: r.AuthKeyID, AuthMethod: r.AuthMethod, ClientIP: r.ClientIP, diff --git a/internal/auditlog/reader_sql.go b/internal/auditlog/reader_sql.go index 7c953dd72..bb2b1ad36 100644 --- a/internal/auditlog/reader_sql.go +++ b/internal/auditlog/reader_sql.go @@ -90,7 +90,7 @@ const sqliteTimestampBoundaryLayout = "2006-01-02T15:04:05" const logColumns = `id, timestamp, duration_ns, requested_model, resolved_model, provider, provider_name, alias_used, workflow_version_id, cache_type, status_code, - request_id, auth_key_id, auth_method, client_ip, method, path, user_path, session_id, + request_id, principal_id, auth_key_id, auth_method, client_ip, method, path, user_path, session_id, stream, error_type, data` const selectLogColumns = `SELECT ` + logColumns + ` @@ -372,6 +372,7 @@ func scanSQLLogEntry(scanner sqlx.Row) (*LogEntry, error) { providerName *string workflowVersionID *string cacheType *string + principalID *string authKeyID *string authMethod *string userPath *string @@ -383,7 +384,7 @@ func scanSQLLogEntry(scanner sqlx.Row) (*LogEntry, error) { if err := scanner.Scan( &entry.ID, ×tamp, &entry.DurationNs, &entry.RequestedModel, &entry.ResolvedModel, &entry.Provider, &providerName, &entry.AliasUsed, &workflowVersionID, &cacheType, - &entry.StatusCode, &entry.RequestID, &authKeyID, &authMethod, &entry.ClientIP, + &entry.StatusCode, &entry.RequestID, &principalID, &authKeyID, &authMethod, &entry.ClientIP, &entry.Method, &entry.Path, &userPath, &sessionID, &entry.Stream, &errorType, &dataJSON, ); err != nil { return nil, fmt.Errorf("failed to scan audit log row: %w", err) @@ -394,6 +395,7 @@ func scanSQLLogEntry(scanner sqlx.Row) (*LogEntry, error) { } entry.Timestamp = timestamp.Time entry.WorkflowVersionID = sqlutil.DerefTrimmed(workflowVersionID) + entry.PrincipalID = derefString(principalID) entry.AuthKeyID = derefString(authKeyID) entry.AuthMethod = derefString(authMethod) entry.UserPath = derefString(userPath) diff --git a/internal/auditlog/store_mongodb.go b/internal/auditlog/store_mongodb.go index 751af50e7..5b8a930d1 100644 --- a/internal/auditlog/store_mongodb.go +++ b/internal/auditlog/store_mongodb.go @@ -82,6 +82,9 @@ func NewMongoDBStore(database *mongo.Database, retentionDays int) (*MongoDBStore { Keys: bson.D{{Key: "request_id", Value: 1}}, }, + { + Keys: bson.D{{Key: "principal_id", Value: 1}}, + }, { Keys: bson.D{{Key: "auth_key_id", Value: 1}}, }, diff --git a/internal/auditlog/store_sql.go b/internal/auditlog/store_sql.go index 4942df2fb..0ae1c00a3 100644 --- a/internal/auditlog/store_sql.go +++ b/internal/auditlog/store_sql.go @@ -13,12 +13,12 @@ import ( ) // SQLite allows 999 bindable parameters per statement -// (SQLITE_MAX_VARIABLE_NUMBER). At 22 columns per entry that is 45 entries, +// (SQLITE_MAX_VARIABLE_NUMBER). At 23 columns per entry that is 43 entries, // so larger batches are chunked. PostgreSQL's limit is far higher, but one // chunk size keeps the write path identical on both. const ( maxSQLParams = 999 - columnsPerEntry = 22 + columnsPerEntry = 23 maxEntriesPerBatch = maxSQLParams / columnsPerEntry ) @@ -46,6 +46,7 @@ var sqlTables = []string{ cache_type TEXT, status_code INTEGER DEFAULT 0, request_id TEXT, + principal_id TEXT, auth_key_id TEXT, auth_method TEXT, client_ip TEXT, @@ -87,6 +88,7 @@ var sqlMigrations = []string{ "ALTER TABLE audit_logs ADD COLUMN alias_used " + sqlx.TypeBool + " DEFAULT FALSE", "ALTER TABLE audit_logs ADD COLUMN workflow_version_id TEXT", "ALTER TABLE audit_logs ADD COLUMN cache_type TEXT", + "ALTER TABLE audit_logs ADD COLUMN principal_id TEXT", "ALTER TABLE audit_logs ADD COLUMN auth_key_id TEXT", "ALTER TABLE audit_logs ADD COLUMN auth_method TEXT", "ALTER TABLE audit_logs ADD COLUMN user_path TEXT", @@ -106,6 +108,7 @@ var sqlIndexes = []string{ "CREATE INDEX IF NOT EXISTS idx_audit_provider_name ON audit_logs(provider_name)", "CREATE INDEX IF NOT EXISTS idx_audit_workflow_version_id ON audit_logs(workflow_version_id)", "CREATE INDEX IF NOT EXISTS idx_audit_request_id ON audit_logs(request_id)", + "CREATE INDEX IF NOT EXISTS idx_audit_principal_id ON audit_logs(principal_id)", "CREATE INDEX IF NOT EXISTS idx_audit_auth_key_id ON audit_logs(auth_key_id)", "CREATE INDEX IF NOT EXISTS idx_audit_client_ip ON audit_logs(client_ip)", "CREATE INDEX IF NOT EXISTS idx_audit_path ON audit_logs(path)", @@ -125,7 +128,7 @@ var sqlIndexes = []string{ const insertAuditLogPrefix = `INSERT INTO audit_logs ( id, timestamp, duration_ns, requested_model, resolved_model, provider, provider_name, alias_used, workflow_version_id, cache_type, status_code, - request_id, auth_key_id, auth_method, client_ip, method, path, user_path, + request_id, principal_id, auth_key_id, auth_method, client_ip, method, path, user_path, session_id, stream, error_type, data ) VALUES ` @@ -216,7 +219,7 @@ func (s *SQLStore) WriteBatch(ctx context.Context, entries []*LogEntry) error { placeholders := make([]string, len(chunk)) values := make([]any, 0, len(chunk)*columnsPerEntry) for j, e := range chunk { - placeholders[j] = "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + placeholders[j] = "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" values = append(values, auditLogValues(dialect, e)...) } @@ -259,6 +262,7 @@ func auditLogValues(dialect sqlx.Dialect, e *LogEntry) []any { cacheTypeValue, e.StatusCode, e.RequestID, + e.PrincipalID, e.AuthKeyID, e.AuthMethod, e.ClientIP, diff --git a/internal/auditlog/store_sql_test.go b/internal/auditlog/store_sql_test.go index 7289cf520..74585235f 100644 --- a/internal/auditlog/store_sql_test.go +++ b/internal/auditlog/store_sql_test.go @@ -38,6 +38,7 @@ func testLogEntry(id string, at time.Time) *LogEntry { CacheType: CacheTypeExact, StatusCode: 200, RequestID: "req-" + id, + PrincipalID: "oidc:principal-1", AuthKeyID: "auth-key-1", AuthMethod: "bearer", ClientIP: "127.0.0.1", @@ -58,20 +59,23 @@ func TestSQLStoreWriteBatchRoundTrip(t *testing.T) { } var ( - requestedModel, userPath string - aliasUsed, stream bool - statusCode int + requestedModel, userPath, principalID string + aliasUsed, stream bool + statusCode int ) err := db.QueryRow(ctx, ` - SELECT requested_model, user_path, alias_used, stream, status_code + SELECT requested_model, user_path, principal_id, alias_used, stream, status_code FROM audit_logs WHERE id = ? - `, "log-1").Scan(&requestedModel, &userPath, &aliasUsed, &stream, &statusCode) + `, "log-1").Scan(&requestedModel, &userPath, &principalID, &aliasUsed, &stream, &statusCode) if err != nil { t.Fatalf("read back: %v", err) } if requestedModel != "gpt-4o-mini" || userPath != "/team" || statusCode != 200 { t.Errorf("row = (%q, %q, %d), want (gpt-4o-mini, /team, 200)", requestedModel, userPath, statusCode) } + if principalID != "oidc:principal-1" { + t.Errorf("principal_id = %q, want oidc:principal-1", principalID) + } // Booleans round-trip as booleans on both engines, without an // int-conversion helper on either side. if !aliasUsed || !stream { diff --git a/internal/auditlog/stream_wrapper.go b/internal/auditlog/stream_wrapper.go index 0f1771716..0964a305b 100644 --- a/internal/auditlog/stream_wrapper.go +++ b/internal/auditlog/stream_wrapper.go @@ -236,15 +236,16 @@ func CreateStreamEntry(ctx context.Context, baseEntry *LogEntry) *LogEntry { CacheType: baseEntry.CacheType, StatusCode: baseEntry.StatusCode, // Copy extracted fields - RequestID: baseEntry.RequestID, - AuthKeyID: baseEntry.AuthKeyID, - AuthMethod: baseEntry.AuthMethod, - ClientIP: baseEntry.ClientIP, - Method: baseEntry.Method, - Path: baseEntry.Path, - UserPath: baseEntry.UserPath, - SessionID: baseEntry.SessionID, - Stream: true, // Mark as streaming + RequestID: baseEntry.RequestID, + PrincipalID: baseEntry.PrincipalID, + AuthKeyID: baseEntry.AuthKeyID, + AuthMethod: baseEntry.AuthMethod, + ClientIP: baseEntry.ClientIP, + Method: baseEntry.Method, + Path: baseEntry.Path, + UserPath: baseEntry.UserPath, + SessionID: baseEntry.SessionID, + Stream: true, // Mark as streaming } // This is a whitelist copy, so every request-side field of LogData must be diff --git a/internal/server/auth.go b/internal/server/auth.go index c2b25e02a..e1fb20af6 100644 --- a/internal/server/auth.go +++ b/internal/server/auth.go @@ -9,6 +9,7 @@ import ( "github.com/labstack/echo/v5" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/auditlog" "github.com/enterpilot/gomodel/internal/authkeys" "github.com/enterpilot/gomodel/internal/core" @@ -26,11 +27,18 @@ type BearerTokenAuthenticator interface { // key service. If no auth mechanism is configured, no authentication is // required. skipPaths is a list of paths that should bypass authentication. func AuthMiddlewareWithAuthenticator(masterKey string, authenticator BearerTokenAuthenticator, skipPaths []string, userPathHeader ...string) echo.MiddlewareFunc { + return AuthMiddlewareWithRequestAuthenticators(masterKey, authenticator, nil, skipPaths, userPathHeader...) +} + +// AuthMiddlewareWithRequestAuthenticators additionally accepts extension +// authenticators such as OIDC sessions. Explicit bearer credentials always +// take precedence over ambient request credentials such as cookies. +func AuthMiddlewareWithRequestAuthenticators(masterKey string, authenticator BearerTokenAuthenticator, requestAuthenticators []ext.RequestAuthenticator, skipPaths []string, userPathHeader ...string) echo.MiddlewareFunc { userPathHeaderName := configuredUserPathHeaderName(userPathHeader...) return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c *echo.Context) error { // If no auth mechanism is configured, allow all requests. - if masterKey == "" && (authenticator == nil || !authenticator.Enabled()) { + if masterKey == "" && (authenticator == nil || !authenticator.Enabled()) && len(requestAuthenticators) == 0 { auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodNoKey) setInteractionContinuationAllowed(c, true) return next(c) @@ -53,38 +61,91 @@ func AuthMiddlewareWithAuthenticator(masterKey string, authenticator BearerToken } token, tokenErr := requestAuthToken(c.Request()) - if tokenErr != "" { - authErr := authenticationError(c, tokenErr) - return writeGatewayError(c, authErr) - } - if masterKey != "" && subtle.ConstantTimeCompare([]byte(token), []byte(masterKey)) == 1 { - auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodMasterKey) - setInteractionContinuationAllowed(c, true) - return next(c) - } - - if authenticator != nil && authenticator.Enabled() { - auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodAPIKey) - authResult, err := authenticator.Authenticate(c.Request().Context(), token) - if err == nil { - applyAuthKeyResult(c, authResult, userPathHeaderName) + hasExplicitCredential := c.Request().Header.Get("Authorization") != "" || c.Request().Header.Get("x-api-key") != "" + if hasExplicitCredential { + if tokenErr != "" { + authErr := authenticationError(c, tokenErr) + return writeGatewayError(c, authErr) + } + if masterKey != "" && subtle.ConstantTimeCompare([]byte(token), []byte(masterKey)) == 1 { + auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodMasterKey) + setInteractionContinuationAllowed(c, true) return next(c) } - authErr := authenticationErrorWithAudit(c, authFailureMessage(err), "authentication failed") - return writeGatewayError(c, authErr) + if authenticator != nil && authenticator.Enabled() { + auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodAPIKey) + authResult, err := authenticator.Authenticate(c.Request().Context(), token) + if err == nil { + applyAuthKeyResult(c, authResult, userPathHeaderName) + return next(c) + } + + authErr := authenticationErrorWithAudit(c, authFailureMessage(err), "authentication failed") + return writeGatewayError(c, authErr) + } + message := "invalid credentials" + if masterKey != "" && (authenticator == nil || !authenticator.Enabled()) { + message = "invalid master key" + } + return writeGatewayError(c, authenticationError(c, message)) + } + + for _, requestAuthenticator := range requestAuthenticators { + if requestAuthenticator == nil { + continue + } + result, err := requestAuthenticator.AuthenticateRequest(c.Request().Context(), c.Request()) + if err != nil { + return writeGatewayError(c, authenticationErrorWithAudit(c, authFailureMessage(err), "authentication failed")) + } + if result == nil { + continue + } + if err := applyExtensionAuthResult(c, result, userPathHeaderName); err != nil { + return writeGatewayError(c, authenticationErrorWithAudit(c, err.Error(), "authentication failed")) + } + return next(c) } - authErr := authenticationError(c, "invalid master key") + authErr := authenticationError(c, tokenErr) return writeGatewayError(c, authErr) } } } +func applyExtensionAuthResult(c *echo.Context, result *ext.Authentication, userPathHeaderName string) error { + if result == nil || strings.TrimSpace(result.PrincipalID) == "" { + return errors.New("extension authenticator returned an empty principal id") + } + userPath, err := core.NormalizeUserPath(result.UserPath) + if err != nil { + return err + } + ctx := context.WithValue(c.Request().Context(), managedDashboardAccessKey{}, result.DashboardAccess) + ctx = context.WithValue(ctx, interactionContinuationAllowedKey{}, result.DashboardAccess) + ctx = ext.WithAuthentication(ctx, *result) + if len(result.Labels) > 0 { + ctx = core.WithRequestLabels(ctx, core.MergeLabels(core.RequestLabelsFromContext(ctx), result.Labels)) + } + if userPath != "" { + ctx = core.WithEffectiveUserPath(ctx, userPath) + ctx = core.WithUserPathHeaderName(ctx, userPathHeaderName) + if snapshot := core.GetRequestSnapshot(ctx); snapshot != nil { + ctx = core.WithRequestSnapshot(ctx, snapshot.WithUserPathHeader(userPath, userPathHeaderName)) + } + c.Request().Header.Set(userPathHeaderName, userPath) + auditlog.EnrichEntryWithUserPath(c, userPath) + } + c.SetRequest(c.Request().WithContext(ctx)) + auditlog.EnrichEntryWithAuthMethod(c, result.Method) + auditlog.EnrichEntryWithPrincipalID(c, result.PrincipalID) + return nil +} + // AdminAccessMiddleware denies admin API requests authenticated with a -// managed key that lacks dashboard access. Master-key requests and requests -// that skipped authentication (the no-master-key lockout recovery path) pass -// through unchanged. +// managed key or extension identity that lacks dashboard access. Master-key +// requests and requests that skipped authentication pass through unchanged. func AdminAccessMiddleware() echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c *echo.Context) error { diff --git a/internal/server/auth_test.go b/internal/server/auth_test.go index 0c789354f..a71059a69 100644 --- a/internal/server/auth_test.go +++ b/internal/server/auth_test.go @@ -12,11 +12,25 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/auditlog" "github.com/enterpilot/gomodel/internal/authkeys" "github.com/enterpilot/gomodel/internal/core" ) +type mockRequestAuthenticator struct { + result *ext.Authentication + err error + calls int +} + +func (m *mockRequestAuthenticator) Name() string { return "mock-request-auth" } + +func (m *mockRequestAuthenticator) AuthenticateRequest(_ context.Context, _ *http.Request) (*ext.Authentication, error) { + m.calls++ + return m.result, m.err +} + type mockAuthenticator struct { enabled bool tokenToID map[string]string @@ -247,6 +261,60 @@ func TestAuthMiddlewareWithAuthenticator_ManagedKeyEnrichesContextAndAudit(t *te assert.Equal(t, "ok", rec.Body.String()) } +func TestAuthMiddlewareWithRequestAuthenticatorEnrichesRequest(t *testing.T) { + e := echo.New() + requestAuth := &mockRequestAuthenticator{result: &ext.Authentication{ + PrincipalID: "oidc:principal-1", + UserPath: "/users/person@example.com", + Labels: []string{"sso"}, + DashboardAccess: true, + Method: auditlog.AuthMethodSSO, + }} + handler := RequestSnapshotCapture()(AuthMiddlewareWithRequestAuthenticators( + "", nil, []ext.RequestAuthenticator{requestAuth}, nil, + )(func(c *echo.Context) error { + assert.Equal(t, "/users/person@example.com", core.UserPathFromContext(c.Request().Context())) + assert.Equal(t, []string{"sso"}, core.RequestLabelsFromContext(c.Request().Context())) + assert.True(t, interactionContinuationAllowed(c.Request().Context())) + identity, ok := ext.AuthenticationFromContext(c.Request().Context()) + assert.True(t, ok) + assert.Equal(t, "oidc:principal-1", identity.PrincipalID) + entry := c.Get(string(auditlog.LogEntryKey)).(*auditlog.LogEntry) + assert.Equal(t, auditlog.AuthMethodSSO, entry.AuthMethod) + assert.Equal(t, "oidc:principal-1", entry.PrincipalID) + assert.Equal(t, "/users/person@example.com", entry.UserPath) + return c.NoContent(http.StatusNoContent) + })) + + req := httptest.NewRequest(http.MethodGet, "/admin/usage", nil) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + c.Set(string(auditlog.LogEntryKey), &auditlog.LogEntry{Data: &auditlog.LogData{}}) + require.NoError(t, handler(c)) + assert.Equal(t, http.StatusNoContent, rec.Code) + assert.Equal(t, 1, requestAuth.calls) +} + +func TestAuthMiddlewareExplicitBearerPrecedesRequestAuthenticator(t *testing.T) { + requestAuth := &mockRequestAuthenticator{result: &ext.Authentication{ + PrincipalID: "oidc:principal-1", UserPath: "/users/sso", DashboardAccess: true, + }} + handler := AuthMiddlewareWithRequestAuthenticators( + "master", nil, []ext.RequestAuthenticator{requestAuth}, nil, + )(func(c *echo.Context) error { + assert.Empty(t, core.UserPathFromContext(c.Request().Context())) + return c.NoContent(http.StatusNoContent) + }) + + e := echo.New() + req := httptest.NewRequest(http.MethodGet, "/admin/usage", nil) + req.Header.Set("Authorization", "Bearer master") + rec := httptest.NewRecorder() + require.NoError(t, handler(e.NewContext(req, rec))) + assert.Equal(t, http.StatusNoContent, rec.Code) + assert.Zero(t, requestAuth.calls) +} + func TestAuthMiddleware_InteractionContinuationAccess(t *testing.T) { tests := []struct { name string diff --git a/internal/server/http.go b/internal/server/http.go index f9e37386e..25e9cd1cb 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -113,6 +113,7 @@ type Config struct { ExtraMiddleware []echo.MiddlewareFunc // Optional: extension middleware registered after audit, before gateway auth ExtraRoutes []func(*echo.Echo) // Optional: extension route registration callbacks invoked after core routes ExtraAuthSkipPaths []string // Optional: extension paths appended to the auth skip list ("/*" suffix matches a prefix) + RequestAuthenticators []ext.RequestAuthenticator // Optional extension-provided request authentication mechanisms Tagging *tagging.Service // Optional: request labelling based on configured tagging headers SessionDetector *session.Detector // Optional: client session identification for sticky routing and audit grouping } @@ -349,9 +350,9 @@ func New(provider core.RoutableProvider, cfg *Config) *Server { // Authentication (skips public paths) // Register by authenticator presence; its Enabled state can change at runtime. - authMiddlewareRegistered := cfg != nil && (cfg.MasterKey != "" || cfg.Authenticator != nil) + authMiddlewareRegistered := cfg != nil && (cfg.MasterKey != "" || cfg.Authenticator != nil || len(cfg.RequestAuthenticators) > 0) if authMiddlewareRegistered { - e.Use(AuthMiddlewareWithAuthenticator(cfg.MasterKey, cfg.Authenticator, authSkipPaths, userPathHeaderName)) + e.Use(AuthMiddlewareWithRequestAuthenticators(cfg.MasterKey, cfg.Authenticator, cfg.RequestAuthenticators, authSkipPaths, userPathHeaderName)) } // Session identification runs after auth so session ids are scoped by the diff --git a/run/run.go b/run/run.go index 69da7ca3f..5f5b8ef1e 100644 --- a/run/run.go +++ b/run/run.go @@ -57,6 +57,12 @@ type Options struct { // config loading. Register extensions here so operator tooling modes // stay silent. A returned error aborts startup. Setup func(ctx context.Context) error + // SetupConfig runs once after the initial configuration has been loaded and + // before the application is constructed. It lets custom distributions + // decode their opaque extensions: configuration and register corresponding + // extensions. Configuration registered here is startup-only; reloads reuse + // the resulting extension instances. + SetupConfig func(ctx context.Context, result *config.LoadResult) error } func (o Options) withDefaults() Options { @@ -182,6 +188,8 @@ func Run(ctx context.Context, opts Options) error { } } + setupConfigDone := false + // build produces one generation of the gateway from the configuration as it // stands right now. It is called again for every reload, which is what lets // a reload re-read every configuration value rather than a hand-picked @@ -192,6 +200,12 @@ func Run(ctx context.Context, opts Options) error { if err != nil { return nil, nil, fmt.Errorf("failed to load config: %w", err) } + if !setupConfigDone && opts.SetupConfig != nil { + if err := opts.SetupConfig(ctx, result); err != nil { + return nil, nil, fmt.Errorf("failed to set up configured extensions: %w", err) + } + setupConfigDone = true + } opts.ConfigureSwaggerDocs(result.Config.Server.BasePath) application, err := app.New(ctx, app.Config{ diff --git a/run/run_test.go b/run/run_test.go index d0ce80a94..97d77f74b 100644 --- a/run/run_test.go +++ b/run/run_test.go @@ -2,16 +2,20 @@ package run import ( "context" + "errors" "io" "net" "net/http" "strconv" "strings" "testing" + + "github.com/enterpilot/gomodel/config" ) func TestRunVersionSkipsSetup(t *testing.T) { setupCalled := false + setupConfigCalled := false var stdout strings.Builder err := Run(context.Background(), Options{ @@ -23,6 +27,10 @@ func TestRunVersionSkipsSetup(t *testing.T) { setupCalled = true return nil }, + SetupConfig: func(context.Context, *config.LoadResult) error { + setupConfigCalled = true + return nil + }, }) if err != nil { t.Fatalf("Run(--version) error = %v", err) @@ -30,11 +38,38 @@ func TestRunVersionSkipsSetup(t *testing.T) { if setupCalled { t.Error("Setup must not run for --version") } + if setupConfigCalled { + t.Error("SetupConfig must not run for --version") + } if !strings.HasPrefix(stdout.String(), "gomodel-test ") { t.Errorf("version output = %q, want prefix %q", stdout.String(), "gomodel-test ") } } +func TestRunSetupConfigReceivesLoadedConfiguration(t *testing.T) { + t.Chdir(t.TempDir()) + wantErr := errors.New("configured extension stopped startup") + called := false + err := Run(t.Context(), Options{ + Args: []string{}, + Stdout: io.Discard, + Stderr: io.Discard, + SetupConfig: func(_ context.Context, result *config.LoadResult) error { + called = true + if result == nil || result.Config == nil { + t.Fatal("SetupConfig received nil configuration") + } + return wantErr + }, + }) + if !called { + t.Fatal("SetupConfig was not called") + } + if !errors.Is(err, wantErr) { + t.Fatalf("Run error = %v, want wrapped sentinel", err) + } +} + func TestRunUsageErrorExitCode(t *testing.T) { err := Run(context.Background(), Options{ Args: []string{"--not-a-flag"}, From c95ccaffa7ef92a113bfce6ed6699d0e575689b2 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Fri, 7 Aug 2026 00:58:51 +0200 Subject: [PATCH 02/10] fix(ext): harden request authentication --- config/config.example.yaml | 6 +- ext/auth.go | 5 +- internal/auditlog/auditlog.go | 2 +- internal/auditlog/enrich.go | 24 ++++- internal/auditlog/middleware.go | 7 +- .../auditlog/middleware_auth_method_test.go | 17 +++- internal/auditlog/middleware_test.go | 16 +++- internal/auditlog/store_sql_test.go | 35 +++---- internal/server/admin_access_test.go | 37 ++++++++ internal/server/auth.go | 42 ++++++--- internal/server/auth_test.go | 91 ++++++++++++++++++- internal/server/http.go | 2 +- 12 files changed, 238 insertions(+), 46 deletions(-) diff --git a/config/config.example.yaml b/config/config.example.yaml index b3820cf94..e9e804e87 100644 --- a/config/config.example.yaml +++ b/config/config.example.yaml @@ -537,9 +537,9 @@ providers: # output_per_mtok: 0 # - Gemma4-31B -# Custom distributions may define strictly validated configuration in named -# extension sections. Core preserves these values without depending on the -# extension's schema; the owning extension decodes and validates its section. +# Extensions are absent by default. Add a named section only when a custom +# distribution requires it. Core preserves these values without depending on +# the extension's schema; the owning extension strictly validates its section. # extensions: # example: # enabled: true diff --git a/ext/auth.go b/ext/auth.go index 66ef5c77b..907c1590e 100644 --- a/ext/auth.go +++ b/ext/auth.go @@ -18,7 +18,10 @@ type Authentication struct { UserPath string Labels []string DashboardAccess bool - Method string + // Method is a short, stable audit identifier such as "oidc" or "saml". + // Core normalizes safe identifiers and records "extension" when it is empty + // or invalid. + Method string } // RequestAuthenticator authenticates requests using a mechanism other than diff --git a/internal/auditlog/auditlog.go b/internal/auditlog/auditlog.go index 4c52ad87b..40bdad482 100644 --- a/internal/auditlog/auditlog.go +++ b/internal/auditlog/auditlog.go @@ -36,7 +36,7 @@ const ( AuthMethodAPIKey = "api_key" AuthMethodMasterKey = "master_key" AuthMethodNoKey = "no_key" - AuthMethodSSO = "sso" + AuthMethodExtension = "extension" ) const ( diff --git a/internal/auditlog/enrich.go b/internal/auditlog/enrich.go index 645225a4a..6e335576f 100644 --- a/internal/auditlog/enrich.go +++ b/internal/auditlog/enrich.go @@ -297,16 +297,32 @@ func EnrichEntryWithCacheType(c *echo.Context, cacheType string) { publishLiveAuditUpdate(c, entry) } +// NormalizeAuthMethod returns a bounded lowercase audit identifier. Extension +// methods are intentionally opaque to Core; restricting their alphabet keeps +// persisted values safe for logs, filters, and metrics without enumerating +// provider-specific mechanisms. +func NormalizeAuthMethod(method string) string { + method = strings.ToLower(strings.TrimSpace(method)) + if method == "" || len(method) > 64 { + return "" + } + for _, char := range method { + if (char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char == '_' || char == '-' || char == '.' { + continue + } + return "" + } + return method +} + // EnrichEntryWithAuthMethod records which authentication mechanism was used for the request. func EnrichEntryWithAuthMethod(c *echo.Context, method string) { entry := entryFromContext(c) if entry == nil { return } - method = strings.ToLower(strings.TrimSpace(method)) - switch method { - case AuthMethodAPIKey, AuthMethodMasterKey, AuthMethodNoKey, AuthMethodSSO, "unknown": - default: + method = NormalizeAuthMethod(method) + if method == "" { return } entry.AuthMethod = method diff --git a/internal/auditlog/middleware.go b/internal/auditlog/middleware.go index be8517647..ef833f99f 100644 --- a/internal/auditlog/middleware.go +++ b/internal/auditlog/middleware.go @@ -209,7 +209,12 @@ func applyAuthentication(entry *LogEntry, ctx context.Context) { entry.AuthKeyID = authKeyID } if authentication, ok := ext.AuthenticationFromContext(ctx); ok { - entry.PrincipalID = strings.TrimSpace(authentication.PrincipalID) + if principalID := strings.TrimSpace(authentication.PrincipalID); principalID != "" { + entry.PrincipalID = principalID + } + if authMethod := NormalizeAuthMethod(authentication.Method); authMethod != "" { + entry.AuthMethod = authMethod + } } if userPath := strings.TrimSpace(core.UserPathFromContext(ctx)); userPath != "" { entry.UserPath = userPath diff --git a/internal/auditlog/middleware_auth_method_test.go b/internal/auditlog/middleware_auth_method_test.go index 85d34659c..89d8a48f6 100644 --- a/internal/auditlog/middleware_auth_method_test.go +++ b/internal/auditlog/middleware_auth_method_test.go @@ -3,12 +3,13 @@ package auditlog import ( "net/http" "net/http/httptest" + "strings" "testing" "github.com/labstack/echo/v5" ) -func TestEnrichEntryWithAuthMethodTrimsAndValidatesAllowedValues(t *testing.T) { +func TestEnrichEntryWithAuthMethodTrimsAndValidatesIdentifiers(t *testing.T) { e := echo.New() req := httptest.NewRequest(http.MethodGet, "/", nil) rec := httptest.NewRecorder() @@ -35,9 +36,14 @@ func TestEnrichEntryWithAuthMethodTrimsAndValidatesAllowedValues(t *testing.T) { if entry.AuthMethod != "unknown" { t.Fatalf("entry auth method = %q, want %q", entry.AuthMethod, "unknown") } + + EnrichEntryWithAuthMethod(c, " OAuth ") + if entry.AuthMethod != "oauth" { + t.Fatalf("entry auth method = %q, want %q", entry.AuthMethod, "oauth") + } } -func TestEnrichEntryWithAuthMethodIgnoresBlankAndUnsupportedValues(t *testing.T) { +func TestEnrichEntryWithAuthMethodIgnoresBlankAndUnsafeValues(t *testing.T) { e := echo.New() req := httptest.NewRequest(http.MethodGet, "/", nil) rec := httptest.NewRecorder() @@ -50,7 +56,12 @@ func TestEnrichEntryWithAuthMethodIgnoresBlankAndUnsupportedValues(t *testing.T) t.Fatalf("entry auth method = %q, want empty", entry.AuthMethod) } - EnrichEntryWithAuthMethod(c, "oauth") + EnrichEntryWithAuthMethod(c, "oauth\nsecret") + if entry.AuthMethod != "" { + t.Fatalf("entry auth method = %q, want empty", entry.AuthMethod) + } + + EnrichEntryWithAuthMethod(c, strings.Repeat("a", 65)) if entry.AuthMethod != "" { t.Fatalf("entry auth method = %q, want empty", entry.AuthMethod) } diff --git a/internal/auditlog/middleware_test.go b/internal/auditlog/middleware_test.go index 7ead70b8d..75250889b 100644 --- a/internal/auditlog/middleware_test.go +++ b/internal/auditlog/middleware_test.go @@ -36,13 +36,27 @@ func TestApplyAuthenticationKeepsLabelsWhenContextHasNone(t *testing.T) { func TestApplyAuthenticationPersistsExtensionPrincipal(t *testing.T) { entry := &LogEntry{} - ctx := ext.WithAuthentication(t.Context(), ext.Authentication{PrincipalID: "oidc:principal-1"}) + ctx := ext.WithAuthentication(t.Context(), ext.Authentication{PrincipalID: "oidc:principal-1", Method: "oidc"}) applyAuthentication(entry, ctx) if entry.PrincipalID != "oidc:principal-1" { t.Fatalf("PrincipalID = %q, want oidc:principal-1", entry.PrincipalID) } + if entry.AuthMethod != "oidc" { + t.Fatalf("AuthMethod = %q, want oidc", entry.AuthMethod) + } +} + +func TestApplyAuthenticationDoesNotReplacePrincipalWithBlank(t *testing.T) { + entry := &LogEntry{PrincipalID: "existing-principal"} + ctx := ext.WithAuthentication(t.Context(), ext.Authentication{PrincipalID: " "}) + + applyAuthentication(entry, ctx) + + if entry.PrincipalID != "existing-principal" { + t.Fatalf("PrincipalID = %q, want existing-principal", entry.PrincipalID) + } } func TestEnrichEntryWithWorkflow_PrefersProviderNameForResolvedModel(t *testing.T) { diff --git a/internal/auditlog/store_sql_test.go b/internal/auditlog/store_sql_test.go index 74585235f..2eb99a546 100644 --- a/internal/auditlog/store_sql_test.go +++ b/internal/auditlog/store_sql_test.go @@ -58,28 +58,31 @@ func TestSQLStoreWriteBatchRoundTrip(t *testing.T) { t.Fatalf("WriteBatch: %v", err) } - var ( - requestedModel, userPath, principalID string - aliasUsed, stream bool - statusCode int - ) - err := db.QueryRow(ctx, ` - SELECT requested_model, user_path, principal_id, alias_used, stream, status_code - FROM audit_logs WHERE id = ? - `, "log-1").Scan(&requestedModel, &userPath, &principalID, &aliasUsed, &stream, &statusCode) + reader, err := NewSQLReader(db) if err != nil { - t.Fatalf("read back: %v", err) + t.Fatalf("NewSQLReader: %v", err) } - if requestedModel != "gpt-4o-mini" || userPath != "/team" || statusCode != 200 { - t.Errorf("row = (%q, %q, %d), want (gpt-4o-mini, /team, 200)", requestedModel, userPath, statusCode) + result, err := reader.GetLogs(ctx, LogQueryParams{Limit: 10, OmitAttempts: true}) + if err != nil { + t.Fatalf("GetLogs: %v", err) + } + if len(result.Entries) != 1 { + t.Fatalf("entries = %d, want 1", len(result.Entries)) + } + entry := result.Entries[0] + if entry.RequestedModel != "gpt-4o-mini" || entry.UserPath != "/team" || entry.StatusCode != 200 { + t.Errorf("entry = (%q, %q, %d), want (gpt-4o-mini, /team, 200)", entry.RequestedModel, entry.UserPath, entry.StatusCode) + } + if entry.PrincipalID != "oidc:principal-1" { + t.Errorf("principal_id = %q, want oidc:principal-1", entry.PrincipalID) } - if principalID != "oidc:principal-1" { - t.Errorf("principal_id = %q, want oidc:principal-1", principalID) + if entry.RequestID != "req-log-1" || entry.AuthKeyID != "auth-key-1" || entry.AuthMethod != "bearer" { + t.Errorf("auth fields = (%q, %q, %q), want (req-log-1, auth-key-1, bearer)", entry.RequestID, entry.AuthKeyID, entry.AuthMethod) } // Booleans round-trip as booleans on both engines, without an // int-conversion helper on either side. - if !aliasUsed || !stream { - t.Errorf("alias_used=%v stream=%v, want both true", aliasUsed, stream) + if !entry.AliasUsed || !entry.Stream { + t.Errorf("alias_used=%v stream=%v, want both true", entry.AliasUsed, entry.Stream) } }) } diff --git a/internal/server/admin_access_test.go b/internal/server/admin_access_test.go index b3ab47a1e..681bb934b 100644 --- a/internal/server/admin_access_test.go +++ b/internal/server/admin_access_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/admin" ) @@ -99,3 +100,39 @@ func TestAdminGate_LockoutRecoveryPathStaysOpen(t *testing.T) { status, _ := adminGateStatus(t, srv, "/admin/auth-keys", "") assert.Equal(t, http.StatusServiceUnavailable, status) } + +func TestAdminGate_RequestAuthenticatorDisablesAnonymousRecoveryBypass(t *testing.T) { + tests := []struct { + name string + identity *ext.Authentication + wantStatus int + }{ + {name: "anonymous", wantStatus: http.StatusUnauthorized}, + { + name: "identity without dashboard access", + identity: &ext.Authentication{PrincipalID: "principal-1", UserPath: "/users/one", Method: "oidc"}, + wantStatus: http.StatusForbidden, + }, + { + name: "identity with dashboard access", + identity: &ext.Authentication{PrincipalID: "principal-1", UserPath: "/users/one", Method: "oidc", DashboardAccess: true}, + wantStatus: http.StatusServiceUnavailable, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + srv := New(&mockProvider{}, &Config{ + AdminEndpointsEnabled: true, + AdminHandler: admin.NewHandler(nil, nil), + RequestAuthenticators: []ext.RequestAuthenticator{&mockRequestAuthenticator{result: tt.identity}}, + }) + status, body := adminGateStatus(t, srv, "/admin/auth-keys", "") + assert.Equal(t, tt.wantStatus, status) + if tt.wantStatus == http.StatusForbidden { + errObj, ok := body["error"].(map[string]any) + require.True(t, ok) + assert.Equal(t, "identity does not have dashboard access", errObj["message"]) + } + }) + } +} diff --git a/internal/server/auth.go b/internal/server/auth.go index e1fb20af6..b5ed27f19 100644 --- a/internal/server/auth.go +++ b/internal/server/auth.go @@ -97,13 +97,13 @@ func AuthMiddlewareWithRequestAuthenticators(masterKey string, authenticator Bea } result, err := requestAuthenticator.AuthenticateRequest(c.Request().Context(), c.Request()) if err != nil { - return writeGatewayError(c, authenticationErrorWithAudit(c, authFailureMessage(err), "authentication failed")) + return writeGatewayError(c, extensionAuthenticationError(c)) } if result == nil { continue } if err := applyExtensionAuthResult(c, result, userPathHeaderName); err != nil { - return writeGatewayError(c, authenticationErrorWithAudit(c, err.Error(), "authentication failed")) + return writeGatewayError(c, extensionAuthenticationError(c)) } return next(c) } @@ -115,18 +115,29 @@ func AuthMiddlewareWithRequestAuthenticators(masterKey string, authenticator Bea } func applyExtensionAuthResult(c *echo.Context, result *ext.Authentication, userPathHeaderName string) error { - if result == nil || strings.TrimSpace(result.PrincipalID) == "" { + if result == nil { + return errors.New("extension authenticator returned no identity") + } + principalID := strings.TrimSpace(result.PrincipalID) + if principalID == "" { return errors.New("extension authenticator returned an empty principal id") } userPath, err := core.NormalizeUserPath(result.UserPath) if err != nil { return err } - ctx := context.WithValue(c.Request().Context(), managedDashboardAccessKey{}, result.DashboardAccess) - ctx = context.WithValue(ctx, interactionContinuationAllowedKey{}, result.DashboardAccess) - ctx = ext.WithAuthentication(ctx, *result) - if len(result.Labels) > 0 { - ctx = core.WithRequestLabels(ctx, core.MergeLabels(core.RequestLabelsFromContext(ctx), result.Labels)) + normalized := *result + normalized.PrincipalID = principalID + normalized.UserPath = userPath + normalized.Method = auditlog.NormalizeAuthMethod(result.Method) + if normalized.Method == "" { + normalized.Method = auditlog.AuthMethodExtension + } + ctx := context.WithValue(c.Request().Context(), managedDashboardAccessKey{}, normalized.DashboardAccess) + ctx = context.WithValue(ctx, interactionContinuationAllowedKey{}, normalized.DashboardAccess) + ctx = ext.WithAuthentication(ctx, normalized) + if len(normalized.Labels) > 0 { + ctx = core.WithRequestLabels(ctx, core.MergeLabels(core.RequestLabelsFromContext(ctx), normalized.Labels)) } if userPath != "" { ctx = core.WithEffectiveUserPath(ctx, userPath) @@ -138,8 +149,8 @@ func applyExtensionAuthResult(c *echo.Context, result *ext.Authentication, userP auditlog.EnrichEntryWithUserPath(c, userPath) } c.SetRequest(c.Request().WithContext(ctx)) - auditlog.EnrichEntryWithAuthMethod(c, result.Method) - auditlog.EnrichEntryWithPrincipalID(c, result.PrincipalID) + auditlog.EnrichEntryWithAuthMethod(c, normalized.Method) + auditlog.EnrichEntryWithPrincipalID(c, normalized.PrincipalID) return nil } @@ -150,7 +161,7 @@ func AdminAccessMiddleware() echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c *echo.Context) error { if allowed, isManagedKey := managedDashboardAccess(c.Request().Context()); isManagedKey && !allowed { - const message = "API key does not have dashboard access" + const message = "identity does not have dashboard access" auditlog.EnrichEntryWithError(c, string(core.ErrorTypeAuthentication), message) gatewayErr := (&core.GatewayError{ Type: core.ErrorTypeAuthentication, @@ -164,6 +175,15 @@ func AdminAccessMiddleware() echo.MiddlewareFunc { } } +func extensionAuthenticationError(c *echo.Context) *core.GatewayError { + const ( + message = "authentication failed" + code = "extension_authentication_failed" + ) + auditlog.EnrichEntryWithError(c, string(core.ErrorTypeAuthentication), message, code) + return core.NewAuthenticationError("", message).WithCode(code) +} + // requestAuthToken extracts the caller's credential from the request. The // primary scheme is "Authorization: Bearer "; the Anthropic-native // "x-api-key: " header is accepted as a fallback so Anthropic SDK diff --git a/internal/server/auth_test.go b/internal/server/auth_test.go index a71059a69..e0384e30f 100644 --- a/internal/server/auth_test.go +++ b/internal/server/auth_test.go @@ -3,6 +3,7 @@ package server import ( "context" "crypto/subtle" + "errors" "net/http" "net/http/httptest" "strings" @@ -264,11 +265,11 @@ func TestAuthMiddlewareWithAuthenticator_ManagedKeyEnrichesContextAndAudit(t *te func TestAuthMiddlewareWithRequestAuthenticatorEnrichesRequest(t *testing.T) { e := echo.New() requestAuth := &mockRequestAuthenticator{result: &ext.Authentication{ - PrincipalID: "oidc:principal-1", - UserPath: "/users/person@example.com", + PrincipalID: " oidc:principal-1 ", + UserPath: " /users/person@example.com/ ", Labels: []string{"sso"}, DashboardAccess: true, - Method: auditlog.AuthMethodSSO, + Method: " OIDC ", }} handler := RequestSnapshotCapture()(AuthMiddlewareWithRequestAuthenticators( "", nil, []ext.RequestAuthenticator{requestAuth}, nil, @@ -279,8 +280,10 @@ func TestAuthMiddlewareWithRequestAuthenticatorEnrichesRequest(t *testing.T) { identity, ok := ext.AuthenticationFromContext(c.Request().Context()) assert.True(t, ok) assert.Equal(t, "oidc:principal-1", identity.PrincipalID) + assert.Equal(t, "/users/person@example.com", identity.UserPath) + assert.Equal(t, "oidc", identity.Method) entry := c.Get(string(auditlog.LogEntryKey)).(*auditlog.LogEntry) - assert.Equal(t, auditlog.AuthMethodSSO, entry.AuthMethod) + assert.Equal(t, "oidc", entry.AuthMethod) assert.Equal(t, "oidc:principal-1", entry.PrincipalID) assert.Equal(t, "/users/person@example.com", entry.UserPath) return c.NoContent(http.StatusNoContent) @@ -295,6 +298,86 @@ func TestAuthMiddlewareWithRequestAuthenticatorEnrichesRequest(t *testing.T) { assert.Equal(t, 1, requestAuth.calls) } +func TestAuthMiddlewareWithRequestAuthenticatorsFailurePaths(t *testing.T) { + secretError := errors.New("provider rejected cookie=super-secret") + tests := []struct { + name string + auths []*mockRequestAuthenticator + adminGate bool + wantStatus int + wantCalls []int + wantExtensionFailure bool + }{ + { + name: "authenticator error is sanitized", + auths: []*mockRequestAuthenticator{{err: secretError}}, + wantStatus: http.StatusUnauthorized, wantCalls: []int{1}, wantExtensionFailure: true, + }, + { + name: "nil result falls through to next authenticator", + auths: []*mockRequestAuthenticator{{}, {result: &ext.Authentication{ + PrincipalID: "principal-1", UserPath: "/users/one", DashboardAccess: true, Method: "saml", + }}}, + wantStatus: http.StatusNoContent, wantCalls: []int{1, 1}, + }, + { + name: "all nil results reject missing credentials", + auths: []*mockRequestAuthenticator{{}, {}}, + wantStatus: http.StatusUnauthorized, wantCalls: []int{1, 1}, + }, + { + name: "empty principal is rejected", + auths: []*mockRequestAuthenticator{{result: &ext.Authentication{PrincipalID: " ", UserPath: "/users/one"}}}, + wantStatus: http.StatusUnauthorized, wantCalls: []int{1}, wantExtensionFailure: true, + }, + { + name: "invalid user path is rejected", + auths: []*mockRequestAuthenticator{{result: &ext.Authentication{PrincipalID: "principal-1", UserPath: "/users/../admin"}}}, + wantStatus: http.StatusUnauthorized, wantCalls: []int{1}, wantExtensionFailure: true, + }, + { + name: "identity without dashboard access is forbidden", + auths: []*mockRequestAuthenticator{{result: &ext.Authentication{PrincipalID: "principal-1", UserPath: "/users/one"}}}, + adminGate: true, wantStatus: http.StatusForbidden, wantCalls: []int{1}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + authenticators := make([]ext.RequestAuthenticator, len(tt.auths)) + for i, authenticator := range tt.auths { + authenticators[i] = authenticator + } + next := echo.HandlerFunc(func(c *echo.Context) error { return c.NoContent(http.StatusNoContent) }) + if tt.adminGate { + next = AdminAccessMiddleware()(next) + } + handler := AuthMiddlewareWithRequestAuthenticators("", nil, authenticators, nil)(next) + + e := echo.New() + req := httptest.NewRequest(http.MethodGet, "/admin/auth-keys", nil) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + entry := &auditlog.LogEntry{Data: &auditlog.LogData{}} + c.Set(string(auditlog.LogEntryKey), entry) + require.NoError(t, handler(c)) + assert.Equal(t, tt.wantStatus, rec.Code) + for i, wantCalls := range tt.wantCalls { + assert.Equal(t, wantCalls, tt.auths[i].calls) + } + assert.NotContains(t, rec.Body.String(), "super-secret") + assert.NotContains(t, entry.Data.ErrorMessage, "super-secret") + if tt.wantExtensionFailure { + assert.Equal(t, "authentication failed", entry.Data.ErrorMessage) + assert.Equal(t, "extension_authentication_failed", entry.Data.ErrorCode) + } + if tt.adminGate { + assert.Equal(t, auditlog.AuthMethodExtension, entry.AuthMethod) + } + }) + } +} + func TestAuthMiddlewareExplicitBearerPrecedesRequestAuthenticator(t *testing.T) { requestAuth := &mockRequestAuthenticator{result: &ext.Authentication{ PrincipalID: "oidc:principal-1", UserPath: "/users/sso", DashboardAccess: true, diff --git a/internal/server/http.go b/internal/server/http.go index 25e9cd1cb..048691032 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -244,7 +244,7 @@ func New(provider core.RoutableProvider, cfg *Config) *Server { } // When no bootstrap master key is configured, keep admin APIs reachable so // the dashboard can recover managed-key access instead of locking itself out. - if cfg != nil && cfg.MasterKey == "" && cfg.AdminEndpointsEnabled && cfg.AdminHandler != nil { + if cfg != nil && cfg.MasterKey == "" && len(cfg.RequestAuthenticators) == 0 && cfg.AdminEndpointsEnabled && cfg.AdminHandler != nil { authSkipPaths = append(authSkipPaths, "/admin/*") } if cfg != nil && cfg.SwaggerEnabled && SwaggerAvailable() { From 63a59afa666d6451cef24f4a15d3e80e8b919dc6 Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Fri, 7 Aug 2026 01:03:48 +0200 Subject: [PATCH 03/10] fix(ext): ignore nil request authenticators --- internal/server/admin_access_test.go | 13 +++++++++++++ internal/server/auth.go | 28 ++++++++++++++++++++++++++-- internal/server/auth_test.go | 22 ++++++++++++++++++++++ internal/server/http.go | 4 ++-- 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/internal/server/admin_access_test.go b/internal/server/admin_access_test.go index 681bb934b..0beef81c4 100644 --- a/internal/server/admin_access_test.go +++ b/internal/server/admin_access_test.go @@ -136,3 +136,16 @@ func TestAdminGate_RequestAuthenticatorDisablesAnonymousRecoveryBypass(t *testin }) } } + +func TestAdminGate_NilRequestAuthenticatorsKeepRecoveryBypass(t *testing.T) { + var typedNil *mockRequestAuthenticator + for _, authenticators := range [][]ext.RequestAuthenticator{{nil}, {typedNil}} { + srv := New(&mockProvider{}, &Config{ + AdminEndpointsEnabled: true, + AdminHandler: admin.NewHandler(nil, nil), + RequestAuthenticators: authenticators, + }) + status, _ := adminGateStatus(t, srv, "/admin/auth-keys", "") + assert.Equal(t, http.StatusServiceUnavailable, status) + } +} diff --git a/internal/server/auth.go b/internal/server/auth.go index b5ed27f19..129b2744d 100644 --- a/internal/server/auth.go +++ b/internal/server/auth.go @@ -5,6 +5,7 @@ import ( "crypto/subtle" "errors" "net/http" + "reflect" "strings" "github.com/labstack/echo/v5" @@ -35,10 +36,11 @@ func AuthMiddlewareWithAuthenticator(masterKey string, authenticator BearerToken // take precedence over ambient request credentials such as cookies. func AuthMiddlewareWithRequestAuthenticators(masterKey string, authenticator BearerTokenAuthenticator, requestAuthenticators []ext.RequestAuthenticator, skipPaths []string, userPathHeader ...string) echo.MiddlewareFunc { userPathHeaderName := configuredUserPathHeaderName(userPathHeader...) + hasRequestAuthenticator := hasRequestAuthenticators(requestAuthenticators) return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c *echo.Context) error { // If no auth mechanism is configured, allow all requests. - if masterKey == "" && (authenticator == nil || !authenticator.Enabled()) && len(requestAuthenticators) == 0 { + if masterKey == "" && (authenticator == nil || !authenticator.Enabled()) && !hasRequestAuthenticator { auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodNoKey) setInteractionContinuationAllowed(c, true) return next(c) @@ -92,7 +94,7 @@ func AuthMiddlewareWithRequestAuthenticators(masterKey string, authenticator Bea } for _, requestAuthenticator := range requestAuthenticators { - if requestAuthenticator == nil { + if requestAuthenticatorIsNil(requestAuthenticator) { continue } result, err := requestAuthenticator.AuthenticateRequest(c.Request().Context(), c.Request()) @@ -114,6 +116,28 @@ func AuthMiddlewareWithRequestAuthenticators(masterKey string, authenticator Bea } } +func hasRequestAuthenticators(authenticators []ext.RequestAuthenticator) bool { + for _, authenticator := range authenticators { + if !requestAuthenticatorIsNil(authenticator) { + return true + } + } + return false +} + +func requestAuthenticatorIsNil(authenticator ext.RequestAuthenticator) bool { + if authenticator == nil { + return true + } + value := reflect.ValueOf(authenticator) + switch value.Kind() { + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice: + return value.IsNil() + default: + return false + } +} + func applyExtensionAuthResult(c *echo.Context, result *ext.Authentication, userPathHeaderName string) error { if result == nil { return errors.New("extension authenticator returned no identity") diff --git a/internal/server/auth_test.go b/internal/server/auth_test.go index e0384e30f..f2522f9c6 100644 --- a/internal/server/auth_test.go +++ b/internal/server/auth_test.go @@ -378,6 +378,28 @@ func TestAuthMiddlewareWithRequestAuthenticatorsFailurePaths(t *testing.T) { } } +func TestAuthMiddlewareWithOnlyNilRequestAuthenticatorsStaysDisabled(t *testing.T) { + var typedNil *mockRequestAuthenticator + tests := []struct { + name string + auths []ext.RequestAuthenticator + }{ + {name: "nil interface", auths: []ext.RequestAuthenticator{nil}}, + {name: "typed nil pointer", auths: []ext.RequestAuthenticator{typedNil}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + handler := AuthMiddlewareWithRequestAuthenticators("", nil, tt.auths, nil)(func(c *echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + e := echo.New() + rec := httptest.NewRecorder() + require.NoError(t, handler(e.NewContext(httptest.NewRequest(http.MethodGet, "/", nil), rec))) + assert.Equal(t, http.StatusNoContent, rec.Code) + }) + } +} + func TestAuthMiddlewareExplicitBearerPrecedesRequestAuthenticator(t *testing.T) { requestAuth := &mockRequestAuthenticator{result: &ext.Authentication{ PrincipalID: "oidc:principal-1", UserPath: "/users/sso", DashboardAccess: true, diff --git a/internal/server/http.go b/internal/server/http.go index 048691032..208a78543 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -244,7 +244,7 @@ func New(provider core.RoutableProvider, cfg *Config) *Server { } // When no bootstrap master key is configured, keep admin APIs reachable so // the dashboard can recover managed-key access instead of locking itself out. - if cfg != nil && cfg.MasterKey == "" && len(cfg.RequestAuthenticators) == 0 && cfg.AdminEndpointsEnabled && cfg.AdminHandler != nil { + if cfg != nil && cfg.MasterKey == "" && !hasRequestAuthenticators(cfg.RequestAuthenticators) && cfg.AdminEndpointsEnabled && cfg.AdminHandler != nil { authSkipPaths = append(authSkipPaths, "/admin/*") } if cfg != nil && cfg.SwaggerEnabled && SwaggerAvailable() { @@ -350,7 +350,7 @@ func New(provider core.RoutableProvider, cfg *Config) *Server { // Authentication (skips public paths) // Register by authenticator presence; its Enabled state can change at runtime. - authMiddlewareRegistered := cfg != nil && (cfg.MasterKey != "" || cfg.Authenticator != nil || len(cfg.RequestAuthenticators) > 0) + authMiddlewareRegistered := cfg != nil && (cfg.MasterKey != "" || cfg.Authenticator != nil || hasRequestAuthenticators(cfg.RequestAuthenticators)) if authMiddlewareRegistered { e.Use(AuthMiddlewareWithRequestAuthenticators(cfg.MasterKey, cfg.Authenticator, cfg.RequestAuthenticators, authSkipPaths, userPathHeaderName)) } From 55f9a3ea9c93efadeeab4ecbfbad267dc771ff4b Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Fri, 7 Aug 2026 11:00:12 +0200 Subject: [PATCH 04/10] test(ext): cover authentication context helpers --- config/config_test.go | 14 +++++++ ext/auth_test.go | 40 +++++++++++++++++++ .../auditlog/middleware_auth_method_test.go | 22 ++++++++++ 3 files changed, 76 insertions(+) create mode 100644 ext/auth_test.go diff --git a/config/config_test.go b/config/config_test.go index 747574e04..6dce267c4 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -285,6 +285,20 @@ func TestDecodeExtensionStrictlyDecodesOpaqueConfig(t *testing.T) { } } +func TestDecodeExtensionHandlesAbsentConfiguration(t *testing.T) { + var nilResult *LoadResult + if found, err := nilResult.DecodeExtension("sso", &struct{}{}); err != nil || found { + t.Fatalf("nil result: found=%v err=%v", found, err) + } + result := &LoadResult{Config: &Config{}} + if found, err := result.DecodeExtension("sso", &struct{}{}); err != nil || found { + t.Fatalf("missing extension: found=%v err=%v", found, err) + } + if found, err := result.DecodeExtension("sso", nil); err != nil || found { + t.Fatalf("nil target: found=%v err=%v", found, err) + } +} + func TestLoadPreservesOpaqueExtensionConfiguration(t *testing.T) { clearAllConfigEnvVars(t) withTempDir(t, func(dir string) { diff --git a/ext/auth_test.go b/ext/auth_test.go new file mode 100644 index 000000000..98922d5d8 --- /dev/null +++ b/ext/auth_test.go @@ -0,0 +1,40 @@ +package ext + +import ( + "context" + "testing" +) + +func TestAuthenticationContextRoundTripClonesLabels(t *testing.T) { + authentication := Authentication{ + PrincipalID: "oidc:principal-1", + UserPath: "/users/one", + Labels: []string{"team-a"}, + Method: "oidc", + } + ctx := WithAuthentication(t.Context(), authentication) + authentication.Labels[0] = "mutated-source" + + got, ok := AuthenticationFromContext(ctx) + if !ok { + t.Fatal("authentication missing from context") + } + if got.PrincipalID != "oidc:principal-1" || got.Labels[0] != "team-a" { + t.Fatalf("authentication = %+v", got) + } + got.Labels[0] = "mutated-result" + + again, ok := AuthenticationFromContext(ctx) + if !ok || again.Labels[0] != "team-a" { + t.Fatalf("stored authentication was mutated: %+v", again) + } +} + +func TestAuthenticationFromContextHandlesMissingContext(t *testing.T) { + if _, ok := AuthenticationFromContext(nil); ok { //nolint:staticcheck // Exercise the helper's defensive nil-context branch. + t.Fatal("nil context returned an authentication") + } + if _, ok := AuthenticationFromContext(context.Background()); ok { + t.Fatal("empty context returned an authentication") + } +} diff --git a/internal/auditlog/middleware_auth_method_test.go b/internal/auditlog/middleware_auth_method_test.go index 89d8a48f6..0b650f841 100644 --- a/internal/auditlog/middleware_auth_method_test.go +++ b/internal/auditlog/middleware_auth_method_test.go @@ -66,3 +66,25 @@ func TestEnrichEntryWithAuthMethodIgnoresBlankAndUnsafeValues(t *testing.T) { t.Fatalf("entry auth method = %q, want empty", entry.AuthMethod) } } + +func TestEnrichEntryWithPrincipalIDTrimsAndPreservesExistingValue(t *testing.T) { + e := echo.New() + req := httptest.NewRequest(http.MethodGet, "/", nil) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + entry := &LogEntry{PrincipalID: "existing"} + c.Set(string(LogEntryKey), entry) + + EnrichEntryWithPrincipalID(c, " ") + if entry.PrincipalID != "existing" { + t.Fatalf("blank principal replaced existing value with %q", entry.PrincipalID) + } + + EnrichEntryWithPrincipalID(c, " oidc:principal-1 ") + if entry.PrincipalID != "oidc:principal-1" { + t.Fatalf("principal ID = %q, want oidc:principal-1", entry.PrincipalID) + } + + withoutEntry := e.NewContext(req, httptest.NewRecorder()) + EnrichEntryWithPrincipalID(withoutEntry, "ignored") +} From 43a59951361feebe4c9ddfd86d9697a32f57866c Mon Sep 17 00:00:00 2001 From: "Jakub A. W" Date: Fri, 7 Aug 2026 13:28:13 +0200 Subject: [PATCH 05/10] feat(ext): complete browser authentication lifecycle --- ext/auth.go | 42 ++++++++++ .../static/dist/assets/index-BFUCi3g4.js | 67 ---------------- .../static/dist/assets/index-CT5lg2co.css | 1 + .../static/dist/assets/index-Cz8GQupq.css | 1 - .../static/dist/assets/index-nQCIlv1m.js | 67 ++++++++++++++++ .../admin/dashboard/static/dist/index.html | 4 +- internal/app/app.go | 51 +++++++++++- internal/app/app_test.go | 62 +++++++++++++++ internal/auditlog/auditlog.go | 3 + internal/auditlog/authentication_events.go | 77 +++++++++++++++++++ .../auditlog/authentication_events_test.go | 41 ++++++++++ internal/auditlog/stream_wrapper.go | 1 + web/dashboard/src/lib/api/client.js | 1 + .../components/organisms/AuthDialog.svelte | 34 +++++++- .../lib/components/organisms/Sidebar.svelte | 52 ++++++++++++- web/dashboard/src/lib/stores/auth.svelte.js | 20 +++++ web/dashboard/src/lib/stores/external-auth.js | 28 +++++++ web/dashboard/tests/external-auth.test.js | 29 +++++++ 18 files changed, 508 insertions(+), 73 deletions(-) delete mode 100644 internal/admin/dashboard/static/dist/assets/index-BFUCi3g4.js create mode 100644 internal/admin/dashboard/static/dist/assets/index-CT5lg2co.css delete mode 100644 internal/admin/dashboard/static/dist/assets/index-Cz8GQupq.css create mode 100644 internal/admin/dashboard/static/dist/assets/index-nQCIlv1m.js create mode 100644 internal/auditlog/authentication_events.go create mode 100644 internal/auditlog/authentication_events_test.go create mode 100644 web/dashboard/src/lib/stores/external-auth.js create mode 100644 web/dashboard/tests/external-auth.test.js diff --git a/ext/auth.go b/ext/auth.go index 907c1590e..bea44c895 100644 --- a/ext/auth.go +++ b/ext/auth.go @@ -4,10 +4,20 @@ import ( "context" "net/http" "slices" + "time" ) type authenticationContextKey struct{} +// Provider-neutral response headers let the bundled dashboard discover an +// extension-managed browser authentication flow without knowing whether the +// provider uses OIDC, SAML, or another protocol. Values are app-local paths. +const ( + AuthenticationLoginHeader = "X-GoModel-Auth-Login" + AuthenticationLogoutHeader = "X-GoModel-Auth-Logout" + AuthenticationUserHeader = "X-GoModel-Auth-User" +) + // Authentication describes an identity established by an extension. // PrincipalID must be a stable, non-secret identifier within the // authenticator's namespace. UserPath is the existing GoModel authorization @@ -33,6 +43,38 @@ type RequestAuthenticator interface { AuthenticateRequest(ctx context.Context, request *http.Request) (*Authentication, error) } +// AuthenticationEvent is a security-audit record emitted by an extension +// authentication flow. Reason must be a short, stable machine identifier; it +// must not contain provider responses, tokens, claims, or other secrets. +type AuthenticationEvent struct { + Timestamp time.Time + Type string + Outcome string + Method string + PrincipalID string + UserPath string + RequestID string + ClientIP string + HTTPMethod string + Path string + UserAgent string + Reason string +} + +// AuthenticationEventRecorder persists authentication lifecycle events in +// Core's audit trail. Implementations must be safe for concurrent use and +// must not block the authentication flow on durable storage I/O. +type AuthenticationEventRecorder interface { + RecordAuthenticationEvent(AuthenticationEvent) +} + +// AuthenticationEventRecorderAware is optionally implemented by a request +// authenticator that emits login, rejection, and logout lifecycle events. +// Core installs the recorder after its audit subsystem has initialized. +type AuthenticationEventRecorderAware interface { + SetAuthenticationEventRecorder(AuthenticationEventRecorder) +} + // WithAuthentication attaches an extension-established identity to a request // context. Core calls this after accepting an authenticator result. func WithAuthentication(ctx context.Context, authentication Authentication) context.Context { diff --git a/internal/admin/dashboard/static/dist/assets/index-BFUCi3g4.js b/internal/admin/dashboard/static/dist/assets/index-BFUCi3g4.js deleted file mode 100644 index 7499c6367..000000000 --- a/internal/admin/dashboard/static/dist/assets/index-BFUCi3g4.js +++ /dev/null @@ -1,67 +0,0 @@ -(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Array.isArray,t=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,s=Object.prototype,c=Array.prototype,l=Object.getPrototypeOf,u=Object.isExtensible;function d(e){return typeof e==`function`}var f=()=>{};function p(e){for(var t=0;t{e=n,t=r}),resolve:e,reject:t}}function h(e,t,n=!1){return e===void 0?n?t():t:e}function g(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);let n=[];for(let r of e)if(n.push(r),n.length===t)break;return n}var _=1<<24,v=1024,y=2048,b=4096,x=8192,S=16384,C=32768,w=1<<25,ee=65536,te=1<<19,ne=1<<20,re=1<<25,ie=65536,ae=1<<21,oe=1<<22,se=1<<23,ce=Symbol(`$state`),le=Symbol(`legacy props`),ue=Symbol(``),de=Symbol(`attributes`),fe=Symbol(`class`),pe=Symbol(`style`),me=Symbol(`text`),he=Symbol(`form reset`),ge=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},_e=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function ve(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function ye(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function be(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function xe(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function Se(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function Ce(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function we(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function Te(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Ee(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function De(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function Oe(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var ke={},Ae=Symbol(`uninitialized`),je=`http://www.w3.org/1999/xhtml`,Me=`http://www.w3.org/2000/svg`,Ne=`http://www.w3.org/1998/Math/MathML`;function Pe(){console.warn(`https://svelte.dev/e/derived_inert`)}function Fe(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Ie(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function Le(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var Re=!1;function ze(e){Re=e}var Be;function Ve(e){if(e===null)throw Fe(),ke;return Be=e}function He(){return Ve(bn(Be))}function T(e){if(Re){if(bn(Be)!==null)throw Fe(),ke;Be=e}}function Ue(e=1){if(Re){for(var t=e,n=Be;t--;)n=bn(n);Be=n}}function We(e=!0){for(var t=0,n=Be;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else(r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=bn(n);e&&n.remove(),n=i}}function Ge(e){if(!e||e.nodeType!==8)throw Fe(),ke;return e.data}function Ke(e){return e===this.v}function qe(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function Je(e){return!qe(e,this.v)}var Ye=null;function Xe(e){Ye=e}function E(e,t=!1,n){Ye={p:Ye,i:!1,c:null,e:null,s:e,x:null,r:ir,l:null}}function D(e){var t=Ye,n=t.e;if(n!==null){t.e=null;for(var r of n)jn(r)}return e!==void 0&&(t.x=e),t.i=!0,Ye=t.p,e??{}}function Ze(){return!0}var Qe=[];function $e(){var e=Qe;Qe=[],p(e)}function et(e){if(Qe.length===0&&!zt){var t=Qe;queueMicrotask(()=>{t===Qe&&$e()})}Qe.push(e)}function tt(){for(;Qe.length>0;)$e()}function nt(e){var t=ir;if(t===null)return tr.f|=se,e;if(!(t.f&32768)&&!(t.f&4))throw e;rt(e,t)}function rt(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var it=~(y|b|v);function at(e,t){e.f=e.f&it|t}function ot(e){e.f&512||e.deps===null?at(e,v):at(e,b)}function st(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=ie,st(t.deps))}function ct(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),st(e.deps),at(e,v)}var lt=!1;function ut(e){var t=lt;try{return lt=!1,[e(),lt]}finally{lt=t}}function dt(e,t){if(t){let t=document.body;e.autofocus=!0,et(()=>{document.activeElement===t&&e.focus()})}}function ft(e){Re&&yn(e)!==null&&xn(e)}var pt=!1;function mt(){pt||(pt=!0,document.addEventListener(`reset`,e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(let t of e.target.elements)t[he]?.()})},{capture:!0}))}function ht(e){var t=tr,n=ir;rr(null),ar(null);try{return e()}finally{rr(t),ar(n)}}function gt(e,t,n,r=n){e.addEventListener(t,()=>ht(n));let i=e[he];i?e[he]=()=>{i(),r(!0)}:e[he]=()=>r(!0),mt()}function _t(e){let t=0,n=an(0),r;return()=>{On()&&(I(n),In(()=>(t===0&&(r=Er(()=>e(()=>ln(n)))),t+=1,()=>{et(()=>{--t,t===0&&(r?.(),r=void 0,ln(n))})})))}}var vt=ee|te;function yt(e,t,n,r){new bt(e,t,n,r)}var bt=class{parent;is_pending=!1;transform_error;#e;#t=Re?Be:null;#n;#r;#i;#a=null;#o=null;#s=null;#c=null;#l=0;#u=0;#d=!1;#f=new Set;#p=new Set;#m=null;#h=_t(()=>(this.#m=an(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=ir;t.b=this,t.f|=128,n(e)},this.parent=ir.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=Ln(()=>{if(Re){let e=this.#t;He();let t=e.data===`[!`;if(e.data.startsWith(`[?`)){let t=JSON.parse(e.data.slice(2));this.#_(t)}else t?this.#v():this.#g()}else this.#y()},vt),Re&&(this.#e=Be)}#g(){try{this.#a=zn(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=zn(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=zn(()=>e(this.#e)),et(()=>{var e=this.#c=document.createDocumentFragment(),t=vn();e.append(t),this.#a=this.#x(()=>zn(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,Kn(this.#o,()=>{this.#o=null}),this.#b(Ft))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=zn(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();Xn(this.#a,e);let t=this.#n.pending;this.#o=zn(()=>t(this.#e))}else this.#b(Ft)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){ct(e,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#n.pending}#x(e){var t=ir,n=tr,r=Ye;ar(this.#i),rr(this.#i),Xe(this.#i.ctx);try{return Gt.ensure(),e()}catch(e){return nt(e),null}finally{ar(t),rr(n),Xe(r)}}#S(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#S(e,t);return}this.#u+=e,this.#u===0&&(this.#b(t),this.#o&&Kn(this.#o,()=>{this.#o=null}),this.#c&&=(this.#e.before(this.#c),null))}update_pending_count(e,t){this.#S(e,t),this.#l+=e,!(!this.#m||this.#d)&&(this.#d=!0,et(()=>{this.#d=!1,this.#m&&sn(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),I(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;Ft?.is_fork?(this.#a&&Ft.skip_effect(this.#a),this.#o&&Ft.skip_effect(this.#o),this.#s&&Ft.skip_effect(this.#s),Ft.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(Un(this.#a),null),this.#o&&=(Un(this.#o),null),this.#s&&=(Un(this.#s),null),Re&&(Ve(this.#t),Ue(),Ve(We()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){Le();return}r=!0,i&&Oe(),this.#s!==null&&Kn(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){rt(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return zn(()=>{var t=ir;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return rt(e,this.#i.parent),null}}))};et(()=>{var t;try{t=this.transform_error(e)}catch(e){rt(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>rt(e,this.#i&&this.#i.parent)):o(t)})}};function xt(e,t,n,r){let i=Ze()?Tt:Ot;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=ir,c=St(),l=a.length===1?a[0].promise:a.length>1?Promise.all(a.map(e=>e.promise)):null;function u(e){if(!(s.f&16384)){c();try{r([...o,...e])}catch(e){rt(e,s)}Ct()}}var d=wt();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>Dt(e))).then(u).catch(e=>rt(e,s)).finally(d)}l?l.then(()=>{c(),f(),Ct()}):f()}function St(){var e=ir,t=tr,n=Ye,r=Ft;return function(i=!0){ar(e),rr(t),Xe(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function Ct(e=!0){ar(null),rr(null),Xe(null),e&&Ft?.deactivate()}function wt(){var e=ir,t=e.b,n=Ft,r=!!t?.is_rendered();return t?.update_pending_count(1,n),n.increment(r,e),()=>{t?.update_pending_count(-1,n),n.decrement(r,e)}}function Tt(e){var t=2|y;return ir!==null&&(ir.f|=te),{ctx:Ye,deps:null,effects:null,equals:Ke,f:t,fn:e,reactions:null,rv:0,v:Ae,wv:0,parent:ir,ac:null}}var Et=Symbol(`obsolete`);function Dt(e,t,n){let r=ir;r===null&&ve();var i=void 0,a=an(Ae),o=!tr,s=new Set;return Fn(()=>{var t=ir,n=m();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==ge&&n.reject(e)}).finally(Ct)}catch(e){n.reject(e),Ct()}var c=Ft;if(o){if(t.f&32768)var l=wt();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(Et);else for(let e of s.values())e.reject(Et);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==Et&&(c.activate(),t?(a.f|=se,sn(a,t)):(a.f&8388608&&(a.f^=se),sn(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),kn(()=>{for(let e of s)e.reject(Et)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function O(e){let t=Tt(e);return sr(t),t}function Ot(e){let t=Tt(e);return t.equals=Je,t}function kt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n{t.ac.abort(ge),t.ac=null}),t.fn!==null&&(t.teardown=f),xr(t,0),Vn(t))}function Nt(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&Sr(t)}var Pt=null,Ft=null,It=null,Lt=null,Rt=null,zt=!1,Bt=!1,Vt=null,Ht=null,Ut=0,Wt=1,Gt=class e{id=Wt++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;#r=new Set;#i=new Set;#a=0;#o=new Map;#s=null;#c=[];#l=[];#u=new Set;#d=new Set;#f=new Map;#p=new Set;is_fork=!1;#m=!1;constructor(){Pt===null?Pt=this:(Pt.#n=this,this.#t=Pt),Pt=this}#h(){if(this.is_fork)return!0;for(let n of this.#o.keys()){for(var e=n,t=!1;e.parent!==null;){if(this.#f.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#f.get(e);if(n){this.#f.delete(e);for(var r of n.d)at(r,y),t(r);for(r of n.m)at(r,b),t(r)}this.#p.add(e)}#g(){this.#e=!0,Ut++>1e3&&(this.#x(),qt());for(let e of this.#u)this.#d.delete(e),at(e,y),this.schedule(e);for(let e of this.#d)at(e,b),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=Vt=[],r=[],i=Ht=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw en(e),this.#h()||this.discard(),t}if(Ft=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(Vt=null,Ht=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)$t(e,t);i.length>0&&Ft.#g();return}let o=this.#v();if(o){this.#b(r),this.#b(n),o.#y(this);return}this.#u.clear(),this.#d.clear();for(let e of this.#r)e(this);this.#r.clear(),It=this,Yt(r),Yt(n),It=null,this.#s?.resolve();var s=Ft;if(this.#a===0&&(this.#c.length===0||s!==null)&&this.#x(),this.#c.length>0)if(s!==null){let e=s;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}else s=this;s!==null&&s.#g()}#_(e,t,n){e.f^=v;for(var r=e.first;r!==null;){var i=r.f,a=(i&96)!=0;if(!(a&&i&1024||i&8192||this.#f.has(r))&&r.fn!==null){a?r.f^=v:i&4?t.push(r):_r(r)&&(i&16&&this.#d.add(r),Sr(r));var o=r.first;if(o!==null){r=o;continue}}for(;r!==null;){var s=r.next;if(s!==null){r=s;break}r=r.parent}}}#v(){for(var e=this.#t;e!==null;){if(!e.is_fork){for(let[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e}e=e.#t}return null}#y(e){for(let[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(let[t,n]of e.async_deriveds){let e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve).catch(e.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#u,e.#d);let t=e=>{var n=e.reactions;if(n!==null&&!(e.f&2&&!(e.f&6144)))for(let e of n){var r=e.f;if(r&2)t(e);else{var i=e;r&4194320&&!this.async_deriveds.has(i)&&(this.#d.delete(i),at(i,y),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#x(),Ft=this,this.#g()}#b(e){for(var t=0;t{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(let t of e)this.#u.add(t);for(let e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}settled(){return(this.#s??=m()).promise}static ensure(){if(Ft===null){let t=Ft=new e;!Bt&&!zt&&et(()=>{t.#e||t.flush()})}return Ft}apply(){Lt=null}schedule(e){if(Rt=e,e.b?.is_pending&&e.f&16777228&&!(e.f&32768)){e.b.defer_effect(e);return}for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(Vt!==null&&t===ir&&(tr===null||!(tr.f&2)))return;if(n&96){if(!(n&1024))return;t.f^=v}}this.#c.push(t)}#x(){if(this.linked){var e=this.#t,t=this.#n;e===null||(e.#n=t),t===null?Pt=e:t.#t=e,this.linked=!1}}};function Kt(e){var t=zt;zt=!0;try{var n;for(e&&(Ft!==null&&!Ft.is_fork&&Ft.flush(),n=e());;){if(tt(),Ft===null)return n;Ft.flush()}}finally{zt=t}}function qt(){try{Ce()}catch(e){rt(e,Rt)}}var Jt=null;function Yt(e){var t=e.length;if(t!==0){for(var n=0;n0)){nn.clear();for(let e of Jt){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)Jt.has(n)&&(Jt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||Sr(n)}}Jt.clear()}}Jt=null}}function Xt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(let i of e.reactions){let e=i.f;e&2?Xt(i,t,n,r):e&4194320&&!(e&2048)&&Zt(i,t,r)&&(at(i,y),Qt(i))}}function Zt(e,t,r){let i=r.get(e);if(i!==void 0)return i;if(e.deps!==null)for(let i of e.deps){if(n.call(t,i))return!0;if(i.f&2&&Zt(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function Qt(e){Ft.schedule(e)}function $t(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),at(e,v);for(var n=e.first;n!==null;)$t(n,t),n=n.next}}function en(e){at(e,v);for(var t=e.first;t!==null;)en(t),t=t.next}var tn=new Set,nn=new Map,rn=!1;function an(e,t){return{f:0,v:e,reactions:null,equals:Ke,rv:0,wv:0}}function k(e,t){let n=an(e,t);return sr(n),n}function on(e,t=!1,n=!0){let r=an(e);return t||(r.equals=Je),r}function A(e,t,n=!1){return tr!==null&&(!nr||tr.f&131072)&&Ze()&&tr.f&4325394&&(or===null||!or.has(e))&&De(),sn(e,n?j(t):t,Ht)}function sn(e,t,n=null){if(!e.equals(t)){nn.set(e,$n?t:e.v);var r=Gt.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&At(t),Lt===null&&ot(t)}e.wv=gr(),un(e,y,n),Ze()&&ir!==null&&ir.f&1024&&!(ir.f&96)&&(ur===null?dr([e]):ur.push(e)),!r.is_fork&&tn.size>0&&!rn&&cn()}return t}function cn(){rn=!1;for(let e of tn){e.f&1024&&at(e,b);let t;try{t=_r(e)}catch{t=!0}t&&Sr(e)}tn.clear()}function ln(e){A(e,e.v+1)}function un(e,t,n){var r=e.reactions;if(r!==null)for(var i=Ze(),a=r.length,o=0;o{if(mr===d)return e();var t=tr,n=mr;rr(null),hr(d);var r=e();return rr(t),hr(n),r};return i&&r.set(`length`,k(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&Te();var i=r.get(t);return i===void 0?f(()=>{var e=k(n.value,u);return r.set(t,e),e}):A(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>k(Ae,u));r.set(t,e),ln(o)}}else A(n,Ae),ln(o);return!0},get(e,n,i){if(n===ce)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>k(j(s?e[n]:Ae),u)),r.set(n,o)),o!==void 0){var c=I(o);return c===Ae?void 0:c}return Reflect.get(e,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&`value`in n){var i=r.get(t);i&&(n.value=I(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==Ae)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===ce)return!0;var n=r.get(t),i=n!==void 0&&n.v!==Ae||Reflect.has(e,t);return(n!==void 0||ir!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>k(i?j(e[t]):Ae,u)),r.set(t,n)),I(n)===Ae)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;dk(Ae,u)),r.set(d+``,p)):A(p,Ae)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>k(void 0,u)),A(c,j(n)),r.set(t,c));else{l=c.v!==Ae;var m=f(()=>j(n));A(c,m)}var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(s,n),!l){if(i&&typeof t==`string`){var g=r.get(`length`),_=Number(t);Number.isInteger(_)&&_>=g.v&&A(g,_+1)}ln(o)}return!0},ownKeys(e){I(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==Ae});for(var[n,i]of r)i.v!==Ae&&!(n in e)&&t.push(n);return t},setPrototypeOf(){Ee()}})}function dn(e){try{if(typeof e==`object`&&e&&ce in e)return e[ce]}catch{}return e}function fn(e,t){return Object.is(dn(e),dn(t))}var pn,mn,hn,gn;function _n(){if(pn===void 0){pn=window,mn=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;hn=a(t,`firstChild`).get,gn=a(t,`nextSibling`).get,u(e)&&(e[fe]=void 0,e[de]=null,e[pe]=void 0,e.__e=void 0),u(n)&&(n[me]=void 0)}}function vn(e=``){return document.createTextNode(e)}function yn(e){return hn.call(e)}function bn(e){return gn.call(e)}function M(e,t){if(!Re)return yn(e);var n=yn(Be);if(n===null)n=Be.appendChild(vn());else if(t&&n.nodeType!==3){var r=vn();return n?.before(r),Ve(r),r}return t&&wn(n),Ve(n),n}function N(e,t=!1){if(!Re){var n=yn(e);return n instanceof Comment&&n.data===``?bn(n):n}if(t){if(Be?.nodeType!==3){var r=vn();return Be?.before(r),Ve(r),r}wn(Be)}return Be}function P(e,t=1,n=!1){let r=Re?Be:e;for(var i;t--;)i=r,r=bn(r);if(!Re)return r;if(n){if(r?.nodeType!==3){var a=vn();return r===null?i?.after(a):r.before(a),Ve(a),a}wn(r)}return Ve(r),r}function xn(e){e.textContent=``}function Sn(){return!1}function Cn(e,t,n){return t==null||t===`http://www.w3.org/1999/xhtml`?n?document.createElement(e,{is:n}):document.createElement(e):n?document.createElementNS(t,e,{is:n}):document.createElementNS(t,e)}function wn(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===3;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function Tn(e){ir===null&&(tr===null&&Se(e),xe()),$n&&be(e)}function En(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function Dn(e,t){var n=ir;n!==null&&n.f&8192&&(e|=x);var r={ctx:Ye,deps:null,nodes:null,f:e|y|512,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Ft?.register_created_effect(r);var i=r;if(e&4)Vt===null?Gt.ensure().schedule(r):Vt.push(r);else if(t!==null){try{Sr(r)}catch(e){throw Un(r),e}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&!(i.f&524288)&&(i=i.first,e&16&&e&65536&&i!==null&&(i.f|=ee))}if(i!==null&&(i.parent=n,n!==null&&En(i,n),tr!==null&&tr.f&2&&!(e&64))){var a=tr;(a.effects??=[]).push(i)}return r}function On(){return tr!==null&&!nr}function kn(e){let t=Dn(8,null);return at(t,v),t.teardown=e,t}function An(e){Tn(`$effect`);var t=ir.f;if(!tr&&t&32&&Ye!==null&&!Ye.i){var n=Ye;(n.e??=[]).push(e)}else return jn(e)}function jn(e){return Dn(4|ne,e)}function Mn(e){Gt.ensure();let t=Dn(64|te,e);return()=>{Un(t)}}function Nn(e){Gt.ensure();let t=Dn(64|te,e);return(e={})=>new Promise(n=>{e.outro?Kn(t,()=>{Un(t),n(void 0)}):(Un(t),n(void 0))})}function Pn(e){return Dn(4,e)}function Fn(e){return Dn(oe|te,e)}function In(e,t=0){return Dn(8|t,e)}function F(e,t=[],n=[],r=[]){xt(r,t,n,t=>{Dn(8,()=>{e(...t.map(I))})})}function Ln(e,t=0){return Dn(16|t,e)}function Rn(e,t=0){return Dn(_|t,e)}function zn(e){return Dn(32|te,e)}function Bn(e){var t=e.teardown;if(t!==null){let e=$n,n=tr;er(!0),rr(null);try{t.call(null)}finally{er(e),rr(n)}}}function Vn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&ht(()=>{e.abort(ge)});var r=n.next;n.f&64?n.parent=null:Un(n,t),n=r}}function Hn(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||Un(t),t=n}}function Un(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(Wn(e.nodes.start,e.nodes.end),n=!0),e.f|=w,Vn(e,t&&!n),xr(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();Bn(e),e.f^=w,e.f|=S;var i=e.parent;i!==null&&i.first!==null&&Gn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Wn(e,t){for(;e!==null;){var n=e===t?null:bn(e);e.remove(),e=n}}function Gn(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Kn(e,t,n=!0){var r=[];qn(e,r,!0);var i=()=>{n&&Un(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function qn(e,t,n){if(!(e.f&8192)){e.f^=x;var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;i!==null;){var a=i.next;if(!(i.f&64)){var o=(i.f&65536)!=0||(i.f&32)!=0&&(e.f&16)!=0;qn(i,t,o?n:!1)}i=a}}}function Jn(e){Yn(e,!0)}function Yn(e,t){if(e.f&8192){e.f^=x,e.f&1024||(at(e,y),Gt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;Yn(n,i?t:!1),n=r}var a=e.nodes&&e.nodes.t;if(a!==null)for(let e of a)(e.is_global||t)&&e.in()}}function Xn(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:bn(n);t.append(n),n=i}}var Zn=null,Qn=!1,$n=!1;function er(e){$n=e}var tr=null,nr=!1;function rr(e){tr=e}var ir=null;function ar(e){ir=e}var or=null;function sr(e){tr!==null&&(or??=new Set).add(e)}var cr=null,lr=0,ur=null;function dr(e){ur=e}var fr=1,pr=0,mr=pr;function hr(e){mr=e}function gr(){return++fr}function _r(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~ie),t&4096){for(var n=e.deps,r=n.length,i=0;ie.wv)return!0}t&512&&Lt===null&&at(e,v)}return!1}function vr(e,t,n=!0){var r=e.reactions;if(r!==null&&!(or!==null&&or.has(e)))for(var i=0;i{e.ac.abort(ge)}),e.ac=null);try{e.f|=ae;var u=e.fn,d=u();e.f|=C;var f=e.deps,p=Ft?.is_fork;if(cr!==null){var m;if(p||xr(e,lr),f!==null&&lr>0)for(f.length=lr+cr.length,m=0;m{s.ac.abort(ge),s.ac=null,at(s,y)}),Mt(s),xr(s,0)}}function xr(e,t){var n=e.deps;if(n!==null)for(var r=t;rn?.call(this,e))}return e.startsWith(`pointer`)||e.startsWith(`touch`)||e===`wheel`?et(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Vr(e,t,n,r,i){var a={capture:r,passive:i},o=Br(e,t,n,a);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&kn(()=>{t.removeEventListener(e,o,a)})}function L(e,t,n){(t[Lr]??={})[e]=n}function Hr(e){for(var t=0;t{throw e});throw p}}finally{e[Lr]=t,delete e.currentTarget,rr(d),ar(f)}}}var Gr=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function Kr(e){return Gr?.createHTML(e)??e}function qr(e){var t=Cn(`template`);return t.innerHTML=Kr(e.replaceAll(``,``)),t.content}function Jr(e,t){var n=ir;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function R(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(``);return()=>{if(Re)return Jr(Be,null),Be;i===void 0&&(i=qr(a?e:``+e),n||(i=yn(i)));var t=r||mn?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=yn(t),s=t.lastChild;Jr(o,s)}else Jr(t,t);return t}}function Yr(e,t,n=`svg`){var r=!e.startsWith(``),i=(t&1)!=0,a=`<${n}>${r?e:``+e}`,o;return()=>{if(Re)return Jr(Be,null),Be;if(!o){var e=yn(qr(a));if(i)for(o=document.createDocumentFragment();yn(e);)o.appendChild(yn(e));else o=yn(e)}var t=o.cloneNode(!0);if(i){var n=yn(t),r=t.lastChild;Jr(n,r)}else Jr(t,t);return t}}function Xr(e,t){return Yr(e,t,`svg`)}function Zr(e=``){if(!Re){var t=vn(e+``);return Jr(t,t),t}var n=Be;return n.nodeType===3?wn(n):(n.before(n=vn()),Ve(n)),Jr(n,n),n}function Qr(){if(Re)return Jr(Be,null),Be;var e=document.createDocumentFragment(),t=document.createComment(``),n=vn();return e.append(t,n),Jr(t,n),e}function z(e,t){if(Re){var n=ir;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=Be),He();return}e!==null&&e.before(t)}var $r=!0;function ei(e){$r=e}function B(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[me]??=e.nodeValue)&&(e[me]=n,e.nodeValue=`${n}`)}function ti(e,t){return ri(e,t)}var ni=new Map;function ri(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){_n();var l=void 0,u=Nn(()=>{var u=n??t.appendChild(vn());yt(u,{pending:()=>{}},t=>{E({});var n=Ye;if(o&&(n.c=o),a&&(i.$$events=a),Re&&Jr(t,null),$r=s,l=e(t,i)||{},$r=!0,Re&&(ir.nodes.end=Be,Be===null||Be.nodeType!==8||Be.data!==`]`))throw Fe(),ke;D()},c);var d=new Set,f=e=>{for(var n=0;n{for(var e of d)for(let n of[t,document]){var r=ni.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,Wr),r.delete(e),r.size===0&&ni.delete(n)):r.set(e,i)}zr.delete(f),u!==n&&u.parentNode?.removeChild(u)}});return ii.set(l,u),l}var ii=new WeakMap,ai=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)Jn(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(Jn(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(Un(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();Xn(r,t),t.append(vn()),this.#n.set(e,{effect:r,fragment:t})}else Un(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),Kn(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(Un(n.effect),this.#n.delete(e))};ensure(e,t){var n=Ft,r=Sn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=vn();i.append(a),this.#n.set(e,{effect:zn(()=>t(a)),fragment:i})}else this.#t.set(e,zn(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else Re&&(this.anchor=Be),this.#a(n)}};function V(e,t,n=!1){var r;Re&&(r=Be,He());var i=new ai(e),a=n?ee:0;function o(e,t){if(Re){var n=Ge(r);if(e!==parseInt(n.substring(1))){var a=We();Ve(a),i.anchor=a,ze(!1),i.ensure(e,t),ze(!0);return}}i.ensure(e,t)}Ln(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}function oi(e,t){return t}function si(e,t,n){for(var i=[],a=t.length,o,s=t.length,c=0;c{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;ci(e,r(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else--s},!1)}if(s===0){var l=i.length===0&&n!==null;if(l){var u=n,d=u.parentNode;xn(d),d.append(u),e.items.clear()}ci(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function ci(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i{var t=i();return e(t)?t:t==null?[]:r(t)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,di(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=re,pi(d,null,c)):Jn(d):Kn(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:Ln(()=>{p=I(f);var e=p.length;let t=!1;Re&&Ge(c)===`[!`!=(e===0)&&(c=We(),Ve(c),ze(!1),t=!0);for(var r=new Set,u=Ft,v=Sn(),y=0;ys(c)):(d=zn(()=>s(li??=vn())),d.f|=re)),e>r.size&&ye(``,``,``),Re&&e>0&&Ve(We()),!h)if(m.set(u,r),v){for(let[e,t]of l)r.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);t&&ze(!0),I(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,Re&&(c=Be)}function ui(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function di(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=ui(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v0){var te=i&4&&s===0?n:null;if(o){for(v=0;v{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function fi(e,t,n,r,i,a,o,s){var c=o&1?o&16?an(n):on(n,!1,!1):null,l=o&2?an(i):null;return{v:c,i:l,e:zn(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function pi(e,t,n){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,a=t&&!(t.f&33554432)?t.nodes.start:n;r!==null;){var o=bn(r);if(a.before(r),r===i)return;r=o}}function mi(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function hi(e,t,n=!1,r=!1,i=!1,a=!1){var o=e,s=``;if(n){var c=e;Re&&(o=Ve(yn(c)))}F(()=>{var e=ir;if(s===(s=t()??``)){Re&&He();return}if(n&&!Re){e.nodes=null,c.innerHTML=s,s!==``&&Jr(yn(c),c.lastChild);return}if(e.nodes!==null&&(Wn(e.nodes.start,e.nodes.end),e.nodes=null),s!==``){if(Re){for(var a=Be.data,l=He(),u=l;l!==null&&(l.nodeType!==8||l.data!==``);)u=l,l=bn(l);if(l===null)throw Fe(),ke;Jr(Be,u),o=Ve(l);return}var d=Cn(r?`svg`:i?`math`:`template`,r?Me:i?Ne:void 0);d.innerHTML=s;var f=r||i?d:d.content;if(Jr(yn(f),f.lastChild),r||i)for(;yn(f);)o.before(yn(f));else o.before(f)}})}function gi(e,t,...n){var r=new ai(e);Ln(()=>{let e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},ee)}function _i(e,t,n){var r;Re&&(r=Be,He());var i=new ai(e);Ln(()=>{var e=t()??null;if(Re&&Ge(r)===`[`!=(e!==null)){var a=We();Ve(a),i.anchor=a,ze(!1),i.ensure(e,e&&(t=>n(t,e))),ze(!0);return}i.ensure(e,e&&(t=>n(t,e)))},ee)}var vi=()=>performance.now(),yi={tick:e=>requestAnimationFrame(e),now:()=>vi(),tasks:new Set};function bi(){let e=yi.now();yi.tasks.forEach(t=>{t.c(e)||(yi.tasks.delete(t),t.f())}),yi.tasks.size!==0&&yi.tick(bi)}function xi(e){let t;return yi.tasks.size===0&&yi.tick(bi),{promise:new Promise(n=>{yi.tasks.add(t={c:e,f:n})}),abort(){yi.tasks.delete(t)}}}function Si(e,t){ht(()=>{e.dispatchEvent(new CustomEvent(t))})}function Ci(e){if(e===`float`)return`cssFloat`;if(e===`offset`)return`cssOffset`;if(e.startsWith(`--`))return e;let t=e.split(`-`);return t.length===1?t[0]:t[0]+t.slice(1).map(e=>e[0].toUpperCase()+e.slice(1)).join(``)}function wi(e){let t={},n=e.split(`;`);for(let e of n){let[n,r]=e.split(`:`);if(!n||r===void 0)break;let i=Ci(n.trim());t[i]=r.trim()}return t}var Ti=e=>e,Ei=null;function Di(e){Ei=e}function Oi(e,t,n){var r=(Ei??ir).nodes,i,a,o,s=null;r.a??={element:e,measure(){i=this.element.getBoundingClientRect()},apply(){if(o?.abort(),a=this.element.getBoundingClientRect(),i.left!==a.left||i.right!==a.right||i.top!==a.top||i.bottom!==a.bottom){let e=t()(this.element,{from:i,to:a},n?.());o=Ai(this.element,e,void 0,1,()=>{},()=>{o?.abort(),o=void 0})}},fix(){if(!e.getAnimations().length){var{position:t,width:n,height:r}=getComputedStyle(e);if(t!==`absolute`&&t!==`fixed`){var a=e.style;s={position:a.position,width:a.width,height:a.height,transform:a.transform},a.position=`absolute`,a.width=n,a.height=r;var o=e.getBoundingClientRect();if(i.left!==o.left||i.top!==o.top){var c=`translate(${i.left-o.left}px, ${i.top-o.top}px)`;a.transform=a.transform?`${a.transform} ${c}`:c}}}},unfix(){if(s){var t=e.style;t.position=s.position,t.width=s.width,t.height=s.height,t.transform=s.transform}}},r.a.element=e}function ki(e,t,n,r){var i=(e&1)!=0,a=(e&2)!=0,o=i&&a,s=(e&4)!=0,c=o?`both`:i?`in`:`out`,l,u=t.inert,d=t.style.overflow,f,p;function m(){return ht(()=>l??=n()(t,r?.()??{},{direction:c}))}var h={is_global:s,in(){if(t.inert=u,!i){p?.abort(),p?.reset?.();return}a||f?.abort(),f=Ai(t,m(),p,1,()=>{Si(t,`introstart`)},()=>{Si(t,`introend`),f?.abort(),f=l=void 0,t.style.overflow=d})},out(e){if(!a){e?.(),l=void 0;return}t.inert=!0,p=Ai(t,m(),f,0,()=>{Si(t,`outrostart`)},()=>{Si(t,`outroend`),e?.()})},stop:()=>{f?.abort(),p?.abort()}},g=ir;if((g.nodes.t??=[]).push(h),i&&$r){var _=s;if(!_){for(var v=g.parent;v&&v.f&65536;)for(;(v=v.parent)&&!(v.f&16););_=!v||(v.f&32768)!=0}_&&Pn(()=>{Er(()=>h.in())})}}function Ai(e,t,n,r,i,a){var o=r===1;if(d(t)){var s,c=!1;return et(()=>{c||(s=Ai(e,t({direction:o?`in`:`out`}),n,r,i,a))}),{abort:()=>{c=!0,s?.abort()},deactivate:()=>s.deactivate(),reset:()=>s.reset(),t:()=>s.t()}}if(n?.deactivate(),!t?.duration&&!t?.delay)return i(),a(),{abort:f,deactivate:f,reset:f,t:()=>r};let{delay:l=0,css:u,tick:p,easing:m=Ti}=t;var h=[];if(o&&n===void 0&&(p&&p(0,1),u)){var g=wi(u(0,1));h.push(g,g)}var _=()=>1-r,v=e.animate(h,{duration:l,fill:`forwards`});return v.onfinish=()=>{v.cancel(),i();var o=n?.t()??1-r;n?.abort();var s=r-o,c=t.duration*Math.abs(s),l=[];if(c>0){var d=!1;if(u)for(var f=Math.ceil(c/(1e3/60)),h=0;h<=f;h+=1){var g=o+s*m(h/f),y=wi(u(g,1-g));l.push(y),d||=y.overflow===`hidden`}d&&(e.style.overflow=`hidden`),_=()=>{var e=v.currentTime;return o+s*m(e/c)},p&&xi(()=>{if(v.playState!==`running`)return!1;var e=_();return p(e,1-e),!0})}v=e.animate(l,{duration:c,fill:`forwards`}),v.onfinish=()=>{_=()=>r,p?.(r,1-r),a()}},{abort:()=>{v&&(v.cancel(),v.effect=null,v.onfinish=f)},deactivate:()=>{a=f},reset:()=>{r===0&&p?.(1,0)},t:()=>_()}}function ji(e,t,n,r,i,a){let o=Re;Re&&He();var s=null;Re&&Be.nodeType===1&&(s=Be,He());var c=Re?Be:e,l=ir,u=new ai(c,!1);Ln(()=>{let e=t()||null;var a=i?i():n||e===`svg`?Me:void 0;if(e===null){u.ensure(null,null),ei(!0);return}return u.ensure(e,t=>{if(e){if(s=Re?s:Cn(e,a),Jr(s,s),r){var n=null;Re&&Ir(e)&&s.append(n=document.createComment(``));var i=Re?yn(s):s.appendChild(vn());Re&&(i===null?ze(!1):Ve(i)),Di(l),r(s,i),n?.remove(),Di(null)}ir.nodes.end=s,t.before(s)}Re&&Ve(t)}),ei(!0),()=>{e&&ei(!1)}},ee),kn(()=>{ei(!0)}),o&&(ze(!0),Ve(c))}function Mi(e,t){var n=void 0,r;Rn(()=>{n!==(n=t())&&(r&&=(Un(r),null),n&&(r=zn(()=>{Pn(()=>n(e))})))})}function Ni(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t=0;){var s=o+a;(o===0||Ii.includes(r[o-1]))&&(s===r.length||Ii.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Ri(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function zi(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function Bi(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(zi)),i&&c.push(...Object.keys(i).map(zi));var l=0,u=-1;let t=e.length;for(var d=0;d{Ui(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),kn(()=>{t.disconnect()})}function Gi(e,t,n=t){var r=new WeakSet,i=!0;gt(e,`change`,t=>{var i=t?`[selected]`:`:checked`,a;if(e.multiple)a=[].map.call(e.querySelectorAll(i),Ki);else{var o=e.querySelector(i)??e.querySelector(`option:not([disabled])`);a=o&&Ki(o)}n(a),e.__value=a,Ft!==null&&r.add(Ft)}),Pn(()=>{var a=t();if(e===document.activeElement){var o=Ft;if(r.has(o))return}if(Ui(e,a,i),i&&a===void 0){var s=e.querySelector(`:checked`);s!==null&&(a=Ki(s),n(a))}e.__value=a,i=!1}),Wi(e)}function Ki(e){return`__value`in e?e.__value:e.value}var qi=Symbol(`class`),Ji=Symbol(`style`),Yi=Symbol(`is custom element`),Xi=Symbol(`is html`),Zi=_e?`link`:`LINK`,Qi=_e?`input`:`INPUT`,$i=_e?`option`:`OPTION`,ea=_e?`select`:`SELECT`,ta=_e?`progress`:`PROGRESS`;function na(e){if(Re){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;W(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;W(e,`checked`,null),e.checked=r}}};e[he]=n,et(n),mt()}}function ra(e,t){var n=ca(e);n.value===(n.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==ta)||(e.value=t??``)}function ia(e,t){var n=ca(e);n.checked!==(n.checked=t??void 0)&&(e.checked=t)}function aa(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function W(e,t,n,r){var i=ca(e);Re&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===Zi)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[ue]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&ua(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function oa(e,t,n,r,i=!1,a=!1){if(Re&&i&&e.nodeName===Qi){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||na(o)}var s=ca(e),c=s[Yi],l=!s[Xi];let u=Re&&c;u&&ze(!1);var d=t||{},f=e.nodeName===$i;for(var p in t)p in n||(n[p]=null);n.class?n.class=Fi(n.class):(r||n[qi])&&(n.class=null),n[Ji]&&(n.style??=null);var m=ua(e);if(e.nodeName===Qi&&`type`in n&&(`value`in n||`__value`in n)){var h=n.type;(h!==d.type||h===void 0&&e.hasAttribute(`type`))&&(d.type=h,W(e,`type`,h,a))}for(let i in n){let o=n[i];if(f&&i===`value`&&o==null){e.value=e.__value=``,d[i]=o;continue}if(i===`class`){U(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[qi],n[qi]),d[i]=o,d[qi]=n[qi];continue}if(i===`style`){Hi(e,o,t?.[Ji],n[Ji]),d[i]=o,d[Ji]=n[Ji];continue}var g=d[i];if(!(o===g&&!(o===void 0&&e.hasAttribute(i)))){d[i]=o;var _=i[0]+i[1];if(_!==`$$`)if(_===`on`){let t={},n=`$$`+i,r=i.slice(2);var v=kr(r);if(Dr(r)&&(r=r.slice(0,-7),t.capture=!0),!v&&g){if(o!=null)continue;e.removeEventListener(r,d[n],t),d[n]=null}if(v)L(r,e,o),Hr([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=Br(r,e,a,t)}}else if(i===`style`)W(e,i,o);else if(i===`autofocus`)dt(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))e.value=e.__value=o;else if(i===`selected`&&f)aa(e,o);else{var y=i;l||(y=Mr(y));var b=y===`defaultValue`||y===`defaultChecked`;if(o==null&&!c&&!b)if(s[i]=null,y===`value`||y===`checked`){let n=e,r=t===void 0;if(y===`value`){let e=n.defaultValue;n.removeAttribute(y),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(y),n.defaultChecked=e,n.checked=r?e:!1}}else e.removeAttribute(i);else b||m.includes(y)&&(c||typeof o!=`string`)?(e[y]=o,y in s&&(s[y]=Ae)):typeof o!=`function`&&W(e,y,o,a)}}}return u&&ze(!0),d}function sa(e,t,n=[],r=[],i=[],a,o=!1,s=!1){xt(i,n,r,n=>{var r=void 0,i={},c=e.nodeName===ea,l=!1;if(Rn(()=>{var u=t(...n.map(I)),d=oa(e,r,u,a,o,s);l&&c&&`value`in u&&Ui(e,u.value);for(let e of Object.getOwnPropertySymbols(i))u[e]||Un(i[e]);for(let t of Object.getOwnPropertySymbols(u)){var f=u[t];t.description===`@attach`&&(!r||f!==r[t])&&(i[t]&&Un(i[t]),i[t]=zn(()=>Mi(e,()=>f))),d[t]=f}r=d}),c){var u=e;Pn(()=>{Ui(u,r.value,!0),Wi(u)})}l=!0})}function ca(e){return e[de]??={[Yi]:e.nodeName.includes(`-`),[Xi]:e.namespaceURI===je}}var la=new Map;function ua(e){var t=e.getAttribute(`is`)||e.nodeName,n=la.get(t);if(n)return n;la.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function da(e,t,n=t){var r=new WeakSet;gt(e,`input`,async i=>{var a=i?e.defaultValue:e.value;if(a=pa(e)?ma(a):a,n(a),Ft!==null&&r.add(Ft),await Cr(),a!==(a=t())){var o=e.selectionStart,s=e.selectionEnd,c=e.value.length;if(e.value=a??``,s!==null){var l=e.value.length;o===s&&s===c&&l>c?(e.selectionStart=l,e.selectionEnd=l):(e.selectionStart=o,e.selectionEnd=Math.min(s,l))}}}),(Re&&e.defaultValue!==e.value||Er(t)==null&&e.value)&&(n(pa(e)?ma(e.value):e.value),Ft!==null&&r.add(Ft)),In(()=>{var n=t();if(e===document.activeElement){var i=Ft;if(r.has(i))return}pa(e)&&n===ma(e.value)||e.type===`date`&&!n&&!e.value||n!==e.value&&(e.value=n??``)})}function fa(e,t,n=t){gt(e,`change`,t=>{n(t?e.defaultChecked:e.checked)}),(Re&&e.defaultChecked!==e.checked||Er(t)==null)&&n(e.checked),In(()=>{e.checked=!!t()})}function pa(e){var t=e.type;return t===`number`||t===`range`}function ma(e){return e===``?null:+e}function ha(e,t){return e===t||e?.[ce]===t}function ga(e={},t,n,r){var i=Ye.r,a=ir;return Pn(()=>{var o,s;return In(()=>{o=s,s=r?.()||[],Er(()=>{ha(n(...s),e)||(t(e,...s),o&&ha(n(...o),e)&&t(null,...o))})}),()=>{let r=a;for(;r!==i&&r.parent!==null&&r.parent.f&33554432;)r=r.parent;let o=()=>{s&&ha(n(...s),e)&&t(null,...s)},c=r.teardown;r.teardown=()=>{o(),c?.()}}}),e}var _a={get(e,t){if(!e.exclude.has(t))return e.props[t]},set(e,t){return!1},getOwnPropertyDescriptor(e,t){if(!e.exclude.has(t)&&t in e.props)return{enumerable:!0,configurable:!0,value:e.props[t]}},has(e,t){return!e.exclude.has(t)&&t in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(t=>!e.exclude.has(t))}};function va(e,t,n){return new Proxy({props:e,exclude:t},_a)}function ya(e,t,n,r){var i=!0,o=(n&8)!=0,s=(n&16)!=0,c=r,l=!0,u=void 0,d=()=>s&&i?(u??=Tt(r),I(u)):(l&&(l=!1,c=s?Er(r):r),c);let f;if(o){var p=ce in e||le in e;f=a(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;o?[m,h]=ut(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&we(t),f(m)));var g=i?()=>{var n=e[t];return n===void 0?d():(l=!0,n)}:()=>{var n=e[t];return n!==void 0&&(c=void 0),n===void 0?c:n};if(i&&!(n&4))return g;if(f){var _=e.$$legacy;return(function(e,t){return arguments.length>0?((!i||!t||_||h)&&f(t?g():e),e):g()})}var v=!1,y=(n&1?Tt:Ot)(()=>(v=!1,g()));o&&I(y);var b=ir;return(function(e,t){if(arguments.length>0){let n=t?I(y):i&&o?j(e):e;return A(y,n),v=!0,c!==void 0&&(c=n),e}return $n&&v||b.f&16384?y.v:I(y)})}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var ba=new Set([`$$slots`,`$$events`,`$$legacy`,`icon`,`class`]),xa=Xr(``);function G(e,t){let n=ya(t,`icon`,19,()=>[]),r=ya(t,`class`,3,``),i=va(t,ba);var a=xa();sa(a,()=>({xmlns:`http://www.w3.org/2000/svg`,width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,class:r(),"aria-hidden":`true`,focusable:`false`,...i}));{let e=(t,n=f)=>{var r=Qr();H(N(r),17,n,oi,(t,n)=>{var r=O(()=>g(I(n),3));let i=()=>I(r)[0],a=()=>I(r)[1],o=()=>I(r)[2];var s=Qr();ji(N(s),i,!0,(t,n)=>{sa(t,()=>({xmlns:`http://www.w3.org/2000/svg`,...a()}));var r=Qr(),i=N(r),s=t=>{e(t,o)},c=O(()=>Array.isArray(o()));V(i,e=>{I(c)&&e(s)}),z(n,r)}),z(t,s)}),z(t,r)};e(M(a),n),T(a)}z(e,a)}var Sa=Xr(``);function Ca(e){z(e,Sa())}function wa(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function Ta(e,t=null){let n=wa();if(!n)return t;try{return n.getItem(e)??t}catch{return t}}function Ea(e,t){let n=wa();if(n)try{n.setItem(e,String(t))}catch{}}function Da(e){let t=Number(e);return Number.isFinite(t)?Math.min(240,Math.max(60,Math.round(t))):240}function Oa(e,t,n){return Da(Number(e)+Number(n)-Number(t))}var ka=new class{#e=k(`system`);get theme(){return I(this.#e)}set theme(e){A(this.#e,e,!0)}#t=k(0);get tick(){return I(this.#t)}set tick(e){A(this.#t,e,!0)}init(){this.theme=Ta(`gomodel_theme`,`system`),this.apply(),window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{this.theme===`system`&&this.tick++})}set(e){this.theme=e,Ea(`gomodel_theme`,e),this.apply(),this.tick++}toggle(){let e=[`light`,`system`,`dark`];this.set(e[(e.indexOf(this.theme)+1)%e.length])}apply(){let e=document.documentElement;this.theme===`system`?e.removeAttribute(`data-theme`):e.setAttribute(`data-theme`,this.theme)}},Aa=new class{#e=k(j(240));get width(){return I(this.#e)}set width(e){A(this.#e,e,!0)}get collapsed(){return this.width===60}init(){let e=Ta(`gomodel_sidebar_width`),t=Ta(`gomodel_sidebar_collapsed`)===`true`;this.setWidth(e??(t?60:240))}toggle(){this.setWidth(this.collapsed?240:60,!0)}setWidth(e,t=!1){this.width=Da(e),typeof document<`u`&&document.documentElement.style.setProperty(`--sidebar-width`,`${this.width}px`),t&&(Ea(`gomodel_sidebar_width`,this.width),Ea(`gomodel_sidebar_collapsed`,this.collapsed))}},ja=new class{#e=k(j([]));get stack(){return I(this.#e)}set stack(e){A(this.#e,e,!0)}#t=1;opened(){let e=this.#t++;return this.stack=[...this.stack,e],e}closed(e){this.stack=this.stack.filter(t=>t!==e)}isTop(e){return this.stack.length>0&&this.stack[this.stack.length-1]===e}get openCount(){return this.stack.length}get anyOpen(){return this.stack.length>0}},Ma=[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`}]],Na=[[`path`,{d:`m12 19-7-7 7-7`}],[`path`,{d:`M19 12H5`}]],Pa=[[`path`,{d:`M5 12h14`}],[`path`,{d:`m12 5 7 7-7 7`}]],Fa=[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`}],[`path`,{d:`M12 22V12`}]],Ia=[[`rect`,{width:`16`,height:`20`,x:`4`,y:`2`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`6`,y2:`6`}],[`line`,{x1:`16`,x2:`16`,y1:`14`,y2:`18`}],[`path`,{d:`M16 10h.01`}],[`path`,{d:`M12 10h.01`}],[`path`,{d:`M8 10h.01`}],[`path`,{d:`M12 14h.01`}],[`path`,{d:`M8 14h.01`}],[`path`,{d:`M12 18h.01`}],[`path`,{d:`M8 18h.01`}]],La=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}],[`path`,{d:`M8 14h.01`}],[`path`,{d:`M12 14h.01`}],[`path`,{d:`M16 14h.01`}],[`path`,{d:`M8 18h.01`}],[`path`,{d:`M12 18h.01`}],[`path`,{d:`M16 18h.01`}]],Ra=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}]],za=[[`path`,{d:`M13 17V9`}],[`path`,{d:`M18 17V5`}],[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M8 17v-3`}]],Ba=[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M18 17V9`}],[`path`,{d:`M13 17V5`}],[`path`,{d:`M8 17v-3`}]],Va=[[`path`,{d:`M20 6 9 17l-5-5`}]],Ha=[[`path`,{d:`m6 9 6 6 6-6`}]],Ua=[[`path`,{d:`m15 18-6-6 6-6`}]],Wa=[[`path`,{d:`m9 18 6-6-6-6`}]],Ga=[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`}],[`path`,{d:`m9 11 3 3L22 4`}]],Ka=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m9 12 2 2 4-4`}]],qa=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`}],[`path`,{d:`M12 18V6`}]],Ja=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 6v6l4 2`}]],Ya=[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`}]],Xa=[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}],[`path`,{d:`M3 5V19A9 3 0 0 0 15 21.84`}],[`path`,{d:`M21 5V8`}],[`path`,{d:`M21 12L18 17H22L19 22`}],[`path`,{d:`M3 12A9 3 0 0 0 14.59 14.87`}]],Za=[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`}]],Qa=[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`}],[`path`,{d:`M10 9H8`}],[`path`,{d:`M16 13H8`}],[`path`,{d:`M16 17H8`}]],$a=[[`path`,{d:`m12 14 4-4`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`}]],eo=[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}],[`path`,{d:`M3 3v5h5`}],[`path`,{d:`M12 7v5l4 2`}]],to=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 16v-4`}],[`path`,{d:`M12 8h.01`}]],no=[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`}]],ro=[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`}]],io=[[`path`,{d:`M3 5h.01`}],[`path`,{d:`M3 12h.01`}],[`path`,{d:`M3 19h.01`}],[`path`,{d:`M8 5h13`}],[`path`,{d:`M8 12h13`}],[`path`,{d:`M8 19h13`}]],ao=[[`circle`,{cx:`12`,cy:`16`,r:`1`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`}]],oo=[[`path`,{d:`M15 3h6v6`}],[`path`,{d:`m21 3-7 7`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M9 21H3v-6`}]],so=[[`path`,{d:`m14 10 7-7`}],[`path`,{d:`M20 10h-6V4`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M4 14h6v6`}]],co=[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`}]],lo=[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`}]],uo=[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`}],[`path`,{d:`m15 5 4 4`}]],fo=[[`path`,{d:`M12 22v-5`}],[`path`,{d:`M15 8V2`}],[`path`,{d:`M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z`}],[`path`,{d:`M9 8V2`}]],po=[[`path`,{d:`M5 12h14`}],[`path`,{d:`M12 5v14`}]],mo=[[`path`,{d:`M12 2v10`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`}]],ho=[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`}],[`path`,{d:`M21 3v5h-5`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`}],[`path`,{d:`M8 16H3v5`}]],go=[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}],[`path`,{d:`M3 3v5h5`}]],_o=[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`}]],vo=[[`path`,{d:`m21 21-4.34-4.34`}],[`circle`,{cx:`11`,cy:`11`,r:`8`}]],yo=[[`path`,{d:`m10.852 14.772-.383.923`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`}],[`path`,{d:`m13.148 9.228.383-.923`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`}],[`path`,{d:`m14.772 10.852.923-.383`}],[`path`,{d:`m14.772 13.148.923.383`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`}],[`path`,{d:`M6 18h.01`}],[`path`,{d:`M6 6h.01`}],[`path`,{d:`m9.228 10.852-.923-.383`}],[`path`,{d:`m9.228 13.148-.923.383`}]],bo=[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`}]],xo=[[`path`,{d:`M14 17H5`}],[`path`,{d:`M19 7h-9`}],[`circle`,{cx:`17`,cy:`17`,r:`3`}],[`circle`,{cx:`7`,cy:`7`,r:`3`}]],So=[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`}],[`circle`,{cx:`12`,cy:`12`,r:`3`}]],Co=[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`}],[`path`,{d:`m9 12 2 2 4-4`}]],wo=[[`path`,{d:`m2 2 20 20`}],[`path`,{d:`M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71`}],[`path`,{d:`M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264`}]],To=[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`}]],Eo=[[`path`,{d:`m18 14 4 4-4 4`}],[`path`,{d:`m18 2 4 4-4 4`}],[`path`,{d:`M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22`}],[`path`,{d:`M2 6h1.972a4 4 0 0 1 3.6 2.2`}],[`path`,{d:`M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45`}]],Do=[[`circle`,{cx:`12`,cy:`12`,r:`4`}],[`path`,{d:`M12 2v2`}],[`path`,{d:`M12 20v2`}],[`path`,{d:`m4.93 4.93 1.41 1.41`}],[`path`,{d:`m17.66 17.66 1.41 1.41`}],[`path`,{d:`M2 12h2`}],[`path`,{d:`M20 12h2`}],[`path`,{d:`m6.34 17.66-1.41 1.41`}],[`path`,{d:`m19.07 4.93-1.41 1.41`}]],Oo=[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`}]],ko=[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`}],[`circle`,{cx:`12`,cy:`14`,r:`8`}]],Ao=[[`path`,{d:`M10 11v6`}],[`path`,{d:`M14 11v6`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`}],[`path`,{d:`M3 6h18`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`}]],jo=[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`}],[`path`,{d:`M12 9v4`}],[`path`,{d:`M12 17h.01`}]],Mo=[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`}],[`circle`,{cx:`12`,cy:`7`,r:`4`}]],No=[[`path`,{d:`M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1`}],[`path`,{d:`M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4`}]],Po=[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`}],[`path`,{d:`m14 7 3 3`}],[`path`,{d:`M5 6v4`}],[`path`,{d:`M19 14v4`}],[`path`,{d:`M10 2v2`}],[`path`,{d:`M7 8H3`}],[`path`,{d:`M21 16h-4`}],[`path`,{d:`M11 3H9`}]],Fo=[[`rect`,{width:`8`,height:`8`,x:`3`,y:`3`,rx:`2`}],[`path`,{d:`M7 11v4a2 2 0 0 0 2 2h4`}],[`rect`,{width:`8`,height:`8`,x:`13`,y:`13`,rx:`2`}]],Io=[[`path`,{d:`M18 6 6 18`}],[`path`,{d:`m6 6 12 12`}]],Lo=R(``),Ro=R(`
`,1);function zo(e,t){E(t,!0);let n=ya(t,`compact`,3,!1),r=[{value:`light`,icon:Do,label:`Light theme`},{value:`system`,icon:co,label:`System theme`},{value:`dark`,icon:lo,label:`Dark theme`}],i=O(()=>r.find(e=>e.value===ka.theme)||r[1]),a=O(()=>`Change theme (currently `+I(i).label+`)`);var o=Ro(),s=N(o);let c;H(s,21,()=>r,e=>e.value,(e,t)=>{var n=Lo();let r;G(M(n),{get icon(){return I(t).icon},class:`theme-icon`}),T(n),F(()=>{r=U(n,1,`theme-btn svelte-1keql7b`,null,r,{active:ka.theme===I(t).value}),W(n,`aria-pressed`,ka.theme===I(t).value),W(n,`title`,I(t).label),W(n,`aria-label`,I(t).label)}),L(`click`,n,()=>ka.set(I(t).value)),z(e,n)}),T(s);var l=P(s,2);let u;G(M(l),{get icon(){return I(i).icon},class:`theme-icon`}),T(l),F(()=>{c=U(s,1,`theme-toggle svelte-1keql7b`,null,c,{"is-compact":n()}),u=U(l,1,`theme-toggle-mobile svelte-1keql7b`,null,u,{"is-compact":n()}),W(l,`title`,I(a)),W(l,`aria-label`,I(a))}),L(`click`,l,()=>ka.toggle()),z(e,o),D()}Hr([`click`]);function Bo(){return typeof window>`u`?`/`:window.GOMODEL_BASE_PATH||`/`}function Vo(e){let t=Bo();return!e||e.charAt(0)!==`/`||e.indexOf(`//`)===0||t===`/`||e===t||e.indexOf(t+`/`)===0?e:t+e}function Ho(e){let t=Bo();return t===`/`||!e?e:e===t?`/`:e.indexOf(t+`/`)===0?e.slice(t.length)||`/`:e}function Uo(){return typeof window>`u`?``:window.GOMODEL_VERSION||``}function Wo(){return typeof window>`u`?!1:window.GOMODEL_DEMO_MODE===!0}var Go=[`overview`,`usage`,`budgets`,`rate-limits`,`models`,`workflows`,`audit-logs`,`guardrails`,`mcp-servers`,`providers-config`,`auth-keys`,`settings`];function Ko(e){return e.startsWith(`/admin/static/`)?`/`+e.slice(14).replace(/^\/+/,``):e}function qo(e){let t=Ko(Ho(e)).replace(/\/$/,``).replace(`/admin/dashboard`,``).replace(/^\//,``).split(`/`),n=t[0];n===`audit`&&(n=`audit-logs`);let r=t[1]||null;return n===`settings`&&r===`guardrails`?{page:`guardrails`,sub:null}:(n=Go.includes(n)?n:`overview`,{page:n,sub:r})}var Jo=new class{#e=k(`overview`);get page(){return I(this.#e)}set page(e){A(this.#e,e,!0)}#t=k(null);get sub(){return I(this.#t)}set sub(e){A(this.#t,e,!0)}init(){let{page:e,sub:t}=qo(window.location.pathname);this.page=e,this.sub=t,window.addEventListener(`popstate`,()=>{let{page:e,sub:t}=qo(window.location.pathname);this.page=e,this.sub=t})}navigate(e,t=null){let n=t?`/`+t:``;history.pushState(null,``,Vo(`/admin/dashboard/`+e+n)),this.page=e,this.sub=t}},Yo=`gomodel_api_key`;function Xo(e){let t=String(e||``).trim();if(/^Bearer\s*$/i.test(t))return``;let n=t.match(/^Bearer\s+(.+)$/i);return n?n[1].trim():t}var K=new class{#e=k(``);get apiKey(){return I(this.#e)}set apiKey(e){A(this.#e,e,!0)}#t=k(!1);get needsAuth(){return I(this.#t)}set needsAuth(e){A(this.#t,e,!0)}#n=k(!1);get authError(){return I(this.#n)}set authError(e){A(this.#n,e,!0)}#r=k(``);get authErrorMessage(){return I(this.#r)}set authErrorMessage(e){A(this.#r,e,!0)}#i=k(!1);get dialogOpen(){return I(this.#i)}set dialogOpen(e){A(this.#i,e,!0)}#a=k(0);get generation(){return I(this.#a)}set generation(e){A(this.#a,e,!0)}#o=k(0);get refreshTick(){return I(this.#o)}set refreshTick(e){A(this.#o,e,!0)}init(){try{this.apiKey=Xo(localStorage.getItem(Yo)||``)}catch{this.apiKey=``}}hasApiKey(){return Xo(this.apiKey)!==``}save(){this.apiKey=Xo(this.apiKey);try{localStorage.setItem(Yo,this.apiKey)}catch{}}openDialog(){this.dialogOpen=!0}closeDialog(){this.dialogOpen=!1}submit(){let e=Xo(this.apiKey);return e?(this.apiKey=e,this.save(),this.generation++,this.authError=!1,this.authErrorMessage=``,this.needsAuth=!1,this.closeDialog(),this.refresh(),!0):(this.apiKey=``,this.authError=!0,this.authErrorMessage=``,this.needsAuth=!0,this.openDialog(),!1)}refresh(){this.refreshTick++}handleUnauthorized(e,t=``){return typeof e==`number`&&e{r[e.type]=e.value}),r.year+`-`+r.month+`-`+r.day}formatTimestampInTimeZone(e,t){if(e==null)return`-`;let n=new Date(e);if(Number.isNaN(n.getTime()))return`-`;let r=ss(`en-CA`,{timeZone:cs(t)?t:rs,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`}).formatToParts(n),i={};return r.forEach(e=>{i[e.type]=e.value}),i.year+`-`+i.month+`-`+i.day+` `+i.hour+`:`+i.minute+`:`+i.second}formatTimestamp(e){return this.formatTimestampInTimeZone(e,this.effectiveTimezone())}currentDateKey(e){return this.dateKeyInTimeZone(e||new Date,this.effectiveTimezone())}dateKeyToDate(e){return Qo(e)}dateToDateKey(e){return $o(e)}addDaysToDateKey(e,t){return es(e,t)}todayDate(){return this.dateKeyToDate(this.currentDateKey())}startOfMonthDate(e){let t=e instanceof Date?e:this.todayDate();return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),1))}timeZoneOffsetLabel(e,t){let n=cs(e)?e:rs;try{let e=ss(`en-US`,{timeZone:n,hour:`2-digit`,minute:`2-digit`,hourCycle:`h23`,timeZoneName:`longOffset`}).formatToParts(t||new Date).find(e=>e.type===`timeZoneName`);if(!e||!e.value)return`UTC+00:00`;let r=e.value.replace(`GMT`,`UTC`);return r===`UTC`?`UTC+00:00`:r}catch{return`UTC+00:00`}}timeZoneOffsetMinutes(e,t){let n=/^UTC([+-])(\d{2}):(\d{2})$/.exec(this.timeZoneOffsetLabel(e,t));if(!n)return 0;let r=Number(n[2])*60+Number(n[3]);return n[1]===`-`?-r:r}timeZoneOptionLabel(e,t){return e+` (`+this.timeZoneOffsetLabel(e,t)+`)`}detectedTimeZoneLabel(){return this.timeZoneOptionLabel(this.detectedTimezone)}effectiveTimeZoneLabel(){return this.timeZoneOptionLabel(this.effectiveTimezone())}ensureOptions(){if(this.optionsLoaded)return;let e=new Date,t=[];try{typeof Intl.supportedValuesOf==`function`&&(t=Intl.supportedValuesOf(`timeZone`))}catch{t=[]}[rs,this.detectedTimezone,this.override].forEach(e=>{e&&t.indexOf(e)===-1&&cs(e)&&t.push(e)}),t=t.filter(e=>cs(e)),t.sort((t,n)=>{let r=this.timeZoneOffsetMinutes(t,e)-this.timeZoneOffsetMinutes(n,e);return r===0?t.localeCompare(n):r}),this.options=t.map(t=>({value:t,label:this.timeZoneOptionLabel(t,e)})),this.optionsLoaded=!0}saveOverride(){let e=wa();if(e)if(this.override&&cs(this.override))try{e.setItem(is,this.override)}catch{}else{try{e.removeItem(is)}catch{}this.override=``}this.optionsLoaded=!1,this.ensureOptions()}clearOverride(){let e=wa();if(e)try{e.removeItem(is)}catch{}this.override=``}calendarTimeZoneText(){let e=this.override?`manual override`:`auto-detected`;return`Activity grouped by `+this.effectiveTimeZoneLabel()+` (`+e+`)`}};function fs(e,t){let n=e&&typeof e==`object`&&e.error&&e.error.message;return(typeof n==`string`?n.trim():``)||t}function ps(e,t){let n=e&&e.data;if(n&&typeof n==`object`){let e=[n.message,n.error,n.error&&typeof n.error==`object`?n.error.message:null];for(let t of e)if(typeof t==`string`&&t.trim())return t.trim()}return t}function ms(){let e={"Content-Type":`application/json`},t=Xo(K.apiKey);return t&&(e.Authorization=`Bearer `+t),e[`X-GoModel-Timezone`]=ds.effectiveTimezone(),e}function hs(e,t={}){return fetch(Vo(e),{...t,headers:{...ms(),...t.headers||{}}})}async function gs(e,t,{label:n=e,parse:r=!0}={}){let i=K.generation,a=await hs(e,t);if(a.status===401)return K.handleUnauthorized(i),{ok:!1,stale:ie.trim()).filter(Boolean);return e.length>0?e:xs}cacheVisible(){if(this.flag(`CACHE_ENABLED`)!==``)return this.booleanFlag(`CACHE_ENABLED`,!1);let e=this.flag(`REDIS_URL`),t=this.flag(`SEMANTIC_CACHE_ENABLED`);return e===``&&t===``||this.booleanFlag(`REDIS_URL`,!1)||this.booleanFlag(`SEMANTIC_CACHE_ENABLED`,!1)}auditVisible(){return this.booleanFlag(`LOGGING_ENABLED`,!0)}usageVisible(){return this.booleanFlag(`USAGE_ENABLED`,!0)}budgetsVisible(){return this.booleanFlag(`BUDGETS_ENABLED`,!0)}rateLimitsVisible(){return this.booleanFlag(`RATE_LIMITS_ENABLED`,!0)}guardrailsVisible(){return this.booleanFlag(`GUARDRAILS_ENABLED`,!0)}mcpVisible(){return this.booleanFlag(`MCP_ENABLED`,!0)}liveLogsVisible(){return this.booleanFlag(`DASHBOARD_LIVE_LOGS_ENABLED`,!0)}fetch(){return this.#n||=this.#r().finally(()=>{this.#n=null}),this.#n}async ensureLoaded(){if(this.#n){await this.#n;return}this.loaded||await this.fetch()}async#r(){let e=typeof AbortController==`function`?new AbortController:null,t=e?setTimeout(()=>e.abort(),1e4):null;try{let t=await _s(`/admin/runtime/config`,{label:`dashboard config`,signal:e?e.signal:void 0});if(t.stale)return;if(!t.ok){this.config={},this.loaded=!1;return}let n=t.data,r={};for(let e of bs)n&&typeof n==`object`&&!Array.isArray(n)&&n[e]!==void 0&&n[e]!==null&&(r[e]=String(n[e]).trim());this.config=r,this.loaded=!0}catch(e){console.error(`Failed to fetch dashboard config:`,e),this.config={},this.loaded=!1}finally{t!==null&&clearTimeout(t)}}},Cs=[{page:`overview`,label:`Overview`,icon:ro},{page:`providers-config`,label:`Providers`,icon:yo},{page:`models`,label:`Models`,icon:Fa},{page:`audit-logs`,label:`Audit Logs`,icon:eo},{page:`usage`,label:`Usage`,icon:Ba},{page:`budgets`,label:`Budgets`,icon:No,visible:()=>Ss.budgetsVisible()},{page:`rate-limits`,label:`Rate Limits`,icon:$a,visible:()=>Ss.rateLimitsVisible()},{page:`auth-keys`,label:`API Keys`,icon:no},{page:`workflows`,label:`Workflows`,icon:Fo},{page:`guardrails`,label:`Guardrails (experimental)`,icon:Co,visible:()=>Ss.guardrailsVisible()},{page:`mcp-servers`,label:`MCP Servers`,icon:fo,visible:()=>Ss.mcpVisible()},{page:`settings`,label:`Settings`,icon:So}],ws=R(` `),Ts=R(`
`),Es=R(` `,1);function Ds(e,t){E(t,!0);let n=O(()=>Cs.filter(e=>!e.visible||e.visible())),r=k(null),i=0,a=0,o=!1;function s(e){e.button===0&&(e.preventDefault(),A(r,e.pointerId,!0),i=e.clientX,a=Aa.width,o=!1,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`sidebar-resizing`))}function c(e){e.pointerId===I(r)&&(!o&&Math.abs(e.clientX-i)<=4||(o=!0,Aa.setWidth(Oa(a,i,e.clientX))))}function l(e){I(r)===null||e.pointerId!==void 0&&e.pointerId!==I(r)||(A(r,null),document.body.classList.remove(`sidebar-resizing`),Aa.setWidth(Aa.width,!0))}function u(){if(o){o=!1;return}Aa.toggle()}function d(e){let t;if(e.key===`ArrowLeft`)t=Aa.width-12;else if(e.key===`ArrowRight`)t=Aa.width+12;else if(e.key===`Home`)t=60;else if(e.key===`End`)t=240;else if(e.key===`Enter`||e.key===` `){e.preventDefault(),Aa.toggle();return}else return;e.preventDefault(),Aa.setWidth(t,!0)}var f=Es(),p=N(f);let m;var h=M(p),g=M(h);Ca(M(g),{}),T(g),Ue(4),T(h);var _=P(h,2);H(_,21,()=>I(n),e=>e.page,(e,t)=>{var n=ws();let r;var i=M(n);G(i,{get icon(){return I(t).icon},class:`nav-icon`});var a=P(i,2),o=M(a,!0);T(a),T(n),F(e=>{W(n,`href`,e),r=U(n,1,`nav-item svelte-1nwtzae`,null,r,{active:Jo.page===I(t).page}),W(n,`title`,I(t).label),B(o,I(t).label)},[()=>Vo(`/admin/dashboard/`+I(t).page)]),L(`click`,n,e=>{e.preventDefault(),Jo.navigate(I(t).page)}),z(e,n)}),T(_);var v=P(_,2),y=M(v);zo(y,{get compact(){return Aa.collapsed}});var b=P(y,2),x=e=>{var t=Ts(),n=M(t),r=M(n);G(r,{get icon(){return ao},class:`api-key-open-icon`});var i=P(r,2),a=M(i,!0);T(i),T(n),T(t),F(()=>{W(n,`aria-label`,K.needsAuth?`Enter API key`:`Change API key`),B(a,K.needsAuth?`Enter API key`:`Change API key`)}),L(`click`,n,()=>K.openDialog()),z(e,t)},S=O(()=>K.needsAuth||K.hasApiKey());V(b,e=>{I(S)&&e(x)}),T(v),T(p);var C=P(p,2);F(()=>{m=U(p,1,`sidebar svelte-1nwtzae`,null,m,{"sidebar-collapsed":Aa.collapsed,"sidebar-resizing":I(r)!==null}),W(C,`aria-valuemin`,60),W(C,`aria-valuemax`,240),W(C,`aria-valuenow`,Aa.width)}),L(`pointerdown`,C,s),L(`pointermove`,C,c),L(`pointerup`,C,l),Vr(`pointercancel`,C,l),Vr(`lostpointercapture`,C,l),L(`keydown`,C,d),L(`click`,C,u),z(e,f),D()}Hr([`click`,`pointerdown`,`pointermove`,`pointerup`,`keydown`]);var Os=R(``);function ks(e,t){E(t,!0);let n=ya(t,`label`,3,`Close`),r=ya(t,`class`,3,``),i=ya(t,`iconClass`,3,`table-icon-svg`),a=ya(t,`disabled`,3,!1),o=ya(t,`el`,15,null);var s=Os();G(M(s),{get icon(){return Io},get class(){return i()}}),T(s),ga(s,e=>o(e),()=>o()),F(()=>{U(s,1,Fi([`dialog-close-btn`,r()]),`svelte-11l1bb5`),W(s,`aria-label`,n()),s.disabled=a()}),L(`click`,s,function(...e){t.onclick?.apply(this,e)}),z(e,s),D()}Hr([`click`]);function As(e){return t=>{let n=n=>{t.contains(n.target)||e()},r=t=>{t.key===`Escape`&&e()};return document.addEventListener(`click`,n,!0),window.addEventListener(`keydown`,r),()=>{document.removeEventListener(`click`,n,!0),window.removeEventListener(`keydown`,r)}}}function js(e=`[data-modal-autofocus]`){return t=>{let n=t.querySelector(e);n&&typeof n.focus==`function`&&n.focus()}}var Ms=R(`
`,1);function Ns(e,t){E(t,!0);let n=ya(t,`open`,3,!1),r=ya(t,`variant`,3,`editor`),i=ya(t,`closeOnBackdrop`,3,!0),a=O(()=>r()===`auth`?`auth-dialog-backdrop`:`editor-modal-backdrop`),o=O(()=>r()===`auth`?`auth-dialog-shell`:`editor-modal-shell`);An(()=>{if(!n())return;let e=Er(()=>ja.opened()),r=n=>{n.key===`Escape`&&ja.isTop(e)&&t.onclose?.()};return window.addEventListener(`keydown`,r),()=>{ja.closed(e),window.removeEventListener(`keydown`,r)}});function s(e){i()&&e.target===e.currentTarget&&t.onclose?.()}var c=Qr(),l=N(c),u=e=>{var n=Ms(),r=N(n),i=P(r,2);gi(M(i),()=>t.children??f),T(i),Mi(i,js),F(()=>{U(r,1,Fi(I(a)),`svelte-17e0w4c`),U(i,1,Fi(I(o)),`svelte-17e0w4c`)}),L(`click`,i,s),z(e,n)};V(l,e=>{n()&&e(u)}),z(e,c),D()}Hr([`click`]);var Ps=R(``),Fs=R(``);function Is(e,t){E(t,!0),Ns(e,{get open(){return K.dialogOpen},variant:`auth`,onclose:()=>K.closeDialog(),children:(e,t)=>{var n=Fs(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a),T(i),ks(P(i,2),{label:`Close authentication dialog`,onclick:()=>K.closeDialog(),class:`auth-dialog-close`,iconClass:``}),T(r);var s=P(r,2),c=M(s),l=M(c);G(l,{get icon(){return ao},class:`auth-dialog-input-icon`});var u=P(l,2);na(u),T(c);var d=P(c,2),f=e=>{var t=Ps(),n=M(t,!0);T(t),F(()=>B(n,K.authErrorMessage||`Enter a valid API key to continue.`)),z(e,t)};V(d,e=>{K.authError&&e(f)});var p=P(d,4),m=M(p),h=M(m);G(h,{get icon(){return Va},class:`auth-dialog-submit-icon`});var g=P(h,2),_=M(g,!0);T(g),T(m),T(p),T(s),T(n),F(()=>{B(o,K.needsAuth?`Dashboard locked`:`Change API key`),B(_,K.needsAuth?`Unlock dashboard`:`Save API key`)}),Vr(`submit`,s,e=>{e.preventDefault(),K.submit()}),da(u,()=>K.apiKey,e=>K.apiKey=e),z(e,n)},$$slots:{default:!0}}),D()}function Ls(){return{open:!1,title:``,titleId:`typedConfirmationDialogTitle`,inputId:`typed-confirmation-input`,message:``,requiredText:``,value:``,confirmLabel:`Confirm`,icon:jo,dialogClass:``,loading:!1,onConfirm:null,onClose:null}}var Rs=new class{#e=k(j(Ls()));get state(){return I(this.#e)}set state(e){A(this.#e,e,!0)}#t=k(``);get error(){return I(this.#t)}set error(e){A(this.#t,e,!0)}open(e){this.error=``,this.state={...Ls(),open:!0,...e||{}}}close(){let e=this.state;typeof e.onClose==`function`&&e.onClose(),this.state=Ls(),this.error=``}ready(){return String(this.state.value||``).trim().toLowerCase()===String(this.state.requiredText||``).trim().toLowerCase()}inputLabel(){return`Type `+String(this.state.requiredText||``).trim()+` to confirm`}async submit(){if(!this.ready()){this.error=this.inputLabel()+`.`;return}if(typeof this.state.onConfirm==`function`){this.state.loading=!0;try{await this.state.onConfirm()}finally{this.state.loading=!1}}}},zs=R(`

`),Bs=R(``),Vs=R(`

`);function Hs(e,t){E(t,!0);let n=O(()=>Rs.state);Ns(e,{get open(){return I(n).open},variant:`auth`,onclose:()=>Rs.close(),children:(e,t)=>{var r=Vs(),i=M(r),a=M(i),o=M(a,!0);T(a),ks(P(a,2),{label:`Close confirmation dialog`,onclick:()=>Rs.close(),class:`auth-dialog-close`,iconClass:``}),T(i);var s=P(i,2),c=M(s),l=e=>{var t=zs(),r=M(t,!0);T(t),F(()=>B(r,I(n).message)),z(e,t)};V(c,e=>{I(n).message&&e(l)});var u=P(c,2),d=M(u),f=M(d,!0);T(d);var p=P(d,2);na(p),T(u);var m=P(u,2),h=e=>{var t=Bs(),n=M(t,!0);T(t),F(()=>B(n,Rs.error)),z(e,t)};V(m,e=>{Rs.error&&e(h)});var g=P(m,2),_=M(g),v=P(_,2),y=M(v);G(y,{get icon(){return I(n).icon},class:`form-action-icon`});var b=P(y,2),x=M(b,!0);T(b),T(v),T(g),T(s),T(r),F((e,t)=>{U(r,1,`auth-dialog ${I(n).dialogClass??``}`),W(r,`aria-labelledby`,I(n).titleId),W(a,`id`,I(n).titleId),B(o,I(n).title),W(d,`for`,I(n).inputId),B(f,e),W(p,`id`,I(n).inputId),v.disabled=t,B(x,I(n).confirmLabel)},[()=>Rs.inputLabel(),()=>I(n).loading||!Rs.ready()]),Vr(`submit`,s,e=>{e.preventDefault(),Rs.submit()}),da(p,()=>Rs.state.value,e=>Rs.state.value=e),L(`click`,_,()=>Rs.close()),z(e,r)},$$slots:{default:!0}}),D()}Hr([`click`]);var Us=e=>e;function Ws(e){let t=e-1;return t*t*t+1}function Gs(e){let t=typeof e==`string`&&e.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return t?[parseFloat(t[1]),t[2]||`px`]:[e,`px`]}function Ks(e,{delay:t=0,duration:n=400,easing:r=Us}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}function qs(e,{delay:t=0,duration:n=400,easing:r=Ws,x:i=0,y:a=0,opacity:o=0}={}){let s=getComputedStyle(e),c=+s.opacity,l=s.transform===`none`?``:s.transform,u=c*(1-o),[d,f]=Gs(i),[p,m]=Gs(a);return{delay:t,duration:n,easing:r,css:(e,t)=>` - transform: ${l} translate(${(1-e)*d}${f}, ${(1-e)*p}${m}); - opacity: ${c-u*t}`}}function Js(e,{delay:t=0,duration:n=400,easing:r=Ws,axis:i=`y`}={}){let a=getComputedStyle(e),o=+a.opacity,s=i===`y`?`height`:`width`,c=parseFloat(a[s]),l=i===`y`?[`top`,`bottom`]:[`left`,`right`],u=l.map(e=>`${e[0].toUpperCase()}${e.slice(1)}`),d=parseFloat(a[`padding${u[0]}`]),f=parseFloat(a[`padding${u[1]}`]),p=parseFloat(a[`margin${u[0]}`]),m=parseFloat(a[`margin${u[1]}`]),h=parseFloat(a[`border${u[0]}Width`]),g=parseFloat(a[`border${u[1]}Width`]);return{delay:t,duration:n,easing:r,css:e=>`overflow: hidden;opacity: ${Math.min(e*20,1)*o};${s}: ${e*c}px;padding-${l[0]}: ${e*d}px;padding-${l[1]}: ${e*f}px;margin-${l[0]}: ${e*p}px;margin-${l[1]}: ${e*m}px;border-${l[0]}-width: ${e*h}px;border-${l[1]}-width: ${e*g}px;min-${s}: 0`}}function Ys(e){return--e*e*(2.70158*e+1.70158)+1}function Xs(e){let t=e-1;return t*t*t+1}var Zs=5e3,Qs=8e3,q=new class{#e=k(j([]));get toasts(){return I(this.#e)}set toasts(e){A(this.#e,e,!0)}#t=0;#n=new Map;success(e){this.#r(`success`,e,Zs)}error(e){this.#r(`error`,e,Qs)}dismiss(e){let t=this.#n.get(e);t&&(clearTimeout(t),this.#n.delete(e)),this.toasts=this.toasts.filter(t=>t.id!==e)}#r(e,t,n){let r=String(t||``).trim();if(!r)return;let i=this.toasts.find(t=>t.kind===e&&t.text===r);i&&this.dismiss(i.id);let a=++this.#t;this.toasts=[...this.toasts,{id:a,kind:e,text:r}],this.#n.set(a,setTimeout(()=>this.dismiss(a),n))}},$s=R(`
`),ec=R(`
`);function tc(e,t){E(t,!0);var n=ec();H(n,21,()=>q.toasts,e=>e.id,(e,t)=>{var n=$s();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2);T(n),F(()=>{r=U(n,1,`flash-toast svelte-1i257xg`,null,r,{"flash-toast-success":I(t).kind===`success`,"flash-toast-error":I(t).kind===`error`}),W(n,`role`,I(t).kind===`error`?`alert`:`status`),W(n,`aria-live`,I(t).kind===`error`?`assertive`:`polite`),B(a,I(t).text)}),L(`click`,o,()=>q.dismiss(I(t).id)),ki(1,n,()=>qs,()=>({y:-24,duration:360,easing:Ys})),ki(2,n,()=>Ks,()=>({duration:150})),z(e,n)}),T(n),z(e,n),D()}Hr([`click`]);var nc=R(``);function rc(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{z(e,nc())},a=O(()=>Wo());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}function ic(e){return String(e||``).split(`,`).map(e=>e.trim()).filter(e=>e)}function ac(e){if(e==null||e===``)return`Not captured`;if(typeof e==`string`){let t=e.trim();if(t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`))try{return JSON.stringify(JSON.parse(t),null,2)}catch{return e}return e}try{return JSON.stringify(e,null,2)}catch{return String(e)}}function oc(e){return e==null||e===void 0?`-`:e.toLocaleString()}function sc(e){if(e==null)return`---`;let t=Number(e);return Number.isFinite(t)?t>0&&t<1e-4?`<$0.0001`:`$`+t.toFixed(4).replace(/(\.\d{2}\d*?)0+$/,`$1`):`---`}function cc(e){return e==null||e===void 0?`—`:`$`+e.toFixed(2)}function lc(e){return e==null||e===void 0?`—`:e<.01?`$`+e.toFixed(6):`$`+e.toFixed(4)}function uc(e){if(e==null||e===``)return`-`;let t=Number(e);if(!Number.isFinite(t))return`-`;let n=Math.abs(t),r=[{threshold:1e9,suffix:`B`},{threshold:1e6,suffix:`M`},{threshold:1e3,suffix:`K`}];for(let e=0;e=i.threshold){let n=t/i.threshold;return Math.abs(Number(n.toFixed(1)))>=1e3&&e>0&&(i=r[e-1],n=t/i.threshold),n.toFixed(1).replace(/\.0$/,``)+i.suffix}}return String(t)}function dc(e,t){let n=t==null||t===``?NaN:Number(t),r=Number.isFinite(n)?oc(n):`-`;return String(e||`Tokens`)+`: `+r}function fc(e){return e?typeof e==`string`?e:e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`):``}function pc(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.getUTCFullYear()+`-`+String(t.getUTCMonth()+1).padStart(2,`0`)+`-`+String(t.getUTCDate()).padStart(2,`0`)}function mc(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.getUTCFullYear()+`-`+String(t.getUTCMonth()+1).padStart(2,`0`)+`-`+String(t.getUTCDate()).padStart(2,`0`)+` `+String(t.getUTCHours()).padStart(2,`0`)+`:`+String(t.getUTCMinutes()).padStart(2,`0`)+`:`+String(t.getUTCSeconds()).padStart(2,`0`)+` UTC`}function hc(e){return String(e&&e.provider||``).trim()}function gc(e){return String(e&&e.provider_name||``).trim()||hc(e)}function _c(e,t){let n=String(t||``).trim();if(!n)return`-`;let r=gc(e);return!r||n===r||n.startsWith(r+`/`)?n:r+`/`+n}function vc(e){return _c(e,e&&e.model)}function yc(e){return _c(e,e&&e.resolved_model)}function bc(e){let t=String(e&&(e.requested_model||e.model)||``).trim();if(!e)return t;let n=String(e.data&&e.data.failover&&e.data.failover.target_model||``).trim();if(n&&n!==t)return t+` ⮕ `+n;if(e.alias_used&&e.resolved_model){let n=yc(e);if(n&&n!==`-`&&n!==t)return t+` ⮕ `+n}return t}var xc=`gomodel_date_range`,Sc=1;function Cc(e){return/^[1-9]\d*$/.test(String(e??``))}var wc=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function Tc({selectedPreset:e,startKey:t,endKey:n,followsToday:r}){return e&&Cc(e)?{v:Sc,mode:`preset`,days:String(e)}:e?null:ts(t)&&ts(n)?{v:Sc,mode:`custom`,start:t,end:n,follow:r===!0}:null}function Ec(e){let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return null}return!t||typeof t!=`object`?null:t.mode===`preset`?Cc(t.days)?{mode:`preset`,days:String(t.days)}:null:t.mode===`custom`&&ts(t.start)&&ts(t.end)&&t.start<=t.end?{mode:`custom`,start:t.start,end:t.end,follow:t.follow===!0}:null}function Dc(e,t,n){let r=ns(e,t);return r<1||!ts(n)?{start:e,end:t}:{start:es(n,-(r-1)),end:n}}function Oc(e,t){if(e===t)return`Today`;let[n,r,i]=e.split(`-`);return wc[Number(r)-1]+` `+Number(i)+`, `+n}function kc({selectedPreset:e,startKey:t,endKey:n,followsToday:r,todayKey:i}){if(e)return`Last `+e+` days`;if(!ts(t)||!ts(n))return``;let a=ns(t,n);return r||n===i?a===1?`Today`:`Last `+a+` days`:a===1?`1 day`:a+` days`}function Ac({selectedPreset:e,startKey:t,endKey:n,todayKey:r}){if(e)return`Last `+e+` days`;let i=e=>Oc(e,r);return ts(t)&&ts(n)?t===n?i(t):i(t)+` – `+i(n):ts(t)?i(t)+` – ...`:`Last 30 days`}var jc=6e4,Mc=new class{#e=k(j(`30`));get days(){return I(this.#e)}set days(e){A(this.#e,e,!0)}#t=k(j(`30`));get selectedPreset(){return I(this.#t)}set selectedPreset(e){A(this.#t,e,!0)}#n=k(null);get customStartDate(){return I(this.#n)}set customStartDate(e){A(this.#n,e,!0)}#r=k(null);get customEndDate(){return I(this.#r)}set customEndDate(e){A(this.#r,e,!0)}#i=k(!1);get followsToday(){return I(this.#i)}set followsToday(e){A(this.#i,e,!0)}#a=k(`daily`);get interval(){return I(this.#a)}set interval(e){A(this.#a,e,!0)}#o=k(0);get syncTick(){return I(this.#o)}set syncTick(e){A(this.#o,e,!0)}init(){this.restore(),this.syncToToday(),typeof setInterval==`function`&&setInterval(()=>this.syncToToday(),jc)}queryStr(){return this.customStartDate&&this.customEndDate?`start_date=`+fc(this.customStartDate)+`&end_date=`+fc(this.customEndDate):`days=`+this.days}selectPreset(e){this.selectedPreset=e,this.customStartDate=null,this.customEndDate=null,this.followsToday=!1,this.days=e,this.persist()}selectStart(e){this.selectedPreset=null,this.customStartDate=e,this.customEndDate&&this.customEndDatet.category===e);return t?t.count:0}get filteredModels(){if(!this.filter)return this.models;let e=this.filter.toLowerCase();return this.models.filter(t=>(t.model?.id??``).toLowerCase().includes(e)||(t.provider_name??``).toLowerCase().includes(e)||(t.provider_type??``).toLowerCase().includes(e)||(t.selector??``).toLowerCase().includes(e)||(t.model?.owned_by??``).toLowerCase().includes(e)||(t.model?.metadata?.modes??[]).join(`,`).toLowerCase().includes(e)||(t.model?.metadata?.categories??[]).join(`,`).toLowerCase().includes(e))}},Pc=R(``);function Fc(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=Pc(),n=P(M(t),2);T(t),L(`click`,n,()=>K.openDialog()),z(e,t)};V(r,e=>{K.authError&&e(i)}),z(e,n),D()}Hr([`click`]);function Ic(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null}}function Lc(){return{summary:{total_hits:0,exact_hits:0,semantic_hits:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,total_saved_cost:null},daily:[]}}var Rc=new class{#e=k(j(Ic()));get summary(){return I(this.#e)}set summary(e){A(this.#e,e,!0)}#t=k(j([]));get daily(){return I(this.#t)}set daily(e){A(this.#t,e,!0)}#n=k(j(Lc()));get cacheOverview(){return I(this.#n)}set cacheOverview(e){A(this.#n,e,!0)}#r=k(!1);get loading(){return I(this.#r)}set loading(e){A(this.#r,e,!0)}#i=null;#a=null;cacheAnalyticsEnabled(){return Ss.cacheVisible()}async fetchUsage(){this.#i&&this.#i.abort();let e=new AbortController;this.#i=e,this.loading=!0;try{let t=Mc.queryStr()+`&interval=`+Mc.interval,[n,r]=await Promise.all([_s(`/admin/usage/summary?`+t,{label:`usage summary`,signal:e.signal}),_s(`/admin/usage/daily?`+t,{label:`usage daily`,signal:e.signal})]);if(n.stale||r.stale||e.signal.aborted)return;if(!n.ok||!r.ok){this.summary=Ic(),this.daily=[],this.cacheOverview=Lc();return}this.summary=n.data||Ic(),this.daily=Array.isArray(r.data)?r.data:[]}catch(e){if(ys(e))return;console.error(`Failed to fetch usage:`,e),this.summary=Ic(),this.daily=[]}finally{this.#i===e&&(this.#i=null,this.loading=!1)}}async fetchCacheOverview(e=``){if(await Ss.ensureLoaded(),!this.cacheAnalyticsEnabled()){this.cacheOverview=Lc();return}this.#a&&this.#a.abort();let t=new AbortController;this.#a=t;try{let n=await _s(`/admin/cache/overview?`+(Mc.queryStr()+`&interval=`+Mc.interval+e),{label:`cache overview`,signal:t.signal});if(n.stale||t.signal.aborted)return;if(!n.ok){this.cacheOverview=Lc();return}let r=n.data&&typeof n.data==`object`?n.data:Lc();r.summary||=Lc().summary,Array.isArray(r.daily)||(r.daily=[]),this.cacheOverview=r}catch(e){if(ys(e))return;console.error(`Failed to fetch cache overview:`,e),this.cacheOverview=Lc()}finally{this.#a===t&&(this.#a=null)}}},zc=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`];function Bc(e,t){let n=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return zc[n.getUTCMonth()]+` `+n.getUTCFullYear()}function Vc(e,t,n){let r=e.getUTCFullYear(),i=e.getUTCMonth()+t,a=new Date(Date.UTC(r,i,1)),o=new Date(Date.UTC(r,i+1,0)),s=(a.getUTCDay()+6)%7,c=[],l=new Date(Date.UTC(r,i,0));for(let e=s-1;e>=0;e--){let t=l.getUTCDate()-e,a=new Date(Date.UTC(r,i-1,t));c.push({day:t,date:a,current:!1,key:`p-`+n(a)})}for(let e=1;e<=o.getUTCDate();e++){let t=new Date(Date.UTC(r,i,e));c.push({day:e,date:t,current:!0,key:`c-`+n(t)})}let u=42-c.length;for(let e=1;e<=u;e++){let t=new Date(Date.UTC(r,i+1,e));c.push({day:e,date:t,current:!1,key:`n-`+n(t)})}return c}function Hc(e,t,n){let r=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return n&&r.getTime()>n.getTime()?e:r}function Uc(e,t){return e.getUTCFullYear()===t.getUTCFullYear()&&e.getUTCMonth()===t.getUTCMonth()}var Wc=R(``),Gc=R(``),Kc=R(``),qc=R(`
MoTuWeThFrSaSu
`);function Jc(e,t){E(t,!0);let n=ya(t,`offset`,3,0),r=O(()=>Vc(t.calendarMonth,n(),e=>ds.dateToDateKey(e))),i=O(()=>Uc(t.calendarMonth,ds.todayDate())),a=e=>ds.dateToDateKey(e.date),o=e=>a(e)>ds.currentDateKey(),s=e=>e.current&&a(e)===ds.currentDateKey();function c(e,t){let n=t===`start`?Mc.rangeStart():Mc.rangeEnd();return e.current&&!!n&&a(e)===ds.dateToDateKey(n)}function l(e){let t=Mc.rangeStart(),n=Mc.rangeEnd();return!e.current||!t||!n?!1:a(e)>=ds.dateToDateKey(t)&&a(e)<=ds.dateToDateKey(n)}var u=qc(),d=M(u),f=M(d);let p;var m=P(f,2),h=M(m,!0);T(m);var g=P(m,2),_=e=>{z(e,Wc())},v=e=>{var n=Gc();F(()=>n.disabled=I(i)),L(`click`,n,function(...e){t.onnext?.apply(this,e)}),z(e,n)};V(g,e=>{n()===-1?e(_):e(v,-1)}),T(d);var y=P(d,4);H(y,21,()=>I(r),e=>e.key,(e,n)=>{var r=Kc(),i=M(r,!0);T(r),F((e,t)=>{U(r,1,e,`svelte-g7ga4u`),r.disabled=t,B(i,I(n).day)},[()=>Fi([`dp-day`,{"other-month":!I(n).current,today:s(I(n)),"range-start":c(I(n),`start`),"range-end":c(I(n),`end`),"in-range":l(I(n)),disabled:o(I(n))}]),()=>o(I(n))||!I(n).current]),L(`click`,r,()=>t.onselect?.(I(n))),z(e,r)}),T(y),T(u),F(e=>{p=U(f,1,`dp-nav-btn svelte-g7ga4u`,null,p,{"dp-nav-prev-mobile":n()!==-1}),B(h,e)},[()=>Bc(t.calendarMonth,n())]),L(`click`,f,function(...e){t.onprev?.apply(this,e)}),z(e,u),D()}Hr([`click`]);var Yc=R(``),Xc=R(`
`),Zc=Xr(``),Qc=Xr(``),$c=R(`
`),el=R(`
`);function tl(e,t){E(t,!0);let n=[`3`,`7`,`14`,`30`,`90`],r=k(!1),i=k(`start`),a=k(j(new Date)),o=k(j({show:!1,x:0,y:0}));function s(){A(r,!I(r)),I(r)&&(Mc.syncToToday(),A(a,ds.startOfMonthDate(Mc.customEndDate||ds.todayDate()),!0),A(i,`start`))}function c(){A(r,!1),A(o,{show:!1,x:0,y:0},!0)}let l=Mc.syncTick;An(()=>{let e=Mc.syncTick;e!==l&&(l=e,t.onchange?.())});function u(e){Mc.selectPreset(e),A(i,`start`),t.onchange?.(),c()}let d=()=>A(a,Hc(I(a),-1),!0),f=()=>A(a,Hc(I(a),1,ds.startOfMonthDate(ds.todayDate())),!0);function p(e){let n=new Date(e.date);if(I(i)===`start`){Mc.selectStart(n),A(i,`end`),t.onchange?.();return}Mc.selectEnd(n),A(i,`start`),t.onchange?.(),c()}var m=el(),h=M(m),g=P(M(h),2),_=M(g,!0);T(g);var v=P(g,2);let y;T(h);var b=P(h,2),x=e=>{var t=Xc(),r=M(t);H(r,20,()=>n,e=>e,(e,t)=>{var n=Yc();let r;var i=M(n);T(n),F(()=>{r=U(n,1,`preset-btn svelte-ax7ma4`,null,r,{active:Mc.selectedPreset===t}),B(i,`Last ${t??``} days`)}),L(`click`,n,()=>u(t)),z(e,n)}),T(r);var i=P(r,2);H(i,20,()=>[-1,0],e=>e,(e,t)=>{Jc(e,{get calendarMonth(){return I(a)},get offset(){return t},onprev:d,onnext:f,onselect:p})}),T(i),T(t),L(`mousemove`,i,e=>A(o,{show:!0,x:e.clientX,y:e.clientY},!0)),Vr(`mouseleave`,i,()=>A(o,{show:!1,x:0,y:0},!0)),z(e,t)};V(b,e=>{I(r)&&e(x)});var S=P(b,2),C=e=>{var t=$c(),n=M(t),r=e=>{z(e,Zc())},a=e=>{z(e,Qc())};V(n,e=>{I(i)===`start`?e(r):e(a,-1)});var s=P(n,2),c=M(s,!0);T(s),T(t),F(()=>{Hi(t,`left:${I(o).x??``}px;top:${I(o).y??``}px`),B(c,I(i)===`end`?`Select end date`:`Select start date`)}),z(e,t)};V(S,e=>{I(o).show&&e(C)}),T(m),Mi(m,()=>I(r)?As(c):void 0),F((e,t)=>{W(h,`title`,e),B(_,t),y=U(v,0,`date-picker-chevron svelte-ax7ma4`,null,y,{open:I(r)})},[()=>Mc.dateRangeSpanLabel(),()=>Mc.dateRangeLabel()]),L(`click`,h,s),z(e,m),D()}Hr([`click`,`mousemove`]);function nl(e){return e+.5|0}var rl=(e,t,n)=>Math.max(Math.min(e,n),t);function il(e){return rl(nl(e*2.55),0,255)}function al(e){return rl(nl(e*255),0,255)}function ol(e){return rl(nl(e/2.55)/100,0,1)}function sl(e){return rl(nl(e*100),0,100)}var cl={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},ll=[...`0123456789ABCDEF`],ul=e=>ll[e&15],dl=e=>ll[(e&240)>>4]+ll[e&15],fl=e=>(e&240)>>4==(e&15),pl=e=>fl(e.r)&&fl(e.g)&&fl(e.b)&&fl(e.a);function ml(e){var t=e.length,n;return e[0]===`#`&&(t===4||t===5?n={r:255&cl[e[1]]*17,g:255&cl[e[2]]*17,b:255&cl[e[3]]*17,a:t===5?cl[e[4]]*17:255}:(t===7||t===9)&&(n={r:cl[e[1]]<<4|cl[e[2]],g:cl[e[3]]<<4|cl[e[4]],b:cl[e[5]]<<4|cl[e[6]],a:t===9?cl[e[7]]<<4|cl[e[8]]:255})),n}var hl=(e,t)=>e<255?t(e):``;function gl(e){var t=pl(e)?ul:dl;return e?`#`+t(e.r)+t(e.g)+t(e.b)+hl(e.a,t):void 0}var _l=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function vl(e,t,n){let r=t*Math.min(n,1-n),i=(t,i=(t+e/30)%12)=>n-r*Math.max(Math.min(i-3,9-i,1),-1);return[i(0),i(8),i(4)]}function yl(e,t,n){let r=(r,i=(r+e/60)%6)=>n-n*t*Math.max(Math.min(i,4-i,1),0);return[r(5),r(3),r(1)]}function bl(e,t,n){let r=vl(e,1,.5),i;for(t+n>1&&(i=1/(t+n),t*=i,n*=i),i=0;i<3;i++)r[i]*=1-t-n,r[i]+=t;return r}function xl(e,t,n,r,i){return e===i?(t-n)/r+(t.5?l/(2-i-a):l/(i+a),s=xl(t,n,r,l,i),s=s*60+.5),[s|0,c||0,o]}function Cl(e,t,n,r){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,n,r)).map(al)}function wl(e,t,n){return Cl(vl,e,t,n)}function Tl(e,t,n){return Cl(bl,e,t,n)}function El(e,t,n){return Cl(yl,e,t,n)}function Dl(e){return(e%360+360)%360}function Ol(e){let t=_l.exec(e),n=255,r;if(!t)return;t[5]!==r&&(n=t[6]?il(+t[5]):al(+t[5]));let i=Dl(+t[2]),a=t[3]/100,o=t[4]/100;return r=t[1]===`hwb`?Tl(i,a,o):t[1]===`hsv`?El(i,a,o):wl(i,a,o),{r:r[0],g:r[1],b:r[2],a:n}}function kl(e,t){var n=Sl(e);n[0]=Dl(n[0]+t),n=wl(n),e.r=n[0],e.g=n[1],e.b=n[2]}function Al(e){if(!e)return;let t=Sl(e),n=t[0],r=sl(t[1]),i=sl(t[2]);return e.a<255?`hsla(${n}, ${r}%, ${i}%, ${ol(e.a)})`:`hsl(${n}, ${r}%, ${i}%)`}var jl={x:`dark`,Z:`light`,Y:`re`,X:`blu`,W:`gr`,V:`medium`,U:`slate`,A:`ee`,T:`ol`,S:`or`,B:`ra`,C:`lateg`,D:`ights`,R:`in`,Q:`turquois`,E:`hi`,P:`ro`,O:`al`,N:`le`,M:`de`,L:`yello`,F:`en`,K:`ch`,G:`arks`,H:`ea`,I:`ightg`,J:`wh`},Ml={OiceXe:`f0f8ff`,antiquewEte:`faebd7`,aqua:`ffff`,aquamarRe:`7fffd4`,azuY:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`0`,blanKedOmond:`ffebcd`,Xe:`ff`,XeviTet:`8a2be2`,bPwn:`a52a2a`,burlywood:`deb887`,caMtXe:`5f9ea0`,KartYuse:`7fff00`,KocTate:`d2691e`,cSO:`ff7f50`,cSnflowerXe:`6495ed`,cSnsilk:`fff8dc`,crimson:`dc143c`,cyan:`ffff`,xXe:`8b`,xcyan:`8b8b`,xgTMnPd:`b8860b`,xWay:`a9a9a9`,xgYF:`6400`,xgYy:`a9a9a9`,xkhaki:`bdb76b`,xmagFta:`8b008b`,xTivegYF:`556b2f`,xSange:`ff8c00`,xScEd:`9932cc`,xYd:`8b0000`,xsOmon:`e9967a`,xsHgYF:`8fbc8f`,xUXe:`483d8b`,xUWay:`2f4f4f`,xUgYy:`2f4f4f`,xQe:`ced1`,xviTet:`9400d3`,dAppRk:`ff1493`,dApskyXe:`bfff`,dimWay:`696969`,dimgYy:`696969`,dodgerXe:`1e90ff`,fiYbrick:`b22222`,flSOwEte:`fffaf0`,foYstWAn:`228b22`,fuKsia:`ff00ff`,gaRsbSo:`dcdcdc`,ghostwEte:`f8f8ff`,gTd:`ffd700`,gTMnPd:`daa520`,Way:`808080`,gYF:`8000`,gYFLw:`adff2f`,gYy:`808080`,honeyMw:`f0fff0`,hotpRk:`ff69b4`,RdianYd:`cd5c5c`,Rdigo:`4b0082`,ivSy:`fffff0`,khaki:`f0e68c`,lavFMr:`e6e6fa`,lavFMrXsh:`fff0f5`,lawngYF:`7cfc00`,NmoncEffon:`fffacd`,ZXe:`add8e6`,ZcSO:`f08080`,Zcyan:`e0ffff`,ZgTMnPdLw:`fafad2`,ZWay:`d3d3d3`,ZgYF:`90ee90`,ZgYy:`d3d3d3`,ZpRk:`ffb6c1`,ZsOmon:`ffa07a`,ZsHgYF:`20b2aa`,ZskyXe:`87cefa`,ZUWay:`778899`,ZUgYy:`778899`,ZstAlXe:`b0c4de`,ZLw:`ffffe0`,lime:`ff00`,limegYF:`32cd32`,lRF:`faf0e6`,magFta:`ff00ff`,maPon:`800000`,VaquamarRe:`66cdaa`,VXe:`cd`,VScEd:`ba55d3`,VpurpN:`9370db`,VsHgYF:`3cb371`,VUXe:`7b68ee`,VsprRggYF:`fa9a`,VQe:`48d1cc`,VviTetYd:`c71585`,midnightXe:`191970`,mRtcYam:`f5fffa`,mistyPse:`ffe4e1`,moccasR:`ffe4b5`,navajowEte:`ffdead`,navy:`80`,Tdlace:`fdf5e6`,Tive:`808000`,TivedBb:`6b8e23`,Sange:`ffa500`,SangeYd:`ff4500`,ScEd:`da70d6`,pOegTMnPd:`eee8aa`,pOegYF:`98fb98`,pOeQe:`afeeee`,pOeviTetYd:`db7093`,papayawEp:`ffefd5`,pHKpuff:`ffdab9`,peru:`cd853f`,pRk:`ffc0cb`,plum:`dda0dd`,powMrXe:`b0e0e6`,purpN:`800080`,YbeccapurpN:`663399`,Yd:`ff0000`,Psybrown:`bc8f8f`,PyOXe:`4169e1`,saddNbPwn:`8b4513`,sOmon:`fa8072`,sandybPwn:`f4a460`,sHgYF:`2e8b57`,sHshell:`fff5ee`,siFna:`a0522d`,silver:`c0c0c0`,skyXe:`87ceeb`,UXe:`6a5acd`,UWay:`708090`,UgYy:`708090`,snow:`fffafa`,sprRggYF:`ff7f`,stAlXe:`4682b4`,tan:`d2b48c`,teO:`8080`,tEstN:`d8bfd8`,tomato:`ff6347`,Qe:`40e0d0`,viTet:`ee82ee`,JHt:`f5deb3`,wEte:`ffffff`,wEtesmoke:`f5f5f5`,Lw:`ffff00`,LwgYF:`9acd32`};function Nl(){let e={},t=Object.keys(Ml),n=Object.keys(jl),r,i,a,o,s;for(r=0;r>16&255,a>>8&255,a&255]}return e}var Pl;function Fl(e){Pl||(Pl=Nl(),Pl.transparent=[0,0,0,0]);let t=Pl[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Il=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Ll(e){let t=Il.exec(e),n=255,r,i,a;if(t){if(t[7]!==r){let e=+t[7];n=t[8]?il(e):rl(e*255,0,255)}return r=+t[1],i=+t[3],a=+t[5],r=255&(t[2]?il(r):rl(r,0,255)),i=255&(t[4]?il(i):rl(i,0,255)),a=255&(t[6]?il(a):rl(a,0,255)),{r,g:i,b:a,a:n}}}function Rl(e){return e&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${ol(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`)}var zl=e=>e<=.0031308?e*12.92:e**(1/2.4)*1.055-.055,Bl=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4;function Vl(e,t,n){let r=Bl(ol(e.r)),i=Bl(ol(e.g)),a=Bl(ol(e.b));return{r:al(zl(r+n*(Bl(ol(t.r))-r))),g:al(zl(i+n*(Bl(ol(t.g))-i))),b:al(zl(a+n*(Bl(ol(t.b))-a))),a:e.a+n*(t.a-e.a)}}function Hl(e,t,n){if(e){let r=Sl(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*n,t===0?360:1)),r=wl(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function Ul(e,t){return e&&Object.assign(t||{},e)}function Wl(e){var t={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(t={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(t.a=al(e[3]))):(t=Ul(e,{r:0,g:0,b:0,a:1}),t.a=al(t.a)),t}function Gl(e){return e.charAt(0)===`r`?Ll(e):Ol(e)}var Kl=class e{constructor(t){if(t instanceof e)return t;let n=typeof t,r;n===`object`?r=Wl(t):n===`string`&&(r=ml(t)||Fl(t)||Gl(t)),this._rgb=r,this._valid=!!r}get valid(){return this._valid}get rgb(){var e=Ul(this._rgb);return e&&(e.a=ol(e.a)),e}set rgb(e){this._rgb=Wl(e)}rgbString(){return this._valid?Rl(this._rgb):void 0}hexString(){return this._valid?gl(this._rgb):void 0}hslString(){return this._valid?Al(this._rgb):void 0}mix(e,t){if(e){let n=this.rgb,r=e.rgb,i,a=t===i?.5:t,o=2*a-1,s=n.a-r.a,c=((o*s===-1?o:(o+s)/(1+o*s))+1)/2;i=1-c,n.r=255&c*n.r+i*r.r+.5,n.g=255&c*n.g+i*r.g+.5,n.b=255&c*n.b+i*r.b+.5,n.a=a*n.a+(1-a)*r.a,this.rgb=n}return this}interpolate(e,t){return e&&(this._rgb=Vl(this._rgb,e._rgb,t)),this}clone(){return new e(this.rgb)}alpha(e){return this._rgb.a=al(e),this}clearer(e){let t=this._rgb;return t.a*=1-e,this}greyscale(){let e=this._rgb;return e.r=e.g=e.b=nl(e.r*.3+e.g*.59+e.b*.11),this}opaquer(e){let t=this._rgb;return t.a*=1+e,this}negate(){let e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return Hl(this._rgb,2,e),this}darken(e){return Hl(this._rgb,2,-e),this}saturate(e){return Hl(this._rgb,1,e),this}desaturate(e){return Hl(this._rgb,1,-e),this}rotate(e){return kl(this._rgb,e),this}};function ql(){}var Jl=(()=>{let e=0;return()=>e++})();function Yl(e){return e==null}function Xl(e){if(Array.isArray&&Array.isArray(e))return!0;let t=Object.prototype.toString.call(e);return t.slice(0,7)===`[object`&&t.slice(-6)===`Array]`}function Zl(e){return e!==null&&Object.prototype.toString.call(e)===`[object Object]`}function Ql(e){return(typeof e==`number`||e instanceof Number)&&isFinite(+e)}function $l(e,t){return Ql(e)?e:t}function eu(e,t){return e===void 0?t:e}var tu=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100:+e/t,nu=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100*t:+e;function ru(e,t,n){if(e&&typeof e.call==`function`)return e.apply(n,t)}function iu(e,t,n,r){let i,a,o;if(Xl(e))if(a=e.length,r)for(i=a-1;i>=0;i--)t.call(n,e[i],i);else for(i=0;ie,x:e=>e.x,y:e=>e.y};function pu(e){let t=e.split(`.`),n=[],r=``;for(let e of t)r+=e,r.endsWith(`\\`)?r=r.slice(0,-1)+`.`:(n.push(r),r=``);return n}function mu(e){let t=pu(e);return e=>{for(let n of t){if(n===``)break;e&&=e[n]}return e}}function hu(e,t){return(fu[t]||(fu[t]=mu(t)))(e)}function gu(e){return e.charAt(0).toUpperCase()+e.slice(1)}var _u=e=>e!==void 0,vu=e=>typeof e==`function`,yu=(e,t)=>{if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0};function bu(e){return e.type===`mouseup`||e.type===`click`||e.type===`contextmenu`}var xu=Math.PI,Su=2*xu,Cu=Su+xu,wu=1/0,Tu=xu/180,Eu=xu/2,Du=xu/4,Ou=xu*2/3,ku=Math.log10,Au=Math.sign;function ju(e,t,n){return Math.abs(e-t)e-t).pop(),t}function Pu(e){return typeof e==`symbol`||typeof e==`object`&&!!e&&!(Symbol.toPrimitive in e||`toString`in e||`valueOf`in e)}function Fu(e){return!Pu(e)&&!isNaN(parseFloat(e))&&isFinite(e)}function Iu(e,t){let n=Math.round(e);return n-t<=e&&n+t>=e}function Lu(e,t,n){let r,i,a;for(r=0,i=e.length;rc&&l=Math.min(t,n)-r&&e<=Math.max(t,n)+r}function Yu(e,t,n){n||=(n=>e[n]1;)a=i+r>>1,n(a)?i=a:r=a;return{lo:i,hi:r}}var Xu=(e,t,n,r)=>Yu(e,n,r?r=>{let i=e[r][t];return ie[r][t]Yu(e,n,r=>e[r][t]>=n);function Qu(e,t,n){let r=0,i=e.length;for(;rr&&e[i-1]>n;)i--;return r>0||i{let n=`_onData`+gu(t),r=e[t];Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value(...t){let i=r.apply(this,t);return e._chartjs.listeners.forEach(e=>{typeof e[n]==`function`&&e[n](...t)}),i}})})}function td(e,t){let n=e._chartjs;if(!n)return;let r=n.listeners,i=r.indexOf(t);i!==-1&&r.splice(i,1),!(r.length>0)&&($u.forEach(t=>{delete e[t]}),delete e._chartjs)}function nd(e){let t=new Set(e);return t.size===e.length?e:Array.from(t)}var rd=function(){return typeof window>`u`?function(e){return e()}:window.requestAnimationFrame}();function id(e,t){let n=[],r=!1;return function(...i){n=i,r||(r=!0,rd.call(window,()=>{r=!1,e.apply(t,n)}))}}function ad(e,t){let n;return function(...r){return t?(clearTimeout(n),n=setTimeout(e,t,r)):e.apply(this,r),t}}var od=e=>e===`start`?`left`:e===`end`?`right`:`center`,sd=(e,t,n)=>e===`start`?t:e===`end`?n:(t+n)/2,cd=(e,t,n,r)=>e===(r?`left`:`right`)?n:e===`center`?(t+n)/2:t;function ld(e,t,n){let r=t.length,i=0,a=r;if(e._sorted){let{iScale:o,vScale:s,_parsed:c}=e,l=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null,u=o.axis,{min:d,max:f,minDefined:p,maxDefined:m}=o.getUserBounds();if(p){if(i=Math.min(Xu(c,u,d).lo,n?r:Xu(t,u,o.getPixelForValue(d)).lo),l){let e=c.slice(0,i+1).reverse().findIndex(e=>!Yl(e[s.axis]));i-=Math.max(0,e)}i=Ku(i,0,r-1)}if(m){let e=Math.max(Xu(c,o.axis,f,!0).hi+1,n?0:Xu(t,u,o.getPixelForValue(f),!0).hi+1);if(l){let t=c.slice(e-1).findIndex(e=>!Yl(e[s.axis]));e+=Math.max(0,t)}a=Ku(e,i,r)-i}else a=r-i}return{start:i,count:a}}function ud(e){let{xScale:t,yScale:n,_scaleRanges:r}=e,i={xmin:t.min,xmax:t.max,ymin:n.min,ymax:n.max};if(!r)return e._scaleRanges=i,!0;let a=r.xmin!==t.min||r.xmax!==t.max||r.ymin!==n.min||r.ymax!==n.max;return Object.assign(r,i),a}var dd=e=>e===0||e===1,fd=(e,t,n)=>-(2**(10*--e)*Math.sin((e-t)*Su/n)),pd=(e,t,n)=>2**(-10*e)*Math.sin((e-t)*Su/n)+1,md={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>-e*(e-2),easeInOutQuad:e=>(e/=.5)<1?.5*e*e:-.5*(--e*(e-2)-1),easeInCubic:e=>e*e*e,easeOutCubic:e=>--e*e*e+1,easeInOutCubic:e=>(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2),easeInQuart:e=>e*e*e*e,easeOutQuart:e=>-(--e*e*e*e-1),easeInOutQuart:e=>(e/=.5)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2),easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>--e*e*e*e*e+1,easeInOutQuint:e=>(e/=.5)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2),easeInSine:e=>-Math.cos(e*Eu)+1,easeOutSine:e=>Math.sin(e*Eu),easeInOutSine:e=>-.5*(Math.cos(xu*e)-1),easeInExpo:e=>e===0?0:2**(10*(e-1)),easeOutExpo:e=>e===1?1:-(2**(-10*e))+1,easeInOutExpo:e=>dd(e)?e:e<.5?.5*2**(10*(e*2-1)):.5*(-(2**(-10*(e*2-1)))+2),easeInCirc:e=>e>=1?e:-(Math.sqrt(1-e*e)-1),easeOutCirc:e=>Math.sqrt(1- --e*e),easeInOutCirc:e=>(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1),easeInElastic:e=>dd(e)?e:fd(e,.075,.3),easeOutElastic:e=>dd(e)?e:pd(e,.075,.3),easeInOutElastic(e){let t=.1125,n=.45;return dd(e)?e:e<.5?.5*fd(e*2,t,n):.5+.5*pd(e*2-1,t,n)},easeInBack(e){return e*e*(2.70158*e-1.70158)},easeOutBack(e){return--e*e*(2.70158*e+1.70158)+1},easeInOutBack(e){let t=1.70158;return(e/=.5)<1?.5*(e*e*(((t*=1.525)+1)*e-t)):.5*((e-=2)*e*(((t*=1.525)+1)*e+t)+2)},easeInBounce:e=>1-md.easeOutBounce(1-e),easeOutBounce(e){let t=7.5625,n=2.75;return e<1/n?t*e*e:e<2/n?t*(e-=1.5/n)*e+.75:e<2.5/n?t*(e-=2.25/n)*e+.9375:t*(e-=2.625/n)*e+.984375},easeInOutBounce:e=>e<.5?md.easeInBounce(e*2)*.5:md.easeOutBounce(e*2-1)*.5+.5};function hd(e){if(e&&typeof e==`object`){let t=e.toString();return t===`[object CanvasPattern]`||t===`[object CanvasGradient]`}return!1}function gd(e){return hd(e)?e:new Kl(e)}function _d(e){return hd(e)?e:new Kl(e).saturate(.5).darken(.1).hexString()}var vd=[`x`,`y`,`borderWidth`,`radius`,`tension`],yd=[`color`,`borderColor`,`backgroundColor`];function bd(e){e.set(`animation`,{delay:void 0,duration:1e3,easing:`easeOutQuart`,fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),e.describe(`animation`,{_fallback:!1,_indexable:!1,_scriptable:e=>e!==`onProgress`&&e!==`onComplete`&&e!==`fn`}),e.set(`animations`,{colors:{type:`color`,properties:yd},numbers:{type:`number`,properties:vd}}),e.describe(`animations`,{_fallback:`animation`}),e.set(`transitions`,{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:`transparent`},visible:{type:`boolean`,duration:0}}},hide:{animations:{colors:{to:`transparent`},visible:{type:`boolean`,easing:`linear`,fn:e=>e|0}}}})}function xd(e){e.set(`layout`,{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var Sd=new Map;function Cd(e,t){t||={};let n=e+JSON.stringify(t),r=Sd.get(n);return r||(r=new Intl.NumberFormat(e,t),Sd.set(n,r)),r}function wd(e,t,n){return Cd(t,n).format(e)}var Td={values(e){return Xl(e)?e:``+e},numeric(e,t,n){if(e===0)return`0`;let r=this.chart.options.locale,i,a=e;if(n.length>1){let t=Math.max(Math.abs(n[0].value),Math.abs(n[n.length-1].value));(t<1e-4||t>0x38d7ea4c68000)&&(i=`scientific`),a=Ed(e,n)}let o=ku(Math.abs(a)),s=isNaN(o)?1:Math.max(Math.min(-1*Math.floor(o),20),0),c={notation:i,minimumFractionDigits:s,maximumFractionDigits:s};return Object.assign(c,this.options.ticks.format),wd(e,r,c)},logarithmic(e,t,n){if(e===0)return`0`;let r=n[t].significand||e/10**Math.floor(ku(e));return[1,2,3,5,10,15].includes(r)||t>.8*n.length?Td.numeric.call(this,e,t,n):``}};function Ed(e,t){let n=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(n)>=1&&e!==Math.floor(e)&&(n=e-Math.floor(e)),n}var Dd={formatters:Td};function Od(e){e.set(`scale`,{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:`ticks`,clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(e,t)=>t.lineWidth,tickColor:(e,t)=>t.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:``,padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:``,padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Dd.formatters.values,minor:{},major:{},align:`center`,crossAlign:`near`,showLabelBackdrop:!1,backdropColor:`rgba(255, 255, 255, 0.75)`,backdropPadding:2}}),e.route(`scale.ticks`,`color`,``,`color`),e.route(`scale.grid`,`color`,``,`borderColor`),e.route(`scale.border`,`color`,``,`borderColor`),e.route(`scale.title`,`color`,``,`color`),e.describe(`scale`,{_fallback:!1,_scriptable:e=>!e.startsWith(`before`)&&!e.startsWith(`after`)&&e!==`callback`&&e!==`parser`,_indexable:e=>e!==`borderDash`&&e!==`tickBorderDash`&&e!==`dash`}),e.describe(`scales`,{_fallback:`scale`}),e.describe(`scale.ticks`,{_scriptable:e=>e!==`backdropPadding`&&e!==`callback`,_indexable:e=>e!==`backdropPadding`})}var kd=Object.create(null),Ad=Object.create(null);function jd(e,t){if(!t)return e;let n=t.split(`.`);for(let t=0,r=n.length;te.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[`mousemove`,`mouseout`,`click`,`touchstart`,`touchmove`],this.font={family:`'Helvetica Neue', 'Helvetica', 'Arial', sans-serif`,size:12,style:`normal`,lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,t)=>_d(t.backgroundColor),this.hoverBorderColor=(e,t)=>_d(t.borderColor),this.hoverColor=(e,t)=>_d(t.color),this.indexAxis=`x`,this.interaction={mode:`nearest`,intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(e),this.apply(t)}set(e,t){return Md(this,e,t)}get(e){return jd(this,e)}describe(e,t){return Md(Ad,e,t)}override(e,t){return Md(kd,e,t)}route(e,t,n,r){let i=jd(this,e),a=jd(this,n),o=`_`+t;Object.defineProperties(i,{[o]:{value:i[t],writable:!0},[t]:{enumerable:!0,get(){let e=this[o],t=a[r];return Zl(e)?Object.assign({},t,e):eu(e,t)},set(e){this[o]=e}}})}apply(e){e.forEach(e=>e(this))}}({_scriptable:e=>!e.startsWith(`on`),_indexable:e=>e!==`events`,hover:{_fallback:`interaction`},interaction:{_scriptable:!1,_indexable:!1}},[bd,xd,Od]);function Pd(e){return!e||Yl(e.size)||Yl(e.family)?null:(e.style?e.style+` `:``)+(e.weight?e.weight+` `:``)+e.size+`px `+e.family}function Fd(e,t,n,r,i){let a=t[i];return a||(a=t[i]=e.measureText(i).width,n.push(i)),a>r&&(r=a),r}function Id(e,t,n,r){r||={};let i=r.data=r.data||{},a=r.garbageCollect=r.garbageCollect||[];r.font!==t&&(i=r.data={},a=r.garbageCollect=[],r.font=t),e.save(),e.font=t;let o=0,s=n.length,c,l,u,d,f;for(c=0;cn.length){for(c=0;c0&&e.stroke()}}function Vd(e,t,n){return n||=.5,!t||e&&e.x>t.left-n&&e.xt.top-n&&e.y0&&a.strokeColor!==``,c,l;for(e.save(),e.font=i.string,Kd(e,a),c=0;c+e||0;function tf(e,t){let n={},r=Zl(t),i=r?Object.keys(t):t,a=Zl(e)?r?n=>eu(e[n],e[t[n]]):t=>e[t]:()=>e;for(let e of i)n[e]=ef(a(e));return n}function nf(e){return tf(e,{top:`y`,right:`x`,bottom:`y`,left:`x`})}function rf(e){return tf(e,[`topLeft`,`topRight`,`bottomLeft`,`bottomRight`])}function af(e){let t=nf(e);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function of(e,t){e||={},t||=Nd.font;let n=eu(e.size,t.size);typeof n==`string`&&(n=parseInt(n,10));let r=eu(e.style,t.style);r&&!(``+r).match(Qd)&&(console.warn(`Invalid font style specified: "`+r+`"`),r=void 0);let i={family:eu(e.family,t.family),lineHeight:$d(eu(e.lineHeight,t.lineHeight),n),size:n,style:r,weight:eu(e.weight,t.weight),string:``};return i.string=Pd(i),i}function sf(e,t,n,r){let i=!0,a,o,s;for(a=0,o=e.length;an&&e===0?0:e+t;return{min:o(r,-Math.abs(a)),max:o(i,a)}}function lf(e,t){return Object.assign(Object.create(e),t)}function uf(e,t=[``],n,r,i=()=>e[0]){let a=n||e;return r===void 0&&(r=Ef(`_fallback`,e)),new Proxy({[Symbol.toStringTag]:`Object`,_cacheable:!0,_scopes:e,_rootScopes:a,_fallback:r,_getTarget:i,override:n=>uf([n,...e],t,a,r)},{deleteProperty(t,n){return delete t[n],delete t._keys,delete e[0][n],!0},get(n,r){return hf(n,r,()=>Tf(r,t,e,n))},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e._scopes[0],t)},getPrototypeOf(){return Reflect.getPrototypeOf(e[0])},has(e,t){return Df(e).includes(t)},ownKeys(e){return Df(e)},set(e,t,n){let r=e._storage||=i();return e[t]=r[t]=n,delete e._keys,!0}})}function df(e,t,n,r){let i={_cacheable:!1,_proxy:e,_context:t,_subProxy:n,_stack:new Set,_descriptors:ff(e,r),setContext:t=>df(e,t,n,r),override:i=>df(e.override(i),t,n,r)};return new Proxy(i,{deleteProperty(t,n){return delete t[n],delete e[n],!0},get(e,t,n){return hf(e,t,()=>gf(e,t,n))},getOwnPropertyDescriptor(t,n){return t._descriptors.allKeys?Reflect.has(e,n)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(e,n)},getPrototypeOf(){return Reflect.getPrototypeOf(e)},has(t,n){return Reflect.has(e,n)},ownKeys(){return Reflect.ownKeys(e)},set(t,n,r){return e[n]=r,delete t[n],!0}})}function ff(e,t={scriptable:!0,indexable:!0}){let{_scriptable:n=t.scriptable,_indexable:r=t.indexable,_allKeys:i=t.allKeys}=e;return{allKeys:i,scriptable:n,indexable:r,isScriptable:vu(n)?n:()=>n,isIndexable:vu(r)?r:()=>r}}var pf=(e,t)=>e?e+gu(t):t,mf=(e,t)=>Zl(t)&&e!==`adapters`&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function hf(e,t,n){if(Object.prototype.hasOwnProperty.call(e,t)||t===`constructor`)return e[t];let r=n();return e[t]=r,r}function gf(e,t,n){let{_proxy:r,_context:i,_subProxy:a,_descriptors:o}=e,s=r[t];return vu(s)&&o.isScriptable(t)&&(s=_f(t,s,e,n)),Xl(s)&&s.length&&(s=vf(t,s,e,o.isIndexable)),mf(t,s)&&(s=df(s,i,a&&a[t],o)),s}function _f(e,t,n,r){let{_proxy:i,_context:a,_subProxy:o,_stack:s}=n;if(s.has(e))throw Error(`Recursion detected: `+Array.from(s).join(`->`)+`->`+e);s.add(e);let c=t(a,o||r);return s.delete(e),mf(e,c)&&(c=Sf(i._scopes,i,e,c)),c}function vf(e,t,n,r){let{_proxy:i,_context:a,_subProxy:o,_descriptors:s}=n;if(a.index!==void 0&&r(e))return t[a.index%t.length];if(Zl(t[0])){let n=t,r=i._scopes.filter(e=>e!==n);t=[];for(let c of n){let n=Sf(r,i,e,c);t.push(df(n,a,o&&o[e],s))}}return t}function yf(e,t,n){return vu(e)?e(t,n):e}var bf=(e,t)=>e===!0?t:typeof e==`string`?hu(t,e):void 0;function xf(e,t,n,r,i){for(let a of t){let t=bf(n,a);if(t){e.add(t);let a=yf(t._fallback,n,i);if(a!==void 0&&a!==n&&a!==r)return a}else if(t===!1&&r!==void 0&&n!==r)return null}return!1}function Sf(e,t,n,r){let i=t._rootScopes,a=yf(t._fallback,n,r),o=[...e,...i],s=new Set;s.add(r);let c=Cf(s,o,n,a||n,r);return c===null||a!==void 0&&a!==n&&(c=Cf(s,o,a,c,r),c===null)?!1:uf(Array.from(s),[``],i,a,()=>wf(t,n,r))}function Cf(e,t,n,r,i){for(;n;)n=xf(e,t,n,r,i);return n}function wf(e,t,n){let r=e._getTarget();t in r||(r[t]={});let i=r[t];return Xl(i)&&Zl(n)?n:i||{}}function Tf(e,t,n,r){let i;for(let a of t)if(i=Ef(pf(a,e),n),i!==void 0)return mf(e,i)?Sf(n,r,e,i):i}function Ef(e,t){for(let n of t){if(!n)continue;let t=n[e];if(t!==void 0)return t}}function Df(e){let t=e._keys;return t||=e._keys=Of(e._scopes),t}function Of(e){let t=new Set;for(let n of e)for(let e of Object.keys(n).filter(e=>!e.startsWith(`_`)))t.add(e);return Array.from(t)}function kf(e,t,n,r){let{iScale:i}=e,{key:a=`r`}=this._parsing,o=Array(r),s,c,l,u;for(s=0,c=r;ste===`x`?`y`:`x`;function Nf(e,t,n,r){let i=e.skip?t:e,a=t,o=n.skip?t:n,s=Hu(a,i),c=Hu(o,a),l=s/(s+c),u=c/(s+c);l=isNaN(l)?0:l,u=isNaN(u)?0:u;let d=r*l,f=r*u;return{previous:{x:a.x-d*(o.x-i.x),y:a.y-d*(o.y-i.y)},next:{x:a.x+f*(o.x-i.x),y:a.y+f*(o.y-i.y)}}}function Pf(e,t,n){let r=e.length,i,a,o,s,c,l=jf(e,0);for(let u=0;u!e.skip)),t.cubicInterpolationMode===`monotone`)If(e,i);else{let n=r?e[e.length-1]:e[0];for(a=0,o=e.length;ae.ownerDocument.defaultView.getComputedStyle(e,null);function Wf(e,t){return Uf(e).getPropertyValue(t)}var Gf=[`top`,`right`,`bottom`,`left`];function Kf(e,t,n){let r={};n=n?`-`+n:``;for(let i=0;i<4;i++){let a=Gf[i];r[a]=parseFloat(e[t+`-`+a+n])||0}return r.width=r.left+r.right,r.height=r.top+r.bottom,r}var qf=(e,t,n)=>(e>0||t>0)&&(!n||!n.shadowRoot);function Jf(e,t){let n=e.touches,r=n&&n.length?n[0]:e,{offsetX:i,offsetY:a}=r,o=!1,s,c;if(qf(i,a,e.target))s=i,c=a;else{let e=t.getBoundingClientRect();s=r.clientX-e.left,c=r.clientY-e.top,o=!0}return{x:s,y:c,box:o}}function Yf(e,t){if(`native`in e)return e;let{canvas:n,currentDevicePixelRatio:r}=t,i=Uf(n),a=i.boxSizing===`border-box`,o=Kf(i,`padding`),s=Kf(i,`border`,`width`),{x:c,y:l,box:u}=Jf(e,n),d=o.left+(u&&s.left),f=o.top+(u&&s.top),{width:p,height:m}=t;return a&&(p-=o.width+s.width,m-=o.height+s.height),{x:Math.round((c-d)/p*n.width/r),y:Math.round((l-f)/m*n.height/r)}}function Xf(e,t,n){let r,i;if(t===void 0||n===void 0){let a=e&&Vf(e);if(!a)t=e.clientWidth,n=e.clientHeight;else{let e=a.getBoundingClientRect(),o=Uf(a),s=Kf(o,`border`,`width`),c=Kf(o,`padding`);t=e.width-c.width-s.width,n=e.height-c.height-s.height,r=Hf(o.maxWidth,a,`clientWidth`),i=Hf(o.maxHeight,a,`clientHeight`)}}return{width:t,height:n,maxWidth:r||wu,maxHeight:i||wu}}var Zf=e=>Math.round(e*10)/10;function Qf(e,t,n,r){let i=Uf(e),a=Kf(i,`margin`),o=Hf(i.maxWidth,e,`clientWidth`)||wu,s=Hf(i.maxHeight,e,`clientHeight`)||wu,c=Xf(e,t,n),{width:l,height:u}=c;if(i.boxSizing===`content-box`){let e=Kf(i,`border`,`width`),t=Kf(i,`padding`);l-=t.width+e.width,u-=t.height+e.height}return l=Math.max(0,l-a.width),u=Math.max(0,r?l/r:u-a.height),l=Zf(Math.min(l,o,c.maxWidth)),u=Zf(Math.min(u,s,c.maxHeight)),l&&!u&&(u=Zf(l/2)),(t!==void 0||n!==void 0)&&r&&c.height&&u>c.height&&(u=c.height,l=Zf(Math.floor(u*r))),{width:l,height:u}}function $f(e,t,n){let r=t||1,i=Zf(e.height*r),a=Zf(e.width*r);e.height=Zf(e.height),e.width=Zf(e.width);let o=e.canvas;return o.style&&(n||!o.style.height&&!o.style.width)&&(o.style.height=`${e.height}px`,o.style.width=`${e.width}px`),e.currentDevicePixelRatio!==r||o.height!==i||o.width!==a?(e.currentDevicePixelRatio=r,o.height=i,o.width=a,e.ctx.setTransform(r,0,0,r,0,0),!0):!1}var ep=function(){let e=!1;try{let t={get passive(){return e=!0,!1}};Bf()&&(window.addEventListener(`test`,null,t),window.removeEventListener(`test`,null,t))}catch{}return e}();function tp(e,t){let n=Wf(e,t),r=n&&n.match(/^(\d+)(\.\d+)?px$/);return r?+r[1]:void 0}function np(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:e.y+n*(t.y-e.y)}}function rp(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:r===`middle`?n<.5?e.y:t.y:r===`after`?n<1?e.y:t.y:n>0?t.y:e.y}}function ip(e,t,n,r){let i={x:e.cp2x,y:e.cp2y},a={x:t.cp1x,y:t.cp1y},o=np(e,i,n),s=np(i,a,n),c=np(a,t,n);return np(np(o,s,n),np(s,c,n),n)}var ap=function(e,t){return{x(n){return e+e+t-n},setWidth(e){t=e},textAlign(e){return e===`center`?e:e===`right`?`left`:`right`},xPlus(e,t){return e-t},leftForLtr(e,t){return e-t}}},op=function(){return{x(e){return e},setWidth(e){},textAlign(e){return e},xPlus(e,t){return e+t},leftForLtr(e,t){return e}}};function sp(e,t,n){return e?ap(t,n):op()}function cp(e,t){let n,r;(t===`ltr`||t===`rtl`)&&(n=e.canvas.style,r=[n.getPropertyValue(`direction`),n.getPropertyPriority(`direction`)],n.setProperty(`direction`,t,`important`),e.prevTextDirection=r)}function lp(e,t){t!==void 0&&(delete e.prevTextDirection,e.canvas.style.setProperty(`direction`,t[0],t[1]))}function up(e){return e===`angle`?{between:Gu,compare:Uu,normalize:Wu}:{between:Ju,compare:(e,t)=>e-t,normalize:e=>e}}function dp({start:e,end:t,count:n,loop:r,style:i}){return{start:e%n,end:t%n,loop:r&&(t-e+1)%n===0,style:i}}function fp(e,t,n){let{property:r,start:i,end:a}=n,{between:o,normalize:s}=up(r),c=t.length,{start:l,end:u,loop:d}=e,f,p;if(d){for(l+=c,u+=c,f=0,p=c;fc(i,y,_)&&s(i,y)!==0,x=()=>s(a,_)===0||c(a,y,_),S=()=>h||b(),C=()=>!h||x();for(let e=u,n=u;e<=d;++e)v=t[e%o],!v.skip&&(_=l(v[r]),_!==y&&(h=c(_,i,a),g===null&&S()&&(g=s(_,i)===0?e:n),g!==null&&C()&&(m.push(dp({start:g,end:e,loop:f,count:o,style:p})),g=null),n=e,y=_));return g!==null&&m.push(dp({start:g,end:d,loop:f,count:o,style:p})),m}function mp(e,t){let n=[],r=e.segments;for(let i=0;ii&&e[a%t].skip;)a--;return a%=t,{start:i,end:a}}function gp(e,t,n,r){let i=e.length,a=[],o=t,s=e[t],c;for(c=t+1;c<=n;++c){let n=e[c%i];n.skip||n.stop?s.skip||(r=!1,a.push({start:t%i,end:(c-1)%i,loop:r}),t=o=n.stop?c:null):(o=c,s.skip&&(t=c)),s=n}return o!==null&&a.push({start:t%i,end:o%i,loop:r}),a}function _p(e,t){let n=e.points,r=e.options.spanGaps,i=n.length;if(!i)return[];let a=!!e._loop,{start:o,end:s}=hp(n,i,a,r);return r===!0?vp(e,[{start:o,end:s,loop:a}],n,t):vp(e,gp(n,o,sr({chart:e,initial:t.initial,numSteps:a,currentStep:Math.min(n-t.start,a)}))}_refresh(){this._request||=(this._running=!0,rd.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let t=0;this._charts.forEach((n,r)=>{if(!n.running||!n.items.length)return;let i=n.items,a=i.length-1,o=!1,s;for(;a>=0;--a)s=i[a],s._active?(s._total>n.duration&&(n.duration=s._total),s.tick(e),o=!0):(i[a]=i[i.length-1],i.pop());o&&(r.draw(),this._notify(r,n,e,`progress`)),i.length||(n.running=!1,this._notify(r,n,e,`complete`),n.initial=!1),t+=i.length}),this._lastDate=e,t===0&&(this._running=!1)}_getAnims(e){let t=this._charts,n=t.get(e);return n||(n={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,n)),n}listen(e,t,n){this._getAnims(e).listeners[t].push(n)}add(e,t){!t||!t.length||this._getAnims(e).items.push(...t)}has(e){return this._getAnims(e).items.length>0}start(e){let t=this._charts.get(e);t&&(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((e,t)=>Math.max(e,t._duration),0),this._refresh())}running(e){if(!this._running)return!1;let t=this._charts.get(e);return!(!t||!t.running||!t.items.length)}stop(e){let t=this._charts.get(e);if(!t||!t.items.length)return;let n=t.items,r=n.length-1;for(;r>=0;--r)n[r].cancel();t.items=[],this._notify(e,t,Date.now(),`complete`)}remove(e){return this._charts.delete(e)}},Ep=`transparent`,Dp={boolean(e,t,n){return n>.5?t:e},color(e,t,n){let r=gd(e||Ep),i=r.valid&&gd(t||Ep);return i&&i.valid?i.mix(r,n).hexString():t},number(e,t,n){return e+(t-e)*n}},Op=class{constructor(e,t,n,r){let i=t[n];r=sf([e.to,r,i,e.from]);let a=sf([e.from,i,r]);this._active=!0,this._fn=e.fn||Dp[e.type||typeof a],this._easing=md[e.easing]||md.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=t,this._prop=n,this._from=a,this._to=r,this._promises=void 0}active(){return this._active}update(e,t,n){if(this._active){this._notify(!1);let r=this._target[this._prop],i=n-this._start,a=this._duration-i;this._start=n,this._duration=Math.floor(Math.max(a,e.duration)),this._total+=i,this._loop=!!e.loop,this._to=sf([e.to,t,r,e.from]),this._from=sf([e.from,r,t])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){let t=e-this._start,n=this._duration,r=this._prop,i=this._from,a=this._loop,o=this._to,s;if(this._active=i!==o&&(a||t1?2-s:s,s=this._easing(Math.min(1,Math.max(0,s))),this._target[r]=this._fn(i,o,s)}wait(){let e=this._promises||=[];return new Promise((t,n)=>{e.push({res:t,rej:n})})}_notify(e){let t=e?`res`:`rej`,n=this._promises||[];for(let e=0;e{let i=e[r];if(!Zl(i))return;let a={};for(let e of t)a[e]=i[e];(Xl(i.properties)&&i.properties||[r]).forEach(e=>{(e===r||!n.has(e))&&n.set(e,a)})})}_animateOptions(e,t){let n=t.options,r=jp(e,n);if(!r)return[];let i=this._createAnimations(r,n);return n.$shared&&Ap(e.options.$animations,n).then(()=>{e.options=n},()=>{}),i}_createAnimations(e,t){let n=this._properties,r=[],i=e.$animations||={},a=Object.keys(t),o=Date.now(),s;for(s=a.length-1;s>=0;--s){let c=a[s];if(c.charAt(0)===`$`)continue;if(c===`options`){r.push(...this._animateOptions(e,t));continue}let l=t[c],u=i[c],d=n.get(c);if(u)if(d&&u.active()){u.update(d,l,o);continue}else u.cancel();if(!d||!d.duration){e[c]=l;continue}i[c]=u=new Op(d,e,c,l),r.push(u)}return r}update(e,t){if(this._properties.size===0){Object.assign(e,t);return}let n=this._createAnimations(e,t);if(n.length)return Tp.add(this._chart,n),!0}};function Ap(e,t){let n=[],r=Object.keys(t);for(let t=0;t0||!n&&t<0)return i.index}return null}function Up(e,t){let{chart:n,_cachedMeta:r}=e,i=n._stacks||={},{iScale:a,vScale:o,index:s}=r,c=a.axis,l=o.axis,u=zp(a,o,r),d=t.length,f;for(let e=0;en[e].axis===t).shift()}function Gp(e,t){return lf(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:`default`,type:`dataset`})}function Kp(e,t,n){return lf(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:n,index:t,mode:`default`,type:`data`})}function qp(e,t){let n=e.controller.index,r=e.vScale&&e.vScale.axis;if(r){t||=e._parsed;for(let e of t){let t=e._stacks;if(!t||t[r]===void 0||t[r][n]===void 0)return;delete t[r][n],t[r]._visualValues!==void 0&&t[r]._visualValues[n]!==void 0&&delete t[r]._visualValues[n]}}}var Jp=e=>e===`reset`||e===`none`,Yp=(e,t)=>t?e:Object.assign({},e),Xp=(e,t,n)=>e&&!t.hidden&&t._stacked&&{keys:Fp(n,!0),values:null},Zp=class{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(e,t){this.chart=e,this._ctx=e.ctx,this.index=t,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=Rp(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled(`filler`)&&console.warn(`Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options`)}updateIndex(e){this.index!==e&&qp(this._cachedMeta),this.index=e}linkScales(){let e=this.chart,t=this._cachedMeta,n=this.getDataset(),r=(e,t,n,r)=>e===`x`?t:e===`r`?r:n,i=t.xAxisID=eu(n.xAxisID,Wp(e,`x`)),a=t.yAxisID=eu(n.yAxisID,Wp(e,`y`)),o=t.rAxisID=eu(n.rAxisID,Wp(e,`r`)),s=t.indexAxis,c=t.iAxisID=r(s,i,a,o),l=t.vAxisID=r(s,a,i,o);t.xScale=this.getScaleForId(i),t.yScale=this.getScaleForId(a),t.rScale=this.getScaleForId(o),t.iScale=this.getScaleForId(c),t.vScale=this.getScaleForId(l)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){let t=this._cachedMeta;return e===t.iScale?t.vScale:t.iScale}reset(){this._update(`reset`)}_destroy(){let e=this._cachedMeta;this._data&&td(this._data,this),e._stacked&&qp(e)}_dataCheck(){let e=this.getDataset(),t=e.data||=[],n=this._data;if(Zl(t)){let e=this._cachedMeta;this._data=Lp(t,e)}else if(n!==t){if(n){td(n,this);let e=this._cachedMeta;qp(e),e._parsed=[]}t&&Object.isExtensible(t)&&ed(t,this),this._syncList=[],this._data=t}}addElements(){let e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){let t=this._cachedMeta,n=this.getDataset(),r=!1;this._dataCheck();let i=t._stacked;t._stacked=Rp(t.vScale,t),t.stack!==n.stack&&(r=!0,qp(t),t.stack=n.stack),this._resyncElements(e),(r||i!==t._stacked)&&(Up(this,t._parsed),t._stacked=Rp(t.vScale,t))}configure(){let e=this.chart.config,t=e.datasetScopeKeys(this._type),n=e.getOptionScopes(this.getDataset(),t,!0);this.options=e.createResolver(n,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,t){let{_cachedMeta:n,_data:r}=this,{iScale:i,_stacked:a}=n,o=i.axis,s=e===0&&t===r.length||n._sorted,c=e>0&&n._parsed[e-1],l,u,d;if(this._parsing===!1)n._parsed=r,n._sorted=!0,d=r;else{d=Xl(r[e])?this.parseArrayData(n,r,e,t):Zl(r[e])?this.parseObjectData(n,r,e,t):this.parsePrimitiveData(n,r,e,t);let i=()=>u[o]===null||c&&u[o]t||u=0;--d)if(!p()){this.updateRangeFromParsed(c,e,f,s);break}}return c}getAllParsedValues(e){let t=this._cachedMeta._parsed,n=[],r,i,a;for(r=0,i=t.length;r=0&&ethis.getContext(n,r,t),u);return p.$shared&&(p.$shared=s,i[a]=Object.freeze(Yp(p,s))),p}_resolveAnimations(e,t,n){let r=this.chart,i=this._cachedDataOpts,a=`animation-${t}`,o=i[a];if(o)return o;let s;if(r.options.animation!==!1){let r=this.chart.config,i=r.datasetAnimationScopeKeys(this._type,t),a=r.getOptionScopes(this.getDataset(),i);s=r.createResolver(a,this.getContext(e,n,t))}let c=new kp(r,s&&s.animations);return s&&s._cacheable&&(i[a]=Object.freeze(c)),c}getSharedOptions(e){if(e.$shared)return this._sharedOptions||=Object.assign({},e)}includeOptions(e,t){return!t||Jp(e)||this.chart._animationsDisabled}_getSharedOptions(e,t){let n=this.resolveDataElementOptions(e,t),r=this._sharedOptions,i=this.getSharedOptions(n),a=this.includeOptions(t,i)||i!==r;return this.updateSharedOptions(i,t,n),{sharedOptions:i,includeOptions:a}}updateElement(e,t,n,r){Jp(r)?Object.assign(e,n):this._resolveAnimations(t,r).update(e,n)}updateSharedOptions(e,t,n){e&&!Jp(t)&&this._resolveAnimations(void 0,t).update(e,n)}_setStyle(e,t,n,r){e.active=r;let i=this.getStyle(t,r);this._resolveAnimations(t,n,r).update(e,{options:!r&&this.getSharedOptions(i)||i})}removeHoverStyle(e,t,n){this._setStyle(e,n,`active`,!1)}setHoverStyle(e,t,n){this._setStyle(e,n,`active`,!0)}_removeDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,`active`,!1)}_setDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,`active`,!0)}_resyncElements(e){let t=this._data,n=this._cachedMeta.data;for(let[e,t,n]of this._syncList)this[e](t,n);this._syncList=[];let r=n.length,i=t.length,a=Math.min(i,r);a&&this.parse(0,a),i>r?this._insertElements(r,i-r,e):i{for(e.length+=t,o=e.length-1;o>=a;o--)e[o]=e[o-t]};for(s(i),o=e;oe-t))}return e._cache.$bar}function $p(e){let t=e.iScale,n=Qp(t,e.type),r=t._length,i,a,o,s,c=()=>{o===32767||o===-32768||(_u(s)&&(r=Math.min(r,Math.abs(o-s)||r)),s=o)};for(i=0,a=n.length;i0?i[e-1]:null,s=eMath.abs(s)&&(c=s,l=o),t[n.axis]=l,t._custom={barStart:c,barEnd:l,start:i,end:a,min:o,max:s}}function rm(e,t,n,r){return Xl(e)?nm(e,t,n,r):t[n.axis]=n.parse(e,r),t}function im(e,t,n,r){let i=e.iScale,a=e.vScale,o=i.getLabels(),s=i===a,c=[],l,u,d,f;for(l=n,u=n+r;l=n?1:-1):Au(e)}function sm(e){let t,n,r,i,a;return e.horizontal?(t=e.base>e.x,n=`left`,r=`right`):(t=e.basee.controller.options.grouped),i=n.options.stacked,a=[],o=this._cachedMeta.controller.getParsed(t),s=o&&o[n.axis],c=e=>{let t=e._parsed.find(e=>e[n.axis]===s),r=t&&t[e.vScale.axis];if(Yl(r)||isNaN(r))return!0};for(let n of r)if(!(t!==void 0&&c(n))&&((i===!1||a.indexOf(n.stack)===-1||i===void 0&&n.stack===void 0)&&a.push(n.stack),n.index===e))break;return a.length||a.push(void 0),a}_getStackCount(e){return this._getStacks(void 0,e).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let e=this.chart.scales,t=this.chart.options.indexAxis;return Object.keys(e).filter(n=>e[n].axis===t).shift()}_getAxis(){let e={},t=this.getFirstScaleIdForIndexAxis();for(let n of this.chart.data.datasets)e[eu(this.chart.options.indexAxis===`x`?n.xAxisID:n.yAxisID,t)]=!0;return Object.keys(e)}_getStackIndex(e,t,n){let r=this._getStacks(e,n),i=t===void 0?-1:r.indexOf(t);return i===-1?r.length-1:i}_getRuler(){let e=this.options,t=this._cachedMeta,n=t.iScale,r=[],i,a;for(i=0,a=t.data.length;i=0;--n)t=Math.max(t,e[n].size(this.resolveDataElementOptions(n))/2);return t>0&&t}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart.data.labels||[],{xScale:r,yScale:i}=t,a=this.getParsed(e),o=r.getLabelForValue(a.x),s=i.getLabelForValue(a.y),c=a._custom;return{label:n[e]||``,value:`(`+o+`, `+s+(c?`, `+c:``)+`)`}}update(e){let t=this._cachedMeta.data;this.updateElements(t,0,t.length,e)}updateElements(e,t,n,r){let i=r===`reset`,{iScale:a,vScale:o}=this._cachedMeta,{sharedOptions:s,includeOptions:c}=this._getSharedOptions(t,r),l=a.axis,u=o.axis;for(let d=t;dGu(e,s,c,!0)?1:Math.max(t,t*n,r,r*n),m=(e,t,r)=>Gu(e,s,c,!0)?-1:Math.min(t,t*n,r,r*n),h=p(0,l,d),g=p(Eu,u,f),_=m(xu,l,d),v=m(xu+Eu,u,f);r=(h-_)/2,i=(g-v)/2,a=-(h+_)/2,o=-(g+v)/2}return{ratioX:r,ratioY:i,offsetX:a,offsetY:o}}var gm=class extends Zp{static id=`doughnut`;static defaults={datasetElementType:!1,dataElementType:`arc`,animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:`number`,properties:[`circumference`,`endAngle`,`innerRadius`,`outerRadius`,`startAngle`,`x`,`y`,`offset`,`borderWidth`,`spacing`]}},cutout:`50%`,rotation:0,circumference:360,radius:`100%`,spacing:0,indexAxis:`r`};static descriptors={_scriptable:e=>e!==`spacing`,_indexable:e=>e!==`spacing`&&!e.startsWith(`borderDash`)&&!e.startsWith(`hoverBorderDash`)};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let t=e.data,{labels:{pointStyle:n,textAlign:r,color:i,useBorderRadius:a,borderRadius:o}}=e.legend.options;return t.labels.length&&t.datasets.length?t.labels.map((t,s)=>{let c=e.getDatasetMeta(0).controller.getStyle(s);return{text:t,fillStyle:c.backgroundColor,fontColor:i,hidden:!e.getDataVisibility(s),lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:c.borderWidth,strokeStyle:c.borderColor,textAlign:r,pointStyle:n,borderRadius:a&&(o||c.borderRadius),index:s}}):[]}},onClick(e,t,n){n.chart.toggleDataVisibility(t.index),n.chart.update()}}}};constructor(e,t){super(e,t),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,t){let n=this.getDataset().data,r=this._cachedMeta;if(this._parsing===!1)r._parsed=n;else{let i=e=>+n[e];if(Zl(n[e])){let{key:e=`value`}=this._parsing;i=t=>+hu(n[t],e)}let a,o;for(a=e,o=e+t;a0&&!isNaN(e)?Math.abs(e)/t*Su:0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=wd(t._parsed[e],n.options.locale);return{label:r[e]||``,value:i}}getMaxBorderWidth(e){let t=0,n=this.chart,r,i,a,o,s;if(!e){for(r=0,i=n.data.datasets.length;r0&&this.getParsed(t-1);for(let n=0;n=_){v.skip=!0;continue}let b=this.getParsed(n),x=Yl(b[f]),S=v[d]=a.getPixelForValue(b[d],n),C=v[f]=i||x?o.getBasePixel():o.getPixelForValue(s?this.applyStack(o,b,s):b[f],n);v.skip=isNaN(S)||isNaN(C)||x,v.stop=n>0&&Math.abs(b[d]-y[d])>h,m&&(v.parsed=b,v.raw=c.data[n]),u&&(v.options=l||this.resolveDataElementOptions(n,p.active?`active`:r)),g||this.updateElement(p,n,v,r),y=b}}getMaxOverflow(){let e=this._cachedMeta,t=e.dataset,n=t.options&&t.options.borderWidth||0,r=e.data||[];if(!r.length)return n;let i=r[0].size(this.resolveDataElementOptions(0)),a=r[r.length-1].size(this.resolveDataElementOptions(r.length-1));return Math.max(n,i,a)/2}draw(){let e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}},vm=class extends Zp{static id=`polarArea`;static defaults={dataElementType:`arc`,animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:`number`,properties:[`x`,`y`,`startAngle`,`endAngle`,`innerRadius`,`outerRadius`]}},indexAxis:`r`,startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let t=e.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:n,color:r}}=e.legend.options;return t.labels.map((t,i)=>{let a=e.getDatasetMeta(0).controller.getStyle(i);return{text:t,fillStyle:a.backgroundColor,strokeStyle:a.borderColor,fontColor:r,lineWidth:a.borderWidth,pointStyle:n,hidden:!e.getDataVisibility(i),index:i}})}return[]}},onClick(e,t,n){n.chart.toggleDataVisibility(t.index),n.chart.update()}}},scales:{r:{type:`radialLinear`,angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(e,t){super(e,t),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=wd(t._parsed[e].r,n.options.locale);return{label:r[e]||``,value:i}}parseObjectData(e,t,n,r){return kf.bind(this)(e,t,n,r)}update(e){let t=this._cachedMeta.data;this._updateRadius(),this.updateElements(t,0,t.length,e)}getMinMax(){let e=this._cachedMeta,t={min:1/0,max:-1/0};return e.data.forEach((e,n)=>{let r=this.getParsed(n).r;!isNaN(r)&&this.chart.getDataVisibility(n)&&(rt.max&&(t.max=r))}),t}_updateRadius(){let e=this.chart,t=e.chartArea,n=e.options,r=Math.min(t.right-t.left,t.bottom-t.top),i=Math.max(r/2,0),a=(i-Math.max(n.cutoutPercentage?i/100*n.cutoutPercentage:1,0))/e.getVisibleDatasetCount();this.outerRadius=i-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(e,t,n,r){let i=r===`reset`,a=this.chart,o=a.options.animation,s=this._cachedMeta.rScale,c=s.xCenter,l=s.yCenter,u=s.getIndexAngle(0)-.5*xu,d=u,f,p=360/this.countVisibleElements();for(f=0;f{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&t++}),t}_computeAngle(e,t,n){return this.chart.getDataVisibility(e)?Ru(this.resolveDataElementOptions(e,t).angle||n):0}},ym=Object.freeze({__proto__:null,BarController:pm,BubbleController:mm,DoughnutController:gm,LineController:_m,PieController:class extends gm{static id=`pie`;static defaults={cutout:0,rotation:0,circumference:360,radius:`100%`}},PolarAreaController:vm,RadarController:class extends Zp{static id=`radar`;static defaults={datasetElementType:`line`,dataElementType:`point`,indexAxis:`r`,showLine:!0,elements:{line:{fill:`start`}}};static overrides={aspectRatio:1,scales:{r:{type:`radialLinear`}}};getLabelAndValue(e){let t=this._cachedMeta.vScale,n=this.getParsed(e);return{label:t.getLabels()[e],value:``+t.getLabelForValue(n[t.axis])}}parseObjectData(e,t,n,r){return kf.bind(this)(e,t,n,r)}update(e){let t=this._cachedMeta,n=t.dataset,r=t.data||[],i=t.iScale.getLabels();if(n.points=r,e!==`resize`){let t=this.resolveDatasetElementOptions(e);this.options.showLine||(t.borderWidth=0);let a={_loop:!0,_fullLoop:i.length===r.length,options:t};this.updateElement(n,void 0,a,e)}this.updateElements(r,0,r.length,e)}updateElements(e,t,n,r){let i=this._cachedMeta.rScale,a=r===`reset`;for(let o=t;o0&&this.getParsed(t-1);for(let l=t;l0&&Math.abs(n[f]-v[f])>g,h&&(m.parsed=n,m.raw=c.data[l]),d&&(m.options=u||this.resolveDataElementOptions(l,t.active?`active`:r)),_||this.updateElement(t,l,m,r),v=n}this.updateSharedOptions(u,r,l)}getMaxOverflow(){let e=this._cachedMeta,t=e.data||[];if(!this.options.showLine){let e=0;for(let n=t.length-1;n>=0;--n)e=Math.max(e,t[n].size(this.resolveDataElementOptions(n))/2);return e>0&&e}let n=e.dataset,r=n.options&&n.options.borderWidth||0;if(!t.length)return r;let i=t[0].size(this.resolveDataElementOptions(0)),a=t[t.length-1].size(this.resolveDataElementOptions(t.length-1));return Math.max(r,i,a)/2}}});function bm(){throw Error(`This method is not implemented: Check that a complete date adapter is provided.`)}var xm={_date:class e{static override(t){Object.assign(e.prototype,t)}options;constructor(e){this.options=e||{}}init(){}formats(){return bm()}parse(){return bm()}format(){return bm()}add(){return bm()}diff(){return bm()}startOf(){return bm()}endOf(){return bm()}}};function Sm(e,t,n,r){let{controller:i,data:a,_sorted:o}=e,s=i._cachedMeta.iScale,c=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null;if(s&&t===s.axis&&t!==`r`&&o&&a.length){let o=s._reversePixels?Zu:Xu;if(!r){let r=o(a,t,n);if(c){let{vScale:t}=i._cachedMeta,{_parsed:n}=e,a=n.slice(0,r.lo+1).reverse().findIndex(e=>!Yl(e[t.axis]));r.lo-=Math.max(0,a);let o=n.slice(r.hi).findIndex(e=>!Yl(e[t.axis]));r.hi+=Math.max(0,o)}return r}else if(i._sharedOptions){let e=a[0],r=typeof e.getRange==`function`&&e.getRange(t);if(r){let e=o(a,t,n-r),i=o(a,t,n+r);return{lo:e.lo,hi:i.hi}}}}return{lo:0,hi:a.length-1}}function Cm(e,t,n,r,i){let a=e.getSortedVisibleDatasetMetas(),o=n[t];for(let e=0,n=a.length;e{e[o]&&e[o](t[n],i)&&(a.push({element:e,datasetIndex:r,index:c}),s||=e.inRange(t.x,t.y,i))}),r&&!s?[]:a}var Am={evaluateInteractionItems:Cm,modes:{index(e,t,n,r){let i=Yf(t,e),a=n.axis||`x`,o=n.includeInvisible||!1,s=n.intersect?Tm(e,i,a,r,o):Om(e,i,a,!1,r,o),c=[];return s.length?(e.getSortedVisibleDatasetMetas().forEach(e=>{let t=s[0].index,n=e.data[t];n&&!n.skip&&c.push({element:n,datasetIndex:e.index,index:t})}),c):[]},dataset(e,t,n,r){let i=Yf(t,e),a=n.axis||`xy`,o=n.includeInvisible||!1,s=n.intersect?Tm(e,i,a,r,o):Om(e,i,a,!1,r,o);if(s.length>0){let t=s[0].datasetIndex,n=e.getDatasetMeta(t).data;s=[];for(let e=0;ee.pos===t)}function Nm(e,t){return e.filter(e=>jm.indexOf(e.pos)===-1&&e.box.axis===t)}function Pm(e,t){return e.sort((e,n)=>{let r=t?n:e,i=t?e:n;return r.weight===i.weight?r.index-i.index:r.weight-i.weight})}function Fm(e){let t=[],n,r,i,a,o,s;for(n=0,r=(e||[]).length;ne.box.fullSize),!0),r=Pm(Mm(t,`left`),!0),i=Pm(Mm(t,`right`)),a=Pm(Mm(t,`top`),!0),o=Pm(Mm(t,`bottom`)),s=Nm(t,`x`),c=Nm(t,`y`);return{fullSize:n,leftAndTop:r.concat(a),rightAndBottom:i.concat(c).concat(o).concat(s),chartArea:Mm(t,`chartArea`),vertical:r.concat(i).concat(c),horizontal:a.concat(o).concat(s)}}function zm(e,t,n,r){return Math.max(e[n],t[n])+Math.max(e[r],t[r])}function Bm(e,t){e.top=Math.max(e.top,t.top),e.left=Math.max(e.left,t.left),e.bottom=Math.max(e.bottom,t.bottom),e.right=Math.max(e.right,t.right)}function Vm(e,t,n,r){let{pos:i,box:a}=n,o=e.maxPadding;if(!Zl(i)){n.size&&(e[i]-=n.size);let t=r[n.stack]||{size:0,count:1};t.size=Math.max(t.size,n.horizontal?a.height:a.width),n.size=t.size/t.count,e[i]+=n.size}a.getPadding&&Bm(o,a.getPadding());let s=Math.max(0,t.outerWidth-zm(o,e,`left`,`right`)),c=Math.max(0,t.outerHeight-zm(o,e,`top`,`bottom`)),l=s!==e.w,u=c!==e.h;return e.w=s,e.h=c,n.horizontal?{same:l,other:u}:{same:u,other:l}}function Hm(e){let t=e.maxPadding;function n(n){let r=Math.max(t[n]-e[n],0);return e[n]+=r,r}e.y+=n(`top`),e.x+=n(`left`),n(`right`),n(`bottom`)}function Um(e,t){let n=t.maxPadding;function r(e){let r={left:0,top:0,right:0,bottom:0};return e.forEach(e=>{r[e]=Math.max(t[e],n[e])}),r}return r(e?[`left`,`right`]:[`top`,`bottom`])}function Wm(e,t,n,r){let i=[],a,o,s,c,l,u;for(a=0,o=e.length,l=0;a{typeof e.beforeLayout==`function`&&e.beforeLayout()});let u=c.reduce((e,t)=>t.box.options&&t.box.options.display===!1?e:e+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:n,padding:i,availableWidth:a,availableHeight:o,vBoxMaxWidth:a/2/u,hBoxMaxHeight:o/2}),f=Object.assign({},i);Bm(f,af(r));let p=Object.assign({maxPadding:f,w:a,h:o,x:i.left,y:i.top},i),m=Lm(c.concat(l),d);Wm(s.fullSize,p,d,m),Wm(c,p,d,m),Wm(l,p,d,m)&&Wm(c,p,d,m),Hm(p),Km(s.leftAndTop,p,d,m),p.x+=p.w,p.y+=p.h,Km(s.rightAndBottom,p,d,m),e.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},iu(s.chartArea,t=>{let n=t.box;Object.assign(n,e.chartArea),n.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}},Jm=class{acquireContext(e,t){}releaseContext(e){return!1}addEventListener(e,t,n){}removeEventListener(e,t,n){}getDevicePixelRatio(){return 1}getMaximumSize(e,t,n,r){return t=Math.max(0,t||e.width),n||=e.height,{width:t,height:Math.max(0,r?Math.floor(t/r):n)}}isAttached(e){return!0}updateConfig(e){}},Ym=class extends Jm{acquireContext(e){return e&&e.getContext&&e.getContext(`2d`)||null}updateConfig(e){e.options.animation=!1}},Xm=`$chartjs`,Zm={touchstart:`mousedown`,touchmove:`mousemove`,touchend:`mouseup`,pointerenter:`mouseenter`,pointerdown:`mousedown`,pointermove:`mousemove`,pointerup:`mouseup`,pointerleave:`mouseout`,pointerout:`mouseout`},Qm=e=>e===null||e===``;function $m(e,t){let n=e.style,r=e.getAttribute(`height`),i=e.getAttribute(`width`);if(e[Xm]={initial:{height:r,width:i,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||`block`,n.boxSizing=n.boxSizing||`border-box`,Qm(i)){let t=tp(e,`width`);t!==void 0&&(e.width=t)}if(Qm(r))if(e.style.height===``)e.height=e.width/(t||2);else{let t=tp(e,`height`);t!==void 0&&(e.height=t)}return e}var eh=ep?{passive:!0}:!1;function th(e,t,n){e&&e.addEventListener(t,n,eh)}function nh(e,t,n){e&&e.canvas&&e.canvas.removeEventListener(t,n,eh)}function rh(e,t){let n=Zm[e.type]||e.type,{x:r,y:i}=Yf(e,t);return{type:n,chart:t,native:e,x:r===void 0?null:r,y:i===void 0?null:i}}function ih(e,t){for(let n of e)if(n===t||n.contains(t))return!0}function ah(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=ih(n.addedNodes,r),t&&=!ih(n.removedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}function oh(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=ih(n.removedNodes,r),t&&=!ih(n.addedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}var sh=new Map,ch=0;function lh(){let e=window.devicePixelRatio;e!==ch&&(ch=e,sh.forEach((t,n)=>{n.currentDevicePixelRatio!==e&&t()}))}function uh(e,t){sh.size||window.addEventListener(`resize`,lh),sh.set(e,t)}function dh(e){sh.delete(e),sh.size||window.removeEventListener(`resize`,lh)}function fh(e,t,n){let r=e.canvas,i=r&&Vf(r);if(!i)return;let a=id((e,t)=>{let r=i.clientWidth;n(e,t),r{let t=e[0],n=t.contentRect.width,r=t.contentRect.height;n===0&&r===0||a(n,r)});return o.observe(i),uh(e,a),o}function ph(e,t,n){n&&n.disconnect(),t===`resize`&&dh(e)}function mh(e,t,n){let r=e.canvas,i=id(t=>{e.ctx!==null&&n(rh(t,e))},e);return th(r,t,i),i}var hh=class extends Jm{acquireContext(e,t){let n=e&&e.getContext&&e.getContext(`2d`);return n&&n.canvas===e?($m(e,t),n):null}releaseContext(e){let t=e.canvas;if(!t[Xm])return!1;let n=t[Xm].initial;[`height`,`width`].forEach(e=>{let r=n[e];Yl(r)?t.removeAttribute(e):t.setAttribute(e,r)});let r=n.style||{};return Object.keys(r).forEach(e=>{t.style[e]=r[e]}),t.width=t.width,delete t[Xm],!0}addEventListener(e,t,n){this.removeEventListener(e,t);let r=e.$proxies||={};r[t]=({attach:ah,detach:oh,resize:fh}[t]||mh)(e,t,n)}removeEventListener(e,t){let n=e.$proxies||={},r=n[t];r&&(({attach:ph,detach:ph,resize:ph}[t]||nh)(e,t,r),n[t]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,t,n,r){return Qf(e,t,n,r)}isAttached(e){let t=e&&Vf(e);return!!(t&&t.isConnected)}};function gh(e){return!Bf()||typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas?Ym:hh}var _h=class{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(e){let{x:t,y:n}=this.getProps([`x`,`y`],e);return{x:t,y:n}}hasValue(){return Fu(this.x)&&Fu(this.y)}getProps(e,t){let n=this.$animations;if(!t||!n)return this;let r={};return e.forEach(e=>{r[e]=n[e]&&n[e].active()?n[e]._to:this[e]}),r}};function vh(e,t){let n=e.options.ticks,r=yh(e),i=Math.min(n.maxTicksLimit||r,r),a=n.major.enabled?xh(t):[],o=a.length,s=a[0],c=a[o-1],l=[];if(o>i)return Sh(t,l,a,o/i),l;let u=bh(a,t,i);if(o>0){let e,n,r=o>1?Math.round((c-s)/(o-1)):null;for(Ch(t,l,u,Yl(r)?0:s-r,s),e=0,n=o-1;ei)return t}return Math.max(i,1)}function xh(e){let t=[],n,r;for(n=0,r=e.length;ne===`left`?`right`:e===`right`?`left`:e,Eh=(e,t,n)=>t===`top`||t===`left`?e[t]+n:e[t]-n,Dh=(e,t)=>Math.min(t||e,e);function Oh(e,t){let n=[],r=e.length/t,i=e.length,a=0;for(;ao+s)))return c}function Ah(e,t){iu(e,e=>{let n=e.gc,r=n.length/2,i;if(r>t){for(i=0;in?n:t,n=r&&t>n?t:n,{min:$l(t,$l(n,t)),max:$l(n,$l(t,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){return this._labelItems||=this._computeLabelItems(e)}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){ru(this.options.beforeUpdate,[this])}update(e,t,n){let{beginAtZero:r,grace:i,ticks:a}=this.options,o=a.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=t,this._margins=n=Object.assign({left:0,right:0,top:0,bottom:0},n),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+n.left+n.right:this.height+n.top+n.bottom,this._dataLimitsCached||=(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=cf(this,i,r),!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let s=o=i||n<=1||!this.isHorizontal()){this.labelRotation=r;return}let l=this._getLabelSizes(),u=l.widest.width,d=l.highest.height,f=Ku(this.chart.width-u,0,this.maxWidth);o=e.offset?this.maxWidth/n:f/(n-1),u+6>o&&(o=f/(n-(e.offset?.5:1)),s=this.maxHeight-jh(e.grid)-t.padding-Mh(e.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),a=zu(Math.min(Math.asin(Ku((l.highest.height+6)/o,-1,1)),Math.asin(Ku(s/c,-1,1))-Math.asin(Ku(d/c,-1,1)))),a=Math.max(r,Math.min(i,a))),this.labelRotation=a}afterCalculateLabelRotation(){ru(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){ru(this.options.beforeFit,[this])}fit(){let e={width:0,height:0},{chart:t,options:{ticks:n,title:r,grid:i}}=this,a=this._isVisible(),o=this.isHorizontal();if(a){let a=Mh(r,t.options.font);if(o?(e.width=this.maxWidth,e.height=jh(i)+a):(e.height=this.maxHeight,e.width=jh(i)+a),n.display&&this.ticks.length){let{first:t,last:r,widest:i,highest:a}=this._getLabelSizes(),s=n.padding*2,c=Ru(this.labelRotation),l=Math.cos(c),u=Math.sin(c);if(o){let t=n.mirror?0:u*i.width+l*a.height;e.height=Math.min(this.maxHeight,e.height+t+s)}else{let t=n.mirror?0:l*i.width+u*a.height;e.width=Math.min(this.maxWidth,e.width+t+s)}this._calculatePadding(t,r,u,l)}}this._handleMargins(),o?(this.width=this._length=t.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=t.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,t,n,r){let{ticks:{align:i,padding:a},position:o}=this.options,s=this.labelRotation!==0,c=o!==`top`&&this.axis===`x`;if(this.isHorizontal()){let o=this.getPixelForTick(0)-this.left,l=this.right-this.getPixelForTick(this.ticks.length-1),u=0,d=0;s?c?(u=r*e.width,d=n*t.height):(u=n*e.height,d=r*t.width):i===`start`?d=t.width:i===`end`?u=e.width:i!==`inner`&&(u=e.width/2,d=t.width/2),this.paddingLeft=Math.max((u-o+a)*this.width/(this.width-o),0),this.paddingRight=Math.max((d-l+a)*this.width/(this.width-l),0)}else{let n=t.height/2,r=e.height/2;i===`start`?(n=0,r=e.height):i===`end`&&(n=t.height,r=0),this.paddingTop=n+a,this.paddingBottom=r+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){ru(this.options.afterFit,[this])}isHorizontal(){let{axis:e,position:t}=this.options;return t===`top`||t===`bottom`||e===`x`}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){this.beforeTickToLabelConversion(),this.generateTickLabels(e);let t,n;for(t=0,n=e.length;t({width:a[e]||0,height:o[e]||0});return{first:C(0),last:C(t-1),widest:C(x),highest:C(S),widths:a,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,t){return NaN}getValueForPixel(e){}getPixelForTick(e){let t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);let t=this._startPixel+e*this._length;return qu(this._alignToPixels?Ld(this.chart,t,0):t)}getDecimalForPixel(e){let t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:e,max:t}=this;return e<0&&t<0?t:e>0&&t>0?e:0}getContext(e){let t=this.ticks||[];if(e>=0&&eo*r?o/n:s/r:s*r0:!!e}_computeGridLineItems(e){let t=this.axis,n=this.chart,r=this.options,{grid:i,position:a,border:o}=r,s=i.offset,c=this.isHorizontal(),l=this.ticks.length+ +!!s,u=jh(i),d=[],f=o.setContext(this.getContext()),p=f.display?f.width:0,m=p/2,h=function(e){return Ld(n,e,p)},g,_,v,y,b,x,S,C,w,ee,te,ne;if(a===`top`)g=h(this.bottom),x=this.bottom-u,C=g-m,ee=h(e.top)+m,ne=e.bottom;else if(a===`bottom`)g=h(this.top),ee=e.top,ne=h(e.bottom)-m,x=g+m,C=this.top+u;else if(a===`left`)g=h(this.right),b=this.right-u,S=g-m,w=h(e.left)+m,te=e.right;else if(a===`right`)g=h(this.left),w=e.left,te=h(e.right)-m,b=g+m,S=this.left+u;else if(t===`x`){if(a===`center`)g=h((e.top+e.bottom)/2+.5);else if(Zl(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}ee=e.top,ne=e.bottom,x=g+m,C=x+u}else if(t===`y`){if(a===`center`)g=h((e.left+e.right)/2);else if(Zl(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}b=g-m,S=b-u,w=e.left,te=e.right}let re=eu(r.ticks.maxTicksLimit,l),ie=Math.max(1,Math.ceil(l/re));for(_=0;_0&&(a-=r/2);break}f={left:a,top:i,width:r+t.width,height:n+t.height,color:e.backdropColor}}h.push({label:y,font:w,textOffset:ne,options:{rotation:m,color:n,strokeColor:s,strokeWidth:l,textAlign:d,textBaseline:re,translation:[b,x],backdrop:f}})}return h}_getXAxisLabelAlignment(){let{position:e,ticks:t}=this.options;if(-Ru(this.labelRotation))return e===`top`?`left`:`right`;let n=`center`;return t.align===`start`?n=`left`:t.align===`end`?n=`right`:t.align===`inner`&&(n=`inner`),n}_getYAxisLabelAlignment(e){let{position:t,ticks:{crossAlign:n,mirror:r,padding:i}}=this.options,a=this._getLabelSizes(),o=e+i,s=a.widest.width,c,l;return t===`left`?r?(l=this.right+i,n===`near`?c=`left`:n===`center`?(c=`center`,l+=s/2):(c=`right`,l+=s)):(l=this.right-o,n===`near`?c=`right`:n===`center`?(c=`center`,l-=s/2):(c=`left`,l=this.left)):t===`right`?r?(l=this.left+i,n===`near`?c=`right`:n===`center`?(c=`center`,l-=s/2):(c=`left`,l-=s)):(l=this.left+o,n===`near`?c=`left`:n===`center`?(c=`center`,l+=s/2):(c=`right`,l=this.right)):c=`right`,{textAlign:c,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;let e=this.chart,t=this.options.position;if(t===`left`||t===`right`)return{top:0,left:this.left,bottom:e.height,right:this.right};if(t===`top`||t===`bottom`)return{top:this.top,left:0,bottom:this.bottom,right:e.width}}drawBackground(){let{ctx:e,options:{backgroundColor:t},left:n,top:r,width:i,height:a}=this;t&&(e.save(),e.fillStyle=t,e.fillRect(n,r,i,a),e.restore())}getLineWidthForValue(e){let t=this.options.grid;if(!this._isVisible()||!t.display)return 0;let n=this.ticks.findIndex(t=>t.value===e);return n>=0?t.setContext(this.getContext(n)).lineWidth:0}drawGrid(e){let t=this.options.grid,n=this.ctx,r=this._gridLineItems||=this._computeGridLineItems(e),i,a,o=(e,t,r)=>{!r.width||!r.color||(n.save(),n.lineWidth=r.width,n.strokeStyle=r.color,n.setLineDash(r.borderDash||[]),n.lineDashOffset=r.borderDashOffset,n.beginPath(),n.moveTo(e.x,e.y),n.lineTo(t.x,t.y),n.stroke(),n.restore())};if(t.display)for(i=0,a=r.length;i{this.draw(e)}}]:[{z:r,draw:e=>{this.drawBackground(),this.drawGrid(e),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:n,draw:e=>{this.drawLabels(e)}}]}getMatchingVisibleMetas(e){let t=this.chart.getSortedVisibleDatasetMetas(),n=this.axis+`AxisID`,r=[],i,a;for(i=0,a=t.length;i{let r=n.split(`.`),i=r.pop(),a=[e].concat(r).join(`.`),o=t[n].split(`.`),s=o.pop(),c=o.join(`.`);Nd.route(a,i,c,s)})}function Vh(e){return`id`in e&&`defaults`in e}var Hh=new class{constructor(){this.controllers=new Rh(Zp,`datasets`,!0),this.elements=new Rh(_h,`elements`),this.plugins=new Rh(Object,`plugins`),this.scales=new Rh(Lh,`scales`),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each(`register`,e)}remove(...e){this._each(`unregister`,e)}addControllers(...e){this._each(`register`,e,this.controllers)}addElements(...e){this._each(`register`,e,this.elements)}addPlugins(...e){this._each(`register`,e,this.plugins)}addScales(...e){this._each(`register`,e,this.scales)}getController(e){return this._get(e,this.controllers,`controller`)}getElement(e){return this._get(e,this.elements,`element`)}getPlugin(e){return this._get(e,this.plugins,`plugin`)}getScale(e){return this._get(e,this.scales,`scale`)}removeControllers(...e){this._each(`unregister`,e,this.controllers)}removeElements(...e){this._each(`unregister`,e,this.elements)}removePlugins(...e){this._each(`unregister`,e,this.plugins)}removeScales(...e){this._each(`unregister`,e,this.scales)}_each(e,t,n){[...t].forEach(t=>{let r=n||this._getRegistryForType(t);n||r.isForType(t)||r===this.plugins&&t.id?this._exec(e,r,t):iu(t,t=>{let r=n||this._getRegistryForType(t);this._exec(e,r,t)})})}_exec(e,t,n){let r=gu(e);ru(n[`before`+r],[],n),t[e](n),ru(n[`after`+r],[],n)}_getRegistryForType(e){for(let t=0;te.filter(e=>!t.some(t=>e.plugin.id===t.plugin.id));this._notify(r(t,n),e,`stop`),this._notify(r(n,t),e,`start`)}};function Wh(e){let t={},n=[],r=Object.keys(Hh.plugins.items);for(let e=0;e1&&Zh(e[0].toLowerCase());if(t)return t}throw Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`)}function eg(e,t,n){if(n[t+`AxisID`]===e)return{axis:t}}function tg(e,t){if(t.data&&t.data.datasets){let n=t.data.datasets.filter(t=>t.xAxisID===e||t.yAxisID===e);if(n.length)return eg(e,`x`,n[0])||eg(e,`y`,n[0])}return{}}function ng(e,t){let n=kd[e.type]||{scales:{}},r=t.scales||{},i=Jh(e.type,t),a=Object.create(null);return Object.keys(r).forEach(t=>{let o=r[t];if(!Zl(o))return console.error(`Invalid scale configuration for scale: ${t}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);let s=$h(t,o,tg(t,e),Nd.scales[o.type]),c=Xh(s,i),l=n.scales||{};a[t]=uu(Object.create(null),[{axis:s},o,l[s],l[c]])}),e.data.datasets.forEach(n=>{let i=n.type||e.type,o=n.indexAxis||Jh(i,t),s=(kd[i]||{}).scales||{};Object.keys(s).forEach(e=>{let t=Yh(e,o),i=n[t+`AxisID`]||t;a[i]=a[i]||Object.create(null),uu(a[i],[{axis:t},r[i],s[e]])})}),Object.keys(a).forEach(e=>{let t=a[e];uu(t,[Nd.scales[t.type],Nd.scale])}),a}function rg(e){let t=e.options||={};t.plugins=eu(t.plugins,{}),t.scales=ng(e,t)}function ig(e){return e||={},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function ag(e){return e||={},e.data=ig(e.data),rg(e),e}var og=new Map,sg=new Set;function cg(e,t){let n=og.get(e);return n||(n=t(),og.set(e,n),sg.add(n)),n}var lg=(e,t,n)=>{let r=hu(t,n);r!==void 0&&e.add(r)},ug=class{constructor(e){this._config=ag(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=ig(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){let e=this._config;this.clearCache(),rg(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return cg(e,()=>[[`datasets.${e}`,``]])}datasetAnimationScopeKeys(e,t){return cg(`${e}.transition.${t}`,()=>[[`datasets.${e}.transitions.${t}`,`transitions.${t}`],[`datasets.${e}`,``]])}datasetElementScopeKeys(e,t){return cg(`${e}-${t}`,()=>[[`datasets.${e}.elements.${t}`,`datasets.${e}`,`elements.${t}`,``]])}pluginScopeKeys(e){let t=e.id,n=this.type;return cg(`${n}-plugin-${t}`,()=>[[`plugins.${t}`,...e.additionalOptionScopes||[]]])}_cachedScopes(e,t){let n=this._scopeCache,r=n.get(e);return(!r||t)&&(r=new Map,n.set(e,r)),r}getOptionScopes(e,t,n){let{options:r,type:i}=this,a=this._cachedScopes(e,n),o=a.get(t);if(o)return o;let s=new Set;t.forEach(t=>{e&&(s.add(e),t.forEach(t=>lg(s,e,t))),t.forEach(e=>lg(s,r,e)),t.forEach(e=>lg(s,kd[i]||{},e)),t.forEach(e=>lg(s,Nd,e)),t.forEach(e=>lg(s,Ad,e))});let c=Array.from(s);return c.length===0&&c.push(Object.create(null)),sg.has(t)&&a.set(t,c),c}chartOptionScopes(){let{options:e,type:t}=this;return[e,kd[t]||{},Nd.datasets[t]||{},{type:t},Nd,Ad]}resolveNamedOptions(e,t,n,r=[``]){let i={$shared:!0},{resolver:a,subPrefixes:o}=dg(this._resolverCache,e,r),s=a;if(pg(a,t)){i.$shared=!1,n=vu(n)?n():n;let t=this.createResolver(e,n,o);s=df(a,n,t)}for(let e of t)i[e]=s[e];return i}createResolver(e,t,n=[``],r){let{resolver:i}=dg(this._resolverCache,e,n);return Zl(t)?df(i,t,void 0,r):i}};function dg(e,t,n){let r=e.get(t);r||(r=new Map,e.set(t,r));let i=n.join(),a=r.get(i);return a||(a={resolver:uf(t,n),subPrefixes:n.filter(e=>!e.toLowerCase().includes(`hover`))},r.set(i,a)),a}var fg=e=>Zl(e)&&Object.getOwnPropertyNames(e).some(t=>vu(e[t]));function pg(e,t){let{isScriptable:n,isIndexable:r}=ff(e);for(let i of t){let t=n(i),a=r(i),o=(a||t)&&e[i];if(t&&(vu(o)||fg(o))||a&&Xl(o))return!0}return!1}var mg=`4.5.1`,hg=[`top`,`bottom`,`left`,`right`,`chartArea`];function gg(e,t){return e===`top`||e===`bottom`||hg.indexOf(e)===-1&&t===`x`}function _g(e,t){return function(n,r){return n[e]===r[e]?n[t]-r[t]:n[e]-r[e]}}function vg(e){let t=e.chart,n=t.options.animation;t.notifyPlugins(`afterRender`),ru(n&&n.onComplete,[e],t)}function yg(e){let t=e.chart,n=t.options.animation;ru(n&&n.onProgress,[e],t)}function bg(e){return Bf()&&typeof e==`string`?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}var xg={},Sg=e=>{let t=bg(e);return Object.values(xg).filter(e=>e.canvas===t).pop()};function Cg(e,t,n){let r=Object.keys(e);for(let i of r){let r=+i;if(r>=t){let a=e[i];delete e[i],(n>0||r>t)&&(e[r+n]=a)}}}function wg(e,t,n,r){return!n||e.type===`mouseout`?null:r?t:e}var Tg=class{static defaults=Nd;static instances=xg;static overrides=kd;static registry=Hh;static version=mg;static getChart=Sg;static register(...e){Hh.add(...e),Eg()}static unregister(...e){Hh.remove(...e),Eg()}constructor(e,t){let n=this.config=new ug(t),r=bg(e),i=Sg(r);if(i)throw Error(`Canvas is already in use. Chart with ID '`+i.id+`' must be destroyed before the canvas with ID '`+i.canvas.id+`' can be reused.`);let a=n.createResolver(n.chartOptionScopes(),this.getContext());this.platform=new(n.platform||(gh(r))),this.platform.updateConfig(n);let o=this.platform.acquireContext(r,a.aspectRatio),s=o&&o.canvas,c=s&&s.height,l=s&&s.width;if(this.id=Jl(),this.ctx=o,this.canvas=s,this.width=l,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Uh,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=ad(e=>this.update(e),a.resizeDelay||0),this._dataChanges=[],xg[this.id]=this,!o||!s){console.error(`Failed to create chart: can't acquire context from the given item`);return}Tp.listen(this,`complete`,vg),Tp.listen(this,`progress`,yg),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:e,maintainAspectRatio:t},width:n,height:r,_aspectRatio:i}=this;return Yl(e)?t&&i?i:r?n/r:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return Hh}_initialize(){return this.notifyPlugins(`beforeInit`),this.options.responsive?this.resize():$f(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(`afterInit`),this}clear(){return Rd(this.canvas,this.ctx),this}stop(){return Tp.stop(this),this}resize(e,t){Tp.running(this)?this._resizeBeforeDraw={width:e,height:t}:this._resize(e,t)}_resize(e,t){let n=this.options,r=this.canvas,i=n.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(r,e,t,i),o=n.devicePixelRatio||this.platform.getDevicePixelRatio(),s=this.width?`resize`:`attach`;this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,$f(this,o,!0)&&(this.notifyPlugins(`resize`,{size:a}),ru(n.onResize,[this,a],this),this.attached&&this._doResize(s)&&this.render())}ensureScalesHaveIDs(){iu(this.options.scales||{},(e,t)=>{e.id=t})}buildOrUpdateScales(){let e=this.options,t=e.scales,n=this.scales,r=Object.keys(n).reduce((e,t)=>(e[t]=!1,e),{}),i=[];t&&(i=i.concat(Object.keys(t).map(e=>{let n=t[e],r=$h(e,n),i=r===`r`,a=r===`x`;return{options:n,dposition:i?`chartArea`:a?`bottom`:`left`,dtype:i?`radialLinear`:a?`category`:`linear`}}))),iu(i,t=>{let i=t.options,a=i.id,o=$h(a,i),s=eu(i.type,t.dtype);(i.position===void 0||gg(i.position,o)!==gg(t.dposition))&&(i.position=t.dposition),r[a]=!0;let c=null;a in n&&n[a].type===s?c=n[a]:(c=new(Hh.getScale(s))({id:a,type:s,ctx:this.ctx,chart:this}),n[c.id]=c),c.init(i,e)}),iu(r,(e,t)=>{e||delete n[t]}),iu(n,e=>{qm.configure(this,e,e.options),qm.addBox(this,e)})}_updateMetasets(){let e=this._metasets,t=this.data.datasets.length,n=e.length;if(e.sort((e,t)=>e.index-t.index),n>t){for(let e=t;et.length&&delete this._stacks,e.forEach((e,n)=>{t.filter(t=>t===e._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let e=[],t=this.data.datasets,n,r;for(this._removeUnreferencedMetasets(),n=0,r=t.length;n{this.getDatasetMeta(t).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins(`reset`)}update(e){let t=this.config;t.update();let n=this._options=t.createResolver(t.chartOptionScopes(),this.getContext()),r=this._animationsDisabled=!n.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins(`beforeUpdate`,{mode:e,cancelable:!0})===!1)return;let i=this.buildOrUpdateControllers();this.notifyPlugins(`beforeElementsUpdate`);let a=0;for(let e=0,t=this.data.datasets.length;e{e.reset()}),this._updateDatasets(e),this.notifyPlugins(`afterUpdate`,{mode:e}),this._layers.sort(_g(`z`,`_idx`));let{_active:o,_lastEvent:s}=this;s?this._eventHandler(s,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){iu(this.scales,e=>{qm.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let e=this.options;(!yu(new Set(Object.keys(this._listeners)),new Set(e.events))||!!this._responsiveListeners!==e.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:e}=this,t=this._getUniformDataChanges()||[];for(let{method:n,start:r,count:i}of t)Cg(e,r,n===`_removeElements`?-i:i)}_getUniformDataChanges(){let e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];let t=this.data.datasets.length,n=t=>new Set(e.filter(e=>e[0]===t).map((e,t)=>t+`,`+e.splice(1).join(`,`))),r=n(0);for(let e=1;ee.split(`,`)).map(e=>({method:e[1],start:+e[2],count:+e[3]}))}_updateLayout(e){if(this.notifyPlugins(`beforeLayout`,{cancelable:!0})===!1)return;qm.update(this,this.width,this.height,e);let t=this.chartArea,n=t.width<=0||t.height<=0;this._layers=[],iu(this.boxes,e=>{n&&e.position===`chartArea`||(e.configure&&e.configure(),this._layers.push(...e._layers()))},this),this._layers.forEach((e,t)=>{e._idx=t}),this.notifyPlugins(`afterLayout`)}_updateDatasets(e){if(this.notifyPlugins(`beforeDatasetsUpdate`,{mode:e,cancelable:!0})!==!1){for(let e=0,t=this.data.datasets.length;e=0;--t)this._drawDataset(e[t]);this.notifyPlugins(`afterDatasetsDraw`)}_drawDataset(e){let t=this.ctx,n={meta:e,index:e.index,cancelable:!0},r=wp(this,e);this.notifyPlugins(`beforeDatasetDraw`,n)!==!1&&(r&&Hd(t,r),e.controller.draw(),r&&Ud(t),n.cancelable=!1,this.notifyPlugins(`afterDatasetDraw`,n))}isPointInArea(e){return Vd(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,t,n,r){let i=Am.modes[t];return typeof i==`function`?i(this,e,n,r):[]}getDatasetMeta(e){let t=this.data.datasets[e],n=this._metasets,r=n.filter(e=>e&&e._dataset===t).pop();return r||(r={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t&&t.order||0,index:e,_dataset:t,_parsed:[],_sorted:!1},n.push(r)),r}getContext(){return this.$context||=lf(null,{chart:this,type:`chart`})}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){let t=this.data.datasets[e];if(!t)return!1;let n=this.getDatasetMeta(e);return typeof n.hidden==`boolean`?!n.hidden:!t.hidden}setDatasetVisibility(e,t){let n=this.getDatasetMeta(e);n.hidden=!t}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,t,n){let r=n?`show`:`hide`,i=this.getDatasetMeta(e),a=i.controller._resolveAnimations(void 0,r);_u(t)?(i.data[t].hidden=!n,this.update()):(this.setDatasetVisibility(e,n),a.update(i,{visible:n}),this.update(t=>t.datasetIndex===e?r:void 0))}hide(e,t){this._updateVisibility(e,t,!1)}show(e,t){this._updateVisibility(e,t,!0)}_destroyDatasetMeta(e){let t=this._metasets[e];t&&t.controller&&t.controller._destroy(),delete this._metasets[e]}_stop(){let e,t;for(this.stop(),Tp.remove(this),e=0,t=this.data.datasets.length;e{t.addEventListener(this,n,r),e[n]=r},r=(e,t,n)=>{e.offsetX=t,e.offsetY=n,this._eventHandler(e)};iu(this.options.events,e=>n(e,r))}bindResponsiveEvents(){this._responsiveListeners||={};let e=this._responsiveListeners,t=this.platform,n=(n,r)=>{t.addEventListener(this,n,r),e[n]=r},r=(n,r)=>{e[n]&&(t.removeEventListener(this,n,r),delete e[n])},i=(e,t)=>{this.canvas&&this.resize(e,t)},a,o=()=>{r(`attach`,o),this.attached=!0,this.resize(),n(`resize`,i),n(`detach`,a)};a=()=>{this.attached=!1,r(`resize`,i),this._stop(),this._resize(0,0),n(`attach`,o)},t.isAttached(this.canvas)?o():a()}unbindEvents(){iu(this._listeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._listeners={},iu(this._responsiveListeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,t,n){let r=n?`set`:`remove`,i,a,o,s;for(t===`dataset`&&(i=this.getDatasetMeta(e[0].datasetIndex),i.controller[`_`+r+`DatasetHoverStyle`]()),o=0,s=e.length;o{let n=this.getDatasetMeta(e);if(!n)throw Error(`No dataset found at index `+e);return{datasetIndex:e,element:n.data[t],index:t}});au(n,t)||(this._active=n,this._lastEvent=null,this._updateHoverStyles(n,t))}notifyPlugins(e,t,n){return this._plugins.notify(this,e,t,n)}isPluginEnabled(e){return this._plugins._cache.filter(t=>t.plugin.id===e).length===1}_updateHoverStyles(e,t,n){let r=this.options.hover,i=(e,t)=>e.filter(e=>!t.some(t=>e.datasetIndex===t.datasetIndex&&e.index===t.index)),a=i(t,e),o=n?e:i(e,t);a.length&&this.updateHoverStyle(a,r.mode,!1),o.length&&r.mode&&this.updateHoverStyle(o,r.mode,!0)}_eventHandler(e,t){let n={event:e,replay:t,cancelable:!0,inChartArea:this.isPointInArea(e)},r=t=>(t.options.events||this.options.events).includes(e.native.type);if(this.notifyPlugins(`beforeEvent`,n,r)===!1)return;let i=this._handleEvent(e,t,n.inChartArea);return n.cancelable=!1,this.notifyPlugins(`afterEvent`,n,r),(i||n.changed)&&this.render(),this}_handleEvent(e,t,n){let{_active:r=[],options:i}=this,a=t,o=this._getActiveElements(e,r,n,a),s=bu(e),c=wg(e,this._lastEvent,n,s);n&&(this._lastEvent=null,ru(i.onHover,[e,o,this],this),s&&ru(i.onClick,[e,o,this],this));let l=!au(o,r);return(l||t)&&(this._active=o,this._updateHoverStyles(o,r,t)),this._lastEvent=c,l}_getActiveElements(e,t,n,r){if(e.type===`mouseout`)return[];if(!n)return t;let i=this.options.hover;return this.getElementsAtEventForMode(e,i.mode,i,r)}};function Eg(){return iu(Tg.instances,e=>e._plugins.invalidate())}function Dg(e,t,n){let{startAngle:r,x:i,y:a,outerRadius:o,innerRadius:s,options:c}=t,{borderWidth:l,borderJoinStyle:u}=c,d=Math.min(l/o,Wu(r-n));if(e.beginPath(),e.arc(i,a,o-l/2,r+d/2,n-d/2),s>0){let t=Math.min(l/s,Wu(r-n));e.arc(i,a,s+l/2,n-t/2,r+t/2,!0)}else{let t=Math.min(l/2,o*Wu(r-n));if(u===`round`)e.arc(i,a,t,n-xu/2,r+xu/2,!0);else if(u===`bevel`){let o=2*t*t,s=-o*Math.cos(n+xu/2)+i,c=-o*Math.sin(n+xu/2)+a,l=o*Math.cos(r+xu/2)+i,u=o*Math.sin(r+xu/2)+a;e.lineTo(s,c),e.lineTo(l,u)}}e.closePath(),e.moveTo(0,0),e.rect(0,0,e.canvas.width,e.canvas.height),e.clip(`evenodd`)}function Og(e,t,n){let{startAngle:r,pixelMargin:i,x:a,y:o,outerRadius:s,innerRadius:c}=t,l=i/s;e.beginPath(),e.arc(a,o,s,r-l,n+l),c>i?(l=i/c,e.arc(a,o,c,n+l,r-l,!0)):e.arc(a,o,i,n+Eu,r-Eu),e.closePath(),e.clip()}function kg(e){return tf(e,[`outerStart`,`outerEnd`,`innerStart`,`innerEnd`])}function Ag(e,t,n,r){let i=kg(e.options.borderRadius),a=(n-t)/2,o=Math.min(a,r*t/2),s=e=>{let t=(n-Math.min(a,e))*r/2;return Ku(e,0,Math.min(a,t))};return{outerStart:s(i.outerStart),outerEnd:s(i.outerEnd),innerStart:Ku(i.innerStart,0,o),innerEnd:Ku(i.innerEnd,0,o)}}function jg(e,t,n,r){return{x:n+e*Math.cos(t),y:r+e*Math.sin(t)}}function Mg(e,t,n,r,i,a){let{x:o,y:s,startAngle:c,pixelMargin:l,innerRadius:u}=t,d=Math.max(t.outerRadius+r+n-l,0),f=u>0?u+r+n+l:0,p=0,m=i-c;if(r){let e=((u>0?u-r:0)+(d>0?d-r:0))/2;p=(m-(e===0?m:m*e/(e+r)))/2}let h=(m-Math.max(.001,m*d-n/xu)/d)/2,g=c+h+p,_=i-h-p,{outerStart:v,outerEnd:y,innerStart:b,innerEnd:x}=Ag(t,f,d,_-g),S=d-v,C=d-y,w=g+v/S,ee=_-y/C,te=f+b,ne=f+x,re=g+b/te,ie=_-x/ne;if(e.beginPath(),a){let t=(w+ee)/2;if(e.arc(o,s,d,w,t),e.arc(o,s,d,t,ee),y>0){let t=jg(C,ee,o,s);e.arc(t.x,t.y,y,ee,_+Eu)}let n=jg(ne,_,o,s);if(e.lineTo(n.x,n.y),x>0){let t=jg(ne,ie,o,s);e.arc(t.x,t.y,x,_+Eu,ie+Math.PI)}let r=(_-x/f+(g+b/f))/2;if(e.arc(o,s,f,_-x/f,r,!0),e.arc(o,s,f,r,g+b/f,!0),b>0){let t=jg(te,re,o,s);e.arc(t.x,t.y,b,re+Math.PI,g-Eu)}let i=jg(S,g,o,s);if(e.lineTo(i.x,i.y),v>0){let t=jg(S,w,o,s);e.arc(t.x,t.y,v,g-Eu,w)}}else{e.moveTo(o,s);let t=Math.cos(w)*d+o,n=Math.sin(w)*d+s;e.lineTo(t,n);let r=Math.cos(ee)*d+o,i=Math.sin(ee)*d+s;e.lineTo(r,i)}e.closePath()}function Ng(e,t,n,r,i){let{fullCircles:a,startAngle:o,circumference:s}=t,c=t.endAngle;if(a){Mg(e,t,n,r,c,i);for(let t=0;t=xu&&p===0&&u!==`miter`&&Dg(e,t,h),a||(Mg(e,t,n,r,h,i),e.stroke())}var Fg=class extends _h{static id=`arc`;static defaults={borderAlign:`center`,borderColor:`#fff`,borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:`backgroundColor`};static descriptors={_scriptable:!0,_indexable:e=>e!==`borderDash`};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(e){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,t,n){let{angle:r,distance:i}=Vu(this.getProps([`x`,`y`],n),{x:e,y:t}),{startAngle:a,endAngle:o,innerRadius:s,outerRadius:c,circumference:l}=this.getProps([`startAngle`,`endAngle`,`innerRadius`,`outerRadius`,`circumference`],n),u=(this.options.spacing+this.options.borderWidth)/2,d=eu(l,o-a),f=Gu(r,a,o)&&a!==o,p=d>=Su||f,m=Ju(i,s+u,c+u);return p&&m}getCenterPoint(e){let{x:t,y:n,startAngle:r,endAngle:i,innerRadius:a,outerRadius:o}=this.getProps([`x`,`y`,`startAngle`,`endAngle`,`innerRadius`,`outerRadius`],e),{offset:s,spacing:c}=this.options,l=(r+i)/2,u=(a+o+c+s)/2;return{x:t+Math.cos(l)*u,y:n+Math.sin(l)*u}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){let{options:t,circumference:n}=this,r=(t.offset||0)/4,i=(t.spacing||0)/2,a=t.circular;if(this.pixelMargin=t.borderAlign===`inner`?.33:0,this.fullCircles=n>Su?Math.floor(n/Su):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();let o=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(o)*r,Math.sin(o)*r);let s=r*(1-Math.sin(Math.min(xu,n||0)));e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,Ng(e,this,s,i,a),Pg(e,this,s,i,a),e.restore()}};function Ig(e,t,n=t){e.lineCap=eu(n.borderCapStyle,t.borderCapStyle),e.setLineDash(eu(n.borderDash,t.borderDash)),e.lineDashOffset=eu(n.borderDashOffset,t.borderDashOffset),e.lineJoin=eu(n.borderJoinStyle,t.borderJoinStyle),e.lineWidth=eu(n.borderWidth,t.borderWidth),e.strokeStyle=eu(n.borderColor,t.borderColor)}function Lg(e,t,n){e.lineTo(n.x,n.y)}function Rg(e){return e.stepped?Wd:e.tension||e.cubicInterpolationMode===`monotone`?Gd:Lg}function zg(e,t,n={}){let r=e.length,{start:i=0,end:a=r-1}=n,{start:o,end:s}=t,c=Math.max(i,o),l=Math.min(a,s),u=is&&a>s;return{count:r,start:c,loop:t.loop,ilen:l(o+(l?s-e:e))%a,y=()=>{h!==g&&(e.lineTo(u,g),e.lineTo(u,h),e.lineTo(u,_))};for(c&&(p=i[v(0)],e.moveTo(p.x,p.y)),f=0;f<=s;++f){if(p=i[v(f)],p.skip)continue;let t=p.x,n=p.y,r=t|0;r===m?(ng&&(g=n),u=(d*u+t)/++d):(y(),e.lineTo(t,n),m=r,d=0,h=g=n),_=n}y()}function Hg(e){let t=e.options,n=t.borderDash&&t.borderDash.length;return!e._decimated&&!e._loop&&!t.tension&&t.cubicInterpolationMode!==`monotone`&&!t.stepped&&!n?Vg:Bg}function Ug(e){return e.stepped?rp:e.tension||e.cubicInterpolationMode===`monotone`?ip:np}function Wg(e,t,n,r){let i=t._path;i||(i=t._path=new Path2D,t.path(i,n,r)&&i.closePath()),Ig(e,t.options),e.stroke(i)}function Gg(e,t,n,r){let{segments:i,options:a}=t,o=Hg(t);for(let s of i)Ig(e,a,s.style),e.beginPath(),o(e,t,s,{start:n,end:n+r-1})&&e.closePath(),e.stroke()}var Kg=typeof Path2D==`function`;function qg(e,t,n,r){Kg&&!t.options.segment?Wg(e,t,n,r):Gg(e,t,n,r)}var Jg=class extends _h{static id=`line`;static defaults={borderCapStyle:`butt`,borderDash:[],borderDashOffset:0,borderJoinStyle:`miter`,borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:`default`,fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:`backgroundColor`,borderColor:`borderColor`};static descriptors={_scriptable:!0,_indexable:e=>e!==`borderDash`&&e!==`fill`};constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,t){let n=this.options;if((n.tension||n.cubicInterpolationMode===`monotone`)&&!n.stepped&&!this._pointsUpdated){let r=n.spanGaps?this._loop:this._fullLoop;zf(this._points,n,e,r,t),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||=_p(this,this.options.segment)}first(){let e=this.segments,t=this.points;return e.length&&t[e[0].start]}last(){let e=this.segments,t=this.points,n=e.length;return n&&t[e[n-1].end]}interpolate(e,t){let n=this.options,r=e[t],i=this.points,a=mp(this,{property:t,start:r,end:r});if(!a.length)return;let o=[],s=Ug(n),c,l;for(c=0,l=a.length;ce.replace(`rgb(`,`rgba(`).replace(`)`,`, 0.5)`));function l_(e){return s_[e%s_.length]}function u_(e){return c_[e%c_.length]}function d_(e,t){return e.borderColor=l_(t),e.backgroundColor=u_(t),++t}function f_(e,t){return e.backgroundColor=e.data.map(()=>l_(t++)),t}function p_(e,t){return e.backgroundColor=e.data.map(()=>u_(t++)),t}function m_(e){let t=0;return(n,r)=>{let i=e.getDatasetMeta(r).controller;i instanceof gm?t=f_(n,t):i instanceof vm?t=p_(n,t):i&&(t=d_(n,t))}}function h_(e){let t;for(t in e)if(e[t].borderColor||e[t].backgroundColor)return!0;return!1}function g_(e){return e&&(e.borderColor||e.backgroundColor)}function __(){return Nd.borderColor!==`rgba(0,0,0,0.1)`||Nd.backgroundColor!==`rgba(0,0,0,0.1)`}var v_={id:`colors`,defaults:{enabled:!0,forceOverride:!1},beforeLayout(e,t,n){if(!n.enabled)return;let{data:{datasets:r},options:i}=e.config,{elements:a}=i,o=h_(r)||g_(i)||a&&h_(a)||__();if(!n.forceOverride&&o)return;let s=m_(e);r.forEach(s)}};function y_(e,t,n,r,i){let a=i.samples||r;if(a>=n)return e.slice(t,t+n);let o=[],s=(n-2)/(a-2),c=0,l=t+n-1,u=t,d,f,p,m,h;for(o[c++]=e[u],d=0;dp&&(p=m,f=e[a],h=a);o[c++]=f,u=h}return o[c++]=e[l],o}function b_(e,t,n,r){let i=0,a=0,o,s,c,l,u,d,f,p,m,h,g=[],_=t+n-1,v=e[t].x,y=e[_].x-v;for(o=t;oh&&(h=l,f=o),i=(a*i+s.x)/++a;else{let n=o-1;if(!Yl(d)&&!Yl(f)){let t=Math.min(d,f),r=Math.max(d,f);t!==p&&t!==n&&g.push({...e[t],x:i}),r!==p&&r!==n&&g.push({...e[r],x:i})}o>0&&n!==p&&g.push(e[n]),g.push(s),u=t,a=0,m=h=l,d=f=p=o}}return g}function x_(e){if(e._decimated){let t=e._data;delete e._decimated,delete e._data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function S_(e){e.data.datasets.forEach(e=>{x_(e)})}function C_(e,t){let n=t.length,r=0,i,{iScale:a}=e,{min:o,max:s,minDefined:c,maxDefined:l}=a.getUserBounds();return c&&(r=Ku(Xu(t,a.axis,o).lo,0,n-1)),i=l?Ku(Xu(t,a.axis,s).hi+1,r,n)-r:n-r,{start:r,count:i}}var w_={id:`decimation`,defaults:{algorithm:`min-max`,enabled:!1},beforeElementsUpdate:(e,t,n)=>{if(!n.enabled){S_(e);return}let r=e.width;e.data.datasets.forEach((t,i)=>{let{_data:a,indexAxis:o}=t,s=e.getDatasetMeta(i),c=a||t.data;if(sf([o,e.options.indexAxis])===`y`||!s.controller.supportsDecimation)return;let l=e.scales[s.xAxisID];if(l.type!==`linear`&&l.type!==`time`||e.options.parsing)return;let{start:u,count:d}=C_(s,c);if(d<=(n.threshold||4*r)){x_(t);return}Yl(a)&&(t._data=c,delete t.data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(e){this._data=e}}));let f;switch(n.algorithm){case`lttb`:f=y_(c,u,d,r,n);break;case`min-max`:f=b_(c,u,d,r);break;default:throw Error(`Unsupported decimation algorithm '${n.algorithm}'`)}t._decimated=f})},destroy(e){S_(e)}};function T_(e,t,n){let r=e.segments,i=e.points,a=t.points,o=[];for(let e of r){let{start:r,end:s}=e;s=O_(r,s,i);let c=E_(n,i[r],i[s],e.loop);if(!t.segments){o.push({source:e,target:c,start:i[r],end:i[s]});continue}let l=mp(t,c);for(let t of l){let r=E_(n,a[t.start],a[t.end],t.loop),s=pp(e,i,r);for(let e of s)o.push({source:e,target:t,start:{[n]:k_(c,r,`start`,Math.max)},end:{[n]:k_(c,r,`end`,Math.min)}})}}return o}function E_(e,t,n,r){if(r)return;let i=t[e],a=n[e];return e===`angle`&&(i=Wu(i),a=Wu(a)),{property:e,start:i,end:a}}function D_(e,t){let{x:n=null,y:r=null}=e||{},i=t.points,a=[];return t.segments.forEach(({start:e,end:t})=>{t=O_(e,t,i);let o=i[e],s=i[t];r===null?n!==null&&(a.push({x:n,y:o.y}),a.push({x:n,y:s.y})):(a.push({x:o.x,y:r}),a.push({x:s.x,y:r}))}),a}function O_(e,t,n){for(;t>e;t--){let e=n[t];if(!isNaN(e.x)&&!isNaN(e.y))break}return t}function k_(e,t,n,r){return e&&t?r(e[n],t[n]):e?e[n]:t?t[n]:0}function A_(e,t){let n=[],r=!1;return Xl(e)?(r=!0,n=e):n=D_(e,t),n.length?new Jg({points:n,options:{tension:0},_loop:r,_fullLoop:r}):null}function j_(e){return e&&e.fill!==!1}function M_(e,t,n){let r=e[t].fill,i=[t],a;if(!n)return r;for(;r!==!1&&i.indexOf(r)===-1;){if(!Ql(r))return r;if(a=e[r],!a)return!1;if(a.visible)return r;i.push(r),r=a.fill}return!1}function N_(e,t,n){let r=L_(e);if(Zl(r))return!isNaN(r.value)&&r;let i=parseFloat(r);return Ql(i)&&Math.floor(i)===i?P_(r[0],t,i,n):[`origin`,`start`,`end`,`stack`,`shape`].indexOf(r)>=0&&r}function P_(e,t,n,r){return(e===`-`||e===`+`)&&(n=t+n),n===t||n<0||n>=r?!1:n}function F_(e,t){let n=null;return e===`start`?n=t.bottom:e===`end`?n=t.top:Zl(e)?n=t.getPixelForValue(e.value):t.getBasePixel&&(n=t.getBasePixel()),n}function I_(e,t,n){let r;return r=e===`start`?n:e===`end`?t.options.reverse?t.min:t.max:Zl(e)?e.value:t.getBaseValue(),r}function L_(e){let t=e.options,n=t.fill,r=eu(n&&n.target,n);return r===void 0&&(r=!!t.backgroundColor),r===!1||r===null?!1:r===!0?`origin`:r}function R_(e){let{scale:t,index:n,line:r}=e,i=[],a=r.segments,o=r.points,s=z_(t,n);s.push(A_({x:null,y:t.bottom},r));for(let e=0;e=0;--t){let n=i[t].$filler;n&&(n.line.updateControlPoints(a,n.axis),r&&n.fill&&J_(e.ctx,n,a))}},beforeDatasetsDraw(e,t,n){if(n.drawTime!==`beforeDatasetsDraw`)return;let r=e.getSortedVisibleDatasetMetas();for(let t=r.length-1;t>=0;--t){let n=r[t].$filler;j_(n)&&J_(e.ctx,n,e.chartArea)}},beforeDatasetDraw(e,t,n){let r=t.meta.$filler;!j_(r)||n.drawTime!==`beforeDatasetDraw`||J_(e.ctx,r,e.chartArea)},defaults:{propagate:!0,drawTime:`beforeDatasetDraw`}},nv=(e,t)=>{let{boxHeight:n=t,boxWidth:r=t}=e;return e.usePointStyle&&(n=Math.min(n,t),r=e.pointStyleWidth||Math.min(r,t)),{boxWidth:r,boxHeight:n,itemHeight:Math.max(t,n)}},rv=(e,t)=>e!==null&&t!==null&&e.datasetIndex===t.datasetIndex&&e.index===t.index,iv=class extends _h{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t,n){this.maxWidth=e,this.maxHeight=t,this._margins=n,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let e=this.options.labels||{},t=ru(e.generateLabels,[this.chart],this)||[];e.filter&&(t=t.filter(t=>e.filter(t,this.chart.data))),e.sort&&(t=t.sort((t,n)=>e.sort(t,n,this.chart.data))),this.options.reverse&&t.reverse(),this.legendItems=t}fit(){let{options:e,ctx:t}=this;if(!e.display){this.width=this.height=0;return}let n=e.labels,r=of(n.font),i=r.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:s}=nv(n,i),c,l;t.font=r.string,this.isHorizontal()?(c=this.maxWidth,l=this._fitRows(a,i,o,s)+10):(l=this.maxHeight,c=this._fitCols(a,r,o,s)+10),this.width=Math.min(c,e.maxWidth||this.maxWidth),this.height=Math.min(l,e.maxHeight||this.maxHeight)}_fitRows(e,t,n,r){let{ctx:i,maxWidth:a,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],c=this.lineWidths=[0],l=r+o,u=e;i.textAlign=`left`,i.textBaseline=`middle`;let d=-1,f=-l;return this.legendItems.forEach((e,p)=>{let m=n+t/2+i.measureText(e.text).width;(p===0||c[c.length-1]+m+2*o>a)&&(u+=l,c[c.length-(p>0?0:1)]=0,f+=l,d++),s[p]={left:0,top:f,row:d,width:m,height:r},c[c.length-1]+=m+o}),u}_fitCols(e,t,n,r){let{ctx:i,maxHeight:a,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],c=this.columnSizes=[],l=a-e,u=o,d=0,f=0,p=0,m=0;return this.legendItems.forEach((e,a)=>{let{itemWidth:h,itemHeight:g}=av(n,t,i,e,r);a>0&&f+g+2*o>l&&(u+=d+o,c.push({width:d,height:f}),p+=d+o,m++,d=f=0),s[a]={left:p,top:f,col:m,width:h,height:g},d=Math.max(d,h),f+=g+o}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let e=this._computeTitleHeight(),{legendHitBoxes:t,options:{align:n,labels:{padding:r},rtl:i}}=this,a=sp(i,this.left,this.width);if(this.isHorizontal()){let i=0,o=sd(n,this.left+r,this.right-this.lineWidths[i]);for(let s of t)i!==s.row&&(i=s.row,o=sd(n,this.left+r,this.right-this.lineWidths[i])),s.top+=this.top+e+r,s.left=a.leftForLtr(a.x(o),s.width),o+=s.width+r}else{let i=0,o=sd(n,this.top+e+r,this.bottom-this.columnSizes[i].height);for(let s of t)s.col!==i&&(i=s.col,o=sd(n,this.top+e+r,this.bottom-this.columnSizes[i].height)),s.top=o,s.left+=this.left+r,s.left=a.leftForLtr(a.x(s.left),s.width),o+=s.height+r}}isHorizontal(){return this.options.position===`top`||this.options.position===`bottom`}draw(){if(this.options.display){let e=this.ctx;Hd(e,this),this._draw(),Ud(e)}}_draw(){let{options:e,columnSizes:t,lineWidths:n,ctx:r}=this,{align:i,labels:a}=e,o=Nd.color,s=sp(e.rtl,this.left,this.width),c=of(a.font),{padding:l}=a,u=c.size,d=u/2,f;this.drawTitle(),r.textAlign=s.textAlign(`left`),r.textBaseline=`middle`,r.lineWidth=.5,r.font=c.string;let{boxWidth:p,boxHeight:m,itemHeight:h}=nv(a,u),g=function(e,t,n){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;r.save();let i=eu(n.lineWidth,1);if(r.fillStyle=eu(n.fillStyle,o),r.lineCap=eu(n.lineCap,`butt`),r.lineDashOffset=eu(n.lineDashOffset,0),r.lineJoin=eu(n.lineJoin,`miter`),r.lineWidth=i,r.strokeStyle=eu(n.strokeStyle,o),r.setLineDash(eu(n.lineDash,[])),a.usePointStyle){let o={radius:m*Math.SQRT2/2,pointStyle:n.pointStyle,rotation:n.rotation,borderWidth:i},c=s.xPlus(e,p/2),l=t+d;Bd(r,o,c,l,a.pointStyleWidth&&p)}else{let a=t+Math.max((u-m)/2,0),o=s.leftForLtr(e,p),c=rf(n.borderRadius);r.beginPath(),Object.values(c).some(e=>e!==0)?Xd(r,{x:o,y:a,w:p,h:m,radius:c}):r.rect(o,a,p,m),r.fill(),i!==0&&r.stroke()}r.restore()},_=function(e,t,n){Yd(r,n.text,e,t+h/2,c,{strikethrough:n.hidden,textAlign:s.textAlign(n.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();f=v?{x:sd(i,this.left+l,this.right-n[0]),y:this.top+l+y,line:0}:{x:this.left+l,y:sd(i,this.top+y+l,this.bottom-t[0].height),line:0},cp(this.ctx,e.textDirection);let b=h+l;this.legendItems.forEach((o,u)=>{r.strokeStyle=o.fontColor,r.fillStyle=o.fontColor;let m=r.measureText(o.text).width,h=s.textAlign(o.textAlign||=a.textAlign),x=p+d+m,S=f.x,C=f.y;s.setWidth(this.width),v?u>0&&S+x+l>this.right&&(C=f.y+=b,f.line++,S=f.x=sd(i,this.left+l,this.right-n[f.line])):u>0&&C+b>this.bottom&&(S=f.x=S+t[f.line].width+l,f.line++,C=f.y=sd(i,this.top+y+l,this.bottom-t[f.line].height));let w=s.x(S);if(g(w,C,o),S=cd(h,S+p+d,v?S+x:this.right,e.rtl),_(s.x(S),C,o),v)f.x+=x+l;else if(typeof o.text!=`string`){let e=c.lineHeight;f.y+=cv(o,e)+l}else f.y+=b}),lp(this.ctx,e.textDirection)}drawTitle(){let e=this.options,t=e.title,n=of(t.font),r=af(t.padding);if(!t.display)return;let i=sp(e.rtl,this.left,this.width),a=this.ctx,o=t.position,s=n.size/2,c=r.top+s,l,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),l=this.top+c,u=sd(e.align,u,this.right-d);else{let t=this.columnSizes.reduce((e,t)=>Math.max(e,t.height),0);l=c+sd(e.align,this.top,this.bottom-t-e.labels.padding-this._computeTitleHeight())}let f=sd(o,u,u+d);a.textAlign=i.textAlign(od(o)),a.textBaseline=`middle`,a.strokeStyle=t.color,a.fillStyle=t.color,a.font=n.string,Yd(a,t.text,f,l,n)}_computeTitleHeight(){let e=this.options.title,t=of(e.font),n=af(e.padding);return e.display?t.lineHeight+n.height:0}_getLegendItemAt(e,t){let n,r,i;if(Ju(e,this.left,this.right)&&Ju(t,this.top,this.bottom)){for(i=this.legendHitBoxes,n=0;ne.length>t.length?e:t)),t+n.size/2+r.measureText(i).width}function sv(e,t,n){let r=e;return typeof t.text!=`string`&&(r=cv(t,n)),r}function cv(e,t){return t*(e.text?e.text.length:0)}function lv(e,t){return!!((e===`mousemove`||e===`mouseout`)&&(t.onHover||t.onLeave)||t.onClick&&(e===`click`||e===`mouseup`))}var uv={id:`legend`,_element:iv,start(e,t,n){let r=e.legend=new iv({ctx:e.ctx,options:n,chart:e});qm.configure(e,r,n),qm.addBox(e,r)},stop(e){qm.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,n){let r=e.legend;qm.configure(e,r,n),r.options=n},afterUpdate(e){let t=e.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(e,t){t.replay||e.legend.handleEvent(t.event)},defaults:{display:!0,position:`top`,align:`center`,fullSize:!0,reverse:!1,weight:1e3,onClick(e,t,n){let r=t.datasetIndex,i=n.chart;i.isDatasetVisible(r)?(i.hide(r),t.hidden=!0):(i.show(r),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:e=>e.chart.options.color,boxWidth:40,padding:10,generateLabels(e){let t=e.data.datasets,{labels:{usePointStyle:n,pointStyle:r,textAlign:i,color:a,useBorderRadius:o,borderRadius:s}}=e.legend.options;return e._getSortedDatasetMetas().map(e=>{let c=e.controller.getStyle(n?0:void 0),l=af(c.borderWidth);return{text:t[e.index].label,fillStyle:c.backgroundColor,fontColor:a,hidden:!e.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:c.borderColor,pointStyle:r||c.pointStyle,rotation:c.rotation,textAlign:i||c.textAlign,borderRadius:o&&(s||c.borderRadius),datasetIndex:e.index}},this)}},title:{color:e=>e.chart.options.color,display:!1,position:`center`,text:``}},descriptors:{_scriptable:e=>!e.startsWith(`on`),labels:{_scriptable:e=>![`generateLabels`,`filter`,`sort`].includes(e)}}},dv=class extends _h{constructor(e){super(),this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t){let n=this.options;if(this.left=0,this.top=0,!n.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=e,this.height=this.bottom=t;let r=Xl(n.text)?n.text.length:1;this._padding=af(n.padding);let i=r*of(n.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=i:this.width=i}isHorizontal(){let e=this.options.position;return e===`top`||e===`bottom`}_drawArgs(e){let{top:t,left:n,bottom:r,right:i,options:a}=this,o=a.align,s=0,c,l,u;return this.isHorizontal()?(l=sd(o,n,i),u=t+e,c=i-n):(a.position===`left`?(l=n+e,u=sd(o,r,t),s=xu*-.5):(l=i-e,u=sd(o,t,r),s=xu*.5),c=r-t),{titleX:l,titleY:u,maxWidth:c,rotation:s}}draw(){let e=this.ctx,t=this.options;if(!t.display)return;let n=of(t.font),r=n.lineHeight/2+this._padding.top,{titleX:i,titleY:a,maxWidth:o,rotation:s}=this._drawArgs(r);Yd(e,t.text,0,0,n,{color:t.color,maxWidth:o,rotation:s,textAlign:od(t.align),textBaseline:`middle`,translation:[i,a]})}};function fv(e,t){let n=new dv({ctx:e.ctx,options:t,chart:e});qm.configure(e,n,t),qm.addBox(e,n),e.titleBlock=n}var pv={id:`title`,_element:dv,start(e,t,n){fv(e,n)},stop(e){let t=e.titleBlock;qm.removeBox(e,t),delete e.titleBlock},beforeUpdate(e,t,n){let r=e.titleBlock;qm.configure(e,r,n),r.options=n},defaults:{align:`center`,display:!1,font:{weight:`bold`},fullSize:!0,padding:10,position:`top`,text:``,weight:2e3},defaultRoutes:{color:`color`},descriptors:{_scriptable:!0,_indexable:!1}},mv=new WeakMap,hv={id:`subtitle`,start(e,t,n){let r=new dv({ctx:e.ctx,options:n,chart:e});qm.configure(e,r,n),qm.addBox(e,r),mv.set(e,r)},stop(e){qm.removeBox(e,mv.get(e)),mv.delete(e)},beforeUpdate(e,t,n){let r=mv.get(e);qm.configure(e,r,n),r.options=n},defaults:{align:`center`,display:!1,font:{weight:`normal`},fullSize:!0,padding:0,position:`top`,text:``,weight:1500},defaultRoutes:{color:`color`},descriptors:{_scriptable:!0,_indexable:!1}},gv={average(e){if(!e.length)return!1;let t,n,r=new Set,i=0,a=0;for(t=0,n=e.length;te+t)/r.size,y:i/a}},nearest(e,t){if(!e.length)return!1;let n=t.x,r=t.y,i=1/0,a,o,s;for(a=0,o=e.length;a-1?e.split(` -`):e}function yv(e,t){let{element:n,datasetIndex:r,index:i}=t,a=e.getDatasetMeta(r).controller,{label:o,value:s}=a.getLabelAndValue(i);return{chart:e,label:o,parsed:a.getParsed(i),raw:e.data.datasets[r].data[i],formattedValue:s,dataset:a.getDataset(),dataIndex:i,datasetIndex:r,element:n}}function bv(e,t){let n=e.chart.ctx,{body:r,footer:i,title:a}=e,{boxWidth:o,boxHeight:s}=t,c=of(t.bodyFont),l=of(t.titleFont),u=of(t.footerFont),d=a.length,f=i.length,p=r.length,m=af(t.padding),h=m.height,g=0,_=r.reduce((e,t)=>e+t.before.length+t.lines.length+t.after.length,0);if(_+=e.beforeBody.length+e.afterBody.length,d&&(h+=d*l.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),_){let e=t.displayColors?Math.max(s,c.lineHeight):c.lineHeight;h+=p*e+(_-p)*c.lineHeight+(_-1)*t.bodySpacing}f&&(h+=t.footerMarginTop+f*u.lineHeight+(f-1)*t.footerSpacing);let v=0,y=function(e){g=Math.max(g,n.measureText(e).width+v)};return n.save(),n.font=l.string,iu(e.title,y),n.font=c.string,iu(e.beforeBody.concat(e.afterBody),y),v=t.displayColors?o+2+t.boxPadding:0,iu(r,e=>{iu(e.before,y),iu(e.lines,y),iu(e.after,y)}),v=0,n.font=u.string,iu(e.footer,y),n.restore(),g+=m.width,{width:g,height:h}}function xv(e,t){let{y:n,height:r}=t;return ne.height-r/2?`bottom`:`center`}function Sv(e,t,n,r){let{x:i,width:a}=r,o=n.caretSize+n.caretPadding;if(e===`left`&&i+a+o>t.width||e===`right`&&i-a-o<0)return!0}function Cv(e,t,n,r){let{x:i,width:a}=n,{width:o,chartArea:{left:s,right:c}}=e,l=`center`;return r===`center`?l=i<=(s+c)/2?`left`:`right`:i<=a/2?l=`left`:i>=o-a/2&&(l=`right`),Sv(l,e,t,n)&&(l=`center`),l}function wv(e,t,n){let r=n.yAlign||t.yAlign||xv(e,n);return{xAlign:n.xAlign||t.xAlign||Cv(e,t,n,r),yAlign:r}}function Tv(e,t){let{x:n,width:r}=e;return t===`right`?n-=r:t===`center`&&(n-=r/2),n}function Ev(e,t,n){let{y:r,height:i}=e;return t===`top`?r+=n:t===`bottom`?r-=i+n:r-=i/2,r}function Dv(e,t,n,r){let{caretSize:i,caretPadding:a,cornerRadius:o}=e,{xAlign:s,yAlign:c}=n,l=i+a,{topLeft:u,topRight:d,bottomLeft:f,bottomRight:p}=rf(o),m=Tv(t,s),h=Ev(t,c,l);return c===`center`?s===`left`?m+=l:s===`right`&&(m-=l):s===`left`?m-=Math.max(u,f)+i:s===`right`&&(m+=Math.max(d,p)+i),{x:Ku(m,0,r.width-t.width),y:Ku(h,0,r.height-t.height)}}function Ov(e,t,n){let r=af(n.padding);return t===`center`?e.x+e.width/2:t===`right`?e.x+e.width-r.right:e.x+r.left}function kv(e){return _v([],vv(e))}function Av(e,t,n){return lf(e,{tooltip:t,tooltipItems:n,type:`tooltip`})}function jv(e,t){let n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}var Mv={beforeTitle:ql,title(e){if(e.length>0){let t=e[0],n=t.chart.data.labels,r=n?n.length:0;if(this&&this.options&&this.options.mode===`dataset`)return t.dataset.label||``;if(t.label)return t.label;if(r>0&&t.dataIndex{let t={before:[],lines:[],after:[]},i=jv(n,e);_v(t.before,vv(Nv(i,`beforeLabel`,this,e))),_v(t.lines,Nv(i,`label`,this,e)),_v(t.after,vv(Nv(i,`afterLabel`,this,e))),r.push(t)}),r}getAfterBody(e,t){return kv(Nv(t.callbacks,`afterBody`,this,e))}getFooter(e,t){let{callbacks:n}=t,r=Nv(n,`beforeFooter`,this,e),i=Nv(n,`footer`,this,e),a=Nv(n,`afterFooter`,this,e),o=[];return o=_v(o,vv(r)),o=_v(o,vv(i)),o=_v(o,vv(a)),o}_createItems(e){let t=this._active,n=this.chart.data,r=[],i=[],a=[],o=[],s,c;for(s=0,c=t.length;se.filter(t,r,i,n))),e.itemSort&&(o=o.sort((t,r)=>e.itemSort(t,r,n))),iu(o,t=>{let n=jv(e.callbacks,t);r.push(Nv(n,`labelColor`,this,t)),i.push(Nv(n,`labelPointStyle`,this,t)),a.push(Nv(n,`labelTextColor`,this,t))}),this.labelColors=r,this.labelPointStyles=i,this.labelTextColors=a,this.dataPoints=o,o}update(e,t){let n=this.options.setContext(this.getContext()),r=this._active,i,a=[];if(!r.length)this.opacity!==0&&(i={opacity:0});else{let e=gv[n.position].call(this,r,this._eventPosition);a=this._createItems(n),this.title=this.getTitle(a,n),this.beforeBody=this.getBeforeBody(a,n),this.body=this.getBody(a,n),this.afterBody=this.getAfterBody(a,n),this.footer=this.getFooter(a,n);let t=this._size=bv(this,n),o=Object.assign({},e,t),s=wv(this.chart,n,o),c=Dv(n,o,s,this.chart);this.xAlign=s.xAlign,this.yAlign=s.yAlign,i={opacity:1,x:c.x,y:c.y,width:t.width,height:t.height,caretX:e.x,caretY:e.y}}this._tooltipItems=a,this.$context=void 0,i&&this._resolveAnimations().update(this,i),e&&n.external&&n.external.call(this,{chart:this.chart,tooltip:this,replay:t})}drawCaret(e,t,n,r){let i=this.getCaretPosition(e,n,r);t.lineTo(i.x1,i.y1),t.lineTo(i.x2,i.y2),t.lineTo(i.x3,i.y3)}getCaretPosition(e,t,n){let{xAlign:r,yAlign:i}=this,{caretSize:a,cornerRadius:o}=n,{topLeft:s,topRight:c,bottomLeft:l,bottomRight:u}=rf(o),{x:d,y:f}=e,{width:p,height:m}=t,h,g,_,v,y,b;return i===`center`?(y=f+m/2,r===`left`?(h=d,g=h-a,v=y+a,b=y-a):(h=d+p,g=h+a,v=y-a,b=y+a),_=h):(g=r===`left`?d+Math.max(s,l)+a:r===`right`?d+p-Math.max(c,u)-a:this.caretX,i===`top`?(v=f,y=v-a,h=g-a,_=g+a):(v=f+m,y=v+a,h=g+a,_=g-a),b=v),{x1:h,x2:g,x3:_,y1:v,y2:y,y3:b}}drawTitle(e,t,n){let r=this.title,i=r.length,a,o,s;if(i){let c=sp(n.rtl,this.x,this.width);for(e.x=Ov(this,n.titleAlign,n),t.textAlign=c.textAlign(n.titleAlign),t.textBaseline=`middle`,a=of(n.titleFont),o=n.titleSpacing,t.fillStyle=n.titleColor,t.font=a.string,s=0;se!==0)?(e.beginPath(),e.fillStyle=i.multiKeyBackground,Xd(e,{x:t,y:p,w:c,h:s,radius:o}),e.fill(),e.stroke(),e.fillStyle=a.backgroundColor,e.beginPath(),Xd(e,{x:n,y:p+1,w:c-2,h:s-2,radius:o}),e.fill()):(e.fillStyle=i.multiKeyBackground,e.fillRect(t,p,c,s),e.strokeRect(t,p,c,s),e.fillStyle=a.backgroundColor,e.fillRect(n,p+1,c-2,s-2))}e.fillStyle=this.labelTextColors[n]}drawBody(e,t,n){let{body:r}=this,{bodySpacing:i,bodyAlign:a,displayColors:o,boxHeight:s,boxWidth:c,boxPadding:l}=n,u=of(n.bodyFont),d=u.lineHeight,f=0,p=sp(n.rtl,this.x,this.width),m=function(n){t.fillText(n,p.x(e.x+f),e.y+d/2),e.y+=d+i},h=p.textAlign(a),g,_,v,y,b,x,S;for(t.textAlign=a,t.textBaseline=`middle`,t.font=u.string,e.x=Ov(this,h,n),t.fillStyle=n.bodyColor,iu(this.beforeBody,m),f=o&&h!==`right`?a===`center`?c/2+l:c+2+l:0,y=0,x=r.length;y0&&t.stroke()}_updateAnimationTarget(e){let t=this.chart,n=this.$animations,r=n&&n.x,i=n&&n.y;if(r||i){let n=gv[e.position].call(this,this._active,this._eventPosition);if(!n)return;let a=this._size=bv(this,e),o=Object.assign({},n,this._size),s=wv(t,e,o),c=Dv(e,o,s,t);(r._to!==c.x||i._to!==c.y)&&(this.xAlign=s.xAlign,this.yAlign=s.yAlign,this.width=a.width,this.height=a.height,this.caretX=n.x,this.caretY=n.y,this._resolveAnimations().update(this,c))}}_willRender(){return!!this.opacity}draw(e){let t=this.options.setContext(this.getContext()),n=this.opacity;if(!n)return;this._updateAnimationTarget(t);let r={width:this.width,height:this.height},i={x:this.x,y:this.y};n=Math.abs(n)<.001?0:n;let a=af(t.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;t.enabled&&o&&(e.save(),e.globalAlpha=n,this.drawBackground(i,e,r,t),cp(e,t.textDirection),i.y+=a.top,this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),lp(e,t.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,t){let n=this._active,r=e.map(({datasetIndex:e,index:t})=>{let n=this.chart.getDatasetMeta(e);if(!n)throw Error(`Cannot find a dataset at index `+e);return{datasetIndex:e,element:n.data[t],index:t}}),i=!au(n,r),a=this._positionChanged(r,t);(i||a)&&(this._active=r,this._eventPosition=t,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,t,n=!0){if(t&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let r=this.options,i=this._active||[],a=this._getActiveElements(e,i,t,n),o=this._positionChanged(a,e),s=t||!au(a,i)||o;return s&&(this._active=a,(r.enabled||r.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,t))),s}_getActiveElements(e,t,n,r){let i=this.options;if(e.type===`mouseout`)return[];if(!r)return t.filter(e=>this.chart.data.datasets[e.datasetIndex]&&this.chart.getDatasetMeta(e.datasetIndex).controller.getParsed(e.index)!==void 0);let a=this.chart.getElementsAtEventForMode(e,i.mode,i,n);return i.reverse&&a.reverse(),a}_positionChanged(e,t){let{caretX:n,caretY:r,options:i}=this,a=gv[i.position].call(this,e,t);return a!==!1&&(n!==a.x||r!==a.y)}},Fv=Object.freeze({__proto__:null,Colors:v_,Decimation:w_,Filler:tv,Legend:uv,SubTitle:hv,Title:pv,Tooltip:{id:`tooltip`,_element:Pv,positioners:gv,afterInit(e,t,n){n&&(e.tooltip=new Pv({chart:e,options:n}))},beforeUpdate(e,t,n){e.tooltip&&e.tooltip.initialize(n)},reset(e,t,n){e.tooltip&&e.tooltip.initialize(n)},afterDraw(e){let t=e.tooltip;if(t&&t._willRender()){let n={tooltip:t};if(e.notifyPlugins(`beforeTooltipDraw`,{...n,cancelable:!0})===!1)return;t.draw(e.ctx),e.notifyPlugins(`afterTooltipDraw`,n)}},afterEvent(e,t){if(e.tooltip){let n=t.replay;e.tooltip.handleEvent(t.event,n,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:`average`,backgroundColor:`rgba(0,0,0,0.8)`,titleColor:`#fff`,titleFont:{weight:`bold`},titleSpacing:2,titleMarginBottom:6,titleAlign:`left`,bodyColor:`#fff`,bodySpacing:2,bodyFont:{},bodyAlign:`left`,footerColor:`#fff`,footerSpacing:2,footerMarginTop:6,footerFont:{weight:`bold`},footerAlign:`left`,padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,t)=>t.bodyFont.size,boxWidth:(e,t)=>t.bodyFont.size,multiKeyBackground:`#fff`,displayColors:!0,boxPadding:0,borderColor:`rgba(0,0,0,0)`,borderWidth:0,animation:{duration:400,easing:`easeOutQuart`},animations:{numbers:{type:`number`,properties:[`x`,`y`,`width`,`height`,`caretX`,`caretY`]},opacity:{easing:`linear`,duration:200}},callbacks:Mv},defaultRoutes:{bodyFont:`font`,footerFont:`font`,titleFont:`font`},descriptors:{_scriptable:e=>e!==`filter`&&e!==`itemSort`&&e!==`external`,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:`animation`}},additionalOptionScopes:[`interaction`]}}),Iv=(e,t,n,r)=>(typeof t==`string`?(n=e.push(t)-1,r.unshift({index:n,label:t})):isNaN(t)&&(n=null),n);function Lv(e,t,n,r){let i=e.indexOf(t);return i===-1?Iv(e,t,n,r):i===e.lastIndexOf(t)?i:n}var Rv=(e,t)=>e===null?null:Ku(Math.round(e),0,t);function zv(e){let t=this.getLabels();return e>=0&&et.length-1?null:this.getPixelForValue(t[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}};function Vv(e,t){let n=[],{bounds:r,step:i,min:a,max:o,precision:s,count:c,maxTicks:l,maxDigits:u,includeBounds:d}=e,f=i||1,p=l-1,{min:m,max:h}=t,g=!Yl(a),_=!Yl(o),v=!Yl(c),y=(h-m)/(u+1),b=Mu((h-m)/p/f)*f,x,S,C,w;if(b<1e-14&&!g&&!_)return[{value:m},{value:h}];w=Math.ceil(h/b)-Math.floor(m/b),w>p&&(b=Mu(w*b/p/f)*f),Yl(s)||(x=10**s,b=Math.ceil(b*x)/x),r===`ticks`?(S=Math.floor(m/b)*b,C=Math.ceil(h/b)*b):(S=m,C=h),g&&_&&i&&Iu((o-a)/i,b/1e3)?(w=Math.round(Math.min((o-a)/b,l)),b=(o-a)/w,S=a,C=o):v?(S=g?a:S,C=_?o:C,w=c-1,b=(C-S)/w):(w=(C-S)/b,w=ju(w,Math.round(w),b/1e3)?Math.round(w):Math.ceil(w));let ee=Math.max(Bu(b),Bu(S));x=10**(Yl(s)?ee:s),S=Math.round(S*x)/x,C=Math.round(C*x)/x;let te=0;for(g&&(d&&S!==a?(n.push({value:a}),So)break;n.push({value:e})}return _&&d&&C!==o?n.length&&ju(n[n.length-1].value,o,Hv(o,y,e))?n[n.length-1].value=o:n.push({value:o}):(!_||C===o)&&n.push({value:C}),n}function Hv(e,t,{horizontal:n,minRotation:r}){let i=Ru(r),a=(n?Math.sin(i):Math.cos(i))||.001,o=.75*t*(``+e).length;return Math.min(t/a,o)}var Uv=class extends Lh{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,t){return Yl(e)||(typeof e==`number`||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){let{beginAtZero:e}=this.options,{minDefined:t,maxDefined:n}=this.getUserBounds(),{min:r,max:i}=this,a=e=>r=t?r:e,o=e=>i=n?i:e;if(e){let e=Au(r),t=Au(i);e<0&&t<0?o(0):e>0&&t>0&&a(0)}if(r===i){let t=i===0?1:Math.abs(i*.05);o(i+t),e||a(r-t)}this.min=r,this.max=i}getTickLimit(){let{maxTicksLimit:e,stepSize:t}=this.options.ticks,n;return t?(n=Math.ceil(this.max/t)-Math.floor(this.min/t)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${t} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e||=11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return 1/0}buildTicks(){let e=this.options,t=e.ticks,n=this.getTickLimit();n=Math.max(2,n);let r=Vv({maxTicks:n,bounds:e.bounds,min:e.min,max:e.max,precision:t.precision,step:t.stepSize,count:t.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:t.minRotation||0,includeBounds:t.includeBounds!==!1},this._range||this);return e.bounds===`ticks`&&Lu(r,this,`value`),e.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){let e=this.ticks,t=this.min,n=this.max;if(super.configure(),this.options.offset&&e.length){let r=(n-t)/Math.max(e.length-1,1)/2;t-=r,n+=r}this._startValue=t,this._endValue=n,this._valueRange=n-t}getLabelForValue(e){return wd(e,this.chart.options.locale,this.options.ticks.format)}},Wv=class extends Uv{static id=`linear`;static defaults={ticks:{callback:Dd.formatters.numeric}};determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=Ql(e)?e:0,this.max=Ql(t)?t:1,this.handleTickRangeOptions()}computeTickLimit(){let e=this.isHorizontal(),t=e?this.width:this.height,n=Ru(this.options.ticks.minRotation),r=(e?Math.sin(n):Math.cos(n))||.001,i=this._resolveTickFontOptions(0);return Math.ceil(t/Math.min(40,i.lineHeight/r))}getPixelForValue(e){return e===null?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}},Gv=e=>Math.floor(ku(e)),Kv=(e,t)=>10**(Gv(e)+t);function qv(e){return e/10**Gv(e)==1}function Jv(e,t,n){let r=10**n,i=Math.floor(e/r);return Math.ceil(t/r)-i}function Yv(e,t){let n=Gv(t-e);for(;Jv(e,t,n)>10;)n++;for(;Jv(e,t,n)<10;)n--;return Math.min(n,Gv(e))}function Xv(e,{min:t,max:n}){t=$l(e.min,t);let r=[],i=Gv(t),a=Yv(t,n),o=a<0?10**Math.abs(a):1,s=10**a,c=i>a?10**i:0,l=Math.round((t-c)*o)/o,u=Math.floor((t-c)/s/10)*s*10,d=Math.floor((l-u)/10**a),f=$l(e.min,Math.round((c+u+d*10**a)*o)/o);for(;f=10?d=d<15?15:20:d++,d>=20&&(a++,d=2,o=a>=0?1:o),f=Math.round((c+u+d*10**a)*o)/o;let p=$l(e.max,f);return r.push({value:p,major:qv(p),significand:d}),r}var Zv=class extends Lh{static id=`logarithmic`;static defaults={ticks:{callback:Dd.formatters.logarithmic,major:{enabled:!0}}};constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,t){let n=Uv.prototype.parse.apply(this,[e,t]);if(n===0){this._zero=!0;return}return Ql(n)&&n>0?n:null}determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=Ql(e)?Math.max(0,e):null,this.max=Ql(t)?Math.max(0,t):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Ql(this._userMin)&&(this.min=e===Kv(this.min,0)?Kv(this.min,-1):Kv(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:e,maxDefined:t}=this.getUserBounds(),n=this.min,r=this.max,i=t=>n=e?n:t,a=e=>r=t?r:e;n===r&&(n<=0?(i(1),a(10)):(i(Kv(n,-1)),a(Kv(r,1)))),n<=0&&i(Kv(r,-1)),r<=0&&a(Kv(n,1)),this.min=n,this.max=r}buildTicks(){let e=this.options,t=Xv({min:this._userMin,max:this._userMax},this);return e.bounds===`ticks`&&Lu(t,this,`value`),e.reverse?(t.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),t}getLabelForValue(e){return e===void 0?`0`:wd(e,this.chart.options.locale,this.options.ticks.format)}configure(){let e=this.min;super.configure(),this._startValue=ku(e),this._valueRange=ku(this.max)-ku(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(ku(e)-this._startValue)/this._valueRange)}getValueForPixel(e){let t=this.getDecimalForPixel(e);return 10**(this._startValue+t*this._valueRange)}};function Qv(e){let t=e.ticks;if(t.display&&e.display){let e=af(t.backdropPadding);return eu(t.font&&t.font.size,Nd.font.size)+e.height}return 0}function $v(e,t,n){return n=Xl(n)?n:[n],{w:Id(e,t.string,n),h:n.length*t.lineHeight}}function ey(e,t,n,r,i){return e===r||e===i?{start:t-n/2,end:t+n/2}:ei?{start:t-n,end:t}:{start:t,end:t+n}}function ty(e){let t={l:e.left+e._padding.left,r:e.right-e._padding.right,t:e.top+e._padding.top,b:e.bottom-e._padding.bottom},n=Object.assign({},t),r=[],i=[],a=e._pointLabels.length,o=e.options.pointLabels,s=o.centerPointLabels?xu/a:0;for(let c=0;ct.r&&(s=(r.end-t.r)/a,e.r=Math.max(e.r,t.r+s)),i.startt.b&&(c=(i.end-t.b)/o,e.b=Math.max(e.b,t.b+c))}function ry(e,t,n){let r=e.drawingArea,{extra:i,additionalAngle:a,padding:o,size:s}=n,c=e.getPointPosition(t,r+i+o,a),l=Math.round(zu(Wu(c.angle+Eu))),u=cy(c.y,s.h,l),d=oy(l),f=sy(c.x,s.w,d);return{visible:!0,x:c.x,y:u,textAlign:d,left:f,top:u,right:f+s.w,bottom:u+s.h}}function iy(e,t){if(!t)return!0;let{left:n,top:r,right:i,bottom:a}=e;return!(Vd({x:n,y:r},t)||Vd({x:n,y:a},t)||Vd({x:i,y:r},t)||Vd({x:i,y:a},t))}function ay(e,t,n){let r=[],i=e._pointLabels.length,a=e.options,{centerPointLabels:o,display:s}=a.pointLabels,c={extra:Qv(a)/2,additionalAngle:o?xu/i:0},l;for(let a=0;a270||n<90)&&(e-=t),e}function ly(e,t,n){let{left:r,top:i,right:a,bottom:o}=n,{backdropColor:s}=t;if(!Yl(s)){let n=rf(t.borderRadius),c=af(t.backdropPadding);e.fillStyle=s;let l=r-c.left,u=i-c.top,d=a-r+c.width,f=o-i+c.height;Object.values(n).some(e=>e!==0)?(e.beginPath(),Xd(e,{x:l,y:u,w:d,h:f,radius:n}),e.fill()):e.fillRect(l,u,d,f)}}function uy(e,t){let{ctx:n,options:{pointLabels:r}}=e;for(let i=t-1;i>=0;i--){let t=e._pointLabelItems[i];if(!t.visible)continue;let a=r.setContext(e.getPointLabelContext(i));ly(n,a,t);let o=of(a.font),{x:s,y:c,textAlign:l}=t;Yd(n,e._pointLabels[i],s,c+o.lineHeight/2,o,{color:a.color,textAlign:l,textBaseline:`middle`})}}function dy(e,t,n,r){let{ctx:i}=e;if(n)i.arc(e.xCenter,e.yCenter,t,0,Su);else{let n=e.getPointPosition(0,t);i.moveTo(n.x,n.y);for(let a=1;a{let n=ru(this.options.pointLabels.callback,[e,t],this);return n||n===0?n:``}).filter((e,t)=>this.chart.getDataVisibility(t))}fit(){let e=this.options;e.display&&e.pointLabels.display?ty(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,t,n,r){this.xCenter+=Math.floor((e-t)/2),this.yCenter+=Math.floor((n-r)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,t,n,r))}getIndexAngle(e){let t=Su/(this._pointLabels.length||1),n=this.options.startAngle||0;return Wu(e*t+Ru(n))}getDistanceFromCenterForValue(e){if(Yl(e))return NaN;let t=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*t:(e-this.min)*t}getValueForDistanceFromCenter(e){if(Yl(e))return NaN;let t=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-t:this.min+t}getPointLabelContext(e){let t=this._pointLabels||[];if(e>=0&&e{if(t!==0||t===0&&this.min<0){s=this.getDistanceFromCenterForValue(e.value);let n=this.getContext(t),o=r.setContext(n),c=i.setContext(n);fy(this,o,s,a,c)}}),n.display){for(e.save(),o=a-1;o>=0;o--){let r=n.setContext(this.getPointLabelContext(o)),{color:i,lineWidth:a}=r;!a||!i||(e.lineWidth=a,e.strokeStyle=i,e.setLineDash(r.borderDash),e.lineDashOffset=r.borderDashOffset,s=this.getDistanceFromCenterForValue(t.reverse?this.min:this.max),c=this.getPointPosition(o,s),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(c.x,c.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){let e=this.ctx,t=this.options,n=t.ticks;if(!n.display)return;let r=this.getIndexAngle(0),i,a;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(r),e.textAlign=`center`,e.textBaseline=`middle`,this.ticks.forEach((r,o)=>{if(o===0&&this.min>=0&&!t.reverse)return;let s=n.setContext(this.getContext(o)),c=of(s.font);if(i=this.getDistanceFromCenterForValue(this.ticks[o].value),s.showLabelBackdrop){e.font=c.string,a=e.measureText(r.label).width,e.fillStyle=s.backdropColor;let t=af(s.backdropPadding);e.fillRect(-a/2-t.left,-i-c.size/2-t.top,a+t.width,c.size+t.height)}Yd(e,r.label,0,-i,c,{color:s.color,strokeColor:s.textStrokeColor,strokeWidth:s.textStrokeWidth})}),e.restore()}drawTitle(){}},hy={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},gy=Object.keys(hy);function _y(e,t){return e-t}function vy(e,t){if(Yl(t))return null;let n=e._adapter,{parser:r,round:i,isoWeekday:a}=e._parseOpts,o=t;return typeof r==`function`&&(o=r(o)),Ql(o)||(o=typeof r==`string`?n.parse(o,r):n.parse(o)),o===null?null:(i&&(o=i===`week`&&(Fu(a)||a===!0)?n.startOf(o,`isoWeek`,a):n.startOf(o,i)),+o)}function yy(e,t,n,r){let i=gy.length;for(let a=gy.indexOf(e);a=gy.indexOf(n);a--){let n=gy[a];if(hy[n].common&&e._adapter.diff(i,r,n)>=t-1)return n}return gy[n?gy.indexOf(n):0]}function xy(e){for(let t=gy.indexOf(e)+1,n=gy.length;t=t?n[r]:n[i];e[a]=!0}}function Cy(e,t,n,r){let i=e._adapter,a=+i.startOf(t[0].value,r),o=t[t.length-1].value,s,c;for(s=a;s<=o;s=+i.add(s,1,r))c=n[s],c>=0&&(t[c].major=!0);return t}function wy(e,t,n){let r=[],i={},a=t.length,o,s;for(o=0;o+e.value))}initOffsets(e=[]){let t=0,n=0,r,i;this.options.offset&&e.length&&(r=this.getDecimalForValue(e[0]),t=e.length===1?1-r:(this.getDecimalForValue(e[1])-r)/2,i=this.getDecimalForValue(e[e.length-1]),n=e.length===1?i:(i-this.getDecimalForValue(e[e.length-2]))/2);let a=e.length<3?.5:.25;t=Ku(t,0,a),n=Ku(n,0,a),this._offsets={start:t,end:n,factor:1/(t+1+n)}}_generate(){let e=this._adapter,t=this.min,n=this.max,r=this.options,i=r.time,a=i.unit||yy(i.minUnit,t,n,this._getLabelCapacity(t)),o=eu(r.ticks.stepSize,1),s=a===`week`&&i.isoWeekday,c=Fu(s)||s===!0,l={},u=t,d,f;if(c&&(u=+e.startOf(u,`isoWeek`,s)),u=+e.startOf(u,c?`day`:a),e.diff(n,t,a)>1e5*o)throw Error(t+` and `+n+` are too far apart with stepSize of `+o+` `+a);let p=r.ticks.source===`data`&&this.getDataTimestamps();for(d=u,f=0;d+e)}getLabelForValue(e){let t=this._adapter,n=this.options.time;return n.tooltipFormat?t.format(e,n.tooltipFormat):t.format(e,n.displayFormats.datetime)}format(e,t){let n=this.options.time.displayFormats,r=this._unit,i=t||n[r];return this._adapter.format(e,i)}_tickFormatFunction(e,t,n,r){let i=this.options,a=i.ticks.callback;if(a)return ru(a,[e,t,n],this);let o=i.time.displayFormats,s=this._unit,c=this._majorUnit,l=s&&o[s],u=c&&o[c],d=n[t],f=c&&u&&d&&d.major;return this._adapter.format(e,r||(f?u:l))}generateTickLabels(e){let t,n,r;for(t=0,n=e.length;t0?o:1}getDataTimestamps(){let e=this._cache.data||[],t,n;if(e.length)return e;let r=this.getMatchingVisibleMetas();if(this._normalized&&r.length)return this._cache.data=r[0].controller.getAllParsedValues(this);for(t=0,n=r.length;t=e[r].pos&&t<=e[i].pos&&({lo:r,hi:i}=Xu(e,`pos`,t)),{pos:a,time:s}=e[r],{pos:o,time:c}=e[i]):(t>=e[r].time&&t<=e[i].time&&({lo:r,hi:i}=Xu(e,`time`,t)),{time:a,pos:s}=e[r],{time:o,pos:c}=e[i]);let l=o-a;return l?s+(c-s)*(t-a)/l:s}var Dy=class extends Ty{static id=`timeseries`;static defaults=Ty.defaults;constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let e=this._getTimestampsForTable(),t=this._table=this.buildLookupTable(e);this._minPos=Ey(t,this.min),this._tableRange=Ey(t,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){let{min:t,max:n}=this,r=[],i=[],a,o,s,c,l;for(a=0,o=e.length;a=t&&c<=n&&r.push(c);if(r.length<2)return[{time:t,pos:0},{time:n,pos:1}];for(a=0,o=r.length;ae-t)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;let t=this.getDataTimestamps(),n=this.getLabelTimestamps();return e=t.length&&n.length?this.normalize(t.concat(n)):t.length?t:n,e=this._cache.all=e,e}getDecimalForValue(e){return(Ey(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){let t=this._offsets,n=this.getDecimalForPixel(e)/t.factor-t.end;return Ey(this._table,n*this._tableRange+this._minPos,!0)}},Oy=[ym,o_,Fv,Object.freeze({__proto__:null,CategoryScale:Bv,LinearScale:Wv,LogarithmicScale:Zv,RadialLinearScale:my,TimeScale:Ty,TimeSeriesScale:Dy})];Tg.register(...Oy);var ky=Tg,Ay=R(``);function jy(e,t){E(t,!0);let n=ya(t,`class`,3,``),r=ya(t,`ariaLabel`,3,``);function i(e){if(ka.tick,typeof t.build!=`function`)return;let n=t.build();if(!n)return;let r=new ky(e.getContext(`2d`),n);return()=>r.destroy()}var a=Ay();Mi(a,()=>i),F(()=>{U(a,1,Fi(n())),W(a,`aria-label`,r())}),z(e,a),D()}var My=R(``),Ny=R(`
`);function Py(e,t){E(t,!0);let n=ya(t,`options`,19,()=>[]),r=ya(t,`ariaLabel`,3,``),i=ya(t,`class`,3,``);var a=Ny();H(a,21,n,e=>e.value,(e,n)=>{var r=My();let i;var a=M(r,!0);T(r),F(()=>{i=U(r,1,`segmented-btn svelte-92fh5i`,null,i,{active:t.value===I(n).value}),W(r,`aria-pressed`,t.value===I(n).value),B(a,I(n).label)}),L(`click`,r,()=>t.onchange?.(I(n).value)),z(e,r)}),T(a),F(()=>{U(a,1,Fi([`segmented-control`,i()]),`svelte-92fh5i`),W(a,`aria-label`,r())}),z(e,a),D()}Hr([`click`]);function Fy(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function Iy(){return{grid:Fy(`--chart-grid`),text:Fy(`--chart-text`),dayMarker:Fy(`--chart-day-marker`),tooltipBg:Fy(`--chart-tooltip-bg`),tooltipBorder:Fy(`--chart-tooltip-border`),tooltipText:Fy(`--chart-tooltip-text`)}}function Ly(){return{size:11,family:`'SF Mono', Menlo, Consolas, monospace`}}function Ry(e,t){return{backgroundColor:e.tooltipBg,borderColor:e.tooltipBorder,borderWidth:1,titleColor:e.tooltipText,bodyColor:e.tooltipText,callbacks:t}}function zy(e){if(typeof document>`u`||!document.body)return e;let t=document.createElement(`span`);t.style.display=`none`,t.style.color=e,document.body.appendChild(t);let n=getComputedStyle(t).color;return document.body.removeChild(t),n||e}var By=[`#c2845a`,`#7a9e7e`,`#d4a574`,`#b8a98e`,`#8b9e6b`,`#7d8a97`,`#c47a5a`,`#6b8e6b`,`#a09486`,`#9b7ea4`,`#c49a6c`];function Vy(){return[...By]}function Hy(e){let t=5381,n=String(e||``);for(let e=0;euc(e)}}var Jy={seconds:{apiName:`second`,windowLabel:`Last 60 seconds`,refreshMs:2e3},minutes:{apiName:`minute`,windowLabel:`Last 60 minutes`,refreshMs:5e3},hours:{apiName:`hour`,windowLabel:`Last 24 hours`,refreshMs:2e4},days:{apiName:`day`,windowLabel:`Last 30 days`,refreshMs:6e4}},Yy=[{value:`seconds`,label:`Seconds`},{value:`minutes`,label:`Minutes`},{value:`hours`,label:`Hours`},{value:`days`,label:`Days`}];function Xy(){return{input:0,output:0,prompt:0,local:0}}function Zy(e){return String(e).padStart(2,`0`)}function Qy(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function $y(e,t){if(!Number.isFinite(t))return``;let n=new Date(t);switch(e){case`seconds`:return Zy(n.getHours())+`:`+Zy(n.getMinutes())+`:`+Zy(n.getSeconds());case`minutes`:return Zy(n.getHours())+`:`+Zy(n.getMinutes());case`hours`:return Zy(n.getHours())+`:00`;default:return Zy(n.getMonth()+1)+`-`+Zy(n.getDate())}}function eb(e,t){let n=[],r=[],i={input:[],output:[],prompt:[],local:[]},a=Xy();for(let o of e||[]){let e=Date.parse(o&&o.start),s=Qy(o&&o.input_tokens),c=Qy(o&&o.output_tokens),l=Qy(o&&o.prompt_cached_tokens),u=Qy(o&&o.locally_cached_tokens);n.push($y(t,e)),r.push(Number.isFinite(e)?e:null),i.input.push(s),i.output.push(c),i.prompt.push(l),i.local.push(u),a.input+=s,a.output+=c,a.prompt+=l,a.local+=u}return{labels:n,stamps:r,cols:i,totals:a}}function tb(e){let t=e||Xy();return t.input+t.output+t.prompt+t.local>0}function nb(e,t){return uc(Math.max(0,Math.round(e&&e[t]||0)))}function rb(e){return(Jy[e]||Jy.minutes).windowLabel}function ib(e,t){return`Live token throughput, `+rb(t).toLowerCase()+`. Input `+nb(e,`input`)+`, output `+nb(e,`output`)+`, prompt cached `+nb(e,`prompt`)+`, locally cached `+nb(e,`local`)+` tokens.`}function ab(e,t,n,r){let i=e=>uc(Math.max(0,Math.round(e))),a=n.stamps,o=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderWidth:0,borderRadius:0,categoryPercentage:1,barPercentage:1,stack:`tokens`});return{type:`bar`,plugins:[{id:`liveTokensDayMarks`,afterDatasetsDraw:t=>{if(r===`days`)return;let n=t.getDatasetMeta(0),i=t.chartArea;if(!n||!n.data||!i)return;let o=t.ctx;o.save(),o.font=`10px 'SF Mono', Menlo, Consolas, monospace`;let s=null;for(let t=0;t{if(!e.length)return``;let t=a[e[0].dataIndex];if(!t)return e[0].label;let n=new Date(t);return r===`days`?n.toLocaleDateString():n.toLocaleString()},label:e=>e.dataset.label+`: `+i(e.parsed.y),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+i(t)}})}}}}var ob=900,sb=new class{#e=k(`minutes`);get granularity(){return I(this.#e)}set granularity(e){A(this.#e,e,!0)}#t=k(j([]));get buckets(){return I(this.#t)}set buckets(e){A(this.#t,e,!0)}#n=k(!1);get active(){return I(this.#n)}set active(e){A(this.#n,e,!0)}#r=null;#i=null;#a=null;#o=0;#s=null;#c=!1;start(){this.stop(),this.active=!0,this.fetch(),this.#l(),this.#u()}stop(){this.active=!1,this.#r&&=(clearInterval(this.#r),null),this.#i&&=(clearTimeout(this.#i),null),this.#a&&=(clearTimeout(this.#a),null),this.#o=0,this.#s&&=(this.#s.abort(),null),this.buckets=[]}setGranularity(e){!Jy[e]||e===this.granularity||(this.granularity=e,this.buckets=[],this.#l(),this.fetch())}#l(){this.#r&&=(clearInterval(this.#r),null);let e=Jy[this.granularity]||Jy.minutes;this.#r=setInterval(()=>{this.active&&this.fetch()},e.refreshMs)}noteUsageEvent(e){!this.active||e!==`usage.flushed`||(this.#i||=setTimeout(()=>{this.#i=null,this.fetch()},ob))}async fetch(){if(!this.active||this.#c)return;this.#c=!0;let e=this.granularity;try{let t=await _s(`/admin/usage/throughput?granularity=`+(Jy[e]||Jy.minutes).apiName,{label:`token throughput`});if(t.stale||!t.ok||this.granularity!==e)return;this.buckets=t.data&&Array.isArray(t.data.buckets)?t.data.buckets:[]}catch(e){if(ys(e))return;console.error(`Failed to fetch token throughput:`,e)}finally{this.#c=!1,this.active&&this.granularity!==e&&this.fetch()}}async#u(){await Ss.ensureLoaded(),this.active&&Ss.liveLogsVisible()&&(typeof ReadableStream>`u`||(this.#s&&this.#s.abort(),this.#s=new AbortController,this.#d(this.#s)))}async#d(e){try{let t=await hs(`/admin/live/logs?types=usage`,{signal:e.signal});if(!t.ok||!t.body||typeof t.body.getReader!=`function`){this.#p();return}this.#o=0,await Wy(t.body.getReader(),e=>this.#f(e)),this.#p()}catch(e){if(ys(e))return;console.error(`Live usage stream failed:`,e),this.#p()}}#f(e){if(!e||typeof e!=`object`)return;let t=String(e.type||``).trim();t.indexOf(`usage.`)===0&&this.noteUsageEvent(t)}#p(){if(!this.active||this.#a)return;let{attempt:e,delay:t}=Ky(this.#o);this.#o=e,this.#a=setTimeout(()=>{this.#a=null,this.#u()},t)}},cb=R(`
`),lb=R(`
Waiting for live requests…
`),ub=R(`

Live Token Throughput

`);function db(e,t){E(t,!0);let n=O(()=>eb(sb.buckets,sb.granularity)),r=O(()=>I(n).totals);function i(){return{input:zy(`var(--token-input)`),output:zy(`var(--token-output)`),prompt:zy(`var(--token-prompt)`),local:zy(`var(--token-local)`)}}let a=[{metric:`input`,label:`Input Tokens`,colorVar:`--token-input`},{metric:`output`,label:`Output Tokens`,colorVar:`--token-output`},{metric:`prompt`,label:`Prompt (Input) Cached`,colorVar:`--token-prompt`},{metric:`local`,label:`Locally Cached`,colorVar:`--token-local`}];var o=ub(),s=M(o),c=M(s),l=P(M(c),2),u=M(l);let d;var f=P(u,2),p=M(f,!0);T(f),T(l),T(c),Py(P(c,2),{ariaLabel:`Live token throughput granularity`,get options(){return Yy},get value(){return sb.granularity},onchange:e=>sb.setGranularity(e)}),T(s);var m=P(s,2);H(m,21,()=>a,e=>e.metric,(e,t)=>{var n=cb(),i=M(n),a=P(i,2),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(n),F(e=>{Hi(i,`background: var(${I(t).colorVar??``})`),B(o,I(t).label),B(c,e)},[()=>nb(I(r),I(t).metric)]),z(e,n)}),T(m);var h=P(m,2),g=M(h);{let e=O(()=>ib(I(r),sb.granularity));jy(g,{get ariaLabel(){return I(e)},build:()=>ab(Iy(),i(),I(n),sb.granularity)})}var _=P(g,2),v=e=>{z(e,lb())},y=O(()=>!tb(I(r)));V(_,e=>{I(y)&&e(v)}),T(h),T(o),F(e=>{d=U(u,1,`live-dot`,null,d,{"is-streaming":sb.active}),B(p,e)},[()=>rb(sb.granularity)]),z(e,o),D()}function fb(e){let t=e||{};if(t.total_tokens!==null&&t.total_tokens!==void 0){let e=Number(t.total_tokens);if(Number.isFinite(e))return e}let n=Number(t.total_input_tokens||0),r=Number(t.total_output_tokens||0);return(Number.isFinite(n)?n:0)+(Number.isFinite(r)?r:0)}function pb(e,t){if(!t)return 0;let n=e&&e.summary?e.summary:{},r=Number(n.total_hits||0);return Number.isFinite(r)&&r>0?r:0}function mb(e,t,n){let r=Number(e&&e.total_requests||0);return(Number.isFinite(r)?r:0)+pb(t,n)}function hb(e,t,n){let r=pb(t,n);return r<=0?``:oc(mb(e,t,n)-r)+` to providers + `+oc(r)+` from cache`}function gb(e){let t=e&&e.summary?e.summary:{},n=Number(t.total_input_tokens||0),r=Number(t.total_output_tokens||0);return(Number.isFinite(n)?n:0)+(Number.isFinite(r)?r:0)}function _b(e,t,n){let r=e=>{let t=Number(e||0);return Number.isFinite(t)&&t>0?t:0},i=e||{},a=r(i.uncached_input_tokens),o=r(i.cached_input_tokens),s=r(i.cache_write_input_tokens),c=t&&t.summary?t.summary:{},l=n?r(c.total_input_tokens):0;return[{key:`uncached`,label:`Regular`,tokens:a+s,colorVar:`--cache-meter-uncached`,note:s>0?`Includes `+oc(s)+` cache-write tokens`:``},{key:`prompt`,label:`Prompt cached`,tokens:o,colorVar:`--cache-meter-prompt`,note:`Provider prompt-cache reads`},{key:`local`,label:`Locally cached`,tokens:l,colorVar:`--cache-meter-local`,note:`Served from GoModel response cache`}]}function vb(e,t,n){return _b(e,t,n).reduce((e,t)=>e+t.tokens,0)}function yb(e,t,n){return vb(e,t,n)>0}function bb(e,t,n){let r=_b(e,t,n),i=r.reduce((e,t)=>e+t.tokens,0);if(i<=0)return r.map(e=>Object.assign({},e,{pct:0}));let a=r.map(e=>{let t=e.tokens/i*100,n=Math.floor(t);return Object.assign({},e,{pct:n,remainder:t-n})}),o=100-a.reduce((e,t)=>e+t.pct,0);return a.map((e,t)=>({index:t,remainder:e.remainder,tokens:e.tokens})).filter(e=>e.tokens>0).sort((e,t)=>t.remainder-e.remainder).forEach(e=>{o>0&&(a[e.index].pct+=1,--o)}),a}function xb(e,t,n){return bb(e,t,n).filter(e=>e.tokens>0)}function Sb(e){let t=[e.label+`: `+oc(e.tokens)+` input tokens (`+e.pct+`%)`];return e.note&&t.push(e.note),t.join(` -`)}function Cb(e){let t=(e||[]).map(e=>e.label+` `+e.pct+`%`);return`Cache breakdown of input tokens — `+(t.length?t.join(`, `):`no data`)}function wb(e){return e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`)}function Tb(e,t,n,r){if(t!==`daily`||!n||!r)return e;let i={};(e||[]).forEach(e=>{i[e.date]=e});let a=[];for(let e=new Date(n);e<=r;e.setUTCDate(e.getUTCDate()+1)){let t=wb(e);a.push(i[t]||{date:t,input_tokens:0,output_tokens:0,total_tokens:0,requests:0,input_cost:null,output_cost:null,total_cost:null})}return a}function Eb(e,t){let n=e=>Number(e)||0,r=e.map(e=>e.date),i=e.map(e=>n(e.uncached_input_tokens)+n(e.cache_write_input_tokens)+n(e.cached_input_tokens)>0?n(e.uncached_input_tokens)+n(e.cache_write_input_tokens):n(e.input_tokens)),a=e.map(e=>n(e.output_tokens)),o=e.map(e=>n(e.cached_input_tokens)),s={};return(t||[]).forEach(e=>{s[e.date]=e}),{labels:r,inputPaid:i,output:a,prompt:o,local:r.map(e=>{let t=s[e];return t?n(t.input_tokens)+n(t.output_tokens):0})}}function Db(e){let t=e||{},n=Math.max(0,Number(t.uncached_input_tokens)||0),r=Math.max(0,Number(t.cached_input_tokens)||0),i=Math.max(0,Number(t.cache_write_input_tokens)||0),a=n+r+i;return a>0?r/a*100:0}function Ob(e){let t=e||{};return(Number(t.uncached_input_tokens)||0)+(Number(t.cached_input_tokens)||0)+(Number(t.cache_write_input_tokens)||0)>0}function kb(e){return Ob(e)?Math.round(Db(e))+`%`:`—`}function Ab(e,t,n={}){let r=!!n.cacheEnabled,i=n.resolve||(e=>e),a=(e,t)=>i(`color-mix(in srgb, `+e+` `+t+`%, transparent)`),o=(e,t,n,r)=>Object.assign({label:e,data:t,borderColor:n,backgroundColor:n,fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4},r||{}),s=[o(`Input Tokens`,t.inputPaid,i(`var(--token-input)`),{fill:`origin`}),o(`Output Tokens`,t.output,i(`var(--token-output)`),{fill:`-1`}),o(`Prompt (Input) Cached`,t.prompt,i(`var(--token-prompt)`),{fill:`-1`,borderDash:[6,4]})];return r&&s.push(o(`Locally Cached`,t.local,a(`var(--info)`,35),{fill:`-1`,borderDash:[2,3]})),{type:`line`,data:{labels:t.labels,datasets:s},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Ry(e,{label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ly(),maxRotation:0,autoSkip:!0,maxTicksLimit:10}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:qy(e)}}}}}function jb(e,t,n){let r=Math.max(0,Math.min(100,e));return{type:`doughnut`,data:{datasets:[{data:[r,100-r],backgroundColor:[t,n],borderWidth:0,spacing:0}]},options:{rotation:-90,circumference:180,cutout:`84%`,responsive:!0,maintainAspectRatio:!1,animation:{duration:0},layout:{padding:1},events:[],plugins:{legend:{display:!1},tooltip:{enabled:!1}}}}}var Mb=`gomodel_provider_status_details_expanded`,Nb=`gomodel_provider_card_expanded_overrides`,Pb=3e3,Fb=`https://gomodel.enterpilot.io/docs/providers/`,Ib={anthropic:`anthropic`,azure:`azure`,bailian:`bailian`,bedrock:`bedrock`,"bedrock-mantle":`bedrock-mantle`,cohere:`cohere`,deepseek:`deepseek`,gemini:`gemini`,opencode_go:`opencode-go`,oracle:`oracle`,vertex:`vertex`,vllm:`vllm`,xiaomi:`xiaomi`};function Lb(){return{summary:{total:0,healthy:0,degraded:0,unhealthy:0,overall_status:`degraded`},providers:[]}}function Rb(e){let t={detailsExpanded:!1,cardOverrides:{}};try{if(e){let n=e.getItem(Mb);n===`true`||n===`false`?t.detailsExpanded=n===`true`:e.setItem(Mb,`false`);let r=JSON.parse(e.getItem(Nb)||`{}`);r&&typeof r==`object`&&!Array.isArray(r)&&(t.cardOverrides=r)}}catch{}return t}function zb(e,t){if(e)try{e.setItem(Mb,t?`true`:`false`)}catch{}}function Bb(e,t){if(e)try{e.setItem(Nb,JSON.stringify(t))}catch{}}function Vb(e,t,n){let r=n&&n.name?String(n.name):``;return r&&Object.prototype.hasOwnProperty.call(e,r)?e[r]===!0:t}function Hb(e){return`is-`+(String(e&&e.overall_status||`degraded`).trim()||`degraded`)}function Ub(e){return`is-`+(String(e||`degraded`).trim()||`degraded`)}function Wb(e){let t=e||{};return String(t.healthy||0)+`/`+String(t.total||0)}function Gb(e){let t=e||{},n=Number(t.total||0),r=Number(t.healthy||0);return n>0&&rString(e&&e.status_label||``).trim().toLowerCase()===`starting`)}function Jb(e){if(!e||!e.runtime)return``;let t=e.runtime.last_model_fetch_at||``,n=e.runtime.last_availability_check_at||``;return t?n&&Date.parse(n)>Date.parse(t)?n:t:n}function Yb(e,t){let n=Jb(e);if(!n||typeof t!=`function`)return`-`;let r=t(n);if(!r||r===`-`)return`-`;let i=String(r).split(` `);return i.length>1?i.slice(1).join(` `):r}function Xb(e,t){let n=Jb(e);return n?typeof t==`function`?t(n):String(n):``}function Zb(e){if(!e)return``;let t=String(e.name||``).trim(),n=String(e.type||e.config&&e.config.type||``).trim();return!n||n===t?``:n}function Qb(e){let t=String(e&&(e.type||e.config&&e.config.type)||``).trim().toLowerCase(),n=t?Ib[t]:``;return n?Fb+n+`?utm_source=gomodel_dashboard`:``}function $b(e){let t=e&&e.config&&e.config.resilience?e.config.resilience.retry:null;return t?String(t.max_retries)+` retries, `+t.initial_backoff+` initial, `+t.max_backoff+` max, factor `+t.backoff_factor+`, jitter `+t.jitter_factor:`-`}function ex(e){let t=e&&e.config&&e.config.resilience?e.config.resilience.circuit_breaker:null;return t?String(t.failure_threshold)+` fail, `+String(t.success_threshold)+` success, `+t.timeout+` timeout`:`-`}function tx(e){let t=e&&e.config&&Array.isArray(e.config.models)?e.config.models.filter(Boolean):[];return t.length===0?`Automatic`:t.join(`, `)}function nx(e){if(!e)return``;let t=[];return e.status_reason&&t.push(String(e.status_reason)),e.last_error&&t.push(`Last error: `+String(e.last_error)),t.join(` - -`)}function rx(e){let t=e&&e.request_health;return t&&typeof t==`object`?t:null}function ix(e){let t=rx(e);return t?String(t.circuit_state||``).trim():``}function ax(e){let t=ix(e);return t?t.charAt(0).toUpperCase()+t.slice(1):``}function ox(e){let t=ix(e);return t===`open`?`is-unhealthy`:t===`half-open`?`is-degraded`:`is-healthy`}function sx(e){let t=rx(e);if(!t)return``;let n=Number(t.requests||0),r=Number(t.errors||0),i=Math.round(Number(t.window_seconds||0)/60),a=i>0?`last `+i+` min`:`recent`;return String(n)+` request`+(n===1?``:`s`)+` · `+String(r)+` error`+(r===1?``:`s`)+` (`+a+`)`}function cx(e){let t=rx(e);return t&&Array.isArray(t.models)?t.models:[]}function lx(e){return e?String(Number(e.errors||0))+`/`+String(Number(e.requests||0))+` failed`:``}function ux(e){let t=e&&e.last_error;return!t||!t.message?``:(t.status_code?`HTTP `+String(t.status_code)+`: `:``)+t.message}function dx(){return{name:``,slug:``,url:``,transport:`http`,description:``,enabled:!0,headers:[],allowed_tools:``,disallowed_tools:``,user_paths:``,tool_timeout_seconds:``}}function fx(){return{server:``,status:``,instructions:``,tools:[],prompts:[],resources:[],templates:[]}}function px(e){return String(e&&(e.slug||e.name)||``).trim()}function mx(e){return String(e&&e.status||``).trim()||`connecting`}function hx(e){switch(mx(e)){case`connected`:return`status-success`;case`degraded`:return String(e&&e.last_error||``).trim()?`status-error`:`status-warning`;case`connecting`:return`status-neutral`;default:return`status-unknown`}}function gx(e,t){let n=mx(e),r=String(e&&e.last_error||``).trim();return r&&n!==`connected`?r:n===`connected`&&e&&e.connected_at?`Connected since `+(typeof t==`function`?t:String)(e.connected_at):``}function _x(e){return String(e&&e.transport||``)===`stdio`?`local command`:String(e&&e.url||``).trim()||`—`}function vx(e){let t=Number(e&&e.prompt_count||0),n=Number(e&&e.resource_count||0);return t+` prompts · `+n+` resources`}function yx(e){let t=String(e||``).normalize(`NFKD`).toLowerCase(),n=t.replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,64).replace(/-+$/g,``);if(n)return n;let r=2166136261;for(let e of t)r=Math.imul((r^e.codePointAt(0))>>>0,16777619)>>>0;return`mcp-`+r.toString(16).padStart(8,`0`)}function bx(e){return String(e||``).split(` -`).map(e=>e.trim()).filter(e=>e)}function xx(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.keys(e).sort().map(t=>({name:t,value:String(e[t]||``)}))}function Sx(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=String(e&&e.name||``).trim();n&&(t[n]=String(e&&e.value||``))}),t}function Cx(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.slug,e.url,e.transport,e.description,e.status].some(e=>String(e||``).toLowerCase().includes(r)))}function wx(e){return{name:String(e.name||``).trim(),slug:px(e),url:String(e.url||``).trim(),transport:e.transport===`sse`?`sse`:`http`,description:String(e.description||``).trim(),enabled:e.enabled!==!1,headers:xx(e.headers),allowed_tools:(Array.isArray(e.allowed_tools)?e.allowed_tools:[]).join(`, `),disallowed_tools:(Array.isArray(e.disallowed_tools)?e.disallowed_tools:[]).join(`, `),user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` -`),tool_timeout_seconds:e.tool_timeout_seconds?String(e.tool_timeout_seconds):``}}function Tx(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||yx(r)).trim().toLowerCase(),a=String(e.url||``).trim(),o=e.transport===`sse`?`sse`:`http`;if(!r)return{error:`Name is required.`};if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(i))return{error:`Slug must use 1–64 lowercase ASCII letters, numbers, hyphens, or underscores.`};if(t===`create`&&(n||[]).some(e=>px(e)===i))return{error:`Slug "`+i+`" is already in use.`};if(!a)return{error:`URL is required.`};let s,c=String(e.tool_timeout_seconds||``).trim();if(c!==``){let e=Number(c);if(!Number.isSafeInteger(e)||e<0)return{error:`Tool timeout must be a non-negative whole number of seconds.`};s=e}return{payload:{name:r,slug:i,url:a,transport:o,headers:Sx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:ic(e.allowed_tools),disallowed_tools:ic(e.disallowed_tools),user_paths:bx(e.user_paths),tool_timeout_seconds:s}}}function Ex(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=e=>(Array.isArray(e)?e:[]).filter(e=>e&&typeof e==`object`);return{server:String(n.server||e||``).trim(),status:String(n.status||``).trim(),instructions:String(n.instructions||``).trim(),tools:r(n.tools),prompts:r(n.prompts),resources:r(n.resources),templates:r(n.templates)}}function Dx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function Ox(e){let t=e||fx(),n=(e,t)=>{let n=String(e||``).trim(),r=String(t||``).trim();return n&&r?n+` — `+r:r||n},r=e=>n=>({key:e+`:`+String(n.name||``),name:String(n.name||``),aggregated:Dx(t,n.name),description:String(n.description||``).trim()});return[{key:`tools`,title:`Tools`,items:(t.tools||[]).map(r(`tool`))},{key:`prompts`,title:`Prompts`,items:(t.prompts||[]).map(r(`prompt`))},{key:`resources`,title:`Resources`,items:(t.resources||[]).map(e=>({key:`resource:`+String(e.uri||``),name:String(e.uri||``),aggregated:``,description:n(e.name,e.description)}))},{key:`templates`,title:`Resource templates`,items:(t.templates||[]).map(e=>({key:`template:`+String(e.uri_template||``),name:String(e.uri_template||``),aggregated:``,description:n(e.name,e.description)}))}].filter(e=>e.items.length>0)}function kx(e){return Ox(e).length===0}function Ax(e){return(e||[]).length}function jx(e){return(e||[]).filter(e=>mx(e)===`connected`).length}function Mx(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&mx(e)===`degraded`).length}function Nx(e,t){return!!e&&Ax(t)>0}function Px(e){return String(jx(e))+`/`+String(Ax(e))}function Fx(e){return Mx(e)>0?`is-degraded`:`is-healthy`}function Ix(e){let t=Mx(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Ax(e),r=jx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Lx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Rx(e){let t=e&&typeof e==`object`?e:{};return{interval:t.interval===`hour`?`hour`:`day`,buckets:Array.isArray(t.buckets)?t.buckets:[],summary:t.summary&&typeof t.summary==`object`?t.summary:{requests:0},provider_latency:Array.isArray(t.provider_latency)?t.provider_latency:[]}}function zx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Bx(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Vx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function Hx(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function Ux(e){let t=Number(e);return Number.isFinite(t)?t>=6e4?(t/6e4).toFixed(1)+` min`:t>=1e3?(t/1e3).toFixed(2)+` s`:Math.round(t)+` ms`:`-`}function Wx(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:Ux(Number(t))}function Gx(e,t){try{let n={};return new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,hourCycle:`h23`}).formatToParts(e).forEach(e=>{n[e.type]=e.value}),{year:n.year,month:n.month,day:n.day,hour:Number(n.hour)}}catch{return{year:String(e.getFullYear()),month:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][e.getMonth()],day:String(e.getDate()),hour:e.getHours()}}}function Kx(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=Gx(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function qx(e,t,n,r){let i=new Date(e.start);if(Number.isNaN(i.getTime()))return String(e.start||``);if(t===`hour`)return r(e.start);let a=Gx(i,n);return a.month+` `+a.day+`, `+a.year}function Jx(e){return{ok:e(`var(--success)`),clientError:e(`var(--warning)`),serverError:e(`var(--danger)`),other:e(`color-mix(in srgb, var(--text-muted) 55%, transparent)`)}}function Yx(e,t,n={}){let r=n.interval===`hour`?`hour`:`day`,i=n.zone,a=n.resolve||(e=>e),o=n.formatTimestamp||(e=>String(e)),s=t.map(e=>Kx(e,r,i)),c=Jx(a),l=a(`var(--bg-surface)`),u=e=>Number(e)||0,d=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:l,borderWidth:1,borderSkipped:!1,borderRadius:2,maxBarThickness:28}),f=[d(`2xx`,t.map(e=>u(e.status_2xx)),c.ok),d(`4xx`,t.map(e=>u(e.status_4xx)),c.clientError),d(`5xx`,t.map(e=>u(e.status_5xx)),c.serverError)];return t.some(e=>u(e.status_other)>0)&&f.push(d(`Other`,t.map(e=>u(e.status_other)),c.other)),{type:`bar`,data:{labels:s,datasets:f},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Ry(e,{title:e=>e.length?qx(t[e[0].dataIndex],r,i,o):``,label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Ly(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ly(),precision:0,callback:e=>uc(e)}}}}}}function Xx(e=Vy()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function Zx(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||Xx();return{type:`line`,data:{labels:t.map(e=>Kx(e,i,a)),datasets:n.map(e=>({label:e.provider,data:(e.avg_duration_ms||[]).map(e=>e==null?null:Number(e)),borderColor:s(e.provider),backgroundColor:s(e.provider),fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4,spanGaps:i===`hour`&&2}))},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Ry(e,{title:e=>e.length?qx(t[e[0].dataIndex],i,a,o):``,label:e=>{let t=(n[e.datasetIndex]&&n[e.datasetIndex].requests||[])[e.dataIndex],r=Number(t)||0;return e.dataset.label+`: `+Ux(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ly(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ly(),callback:e=>Ux(e)}}}}}}var Qx=class{#e=k(j(Lb()));get status(){return I(this.#e)}set status(e){A(this.#e,e,!0)}#t=k(!1);get loading(){return I(this.#t)}set loading(e){A(this.#t,e,!0)}#n=k(!1);get loadedOnce(){return I(this.#n)}set loadedOnce(e){A(this.#n,e,!0)}#r=k(!1);get detailsExpanded(){return I(this.#r)}set detailsExpanded(e){A(this.#r,e,!0)}#i=k(j({}));get cardOverrides(){return I(this.#i)}set cardOverrides(e){A(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Rb(wa());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Vb(this.cardOverrides,this.detailsExpanded,e)}toggleCard(e){let t=e&&e.name?String(e.name):``;if(!t)return;let n={...this.cardOverrides};n[t]=!this.cardExpanded(e),this.cardOverrides=n,Bb(wa(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},zb(wa(),this.detailsExpanded),Bb(wa(),this.cardOverrides)}detailsToggleLabel(){return this.detailsExpanded?`Show Details`:`Hide Details`}async fetch(){this.initPreferences(),this.#a&&this.#a.abort();let e=new AbortController;this.#a=e,this.loading=!0;try{let t=await _s(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Lb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Lb();n.summary||=Lb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(ys(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Lb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),qb(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Pb))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},$x=class{#e=k(j(Lx()));get stats(){return I(this.#e)}set stats(e){A(this.#e,e,!0)}#t=k(!1);get loading(){return I(this.#t)}set loading(e){A(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await _s(`/admin/audit/stats?`+Mc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Lx();return}this.stats=Rx(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Lx()}finally{e===this.#n&&(this.loading=!1)}}},eS=class{#e=k(j([]));get servers(){return I(this.#e)}set servers(e){A(this.#e,e,!0)}#t=k(!1);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}async fetch(){if(await Ss.ensureLoaded(),!Ss.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await _s(`/admin/mcp-servers`,{label:`mcp servers`});if(e.stale)return;if(e.status===503||e.status===404){this.available=!1,this.servers=[];return}if(this.available=!0,!e.ok){this.servers=[];return}this.servers=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch MCP servers:`,e),this.servers=[]}finally{this.loading=!1}}},tS=class{#e=k(j([]));get data(){return I(this.#e)}set data(e){A(this.#e,e,!0)}#t=k(`tokens`);get mode(){return I(this.#t)}set mode(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=null;async fetch(){this.#r&&this.#r.abort();let e=new AbortController;this.#r=e,this.loading=!0;try{let t=await _s(`/admin/usage/daily?days=365&interval=daily`,{label:`calendar`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.data=[];return}this.data=Array.isArray(t.data)?t.data:[]}catch(e){if(ys(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},nS=new Qx,rS=new $x,iS=new eS,aS=new tS,oS=(e,t=f,n=f,r=f,i=f)=>{var a=cS(),o=M(a),s=M(o,!0);T(o);var c=P(o,2),l=M(c),u=M(l),d=M(u,!0);T(u),Ue(),T(l);var p=P(l,4),m=M(p),h=M(m,!0);T(m),Ue(),T(p);var g=P(p,4),_=M(g,!0);T(g),T(c),T(a),F((e,n,r,i,a,o)=>{B(s,t()),W(l,`title`,e),B(d,n),W(p,`title`,r),B(h,i),W(g,`title`,a),B(_,o)},[()=>dc(`Input tokens`,n()),()=>uc(n()),()=>dc(`Output tokens`,r()),()=>uc(r()),()=>dc(`Total tokens`,i()),()=>uc(i())]),z(e,a)},sS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=dS(),c=M(s),l=M(c,!0);T(c);var u=P(c,2),d=M(u,!0);T(u);var p=P(u,2),m=e=>{var t=lS(),n=M(t,!0);T(t),F(()=>{W(t,`aria-label`,o().title),W(t,`title`,o().title),B(n,a())}),L(`click`,t,function(...e){o().onclick?.apply(this,e)}),z(e,t)},h=e=>{var t=uS(),n=M(t,!0);T(t),F(()=>B(n,a())),z(e,t)};V(p,e=>{o()?e(m):e(h,-1)}),T(s),F(()=>{U(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),B(l,r()),B(d,i())}),z(e,s)},cS=R(`
i + o =
`),lS=R(``),uS=R(` `),dS=R(`
`),fS=R(`
Cache Hits
`),pS=R(`
Total Requests
Estimated Cost
Prompt Cache Rate
`);function mS(e,t){E(t,!0);let n=O(()=>Rc.summary),r=O(()=>Rc.cacheOverview),i=O(()=>Rc.cacheAnalyticsEnabled()),a=O(()=>nS.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=pS(),c=M(s);{let e=O(()=>fb(I(n)));oS(c,()=>`Tokens`,()=>I(n).total_input_tokens,()=>I(n).total_output_tokens,()=>I(e))}var l=P(c,2),u=P(M(l),2),d=M(u,!0);T(u),T(l);var f=P(l,2),p=e=>{var t=fS(),n=P(M(t),2),i=M(n,!0);T(n),T(t),F(e=>B(i,e),[()=>oc(I(r).summary.total_hits)]),z(e,t)};V(f,e=>{I(i)&&e(p)});var m=P(f,2),h=P(M(m),2),g=M(h,!0);T(h),T(m);var _=P(m,2),v=e=>{{let t=O(()=>gb(I(r)));oS(e,()=>`Local Cache`,()=>I(r).summary.total_input_tokens,()=>I(r).summary.total_output_tokens,()=>I(t))}};V(_,e=>{I(i)&&e(v)});var y=P(_,2),b=P(M(y),2),x=M(b);jy(x,{build:()=>jb(Db(I(n)),zy(`var(--token-prompt)`),zy(`var(--bg-surface-hover)`))});var S=P(x,2),C=M(S,!0);T(S),T(b),T(y);var w=P(y,2),ee=e=>{{let t=O(()=>Hb(I(a))),n=O(()=>Wb(I(a))),r=O(()=>Kb(I(a))),i=O(()=>Gb(I(a))?{title:`View providers overview`,onclick:o}:null);sS(e,()=>`provider-status-overview-card`,()=>I(t),()=>`Provider Status`,()=>I(n),()=>I(r),()=>I(i))}};V(w,e=>{I(a).total>0&&e(ee)});var te=P(w,2),ne=e=>{{let t=O(()=>Fx(iS.servers)),n=O(()=>Px(iS.servers)),r=O(()=>Ix(iS.servers));sS(e,()=>`mcp-servers-flag`,()=>I(t),()=>`MCP Servers`,()=>I(n),()=>I(r),()=>({title:`View MCP servers`,onclick:()=>Jo.navigate(`mcp-servers`)}))}},re=O(()=>Nx(iS.available,iS.servers));V(te,e=>{I(re)&&e(ne)}),T(s),F((e,t,n,r,i)=>{W(u,`title`,e),B(d,t),B(g,n),W(b,`aria-label`,r),B(C,i)},[()=>hb(I(n),I(r),I(i)),()=>oc(mb(I(n),I(r),I(i))),()=>sc(I(n).total_cost),()=>`Prompt cache rate `+kb(I(n)),()=>kb(I(n))]),z(e,s),D()}Hr([`click`]);var hS=R(` `),gS=R(`
`),_S=R(`No usage in the selected period yet`),vS=R(`
`),yS=R(`

Tokens

Share of input tokens over the selected period
`);function bS(e,t){E(t,!0);let n=O(()=>Rc.cacheAnalyticsEnabled()),r=O(()=>bb(Rc.summary,Rc.cacheOverview,I(n))),i=O(()=>xb(Rc.summary,Rc.cacheOverview,I(n))),a=O(()=>yb(Rc.summary,Rc.cacheOverview,I(n)));var o=yS(),s=P(M(o),2);let c;var l=M(s);H(l,17,()=>I(i),e=>e.key,(e,t)=>{var n=gS(),r=M(n),i=e=>{var n=hS(),r=M(n);T(n),F(()=>B(r,`${I(t).pct??``}%`)),z(e,n)};V(r,e=>{I(t).pct>=8&&e(i)}),T(n),F(e=>{Hi(n,`width: ${I(t).pct??``}%; background: var(${I(t).colorVar??``})`),W(n,`title`,e)},[()=>Sb(I(t))]),z(e,n)});var u=P(l,2),d=e=>{z(e,_S())};V(u,e=>{I(a)||e(d)}),T(s);var f=P(s,2);H(f,21,()=>I(r),e=>e.key,(e,t)=>{var n=vS(),r=M(n),i=P(r,2),a=M(i,!0);T(i);var o=P(i,2),s=M(o);T(o);var c=P(o,2),l=M(c,!0);T(c),T(n),F((e,i)=>{W(n,`title`,e),Hi(r,`background: var(${I(t).colorVar??``})`),B(a,I(t).label),B(s,`${I(t).pct??``}%`),B(l,i)},[()=>Sb(I(t)),()=>oc(I(t).tokens)]),z(e,n)}),T(f),T(o),F(e=>{c=U(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!I(a)}),W(s,`aria-label`,e)},[()=>Cb(I(i))]),z(e,o),D()}var xS=R(``);function SS(e,t){let n=ya(t,`size`,3,16),r=ya(t,`label`,3,`Loading`),i=ya(t,`class`,3,``);var a=xS();F(()=>{U(a,1,Fi([`spinner`,i()]),`svelte-b54l9o`),Hi(a,`--spinner-size: ${n()??``}px`),W(a,`aria-label`,r())}),z(e,a)}var CS=Xr(` `),wS=Xr(``);function TS(e,t){let n=ya(t,`label`,3,`No data`);var r=wS(),i=P(M(r),9),a=e=>{var t=CS(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)};V(i,e=>{n()&&e(a)}),T(r),F(()=>{W(r,`role`,n()?`img`:void 0),W(r,`aria-label`,n()||void 0),W(r,`aria-hidden`,n()?void 0:`true`)}),z(e,r)}var ES=R(`
`),DS=R(`

`);function OS(e,t){E(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Mc.interval=e,t.onintervalchange?.()}function i(){let e=Rc.daily;if(e.length===0)return null;let t=Mc.rangeStart(),n=Mc.rangeEnd(),r=Eb(Tb(e,Mc.interval,t,n),Tb(Array.isArray(Rc.cacheOverview.daily)?Rc.cacheOverview.daily:[],Mc.interval,t,n));return Ab(Iy(),r,{cacheEnabled:Rc.cacheAnalyticsEnabled(),resolve:zy})}var a=DS(),o=M(a),s=M(o),c=M(s,!0);T(s);var l=P(s,2);{let e=O(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Py(l,{ariaLabel:`Usage chart interval`,get options(){return I(e)},get value(){return Mc.interval},onchange:r})}T(o);var u=P(o,2),d=M(u);jy(d,{build:i});var f=P(d,2),p=e=>{var t=ES();SS(M(t),{size:24,label:`Loading usage`}),T(t),z(e,t)},m=e=>{var t=ES();TS(M(t),{}),T(t),z(e,t)};V(f,e=>{Rc.daily.length===0&&Rc.loading?e(p):Rc.daily.length===0&&!K.authError&&e(m,1)}),T(u),T(a),F(e=>B(c,e),[()=>Mc.chartTitle()]),z(e,a),D()}var kS=10,AS=.7;function jS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+AS,r=Math.ceil(n*kS);return r<1?1:r>kS?kS:r}function MS(){let e=[];for(let t=0;t<=kS;t++)e.push(t);return e}function NS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=Qo(es(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);$o(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=$o(e),i=r[n],a=0;i&&(a=t===`costs`?i.total_cost==null?0:i.total_cost:i.total_tokens||0),o.push({dateStr:n,value:a,level:0,empty:!1})}let s=0;for(let e=0;es&&(s=o[e].value);for(let e=0;e0){for(;l.length<7;)l.push({dateStr:``,value:0,level:0,empty:!0});c.push(l)}return c}function PS(e){let t=Qo(es(e,-364)),n=t.getUTCDay();t.setUTCDate(t.getUTCDate()-n);let r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[],a={},o=0;for(let n=new Date(t);$o(n)<=e;n.setUTCDate(n.getUTCDate()+7),o++){let t=null;if(o===0)t=new Date(n);else for(let r=0;r<7;r++){let i=new Date(n);if(i.setUTCDate(n.getUTCDate()+r),$o(i)>e)break;if(i.getUTCDate()===1){t=i;break}}if(!t)continue;let s=t.getUTCFullYear()+`-`+t.getUTCMonth();a[s]||(i.push({label:r[t.getUTCMonth()],col:o,key:s}),a[s]=!0)}for(let e=0;e `),RS=R(`
`),zS=R(`
`),BS=R(`
`),VS=R(`
`),HS=R(`

Activity

Mon Wed Fri
`,1);function US(e,t){E(t,!0);let n=k(j({show:!1,x:0,y:0,text:``})),r=O(()=>ds.currentDateKey()),i=O(()=>NS(aS.data,aS.mode,I(r))),a=O(()=>PS(I(r)));function o(e,t){t.empty||A(n,{show:!0,x:e.clientX,y:e.clientY,text:IS(t,aS.mode)},!0)}function s(){A(n,{show:!1,x:0,y:0,text:``},!0)}var c=HS(),l=N(c),u=M(l),d=P(M(u),2),f=e=>{SS(e,{size:14,label:`Loading activity`})};V(d,e=>{aS.loading&&aS.data.length===0&&e(f)}),Py(P(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return aS.mode},onchange:e=>aS.mode=e}),T(u);var p=P(u,2),m=P(M(p),2),h=M(m);H(h,21,()=>I(a),e=>e.key,(e,t)=>{var n=LS(),r=M(n,!0);T(n),F(()=>{Hi(n,`grid-column: ${I(t).col+1} / span ${I(t).span??``}`),B(r,I(t).label)}),z(e,n)}),T(h);var g=P(h,2);H(g,21,()=>I(i),oi,(e,t,n)=>{var r=zS();H(r,23,()=>I(t),(e,t)=>n+`-`+t,(e,t)=>{var n=RS();F(()=>U(n,1,Fi([`contribution-calendar-cell`,I(t).empty?`empty`:`level-${I(t).level}`]),`svelte-3hfxuq`)),Vr(`mouseenter`,n,e=>o(e,I(t))),Vr(`mouseleave`,n,s),z(e,n)}),T(r),z(e,r)}),T(g),T(m),T(p);var _=P(p,2),v=M(_),y=M(v),b=M(y,!0);T(y),T(v);var x=P(v,2);H(P(M(x),2),16,MS,e=>e,(e,t)=>{var n=BS();F(()=>U(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),z(e,n)}),Ue(2),T(x),T(_),T(l);var S=P(l,2),C=e=>{var t=VS(),r=M(t,!0);T(t),F(()=>{Hi(t,`left: ${I(n).x??``}px; top: ${I(n).y-40}px`),B(r,I(n).text)}),z(e,t)};V(S,e=>{I(n).show&&e(C)}),F(e=>B(b,e),[()=>FS(aS.data,aS.mode)]),z(e,c),D()}var WS=R(``),GS=R(`

`),KS=R(`
`);function qS(e,t){E(t,!0);let n=ya(t,`label`,3,`help`),r=ya(t,`text`,3,``),i=ya(t,`open`,15,!1),a=ya(t,`external`,3,!1),o=O(()=>!!r()||!!t.help||a());var s=KS(),c=M(s),l=M(c);gi(l,()=>t.title??f);var u=P(l,2),d=e=>{var r=WS();let a;F(()=>{a=U(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),W(r,`aria-label`,(i()?`Hide `:`Show `)+n()),W(r,`aria-expanded`,i()),W(r,`aria-controls`,t.copyId)}),L(`click`,r,()=>i(!i())),z(e,r)};V(u,e=>{I(o)&&e(d)}),gi(P(u,2),()=>t.extra??f),T(c);var p=P(c,2),m=e=>{var n=GS(),i=M(n),a=e=>{var n=Qr();gi(N(n),()=>t.help),z(e,n)},o=e=>{var t=Zr();F(()=>B(t,r())),z(e,t)};V(i,e=>{t.help?e(a):e(o,-1)}),T(n),F(()=>W(n,`id`,t.copyId)),z(e,n)};V(p,e=>{i()&&I(o)&&!a()&&e(m)}),T(s),z(e,s),D()}Hr([`click`]);var JS=R(`

Provider Latency

`),YS=R(`
Avg
`),XS=R(`

Requests by Status

Success 2xx 4xx 5xx
`,1);function ZS(e,t){E(t,!0);let n=Xx(),r=O(()=>rS.stats);function i(){return{interval:I(r).interval,zone:ds.effectiveTimezone(),resolve:zy,formatTimestamp:e=>ds.formatTimestamp(e)}}var a=Qr(),o=N(a),s=e=>{var t=XS(),a=N(t),o=M(a),s=P(M(o),2),c=M(s),l=P(M(c),2),u=M(l,!0);T(l),T(c);var d=P(c,2),f=P(M(d),4),p=M(f,!0);T(f),T(d);var m=P(d,2),h=P(M(m),4),g=M(h,!0);T(h),T(m);var _=P(m,2),v=P(M(_),4),y=M(v,!0);T(v),T(_),T(s),T(o);var b=P(o,2);jy(M(b),{build:()=>Yx(Iy(),I(r).buckets,i())}),T(b),T(a);var x=P(a,2),S=e=>{var t=YS(),a=M(t),o=M(a);qS(o,{copyId:`audit-latency-help-copy`,label:`provider latency help`,text:`Average duration of successful requests as measured at the gateway, per provider. Local cache hits and failed requests are excluded; streamed responses count until the stream completes.`,title:e=>{z(e,JS())},$$slots:{title:!0}});var s=P(o,2),c=M(s),l=P(M(c),2),u=M(l,!0);T(l),T(c),T(s),T(a);var d=P(a,2);jy(M(d),{build:()=>Zx(Iy(),I(r).buckets,I(r).provider_latency,{...i(),providerColor:n})}),T(d),T(t),F(e=>B(u,e),[()=>Wx(I(r))]),z(e,t)},C=O(()=>Bx(I(r)));V(x,e=>{I(C)&&e(S)}),F((e,t,n,r)=>{B(u,e),B(p,t),B(g,n),B(y,r)},[()=>Vx(I(r)),()=>oc(Hx(I(r),`status_2xx`)),()=>oc(Hx(I(r),`status_4xx`)),()=>oc(Hx(I(r),`status_5xx`))]),z(e,t)},c=O(()=>zx(I(r)));V(o,e=>{I(c)&&e(s)}),z(e,a),D()}var QS=(e,t=f,n=f,r)=>{let i=Ot(()=>h(r?.(),!1));var a=tC(),o=M(a),s=M(o,!0);T(o);var c=P(o,2),l=e=>{var t=$S(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)},u=e=>{var t=eC(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)};V(c,e=>{I(i)?e(l):e(u,-1)}),T(a),F(()=>B(s,t())),z(e,a)},$S=R(` `),eC=R(` `),tC=R(`
`),nC=R(`

`),rC=R(`
Breaker State
`),iC=R(`
`),aC=R(`
Models (Recent Traffic)
`),oC=R(`
`),sC=R(`

`);function cC(e,t){E(t,!0);let n=O(()=>ox(t.provider)),r=O(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=sC();let a;var o=M(i),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=e=>{var n=nC(),r=M(n,!0);T(n),F(()=>B(r,t.provider.last_error)),z(e,n)};V(l,e=>{t.provider.last_error&&e(u)});var d=P(l,2),f=e=>{var r=oC(),i=M(r);{let e=O(()=>sx(t.provider));QS(i,()=>`Recent Requests`,()=>I(e))}var a=P(i,2),o=e=>{var r=rC(),i=P(M(r),2),a=M(i),o=M(a,!0);T(a),T(i),T(r),F(e=>{U(a,1,Fi([`provider-status-health-state`,I(n)]),`svelte-6y9wjv`),B(o,e)},[()=>ax(t.provider)]),z(e,r)},s=O(()=>ix(t.provider));V(a,e=>{I(s)&&e(o)});var c=P(a,2),l=e=>{var n=aC(),r=P(M(n),2);H(r,21,()=>cx(t.provider),e=>e.model,(e,t)=>{var n=iC();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(n),F((e,i)=>{r=U(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":I(t).flagged}),W(n,`title`,e),B(a,I(t).model),B(s,i)},[()=>ux(I(t)),()=>lx(I(t))]),z(e,n)}),T(r),T(n),z(e,n)},u=O(()=>cx(t.provider).length>0);V(c,e=>{I(u)&&e(l)}),T(r),z(e,r)},p=O(()=>rx(t.provider));V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=M(m);H(h,17,()=>I(r),([e,t])=>e,(e,t)=>{var n=O(()=>g(I(t),2));QS(e,()=>I(n)[0],()=>I(n)[1],()=>!0)});var _=P(h,2);{let e=O(()=>tx(t.provider));QS(_,()=>`Configured Models`,()=>I(e))}var v=P(_,2);{let e=O(()=>$b(t.provider));QS(v,()=>`Retry`,()=>I(e))}var y=P(v,2);{let e=O(()=>ex(t.provider));QS(y,()=>`Circuit Breaker`,()=>I(e))}T(m),T(o),T(i),F(()=>{a=U(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),W(i,`aria-hidden`,!t.expanded),B(c,t.provider.status_reason)}),z(e,i),D()}var lC=R(` `),uC=R(``),dC=R(`

Models Available
Last Checked
`);function fC(e,t){E(t,!0);let n=O(()=>nS.cardExpanded(t.provider)),r=e=>ds.formatTimestamp(e);var i=dC(),a=M(i),o=M(a),s=M(o),c=M(s),l=M(c,!0);T(c);var u=P(c,2),d=e=>{var n=lC(),r=M(n);T(n),F(e=>B(r,`(${e??``})`),[()=>Zb(t.provider)]),z(e,n)},f=O(()=>Zb(t.provider));V(u,e=>{I(f)&&e(d)});var p=P(u,2),m=e=>{var n=uC();F((e,t,r)=>{W(n,`href`,e),W(n,`aria-label`,t),W(n,`title`,r)},[()=>Qb(t.provider),()=>`View `+(Zb(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(Zb(t.provider)||t.provider.name)+` provider docs`]),z(e,n)},h=O(()=>Qb(t.provider));V(p,e=>{I(h)&&e(m)}),T(s),T(o);var g=P(o,2),_=M(g,!0);T(g),T(a);var v=P(a,2),y=M(v),b=P(M(y),2),x=M(b,!0);T(b),T(y);var S=P(y,2),C=P(M(S),2),w=M(C,!0);T(C),T(S),T(v);var ee=P(v,2);cC(ee,{get provider(){return t.provider},get expanded(){return I(n)}});var te=P(ee,2);let ne;G(M(te),{get icon(){return Ha},class:`provider-status-card-toggle-icon`}),T(te),T(i),F((e,r,i,a,o)=>{B(l,t.provider.name),U(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),W(g,`title`,r),B(_,t.provider.status_label),B(x,i),W(C,`title`,a),B(w,o),ne=U(te,1,`provider-status-card-toggle svelte-nopjmh`,null,ne,{"is-expanded":I(n)}),W(te,`aria-expanded`,I(n)),W(te,`aria-label`,(I(n)?`Collapse `:`Expand `)+t.provider.name+` details`),W(te,`title`,I(n)?`Collapse details`:`Expand details`)},[()=>Ub(t.provider.status),()=>nx(t.provider),()=>oc(t.provider.runtime?.discovered_model_count),()=>Xb(t.provider,r),()=>Yb(t.provider,r)]),L(`click`,te,()=>nS.toggleCard(t.provider)),z(e,i),D()}Hr([`click`]);var pC=R(`

Providers Overview

`),mC=R(`
`);function hC(e,t){E(t,!0);let n=O(()=>nS.status.providers);var r=Qr(),i=N(r),a=e=>{var t=pC(),r=M(t),i=P(M(r),2),a=M(i),o=M(a,!0);T(a);var s=P(a,2);let c;T(i),T(r);var l=P(r,2);H(l,21,()=>I(n),e=>e.name,(e,t)=>{fC(e,{get provider(){return I(t)}})}),T(l),T(t),F((e,t)=>{W(i,`aria-checked`,nS.detailsExpanded),W(i,`title`,e),B(o,t),c=U(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":nS.detailsExpanded})},[()=>nS.detailsToggleLabel(),()=>nS.detailsToggleLabel()]),L(`click`,i,()=>nS.toggleDetails()),z(e,t)},o=e=>{var t=mC();SS(M(t),{size:18,label:`Loading provider status`}),T(t),z(e,t)};V(i,e=>{I(n).length>0?e(a):nS.loading&&!nS.loadedOnce&&e(o,1)}),z(e,r),D()}Hr([`click`]);var gC=R(`
`);function _C(e,t){E(t,!0);function n(){Rc.fetchUsage(),Rc.fetchCacheOverview(``),rS.fetch(),nS.fetch(),iS.fetch(),aS.fetch()}function r(){Rc.fetchUsage(),Rc.fetchCacheOverview(``),rS.fetch()}function i(){r(),aS.fetch()}An(()=>{if(K.refreshTick,Jo.page===`overview`)return Er(()=>{n(),sb.start()}),()=>{sb.stop(),nS.stopPolling()}});var a=gC(),o=M(a);db(o,{});var s=P(o,4);tl(M(s),{onchange:i}),T(s);var c=P(s,2);Fc(c,{});var l=P(c,2);mS(l,{});var u=P(l,2);bS(u,{});var d=P(u,2);OS(d,{onintervalchange:r});var f=P(d,2);US(f,{});var p=P(f,2);ZS(p,{}),hC(P(p,2),{}),T(a),z(e,a),D()}var vC=`/admin/live/logs?types=audit,usage`;function yC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function bC(e){switch(e){case`date_range`:return`Live paused — the selected date range does not include today. Set it to today to resume.`;case`filters`:return`Live paused while filters are active. Clear them to resume.`;case`pagination`:return`Live paused on later pages. Go to the first page to resume.`;default:return``}}function xC(e){let t=vC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function SC(){return{async consumeLiveLogsBody(e){await Wy(e,e=>this.applyLiveLogEvent(e))},applyLiveLogEvent(e){if(!e||typeof e!=`object`)return;let t=Number(e.seq||0);Number.isFinite(t)&&t>this.liveLogsLastSeq&&(this.liveLogsLastSeq=t);let n=String(e.type||``).trim();if(n!==`heartbeat`){if(n===`reset`){this.reloadLiveLogSources();return}if(n===`audit.removed`){this.removeLiveAuditEntry(e.data);return}if(n.indexOf(`audit.`)===0){this.mergeLiveAuditEntry(e.data||{},n);return}n.indexOf(`usage.`)===0&&(this.mergeLiveUsageEntry(e.data||{},n),typeof this.noteLiveTokenUsage==`function`&&this.noteLiveTokenUsage(n))}},reloadLiveLogSources(){typeof this.fetchUsage==`function`&&this.fetchUsage(),this.page===`audit-logs`&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},auditLivePauseReason(){return!this.auditLog||this.auditLog.offset!==0?`pagination`:this.auditSearch||this.auditMethod||this.auditStatusCode||this.auditStream?`filters`:!this.followsToday&&(this.customStartDate||this.customEndDate)?`date_range`:null},auditLiveInsertAllowed(){return!this.auditLivePauseReason()},usageLiveInsertAllowed(){return this.usageLog&&this.usageLog.offset===0&&!this.usageLogSearch&&!this.usageFilterModel&&!this.usageFilterProvider&&!this.usageFilterLabel&&!this.usageFilterUserPath},mergeLiveAuditEntry(e,t){if(!e||typeof e!=`object`)return;let n=String(e.id||e.request_id||``).trim();if(!n)return;let r=String(e.request_id||``).trim(),i=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],a=i.findIndex(e=>yC(e,n,r)),o=a>=0&&i[a]||{},s=t===`audit.detail`,c=s?{...e,_detail_loaded:!0,_response_partial:!1,bodies_omitted:!1}:this.liveAuditPatch(o,e,t);if(a>=0){let e=this.mergeLiveAuditPatch(o,c);return i.splice(a,1,e),this.auditLog.entries=[...i],this.regroupLiveAuditHead(e),s||this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.cacheMergedAuditRecord(l,t),l;if(!this.auditLiveInsertAllowed()){this.cacheMergedAuditRecord(c,t);return}if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}this.auditLog.entries=[this.mergeLiveAuditUsagePatch(c),...i].slice(0,this.auditLog.limit||25),this.auditLog.total=Number(this.auditLog.total||0)+1;let u=this.auditLog.entries[0];return s||this.fetchExpandedAuditDetailIfReady(u),this.cacheMergedAuditRecord(u,t),u},liveAuditPatch(e,t,n){let r=this.liveAuditStateAfter(e._live_state,n),i=this.liveAuditEventFlushed(e._live_state)||this.liveAuditEventFlushed(r),a={...t,_live:!0,_live_state:r,_audit_flushed:i,_live_pending:!i};return n===`audit.stream`?a._response_partial=!0:this.liveAuditStateSettled(n)&&(a._response_partial=!1),a},mergeLiveAuditChild(e,t){let n=this.auditThreadChildren;if(!n||typeof n!=`object`)return null;let r=String(e.id||``).trim(),i=String(e.request_id||``).trim(),a=Object.keys(n);for(let e=0;eyC(e,r,i));if(c<0)continue;let l=this.mergeLiveAuditPatch(s[c]||{},t),u=[...s];return u.splice(c,1,l),this.auditThreadChildren={...n,[a[e]]:{...o,entries:u}},l}return null},regroupLiveAuditHead(e){if(!this.auditGroupSessions)return null;let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=String(e.id||``).trim(),i=n.findIndex(e=>String(e.id||``).trim()===r);if(i<0)return null;let a=n.findIndex((e,n)=>n!==i&&String(e.session_id||``).trim()===t);if(a<0)return null;let o=n[a],s=Date.parse(o&&o.timestamp),c=Date.parse(e&&e.timestamp),l=Number.isFinite(s)&&Number.isFinite(c)&&s>c,u=l?o:e,d=l?e:o,f={...u,session_count:Math.max(1,Number(o.session_count||1))+Math.max(1,Number(e.session_count||1))},p=n.filter((e,t)=>t!==i&&t!==a);return p.unshift(f),this.auditLog.entries=p,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-1),this.prependLiveAuditThreadChild(t,d),f},foldLiveAuditIntoThread(e){let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(e=>String(e.session_id||``).trim()===t);if(r<0)return null;let i=n[r],a=Number(i.session_count),o=this.mergeLiveAuditUsagePatch({...e,session_count:(Number.isFinite(a)&&a>0?a:1)+1}),s=[...n];return s.splice(r,1),s.unshift(o),this.auditLog.entries=s,this.prependLiveAuditThreadChild(t,i),o},prependLiveAuditThreadChild(e,t){let n=this.auditThreadChildren||{},r=n[e],i={...t};delete i.session_count;let a=r&&Array.isArray(r.entries)?{...r,entries:[i,...r.entries],total:Number(r.total||r.entries.length)+1}:{loading:!1,loaded:!1,entries:[i],total:1};this.auditThreadChildren={...n,[e]:a}},removeLiveAuditThreadChild(e,t){let n=this.auditThreadChildren;!n||typeof n!=`object`||Object.keys(n).forEach(r=>{let i=n[r],a=i&&Array.isArray(i.entries)?i.entries:[],o=a.filter(n=>!yC(n,e,t)),s=a.length-o.length;s!==0&&(this.auditThreadChildren={...this.auditThreadChildren,[r]:{...i,entries:o,total:Math.max(0,Number(i.total||a.length)-s)}},this.decrementLiveAuditThreadCount(r,s))})},decrementLiveAuditThreadCount(e,t){let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(t=>String(t.session_id||``).trim()===e);if(r<0)return;let i=n[r],a=[...n];a.splice(r,1,{...i,session_count:Math.max(1,Number(i.session_count||1)-t)}),this.auditLog.entries=a},mergeLiveAuditPatch(e,t){let n={...e,...t};return t.data===void 0&&e.data!==void 0?n.data=e.data:e.data&&t.data&&typeof e.data==`object`&&typeof t.data==`object`&&!Array.isArray(e.data)&&!Array.isArray(t.data)&&(n.data={...e.data,...t.data}),this.mergeLiveAuditUsagePatch(n)},mergeLiveAuditUsagePatch(e){let t=this.liveUsageEntryForAudit(e);if(!t)return e;let n=this.auditEntryWithLiveUsage(e,t);return this.removeSkippedLiveUsage(t),n},liveUsageEntryForAudit(e){let t=String(e&&e.request_id||``).trim();return t&&((this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[]).find(e=>String(e&&e.request_id||``).trim()===t)||this.skippedLiveUsageByRequestId&&this.skippedLiveUsageByRequestId[t])||null},cacheMergedAuditRecord(e,t){return e&&typeof this.cacheAuditRecord==`function`?this.cacheAuditRecord(e,t):e},fetchExpandedAuditDetailIfReady(e){!e||!this.isAuditEntryExpanded||!this.isAuditEntryExpanded(e)||String(e._live_state||``).trim()!==`audit.flushed`&&!e._audit_flushed||typeof this.fetchAuditEntryDetail==`function`&&this.fetchAuditEntryDetail(e)},liveAuditStateRank(e){switch(String(e||``).trim()){case`audit.started`:return 10;case`audit.updated`:case`audit.stream`:return 20;case`audit.completed`:return 30;case`audit.failed`:case`audit.flushed`:case`audit.detail`:return 40;default:return 0}},liveAuditStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveAuditStateRank(n)>this.liveAuditStateRank(r)?n:r},liveAuditStateSettled(e){return this.liveAuditStateRank(e)>=this.liveAuditStateRank(`audit.completed`)},liveAuditEventFlushed(e){let t=String(e||``).trim();return t===`audit.failed`||t===`audit.flushed`||t===`audit.detail`},removeLiveAuditEntry(e){if(!e||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim();if(!t&&!n)return;let r=this.auditLog.entries,i=[],a=0,o=0,s=!1;r.forEach(e=>{if(!yC(e,t,n)){i.push(e);return}a++;let r=String(e.session_id||``).trim(),c=Math.max(1,Number(e.session_count||1));if(!this.auditGroupSessions||!r||c<=1)return;o++;let l=this.auditThreadChildren&&this.auditThreadChildren[r],u=l&&Array.isArray(l.entries)?l.entries.filter(e=>!yC(e,t,n)):[];if(u.length===0){s=!0;return}let d={...u[0],session_id:r,session_count:c-1};i.push(d),this.auditThreadChildren={...this.auditThreadChildren,[r]:{...l,entries:u.slice(1),total:Math.max(0,Number(l.total||c)-1)}}}),a>0&&(this.auditLog.entries=i,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-a+o)),this.removeLiveAuditThreadChild(t,n),s&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},mergeLiveUsageEntry(e,t){if(!e||typeof e!=`object`)return;e={...e,_live_state:t||e._live_state||`usage.completed`};let n=String(e.id||``).trim();if(!n)return;let r=this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[],i=r.findIndex(e=>String(e.id||``).trim()===n);if(i>=0){let t=r[i]||{},n=this.mergeLiveUsagePatch(t,e);if(this.applyLiveUsageToAudit(n),this.liveUsageShouldSkip(n)){r.splice(i,1),this.usageLog.entries=[...r],this.usageLog.total=Math.max(0,Number(this.usageLog.total||0)-1),this.storeSkippedLiveUsage(n);return}r.splice(i,1,n),this.usageLog.entries=[...r],this.removeSkippedLiveUsage(n);return}let a=this.mergeLiveUsagePatch(this.liveUsageSeedForEntry(e),e);if(this.applyLiveUsageToAudit(a),this.liveUsageShouldSkip(a)){this.storeSkippedLiveUsage(a);return}this.removeSkippedLiveUsage(a),this.usageLog.entries=[a,...r].slice(0,this.usageLog.limit||50),this.usageLog.total=Number(this.usageLog.total||0)+1},mergeLiveUsagePatch(e,t){e=e&&typeof e==`object`?e:{};let n=this.liveUsageStateAfter(e._live_state,t&&t._live_state),r=this.liveUsageEventFlushed(e)||this.liveUsageEventFlushed({...t,_live_state:n});return{...e,...t,_live:!0,_live_state:n||`usage.completed`,_live_pending:!r,_usage_flushed:r}},liveUsageShouldSkip(e){return!!(this.usageLogHideCached&&this.liveUsageEntryCached(e))||!this.usageLiveInsertAllowed()},liveUsageSeedForEntry(e){return this.skippedLiveUsageForEntry(e)||this.auditLiveUsageForEntry(e)},skippedLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();return t&&this.skippedLiveUsageByRequestId?this.skippedLiveUsageByRequestId[t]:null},auditLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return null;let n=this.auditLog.entries.find(e=>String(e&&e.request_id||``).trim()===t),r=n&&n.usage&&typeof n.usage==`object`&&!Array.isArray(n.usage)?n.usage:null;return r?{id:e&&e.id,request_id:t,entries:r.entries,input_tokens:r.input_tokens,uncached_input_tokens:r.uncached_input_tokens,cached_input_tokens:r.cached_input_tokens,cache_write_input_tokens:r.cache_write_input_tokens,output_tokens:r.output_tokens,total_tokens:r.total_tokens,cached_input_ratio:r.cached_input_ratio,estimated_cached_characters:r.estimated_cached_characters,_live_state:n._usage_live_state,_live_pending:n._usage_live_pending,_usage_flushed:n._usage_flushed}:null},storeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&((!this.skippedLiveUsageByRequestId||typeof this.skippedLiveUsageByRequestId!=`object`||Array.isArray(this.skippedLiveUsageByRequestId))&&(this.skippedLiveUsageByRequestId={}),this.skippedLiveUsageByRequestId[t]=e)},removeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&this.skippedLiveUsageByRequestId&&delete this.skippedLiveUsageByRequestId[t]},liveUsageEntryCached(e){let t=String(e&&e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`||!!(e&&e.cache_hit)},liveUsageEventFlushed(e){let t=String(e&&e._live_state||``).trim();return!!(e&&e._usage_flushed)||t===`usage.failed`||t===`usage.flushed`},liveUsageStateRank(e){switch(String(e||``).trim()){case`usage.completed`:return 10;case`usage.failed`:case`usage.flushed`:return 20;default:return 0}},liveUsageStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveUsageStateRank(n)>this.liveUsageStateRank(r)?n:r},applyLiveUsageToAudit(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let n=this.auditLog.entries.findIndex(e=>String(e.request_id||``).trim()===t);if(n>=0){let t=this.auditLog.entries[n];this.auditLog.entries.splice(n,1,this.auditEntryWithLiveUsage(t,e)),this.auditLog.entries=[...this.auditLog.entries]}let r=this.auditThreadChildren;if(!r||typeof r!=`object`)return;let i=r,a=!1;Object.keys(r).forEach(n=>{let r=i[n],o=r&&Array.isArray(r.entries)?r.entries:[],s=o.findIndex(e=>String(e.request_id||``).trim()===t);if(s<0)return;let c=[...o];c.splice(s,1,this.auditEntryWithLiveUsage(o[s],e)),i={...i,[n]:{...r,entries:c}},a=!0}),a&&(this.auditThreadChildren=i)},auditEntryWithLiveUsage(e,t){let n=this.liveUsageStateAfter(e._usage_live_state,t._live_state||`usage.completed`),r=this.liveUsageEventFlushed({_live_state:n,_usage_flushed:e._usage_flushed||t._usage_flushed});return{...e,usage:this.liveUsageSummary(t,e.usage),_usage_live_state:n||`usage.completed`,_usage_live_pending:!r,_usage_flushed:r}},liveUsageSummary(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=this.liveNumber(e.input_tokens,this.liveNumber(n.input_tokens,0)),i=this.liveNumber(e.output_tokens,this.liveNumber(n.output_tokens,0)),a=this.liveNumber(e.uncached_input_tokens,this.liveNumber(n.uncached_input_tokens,0)),o=this.liveNumber(e.cached_input_tokens,this.liveNumber(n.cached_input_tokens,0)),s=this.liveNumber(e.cache_write_input_tokens,this.liveNumber(n.cache_write_input_tokens,0));r>0&&a+o+s===0&&(a=r);let c=a+o+s||r,l=c+i||this.liveNumber(e.total_tokens,this.liveNumber(n.total_tokens,0)),u=this.liveNumber(e.cached_input_ratio,this.liveNumber(n.cached_input_ratio,c>0?o/c:0));return{entries:Math.max(1,this.liveNumber(e.entries,this.liveNumber(n.entries,1))),input_tokens:c,uncached_input_tokens:a,cached_input_tokens:o,cache_write_input_tokens:s,output_tokens:i,total_tokens:l,cached_input_ratio:u,estimated_cached_characters:this.liveNumber(e.estimated_cached_characters,this.liveNumber(n.estimated_cached_characters,o*4))}},liveNumber(e,t){let n=Number(e);return Number.isFinite(n)?n:t},auditEntryShouldFetchDetail(e){return!e||e._detail_loading||e._detail_loaded||this.auditEntryLiveDetailPending(e)?!1:this.auditEntryNeedsPersistedLiveDetail(e)||e.bodies_omitted?!0:!this.auditEntryHasDetailData(e)},auditEntryLiveDetailPending(e){if(!e||!e._live)return!1;let t=String(e._live_state||``).trim();return t===`audit.failed`||!e._audit_flushed&&t!==`audit.flushed`&&t!==`audit.detail`},auditEntryNeedsPersistedLiveDetail(e){return!!(e&&e._live&&!e._detail_loaded)},auditEntryHasDetailData(e){let t=e&&e.data;return!t||typeof t!=`object`?!1:t.request_headers!==void 0||t.response_headers!==void 0||t.request_body!==void 0||t.response_body!==void 0||t.request_body_too_big_to_handle!==void 0||t.response_body_too_big_to_handle!==void 0||t.user_agent!==void 0||t.api_key_hash!==void 0||t.temperature!==void 0||t.max_tokens!==void 0||t.error_message!==void 0||t.error_code!==void 0},clearAuditDetailLoading(e){if(!e)return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim(),r=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],i=r.find(e=>t&&String(e.id||``).trim()===t?!0:!!(n&&String(e.request_id||``).trim()===n)),a=i||e;a._detail_loading=!1,i&&(this.auditLog.entries=[...r])}}}var CC={"audit.started":10,"audit.updated":20,"audit.stream":20,"audit.completed":30,"audit.failed":40,"audit.flushed":40,"audit.detail":40},wC=new Set(Object.keys(CC));function TC(e){return String(e&&(e.id||e.request_id)||``).trim()}function EC(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i={...n,...r};r.data==null&&n.data!=null?i.data=n.data:kC(n.data)&&kC(r.data)&&(i.data={...n.data,...r.data});let a=String(n._live_state||``).trim(),o=String(r._live_state||``).trim();return(CC[a]||0)>(CC[o]||0)&&(i._live_state=a),n._audit_flushed&&(i._audit_flushed=!0),i._audit_flushed&&(i._live_pending=!1),n._detail_loaded&&!r._detail_loaded&&(i._detail_loaded=!0,i.bodies_omitted=!1),i.bodies_omitted&&kC(i.data)&&(i.data.request_body!==void 0||i.data.response_body!==void 0)&&(i.bodies_omitted=!1),i}function DC(e,t){let n=Number(t||0);return(Array.isArray(e)?e:[]).filter(e=>Number(e&&e.version||0)>n)}function OC(e){return wC.has(String(e&&e.eventType||``).trim())}function kC(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}var AC=200,jC=class{#e=k(j({entries:[],total:0,limit:25,offset:0}));get auditLog(){return I(this.#e)}set auditLog(e){A(this.#e,e,!0)}#t=k(j({entries:[],total:0,limit:50,offset:0}));get usageLog(){return I(this.#t)}set usageLog(e){A(this.#t,e,!0)}#n=k(j({}));get auditRecords(){return I(this.#n)}set auditRecords(e){A(this.#n,e,!0)}#r=k(j([]));get auditRecordChanges(){return I(this.#r)}set auditRecordChanges(e){A(this.#r,e,!0)}auditRecordVersion=0;auditRecordPins=new Set;#i=k(``);get auditSearch(){return I(this.#i)}set auditSearch(e){A(this.#i,e,!0)}#a=k(``);get auditMethod(){return I(this.#a)}set auditMethod(e){A(this.#a,e,!0)}#o=k(``);get auditStatusCode(){return I(this.#o)}set auditStatusCode(e){A(this.#o,e,!0)}#s=k(``);get auditStream(){return I(this.#s)}set auditStream(e){A(this.#s,e,!0)}#c=k(Ta(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return I(this.#c)}set auditGroupSessions(e){A(this.#c,e,!0)}#l=k(j({}));get auditThreadChildren(){return I(this.#l)}set auditThreadChildren(e){A(this.#l,e,!0)}#u=k(``);get usageLogSearch(){return I(this.#u)}set usageLogSearch(e){A(this.#u,e,!0)}#d=k(``);get usageFilterModel(){return I(this.#d)}set usageFilterModel(e){A(this.#d,e,!0)}#f=k(``);get usageFilterProvider(){return I(this.#f)}set usageFilterProvider(e){A(this.#f,e,!0)}#p=k(``);get usageFilterLabel(){return I(this.#p)}set usageFilterLabel(e){A(this.#p,e,!0)}#m=k(``);get usageFilterUserPath(){return I(this.#m)}set usageFilterUserPath(e){A(this.#m,e,!0)}#h=k(!1);get usageLogHideCached(){return I(this.#h)}set usageLogHideCached(e){A(this.#h,e,!0)}#g=k(!1);get liveLogsStreaming(){return I(this.#g)}set liveLogsStreaming(e){A(this.#g,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;noteLiveTokenUsage=null;upsertAuditRecord(e,t=``){let n=TC(e);if(!n)return e;let r=EC(this.auditRecords[n],e);return this.auditRecords={...this.auditRecords,[n]:r},this.pruneAuditRecords(),this.auditRecordVersion++,this.auditRecordChanges=[...this.auditRecordChanges,{version:this.auditRecordVersion,key:n,eventType:t}].slice(-512),r}upsertAuditRecords(e,t=``){return(Array.isArray(e)?e:[]).map(e=>this.upsertAuditRecord(e,t))}auditRecord(e){let t=typeof e==`string`?String(e).trim():TC(e);return t&&this.auditRecords[t]||null}cacheAuditRecord(e,t){return this.upsertAuditRecord(e,t)}pinAuditRecords(e){this.auditRecordPins=new Set((Array.isArray(e)?e:[]).map(String))}pruneAuditRecords(){let e=Object.keys(this.auditRecords);if(e.length<=AC)return;let t={...this.auditRecords},n=e.length-AC;for(let r of e){if(n<=0)break;this.auditRecordPins.has(r)||(delete t[r],n--)}this.auditRecords=t}get page(){return Jo.page}get customStartDate(){return Mc.customStartDate}get customEndDate(){return Mc.customEndDate}get followsToday(){return Mc.followsToday}liveLogsEnabled(){return Ss.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await Ss.ensureLoaded(),this.liveLogsEnabled()&&(this.stopLiveLogs(),this.liveLogsController=typeof AbortController==`function`?new AbortController:null,this.readLiveLogsStream(this.liveLogsController)))}stopLiveLogs(){this.liveLogsStreaming=!1,this.liveLogsReconnectTimer&&=(clearTimeout(this.liveLogsReconnectTimer),null),this.liveLogsController&&typeof this.liveLogsController.abort==`function`&&this.liveLogsController.abort(),this.liveLogsController=null}ensureLiveLogs(){this.liveLogsController||this.liveLogsReconnectTimer||this.startLiveLogs()}async readLiveLogsStream(e){let t={};e&&(t.signal=e.signal);let n=xC(this.liveLogsLastSeq),r=K.generation;try{let i=await hs(n,t);if(i.status===401){if(K.handleUnauthorized(r),r{this.liveLogsReconnectTimer=null,this.startLiveLogs()},t)}async fetchAuditEntryDetail(e){if(!this.auditEntryShouldFetchDetail(e))return;let t=String(e.id||``).trim();if(!t)return;e._detail_loading=!0;let n=e;try{let e=await _s(`/admin/audit/detail?log_id=`+encodeURIComponent(t),{label:`audit detail`});if(e.stale||!e.ok)return;n=this.mergeLiveAuditEntry(e.data,`audit.detail`)||n}catch(e){console.error(`Failed to fetch audit detail:`,e)}finally{this.clearAuditDetailLoading(n)}}};Object.assign(jC.prototype,SC());var MC=new jC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!MC.liveLogsController,MC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&MC.ensureLiveLogs()})}var NC=null;Mn(()=>{An(()=>{let e=K.refreshTick;if(NC===null){NC=e;return}e!==NC&&(NC=e,Er(()=>{MC.stopLiveLogs(),MC.startLiveLogs()}))})});function PC(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,uncached_input_tokens:0,cached_input_tokens:0,cache_write_input_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null,rewrite_tokens_saved:0,rewrite_cost_saved:null}}function FC(){return{entries:[],total:0,limit:50,offset:0}}function IC(e,t){let n=[[`model`,e&&e.model],[`provider`,e&&e.provider],[`label`,e&&e.label],[`user_path`,e&&e.user_path]],r=``;for(let[e,i]of n)!i||e===t||(r+=`&`+e+`=`+encodeURIComponent(i));return r}function LC({limit:e,offset:t,hideCached:n,search:r}){let i=`&limit=`+e+`&offset=`+t;return i+=`&cache_mode=`+(n?`uncached`:`all`),r&&(i+=`&search=`+encodeURIComponent(r)),i}function RC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function zC(e,t){let n=Number(t&&t.total_requests||0)-Number(e&&e.total_requests||0);return Number.isFinite(n)&&n>0?n:0}function BC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function VC(e,t,n){let r=zC(e,t);return r<=0?``:n?oc(r)+` cached requests hidden`:oc(Number(e&&e.total_requests||0))+` to providers + `+oc(r)+` from cache`}function HC(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:sc(t.total_input_cost)+` input + `+sc(t.total_output_cost)+` output`}function UC(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function WC(e){return UC(e)>0}function GC(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function KC(){return`Estimated at 4 net characters removed per token`}function qC(e,t){return t===`costs`?sc(GC(e)):uc(UC(e))}function JC(e,t){let n=t===`costs`,r=n?Number(GC(e)):UC(e);if(!Number.isFinite(r)||r<=0)return null;let i=e&&(n?e.total_cost:e.total_input_tokens);if(i==null)return null;let a=Number(i);return!Number.isFinite(a)||a<0?null:r/(a+r)*100}function YC(e,t){let n=JC(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function XC(e,t){let n=UC(e);if(n<=0)return``;let r=[oc(n)+` estimated prompt token-transmissions removed across provider requests`,KC(),`Savings are summed per provider request; resent conversation history is counted again`],i=GC(e);i!=null&&(r.push(sc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=YC(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` -`)}function ZC(e){return String(e&&e.cost_source||``).trim()}function QC(e){let t=ZC(e);return t===`openrouter_credits`||t===`xai_cost_in_usd_ticks`}function $C(e){switch(ZC(e)){case`openrouter_credits`:return`Costs from OpenRouter USD-based credits.`;case`xai_cost_in_usd_ticks`:return`Costs from xAI usage.cost_in_usd_ticks.`;default:return``}}function ew(e){return String(e&&e.cache_type||``).trim().toLowerCase()}function tw(e){let t=ew(e);return t===`exact`||t===`semantic`}function nw(e){let t=ew(e);return t===`exact`?`Exact`:t===`semantic`?`Semantic`:`-`}function rw(e,t){let n=t?String(t):``;return tw(e)?n?`Saved by cache — not charged -`+n:`Saved by cache — not charged`:n}function iw(e){let t=Number(e&&e.cached_input_ratio);return!Number.isFinite(t)||t<=0?0:Math.min(1,t)}function aw(e){return Number(e&&e.cached_input_tokens||0)>0}function ow(e){return aw(e)?(iw(e)*100).toFixed(1)+`%`:``}function sw(e){if(!aw(e))return``;let t=Number(e.cached_input_tokens||0),n=Number(e.uncached_input_tokens||0),r=Number(e.cache_write_input_tokens||0),i=t+n+r,a=[oc(t)+` cached / `+oc(i)+` input tokens`];return r>0&&a.push(oc(r)+` cache write`),a.join(` -`)}function cw(e){let t=[];if($C(e)&&(t.push($C(e)),t.push(``)),t.push(`Input: `+sc(e.input_cost)),t.push(`Output: `+sc(e.output_cost)),e.raw_data){t.push(``);for(let[n,r]of Object.entries(e.raw_data)){let e=n.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase()),i=r&&typeof r==`object`?JSON.stringify(r):oc(r);t.push(e+`: `+i)}}return t.join(` -`)}function lw(e){return Array.isArray(e&&e.labels)?e.labels:[]}function uw(e,t,n){return(e||[]).length>0||t?!0:(n||[]).some(e=>lw(e).length>0)}function dw(e){return e&&typeof e.total_tokens==`number`?e.total_tokens:(e&&e.input_tokens||0)+(e&&e.output_tokens||0)}function fw(e,t){return t?e.total_cost||0:dw(e)}function pw(e,t){return[...e||[]].sort((e,n)=>t?(n.total_cost||0)-(e.total_cost||0):fw(n,t)-fw(e,t))}function mw(e){let t=Array.isArray(e)?e:[];if(t.length===0)return!1;if(t.length!==1)return!0;let n=String(t[0]&&t[0].user_path||``).trim();return n!==``&&n!==`/`}function hw(e){return(e||`chart`)===`chart`||e===`stacked`}function gw(e,t,n){let r=pw(e,n),i=e=>Number(e)||0,a=e=>n?Math.min(i(e.cached_input_cost),i(e.input_cost)):i(e.cached_input_tokens),o=e=>n?i(e.input_cost)-a(e):i(e.uncached_input_tokens)+i(e.cached_input_tokens)+i(e.cache_write_input_tokens)>0?i(e.uncached_input_tokens)+i(e.cache_write_input_tokens):i(e.input_tokens),s=e=>i(n?e.output_cost:e.output_tokens),c=e=>n?0:i(e.local_cached_input_tokens),l=e=>n?0:i(e.local_cached_output_tokens),u=r.slice(0,10),d=r.slice(10),f=u.map(t),p=u.map(o),m=u.map(s),h=u.map(a),g=u.map(c),_=u.map(l);if(d.length>0){f.push(`Other`);let e=e=>d.reduce((t,n)=>t+e(n),0);p.push(e(o)),m.push(e(s)),h.push(e(a)),g.push(e(c)),_.push(e(l))}return{labels:f,inputs:p,outputs:m,prompts:h,localIns:g,localOuts:_}}function _w(e){return Math.max(200,e*32+72)}var J=new class{#e=k(`tokens`);get usageMode(){return I(this.#e)}set usageMode(e){A(this.#e,e,!0)}get usageFilterModel(){return MC.usageFilterModel}set usageFilterModel(e){MC.usageFilterModel=e}get usageFilterProvider(){return MC.usageFilterProvider}set usageFilterProvider(e){MC.usageFilterProvider=e}get usageFilterLabel(){return MC.usageFilterLabel}set usageFilterLabel(e){MC.usageFilterLabel=e}get usageFilterUserPath(){return MC.usageFilterUserPath}set usageFilterUserPath(e){MC.usageFilterUserPath=e}#t=k(j({models:[],providers:[],labels:[]}));get usageFacetOptions(){return I(this.#t)}set usageFacetOptions(e){A(this.#t,e,!0)}#n=k(j(PC()));get usageSummary(){return I(this.#n)}set usageSummary(e){A(this.#n,e,!0)}#r=k(j(PC()));get usageSummaryAll(){return I(this.#r)}set usageSummaryAll(e){A(this.#r,e,!0)}#i=k(j([]));get modelUsage(){return I(this.#i)}set modelUsage(e){A(this.#i,e,!0)}#a=k(j([]));get userPathUsage(){return I(this.#a)}set userPathUsage(e){A(this.#a,e,!0)}#o=k(j([]));get labelUsage(){return I(this.#o)}set labelUsage(e){A(this.#o,e,!0)}get usageLog(){return MC.usageLog}set usageLog(e){MC.usageLog=e}get usageLogSearch(){return MC.usageLogSearch}set usageLogSearch(e){MC.usageLogSearch=e}get usageLogHideCached(){return MC.usageLogHideCached}set usageLogHideCached(e){MC.usageLogHideCached=e}#s=k(`chart`);get modelUsageView(){return I(this.#s)}set modelUsageView(e){A(this.#s,e,!0)}#c=k(`chart`);get userPathUsageView(){return I(this.#c)}set userPathUsageView(e){A(this.#c,e,!0)}#l=k(`chart`);get labelUsageView(){return I(this.#l)}set labelUsageView(e){A(this.#l,e,!0)}#u=k(!1);get summaryLoading(){return I(this.#u)}set summaryLoading(e){A(this.#u,e,!0)}#d=k(!1);get modelUsageLoading(){return I(this.#d)}set modelUsageLoading(e){A(this.#d,e,!0)}#f=k(!1);get userPathUsageLoading(){return I(this.#f)}set userPathUsageLoading(e){A(this.#f,e,!0)}#p=k(!1);get labelUsageLoading(){return I(this.#p)}set labelUsageLoading(e){A(this.#p,e,!0)}#m=k(!1);get usageLogLoading(){return I(this.#m)}set usageLogLoading(e){A(this.#m,e,!0)}#h={};#g(e){this.#h[e]&&this.#h[e].abort();let t=new AbortController;return this.#h[e]=t,t}#_(e,t){this.#h[e]===t&&(this.#h[e]=null)}filterQueryStr(e){return IC({model:this.usageFilterModel,provider:this.usageFilterProvider,label:this.usageFilterLabel,user_path:this.usageFilterUserPath},e)}onUsageFilterChanged(){this.fetchUsagePage()}toggleUsageLabelFilter(e){this.usageFilterLabel=this.usageFilterLabel===e?``:e,this.onUsageFilterChanged()}usageLabelChipTitle(e){return this.usageFilterLabel===e?`Clear label filter`:`Filter usage by "`+e+`"`}toggleUsageMode(e){this.usageMode=e,Jo.navigate(`usage`,e===`costs`?`costs`:null)}toggleUsageChartView(e,t){e===`model`&&(this.modelUsageView=t),e===`userPath`&&(this.userPathUsageView=t),e===`label`&&(this.labelUsageView=t)}usageFilterModelOptions(){return RC(this.usageFacetOptions.models,this.usageFilterModel)}usageFilterProviderOptions(){return RC(this.usageFacetOptions.providers,this.usageFilterProvider)}usageFilterLabelOptions(){return RC(this.usageFacetOptions.labels,this.usageFilterLabel)}async fetchUsagePage(){await Ss.ensureLoaded();let e=[this.fetchUsagePageSummary(),this.fetchUsageFacetOptions(),this.fetchModelUsage(),this.fetchUserPathUsage(),this.fetchLabelUsage(),this.fetchUsageLog(!0)];Rc.cacheAnalyticsEnabled()&&e.push(Rc.fetchCacheOverview(this.filterQueryStr())),await Promise.all(e)}async fetchUsagePageSummary(){let e=this.#g(`summary`);this.summaryLoading=!0;try{let t=Mc.queryStr()+this.filterQueryStr(),[n,r]=await Promise.all([_s(`/admin/usage/summary?`+t+`&cache_mode=uncached`,{label:`usage page summary`,signal:e.signal}),_s(`/admin/usage/summary?`+t+`&cache_mode=all`,{label:`usage page summary (all)`,signal:e.signal})]);if(n.stale||r.stale||e.signal.aborted)return;if(!n.ok||!r.ok){this.usageSummary=PC(),this.usageSummaryAll=PC();return}this.usageSummary=n.data&&typeof n.data==`object`?n.data:PC(),this.usageSummaryAll=r.data&&typeof r.data==`object`?r.data:PC()}catch(e){if(ys(e))return;console.error(`Failed to fetch usage page summary:`,e),this.usageSummary=PC(),this.usageSummaryAll=PC()}finally{this.#_(`summary`,e),this.#h.summary===null&&(this.summaryLoading=!1)}}async fetchUsageFacetOptions(){let e=this.#g(`facets`);try{let t=async(t,n)=>{let r=await _s(t+`?`+Mc.queryStr()+this.filterQueryStr(n),{label:`usage facet options`,signal:e.signal});return r.stale?null:r.ok&&Array.isArray(r.data)?r.data:[]},n=t(`/admin/usage/models`,`model`),r=!this.usageFilterModel&&!this.usageFilterProvider,[i,a,o]=await Promise.all([n,r?n:t(`/admin/usage/models`,`provider`),t(`/admin/usage/labels`,`label`)]);if(e.signal.aborted||i===null||a===null||o===null)return;this.usageFacetOptions={models:i.map(e=>e&&e.model).filter(Boolean),providers:a.map(e=>gc(e)).filter(Boolean),labels:o.map(e=>e&&e.label).filter(Boolean)}}catch(e){if(ys(e))return;console.error(`Failed to fetch usage facet options:`,e),this.usageFacetOptions={models:[],providers:[],labels:[]}}finally{this.#_(`facets`,e)}}async#v(e,t,n,r,i){let a=this.#g(e);i(!0);try{let e=await _s(t+`?`+Mc.queryStr()+this.filterQueryStr(),{label:n,signal:a.signal});if(e.stale||a.signal.aborted)return;if(!e.ok){r([]);return}r(Array.isArray(e.data)?e.data:[])}catch(e){if(ys(e))return;console.error(`Failed to fetch `+n+`:`,e),r([])}finally{this.#_(e,a),this.#h[e]===null&&i(!1)}}fetchModelUsage(){return this.#v(`modelUsage`,`/admin/usage/models`,`usage models`,e=>this.modelUsage=e,e=>this.modelUsageLoading=e)}fetchUserPathUsage(){return this.#v(`userPathUsage`,`/admin/usage/user-paths`,`usage user paths`,e=>this.userPathUsage=e,e=>this.userPathUsageLoading=e)}fetchLabelUsage(){return this.#v(`labelUsage`,`/admin/usage/labels`,`usage labels`,e=>this.labelUsage=e,e=>this.labelUsageLoading=e)}async fetchUsageLog(e){let t=this.#g(`usageLog`);this.usageLogLoading=!0;try{e&&(this.usageLog.offset=0);let n=Mc.queryStr()+this.filterQueryStr();n+=LC({limit:this.usageLog.limit,offset:this.usageLog.offset,hideCached:this.usageLogHideCached,search:this.usageLogSearch});let r=await _s(`/admin/usage/log?`+n,{label:`usage log`,signal:t.signal});if(r.stale||t.signal.aborted)return;if(!r.ok){this.usageLog=FC();return}let i=r.data&&typeof r.data==`object`?r.data:FC();i.entries||=[],this.usageLog=i}catch(e){if(ys(e))return;console.error(`Failed to fetch usage log:`,e),this.usageLog=FC()}finally{this.#_(`usageLog`,t),this.#h.usageLog===null&&(this.usageLogLoading=!1)}}usageLogNextPage(){this.usageLog.offset+this.usageLog.limit0&&(this.usageLog.offset=Math.max(0,this.usageLog.offset-this.usageLog.limit),this.fetchUsageLog(!1))}};MC.fetchUsage=()=>{Jo.page===`usage`&&J.fetchUsagePage()};var vw=R(`
`);function yw(e,t){E(t,!0);let n=ya(t,`value`,15,``),r=ya(t,`placeholder`,3,``),i=ya(t,`label`,3,``),a=ya(t,`id`,3,void 0),o=ya(t,`oninput`,3,void 0),s=ya(t,`class`,3,``);var c=vw(),l=M(c);G(l,{get icon(){return vo},class:`filter-input-icon`});var u=P(l,2);na(u),T(c),F(()=>{U(c,1,Fi([`filter-input-wrap`,s()]),`svelte-30xz1k`),W(u,`id`,a()),W(u,`placeholder`,r()),W(u,`aria-label`,i())}),L(`input`,u,function(...e){o()?.apply(this,e)}),da(u,n),z(e,c),D()}Hr([`input`]);function bw(e,t=300){let n=null,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>{n=null,e(...r)},t)};return r.cancel=()=>{clearTimeout(n),n=null},r}var xw=R(``),Sw=R(``),Cw=R(`
`);function ww(e,t){E(t,!0);let n=bw(()=>J.onUsageFilterChanged());An(()=>n.cancel);var r=Cw(),i=M(r),a=M(i);a.value=a.__value=``,H(P(a),16,()=>J.usageFilterModelOptions(),e=>e,(e,t)=>{var n=xw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(i);var o=P(i,2),s=M(o);s.value=s.__value=``,H(P(s),16,()=>J.usageFilterProviderOptions(),e=>e,(e,t)=>{var n=xw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(o);var c=P(o,2),l=e=>{var t=Sw(),n=M(t);n.value=n.__value=``,H(P(n),16,()=>J.usageFilterLabelOptions(),e=>e,(e,t)=>{var n=xw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(t),L(`change`,t,()=>J.onUsageFilterChanged()),Gi(t,()=>J.usageFilterLabel,e=>J.usageFilterLabel=e),z(e,t)},u=O(()=>J.usageFilterLabelOptions().length>0);V(c,e=>{I(u)&&e(l)}),yw(P(c,2),{class:`usage-page-filters-user-path`,placeholder:`User path /team/alpha`,label:`Filter by user path`,get oninput(){return n},get value(){return J.usageFilterUserPath},set value(e){J.usageFilterUserPath=e}}),T(r),L(`change`,i,()=>J.onUsageFilterChanged()),Gi(i,()=>J.usageFilterModel,e=>J.usageFilterModel=e),L(`change`,o,()=>J.onUsageFilterChanged()),Gi(o,()=>J.usageFilterProvider,e=>J.usageFilterProvider=e),z(e,r),D()}Hr([`change`]);var Tw=R(`
Cache Saved
Cache Hits
`,1);function Ew(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=Tw(),n=N(t),r=P(M(n),2),i=M(r,!0);T(r),T(n);var a=P(n,2),o=P(M(a),2),s=M(o,!0);T(o),T(a),F((e,t)=>{B(i,e),B(s,t)},[()=>sc(Rc.cacheOverview.summary.total_saved_cost),()=>oc(Rc.cacheOverview.summary.total_hits)]),z(e,t)},a=O(()=>Rc.cacheAnalyticsEnabled());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}var Dw=R(` `),Ow=R(`
Pro Saved
`),kw=R(`
Total Requests
Estimated Cost
`);function Aw(e,t){E(t,!0);let n=O(()=>WC(J.usageSummary)),r=O(()=>qC(J.usageSummary,J.usageMode)),i=O(()=>YC(J.usageSummary,J.usageMode));var a=kw(),o=M(a),s=P(M(o),2),c=M(s),l=e=>{SS(e,{size:18,label:`Loading usage summary`})},u=e=>{var t=Zr();F(e=>B(t,e),[()=>oc(BC(J.usageSummary,J.usageSummaryAll,J.usageLogHideCached))]),z(e,t)};V(c,e=>{J.summaryLoading?e(l):e(u,-1)}),T(s),T(o);var d=P(o,2),f=P(M(d),2),p=M(f),m=e=>{SS(e,{size:18,label:`Loading usage summary`})},h=e=>{var t=Zr();F(e=>B(t,e),[()=>sc(J.usageSummary.total_cost)]),z(e,t)};V(p,e=>{J.summaryLoading?e(m):e(h,-1)}),T(f),T(d);var g=P(d,2),_=e=>{var t=Ow(),n=P(M(t),2),a=M(n),o=M(a,!0);T(a);var s=P(a,2),c=e=>{var t=Dw(),n=M(t,!0);T(t),F(()=>B(n,I(i))),z(e,t)};V(s,e=>{I(i)&&e(c)}),T(n),T(t),F(e=>{W(n,`title`,e),B(o,I(r))},[()=>XC(J.usageSummary,J.usageMode)]),z(e,t)};V(g,e=>{I(n)&&e(_)}),Ew(P(g,2),{}),T(a),F((e,t)=>{W(s,`title`,e),W(f,`title`,t)},[()=>VC(J.usageSummary,J.usageSummaryAll,J.usageLogHideCached),()=>HC(J.usageSummary)]),z(e,a),D()}function jw(e,t,n,r){let{stacked:i=!1,costs:a=!1,resolve:o=e=>e}=r||{},s=e=>a?`$`+Math.abs(e).toFixed(2):uc(Math.abs(e)),c=e=>a?`$`+Math.abs(e).toFixed(4):Math.abs(e).toLocaleString(),l=e=>e.map(e=>i?Math.abs(e):-Math.abs(e)),u=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:`transparent`,borderWidth:0,borderRadius:4,maxBarThickness:22}),d=e=>(e||[]).some(e=>Math.abs(e)>0),f=[u(a?`Input Cost`:`Input Tokens`,l(n.inputs),o(`var(--token-input)`)),u(a?`Output Cost`:`Output Tokens`,n.outputs,o(`var(--token-output)`))];return d(n.prompts)&&f.push(u(a?`Prompt Cached Cost`:`Prompt Cached`,l(n.prompts),o(`var(--token-prompt)`))),!a&&d(n.localIns)&&f.push(u(`Locally Cached (Input)`,l(n.localIns),o(`var(--token-local)`))),!a&&d(n.localOuts)&&f.push(u(`Locally Cached (Output)`,n.localOuts,o(`var(--token-local)`))),{type:`bar`,data:{labels:t,datasets:f},options:{indexAxis:`y`,responsive:!0,maintainAspectRatio:!1,animation:{duration:0},layout:{padding:{top:8}},scales:{x:{stacked:!0,beginAtZero:!0,grid:i?{color:e.grid}:{color:t=>t.tick&&t.tick.value===0?e.text:e.grid},border:{display:!1},ticks:{color:e.text,font:Ly(),callback:e=>s(e)}},y:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Ly(),autoSkip:!1}}},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Ry(e,{label:e=>e.dataset.label+`: `+c(e.parsed.x),footer:e=>{let t=0;return e.forEach(e=>{t+=Math.abs(Number(e.parsed.x))||0}),`Total: `+c(t)}})}}}}var Mw=R(`
`),Nw=R(`

`),Pw=R(`

`,1),Fw=R(`
`),Iw=R(`Model Provider`,1),Lw=R(`User Path`),Rw=R(`Label Requests`,1),zw=R(` `,1),Bw=R(` `),Vw=R(` `,1),Hw=R(` `),Uw=R(`
Input TokensOutput TokensPrompt CachedLocal CachedTotal TokensInput CostOutput CostTotal Cost
`),Ww=R(`
`),Gw=R(`
`);function Kw(e,t){E(t,!0);let n=e=>{var n=Mw(),r=M(n);let a;var o=P(r,2);let s;var l=P(o,2);let u;T(n),F(()=>{W(n,`aria-label`,I(i).group),a=U(r,1,`chart-view-btn svelte-1kee4g8`,null,a,{active:I(c)===`chart`}),W(r,`aria-pressed`,I(c)===`chart`),W(r,`aria-label`,`Show ${I(i).noun??``} chart`),s=U(o,1,`chart-view-btn svelte-1kee4g8`,null,s,{active:I(c)===`stacked`}),W(o,`aria-pressed`,I(c)===`stacked`),W(o,`aria-label`,`Show ${I(i).noun??``} stacked chart`),u=U(l,1,`chart-view-btn svelte-1kee4g8`,null,u,{active:I(c)===`table`}),W(l,`aria-pressed`,I(c)===`table`),W(l,`aria-label`,`Show ${I(i).noun??``} table`)}),L(`click`,r,()=>J.toggleUsageChartView(t.kind,`chart`)),L(`click`,o,()=>J.toggleUsageChartView(t.kind,`stacked`)),L(`click`,l,()=>J.toggleUsageChartView(t.kind,`table`)),z(e,n)},r={model:{group:`Model usage view`,noun:`model usage`,tokensTitle:`Token Usage by Model`,costsTitle:`Cost by Model`},userPath:{group:`User path usage view`,noun:`user path usage`,tokensTitle:`Usage by User Path`,costsTitle:`Cost by User Path`},label:{group:`Label usage view`,noun:`label usage`,tokensTitle:`Usage by Label`,costsTitle:`Cost by Label`}},i=O(()=>r[t.kind]),a=O(()=>t.kind===`model`?e=>vc(e):t.kind===`userPath`?e=>e.user_path||`/`:e=>e.label);function o(e){return t.kind===`model`?(e.provider_name||e.provider||`-`)+`/`+e.model:t.kind===`userPath`?e.user_path||`/`:e.label}let s=O(()=>t.kind===`model`?J.modelUsage:t.kind===`userPath`?J.userPathUsage:J.labelUsage),c=O(()=>t.kind===`model`?J.modelUsageView:t.kind===`userPath`?J.userPathUsageView:J.labelUsageView),l=O(()=>t.kind===`model`?J.modelUsageLoading:t.kind===`userPath`?J.userPathUsageLoading:J.labelUsageLoading),u=O(()=>J.usageMode===`costs`),d=O(()=>t.kind===`userPath`?mw(I(s)):I(s).length>0),f=O(()=>I(u)?I(i).costsTitle:I(i).tokensTitle),p=O(()=>gw(I(s),I(a),I(u))),m=O(()=>pw(I(s),I(u)));function h(){return hw(I(c))?jw(Iy(),I(p).labels,I(p),{stacked:I(c)===`stacked`,costs:I(u),resolve:zy}):null}var g=Qr(),_=N(g),v=e=>{var r=Ww(),a=M(r),s=M(a),u=e=>{qS(e,{copyId:`label-usage-help-copy`,label:`label usage help`,text:`One request can have multiple labels. Such a request counts once under each of its labels, so label rows can overlap and add up to more than the period totals.`,title:e=>{var t=Nw(),n=M(t,!0);T(t),F(()=>B(n,I(f))),z(e,t)},extra:e=>{var t=Qr(),n=N(t),r=e=>{SS(e,{size:14,get label(){return`Loading ${I(i).noun??``}`}})};V(n,e=>{I(l)&&e(r)}),z(e,t)},$$slots:{title:!0,extra:!0}})},d=e=>{var t=Pw(),n=N(t),r=M(n,!0);T(n);var a=P(n,2),o=e=>{SS(e,{size:14,get label(){return`Loading ${I(i).noun??``}`}})};V(a,e=>{I(l)&&e(o)}),F(()=>B(r,I(f))),z(e,t)};V(s,e=>{t.kind===`label`?e(u):e(d,-1)});var g=P(s,2);n(g),T(a);var _=P(a,2),v=e=>{var t=Fw();let n;jy(M(t),{build:h}),T(t),F(e=>n=Hi(t,``,n,e),[()=>({height:`${_w(I(p).labels.length)??``}px`})]),z(e,t)},y=O(()=>hw(I(c))),b=e=>{var n=Uw(),r=M(n),i=M(r),a=M(i),s=M(a),c=e=>{var t=Iw();Ue(2),z(e,t)},l=e=>{z(e,Lw())},u=e=>{var t=Rw();Ue(2),z(e,t)};V(s,e=>{t.kind===`model`?e(c):t.kind===`userPath`?e(l,1):e(u,-1)}),Ue(8),T(a),T(i);var d=P(i);H(d,21,()=>I(m),e=>o(e),(e,n)=>{var r=Hw(),i=M(r),a=e=>{var t=zw(),r=N(t),i=M(r,!0);T(r);var a=P(r,2),o=M(a),s=M(o,!0);T(o),T(a),F(e=>{B(i,I(n).model||`-`),B(s,e)},[()=>gc(I(n))||`-`]),z(e,t)},o=e=>{var t=Bw(),r=M(t,!0);T(t),F(()=>B(r,I(n).user_path||`/`)),z(e,t)},s=e=>{var t=Vw(),r=N(t),i=M(r);let a;var o=M(i,!0);T(i),T(r);var s=P(r,2),c=M(s,!0);T(s),F((e,t,r)=>{a=U(i,1,`usage-label-chip`,null,a,{active:J.usageFilterLabel===I(n).label}),Hi(i,`--label-color: ${e??``}`),W(i,`title`,t),B(o,I(n).label),B(c,r)},[()=>Hy(I(n).label),()=>J.usageLabelChipTitle(I(n).label),()=>oc(I(n).requests)]),L(`click`,i,()=>J.toggleUsageLabelFilter(I(n).label)),z(e,t)};V(i,e=>{t.kind===`model`?e(a):t.kind===`userPath`?e(o,1):e(s,-1)});var c=P(i),l=M(c,!0);T(c);var u=P(c),d=M(u,!0);T(u);var f=P(u),p=M(f,!0);T(f);var m=P(f),h=M(m,!0);T(m);var g=P(m),_=M(g,!0);T(g);var v=P(g),y=M(v,!0);T(v);var b=P(v),x=M(b,!0);T(b);var S=P(b),C=M(S,!0);T(S),T(r),F((e,t,n,r,i,a,o,s,c,u,g)=>{B(l,e),B(d,t),W(f,`title`,n),B(p,r),W(m,`title`,`${i??``} input + ${a??``} output`),B(h,o),B(_,s),B(y,c),B(x,u),B(C,g)},[()=>oc(I(n).input_tokens),()=>oc(I(n).output_tokens),()=>I(n).cached_input_cost==null?``:`~`+sc(I(n).cached_input_cost)+` at current cached-input pricing`,()=>oc(I(n).cached_input_tokens||0),()=>oc(I(n).local_cached_input_tokens||0),()=>oc(I(n).local_cached_output_tokens||0),()=>oc((I(n).local_cached_input_tokens||0)+(I(n).local_cached_output_tokens||0)),()=>oc(dw(I(n))),()=>sc(I(n).input_cost),()=>sc(I(n).output_cost),()=>sc(I(n).total_cost)]),z(e,r)}),T(d),T(r),T(n),z(e,n)};V(_,e=>{I(y)?e(v):e(b,-1)}),T(r),z(e,r)},y=e=>{var t=Gw();SS(M(t),{size:20,get label(){return`Loading ${I(i).noun??``}`}}),T(t),z(e,t)};V(_,e=>{I(d)?e(v):I(l)&&e(y,1)}),z(e,g),D()}Hr([`click`]);var qw=R(``);function Jw(e,t){E(t,!0);let n=ya(t,`total`,3,0),r=ya(t,`offset`,3,0),i=ya(t,`limit`,3,25);var a=Qr(),o=N(a),s=e=>{var a=qw(),o=M(a),s=M(o);T(o);var c=P(o,2),l=M(c),u=P(l,2);T(c),T(a),F(e=>{B(s,`Showing ${r()+1}-${e??``} of ${n()??``}`),l.disabled=r()===0,u.disabled=r()+i()>=n()},[()=>Math.min(r()+i(),n())]),L(`click`,l,()=>t.onprev?.()),L(`click`,u,()=>t.onnext?.()),z(e,a)};V(o,e=>{n()>0&&e(s)}),z(e,a),D()}Hr([`click`]);var Yw=(e,t=f)=>{var n=Qr(),r=N(n),i=e=>{var n=Zw();H(n,20,()=>lw(t()),e=>e,(e,t)=>{var n=Xw();let r;var i=M(n,!0);T(n),F((e,a)=>{r=U(n,1,`usage-label-chip`,null,r,{active:J.usageFilterLabel===t}),Hi(n,`--label-color: ${e??``}`),W(n,`title`,a),B(i,t)},[()=>Hy(t),()=>J.usageLabelChipTitle(t)]),L(`click`,n,()=>J.toggleUsageLabelFilter(t)),z(e,n)}),T(n),z(e,n)},a=O(()=>lw(t()).length>0),o=e=>{z(e,Qw())};V(r,e=>{I(a)?e(i):e(o,-1)}),z(e,n)},Xw=R(``),Zw=R(`
`),Qw=R(`-`),$w=R(`Labels`),eT=R(`Cost`),tT=R(``),nT=R(` `),rT=R(``),iT=R(` `),aT=R(` `),oT=R(`
TimestampProviderModelUser PathCacheProvider Cache
`),sT=R(`
`),cT=R(`
`),lT=R(`

Request Log

`);function uT(e,t){E(t,!0);let n=O(()=>J.usageMode===`costs`),r=O(()=>uw(J.labelUsage,J.usageFilterLabel,J.usageLog.entries)),i=bw(()=>J.fetchUsageLog(!0));An(()=>i.cancel);var a=lT(),o=P(M(a),2),s=M(o);yw(M(s),{placeholder:`Search by request ID, model, provider...`,label:`Search by request ID, model, provider`,get oninput(){return i},get value(){return J.usageLogSearch},set value(e){J.usageLogSearch=e}}),T(s);var c=P(s,2),l=M(c),u=M(l);na(u),Ue(2),T(l),T(c),T(o);var d=P(o,2),f=e=>{var t=oT(),i=M(t),a=M(i),o=M(a),s=P(M(o),4),c=e=>{z(e,$w())};V(s,e=>{I(r)&&e(c)});var l=P(s,3),u=M(l,!0);T(l);var d=P(l),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=e=>{z(e,eT())};V(h,e=>{I(n)||e(g)}),T(o),T(a);var _=P(a);H(_,21,()=>J.usageLog.entries,e=>e.id,(e,t)=>{var i=aT();let a;var o=M(i),s=M(o,!0);T(o);var c=P(o),l=M(c),u=M(l,!0);T(l),T(c);var d=P(c),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=e=>{var n=tT();Yw(M(n),()=>I(t)),T(n),z(e,n)};V(h,e=>{I(r)&&e(g)});var _=P(h),v=M(_,!0);T(_);var y=P(_),b=M(y),x=e=>{var n=nT(),r=M(n,!0);T(n),F(e=>B(r,e),[()=>ow(I(t))]),z(e,n)},S=O(()=>aw(I(t))),C=e=>{z(e,Qw())};V(b,e=>{I(S)?e(x):e(C,-1)}),T(y);var w=P(y),ee=M(w,!0);T(w);var te=P(w),ne=M(te,!0);T(te);var re=P(te),ie=M(re),ae=M(ie,!0);T(ie);var oe=P(ie,2),se=e=>{{let n=O(()=>$C(I(t)));G(e,{get icon(){return qa},class:`cost-source-icon`,get title(){return I(n)}})}},ce=O(()=>I(n)&&QC(I(t)));V(oe,e=>{I(ce)&&e(se)});var le=P(oe,2),ue=e=>{G(e,{get icon(){return Xa},class:`cache-savings-icon`})},de=O(()=>I(n)&&tw(I(t)));V(le,e=>{I(de)&&e(ue)});var fe=P(le,2),pe=e=>{var n=rT();F(()=>W(n,`title`,I(t).costs_calculation_caveat)),z(e,n)};V(fe,e=>{I(n)&&I(t).costs_calculation_caveat&&e(pe)}),T(re);var me=P(re),he=e=>{var n=iT(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{{let n=O(()=>$C(I(t)));G(e,{get icon(){return qa},class:`cost-source-icon`,get title(){return I(n)}})}},s=O(()=>QC(I(t)));V(a,e=>{I(s)&&e(o)});var c=P(a,2),l=e=>{G(e,{get icon(){return Xa},class:`cache-savings-icon`})},u=O(()=>tw(I(t)));V(c,e=>{I(u)&&e(l)});var d=P(c,2),f=e=>{var n=rT();F(()=>W(n,`title`,I(t).costs_calculation_caveat)),z(e,n)};V(d,e=>{I(t).costs_calculation_caveat&&e(f)}),T(n),F((e,t)=>{W(n,`title`,e),B(i,t)},[()=>rw(I(t),cw(I(t))),()=>sc(I(t).total_cost)]),z(e,n)};V(me,e=>{I(n)||e(he)}),T(i),F((e,n,r,c,l,d,p,h,g,_,b,x,S)=>{a=U(i,1,`svelte-hg4ill`,null,a,e),W(o,`title`,n),B(s,r),B(u,c),B(f,I(t).model),B(m,I(t).user_path||`-`),B(v,l),W(y,`title`,d),W(w,`title`,p),B(ee,h),W(te,`title`,g),B(ne,_),W(re,`title`,b),W(ie,`title`,x),B(ae,S)},[()=>({"usage-log-row-cached":tw(I(t))}),()=>mc(I(t).timestamp),()=>ds.formatTimestamp(I(t).timestamp),()=>gc(I(t))||`-`,()=>nw(I(t)),()=>sw(I(t)),()=>I(n)?oc(I(t).input_tokens)+` tokens`:``,()=>I(n)?sc(I(t).input_cost):oc(I(t).input_tokens),()=>I(n)?oc(I(t).output_tokens)+` tokens`:``,()=>I(n)?sc(I(t).output_cost):oc(I(t).output_tokens),()=>I(n)?rw(I(t),``):``,()=>I(n)?rw(I(t),oc(I(t).total_tokens)+` tokens -`+cw(I(t))):``,()=>I(n)?sc(I(t).total_cost):oc(I(t).total_tokens)]),z(e,i)}),T(_),T(i),T(t),F(()=>{B(u,I(n)?`Input Cost`:`Input`),B(f,I(n)?`Output Cost`:`Output`),B(m,I(n)?`Total Cost`:`Total`)}),z(e,t)},p=e=>{var t=sT();SS(M(t),{size:20,label:`Loading request log`}),T(t),z(e,t)},m=e=>{var t=cT();TS(M(t),{}),T(t),z(e,t)};V(d,e=>{J.usageLog.entries.length>0?e(f):J.usageLogLoading?e(p,1):e(m,-1)}),Jw(P(d,2),{get total(){return J.usageLog.total},get offset(){return J.usageLog.offset},get limit(){return J.usageLog.limit},onprev:()=>J.usageLogPrevPage(),onnext:()=>J.usageLogNextPage()}),T(a),L(`change`,u,()=>J.fetchUsageLog(!0)),fa(u,()=>J.usageLogHideCached,e=>J.usageLogHideCached=e),z(e,a),D()}Hr([`click`,`change`]);var dT=R(`
`);function fT(e,t){E(t,!0);let n=`usage`;An(()=>{K.refreshTick,Jo.page===n&&(J.fetchUsagePage(),MC.ensureLiveLogs())}),An(()=>{Jo.page===n&&(J.usageMode=Jo.sub===`costs`?`costs`:`tokens`)});var r=dT(),i=P(M(r),2),a=M(i);Py(a,{ariaLabel:`Usage mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return J.usageMode},onchange:e=>J.toggleUsageMode(e)}),tl(P(a,2),{onchange:()=>J.fetchUsagePage()}),T(i);var o=P(i,2);ww(o,{});var s=P(o,2);Aw(s,{});var c=P(s,2),l=M(c);Kw(l,{kind:`model`});var u=P(l,2);Kw(u,{kind:`userPath`}),Kw(P(u,2),{kind:`label`}),T(c),uT(P(c,2),{}),T(r),z(e,r),D()}var pT=R(`
`);function mT(e,t){let n=ya(t,`label`,3,`Loading...`),r=ya(t,`class`,3,``);var i=pT(),a=P(M(i),2),o=M(a,!0);T(a),T(i),F(()=>{U(i,1,Fi([`loading-state`,r()]),`svelte-hzxv1d`),B(o,n())}),z(e,i)}var hT=R(``);function gT(e,t){let n=ya(t,`label`,3,``),r=ya(t,`class`,3,``),i=ya(t,`disabled`,3,!1);var a=hT();gi(M(a),()=>t.children??f),T(a),F(()=>{U(a,1,Fi([`table-action-btn`,r()])),W(a,`aria-label`,n()),W(a,`title`,n()),a.disabled=i()}),L(`click`,a,function(...e){t.onclick?.apply(this,e)}),z(e,a)}Hr([`click`]);async function _T(e,{label:t,errorFallback:n=`Unable to load ${t}.`,unavailableStatuses:r=[503],normalize:i=e=>Array.isArray(e)?e:[],options:a}){let o;try{o=await _s(e,{...a||{},label:t})}catch(e){return ys(e)||console.error(`Failed to fetch ${t}:`,e),{status:`error`,items:[],error:n,result:null}}return o.stale?{status:`stale`,items:[],error:``,result:o}:r.includes(o.status)?{status:`unavailable`,items:[],error:``,result:o}:o.ok?{status:`ok`,items:i(o.data),error:``,result:o}:{status:`error`,items:[],error:o.status===401?``:fs(o.data,n),result:o}}async function vT(e,t,n,{label:r,errorFallback:i=`Unable to ${r}.`,unavailableStatuses:a=[503],unavailableMessage:o=`This feature is unavailable on the gateway.`,options:s}){let c;try{c=await vs(e,t,n,{...s||{},label:r})}catch(e){return ys(e)||console.error(`Failed to ${r}:`,e),{status:`error`,error:i,result:null}}return c.stale?{status:`stale`,error:``,result:c}:a.includes(c.status)?{status:`unavailable`,error:o,result:c}:c.ok?{status:`ok`,error:``,result:c}:{status:`error`,error:c.status===401?`Authentication required.`:fs(c.data,i),result:c}}function yT(){return{scope:`user_path`,subject:`/`,period:`daily`,period_seconds:86400,amount:``,source:`manual`}}function bT(e){let t={user_path:{label:`User path`,chip:`user path`,fieldLabel:`User Path`,placeholder:`/team/alpha`},label:{label:`Label`,chip:`label`,fieldLabel:`Label`,placeholder:`Mobile-App-iOS`}};return t[e]||t.user_path}function xT(){return[`user_path`,`label`].map(e=>({value:e,label:bT(e).label}))}function ST(e){return String(e&&e.scope||``).trim()||`user_path`}function CT(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function wT(e){return bT(ST(e)).chip}function TT(e){return ST(e)===`label`?`budget-label`:`budget-user-path`}function ET(e){return bT(String(e&&e.scope||``)).fieldLabel}function DT(e){return bT(String(e&&e.scope||``)).placeholder}function OT(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function kT(){return[{value:`hourly`,label:`Hourly`},{value:`daily`,label:`Daily`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`},{value:`custom`,label:`Custom seconds`}]}function AT(e){switch(String(e||``).trim().toLowerCase()){case`hourly`:return 3600;case`daily`:return 86400;case`weekly`:return 604800;case`monthly`:return 2592e3;default:return 0}}function jT(e){switch(Number(e||0)){case 3600:return`hourly`;case 86400:return`daily`;case 604800:return`weekly`;case 2592e3:return`monthly`;default:return`custom`}}function MT(e){return ST(e)+`:`+CT(e)+`:`+String(e&&e.period_seconds||``)}function NT(e,t){if(!t||!Array.isArray(e))return null;let n=MT(t);return e.find(e=>MT(e)===n)||null}function PT(e){let t=String(e||``).trim();if(!t)return`User path is required.`;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function FT(e){if(PT(e))return``;let t=String(e||``).trim(),n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function IT(e){return`/`+String(e||``).trimStart().replace(/^\/+/,``)}function LT(e){return Array.isArray(e)?e:e&&Array.isArray(e.budgets)?e.budgets:[]}function RT(e){let t=Number(e&&e.period_seconds||0);return[CT(e),wT(e),tE(e),jT(t),t?String(t)+`s`:``,t?String(t)+` seconds`:``].join(` `).toLowerCase()}var zT={user_path:0,label:1};function BT(e,t){let n=Array.isArray(e)?e.slice():[],r=String(t||`subject`);return n.sort((e,t)=>{let n=(zT[ST(e)]||0)-(zT[ST(t)]||0),i=CT(e).localeCompare(CT(t)),a=Number(t&&t.period_seconds||0)-Number(e&&e.period_seconds||0);return r===`period`?a||n||i:n||i||a}),n}function VT(e,t,n){let r=Array.isArray(e)?e:[],i=String(t||``).trim().toLowerCase();return BT(i?r.filter(e=>RT(e).includes(i)):r.slice(),n)}function HT(e){let t=e||{},n=ST(t),r=String(t.subject||``).trim();if(n===`user_path`){let e=PT(r);if(e)return{payload:null,error:e}}else if(!r)return{payload:null,error:`Label is required.`};let i=Number(t.amount);if(!Number.isFinite(i)||i<=0)return{payload:null,error:`Amount must be greater than 0.`};let a=String(t.period||``).trim(),o=AT(a);return a===`custom`&&(o=Number(t.period_seconds)),!Number.isFinite(o)||o<=0?{payload:null,error:`Period seconds must be greater than 0.`}:{payload:{scope:n,subject:n===`user_path`?FT(r):r,period_seconds:Math.trunc(o),amount:i,source:String(t.source||`manual`).trim()||`manual`},error:``}}function UT(e){return{scope:ST(e),subject:CT(e),budget_key:{period_seconds:e.period_seconds},amount:e.amount}}function WT(e){return{scope:ST(e),subject:CT(e),budget_key:{period_seconds:e.period_seconds}}}function GT(e){return{scope:ST(e),subject:CT(e),period_seconds:e.period_seconds}}function KT(e){return sc(e)}function qT(e,t){let n=e||{},r=t||{};return`A budget for "`+((CT(n)||CT(r))+` `+tE({period_seconds:n.period_seconds||r.period_seconds,period_label:r.period_label}))+`" already exists. Saving will override the current `+KT(r.amount)+` limit with `+KT(n.amount)+`.`}function JT(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:t}function YT(e,t){let n=JT(e);return Math.round((t?Math.min(n,1):n)*1e3)/10}function XT(e){return JT(e&&e.usage_ratio)}function ZT(e){return YT(XT(e),!0)}function QT(e){return YT(e&&e.period_ratio,!0)}function $T(e){return YT(XT(e),!1).toFixed(1).replace(/\.0$/,``)+`%`}function eE(e){return QT(e).toFixed(1).replace(/\.0$/,``)+`%`}function tE(e){let t=Number(e&&e.period_seconds||0);switch(t){case 3600:return`Hourly`;case 86400:return`Daily`;case 604800:return`Weekly`;case 2592e3:return`Monthly`;default:{let n=String(e&&e.period_label||``).trim();return n?`Custom `+n:`Custom `+String(t||``)+`s`}}}function nE(e){switch(Number(e&&e.period_seconds||0)){case 3600:return`budget-period-label-hourly`;case 86400:return`budget-period-label-daily`;case 604800:return`budget-period-label-weekly`;case 2592e3:return`budget-period-label-monthly`;default:return`budget-period-label-custom`}}function rE(e){return nE(e).replace(`budget-period-label-`,`budget-bar-fill-period-`)}function iE(e){return nE(e).replace(`budget-period-label-`,`budget-bar-track-period-`)}function aE(e){switch(Number(e&&e.period_seconds||0)){case 3600:return Ja;case 86400:return Do;case 604800:return La;case 2592e3:return Ra;default:return xo}}function oE(e){let t=Math.max(0,Math.trunc(Number(e||0)));return t+` `+(t===1?`second`:`seconds`)}function sE(e){let t=Number(e&&e.period_seconds||0);switch(t){case 3600:return`1 hour`;case 86400:return`1 day`;case 604800:return`1 week`;case 2592e3:return`1 month`;default:return oE(t)}}function cE(e){return String(e&&e.source||``).trim()||`manual`}function lE(e){let t=cE(e).toLowerCase();return t===`manual`?`Created from the dashboard.`:t===`config`?`Loaded from configuration.`:`Budget source: `+t}function uE(e){let t=Number(e&&e.remaining);return Number.isFinite(t)?t<0?sc(Math.abs(t))+` over`:sc(t)+` remaining`:``}var Y=new class{#e=k(j([]));get budgets(){return I(this.#e)}set budgets(e){A(this.#e,e,!0)}#t=k(!0);get budgetsAvailable(){return I(this.#t)}set budgetsAvailable(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get filter(){return I(this.#r)}set filter(e){A(this.#r,e,!0)}#i=k(`subject`);get sortBy(){return I(this.#i)}set sortBy(e){A(this.#i,e,!0)}#a=k(``);get error(){return I(this.#a)}set error(e){A(this.#a,e,!0)}#o=k(!1);get formOpen(){return I(this.#o)}set formOpen(e){A(this.#o,e,!0)}#s=k(!1);get formSubmitting(){return I(this.#s)}set formSubmitting(e){A(this.#s,e,!0)}#c=k(``);get formError(){return I(this.#c)}set formError(e){A(this.#c,e,!0)}#l=k(!1);get editing(){return I(this.#l)}set editing(e){A(this.#l,e,!0)}#u=k(j(yT()));get form(){return I(this.#u)}set form(e){A(this.#u,e,!0)}#d=k(!1);get overrideDialogOpen(){return I(this.#d)}set overrideDialogOpen(e){A(this.#d,e,!0)}#f=k(null);get overridePendingPayload(){return I(this.#f)}set overridePendingPayload(e){A(this.#f,e,!0)}#p=k(null);get overrideExistingBudget(){return I(this.#p)}set overrideExistingBudget(e){A(this.#p,e,!0)}#m=k(``);get resettingKey(){return I(this.#m)}set resettingKey(e){A(this.#m,e,!0)}#h=k(``);get deletingKey(){return I(this.#h)}set deletingKey(e){A(this.#h,e,!0)}#g=k(!1);get resetAllLoading(){return I(this.#g)}set resetAllLoading(e){A(this.#g,e,!0)}#_=null;managementEnabled(){return Ss.budgetsVisible()}filteredBudgets(){return VT(this.budgets,this.filter,this.sortBy)}async fetchBudgetsPage(){if(await Ss.ensureLoaded(),!this.managementEnabled()){this.budgets=[],this.budgetsAvailable=!1,this.error=``;return}return this.#_||=this.fetchBudgets().finally(()=>{this.#_=null}),this.#_}async fetchBudgets(){this.loading=!0,this.error=``;let e=await _T(`/admin/budgets`,{label:`budgets`,errorFallback:`Unable to load budgets.`,normalize:LT});if(this.loading=!1,e.status!==`stale`){if(e.status===`unavailable`){this.budgetsAvailable=!1,this.budgets=[];return}if(!e.result){this.budgets=[],this.error=e.error;return}if(this.budgetsAvailable=!0,e.status===`error`){this.error=e.error;return}this.budgets=e.items}}openForm(e){if(this.editing=!!e,this.formError=``,e){let t=Number(e.period_seconds||0);this.form={scope:ST(e),subject:CT(e),period:jT(t),period_seconds:t,amount:String(e.amount||``),source:String(e.source||`manual`)}}else this.form=yT();this.formOpen=!0}syncPeriodSeconds(){let e=AT(String(this.form.period||``).trim());e>0&&(this.form.period_seconds=e)}setFormSubject(e){this.form.subject=this.form.scope===`label`?String(e??``):IT(e)}syncScope(){OT(this.form)}closeForm(){this.closeOverrideDialog(),this.formOpen=!1,this.formSubmitting=!1,this.formError=``,this.editing=!1,this.form=yT()}async submitForm(){if(this.formSubmitting)return;let{payload:e,error:t}=HT(this.form);if(!e){this.formError=t;return}if(!this.editing){let t=NT(this.budgets,e);if(t){this.openOverrideDialog(t,e);return}}await this.saveBudgetPayload(e)}async saveBudgetPayload(e){if(this.formSubmitting||!e)return;this.formSubmitting=!0,this.formError=``;let t=await vT(`/admin/budgets`,`PUT`,UT(e),{label:`save budget`,errorFallback:`Unable to save budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.formSubmitting=!1,t.status!==`stale`){if(t.status===`unavailable`){this.budgetsAvailable=!1,this.formError=t.error;return}if(t.status===`error`){this.formError=t.error;return}this.closeForm(),q.success(`Budget saved.`),this.fetchBudgets()}}openOverrideDialog(e,t){this.overrideExistingBudget=e||null,this.overridePendingPayload=t||null,this.overrideDialogOpen=!0}closeOverrideDialog(){this.overrideDialogOpen=!1,this.overridePendingPayload=null,this.overrideExistingBudget=null}async confirmOverride(){if(!this.overridePendingPayload){this.closeOverrideDialog();return}let e=this.overridePendingPayload;this.closeOverrideDialog(),await this.saveBudgetPayload(e)}async resetBudget(e){if(!e)return;let t=MT(e);if(this.resettingKey===t)return;let n=CT(e)+` `+tE(e);if(!confirm(`Reset budget "`+n+`"?`))return;this.resettingKey=t;let r=await vT(`/admin/budgets/reset-one`,`POST`,GT(e),{label:`reset budget`,errorFallback:`Unable to reset budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.resettingKey=``,r.status!==`stale`){if(r.status===`unavailable`){this.budgetsAvailable=!1,q.error(r.error);return}if(r.status===`error`){q.error(r.error);return}q.success(`Budget reset.`),this.fetchBudgets()}}async deleteBudget(e){if(!e)return;let t=MT(e);if(this.deletingKey===t)return;let n=CT(e)+` `+tE(e);if(!confirm(`Delete budget "`+n+`"? This cannot be undone.`))return;this.deletingKey=t;let r=await vT(`/admin/budgets`,`DELETE`,WT(e),{label:`delete budget`,errorFallback:`Unable to delete budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.deletingKey=``,r.status!==`stale`){if(r.status===`unavailable`){this.budgetsAvailable=!1,q.error(r.error);return}if(r.status===`error`){q.error(r.error);return}this.budgets=LT(r.result.data),q.success(`Budget deleted.`)}}openResetDialog(){Rs.open({title:`Reset Budgets`,titleId:`budgetResetDialogTitle`,inputId:`budget-reset-confirmation`,requiredText:`reset`,confirmLabel:`Reset All Budgets`,icon:go,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.resetAllBudgets()})}async resetAllBudgets(){if(this.resetAllLoading)return;this.resetAllLoading=!0;let e=await vT(`/admin/budgets/reset`,`POST`,{confirmation:`reset`},{label:`reset budgets`,errorFallback:`Unable to reset budgets.`,unavailableStatuses:[]});if(this.resetAllLoading=!1,e.status!==`stale`){if(e.status!==`ok`){Rs.error=e.error;return}Rs.close(),q.success(`Budgets reset.`),Jo.page===`budgets`&&this.fetchBudgets()}}},dE=R(` Edit`,1),fE=R(` `,1),pE=R(`
Usage
Period
`),mE=R(`
`);function hE(e,t){E(t,!0);let n=ya(t,`budgets`,19,()=>[]);function r(e){if(!e)return``;let t=ds.formatTimestamp(e);return!t||t===`-`?``:t+` `+ds.effectiveTimeZoneLabel()}var i=mE();H(i,21,n,e=>MT(e),(e,t)=>{var n=pE(),i=M(n),a=M(i),o=M(a),s=M(o),c=e=>{G(e,{get icon(){return Oo},class:`budget-scope-icon`})},l=O(()=>ST(I(t))===`label`);V(s,e=>{I(l)&&e(c)});var u=P(s);T(o);var d=P(o,2),f=M(d),p=M(f);{let e=O(()=>aE(I(t)));G(p,{get icon(){return I(e)},class:`budget-period-icon`})}var m=P(p,2),h=M(m,!0);T(m),T(f),T(d);var g=P(d,2),_=M(g),v=M(_),y=M(v,!0);T(v),T(_);var b=P(_,2),x=M(b);gT(x,{label:`Edit budget`,class:`budget-action-btn`,onclick:()=>Y.openForm(I(t)),children:(e,t)=>{var n=dE();G(N(n),{get icon(){return uo},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}});var S=P(x,2);{let e=O(()=>Y.resettingKey===MT(I(t))?`Resetting budget`:`Reset budget`),n=O(()=>Y.resettingKey===MT(I(t)));gT(S,{get label(){return I(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>Y.resetBudget(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=fE(),i=N(r);G(i,{get icon(){return go},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>Y.resettingKey===MT(I(t))?`Resetting`:`Reset`]),z(e,r)},$$slots:{default:!0}})}var C=P(S,2);{let e=O(()=>Y.deletingKey===MT(I(t))?`Deleting budget`:`Delete budget`),n=O(()=>Y.deletingKey===MT(I(t)));gT(C,{get label(){return I(e)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>Y.deleteBudget(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=fE(),i=N(r);G(i,{get icon(){return Ao},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>Y.deletingKey===MT(I(t))?`Deleting`:`Delete`]),z(e,r)},$$slots:{default:!0}})}T(b),T(g),T(a);var w=P(a,2),ee=M(w),te=M(ee),ne=P(M(te),2),re=M(ne,!0);T(ne),T(te);var ie=P(te,2),ae=M(ie);let oe;var se=P(ae,2),ce=M(se),le=M(ce,!0);T(ce);var ue=P(ce,2),de=M(ue,!0);T(ue),T(se);var fe=P(se,2),pe=M(fe),me=M(pe,!0);T(pe);var he=P(pe,2),ge=M(he,!0);T(he),T(fe),T(ie),T(ee);var _e=P(ee,2),ve=M(_e),ye=P(M(ve),2),be=M(ye,!0);T(ye),T(ve);var xe=P(ve,2),Se=M(xe),Ce=P(Se,2),we=M(Ce),Te=M(we,!0);T(we);var Ee=P(we,2),De=M(Ee,!0);T(Ee);var Oe=P(Ee,2),ke=M(Oe,!0);T(Oe),T(Ce);var Ae=P(Ce,2),je=M(Ae),Me=M(je,!0);T(je);var Ne=P(je,2),Pe=M(Ne,!0);T(Ne);var Fe=P(Ne,2),Ie=M(Fe,!0);T(Fe),T(Ae),T(xe),T(_e),T(w),T(i),T(n),F((e,t,n,r,i,a,s,c,l,d,p,m,g,_,b,x,S,C,w,ee,te,ne,se,ce,ue,fe,pe,he,_e,ve)=>{U(o,1,`budget-scope-value ${e??``}`,`svelte-1jm56wo`),Hi(o,t),W(o,`title`,n),B(u,` ${r??``}`),U(f,1,`budget-period-label ${i??``}`,`svelte-1jm56wo`),B(h,a),W(v,`title`,s),B(y,c),B(re,l),W(ie,`aria-valuenow`,d),W(ie,`aria-label`,p),Hi(ie,`--budget-progress: ${m??``}%`),oe=U(ae,1,`budget-bar-fill budget-bar-fill-usage`,null,oe,g),B(le,_),B(de,b),B(me,x),B(ge,S),B(be,C),U(xe,1,`budget-bar-track ${w??``}`,`svelte-1jm56wo`),W(xe,`aria-valuenow`,ee),Hi(xe,`--budget-progress: ${te??``}%`),U(Se,1,`budget-bar-fill budget-bar-fill-period ${ne??``}`,`svelte-1jm56wo`),W(we,`title`,se),B(Te,ce),B(De,ue),W(Oe,`title`,fe),B(ke,pe),B(Me,he),B(Pe,_e),B(Ie,ve)},[()=>TT(I(t)),()=>ST(I(t))===`label`?`--label-color: `+Hy(CT(I(t))):void 0,()=>wT(I(t))+`: `+CT(I(t)),()=>CT(I(t)),()=>nE(I(t)),()=>tE(I(t)),()=>lE(I(t)),()=>cE(I(t)),()=>$T(I(t)),()=>ZT(I(t)),()=>`Budget usage: `+sc(I(t).spent)+` of `+sc(I(t).amount)+`, `+uE(I(t)),()=>ZT(I(t)),()=>({"budget-bar-fill-danger":XT(I(t))>=1}),()=>sc(I(t).spent)+` of `+sc(I(t).amount),()=>uE(I(t)),()=>sc(I(t).spent)+` of `+sc(I(t).amount),()=>uE(I(t)),()=>eE(I(t)),()=>iE(I(t)),()=>QT(I(t)),()=>QT(I(t)),()=>rE(I(t)),()=>r(I(t).period_start),()=>ds.formatTimestamp(I(t).period_start),()=>sE(I(t)),()=>r(I(t).period_end),()=>ds.formatTimestamp(I(t).period_end),()=>ds.formatTimestamp(I(t).period_start),()=>sE(I(t)),()=>ds.formatTimestamp(I(t).period_end)]),z(e,n)}),T(i),z(e,i),D()}var gE=R(`

`,1),_E=R(``),vE=R(``),yE=R(`
`);function bE(e,t){E(t,!0);let n=ya(t,`open`,3,!1),r=ya(t,`title`,3,``),i=ya(t,`ariaLabel`,3,``),a=ya(t,`error`,3,``),o=ya(t,`submitting`,3,!1),s=ya(t,`submitDisabled`,3,!1),c=ya(t,`submitLabel`,3,`Save`),l=ya(t,`submittingLabel`,3,`Saving...`),u=ya(t,`submitIcon`,3,_o),d=ya(t,`cancel`,3,!0),p=ya(t,`dialogClass`,3,``),m=ya(t,`novalidate`,3,!1),h=ya(t,`canClose`,3,()=>!0);function g(){K.dialogOpen||h()()&&t.onclose?.()}Ns(e,{get open(){return n()},variant:`editor`,onclose:g,children:(e,n)=>{var h=yE(),g=M(h),_=M(g),v=M(_),y=M(v),b=e=>{var n=Qr();gi(N(n),()=>t.header),z(e,n)},x=e=>{var n=gE(),i=N(n),a=M(i,!0);T(i);var o=P(i,2),s=e=>{var n=Qr();gi(N(n),()=>t.headerHint),z(e,n)};V(o,e=>{t.headerHint&&e(s)}),F(()=>B(a,r())),z(e,n)};V(y,e=>{t.header?e(b):e(x,-1)}),T(v);var S=P(v,2);{let e=O(()=>`Close `+(i()||r()).toLowerCase());ks(S,{get label(){return I(e)},onclick:()=>t.onclose?.()})}T(_);var C=P(_,2);gi(C,()=>t.children??f);var w=P(C,2),ee=e=>{var t=_E(),n=M(t,!0);T(t),F(()=>B(n,a())),z(e,t)};V(w,e=>{a()&&e(ee)});var te=P(w,2),ne=M(te),re=e=>{var n=vE();L(`click`,n,()=>t.onclose?.()),z(e,n)};V(ne,e=>{d()&&e(re)});var ie=P(ne,2),ae=e=>{var n=Qr();gi(N(n),()=>t.extraActions),z(e,n)};V(ie,e=>{t.extraActions&&e(ae)});var oe=P(ie,2),se=M(oe);G(se,{get icon(){return u()},class:`form-action-icon`});var ce=P(se,2),le=M(ce,!0);T(ce),T(oe),T(te),T(g),T(h),F(()=>{U(h,1,Fi([`model-editor`,p()])),W(h,`aria-label`,i()||r()),g.noValidate=m(),oe.disabled=o()||s(),B(le,o()?l():c())}),Vr(`submit`,g,e=>{e.preventDefault(),t.onsubmit?.()}),z(e,h)},$$slots:{default:!0}}),D()}Hr([`click`]);var xE=R(`
`);function SE(e,t){let n=ya(t,`label`,3,``);var r=xE(),i=M(r),a=M(i,!0);T(i),gi(P(i,2),()=>t.children??f),T(r),F(()=>{W(i,`for`,t.id),B(a,n())}),z(e,r)}var CE=R(``),wE=R(``),TE=R(``),EE=R(``),DE=R(``),OE=R(``),kE=R(`

Editing a budget updates its limit only. Use Reset to start a new - budget period.

`),AE=R(`
`,1),jE=R(``),ME=R(` `,1);function NE(e,t){E(t,!0);function n(e){Y.setFormSubject(e.target.value),e.target.value=Y.form.subject}var r=ME(),i=N(r);{let e=O(()=>Y.editing?`Edit Budget`:`Create Budget`);bE(i,{get open(){return Y.formOpen},get title(){return I(e)},ariaLabel:`Budget editor`,get error(){return Y.formError},get submitting(){return Y.formSubmitting},submitLabel:`Save Budget`,dialogClass:`budget-editor`,canClose:()=>!Y.overrideDialogOpen,onclose:()=>Y.closeForm(),onsubmit:()=>Y.submitForm(),children:(e,t)=>{var r=AE(),i=N(r),a=M(i);SE(a,{id:`budget-scope`,label:`Scope`,children:(e,t)=>{var n=wE();H(n,21,xT,e=>e.value,(e,t)=>{var n=CE(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),F(()=>n.disabled=Y.editing),L(`change`,n,()=>Y.syncScope()),Gi(n,()=>Y.form.scope,e=>Y.form.scope=e),z(e,n)},$$slots:{default:!0}});var o=P(a,2);{let e=O(()=>ET(Y.form));SE(o,{id:`budget-subject`,get label(){return I(e)},children:(e,t)=>{var r=TE();na(r),F(e=>{W(r,`placeholder`,e),ra(r,Y.form.subject),r.disabled=Y.editing,W(r,`data-modal-autofocus`,!Y.editing||void 0)},[()=>DT(Y.form)]),L(`input`,r,n),z(e,r)},$$slots:{default:!0}})}var s=P(o,2);SE(s,{id:`budget-period`,label:`Period`,children:(e,t)=>{var n=EE();H(n,21,kT,e=>e.value,(e,t)=>{var n=CE(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),F(()=>n.disabled=Y.editing),L(`change`,n,()=>Y.syncPeriodSeconds()),Gi(n,()=>Y.form.period,e=>Y.form.period=e),z(e,n)},$$slots:{default:!0}});var c=P(s,2),l=e=>{SE(e,{id:`budget-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=DE();na(n),F(()=>n.disabled=Y.editing),da(n,()=>Y.form.period_seconds,e=>Y.form.period_seconds=e),z(e,n)},$$slots:{default:!0}})};V(c,e=>{Y.form.period===`custom`&&e(l)}),SE(P(c,2),{id:`budget-amount`,label:`Amount`,children:(e,t)=>{var n=OE();na(n),F(()=>W(n,`data-modal-autofocus`,Y.editing||void 0)),da(n,()=>Y.form.amount,e=>Y.form.amount=e),z(e,n)},$$slots:{default:!0}}),T(i);var u=P(i,2),d=e=>{z(e,kE())};V(u,e=>{Y.editing&&e(d)}),z(e,r)},$$slots:{default:!0}})}Ns(P(i,2),{get open(){return Y.overrideDialogOpen},variant:`auth`,onclose:()=>Y.closeOverrideDialog(),children:(e,t)=>{var n=jE(),r=M(n);ks(P(M(r),2),{label:`Close budget override dialog`,onclick:()=>Y.closeOverrideDialog(),class:`auth-dialog-close`,iconClass:``}),T(r);var i=P(r,2),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=P(c,2),u=M(l);G(u,{get icon(){return _o},class:`form-action-icon`});var d=P(u,2),f=M(d,!0);T(d),T(l),T(s),T(i),T(n),F(e=>{B(o,e),l.disabled=Y.formSubmitting,B(f,Y.formSubmitting?`Saving...`:`Override Budget`)},[()=>qT(Y.overridePendingPayload,Y.overrideExistingBudget)]),Vr(`submit`,i,e=>{e.preventDefault(),Y.confirmOverride()}),L(`click`,c,()=>Y.closeOverrideDialog()),z(e,n)},$$slots:{default:!0}}),z(e,r),D()}Hr([`change`,`input`,`click`]);var PE=R(`

Budgets

`),FE=R(``),IE=R(`
Budget management is unavailable.
`),LE=R(``),RE=R(`
`),zE=R(`

No budgets configured yet.

`),BE=R(`

No budgets match your filter.

`),VE=R(`
`);function HE(e,t){E(t,!0),An(()=>{K.refreshTick,Jo.page===`budgets`&&Y.fetchBudgetsPage()});let n=O(()=>Y.filteredBudgets());var r=VE(),i=M(r),a=M(i);qS(M(a),{copyId:`budgets-help-copy`,label:`budgets help`,title:e=>{z(e,PE())},help:e=>{Ue(),z(e,Zr(`Budgets are evaluated from tracked usage cost records for each user - path subtree. Enforcement runs only when Budget is enabled for the - active workflow.`))},$$slots:{title:!0,help:!0}}),T(a);var o=P(a,2),s=M(o),c=e=>{var t=FE();G(M(t),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=Y.formSubmitting),L(`click`,t,()=>Y.openForm()),z(e,t)},l=O(()=>Y.managementEnabled()&&Y.budgetsAvailable&&!K.authError);V(s,e=>{I(l)&&e(c)}),T(o),T(i);var u=P(i,2);Fc(u,{});var d=P(u,2),f=e=>{z(e,IE())},p=O(()=>(!Y.managementEnabled()||!Y.budgetsAvailable)&&!K.authError);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{var t=LE(),n=M(t,!0);T(t),F(()=>B(n,Y.error)),z(e,t)};V(m,e=>{Y.error&&!K.authError&&e(h)});var g=P(m,2),_=e=>{mT(e,{label:`Loading budgets...`})};V(g,e=>{Y.loading&&!K.authError&&e(_)});var v=P(g,2),y=e=>{var t=RE(),n=M(t);yw(M(n),{id:`budget-filter`,placeholder:`Filter by user path, label, or period...`,label:`Filter budgets by user path or period`,get value(){return Y.filter},set value(e){Y.filter=e}}),T(n);var r=P(n,2),i=P(M(r),2),a=M(i);a.value=a.__value=`subject`;var o=P(a);o.value=o.__value=`period`,T(i),T(r),T(t),Gi(i,()=>Y.sortBy,e=>Y.sortBy=e),z(e,t)};V(v,e=>{(Y.budgets.length>0||Y.filter)&&Y.budgetsAvailable&&!K.authError&&!Y.formOpen&&e(y)});var b=P(v,2);NE(b,{});var x=P(b,2),S=e=>{hE(e,{get budgets(){return I(n)}})};V(x,e=>{I(n).length>0&&Y.budgetsAvailable&&!K.authError&&e(S)});var C=P(x,2),w=e=>{z(e,zE())},ee=O(()=>Y.budgets.length===0&&!Y.filter&&!Y.loading&&!K.authError&&!Y.error&&Y.budgetsAvailable&&Y.managementEnabled());V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{z(e,BE())},re=O(()=>Y.budgets.length>0&&I(n).length===0&&Y.filter&&!Y.loading&&!K.authError&&!Y.error&&Y.budgetsAvailable&&Y.managementEnabled());V(te,e=>{I(re)&&e(ne)}),T(r),z(e,r),D()}Hr([`click`]);function UE(){return{scope:`user_path`,subject:`/`,period:`minute`,period_seconds:60,max_requests:``,max_tokens:``,source:`manual`}}function WE(e){let t={user_path:{label:`User path`,chip:`user path`,fieldLabel:`User Path`,placeholder:`/team/alpha`},provider:{label:`Provider`,chip:`provider`,fieldLabel:`Provider Name`,placeholder:`openai`},model:{label:`Model`,chip:`model`,fieldLabel:`Model`,placeholder:`openai/gpt-4o`}};return t[e]||t.user_path}function GE(){return[`user_path`,`provider`,`model`].map(e=>({value:e,label:WE(e).label}))}function KE(e){return String(e&&e.scope||``).trim()||`user_path`}function qE(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function JE(e){return WE(KE(e)).chip}function YE(e){return WE(String(e&&e.scope||``)).fieldLabel}function XE(e){return WE(String(e&&e.scope||``)).placeholder}function ZE(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function QE(){return[{value:`minute`,label:`Per minute`},{value:`hour`,label:`Per hour`},{value:`day`,label:`Per day`},{value:`concurrent`,label:`Concurrent (in-flight)`},{value:`custom`,label:`Custom seconds`}]}function $E(e){switch(String(e||``).trim().toLowerCase()){case`minute`:return 60;case`hour`:return 3600;case`day`:return 86400;case`concurrent`:return 0;default:return-1}}function eD(e){switch(Number(e||0)){case 60:return`minute`;case 3600:return`hour`;case 86400:return`day`;case 0:return`concurrent`;default:return`custom`}}function tD(e){let t=String(e&&e.period||``).trim(),n=$E(t);n>=0&&(e.period_seconds=n),t===`concurrent`&&(e.max_tokens=``)}function nD(e){return KE(e)+`:`+qE(e)+`:`+String(e&&e.period_seconds||`0`)}function rD(e){return Number(e&&e.period_seconds||0)===0}function iD(e){return String(e&&e.period_label||``).trim()||eD(Number(e&&e.period_seconds||0))}function aD(e){return String(e&&e.source||``)===`config`?`config`:`manual`}function oD(e){return String(e&&e.source||``)===`config`}function sD(e){let t=Number(e);return Number.isFinite(t)?t.toLocaleString():`0`}function cD(e,t){let n=Number(e),r=Number(t);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0)return 0;let i=Math.round(n/r*100);return Math.min(Math.max(i,0),100)}function lD(e,t){let n=String(t||``).trim().toLowerCase(),r=Array.isArray(e)?e.slice():[],i={user_path:0,provider:1,model:2};return r.sort((e,t)=>{let n=(i[KE(e)]||0)-(i[KE(t)]||0);if(n!==0)return n;let r=qE(e).localeCompare(qE(t));return r===0?Number(e.period_seconds||0)-Number(t.period_seconds||0):r}),n?r.filter(e=>{let t=qE(e).toLowerCase(),r=JE(e).toLowerCase(),i=iD(e).toLowerCase();return t.includes(n)||r.includes(n)||i.includes(n)}):r}function uD(e){return!e||!Array.isArray(e.rate_limits)?[]:e.rate_limits}function dD(e,t,n){let r=String(t||``).trim();return r=e===`provider`||e===`model`?r.toLowerCase():`/`+r.split(`/`).map(e=>e.trim()).filter(Boolean).join(`/`),e+`:`+r+`:`+Number(n||0)}function fD(e,t){return e?dD(t.scope,t.subject,t.limit_key.period_seconds)!==dD(e.scope,e.subject,e.period_seconds):!1}function pD(e){let t=e||{},n=String(t.scope||`user_path`),r=String(t.subject||``).trim();if(n!==`user_path`&&!r)return{error:YE(t)+` is required.`};let i=String(t.period||``)===`concurrent`,a=t.period_seconds;if(a===``||a==null)return{error:`Period seconds is required.`};let o=Number(a);if(!Number.isInteger(o)||o<0||o===0&&!i)return{error:`Period seconds must be a positive integer (0 only for the concurrent period).`};let s=String(t.max_requests===void 0||t.max_requests===null?``:t.max_requests).trim(),c=String(t.max_tokens===void 0||t.max_tokens===null?``:t.max_tokens).trim();if(!s&&!c)return{error:`Set max requests, max tokens, or both.`};if(i&&c)return{error:`Token limits are not valid for the concurrent period.`};let l={scope:n,subject:r||`/`,limit_key:{period_seconds:o}};if(s){let e=Number(s);if(!Number.isInteger(e)||e<=0)return{error:`Max requests must be a positive integer.`};l.max_requests=e}if(c){let e=Number(c);if(!Number.isInteger(e)||e<=0)return{error:`Max tokens must be a positive integer.`};l.max_tokens=e}return{payload:l}}function mD(e,t,n){if(KE(e)!==`model`)return!1;let r=String(qE(e)).toLowerCase(),i=String(n||``).trim().toLowerCase();if(!i)return!1;if(r===i)return!0;let a=String(t||``).trim().toLowerCase();return a?r===a+`/`+i||i.startsWith(a+`/`)&&r===i.slice(a.length+1):!1}function hD(e,t){return KE(e)===`provider`&&String(qE(e)).toLowerCase()===String(t||``).trim().toLowerCase()}function gD(e){let t=e||{},n=String(t.model||``),r=String(t.provider||``);return!r||n.toLowerCase().startsWith(r+`/`)?n:r+`/`+n}function _D(e,t){let n=e||{},r=Array.isArray(t)?t:[],i=[];return n.kind===`model`&&i.push({key:`model`,title:`Model limits`,scope:`model`,subject:gD(n),hint:``,items:r.filter(e=>mD(e,n.provider,n.model))}),i.push({key:`provider`,title:`Provider limits (`+n.provider+`)`,scope:`provider`,subject:n.provider,hint:n.kind===`model`?`Shared by every model routed to this provider.`:``,items:r.filter(e=>hD(e,n.provider))}),i.push({key:`global`,title:`Global limits`,scope:`user_path`,subject:`/`,hint:`Root user-path rules throttle all traffic. Narrower user-path rules also apply, per consumer.`,items:r.filter(e=>KE(e)===`user_path`&&qE(e)===`/`)}),i}function vD(e){return rD(e)?cD(e.in_flight,e.max_requests):Math.max(cD(e.requests_used,e.max_requests),cD(e.tokens_used,e.max_tokens))}function yD(e){return`--rate-limit-pressure: `+vD(e)+`%`}function bD(e){let t=vD(e);return t>=100?`rate-limit-pressure-row rate-limit-pressure-full`:t>=75?`rate-limit-pressure-row rate-limit-pressure-high`:`rate-limit-pressure-row`}function xD(e){return(Array.isArray(e)?e:[]).some(e=>KE(e)===`user_path`&&qE(e)===`/`)}function SD(e,t,n){let r=Array.isArray(e)?e:[];return r.some(e=>mD(e,t,n))?`table-action-btn-active`:r.some(e=>hD(e,t))||xD(r)?`rate-limit-gauge-inherited`:``}function CD(e,t){let n=Array.isArray(e)?e:[];return n.some(e=>hD(e,t))?`table-action-btn-active`:xD(n)?`rate-limit-gauge-inherited`:``}function wD(e,t){let n=`Rate limits for `+e;return t===`table-action-btn-active`?n+` (direct limits configured)`:t?n+` (inherited limits apply)`:n}function TD(e){if(rD(e))return sD(e.in_flight)+` of `+sD(e.max_requests)+` in flight`;let t=[];return e.max_requests!==null&&e.max_requests!==void 0&&t.push(sD(e.requests_used)+`/`+sD(e.max_requests)+` req`),e.max_tokens!==null&&e.max_tokens!==void 0&&t.push(sD(e.tokens_used)+`/`+sD(e.max_tokens)+` tok`),t.join(` · `)}var X=new class{#e=k(j([]));get rateLimits(){return I(this.#e)}set rateLimits(e){A(this.#e,e,!0)}#t=k(!0);get rateLimitsAvailable(){return I(this.#t)}set rateLimitsAvailable(e){A(this.#t,e,!0)}#n=k(!1);get rateLimitsLoading(){return I(this.#n)}set rateLimitsLoading(e){A(this.#n,e,!0)}rateLimitFetchPromise=null;#r=k(``);get rateLimitFilter(){return I(this.#r)}set rateLimitFilter(e){A(this.#r,e,!0)}#i=k(``);get rateLimitError(){return I(this.#i)}set rateLimitError(e){A(this.#i,e,!0)}#a=k(!1);get rateLimitFormOpen(){return I(this.#a)}set rateLimitFormOpen(e){A(this.#a,e,!0)}#o=k(!1);get rateLimitFormSubmitting(){return I(this.#o)}set rateLimitFormSubmitting(e){A(this.#o,e,!0)}#s=k(``);get rateLimitFormError(){return I(this.#s)}set rateLimitFormError(e){A(this.#s,e,!0)}#c=k(!1);get rateLimitEditing(){return I(this.#c)}set rateLimitEditing(e){A(this.#c,e,!0)}rateLimitEditingOriginal=null;rateLimitFormReturnToInspector=!1;#l=k(``);get rateLimitResettingKey(){return I(this.#l)}set rateLimitResettingKey(e){A(this.#l,e,!0)}#u=k(``);get rateLimitDeletingKey(){return I(this.#u)}set rateLimitDeletingKey(e){A(this.#u,e,!0)}#d=k(!1);get rateLimitInspectorOpen(){return I(this.#d)}set rateLimitInspectorOpen(e){A(this.#d,e,!0)}#f=k(j({kind:``,provider:``,model:``,title:``}));get rateLimitInspector(){return I(this.#f)}set rateLimitInspector(e){A(this.#f,e,!0)}#p=k(j(UE()));get rateLimitForm(){return I(this.#p)}set rateLimitForm(e){A(this.#p,e,!0)}rateLimitsEnabled(){return Ss.rateLimitsVisible()}defaultRateLimitForm(){return UE()}rateLimitScopeMeta(e){return WE(e)}rateLimitScopeOptions(){return GE()}rateLimitScope(e){return KE(e)}rateLimitSubject(e){return qE(e)}rateLimitScopeLabel(e){return JE(e)}rateLimitSubjectFieldLabel(){return YE(this.rateLimitForm)}rateLimitSubjectPlaceholder(){return XE(this.rateLimitForm)}syncRateLimitScope(){ZE(this.rateLimitForm)}rateLimitPeriodOptions(){return QE()}rateLimitPeriodSeconds(e){return $E(e)}rateLimitPeriodFromSeconds(e){return eD(e)}syncRateLimitPeriodSeconds(){tD(this.rateLimitForm)}rateLimitKey(e){return nD(e)}rateLimitIsConcurrent(e){return rD(e)}rateLimitPeriodLabel(e){return iD(e)}rateLimitSourceLabel(e){return aD(e)}rateLimitIsReadOnly(e){return oD(e)}formatRateLimitNumber(e){return sD(e)}rateLimitUsagePercent(e,t){return cD(e,t)}filteredRateLimits(){return lD(this.rateLimits,this.rateLimitFilter)}normalizeRateLimitListPayload(e){return uD(e)}async fetchRateLimitsPage(){if(await Ss.ensureLoaded(),!this.rateLimitsEnabled()){this.rateLimits=[],this.rateLimitsAvailable=!1,this.rateLimitError=``;return}return this.rateLimitFetchPromise||=this.fetchRateLimits().finally(()=>{this.rateLimitFetchPromise=null}),this.rateLimitFetchPromise}async fetchRateLimits(){this.rateLimitsLoading=!0,this.rateLimitError=``;let e=await _T(`/admin/rate-limits`,{label:`rate limits`,errorFallback:`Unable to load rate limits.`,normalize:uD});if(this.rateLimitsLoading=!1,e.status!==`stale`){if(e.status===`unavailable`){this.rateLimitsAvailable=!1,this.rateLimits=[];return}if(!e.result){this.rateLimits=[],this.rateLimitError=e.error;return}if(this.rateLimitsAvailable=!0,e.status===`error`){this.rateLimitError=e.error;return}this.rateLimits=e.items}}openRateLimitForm(e){if(this.rateLimitEditing=!!e,this.rateLimitFormError=``,e){let t=Number(e.period_seconds||0);this.rateLimitEditingOriginal={scope:KE(e),subject:qE(e),period_seconds:t},this.rateLimitForm={scope:KE(e),subject:qE(e),period:eD(t),period_seconds:t,max_requests:e.max_requests===null||e.max_requests===void 0?``:String(e.max_requests),max_tokens:e.max_tokens===null||e.max_tokens===void 0?``:String(e.max_tokens),source:String(e.source||`manual`)}}else this.rateLimitEditingOriginal=null,this.rateLimitForm=UE();this.rateLimitFormOpen=!0}closeRateLimitForm(){this.rateLimitFormOpen=!1,this.rateLimitFormSubmitting=!1,this.rateLimitFormError=``,this.rateLimitEditing=!1,this.rateLimitEditingOriginal=null,this.rateLimitForm=UE(),this.rateLimitFormReturnToInspector&&(this.rateLimitFormReturnToInspector=!1,this.rateLimitInspectorOpen=!0)}rateLimitNormalizedIdentity(e,t,n){return dD(e,t,n)}rateLimitIdentityMoved(e){return fD(this.rateLimitEditingOriginal,e)}setRateLimitFormSubject(e){this.rateLimitForm.subject=String(e||``)}rateLimitFormPayload(){return pD(this.rateLimitForm)}async submitRateLimitForm(){if(this.rateLimitFormSubmitting)return;let{payload:e,error:t}=this.rateLimitFormPayload();if(t){this.rateLimitFormError=t;return}let n=this.rateLimitIdentityMoved(e),r=this.rateLimitEditingOriginal;this.rateLimitFormSubmitting=!0,this.rateLimitFormError=``;try{let t=await vT(`/admin/rate-limits`,`PUT`,e,{label:`save rate limit`,errorFallback:`Unable to save rate limit.`,unavailableStatuses:[]});if(t.status===`stale`)return;if(t.status!==`ok`){this.rateLimitFormError=t.error;return}if(this.rateLimits=uD(t.result.data),n&&!await this.deleteMovedRateLimitOriginal(r))return;this.closeRateLimitForm(),q.success(n?`Rate limit moved; live counters restarted.`:`Rate limit saved.`)}finally{this.rateLimitFormSubmitting=!1}}async deleteMovedRateLimitOriginal(e){let t=await vT(`/admin/rate-limits`,`DELETE`,{scope:e.scope,subject:e.subject,limit_key:{period_seconds:Number(e.period_seconds||0)}},{label:`remove the moved rate limit`,errorFallback:`The new rule was saved, but the previous one could not be removed. Delete it manually.`,unavailableStatuses:[]});return t.status===`stale`?!1:t.status===`ok`?(this.rateLimits=uD(t.result.data),!0):(this.rateLimitFormError=t.error,!1)}async deleteRateLimit(e){let t=nD(e);if(this.rateLimitDeletingKey===t)return;this.rateLimitDeletingKey=t;let n=await vT(`/admin/rate-limits`,`DELETE`,{scope:KE(e),subject:qE(e),limit_key:{period_seconds:Number(e.period_seconds||0)}},{label:`delete rate limit`,errorFallback:`Unable to delete rate limit.`,unavailableStatuses:[]});if(this.rateLimitDeletingKey=``,n.status!==`stale`){if(n.status!==`ok`){q.error(n.error);return}this.rateLimits=uD(n.result.data),q.success(`Rate limit deleted.`)}}async resetRateLimit(e){let t=nD(e);if(this.rateLimitResettingKey===t)return;this.rateLimitResettingKey=t;let n=await vT(`/admin/rate-limits/reset-one`,`POST`,{scope:KE(e),subject:qE(e),period_seconds:Number(e.period_seconds||0)},{label:`reset rate limit`,errorFallback:`Unable to reset rate limit.`,unavailableStatuses:[]});if(this.rateLimitResettingKey=``,n.status!==`stale`){if(n.status!==`ok`){q.error(n.error);return}this.rateLimits=uD(n.result.data),q.success(`Rate limit counters reset.`)}}rateLimitInspectorModelID(e){return String(e&&e.model&&e.model.id||``).trim()}openRateLimitInspectorForModel(e){let t=this.rateLimitInspectorModelID(e),n=String(e&&e.provider_name||``).trim().toLowerCase();this.rateLimitInspector={kind:`model`,provider:n,model:t,title:String(e&&e.display_name||t)},this.showRateLimitInspector()}openRateLimitInspectorForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase();this.rateLimitInspector={kind:`provider`,provider:t,model:``,title:String(e&&e.display_name||t)},this.showRateLimitInspector()}showRateLimitInspector(){this.rateLimitInspectorOpen=!0,this.fetchRateLimitsPage()}closeRateLimitInspector(){this.rateLimitInspectorOpen=!1}rateLimitRuleMatchesModel(e,t,n){return mD(e,t,n)}rateLimitRuleMatchesProvider(e,t){return hD(e,t)}rateLimitInspectorQualifiedModel(){return gD(this.rateLimitInspector)}rateLimitInspectorSections(){return _D(this.rateLimitInspector,this.rateLimits)}rateLimitPressurePercent(e){return vD(e)}rateLimitPressureStyle(e){return yD(e)}rateLimitPressureClass(e){return bD(e)}rateLimitGaugeCache={rules:null,states:{}};rateLimitGaugeMemo(e,t){this.rateLimitGaugeCache.rules!==this.rateLimits&&(this.rateLimitGaugeCache={rules:this.rateLimits,states:{}});let n=this.rateLimitGaugeCache.states;return e in n||(n[e]=t()),n[e]}rateLimitGaugeClassForModel(e){let t=this.rateLimitInspectorModelID(e),n=String(e&&e.provider_name||``).trim().toLowerCase(),r=this.rateLimits;return this.rateLimitGaugeMemo(`model:`+n+`/`+t,()=>SD(r,n,t))}rateLimitGaugeClassForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase(),n=this.rateLimits;return this.rateLimitGaugeMemo(`provider:`+t,()=>CD(n,t))}hasGlobalRateLimits(){let e=this.rateLimits;return this.rateLimitGaugeMemo(`global`,()=>xD(e))}rateLimitGaugeTitle(e,t){return wD(e,t)}rateLimitInspectorSummary(e){return TD(e)}openRateLimitFormFromInspector(e,t,n){this.rateLimitInspectorOpen=!1,this.rateLimitFormReturnToInspector=!0,this.openRateLimitForm(n||void 0),n||(this.rateLimitForm.scope=e,this.rateLimitForm.subject=t)}},ED=R(``),DD=R(``),OD=R(``),kD=R(``),AD=R(``),jD=R(``),MD=R(``),ND=R(`

Scope, subject, and period identify the rule: changing any of them - moves the rule to a new key and restarts its live counters.

`),PD=R(`

A user path rule limits the whole subtree; provider and model rules cap - all traffic routed there and make load balancing skip the target while - it is saturated. One shared counter per rule. Leave a field empty to - skip that limit. Token limits require usage tracking.

`,1);function FD(e,t){E(t,!0);{let t=O(()=>X.rateLimitEditing?`Edit Rate Limit`:`Create Rate Limit`);bE(e,{get open(){return X.rateLimitFormOpen},get title(){return I(t)},ariaLabel:`Rate limit editor`,get error(){return X.rateLimitFormError},get submitting(){return X.rateLimitFormSubmitting},submitLabel:`Save Rate Limit`,dialogClass:`budget-editor`,novalidate:!0,onclose:()=>X.closeRateLimitForm(),onsubmit:()=>X.submitRateLimitForm(),children:(e,t)=>{var n=PD(),r=N(n),i=M(r);SE(i,{id:`rate-limit-scope`,label:`Scope`,children:(e,t)=>{var n=DD();H(n,21,()=>X.rateLimitScopeOptions(),e=>e.value,(e,t)=>{var n=ED(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),L(`change`,n,()=>X.syncRateLimitScope()),Gi(n,()=>X.rateLimitForm.scope,e=>X.rateLimitForm.scope=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2);{let e=O(()=>X.rateLimitSubjectFieldLabel());SE(a,{id:`rate-limit-subject`,get label(){return I(e)},children:(e,t)=>{var n=OD();na(n),F(e=>{W(n,`placeholder`,e),W(n,`data-modal-autofocus`,!X.rateLimitEditing||void 0),ra(n,X.rateLimitForm.subject)},[()=>X.rateLimitSubjectPlaceholder()]),L(`input`,n,e=>X.setRateLimitFormSubject(e.currentTarget.value)),z(e,n)},$$slots:{default:!0}})}var o=P(a,2);SE(o,{id:`rate-limit-period`,label:`Period`,children:(e,t)=>{var n=kD();H(n,21,()=>X.rateLimitPeriodOptions(),e=>e.value,(e,t)=>{var n=ED(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),L(`change`,n,()=>X.syncRateLimitPeriodSeconds()),Gi(n,()=>X.rateLimitForm.period,e=>X.rateLimitForm.period=e),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=e=>{SE(e,{id:`rate-limit-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=AD();na(n),da(n,()=>X.rateLimitForm.period_seconds,e=>X.rateLimitForm.period_seconds=e),z(e,n)},$$slots:{default:!0}})};V(s,e=>{X.rateLimitForm.period===`custom`&&e(c)});var l=P(s,2);{let e=O(()=>X.rateLimitForm.period===`concurrent`?`Max In-Flight Requests`:`Max Requests`);SE(l,{id:`rate-limit-max-requests`,get label(){return I(e)},children:(e,t)=>{var n=jD();na(n),F(()=>W(n,`data-modal-autofocus`,X.rateLimitEditing?!0:void 0)),da(n,()=>X.rateLimitForm.max_requests,e=>X.rateLimitForm.max_requests=e),z(e,n)},$$slots:{default:!0}})}var u=P(l,2),d=e=>{SE(e,{id:`rate-limit-max-tokens`,label:`Max Tokens`,children:(e,t)=>{var n=MD();na(n),da(n,()=>X.rateLimitForm.max_tokens,e=>X.rateLimitForm.max_tokens=e),z(e,n)},$$slots:{default:!0}})};V(u,e=>{X.rateLimitForm.period!==`concurrent`&&e(d)}),T(r);var f=P(r,4),p=e=>{z(e,ND())};V(f,e=>{X.rateLimitEditing&&e(p)}),z(e,n)},$$slots:{default:!0}})}D()}Hr([`change`,`input`]);var ID=R(` `),LD=R(` Edit`,1),RD=R(` `,1),zD=R(`
In-flight
`),BD=R(`
Requests
`),VD=R(`
Tokens
`),HD=R(`
`),UD=R(`
`);function WD(e,t){E(t,!0);var n=UD();H(n,21,()=>t.rules,e=>X.rateLimitKey(e),(e,t)=>{var n=HD(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=e=>{var n=ID(),r=M(n);{let e=O(()=>X.rateLimitScope(I(t))===`provider`?bo:Fa);G(r,{get icon(){return I(e)},class:`budget-period-icon`})}var i=P(r,2),a=M(i,!0);T(i),T(n),F((e,t)=>{W(n,`title`,e),B(a,t)},[()=>`Rule scope: `+X.rateLimitScopeLabel(I(t)),()=>X.rateLimitScopeLabel(I(t))]),z(e,n)},u=O(()=>X.rateLimitScope(I(t))!==`user_path`);V(c,e=>{I(u)&&e(l)});var d=P(c,2),f=M(d);{let e=O(()=>X.rateLimitIsConcurrent(I(t))?Ma:ko);G(f,{get icon(){return I(e)},class:`budget-period-icon`})}var p=P(f,2),m=M(p,!0);T(p),T(d),T(s);var h=P(s,2),g=M(h),_=M(g),v=M(_,!0);T(_),T(g);var y=P(g,2),b=M(y),x=e=>{gT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitForm(I(t)),children:(e,t)=>{var n=LD();G(N(n),{get icon(){return uo},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}})},S=O(()=>!X.rateLimitIsReadOnly(I(t)));V(b,e=>{I(S)&&e(x)});var C=P(b,2);{let e=O(()=>X.rateLimitResettingKey===X.rateLimitKey(I(t))?`Resetting counters`:`Reset counters`),n=O(()=>X.rateLimitResettingKey===X.rateLimitKey(I(t)));gT(C,{get label(){return I(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>X.resetRateLimit(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=RD(),i=N(r);G(i,{get icon(){return go},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>X.rateLimitResettingKey===X.rateLimitKey(I(t))?`Resetting`:`Reset`]),z(e,r)},$$slots:{default:!0}})}var w=P(C,2),ee=e=>{{let n=O(()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t))?`Deleting rate limit`:`Delete rate limit`),r=O(()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t)));gT(e,{get label(){return I(n)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>X.deleteRateLimit(I(t)),get disabled(){return I(r)},children:(e,n)=>{var r=RD(),i=N(r);G(i,{get icon(){return Ao},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t))?`Deleting`:`Delete`]),z(e,r)},$$slots:{default:!0}})}},te=O(()=>!X.rateLimitIsReadOnly(I(t)));V(w,e=>{I(te)&&e(ee)}),T(y),T(h),T(i);var ne=P(i,2),re=M(ne),ie=e=>{var n=zD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u),T(l),T(o),T(n),F((e,t,n,r,i,l)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l)},[()=>X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)+`%`,()=>X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests),()=>`In-flight requests: `+X.formatRateLimitNumber(I(t).in_flight)+` of `+X.formatRateLimitNumber(I(t).max_requests),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)>=100}),()=>X.formatRateLimitNumber(I(t).in_flight)+` of `+X.formatRateLimitNumber(I(t).max_requests)+` in flight`]),z(e,n)},ae=O(()=>X.rateLimitIsConcurrent(I(t)));V(re,e=>{I(ae)&&e(ie)});var oe=P(re,2),se=e=>{var n=BD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=M(f,!0);T(f),T(l),T(o),T(n),F((e,t,n,r,i,l,u)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l),B(p,u)},[()=>X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)+`%`,()=>X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests),()=>`Requests used: `+X.formatRateLimitNumber(I(t).requests_used)+` of `+X.formatRateLimitNumber(I(t).max_requests),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)>=100}),()=>X.formatRateLimitNumber(I(t).requests_used)+` of `+X.formatRateLimitNumber(I(t).max_requests)+` requests`,()=>X.formatRateLimitNumber(I(t).requests_remaining)+` left`]),z(e,n)},ce=O(()=>!X.rateLimitIsConcurrent(I(t))&&I(t).max_requests);V(oe,e=>{I(ce)&&e(se)});var le=P(oe,2),ue=e=>{var n=VD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=M(f,!0);T(f),T(l),T(o),T(n),F((e,t,n,r,i,l,u)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l),B(p,u)},[()=>X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)+`%`,()=>X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens),()=>`Tokens used: `+X.formatRateLimitNumber(I(t).tokens_used)+` of `+X.formatRateLimitNumber(I(t).max_tokens),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)>=100}),()=>X.formatRateLimitNumber(I(t).tokens_used)+` of `+X.formatRateLimitNumber(I(t).max_tokens)+` tokens`,()=>X.formatRateLimitNumber(I(t).tokens_remaining)+` left`]),z(e,n)},de=O(()=>!X.rateLimitIsConcurrent(I(t))&&I(t).max_tokens);V(le,e=>{I(de)&&e(ue)}),T(ne),T(r),T(n),F((e,t,n,r,i)=>{W(a,`title`,e),B(o,t),B(m,n),W(_,`title`,r),B(v,i)},[()=>X.rateLimitScopeLabel(I(t))+`: `+X.rateLimitSubject(I(t)),()=>X.rateLimitSubject(I(t)),()=>X.rateLimitPeriodLabel(I(t)),()=>X.rateLimitIsReadOnly(I(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>X.rateLimitSourceLabel(I(t))]),z(e,n)}),T(n),z(e,n),D()}var GD=R(`

Rate Limits

`),KD=R(``),qD=R(`
Rate limit management is unavailable.
`),JD=R(``),YD=R(`
`),XD=R(`

No rate limits configured yet.

`),ZD=R(`

No rate limits match your filter.

`),QD=R(`
`);function $D(e,t){E(t,!0),An(()=>{K.refreshTick,Jo.page===`rate-limits`&&X.fetchRateLimitsPage()});let n=O(()=>X.filteredRateLimits());var r=QD(),i=M(r),a=M(i);qS(M(a),{copyId:`rate-limits-help-copy`,label:`rate limits help`,text:`Rate limits cap requests, tokens, and in-flight concurrency for a user path subtree, a provider, or a model. Consumer (user path) breaches return 429 with Retry-After and x-ratelimit-* headers; saturated providers and models are skipped by load balancing and failover while capacity exists elsewhere. Counters are per gateway instance and reset on restart; token limits need usage tracking.`,title:e=>{z(e,GD())},$$slots:{title:!0}}),T(a);var o=P(a,2),s=M(o),c=e=>{var t=KD();G(M(t),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=X.rateLimitFormSubmitting),L(`click`,t,()=>X.openRateLimitForm()),z(e,t)},l=O(()=>X.rateLimitsEnabled()&&X.rateLimitsAvailable&&!K.authError);V(s,e=>{I(l)&&e(c)}),T(o),T(i);var u=P(i,2);Fc(u,{});var d=P(u,2),f=e=>{z(e,qD())},p=O(()=>(!X.rateLimitsEnabled()||!X.rateLimitsAvailable)&&!K.authError);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{var t=JD(),n=M(t,!0);T(t),F(()=>B(n,X.rateLimitError)),z(e,t)};V(m,e=>{X.rateLimitError&&!K.authError&&e(h)});var g=P(m,2),_=e=>{mT(e,{label:`Loading rate limits...`})};V(g,e=>{X.rateLimitsLoading&&!K.authError&&e(_)});var v=P(g,2),y=e=>{var t=YD(),n=M(t);yw(M(n),{id:`rate-limit-filter`,placeholder:`Filter by subject, scope, or period...`,label:`Filter rate limits by subject, scope, or period`,get value(){return X.rateLimitFilter},set value(e){X.rateLimitFilter=e}}),T(n),T(t),z(e,t)};V(v,e=>{(X.rateLimits.length>0||X.rateLimitFilter)&&X.rateLimitsAvailable&&!K.authError&&!X.rateLimitFormOpen&&e(y)});var b=P(v,2);FD(b,{});var x=P(b,2),S=e=>{WD(e,{get rules(){return I(n)}})};V(x,e=>{I(n).length>0&&X.rateLimitsAvailable&&!K.authError&&e(S)});var C=P(x,2),w=e=>{z(e,XD())},ee=O(()=>X.rateLimits.length===0&&!X.rateLimitFilter&&!X.rateLimitsLoading&&!K.authError&&!X.rateLimitError&&X.rateLimitsAvailable&&X.rateLimitsEnabled());V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{z(e,ZD())},re=O(()=>X.rateLimits.length>0&&I(n).length===0&&X.rateLimitFilter&&!X.rateLimitsLoading&&!K.authError&&!X.rateLimitError&&X.rateLimitsAvailable&&X.rateLimitsEnabled());V(te,e=>{I(re)&&e(ne)}),T(r),z(e,r),D()}Hr([`click`]);function eO(e){return String(e||``).trim().toLowerCase()}function tO(e){if(!e)return``;let t=String(e.selector||``).trim();if(t)return t;if(!e.model||!e.model.id)return``;let n=String(e.model.id||``).trim(),r=String(e.provider_name||``).trim();if(r)return r+`/`+n;let i=String(e.provider_type||``).trim();return!i||n.includes(`/`)?n:i+`/`+n}function nO(e,t,n,r){let i=new Set,a=String(e||``).trim().toLowerCase(),o=String(t||``).trim().toLowerCase(),s=String(n||``).trim().toLowerCase(),c=String(r||``).trim().toLowerCase();if(c&&i.add(c),!a)return i;i.add(a),s&&i.add(s+`/`+a),o&&!a.includes(`/`)&&i.add(o+`/`+a);let l=a.split(`/`);return l.length===2&&l[1]&&i.add(l[1]),i}function rO(e){return nO(e&&e.model?e.model.id:``,e?e.provider_type:``,e?e.provider_name:``,e?e.selector:``)}function iO(e){let t=new Set,n=String(e.resolved_model||``).trim().toLowerCase(),r=String(e.target_model||``).trim().toLowerCase(),i=String(e.target_provider||``).trim().toLowerCase();if(n){t.add(n);let e=n.split(`/`);e.length===2&&e[1]&&t.add(e[1])}if(r){t.add(r);let e=r.split(`/`);e.length===2&&e[1]&&t.add(e[1])}return r&&i&&t.add(i+`/`+r),t}function aO(e){if(!e)return``;let t=String(e.provider||``).trim(),n=String(e.model||``).trim();return!t||!n||n===t||n.startsWith(t+`/`)?n:t+`/`+n}function oO(e){if(e===``||e==null)return null;let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function sO(e,t){let n={model:e},r=oO(t);return r!==null&&(n.weight=r),n}function cO(e){let t=Array.isArray(e)?e:[],n=[];for(let e of t){let t=String(e&&e.model||``).trim();t&&n.push(sO(t,e&&e.weight))}return n}function lO(e){switch(String(e||``).toLowerCase()){case`cost`:return`lowest cost`;case`round_robin`:case``:return`round robin`;default:return e}}var uO={round_robin:`Round-robin (rotate across targets; honors weights)`,cost:`Lowest cost (cheapest target per request)`,adaptive:`Adaptive (target chosen by the registered routing extension)`};function dO(e,t){let n=Array.isArray(e)?[...e]:[],r=String(t||``).trim().toLowerCase();return r&&!n.includes(r)&&n.push(r),n.map(e=>({value:e,label:uO[e]||e}))}function fO(e){let t=Array.isArray(e.targets)?e.targets:[],n=t.length>0?t[0]:{},r=t.map(e=>{let t={provider:e.provider||``,model:e.model||``};return e.weight&&(t.weight=e.weight),t});return{name:e.source,target_provider:n.provider||``,target_model:n.model||``,targets:r,strategy:e.strategy||``,session_affinity:e.session_affinity!==!1,description:e.description||``,enabled:e.enabled!==!1,managed:!!e.managed,valid:!!e.valid,resolved_model:e.resolved_model||``,provider_type:e.provider_type||``,user_paths:Array.isArray(e.user_paths)?e.user_paths:[]}}function pO(e){let t=Array.isArray(e)?e:[],n=[],r=[];for(let e of t)!e||typeof e!=`object`||(e.kind===`redirect`?n.push(fO(e)):e.kind===`policy`&&r.push({selector:e.source,provider_name:e.provider_name||``,model:e.model||``,user_paths:Array.isArray(e.user_paths)?e.user_paths:[],description:e.description||``,enabled:e.enabled!==!1,managed:!!e.managed,scope_kind:e.scope_kind||``}));return{aliases:n,policies:r}}function mO(e){if(!e)return`—`;let t=Array.isArray(e.targets)?e.targets:[];return t.length>1?t.length+` targets · `+lO(e.strategy):e.resolved_model?e.resolved_model:e.target_provider?e.target_provider+`/`+e.target_model:e.target_model||`—`}function hO(e){return e?e.enabled===!1?`is-disabled`:e.valid?`is-valid`:`is-invalid`:`is-invalid`}function gO(e){return e?e.enabled===!1?`Disabled`:e.valid?`Active`:`Invalid`:`Invalid`}function _O(e){return Array.isArray(e)&&e.length>0&&e.indexOf(`/`)===-1}function vO(e,t){return!t||!e?``:e.effective_enabled===!1?`is-disabled`:_O(e.user_paths)?`is-restricted`:`is-enabled`}function yO(e){if(!e)return``;let t=[];e.effective_enabled===!1&&t.push(e.default_enabled===!1?`Disabled by default`:`Disabled`);let n=Array.isArray(e.user_paths)?e.user_paths:[];return n.length>0&&t.push(`Allowed for `+n.join(`, `)),t.join(` · `)}function bO({models:e,aliases:t,virtualModelsAvailable:n,activeCategory:r}){let i=Array.isArray(e)?e:[],a=Array.isArray(t)?t:[],o=new Map;if(n)for(let e of a){let t=eO(e&&e.name);!t||e.enabled===!1||!e.valid||o.set(t,e)}let s=new Map,c=i.map(e=>{let t=tO(e),n=null;for(let t of rO(e))s.has(t)||s.set(t,e),!n&&o.has(t)&&(n=o.get(t));let r=e&&e.access?e.access:null;return{key:`model:`+t,display_name:t,secondary_name:``,provider_name:e.provider_name||``,provider_type:e.provider_type||``,model:e.model,selector:e.selector||``,is_alias:!1,alias:null,access:r,masking_alias:n,has_virtual_model:!!(n||r&&r.override),alias_state_class:``,alias_state_text:``}});if(!n)return c;for(let e of a){let t=s.get(eO(e&&e.name));if(e&&e.enabled!==!1&&e.valid&&t)continue;let n=null;for(let t of iO(e))if(n=s.get(t)||null,n)break;!n&&r&&r!==`all`||c.push({key:`alias:`+e.name,display_name:e.name,secondary_name:mO(e),provider_name:n&&n.provider_name||``,provider_type:n?n.provider_type||e.provider_type||``:e.provider_type||``,model:n?n.model:{id:e.name,object:`model`},selector:``,is_alias:!0,alias:e,access:null,masking_alias:null,source_model_exists:!!t,has_virtual_model:!0,alias_state_class:hO(e),alias_state_text:gO(e)})}return c.sort((e,t)=>e.is_alias===t.is_alias?String(e.display_name||``).localeCompare(String(t.display_name||``)):e.is_alias?-1:1)}function xO(e,t){if(!t)return e;let n=String(t).toLowerCase();return e.filter(e=>[e.display_name,e.secondary_name,e.provider_name,e.provider_type,e.model&&e.model.owned_by,e.alias&&e.alias.description,e.alias&&e.alias_state_text,e.model&&e.model.metadata&&e.model.metadata.modes?e.model.metadata.modes.join(`,`):``,e.model&&e.model.metadata&&e.model.metadata.categories?e.model.metadata.categories.join(`,`):``].some(e=>String(e||``).toLowerCase().includes(n)))}function SO(e,t){return String(e||``).trim()||String(t||``).trim()||`Unassigned`}function CO(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return!r||r===n?``:r}function wO(e){let t=String(e||``).trim();return t?t+`/`:``}function TO(e){let t=Array.isArray(e)?e:[],n=t.filter(e=>e&&!e.is_alias).length,r=t.filter(e=>e&&e.is_alias).length,i=[];return n>0&&i.push(n+(n===1?` model`:` models`)),r>0&&i.push(r+(r===1?` alias`:` aliases`)),i.join(` · `)}function EO(e,t,n){let r=String(t||``).trim(),i=String(n||``).trim();for(let t of Array.isArray(e)?e:[]){let e=String(t&&t.provider_name||``).trim(),n=String(t&&t.provider_type||``).trim();if(!(r&&e!==r)&&!(!r&&i&&n!==i)&&t&&t.access)return t.access.default_enabled!==!1}return!0}function DO(e){for(let t of Array.isArray(e)?e:[])if(t&&t.access)return t.access.default_enabled!==!1;return!0}function OO(e,t){let n=String(t||``).trim();if(!n)return null;for(let t of Array.isArray(e)?e:[])if(String(t&&t.selector||``).trim()===n)return t;return null}function kO(e,t,n,r){let i=wO(t),a=r&&r.get(`/`)||null,o=i&&r&&r.get(i)||null,s=EO(e,t,n),c=o||a,l=c&&Array.isArray(c.user_paths)?Array.from(new Set(c.user_paths)).sort():[];return{selector:i,default_enabled:s,effective_enabled:c?c.enabled!==!1:s,user_paths:l,override:o}}function AO(e,t,n){if(!Array.isArray(e)||e.length===0)return[];let r=new Map;for(let e of Array.isArray(n)?n:[]){let t=String(e&&e.selector||``).trim();t&&r.set(t,e)}let i=[],a=new Map;for(let t of e){if(t&&t.is_alias){i.push(t);continue}let e=String(t&&t.provider_name||``).trim(),n=String(t&&t.provider_type||``).trim(),r=`provider-group:`+(e||n||`unassigned`);a.has(r)||a.set(r,{key:r,provider_name:e,provider_type:n,display_name:SO(e,n),type_label:CO(e,n),rows:[]});let o=a.get(r);!o.provider_name&&e&&(o.provider_name=e),!o.provider_type&&n&&(o.provider_type=n),o.display_name=SO(o.provider_name,o.provider_type),o.type_label=CO(o.provider_name,o.provider_type),o.rows.push(t)}let o=Array.from(a.values()).map(e=>{let n=kO(t,e.provider_name,e.provider_type,r);return{...e,access:n,access_summary:yO(n),item_count_label:TO(e.rows)}}).sort((e,t)=>String(e.display_name||``).localeCompare(String(t.display_name||``)));return i.length>0&&o.unshift({key:`virtual-model-group`,is_virtual_models:!0,provider_name:``,provider_type:``,display_name:`Virtual models`,type_label:``,rows:i,access:{selector:``},access_summary:``,item_count_label:TO(i)}),o}function jO(e,t){let n=OO(t,`/`),r=DO(e),i=n&&Array.isArray(n.user_paths)?n.user_paths:[];return{key:`scope-global`,is_alias:!1,display_name:`all providers and models`,access:{selector:`/`,default_enabled:r,effective_enabled:n?n.enabled!==!1:r,user_paths:i,override:n}}}function MO(e){return e?String(e.access&&e.access.selector||``).trim()||String(e.override_selector||``).trim()||tO(e):``}function NO(e){if(!e)return[];let t=[];return e.is_alias?t.push(`alias-row`,hO(e.alias)):e.has_virtual_model&&t.push(`alias-row`,`is-valid`),!e.is_alias&&e.masking_alias&&t.push(`masked-model-row`),!e.is_alias&&e.access&&e.access.effective_enabled===!1&&t.push(`model-access-disabled-row`),t}function PO(e){return!!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)}function FO(e){return!!(e&&!e.is_alias&&e.masking_alias&&e.masking_alias.name&&!e.masking_alias.managed)}function IO(e){return e&&e.is_alias&&e.alias&&e.alias.name?`alias-row-`+String(e.alias.name).replace(/[^a-zA-Z0-9_-]+/g,`-`):``}function LO(e){return e?e.is_alias?!!(e.alias&&e.alias.managed):!!(e.access&&e.access.override&&e.access.override.managed||e.masking_alias&&e.masking_alias.managed):!1}function RO(e){return!!(e&&e.override)}function zO(e){return e?`table-action-btn-active`:``}function BO(e,t){let n=`Edit `+String(e||`model access`);return t?n+` (virtual model exists)`:n}function VO(){return{source:``,target_model:``,target_weight:1,targets:[],strategy:`round_robin`,session_affinity:!0,user_paths:``,description:``,enabled:!0}}function HO(e){return String(e&&e.target_model||``).trim()!==``}function UO(e){return String(e&&e.target_model||``).trim()?!0:cO(e&&e.targets).length>0}function WO(e){return!!e&&Array.isArray(e.targets)&&e.targets.length>0}function GO(e){return WO(e)&&String(e&&e.strategy||``).toLowerCase()!==`cost`}function KO(e){let t=Array.isArray(e.targets)?e.targets:[];if(t.length>0){let n=t.shift();e.target_model=n.model||``,e.target_weight=n.weight||1;return}e.target_model=``,e.target_weight=1}function qO(e){let t=Array.isArray(e&&e.targets)?e.targets:[];return t.length>0?{primaryModel:aO(t[0]),primaryWeight:t[0].weight||1,extraTargets:t.slice(1).map(e=>({model:aO(e),weight:e.weight||1}))}:{primaryModel:e&&e.target_provider?e.target_provider+`/`+e.target_model:e&&e.target_model||``,primaryWeight:1,extraTargets:[]}}function JO(e){return String(e||``).split(/\r?\n|,/).map(e=>String(e||``).trim()).filter(Boolean)}function YO(e,t,n){let r=String(e&&e.source||``).trim(),i=String(e&&e.target_model||``).trim(),a=cO(e&&e.targets),o=UO(e),s=String(t||``).trim(),c=n===`edit`&&!!s&&r!==s,l={source:r,user_paths:JO(e&&e.user_paths),description:String(e&&e.description||``).trim(),enabled:!!(e&&e.enabled)};if(c&&(l.old_source=s),o){let t=[];if(i&&t.push(sO(i,e.target_weight)),t.push(...a),t.length>1){let n=e.strategy||`round_robin`;l.targets=n===`cost`?t.map(e=>({model:e.model})):t,l.strategy=n,e&&e.session_affinity===!1&&(l.session_affinity=!1)}else l.target_model=t[0].model}return{payload:l,source:r,isRedirect:o,isRename:c}}function XO(e){let t={source:e.name,description:String(e.description||``).trim(),user_paths:Array.isArray(e.user_paths)?e.user_paths:[],enabled:e.enabled===!1},n=Array.isArray(e.targets)?e.targets:[];return n.length>1?(t.strategy=e.strategy||`round_robin`,e.session_affinity===!1&&(t.session_affinity=!1),t.targets=t.strategy===`cost`?n.map(e=>({model:aO(e)})):n.map(e=>sO(aO(e),e.weight))):n.length===1?t.target_model=aO(n[0]):t.target_model=e.target_provider?e.target_provider+`/`+e.target_model:e.target_model,t}function ZO(e,t,n){let r=n||{},i=r.effective_enabled===!1,a=t&&Array.isArray(t.user_paths)?t.user_paths:[],o=`PUT`,s;return i===!1?s={source:e,enabled:!1,user_paths:a}:t&&a.length===0&&r.default_enabled!==!1?(o=`DELETE`,s={source:e}):s={source:e,enabled:!0,user_paths:a},{method:o,payload:s,desired:i}}function QO(e,t,n){let r=Math.max(1,Number(t||75)),i=Math.min(n,e+r);return{limit:i,rendering:ibO({models:Nc.models,aliases:this.aliases,virtualModelsAvailable:this.virtualModelsAvailable,activeCategory:Nc.activeCategory}));get displayModels(){return I(this.#T)}set displayModels(e){A(this.#T,e)}#E=O(()=>AO(this.displayModels,Nc.models,this.modelOverrideViews));get displayModelGroups(){return I(this.#E)}set displayModelGroups(e){A(this.#E,e)}#D=O(()=>xO(this.displayModels,Nc.filter));get filteredDisplayModels(){return I(this.#D)}set filteredDisplayModels(e){A(this.#D,e)}#O=O(()=>{let e=this.filteredDisplayModels,t=Math.max(0,Math.min(Number(this.modelRenderLimit||0),e.length));return!Nc.filter&&t>=this.displayModels.length?this.displayModelGroups:AO(e.slice(0,t),Nc.models,this.modelOverrideViews)});get filteredDisplayModelGroups(){return I(this.#O)}set filteredDisplayModelGroups(e){A(this.#O,e)}#k=O(()=>jO(Nc.models,this.modelOverrideViews));get globalScopeRow(){return I(this.#k)}set globalScopeRow(e){A(this.#k,e)}modelsBusy(){return!!(Nc.loading||this.modelsRendering)}modelLoadingText(){if(Nc.loading)return this.displayModels.length>0?`Refreshing models...`:`Loading models...`;let e=this.filteredDisplayModels.length;return`Rendering models... `+Math.min(Number(this.modelRenderLimit||0),e)+` / `+e}restartModelRendering(e){let t=++this.#a,n=$O(this.modelRenderBatchSize,e);this.modelRenderLimit=n.limit,this.modelsRendering=n.rendering,n.rendering&&this.#A(t)}stopModelRendering(){this.#a++,this.modelsRendering=!1}#A(e){let t=()=>{if(e!==this.#a)return;let t=QO(this.modelRenderLimit,this.modelRenderBatchSize,this.filteredDisplayModels.length);this.modelRenderLimit=t.limit,this.modelsRendering=t.rendering,t.rendering&&this.#A(e)};typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>setTimeout(t,0)):setTimeout(t,0)}async fetchVirtualModels(){this.aliasLoading=!0,this.aliasError=``;try{let e=await _s(`/admin/virtual-models`,{label:`virtual models`});if(e.status===503){this.virtualModelsAvailable=!1,this.aliases=[],this.modelOverrideViews=[];return}if(e.stale)return;if(this.virtualModelsAvailable=!0,!e.ok){this.aliases=[],this.modelOverrideViews=[];return}let{aliases:t,policies:n}=pO(e.data);this.aliases=t,this.modelOverrideViews=n}catch(e){console.error(`Failed to fetch virtual models:`,e),this.aliases=[],this.modelOverrideViews=[],this.aliasError=`Unable to load virtual models.`}finally{this.aliasLoading=!1}}qualifiedModelName(e){return tO(e)}findModelOverrideView(e){return OO(this.modelOverrideViews,e)}hasGlobalModelOverride(){return!!this.findModelOverrideView(`/`)}findExistingAliasByName(e){let t=eO(e);if(!t)return null;for(let e of this.aliases)if(eO(e&&e.name)===t)return e;return null}findConcreteModelByName(e){let t=eO(e);if(!t)return null;for(let e of Nc.models)if(rO(e).has(t))return e;return null}rowToggleEnabled(e){return e?e.is_alias?e.alias&&e.alias.enabled!==!1:!!(e.access&&e.access.effective_enabled!==!1):!1}rowToggleLabel(e){return this.rowTogglingKey&&this.rowTogglingKey===e.key?`Updating...`:this.rowToggleRestricted(e)?`Restricted`:this.rowToggleEnabled(e)?`Enabled`:`Disabled`}rowToggleRestricted(e){return!!e&&!e.is_alias&&vO(e.access,this.virtualModelsAvailable)===`is-restricted`}rowToggleAriaLabel(e){if(!e)return``;let t=this.rowToggleEnabled(e)?`Disable `:`Enable `,n;return n=e.is_alias?`alias `+String(e.alias&&e.alias.name||``):String(e.display_name||e.access&&e.access.selector||`model`),t+n.trim()}async toggleRowEnabled(e){if(this.virtualModelsAvailable&&!(!e||this.rowTogglingKey===e.key)){if(LO(e)){q.success(`This virtual model is managed by configuration and is read-only.`);return}if(e.is_alias){await this.toggleAliasRow(e);return}await this.toggleModelRow(e)}}async toggleAliasRow(e){let t=e.alias;if(!t||!t.name)return;this.rowTogglingKey=e.key;let n=XO(t);try{let e=await vs(`/admin/virtual-models`,`PUT`,n,{label:`alias state`});if(e.status===503){this.virtualModelsAvailable=!1,q.error(`Virtual models feature is unavailable.`);return}if(e.stale)return;if(!e.ok){q.error(e.status===401?`Authentication required.`:ps(e,`Failed to update alias state.`));return}q.success(n.enabled?`Alias enabled.`:`Alias disabled.`),this.fetchVirtualModels()}catch(e){console.error(`Failed to toggle alias state:`,e),q.error(`Failed to update alias state.`)}finally{this.rowTogglingKey=``}}async toggleModelRow(e){let t=MO(e);if(!t)return;let{method:n,payload:r,desired:i}=ZO(t,this.findModelOverrideView(t),e.access||{});this.rowTogglingKey=e.key;try{let e=await vs(`/admin/virtual-models`,n,r,{label:`model access`});if(e.status===503){this.virtualModelsAvailable=!1,q.error(`Virtual models feature is unavailable.`);return}if(!(n===`DELETE`&&e.status===404)){if(e.stale)return;if(!e.ok){q.error(e.status===401?`Authentication required.`:ps(e,`Failed to update model access.`));return}}q.success(i?`Model enabled.`:`Model disabled.`),Promise.all([Nc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to toggle model access:`,e),q.error(`Failed to update model access.`)}finally{this.rowTogglingKey=``}}async removeAliasRow(e){if(!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)||this.rowDeletingKey)return;let t=String(e.alias.name||``).trim();t&&await this.mutateVirtualModelRow({rowKey:e.key,confirmMessage:`Remove the virtual model alias "`+t+`"?`,method:`DELETE`,payload:{source:t},operation:`virtual model`,failureMessage:`Failed to remove virtual model.`,notice:`Virtual model removed.`,ignoreNotFound:!0})}async removeRedirectRow(e){let t=e&&e.masking_alias;if(!(e&&!e.is_alias&&t&&t.name&&!t.managed)||this.rowDeletingKey)return;let n=String(t.name||``).trim();n&&await this.mutateVirtualModelRow({rowKey:e.key,confirmMessage:`Remove the redirect for "`+n+`"? Other virtual model settings will be preserved.`,method:`PUT`,payload:{source:n,user_paths:Array.isArray(t.user_paths)?t.user_paths:[],description:String(t.description||``).trim(),enabled:t.enabled!==!1},operation:`virtual model redirect`,failureMessage:`Failed to remove redirect.`,notice:`Redirect removed. Other virtual model settings were preserved.`})}async mutateVirtualModelRow(e){if(!this.rowDeletingKey&&window.confirm(e.confirmMessage)){this.rowDeletingKey=e.rowKey;try{let t=await vs(`/admin/virtual-models`,e.method,e.payload,{label:e.operation});if(t.status===503){this.virtualModelsAvailable=!1,q.error(`Virtual models feature is unavailable.`);return}if(!(e.ignoreNotFound&&t.status===404)){if(t.stale)return;if(!t.ok){q.error(t.status===401?`Authentication required.`:ps(t,e.failureMessage));return}}this.virtualModelsAvailable=!0,q.success(e.notice),Promise.all([Nc.fetchModels(),this.fetchVirtualModels()])}catch(t){console.error(e.failureMessage,t),q.error(e.failureMessage)}finally{this.rowDeletingKey=``}}}addVmTarget(){Array.isArray(this.vmForm.targets)||(this.vmForm.targets=[]),this.vmForm.targets.push({model:``,weight:1})}removeVmTarget(e){Array.isArray(this.vmForm.targets)&&this.vmForm.targets.splice(e,1)}removePrimaryTarget(){KO(this.vmForm)}vmFormHasPrimaryTarget(){return HO(this.vmForm)}vmFormShowStrategy(){return WO(this.vmForm)}vmStrategyOptions(){return dO(Ss.virtualModelStrategies(),this.vmForm.strategy)}vmFormShowWeights(){return GO(this.vmForm)}vmFormToggleRestricted(){return!!(this.vmForm&&this.vmForm.enabled)&&_O(JO(this.vmForm.user_paths))}vmFormToggleLabel(){return!this.vmForm||!this.vmForm.enabled?`Disabled`:this.vmFormToggleRestricted()?`Restricted`:`Enabled`}resetVirtualModelForm(){this.vmFormError=``,this.vmFormHelpOpen=!1,this.vmFormUserPathsHelpOpen=!1,this.vmSubmitting=!1,this.vmDeleting=!1,this.vmFormHasExisting=!1,this.vmFormDefaultEnabled=!0,this.vmFormEffectiveEnabled=!0,this.vmFormDisplayName=``,this.vmFormSourceLocked=!1,this.vmFormOriginalSource=``,this.vmFormManaged=!1,this.vmForm=VO()}closeVirtualModelForm(){this.vmFormOpen=!1,this.resetVirtualModelForm()}openVirtualModelCreate(e){this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`create`,this.vmFormSourceLocked=!1,this.vmFormDisplayName=`New virtual model`,e&&e.model&&e.model.id&&(this.vmForm.target_model=tO(e))}openVirtualModelEditAlias(e){if(!e)return;this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!1,this.vmFormHasExisting=!0,this.vmFormManaged=!!e.managed,this.vmFormOriginalSource=e.name||``,this.vmFormDisplayName=e.name||``,this.vmFormDefaultEnabled=DO(Nc.models),this.vmFormEffectiveEnabled=e.enabled!==!1;let{primaryModel:t,primaryWeight:n,extraTargets:r}=qO(e);this.vmForm={source:e.name||``,target_model:t,target_weight:n,targets:r,strategy:e.strategy||`round_robin`,session_affinity:e.session_affinity!==!1,user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` -`),description:e.description||``,enabled:e.enabled!==!1}}openVirtualModelEditModel(e){if(!e||e.is_alias)return;let t=e.access||{},n=t.override||null,r=n&&Array.isArray(n.user_paths)?n.user_paths:Array.isArray(t.user_paths)?t.user_paths:[],i=MO(e);this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!0,this.vmFormHasExisting=!!n,this.vmFormOriginalSource=i;let a=n?n.enabled!==!1:t.effective_enabled!==!1;this.vmFormDefaultEnabled=t.default_enabled!==!1,this.vmFormEffectiveEnabled=a,this.vmFormManaged=!!(n&&n.managed),this.vmFormDisplayName=e.access_display_name||e.display_name||i||``,this.vmForm={source:i,target_model:``,target_weight:``,targets:[],strategy:`round_robin`,user_paths:r.join(` -`),description:n&&n.description?n.description:``,enabled:a}}openGlobalModelOverrideEdit(){let e=this.findModelOverrideView(`/`),t=e&&Array.isArray(e.user_paths)?e.user_paths:[],n=DO(Nc.models);this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!0,this.vmFormHasExisting=!!e,this.vmFormOriginalSource=`/`,this.vmFormDefaultEnabled=n,this.vmFormEffectiveEnabled=e?e.enabled!==!1:n,this.vmFormManaged=!!(e&&e.managed),this.vmFormDisplayName=`All providers and models`,this.vmForm={source:`/`,target_model:``,target_weight:``,targets:[],strategy:`round_robin`,user_paths:t.join(` -`),description:e&&e.description?e.description:``,enabled:e?e.enabled!==!1:n}}openProviderOverrideEdit(e){!e||!e.access||!e.access.selector||this.openVirtualModelEditModel({display_name:e.display_name,access_display_name:`All models in `+e.display_name,provider_name:e.provider_name,provider_type:e.provider_type,access:e.access,override_selector:e.access.selector,is_alias:!1})}async submitVirtualModelForm(){if(this.vmFormManaged){this.vmFormError=`This virtual model is managed by configuration and cannot be edited here.`;return}let{payload:e,source:t,isRedirect:n,isRename:r}=YO(this.vmForm,this.vmFormOriginalSource,this.vmFormMode);if(!t){this.vmFormError=`Source is required.`;return}if(this.vmFormError=``,this.vmFormMode!==`edit`){let e=this.findExistingAliasByName(t),r=e?null:this.findModelOverrideView(t);if(e||r){let n=e?`A virtual model named "`+e.name+`" already exists. Saving will update that virtual model. Continue?`:`An access policy for "`+t+`" already exists. Saving will update that virtual model. Continue?`;if(!window.confirm(n)){this.vmFormError=`Choose a different source or edit the existing virtual model.`;return}}else if(n){let e=this.findConcreteModelByName(t);if(e){let t=tO(e)||String(e.model&&e.model.id||``).trim();if(!window.confirm(`A model named "`+t+`" already exists. Creating this alias will mask that model in the list. Continue?`)){this.vmFormError=`Choose a different source to avoid masking an existing model.`;return}}}}else if(r){let e=(this.aliases||[]).find(e=>e&&e.name===t)||null,r=e?null:this.findModelOverrideView(t);if(e||r){this.vmFormError=`A virtual model for "`+t+`" already exists. Choose a different source.`;return}if(n){let e=this.findConcreteModelByName(t);if(e){let t=tO(e)||String(e.model&&e.model.id||``).trim();if(!window.confirm(`A model named "`+t+`" already exists. Renaming to that name will mask the model in the list. Continue?`)){this.vmFormError=`Choose a different source to avoid masking an existing model.`;return}}}}this.vmSubmitting=!0;try{let t=await vs(`/admin/virtual-models`,`PUT`,e,{label:`virtual model`});if(t.status===503){this.virtualModelsAvailable=!1,this.vmFormError=`Virtual models feature is unavailable.`;return}if(t.stale)return;if(!t.ok){this.vmFormError=t.status===401?`Authentication required.`:ps(t,`Failed to save virtual model.`);return}let r=!n&&t.status===204;this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),q.success(n?`Alias saved.`:r?`Model access reset to inherited/default.`:`Model access saved.`),Promise.all([Nc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to save virtual model:`,e),this.vmFormError=`Failed to save virtual model.`}finally{this.vmSubmitting=!1}}async deleteVirtualModel(){if(this.vmFormManaged){this.vmFormError=`This virtual model is managed by configuration and cannot be removed here.`;return}let e=String(this.vmForm.source||this.vmFormOriginalSource||``).trim();if(!(!e||!this.vmFormHasExisting)&&window.confirm(`Remove the virtual model for "`+e+`"? This reverts to inherited/default behavior.`)){this.vmDeleting=!0,this.vmFormError=``;try{let t=await vs(`/admin/virtual-models`,`DELETE`,{source:e},{label:`virtual model`});if(t.status===503){this.virtualModelsAvailable=!1,this.vmFormError=`Virtual models feature is unavailable.`;return}if(t.status!==404){if(t.stale)return;if(!t.ok){this.vmFormError=t.status===401?`Authentication required.`:ps(t,`Failed to remove virtual model.`);return}}this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),q.success(`Virtual model removed.`),Promise.all([Nc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to delete virtual model:`,e),this.vmFormError=`Failed to remove virtual model.`}finally{this.vmDeleting=!1}}}},tk=[{value:`input_per_mtok`,label:`Input $/MTok`,group:`Tokens`},{value:`output_per_mtok`,label:`Output $/MTok`,group:`Tokens`},{value:`cached_input_per_mtok`,label:`Cached input $/MTok`,group:`Tokens`},{value:`cache_write_per_mtok`,label:`Cache write $/MTok`,group:`Tokens`},{value:`reasoning_output_per_mtok`,label:`Reasoning output $/MTok`,group:`Tokens`},{value:`batch_input_per_mtok`,label:`Batch input $/MTok`,group:`Batch`},{value:`batch_output_per_mtok`,label:`Batch output $/MTok`,group:`Batch`},{value:`audio_input_per_mtok`,label:`Audio input $/MTok`,group:`Audio`},{value:`audio_output_per_mtok`,label:`Audio output $/MTok`,group:`Audio`},{value:`per_image`,label:`$/Image`,group:`Image`},{value:`input_per_image`,label:`Input $/Image`,group:`Image`},{value:`per_second_input`,label:`Input $/Second`,group:`Audio/Video`},{value:`per_second_output`,label:`Output $/Second`,group:`Video`},{value:`per_character_input`,label:`$/Character`,group:`Audio`},{value:`per_page`,label:`$/Page`,group:`Utility`},{value:`per_request`,label:`$/Request`,group:`Utility`}];function nk(e){let t=tk.find(t=>t.value===e);return t?t.label:String(e||``).replace(/_/g,` `)}function rk(e){return e&&typeof e==`object`?JSON.parse(JSON.stringify(e)):{}}function ik(e,t){let n=rk(e),r=t&&t.pricing?t.pricing:t;if(!r||typeof r!=`object`)return n;for(let e of tk)r[e.value]!==null&&r[e.value]!==void 0&&(n[e.value]=Number(r[e.value]));return Array.isArray(r.tiers)&&r.tiers.length>0&&(n.tiers=rk(r.tiers)),n}function ak(e){switch(String(e||``).trim()){case`config_yaml`:return`config.yaml`;case`model_registry`:return`Model registry`;default:return e?String(e):`Unknown`}}function ok(e){let t=e&&e.pricing?e.pricing:{},n=e&&e.pricing_sources&&typeof e.pricing_sources==`object`?e.pricing_sources:{},r={};for(let e of tk)t[e.value]!==null&&t[e.value]!==void 0&&(r[e.value]=ak(n[e.value]||`model_registry`));return r}function sk(e){let t=String(e&&e.selector||``).trim();return t?`Dashboard/API override (`+t+`)`:`Dashboard/API override`}function ck(e){let t=String(e||``).trim();return t?t+`/`:``}function lk(e){return String(e&&e.model&&e.model.id||``).trim()}function uk(e){let t=String(e&&e.provider_name||``).trim(),n=lk(e);return t&&n?t+`/`+n:n}function dk(e){return lk(e)}function fk(e){let t=new Map;for(let n of Array.isArray(e)?e:[]){let e=String(n&&n.selector||``).trim();e&&t.set(e,n)}return t}function pk(e,t){let n=String(t||``).trim();return n&&fk(e).get(n)||null}function mk(e,t,n){let r=fk(e),i=uk(t),a=dk(t),o=ck(t&&t.provider_name),s=String(n||``).trim();for(let e of[i,a,o,`/`]){if(!e||e===s)continue;let t=r.get(e);if(t)return t}return null}function hk(e,t,n){let r=e&&e.model&&e.model.metadata?e.model.metadata:null,i=rk(r&&r.pricing),a=ok(r),o=mk(t,e,n),s=o&&o.pricing?o.pricing:null;if(s){let e=sk(o);for(let t of tk)s[t.value]!==null&&s[t.value]!==void 0&&(i[t.value]=Number(s[t.value]),a[t.value]=e);Array.isArray(s.tiers)&&s.tiers.length>0&&(i.tiers=rk(s.tiers),a.tiers=e)}return{pricing:i,sources:a}}function gk(e,t){let n=e&&e.pricing?e.pricing:{},r=[];for(let e of tk)n[e.value]!==null&&n[e.value]!==void 0&&r.push({id:t(),field:e.value,value:String(n[e.value])});return r}function _k(e,t){let n=new Set;for(let r of Array.isArray(e)?e:[]){if(t&&r.id===t)continue;let e=String(r.field||``).trim();e&&n.add(e)}return n}function vk(e,t){let n=_k(e,t&&t.id);return tk.filter(e=>e.value===(t&&t.field)||!n.has(e.value))}function yk(e,t){let n={},r=new Set;for(let t of Array.isArray(e)?e:[]){let e=String(t.field||``).trim();if(!e)return{error:`Choose a price type for every row.`};if(r.has(e))return{error:`Each price type can only be used once.`};r.add(e);let i=String(t.value||``).trim();if(i===``)return{error:`Enter a value for `+nk(e)+`.`};let a=Number(i);if(!Number.isFinite(a)||a<0)return{error:`Pricing values must be numbers greater than or equal to 0.`};n[e]=a}let i=Array.isArray(t)?t:[];return i.length>0&&(n.tiers=rk(i)),Object.keys(n).length===0?{error:`Add at least one pricing field before saving.`}:{pricing:n}}function bk(e,t,n){let r=e||{},i=t||{},a=n||{},o=ik(r,a);return tk.map(e=>{let t=a[e.value]!==null&&a[e.value]!==void 0,n=r[e.value]!==null&&r[e.value]!==void 0;return{field:e.value,label:e.label,value:o[e.value],source:t?`Form/API value`:n?i[e.value]||`Model registry`:`Unset`}}).filter(e=>e.source!==`Unset`||e.value!==void 0)}var xk=new class{#e=k(!0);get modelPricingOverridesAvailable(){return I(this.#e)}set modelPricingOverridesAvailable(e){A(this.#e,e,!0)}#t=k(j([]));get modelPricingOverrideViews(){return I(this.#t)}set modelPricingOverrideViews(e){A(this.#t,e,!0)}#n=k(``);get modelPricingOverrideError(){return I(this.#n)}set modelPricingOverrideError(e){A(this.#n,e,!0)}#r=k(!1);get modelPricingOverrideFormOpen(){return I(this.#r)}set modelPricingOverrideFormOpen(e){A(this.#r,e,!0)}#i=k(!1);get modelPricingOverrideSubmitting(){return I(this.#i)}set modelPricingOverrideSubmitting(e){A(this.#i,e,!0)}#a=k(!1);get modelPricingOverrideFormHasExistingOverride(){return I(this.#a)}set modelPricingOverrideFormHasExistingOverride(e){A(this.#a,e,!0)}#o=k(``);get modelPricingOverrideFormDisplayName(){return I(this.#o)}set modelPricingOverrideFormDisplayName(e){A(this.#o,e,!0)}#s=k(``);get modelPricingOverrideFormScope(){return I(this.#s)}set modelPricingOverrideFormScope(e){A(this.#s,e,!0)}#c=k(j([]));get modelPricingOverrideFormScopeOptions(){return I(this.#c)}set modelPricingOverrideFormScopeOptions(e){A(this.#c,e,!0)}#l=k(null);get modelPricingOverrideFormRow(){return I(this.#l)}set modelPricingOverrideFormRow(e){A(this.#l,e,!0)}#u=k(null);get modelPricingOverrideFormBasePricing(){return I(this.#u)}set modelPricingOverrideFormBasePricing(e){A(this.#u,e,!0)}#d=k(null);get modelPricingOverrideFormBasePricingSources(){return I(this.#d)}set modelPricingOverrideFormBasePricingSources(e){A(this.#d,e,!0)}#f=k(j([]));get modelPricingOverrideFormPreservedTiers(){return I(this.#f)}set modelPricingOverrideFormPreservedTiers(e){A(this.#f,e,!0)}#p=k(j([]));get modelPricingOverrideRows(){return I(this.#p)}set modelPricingOverrideRows(e){A(this.#p,e,!0)}#m=k(j({selector:``}));get modelPricingOverrideForm(){return I(this.#m)}set modelPricingOverrideForm(e){A(this.#m,e,!0)}_modelPricingOverrideRowID=0;pricingFieldOptions(){return tk}pricingFieldLabel(e){return nk(e)}async fetchModelPricingOverrides(){this.modelPricingOverrideError=``;try{let e=await _s(`/admin/model-pricing-overrides`,{label:`model pricing overrides`});if(e.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideViews=[];return}if(e.stale)return;if(this.modelPricingOverridesAvailable=!0,!e.ok){this.modelPricingOverrideViews=[];return}this.modelPricingOverrideViews=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch model pricing overrides:`,e),this.modelPricingOverrideViews=[],this.modelPricingOverrideError=`Unable to load model pricing overrides.`}}findModelPricingOverrideView(e){return pk(this.modelPricingOverrideViews,e)}hasGlobalPricingOverride(){return!!this.findModelPricingOverrideView(`/`)}hasProviderPricingOverride(e){return!!this.findModelPricingOverrideView(ck(e&&e.provider_name))}hasModelPricingOverride(e){return!!this.findModelPricingOverrideView(uk(e))}modelPricingButtonClass(e){return e?`table-action-btn-active`:``}modelPricingButtonLabel(e,t){let n=`Edit `+String(e||`model pricing`);return t?n+` (override exists)`:n}modelRowPricing(e){return hk(e,this.modelPricingOverrideViews).pricing}openGlobalPricingOverrideEdit(){this.openModelPricingOverrideForm({displayName:`All providers and models`,selector:`/`,scope:`global`,scopeOptions:[{value:`global`,label:`All providers and models`,selector:`/`}],row:null})}openProviderPricingOverrideEdit(e){let t=ck(e&&e.provider_name);t&&this.openModelPricingOverrideForm({displayName:`All models in `+(e.display_name||e.provider_name||t),selector:t,scope:`provider`,scopeOptions:[{value:`provider`,label:`Provider`,selector:t}],row:null})}openModelPricingOverrideEdit(e){if(!e||e.is_alias)return;let t=uk(e),n=dk(e),r=[{value:`exact`,label:`This provider and model`,selector:t}];n&&n!==t&&r.push({value:`model`,label:`This model across providers`,selector:n}),this.openModelPricingOverrideForm({displayName:e.display_name||t,selector:t,scope:`exact`,scopeOptions:r,row:e})}openModelPricingOverrideForm(e){let t=e||{};this.modelPricingOverrideFormOpen=!0,this.modelPricingOverrideError=``,this.modelPricingOverrideFormDisplayName=t.displayName||t.selector||`Pricing`,this.modelPricingOverrideFormScope=t.scope||``,this.modelPricingOverrideFormScopeOptions=Array.isArray(t.scopeOptions)?t.scopeOptions:[],this.modelPricingOverrideFormRow=t.row||null,this.modelPricingOverrideForm={selector:t.selector||``},this.loadModelPricingOverrideFormSelector(t.selector||``)}loadModelPricingOverrideFormSelector(e){e=String(e||``).trim();let t=this.findModelPricingOverrideView(e);this.modelPricingOverrideFormHasExistingOverride=!!t,this.modelPricingOverrideRows=gk(t,()=>this.nextModelPricingOverrideRowID()),this.modelPricingOverrideFormPreservedTiers=t&&t.pricing&&Array.isArray(t.pricing.tiers)?rk(t.pricing.tiers):[],this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow();let n=this.modelPricingOverrideFormRow,r=n?hk(n,this.modelPricingOverrideViews,e):{pricing:{},sources:{}};this.modelPricingOverrideFormBasePricing=r.pricing,this.modelPricingOverrideFormBasePricingSources=r.sources}setModelPricingOverrideScope(e){this.modelPricingOverrideFormScope=e;let t=this.modelPricingOverrideFormScopeOptions.find(t=>t.value===e);t&&(this.modelPricingOverrideForm.selector=t.selector,this.loadModelPricingOverrideFormSelector(t.selector))}nextModelPricingOverrideRowID(){return this._modelPricingOverrideRowID=(this._modelPricingOverrideRowID||0)+1,`pricing-row-`+this._modelPricingOverrideRowID}availablePricingFieldOptions(e){return vk(this.modelPricingOverrideRows,e)}addModelPricingOverrideRow(){let e=_k(this.modelPricingOverrideRows),t=tk.find(t=>!e.has(t.value))||tk[0];t&&this.modelPricingOverrideRows.push({id:this.nextModelPricingOverrideRowID(),field:t.value,value:``})}removeModelPricingOverrideRow(e){this.modelPricingOverrideRows=this.modelPricingOverrideRows.filter(t=>t.id!==e.id),this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow()}modelPricingOverridePayload(){return yk(this.modelPricingOverrideRows,this.modelPricingOverrideFormPreservedTiers)}modelPricingOverrideDraftPricing(){let e=this.modelPricingOverridePayload();return e&&e.pricing?e.pricing:{}}modelPricingEffectivePreviewRows(){return bk(this.modelPricingOverrideFormBasePricing,this.modelPricingOverrideFormBasePricingSources,this.modelPricingOverrideDraftPricing())}closeModelPricingOverrideForm(){this.modelPricingOverrideFormOpen=!1,this.modelPricingOverrideSubmitting=!1,this.modelPricingOverrideError=``,this.modelPricingOverrideFormHasExistingOverride=!1,this.modelPricingOverrideFormDisplayName=``,this.modelPricingOverrideFormScope=``,this.modelPricingOverrideFormScopeOptions=[],this.modelPricingOverrideFormRow=null,this.modelPricingOverrideFormBasePricing=null,this.modelPricingOverrideFormBasePricingSources=null,this.modelPricingOverrideFormPreservedTiers=[],this.modelPricingOverrideRows=[],this.modelPricingOverrideForm={selector:``}}async submitModelPricingOverrideForm(){let e=String(this.modelPricingOverrideForm.selector||``).trim();if(!e){this.modelPricingOverrideError=`Model pricing selector is required.`;return}let t=this.modelPricingOverridePayload();if(t.error){this.modelPricingOverrideError=t.error;return}let n={selector:e,...t};this.modelPricingOverrideSubmitting=!0,this.modelPricingOverrideError=``;try{let e=await vs(`/admin/model-pricing-overrides`,`PUT`,n,{label:`model pricing override`});if(e.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideError=`Model pricing overrides feature is unavailable.`;return}if(e.stale)return;if(!e.ok){this.modelPricingOverrideError=e.status===401?`Authentication required.`:ps(e,`Failed to save model pricing.`);return}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),q.success(`Model pricing saved.`),this.fetchModelPricingOverrides()}catch(e){console.error(`Failed to save model pricing override:`,e),this.modelPricingOverrideError=`Failed to save model pricing.`}finally{this.modelPricingOverrideSubmitting=!1}}async deleteModelPricingOverride(){let e=String(this.modelPricingOverrideForm.selector||``).trim();if(!(!e||!this.modelPricingOverrideFormHasExistingOverride)&&window.confirm(`Remove the model pricing override for "`+e+`"?`)){this.modelPricingOverrideSubmitting=!0,this.modelPricingOverrideError=``;try{let t=await vs(`/admin/model-pricing-overrides`,`DELETE`,{selector:e},{label:`model pricing override`});if(t.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideError=`Model pricing overrides feature is unavailable.`;return}if(t.status!==404){if(t.stale)return;if(!t.ok){this.modelPricingOverrideError=t.status===401?`Authentication required.`:ps(t,`Failed to remove model pricing override.`);return}}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),q.success(`Model pricing override removed.`),this.fetchModelPricingOverrides()}catch(e){console.error(`Failed to delete model pricing override:`,e),this.modelPricingOverrideError=`Failed to remove model pricing override.`}finally{this.modelPricingOverrideSubmitting=!1}}}},Sk=R(``);function Ck(e,t){E(t,!0);var n=Sk();let r;var i=P(M(n),2),a=M(i,!0);T(i),T(n),F((e,i,o)=>{r=U(n,1,`alias-toggle`,null,r,e),n.disabled=ek.rowTogglingKey===t.row.key||!ek.virtualModelsAvailable,W(n,`aria-label`,i),B(a,o)},[()=>({enabled:ek.rowToggleEnabled(t.row),restricted:ek.rowToggleRestricted(t.row)}),()=>ek.rowToggleAriaLabel(t.row),()=>ek.rowToggleLabel(t.row)]),L(`click`,n,()=>ek.toggleRowEnabled(t.row)),z(e,n),D()}Hr([`click`]);var wk=R(`
`);function Tk(e,t){E(t,!0);var n=wk(),r=M(n),i=e=>{Ck(e,{get row(){return ek.globalScopeRow}})};V(r,e=>{ek.virtualModelsAvailable&&e(i)});var a=P(r,2),o=e=>{{let t=O(()=>xk.modelPricingButtonLabel(`global model pricing`,xk.hasGlobalPricingOverride())),n=O(()=>xk.modelPricingButtonClass(xk.hasGlobalPricingOverride()));gT(e,{get label(){return I(t)},get class(){return`table-icon-btn ${I(n)??``}`},onclick:()=>xk.openGlobalPricingOverrideEdit(),children:(e,t)=>{G(e,{get icon(){return qa},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(a,e=>{xk.modelPricingOverridesAvailable&&e(o)});var s=P(a,2),c=e=>{{let t=O(()=>BO(`global model access`,ek.hasGlobalModelOverride())),n=O(()=>zO(ek.hasGlobalModelOverride()));gT(e,{get label(){return I(t)},get class(){return`table-icon-btn ${I(n)??``}`},onclick:()=>ek.openGlobalModelOverrideEdit(),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(s,e=>{ek.virtualModelsAvailable&&e(c)}),T(n),z(e,n),D()}function Ek(e){return String(e&&(e.primary_model||e.source)||``).trim()}function Dk(e){return Array.isArray(e&&e.fallback_models)?e.fallback_models:Array.isArray(e&&e.targets)?e.targets:[]}function Ok(e){return Array.isArray(e)?e.map(e=>({...e,source:Ek(e),targets:Dk(e)})):[]}function kk(e){let t=Dk(e);return t.length===0?`-`:t.join(`, `)}function Ak(e){return e&&e.enabled===!1?`Off`:e&&e.managed?`Config`:`On`}function jk(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>Ek(e)===n)||null}function Mk(e,t){if(!t||t.is_alias)return!1;let n=jk(e,tO(t));return!!(n&&n.enabled!==!1&&Dk(n).length>0)}function Nk(e,t){return Mk(e,t)?`table-action-btn-failover-active`:``}function Pk(e,t){let n=`Edit failover for `+(t&&t.display_name?t.display_name:`model`);return Mk(e,t)?n+` (active)`:n}function Fk(e){let t=[e&&e.target_model];return(Array.isArray(e&&e.targets)?e.targets:[]).forEach(e=>t.push(e&&e.model)),t.map(e=>String(e||``).trim()).filter(Boolean)}function Ik(e){let t=Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(Boolean):[];return{target_model:t[0]||``,targets:t.slice(1).map(e=>({model:e}))}}function Lk(e){return{primary_model:String(e&&e.source||``).trim(),fallback_models:Fk(e),enabled:!(e&&e.enabled===!1)}}function Rk(e){return Ek(e)}function zk(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=Rk(e);n&&(t[n]=!0)}),t}function Bk(e,t){let n=Rk(t);return!!(n&&e&&e[n])}function Vk(e,t){return(Array.isArray(e)?e:[]).filter(e=>Bk(t,e))}function Hk(e,t){let n=Array.isArray(e)?e:[];return n.length>0&&Vk(n,t).length===n.length}function Uk(e){return[Ek(e),Dk(e).join(` `)].join(` `).toLowerCase()}function Wk(e,t){let n=Array.isArray(e)?e:[],r=String(t||``).trim().toLowerCase();return r?n.filter(e=>Uk(e).includes(r)):n}function Gk(e){return{primary_model:Ek(e),fallback_models:Dk(e).map(e=>String(e||``).trim()).filter(Boolean),enabled:!!(e&&e.enabled!==!1)}}function Kk(){return{source:``,target_model:``,targets:[],enabled:!0}}var Z=new class{#e=k(!0);get failoverAvailable(){return I(this.#e)}set failoverAvailable(e){A(this.#e,e,!0)}#t=k(j([]));get failoverRules(){return I(this.#t)}set failoverRules(e){A(this.#t,e,!0)}#n=k(!1);get failoverLoading(){return I(this.#n)}set failoverLoading(e){A(this.#n,e,!0)}#r=k(!1);get failoverSaving(){return I(this.#r)}set failoverSaving(e){A(this.#r,e,!0)}#i=k(!1);get failoverGenerating(){return I(this.#i)}set failoverGenerating(e){A(this.#i,e,!0)}#a=k(``);get failoverError(){return I(this.#a)}set failoverError(e){A(this.#a,e,!0)}#o=k(j([]));get failoverGeneratedRules(){return I(this.#o)}set failoverGeneratedRules(e){A(this.#o,e,!0)}#s=k(!1);get failoverDraftsOpen(){return I(this.#s)}set failoverDraftsOpen(e){A(this.#s,e,!0)}#c=k(j({}));get failoverDraftSelections(){return I(this.#c)}set failoverDraftSelections(e){A(this.#c,e,!0)}#l=k(``);get failoverDraftFilter(){return I(this.#l)}set failoverDraftFilter(e){A(this.#l,e,!0)}#u=k(!1);get failoverDraftSaving(){return I(this.#u)}set failoverDraftSaving(e){A(this.#u,e,!0)}#d=k(!1);get failoverFormOpen(){return I(this.#d)}set failoverFormOpen(e){A(this.#d,e,!0)}#f=k(`create`);get failoverFormMode(){return I(this.#f)}set failoverFormMode(e){A(this.#f,e,!0)}#p=k(!1);get failoverFormManaged(){return I(this.#p)}set failoverFormManaged(e){A(this.#p,e,!0)}#m=k(j(Kk()));get failoverForm(){return I(this.#m)}set failoverForm(e){A(this.#m,e,!0)}failoverEnabled(){return Ss.booleanFlag(`FAILOVER_ENABLED`,!0)}async fetchFailoverRules(){if(!this.failoverEnabled()){this.failoverAvailable=!1,this.failoverRules=[],this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,this.failoverError=``,this.failoverLoading=!1;return}this.failoverLoading=!0,this.failoverError=``;try{let e=await _s(`/admin/failover`,{label:`failover mappings`});if(e.status===503){this.failoverAvailable=!1,this.failoverRules=[];return}if(e.stale)return;if(this.failoverAvailable=!0,!e.ok){this.failoverRules=[];return}this.failoverRules=Ok(e.data)}catch(e){console.error(`Failed to fetch failover mappings:`,e),this.failoverRules=[],this.failoverError=`Unable to load failover mappings.`}finally{this.failoverLoading=!1}}resetFailoverForm(){this.failoverFormMode=`create`,this.failoverFormManaged=!1,this.failoverForm=Kk()}openFailoverCreate(){this.resetFailoverForm(),this.failoverFormOpen=!0,this.focusFailoverEditor()}openFailoverEdit(e){if(!e)return;this.resetFailoverForm(),this.failoverFormMode=`edit`,this.failoverFormOpen=!0,this.failoverFormManaged=!!e.managed;let t=this.failoverPrimaryModel(e),n=this.failoverTargets(e);this.failoverForm={source:t,target_model:n[0]||``,targets:n.slice(1).map(e=>({model:e})),enabled:e.enabled!==!1},this.focusFailoverEditor()}openFailoverForModel(e){if(!e||e.is_alias)return;let t=this.qualifiedModelName(e),n=this.failoverRules.find(e=>this.failoverPrimaryModel(e)===t);if(n){this.openFailoverEdit(n);return}this.resetFailoverForm(),this.failoverFormMode=`create`,this.failoverFormOpen=!0,this.failoverForm.source=t,this.focusFailoverEditor()}closeFailoverForm(){this.failoverFormOpen=!1}closeFailoverDraftsModal(){this.failoverDraftSaving||(this.failoverDraftsOpen=!1)}failoverFormTargets(){return Fk(this.failoverForm)}setFailoverFormTargets(e){let t=Ik(e);this.failoverForm.target_model=t.target_model,this.failoverForm.targets=t.targets}addFailoverTarget(){Array.isArray(this.failoverForm.targets)||(this.failoverForm.targets=[]),this.failoverForm.targets.push({model:``}),this.focusFailoverEditor()}removeFailoverTarget(e){if(!Array.isArray(this.failoverForm.targets)){this.failoverForm.targets=[];return}this.failoverForm.targets.splice(e,1)}removePrimaryFailoverTarget(){let e=Array.isArray(this.failoverForm.targets)?this.failoverForm.targets:[];if(e.length>0){let t=e.shift();this.failoverForm.target_model=t&&t.model?t.model:``,this.failoverForm.targets=e;return}this.failoverForm.target_model=``}failoverRulePayload(){return Lk(this.failoverForm)}async submitFailoverForm(){if(this.failoverSaving||this.failoverGenerating||this.failoverFormManaged)return;let e=this.failoverRulePayload();if(!e.primary_model){this.failoverError=`Primary model is required.`;return}if(e.enabled&&e.fallback_models.length===0){this.failoverError=`Add at least one failover target.`;return}this.failoverSaving=!0,this.failoverError=``;try{let t=await vs(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to save failover mapping.`;return}q.success(`Failover mapping saved.`),this.closeFailoverForm(),this.fetchFailoverRules()}catch(e){console.error(`Failed to save failover mapping:`,e),this.failoverError=`Failed to save failover mapping.`}finally{this.failoverSaving=!1}}async deleteFailoverRule(e){let t=String(e&&this.failoverPrimaryModel(e)||this.failoverForm.source||``).trim();if(!(!t||this.failoverSaving||this.failoverGenerating)&&confirm(`Remove failover mapping for "`+t+`"?`)){this.failoverSaving=!0,this.failoverError=``;try{let e=await vs(`/admin/failover`,`DELETE`,{primary_model:t},{label:`failover mapping`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mapping.`;return}q.success(`Failover mapping removed.`),this.closeFailoverForm(),this.fetchFailoverRules()}catch(e){console.error(`Failed to remove failover mapping:`,e),this.failoverError=`Failed to remove failover mapping.`}finally{this.failoverSaving=!1}}}async generateFailoverForForm(){if(this.failoverGenerating||this.failoverSaving||this.failoverFormManaged)return;let e=String(this.failoverForm.source||``).trim();if(!e){this.failoverError=`Primary model is required.`;return}this.failoverGenerating=!0,this.failoverError=``;try{let t=await vs(`/admin/failover/generate`,`POST`,{primary_model:e},{label:`failover generation`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to generate failover mapping.`;return}let n=Ok(t.data),r=n.find(t=>this.failoverPrimaryModel(t)===e)||n[0]||null,i=this.failoverTargets(r);if(i.length===0){this.failoverError=`No failover suggestions were generated for this model.`;return}this.setFailoverFormTargets(i),q.success(`Generated `+i.length+` fallback model`+(i.length===1?`.`:`s.`)),this.focusFailoverEditor()}catch(e){console.error(`Failed to generate failover mapping:`,e),this.failoverError=`Failed to generate failover mapping.`}finally{this.failoverGenerating=!1}}openFailoverResetDialog(){Rs.open({title:`Remove failover models`,titleId:`failoverResetDialogTitle`,inputId:`failover-reset-confirmation`,message:`Remove every dashboard-managed failover mapping. Configuration-managed mappings remain active.`,requiredText:`remove`,confirmLabel:`Remove Failover`,icon:Ao,dialogClass:`budget-reset-dialog`,onConfirm:async()=>{await this.resetFailoverRules(),this.failoverError&&(Rs.error=this.failoverError)}})}async resetFailoverRules(){if(!this.failoverSaving){this.failoverSaving=!0,this.failoverError=``;try{let e=await vs(`/admin/failover/reset`,`POST`,void 0,{label:`failover removal`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mappings.`;return}this.failoverRules=Ok(e.data),this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,q.success(`Dashboard-managed failover mappings removed.`),Rs.close()}catch(e){console.error(`Failed to remove failover mappings:`,e),this.failoverError=`Failed to remove failover mappings.`}finally{this.failoverSaving=!1}}}async generateFailoverRules(){if(!(this.failoverGenerating||this.failoverDraftSaving)){this.failoverGenerating=!0,this.failoverError=``,this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!0;try{let e=await vs(`/admin/failover/generate`,`POST`,void 0,{label:`failover generation`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to generate failover mappings.`;return}this.failoverGeneratedRules=Ok(e.data),this.selectAllFailoverDrafts(this.failoverGeneratedRules)}catch(e){console.error(`Failed to generate failover mappings:`,e),this.failoverError=`Failed to generate failover mappings.`}finally{this.failoverGenerating=!1}}}failoverDraftKey(e){return Rk(e)}selectAllFailoverDrafts(e){this.failoverDraftSelections=zk(e)}failoverDraftSelected(e){return Bk(this.failoverDraftSelections,e)}setFailoverDraftSelected(e,t){let n=this.failoverDraftKey(e);n&&(this.failoverDraftSelections={...this.failoverDraftSelections,[n]:!!t})}selectedFailoverDrafts(){return Vk(this.failoverGeneratedRules,this.failoverDraftSelections)}selectedFailoverDraftCount(){return this.selectedFailoverDrafts().length}failoverDraftCountLabel(){return this.selectedFailoverDraftCount()+` / `+this.failoverGeneratedRules.length+` selected`}allFailoverDraftsSelected(){return Hk(this.failoverGeneratedRules,this.failoverDraftSelections)}toggleAllFailoverDrafts(){if(!(this.failoverDraftSaving||this.failoverGenerating||this.failoverGeneratedRules.length===0)){if(this.allFailoverDraftsSelected()){this.failoverDraftSelections={};return}this.selectAllFailoverDrafts(this.failoverGeneratedRules)}}failoverDraftSearchText(e){return Uk(e)}filteredFailoverDrafts(){return Wk(this.failoverGeneratedRules,this.failoverDraftFilter)}failoverDraftPayload(e){return Gk(e)}async saveSelectedFailoverDrafts(){if(this.failoverDraftSaving||this.failoverGenerating)return;let e=this.selectedFailoverDrafts();if(e.length===0){this.failoverError=`Select at least one failover draft.`;return}this.failoverDraftSaving=!0,this.failoverError=``;try{for(let t of e){let e=this.failoverDraftPayload(t);if(!e.primary_model||e.fallback_models.length===0){this.failoverError=`Generated failover draft is missing model data.`;return}let n=await vs(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(n.stale)return;if(!n.ok){this.failoverError=`Failed to save failover mapping.`;return}}q.success(`Saved `+e.length+` failover mapping`+(e.length===1?`.`:`s.`)),this.failoverDraftsOpen=!1,this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.fetchFailoverRules()}catch(e){console.error(`Failed to save generated failover mappings:`,e),this.failoverError=`Failed to save failover mappings.`}finally{this.failoverDraftSaving=!1}}focusFailoverEditor(){setTimeout(()=>{let e=document.querySelector(`[data-failover-editor]`),t=e&&e.querySelector?e.querySelector(`[data-modal-autofocus], input:not([disabled]), textarea:not([disabled]), button:not([disabled])`):null;t&&typeof t.focus==`function`&&t.focus({preventScroll:!0})},0)}failoverTargetLabel(e){return kk(e)}failoverPrimaryModel(e){return Ek(e)}failoverTargets(e){return Dk(e)}findFailoverMapping(e){return jk(this.failoverRules,e)}hasActiveFailoverMapping(e){return Mk(this.failoverRules,e)}failoverButtonClass(e){return Nk(this.failoverRules,e)}failoverButtonLabel(e){return Pk(this.failoverRules,e)}normalizeFailoverRules(e){return Ok(e)}failoverRuleStatus(e){return Ak(e)}qualifiedModelName(e){return tO(e)}},qk=R(``),Jk=R(``),Yk=R(`Config`),Xk=R(`
Targets
`),Zk=R(``),Qk=R(`
Redirects to
`),$k=R(` `),eA=R(`
`),tA=R(`
`),nA=R(`
`);function rA(e,t){E(t,!0);let n=O(()=>xk.modelRowPricing(t.row));var r=nA(),i=M(r),a=M(i),o=M(a),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=e=>{z(e,qk())};V(l,e=>{t.row.is_alias&&e(u)});var d=P(l,2),f=e=>{z(e,Jk())};V(d,e=>{!t.row.is_alias&&t.row.masking_alias&&e(f)});var p=P(d,2),m=e=>{z(e,Yk())},h=O(()=>LO(t.row));V(p,e=>{I(h)&&e(m)}),T(o);var g=P(o,2),_=e=>{var n=Xk(),r=P(M(n)),i=M(r,!0);T(r),T(n),F(()=>B(i,t.row.secondary_name)),z(e,n)};V(g,e=>{t.row.is_alias&&e(_)});var v=P(g,2),y=e=>{var n=Qk(),r=P(M(n)),i=M(r,!0);T(r);var a=P(r,2),o=e=>{var n=Zk();F(e=>{W(n,`aria-label`,ek.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),W(n,`title`,ek.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),n.disabled=e},[()=>!!ek.rowDeletingKey]),L(`click`,n,()=>ek.removeRedirectRow(t.row)),z(e,n)},s=O(()=>ek.virtualModelsAvailable&&FO(t.row));V(a,e=>{I(s)&&e(o)}),T(n),F(e=>B(i,e),[()=>mO(t.row.masking_alias)]),z(e,n)};V(v,e=>{!t.row.is_alias&&t.row.masking_alias&&e(y)}),T(a),T(i);var b=P(i);H(b,17,()=>t.columns,oi,(e,r)=>{var i=$k(),a=M(i,!0);T(i),F(e=>{U(i,1,Fi(I(r).class),`svelte-1iynym`),B(a,e)},[()=>I(r).value(t.row,I(n))]),z(e,i)});var x=P(b),S=M(x),C=e=>{var n=eA(),r=M(n);Ck(r,{get row(){return t.row}});var i=P(r,2),a=e=>{{let n=O(()=>ek.rowDeletingKey===t.row.key?`Removing alias `+t.row.alias.name:`Remove alias `+t.row.alias.name),r=O(()=>!!ek.rowDeletingKey);gT(e,{get label(){return I(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>ek.removeAliasRow(t.row),get disabled(){return I(r)},children:(e,t)=>{G(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})}},o=O(()=>ek.virtualModelsAvailable&&PO(t.row));V(i,e=>{I(o)&&e(a)});var s=P(i,2),c=e=>{{let n=O(()=>`Edit alias `+t.row.alias.name);gT(e,{get label(){return I(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>ek.openVirtualModelEditAlias(t.row.alias),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(s,e=>{ek.virtualModelsAvailable&&e(c)}),T(n),z(e,n)},w=e=>{var n=tA(),r=M(n);Ck(r,{get row(){return t.row}});var i=P(r,2),a=e=>{{let n=O(()=>xk.modelPricingButtonLabel(`model pricing for `+t.row.display_name,xk.hasModelPricingOverride(t.row))),r=O(()=>xk.modelPricingButtonClass(xk.hasModelPricingOverride(t.row)));gT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>xk.openModelPricingOverrideEdit(t.row),children:(e,t)=>{G(e,{get icon(){return qa},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(i,e=>{xk.modelPricingOverridesAvailable&&e(a)});var o=P(i,2),s=e=>{{let n=O(()=>Z.failoverButtonLabel(t.row)),r=O(()=>Z.failoverButtonClass(t.row));gT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>Z.openFailoverForModel(t.row),children:(e,t)=>{G(e,{get icon(){return Eo},class:`table-icon-svg`})},$$slots:{default:!0}})}},c=O(()=>Z.failoverAvailable&&Z.failoverEnabled());V(o,e=>{I(c)&&e(s)});var l=P(o,2),u=e=>{{let n=O(()=>X.rateLimitGaugeTitle(t.row.display_name,X.rateLimitGaugeClassForModel(t.row))),r=O(()=>X.rateLimitGaugeClassForModel(t.row));gT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>X.openRateLimitInspectorForModel(t.row),children:(e,t)=>{G(e,{get icon(){return $a},class:`table-icon-svg`})},$$slots:{default:!0}})}},d=O(()=>X.rateLimitsEnabled()&&X.rateLimitInspectorModelID(t.row));V(l,e=>{I(d)&&e(u)});var f=P(l,2),p=e=>{{let n=O(()=>`Edit redirect for `+t.row.display_name);gT(e,{get label(){return I(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>ek.openVirtualModelEditAlias(t.row.masking_alias),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(f,e=>{ek.virtualModelsAvailable&&t.row.masking_alias&&t.row.masking_alias.name&&e(p)});var m=P(f,2),h=e=>{{let n=O(()=>BO(`model access for `+t.row.display_name,RO(t.row.access))),r=O(()=>zO(RO(t.row.access)));gT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>ek.openVirtualModelEditModel(t.row),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(m,e=>{ek.virtualModelsAvailable&&!t.row.masking_alias&&e(h)}),T(n),z(e,n)};V(S,e=>{t.row.is_alias?e(C):e(w,-1)}),T(x),T(r),F((e,n)=>{W(r,`id`,e),U(r,1,n,`svelte-1iynym`),B(c,t.row.display_name)},[()=>IO(t.row)||void 0,()=>Fi(NO(t.row))]),z(e,r),D()}Hr([`click`]);var iA={headerLines:[`Modes`],value:e=>(e.model?.metadata?.modes??[]).join(`, `)||`-`};function aA(e,t){return{headerLines:e,class:`col-price`,value:t}}var oA=aA([`Input / Output ($/MTok)`],(e,t)=>cc(t?.input_per_mtok)+` / `+cc(t?.output_per_mtok)),sA={all:[oA],text_generation:[iA,oA,aA([`Cached $/MTok`],(e,t)=>cc(t?.cached_input_per_mtok))],embedding:[aA([`Input`,`$/MTok`],(e,t)=>cc(t?.input_per_mtok))],image:[aA([`$/Image`],(e,t)=>lc(t?.per_image))],audio:[aA([`$/Second`],(e,t)=>lc(t?.per_second_input)),aA([`$/Character`],(e,t)=>lc(t?.per_character_input))],video:[aA([`$/Second (In)`],(e,t)=>lc(t?.per_second_input)),aA([`$/Second (Out)`],(e,t)=>lc(t?.per_second_output))],utility:[aA([`$/Page`],(e,t)=>lc(t?.per_page)),aA([`$/Request`],(e,t)=>lc(t?.per_request))]};function cA(e){return sA[e]||sA.all}function lA(e){return cA(e).length+2}var uA=R(`
`),dA=R(` `,1),fA=R(``),pA=R(` `),mA=R(` `),hA=R(`
`),gA=R(`
`),_A=R(`
Model
`);function vA(e,t){E(t,!0);let n=O(()=>Nc.activeCategory||`all`),r=O(()=>cA(I(n))),i=O(()=>lA(I(n)));var a=_A(),o=M(a),s=M(o),c=M(s),l=P(M(c));H(l,17,()=>I(r),oi,(e,t)=>{var n=fA();H(n,21,()=>I(t).headerLines,oi,(e,t,n)=>{var r=dA(),i=N(r),a=e=>{z(e,uA())};V(i,e=>{n>0&&e(a)});var o=P(i,1,!0);F(()=>B(o,I(t))),z(e,r)}),T(n),F(()=>U(n,1,Fi(I(t).class),`svelte-1911hy6`)),z(e,n)});var u=P(l);Tk(M(u),{}),T(u),T(c),T(s),H(P(s),17,()=>ek.filteredDisplayModelGroups,e=>e.key,(e,t)=>{var n=gA(),a=M(n),o=M(a),s=M(o),c=M(s),l=M(c),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=e=>{var n=pA(),r=M(n,!0);T(n),F(()=>B(r,`(`+I(t).type_label+`)`)),z(e,n)};V(f,e=>{I(t).type_label&&e(p)});var m=P(f,2),h=e=>{var n=mA(),r=M(n,!0);T(n),F(()=>B(r,I(t).item_count_label)),z(e,n)};V(m,e=>{I(t).item_count_label&&e(h)}),T(l);var g=P(l,2),_=e=>{var n=hA(),r=M(n,!0);T(n),F(()=>B(r,I(t).access_summary)),z(e,n)};V(g,e=>{I(t).access_summary&&e(_)}),T(c);var v=P(c,2),y=M(v),b=e=>{Ck(e,{get row(){return I(t)}})};V(y,e=>{I(t).access.selector&&e(b)});var x=P(y,2),S=e=>{{let n=O(()=>xk.modelPricingButtonLabel(`provider pricing for `+I(t).display_name,xk.hasProviderPricingOverride(I(t)))),r=O(()=>xk.modelPricingButtonClass(xk.hasProviderPricingOverride(I(t))));gT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>xk.openProviderPricingOverrideEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return qa},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(x,e=>{xk.modelPricingOverridesAvailable&&I(t).provider_name&&e(S)});var C=P(x,2),w=e=>{{let n=O(()=>X.rateLimitGaugeTitle(`provider `+I(t).display_name,X.rateLimitGaugeClassForProvider(I(t)))),r=O(()=>X.rateLimitGaugeClassForProvider(I(t)));gT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>X.openRateLimitInspectorForProvider(I(t)),children:(e,t)=>{G(e,{get icon(){return $a},class:`table-icon-svg`})},$$slots:{default:!0}})}},ee=O(()=>X.rateLimitsEnabled()&&I(t).provider_name);V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{{let n=O(()=>BO(`provider access for `+I(t).display_name,RO(I(t).access))),r=O(()=>zO(RO(I(t).access)));gT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>ek.openProviderOverrideEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(te,e=>{ek.virtualModelsAvailable&&I(t).access.selector&&e(ne)}),T(v),T(s),T(o),T(a),H(P(a),17,()=>I(t).rows,e=>e.key,(e,t)=>{rA(e,{get row(){return I(t)},get columns(){return I(r)}})}),T(n),F(()=>{W(o,`colspan`,I(i)),B(d,I(t).display_name)}),z(e,n)}),T(o),T(a),z(e,a),D()}var yA=R(``);function bA(e,t){let n=ya(t,`enabled`,3,!1),r=ya(t,`label`,3,``),i=ya(t,`disabled`,3,!1),a=ya(t,`restricted`,3,!1);var o=yA();let s;var c=P(M(o),2),l=M(c,!0);T(c),T(o),F(()=>{s=U(o,1,`alias-toggle`,null,s,{enabled:n(),restricted:a()}),o.disabled=i(),W(o,`aria-label`,(n()?`Disable `:`Enable `)+r()),B(l,t.text??(n()?`Enabled`:`Disabled`))}),L(`click`,o,function(...e){t.onclick?.apply(this,e)}),z(e,o)}Hr([`click`]);var xA=R(``),SA=R(`
`);function CA(e,t){E(t,!0);let n=ya(t,`model`,15,``),r=ya(t,`weight`,15),i=ya(t,`id`,3,void 0),a=ya(t,`placeholder`,3,`openai/gpt-4o`),o=ya(t,`showRemove`,3,!0);var s=SA(),c=M(s);na(c);var l=P(c,2),u=e=>{var t=xA();na(t),F(()=>t.disabled=ek.vmFormManaged),da(t,r),z(e,t)},d=O(()=>ek.vmFormShowWeights());V(l,e=>{I(d)&&e(u)});var f=P(l,2),p=e=>{gT(e,{label:`Remove target`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,get onclick(){return t.onremove},get disabled(){return ek.vmFormManaged},children:(e,t)=>{G(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};V(f,e=>{o()&&e(p)}),T(s),F(()=>{W(c,`id`,i()),W(c,`placeholder`,a()),c.disabled=ek.vmFormManaged}),da(c,n),z(e,s),D()}var wA=R(`

`),TA=R(`adaptive lets the registered routing extension pick the target per - request.`,1),EA=R(`Add one target to make this a redirect/alias, or two or more to load - balance across them, then pick a strategy: round_robin rotates across targets - (weight biases the share) and cost always routes to the cheapest available - target. Leave Targets empty to make it only an access policy on the Source selector. The selector uses / for all providers and - models, for one provider, or for one model. user_paths is - matched against the effective request user_path: the managed API key user_path when present, otherwise the configured user path request header.`,1),DA=R(``),OA=R(`

This virtual model is defined in configuration (config.yaml / VIRTUAL_MODELS) and is read-only here. Edit your configuration to change it.

`),kA=R(``),AA=R(``),jA=R(``),MA=R(`
`,1),NA=R(``),PA=R(`Use / to allow every user path. Use a team path to restrict to that - subtree, or an unused path to make the selector unavailable.`,1),FA=R(``),IA=R(` `),LA=R(`
Targets
`,1);function RA(e,t){E(t,!0);let n=ek;An(()=>{n.vmFormOpen&&Ss.ensureLoaded()});{let t=e=>{qS(e,{copyId:`virtual-model-help-copy`,label:`virtual model help`,get open(){return n.vmFormHelpOpen},set open(e){n.vmFormHelpOpen=e},title:e=>{var t=wA(),r=M(t,!0);T(t),F(()=>B(r,n.vmFormDisplayName||n.vmForm.source||`Virtual model`)),z(e,t)},help:e=>{Ue();var t=EA(),n=P(N(t),7),r=e=>{var t=TA();Ue(),z(e,t)},i=O(()=>Ss.virtualModelStrategies().includes(`adaptive`));V(n,e=>{I(i)&&e(r)});var a=P(n,8);a.textContent=`{provider_name}/`;var o=P(a,2);o.textContent=`{provider_name}/{model}`,Ue(7),z(e,t)},$$slots:{title:!0,help:!0}})},r=e=>{var t=Qr(),r=N(t),i=e=>{var t=DA();F(()=>t.disabled=n.vmDeleting||n.vmSubmitting),L(`click`,t,()=>n.deleteVirtualModel()),z(e,t)};V(r,e=>{n.vmFormHasExisting&&!n.vmFormManaged&&e(i)}),z(e,t)},i=O(()=>n.vmDeleting||n.vmFormManaged),a=O(()=>n.vmFormMode===`edit`?`Save`:`Create`),o=O(()=>n.vmFormMode===`edit`?_o:po);bE(e,{get open(){return n.vmFormOpen},ariaLabel:`Virtual model editor`,get error(){return n.vmFormError},get submitting(){return n.vmSubmitting},get submitDisabled(){return I(i)},get submitLabel(){return I(a)},get submitIcon(){return I(o)},onclose:()=>n.closeVirtualModelForm(),onsubmit:()=>n.submitVirtualModelForm(),header:t,extraActions:r,children:(e,t)=>{var r=LA(),i=N(r),a=e=>{z(e,OA())};V(i,e=>{n.vmFormManaged&&e(a)});var o=P(i,2);SE(o,{id:`virtual-model-source`,label:`Source`,children:(e,t)=>{var r=kA();na(r),F(()=>r.disabled=n.vmFormSourceLocked||n.vmFormManaged),da(r,()=>n.vmForm.source,e=>n.vmForm.source=e),z(e,r)},$$slots:{default:!0}});var s=P(o,2);H(s,21,()=>Nc.models,e=>tO(e),(e,t)=>{var n=AA(),r=M(n,!0);T(n);var i={};F((e,t)=>{B(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>tO(I(t)),()=>tO(I(t))]),z(e,n)}),T(s);var c=P(s,2),l=P(M(c),2);{let e=O(()=>n.vmFormHasPrimaryTarget());CA(l,{id:`virtual-model-target`,get showRemove(){return I(e)},onremove:()=>n.removePrimaryTarget(),get model(){return n.vmForm.target_model},set model(e){n.vmForm.target_model=e},get weight(){return n.vmForm.target_weight},set weight(e){n.vmForm.target_weight=e}})}var u=P(l,2);H(u,17,()=>n.vmForm.targets,oi,(e,t,r)=>{CA(e,{placeholder:`groq/llama`,onremove:()=>n.removeVmTarget(r),get model(){return I(t).model},set model(e){I(t).model=e},get weight(){return I(t).weight},set weight(e){I(t).weight=e}})});var d=P(u,2),f=M(d);G(M(f),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(f),T(d),T(c);var p=P(c,2),m=e=>{var t=MA(),r=N(t);SE(r,{id:`virtual-model-strategy`,label:`Load-balancing strategy`,children:(e,t)=>{var r=jA();H(r,21,()=>n.vmStrategyOptions(),e=>e.value,(e,t)=>{var n=AA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(r),F(()=>r.disabled=n.vmFormManaged),Gi(r,()=>n.vmForm.strategy,e=>n.vmForm.strategy=e),z(e,r)},$$slots:{default:!0}});var i=P(r,2),a=M(i),o=M(a);na(o),Ue(2),T(a),T(i),F(()=>o.disabled=n.vmFormManaged),fa(o,()=>n.vmForm.session_affinity,e=>n.vmForm.session_affinity=e),z(e,t)},h=O(()=>n.vmFormShowStrategy());V(p,e=>{I(h)&&e(m)});var g=P(p,2),_=M(g);qS(_,{copyId:`virtual-model-user-paths-help`,label:`user paths help`,get open(){return n.vmFormUserPathsHelpOpen},set open(e){n.vmFormUserPathsHelpOpen=e},title:e=>{z(e,NA())},help:e=>{Ue();var t=PA();Ue(2),z(e,t)},$$slots:{title:!0,help:!0}});var v=P(_,2);ft(v),W(v,`placeholder`,`/ -/team/alpha -/non-existing`),T(g);var y=P(g,2);SE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=FA();ft(r),F(()=>r.disabled=n.vmFormManaged),da(r,()=>n.vmForm.description,e=>n.vmForm.description=e),z(e,r)},$$slots:{default:!0}});var b=P(y,2),x=M(b),S=e=>{var t=IA(),r=M(t,!0);T(t),F(()=>B(r,`Default enabled: `+(n.vmFormDefaultEnabled?`yes`:`no`)+` · Effective now: `+(n.vmFormEffectiveEnabled?`yes`:`no`))),z(e,t)};V(x,e=>{n.vmFormMode===`edit`&&e(S)});var C=P(x,2),w=M(C);{let e=O(()=>n.vmFormToggleRestricted()),t=O(()=>n.vmFormToggleLabel());bA(w,{get enabled(){return n.vmForm.enabled},get restricted(){return I(e)},label:`virtual model`,get disabled(){return n.vmFormManaged},get text(){return I(t)},onclick:()=>{n.vmFormManaged||(n.vmForm.enabled=!n.vmForm.enabled)}})}T(C),T(b),F(()=>{f.disabled=n.vmFormManaged,v.disabled=n.vmFormManaged}),L(`click`,f,()=>n.addVmTarget()),da(v,()=>n.vmForm.user_paths,e=>n.vmForm.user_paths=e),z(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}})}D()}Hr([`click`]);var zA=R(`

Pricing override

`,1),BA=R(``),VA=R(``),HA=R(``),UA=R(``),WA=R(`
`),GA=R(`
Tiered pricing exists for this override and will be preserved. Tier editing can be added - without a database migration.
`),KA=R(`
No pricing fields set.
`),qA=R(`
`),JA=R(`

Currency is USD. Saved fields override model registry and config.yaml pricing for this - selector; unset fields continue to inherit.

Price Type USD Source
`,1);function YA(e,t){E(t,!0);let n=xk;bE(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=zA(),r=P(N(t),2),i=M(r,!0);T(r),F(()=>B(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),z(e,t)},extraActions:e=>{var t=Qr(),r=N(t),i=e=>{var t=BA();F(()=>t.disabled=n.modelPricingOverrideSubmitting),L(`click`,t,()=>n.deleteModelPricingOverride()),z(e,t)};V(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),z(e,t)},children:(e,t)=>{var r=JA(),i=N(r),a=M(i);SE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=VA();na(r),da(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),z(e,r)},$$slots:{default:!0}});var o=P(a,2),s=e=>{SE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=UA();H(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=HA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(r),L(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Gi(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),z(e,r)},$$slots:{default:!0}})};V(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),T(i);var c=P(i,4);H(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=WA(),a=M(i),o=M(a),s=P(o,2);H(s,21,()=>n.availablePricingFieldOptions(I(t)),e=>e.value,(e,t)=>{var n=HA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).group+` - `+I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(s),T(a);var c=P(a,2),l=M(c),u=P(l,2);na(u),T(c);var d=P(c,2);{let e=O(()=>`Remove `+n.pricingFieldLabel(I(t).field));gT(d,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(I(t)),children:(e,t)=>{G(e,{get icon(){return Io},class:`table-icon-svg`})},$$slots:{default:!0}})}T(i),F(()=>{W(o,`for`,`pricing-type-`+I(t).id),W(s,`id`,`pricing-type-`+I(t).id),W(l,`for`,`pricing-value-`+I(t).id),W(u,`id`,`pricing-value-`+I(t).id)}),Gi(s,()=>I(t).field,e=>I(t).field=e),da(u,()=>I(t).value,e=>I(t).value=e),z(e,i)}),T(c);var l=P(c,2),u=M(l);G(M(u),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(u),T(l);var d=P(l,2),f=e=>{z(e,GA())};V(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=P(d,2),m=P(M(p),2),h=e=>{z(e,KA())},g=O(()=>n.modelPricingEffectivePreviewRows().length===0);V(m,e=>{I(g)&&e(h)}),H(P(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=qA(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(n),F(e=>{B(i,I(t).label),B(o,e),B(c,I(t).source)},[()=>I(t).value===null||I(t).value===void 0?`-`:lc(Number(I(t).value))]),z(e,n)}),T(p),L(`click`,u,()=>n.addModelPricingOverrideRow()),z(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),D()}Hr([`click`,`change`]);var XA=R(`

Failover mapping

`,1),ZA=R(``),QA=R(`

This failover mapping is defined in configuration and is read-only here.

`),$A=R(``),ej=R(`
`),tj=R(`
`,1),nj=R(`
`);function rj(e,t){E(t,!0);{let t=e=>{var t=XA(),n=P(N(t),2),r=M(n,!0);T(n),F(()=>B(r,Z.failoverForm.source||`Failover`)),z(e,t)},n=e=>{var t=Qr(),n=N(t),r=e=>{var t=ZA();F(()=>t.disabled=Z.failoverSaving||Z.failoverGenerating),L(`click`,t,()=>Z.deleteFailoverRule()),z(e,t)};V(n,e=>{Z.failoverFormMode===`edit`&&!Z.failoverFormManaged&&e(r)}),z(e,t)},r=O(()=>Z.failoverGenerating||Z.failoverFormManaged);bE(e,{get open(){return Z.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Z.failoverError},get submitting(){return Z.failoverSaving},get submitDisabled(){return I(r)},submitLabel:`Save`,onclose:()=>Z.closeFailoverForm(),onsubmit:()=>Z.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=nj(),r=M(n),i=e=>{z(e,QA())};V(r,e=>{Z.failoverFormManaged&&e(i)});var a=P(r,2);H(a,21,()=>Nc.models,oi,(e,t)=>{var n=$A(),r=M(n,!0);T(n);var i={};F((e,t)=>{B(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>tO(I(t)),()=>tO(I(t))]),z(e,n)}),T(a);var o=P(a,2);SE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=tj(),r=N(n),i=M(r),a=M(i);na(a);var o=P(a,2),s=e=>{gT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Z.removePrimaryFailoverTarget(),get disabled(){return Z.failoverFormManaged},children:(e,t)=>{G(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};V(o,e=>{Z.failoverForm.target_model&&e(s)}),T(i),H(P(i,2),17,()=>Z.failoverForm.targets,oi,(e,t,n)=>{var r=ej(),i=M(r);na(i),gT(P(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Z.removeFailoverTarget(n),get disabled(){return Z.failoverFormManaged},children:(e,t)=>{G(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),T(r),F(()=>i.disabled=Z.failoverFormManaged),da(i,()=>I(t).model,e=>I(t).model=e),z(e,r)}),T(r);var c=P(r,2),l=M(c);G(M(l),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(l);var u=P(l,2),d=M(u);G(d,{get icon(){return Po},class:`form-action-icon`});var f=P(d,2),p=M(f,!0);T(f),T(u),T(c),F(e=>{a.disabled=Z.failoverFormManaged,l.disabled=Z.failoverFormManaged||Z.failoverGenerating||Z.failoverSaving,u.disabled=e,B(p,Z.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Z.failoverFormManaged||Z.failoverGenerating||Z.failoverSaving||!Z.failoverEnabled()]),da(a,()=>Z.failoverForm.target_model,e=>Z.failoverForm.target_model=e),L(`click`,l,()=>Z.addFailoverTarget()),L(`click`,u,()=>Z.generateFailoverForForm()),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=M(s);bA(M(c),{get enabled(){return Z.failoverForm.enabled},label:`failover mapping`,get disabled(){return Z.failoverFormManaged},onclick:()=>{Z.failoverFormManaged||(Z.failoverForm.enabled=!Z.failoverForm.enabled)}}),T(c),T(s),T(n),z(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}D()}Hr([`click`]);var ij=R(` `),aj=R(`
`),oj=R(``),sj=R(`
`),cj=R(`

No failover suggestions were generated.

`),lj=R(`

No failover drafts match the filter.

`),uj=R(``),dj=R(``);function fj(e,t){E(t,!0),Ns(e,{get open(){return Z.failoverDraftsOpen},variant:`editor`,onclose:()=>Z.closeFailoverDraftsModal(),children:(e,t)=>{var n=dj(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=ij(),n=M(t,!0);T(t),F(e=>B(n,e),[()=>Z.failoverDraftCountLabel()]),z(e,t)};V(a,e=>{Z.failoverGeneratedRules.length>0&&e(o)}),ks(P(a,2),{label:`Close failover drafts`,onclick:()=>Z.closeFailoverDraftsModal(),get disabled(){return Z.failoverDraftSaving}}),T(i),T(r);var s=P(r,2),c=e=>{mT(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};V(s,e=>{Z.failoverGenerating&&e(c)});var l=P(s,2),u=e=>{var t=aj(),n=M(t);yw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Z.failoverDraftFilter},set value(e){Z.failoverDraftFilter=e}});var r=P(n,2),i=M(r);G(i,{get icon(){return Va},class:`form-action-icon`});var a=P(i,2),o=M(a,!0);T(a),T(r),T(t),F(e=>{r.disabled=Z.failoverDraftSaving,B(o,e)},[()=>Z.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),L(`click`,r,()=>Z.toggleAllFailoverDrafts()),z(e,t)};V(l,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length>0&&e(u)});var d=P(l,2),f=e=>{var t=sj();H(t,21,()=>Z.filteredFailoverDrafts(),e=>`failover-draft:`+Z.failoverPrimaryModel(e),(e,t)=>{var n=oj(),r=M(n);na(r);var i=P(r,2),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(i),T(n),F((e,t,n,i)=>{ia(r,e),r.disabled=Z.failoverDraftSaving,W(r,`aria-label`,t),B(o,n),B(c,i)},[()=>Z.failoverDraftSelected(I(t)),()=>`Select failover draft for `+Z.failoverPrimaryModel(I(t)),()=>Z.failoverPrimaryModel(I(t)),()=>Z.failoverTargetLabel(I(t))]),L(`change`,r,e=>Z.setFailoverDraftSelected(I(t),e.currentTarget.checked)),z(e,n)}),T(t),z(e,t)},p=O(()=>!Z.failoverGenerating&&Z.filteredFailoverDrafts().length>0);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{z(e,cj())};V(m,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length===0&&!Z.failoverError&&e(h)});var g=P(m,2),_=e=>{z(e,lj())},v=O(()=>!Z.failoverGenerating&&Z.failoverGeneratedRules.length>0&&Z.filteredFailoverDrafts().length===0);V(g,e=>{I(v)&&e(_)});var y=P(g,2),b=e=>{var t=uj(),n=M(t,!0);T(t),F(()=>B(n,Z.failoverError)),z(e,t)};V(y,e=>{Z.failoverError&&e(b)});var x=P(y,2),S=M(x),C=P(S,2),w=M(C);G(w,{get icon(){return _o},class:`form-action-icon`});var ee=P(w,2),te=M(ee,!0);T(ee),T(C),T(x),T(n),F(e=>{S.disabled=Z.failoverDraftSaving,C.disabled=e,B(te,Z.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Z.failoverGenerating||Z.failoverDraftSaving||Z.selectedFailoverDraftCount()===0]),L(`click`,S,()=>Z.closeFailoverDraftsModal()),L(`click`,C,()=>Z.saveSelectedFailoverDrafts()),z(e,n)},$$slots:{default:!0}}),D()}Hr([`click`,`change`]);var pj=R(`
Rate limit management is unavailable.
`),mj=R(` Add`,1),hj=R(`

`),gj=R(`

No rules.

`),_j=R(` Edit`,1),vj=R(`
`),yj=R(`
`),bj=R(`

`),xj=R(``),Sj=R(``);function Cj(e,t){E(t,!0);function n(){K.dialogOpen||X.closeRateLimitInspector()}Ns(e,{get open(){return X.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=Sj(),r=M(n),i=M(r),a=P(M(i),2),o=M(a),s=M(o,!0);T(o),T(a),T(i),ks(P(i,2),{label:`Close rate limits inspector`,onclick:()=>X.closeRateLimitInspector()}),T(r);var c=P(r,2),l=e=>{mT(e,{label:`Loading rate limits...`})},u=e=>{z(e,pj())},d=e=>{var t=Qr();H(N(t),17,()=>X.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=bj(),r=M(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2);{let e=O(()=>`Add `+I(t).title.toLowerCase());gT(o,{get label(){return I(e)},class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(I(t).scope,I(t).subject),children:(e,t)=>{var n=mj();G(N(n),{get icon(){return po},class:`table-icon-svg`}),Ue(2),z(e,n)},$$slots:{default:!0}})}T(r);var s=P(r,2),c=e=>{var n=hj(),r=M(n,!0);T(n),F(()=>B(r,I(t).hint)),z(e,n)};V(s,e=>{I(t).hint&&e(c)});var l=P(s,2),u=e=>{z(e,gj())},d=e=>{var n=yj();H(n,21,()=>I(t).items,e=>X.rateLimitKey(e),(e,t)=>{var n=vj(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=M(c);{let e=O(()=>X.rateLimitIsConcurrent(I(t))?Ma:ko);G(l,{get icon(){return I(e)},class:`budget-period-icon`})}var u=P(l,2),d=M(u,!0);T(u),T(c),T(s);var f=P(s,2),p=M(f),m=M(p),h=M(m,!0);T(m);var g=P(m,2),_=M(g,!0);T(g),T(p);var v=P(p,2),y=M(v),b=e=>{gT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(null,null,I(t)),children:(e,t)=>{var n=_j();G(N(n),{get icon(){return uo},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}})},x=O(()=>!X.rateLimitIsReadOnly(I(t)));V(y,e=>{I(x)&&e(b)}),T(v),T(f),T(i),T(r),T(n),F((e,t,r,i,a,s,c,l)=>{U(n,1,`budget-row ${e??``}`),Hi(n,t),W(n,`title`,r),B(o,i),B(d,a),B(h,s),W(g,`title`,c),B(_,l)},[()=>X.rateLimitPressureClass(I(t)),()=>X.rateLimitPressureStyle(I(t)),()=>X.rateLimitPressurePercent(I(t))+`% of the most constrained cap used`,()=>X.rateLimitSubject(I(t)),()=>X.rateLimitPeriodLabel(I(t)),()=>X.rateLimitInspectorSummary(I(t)),()=>X.rateLimitIsReadOnly(I(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>X.rateLimitSourceLabel(I(t))]),z(e,n)}),T(n),z(e,n)};V(l,e=>{I(t).items.length===0?e(u):e(d,-1)}),T(n),F(()=>B(a,I(t).title)),z(e,n)}),z(e,t)};V(c,e=>{X.rateLimitsLoading?e(l):X.rateLimitsAvailable?e(d,-1):e(u,1)});var f=P(c,2),p=M(f),m=P(p,2),h=e=>{var t=xj();L(`click`,t,()=>{X.closeRateLimitInspector(),Jo.navigate(`rate-limits`)}),z(e,t)},g=O(()=>X.rateLimitsEnabled());V(m,e=>{I(g)&&e(h)}),T(f),T(n),F(()=>B(s,X.rateLimitInspector.title)),L(`click`,p,()=>X.closeRateLimitInspector()),z(e,n)},$$slots:{default:!0}}),D()}Hr([`click`]);var wj=R(`
models
`),Tj=R(`
Virtual models feature is unavailable.
`),Ej=R(`
`),Dj=R(``),Oj=R(`
`),kj=R(``),Aj=R(`
`),jj=R(`

No models registered.

`),Mj=R(`

No models in this category.

`),Nj=R(`

No models match your filter.

`),Pj=R(`
`);function Fj(e,t){E(t,!0),An(()=>{K.refreshTick,Jo.page===`models`&&(ek.fetchVirtualModels(),xk.fetchModelPricingOverrides(),Z.fetchFailoverRules(),X.fetchRateLimitsPage())}),An(()=>{let e=ek.filteredDisplayModels.length;return Er(()=>ek.restartModelRendering(e)),()=>ek.stopModelRendering()});let n=O(()=>K.needsAuth);var r=Pj(),i=M(r),a=P(M(i),2),o=e=>{var t=wj(),n=M(t),r=M(n,!0);T(n),Ue(),T(t),F(()=>B(r,Nc.filter?ek.filteredDisplayModels.length+` / `+ek.displayModels.length:ek.displayModels.length)),z(e,t)};V(a,e=>{ek.displayModels.length>0&&e(o)}),T(i);var s=P(i,2);Fc(s,{});var c=P(s,2),l=e=>{z(e,Tj())};V(c,e=>{!ek.virtualModelsAvailable&&!I(n)&&e(l)});var u=P(c,2),d=e=>{var t=Ej(),n=M(t,!0);T(t),F(()=>B(n,ek.aliasError)),z(e,t)};V(u,e=>{ek.aliasError&&!I(n)&&e(d)});var f=P(u,2),p=e=>{var t=Ej(),n=M(t,!0);T(t),F(()=>B(n,xk.modelPricingOverrideError)),z(e,t)};V(f,e=>{xk.modelPricingOverrideError&&!I(n)&&!xk.modelPricingOverrideFormOpen&&e(p)});var m=P(f,2),h=e=>{var t=Oj();H(t,21,()=>Nc.categories,e=>e.category,(e,t)=>{var n=Dj();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(n),F(()=>{r=U(n,1,`category-tab svelte-scpjps`,null,r,{active:Nc.activeCategory===I(t).category}),B(a,I(t).display_name),B(s,I(t).count)}),L(`click`,n,()=>Nc.selectCategory(I(t).category)),z(e,n)}),T(t),z(e,t)};V(m,e=>{Nc.categories.length>0&&e(h)});var g=P(m,2),_=e=>{var t=Aj(),n=M(t);yw(M(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Nc.filter},set value(e){Nc.filter=e}}),T(n);var r=P(n,2),i=M(r),a=e=>{var t=kj();G(M(t),{get icon(){return po},class:`alias-create-icon`}),Ue(2),T(t),L(`click`,t,()=>ek.openVirtualModelCreate()),z(e,t)};V(i,e=>{ek.virtualModelsAvailable&&e(a)}),T(r),T(t),z(e,t)};V(g,e=>{(ek.displayModels.length>0||Nc.filter||ek.virtualModelsAvailable)&&e(_)});var v=P(g,2),y=e=>{{let t=O(()=>ek.modelLoadingText());mT(e,{get label(){return I(t)},class:`models-loading-state`})}},b=O(()=>ek.modelsBusy()&&!I(n));V(v,e=>{I(b)&&e(y)});var x=P(v,2);RA(x,{});var S=P(x,2);YA(S,{});var C=P(S,2),w=e=>{vA(e,{})};V(C,e=>{(ek.displayModels.length>0||Nc.filter)&&e(w)});var ee=P(C,2),te=e=>{z(e,jj())};V(ee,e=>{ek.displayModels.length===0&&!Nc.loading&&!I(n)&&!Nc.filter&&(Nc.activeCategory===`all`||!Nc.activeCategory)&&e(te)});var ne=P(ee,2),re=e=>{z(e,Mj())};V(ne,e=>{ek.displayModels.length===0&&!Nc.loading&&!I(n)&&!Nc.filter&&Nc.activeCategory&&Nc.activeCategory!==`all`&&e(re)});var ie=P(ne,2),ae=e=>{z(e,Nj())};V(ie,e=>{ek.displayModels.length>0&&ek.filteredDisplayModels.length===0&&Nc.filter&&e(ae)});var oe=P(ie,2);Cj(oe,{});var se=P(oe,2);FD(se,{});var ce=P(se,2);rj(ce,{}),fj(P(ce,2),{}),T(r),z(e,r),D()}Hr([`click`]);var Ij=`draft-workflow-preview`;function Lj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function Rj(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function zj(e){return{ref:``,step:Number.isFinite(e)?e:10}}function Bj(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function Vj(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function Hj(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function Uj(e){return{cache:!!Vj(e,`cache`,!1),audit:!!Vj(e,`audit`,!1),usage:!!Vj(e,`usage`,!1),budget:Vj(e,`budget`,!0)!==!1,guardrails:!!Vj(e,`guardrails`,!1),failover:Vj(e,`failover`,!0)!==!1}}function Wj(e,t){let n=Uj(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function Gj(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...Wj((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:Uj(n).failover}}function Kj(e,t){return Gj(e,t).failover?`On`:`Off`}function qj(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:Bj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function Jj(e,t){return Gj(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function Yj(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function Xj(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function Zj(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=Xj(e);t&&n.add(t)}),[...n].sort()}function Qj(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&Xj(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function $j(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function eM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function tM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=eM(e);return n===`global`?`All models`:n}function nM(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function rM(e){if(nM(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function iM(e){let t=e||Lj(),n=String(t.scope_provider||``).trim(),r=rM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function aM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=rM(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function oM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=rM(e&&e.scope_user_path),i=aM({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function sM(e,t){let n=t||Rj(),r=Yj(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=rM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===rM(n.scope_user_path)}function cM(e,t,n){let r=iM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>sM(e,r))||null}function lM(e){return String(e&&e.scope_type||``).trim()!==`global`}function uM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function dM(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,Yj(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function fM(e,t){let n=e||Lj(),r=iM(n),i=Uj(n.features||{}),a=Wj(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?qj(n):[];return{id:Ij,scope_type:aM(r),scope_display:oM(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function pM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Lj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=rM(a.scope_user_path),l=Uj(a.features||{}),u=Wj(l,t),d=cM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=Hj(f,`failover`),m=p?Vj(f,`failover`,!0)!==!1:null,h=i||Rj(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&rM(h.scope_user_path)===rM(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:Bj(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function mM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||Rj(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!Zj(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=Qj(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=nM(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var hM=new class{#e=k(j([]));get workflows(){return I(this.#e)}set workflows(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get submitting(){return I(this.#o)}set submitting(e){A(this.#o,e,!0)}#s=k(``);get deactivatingID(){return I(this.#s)}set deactivatingID(e){A(this.#s,e,!0)}#c=k(``);get formError(){return I(this.#c)}set formError(e){A(this.#c,e,!0)}#l=k(!1);get formHydrated(){return I(this.#l)}set formHydrated(e){A(this.#l,e,!0)}#u=k(j(Rj()));get hydratedScope(){return I(this.#u)}set hydratedScope(e){A(this.#u,e,!0)}#d=k(j([]));get guardrailRefs(){return I(this.#d)}set guardrailRefs(e){A(this.#d,e,!0)}#f=k(j(Lj()));get form(){return I(this.#f)}set form(e){A(this.#f,e,!0)}#p=null;failoverVisible(){return Ss.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:Ss.cacheVisible(),audit:Ss.auditVisible(),usage:Ss.usageVisible(),budget:Ss.budgetsVisible(),guardrails:Ss.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return dM(this.workflows,this.filter)}providerOptions(){return Zj(Nc.models,this.hydratedScope)}modelOptions(e){return Qj(Nc.models,e,this.hydratedScope)}activeScopeMatch(){return cM(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return fM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=Rj(),this.form=Lj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:Yj(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?Uj(e.workflow_payload.features):Gj(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:Bj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):qj(e);this.form={scope_provider:Yj(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=Rj(),this.form=Lj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(zj(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return pM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await _T(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await _T(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([Ss.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=mM(e,{models:Nc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await vT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}q.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!lM(e))return;let n=tM(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await vT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){q.error(e.error);return}q.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function gM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function _M({resetDelayMs:e=2e3,logPrefix:t}={}){let n=j({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await gM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var vM=R(``);function yM(e,t){E(t,!0);let n=ya(t,`workflowID`,3,``),r=_M({logPrefix:`Failed to copy workflow ID:`});An(()=>{n(),r.reset()});let i=O(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=O(()=>n()?I(i)+` `+n():I(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=vM();let c;var l=P(M(s),4),u=M(l,!0);T(l);var d=P(l,2);G(M(d),{get icon(){return Ya}}),T(d),T(s),F(()=>{c=U(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),W(s,`title`,I(i)),W(s,`aria-label`,I(a)),B(u,n())}),L(`click`,s,o),z(e,s),D()}Hr([`click`]);var bM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Ot(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=wM(),l=M(c),u=e=>{var t=xM();let r;G(M(t),{get icon(){return n()}}),T(t),F(()=>r=U(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":I(i)===`workflow-node-endpoint`})),z(e,t)};V(l,e=>{n()&&e(u)});var d=P(l,2),f=M(d,!0);T(d);var p=P(d,2),m=e=>{var t=SM(),n=M(t,!0);T(t),F(()=>B(n,s())),z(e,t)};V(p,e=>{s()&&e(m)});var g=P(p,2),_=e=>{var t=CM(),n=M(t,!0);T(t),F(()=>B(n,o())),z(e,t)};V(g,e=>{o()&&e(_)}),T(c),F(()=>{U(c,1,Fi([`workflow-node`,I(i),a()]),`svelte-nbptrg`),B(f,r())}),z(e,c)},xM=R(`
`),SM=R(` `),CM=R(` `),wM=R(`
`),TM=R(`
`,1),EM=R(`
`,1),DM=R(`
`),OM=R(`
Async
`),kM=R(`
`);function AM(e,t){E(t,!0);let n=ya(t,`chart`,19,()=>({}));var r=kM();let i;var a=M(r),o=e=>{yM(e,{get workflowID(){return n().workflowID}})};V(a,e=>{n().workflowID&&e(o)});var s=P(a,2),c=M(s);bM(c,()=>({icon:Mo,label:`Client`,variant:`workflow-node-endpoint`}));var l=P(c,4);bM(l,()=>({icon:Za,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=P(l,2),d=e=>{var t=TM(),r=N(t);bM(P(r,2),()=>({icon:Za,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),F(()=>U(r,1,Fi([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),z(e,t)};V(u,e=>{n().showCache&&e(d)});var f=P(u,2),p=e=>{var t=EM();bM(P(N(t),2),()=>({icon:No,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),z(e,t)};V(f,e=>{n().showBudget&&e(p)});var m=P(f,2),h=e=>{var t=EM();bM(P(N(t),2),()=>({icon:To,label:`Guardrails`,sub:n().guardrailLabel})),z(e,t)};V(m,e=>{n().showGuardrails&&e(h)});var g=P(m,2),_=P(g,2);bM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=P(_,2),y=e=>{var t=TM(),r=N(t);bM(P(r,2),()=>({icon:oo,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),F(()=>U(r,1,Fi([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),z(e,t)};V(v,e=>{n().showFailover&&e(y)});var b=P(v,2);bM(P(b,2),()=>({icon:Ga,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),T(s);var x=P(s,2),S=e=>{var t=OM(),r=M(t),i=M(r),a=e=>{bM(e,()=>({icon:za,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};V(i,e=>{n().showUsage&&e(a)});var o=P(i,2),s=e=>{z(e,DM())};V(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=P(o,2),l=e=>{bM(e,()=>({icon:Qa,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};V(c,e=>{n().showAudit&&e(l)}),T(r),Ue(4),T(t),z(e,t)};V(x,e=>{n().showAsync&&e(S)}),T(r),F(()=>{i=U(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),U(g,1,Fi([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),U(b,1,Fi([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),z(e,r),D()}function jM(e){let t=qj(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function MM(e,t){return t&&t.provider?t.provider:Yj(e&&e.scope)||`AI`}function NM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function PM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function FM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:Uj(t)}function IM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function LM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return LM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=LM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:LM(e.error,t+1)):``}function RM(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||LM(t.response_body)}function zM(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function BM(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=IM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=zM(n);if(i)return i;let a=Yj(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function VM(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=IM(e),o=BM(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=RM(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function HM(e){return!!(e&&e.cacheHit)}function UM(e){return!!(e&&e.failoverTarget)}function WM(e){return!!(e&&e.budgetExceeded)}function GM(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function KM(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function qM(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function JM(e,t,n,r){return e?WM(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function YM(e){return WM(e)?`Exceeded`:null}function XM(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function ZM(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function QM(e){return e&&e.failoverTarget?`Redirected`:null}function $M(e){return e&&e.failoverTarget?e.failoverTarget:null}function eN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function tN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function nN(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function rN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function iN(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function aN(e){return!e||!e.authMethod?null:e.authMethod}function oN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function sN(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function cN(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function lN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function uN(e,t){return!e||!e._live||sN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function dN(e,t,n){return!e||!e._live?``:lN(e)?`usage`:uN(e,t)?`audit`:sN(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function fN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?Uj(i.features):Gj(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||WM(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||UM(t),m=PM(e,i.entry),h=dN(i.entry,t,a),g=lN(i.entry),_=uN(i.entry,t),v=sN(i.entry,s),y=cN(i.entry,s);return{showBudget:c,budgetNodeClass:JM(c,t,s,h===`budget`),budgetStatusLabel:YM(t),showGuardrails:l,guardrailLabel:l?jM(e):``,showCache:!!i.forceCache||!!a.cache||HM(t),cacheNodeClass:GM(t,h===`cache`),cacheConnClass:KM(t),cacheStatusLabel:qM(t),showFailover:p,failoverNodeClass:p?XM(t):``,failoverConnClass:p?ZM(t):``,failoverStatusLabel:p?QM(t):null,failoverTargetLabel:p?$M(t):null,aiLabel:MM(e,t),aiSublabel:NM(e,t),aiConnClass:eN(t),aiNodeClass:tN(t,h===`ai`),responseConnClass:eN(t),responseNodeClass:nN(t,h===`response`),responseNodeSublabel:rN(t),authNodeClass:iN(t,h===`auth`),authNodeSublabel:aN(t),usageNodeClass:oN(u,y,g),auditNodeClass:oN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function pN(e,t){return fN(e,null,{forceCache:!1},t)}function mN(e,t,n){return fN(t,VM(e,t),{entry:e,features:FM(e)||(t?Gj(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var hN=R(`

`),gN=R(`

`),_N=R(`
`),vN=R(`
`),yN=R(`

No guardrails configured for this workflow.

`),bN=R(`

Guardrails

`),xN=R(``),SN=R(`

`);function CN(e,t){E(t,!0);let n=ya(t,`preview`,3,!1),r=O(()=>hM.featureCaps()),i=O(()=>tM(t.workflow)),a=O(()=>Jj(t.workflow,I(r))),o=O(()=>pN(t.workflow,I(r))),s=O(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=SN();let l;var u=M(c),d=M(u),f=M(d),p=M(f,!0);T(f);var m=P(f,2),h=M(m,!0);T(m),T(d);var g=P(d,2),_=M(g),v=M(_,!0);T(_),T(g),T(u);var y=P(u,2),b=e=>{var n=hN(),r=M(n,!0);T(n),F(()=>B(r,t.workflow.description)),z(e,n)};V(y,e=>{t.workflow.description&&e(b)});var x=P(y,2),S=e=>{var n=gN(),i=M(n);T(n),F(e=>B(i,`Failover: ${e??``}`),[()=>Kj(t.workflow,I(r))]),z(e,n)},C=O(()=>hM.failoverVisible());V(x,e=>{I(C)&&e(S)});var w=P(x,2);AM(w,{get chart(){return I(o)}});var ee=P(w,2),te=e=>{var t=bN(),n=M(t),r=P(M(n),2),i=M(r,!0);T(r),T(n);var o=P(n,2),c=e=>{var t=vN();H(t,23,()=>I(a),(e,t)=>I(s)+t,(e,t)=>{var n=_N(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=M(a);T(a),T(n),F(()=>{B(i,I(t).ref),B(o,`step ${I(t).step??``}`)}),z(e,n)}),T(t),z(e,t)},l=e=>{z(e,yN())};V(o,e=>{I(a).length>0?e(c):e(l,-1)}),T(t),F(()=>B(i,I(a).length?I(a).length+` steps`:`None`)),z(e,t)},ne=O(()=>Ss.guardrailsVisible());V(ee,e=>{I(ne)&&e(te)});var re=P(ee,2),ie=e=>{var n=xN(),r=M(n),a=M(r),o=M(a,!0);T(a);var s=P(a,2);{let e=O(()=>`Edit workflow `+I(i));gT(s,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>hM.openCreate(t.workflow),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}T(r);var c=P(r,2),l=M(c),u=M(l);T(l);var d=P(l,2),f=M(d);T(d);var p=P(d,2),m=M(p);T(p),T(c),T(n),F((e,n,r,s)=>{a.disabled=e,W(a,`aria-label`,`Deactivate workflow `+I(i)),W(a,`title`,n),B(o,hM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),B(u,`version: v${t.workflow.version??``}`),B(f,`created: ${r??``}`),B(m,`hash: ${s??``}`)},[()=>hM.deactivatingID===t.workflow.id||!lM(t.workflow),()=>lM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>ds.formatTimestamp(t.workflow.created_at),()=>uM(t.workflow.workflow_hash)]),L(`click`,a,()=>hM.deactivate(t.workflow)),z(e,n)};V(re,e=>{n()||e(ie)}),T(c),F((e,t)=>{l=U(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),B(p,e),B(h,I(i)),B(v,t)},[()=>$j(t.workflow),()=>eM(t.workflow)]),z(e,c),D()}Hr([`click`]);var wN=R(`

`),TN=R(``),EN=R(``),DN=R(``),ON=R(``),kN=R(``),AN=R(``),jN=R(``),MN=R(``),NN=R(``),PN=R(``),FN=R(``),IN=R(``),LN=R(`
No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
`),RN=R(`
`),zN=R(`
`),BN=R(`

No guardrail steps configured yet.

`),VN=R(`

Guardrail Steps

Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

`),HN=R(`

Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

Preview

Live
`,1);function UN(e,t){E(t,!0);{let t=e=>{qS(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=wN(),n=M(t,!0);T(t),F(e=>B(n,e),[()=>hM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),z(e,t)},$$slots:{title:!0}})},n=O(()=>hM.submitLabel()),r=O(()=>hM.submittingLabel()),i=O(()=>hM.submitMode()===`create`?po:_o);bE(e,{get open(){return hM.formOpen},ariaLabel:`Workflow editor`,get error(){return hM.formError},get submitting(){return hM.submitting},get submitLabel(){return I(n)},get submittingLabel(){return I(r)},get submitIcon(){return I(i)},dialogClass:`workflow-editor`,onclose:()=>hM.closeForm(),onsubmit:()=>hM.submitForm(),header:t,children:(e,t)=>{var n=HN(),r=N(n),i=M(r);SE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=EN(),r=M(n);r.value=r.__value=``,H(P(r),16,()=>hM.providerOptions(),e=>e,(e,t)=>{var n=TN(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(n),L(`change`,n,e=>hM.setProvider(e.currentTarget.value)),Gi(n,()=>hM.form.scope_provider,e=>hM.form.scope_provider=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2),o=e=>{SE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=DN(),r=M(n);r.value=r.__value=``,H(P(r),17,()=>hM.modelOptions(hM.form.scope_provider),e=>hM.form.scope_provider+`-`+e,(e,t)=>{var n=TN(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t)),i!==(i=I(t))&&(n.value=(n.__value=I(t))??``)}),z(e,n)}),T(n),Gi(n,()=>hM.form.scope_model,e=>hM.form.scope_model=e),z(e,n)},$$slots:{default:!0}})};V(a,e=>{hM.form.scope_provider&&e(o)});var s=P(a,2);SE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=ON();na(n),da(n,()=>hM.form.name,e=>hM.form.name=e),z(e,n)},$$slots:{default:!0}}),SE(P(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=kN();na(n),da(n,()=>hM.form.scope_user_path,e=>hM.form.scope_user_path=e),z(e,n)},$$slots:{default:!0}}),T(r);var c=P(r,8);SE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=AN();ft(n),da(n,()=>hM.form.description,e=>hM.form.description=e),z(e,n)},$$slots:{default:!0}});var l=P(c,2),u=M(l),d=e=>{var t=jN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>hM.form.features.cache,e=>hM.form.features.cache=e),z(e,t)},f=O(()=>Ss.cacheVisible());V(u,e=>{I(f)&&e(d)});var p=P(u,2),m=e=>{var t=MN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>hM.form.features.audit,e=>hM.form.features.audit=e),z(e,t)},h=O(()=>Ss.auditVisible());V(p,e=>{I(h)&&e(m)});var g=P(p,2),_=e=>{var t=NN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>hM.form.features.usage,e=>hM.form.features.usage=e),z(e,t)},v=O(()=>Ss.usageVisible());V(g,e=>{I(v)&&e(_)});var y=P(g,2),b=e=>{var t=PN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>hM.form.features.budget,e=>hM.form.features.budget=e),z(e,t)},x=O(()=>Ss.budgetsVisible());V(y,e=>{I(x)&&e(b)});var S=P(y,2),C=e=>{var t=FN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>hM.form.features.guardrails,e=>hM.form.features.guardrails=e),z(e,t)},w=O(()=>Ss.guardrailsVisible());V(S,e=>{I(w)&&e(C)});var ee=P(S,2),te=e=>{var t=IN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>hM.form.features.failover,e=>hM.form.features.failover=e),z(e,t)},ne=O(()=>hM.failoverVisible());V(ee,e=>{I(ne)&&e(te)}),T(l);var re=P(l,2),ie=P(M(re),2);{let e=O(()=>hM.preview());CN(ie,{get workflow(){return I(e)},preview:!0})}T(re);var ae=P(re,2),oe=e=>{var t=VN(),n=M(t),r=P(M(n),2);T(n);var i=P(n,2),a=e=>{var t=LN(),n=P(M(t),2);T(t),L(`click`,n,()=>Jo.navigate(`guardrails`)),z(e,t)};V(i,e=>{hM.guardrailRefs.length===0&&e(a)});var o=P(i,2),s=e=>{var t=zN();H(t,21,()=>hM.form.guardrails,oi,(e,t,n)=>{var r=RN(),i=M(r),a=M(i);W(a,`for`,`workflow-guardrail-ref-`+n);var o=P(a,2);na(o),W(o,`id`,`workflow-guardrail-ref-`+n),W(o,`aria-label`,`Guardrail reference `+(n+1)),T(i);var s=P(i,2),c=M(s);W(c,`for`,`workflow-guardrail-step-`+n);var l=P(c,2);na(l),W(l,`id`,`workflow-guardrail-step-`+n),W(l,`aria-label`,`Guardrail step `+(n+1)),T(s);var u=P(s,2);T(r),da(o,()=>I(t).ref,e=>I(t).ref=e),da(l,()=>I(t).step,e=>I(t).step=e),L(`click`,u,()=>hM.removeGuardrailStep(n)),z(e,r)}),T(t),z(e,t)},c=e=>{z(e,BN())};V(o,e=>{hM.form.guardrails.length>0?e(s):e(c,-1)}),T(t),L(`click`,r,()=>hM.addGuardrailStep()),z(e,t)},se=O(()=>hM.form.features.guardrails&&Ss.guardrailsVisible());V(ae,e=>{I(se)&&e(oe)}),z(e,n)},$$slots:{header:!0,default:!0}})}D()}Hr([`change`,`click`]);var WN=R(`

Loading workflows...

`),GN=R(`
`),KN=R(`

No active workflows found.

`),qN=R(`

No workflows match your filter.

`),JN=R(`
`);function YN(e,t){E(t,!0);var n=JN(),r=M(n),i=e=>{var t=WN();SS(M(t),{size:16,label:`Loading workflows`}),Ue(),T(t),z(e,t)};V(r,e=>{hM.loading&&!K.authError&&e(i)});var a=P(r,2),o=e=>{var t=GN();H(t,21,()=>hM.filteredWorkflows,e=>e.id,(e,t)=>{CN(e,{get workflow(){return I(t)}})}),T(t),z(e,t)};V(a,e=>{hM.filteredWorkflows.length>0&&e(o)});var s=P(a,2),c=e=>{z(e,KN())};V(s,e=>{hM.workflows.length===0&&!hM.loading&&!K.authError&&hM.available&&e(c)});var l=P(s,2),u=e=>{z(e,qN())};V(l,e=>{hM.workflows.length>0&&hM.filteredWorkflows.length===0&&!hM.loading&&e(u)}),T(n),z(e,n),D()}var XN=R(``),ZN=R(`
Workflows feature is unavailable.
`),QN=R(`
`),$N=R(`
`),eP=R(``),tP=R(`
`);function nP(e,t){E(t,!0),An(()=>{K.refreshTick,hM.fetchPage()});var n=tP(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=XN();G(M(t),{get icon(){return po},class:`form-action-icon`,"aria-hidden":`true`}),Ue(2),T(t),L(`click`,t,()=>hM.openCreate()),z(e,t)};V(a,e=>{hM.available&&e(o)}),T(i),T(r);var s=P(r,2),c=e=>{z(e,ZN())};V(s,e=>{!hM.available&&!K.authError&&e(c)});var l=P(s,2),u=e=>{var t=QN(),n=M(t,!0);T(t),F(()=>B(n,hM.error)),z(e,t)};V(l,e=>{hM.error&&!K.authError&&e(u)});var d=P(l,2),f=e=>{var t=$N(),n=M(t);yw(M(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return hM.filter},set value(e){hM.filter=e}}),T(n);var r=P(n,2),i=M(r),a=M(i,!0);T(i),T(r),T(t),F(()=>B(a,hM.filteredWorkflows.length+` active scopes`)),z(e,t)};V(d,e=>{hM.available&&e(f)});var p=P(d,2);UN(p,{});var m=P(p,2);YN(m,{});var h=P(m,2);H(h,20,()=>hM.guardrailRefs,e=>e,(e,t)=>{var n=eP(),r={};F(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(h),T(n),z(e,n),D()}Hr([`click`]);function rP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=Xs}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=iP(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function iP(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var aP=null;function oP(){return aP===null&&(aP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(aP&&aP.matches)}function sP(e){return oP()?0:e}function cP(e,t){return!t||!t.live?{duration:0}:Js(e,{duration:sP(150)})}var lP=new class{#e=k(j({}));get workflowVersionsByID(){return I(this.#e)}set workflowVersionsByID(e){A(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:Ss.cacheVisible(),audit:Ss.auditVisible(),usage:Ss.usageVisible(),budget:Ss.budgetsVisible(),guardrails:Ss.guardrailsVisible(),failover:Ss.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await _s(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},uP=6;function dP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function fP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>uP)return r;let i=dP(r);return i==null?r:pP(i,t+1,n)||n&&n(i)||r}function pP(e,t=0,n=null,r=null){if(e==null||t>uP)return``;if(typeof e==`string`){let i=dP(e.trim());return i==null?``:pP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||gP(t&&t.response_body)}function vP(e){let t=e&&e.data?e.data:null;return t?mP(t.error_message)||(_P(e,t)?pP(t.response_body,0):``):``}function yP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function bP(e){let t=yP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function xP(e){let t=yP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function SP(e){let t=yP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function CP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function wP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function TP(e){return String(e&&e.session_id||``).trim()}function EP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function DP(e){return!!TP(e)&&EP(e)>1}function OP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>({...e.latest,session_id:TP(e.latest)||String(e.session_id||``).trim(),session_count:Number(e.count||1)})),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function kP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>NP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!NP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>NP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!NP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function AP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function jP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>TP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function MP(e){return String(e&&e.id||``).trim()}function NP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function PP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function FP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function IP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&FP(t)}function LP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!IP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>PP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>NP(e))),s=[];return a.forEach(e=>{let t=NP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function RP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!IP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>PP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>NP(e))),s=new Map;i.forEach((e,t)=>{let n=TP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=NP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=TP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(EP(l[r]),EP(e))},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function zP(e,t){let n=MP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function BP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>MP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function VP(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function HP(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function UP(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function WP(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function GP(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function KP(e){let t=GP(e);return t.length>1||t.some(e=>!(e&&e.success))}function qP(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function JP(e){return String(e&&e.kind||``).trim()||`attempt`}function YP(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function XP(e){return String(e&&e.model||``).trim()||`-`}function ZP(e){let t=GP(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function QP(e){return GP(e).length+`×`}function $P(e){let t=GP(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function eF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=JP(e);n&&n!==`attempt`&&t.push(n),t.push(qP(e));let r=YP(e);r&&r!==`-`&&t.push(r);let i=XP(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function tF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function nF(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function rF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function iF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function aF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=tF(e,t),a=rF(e,t),o=nF(t),s=i!=null&&i!==``,c=JP(t),l=GP(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:iF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function oF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function sF(e){return oF(e).filter(e=>!(e&&e.no_change))}function cF(e){return oF(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function lF(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function uF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=sF(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:lF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function dF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function fF(e){let t=dF(e);return Number(t&&t.cached_input_tokens||0)>0}function pF(e){let t=dF(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function mF(e){let t=dF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?oc(r)+` cached`:pF(e).toFixed(1)+`% cached`}function hF(e){return fF(e)?mF(e):``}function gF(e,t){let n=dF(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function _F(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&UP(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:hF(e),promptCacheHighlight:gF(e,t),noChangeSteps:cF(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function vF(e){let t=e&&e.data?e.data:null,n=vP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&UP(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&UP(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function yF(e,t){let n=[{id:`request`,pane:_F(e,t)}];return sF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:uF(e,t)})}),KP(e)?GP(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:aF(e,t)})}):n.push({id:`response`,pane:vF(e)}),n}function bF(e){if(!KP(e))return`response`;let t=GP(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function xF(e,t,n){return e&&(Array.isArray(n)?n:yF(t)).some(t=>t.id===e)?e:bF(t)}function SF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var CF=100;function wF(){return{entries:[],total:0,limit:25,offset:0}}var TF=new class{#e=k(j({}));get auditExpandedEntries(){return I(this.#e)}set auditExpandedEntries(e){A(this.#e,e,!0)}#t=k(j({}));get auditExpandedThreads(){return I(this.#t)}set auditExpandedThreads(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return MC.auditLog}set auditLog(e){MC.auditLog=e}get auditSearch(){return MC.auditSearch}set auditSearch(e){MC.auditSearch=e}get auditMethod(){return MC.auditMethod}set auditMethod(e){MC.auditMethod=e}get auditStatusCode(){return MC.auditStatusCode}set auditStatusCode(e){MC.auditStatusCode=e}get auditStream(){return MC.auditStream}set auditStream(e){MC.auditStream=e}get auditGroupSessions(){return MC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Mc.customStartDate,customEndDate:Mc.customEndDate}}toggleAuditGroupSessions(){MC.auditGroupSessions=!MC.auditGroupSessions,Ea(`gomodel_audit_group_sessions`,MC.auditGroupSessions),this.auditExpandedThreads={},MC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=CP({dateQuery:Mc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await _s((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=wF();return}let a=n?OP(i.data):i.data,o=(n?RP:LP)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=MC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=jP(this.auditExpandedThreads,o.entries),MC.auditThreadChildren=jP(MC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=BP(this.auditExpandedEntries,s);try{await lP.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=wF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=MC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&MC.auditThreadChildren[e]||null}async toggleThread(e){let t=TP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=AP(this.auditExpandedThreads,t);let r=MC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=TP(e);if(!t)return;let n=MC.auditThreadChildren[t];MC.auditThreadChildren={...MC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...MC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=AP(this.auditExpandedThreads,t))),MC.auditThreadChildren=e};try{let n=await _s(`/admin/audit/log?`+wP({sessionId:t,limit:CF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=MC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>TP(e)===t),o=kP(i,n.data.entries,a?[a]:[e]);o.entries=MC.upsertAuditRecords(o.entries,`audit.thread`),MC.auditThreadChildren={...MC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=MP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=zP(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof MC.fetchAuditEntryDetail==`function`&&MC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};MC.fetchAuditLog=e=>TF.fetchAuditLog(e),MC.isAuditEntryExpanded=e=>TF.isAuditEntryExpanded(e);var EF=R(`
`);function DF(e,t){E(t,!0);let n=bw(()=>TF.fetchAuditLog(!0));An(()=>n.cancel);var r=EF(),i=M(r);yw(M(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return TF.auditSearch},set value(e){TF.auditSearch=e}}),T(i);var a=P(i,2),o=M(a),s=M(o);s.value=s.__value=``;var c=P(s);c.value=c.__value=`GET`;var l=P(c);l.value=l.__value=`POST`;var u=P(l);u.value=u.__value=`PUT`;var d=P(u);d.value=d.__value=`PATCH`;var f=P(d);f.value=f.__value=`DELETE`,T(o);var p=P(o,2),m=M(p);m.value=m.__value=``;var h=P(m);h.value=h.__value=`200`;var g=P(h);g.value=g.__value=`201`;var _=P(g);_.value=_.__value=`400`;var v=P(_);v.value=v.__value=`401`;var y=P(v);y.value=y.__value=`403`;var b=P(y);b.value=b.__value=`404`;var x=P(b);x.value=x.__value=`429`;var S=P(x);S.value=S.__value=`500`;var C=P(S);C.value=C.__value=`502`;var w=P(C);w.value=w.__value=`503`;var ee=P(w);ee.value=ee.__value=`504`,T(p);var te=P(p,2),ne=M(te);ne.value=ne.__value=``;var re=P(ne);re.value=re.__value=`true`;var ie=P(re);ie.value=ie.__value=`false`,T(te);var ae=P(te,2);G(M(ae),{get icon(){return Io},class:`table-icon-svg`}),Ue(2),T(ae),T(a),T(r),L(`change`,o,()=>TF.fetchAuditLog(!0)),Gi(o,()=>TF.auditMethod,e=>TF.auditMethod=e),L(`change`,p,()=>TF.fetchAuditLog(!0)),Gi(p,()=>TF.auditStatusCode,e=>TF.auditStatusCode=e),L(`change`,te,()=>TF.fetchAuditLog(!0)),Gi(te,()=>TF.auditStream,e=>TF.auditStream=e),L(`click`,ae,()=>TF.clearAuditFilters()),z(e,r),D()}Hr([`change`,`click`]);var OF=R(`Live stream connecting…`),kF=R(` `),AF=R(`Live`),jF=R(` `);function MF(e,t){E(t,!0);let n=O(()=>MC.auditLivePauseReason()),r=O(()=>MC.liveLogsStreaming&&!I(n));var i=Qr(),a=N(i),o=e=>{var t=jF(),i=M(t);let a;var o=P(i,2),s=e=>{z(e,OF())},c=e=>{var t=kF(),r=M(t,!0);T(t),F(e=>B(r,e),[()=>bC(I(n))]),z(e,t)},l=e=>{z(e,AF())};V(o,e=>{MC.liveLogsStreaming?I(n)?e(c,1):e(l,-1):e(s)}),T(t),F(()=>a=U(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":I(r)})),z(e,t)},s=O(()=>Ss.liveLogsVisible());V(a,e=>{I(s)&&e(o)}),z(e,i),D()}var NF=R(` `),PF=R(``);function FF(e,t){E(t,!0);let n=O(()=>[{key:`provider`,text:gc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+yc(t.entry),mono:!0},{key:`failover`,text:WP(t.entry)&&`failover: `+WP(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=PF(),i=P(M(r),2);H(i,21,()=>I(n),e=>e.key,(e,t)=>{var n=NF(),r=M(n,!0);T(n),F(()=>{U(n,1,Fi([`provider-badge`,I(t).class,{mono:I(t).mono}]),`svelte-hyopt0`),B(r,I(t).text)}),z(e,n)}),T(i),T(r),z(e,r),D()}var IF=R(``),LF=R(` `);function RF(e,t){E(t,!0);let n=O(()=>ZP(t.entry)),r=O(()=>I(n).length>0?$P(t.entry):``),i=O(()=>I(n).length>0?QP(t.entry):``);var a=Qr(),o=N(a),s=e=>{var a=LF(),o=M(a);H(o,21,()=>I(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=IF();let r;F(e=>{r=U(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(I(t)&&I(t).success),"audit-attempt-error":!(I(t)&&I(t).success)}),W(n,`title`,e)},[()=>eF(I(t))]),z(e,n)}),T(o);var s=P(o,2),c=M(s,!0);T(s),T(a),F(()=>{W(a,`title`,I(r)),W(a,`aria-label`,I(r)),B(c,I(i))}),z(e,a)};V(o,e=>{I(n).length>0&&e(s)}),z(e,a),D()}var zF=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function BF(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:``).filter(Boolean).join(` -`).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function VF(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function HF(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=BF(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=BF(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function UF(e){return!e||typeof e!=`object`?``:Array.isArray(e.content)?e.content.map(e=>e&&typeof e.text==`string`?e.text:``).filter(Boolean).join(` -`).trim():BF(e.content)}function WF(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...VF(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||t.push(...VF(e.content))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{!e||typeof e!=`object`||(t.push(...VF(e.content)),typeof e.text==`string`&&t.push(e.text))}):e.input&&typeof e.input==`object`&&(t.push(...VF(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var GF=e=>BF(e);function KF(e){if(!e||!e.data)return``;let t=pP(e.data.response_body,0,GF);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?pP(dP(e),0,GF)||e:``}return pP(n,0,GF)||BF(n)}function qF(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function JF(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function YF(e){return e?!!ZF(e):!1}function XF(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function ZF(e){switch(XF(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function QF(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function $F(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function eI(e){let t=ZF(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||FI(n)!==``}function tI(e,t){let n=String(t||``).trim(),r=ZF(e&&e.path),i=QF(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=FI(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&$F(o,QF(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&$F(o,{role:String(a.role||`assistant`),content:QF(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var nI=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function rI(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||nI.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function iI(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function aI(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=oI(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function oI(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function sI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function cI(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?II(t,e)>=0?t:e:t,null)}function lI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return cI((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function uI(e,t){let n=cI(e);return!!n&&String(n.id||``)===String(t||``)}function dI(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function fI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function pI(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||qF(n.output));return!!(r||i)}function mI(e){return!e||JF(e.path)?!1:YF(e.path)||pI(e)}function hI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function yI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function bI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
`+vI(t)+``+vI(SI(e[t]))+`
`);return t.length?``:``}function wI(e){let t=xI(e.content_type),n=vI(t+` · `+bI(e.bytes)),r=CI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
`+n+`
`+r+`
`}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
`+n+`
`+vI(i)+`
`+r+`
`}function TI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function EI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function DI(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return vI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+vI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+vI(e.slice(r)):vI(e)}function OI(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=EI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return vI(o);if(!i(e))return o.split(` -`).map(e=>DI(e,a)).join(` -`);let s=o.split(` -`),c=[],l=0;for(;lDI(e,a)).join(` -`);c.push(``+o+``),l=r+1;continue}c.push(DI(e,a)),l++}return c.join(` -`)}function kI(e){let t=String(e||``).toLowerCase();return t===`system`||t===`developer`?{role:`system`,label:`System Prompt`,className:`role-system`}:t===`assistant`?{role:`assistant`,label:`Agent`,className:`role-assistant`}:t===`error`?{role:`error`,label:`Error`,className:`role-error`}:t===`function_call`?{role:`function_call`,label:`Function Call`,className:`role-function-call`}:t===`function_result`?{role:`function_result`,label:`Function Result`,className:`role-function-result`}:{role:`user`,label:`User`,className:`role-user`}}function AI(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c}){let l=kI(e);return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:l.role,roleLabel:l.label,roleClass:l.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``}}function jI(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e;return{name:t.name||e.name||``,arguments:t.arguments||e.arguments||``}}).filter(Boolean):[]}function MI(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{!t||!Array.isArray(t.tool_calls)||t.tool_calls.forEach(t=>{if(!t)return;let n=t.id||``,r=(t.function||t).name||t.name||``;n&&r&&(e[n]=r)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{if(!t||typeof t!=`object`||t.type!==`function_call`)return;let n=t.id||t.call_id||``,r=t.name||``;n&&r&&(e[n]=r)}),n&&Array.isArray(n.choices)){let t=n.choices[0];t&&t.message&&Array.isArray(t.message.tool_calls)&&t.message.tool_calls.forEach(t=>{if(!t)return;let n=t.id||``,r=(t.function||t).name||t.name||``;n&&r&&(e[n]=r)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{if(!t||t.type!==`function_call`)return;let n=t.id||t.call_id||``,r=t.name||``;n&&r&&(e[n]=r)})}function NI(e){return Array.isArray(e)?`[`+e.map(NI).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+NI(e[t])).join(`,`)+`}`:JSON.stringify(e)}function PI(e){if(!e||typeof e!=`object`)return null;let t=[];if(e.system!==void 0&&t.push({system:e.system}),e.instructions!==void 0&&t.push({instructions:e.instructions}),Array.isArray(e.messages))t.push(...e.messages);else if(Array.isArray(e.input)&&e.previous_response_id==null&&e.conversation==null)t.push(...e.input);else return null;return t.map(NI)}function FI(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function II(e,t){let n=new Date(e&&e.timestamp).getTime(),r=new Date(t&&t.timestamp).getTime();if(Number.isFinite(n)&&Number.isFinite(r)&&n!==r)return n-r;let i=String(e&&e.timestamp||``).localeCompare(String(t&&t.timestamp||``));if(i!==0)return i;let a=String(e&&e.id||``),o=String(t&&t.id||``);return ao)}function LI(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(II),r={};n.forEach(e=>{let t=e.data&&e.data.request_body?e.data.request_body:null,n=e.data&&e.data.response_body?e.data.response_body:null;MI(r,t,n)});let i=[],a=new Set,o=new Set,s=new Set,c=[],l=null,u=0,d=n.findIndex(e=>e.id===t),f=e=>JSON.stringify({role:e.role,text:e.text,toolCalls:e.toolCalls,functionName:e.functionName});return n.forEach((e,n)=>{let p=e.id===t,m=d>=0&&n>d,h=e.timestamp,g=e.data&&e.data.request_body?e.data.request_body:null,_=e.data&&e.data.response_body?e.data.response_body:null,v=i.length,y=(t,n,{toolCalls:r,functionName:i}={})=>AI(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i});if(g&&g.system!==void 0){let e=BF(g.system);e&&i.push(y(`system`,e))}if(g&&g.instructions!==void 0){let e=BF(g.instructions);e&&i.push(y(`system`,e))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=BF(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(y(`function_result`,t,{functionName:n}));return}if(t===`assistant`){let n=BF(e.content),r=jI(e.tool_calls);(n||r.length>0)&&i.push(y(t,n,{toolCalls:r}));return}let n=BF(e.content);n&&i.push(y(t,n))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`){let t=typeof e.output==`string`?e.output:BF(e.output);t&&i.push(y(`function_result`,t,{functionName:r[e.call_id]||``}))}else if(e.type===`function_call`)i.push(y(`function_call`,``,{toolCalls:[{name:e.name||``,arguments:e.arguments||``}]}));else if(e.role){let t=String(e.role).toLowerCase(),n=BF(e.content);n&&i.push(y(t,n))}}}):HF(g.input).forEach(e=>{e.text&&i.push(y(e.role,e.text))}));let b=i.splice(v),x=b.map(f),S=PI(g),C=S!==null,w=oI(e),ee=!!w&&a.has(w),te=String(g&&g.previous_response_id||``).trim(),ne=FI(g),re=ee||!!te&&o.has(te)||!!ne&&s.has(ne);if(m){let e=C&&l&&l.length>0&&l.every((e,t)=>S[t]===e);if(C&&!e&&!ee||!C&&!re)return}p&&C&&(l=[...S]);let ie=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),ie&&(p||m)&&a.add(ie),ne&&s.add(ne);let ae=0;for(;ae0;){let t=c.slice(-e),n=x.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...b.slice(e)),c.push(...x.slice(e))}if(_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=BF(e.message.content),r=jI(e.message.tool_calls);if(n||r.length>0){let e=y(t,n,{toolCalls:r});i.push(e),c.push(f(e))}}}if(_&&Array.isArray(_.output)&&_.output.forEach(e=>{if(!e)return;if(e.type===`function_call`){let t=y(`function_call`,``,{toolCalls:[{name:e.name||``,arguments:e.arguments||``}]});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=UF(e);if(n){let e=y(t,n);i.push(e),c.push(f(e))}}),_&&_.content!==void 0&&!Array.isArray(_.choices)&&!Array.isArray(_.output)){let e=String(_.role||`assistant`).toLowerCase(),t=BF(_.content);if(t){let n=y(e,t);i.push(n),c.push(f(n))}}let oe=KF(e);oe&&i.push(y(`error`,oe));let se=String(_&&_.id||``).trim();se&&o.add(se)}),{messages:i,entryIDs:[...a]}}function RI(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){let t=e.arguments||``;try{t=JSON.stringify(JSON.parse(t),null,2)}catch{}return e.name+`(`+t+`)`}).join(` - -`):e.text||``}var zI=600*1e3,BI=15*1e3,VI=250,HI=class{#e=k(!1);get conversationOpen(){return I(this.#e)}set conversationOpen(e){A(this.#e,e,!0)}#t=k(!1);get conversationLoading(){return I(this.#t)}set conversationLoading(e){A(this.#t,e,!0)}#n=k(``);get conversationError(){return I(this.#n)}set conversationError(e){A(this.#n,e,!0)}#r=k(``);get conversationAnchorID(){return I(this.#r)}set conversationAnchorID(e){A(this.#r,e,!0)}#i=k(j([]));get conversationEntryIDs(){return I(this.#i)}set conversationEntryIDs(e){A(this.#i,e,!0)}#a=k(``);get conversationSessionID(){return I(this.#a)}set conversationSessionID(e){A(this.#a,e,!0)}#o=k(!1);get conversationTruncated(){return I(this.#o)}set conversationTruncated(e){A(this.#o,e,!0)}#s=k(!1);get conversationFollowLatest(){return I(this.#s)}set conversationFollowLatest(e){A(this.#s,e,!0)}#c=k(``);get conversationOpenedFromID(){return I(this.#c)}set conversationOpenedFromID(e){A(this.#c,e,!0)}#l=k(``);get followUpText(){return I(this.#l)}set followUpText(e){A(this.#l,e,!0)}#u=k(!1);get followUpSending(){return I(this.#u)}set followUpSending(e){A(this.#u,e,!0)}#d=k(``);get followUpError(){return I(this.#d)}set followUpError(e){A(this.#d,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#f=k(null);get conversationDialogEl(){return I(this.#f)}set conversationDialogEl(e){A(this.#f,e,!0)}#p=k(null);get conversationCloseBtnEl(){return I(this.#p)}set conversationCloseBtnEl(e){A(this.#p,e,!0)}#m=k(null);get conversationThreadEl(){return I(this.#m)}set conversationThreadEl(e){A(this.#m,e,!0)}get conversationEntries(){return(this.conversationEntryIDs||[]).map(e=>MC.auditRecord(e)).filter(Boolean)}#h=O(()=>LI(this.conversationEntries,this.conversationAnchorID));get conversationView(){return I(this.#h)}set conversationView(e){A(this.#h,e)}get conversationMessages(){return this.conversationView.messages}get conversationBranchEntryIDs(){return this.conversationView.entryIDs}_setConversationEntryIDs(e){this.conversationEntryIDs=[...new Set((Array.isArray(e)?e:[]).filter(Boolean))],MC.pinAuditRecords(this.conversationEntryIDs)}canShowConversation(e){return mI(e)}startBodyInteraction(e){this.bodyPointerStart={x:e.clientX,y:e.clientY}}_isBodyDrag(e){if(!this.bodyPointerStart)return!1;let t=Math.abs(e.clientX-this.bodyPointerStart.x),n=Math.abs(e.clientY-this.bodyPointerStart.y);return t>4||n>4}_hasActiveSelection(){let e=window.getSelection?window.getSelection():null;return!e||e.isCollapsed?!1:String(e.toString()||``).trim().length>0}handleBodyConversationClick(e,t){let n=this._isBodyDrag(e);if(this.bodyPointerStart=null,n||this._hasActiveSelection()||!this.canShowConversation(t))return;let r=e.target&&e.target.closest?e.target.closest(`[data-conversation-trigger="1"]`):null;r&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,r))}handleErrorConversationClick(e,t){let n=this._isBodyDrag(e);this.bodyPointerStart=null,!n&&(this._hasActiveSelection()||this.canShowConversation(t)&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,e.currentTarget)))}formatJSON(e){return ac(e)}renderBodyWithConversationHighlights(e,t,n){return OI(e,t,{formatJSON:e=>this.formatJSON(e),canShowConversation:e=>this.canShowConversation(e),promptCacheHighlight:n&&n.promptCacheHighlight})}async openConversation(e,t){if(!e||!e.id||!this.canShowConversation(e))return;let n=document.activeElement instanceof HTMLElement?document.activeElement:null;t instanceof HTMLElement?this.conversationReturnFocusEl=t:n&&n!==document.body&&(this.conversationReturnFocusEl=n);let r=++this.conversationRequestToken;if(this.conversationOpen=!0,this.conversationError=``,this.conversationAnchorID=e.id,this.conversationOpenedFromID=e.id,this.conversationSessionID=String(e.session_id||``).trim(),this._setConversationEntryIDs([]),this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this._addConversationRecord(MC.upsertAuditRecord(e,`conversation.live`));return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof MC.auditEntryLiveDetailPending==`function`&&MC.auditEntryLiveDetailPending(e)}_applyConversationView(){let e=this.conversationEntries,t=LI(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=lI(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id))}}handleAuditRecordChange(e,t){if(!this.conversationOpen||!e)return;let n=String(e.id||``).trim(),r=aI(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(r.accepted&&(this.followUpRequestID=r.followUpRequestID,n&&r.submittedChild&&(this.conversationAnchorID=n,this.conversationFollowLatest=!0),this._addConversationRecord(e),dI(String(t||e._live_state||``).trim(),n,this.conversationAnchorID))){this.conversationMessages.length===0&&(this.conversationLoading=!0);let e=++this.conversationRequestToken;this.fetchConversation(n,e,!1)}}_addConversationRecord(e){let t=TC(e);t&&!this.conversationEntryIDs.includes(t)&&this._setConversationEntryIDs([...this.conversationEntryIDs,t]),!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(),this.conversationFollowLatest&&this._scheduleLatestScroll()}conversationLiveWaiting(){if(!this.conversationOpen)return!1;let e=new Set(this.conversationBranchEntryIDs||[]);return(this.conversationEntries||[]).some(t=>e.has(String(t&&t.id||``))&&t._live&&(typeof MC.liveAuditStateSettled!=`function`||!MC.liveAuditStateSettled(t._live_state)))}conversationLiveStatusText(){return(this.conversationMessages||[]).length>0?`Model is responding…`:`Waiting for request data…`}closeConversation(){this.followUpAbort&&this.followUpAbort.abort(),this.conversationOpen=!1,this.conversationRequestToken++,this.conversationSessionID=``,this._setConversationEntryIDs([]),this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1;let e=this.conversationReturnFocusEl;this.conversationReturnFocusEl=null,e&&typeof e.focus==`function`&&document.contains(e)&&requestAnimationFrame(()=>e.focus())}_focusConversationDrawer(){if(!this.conversationOpen)return;let e=this.conversationCloseBtnEl;if(e&&typeof e.focus==`function`){e.focus();return}let t=this.conversationDialogEl;t&&typeof t.focus==`function`&&t.focus()}async fetchConversation(e,t,n=!0,r=!1){try{let i=await _s(`/admin/audit/conversation?`+(`log_id=`+encodeURIComponent(e)+`&limit=120`),{label:`audit conversation`});if(t!==this.conversationRequestToken||i.stale)return;if(!i.ok){this.conversationError=`Unable to load interactions.`;return}let a=i.data||{},o=a.anchor_id||e,s=Array.isArray(a.entries)?a.entries:[],c=MC.upsertAuditRecords(s,`conversation.hydrated`),l=fI(this.conversationEntryIDs,c);l.length>this.conversationEntryIDs.length&&this._setConversationEntryIDs(l),r&&(this.conversationFollowLatest=uI(c,o)),this.conversationAnchorID=o;let u=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);u&&u.session_id&&(this.conversationSessionID=String(u.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(),this.conversationFollowLatest?this._scheduleLatestScroll():n&&this._scheduleAnchorScroll()}catch(e){if(t!==this.conversationRequestToken)return;console.error(`Failed to fetch audit conversation:`,e),this.conversationError=`Failed to load interactions.`}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return sI(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return eI(e)?ZF(e.path):``}canSendFollowUp(){return!!this.followUpKind()&&!!String(this.followUpText||``).trim()&&!this.followUpSending&&!this.conversationLiveWaiting()}async sendFollowUp(){if(!this.canSendFollowUp())return;let e=this.selectedConversationEntry(),t=tI(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=WI(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},zI);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=rI(e,n,r),o=await hs(e.path,{method:`POST`,headers:a,body:JSON.stringify(t),signal:i.signal}),s=String(o.headers.get(`X-Request-ID`)||``).trim();if(s&&this.followUpRequestID&&(this.followUpRequestID=s),!o.ok){let e=`Unable to send message.`;try{let t=await o.json();e=t&&t.error&&t.error.message||e}catch{}this.followUpError=e,(this.followUpRequestID===r||this.followUpRequestID===s)&&(this.followUpRequestID=``);return}if(this.followUpText=``,await UI(o),!MC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){ys(e)||i.signal.aborted?a&&this.conversationOpen&&(this.followUpError=`The request timed out.`):(console.error(`Failed to send interaction follow-up:`,e),this.followUpError=`Failed to send message.`)}finally{clearTimeout(o),this.followUpAbort===i&&(this.followUpAbort=null,this.followUpSending=!1)}}async _selectPersistedFollowUp(e,t,n,r){let i=Date.now()+BI;for(;this.conversationOpen&&n===this.conversationRequestToken&&Date.now(){let e=this.conversationThreadEl;if(!e)return;let t=e.querySelectorAll(`[data-conversation-anchor="true"]`),n=t[t.length-1];n&&typeof n.scrollIntoView==`function`&&n.scrollIntoView({block:`center`})})}_scheduleLatestScroll(){requestAnimationFrame(()=>{let e=this.conversationThreadEl;if(!e)return;let t=e.lastElementChild;t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`end`})})}};async function UI(e){let t=e&&e.body&&typeof e.body.getReader==`function`?e.body.getReader():null;if(!t){await e.text();return}for(;!(await t.read()).done;);}function WI(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function GI(e,t){return new Promise((n,r)=>{let i,a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};if(i=setTimeout(()=>{t&&t.removeEventListener(`abort`,a),n()},e),t){if(t.aborted){a();return}t.addEventListener(`abort`,a,{once:!0})}})}var KI=new HI,qI=0;Mn(()=>{An(()=>{let e=DC(MC.auditRecordChanges,qI);e.length!==0&&(qI=Number(e[e.length-1].version||0),Er(()=>{e.forEach(e=>{if(!OC(e))return;let t=MC.auditRecord(e.key);KI.handleAuditRecordChange(t,e.eventType)})}))})});var JI=R(``),YI=R(` `),XI=R(``),ZI=R(`
`);function QI(e,t){E(t,!0);let n=ya(t,`thread`,3,null),r=ya(t,`expanded`,3,!1),i=ya(t,`onactivate`,3,null),a=O(()=>ds.formatTimestamp(t.entry.timestamp)),o=O(()=>I(a)===`-`?I(a):I(a).slice(I(a).lastIndexOf(` `)+1)),s=O(()=>KI.conversationOpen&&String(KI.conversationAnchorID||``)===String(t.entry.id||``));function c(e){e.preventDefault(),i()&&i()()}function l(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function u(e){if(e.stopPropagation(),e.preventDefault(),I(s)){KI.closeConversation();return}KI.openConversation(t.entry,e.currentTarget)}var d=ZI();let f;var p=M(d),m=M(p),h=e=>{var t=JI(),r=M(t);{let e=O(()=>n().expanded?Ha:Wa);G(r,{get icon(){return I(e)},class:`audit-thread-expander-svg`})}var i=P(r,2),a=M(i,!0);T(i),T(t),F(()=>{W(t,`aria-expanded`,n().expanded),W(t,`title`,`Session with `+n().count+` requests`),W(t,`aria-label`,`Session with `+n().count+` requests, `+(n().expanded?`collapse`:`expand`)),B(a,n().count)}),L(`click`,t,l),z(e,t)};V(m,e=>{n()&&e(h)});var g=P(m,2),_=M(g),v=M(_,!0);T(_);var y=P(_,2),b=M(y,!0);T(y),T(g);var x=P(g,2),S=e=>{var n=YI(),r=M(n,!0);T(n),F(e=>B(r,e),[()=>bc(t.entry)]),z(e,n)};V(x,e=>{(t.entry.requested_model||t.entry.model)&&e(S)});var C=P(x,2),w=M(C,!0);T(C),T(p);var ee=P(p,2),te=M(ee);RF(te,{get entry(){return t.entry}});var ne=P(te,2),re=M(ne),ie=M(re,!0);T(re);var ae=P(re,2),oe=M(ae,!0);T(ae),T(ne);var se=P(ne,2),ce=M(se,!0);T(se);var le=P(se,2),ue=e=>{var t=XI();let n;var r=M(t);{let e=O(()=>I(s)?Ua:Wa);G(r,{get icon(){return I(e)},class:`audit-conversation-trigger-svg`})}T(t),F(()=>{n=U(t,1,`audit-conversation-trigger svelte-17mysgz`,null,n,{"audit-conversation-trigger-active":I(s)}),W(t,`title`,I(s)?`Close interactions`:`Open interactions`),W(t,`aria-label`,I(s)?`Close interactions`:`Open interactions`),W(t,`aria-pressed`,I(s))}),L(`click`,t,u),z(e,t)},de=O(()=>KI.canShowConversation(t.entry));V(le,e=>{I(de)&&e(ue)}),T(ee),T(d),F((e,n,i,s)=>{f=U(d,1,`audit-entry-summary svelte-17mysgz`,null,f,e),W(d,`aria-expanded`,r()),U(g,1,`audit-status-badge audit-request-badge ${n??``}`,`svelte-17mysgz`),W(g,`title`,`Status `+(t.entry.status_code||`-`)+` · `+(t.entry.method||`-`)),W(g,`aria-label`,(t.entry.status_code||`-`)+` `+(t.entry.method||`-`)),B(v,t.entry.status_code||`-`),B(b,t.entry.method||`-`),B(w,t.entry.path||`-`),W(ne,`title`,i),W(ne,`aria-label`,I(a)),B(ie,I(a)),B(oe,I(o)),B(ce,s)},[()=>({"audit-entry-summary-live-in-progress":UP(t.entry),"audit-entry-summary-has-interactions":KI.canShowConversation(t.entry)}),()=>HP(t.entry.status_code),()=>mc(t.entry.timestamp),()=>VP(t.entry.duration_ns)]),L(`click`,d,c),z(e,d),D()}Hr([`click`]);var $I=R(``);function eL(e,t){E(t,!0);let n=ya(t,`label`,3,`Copy`),r=ya(t,`copiedLabel`,3,`Copied`),i=ya(t,`errorLabel`,3,``),a=ya(t,`class`,3,`btn`),o=O(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=$I();let c;var l=M(s),u=e=>{G(e,{get icon(){return Ka},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{G(e,{get icon(){return Ya},width:`14`,height:`14`})};V(l,e=>{t.state.copied?e(u):e(d,-1)});var f=P(l,2),p=M(f,!0);T(f),T(s),F(()=>{c=U(s,1,Fi([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),B(p,I(o))}),L(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),z(e,s),D()}Hr([`click`]);var tL=R(`
Error Message
 
`),nL=R(`
 
`),rL=R(` `),iL=R(` streaming`),aL=R(`
Body
`),oL=R(`

`),sL=R(`

`),cL=R(`

`),lL=R(`
`);function uL(e,t){E(t,!0);let n=_M({logPrefix:`Failed to copy audit payload:`}),r=_M({logPrefix:`Failed to copy audit payload:`}),i=O(()=>t.pane&&t.pane.showHeaders?ac(t.pane.headers):``),a=O(()=>!t.pane||!t.pane.showBody?``:yI(t.pane.body)?wI(t.pane.body):KI.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=O(()=>!!(t.pane&&KI.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),KI.handleErrorConversationClick(e,t.pane.entry))}var c=lL();let l;var u=M(c),d=e=>{var n=tL(),r=P(M(n),2);let i;var a=M(r,!0);T(r),T(n),F(()=>{i=U(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":I(o)}),W(r,`role`,I(o)?`button`:null),W(r,`tabindex`,I(o)?0:null),B(a,t.pane.errorMessage)}),L(`mousedown`,r,e=>KI.startBodyInteraction(e)),L(`keydown`,r,s),L(`click`,r,e=>KI.handleErrorConversationClick(e,t.pane.entry)),z(e,n)};V(u,e=>{t.pane.showErrorMessage&&e(d)});var f=P(u,2),p=e=>{var n=nL(),a=M(n),o=M(a),s=M(o,!0);T(o),eL(P(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,ac)}),T(a);var c=P(a,2),l=M(c,!0);T(c),T(n),F(()=>{B(s,t.pane.headersTitle||`Headers`),B(l,I(i))}),z(e,n)};V(f,e=>{t.pane.showHeaders&&e(p)});var m=P(f,2),h=e=>{var r=aL(),i=M(r),o=M(i),s=P(M(o),2),c=e=>{var n=rL(),r=M(n,!0);T(n),F(()=>B(r,t.pane.bodyCacheRatioLabel)),z(e,n)};V(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=P(s,2),u=e=>{z(e,iL())};V(l,e=>{t.pane.streaming&&e(u)}),T(o),eL(P(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,ac)}),T(i);var d=P(i,2);hi(d,()=>I(a),!0),T(d),T(r),L(`mousedown`,d,e=>KI.startBodyInteraction(e)),L(`click`,d,e=>KI.handleBodyConversationClick(e,t.pane.entry)),z(e,r)};V(m,e=>{t.pane.showBody&&e(h)});var g=P(m,2),_=e=>{var n=oL(),r=M(n,!0);T(n),F(()=>B(r,t.pane.emptyMessage)),z(e,n)};V(g,e=>{t.pane.showEmpty&&e(_)});var v=P(g,2),y=e=>{var n=sL(),r=P(M(n),2),i=M(r,!0);T(r),T(n),F(()=>B(i,t.pane.pendingMessage)),z(e,n)};V(v,e=>{t.pane.showPending&&e(y)});var b=P(v,2),x=e=>{var n=cL(),r=M(n,!0);T(n),F(()=>B(r,t.pane.tooLargeMessage)),z(e,n)};V(b,e=>{t.pane.showTooLarge&&e(x)}),T(c),F(()=>l=U(c,1,`audit-pane svelte-1h5puht`,null,l,{"audit-pane-split":t.pane&&t.pane.layout===`split`,"audit-pane-split-single":t.pane&&t.pane.layout===`split`&&!(t.pane.showHeaders&&t.pane.showBody)})),z(e,c),D()}Hr([`mousedown`,`keydown`,`click`]);var dL=R(` `),fL=R(` `),pL=R(` `),mL=R(` `),hL=R(``),gL=R(`
`),_L=R(`
`);function vL(e,t){E(t,!0);let n=ya(t,`panes`,19,()=>[]),r=k(null),i=O(()=>xF(I(r),t.entry,n())),a=e=>`audit-tab-`+t.entry.id+`-`+e,o=e=>`audit-tabpanel-`+t.entry.id+`-`+e;function s(e,t){let i=n().map(e=>e.id),a=SF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),A(r,a,!0))}var c=_L(),l=M(c);H(l,21,n,e=>e.id,(e,t)=>{var n=hL();let c;var l=M(n),u=M(l),d=e=>{G(e,{get icon(){return Pa}})},f=e=>{G(e,{get icon(){return Na}})};V(u,e=>{I(t).pane.direction===`request`?e(d):I(t).pane.direction===`response`&&e(f,1)}),T(l);var p=P(l,2),m=M(p,!0);T(p);var h=P(p,2),g=e=>{var n=dL(),r=M(n);T(n),F(()=>B(r,`#${I(t).pane.seq??``}`)),z(e,n)};V(h,e=>{I(t).pane.seq&&e(g)});var _=P(h,2),v=e=>{var n=fL(),r=M(n,!0);T(n),F(()=>{U(n,1,`provider-badge audit-pane-kind audit-pane-kind-${I(t).pane.kind??``}`,`svelte-1bc5vi5`),B(r,I(t).pane.kind)}),z(e,n)};V(_,e=>{I(t).pane.kind&&e(v)});var y=P(_,2);H(y,17,()=>I(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=pL(),r=M(n,!0);T(n),F(()=>{W(n,`title`,I(t).title),B(r,I(t).label)}),z(e,n)});var b=P(y,2),x=e=>{var n=mL(),r=M(n,!0);T(n),F(()=>B(r,I(t).pane.savingsLabel)),z(e,n)};V(b,e=>{I(t).pane.savingsLabel&&e(x)});var S=P(b,2),C=e=>{var n=fL(),r=M(n,!0);T(n),F(e=>{U(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),B(r,I(t).pane.statusCode)},[()=>HP(I(t).pane.statusCode)]),z(e,n)};V(S,e=>{I(t).pane.statusCode&&e(C)}),T(n),F((e,r)=>{c=U(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":I(i)===I(t).id}),W(n,`aria-selected`,I(i)===I(t).id),W(n,`id`,e),W(n,`aria-controls`,r),W(n,`tabindex`,I(i)===I(t).id?0:-1),U(l,1,Fi([`audit-pane-icon`,I(t).pane.direction&&`audit-pane-icon-${I(t).pane.direction}`]),`svelte-1bc5vi5`),B(m,I(t).pane.title)},[()=>a(I(t).id),()=>o(I(t).id)]),L(`keydown`,n,e=>s(e,I(t).id)),L(`click`,n,()=>A(r,I(t).id,!0)),z(e,n)}),T(l),H(P(l,2),17,n,e=>e.id,(e,t)=>{var n=gL();let r;uL(M(n),{get pane(){return I(t).pane}}),T(n),F((e,a)=>{W(n,`id`,e),W(n,`aria-labelledby`,a),r=Hi(n,``,r,{display:I(i)===I(t).id?null:`none`})},[()=>o(I(t).id),()=>a(I(t).id)]),z(e,n)}),T(c),z(e,c),D()}Hr([`keydown`,`click`]);var yL=R(`
`),bL=R(`
`);function xL(e,t){E(t,!0);let n=ya(t,`thread`,3,null),r=O(()=>TF.isAuditEntryExpanded(t.entry)),i=O(()=>KI.conversationOpen&&String(KI.conversationAnchorID||``)===String(t.entry.id||``)),a=O(()=>I(r)?yF(t.entry,WF):[]),o=O(()=>I(r)?mN(t.entry,lP.auditEntryWorkflow(t.entry),lP.workflowFeatureCaps()):null);function s(){TF.toggleAuditEntryExpanded(t.entry)}var c=bL();let l;var u=M(c);QI(u,{get entry(){return t.entry},get thread(){return n()},get expanded(){return I(r)},onactivate:s});var d=P(u,2),f=e=>{var n=yL(),r=M(n),i=e=>{AM(e,{get chart(){return I(o)}})};V(r,e=>{I(o)&&e(i)});var s=P(r,2);vL(s,{get entry(){return t.entry},get panes(){return I(a)}}),FF(P(s,2),{get entry(){return t.entry}}),T(n),ki(3,n,()=>qs,()=>({y:-6,duration:sP(150)})),z(e,n)};V(d,e=>{I(r)&&e(f)}),T(c),F(()=>l=U(c,1,`audit-entry svelte-cmjgwr`,null,l,{"audit-entry-interactions-open":I(i)})),z(e,c),D()}var SL=R(`
`),CL=R(`
`),wL=R(`

`),TL=R(`
`),EL=R(`
`);function DL(e,t){E(t,!0);let n=O(()=>TP(t.entry)),r=O(()=>TF.isThreadExpanded(I(n))),i=O(()=>TF.threadChildren(I(n))),a=O(()=>I(i)&&!I(i).loading&&Number(I(i).total||0)>I(i).entries.length+1);var o=Qr(),s=N(o),c=e=>{xL(e,{get entry(){return t.entry}})},l=O(()=>!DP(t.entry)),u=e=>{var n=EL(),o=M(n);{let e=O(()=>({count:EP(t.entry),expanded:I(r),ontoggle:()=>TF.toggleThread(t.entry)}));xL(o,{get entry(){return t.entry},get thread(){return I(e)}})}var s=P(o,2),c=e=>{var t=TL(),n=M(t),r=e=>{var t=SL();SS(M(t),{size:14,label:`Loading session requests`}),T(t),z(e,t)};V(n,e=>{I(i)&&I(i).loading&&e(r)});var o=P(n,2);H(o,17,()=>I(i)&&I(i).entries||[],e=>e.id,(e,t)=>{var n=CL();xL(M(n),{get entry(){return I(t)}}),T(n),z(e,n)});var s=P(o,2),c=e=>{var t=wL(),n=M(t);T(t),F(()=>B(n,`Showing the latest ${I(i).entries.length+1} of ${I(i).total??``} - requests in this session.`)),z(e,t)};V(s,e=>{I(a)&&e(c)}),T(t),ki(3,t,()=>Js,()=>({duration:sP(150)})),z(e,t)};V(s,e=>{I(r)&&e(c)}),T(n),z(e,n)};V(s,e=>{I(l)?e(c):e(u,-1)}),z(e,o),D()}var OL=R(`

.

`),kL=R(`
Audit logging is off. Live entries are temporary and disappear after - refresh. Set LOGGING_ENABLED=true to persist them.
`),AL=R(`

`),jL=R(`
`),ML=R(`
`),NL=R(`
`),PL=R(`
`),FL=R(`
`);function IL(e,t){E(t,!0);let n=O(()=>Ss.config&&Ss.config.LOGGING_RETENTION_DAYS);An(()=>{if(K.refreshTick,Jo.page===`audit-logs`)return Er(()=>r())});function r(){let e=!1;return(async()=>{try{await Ss.ensureLoaded()}finally{await TF.fetchAuditLog(!0),!e&&Ss.liveLogsVisible()&&MC.ensureLiveLogs()}})(),()=>{e=!0,MC.stopLiveLogs()}}var i=FL(),a=M(i),o=M(a),s=P(M(o),2),c=e=>{qS(e,{copyId:`audit-retention-help-copy`,label:`retention help`,text:`If you want to change the retention period, set LOGGING_RETENTION_DAYS (env var) or logging.retention_days (config.yaml) and restart the gateway. Default is 30 days; 0 keeps audit logs forever.`,title:e=>{var t=OL(),r=M(t,!0),i=P(r),a=M(i,!0);T(i),Ue(),T(t),F((e,t)=>{B(r,e),B(a,t)},[()=>xP(I(n)),()=>SP(I(n))]),z(e,t)},$$slots:{title:!0}})},l=O(()=>bP(I(n)));V(s,e=>{I(l)&&e(c)}),T(o),T(a);var u=P(a,2);tl(M(u),{onchange:()=>TF.fetchAuditLog(!0)}),T(u);var d=P(u,2);Fc(d,{});var f=P(d,2),p=e=>{z(e,kL())},m=O(()=>Ss.loaded&&!Ss.auditVisible()&&!K.needsAuth);V(f,e=>{I(m)&&e(p)});var h=P(f,2),g=M(h);DF(g,{});var _=P(g,2),v=M(_),y=M(v),b=e=>{var t=AL(),n=M(t);T(t),F(e=>B(n,`Showing ${TF.auditLog.offset+1}-${e??``} of ${TF.auditLog.total??``} - ${TF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(TF.auditLog.offset+TF.auditLog.limit,TF.auditLog.total)]),z(e,t)};V(y,e=>{TF.auditLog.total>0&&e(b)});var x=P(y,2),S=M(x);na(S),Ue(2),T(x),T(v),MF(P(v,2),{}),T(_);var C=P(_,2),w=e=>{var t=jL();SS(M(t),{size:18,label:`Loading audit logs`}),T(t),z(e,t)},ee=e=>{var t=NL();H(t,29,()=>TF.auditLog.entries,e=>e.id,(e,t)=>{var n=ML(),r=M(n),i=e=>{DL(e,{get entry(){return I(t)}})},a=e=>{xL(e,{get entry(){return I(t)}})};V(r,e=>{TF.auditGroupSessions?e(i):e(a,-1)}),T(n),Oi(n,()=>rP,()=>({duration:sP(150)})),ki(1,n,()=>cP,()=>({live:I(t)._live})),z(e,n)}),T(t),z(e,t)};V(C,e=>{TF.loading&&TF.auditLog.entries.length===0?e(w):TF.auditLog.entries.length>0&&e(ee,1)});var te=P(C,2),ne=e=>{var t=PL();TS(M(t),{}),T(t),z(e,t)};V(te,e=>{TF.auditLog.entries.length===0&&!TF.loading&&!K.needsAuth&&e(ne)}),Jw(P(te,2),{get total(){return TF.auditLog.total},get offset(){return TF.auditLog.offset},get limit(){return TF.auditLog.limit},onprev:()=>TF.auditLogPrevPage(),onnext:()=>TF.auditLogNextPage()}),T(h),T(i),F(()=>ia(S,TF.auditGroupSessions)),L(`change`,S,()=>TF.toggleAuditGroupSessions()),z(e,i),D()}Hr([`change`]);function LL(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function RL(e){return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(e=>e):e==null?[]:String(e).split(`,`).map(e=>e.trim()).filter(e=>e)}function zL(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function BL(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function VL(e,t){let n=String(t||``).trim();return n&&zL(e,n)?n:BL(e)}function HL(e,t){let n=zL(e,t);return!n||!n.defaults?{}:LL(n.defaults)}function UL(e,t,n){return{...HL(e,n),...LL(t)}}function WL(e,t){let n=VL(e,t);return{name:``,type:n,description:``,user_path:``,config:HL(e,n)}}function GL(e,t){if(!t)return e||[];let n=String(t).toLowerCase();return(e||[]).filter(e=>[e.name,e.type,e.user_path,e.description,e.summary].some(e=>String(e||``).toLowerCase().includes(n)))}function KL(e,t){let n=zL(e,t);return n&&n.label?n.label:t||`Unknown`}function qL(e,t){let n=zL(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function JL(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?RL(n):n}function YL(e,t,n){if(!t)return e;let r=LL(e);if(t.input===`number`){let e=String(n||``).trim();if(e===``)delete r[t.key];else{let n=Number(e);r[t.key]=Number.isFinite(n)?n:e}}else t.input===`checkboxes`?r[t.key]=RL(n):r[t.key]=n;return r}function XL(e,t,n){return JL(e,t).includes(String(n||``).trim())}function ZL(e,t,n,r){let i=RL(JL(e,t)),a=String(n||``).trim();return a?YL(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function QL(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),description:String(e&&e.description||``).trim()||void 0,user_path:String(e&&e.user_path||``).trim()||void 0,config:LL(e&&e.config)}}var $L=new class{#e=k(j([]));get guardrails(){return I(this.#e)}set guardrails(e){A(this.#e,e,!0)}#t=k(j([]));get types(){return I(this.#t)}set types(e){A(this.#t,e,!0)}#n=k(!0);get available(){return I(this.#n)}set available(e){A(this.#n,e,!0)}#r=k(!1);get loading(){return I(this.#r)}set loading(e){A(this.#r,e,!0)}#i=k(!1);get typesLoading(){return I(this.#i)}set typesLoading(e){A(this.#i,e,!0)}#a=k(``);get error(){return I(this.#a)}set error(e){A(this.#a,e,!0)}#o=k(``);get filter(){return I(this.#o)}set filter(e){A(this.#o,e,!0)}#s=k(!1);get formOpen(){return I(this.#s)}set formOpen(e){A(this.#s,e,!0)}#c=k(!1);get formSubmitting(){return I(this.#c)}set formSubmitting(e){A(this.#c,e,!0)}#l=k(``);get deletingName(){return I(this.#l)}set deletingName(e){A(this.#l,e,!0)}#u=k(`create`);get formMode(){return I(this.#u)}set formMode(e){A(this.#u,e,!0)}#d=k(``);get formOriginalName(){return I(this.#d)}set formOriginalName(e){A(this.#d,e,!0)}#f=k(j({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return I(this.#f)}set form(e){A(this.#f,e,!0)}get filtered(){return GL(this.guardrails,this.filter)}typeLabel(e){return KL(this.types,e)}typeFields(e){return qL(this.types,e)}fieldValue(e){return JL(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:YL(this.form.config,e,t)}}arrayFieldSelected(e,t){return XL(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:ZL(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=WL(this.types,BL(this.types)),this.formOpen=!0}openEdit(e){let t=VL(this.types,e&&e.type);this.formMode=`edit`,this.formOriginalName=String(e&&e.name||``).trim(),this.error=``,this.form={name:this.formOriginalName,type:t,description:String(e&&e.description||``).trim(),user_path:String(e&&e.user_path||``).trim(),config:UL(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=WL(this.types,BL(this.types))}changeType(e){let t=VL(this.types,e);this.form={...this.form,type:t,config:HL(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await _T(`/admin/guardrails/types`,{label:`guardrail types`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.types=[];return}if(e.result&&(this.available=!0),this.types=e.items,e.status===`error`){this.error=e.error;return}let t=VL(this.types,this.form.type);this.form={...this.form,type:t,config:UL(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await _T(`/admin/guardrails`,{label:`guardrails`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.guardrails=[];return}e.result&&(this.available=!0),this.guardrails=e.items,this.error=e.error}finally{this.loading=!1}}async fetchPage(){await Promise.all([this.fetchTypes(),this.fetchGuardrails()])}async submitForm(){let e=String(this.form.name||``).trim(),t=String(this.form.type||``).trim();if(!e){this.error=`Name is required.`;return}if(!t){this.error=`Type is required.`;return}this.error=``,this.formSubmitting=!0;let n=QL(this.form);try{let t=await vT(`/admin/guardrails`,`PUT`,n,{label:`save guardrail`,errorFallback:`Failed to save guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}q.success(`Guardrail "`+e+`" saved.`),this.closeForm(),this.fetchGuardrails()}finally{this.formSubmitting=!1}}async deleteGuardrail(e){let t=String(e&&e.name||``).trim();if(!(!t||this.deletingName)&&window.confirm(`Delete guardrail "`+t+`"? Workflows that still reference it must be updated first.`)){this.deletingName=t;try{let e=await vT(`/admin/guardrails`,`DELETE`,{name:t},{label:`delete guardrail`,errorFallback:`Failed to delete guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,q.error(e.error);return}if(e.status===`error`){q.error(e.error);return}q.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},eR=R(`
`),tR=R(`

Loading guardrails...

`),nR=R(`
`),rR=R(`
`),iR=R(`
NameTypeUser PathSummaryActions
`),aR=R(`

No guardrails defined yet.

`),oR=R(`

Instances

Each instance has a reusable name, a type, an optional user path for - future UI visibility scoping, and a JSON-backed config payload for - that type.

`);function sR(e,t){E(t,!0);var n=oR(),r=M(n),i=P(M(r),2);G(M(i),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(i),T(r);var a=P(r,2),o=e=>{var t=eR(),n=M(t);yw(M(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return $L.filter},set value(e){$L.filter=e}}),T(n),T(t),z(e,t)};V(a,e=>{$L.available&&e(o)});var s=P(a,2),c=e=>{var t=tR();SS(M(t),{size:16,label:`Loading guardrails`}),Ue(),T(t),z(e,t)};V(s,e=>{$L.loading&&$L.filtered.length===0&&e(c)});var l=P(s,2),u=e=>{var t=iR(),n=M(t),r=P(M(n));H(r,21,()=>$L.filtered,e=>e.name,(e,t)=>{var n=rR(),r=M(n),i=M(r,!0);T(r);var a=P(r),o=M(a),s=M(o,!0);T(o),T(a);var c=P(a),l=M(c,!0);T(c);var u=P(c),d=M(u),f=M(d,!0);T(d);var p=P(d,2),m=e=>{var n=nR(),r=M(n,!0);T(n),F(()=>B(r,I(t).description)),z(e,n)};V(p,e=>{I(t).description&&e(m)}),T(u);var h=P(u),g=M(h),_=M(g);{let e=O(()=>`Edit guardrail `+I(t).name);gT(_,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>$L.openEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=P(_,2);{let e=O(()=>($L.deletingName===I(t).name?`Deleting guardrail `:`Delete guardrail `)+I(t).name),n=O(()=>$L.deletingName===I(t).name);gT(v,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$L.deleteGuardrail(I(t)),get disabled(){return I(n)},children:(e,t)=>{G(e,{get icon(){return Io},class:`table-icon-svg`})},$$slots:{default:!0}})}T(g),T(h),T(n),F(e=>{B(i,I(t).name),B(s,e),B(l,I(t).user_path||`—`),B(f,I(t).summary||I(t).description||`No summary yet.`)},[()=>$L.typeLabel(I(t).type)]),z(e,n)}),T(r),T(n),T(t),z(e,t)};V(l,e=>{$L.filtered.length>0&&e(u)});var d=P(l,2),f=e=>{z(e,aR())};V(d,e=>{$L.filtered.length===0&&!$L.loading&&$L.available&&!$L.error&&!K.authError&&e(f)}),T(n),F(()=>i.disabled=$L.typesLoading||$L.formSubmitting||!$L.available),L(`click`,i,()=>$L.openCreate()),z(e,n),D()}Hr([`click`]);var cR=R(`

Workflows reference these names directly, so renames are - intentionally avoided after creation.

`),lR=R(``),uR=R(``),dR=R(``),fR=R(``),pR=R(``),mR=R(``),hR=R(``),gR=R(``),_R=R(``),vR=R(`
`),yR=R(``),bR=R(` `),xR=R(`
`),SR=R(`
`);function CR(e,t){E(t,!0);let n=O(()=>$L.formMode===`edit`);{let t=e=>{z(e,cR())},r=O(()=>I(n)?`Edit Guardrail`:`Create Guardrail`);bE(e,{get open(){return $L.formOpen},get title(){return I(r)},ariaLabel:`Guardrail editor`,get error(){return $L.error},get submitting(){return $L.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>$L.closeForm(),onsubmit:()=>$L.submitForm(),headerHint:t,children:(e,t)=>{var r=SR(),i=M(r);SE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=lR();na(r),F(()=>{r.disabled=I(n),W(r,`data-modal-autofocus`,!I(n)||void 0)}),da(r,()=>$L.form.name,e=>$L.form.name=e),z(e,r)},$$slots:{default:!0}});var a=P(i,2);SE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=dR();H(r,21,()=>$L.types,e=>e.type,(e,t)=>{var n=uR(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).type)&&(n.value=(n.__value=I(t).type)??``)}),z(e,n)}),T(r);var i;Wi(r),F(()=>{r.disabled=I(n),i!==(i=$L.form.type)&&(r.value=(r.__value=$L.form.type)??``,Ui(r,$L.form.type))}),L(`change`,r,e=>$L.changeType(e.currentTarget.value)),z(e,r)},$$slots:{default:!0}});var o=P(a,2);SE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=fR();na(r),F(()=>W(r,`data-modal-autofocus`,I(n)?!0:void 0)),da(r,()=>$L.form.description,e=>$L.form.description=e),z(e,r)},$$slots:{default:!0}});var s=P(o,2),c=M(s);qS(c,{copyId:`guardrail-user-path-help-copy`,label:`guardrail user path help`,text:`Only used for auxiliary rewrite (llm_based_altering) guardrails; ignored for other guardrail types.`,title:e=>{z(e,pR())},$$slots:{title:!0}});var l=P(c,2);na(l),T(s),H(P(s,2),17,()=>$L.typeFields($L.form.type),e=>e.key,(e,t)=>{var n=Qr(),r=N(n),i=e=>{var n=vR(),r=M(n);{let e=e=>{var n=mR(),r=M(n,!0);T(n),F(()=>{W(n,`for`,`guardrail-field-`+I(t).key),B(r,I(t).label)}),z(e,n)},n=O(()=>`guardrail-field-help-`+I(t).key),i=O(()=>I(t).label+` help`),a=O(()=>I(t).help||``);qS(r,{get copyId(){return I(n)},get label(){return I(i)},get text(){return I(a)},title:e,$$slots:{title:!0}})}var i=P(r,2),a=e=>{var n=hR();H(n,21,()=>I(t).options||[],e=>e.value,(e,t)=>{var n=uR(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n);var r;Wi(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Ui(n,e))},[()=>$L.fieldValue(I(t))]),L(`change`,n,e=>$L.setFieldValue(I(t),e.currentTarget.value)),z(e,n)},o=e=>{var n=gR();ft(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`placeholder`,I(t).placeholder||``),ra(n,e),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0)},[()=>$L.fieldValue(I(t))]),L(`input`,n,e=>$L.setFieldValue(I(t),e.currentTarget.value)),z(e,n)},s=e=>{var n=_R();na(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`type`,I(t).input||`text`),W(n,`placeholder`,I(t).placeholder||``),ra(n,e),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0)},[()=>$L.fieldValue(I(t))]),L(`input`,n,e=>$L.setFieldValue(I(t),e.currentTarget.value)),z(e,n)};V(i,e=>{I(t).input===`select`?e(a):I(t).input===`textarea`?e(o,1):e(s,-1)}),T(n),z(e,n)},a=e=>{var n=xR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2);H(a,21,()=>I(t).options||[],e=>I(t).key+`-`+e.value,(e,n)=>{var r=yR(),i=M(r);na(i);var a=P(i,2),o=M(a,!0);T(a),T(r),F(e=>{ia(i,e),B(o,I(n).label)},[()=>$L.arrayFieldSelected(I(t),I(n).value)]),L(`change`,i,e=>$L.toggleArrayFieldValue(I(t),I(n).value,e.currentTarget.checked)),z(e,r)}),T(a);var o=P(a,2),s=e=>{var n=bR(),r=M(n,!0);T(n),F(()=>{W(n,`id`,`guardrail-field-help-`+I(t).key),B(r,I(t).help)}),z(e,n)};V(o,e=>{I(t).help&&e(s)}),T(n),F(()=>{W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0),B(i,I(t).label)}),z(e,n)};V(r,e=>{I(t).input===`checkboxes`?e(a,-1):e(i)}),z(e,n)}),T(r),da(l,()=>$L.form.user_path,e=>$L.form.user_path=e),z(e,r)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`change`,`input`]);var wR=R(`

Guardrails

`),TR=R(`
Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage - definitions here.
`),ER=R(`
Guardrails feature is unavailable.
`),DR=R(`
`),OR=R(`

Reusable Policy Objects

Guardrail Library

Store guardrails in the database, keep them hot in memory, and attach - them to workflows by reference.

Instances
Types
`);function kR(e,t){E(t,!0),An(()=>{K.refreshTick,Jo.page===`guardrails`&&(Ss.ensureLoaded(),$L.fetchPage())});var n=OR(),r=M(n),i=M(r);qS(M(i),{copyId:`guardrails-help-copy`,label:`guardrails help`,text:`Reusable policy objects stored in the database and kept hot in memory for workflow execution.`,title:e=>{z(e,wR())},$$slots:{title:!0}}),T(i),T(r);var a=P(r,2),o=P(M(a),2),s=M(o),c=P(M(s),2),l=M(c,!0);T(c),T(s);var u=P(s,2),d=P(M(u),2),f=M(d,!0);T(d),T(u),T(o),T(a);var p=P(a,2);Fc(p,{});var m=P(p,2),h=e=>{z(e,TR())},g=O(()=>!Ss.guardrailsVisible());V(m,e=>{I(g)&&e(h)});var _=P(m,2),v=e=>{z(e,ER())};V(_,e=>{!K.authError&&!$L.available&&e(v)});var y=P(_,2),b=e=>{var t=DR(),n=M(t,!0);T(t),F(()=>B(n,$L.error)),z(e,t)};V(y,e=>{!K.authError&&$L.error&&!$L.formOpen&&e(b)});var x=P(y,2);CR(x,{}),sR(P(x,2),{}),T(n),F((e,t)=>{B(l,e),B(f,t)},[()=>oc($L.guardrails.length),()=>oc($L.types.length)]),z(e,n),D()}var Q=new class{#e=k(j([]));get servers(){return I(this.#e)}set servers(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get formSubmitting(){return I(this.#o)}set formSubmitting(e){A(this.#o,e,!0)}#s=k(`create`);get formMode(){return I(this.#s)}set formMode(e){A(this.#s,e,!0)}#c=k(!1);get slugEdited(){return I(this.#c)}set slugEdited(e){A(this.#c,e,!0)}#l=k(!1);get advancedOpen(){return I(this.#l)}set advancedOpen(e){A(this.#l,e,!0)}#u=k(j(dx()));get form(){return I(this.#u)}set form(e){A(this.#u,e,!0)}#d=k(``);get deletingName(){return I(this.#d)}set deletingName(e){A(this.#d,e,!0)}#f=k(``);get reconnectingName(){return I(this.#f)}set reconnectingName(e){A(this.#f,e,!0)}#p=k(!1);get catalogOpen(){return I(this.#p)}set catalogOpen(e){A(this.#p,e,!0)}#m=k(!1);get catalogLoading(){return I(this.#m)}set catalogLoading(e){A(this.#m,e,!0)}#h=k(``);get catalogError(){return I(this.#h)}set catalogError(e){A(this.#h,e,!0)}#g=k(j(fx()));get catalog(){return I(this.#g)}set catalog(e){A(this.#g,e,!0)}#_=O(()=>Cx(this.servers,this.filter));get filtered(){return I(this.#_)}set filtered(e){A(this.#_,e)}async fetchServers(){if(await Ss.ensureLoaded(),!Ss.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await _T(`/admin/mcp-servers`,{label:`mcp servers`,errorFallback:`Failed to load MCP servers.`,unavailableStatuses:[503,404]});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.servers=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.servers=[],this.error=e.error;return}this.available=!0,this.servers=e.items}finally{this.loading=!1}}openCreate(){this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=dx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=wx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=dx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=yx(this.form.name))}markSlugEdited(){this.formMode===`create`&&(this.slugEdited=!0)}addHeader(){this.form.headers.push({name:``,value:``})}removeHeader(e){this.form.headers.splice(e,1)}async submitForm(){let e=Tx(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await vT(`/admin/mcp-servers`,`PUT`,e.payload,{label:`save mcp server`,errorFallback:`Failed to save MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}q.success(`MCP server "`+e.payload.name+`" saved.`),this.closeForm(),this.fetchServers()}finally{this.formSubmitting=!1}}async deleteServer(e){let t=String(e&&e.name||``).trim(),n=px(e);if(!(!n||this.deletingName||e&&e.managed)&&confirm(`Delete MCP server "`+t+`"? Clients lose access to its tools immediately.`)){this.deletingName=n;try{let e=await vT(`/admin/mcp-servers/`+encodeURIComponent(n),`DELETE`,void 0,{label:`delete mcp server`,errorFallback:`Failed to delete MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,q.error(e.error);return}if(e.status===`error`){q.error(e.error);return}q.success(`MCP server "`+t+`" deleted.`),this.formOpen&&this.form.slug===n&&this.closeForm(),this.fetchServers()}finally{this.deletingName=``}}}async reconnectServer(e){let t=String(e&&e.name||``).trim(),n=px(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await vT(`/admin/mcp-servers/`+encodeURIComponent(n)+`/reconnect`,`POST`,void 0,{label:`reconnect mcp server`,errorFallback:`Failed to reconnect MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,q.error(e.error);return}if(e.status===`error`){q.error(e.error);return}let r=e.result.data,i=mx(r);i===`connected`?q.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?q.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):q.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>px(e)===px(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=px(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...fx(),server:n,status:mx(e)};try{let e=await _s(`/admin/mcp-servers/`+encodeURIComponent(n)+`/catalog`,{label:`mcp server catalog`});if(e.stale)return;if(e.status===503){this.available=!1,this.catalogError=`MCP server management is unavailable.`;return}if(e.status===404){this.catalogError=`MCP server "`+t+`" was not found.`;return}if(!e.ok){this.catalogError=e.status===401?`Authentication required.`:fs(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Ex(n,e.data)}catch(e){console.error(`Failed to load MCP server catalog:`,e),this.catalogError=`Failed to load MCP server catalog.`}finally{this.catalogLoading=!1}}}closeCatalog(){this.catalogOpen=!1,this.catalogLoading=!1,this.catalogError=``,this.catalog=fx()}},AR=R(``),jR=R(`

`),MR=R(`
`),NR=R(`

`),PR=R(`
  • `),FR=R(`

      `),IR=R(`

      No tools listed — the server may still be connecting or degraded.

      `),LR=R(` `,1),RR=R(``);function zR(e,t){E(t,!0);let n=O(()=>Ox(Q.catalog));Ns(e,{get open(){return Q.catalogOpen},variant:`editor`,onclose:()=>Q.closeCatalog(),children:(e,t)=>{var r=RR(),i=M(r),a=M(i),o=P(M(a),2),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=M(l,!0);T(l),T(o),T(a),ks(P(a,2),{label:`Close MCP server catalog`,onclick:()=>Q.closeCatalog()}),T(i);var d=P(i,2),f=e=>{mT(e,{label:`Loading catalog...`})},p=e=>{var t=AR(),n=M(t,!0);T(t),F(()=>B(n,Q.catalogError)),z(e,t)},m=e=>{var t=LR(),r=N(t),i=e=>{var t=jR(),n=M(t,!0);T(t),F(()=>B(n,Q.catalog.instructions)),z(e,t)};V(r,e=>{Q.catalog.instructions&&e(i)});var a=P(r,2);H(a,17,()=>I(n),e=>e.key,(e,t)=>{var n=FR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2);H(a,21,()=>I(t).items,e=>e.key,(e,t)=>{var n=PR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{var n=MR(),r=M(n,!0);T(n),F(()=>{W(n,`title`,`Exposed on the aggregated /mcp endpoint as `+I(t).aggregated),B(r,I(t).aggregated)}),z(e,n)};V(a,e=>{I(t).aggregated&&e(o)});var s=P(a,2),c=e=>{var n=NR(),r=M(n,!0);T(n),F(()=>B(r,I(t).description)),z(e,n)};V(s,e=>{I(t).description&&e(c)}),T(n),F(()=>{W(r,`title`,I(t).aggregated||I(t).name),B(i,I(t).name)}),z(e,n)}),T(a),T(n),F(()=>B(i,I(t).title)),z(e,n)});var o=P(a,2),s=e=>{z(e,IR())},c=O(()=>kx(Q.catalog));V(o,e=>{I(c)&&e(s)}),z(e,t)};V(d,e=>{Q.catalogLoading?e(f):Q.catalogError?e(p,1):e(m,-1)});var h=P(d,2),g=M(h);T(h),T(r),F((e,t)=>{B(c,Q.catalog.server),U(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),B(u,t)},[()=>hx(Q.catalog),()=>mx(Q.catalog)]),L(`click`,g,()=>Q.closeCatalog()),z(e,r)},$$slots:{default:!0}}),D()}Hr([`click`]);var BR=R(`

      The display name can change. The slug is the stable client-facing identity.

      `),VR=R(` Human-readable and Unicode-friendly. You can change it later.`,1),HR=R(`Derived from the name. You may edit it before saving.`),UR=R(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),WR=R(` `,1),GR=R(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),KR=R(``),qR=R(`
      `),JR=R(`
      Headers
      Sent only to the configured server origin. Saved values are shown as ***; leave *** unchanged to keep the stored value.
      Advanced settings Description, access rules, and timeout
      `,1);function YR(e,t){E(t,!0);{let t=e=>{z(e,BR())},n=O(()=>Q.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);bE(e,{get open(){return Q.formOpen},get title(){return I(n)},ariaLabel:`MCP server editor`,get error(){return Q.error},get submitting(){return Q.formSubmitting},onclose:()=>Q.closeForm(),onsubmit:()=>Q.submitForm(),headerHint:t,children:(e,t)=>{var n=JR(),r=N(n);SE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=VR(),r=N(n);na(r),Ue(2),L(`input`,r,()=>Q.syncSlugFromName()),da(r,()=>Q.form.name,e=>Q.form.name=e),z(e,n)},$$slots:{default:!0}});var i=P(r,2);SE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=WR(),r=N(n);na(r);var i=P(r,2),a=e=>{z(e,HR())},o=e=>{z(e,UR())};V(i,e=>{Q.formMode===`create`?e(a):e(o,-1)}),F(()=>r.disabled=Q.formMode===`edit`),L(`input`,r,()=>Q.markSlugEdited()),da(r,()=>Q.form.slug,e=>Q.form.slug=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2);SE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=GR(),r=N(n),i=M(r);i.value=i.__value=`http`;var a=P(i);a.value=a.__value=`sse`,T(r),Ue(2),Gi(r,()=>Q.form.transport,e=>Q.form.transport=e),z(e,n)},$$slots:{default:!0}});var o=P(a,2);SE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=KR();na(n),da(n,()=>Q.form.url,e=>Q.form.url=e),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=P(M(s),2);H(c,21,()=>Q.form.headers,oi,(e,t,n)=>{var r=qR(),i=M(r);na(i);var a=P(i,2);na(a),gT(P(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeHeader(n),children:(e,t)=>{G(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),T(r),da(i,()=>I(t).name,e=>I(t).name=e),da(a,()=>I(t).value,e=>I(t).value=e),z(e,r)}),T(c);var l=P(c,2),u=M(l);G(M(u),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(u),T(l),Ue(2),T(s);var d=P(s,2),f=M(d);bA(M(f),{get enabled(){return Q.form.enabled},label:`MCP server`,onclick:()=>Q.form.enabled=!Q.form.enabled}),T(f),T(d);var p=P(d,2),m=P(M(p),2),h=M(m),g=P(M(h),2);na(g),T(h);var _=P(h,2),v=P(M(_),2);na(v),T(_);var y=P(_,2),b=P(M(y),2);na(b),T(y);var x=P(y,2),S=P(M(x),2);ft(S),W(S,`placeholder`,`/ -/team/alpha`),T(x);var C=P(x,2),w=P(M(C),2);na(w),T(C),T(m),T(p),F(()=>p.open=Q.advancedOpen),L(`click`,u,()=>Q.addHeader()),Vr(`toggle`,p,e=>Q.advancedOpen=e.currentTarget.open),da(g,()=>Q.form.description,e=>Q.form.description=e),da(v,()=>Q.form.allowed_tools,e=>Q.form.allowed_tools=e),da(b,()=>Q.form.disallowed_tools,e=>Q.form.disallowed_tools=e),da(S,()=>Q.form.user_paths,e=>Q.form.user_paths=e),da(w,()=>Q.form.tool_timeout_seconds,e=>Q.form.tool_timeout_seconds=e),z(e,n)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`input`,`click`]);var XR=R(`Config`),ZR=R(`
      `),QR=R(`
      `),$R=R(`
      NameTransportEndpointStatusToolsEnabledActions
      `);function ez(e,t){E(t,!0);function n(e){return gx(e,e=>ds.formatTimestamp(e))}var r=$R(),i=M(r),a=P(M(i));H(a,21,()=>Q.filtered,e=>px(e),(e,t)=>{var r=QR(),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=e=>{z(e,XR())};V(s,e=>{I(t).managed&&e(c)});var l=P(s,2),u=M(l,!0);T(l),T(i);var d=P(i),f=M(d),p=M(f,!0);T(f),T(d);var m=P(d),h=M(m,!0);T(m);var g=P(m),_=M(g),v=M(_,!0);T(_);var y=P(_,2),b=e=>{var n=ZR(),r=M(n,!0);T(n),F(()=>B(r,I(t).last_error)),z(e,n)},x=O(()=>mx(I(t))===`degraded`&&I(t).last_error);V(y,e=>{I(x)&&e(b)}),T(g);var S=P(g),C=M(S),w=M(C,!0);T(C);var ee=P(C,2),te=M(ee,!0);T(ee),T(S);var ne=P(S),re=M(ne),ie=M(re,!0);T(re),T(ne);var ae=P(ne),oe=M(ae),se=M(oe),ce=e=>{{let n=O(()=>`Edit MCP server `+I(t).name);gT(e,{get label(){return I(n)},class:`table-icon-btn`,onclick:()=>Q.openEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(se,e=>{I(t).managed||e(ce)});var le=P(se,2);{let e=O(()=>`Inspect catalog of MCP server `+I(t).name);gT(le,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>Q.openCatalog(I(t)),children:(e,t)=>{G(e,{get icon(){return io},class:`form-action-icon`})},$$slots:{default:!0}})}var ue=P(le,2);{let e=O(()=>(Q.reconnectingName===px(I(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+I(t).name),n=O(()=>Q.reconnectingName===px(I(t)));gT(ue,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>Q.reconnectServer(I(t)),get disabled(){return I(n)},children:(e,t)=>{G(e,{get icon(){return ho},class:`form-action-icon`})},$$slots:{default:!0}})}var de=P(ue,2),fe=e=>{{let n=O(()=>(Q.deletingName===px(I(t))?`Deleting MCP server `:`Delete MCP server `)+I(t).name),r=O(()=>Q.deletingName===px(I(t)));gT(e,{get label(){return I(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>Q.deleteServer(I(t)),get disabled(){return I(r)},children:(e,t)=>{G(e,{get icon(){return Io},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(de,e=>{I(t).managed||e(fe)}),T(oe),T(ae),T(r),F((e,n,r,i,a,s,c,l)=>{B(o,I(t).name),B(u,e),B(p,I(t).transport||`http`),W(m,`title`,n),B(h,r),U(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),W(_,`title`,a),B(v,s),B(w,c),B(te,l),U(re,1,Fi([`auth-key-status-badge`,I(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),B(ie,I(t).enabled?`Enabled`:`Disabled`)},[()=>px(I(t)),()=>_x(I(t)),()=>_x(I(t)),()=>hx(I(t)),()=>n(I(t)),()=>mx(I(t)),()=>oc(I(t).tool_count||0),()=>vx(I(t))]),z(e,r)}),T(a),T(i),T(r),z(e,r),D()}var tz=R(`

      MCP Servers

      `),nz=R(``),rz=R(`
      MCP server management is unavailable.
      `),iz=R(``),az=R(`
      `),oz=R(`

      No MCP servers yet. Add one here, or declare servers in config.yaml under mcp.servers.

      `),sz=R(`

      No MCP servers match your filter.

      `),cz=R(`
      `);function lz(e,t){E(t,!0),An(()=>{K.refreshTick,Jo.page===`mcp-servers`&&Q.fetchServers()});var n=cz(),r=M(n),i=M(r);qS(M(i),{copyId:`mcp-servers-help-copy`,label:`MCP servers help`,text:`Upstream Model Context Protocol servers whose tools, prompts, and resources the gateway exposes to clients. Servers added here connect over HTTP or SSE; stdio servers and rows marked Config are declared in config.yaml under mcp.servers and are read-only in the dashboard. Saved header values are masked in API and dashboard responses.`,title:e=>{z(e,tz())},$$slots:{title:!0}}),T(i);var a=P(i,2),o=M(a),s=e=>{var t=nz();G(M(t),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=Q.formSubmitting),L(`click`,t,()=>Q.openCreate()),z(e,t)};V(o,e=>{Q.available&&!K.authError&&e(s)}),T(a),T(r);var c=P(r,2),l=e=>{z(e,rz())};V(c,e=>{!Q.available&&!K.authError&&e(l)});var u=P(c,2),d=e=>{var t=iz(),n=M(t,!0);T(t),F(()=>B(n,Q.error)),z(e,t)};V(u,e=>{Q.error&&!K.authError&&!Q.formOpen&&e(d)});var f=P(u,2),p=e=>{mT(e,{label:`Loading MCP servers...`})};V(f,e=>{Q.loading&&!K.authError&&e(p)});var m=P(f,2),h=e=>{var t=az(),n=M(t);yw(M(n),{id:`mcp-server-filter`,placeholder:`Filter by name, slug, URL, transport, or status...`,label:`Filter MCP servers by name, slug, URL, transport, or status`,get value(){return Q.filter},set value(e){Q.filter=e}}),T(n),T(t),z(e,t)};V(m,e=>{(Q.servers.length>0||Q.filter)&&Q.available&&!K.authError&&e(h)});var g=P(m,2);YR(g,{});var _=P(g,2);zR(_,{});var v=P(_,2),y=e=>{ez(e,{})};V(v,e=>{Q.filtered.length>0&&Q.available&&!K.authError&&e(y)});var b=P(v,2),x=e=>{z(e,oz())};V(b,e=>{Q.servers.length===0&&!Q.filter&&!Q.loading&&!K.authError&&!Q.error&&Q.available&&e(x)});var S=P(b,2),C=e=>{z(e,sz())};V(S,e=>{Q.servers.length>0&&Q.filtered.length===0&&Q.filter&&!Q.loading&&!K.authError&&Q.available&&e(C)}),T(n),z(e,n),D()}Hr([`click`]);var uz=`api_keys`,dz=`session_sticky_keys`,fz=`base_url`,pz=`service_account_json`,mz=`models`,hz={[uz]:{label:`API Keys`,control:`keys`,hint:`Identified sessions stay on one key by default, improving provider prompt-cache hits. Saved values are shown as ***********; leave the asterisks unchanged to keep the stored key.`},[dz]:{label:`Session-sticky API keys`,control:`checkbox`,hint:`Keep each identified conversation on one API key to preserve provider prompt-cache affinity. Turn off to rotate keys round-robin on every request.`},[fz]:{label:`Base URL`,control:`text`},api_version:{label:`API Version`,control:`text`,placeholder:`e.g. 2024-10-01-preview`,hint:`Leave empty for the provider default. Realtime endpoints may need a newer version.`},backend:{label:`Backend`,control:`select`,hint:`Which Google surface to call. Vertex authenticates with Google credentials instead of an API key.`},auth_type:{label:`Auth Type`,control:`select`,hint:`How to obtain Google credentials. Leave on the default to use Application Default Credentials.`},api_mode:{label:`API Mode`,control:`select`,hint:`Which request shape to send upstream.`},vertex_project:{label:`Vertex Project`,control:`text`,placeholder:`my-gcp-project`},vertex_location:{label:`Vertex Location`,control:`text`,placeholder:`us-central1`},service_account_file:{label:`Service Account File`,control:`text`,placeholder:`/path/to/service-account.json`,hint:`Path readable by the gateway process.`},[pz]:{label:`Service Account JSON`,control:`textarea`,placeholder:`Paste service account JSON`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value, or clear it to remove.`},service_account_json_base64:{label:`Service Account JSON (base64)`,control:`text`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value.`},gcp_scope:{label:`GCP Scope`,control:`text`,placeholder:`https://www.googleapis.com/auth/cloud-platform`},[mz]:{label:`Models (comma-separated)`,control:`text`,placeholder:`gpt-4o, gpt-4o-mini`,hint:`Leave empty to auto-discover models from the provider's /models endpoint where supported.`}};function gz(e){return hz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function _z(){return{name:``,type:``,api_keys:[],session_sticky_keys:!0,base_url:``,api_version:``,backend:``,auth_type:``,api_mode:``,vertex_project:``,vertex_location:``,service_account_file:``,service_account_json:``,service_account_json_base64:``,gcp_scope:``,models:``,enabled:!0}}function vz(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.type,e.base_url].some(e=>String(e||``).toLowerCase().includes(r)))}function yz(e,t){let n=(Array.isArray(e)?e:[]).map(e=>String(e&&e.type||``).trim()).filter(Boolean),r=String(t||``).trim();return r&&!n.includes(r)&&n.push(r),n}function bz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function xz(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(hz).map(e=>({name:e,advanced:e!==uz})),r=t||e&&e.default_base_url||``,i=[],a=[];for(let e of n){let t=String(e&&e.name||``).trim();if(!t)continue;let n={...gz(t),name:t,required:!!(e&&e.required),options:Array.isArray(e&&e.options)?e.options:[]};t===`base_url`&&r&&(n.placeholder=r,n.hint=`Defaults to `+r),n.options.length>0&&(n.control=`select`),(e&&e.advanced?a:i).push(n)}return{primary:i,advanced:a}}var Sz=new Set([`name`,`type`,`enabled`]);function Cz(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=_z(),i={...e};for(let e of Object.keys(r))!Sz.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function wz(e){let t=Array.isArray(e&&e.api_keys)?e.api_keys.length:0;return t>0?t+` key`+(t===1?``:`s`):String(e&&e.service_account_json||``).trim()||String(e&&e.service_account_json_base64||``).trim()||String(e&&e.service_account_file||``).trim()?`service account`:String(e&&e.vertex_project||``).trim()?`ADC`:`keyless`}function Tz(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function Ez(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function Dz(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function Oz(e,t){let n=String(t||``).trim();if(!n)return``;let r=new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.name||``).trim()));if(!r.has(n))return n;let i=1;for(;r.has(n+`-`+i);)i+=1;return n+`-`+i}function kz(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:Ez(e&&e.api_keys),session_sticky_keys:!e||e.session_sticky_keys!==!1,base_url:String(e&&e.base_url||``),api_version:String(e&&e.api_version||``),backend:String(e&&e.backend||``),auth_type:String(e&&e.auth_type||``),api_mode:String(e&&e.api_mode||``),vertex_project:String(e&&e.vertex_project||``),vertex_location:String(e&&e.vertex_location||``),service_account_file:String(e&&e.service_account_file||``),service_account_json:String(e&&e.service_account_json||``),service_account_json_base64:String(e&&e.service_account_json_base64||``),gcp_scope:String(e&&e.gcp_scope||``),models:(Array.isArray(e&&e.models)?e.models:[]).join(`, `),enabled:!e||e.enabled!==!1}}function Az(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function jz(e,t,n,r){let i={},a=String(e&&e.name||``).trim();String(e&&e.type||``).trim()||(i.type=`Select a provider type.`),a?a.includes(`/`)?i.name=`Name cannot contain '/' — it separates the provider from the model.`:t===`create`&&(Array.isArray(n)?n:[]).some(e=>String(e&&e.name||``).trim()===a)&&(i.name=`Provider "`+a+`" already exists.`):i.name=`Name is required.`;let{primary:o,advanced:s}=xz(r);for(let t of[...o,...s]){let n=Mz(e,t);n&&(i[t.name]=n)}return i}function Mz(e,t){if(t.name===`api_keys`){let n=Dz(e&&e.api_keys);return t.required&&!n.some(e=>e.trim())?`At least one API key is required for this provider type.`:n.some(e=>!e.trim())?`Remove the empty row instead of leaving a key blank.`:``}let n=String(e&&e[t.name]||``).trim();if(t.required&&!n)return t.label+` is required for this provider type.`;if(!n)return``;if(t.name===`base_url`&&!n.includes(`://`)&&/[./]/.test(n))return`Include the scheme, e.g. https://`+n;if(t.name===`service_account_json`&&!Az(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function Nz(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=xz(t),a=!!(t&&Array.isArray(t.fields)&&t.fields.length>0),o=new Set;for(let t of[...r,...i])!a&&t.name===`session_sticky_keys`||(o.add(t.name),n[t.name]=Pz(e,t.name));for(let t of Object.keys(hz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=Pz(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function Pz(e,t){switch(t){case uz:return Dz(e&&e.api_keys);case mz:return ic(e&&e.models);case dz:return!!(e&&e.session_sticky_keys);case pz:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var $=new class{#e=k(j([]));get rows(){return I(this.#e)}set rows(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get formSubmitting(){return I(this.#o)}set formSubmitting(e){A(this.#o,e,!0)}#s=k(`create`);get formMode(){return I(this.#s)}set formMode(e){A(this.#s,e,!0)}#c=k(!1);get advancedOpen(){return I(this.#c)}set advancedOpen(e){A(this.#c,e,!0)}#l=k(j(_z()));get form(){return I(this.#l)}set form(e){A(this.#l,e,!0)}#u=k(j({}));get fieldErrors(){return I(this.#u)}set fieldErrors(e){A(this.#u,e,!0)}#d=k(``);get focusField(){return I(this.#d)}set focusField(e){A(this.#d,e,!0)}#f=k(``);get deletingName(){return I(this.#f)}set deletingName(e){A(this.#f,e,!0)}#p=k(!1);get deleteSubmitting(){return I(this.#p)}set deleteSubmitting(e){A(this.#p,e,!0)}#m=k(j([]));get types(){return I(this.#m)}set types(e){A(this.#m,e,!0)}#h=k(!1);get typesLoaded(){return I(this.#h)}set typesLoaded(e){A(this.#h,e,!0)}#g=null;get filteredRows(){return vz(this.rows,this.filter)}get schema(){return bz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return xz(e,e&&e.default_base_url)}async fetchTypes(){let e=await _T(`/admin/provider-credentials/types`,{label:`provider credential types`});e.status===`ok`&&(this.types=e.items,this.typesLoaded=!0)}async fetchPage(){this.#g&&this.#g.abort();let e=new AbortController;this.#g=e,this.loading=!0,this.error=``;try{let t=await _T(`/admin/provider-credentials`,{label:`provider credentials`,errorFallback:`Failed to load provider credentials.`,unavailableStatuses:[503,404],options:{signal:e.signal}});if(t.status===`stale`||e.signal.aborted)return;if(t.status===`unavailable`){this.available=!1,this.rows=[];return}if(t.status===`error`){t.result&&(this.available=!0),this.rows=[],this.error=t.error;return}this.available=!0,this.rows=t.items,this.typesLoaded||await this.fetchTypes()}finally{this.#g===e&&(this.#g=null,this.loading=!1)}}#_(e,t){this.formMode=e,this.form=t,this.advancedOpen=!1,this.error=``,this.fieldErrors={},this.focusField=``}openCreate(){this.#_(`create`,_z()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,kz(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,_z())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=Cz(this.form,e));let t=e.primary.find(e=>e.name===`api_keys`);t&&t.required&&this.form.api_keys.length===0&&(this.form.api_keys=[{value:``}])}clearFieldError(e){if(this.fieldErrors[e]===void 0)return;let{[e]:t,...n}=this.fieldErrors;this.fieldErrors=n}addApiKeyRow(){this.form.api_keys.push({value:``}),this.clearFieldError(`api_keys`)}removeApiKeyRow(e){this.form.api_keys.splice(e,1),this.clearFieldError(`api_keys`)}#v(e){let t=fs(e,`Failed to save provider credential.`),n=String(e&&e.error&&typeof e.error==`object`&&e.error.param||``).trim();if(n&&this.#y(n)){this.fieldErrors={...this.fieldErrors,[n]:t},this.error=``,this.#b();return}this.error=t}#y(e){if(e===`name`||e===`type`)return!0;let{primary:t,advanced:n}=this.formFields;return[...t,...n].some(t=>t.name===e)}#b(){let e=Object.keys(this.fieldErrors);if(e.length===0)return;let{primary:t,advanced:n}=this.formFields;n.some(t=>e.includes(t.name))&&(this.advancedOpen=!0);let r=[`type`,`name`,...t.map(e=>e.name),...n.map(e=>e.name)];this.focusField=r.find(t=>e.includes(t))||e[0]}#x(){Nc.fetchModels(),Nc.fetchCategories()}async submitForm(){let e=this.schema,t=jz(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=Nz(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await vT(`/admin/provider-credentials`,`PUT`,n,{label:`save provider credential`,errorFallback:`Failed to save provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.error=e.error;return}if(e.status===`error`){e.result&&e.result.status!==401?this.#v(e.result.data):this.error=e.error;return}q.success(`Provider "`+n.name+`" saved.`),this.closeForm(),this.#x(),this.fetchPage()}finally{this.formSubmitting=!1}}async performDelete(e){this.deleteSubmitting=!0,this.deletingName=e;try{let t=await vT(`/admin/provider-credentials/`+encodeURIComponent(e),`DELETE`,void 0,{label:`delete provider credential`,errorFallback:`Failed to delete provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Rs.error=t.error;return}if(t.status===`error`){Rs.error=t.error;return}q.success(`Provider "`+e+`" deleted.`),Rs.close(),this.formOpen&&this.form.name===e&&this.closeForm(),this.#x(),this.fetchPage()}finally{this.deleteSubmitting=!1,this.deletingName=``}}requestDelete(e){let t=String(e||``).trim();if(!t||this.deleteSubmitting)return;let n=(this.rows||[]).find(e=>String(e&&e.name||``).trim()===t);n&&n.managed||Rs.open({title:`Delete Provider`,titleId:`providerCredentialDeleteDialogTitle`,inputId:`provider-credential-delete-confirmation`,message:`Type "`+t+`" to permanently delete this provider credential. Requests routed to it will fail until it is reconfigured.`,requiredText:t,confirmLabel:`Delete Provider`,icon:Ao,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},Fz=R(`Config`),Iz=R(` `,1),Lz=R(`
      `),Rz=R(`
      NameTypeBase URLAuthModelsEnabledUpdatedActions
      `);function zz(e,t){E(t,!0);var n=Rz(),r=M(n),i=P(M(r));H(i,21,()=>$.filteredRows,e=>e.name,(e,t)=>{var n=Lz(),r=M(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2),s=e=>{z(e,Fz())};V(o,e=>{I(t).managed&&e(s)}),T(r);var c=P(r),l=M(c),u=M(l,!0);T(l),T(c);var d=P(c),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=M(h,!0);T(h);var _=P(h),v=M(_);let y;var b=M(v,!0);T(v),T(_);var x=P(_),S=M(x,!0);T(x);var C=P(x),w=M(C),ee=M(w),te=e=>{var n=Iz(),r=N(n);{let e=O(()=>`Edit provider `+I(t).name);gT(r,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>$.openEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=P(r,2);{let e=O(()=>($.deletingName===I(t).name?`Deleting provider `:`Delete provider `)+I(t).name),n=O(()=>$.deletingName===I(t).name);gT(i,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.requestDelete(I(t).name),get disabled(){return I(n)},children:(e,t)=>{G(e,{get icon(){return Io},class:`table-icon-svg`})},$$slots:{default:!0}})}z(e,n)};V(ee,e=>{I(t).managed||e(te)}),T(w),T(C),T(n),F((e,n,r)=>{B(a,I(t).name),B(u,I(t).type),W(d,`title`,I(t).base_url||``),B(f,I(t).base_url||`—`),B(m,e),B(g,n),y=U(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":I(t).enabled,"auth-key-status-inactive":!I(t).enabled}),B(b,I(t).enabled?`Enabled`:`Disabled`),B(S,r)},[()=>wz(I(t)),()=>Tz(I(t)),()=>ds.formatTimestamp(I(t).updated_at)]),z(e,n)}),T(i),T(r),T(n),z(e,n),D()}var Bz=R(``),Vz=R(`
      `),Hz=R(`
      `,1),Uz=R(``),Wz=R(``),Gz=R(``),Kz=R(``),qz=R(``),Jz=R(` `),Yz=R(` `),Xz=R(`
      `);function Zz(e,t){E(t,!0);let n=O(()=>`provider-credential-`+t.field.name),r=O(()=>$.fieldErrors[t.field.name]||``),i=O(()=>I(r)?I(n)+`-error`:t.field.hint?I(n)+`-hint`:void 0),a=O(()=>{let e=String($.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){$.clearFieldError(t.field.name)}var s=Xz(),c=M(s),l=M(c),u=P(l),d=e=>{z(e,Bz())};V(u,e=>{t.field.required&&e(d)}),T(c);var f=P(c,2),p=e=>{var t=Hz(),a=N(t);H(a,21,()=>$.form.api_keys,oi,(e,t,a)=>{var s=Vz(),c=M(s);na(c),W(c,`aria-label`,`API key `+(a+1)),gT(P(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeApiKeyRow(a),children:(e,t)=>{G(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),T(s),F(()=>{W(c,`id`,a===0?I(n):I(n)+`-`+a),W(c,`aria-invalid`,I(r)?`true`:void 0),W(c,`aria-describedby`,a===0?I(i):void 0)}),L(`input`,c,o),da(c,()=>I(t).value,e=>I(t).value=e),z(e,s)}),T(a);var s=P(a,2),c=M(s);G(M(c),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(c),T(s),F(()=>W(c,`id`,$.form.api_keys.length===0?I(n):void 0)),L(`click`,c,()=>$.addApiKeyRow()),z(e,t)},m=e=>{var s=Wz(),c=M(s);c.value=c.__value=``,H(P(c),16,()=>I(a),e=>e,(e,t)=>{var n=Uz(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(s),F(()=>{W(s,`id`,I(n)),W(s,`aria-invalid`,I(r)?`true`:void 0),W(s,`aria-describedby`,I(i))}),L(`change`,s,o),Gi(s,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,s)},h=e=>{var a=Gz();na(a),F(()=>{W(a,`id`,I(n)),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`change`,a,o),fa(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)},g=e=>{var a=Kz();ft(a),F(()=>{W(a,`id`,I(n)),W(a,`placeholder`,t.field.placeholder||``),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`input`,a,o),da(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)},_=e=>{var a=qz();na(a),F(()=>{W(a,`id`,I(n)),W(a,`placeholder`,t.field.placeholder||``),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`input`,a,o),da(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)};V(f,e=>{t.field.control===`keys`?e(p):t.field.control===`select`?e(m,1):t.field.control===`checkbox`?e(h,2):t.field.control===`textarea`?e(g,3):e(_,-1)});var v=P(f,2),y=e=>{var t=Jz(),i=M(t,!0);T(t),F(()=>{W(t,`id`,I(n)+`-error`),B(i,I(r))}),z(e,t)},b=e=>{var r=Yz(),i=M(r,!0);T(r),F(()=>{W(r,`id`,I(n)+`-hint`),B(i,t.field.hint)}),z(e,r)};V(v,e=>{I(r)?e(y):t.field.hint&&e(b,1)}),T(s),F(()=>{W(c,`for`,I(n)),B(l,`${t.field.label??``} `)}),z(e,s),D()}Hr([`input`,`click`,`change`]);var Qz=R(`

      The name is the stable identity used for routing and cannot change once created.

      `),$z=R(``),eB=R(` `),tB=R(`Determines which fields the gateway uses to build requests.`),nB=R(` `),rB=R(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),iB=R(`Immutable once created.`),aB=R(`

      Pick a type to configure its credentials — each provider type asks for different settings.

      `),oB=R(`
      Advanced settings
      `),sB=R(`
      `,1);function cB(e,t){E(t,!0);let n=O(()=>yz($.types,$.form.type)),r=O(()=>$.formFields),i=O(()=>$.fieldErrors.name||``),a=O(()=>$.fieldErrors.type||``);function o(){$.selectType(),$.formMode===`create`&&($.form.name=Oz($.rows,$.form.type))}An(()=>{let e=$.focusField;if(!e)return;$.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{z(e,Qz())},s=O(()=>$.formMode===`edit`?`Edit Provider`:`Add Provider`);bE(e,{get open(){return $.formOpen},get title(){return I(s)},ariaLabel:`Provider credential editor`,get error(){return $.error},get submitting(){return $.formSubmitting},novalidate:!0,onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var s=sB(),c=N(s),l=P(M(c),2),u=M(l);u.value=u.__value=``,H(P(u),16,()=>I(n),e=>e,(e,t)=>{var n=$z(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(l);var d=P(l,2),f=e=>{var t=eB(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)},p=e=>{z(e,tB())};V(d,e=>{I(a)?e(f):e(p,-1)}),T(c);var m=P(c,2),h=P(M(m),2);na(h);var g=P(h,2),_=e=>{var t=nB(),n=M(t,!0);T(t),F(()=>B(n,I(i))),z(e,t)},v=e=>{z(e,rB())},y=e=>{z(e,iB())};V(g,e=>{I(i)?e(_):$.formMode===`create`?e(v,1):e(y,-1)}),T(m);var b=P(m,2),x=e=>{z(e,aB())};V(b,e=>{$.form.type||e(x)});var S=P(b,2);H(S,17,()=>I(r).primary,e=>e.name,(e,t)=>{Zz(e,{get field(){return I(t)}})});var C=P(S,2),w=M(C);bA(M(w),{get enabled(){return $.form.enabled},label:`provider`,onclick:()=>$.form.enabled=!$.form.enabled}),T(w),T(C);var ee=P(C,2),te=e=>{var t=oB(),n=M(t),i=M(n),a=P(M(i),2),o=M(a,!0);T(a),T(i),T(n);var s=P(n,2);H(s,21,()=>I(r).advanced,e=>e.name,(e,t)=>{Zz(e,{get field(){return I(t)}})}),T(s),T(t),F(e=>{t.open=$.advancedOpen,B(o,e)},[()=>I(r).advanced.map(e=>e.label).join(`, `)]),Vr(`toggle`,t,e=>$.advancedOpen=e.currentTarget.open),z(e,t)};V(ee,e=>{I(r).advanced.length>0&&e(te)}),F(()=>{l.disabled=$.formMode===`edit`,W(l,`aria-invalid`,I(a)?`true`:void 0),W(l,`aria-describedby`,I(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=$.formMode===`edit`,W(h,`aria-invalid`,I(i)?`true`:void 0),W(h,`aria-describedby`,I(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),L(`change`,l,o),Gi(l,()=>$.form.type,e=>$.form.type=e),L(`input`,h,()=>$.clearFieldError(`name`)),da(h,()=>$.form.name,e=>$.form.name=e),z(e,s)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`change`,`input`]);var lB=R(`

      Providers

      `),uB=R(``),dB=R(`
      Provider credential management is unavailable.
      `),fB=R(``),pB=R(`
      `),mB=R(`

      No dashboard-managed providers yet. Add one here, or declare providers in config.yaml / environment variables.

      `),hB=R(`

      No providers match your filter.

      `),gB=R(`
      `);function _B(e,t){E(t,!0),An(()=>{K.refreshTick,Jo.page===`providers-config`&&$.fetchPage()});var n=gB(),r=M(n),i=M(r);qS(M(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{z(e,lB())},help:e=>{Ue(),z(e,Zr(`Configure LLM provider credentials here instead of setting API keys as - environment variables. Providers declared in config.yaml or env vars - are read-only (Config badge) and cannot be edited or deleted from the - dashboard. Keys are masked after saving.`))},$$slots:{title:!0,help:!0}}),T(i);var a=P(i,2),o=M(a),s=e=>{var t=uB();G(M(t),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=$.formSubmitting),L(`click`,t,()=>$.openCreate()),z(e,t)};V(o,e=>{$.available&&!K.needsAuth&&e(s)}),T(a),T(r);var c=P(r,2),l=e=>{z(e,dB())};V(c,e=>{!$.available&&!K.needsAuth&&e(l)});var u=P(c,2),d=e=>{var t=fB(),n=M(t,!0);T(t),F(()=>B(n,$.error)),z(e,t)};V(u,e=>{$.error&&!K.needsAuth&&!$.formOpen&&e(d)});var f=P(u,2),p=e=>{mT(e,{label:`Loading providers...`})};V(f,e=>{$.loading&&!K.needsAuth&&e(p)});var m=P(f,2),h=e=>{var t=pB(),n=M(t);yw(M(n),{id:`provider-credential-filter`,placeholder:`Filter by name, type, or base URL...`,label:`Filter providers by name, type, or base URL`,get value(){return $.filter},set value(e){$.filter=e}}),T(n),T(t),z(e,t)};V(m,e=>{($.rows.length>0||$.filter)&&$.available&&!K.needsAuth&&e(h)});var g=P(m,2);cB(g,{});var _=P(g,2),v=e=>{zz(e,{})};V(_,e=>{$.filteredRows.length>0&&$.available&&!K.needsAuth&&e(v)});var y=P(_,2),b=e=>{z(e,mB())};V(y,e=>{$.rows.length===0&&!$.filter&&!$.loading&&!K.needsAuth&&!$.error&&$.available&&e(b)});var x=P(y,2),S=e=>{z(e,hB())};V(x,e=>{$.rows.length>0&&$.filteredRows.length===0&&$.filter&&!$.loading&&!K.needsAuth&&$.available&&e(S)}),T(n),z(e,n),D()}Hr([`click`]);function vB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function yB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function bB(e){let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t;for(let e of n.split(`/`)){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function xB(e){if(bB(e))return``;let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t,r=[];for(let e of n.split(`/`)){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function SB(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=bB(t.user_path);if(r)return{error:r};let i=xB(t.user_path),a=yB(t.labels),o={name:n,description:String(t.description||``).trim()||void 0,user_path:i||void 0,labels:a.length?a:void 0,dashboard_access:t.dashboard_access?!0:void 0};return t.expires_at&&(o.expires_at=t.expires_at+`T23:59:59Z`),{payload:o}}function CB(e,t=Date.now()){let n=e&&e.expires_at;if(!n)return!1;let r=Date.parse(n);return Number.isFinite(r)&&r<=t}function wB(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function TB(e,t=Date.now()){return!e||e.active===!1||wB(e)?!1:!CB(e,t)}function EB(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function DB(e,t={}){let{query:n=``,showInactive:r=!1,now:i=Date.now()}=t,a=String(n||``).trim().toLowerCase();return(Array.isArray(e)?e:[]).filter(e=>!r&&!TB(e,i)?!1:!a||EB(e).includes(a))}function OB(e,t){return wB(e)?2:+!TB(e,t)}function kB(e){let t=e&&e.expires_at;if(!t)return 1/0;let n=Date.parse(t);return Number.isFinite(n)?n:1/0}function AB(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function jB(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=OB(e,t),i=OB(n,t);if(r!==i)return r-i;let[a,o]=r===2?[AB(e),AB(n)]:[kB(e),kB(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function MB(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!TB(n,t),0)}function NB(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var PB=new class{#e=k(j([]));get keys(){return I(this.#e)}set keys(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get showInactive(){return I(this.#a)}set showInactive(e){A(this.#a,e,!0)}#o=O(()=>jB(DB(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return I(this.#o)}set visibleKeys(e){A(this.#o,e)}#s=O(()=>MB(this.keys));get inactiveCount(){return I(this.#s)}set inactiveCount(e){A(this.#s,e)}#c=k(!1);get formOpen(){return I(this.#c)}set formOpen(e){A(this.#c,e,!0)}#l=k(!1);get formSubmitting(){return I(this.#l)}set formSubmitting(e){A(this.#l,e,!0)}#u=k(``);get issuedValue(){return I(this.#u)}set issuedValue(e){A(this.#u,e,!0)}#d=k(``);get deactivatingID(){return I(this.#d)}set deactivatingID(e){A(this.#d,e,!0)}#f=k(``);get dashboardAccessID(){return I(this.#f)}set dashboardAccessID(e){A(this.#f,e,!0)}#p=k(j(vB()));get form(){return I(this.#p)}set form(e){A(this.#p,e,!0)}#m=k(j(NB()));get labelsEditor(){return I(this.#m)}set labelsEditor(e){A(this.#m,e,!0)}copyState=_M({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await _T(`/admin/auth-keys`,{label:`auth keys`,errorFallback:`Unable to load API keys.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.keys=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.error=e.error;return}this.available=!0,this.keys=e.items}finally{this.loading=!1}}openForm(){this.formSubmitting||this.formOpen||(this.formOpen=!0,this.error=``,this.issuedValue||(this.copyState.reset(),this.form=vB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=vB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=vB()}async submitForm(){let e=SB(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await vT(`/admin/auth-keys`,`POST`,e.payload,{label:`create API key`,errorFallback:`Failed to create API key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error,t.result&&t.result.status!==401&&console.error(`Failed to create API key:`,t.result.status,this.error);return}let n=t.result.data||{};this.issuedValue=n.value||``,this.formOpen=!0,this.copyState.reset(),this.form=vB(),this.fetchKeys()}finally{this.formSubmitting=!1}}openLabelsEditor(e){!e||this.labelsEditor.submitting||(this.labelsEditor={open:!0,id:e.id,name:e.name||``,value:(e.labels||[]).join(`, `),submitting:!1,error:``})}closeLabelsEditor(){!this.labelsEditor.open||this.labelsEditor.submitting||(this.labelsEditor=NB())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:yB(e.value)};try{let n=await vT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/labels`,`PUT`,t,{label:`update API key labels`,errorFallback:`Failed to update labels.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,e.error=n.error;return}if(n.status===`error`){e.error=n.error,n.result&&n.result.status!==401&&console.error(`Failed to update auth key labels:`,n.result.status,e.error);return}q.success(`Labels updated for key "`+e.name+`".`),e.submitting=!1,this.closeLabelsEditor(),this.fetchKeys()}finally{e.submitting=!1}}async toggleDashboardAccess(e){if(!e||!e.active||this.dashboardAccessID)return;let t=!e.dashboard_access;this.dashboardAccessID=e.id;try{let n=await vT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/dashboard-access`,`PUT`,{dashboard_access:t},{label:`update API key dashboard access`,errorFallback:`Failed to update dashboard access.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,q.error(n.error);return}if(n.status===`error`){n.result&&n.result.status!==401&&console.error(`Failed to update auth key dashboard access:`,n.result.status,n.error),q.error(n.error);return}q.success(`Dashboard access `+(t?`granted to`:`revoked for`)+` key "`+e.name+`".`),this.fetchKeys()}finally{this.dashboardAccessID=``}}async deactivateKey(e){if(!(!e||!e.active)&&window.confirm(`Deactivate key "`+e.name+`"? This cannot be undone.`)){this.deactivatingID=e.id;try{let t=await vT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/deactivate`,`POST`,void 0,{label:`deactivate API key`,errorFallback:`Failed to deactivate key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,q.error(t.error);return}if(t.status===`error`){t.result&&t.result.status!==401&&console.error(`Failed to deactivate auth key:`,t.result.status,t.error),q.error(t.error);return}q.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},FB=R(``),IB=R(`

      Store this key securely — it won’t be shown again.

      `),LB=R(``),RB=R(``),zB=R(``),BB=R(``),VB=R(`
      `);function HB(e,t){E(t,!0);{let t=O(()=>PB.issuedValue?``:PB.error),n=O(()=>PB.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=O(()=>PB.issuedValue?Va:po);bE(e,{get open(){return PB.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return I(t)},get submitting(){return PB.formSubmitting},get submitLabel(){return I(n)},submittingLabel:`Creating...`,get submitIcon(){return I(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>PB.closeForm(),onsubmit:()=>PB.issuedValue?PB.dismissIssuedKey():PB.submitForm(),children:(e,t)=>{var n=Qr(),r=N(n),i=e=>{var t=IB(),n=P(M(t),2),r=M(n),i=M(r,!0);T(r),eL(P(r,2),{get state(){return PB.copyState},onclick:()=>PB.copyIssuedValue()}),T(n);var a=P(n,2),o=e=>{z(e,FB())};V(a,e=>{PB.copyState.error&&e(o)}),T(t),F(()=>B(i,PB.issuedValue)),z(e,t)},a=e=>{var t=VB(),n=M(t),r=M(n),i=P(M(r),2);na(i),T(r);var a=P(r,2),o=P(M(a),2);na(o),T(a),T(n);var s=P(n,2),c=M(s);qS(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{z(e,LB())},help:e=>{Ue(),z(e,Zr(`When set, this key overrides the configured user path request - header for audit logging and downstream request context.`))},$$slots:{title:!0,help:!0}});var l=P(c,2);na(l),T(s);var u=P(s,2),d=M(u);qS(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{z(e,RB())},help:e=>{Ue(),z(e,Zr(`Every request authenticated with this key gets these labels, in - addition to any labels from tagging headers. Labels show up in - usage analytics, the request log, and audit logs.`))},$$slots:{title:!0,help:!0}});var f=P(d,2);na(f),T(u);var p=P(u,2),m=M(p);qS(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{z(e,zB())},help:e=>{Ue(),z(e,Zr(`When off, this key is denied the dashboard and every /admin API - endpoint. Model endpoints and GET /v1/usage stay available to - the key. The master key always has dashboard access.`))},$$slots:{title:!0,help:!0}});var h=P(m,2),g=M(h);na(g),Ue(2),T(h),T(p),SE(P(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=BB();ft(n),da(n,()=>PB.form.description,e=>PB.form.description=e),z(e,n)},$$slots:{default:!0}}),T(t),da(i,()=>PB.form.name,e=>PB.form.name=e),da(o,()=>PB.form.expires_at,e=>PB.form.expires_at=e),da(l,()=>PB.form.user_path,e=>PB.form.user_path=e),da(f,()=>PB.form.labels,e=>PB.form.labels=e),fa(g,()=>PB.form.dashboard_access,e=>PB.form.dashboard_access=e),z(e,t)};V(r,e=>{PB.issuedValue?e(i):e(a,-1)}),z(e,n)},$$slots:{default:!0}})}D()}var UB=R(`

      `),WB=R(`

      Applies to new requests made with this key. Leave empty to remove all labels.

      `,1);function GB(e,t){E(t,!0),bE(e,{get open(){return PB.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return PB.labelsEditor.error},get submitting(){return PB.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>PB.closeLabelsEditor(),onsubmit:()=>PB.submitLabelsEditor(),headerHint:e=>{var t=UB(),n=M(t,!0);T(t),F(()=>B(n,PB.labelsEditor.name)),z(e,t)},children:(e,t)=>{SE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=WB(),r=N(n);na(r),Ue(2),da(r,()=>PB.labelsEditor.value,e=>PB.labelsEditor.value=e),z(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),D()}var KB=R(` `),qB=R(`
      `),JB=R(``),YB=R(`Expired`),XB=R(` `),ZB=R(` `,1),QB=R(`Deactivated`),$B=R(`
      `),eV=R(`
      NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
      `);function tV(e,t){E(t,!0);var n=eV(),r=M(n),i=M(r),a=M(i),o=P(M(a),5),s=M(o);G(P(M(s)),{get icon(){return to},width:`13`,height:`13`}),T(s),T(o),Ue(3),T(a),T(i);var c=P(i);H(c,21,()=>PB.visibleKeys,e=>e.id,(e,t)=>{var n=$B();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i),s=M(o,!0);T(o);var c=P(o),l=M(c,!0);T(c);var u=P(c),d=M(u),f=e=>{var n=qB();H(n,20,()=>I(t).labels||[],e=>e,(e,t)=>{var n=KB(),r=M(n,!0);T(n),F(e=>{Hi(n,e),B(r,t)},[()=>Uy(t)]),z(e,n)}),T(n),z(e,n)},p=e=>{z(e,JB())};V(d,e=>{(I(t).labels||[]).length>0?e(f):e(p,-1)}),T(u);var m=P(u),h=M(m),g=M(h,!0);T(h),T(m);var _=P(m),v=M(_);let y;var b=M(v,!0);T(v),T(_);var x=P(_),S=M(x),C=e=>{var n=XB(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{z(e,YB())},s=O(()=>CB(I(t)));V(a,e=>{I(s)&&e(o)}),T(n),F(e=>B(i,e),[()=>pc(I(t).expires_at)]),z(e,n)},w=e=>{z(e,Zr(`—`))};V(S,e=>{I(t).expires_at?e(C):e(w,-1)}),T(x);var ee=P(x),te=M(ee,!0);T(ee);var ne=P(ee),re=M(ne),ie=M(re),ae=e=>{var n=ZB(),r=N(n);{let e=O(()=>(I(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+I(t).name),n=O(()=>!!PB.dashboardAccessID);gT(r,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>PB.toggleDashboardAccess(I(t)),get disabled(){return I(n)},children:(e,n)=>{{let n=O(()=>I(t).dashboard_access?wo:Co);G(e,{get icon(){return I(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=P(r,2);{let e=O(()=>`Edit labels for API key `+I(t).name);gT(i,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>PB.openLabelsEditor(I(t)),children:(e,t)=>{G(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=P(i,2);{let e=O(()=>(PB.deactivatingID===I(t).id?`Deactivating API key `:`Deactivate API key `)+I(t).name),n=O(()=>PB.deactivatingID===I(t).id);gT(a,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>PB.deactivateKey(I(t)),get disabled(){return I(n)},children:(e,t)=>{G(e,{get icon(){return mo},class:`table-icon-svg`})},$$slots:{default:!0}})}z(e,n)},oe=e=>{var n=QB();F(e=>W(n,`title`,e),[()=>I(t).deactivated_at?`Deactivated on `+mc(I(t).deactivated_at):`Deactivated`]),z(e,n)},se=O(()=>wB(I(t)));V(ie,e=>{I(t).active?e(ae):I(se)&&e(oe,1)}),T(re),T(ne),T(n),F((e,i,o)=>{r=U(n,1,`svelte-nf0ldb`,null,r,e),B(a,I(t).name),B(s,I(t).description||`—`),B(l,I(t).user_path||`—`),B(g,I(t).redacted_value),y=U(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":I(t).dashboard_access,"auth-key-status-inactive":!I(t).dashboard_access}),B(b,I(t).dashboard_access?`Allowed`:`Denied`),W(x,`title`,i),B(te,o)},[()=>({"auth-key-row-deactivated":wB(I(t))}),()=>I(t).expires_at?mc(I(t).expires_at):``,()=>ds.formatTimestamp(I(t).created_at)]),z(e,n)}),T(c),T(r),T(n),z(e,n),D()}var nV=R(``),rV=R(`
      API key management is unavailable.
      `),iV=R(``),aV=R(`

      Managed API keys authenticate requests to the gateway. Deactivation is - permanent — create a new key if access needs to be restored.

      `),oV=R(`
      `),sV=R(`
      `),cV=R(`

      `),lV=R(`

      No API keys yet. Issue a key to get started.

      `),uV=R(`
      `);function dV(e,t){E(t,!0),An(()=>{K.refreshTick,Jo.page===`auth-keys`&&PB.fetchKeys()});var n=uV(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=nV();G(M(t),{get icon(){return po},class:`table-icon-svg`}),Ue(2),T(t),F(()=>t.disabled=PB.formSubmitting),L(`click`,t,()=>{PB.formSubmitting||PB.openForm()}),z(e,t)};V(a,e=>{PB.available&&!K.authError&&e(o)}),T(i),T(r);var s=P(r,2),c=e=>{z(e,rV())};V(s,e=>{!PB.available&&!K.authError&&e(c)});var l=P(s,2),u=e=>{var t=iV(),n=M(t,!0);T(t),F(()=>B(n,PB.error)),z(e,t)};V(l,e=>{PB.error&&!K.authError&&!PB.formOpen&&e(u)});var d=P(l,2),f=e=>{z(e,aV())};V(d,e=>{PB.available&&!K.authError&&e(f)});var p=P(d,2);HB(p,{});var m=P(p,2);GB(m,{});var h=P(m,2),g=e=>{var t=oV();SS(M(t),{size:18,label:`Loading API keys`}),T(t),z(e,t)};V(h,e=>{PB.loading&&PB.keys.length===0&&e(g)});var _=P(h,2),v=e=>{var t=sV(),n=M(t);yw(M(n),{placeholder:`Filter by name, description, user path, label, or token...`,label:`Filter API keys by name, description, user path, label, or token`,get value(){return PB.filter},set value(e){PB.filter=e}}),T(n);var r=P(n,2),i=M(r),a=M(i);na(a);var o=P(a,2),s=P(M(o)),c=e=>{var t=Zr();F(()=>B(t,`(${PB.inactiveCount??``})`)),z(e,t)};V(s,e=>{PB.inactiveCount>0&&e(c)}),T(o),T(i),T(r),T(t),fa(a,()=>PB.showInactive,e=>PB.showInactive=e),z(e,t)};V(_,e=>{PB.keys.length>0&&PB.available&&e(v)});var y=P(_,2),b=e=>{tV(e,{})};V(y,e=>{PB.visibleKeys.length>0&&PB.available&&e(b)});var x=P(y,2),S=e=>{var t=cV(),n=M(t);T(t),F(()=>B(n,`No API keys match the current filter.${PB.inactiveCount>0&&!PB.showInactive?` `+PB.inactiveCount+` inactive `+(PB.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),z(e,t)};V(x,e=>{PB.keys.length>0&&PB.visibleKeys.length===0&&PB.available&&e(S)});var C=P(x,2),w=e=>{z(e,lV())};V(C,e=>{PB.keys.length===0&&!PB.loading&&!K.authError&&!PB.error&&PB.available&&e(w)}),T(n),z(e,n),D()}Hr([`click`]);var fV=R(`

      Timezone

      `),pV=R(``),mV=R(``),hV=R(`
      `,1);function gV(e,t){E(t,!0);function n(){ds.saveOverride(),K.refresh()}function r(){ds.clearOverride(),K.refresh()}var i=hV(),a=N(i);qS(M(a),{copyId:`timezone-help-copy`,label:`timezone help`,text:`Day-based analytics, charts, and date filters use your effective timezone. Usage and audit logs keep UTC in the hover title while rendering row timestamps in your effective timezone.`,title:e=>{z(e,fV())},$$slots:{title:!0}}),T(a);var o=P(a,2),s=M(o),c=P(M(s),2),l=M(c),u=M(l);T(l),l.value=l.__value=``,H(P(l),17,()=>ds.options,e=>e.value,(e,t)=>{var n=pV(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(c),T(s),T(o);var d=P(o,2),f=M(d),p=e=>{var t=mV();L(`click`,t,r),z(e,t)};V(f,e=>{ds.override&&e(p)}),T(d),F(e=>B(u,`Automatic (${e??``})`),[()=>ds.detectedTimeZoneLabel()]),Vr(`focus`,c,()=>ds.ensureOptions()),L(`change`,c,n),Gi(c,()=>ds.override,e=>ds.override=e),z(e,i),D()}Hr([`change`,`click`]);var _V=R(``),vV=R(`

      Failover

      `,1);function yV(e,t){E(t,!0);let n=O(()=>Z.failoverSaving||Z.failoverGenerating||Z.failoverDraftSaving||!Z.failoverAvailable||!Z.failoverEnabled());var r=vV(),i=N(r),a=P(M(i),2),o=M(a),s=M(o);G(s,{get icon(){return Po},class:`form-action-icon`});var c=P(s,2),l=M(c,!0);T(c),T(o);var u=P(o,2);G(M(u),{get icon(){return Ao},class:`form-action-icon`}),Ue(2),T(u),T(a),T(i);var d=P(i,2),f=M(d),p=e=>{var t=_V(),n=M(t,!0);T(t),F(()=>B(n,Z.failoverError)),z(e,t)};V(f,e=>{Z.failoverError&&e(p)}),T(d),fj(P(d,2),{}),F(()=>{o.disabled=I(n),B(l,Z.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=I(n)}),L(`click`,o,()=>Z.generateFailoverRules()),L(`click`,u,()=>Z.openFailoverResetDialog()),z(e,r),D()}Hr([`click`]);function bV(){return{daily_reset_hour:0,daily_reset_minute:0,weekly_reset_weekday:1,weekly_reset_hour:0,weekly_reset_minute:0,monthly_reset_day:1,monthly_reset_hour:0,monthly_reset_minute:0}}function xV(e,t){let n=t||{},r=(e,t)=>{if(e===``)return t;let n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)?Math.trunc(n):t},i=(e,t)=>r(n[e],t),a=(t,n)=>e?r(e[t],n):n;return{daily_reset_hour:a(`daily_reset_hour`,i(`daily_reset_hour`,0)),daily_reset_minute:a(`daily_reset_minute`,i(`daily_reset_minute`,0)),weekly_reset_weekday:a(`weekly_reset_weekday`,i(`weekly_reset_weekday`,1)),weekly_reset_hour:a(`weekly_reset_hour`,i(`weekly_reset_hour`,0)),weekly_reset_minute:a(`weekly_reset_minute`,i(`weekly_reset_minute`,0)),monthly_reset_day:a(`monthly_reset_day`,i(`monthly_reset_day`,1)),monthly_reset_hour:a(`monthly_reset_hour`,i(`monthly_reset_hour`,0)),monthly_reset_minute:a(`monthly_reset_minute`,i(`monthly_reset_minute`,0))}}function SV(){return[{value:0,label:`Sunday`},{value:1,label:`Monday`},{value:2,label:`Tuesday`},{value:3,label:`Wednesday`},{value:4,label:`Thursday`},{value:5,label:`Friday`},{value:6,label:`Saturday`}]}var CV=R(`

      Budget Resets

      `),wV=R(``),TV=R(`

      If the selected day does not exist in a month, the reset runs on - the last day of that month.

      `),EV=R(``),DV=R(``),OV=R(`
      Monthly
      Weekly
      Daily
      `,1);function kV(e,t){E(t,!0);let n=k(j(bV())),r=k(!1),i=k(!1),a=k(``),o=k(!1),s=O(()=>Ss.budgetsVisible());async function c(){if(await Ss.ensureLoaded(),!Ss.budgetsVisible()){A(a,``);return}A(r,!0),A(a,``);try{let e=await _s(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){A(a,`Unable to load budget settings.`);return}A(n,xV(e.data,I(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),A(a,`Unable to load budget settings.`)}finally{A(r,!1)}}async function l(){if(!I(i)){A(i,!0);try{let e=await vs(`/admin/budgets/settings`,`PUT`,xV(I(n),I(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){q.error(`Unable to save budget settings.`);return}A(n,xV(e.data,I(n)),!0),A(a,``),q.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),q.error(`Unable to save budget settings.`)}finally{A(i,!1)}}}An(()=>{K.refreshTick,c()});var u=Qr(),d=N(u),f=e=>{var t=OV(),s=N(t),c=M(s);qS(c,{copyId:`budget-settings-help-copy`,label:`budget help`,text:`Budget reset anchors are stored in the database and evaluated in UTC. Hourly budgets reset at the top of each hour.`,title:e=>{z(e,CV())},$$slots:{title:!0}});var u=P(c,2),d=M(u),f=P(M(d),2),p=M(f);qS(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return I(o)},set open(e){A(o,e,!0)},title:e=>{z(e,wV())},$$slots:{title:!0}});var m=P(p,2);na(m),T(f);var h=P(f,2),g=P(M(h),2);na(g),T(h);var _=P(h,2),v=P(M(_),2);na(v),T(_);var y=P(_,2),b=M(y),x=e=>{z(e,TV())};V(b,e=>{I(o)&&e(x)}),T(y),T(d);var S=P(d,2),C=P(M(S),2),w=P(M(C),2);H(w,21,SV,e=>e.value,(e,t)=>{var n=EV(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(w),T(C);var ee=P(C,2),te=P(M(ee),2);na(te),T(ee);var ne=P(ee,2),re=P(M(ne),2);na(re),T(ne),Ue(2),T(S);var ie=P(S,2),ae=P(M(ie),4),oe=P(M(ae),2);na(oe),T(ae);var se=P(ae,2),ce=P(M(se),2);na(ce),T(se),Ue(2),T(ie),T(u);var le=P(u,2),ue=M(le);G(M(ue),{get icon(){return _o},class:`form-action-icon`}),Ue(2),T(ue);var de=P(ue,2),fe=e=>{SS(e,{size:16,label:`Loading budget settings`})};V(de,e=>{I(r)&&e(fe)}),T(le),T(s);var pe=P(s,2),me=M(pe),he=e=>{var t=DV(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)};V(me,e=>{I(a)&&e(he)}),T(pe),F(()=>{ue.disabled=I(i)||I(r),W(ue,`aria-busy`,I(i)?`true`:`false`)}),da(m,()=>I(n).monthly_reset_day,e=>I(n).monthly_reset_day=e),da(g,()=>I(n).monthly_reset_hour,e=>I(n).monthly_reset_hour=e),da(v,()=>I(n).monthly_reset_minute,e=>I(n).monthly_reset_minute=e),Gi(w,()=>I(n).weekly_reset_weekday,e=>I(n).weekly_reset_weekday=e),da(te,()=>I(n).weekly_reset_hour,e=>I(n).weekly_reset_hour=e),da(re,()=>I(n).weekly_reset_minute,e=>I(n).weekly_reset_minute=e),da(oe,()=>I(n).daily_reset_hour,e=>I(n).daily_reset_hour=e),da(ce,()=>I(n).daily_reset_minute,e=>I(n).daily_reset_minute=e),L(`click`,ue,l),z(e,t)};V(d,e=>{I(s)&&e(f)}),z(e,u),D()}Hr([`click`]);var AV=R(`

      Reset All Budgets

      Start new budget periods for every configured budget without changing - the limits.

      `);function jV(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=AV(),n=P(M(t),2),r=M(n);G(M(r),{get icon(){return go},class:`form-action-icon`}),Ue(2),T(r),T(n),T(t),F(()=>r.disabled=Y.resetAllLoading),L(`click`,r,()=>Y.openResetDialog()),z(e,t)},a=O(()=>Ss.budgetsVisible());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}Hr([`click`]);function MV(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function NV(e){return(e&&Array.isArray(e.headers)?e.headers:[]).map(e=>({header:typeof e.header==`string`?e.header:``,prefix:typeof e.prefix==`string`?e.prefix:``,do_not_pass:e.do_not_pass===!0,delimiter:typeof e.delimiter==`string`&&e.delimiter!==`,`?e.delimiter:``,managed:e.managed===!0}))}function PV(e){return{headers:(Array.isArray(e)?e:[]).filter(e=>!e.managed&&e.header.trim()!==``).map(e=>({header:e.header.trim(),prefix:e.prefix,do_not_pass:e.do_not_pass,delimiter:e.delimiter}))}}function FV(e){return e&&e.error&&e.error.message?e.error.message:``}var IV=R(`

      Tagging based on headers

      `),LV=R(`config`),RV=R(``),zV=R(`
      `),BV=R(`

      No tagging headers configured. Requests are not labelled.

      `),VV=R(``),HV=R(`
      `,1);function UV(e,t){E(t,!0);let n=k(j([])),r=k(!0),i=k(!1),a=k(!1),o=k(``);function s(){I(n).push(MV())}function c(e){let t=I(n)[e];!t||t.managed||I(n).splice(e,1)}async function l(){A(i,!0),A(o,``);try{let e=await _s(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){A(o,`Unable to load tagging settings.`);return}A(n,NV(e.data),!0),A(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),A(o,`Unable to load tagging settings.`)}finally{A(i,!1)}}async function u(){if(!(I(a)||!I(r))){A(a,!0);try{let e=await vs(`/admin/tagging/settings`,`PUT`,PV(I(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){q.error(e.status!==401&&FV(e.data)||`Unable to save tagging settings.`);return}A(n,NV(e.data),!0),A(r,e.data&&e.data.editable!==!1,!0),A(o,``),q.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),q.error(`Unable to save tagging settings.`)}finally{A(a,!1)}}}An(()=>{K.refreshTick,l()});var d=HV(),f=N(d),p=M(f);qS(p,{copyId:`tagging-settings-help-copy`,label:`tagging help`,text:`Each request is labelled from the listed headers; labels land in usage tracking and audit logs. A header value can carry several labels split by the delimiter (default: comma). The prefix is trimmed from each label only — the header itself is forwarded unchanged unless 'Do not pass' is checked. Rows marked CONFIG come from config.yaml or TAGGING_HEADER_* env vars and are read-only here.`,title:e=>{z(e,IV())},$$slots:{title:!0}});var m=P(p,2),h=M(m);H(h,17,()=>I(n),oi,(e,t,n)=>{var i=zV(),a=M(i),o=M(a);W(o,`for`,`tagging-header-`+n);var s=P(o,2);na(s),W(s,`id`,`tagging-header-`+n),T(a);var l=P(a,2),u=M(l);W(u,`for`,`tagging-prefix-`+n);var d=P(u,2);na(d),W(d,`id`,`tagging-prefix-`+n),T(l);var f=P(l,2),p=M(f);W(p,`for`,`tagging-delimiter-`+n);var m=P(p,2);na(m),W(m,`id`,`tagging-delimiter-`+n),T(f);var h=P(f,2),g=M(h);na(g),Ue(2),T(h);var _=P(h,2),v=M(_),y=e=>{z(e,LV())},b=e=>{var i=RV();F(()=>{i.disabled=!I(r),W(i,`aria-label`,`Remove tagging header `+(I(t).header||n+1))}),L(`click`,i,()=>c(n)),z(e,i)};V(v,e=>{I(t).managed?e(y):e(b,-1)}),T(_),T(i),F(()=>{s.disabled=I(t).managed||!I(r),d.disabled=I(t).managed||!I(r),m.disabled=I(t).managed||!I(r),g.disabled=I(t).managed||!I(r)}),da(s,()=>I(t).header,e=>I(t).header=e),da(d,()=>I(t).prefix,e=>I(t).prefix=e),da(m,()=>I(t).delimiter,e=>I(t).delimiter=e),fa(g,()=>I(t).do_not_pass,e=>I(t).do_not_pass=e),z(e,i)});var g=P(h,2),_=e=>{SS(e,{size:16,label:`Loading tagging settings`})};V(g,e=>{I(i)&&e(_)});var v=P(g,2),y=e=>{z(e,BV())};V(v,e=>{!I(i)&&I(n).length===0&&e(y)}),T(m);var b=P(m,2),x=M(b);G(M(x),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(x);var S=P(x,2);G(M(S),{get icon(){return _o},class:`form-action-icon`}),Ue(2),T(S),T(b),T(f);var C=P(f,2),w=M(C),ee=e=>{var t=VV(),n=M(t,!0);T(t),F(()=>B(n,I(o))),z(e,t)};V(w,e=>{I(o)&&e(ee)}),T(C),F(()=>{x.disabled=!I(r)||I(a)||I(i),S.disabled=!I(r)||I(a)||I(i),W(S,`aria-busy`,I(a)?`true`:`false`)}),L(`click`,x,s),L(`click`,S,u),z(e,d),D()}Hr([`click`]);function WV(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?fc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?fc(r):``}}function GV(e,t,n,r){return{...WV(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function KV(e){let t=Number(e&&e.matched||0),n=Number(e&&e.recalculated||0),r=Number(e&&e.without_pricing||0),i=`Pricing recalculated for `+n+` of `+t+` usage record`+(t===1?``:`s`)+`.`;return r>0&&(i+=` `+r+` usage record`+(r===1?` still lacks`:`s still lack`)+` pricing metadata.`),i}var qV=R(`

      Usage Pricing Recalculation

      `),JV=R(`
      `);function YV(e,t){E(t,!0);let n=k(``),r=k(``),i=k(!1),a=O(()=>Ss.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!I(a)){q.error(`Usage pricing recalculation is unavailable.`);return}I(i)||Rs.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Ia,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!I(a)){q.error(`Usage pricing recalculation is unavailable.`);return}if(!I(i)){A(i,!0);try{let e=await vs(`/admin/usage/recalculate-pricing`,`POST`,GV({selectedPreset:Mc.selectedPreset,customStartDate:Mc.customStartDate,customEndDate:Mc.customEndDate,today:ds.todayDate()},I(n),I(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Rs.error=`Unable to recalculate pricing.`;return}Rs.close(),q.success(KV(e.data)),Rc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Rs.error=`Unable to recalculate pricing.`}finally{A(i,!1)}}}var c=Qr(),l=N(c),u=e=>{var t=JV(),s=M(t);qS(s,{copyId:`pricing-recalculate-help-copy`,label:`pricing recalculation help`,text:`Recalculate stored input, output, total, and Pro Saved costs from the current model pricing metadata. This overwrites matching historical cost fields. Filters are applied to the selected date range, user path subtree, and provider/model selector or alias.`,title:e=>{z(e,qV())},$$slots:{title:!0}});var c=P(s,2),l=M(c),u=P(M(l),2);tl(M(u),{}),T(u),T(l);var d=P(l,2),f=P(M(d),2);na(f),T(d);var p=P(d,2),m=P(M(p),2);na(m),T(p),T(c);var h=P(c,2),g=M(h);G(M(g),{get icon(){return Ia},class:`form-action-icon`}),Ue(2),T(g),T(h),T(t),F(()=>{g.disabled=I(i)||!I(a),W(g,`aria-busy`,I(i)?`true`:`false`)}),da(f,()=>I(n),e=>A(n,e)),da(m,()=>I(r),e=>A(r,e)),L(`click`,g,o),z(e,t)};V(l,e=>{I(a)&&e(u)}),z(e,c),D()}Hr([`click`]);function XV(e){return String(e&&e.status||`ok`).toLowerCase()}function ZV(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=XV(e);return(r===`ok`?`Runtime refreshed.`:r===`partial`?`Runtime refresh completed with warnings.`:`Runtime refresh failed.`)+` `+t+` model`+(t===1?``:`s`)+` across `+n+` provider`+(n===1?``:`s`)+`.`}function QV(e){return!!e&&XV(e)===`ok`}function $V(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function eH(e){let t=String(e&&e.name||``).replace(/_/g,` `),n=String(e&&e.status||``).trim(),r=String(e&&(e.error||e.message)||``).trim();return t?r?t+`: `+n+` - `+r:t+`: `+n:r||n||``}var tH=R(`

      Runtime Refresh

      `),nH=R(`
    • `),rH=R(`
        `),iH=R(`
        `,1);function aH(e,t){E(t,!0);let n=k(!1),r=k(null);async function i(){if(!I(n)){A(n,!0),A(r,null);try{let e=await vs(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){q.error(`Runtime refresh failed.`);return}A(r,e.data&&typeof e.data==`object`?e.data:null,!0),QV(I(r))?q.success(ZV(I(r))):q.error(ZV(I(r))),K.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),q.error(`Runtime refresh failed.`)}finally{A(n,!1)}}}var a=iH(),o=N(a),s=M(o);qS(s,{copyId:`runtime-refresh-help-copy`,label:`runtime refresh help`,text:`Pull the latest model metadata, provider inventory, API keys, aliases, model access rules, guardrails, and workflows.`,title:e=>{z(e,tH())},$$slots:{title:!0}});var c=P(s,2),l=M(c);let u;G(M(l),{get icon(){return ho},class:`settings-refresh-icon`}),Ue(2),T(l),T(c),T(o);var d=P(o,2),f=M(d),p=e=>{var t=rH();H(t,21,()=>$V(I(r)),e=>e.name,(e,t)=>{var n=nH(),r=M(n,!0);T(n),F(e=>{U(n,1,`runtime-refresh-step is-${I(t).status??``}`,`svelte-yeq2mp`),B(r,e)},[()=>eH(I(t))]),z(e,n)}),T(t),z(e,t)},m=O(()=>$V(I(r)).length>0);V(f,e=>{I(m)&&e(p)}),T(d),F(()=>{u=U(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":I(n)}),l.disabled=I(n),W(l,`aria-busy`,I(n)?`true`:`false`)}),L(`click`,l,i),z(e,a),D()}Hr([`click`]);var oH=R(``),sH=R(`

        `),cH=R(`

        `),lH=R(``),uH=R(`
        `),dH=R(`

        AI Processing

        `);function fH(e,t){E(t,!0);let n=k(j([])),r=k(!1),i=k(``),a=k(``);async function o(){A(r,!0),A(a,``);try{let e=await _s(`/admin/runtime/settings`,{label:`runtime settings`});if(e.stale)return;if(!e.ok){A(a,`Unable to load runtime settings.`);return}A(n,Array.isArray(e.data?.settings)?e.data.settings:[],!0)}catch(e){console.error(`Failed to load runtime settings:`,e),A(a,`Unable to load runtime settings.`)}finally{A(r,!1)}}async function s(e,t,r){if(!(e.locked||I(i))){A(i,e.key,!0);try{let i=await vs(`/admin/runtime/settings/${encodeURIComponent(e.key)}`,`PUT`,{value:t},{label:`save ${e.label}`});if(i.stale){r.value=e.value;return}if(!i.ok){r.value=e.value,q.error(`Unable to save ${e.label}.`);return}A(n,I(n).map(t=>t.key===e.key?i.data:t),!0),q.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),q.error(`Unable to save ${e.label}.`)}finally{A(i,``)}}}An(()=>{K.refreshTick,o()});var c=Qr(),l=N(c),u=e=>{var t=dH(),o=M(t),c=P(M(o),2),l=e=>{var t=oH(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)};V(c,e=>{I(a)&&e(l)}),T(o);var u=P(o,2);H(u,21,()=>I(n),e=>e.key,(e,t)=>{var n=uH(),r=M(n),a=M(r),o=M(a,!0);T(a);var c=P(a,2),l=e=>{var n=sH(),r=M(n,!0);T(n),F(()=>B(r,I(t).description)),z(e,n)};V(c,e=>{I(t).description&&e(l)});var u=P(c,2),d=e=>{var n=cH(),r=M(n);T(n),F(()=>B(r,`Managed by ${(I(t).managed_by||`environment`)??``}`)),z(e,n)};V(u,e=>{I(t).locked&&e(d)}),T(r);var f=P(r,2);H(f,21,()=>I(t).options||[],e=>e.value,(e,t)=>{var n=lH(),r=M(n,!0);T(n);var i={};F(()=>{W(n,`title`,I(t).description||``),B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(f);var p;Wi(f),T(n),F(()=>{W(a,`for`,`runtime-setting-${I(t).key}`),B(o,I(t).label),W(f,`id`,`runtime-setting-${I(t).key}`),f.disabled=I(t).locked||I(i)!==``,p!==(p=I(t).value)&&(f.value=(f.__value=I(t).value)??``,Ui(f,I(t).value))}),L(`change`,f,e=>s(I(t),e.currentTarget.value,e.currentTarget)),z(e,n)}),T(u),T(t),F(()=>W(u,`aria-busy`,I(r)?`true`:`false`)),z(e,t)};V(l,e=>{(I(n).length>0||I(a))&&e(u)}),z(e,c),D()}Hr([`change`]);var pH=R(`
        `);function mH(e,t){E(t,!0),An(()=>{K.refreshTick,Jo.page===`settings`&&(ds.ensureOptions(),Ss.ensureLoaded())});var n=pH(),r=P(M(n),2),i=M(r);gV(i,{});var a=P(i,2);yV(a,{});var o=P(a,2);kV(o,{});var s=P(o,2);jV(s,{});var c=P(s,2);UV(c,{});var l=P(c,2);fH(l,{});var u=P(l,2);YV(u,{}),aH(P(u,2),{}),T(r);var d=P(r,2),f=M(d,!0);T(d),T(n),F(e=>B(f,e),[()=>Uo()]),z(e,n),D()}var hH=R(`
         
        `),gH=R(`
         
        `),_H=R(`
        `),vH=R(`
        `),yH=R(`
        `,1),bH=R(`
        `);function xH(e,t){E(t,!0);let n=O(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function r(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var i=bH(),a=M(i),o=e=>{var n=hH(),i=M(n),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(i);var l=P(i,2),u=M(l,!0);T(l),T(n),F((e,n)=>{B(o,t.msg.roleLabel),B(c,e),B(u,n)},[()=>r(t.msg),()=>RI(t.msg)]),z(e,n)},s=e=>{var n=yH(),r=N(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(r);var c=P(r,2),l=e=>{var n=gH(),r=M(n,!0);T(n),F(()=>B(r,t.msg.text)),z(e,n)};V(c,e=>{t.msg.text&&e(l)});var u=P(c,2),d=e=>{var n=vH();H(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=_H(),r=M(n),i=M(r,!0);T(r),T(n),F(()=>B(i,I(t).name+`()`)),z(e,n)}),T(n),z(e,n)};V(u,e=>{t.msg.toolCalls&&e(d)}),F(e=>{B(a,t.msg.roleLabel),B(s,e)},[()=>ds.formatTimestamp(t.msg.timestamp)]),z(e,n)};V(a,e=>{I(n)?e(o):e(s,-1)}),T(i),F(()=>{U(i,1,Fi([I(n)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),W(i,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),W(i,`data-entry-id`,t.msg.entryID)}),z(e,i),D()}function SH(e,t=0){let n=Math.max(0,TH(e)-Math.max(0,TH(t))),r=Math.min(320,Math.max(180,Math.floor(n*.58))),i=Math.min(360,Math.max(128,Math.floor(n*.35)));return{min:r,max:Math.max(r,n-i)}}function CH(e,t,n=0){let r=SH(t,n),i=TH(e)||520;return Math.min(r.max,Math.max(r.min,Math.round(i)))}function wH(e,t,n=0){return CH(TH(t)-TH(e),t,n)}function TH(e){let t=Number(e);return Number.isFinite(t)?t:0}var EH=R(`
        `),DH=R(`

        Loading interactions...

        `),OH=R(`

        No interaction data available for this entry.

        `),kH=R(`
        `),AH=R(`

        Showing the newest part of this session and the selected log.

        `),jH=R(`
        `),MH=R(``),NH=R(`
        `),PH=R(``),FH=R(``);function IH(e,t){E(t,!0);let n=KI,r=Number(Ta(`gomodel_interactions_panel_width`)),i=Number.isFinite(r)&&r>0?r:520,a=k(j(i)),o=k(320),s=k(760),c=k(!1),l=null;function u(){return(document.querySelector(`.sidebar`)?.getBoundingClientRect().width||0)+(document.querySelector(`.sidebar-toggle`)?.getBoundingClientRect().width||0)}function d(){let e=u(),t=SH(window.innerWidth,e);A(o,t.min,!0),A(s,t.max,!0),A(a,CH(i,window.innerWidth,e),!0)}function f(e){A(a,wH(e,window.innerWidth,u()),!0),i=I(a)}function p(e){e.button===0&&(e.preventDefault(),l=e.pointerId,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`conversation-panel-resizing`),f(e.clientX))}function m(e){e.pointerId===l&&f(e.clientX)}function h(e){l===null||e.pointerId!==void 0&&e.pointerId!==l||(l=null,document.body.classList.remove(`conversation-panel-resizing`),Ea(`gomodel_interactions_panel_width`,i))}function g(e){e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||(e.preventDefault(),i=I(a)+(e.key===`ArrowLeft`?24:-24),d(),i=I(a),Ea(`gomodel_interactions_panel_width`,i))}function _(){return[document.querySelector(`.sidebar`),document.querySelector(`.sidebar-toggle`),document.getElementById(`dashboard-content`)].filter(Boolean)}An(()=>{if(!n.conversationOpen)return;d();let e=document.querySelector(`.sidebar`),t=new ResizeObserver(d);e&&t.observe(e);let r=e=>{e.key===`Escape`&&!ja.anyOpen&&(I(c)?A(c,!1):n.closeConversation())};return window.addEventListener(`keydown`,r),window.addEventListener(`resize`,d),()=>{h({}),t.disconnect(),window.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,d)}}),An(()=>{n.conversationOpen||A(c,!1)}),An(()=>{if(!I(c))return;let e=_().map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));return e.forEach(({element:e})=>{e.inert=!0,e.setAttribute(`aria-hidden`,`true`)}),()=>{e.forEach(({element:e,inert:t,ariaHidden:n})=>{e.inert=t,n===null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)})}}),An(()=>{Jo.page!==`audit-logs`&&n.conversationOpen&&n.closeConversation()});var v=Qr(),y=N(v),b=e=>{var t=FH();let r,i;var l=M(t),u=P(l,2),d=P(M(u),2),f=M(d),_=M(f);{let e=O(()=>I(c)?so:oo);G(_,{get icon(){return I(e)},class:`table-icon-svg`})}T(f),ks(P(f,2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),T(d),T(u);var v=P(u,2),y=M(v),b=e=>{var t=EH(),r=M(t,!0);T(t),F(()=>B(r,n.conversationError)),z(e,t)};V(y,e=>{n.conversationError&&e(b)});var x=P(y,2),S=e=>{z(e,DH())};V(x,e=>{n.conversationLoading&&e(S)});var C=P(x,2),w=e=>{z(e,OH())},ee=O(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{var t=kH();H(t,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{xH(e,{get msg(){return I(t)}})}),T(t),ga(t,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),z(e,t)};V(te,e=>{n.conversationMessages.length>0&&e(ne)});var re=P(te,2),ie=e=>{z(e,AH())};V(re,e=>{n.conversationTruncated&&e(ie)});var ae=P(re,2),oe=e=>{var t=jH(),r=P(M(t),2),i=M(r,!0);T(r),T(t),F(e=>B(i,e),[()=>n.conversationLiveStatusText()]),z(e,t)},se=O(()=>n.conversationLiveWaiting());V(ae,e=>{I(se)&&e(oe)}),T(v);var ce=P(v,2),le=e=>{var t=PH(),r=M(t),i=e=>{var t=NH(),r=P(M(t),2);ft(r);var i=P(r,2),a=e=>{var t=MH(),r=M(t,!0);T(t),F(()=>B(r,n.followUpError)),z(e,t)};V(i,e=>{n.followUpError&&e(a)});var o=P(i,2),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=M(l,!0);T(l),T(o),T(t),F((e,t,i)=>{r.disabled=e,B(c,t),l.disabled=i,B(u,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),Vr(`submit`,t,e=>{e.preventDefault(),n.sendFollowUp()}),da(r,()=>n.followUpText,e=>n.followUpText=e),z(e,t)},a=O(()=>n.followUpKind());V(r,e=>{I(a)&&e(i)});var o=P(r,2),s=M(o,!0);T(o),T(t),F(()=>B(s,n.conversationFollowLatest?`Following latest interaction`:`Opened from log: `+n.conversationOpenedFromID)),z(e,t)};V(ce,e=>{n.conversationAnchorID&&e(le)}),T(t),ga(t,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),F(()=>{r=U(t,1,`conversation-drawer svelte-ssrzja`,null,r,{"conversation-drawer-fullscreen":I(c)}),W(t,`role`,I(c)?`dialog`:void 0),W(t,`aria-modal`,I(c)?`true`:void 0),i=Hi(t,``,i,{"--conversation-panel-width":I(a)+`px`}),W(l,`aria-valuemin`,I(o)),W(l,`aria-valuemax`,I(s)),W(l,`aria-valuenow`,I(a)),W(f,`aria-label`,I(c)?`Exit fullscreen interactions`:`Show interactions fullscreen`),W(f,`title`,I(c)?`Exit fullscreen`:`Fullscreen`),W(f,`aria-pressed`,I(c))}),L(`pointerdown`,l,p),L(`pointermove`,l,m),L(`pointerup`,l,h),Vr(`pointercancel`,l,h),Vr(`lostpointercapture`,l,h),L(`keydown`,l,g),L(`click`,f,()=>A(c,!I(c))),z(e,t)};V(y,e=>{n.conversationOpen&&e(b)}),z(e,v),D()}Hr([`pointerdown`,`pointermove`,`pointerup`,`keydown`,`click`]);var LH=R(`
        `,1);function RH(e,t){E(t,!0);let n={overview:_C,usage:fT,budgets:HE,"rate-limits":$D,models:Fj,workflows:nP,"audit-logs":IL,guardrails:kR,"mcp-servers":lz,"providers-config":_B,"auth-keys":dV,settings:mH};ds.init(),Mc.init(),K.init(),ka.init(),Aa.init(),Jo.init(),An(()=>{K.refreshTick,Ss.fetch(),Nc.fetchModels(),Nc.fetchCategories()}),An(()=>{document.body.classList.toggle(`dashboard-modal-open`,ja.anyOpen)});let r=O(()=>n[Jo.page]||_C);var i=LH(),a=N(i);Ds(a,{});var o=P(a,2);let s;var c=M(o);rc(c,{}),_i(P(c,2),()=>I(r),(e,t)=>{t(e,{})}),T(o);var l=P(o,2);IH(l,{});var u=P(l,2);Is(u,{});var d=P(u,2);Hs(d,{}),tc(P(d,2),{}),F(()=>s=U(o,1,`content`,null,s,{"interactions-open":KI.conversationOpen})),z(e,i),D()}ti(RH,{target:document.getElementById(`app`)}); \ No newline at end of file diff --git a/internal/admin/dashboard/static/dist/assets/index-CT5lg2co.css b/internal/admin/dashboard/static/dist/assets/index-CT5lg2co.css new file mode 100644 index 000000000..fc149a53e --- /dev/null +++ b/internal/admin/dashboard/static/dist/assets/index-CT5lg2co.css @@ -0,0 +1 @@ +:root{--bg:#111110;--bg-surface:#1e1d1c;--bg-surface-hover:#2a2420;--border:#2a2826;--text:#e8e0d6;--text-muted:#9a918a;--accent:#b8956e;--accent-hover:#d4b896;--success:#34d399;--info:#3b82f6;--warning:#f59e0b;--danger:#ef4444;--prompt-cache-color:color-mix(in srgb, var(--info) 72%, #fff);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 24%, var(--bg-surface));--cache-meter-uncached:var(--token-input);--cache-meter-local:var(--token-local);--cache-meter-prompt:var(--token-prompt);--token-input:#c0824a;--token-output:#ddb27a;--token-prompt:color-mix(in srgb, var(--info) 60%, transparent);--token-local:color-mix(in srgb, var(--info) 20%, transparent);--sidebar-width:240px;--radius:8px;--chart-grid:#2a2826;--chart-text:#9a918a;--chart-day-marker:var(--text);--chart-tooltip-bg:#1e1d1c;--chart-tooltip-border:#2a2826;--chart-tooltip-text:#e8e0d6;--cal-level-0:#161b22;--cal-level-1:color-mix(in srgb, var(--info) 15%, var(--bg-surface));--cal-level-2:color-mix(in srgb, var(--info) 25%, var(--bg-surface));--cal-level-3:color-mix(in srgb, var(--info) 36%, var(--bg-surface));--cal-level-4:color-mix(in srgb, var(--info) 48%, var(--bg-surface));--cal-level-5:color-mix(in srgb, var(--info) 60%, var(--bg-surface));--cal-level-6:color-mix(in srgb, var(--info) 73%, var(--bg-surface));--cal-level-7:color-mix(in srgb, var(--info) 87%, var(--bg-surface));--cal-level-8:var(--info);--cal-level-9:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-10:color-mix(in srgb, var(--info) 62%, #fff);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface-hover) 86%, #fff 14%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface-hover) 72%, #fff 28%);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light]{--bg:#f5f0ea;--bg-surface:#fff;--bg-surface-hover:#ece5dc;--border:#e8e0d6;--text:#2d2519;--text-muted:#7a7068;--accent:#755c3d;--accent-hover:#9a7d5a;--success:#34d399;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--prompt-cache-color:color-mix(in srgb, var(--info) 84%, #0f172a);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 18%, var(--bg-surface));--chart-grid:#e8e0d6;--chart-text:#7a7068;--chart-day-marker:var(--text);--chart-tooltip-bg:#fff;--chart-tooltip-border:#e8e0d6;--chart-tooltip-text:#2d2519;--cal-level-0:#ebedf0;--cal-level-1:color-mix(in srgb, var(--info) 12%, #fff);--cal-level-2:color-mix(in srgb, var(--info) 24%, #fff);--cal-level-3:color-mix(in srgb, var(--info) 37%, #fff);--cal-level-4:color-mix(in srgb, var(--info) 50%, #fff);--cal-level-5:color-mix(in srgb, var(--info) 64%, #fff);--cal-level-6:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-7:var(--info);--cal-level-8:color-mix(in srgb, var(--info) 85%, #000);--cal-level-9:color-mix(in srgb, var(--info) 72%, #000);--cal-level-10:color-mix(in srgb, var(--info) 60%, #000);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface) 96%, var(--accent) 4%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface) 90%, var(--accent) 10%);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#f5f0ea;--bg-surface:#fff;--bg-surface-hover:#ece5dc;--border:#e8e0d6;--text:#2d2519;--text-muted:#7a7068;--accent:#755c3d;--accent-hover:#9a7d5a;--success:#34d399;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--prompt-cache-color:color-mix(in srgb, var(--info) 84%, #0f172a);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 18%, var(--bg-surface));--chart-grid:#e8e0d6;--chart-text:#7a7068;--chart-day-marker:var(--text);--chart-tooltip-bg:#fff;--chart-tooltip-border:#e8e0d6;--chart-tooltip-text:#2d2519;--cal-level-0:#ebedf0;--cal-level-1:color-mix(in srgb, var(--info) 12%, #fff);--cal-level-2:color-mix(in srgb, var(--info) 24%, #fff);--cal-level-3:color-mix(in srgb, var(--info) 37%, #fff);--cal-level-4:color-mix(in srgb, var(--info) 50%, #fff);--cal-level-5:color-mix(in srgb, var(--info) 64%, #fff);--cal-level-6:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-7:var(--info);--cal-level-8:color-mix(in srgb, var(--info) 85%, #000);--cal-level-9:color-mix(in srgb, var(--info) 72%, #000);--cal-level-10:color-mix(in srgb, var(--info) 60%, #000);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface) 96%, var(--accent) 4%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface) 90%, var(--accent) 10%);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5}body.dashboard-modal-open{overflow:hidden}.app{height:100vh;min-height:0;display:flex;overflow:hidden}.badge{background:var(--accent);color:#fff;text-transform:uppercase;letter-spacing:.5px;border-radius:10px;padding:2px 8px;font-size:10px;font-weight:600}.auth-dialog{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:min(440px,100%);padding:22px;box-shadow:0 24px 70px #00000061}.auth-dialog-header{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px;display:flex}.auth-dialog h2{margin-top:2px;font-size:22px;line-height:1.2}.auth-dialog-close{background:var(--bg);border:1px solid var(--border);width:32px;min-width:32px;height:32px;color:var(--text-muted);cursor:pointer;font:inherit;border-radius:6px;flex:0 0 32px;justify-content:center;align-items:center;padding:0;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.auth-dialog-close:hover{color:var(--text);background:var(--bg-surface-hover)}.auth-dialog-close:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.auth-dialog-hint{color:var(--text-muted);font-size:13px}.auth-dialog-error{color:var(--danger);font-size:13px;font-weight:600}.auth-dialog-form{gap:10px;margin-top:18px;display:grid}.auth-dialog-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.content{-webkit-overflow-scrolling:touch;flex:1 1 0;width:100%;min-width:0;min-height:0;padding:32px;transition:width .2s;overflow-y:auto;container:dashboard-content/inline-size}.content>*{width:100%;max-width:1336px;margin-inline:auto}body.dashboard-modal-open .content{overflow-y:hidden}.content.interactions-open>*{max-width:none}.page-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.page-header h2{letter-spacing:-.3px;font-size:22px;font-weight:700}.page-header-controls{align-items:center;gap:12px;display:flex}.page-with-sticky-date{grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:12px;display:grid}.page-with-sticky-date>*{grid-column:1/-1}.page-with-sticky-date>.date-range-page-header{grid-column:1}.page-with-sticky-date>.sticky-date-range{z-index:8;grid-column:2;justify-self:end;position:sticky;top:16px}.model-count{color:var(--text-muted);font-size:14px}.provider-status-section{margin-top:28px;scroll-margin-top:24px}.cards{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:28px;display:grid}.card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.card-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:8px;font-size:12px;font-weight:600}.card-value{letter-spacing:-.5px;font-size:28px;font-weight:700}.cache-meter{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:28px;padding:24px}.chart-container{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.chart-container h3{margin-bottom:16px;font-size:16px;font-weight:600}.chart-container-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.chart-container-header h3{margin-bottom:0}.chart-wrapper{height:210px;position:relative}.live-dot{background:var(--text-muted);border-radius:50%;flex-shrink:0;width:8px;height:8px}.live-dot.is-streaming{background:var(--success);position:relative}.live-dot.is-streaming:after{content:"";z-index:-1;background:color-mix(in srgb, var(--success) 55%, transparent);border-radius:50%;animation:1.8s ease-out infinite live-dot-pulse;position:absolute;inset:0}@media (prefers-reduced-motion:reduce){.live-dot.is-streaming:after{opacity:0;animation:none}}@keyframes live-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(2.5)}to{opacity:0;transform:scale(2.5)}}.alert{border-radius:var(--radius);margin-bottom:20px;padding:12px 16px;font-size:14px}.alert-warning{color:var(--warning);background:#f59e0b1a;border:1px solid #f59e0b4d}.table-toolbar{align-items:center;gap:12px;margin-bottom:16px;display:flex}.table-toolbar-main{flex:1;min-width:0}.table-toolbar-actions{justify-content:flex-end;margin-left:auto;display:flex}input:is([type=text],[type=date],[type=number]){background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:8px 12px;font-family:inherit;font-size:13px}input:is([type=text],[type=date],[type=number]):focus{border-color:var(--accent)}input:is([type=text],[type=date],[type=number]):disabled,textarea:disabled,.form-input:disabled{opacity:.6;cursor:not-allowed}.table-wrapper{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table th{text-align:left;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);background:var(--bg);border-bottom:1px solid var(--border);padding:12px 16px;font-size:12px;font-weight:600}.data-table th.model-actions-header{text-align:right;white-space:nowrap;width:1%;min-width:156px}.data-table td{border-bottom:1px solid var(--border);padding:10px 16px}.data-table tr:last-child td{border-bottom:none}.data-table tr:hover td{background:var(--bg-surface-hover)}.mono{font-family:SF Mono,Menlo,Consolas,monospace}.font-size-md{font-size:13px}.col-price,.data-table th.col-price{text-align:right}td.col-price{color:var(--text-muted);white-space:nowrap;font-family:SF Mono,Menlo,Consolas,monospace;font-size:13px}.provider-badge{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:2px 10px;font-size:12px;font-weight:500;display:inline-block}.empty-state{text-align:center;color:var(--text-muted);padding:48px 0;font-size:14px}.empty-state-icon{width:auto;height:auto;max-height:160px;color:var(--text-muted);margin:0 auto;display:block}.empty-state-icon text{fill:var(--text-muted);font-family:inherit;font-weight:600}.chart-empty-overlay{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.chart-empty-overlay .empty-state-icon{width:auto;max-width:90%;height:auto;max-height:195px}.loading-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:16px;height:16px;animation:.8s linear infinite loading-spin}@keyframes loading-spin{to{transform:rotate(360deg)}}.table-action-btn{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:6px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .15s;display:inline-flex}.table-action-btn:hover:not(:disabled){background:var(--bg-surface-hover)}.table-action-btn:disabled{opacity:.45;cursor:default}.table-action-btn-danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--border))}.table-action-btn-active{color:var(--accent-strong,var(--accent));background:color-mix(in srgb, var(--accent) 12%, var(--bg));border-color:color-mix(in srgb, var(--accent) 38%, var(--border))}.table-action-btn-active:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 18%, var(--bg-surface-hover))}.table-action-btn-failover-active{color:var(--info);background:color-mix(in srgb, var(--cache-meter-prompt) 35%, var(--bg));border-color:color-mix(in srgb, var(--info) 45%, var(--border));position:relative}.table-action-btn-failover-active:hover:not(:disabled){background:color-mix(in srgb, var(--cache-meter-prompt) 45%, var(--bg-surface-hover))}.table-icon-btn{border-radius:6px;gap:0;width:32px;min-width:32px;height:32px;padding:0}.table-icon-btn.table-action-btn-active{position:relative}.table-icon-btn.table-action-btn-active:after{content:"";background:var(--accent);width:6px;height:6px;box-shadow:0 0 0 2px var(--bg-surface);border-radius:999px;position:absolute;top:4px;right:4px}.table-icon-btn.table-action-btn-failover-active:after{content:"";background:var(--info);width:6px;height:6px;box-shadow:0 0 0 2px var(--bg-surface);border-radius:999px;position:absolute;top:4px;right:4px}.table-icon-svg{flex-shrink:0;width:14px;height:14px}.model-editor{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:16px;padding:24px}.alias-kind-badge{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--accent);letter-spacing:.2px;text-transform:uppercase;border-color:color-mix(in srgb, var(--accent) 55%, var(--border));border-radius:999px;justify-content:center;align-items:center;gap:4px;padding:0 10px;font-size:11px;font-weight:600;display:inline-flex}.form h3{font-size:20px;font-weight:700}.form-kicker,.form-hint{color:var(--text-muted);font-size:13px}.alias-actions-cell{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.model-list-actions{white-space:nowrap;flex-wrap:nowrap}.model-list-actions .table-icon-btn{flex:0 0 32px}.model-list-actions .alias-toggle{flex:none}.alias-toggle{border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:6px 10px;font-family:inherit;font-size:12px;transition:all .15s;display:inline-flex}.alias-toggle:hover:not(:disabled){background:var(--bg-surface-hover)}.alias-toggle:disabled{opacity:.45;cursor:default}.alias-toggle-track{background:color-mix(in srgb, var(--border) 80%, var(--bg));border-radius:6px;width:34px;height:18px;transition:background .15s;position:relative}.alias-toggle-thumb{background:var(--text-muted);border-radius:6px;width:16px;height:16px;transition:transform .15s,background .15s;position:absolute;top:1px;left:2px}.alias-toggle.enabled{border-color:color-mix(in srgb, var(--success) 50%, var(--border))}.alias-toggle.enabled .alias-toggle-track{background:color-mix(in srgb, var(--success) 55%, var(--bg))}.alias-toggle.enabled .alias-toggle-thumb{background:#fff;transform:translate(14px)}.alias-toggle.restricted{border-color:color-mix(in srgb, var(--accent) 50%, var(--border));color:color-mix(in srgb, var(--accent) 70%, var(--text))}.alias-toggle.restricted .alias-toggle-track{background:color-mix(in srgb, var(--accent) 55%, var(--bg))}.editor-header{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:20px;display:flex}.form{flex-direction:column;gap:16px;display:flex}.auth-key-editor{background:color-mix(in srgb, var(--bg-surface) 82%, var(--bg) 18%)}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.form-field{flex-direction:column;gap:8px;display:flex}.form-field-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);font-size:12px;font-weight:600;display:inline-block}.vm-target-row{align-items:center;gap:8px;display:flex}.vm-target-row .vm-target-model{flex:auto;min-width:0}.vm-target-row .vm-target-weight{flex:0 0 88px;width:88px}.vm-status-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.vm-status-row .vm-status-toggle{margin-left:auto}.form-error{border:1px solid color-mix(in srgb, var(--danger) 42%, var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface));color:var(--danger);overflow-wrap:anywhere;margin:0;padding:10px 12px;font-size:13px;font-weight:600;line-height:1.4}.form-error:empty{display:none}.form-field-error{color:var(--danger);overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:1.4}.form-field-required{color:var(--danger);margin-left:3px}:is(input,textarea,select)[aria-invalid=true]{border-color:color-mix(in srgb, var(--danger) 60%, var(--border))}:is(input,textarea,select)[aria-invalid=true]:focus{border-color:var(--danger)}textarea{resize:vertical;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:60px;color:var(--text);outline:none;padding:10px 12px;font-family:inherit;font-size:13px}textarea:focus{border-color:var(--accent)}.form-input{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:38px;color:var(--text);outline:none;padding:8px 10px;font-family:inherit;font-size:13px}.form-input:focus{border-color:var(--accent)}.form-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.failover-target-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.data-table tr.alias-row.is-valid td{background:var(--alias-row-valid-bg)}.data-table tr.alias-row.is-valid:hover td{background:var(--alias-row-valid-bg-hover)}.data-table tr.alias-row:not(.is-valid) td{background:color-mix(in srgb, var(--accent) 10%, var(--bg-surface))}.data-table tr.alias-row:not(.is-valid):hover td{background:color-mix(in srgb, var(--accent) 16%, var(--bg-surface-hover))}.data-table tr.alias-row.is-disabled td{background:var(--bg-surface);opacity:.58}.data-table tr.alias-row.is-disabled:hover td{background:var(--bg-surface-hover);opacity:.72}.data-table tr.model-access-disabled-row td{background:color-mix(in srgb, var(--danger) 6%, var(--bg-surface))}.data-table tr.model-access-disabled-row:hover td{background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface-hover))}.workflow-section-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.workflow-section-head h4{font-size:14px;font-weight:700}.workflow-preview{flex-direction:column;gap:12px;display:flex}.workflow-feature-toggles{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.workflow-feature-toggle{border:1px solid var(--border);background:var(--bg);border-radius:10px;align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:500;display:flex}.workflow-feature-toggle input{width:16px;height:16px}.model-chart-section{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:24px;padding:24px}.model-chart-section h3{margin:0;font-size:16px;font-weight:600}.model-chart-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;display:flex}.bar-chart-wrap{width:100%;height:180px;position:relative}.form-select,.usage-log-select{appearance:none;background-color:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);cursor:pointer;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 17px),calc(100% - 12px);background-repeat:no-repeat;background-size:5px 5px;outline:none;min-width:140px;padding:8px 34px 8px 12px;font-family:inherit;font-size:13px}.form-select:disabled,.usage-log-select:disabled{cursor:not-allowed;opacity:.6}.form-select:focus,.usage-log-select:focus{border-color:var(--accent)}.form-select{width:100%;min-width:0}.usage-label-chips{flex-wrap:wrap;gap:4px;max-width:280px;display:inline-flex}.usage-label-chip{border:1px solid color-mix(in srgb, var(--label-color,var(--accent)) 45%, var(--border));background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg));min-height:20px;color:var(--text);white-space:nowrap;cursor:pointer;border-radius:999px;align-items:center;padding:1px 9px;font-family:inherit;font-size:11px;font-style:normal;font-weight:600;line-height:1.4;transition:background .15s,border-color .15s;display:inline-flex}.usage-label-chip:hover{background:color-mix(in srgb, var(--label-color,var(--accent)) 26%, var(--bg))}.usage-label-chip.active{background:color-mix(in srgb, var(--label-color,var(--accent)) 32%, var(--bg));border-color:var(--label-color,var(--accent));box-shadow:0 0 0 1px color-mix(in srgb, var(--label-color,var(--accent)) 55%, transparent)}@keyframes audit-live-summary-stripe-blink{0%,to{opacity:.9}50%{opacity:.28}}.audit-status-badge{border:1px solid var(--border);letter-spacing:.2px;background:var(--bg-surface);border-radius:999px;justify-content:center;align-items:center;min-width:46px;height:24px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.audit-status-badge.status-success{color:var(--success);border-color:color-mix(in srgb, var(--success) 50%, var(--border))}.audit-status-badge.status-warning{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 50%, var(--border))}.audit-status-badge.status-error{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--border))}.audit-status-badge.status-neutral{color:var(--text-muted)}.audit-status-badge.status-unknown{color:var(--text-muted);border-color:color-mix(in srgb, var(--border) 75%, transparent)}.audit-pane{border:1px solid var(--border);background:var(--bg);border-top:0;border-radius:0 0 8px 8px;min-width:0;padding:12px}.audit-pane h5{text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted);font-size:11px;font-weight:600}.audit-prompt-cache-pill{border:1px solid color-mix(in srgb, var(--prompt-cache-color) 45%, var(--border));background:var(--prompt-cache-color-bg);min-height:20px;color:var(--prompt-cache-color);letter-spacing:.02em;text-transform:none;border-radius:999px;align-items:center;padding:2px 8px;font-size:11px;font-weight:700;display:inline-flex}.audit-prompt-cache-highlight{color:var(--prompt-cache-color);font-weight:700}.audit-audio{white-space:normal;flex-direction:column;gap:8px;display:flex}.audit-audio-player{width:100%;max-width:420px;height:36px}.audit-audio-meta{color:var(--text-muted);font-size:12px}.audit-audio-empty{align-items:flex-start;padding:4px 0}.audit-audio-icon{font-size:20px;line-height:1}.audit-audio-note{color:var(--text-muted);font-size:12px}.audit-audio-metadata{flex-direction:column;gap:2px;margin-top:4px;font-size:12px;display:flex}.audit-audio-meta-row{gap:8px;display:flex}.audit-audio-meta-key{color:var(--text-muted);min-width:120px}.conversation-body-highlight{border-left:2px solid color-mix(in srgb, var(--accent) 70%, var(--border));background:color-mix(in srgb, var(--accent) 10%, transparent);cursor:pointer;line-height:inherit;border-radius:2px;margin:0 0 0 -2px;padding:0 0 0 2px;display:inline}.conversation-body-highlight:hover{background:color-mix(in srgb, var(--accent) 18%, transparent)}.conversation-body-highlight.conversation-system{border-left-color:color-mix(in srgb, var(--warning) 70%, var(--border));background:color-mix(in srgb, var(--warning) 10%, transparent)}.conversation-body-highlight.conversation-user{border-left-color:color-mix(in srgb, var(--accent) 75%, var(--border));background:color-mix(in srgb, var(--accent) 12%, transparent)}.conversation-body-highlight.conversation-assistant{border-left-color:color-mix(in srgb, var(--success) 65%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}#interactions-drawer-content{flex:1;min-height:0;overflow-y:auto}.pagination{justify-content:space-between;align-items:center;padding:12px 0 0;display:flex}.btn{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 16px;font-family:inherit;font-size:13px;transition:all .15s}.btn:hover:not(:disabled){background:var(--bg-surface-hover)}.btn-primary{background:var(--accent);border-color:color-mix(in srgb, var(--accent) 70%, #000 10%);color:#fff;font-weight:600;box-shadow:0 10px 22px #3b82f62e}.btn-primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 90%, #fff 10%);border-color:color-mix(in srgb, var(--accent) 78%, #000 12%)}.btn-danger-outline{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 55%, var(--border));background:0 0;font-weight:600}.btn-danger-outline:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 10%, var(--bg));border-color:color-mix(in srgb, var(--danger) 75%, var(--border))}.btn-danger{color:#fff;border-color:color-mix(in srgb, var(--danger) 76%, #000 12%);background:var(--danger);box-shadow:0 10px 22px color-mix(in srgb, var(--danger) 20%, transparent);font-weight:600}.btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 90%, #fff 10%);border-color:color-mix(in srgb, var(--danger) 82%, #000 14%)}.btn-with-icon{justify-content:center;align-items:center;gap:8px;display:inline-flex}.btn-with-icon .table-icon-svg{width:16px;height:16px}.btn:disabled{opacity:.4;cursor:default}.settings-panel{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.inline-help-section{flex-direction:column;gap:2px;display:flex}.inline-help-title-row{align-items:center;gap:10px;display:inline-flex}.inline-help-title-row h2,.inline-help-title-row h3{margin-bottom:0}.inline-help-title-row h2:empty,.inline-help-title-row h3:empty{display:none}.inline-help-toggle{border:1px solid color-mix(in srgb, var(--accent) 28%, var(--border));width:16px;height:16px;color:var(--accent);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:color .18s,border-color .18s;display:inline-flex;position:relative}.inline-help-toggle:before{content:"";pointer-events:auto;background:0 0;width:32px;height:32px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.inline-help-toggle:hover{border-color:color-mix(in srgb, var(--accent) 48%, var(--border));color:var(--text);background:0 0}.inline-help-toggle:active{background:0 0}.inline-help-toggle:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 28%, transparent);outline-offset:2px}.inline-help-toggle-icon{justify-content:center;align-items:center;width:100%;height:100%;padding-bottom:1px;font-size:13px;font-weight:700;line-height:1;transition:transform .52s cubic-bezier(.22,.72,.12,1);display:inline-flex;transform:rotate(0)}.inline-help-copy{max-width:780px;color:var(--text-muted);margin-top:2px;font-size:14px}.settings-select{width:100%}.settings-refresh-section{border-top:1px solid var(--border);justify-items:start;gap:12px;margin-top:24px;padding-top:22px;display:grid}.settings-refresh-section h3{font-size:18px}.settings-refresh-section p{max-width:720px;color:var(--text-muted);font-size:14px;line-height:1.55}.budget-list{gap:10px;padding:10px 0;display:grid}.budget-row{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:minmax(0,1fr);align-items:center;gap:16px;padding:12px 14px;display:grid}.budget-row-main{min-width:0}.budget-row-head{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;min-width:0;display:grid}.budget-scope-value{width:fit-content;max-width:100%;min-height:24px;color:var(--text);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;justify-self:start;align-items:center;gap:5px;padding:2px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;display:inline-flex;overflow:hidden}.budget-user-path{border:1px solid color-mix(in srgb, var(--accent) 32%, var(--border));background:color-mix(in srgb, var(--accent) 9%, var(--bg))}.budget-label{border:1px solid color-mix(in srgb, var(--label-color,var(--accent)) 45%, var(--border));background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg))}.budget-scope-icon{stroke-width:2.2px;opacity:.85;flex:0 0 12px;width:12px;height:12px}.budget-row-meta{min-width:0;color:var(--text-muted);align-items:center;gap:8px;font-size:12px;display:inline-flex}.budget-source{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);border-radius:999px;padding:2px 7px;font-size:11px}.budget-row-period{justify-content:center;min-width:0;display:flex}.budget-row-controls{justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.budget-bars{gap:6px;margin-top:10px;display:grid}.budget-bar-line{grid-template-columns:118px minmax(0,1fr);align-items:center;gap:10px;display:grid}.budget-bar-label{color:var(--text-muted);justify-content:space-between;align-items:center;gap:6px;font-size:11px;line-height:1;display:flex}.budget-bar-percent{font-weight:700}.budget-bar-track{background:color-mix(in srgb, var(--border) 75%, var(--bg));border-radius:999px;height:16px;position:relative;overflow:hidden}.budget-bar-fill{border-radius:inherit;min-width:0;height:100%;transition:width .2s}.budget-bar-fill-usage{background:color-mix(in srgb, var(--success) 82%, var(--accent))}.budget-bar-fill-danger{background:var(--danger)}.budget-bar-text-row{z-index:1;pointer-events:none;color:var(--text);position:absolute;inset:0}.budget-bar-text{text-overflow:ellipsis;white-space:nowrap;max-width:min(44%,190px);font-size:11px;font-weight:700;line-height:12px;position:absolute;top:50%;overflow:hidden}.budget-bar-text-center{max-width:min(46%,240px);left:50%;transform:translate(-50%,-50%)}.budget-bar-text-end{text-align:right;max-width:min(34%,180px);right:8px;transform:translateY(-50%)}.budget-period-label{border:1px solid var(--border);color:var(--text);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:5px;padding:2px 7px;font-size:11px;font-weight:600;display:inline-flex}.budget-period-icon{stroke-width:2.2px;flex:0 0 12px;width:12px;height:12px}.budget-period-label-monthly{border-color:color-mix(in srgb, #30302c 62%, var(--border));background:color-mix(in srgb, #30302c 12%, var(--bg));color:color-mix(in srgb, #30302c 34%, var(--text) 66%)}.budget-period-label-weekly{border-color:color-mix(in srgb, #68765c 62%, var(--border));background:color-mix(in srgb, #68765c 12%, var(--bg));color:color-mix(in srgb, #68765c 34%, var(--text) 66%)}.budget-period-label-daily{border-color:color-mix(in srgb, #b5652d 62%, var(--border));background:color-mix(in srgb, #b5652d 12%, var(--bg));color:color-mix(in srgb, #b5652d 34%, var(--text) 66%)}.budget-period-label-hourly{border-color:color-mix(in srgb, #783f22 62%, var(--border));background:color-mix(in srgb, #783f22 12%, var(--bg));color:color-mix(in srgb, #783f22 34%, var(--text) 66%)}.budget-period-label-custom{border-style:dashed;border-color:color-mix(in srgb, #bfa584 68%, var(--border));background:color-mix(in srgb, #bfa584 16%, var(--bg));color:color-mix(in srgb, #8b6f4f 34%, var(--text) 66%)}[data-theme=light] .budget-period-label-monthly{color:#30302c}[data-theme=light] .budget-period-label-weekly{color:#68765c}[data-theme=light] .budget-period-label-daily{color:#b5652d}[data-theme=light] .budget-period-label-hourly{color:#783f22}[data-theme=light] .budget-period-label-custom{color:#8b6f4f}@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .budget-period-label-monthly{color:#30302c}:root:not([data-theme=dark]) .budget-period-label-weekly{color:#68765c}:root:not([data-theme=dark]) .budget-period-label-daily{color:#b5652d}:root:not([data-theme=dark]) .budget-period-label-hourly{color:#783f22}:root:not([data-theme=dark]) .budget-period-label-custom{color:#8b6f4f}}.budget-row-actions{flex-flow:wrap;justify-content:flex-end;align-items:center;gap:6px;display:flex}.budget-action-btn{white-space:nowrap;justify-content:center;gap:0;width:28px;min-width:0;height:28px;padding:0;transition:width .18s,border-color .15s,background .15s,color .15s;overflow:hidden}.budget-action-btn:hover,.budget-action-btn:focus-visible{gap:6px;width:82px;padding:0 9px}.budget-action-label{opacity:0;max-width:0;transition:max-width .18s,opacity .12s;overflow:hidden}.budget-action-btn:hover .budget-action-label,.budget-action-btn:focus-visible .budget-action-label{opacity:1;max-width:58px}.budget-action-btn-warning{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 50%, var(--border))}.budget-action-icon{flex:0 0 14px;width:14px;height:14px}.budget-editor{background:color-mix(in srgb, var(--bg-surface) 86%, var(--bg) 14%)}.budget-settings-actions{flex-wrap:wrap;gap:10px;display:flex}.budget-reset-dialog{max-width:460px}.form-action-icon{flex:0 0 16px;width:16px;height:16px}.settings-refresh-alert{margin-top:16px;margin-bottom:0}@media (width<=768px){.badge{display:none}.content{width:100%;margin:0 auto;padding:20px}.auth-dialog{padding:18px}.auth-dialog-actions{flex-direction:column-reverse}.auth-dialog-actions .btn{width:100%}.cards{grid-template-columns:repeat(2,1fr)}.page-header{flex-wrap:wrap;gap:12px}.page-header h2{width:100%}.page-header-controls{flex-wrap:wrap;justify-content:space-between;width:100%}.page-with-sticky-date{grid-template-columns:minmax(0,1fr)}.page-with-sticky-date>.date-range-page-header,.page-with-sticky-date>.sticky-date-range{grid-column:1}.page-with-sticky-date>.date-range-page-header{margin-bottom:12px}.page-with-sticky-date>.sticky-date-range{width:100%;margin-bottom:24px;top:10px}.sticky-date-range .date-picker-trigger{justify-content:space-between;width:100%}.usage-log-select{min-width:0}.budget-row{grid-template-columns:1fr}.budget-row-controls{flex-wrap:wrap}.budget-bar-line{grid-template-columns:1fr;gap:5px}.form-grid,.workflow-feature-toggles{grid-template-columns:1fr}.workflow-section-head{flex-direction:column;align-items:flex-start}.table-toolbar{flex-direction:column;align-items:stretch}.table-toolbar-actions{justify-content:stretch;margin-left:0}.table-toolbar-actions .btn{width:100%}.model-editor{padding:16px}.alias-actions-cell,.editor-header{flex-direction:column;align-items:flex-start}.alias-actions-cell .table-action-btn,.editor-header .table-action-btn{width:100%}.alias-actions-cell .table-icon-btn,.editor-header .table-icon-btn{width:36px}.model-list-actions{flex-flow:row;align-items:center}.model-list-actions .table-action-btn{width:auto}.model-list-actions .table-icon-btn{flex-basis:32px;width:32px}.model-editor .editor-header{flex-direction:row;align-items:flex-start}.model-editor .editor-header>:first-child{flex:1;min-width:0}.model-editor .editor-header .dialog-close-btn{flex:0 0 32px;align-self:flex-start;width:32px;min-width:32px}.settings-panel{padding:18px}.budget-settings-actions,.budget-settings-actions .btn{width:100%}}.workflow-conn{background:color-mix(in srgb, var(--accent) 44%, var(--border));flex:1 1 0;width:auto;min-width:13px;height:2px;position:relative}.workflow-conn:after{content:"";background:color-mix(in srgb, var(--accent) 44%, var(--border));clip-path:polygon(0 0,100% 50%,0 100%);width:7px;height:9px;position:absolute;top:50%;right:-1px;transform:translateY(-50%)}.workflow-node{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-surface);text-align:center;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:4px;min-width:72px;padding:8px 12px;display:flex}.auth-key-description{color:var(--text-muted);max-width:220px;font-size:13px}.auth-key-status-badge{border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.auth-key-status-active{background:color-mix(in srgb, var(--success) 12%, var(--bg));border:1px solid color-mix(in srgb, var(--success) 30%, var(--border));color:var(--success)}.auth-key-status-inactive{background:color-mix(in srgb, var(--danger) 10%, var(--bg));border:1px solid color-mix(in srgb, var(--danger) 30%, var(--border));color:var(--danger)}.mcp-server-advanced{border:1px solid var(--border);border-radius:var(--radius);background:color-mix(in srgb, var(--bg-surface) 72%, var(--bg) 28%);overflow:hidden}.mcp-server-advanced>summary{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;list-style:none;display:flex}.mcp-server-advanced>summary::-webkit-details-marker{display:none}.mcp-server-advanced>summary:after{border-right:2px solid var(--text-muted);border-bottom:2px solid var(--text-muted);content:"";flex:none;width:7px;height:7px;transition:transform .15s;transform:rotate(45deg)}.mcp-server-advanced[open]>summary:after{transform:rotate(225deg)}.mcp-server-advanced-summary-copy{flex-direction:column;gap:2px;min-width:0;display:flex}.mcp-server-advanced-title{font-size:13px;font-weight:600}.mcp-server-advanced-fields{border-top:1px solid var(--border);flex-direction:column;gap:16px;padding:14px;display:flex}.copy-feedback-btn{align-items:center;gap:6px;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.copy-feedback-btn-copied{background:color-mix(in srgb, var(--success) 12%, var(--bg));border-color:color-mix(in srgb, var(--success) 40%, var(--border));color:var(--success)}.rate-limit-pressure-row{background-image:linear-gradient(to right, color-mix(in srgb, var(--success) 16%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.rate-limit-pressure-row.rate-limit-pressure-high{background-image:linear-gradient(to right, color-mix(in srgb, var(--warning) 20%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.rate-limit-pressure-row.rate-limit-pressure-full{background-image:linear-gradient(to right, color-mix(in srgb, var(--danger) 22%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.table-icon-btn.rate-limit-gauge-inherited{color:var(--accent-strong,var(--accent));background:linear-gradient(to right, color-mix(in srgb, var(--accent) 22%, var(--bg)) 50%, var(--bg) 50%);border-color:color-mix(in srgb, var(--accent) 30%, var(--border))}.auth-dialog-input-icon{width:16px;height:16px;color:var(--text-muted);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.auth-dialog-input-shell:focus-within .auth-dialog-input-icon{color:var(--accent)}.auth-dialog-submit-icon{flex:0 0 16px;width:16px;height:16px}.nav-icon{flex:0 0 18px;width:18px;height:18px}.api-key-open-icon{flex:0 0 15px;width:15px;height:15px}.theme-icon{flex:0 0 14px;width:14px;height:14px}.theme-toggle-mobile .theme-icon{flex-basis:16px;width:16px;height:16px}@media (width<=768px){.sidebar-footer .api-key-open-icon{flex-basis:16px;width:16px;height:16px}}.failover-drafts-loading{min-height:96px}.models-loading-state{top:16px;left:var(--sidebar-width);z-index:110;pointer-events:none;--loading-state-min-height:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-surface);width:fit-content;box-shadow:0 8px 24px color-mix(in srgb, var(--bg) 70%, transparent);margin:0 auto;padding:10px 14px;position:fixed;right:0}@media (width<=768px){.models-loading-state{left:60px}}.sidebar.sidebar-collapsed~.content .models-loading-state{left:60px}.alias-create-icon{flex:0 0 16px;width:16px;height:16px}.pricing-override-remove-row{margin-bottom:1px}@media (width<=768px){.pricing-override-remove-row{margin-bottom:0}}.pricing-recalculate-dialog{max-width:480px}.settings-refresh-btn.is-refreshing .settings-refresh-icon{transform-origin:50%;animation:.8s linear infinite loading-spin}.cost-source-icon{width:14px;height:14px;color:var(--success);cursor:help;vertical-align:-2px;stroke-width:2px;margin-left:4px}.cache-savings-icon{width:14px;height:14px;color:var(--accent);cursor:help;vertical-align:-2px;stroke-width:2px;margin-left:4px}.theme-toggle.svelte-1keql7b{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;margin-bottom:10px;padding:2px;display:inline-flex}.theme-btn.svelte-1keql7b{width:28px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:all .15s;display:flex}.theme-btn.svelte-1keql7b:hover{color:var(--text)}.theme-btn.active.svelte-1keql7b{background:var(--accent);color:#fff}.theme-btn.svelte-1keql7b:focus-visible,.theme-toggle-mobile.svelte-1keql7b:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.theme-toggle-mobile.svelte-1keql7b{background:var(--bg);border:1px solid var(--border);width:36px;height:36px;color:var(--text-muted);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:none}.theme-toggle-mobile.svelte-1keql7b:hover{color:var(--text)}.theme-toggle.is-compact.svelte-1keql7b{display:none}.theme-toggle-mobile.is-compact.svelte-1keql7b{margin:0 auto;display:flex}@media (width<=768px){.theme-toggle.svelte-1keql7b{display:none}.theme-toggle-mobile.svelte-1keql7b{margin:0 auto;display:flex}}.sidebar.svelte-1nwtzae{flex:0 0 var(--sidebar-width);width:var(--sidebar-width);background:var(--bg-surface);border-right:1px solid var(--border);-webkit-overflow-scrolling:touch;z-index:10;flex-direction:column;max-height:100vh;transition:flex-basis .2s,width .2s;display:flex;position:sticky;top:0;overflow:hidden auto}.sidebar.sidebar-resizing.svelte-1nwtzae{transition:none}.sidebar-header.svelte-1nwtzae{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:20px;display:flex}.sidebar-logo.svelte-1nwtzae{width:28px;height:28px;color:var(--accent);flex-shrink:0}.sidebar-logo.svelte-1nwtzae svg{width:100%;height:100%}.sidebar-header.svelte-1nwtzae h1{letter-spacing:-.3px;font-size:18px;font-weight:700}.sidebar-nav.svelte-1nwtzae{flex-direction:column;flex:1;gap:4px;padding:12px;display:flex}.nav-item.svelte-1nwtzae{border-radius:var(--radius);color:var(--text-muted);align-items:center;gap:10px;padding:8px 12px;font-size:14px;font-weight:500;text-decoration:none;transition:all .15s;display:flex}.nav-item.svelte-1nwtzae:hover{background:var(--bg-surface-hover);color:var(--text)}.nav-item.active.svelte-1nwtzae{background:var(--accent);color:#fff}.nav-label.svelte-1nwtzae{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.sidebar-footer.svelte-1nwtzae{border-top:1px solid var(--border);padding:16px}.api-key-section.svelte-1nwtzae{gap:8px;display:grid}.external-auth-section.svelte-1nwtzae{gap:8px;margin-top:8px;display:grid}.external-auth-user.svelte-1nwtzae{min-width:0;color:var(--text-muted);align-items:center;gap:8px;font-size:12px;display:flex}.external-auth-user.svelte-1nwtzae span:where(.svelte-1nwtzae){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.api-key-open-btn.svelte-1nwtzae{border:1px solid var(--accent);border-radius:var(--radius);width:100%;color:var(--accent);cursor:pointer;background:0 0;justify-content:center;align-items:center;gap:8px;padding:8px 10px;font-family:inherit;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s;display:inline-flex}.api-key-open-btn.svelte-1nwtzae:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);border-color:color-mix(in srgb, var(--accent) 78%, var(--text));color:color-mix(in srgb, var(--accent) 78%, var(--text))}.api-key-open-btn.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.sidebar-toggle.svelte-1nwtzae{cursor:ew-resize;z-index:11;background:0 0;border:none;flex:0 0 6px;width:6px;height:100vh;padding:0;transition:background .15s;position:sticky;top:0}.sidebar-toggle.svelte-1nwtzae:hover{background:color-mix(in srgb, var(--accent) 15%, transparent)}.sidebar-toggle.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}body.sidebar-resizing{cursor:ew-resize;-webkit-user-select:none;user-select:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-header:where(.svelte-1nwtzae){justify-content:center;padding:16px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-header:where(.svelte-1nwtzae) h1,.sidebar.sidebar-collapsed.svelte-1nwtzae .badge{display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-nav:where(.svelte-1nwtzae) .nav-item:where(.svelte-1nwtzae){justify-content:center;padding:10px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-nav:where(.svelte-1nwtzae) .nav-label:where(.svelte-1nwtzae){display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae){padding:8px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .api-key-section:where(.svelte-1nwtzae),.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .external-auth-section:where(.svelte-1nwtzae){display:none}@media (width<=768px){.sidebar.svelte-1nwtzae{flex-basis:60px;width:60px}.sidebar-header.svelte-1nwtzae{justify-content:center;padding:16px}.sidebar-header.svelte-1nwtzae h1{display:none}.sidebar-nav.svelte-1nwtzae .nav-item:where(.svelte-1nwtzae){justify-content:center;padding:10px}.sidebar-nav.svelte-1nwtzae .nav-item:where(.svelte-1nwtzae) .nav-label:where(.svelte-1nwtzae){display:none}.sidebar-footer.svelte-1nwtzae{gap:8px;padding:8px;display:grid}.sidebar-footer.svelte-1nwtzae .api-key-section:where(.svelte-1nwtzae),.sidebar-footer.svelte-1nwtzae .external-auth-section:where(.svelte-1nwtzae),.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .external-auth-section:where(.svelte-1nwtzae){display:grid}.sidebar-footer.svelte-1nwtzae .external-auth-user:where(.svelte-1nwtzae){display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .api-key-section:where(.svelte-1nwtzae){display:grid}.sidebar-footer.svelte-1nwtzae .api-key-open-btn:where(.svelte-1nwtzae){justify-self:center;width:36px;height:36px;min-height:36px;padding:0}.sidebar-footer.svelte-1nwtzae .api-key-open-btn:where(.svelte-1nwtzae) span,.sidebar-toggle.svelte-1nwtzae{display:none}}.dialog-close-btn.svelte-11l1bb5{background:var(--bg);border:1px solid var(--border);width:32px;min-width:32px;height:32px;color:var(--text-muted);cursor:pointer;font:inherit;border-radius:6px;flex:0 0 32px;justify-content:center;align-items:center;padding:0;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.dialog-close-btn.svelte-11l1bb5:hover{color:var(--text);background:var(--bg-surface-hover)}.dialog-close-btn.svelte-11l1bb5:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.auth-dialog-backdrop.svelte-17e0w4c,.editor-modal-backdrop.svelte-17e0w4c{z-index:80;background:#0000007a;position:fixed;inset:0}.auth-dialog-shell.svelte-17e0w4c{z-index:90;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.editor-modal-shell.svelte-17e0w4c{z-index:90;place-items:center;padding:20px;display:grid;position:fixed;inset:0;overflow-y:auto}.editor-modal-shell.svelte-17e0w4c>*{overscroll-behavior:contain;width:min(760px,100%);max-height:min(100vh - 40px,960px);margin:0;overflow:auto;box-shadow:0 24px 70px #00000061}@media (width<=768px){.auth-dialog-shell.svelte-17e0w4c,.editor-modal-shell.svelte-17e0w4c{align-items:end;padding:12px}.editor-modal-shell.svelte-17e0w4c>*{max-height:calc(100vh - 24px)}}.external-login-btn.svelte-1dsu6u0{justify-content:center;width:100%;text-decoration:none}.auth-dialog-separator.svelte-1dsu6u0{color:var(--text-muted);align-items:center;gap:10px;font-size:12px;display:flex}.auth-dialog-separator.svelte-1dsu6u0:before,.auth-dialog-separator.svelte-1dsu6u0:after{content:"";border-top:1px solid var(--border);flex:1}.auth-dialog-input-shell.svelte-1dsu6u0{position:relative}.auth-dialog-input.svelte-1dsu6u0{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:11px 12px 11px 38px;font-family:inherit;font-size:14px}.auth-dialog-input.svelte-1dsu6u0:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent)}.flash-region.svelte-1i257xg{top:16px;left:var(--sidebar-width);z-index:120;pointer-events:none;flex-direction:column;align-items:center;gap:10px;display:flex;position:fixed;right:0}.sidebar.sidebar-collapsed~.flash-region.svelte-1i257xg{left:60px}@media (width<=768px){.flash-region.svelte-1i257xg{left:60px}}.flash-toast.svelte-1i257xg{border-radius:var(--radius);pointer-events:auto;align-items:flex-start;gap:10px;width:max-content;max-width:min(480px,100% - 32px);padding:12px 12px 12px 16px;font-size:14px;animation:.9s ease-out svelte-1i257xg-flash-toast-glow;display:flex;box-shadow:0 10px 30px #00000059}@keyframes svelte-1i257xg-flash-toast-glow{0%{box-shadow:0 0 0 4px color-mix(in srgb, currentColor 45%, transparent), 0 10px 30px #00000059}to{box-shadow:0 0 0 4px #0000,0 10px 30px #00000059}}@media (prefers-reduced-motion:reduce){.flash-toast.svelte-1i257xg{animation:none}}.flash-toast-success.svelte-1i257xg{background:color-mix(in srgb, var(--success) 14%, var(--bg-surface));color:var(--success);border:1px solid #34d39959}.flash-toast-error.svelte-1i257xg{background:color-mix(in srgb, var(--warning) 14%, var(--bg-surface));color:var(--warning);border:1px solid #f59e0b66}.flash-toast-text.svelte-1i257xg{overflow-wrap:anywhere;flex:1;min-width:0}.flash-toast-dismiss.svelte-1i257xg{color:inherit;cursor:pointer;opacity:.7;background:0 0;border:0;flex-shrink:0;padding:0 2px;font-size:18px;line-height:1}.flash-toast-dismiss.svelte-1i257xg:hover{opacity:1}.demo-mode-banner.svelte-1s3mcn8{border:1px solid color-mix(in srgb, var(--warning) 55%, var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--warning) 14%, var(--bg-surface));color:var(--text);box-shadow:0 8px 24px color-mix(in srgb, var(--bg) 70%, transparent);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;margin-bottom:24px;padding:12px 16px;display:grid}.demo-mode-banner-icon.svelte-1s3mcn8{width:20px;height:20px;color:var(--warning);flex:0 0 20px}.demo-mode-banner-copy.svelte-1s3mcn8{align-items:baseline;gap:8px;min-width:0;font-size:13px;display:flex}.demo-mode-banner.svelte-1s3mcn8 strong{color:var(--warning);letter-spacing:.06em;text-transform:uppercase;flex-shrink:0;font-size:12px}.demo-mode-banner-links.svelte-1s3mcn8{justify-content:flex-end;align-items:center;gap:6px;display:flex}.demo-mode-banner-links.svelte-1s3mcn8 a{border:1px solid color-mix(in srgb, var(--warning) 42%, var(--border));border-radius:var(--radius);min-height:28px;color:var(--text);white-space:nowrap;align-items:center;padding:4px 8px;font-size:12px;font-weight:600;line-height:1;text-decoration:none;display:inline-flex}.demo-mode-banner-links.svelte-1s3mcn8 a:hover{border-color:var(--warning);background:color-mix(in srgb, var(--warning) 16%, transparent);color:var(--text)}.demo-mode-banner-links.svelte-1s3mcn8 a:focus-visible{outline:2px solid color-mix(in srgb, var(--warning) 42%, transparent);outline-offset:2px}@media (width<=768px){.demo-mode-banner.svelte-1s3mcn8{grid-template-columns:auto minmax(0,1fr);align-items:flex-start}.demo-mode-banner-copy.svelte-1s3mcn8{gap:2px;display:grid}.demo-mode-banner-links.svelte-1s3mcn8{flex-wrap:wrap;grid-column:2;justify-content:flex-start}}.auth-banner.svelte-1c5yh36{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.dp-calendar.svelte-g7ga4u{flex-shrink:0;width:224px}.dp-cal-header.svelte-g7ga4u{justify-content:space-between;align-items:center;margin-bottom:8px;padding:0 4px;display:flex}.dp-cal-title.svelte-g7ga4u{font-size:13px;font-weight:600}.dp-nav-btn.svelte-g7ga4u{width:28px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:flex}.dp-nav-btn.svelte-g7ga4u:hover{background:var(--bg-surface-hover);color:var(--text)}.dp-nav-btn.svelte-g7ga4u:disabled{opacity:.3;cursor:default;pointer-events:none}.dp-nav-prev-mobile.svelte-g7ga4u{display:none}.dp-weekdays.svelte-g7ga4u{text-align:center;grid-template-columns:repeat(7,1fr);margin-bottom:4px;display:grid}.dp-weekdays.svelte-g7ga4u span:where(.svelte-g7ga4u){color:var(--text-muted);padding:4px 0;font-size:11px;font-weight:600}.dp-days.svelte-g7ga4u{grid-template-columns:repeat(7,1fr);gap:1px;display:grid}.dp-day.svelte-g7ga4u{width:32px;height:32px;color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;font-family:inherit;font-size:12px;transition:all .1s;display:flex}.dp-day.svelte-g7ga4u:hover:not(.disabled):not(.other-month){background:var(--bg-surface-hover)}.dp-day.other-month.svelte-g7ga4u{color:var(--text-muted);opacity:.3;cursor:default}.dp-day.today.svelte-g7ga4u{color:var(--accent);box-shadow:inset 0 0 0 1.5px var(--accent);font-weight:700}.dp-day.in-range.svelte-g7ga4u{background:color-mix(in srgb, var(--accent) 15%, transparent);border-radius:0}.dp-day.range-start.svelte-g7ga4u{background:var(--accent);color:#fff;border-radius:6px 0 0 6px;font-weight:600}.dp-day.range-end.svelte-g7ga4u{background:var(--accent);color:#fff;border-radius:0 6px 6px 0;font-weight:600}.dp-day.range-start.range-end.svelte-g7ga4u{border-radius:6px}.dp-day.range-start.today.svelte-g7ga4u,.dp-day.range-end.today.svelte-g7ga4u{box-shadow:none}.dp-day.disabled.svelte-g7ga4u{color:var(--text-muted);opacity:.3;cursor:default;pointer-events:none}@media (width<=768px){.dp-nav-prev-mobile.svelte-g7ga4u{display:flex}}.date-picker.svelte-ax7ma4{position:relative}.date-picker-trigger.svelte-ax7ma4{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);cursor:pointer;white-space:nowrap;align-items:center;gap:8px;padding:8px 12px;font-family:inherit;font-size:13px;transition:all .15s;display:inline-flex}.date-picker-trigger.svelte-ax7ma4:hover{background:var(--bg-surface-hover)}.date-picker-trigger.svelte-ax7ma4 svg:where(.svelte-ax7ma4){color:var(--text-muted);flex-shrink:0}.date-picker-chevron.svelte-ax7ma4{transition:transform .15s}.date-picker-chevron.open.svelte-ax7ma4{transform:rotate(180deg)}.date-picker-dropdown.svelte-ax7ma4{z-index:100;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 8px 24px #00000040}.date-picker-presets.svelte-ax7ma4{border-right:1px solid var(--border);flex-direction:column;gap:2px;min-width:140px;padding:8px;display:flex}.preset-btn.svelte-ax7ma4{color:var(--text);text-align:left;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:8px 12px;font-family:inherit;font-size:13px;transition:all .15s}.preset-btn.svelte-ax7ma4:hover{background:var(--bg-surface-hover)}.preset-btn.active.svelte-ax7ma4{background:var(--accent);color:#fff}.date-picker-calendars.svelte-ax7ma4{flex-wrap:nowrap;gap:16px;padding:12px;display:flex}.dp-cursor-hint.svelte-ax7ma4{pointer-events:none;z-index:101;background:var(--bg-surface);color:var(--text);border:1px solid var(--accent);white-space:nowrap;border-radius:4px;align-items:center;gap:5px;padding:3px 8px;font-size:11px;font-weight:500;display:flex;position:fixed;transform:translate(12px,-50%)}.dp-cursor-hint.svelte-ax7ma4 svg:where(.svelte-ax7ma4){width:12px;height:12px;color:var(--accent);flex-shrink:0}@media (width<=768px){.date-picker-dropdown.svelte-ax7ma4{border-radius:var(--radius) var(--radius) 0 0;flex-direction:column;max-height:80vh;position:fixed;inset:auto 0 0;overflow-y:auto}.date-picker-presets.svelte-ax7ma4{-webkit-overflow-scrolling:touch;border-right:none;border-bottom:1px solid var(--border);flex-flow:row;min-width:0;overflow-x:auto}.date-picker-calendars.svelte-ax7ma4{justify-content:center}.date-picker-calendars.svelte-ax7ma4>.dp-calendar:first-child{display:none}}.segmented-control.svelte-92fh5i{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;padding:2px;display:inline-flex}.segmented-btn.svelte-92fh5i{color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:5px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .15s;display:flex}.segmented-btn.svelte-92fh5i:hover{color:var(--text)}.segmented-btn.active.svelte-92fh5i{background:var(--accent);color:#fff}@media (width<=768px){.segmented-btn.svelte-92fh5i{padding:4px 8px;font-size:11px}}.live-tokens.svelte-17qr2ta{margin-bottom:28px}.live-tokens-heading.svelte-17qr2ta{flex-direction:column;gap:2px;display:flex}.live-tokens-subtitle.svelte-17qr2ta{color:var(--text-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.live-tokens-legend.svelte-17qr2ta{flex-wrap:wrap;gap:8px 18px;margin-bottom:16px;display:flex}.live-tokens-legend-item.svelte-17qr2ta{color:var(--text-muted);align-items:center;gap:7px;font-size:12px;display:inline-flex}.live-tokens-swatch.svelte-17qr2ta{border-radius:2px;flex-shrink:0;width:10px;height:10px}.live-tokens-legend-value.svelte-17qr2ta{color:var(--text);font-weight:600}.live-tokens-empty.svelte-17qr2ta .live-tokens-empty-text:where(.svelte-17qr2ta){color:var(--text-muted);font-size:13px}.provider-status-flag.svelte-6tr9cf{grid-column:span 2}.provider-status-overview-card.svelte-6tr9cf{grid-column:span 1}.provider-status-flag.is-healthy.svelte-6tr9cf{border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, var(--bg-surface))}.provider-status-flag.is-degraded.svelte-6tr9cf{border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-flag.is-unhealthy.svelte-6tr9cf{border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface))}.provider-status-value.svelte-6tr9cf{margin-bottom:8px}.provider-status-card-link.svelte-6tr9cf{color:var(--accent-strong,var(--accent));font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;margin:0;padding:0;font-size:13px;font-weight:600}.provider-status-card-link.svelte-6tr9cf:hover{color:var(--text);text-decoration:underline}.provider-status-card-link.svelte-6tr9cf:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 32%, transparent);outline-offset:3px;border-radius:4px}.provider-status-card-note.svelte-6tr9cf{color:var(--text-muted);font-size:13px;display:block}@media (width>=720px){.card-wide.svelte-6tr9cf{grid-column:span 2}}.cache-token-value.svelte-6tr9cf{flex-wrap:wrap;align-items:center;gap:6px;line-height:1;display:flex}.cache-token-part.svelte-6tr9cf{align-items:center;display:inline-flex}.cache-token-operator.svelte-6tr9cf{color:var(--text-muted);letter-spacing:0;font-size:24px;font-weight:600;line-height:1}.cache-token-marker.svelte-6tr9cf{color:var(--text-muted);letter-spacing:0;text-transform:uppercase;margin-left:2px;font-size:14px;font-weight:700}.prompt-cache-gauge.svelte-6tr9cf{width:120px;height:60px;margin:8px auto 0;position:relative;overflow:hidden}.prompt-cache-gauge.svelte-6tr9cf canvas{display:block}.prompt-cache-gauge-value.svelte-6tr9cf{text-align:center;color:var(--text);font-size:18px;font-weight:700;line-height:1;position:absolute;bottom:4px;left:0;right:0}@media (width<=768px){.provider-status-flag.svelte-6tr9cf{grid-column:span 1}}.mcp-servers-flag.svelte-6tr9cf{grid-column:span 1}.cache-meter-header.svelte-1yzecxj{flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:16px;display:flex}.cache-meter-header.svelte-1yzecxj h3{font-size:16px;font-weight:600}.cache-meter-subtitle.svelte-1yzecxj{color:var(--text-muted);font-size:13px}.cache-meter-bar.svelte-1yzecxj{background:var(--bg-surface-hover);border-radius:6px;width:100%;height:28px;display:flex;overflow:hidden}.cache-meter-segment.svelte-1yzecxj{justify-content:center;align-items:center;min-width:3px;height:100%;transition:width .3s;display:flex;overflow:hidden}.cache-meter-segment-label.svelte-1yzecxj{color:#fff;white-space:nowrap;text-shadow:0 1px 2px #00000073;font-size:12px;font-weight:600;line-height:1}.cache-meter-segment.svelte-1yzecxj+.cache-meter-segment:where(.svelte-1yzecxj){box-shadow:-1px 0 0 var(--bg-surface)}.cache-meter-bar.is-empty.svelte-1yzecxj{background:var(--bg-surface-hover);justify-content:center;align-items:center;height:auto;min-height:28px;padding:6px 12px}.cache-meter-legend.svelte-1yzecxj{flex-wrap:wrap;gap:10px 24px;margin-top:16px;display:flex}.cache-meter-legend-item.svelte-1yzecxj{align-items:center;gap:8px;font-size:13px;display:flex}.cache-meter-swatch.svelte-1yzecxj{border-radius:3px;flex-shrink:0;width:12px;height:12px}.cache-meter-legend-label.svelte-1yzecxj{color:var(--text)}.cache-meter-legend-pct.svelte-1yzecxj{color:var(--text);font-weight:600}.cache-meter-legend-tokens.svelte-1yzecxj{color:var(--text-muted)}.cache-meter-empty.svelte-1yzecxj{color:var(--text-muted);text-align:center;font-size:13px}.spinner.svelte-b54l9o{width:var(--spinner-size);height:var(--spinner-size);border:2px solid var(--border,#80808059);border-top-color:var(--accent,currentColor);border-radius:50%;flex:none;animation:.7s linear infinite svelte-b54l9o-spinner-rotate;display:inline-block}@keyframes svelte-b54l9o-spinner-rotate{to{transform:rotate(360deg)}}.contribution-calendar-section.svelte-3hfxuq{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-top:24px;padding:24px}.contribution-calendar-header.svelte-3hfxuq{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.contribution-calendar-header.svelte-3hfxuq h3{font-size:16px;font-weight:600}.contribution-calendar-grid-wrapper.svelte-3hfxuq{gap:8px;display:flex}.contribution-calendar-day-labels.svelte-3hfxuq{flex-direction:column;gap:2px;padding-top:22px;display:flex}.contribution-calendar-day-labels.svelte-3hfxuq span{height:13px;color:var(--text-muted);text-align:right;min-width:28px;font-size:10px;line-height:13px}.contribution-calendar-scroll.svelte-3hfxuq{--contribution-week-size:13px;--contribution-week-gap:2px;flex:1;min-width:0;overflow-x:auto}.contribution-calendar-months.svelte-3hfxuq{grid-auto-columns:var(--contribution-week-size);gap:var(--contribution-week-gap);grid-auto-flow:column;height:16px;margin-bottom:6px;display:grid}.contribution-calendar-month-label.svelte-3hfxuq{color:var(--text-muted);white-space:nowrap;font-size:10px}.contribution-calendar-grid.svelte-3hfxuq{gap:var(--contribution-week-gap);display:flex}.contribution-calendar-week.svelte-3hfxuq{flex-direction:column;gap:2px;display:flex}.contribution-calendar-cell.svelte-3hfxuq{width:var(--contribution-week-size);height:var(--contribution-week-size);background:var(--cal-level-0);border-radius:2px}.contribution-calendar-cell.level-1.svelte-3hfxuq{background:var(--cal-level-1)}.contribution-calendar-cell.level-2.svelte-3hfxuq{background:var(--cal-level-2)}.contribution-calendar-cell.level-3.svelte-3hfxuq{background:var(--cal-level-3)}.contribution-calendar-cell.level-4.svelte-3hfxuq{background:var(--cal-level-4)}.contribution-calendar-cell.level-5.svelte-3hfxuq{background:var(--cal-level-5)}.contribution-calendar-cell.level-6.svelte-3hfxuq{background:var(--cal-level-6)}.contribution-calendar-cell.level-7.svelte-3hfxuq{background:var(--cal-level-7)}.contribution-calendar-cell.level-8.svelte-3hfxuq{background:var(--cal-level-8)}.contribution-calendar-cell.level-9.svelte-3hfxuq{background:var(--cal-level-9)}.contribution-calendar-cell.level-10.svelte-3hfxuq{background:var(--cal-level-10)}.contribution-calendar-cell.empty.svelte-3hfxuq{background:0 0}.contribution-calendar-footer.svelte-3hfxuq{justify-content:space-between;align-items:center;gap:12px;margin-top:12px;display:flex}.contribution-calendar-meta.svelte-3hfxuq{flex-direction:column;gap:4px;display:flex}.contribution-calendar-summary.svelte-3hfxuq{color:var(--text-muted);font-size:12px}.contribution-calendar-legend.svelte-3hfxuq{color:var(--text-muted);align-items:center;gap:4px;font-size:11px;display:flex}.contribution-calendar-legend.svelte-3hfxuq .contribution-calendar-cell:where(.svelte-3hfxuq){cursor:default;width:11px;height:11px}.contribution-calendar-tooltip.svelte-3hfxuq{z-index:200;background:var(--bg-surface);color:var(--text);border:1px solid var(--border);white-space:nowrap;pointer-events:none;border-radius:4px;padding:4px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;position:fixed;transform:translate(-50%);box-shadow:0 4px 12px #0003}@media (width<=768px){.contribution-calendar-day-labels.svelte-3hfxuq{display:none}.contribution-calendar-section.svelte-3hfxuq{padding:16px}.contribution-calendar-footer.svelte-3hfxuq{flex-direction:column;align-items:flex-start}}.inline-help-toggle.is-open.svelte-y40or3{color:var(--text);background:0 0}.inline-help-toggle.is-open.svelte-y40or3 .inline-help-toggle-icon{transform:rotate(540deg)}.audit-stats-section.svelte-14e9yan{margin-top:24px}.audit-stats-header.svelte-14e9yan{align-items:flex-start}.audit-stats-kpis.svelte-14e9yan{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.audit-stats-kpi.svelte-14e9yan{color:var(--text-muted);white-space:nowrap;align-items:center;gap:6px;font-size:12px;display:inline-flex}.audit-stats-kpi-value.svelte-14e9yan{color:var(--text);font-size:13px}.audit-stats-kpi-dot.svelte-14e9yan{border-radius:2px;flex-shrink:0;width:8px;height:8px}.audit-stats-dot-2xx.svelte-14e9yan{background:var(--success)}.audit-stats-dot-4xx.svelte-14e9yan{background:var(--warning)}.audit-stats-dot-5xx.svelte-14e9yan{background:var(--danger)}.provider-status-details.svelte-6y9wjv{opacity:0;grid-template-rows:0fr;transition:grid-template-rows .28s,opacity .22s;display:grid}.provider-status-details.is-expanded.svelte-6y9wjv{opacity:1;grid-template-rows:1fr}.provider-status-details.is-collapsed.svelte-6y9wjv{pointer-events:none}.provider-status-details-inner.svelte-6y9wjv{flex-direction:column;gap:14px;min-height:0;display:flex;overflow:hidden}.provider-status-reason.svelte-6y9wjv{color:var(--text-muted);font-size:13px}.provider-status-error.svelte-6y9wjv{color:var(--danger);overflow-wrap:break-word;font-size:12px}.provider-status-config-label.svelte-6y9wjv{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-config.svelte-6y9wjv{border-top:1px solid var(--border);flex-direction:column;gap:10px;padding-top:12px;display:flex}.provider-status-config-row.svelte-6y9wjv{flex-direction:column;gap:4px;display:flex}.provider-status-config-value.svelte-6y9wjv{color:var(--text);overflow-wrap:break-word;font-size:13px;display:block}.provider-status-health.svelte-6y9wjv{border-top:1px solid var(--border);flex-direction:column;gap:10px;margin-bottom:12px;padding-top:12px;display:flex}.provider-status-health-state.svelte-6y9wjv{border:1px solid var(--border);border-radius:999px;align-items:center;padding:1px 8px;font-size:12px;font-weight:600;display:inline-flex}.provider-status-health-state.is-healthy.svelte-6y9wjv{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.provider-status-health-state.is-degraded.svelte-6y9wjv{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-health-state.is-unhealthy.svelte-6y9wjv{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, transparent)}.provider-status-health-models.svelte-6y9wjv{flex-direction:column;gap:4px;display:flex}.provider-status-health-model.svelte-6y9wjv{color:var(--text);justify-content:space-between;gap:8px;font-size:13px;display:flex}.provider-status-health-model.is-flagged.svelte-6y9wjv{color:var(--danger)}.provider-status-health-model-name.svelte-6y9wjv{overflow-wrap:anywhere}.provider-status-health-model-stats.svelte-6y9wjv{white-space:nowrap;color:var(--text-muted)}.provider-status-health-model.is-flagged.svelte-6y9wjv .provider-status-health-model-stats:where(.svelte-6y9wjv){color:var(--danger);font-weight:700}.provider-status-card.svelte-nopjmh{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:14px;padding:18px;display:flex}.provider-status-card-toggle.svelte-nopjmh{border:0;border-top:1px solid var(--border);border-radius:0 0 var(--radius) var(--radius);color:var(--text-muted);cursor:pointer;background:0 0;justify-content:center;align-items:center;margin:auto -18px -18px;padding:7px 0;transition:background .15s,color .15s;display:flex}.provider-status-card-toggle.svelte-nopjmh:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);color:var(--text)}.provider-status-card-toggle.svelte-nopjmh:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 32%, transparent);outline-offset:-2px}.provider-status-card-toggle.svelte-nopjmh .provider-status-card-toggle-icon{width:16px;height:16px;transition:transform .28s;display:block}.provider-status-card-toggle.is-expanded.svelte-nopjmh .provider-status-card-toggle-icon{transform:rotate(180deg)}.provider-status-card-head.svelte-nopjmh{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.provider-status-name.svelte-nopjmh{letter-spacing:-.02em;flex-wrap:wrap;align-items:baseline;gap:6px;font-size:16px;font-weight:700;display:flex}.provider-doc-help.svelte-nopjmh{align-self:center;text-decoration:none}.provider-status-name-type.svelte-nopjmh{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-pill.svelte-nopjmh{border:1px solid var(--border);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;min-height:28px;padding:0 10px;font-size:12px;font-weight:700;display:inline-flex}.provider-status-pill.is-healthy.svelte-nopjmh{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.provider-status-pill.is-degraded.svelte-nopjmh{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-pill.is-unhealthy.svelte-nopjmh{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, transparent)}.provider-status-meta.svelte-nopjmh{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.provider-status-meta-item.svelte-nopjmh{background:var(--bg);border:1px solid var(--border);border-radius:6px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.provider-status-meta-label.svelte-nopjmh{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-meta-value.svelte-nopjmh{color:var(--text);font-size:14px}@media (width<=768px){.provider-status-meta.svelte-nopjmh{grid-template-columns:1fr}}.provider-status-section-loading.svelte-1kx3uw4{justify-content:center;padding:24px 0;display:flex}.provider-status-section-header.svelte-1kx3uw4{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px;display:flex}.provider-status-toggle.svelte-1kx3uw4{background:var(--bg-surface);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:10px;padding:8px 12px;font-family:inherit;font-size:12px;font-weight:600;transition:background-color .18s,border-color .18s,color .18s;display:inline-flex}.provider-status-toggle.svelte-1kx3uw4:hover{background:var(--bg-surface-hover)}.provider-status-toggle.svelte-1kx3uw4:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 28%, transparent);outline-offset:2px}.provider-status-toggle-copy.svelte-1kx3uw4{white-space:nowrap}.provider-status-toggle-track.svelte-1kx3uw4{background:color-mix(in srgb, var(--text-muted) 35%, var(--border));border-radius:999px;flex-shrink:0;width:34px;height:20px;transition:background-color .2s;position:relative}.provider-status-toggle-track.is-active.svelte-1kx3uw4{background:color-mix(in srgb, var(--accent) 82%, var(--bg-surface))}.provider-status-toggle-thumb.svelte-1kx3uw4{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .2s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #0000003d}.provider-status-toggle-track.is-active.svelte-1kx3uw4 .provider-status-toggle-thumb:where(.svelte-1kx3uw4){transform:translate(14px)}.provider-status-grid.svelte-1kx3uw4{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));align-items:start;gap:16px;display:grid}@media (width<=768px){.provider-status-section-header.svelte-1kx3uw4{flex-direction:column;align-items:flex-start}.provider-status-toggle.svelte-1kx3uw4{justify-content:space-between;width:100%}}.filter-input-wrap.svelte-30xz1k{flex:1;width:100%;min-width:min(400px,100%);display:flex;position:relative}.filter-input.svelte-30xz1k{flex:1;width:100%;min-width:0;padding-left:34px}.filter-input-wrap.svelte-30xz1k .filter-input-icon{width:14px;height:14px;color:var(--text-muted);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.usage-page-filters.svelte-1oi6ywk{flex-wrap:wrap;gap:10px;margin-bottom:20px;display:flex}.usage-page-filters.svelte-1oi6ywk .usage-log-select{flex:0 auto}.usage-page-filters.svelte-1oi6ywk .usage-page-filters-user-path{flex:220px;min-width:180px;max-width:360px}@media (width<=768px){.usage-page-filters.svelte-1oi6ywk .usage-log-select,.usage-page-filters.svelte-1oi6ywk .usage-page-filters-user-path{flex:100%;max-width:none}}.pro-saved-value.svelte-1qiwzdu{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.pro-saved-delta.svelte-1qiwzdu{color:var(--success);letter-spacing:0;font-size:13px;font-weight:600}.usage-breakdown-loading.svelte-1kee4g8{justify-content:center;align-items:center;min-height:120px;display:flex}.chart-view-toggle.svelte-1kee4g8{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;padding:2px;display:inline-flex}.chart-view-btn.svelte-1kee4g8{width:30px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:all .15s;display:inline-flex}.chart-view-btn.svelte-1kee4g8:hover{color:var(--text)}.chart-view-btn.active.svelte-1kee4g8{background:var(--accent);color:#fff}.chart-view-btn.svelte-1kee4g8 svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}.usage-chart-table-wrapper.svelte-1kee4g8{-webkit-overflow-scrolling:touch;margin-top:0;overflow-x:auto}.usage-chart-data-table.svelte-1kee4g8{min-width:max-content}.usage-chart-data-table.svelte-1kee4g8 th,.usage-chart-data-table.svelte-1kee4g8 td{white-space:nowrap}.pagination-info.svelte-1imew3q{color:var(--text-muted);font-size:13px}.pagination-buttons.svelte-1imew3q{gap:8px;display:flex}.usage-log-loading.svelte-hg4ill{justify-content:center;align-items:center;min-height:120px;display:flex}.usage-log-section.svelte-hg4ill{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.usage-log-section.svelte-hg4ill h3{margin-bottom:16px;font-size:16px;font-weight:600}.usage-log-section.svelte-hg4ill .table-wrapper{overflow-x:auto}.usage-log-toolbar.svelte-hg4ill{gap:12px;margin-bottom:16px;display:grid}.usage-filter-row.svelte-hg4ill{grid-template-columns:repeat(12,minmax(0,1fr));align-items:center;gap:12px;display:grid}.usage-filter-row-search.svelte-hg4ill .filter-input-wrap{grid-column:1/-1}.usage-filter-row-options.svelte-hg4ill{grid-template-columns:1fr}.usage-log-checkbox.svelte-hg4ill{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}.usage-log-checkbox.svelte-hg4ill input{cursor:pointer;width:16px;height:16px}.usage-ts.svelte-hg4ill{white-space:nowrap;font-size:12px}.usage-log-row-cached.svelte-hg4ill td{opacity:.75;font-style:italic}.usage-log-row-cached.svelte-hg4ill .usage-log-cache-cell:where(.svelte-hg4ill){font-weight:700}.caveat-icon.svelte-hg4ill{color:var(--warning);cursor:help;margin-left:4px;font-size:14px}@media (width<=768px){.usage-log-toolbar.svelte-hg4ill{gap:10px}.usage-filter-row.svelte-hg4ill{grid-template-columns:1fr}.usage-filter-row-search.svelte-hg4ill .filter-input-wrap{grid-column:1}.usage-log-table.svelte-hg4ill{display:block;overflow-x:auto}}.usage-sticky-controls.svelte-spwie6{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;display:flex}.usage-charts-grid.svelte-spwie6{flex-wrap:wrap;gap:24px;margin-bottom:24px;display:flex}.usage-charts-grid.svelte-spwie6 .model-chart-section{flex:calc(50% - 24px);min-width:420px;margin-bottom:0}@media (width<=520px){.usage-charts-grid.svelte-spwie6 .model-chart-section{min-width:0}}.loading-state.svelte-hzxv1d{min-height:var(--loading-state-min-height,64px);color:var(--text-muted);justify-content:center;align-items:center;gap:10px;font-size:14px;display:flex}.budget-bar-text-row-on-fill.svelte-1jm56wo{color:#fff;clip-path:inset(0 calc(100% - var(--budget-progress,0%)) 0 0)}.budget-bar-text-start.svelte-1jm56wo{left:8px;transform:translateY(-50%)}.budget-bar-track-period-custom.svelte-1jm56wo .budget-bar-text-row-on-fill:where(.svelte-1jm56wo){color:#3f332a}.budget-override-dialog.svelte-13ryo7h{max-width:460px}.budget-sort-control.svelte-1752fqe{align-items:center;gap:8px}.budget-sort-control.svelte-1752fqe label{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.budget-sort-select.svelte-1752fqe{background-color:var(--bg-surface);min-width:132px}.budget-sort-select.svelte-1752fqe:hover{background-color:var(--bg-surface-hover)}.model-name-cell.svelte-1iynym{flex-direction:column;gap:8px;display:flex}.model-name-primary.svelte-1iynym{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.model-name-secondary.svelte-1iynym{color:var(--text-muted);font-size:12px}.model-redirect-remove-btn.svelte-1iynym{appearance:none;color:var(--danger);cursor:pointer;background:0 0;border:0;margin-left:4px;padding:0;font-size:11px}.model-redirect-remove-btn.svelte-1iynym:hover:not(:disabled){text-decoration:underline}.model-redirect-remove-btn.svelte-1iynym:disabled{opacity:.45;cursor:default}.model-kind-icon.svelte-1iynym{border:1px solid color-mix(in srgb, var(--accent) 55%, var(--border));background:var(--bg);width:24px;height:24px;color:var(--accent);border-radius:999px;flex:0 0 24px;justify-content:center;align-items:center;display:inline-flex}.model-kind-icon-svg.svelte-1iynym{width:14px;height:14px}.model-row-actions.svelte-1iynym{text-align:right;width:170px}@media (width<=768px){.model-name-primary.svelte-1iynym{flex-direction:column;align-items:flex-start}}.provider-group-row.svelte-1911hy6 td{background:color-mix(in srgb, var(--accent) 6%, var(--bg));padding-top:12px;padding-bottom:12px}.provider-group-row.svelte-1911hy6:hover td{background:color-mix(in srgb, var(--accent) 8%, var(--bg))}.provider-group-header.svelte-1911hy6{justify-content:space-between;align-items:center;gap:16px;display:flex}.provider-group-meta.svelte-1911hy6{flex-direction:column;gap:4px;min-width:0;display:flex}.provider-group-title.svelte-1911hy6{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.provider-group-type.svelte-1911hy6,.provider-group-count.svelte-1911hy6,.provider-group-summary.svelte-1911hy6{color:var(--text-muted);font-size:12px}@media (width<=768px){.provider-group-header.svelte-1911hy6{flex-direction:column;align-items:flex-start}}.vm-session-affinity-checkbox.svelte-d1j6xw{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}.vm-session-affinity-checkbox.svelte-d1j6xw input:where(.svelte-d1j6xw){accent-color:var(--accent);cursor:pointer}.pricing-override-rows.svelte-u8snes{gap:12px;display:grid}.pricing-override-row.svelte-u8snes{grid-template-columns:minmax(220px,1fr) minmax(130px,180px) 32px;align-items:end;gap:12px;display:grid}.pricing-override-row-actions.svelte-u8snes{justify-content:flex-start;display:flex}.pricing-override-tier-note.svelte-u8snes{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);border-radius:6px;padding:10px 12px;font-size:13px}.pricing-preview.svelte-u8snes{border:1px solid var(--border);border-radius:6px;overflow:hidden}.pricing-preview-header.svelte-u8snes,.pricing-preview-row.svelte-u8snes{grid-template-columns:minmax(150px,1fr) minmax(90px,auto) minmax(130px,.8fr);align-items:center;gap:12px;padding:10px 12px;display:grid}.pricing-preview-header.svelte-u8snes{background:var(--bg);color:var(--text-muted);text-transform:uppercase;font-size:12px;font-weight:600}.pricing-preview-row.svelte-u8snes{border-top:1px solid var(--border);font-size:13px}.pricing-preview-row-empty.svelte-u8snes{color:var(--text-muted);grid-template-columns:1fr}@media (width<=768px){.pricing-override-row.svelte-u8snes,.pricing-preview-header.svelte-u8snes,.pricing-preview-row.svelte-u8snes{grid-template-columns:1fr}}.failover-drafts-editor.svelte-1n87bip{flex-direction:column;gap:16px;display:flex}.failover-draft-header-actions.svelte-1n87bip{flex:none;align-items:center;gap:10px;display:flex}.failover-draft-counter.svelte-1n87bip{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.failover-draft-toolbar.svelte-1n87bip{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.failover-draft-toolbar.svelte-1n87bip .filter-input-wrap,.failover-draft-toolbar.svelte-1n87bip .filter-input{min-width:0}.failover-draft-toggle-all.svelte-1n87bip{flex:none}.failover-draft-list.svelte-1n87bip{flex-direction:column;gap:8px;max-height:min(52vh,430px);padding-right:4px;display:flex;overflow-y:auto}.failover-draft-row.svelte-1n87bip{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:pointer;grid-template-columns:18px minmax(0,1fr);align-items:start;gap:10px;padding:10px;display:grid}.failover-draft-row.svelte-1n87bip:hover{border-color:color-mix(in srgb, var(--accent) 42%, var(--border));background:var(--bg-surface-hover)}.failover-draft-row.svelte-1n87bip input{width:16px;height:16px;margin-top:2px}.failover-draft-copy.svelte-1n87bip{gap:4px;min-width:0;display:grid}.failover-draft-source.svelte-1n87bip,.failover-draft-targets.svelte-1n87bip{overflow-wrap:anywhere}.failover-draft-targets.svelte-1n87bip{color:var(--text-muted);font-size:12px}.failover-drafts-empty.svelte-1n87bip{align-items:center;min-height:96px;display:flex}.failover-draft-actions.svelte-1n87bip{margin-top:0}.category-tabs.svelte-scpjps{-webkit-overflow-scrolling:touch;align-items:center;gap:4px;margin-bottom:16px;padding-bottom:2px;display:flex;overflow-x:auto}.category-tab.svelte-scpjps{background:var(--bg-surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;white-space:nowrap;border-radius:6px;flex-shrink:0;align-items:center;gap:6px;padding:6px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:all .15s;display:inline-flex}.category-tab.svelte-scpjps:hover{color:var(--text);background:var(--bg-surface-hover)}.category-tab.active.svelte-scpjps{background:var(--accent);color:#fff;border-color:var(--accent)}.category-tab.svelte-scpjps .tab-count:where(.svelte-scpjps){background:#ffffff26;border-radius:9px;justify-content:center;align-items:center;min-width:20px;height:18px;padding:0 5px;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.category-tab.svelte-scpjps:not(.active) .tab-count:where(.svelte-scpjps){background:var(--bg)}@media (width<=768px){.category-tabs.svelte-scpjps{gap:4px}.category-tab.svelte-scpjps{padding:5px 10px;font-size:12px}}.workflow-pipeline-meta.svelte-1viff7o{border:1px solid var(--border);background:color-mix(in srgb, var(--bg-surface) 86%, transparent);min-width:0;max-width:calc(100% - 28px);color:var(--text-muted);white-space:nowrap;appearance:none;cursor:pointer;text-align:left;border-radius:12px;align-items:center;gap:0;padding:2px 10px;font-size:12px;font-weight:500;line-height:1.2;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s;display:inline-flex;position:absolute;top:12px;right:14px;overflow:hidden}.workflow-pipeline-meta.svelte-1viff7o:hover,.workflow-pipeline-meta.svelte-1viff7o:focus-visible{border-color:color-mix(in srgb, var(--accent) 40%, var(--border));background:color-mix(in srgb, var(--accent) 8%, var(--bg-surface));color:color-mix(in srgb, var(--accent) 74%, var(--text))}.workflow-pipeline-meta.svelte-1viff7o:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}.workflow-pipeline-meta-label.svelte-1viff7o{flex:none;font-weight:700}.workflow-pipeline-meta-placeholder.svelte-1viff7o{opacity:1;flex:none;max-width:3ch;margin-left:4px;transition:max-width .18s,margin-left .18s,opacity .15s;overflow:hidden}.workflow-pipeline-meta-value.svelte-1viff7o{opacity:0;text-overflow:clip;flex:0 auto;max-width:0;margin-left:0;transition:max-width .22s,margin-left .18s,opacity .15s;overflow:hidden}.workflow-pipeline-meta.svelte-1viff7o:hover .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta.svelte-1viff7o:focus-visible .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta-error.svelte-1viff7o .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o){opacity:0;max-width:0;margin-left:0}.workflow-pipeline-meta.svelte-1viff7o:hover .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta.svelte-1viff7o:focus-visible .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta-error.svelte-1viff7o .workflow-pipeline-meta-value:where(.svelte-1viff7o){opacity:1;max-width:42ch;margin-left:4px}.workflow-pipeline-meta-icon.svelte-1viff7o{opacity:0;flex:none;justify-content:center;align-items:center;width:0;height:14px;margin-left:0;line-height:0;transition:width .18s,margin-left .18s,opacity .15s,transform .18s;display:inline-flex;overflow:hidden;transform:translate(4px)translateY(1px)scale(.84)}.workflow-pipeline-meta-icon.svelte-1viff7o svg{width:14px;height:14px}.workflow-pipeline-meta-copied.svelte-1viff7o,.workflow-pipeline-meta-copied.svelte-1viff7o:hover,.workflow-pipeline-meta-copied.svelte-1viff7o:focus-visible{background:color-mix(in srgb, var(--success) 12%, var(--bg));border-color:color-mix(in srgb, var(--success) 40%, var(--border));color:var(--success)}.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-icon:where(.svelte-1viff7o){opacity:1;width:14px;margin-left:6px;transform:translateY(1px)}.workflow-pipeline-meta-error.svelte-1viff7o,.workflow-pipeline-meta-error.svelte-1viff7o:hover,.workflow-pipeline-meta-error.svelte-1viff7o:focus-visible{background:color-mix(in srgb, var(--danger) 10%, var(--bg));border-color:color-mix(in srgb, var(--danger) 34%, var(--border));color:var(--danger)}.workflow-pipeline.svelte-nbptrg{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg);flex-direction:column;gap:0;margin-bottom:12px;padding:18px 20px 20px;display:flex;position:relative}.workflow-pipeline-has-meta.svelte-nbptrg{padding-top:42px}.workflow-pipeline-row.svelte-nbptrg{align-items:center;width:100%;min-width:0;display:flex;overflow-x:auto}.workflow-node-icon.svelte-nbptrg{border-radius:var(--radius);background:var(--bg);width:28px;height:28px;color:var(--text-muted);justify-content:center;align-items:center;display:flex}.workflow-node-icon.svelte-nbptrg svg{stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.workflow-node-label.svelte-nbptrg{letter-spacing:.03em;color:var(--text);white-space:nowrap;font-size:11px;font-weight:700;line-height:1.2}.workflow-node-sub.svelte-nbptrg{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;max-width:120px;font-size:10px;font-weight:500;line-height:1.2;font-family:var(--font-mono,ui-monospace, monospace);overflow:hidden}.workflow-node-badge.svelte-nbptrg{border-radius:var(--radius);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);align-items:center;padding:2px 7px;font-size:9px;font-weight:800;line-height:1.5;display:inline-flex}.workflow-node-endpoint.svelte-nbptrg{border-radius:var(--radius);border-color:var(--border);background:var(--bg-surface);flex-direction:row;gap:7px;min-width:auto;padding:10px 14px}.workflow-node-icon-endpoint.svelte-nbptrg{border-radius:var(--radius);width:auto;height:auto;color:var(--text-muted);background:0 0;justify-content:flex-start;padding:0}.workflow-node-icon-endpoint.svelte-nbptrg svg{width:14px;height:14px}.workflow-node-endpoint.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--text-muted);font-size:11px;font-weight:600}.workflow-node-feature.svelte-nbptrg{border-color:color-mix(in srgb, var(--accent) 46%, var(--border));background:color-mix(in srgb, var(--accent) 8%, var(--bg-surface))}.workflow-node-feature.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--accent) 16%, var(--bg));color:var(--accent)}.workflow-node-feature.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--accent)}.workflow-node-feature.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--accent) 70%, var(--text-muted))}.workflow-node-ai.svelte-nbptrg{border-radius:var(--radius);gap:6px;min-width:96px;padding:12px 16px}.workflow-async-section.svelte-nbptrg{justify-content:flex-end;align-items:center;gap:0;width:100%;min-width:0;margin-top:10px;display:flex}.workflow-async-turn.svelte-nbptrg{background:repeating-linear-gradient(to left, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 0, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 5px, transparent 5px, transparent 9px);flex:0 0 60px;height:2px;position:relative}.workflow-async-turn.svelte-nbptrg:before{content:"";background:color-mix(in srgb, var(--text-muted) 40%, var(--border));clip-path:polygon(100% 0,0 50%,100% 100%);width:7px;height:9px;position:absolute;top:50%;left:-7px;transform:translateY(-50%)}.workflow-async-turn.svelte-nbptrg:after{content:"";border-right:2px dashed color-mix(in srgb, var(--text-muted) 40%, var(--border));height:16px;position:absolute;bottom:1px;right:0}.workflow-async-row.svelte-nbptrg{align-items:center;min-width:0;margin-right:7px;display:flex}.workflow-conn-async.svelte-nbptrg{background:repeating-linear-gradient(to left, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 0, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 5px, transparent 5px, transparent 9px);flex:0 0 24px;width:24px}.workflow-conn-async.svelte-nbptrg:after{background:color-mix(in srgb, var(--text-muted) 45%, var(--border));clip-path:polygon(100% 0,0 50%,100% 100%);left:-1px;right:auto}.workflow-node-async.svelte-nbptrg{border-radius:var(--radius);border-style:dashed;flex-direction:row;gap:7px;min-width:auto;padding:7px 12px}.workflow-node-async.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){border-radius:var(--radius);width:12px;height:12px}.workflow-node-async.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg) svg{width:12px;height:12px}.workflow-node-async.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){font-size:10px;font-weight:700}.workflow-async-label.svelte-nbptrg{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);opacity:.55;white-space:nowrap;flex-shrink:0;align-items:center;margin-left:8px;font-size:9px;font-weight:800;display:inline-flex}.workflow-node-success.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--success) 18%, var(--bg));color:var(--success)}.workflow-node-success.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--success)}.workflow-node-success.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--success) 85%, var(--text))}.workflow-node-success.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--success) 74%, var(--text-muted))}.workflow-node-success.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--success) 14%, var(--bg));border-color:color-mix(in srgb, var(--success) 38%, var(--border));color:var(--success)}.workflow-node-current.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--info) 16%, var(--bg));color:var(--info)}.workflow-node-current.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--info)}.workflow-node-current.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--info) 85%, var(--text))}.workflow-node-current.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--info) 72%, var(--text-muted))}.workflow-node-current.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--info) 13%, var(--bg));border-color:color-mix(in srgb, var(--info) 36%, var(--border));color:var(--info)}.workflow-node-warning.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--warning) 14%, var(--bg));color:var(--warning)}.workflow-node-warning.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--warning)}.workflow-node-warning.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--warning) 85%, var(--text))}.workflow-node-warning.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--warning) 72%, var(--text-muted))}.workflow-node-warning.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--warning) 14%, var(--bg));border-color:color-mix(in srgb, var(--warning) 38%, var(--border));color:var(--warning)}.workflow-node-error.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--danger) 14%, var(--bg));color:var(--danger)}.workflow-node-error.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--danger)}.workflow-node-error.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--danger) 85%, var(--text))}.workflow-node-error.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--danger) 72%, var(--text-muted))}.workflow-node-neutral.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--text-muted) 12%, var(--bg));color:var(--text-muted)}.workflow-node-neutral.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg),.workflow-node-neutral.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--text-muted)}.workflow-node-neutral.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--text-muted) 84%, var(--border))}.workflow-node-neutral.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--text-muted) 10%, var(--bg));border-color:color-mix(in srgb, var(--text-muted) 28%, var(--border));color:var(--text-muted)}.workflow-conn-hit.svelte-nbptrg,.workflow-conn-hit.svelte-nbptrg:after{background:color-mix(in srgb, var(--success) 58%, var(--border))}.workflow-conn-dim.svelte-nbptrg,.workflow-conn-dim.svelte-nbptrg:after{background:color-mix(in srgb, var(--border) 75%, transparent)}.workflow-node-success.svelte-nbptrg{border-color:color-mix(in srgb, var(--success) 52%, var(--border));background:color-mix(in srgb, var(--success) 9%, var(--bg-surface))}.workflow-node-current.svelte-nbptrg{border-color:color-mix(in srgb, var(--info) 56%, var(--border));background:color-mix(in srgb, var(--info) 10%, var(--bg-surface))}.workflow-node-warning.svelte-nbptrg{border-color:color-mix(in srgb, var(--warning) 52%, var(--border));background:color-mix(in srgb, var(--warning) 9%, var(--bg-surface))}.workflow-node-error.svelte-nbptrg{border-color:color-mix(in srgb, var(--danger) 52%, var(--border));background:color-mix(in srgb, var(--danger) 9%, var(--bg-surface))}.workflow-node-neutral.svelte-nbptrg{border-color:color-mix(in srgb, var(--text-muted) 40%, var(--border));background:color-mix(in srgb, var(--text-muted) 8%, var(--bg-surface))}.workflow-node-skipped.svelte-nbptrg{opacity:.28;position:relative}.workflow-card.svelte-1fo9fvq{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:16px;padding:20px;display:flex}.workflow-card-head.svelte-1fo9fvq{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.workflow-card-footer.svelte-1fo9fvq{flex-direction:column;align-items:stretch;gap:10px;display:flex}.workflow-card-head.svelte-1fo9fvq h3{font-size:18px;font-weight:700}.workflow-card-badges.svelte-1fo9fvq,.workflow-card-meta.svelte-1fo9fvq{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.workflow-card-meta-footer.svelte-1fo9fvq{justify-content:flex-start}.workflow-card-footer.svelte-1fo9fvq .alias-actions-cell{align-self:flex-end}.workflow-card-description.svelte-1fo9fvq{color:var(--text-muted);font-size:14px}.workflow-guardrails.svelte-1fo9fvq{flex-direction:column;gap:12px;display:flex}.workflow-guardrail-list.svelte-1fo9fvq{flex-direction:column;gap:10px;display:flex}.workflow-guardrail-item.svelte-1fo9fvq{border:1px solid var(--border);background:var(--bg);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}@media (width<=768px){.workflow-card-head.svelte-1fo9fvq,.workflow-card-footer.svelte-1fo9fvq,.workflow-card-badges.svelte-1fo9fvq,.workflow-card-meta.svelte-1fo9fvq,.workflow-guardrail-item.svelte-1fo9fvq{flex-direction:column;align-items:flex-start}}.model-editor.workflow-editor{width:min(1080px,100%);margin-bottom:0}.alert-inline-actions.svelte-1bcpzh1{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.workflow-guardrail-editor.svelte-1bcpzh1{flex-direction:column;gap:12px;display:flex}.workflow-guardrail-list-editor.svelte-1bcpzh1{flex-direction:column;gap:10px;display:flex}.workflow-guardrail-row.svelte-1bcpzh1{border:1px solid var(--border);background:var(--bg);border-radius:10px;justify-content:stretch;align-items:center;gap:12px;padding:10px 12px;display:flex}.workflow-guardrail-field.svelte-1bcpzh1{flex:auto;min-width:0}.workflow-guardrail-step-field.svelte-1bcpzh1{flex:0 0 120px}.workflow-input.svelte-1bcpzh1{width:100%;max-width:none}.workflow-step-input.svelte-1bcpzh1{max-width:120px}@media (width<=768px){.workflow-guardrail-row.svelte-1bcpzh1{flex-direction:column;align-items:flex-start}.workflow-step-input.svelte-1bcpzh1{width:100%;max-width:none}.workflow-guardrail-field.svelte-1bcpzh1,.workflow-guardrail-step-field.svelte-1bcpzh1{flex-basis:auto;width:100%}}.workflow-list-loading.svelte-ie2kfk{justify-content:center;align-items:center;gap:8px;display:flex}.workflows-list.svelte-ie2kfk{min-width:0}.workflow-card-grid.svelte-ie2kfk{grid-template-columns:1fr;gap:16px;display:grid}.workflow-page-note.svelte-l8kr26{color:var(--text-muted);margin-top:6px;font-size:14px}.audit-log-toolbar.svelte-1pwbpcm{flex-direction:column;gap:10px;margin-bottom:14px;display:flex}.audit-filter-row.svelte-1pwbpcm{grid-template-columns:repeat(12,minmax(0,1fr));gap:10px;display:grid}.audit-filter-select.svelte-1pwbpcm{grid-column:span 2;min-width:0}.audit-filter-row-search.svelte-1pwbpcm .filter-input-wrap{grid-column:1/-1;max-width:none}.audit-filter-row-controls.svelte-1pwbpcm .audit-filter-select:where(.svelte-1pwbpcm){grid-column:span 2}.audit-filter-row-controls.svelte-1pwbpcm .btn{grid-column:11/-1;justify-self:end;min-width:108px}.audit-clear-btn.svelte-1pwbpcm{justify-content:center;align-items:center;gap:8px;font-weight:600;display:inline-flex}.audit-clear-btn.svelte-1pwbpcm .table-icon-svg{width:12px;height:12px}@media (width<=768px){.audit-log-toolbar.svelte-1pwbpcm{gap:8px}.audit-filter-row.svelte-1pwbpcm{grid-template-columns:1fr}.audit-filter-row.svelte-1pwbpcm .filter-input-wrap,.audit-filter-row.svelte-1pwbpcm .filter-input,.audit-filter-select.svelte-1pwbpcm,.audit-filter-row.svelte-1pwbpcm .btn{grid-column:auto}}.audit-live-status.svelte-tve6yv{color:var(--text-muted);align-items:center;gap:10px;margin-left:16px;padding-left:6px;font-size:12px;display:inline-flex}.audit-live-status.svelte-tve6yv .live-dot.is-streaming:where(.svelte-tve6yv){animation:1.8s ease-out infinite svelte-tve6yv-audit-live-dot-throb}@keyframes svelte-tve6yv-audit-live-dot-throb{0%{transform:scale(1)}35%{transform:scale(1.35)}70%{transform:scale(1)}to{transform:scale(1)}}@media (prefers-reduced-motion:reduce){.audit-live-status.svelte-tve6yv .live-dot.is-streaming:where(.svelte-tve6yv){animation:none}}.audit-live-status-text.is-live.svelte-tve6yv{color:var(--success);font-weight:600}.audit-entry-metadata.svelte-hyopt0{border-top:1px solid var(--border);align-items:center;gap:10px;margin-top:12px;padding-top:12px;display:flex}.audit-entry-metadata-label.svelte-hyopt0{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;flex:none;font-size:12px;font-weight:700}.audit-entry-context.svelte-hyopt0{flex-wrap:wrap;flex:auto;gap:8px;display:flex}.audit-alias-badge.svelte-hyopt0{background:color-mix(in srgb, var(--accent) 14%, var(--bg));border-color:color-mix(in srgb, var(--accent) 28%, var(--border));color:var(--accent-strong,var(--accent))}@media (width<=768px){.audit-entry-metadata.svelte-hyopt0{flex-direction:column;align-items:flex-start;gap:8px}}.audit-attempt-track.svelte-1eu22xn{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.audit-attempt-track-pips.svelte-1eu22xn{align-items:center;gap:3px;display:inline-flex}.audit-attempt-pip.svelte-1eu22xn{background:var(--text-muted);border-radius:2px;width:8px;height:8px}.audit-attempt-pip.audit-attempt-success.svelte-1eu22xn{background:var(--success)}.audit-attempt-pip.audit-attempt-error.svelte-1eu22xn{background:var(--danger)}.audit-attempt-track-count.svelte-1eu22xn{color:var(--text-muted);font-size:11px}.audit-entry-summary.svelte-17mysgz{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;padding:5px 14px;list-style:none;display:flex;position:relative}.audit-entry-summary.svelte-17mysgz::-webkit-details-marker{display:none}.audit-entry-summary-live-in-progress.svelte-17mysgz{background:color-mix(in srgb, var(--info) 7%, var(--bg))}.audit-entry-summary-has-interactions.svelte-17mysgz{padding-right:44px}.audit-entry-summary-live-in-progress.svelte-17mysgz:before{content:"";background:var(--info);pointer-events:none;width:3px;animation:1.2s ease-in-out infinite audit-live-summary-stripe-blink;position:absolute;inset:0 auto 0 0}@media (prefers-reduced-motion:reduce){.audit-entry-summary-live-in-progress.svelte-17mysgz:before{opacity:.78;animation:none}}.audit-entry-left.svelte-17mysgz{align-items:center;gap:8px;min-width:0;display:flex}.audit-entry-right.svelte-17mysgz{color:var(--text-muted);flex-shrink:0;align-items:center;gap:10px;min-height:28px;display:inline-flex}.audit-thread-expander.svelte-17mysgz{border:1px solid var(--border);background:var(--bg-surface);min-width:28px;height:28px;color:var(--text-muted);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;gap:3px;padding:0 7px 0 4px;transition:background .1s ease-out,color .1s ease-out;display:inline-flex}.audit-thread-expander.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 12%, var(--bg));color:var(--accent)}.audit-thread-expander.svelte-17mysgz .audit-thread-expander-svg{width:14px;height:14px}.audit-thread-count.svelte-17mysgz{font-size:11px;font-weight:600}.audit-conversation-trigger.svelte-17mysgz{border:0;border-left:1px solid var(--border);background:color-mix(in srgb, var(--accent) 12%, var(--bg));width:32px;height:100%;color:var(--accent);cursor:pointer;border-radius:0;justify-content:center;align-items:center;margin:0;transition:background .1s ease-out,color .1s ease-out;display:inline-flex;position:absolute;inset:0 0 0 auto}.audit-conversation-trigger.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 20%, var(--bg))}.audit-conversation-trigger.svelte-17mysgz .audit-conversation-trigger-svg{stroke-linecap:butt;stroke-linejoin:miter;width:18px;height:18px}.audit-path.svelte-17mysgz{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.audit-request-badge.svelte-17mysgz{white-space:nowrap;gap:6px;min-width:0}.audit-timestamp-time.svelte-17mysgz{display:none}.audit-provider-model.svelte-17mysgz{border:1px solid var(--border);background:var(--bg-surface);height:24px;color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;max-width:420px;padding:0 10px;font-size:12px;display:inline-flex;overflow:hidden}@container dashboard-content (width<=699px){.audit-entry-summary.svelte-17mysgz{flex-direction:column;align-items:flex-start}.audit-entry-right.svelte-17mysgz{justify-content:space-between;width:100%}.audit-request-status.svelte-17mysgz,.audit-timestamp-full.svelte-17mysgz{display:none}.audit-timestamp-time.svelte-17mysgz{display:inline}}.audit-pane-split.svelte-1h5puht{grid-template-columns:1fr 2fr;align-items:start;gap:10px 14px;display:grid}.audit-pane-split-single.svelte-1h5puht{grid-template-columns:minmax(0,1fr)}@container dashboard-content (width<=699px){.audit-pane-split.svelte-1h5puht{grid-template-columns:minmax(0,1fr)}}.audit-pane-split.svelte-1h5puht .audit-pane-block-error:where(.svelte-1h5puht),.audit-pane-split.svelte-1h5puht .audit-pane-empty:where(.svelte-1h5puht),.audit-pane-split.svelte-1h5puht .audit-size-warning:where(.svelte-1h5puht){grid-column:1/-1}.audit-pane-block.svelte-1h5puht{min-width:0}.audit-pane-block.svelte-1h5puht>h5{margin-bottom:6px}.audit-pane-block-head.svelte-1h5puht{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.audit-pane-block-title.svelte-1h5puht{align-items:center;gap:8px;min-width:0;display:inline-flex}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn{background-color:var(--bg-surface);border:1px solid color-mix(in srgb, var(--border) 70%, var(--text) 30%);color:var(--text);cursor:pointer;border-radius:6px;flex:none;align-items:center;gap:6px;padding:4px 8px;font-family:inherit;font-size:12px;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn:hover:not(:disabled){background:color-mix(in srgb, var(--bg-surface) 80%, var(--text) 20%);border-color:color-mix(in srgb, var(--border) 45%, var(--text) 55%)}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn.copy-feedback-btn-copied{background:color-mix(in srgb, var(--success) 18%, var(--bg-surface))}.audit-json.svelte-1h5puht{background:var(--bg-surface);border:1px solid var(--border);box-sizing:border-box;white-space:pre;max-width:100%;max-height:220px;color:var(--text);border-radius:6px;padding:10px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;line-height:1.45;overflow:auto}.audit-pane-error-message.svelte-1h5puht{color:var(--danger)}.audit-pane-clickable-preview.svelte-1h5puht{cursor:pointer}.audit-pane-clickable-preview.svelte-1h5puht:hover{background:color-mix(in srgb, var(--danger) 8%, transparent)}.audit-json-body.svelte-1h5puht{white-space:pre;overflow-wrap:normal}.audit-pane-empty.svelte-1h5puht{text-align:left;padding:8px 0 0}.audit-pane-pending.svelte-1h5puht{align-items:center;gap:8px;display:flex}.audit-pane-streaming.svelte-1h5puht{letter-spacing:.02em;color:var(--text-muted);align-items:center;gap:7px;padding-left:4px;font-size:11px;font-weight:600;display:inline-flex}.audit-size-warning.svelte-1h5puht{color:var(--warning);margin-top:8px;font-size:12px}.audit-request-response.svelte-1bc5vi5{margin-top:4px}.audit-pane-tablist.svelte-1bc5vi5{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:2px;display:flex}.audit-pane-tab.svelte-1bc5vi5{border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-bottom-color:#0000;border-radius:6px 6px 0 0;align-items:center;gap:8px;margin-bottom:-1px;margin-right:12px;padding:8px 12px;font-family:inherit;font-size:13px;transition:color .15s,border-color .15s,background-color .15s;display:inline-flex}.audit-pane-tab.svelte-1bc5vi5:not(.audit-pane-tab-active):hover{color:var(--text);background:color-mix(in srgb, var(--text) 5%, transparent)}.audit-pane-tab-active.svelte-1bc5vi5{color:var(--text);border-color:var(--border);border-bottom-color:var(--bg);background:var(--bg)}.audit-pane-tab-label.svelte-1bc5vi5{font-weight:600}.audit-pane-tabpanel.svelte-1bc5vi5{min-width:0}.audit-pane-icon.svelte-1bc5vi5{color:var(--text-muted);flex:none;align-items:center;display:inline-flex}.audit-pane-icon.svelte-1bc5vi5.audit-pane-icon-request{color:var(--accent)}.audit-pane-icon.svelte-1bc5vi5.audit-pane-icon-response{color:var(--info)}.audit-pane-icon.svelte-1bc5vi5 svg{width:16px;height:16px}.audit-pane-seq.svelte-1bc5vi5{color:var(--text-muted);font-size:12px}.audit-pane-kind.svelte-1bc5vi5{text-transform:uppercase;letter-spacing:.04em;font-size:10px;font-weight:600}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-primary{color:var(--text-muted)}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-failover{color:var(--accent);background:color-mix(in srgb, var(--accent) 14%, var(--bg));border-color:color-mix(in srgb, var(--accent) 30%, var(--border))}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-retry{color:var(--warning);background:color-mix(in srgb, var(--warning) 14%, var(--bg));border-color:color-mix(in srgb, var(--warning) 30%, var(--border))}.audit-savings-pill.svelte-1bc5vi5{border:1px solid color-mix(in srgb, var(--prompt-cache-color) 45%, var(--border));background:var(--prompt-cache-color-bg);color:var(--prompt-cache-color);letter-spacing:.02em;border-radius:999px;align-items:center;padding:1px 7px;font-size:11px;font-weight:700;display:inline-flex}.audit-step-pill.svelte-1bc5vi5{border:1px dashed var(--border);color:var(--text-muted);letter-spacing:.02em;border-radius:999px;align-items:center;padding:1px 7px;font-size:11px;display:inline-flex}.audit-entry.svelte-cmjgwr{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);transition:background .12s ease-out,border-color .12s ease-out;overflow:hidden}.audit-entry-interactions-open.svelte-cmjgwr{border-color:color-mix(in srgb, var(--prompt-cache-color) 38%, var(--border));background:color-mix(in srgb, var(--prompt-cache-color) 7%, var(--bg))}.audit-entry-details.svelte-cmjgwr{border-top:1px solid var(--border);background:var(--bg-surface);padding:12px;overflow:hidden}.audit-entry-interactions-open.svelte-cmjgwr .audit-entry-details:where(.svelte-cmjgwr){border-top-color:color-mix(in srgb, var(--prompt-cache-color) 24%, var(--border));background:color-mix(in srgb, var(--prompt-cache-color) 5%, var(--bg-surface))}.audit-thread.svelte-pneivi{flex-direction:column;gap:10px;display:flex}.audit-thread-children.svelte-pneivi{flex-direction:column;gap:10px;margin-left:26px;display:flex}.audit-thread-child.svelte-pneivi,.audit-thread-loading.svelte-pneivi{position:relative}.audit-thread-child.svelte-pneivi:before,.audit-thread-loading.svelte-pneivi:before{content:"";border-left:1px solid var(--border);border-bottom:1px solid var(--border);pointer-events:none;border-bottom-left-radius:6px;width:12px;height:calc(50% + 10px);position:absolute;top:-10px;left:-14px}.audit-thread-child.svelte-pneivi:not(:last-child):after{content:"";border-left:1px solid var(--border);pointer-events:none;position:absolute;top:50%;bottom:-10px;left:-14px}.audit-thread-loading.svelte-pneivi{padding:6px 0 6px 4px;display:flex}.audit-thread-more.svelte-pneivi{color:var(--text-muted);padding-left:4px;font-size:12px}.audit-log-loading.svelte-1nhcbov{justify-content:center;padding:2rem 0;display:flex}.audit-list-toolbar.svelte-1nhcbov{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.audit-list-toolbar-left.svelte-1nhcbov{flex-wrap:wrap;align-items:center;gap:16px;display:inline-flex}.audit-group-checkbox.svelte-1nhcbov{color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:7px;font-size:13px;display:inline-flex}.audit-group-checkbox.svelte-1nhcbov input:where(.svelte-1nhcbov){accent-color:var(--accent);cursor:pointer}.audit-retention-note.svelte-1nhcbov{color:var(--text-muted);font-size:13px}.audit-retention-highlight.svelte-1nhcbov{color:var(--text);font-weight:600}.audit-log-section.svelte-1nhcbov{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.audit-log-summary.svelte-1nhcbov{color:var(--text-muted);font-size:13px}.audit-log-list.svelte-1nhcbov{flex-direction:column;gap:10px;display:flex}.settings-guardrails-list.svelte-1bvx512{min-width:0}.settings-guardrail-type-pill.svelte-1bvx512{border:1px solid color-mix(in srgb, var(--accent) 18%, var(--border));background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--text);white-space:nowrap;border-radius:999px;align-items:center;padding:6px 10px;font-size:12px;font-weight:600;display:inline-flex}.settings-guardrail-summary.svelte-1bvx512{color:var(--text);font-size:14px;line-height:1.45}.settings-guardrail-description.svelte-1bvx512{color:var(--text-muted);margin-top:6px;font-size:12px}.model-editor.guardrails-editor-wide{width:min(1080px,100%)}.form-field-fieldset.svelte-s964s3{border:0;min-inline-size:0;margin:0;padding:0}.form-field-legend.svelte-s964s3{color:var(--text-muted);letter-spacing:.5px;text-transform:uppercase;padding:0;font-size:12px;font-weight:600}.model-editor.settings-guardrails-editor{min-width:0}.settings-guardrails-hero.svelte-5x874c{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--border));border-radius:var(--radius);background:radial-gradient(circle at top right, color-mix(in srgb, var(--accent-hover) 18%, transparent), transparent 42%), radial-gradient(circle at bottom left, color-mix(in srgb, var(--accent) 16%, transparent), transparent 40%), var(--bg-surface);justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:20px;padding:24px;display:flex}.settings-kicker.svelte-5x874c{color:var(--accent);letter-spacing:.08em;text-transform:uppercase;margin:0 0 10px;font-size:11px;font-weight:700}.settings-guardrails-hero.svelte-5x874c h3{margin-bottom:8px}.settings-guardrails-hero.svelte-5x874c p:last-child{color:var(--text-muted);margin-bottom:0}.settings-guardrails-meta.svelte-5x874c{gap:12px;display:flex}.settings-guardrails-stat.svelte-5x874c{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--border));background:color-mix(in srgb, var(--bg-surface-hover) 76%, transparent);border-radius:16px;min-width:110px;padding:14px 16px}.settings-guardrails-stat-label.svelte-5x874c{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;margin-bottom:8px;font-size:11px;font-weight:700;display:block}.settings-guardrails-stat.svelte-5x874c strong{font-size:24px;font-weight:700}@media (width<=768px){.settings-guardrails-hero.svelte-5x874c{flex-direction:column}.settings-guardrails-meta.svelte-5x874c{width:100%}.settings-guardrails-stat.svelte-5x874c{flex:1 1 0}}.mcp-catalog-section.svelte-1xqrzco{margin-top:18px}.mcp-catalog-section.svelte-1xqrzco .form-field-label{margin-bottom:8px}.mcp-catalog-subtitle.svelte-1xqrzco{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.mcp-catalog-list.svelte-1xqrzco{flex-direction:column;gap:12px;margin:0 0 8px;padding:0;list-style:none;display:flex}.mcp-catalog-item-name.svelte-1xqrzco{overflow-wrap:anywhere;font-size:13px}.mcp-catalog-item-aggregated.svelte-1xqrzco{color:var(--text-muted);overflow-wrap:anywhere;margin-top:2px;font-size:11px}.mcp-catalog-item-description.svelte-1xqrzco{color:var(--text-muted);margin:2px 0 0;font-size:13px;font-weight:400}.mcp-server-sub-counts.svelte-ah8nrt{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;max-width:280px;margin-top:4px;font-size:11px;overflow:hidden}.mcp-server-table-wrapper.svelte-ah8nrt{overflow-x:auto}.mcp-server-table-wrapper.svelte-ah8nrt .data-table{min-width:860px}.auth-key-form-fields.svelte-1gswxes>.form-field{margin-bottom:4px}.auth-key-dashboard-toggle.svelte-1gswxes{cursor:pointer;align-items:center;gap:8px;font-size:13px;display:inline-flex}.auth-key-issued-banner.svelte-1gswxes{background:color-mix(in srgb, var(--success) 8%, var(--bg-surface));border:1px solid color-mix(in srgb, var(--success) 30%, var(--border));border-radius:var(--radius);margin-bottom:20px;padding:16px}.auth-key-issued-warning.svelte-1gswxes{color:color-mix(in srgb, var(--success) 80%, var(--text));margin-bottom:12px;font-size:13px;font-weight:600}.auth-key-issued-value-row.svelte-1gswxes{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px;display:flex}.auth-key-issued-token.svelte-1gswxes{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);word-break:break-all;flex:1;min-width:0;padding:8px 12px;font-size:13px;overflow-x:auto}.usage-label-chip-static.svelte-nf0ldb,.usage-label-chip-static.svelte-nf0ldb:hover{cursor:default;background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg))}.auth-key-redacted.svelte-nf0ldb{color:var(--text-muted);font-size:13px}.auth-key-actions-cell.svelte-nf0ldb{white-space:nowrap}.auth-key-row-deactivated.svelte-nf0ldb td:where(.svelte-nf0ldb):not(.auth-key-actions-cell){opacity:.55}.auth-key-expiry.svelte-nf0ldb{white-space:nowrap;align-items:center;gap:8px;display:inline-flex}.auth-key-th-help.svelte-nf0ldb{cursor:help;align-items:center;gap:4px;display:inline-flex}.auth-key-row-actions.svelte-nf0ldb{align-items:center;gap:6px;display:inline-flex}.auth-keys-loading.svelte-1xpdcqx{justify-content:center;align-items:center;padding:32px 0;display:flex}.auth-keys-help-notice.svelte-1xpdcqx{margin-bottom:20px}.auth-keys-inactive-toggle.svelte-1xpdcqx{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;align-items:center;gap:8px;font-size:13px;display:inline-flex}.auth-keys-inactive-toggle.svelte-1xpdcqx input:where(.svelte-1xpdcqx){width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.settings-panel-header.svelte-15kyv2y{justify-content:space-between;gap:16px;margin-bottom:20px;display:flex}.settings-panel-header.svelte-15kyv2y h3{font-size:18px}.settings-form-grid.svelte-15kyv2y{grid-template-columns:minmax(280px,420px);gap:16px;display:grid}@media (width<=768px){.settings-form-grid.svelte-15kyv2y{grid-template-columns:1fr}}.budget-settings-section.svelte-a747ys{width:100%}.budget-settings-grid.svelte-a747ys{gap:12px;display:grid}.budget-settings-row.svelte-a747ys{grid-template-columns:96px minmax(170px,1fr) minmax(110px,140px) minmax(110px,140px) minmax(220px,280px);align-items:start;gap:12px;display:grid}.budget-settings-period.svelte-a747ys{color:var(--text);letter-spacing:0;text-transform:uppercase;align-self:end;min-height:35px;padding-bottom:9px;font-size:12px;font-weight:700}.budget-settings-spacer.svelte-a747ys{min-height:1px}.budget-settings-help-cell.svelte-a747ys{align-self:start;min-width:0;min-height:35px}.budget-settings-help-cell.svelte-a747ys .inline-help-copy{max-width:280px;margin:22px 0 0;font-size:12px;line-height:1.35}@media (width<=768px){.budget-settings-grid.svelte-a747ys,.budget-settings-row.svelte-a747ys{grid-template-columns:1fr}.budget-settings-spacer.svelte-a747ys{display:none}}.tagging-settings-grid.svelte-18e8yem{gap:12px;display:grid}.tagging-settings-row.svelte-18e8yem{grid-template-columns:minmax(170px,1fr) minmax(150px,1fr) minmax(80px,110px) auto minmax(90px,auto);align-items:end;gap:12px;display:grid}.tagging-do-not-pass.svelte-18e8yem{color:var(--text);white-space:nowrap;align-items:center;gap:6px;min-height:35px;font-size:13px;display:flex}.tagging-row-trailer.svelte-18e8yem{align-items:center;gap:8px;min-height:35px;display:flex}.tagging-settings-empty.svelte-18e8yem{color:var(--text-muted);margin:0}.tagging-settings-actions.svelte-18e8yem{flex-wrap:wrap;gap:10px;display:flex}@media (width<=768px){.tagging-settings-row.svelte-18e8yem{grid-template-columns:1fr;align-items:stretch}.tagging-settings-actions.svelte-18e8yem,.tagging-settings-actions.svelte-18e8yem .btn{width:100%}}.pricing-recalculate-section.svelte-1cdxzyk{width:100%}.pricing-recalculate-grid.svelte-1cdxzyk{grid-template-columns:minmax(220px,320px) minmax(260px,360px);justify-content:start;align-items:end;gap:12px;width:100%;display:grid}.pricing-recalculate-date-field.svelte-1cdxzyk{grid-column:1/-1;width:100%;max-width:320px}.pricing-recalculate-filter-field.svelte-1cdxzyk{width:100%;max-width:360px}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker{width:100%}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker-trigger{justify-content:space-between;width:100%}.pricing-recalculate-actions.svelte-1cdxzyk{flex-wrap:wrap;gap:10px;display:flex}@media (width<=768px){.pricing-recalculate-grid.svelte-1cdxzyk{grid-template-columns:1fr}.pricing-recalculate-actions.svelte-1cdxzyk,.pricing-recalculate-actions.svelte-1cdxzyk .btn{width:100%}}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker-dropdown{inset:auto auto calc(100% + 6px) 0}.settings-refresh-icon.svelte-yeq2mp{flex:0 0 16px;width:16px;height:16px}.runtime-refresh-steps.svelte-yeq2mp{color:var(--text-muted);gap:8px;margin-top:14px;padding-left:18px;font-size:13px;display:grid}.runtime-refresh-step.is-ok.svelte-yeq2mp{color:var(--success)}.runtime-refresh-step.is-partial.svelte-yeq2mp{color:var(--warning)}.runtime-refresh-step.is-failed.svelte-yeq2mp{color:var(--danger)}.runtime-settings-copy.svelte-tldbe5{min-width:180px}.runtime-settings-fields.svelte-tldbe5{gap:16px;width:min(560px,100%);display:grid}.runtime-setting-row.svelte-tldbe5{grid-template-columns:minmax(220px,1fr) 180px;align-items:center;gap:20px;display:grid}.runtime-setting-description.svelte-tldbe5,.runtime-setting-managed.svelte-tldbe5{color:var(--text-muted);margin:4px 0 0;font-size:12px}.runtime-setting-managed.svelte-tldbe5{color:var(--warning)}@media (width<=720px){.runtime-setting-row.svelte-tldbe5{grid-template-columns:1fr;gap:8px}}.settings-version-footer.svelte-3naq7u{color:var(--text-muted);text-align:right;margin-top:24px;font-size:12px}.chat-message.svelte-12s99s5{border:1px solid var(--border);background:var(--bg);border-radius:10px;max-width:94%;padding:10px 12px}.chat-message.is-anchor.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border));box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent)}.chat-message.is-after-anchor.svelte-12s99s5,.chat-function-note.is-after-anchor.svelte-12s99s5{opacity:.46}.chat-message.role-user.svelte-12s99s5{align-self:flex-start}.chat-message.role-assistant.svelte-12s99s5{background:color-mix(in srgb, var(--accent) 18%, var(--bg));align-self:flex-end}.chat-message.role-system.svelte-12s99s5{background:color-mix(in srgb, var(--warning) 10%, var(--bg));align-self:center;width:100%;max-width:100%}.chat-message.role-error.svelte-12s99s5{border-color:color-mix(in srgb, var(--danger) 55%, var(--border));background:color-mix(in srgb, var(--danger) 10%, var(--bg));align-self:flex-end}.chat-message.role-error.svelte-12s99s5 .chat-role:where(.svelte-12s99s5){color:color-mix(in srgb, var(--danger) 75%, var(--text-muted))}.chat-message-meta.svelte-12s99s5{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:6px;display:flex}.chat-role.svelte-12s99s5{text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted);font-size:12px;font-weight:700}.chat-time.svelte-12s99s5{color:var(--text-muted);white-space:nowrap;font-size:11px}.chat-content.svelte-12s99s5{white-space:pre-wrap;overflow-wrap:break-word;color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;line-height:1.5}.chat-tool-calls.svelte-12s99s5{border-top:1px solid var(--border);flex-direction:column;gap:3px;margin-top:8px;padding-top:6px;display:flex}.chat-tool-call.svelte-12s99s5{color:var(--text-muted);font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px}.chat-tool-call-name.svelte-12s99s5:before{content:"⚡"}.chat-function-note.svelte-12s99s5{max-width:94%;color:var(--text-muted);background:color-mix(in srgb, var(--border) 40%, transparent);border:1px dashed var(--border);border-radius:12px;align-self:center;padding:4px 12px;font-size:12px}.chat-function-note.is-anchor.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.chat-function-note-inner.svelte-12s99s5{align-items:baseline;gap:6px;display:flex;overflow:hidden}.chat-function-label.svelte-12s99s5{text-transform:uppercase;letter-spacing:.3px;white-space:nowrap;flex-shrink:0;font-size:11px;font-weight:600}.chat-function-detail.svelte-12s99s5{white-space:nowrap;text-overflow:ellipsis;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;overflow:hidden}.chat-function-note.role-function-call.svelte-12s99s5{background:color-mix(in srgb, var(--accent) 8%, transparent);border-color:color-mix(in srgb, var(--accent) 30%, var(--border));align-self:flex-end}.chat-function-note.role-function-result.svelte-12s99s5{background:color-mix(in srgb, var(--success) 8%, transparent);border-color:color-mix(in srgb, var(--success) 30%, var(--border));align-self:flex-start}.chat-function-note.is-anchor.role-function-call.svelte-12s99s5,.chat-function-note.is-anchor.role-function-result.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.chat-function-note-details.svelte-12s99s5{width:100%}.chat-function-note-details.svelte-12s99s5>summary{cursor:pointer;list-style:none}.chat-function-note-details.svelte-12s99s5>summary::-webkit-details-marker{display:none}.chat-function-expanded.svelte-12s99s5{border-top:1px solid var(--border);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);max-height:200px;margin-top:6px;padding-top:6px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.45;overflow:auto}@media (width<=768px){.chat-message.svelte-12s99s5{max-width:100%}}.conversation-drawer.svelte-ssrzja{flex:0 0 var(--conversation-panel-width);width:var(--conversation-panel-width);background:var(--bg-surface);border-left:1px solid var(--border);z-index:12;flex-direction:column;min-width:0;height:100vh;display:flex;position:sticky;top:0}.conversation-drawer-fullscreen.svelte-ssrzja{z-index:70;border-left:0;flex-basis:auto;width:100vw;height:100dvh;position:fixed;inset:0}.conversation-drawer-fullscreen.svelte-ssrzja .conversation-resize-handle:where(.svelte-ssrzja){display:none}.conversation-resize-handle.svelte-ssrzja{z-index:2;cursor:col-resize;touch-action:none;background:0 0;border:0;border-radius:0;outline:none;width:10px;padding:0;position:absolute;top:0;bottom:0;left:-5px}.conversation-resize-handle.svelte-ssrzja:after{content:"";background:0 0;width:2px;transition:background .15s;position:absolute;top:0;bottom:0;left:4px}.conversation-resize-handle.svelte-ssrzja:hover:after,.conversation-resize-handle.svelte-ssrzja:focus-visible:after{background:color-mix(in srgb, var(--accent) 70%, var(--border))}body.conversation-panel-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.conversation-drawer-header.svelte-ssrzja{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;display:flex}.conversation-drawer-header-actions.svelte-ssrzja{align-items:center;gap:6px;display:flex}.conversation-drawer-header.svelte-ssrzja h3{font-size:16px;font-weight:700}.conversation-meta.svelte-ssrzja{color:var(--text-muted);font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px}.conversation-drawer-footer.svelte-ssrzja{border-top:1px solid var(--border);background:var(--bg-surface);flex-direction:column;flex-shrink:0;gap:9px;padding:10px 16px;display:flex}.conversation-composer.svelte-ssrzja{flex-direction:column;gap:7px;display:flex}.conversation-composer.svelte-ssrzja label:where(.svelte-ssrzja){font-size:12px;font-weight:700}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja){resize:vertical;border:1px solid var(--border);background:var(--bg);width:100%;min-height:70px;color:var(--text);font:inherit;border-radius:7px;padding:9px 10px;line-height:1.45}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja):focus{outline:2px solid color-mix(in srgb, var(--accent) 38%, transparent);outline-offset:1px}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja):disabled{opacity:.65}.conversation-composer-actions.svelte-ssrzja{justify-content:space-between;align-items:center;gap:10px;display:flex}.conversation-endpoint.svelte-ssrzja{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);font-size:11px;overflow:hidden}.conversation-send-error.svelte-ssrzja{color:var(--danger);font-size:12px}.conversation-truncated.svelte-ssrzja{color:var(--text-muted);padding:0 16px 14px;font-size:12px}.conversation-thread.svelte-ssrzja{flex-direction:column;gap:10px;padding:14px 16px 20px;display:flex}.conversation-live-status.svelte-ssrzja{color:var(--text-muted);align-items:center;gap:10px;padding:4px 16px 20px;font-size:13px;display:flex} diff --git a/internal/admin/dashboard/static/dist/assets/index-Cz8GQupq.css b/internal/admin/dashboard/static/dist/assets/index-Cz8GQupq.css deleted file mode 100644 index bae414a2e..000000000 --- a/internal/admin/dashboard/static/dist/assets/index-Cz8GQupq.css +++ /dev/null @@ -1 +0,0 @@ -:root{--bg:#111110;--bg-surface:#1e1d1c;--bg-surface-hover:#2a2420;--border:#2a2826;--text:#e8e0d6;--text-muted:#9a918a;--accent:#b8956e;--accent-hover:#d4b896;--success:#34d399;--info:#3b82f6;--warning:#f59e0b;--danger:#ef4444;--prompt-cache-color:color-mix(in srgb, var(--info) 72%, #fff);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 24%, var(--bg-surface));--cache-meter-uncached:var(--token-input);--cache-meter-local:var(--token-local);--cache-meter-prompt:var(--token-prompt);--token-input:#c0824a;--token-output:#ddb27a;--token-prompt:color-mix(in srgb, var(--info) 60%, transparent);--token-local:color-mix(in srgb, var(--info) 20%, transparent);--sidebar-width:240px;--radius:8px;--chart-grid:#2a2826;--chart-text:#9a918a;--chart-day-marker:var(--text);--chart-tooltip-bg:#1e1d1c;--chart-tooltip-border:#2a2826;--chart-tooltip-text:#e8e0d6;--cal-level-0:#161b22;--cal-level-1:color-mix(in srgb, var(--info) 15%, var(--bg-surface));--cal-level-2:color-mix(in srgb, var(--info) 25%, var(--bg-surface));--cal-level-3:color-mix(in srgb, var(--info) 36%, var(--bg-surface));--cal-level-4:color-mix(in srgb, var(--info) 48%, var(--bg-surface));--cal-level-5:color-mix(in srgb, var(--info) 60%, var(--bg-surface));--cal-level-6:color-mix(in srgb, var(--info) 73%, var(--bg-surface));--cal-level-7:color-mix(in srgb, var(--info) 87%, var(--bg-surface));--cal-level-8:var(--info);--cal-level-9:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-10:color-mix(in srgb, var(--info) 62%, #fff);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface-hover) 86%, #fff 14%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface-hover) 72%, #fff 28%);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light]{--bg:#f5f0ea;--bg-surface:#fff;--bg-surface-hover:#ece5dc;--border:#e8e0d6;--text:#2d2519;--text-muted:#7a7068;--accent:#755c3d;--accent-hover:#9a7d5a;--success:#34d399;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--prompt-cache-color:color-mix(in srgb, var(--info) 84%, #0f172a);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 18%, var(--bg-surface));--chart-grid:#e8e0d6;--chart-text:#7a7068;--chart-day-marker:var(--text);--chart-tooltip-bg:#fff;--chart-tooltip-border:#e8e0d6;--chart-tooltip-text:#2d2519;--cal-level-0:#ebedf0;--cal-level-1:color-mix(in srgb, var(--info) 12%, #fff);--cal-level-2:color-mix(in srgb, var(--info) 24%, #fff);--cal-level-3:color-mix(in srgb, var(--info) 37%, #fff);--cal-level-4:color-mix(in srgb, var(--info) 50%, #fff);--cal-level-5:color-mix(in srgb, var(--info) 64%, #fff);--cal-level-6:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-7:var(--info);--cal-level-8:color-mix(in srgb, var(--info) 85%, #000);--cal-level-9:color-mix(in srgb, var(--info) 72%, #000);--cal-level-10:color-mix(in srgb, var(--info) 60%, #000);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface) 96%, var(--accent) 4%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface) 90%, var(--accent) 10%);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#f5f0ea;--bg-surface:#fff;--bg-surface-hover:#ece5dc;--border:#e8e0d6;--text:#2d2519;--text-muted:#7a7068;--accent:#755c3d;--accent-hover:#9a7d5a;--success:#34d399;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--prompt-cache-color:color-mix(in srgb, var(--info) 84%, #0f172a);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 18%, var(--bg-surface));--chart-grid:#e8e0d6;--chart-text:#7a7068;--chart-day-marker:var(--text);--chart-tooltip-bg:#fff;--chart-tooltip-border:#e8e0d6;--chart-tooltip-text:#2d2519;--cal-level-0:#ebedf0;--cal-level-1:color-mix(in srgb, var(--info) 12%, #fff);--cal-level-2:color-mix(in srgb, var(--info) 24%, #fff);--cal-level-3:color-mix(in srgb, var(--info) 37%, #fff);--cal-level-4:color-mix(in srgb, var(--info) 50%, #fff);--cal-level-5:color-mix(in srgb, var(--info) 64%, #fff);--cal-level-6:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-7:var(--info);--cal-level-8:color-mix(in srgb, var(--info) 85%, #000);--cal-level-9:color-mix(in srgb, var(--info) 72%, #000);--cal-level-10:color-mix(in srgb, var(--info) 60%, #000);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface) 96%, var(--accent) 4%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface) 90%, var(--accent) 10%);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5}body.dashboard-modal-open{overflow:hidden}.app{height:100vh;min-height:0;display:flex;overflow:hidden}.badge{background:var(--accent);color:#fff;text-transform:uppercase;letter-spacing:.5px;border-radius:10px;padding:2px 8px;font-size:10px;font-weight:600}.auth-dialog{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:min(440px,100%);padding:22px;box-shadow:0 24px 70px #00000061}.auth-dialog-header{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px;display:flex}.auth-dialog h2{margin-top:2px;font-size:22px;line-height:1.2}.auth-dialog-close{background:var(--bg);border:1px solid var(--border);width:32px;min-width:32px;height:32px;color:var(--text-muted);cursor:pointer;font:inherit;border-radius:6px;flex:0 0 32px;justify-content:center;align-items:center;padding:0;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.auth-dialog-close:hover{color:var(--text);background:var(--bg-surface-hover)}.auth-dialog-close:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.auth-dialog-hint{color:var(--text-muted);font-size:13px}.auth-dialog-error{color:var(--danger);font-size:13px;font-weight:600}.auth-dialog-form{gap:10px;margin-top:18px;display:grid}.auth-dialog-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.content{-webkit-overflow-scrolling:touch;flex:1 1 0;width:100%;min-width:0;min-height:0;padding:32px;transition:width .2s;overflow-y:auto;container:dashboard-content/inline-size}.content>*{width:100%;max-width:1336px;margin-inline:auto}body.dashboard-modal-open .content{overflow-y:hidden}.content.interactions-open>*{max-width:none}.page-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.page-header h2{letter-spacing:-.3px;font-size:22px;font-weight:700}.page-header-controls{align-items:center;gap:12px;display:flex}.page-with-sticky-date{grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:12px;display:grid}.page-with-sticky-date>*{grid-column:1/-1}.page-with-sticky-date>.date-range-page-header{grid-column:1}.page-with-sticky-date>.sticky-date-range{z-index:8;grid-column:2;justify-self:end;position:sticky;top:16px}.model-count{color:var(--text-muted);font-size:14px}.provider-status-section{margin-top:28px;scroll-margin-top:24px}.cards{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:28px;display:grid}.card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.card-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:8px;font-size:12px;font-weight:600}.card-value{letter-spacing:-.5px;font-size:28px;font-weight:700}.cache-meter{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:28px;padding:24px}.chart-container{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.chart-container h3{margin-bottom:16px;font-size:16px;font-weight:600}.chart-container-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.chart-container-header h3{margin-bottom:0}.chart-wrapper{height:210px;position:relative}.live-dot{background:var(--text-muted);border-radius:50%;flex-shrink:0;width:8px;height:8px}.live-dot.is-streaming{background:var(--success);position:relative}.live-dot.is-streaming:after{content:"";z-index:-1;background:color-mix(in srgb, var(--success) 55%, transparent);border-radius:50%;animation:1.8s ease-out infinite live-dot-pulse;position:absolute;inset:0}@media (prefers-reduced-motion:reduce){.live-dot.is-streaming:after{opacity:0;animation:none}}@keyframes live-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(2.5)}to{opacity:0;transform:scale(2.5)}}.alert{border-radius:var(--radius);margin-bottom:20px;padding:12px 16px;font-size:14px}.alert-warning{color:var(--warning);background:#f59e0b1a;border:1px solid #f59e0b4d}.table-toolbar{align-items:center;gap:12px;margin-bottom:16px;display:flex}.table-toolbar-main{flex:1;min-width:0}.table-toolbar-actions{justify-content:flex-end;margin-left:auto;display:flex}input:is([type=text],[type=date],[type=number]){background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:8px 12px;font-family:inherit;font-size:13px}input:is([type=text],[type=date],[type=number]):focus{border-color:var(--accent)}input:is([type=text],[type=date],[type=number]):disabled,textarea:disabled,.form-input:disabled{opacity:.6;cursor:not-allowed}.table-wrapper{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table th{text-align:left;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);background:var(--bg);border-bottom:1px solid var(--border);padding:12px 16px;font-size:12px;font-weight:600}.data-table th.model-actions-header{text-align:right;white-space:nowrap;width:1%;min-width:156px}.data-table td{border-bottom:1px solid var(--border);padding:10px 16px}.data-table tr:last-child td{border-bottom:none}.data-table tr:hover td{background:var(--bg-surface-hover)}.mono{font-family:SF Mono,Menlo,Consolas,monospace}.font-size-md{font-size:13px}.col-price,.data-table th.col-price{text-align:right}td.col-price{color:var(--text-muted);white-space:nowrap;font-family:SF Mono,Menlo,Consolas,monospace;font-size:13px}.provider-badge{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:2px 10px;font-size:12px;font-weight:500;display:inline-block}.empty-state{text-align:center;color:var(--text-muted);padding:48px 0;font-size:14px}.empty-state-icon{width:auto;height:auto;max-height:160px;color:var(--text-muted);margin:0 auto;display:block}.empty-state-icon text{fill:var(--text-muted);font-family:inherit;font-weight:600}.chart-empty-overlay{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.chart-empty-overlay .empty-state-icon{width:auto;max-width:90%;height:auto;max-height:195px}.loading-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:16px;height:16px;animation:.8s linear infinite loading-spin}@keyframes loading-spin{to{transform:rotate(360deg)}}.table-action-btn{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:6px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .15s;display:inline-flex}.table-action-btn:hover:not(:disabled){background:var(--bg-surface-hover)}.table-action-btn:disabled{opacity:.45;cursor:default}.table-action-btn-danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--border))}.table-action-btn-active{color:var(--accent-strong,var(--accent));background:color-mix(in srgb, var(--accent) 12%, var(--bg));border-color:color-mix(in srgb, var(--accent) 38%, var(--border))}.table-action-btn-active:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 18%, var(--bg-surface-hover))}.table-action-btn-failover-active{color:var(--info);background:color-mix(in srgb, var(--cache-meter-prompt) 35%, var(--bg));border-color:color-mix(in srgb, var(--info) 45%, var(--border));position:relative}.table-action-btn-failover-active:hover:not(:disabled){background:color-mix(in srgb, var(--cache-meter-prompt) 45%, var(--bg-surface-hover))}.table-icon-btn{border-radius:6px;gap:0;width:32px;min-width:32px;height:32px;padding:0}.table-icon-btn.table-action-btn-active{position:relative}.table-icon-btn.table-action-btn-active:after{content:"";background:var(--accent);width:6px;height:6px;box-shadow:0 0 0 2px var(--bg-surface);border-radius:999px;position:absolute;top:4px;right:4px}.table-icon-btn.table-action-btn-failover-active:after{content:"";background:var(--info);width:6px;height:6px;box-shadow:0 0 0 2px var(--bg-surface);border-radius:999px;position:absolute;top:4px;right:4px}.table-icon-svg{flex-shrink:0;width:14px;height:14px}.model-editor{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:16px;padding:24px}.alias-kind-badge{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--accent);letter-spacing:.2px;text-transform:uppercase;border-color:color-mix(in srgb, var(--accent) 55%, var(--border));border-radius:999px;justify-content:center;align-items:center;gap:4px;padding:0 10px;font-size:11px;font-weight:600;display:inline-flex}.form h3{font-size:20px;font-weight:700}.form-kicker,.form-hint{color:var(--text-muted);font-size:13px}.alias-actions-cell{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.model-list-actions{white-space:nowrap;flex-wrap:nowrap}.model-list-actions .table-icon-btn{flex:0 0 32px}.model-list-actions .alias-toggle{flex:none}.alias-toggle{border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:6px 10px;font-family:inherit;font-size:12px;transition:all .15s;display:inline-flex}.alias-toggle:hover:not(:disabled){background:var(--bg-surface-hover)}.alias-toggle:disabled{opacity:.45;cursor:default}.alias-toggle-track{background:color-mix(in srgb, var(--border) 80%, var(--bg));border-radius:6px;width:34px;height:18px;transition:background .15s;position:relative}.alias-toggle-thumb{background:var(--text-muted);border-radius:6px;width:16px;height:16px;transition:transform .15s,background .15s;position:absolute;top:1px;left:2px}.alias-toggle.enabled{border-color:color-mix(in srgb, var(--success) 50%, var(--border))}.alias-toggle.enabled .alias-toggle-track{background:color-mix(in srgb, var(--success) 55%, var(--bg))}.alias-toggle.enabled .alias-toggle-thumb{background:#fff;transform:translate(14px)}.alias-toggle.restricted{border-color:color-mix(in srgb, var(--accent) 50%, var(--border));color:color-mix(in srgb, var(--accent) 70%, var(--text))}.alias-toggle.restricted .alias-toggle-track{background:color-mix(in srgb, var(--accent) 55%, var(--bg))}.editor-header{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:20px;display:flex}.form{flex-direction:column;gap:16px;display:flex}.auth-key-editor{background:color-mix(in srgb, var(--bg-surface) 82%, var(--bg) 18%)}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.form-field{flex-direction:column;gap:8px;display:flex}.form-field-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);font-size:12px;font-weight:600;display:inline-block}.vm-target-row{align-items:center;gap:8px;display:flex}.vm-target-row .vm-target-model{flex:auto;min-width:0}.vm-target-row .vm-target-weight{flex:0 0 88px;width:88px}.vm-status-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.vm-status-row .vm-status-toggle{margin-left:auto}.form-error{border:1px solid color-mix(in srgb, var(--danger) 42%, var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface));color:var(--danger);overflow-wrap:anywhere;margin:0;padding:10px 12px;font-size:13px;font-weight:600;line-height:1.4}.form-error:empty{display:none}.form-field-error{color:var(--danger);overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:1.4}.form-field-required{color:var(--danger);margin-left:3px}:is(input,textarea,select)[aria-invalid=true]{border-color:color-mix(in srgb, var(--danger) 60%, var(--border))}:is(input,textarea,select)[aria-invalid=true]:focus{border-color:var(--danger)}textarea{resize:vertical;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:60px;color:var(--text);outline:none;padding:10px 12px;font-family:inherit;font-size:13px}textarea:focus{border-color:var(--accent)}.form-input{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:38px;color:var(--text);outline:none;padding:8px 10px;font-family:inherit;font-size:13px}.form-input:focus{border-color:var(--accent)}.form-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.failover-target-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.data-table tr.alias-row.is-valid td{background:var(--alias-row-valid-bg)}.data-table tr.alias-row.is-valid:hover td{background:var(--alias-row-valid-bg-hover)}.data-table tr.alias-row:not(.is-valid) td{background:color-mix(in srgb, var(--accent) 10%, var(--bg-surface))}.data-table tr.alias-row:not(.is-valid):hover td{background:color-mix(in srgb, var(--accent) 16%, var(--bg-surface-hover))}.data-table tr.alias-row.is-disabled td{background:var(--bg-surface);opacity:.58}.data-table tr.alias-row.is-disabled:hover td{background:var(--bg-surface-hover);opacity:.72}.data-table tr.model-access-disabled-row td{background:color-mix(in srgb, var(--danger) 6%, var(--bg-surface))}.data-table tr.model-access-disabled-row:hover td{background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface-hover))}.workflow-section-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.workflow-section-head h4{font-size:14px;font-weight:700}.workflow-preview{flex-direction:column;gap:12px;display:flex}.workflow-feature-toggles{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.workflow-feature-toggle{border:1px solid var(--border);background:var(--bg);border-radius:10px;align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:500;display:flex}.workflow-feature-toggle input{width:16px;height:16px}.model-chart-section{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:24px;padding:24px}.model-chart-section h3{margin:0;font-size:16px;font-weight:600}.model-chart-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;display:flex}.bar-chart-wrap{width:100%;height:180px;position:relative}.form-select,.usage-log-select{appearance:none;background-color:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);cursor:pointer;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 17px),calc(100% - 12px);background-repeat:no-repeat;background-size:5px 5px;outline:none;min-width:140px;padding:8px 34px 8px 12px;font-family:inherit;font-size:13px}.form-select:disabled,.usage-log-select:disabled{cursor:not-allowed;opacity:.6}.form-select:focus,.usage-log-select:focus{border-color:var(--accent)}.form-select{width:100%;min-width:0}.usage-label-chips{flex-wrap:wrap;gap:4px;max-width:280px;display:inline-flex}.usage-label-chip{border:1px solid color-mix(in srgb, var(--label-color,var(--accent)) 45%, var(--border));background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg));min-height:20px;color:var(--text);white-space:nowrap;cursor:pointer;border-radius:999px;align-items:center;padding:1px 9px;font-family:inherit;font-size:11px;font-style:normal;font-weight:600;line-height:1.4;transition:background .15s,border-color .15s;display:inline-flex}.usage-label-chip:hover{background:color-mix(in srgb, var(--label-color,var(--accent)) 26%, var(--bg))}.usage-label-chip.active{background:color-mix(in srgb, var(--label-color,var(--accent)) 32%, var(--bg));border-color:var(--label-color,var(--accent));box-shadow:0 0 0 1px color-mix(in srgb, var(--label-color,var(--accent)) 55%, transparent)}@keyframes audit-live-summary-stripe-blink{0%,to{opacity:.9}50%{opacity:.28}}.audit-status-badge{border:1px solid var(--border);letter-spacing:.2px;background:var(--bg-surface);border-radius:999px;justify-content:center;align-items:center;min-width:46px;height:24px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.audit-status-badge.status-success{color:var(--success);border-color:color-mix(in srgb, var(--success) 50%, var(--border))}.audit-status-badge.status-warning{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 50%, var(--border))}.audit-status-badge.status-error{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--border))}.audit-status-badge.status-neutral{color:var(--text-muted)}.audit-status-badge.status-unknown{color:var(--text-muted);border-color:color-mix(in srgb, var(--border) 75%, transparent)}.audit-pane{border:1px solid var(--border);background:var(--bg);border-top:0;border-radius:0 0 8px 8px;min-width:0;padding:12px}.audit-pane h5{text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted);font-size:11px;font-weight:600}.audit-prompt-cache-pill{border:1px solid color-mix(in srgb, var(--prompt-cache-color) 45%, var(--border));background:var(--prompt-cache-color-bg);min-height:20px;color:var(--prompt-cache-color);letter-spacing:.02em;text-transform:none;border-radius:999px;align-items:center;padding:2px 8px;font-size:11px;font-weight:700;display:inline-flex}.audit-prompt-cache-highlight{color:var(--prompt-cache-color);font-weight:700}.audit-audio{white-space:normal;flex-direction:column;gap:8px;display:flex}.audit-audio-player{width:100%;max-width:420px;height:36px}.audit-audio-meta{color:var(--text-muted);font-size:12px}.audit-audio-empty{align-items:flex-start;padding:4px 0}.audit-audio-icon{font-size:20px;line-height:1}.audit-audio-note{color:var(--text-muted);font-size:12px}.audit-audio-metadata{flex-direction:column;gap:2px;margin-top:4px;font-size:12px;display:flex}.audit-audio-meta-row{gap:8px;display:flex}.audit-audio-meta-key{color:var(--text-muted);min-width:120px}.conversation-body-highlight{border-left:2px solid color-mix(in srgb, var(--accent) 70%, var(--border));background:color-mix(in srgb, var(--accent) 10%, transparent);cursor:pointer;line-height:inherit;border-radius:2px;margin:0 0 0 -2px;padding:0 0 0 2px;display:inline}.conversation-body-highlight:hover{background:color-mix(in srgb, var(--accent) 18%, transparent)}.conversation-body-highlight.conversation-system{border-left-color:color-mix(in srgb, var(--warning) 70%, var(--border));background:color-mix(in srgb, var(--warning) 10%, transparent)}.conversation-body-highlight.conversation-user{border-left-color:color-mix(in srgb, var(--accent) 75%, var(--border));background:color-mix(in srgb, var(--accent) 12%, transparent)}.conversation-body-highlight.conversation-assistant{border-left-color:color-mix(in srgb, var(--success) 65%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}#interactions-drawer-content{flex:1;min-height:0;overflow-y:auto}.pagination{justify-content:space-between;align-items:center;padding:12px 0 0;display:flex}.btn{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 16px;font-family:inherit;font-size:13px;transition:all .15s}.btn:hover:not(:disabled){background:var(--bg-surface-hover)}.btn-primary{background:var(--accent);border-color:color-mix(in srgb, var(--accent) 70%, #000 10%);color:#fff;font-weight:600;box-shadow:0 10px 22px #3b82f62e}.btn-primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 90%, #fff 10%);border-color:color-mix(in srgb, var(--accent) 78%, #000 12%)}.btn-danger-outline{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 55%, var(--border));background:0 0;font-weight:600}.btn-danger-outline:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 10%, var(--bg));border-color:color-mix(in srgb, var(--danger) 75%, var(--border))}.btn-danger{color:#fff;border-color:color-mix(in srgb, var(--danger) 76%, #000 12%);background:var(--danger);box-shadow:0 10px 22px color-mix(in srgb, var(--danger) 20%, transparent);font-weight:600}.btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 90%, #fff 10%);border-color:color-mix(in srgb, var(--danger) 82%, #000 14%)}.btn-with-icon{justify-content:center;align-items:center;gap:8px;display:inline-flex}.btn-with-icon .table-icon-svg{width:16px;height:16px}.btn:disabled{opacity:.4;cursor:default}.settings-panel{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.inline-help-section{flex-direction:column;gap:2px;display:flex}.inline-help-title-row{align-items:center;gap:10px;display:inline-flex}.inline-help-title-row h2,.inline-help-title-row h3{margin-bottom:0}.inline-help-title-row h2:empty,.inline-help-title-row h3:empty{display:none}.inline-help-toggle{border:1px solid color-mix(in srgb, var(--accent) 28%, var(--border));width:16px;height:16px;color:var(--accent);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:color .18s,border-color .18s;display:inline-flex;position:relative}.inline-help-toggle:before{content:"";pointer-events:auto;background:0 0;width:32px;height:32px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.inline-help-toggle:hover{border-color:color-mix(in srgb, var(--accent) 48%, var(--border));color:var(--text);background:0 0}.inline-help-toggle:active{background:0 0}.inline-help-toggle:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 28%, transparent);outline-offset:2px}.inline-help-toggle-icon{justify-content:center;align-items:center;width:100%;height:100%;padding-bottom:1px;font-size:13px;font-weight:700;line-height:1;transition:transform .52s cubic-bezier(.22,.72,.12,1);display:inline-flex;transform:rotate(0)}.inline-help-copy{max-width:780px;color:var(--text-muted);margin-top:2px;font-size:14px}.settings-select{width:100%}.settings-refresh-section{border-top:1px solid var(--border);justify-items:start;gap:12px;margin-top:24px;padding-top:22px;display:grid}.settings-refresh-section h3{font-size:18px}.settings-refresh-section p{max-width:720px;color:var(--text-muted);font-size:14px;line-height:1.55}.budget-list{gap:10px;padding:10px 0;display:grid}.budget-row{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:minmax(0,1fr);align-items:center;gap:16px;padding:12px 14px;display:grid}.budget-row-main{min-width:0}.budget-row-head{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;min-width:0;display:grid}.budget-scope-value{width:fit-content;max-width:100%;min-height:24px;color:var(--text);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;justify-self:start;align-items:center;gap:5px;padding:2px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;display:inline-flex;overflow:hidden}.budget-user-path{border:1px solid color-mix(in srgb, var(--accent) 32%, var(--border));background:color-mix(in srgb, var(--accent) 9%, var(--bg))}.budget-label{border:1px solid color-mix(in srgb, var(--label-color,var(--accent)) 45%, var(--border));background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg))}.budget-scope-icon{stroke-width:2.2px;opacity:.85;flex:0 0 12px;width:12px;height:12px}.budget-row-meta{min-width:0;color:var(--text-muted);align-items:center;gap:8px;font-size:12px;display:inline-flex}.budget-source{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);border-radius:999px;padding:2px 7px;font-size:11px}.budget-row-period{justify-content:center;min-width:0;display:flex}.budget-row-controls{justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.budget-bars{gap:6px;margin-top:10px;display:grid}.budget-bar-line{grid-template-columns:118px minmax(0,1fr);align-items:center;gap:10px;display:grid}.budget-bar-label{color:var(--text-muted);justify-content:space-between;align-items:center;gap:6px;font-size:11px;line-height:1;display:flex}.budget-bar-percent{font-weight:700}.budget-bar-track{background:color-mix(in srgb, var(--border) 75%, var(--bg));border-radius:999px;height:16px;position:relative;overflow:hidden}.budget-bar-fill{border-radius:inherit;min-width:0;height:100%;transition:width .2s}.budget-bar-fill-usage{background:color-mix(in srgb, var(--success) 82%, var(--accent))}.budget-bar-fill-danger{background:var(--danger)}.budget-bar-text-row{z-index:1;pointer-events:none;color:var(--text);position:absolute;inset:0}.budget-bar-text{text-overflow:ellipsis;white-space:nowrap;max-width:min(44%,190px);font-size:11px;font-weight:700;line-height:12px;position:absolute;top:50%;overflow:hidden}.budget-bar-text-center{max-width:min(46%,240px);left:50%;transform:translate(-50%,-50%)}.budget-bar-text-end{text-align:right;max-width:min(34%,180px);right:8px;transform:translateY(-50%)}.budget-period-label{border:1px solid var(--border);color:var(--text);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:5px;padding:2px 7px;font-size:11px;font-weight:600;display:inline-flex}.budget-period-icon{stroke-width:2.2px;flex:0 0 12px;width:12px;height:12px}.budget-period-label-monthly{border-color:color-mix(in srgb, #30302c 62%, var(--border));background:color-mix(in srgb, #30302c 12%, var(--bg));color:color-mix(in srgb, #30302c 34%, var(--text) 66%)}.budget-period-label-weekly{border-color:color-mix(in srgb, #68765c 62%, var(--border));background:color-mix(in srgb, #68765c 12%, var(--bg));color:color-mix(in srgb, #68765c 34%, var(--text) 66%)}.budget-period-label-daily{border-color:color-mix(in srgb, #b5652d 62%, var(--border));background:color-mix(in srgb, #b5652d 12%, var(--bg));color:color-mix(in srgb, #b5652d 34%, var(--text) 66%)}.budget-period-label-hourly{border-color:color-mix(in srgb, #783f22 62%, var(--border));background:color-mix(in srgb, #783f22 12%, var(--bg));color:color-mix(in srgb, #783f22 34%, var(--text) 66%)}.budget-period-label-custom{border-style:dashed;border-color:color-mix(in srgb, #bfa584 68%, var(--border));background:color-mix(in srgb, #bfa584 16%, var(--bg));color:color-mix(in srgb, #8b6f4f 34%, var(--text) 66%)}[data-theme=light] .budget-period-label-monthly{color:#30302c}[data-theme=light] .budget-period-label-weekly{color:#68765c}[data-theme=light] .budget-period-label-daily{color:#b5652d}[data-theme=light] .budget-period-label-hourly{color:#783f22}[data-theme=light] .budget-period-label-custom{color:#8b6f4f}@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .budget-period-label-monthly{color:#30302c}:root:not([data-theme=dark]) .budget-period-label-weekly{color:#68765c}:root:not([data-theme=dark]) .budget-period-label-daily{color:#b5652d}:root:not([data-theme=dark]) .budget-period-label-hourly{color:#783f22}:root:not([data-theme=dark]) .budget-period-label-custom{color:#8b6f4f}}.budget-row-actions{flex-flow:wrap;justify-content:flex-end;align-items:center;gap:6px;display:flex}.budget-action-btn{white-space:nowrap;justify-content:center;gap:0;width:28px;min-width:0;height:28px;padding:0;transition:width .18s,border-color .15s,background .15s,color .15s;overflow:hidden}.budget-action-btn:hover,.budget-action-btn:focus-visible{gap:6px;width:82px;padding:0 9px}.budget-action-label{opacity:0;max-width:0;transition:max-width .18s,opacity .12s;overflow:hidden}.budget-action-btn:hover .budget-action-label,.budget-action-btn:focus-visible .budget-action-label{opacity:1;max-width:58px}.budget-action-btn-warning{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 50%, var(--border))}.budget-action-icon{flex:0 0 14px;width:14px;height:14px}.budget-editor{background:color-mix(in srgb, var(--bg-surface) 86%, var(--bg) 14%)}.budget-settings-actions{flex-wrap:wrap;gap:10px;display:flex}.budget-reset-dialog{max-width:460px}.form-action-icon{flex:0 0 16px;width:16px;height:16px}.settings-refresh-alert{margin-top:16px;margin-bottom:0}@media (width<=768px){.badge{display:none}.content{width:100%;margin:0 auto;padding:20px}.auth-dialog{padding:18px}.auth-dialog-actions{flex-direction:column-reverse}.auth-dialog-actions .btn{width:100%}.cards{grid-template-columns:repeat(2,1fr)}.page-header{flex-wrap:wrap;gap:12px}.page-header h2{width:100%}.page-header-controls{flex-wrap:wrap;justify-content:space-between;width:100%}.page-with-sticky-date{grid-template-columns:minmax(0,1fr)}.page-with-sticky-date>.date-range-page-header,.page-with-sticky-date>.sticky-date-range{grid-column:1}.page-with-sticky-date>.date-range-page-header{margin-bottom:12px}.page-with-sticky-date>.sticky-date-range{width:100%;margin-bottom:24px;top:10px}.sticky-date-range .date-picker-trigger{justify-content:space-between;width:100%}.usage-log-select{min-width:0}.budget-row{grid-template-columns:1fr}.budget-row-controls{flex-wrap:wrap}.budget-bar-line{grid-template-columns:1fr;gap:5px}.form-grid,.workflow-feature-toggles{grid-template-columns:1fr}.workflow-section-head{flex-direction:column;align-items:flex-start}.table-toolbar{flex-direction:column;align-items:stretch}.table-toolbar-actions{justify-content:stretch;margin-left:0}.table-toolbar-actions .btn{width:100%}.model-editor{padding:16px}.alias-actions-cell,.editor-header{flex-direction:column;align-items:flex-start}.alias-actions-cell .table-action-btn,.editor-header .table-action-btn{width:100%}.alias-actions-cell .table-icon-btn,.editor-header .table-icon-btn{width:36px}.model-list-actions{flex-flow:row;align-items:center}.model-list-actions .table-action-btn{width:auto}.model-list-actions .table-icon-btn{flex-basis:32px;width:32px}.model-editor .editor-header{flex-direction:row;align-items:flex-start}.model-editor .editor-header>:first-child{flex:1;min-width:0}.model-editor .editor-header .dialog-close-btn{flex:0 0 32px;align-self:flex-start;width:32px;min-width:32px}.settings-panel{padding:18px}.budget-settings-actions,.budget-settings-actions .btn{width:100%}}.workflow-conn{background:color-mix(in srgb, var(--accent) 44%, var(--border));flex:1 1 0;width:auto;min-width:13px;height:2px;position:relative}.workflow-conn:after{content:"";background:color-mix(in srgb, var(--accent) 44%, var(--border));clip-path:polygon(0 0,100% 50%,0 100%);width:7px;height:9px;position:absolute;top:50%;right:-1px;transform:translateY(-50%)}.workflow-node{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-surface);text-align:center;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:4px;min-width:72px;padding:8px 12px;display:flex}.auth-key-description{color:var(--text-muted);max-width:220px;font-size:13px}.auth-key-status-badge{border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.auth-key-status-active{background:color-mix(in srgb, var(--success) 12%, var(--bg));border:1px solid color-mix(in srgb, var(--success) 30%, var(--border));color:var(--success)}.auth-key-status-inactive{background:color-mix(in srgb, var(--danger) 10%, var(--bg));border:1px solid color-mix(in srgb, var(--danger) 30%, var(--border));color:var(--danger)}.mcp-server-advanced{border:1px solid var(--border);border-radius:var(--radius);background:color-mix(in srgb, var(--bg-surface) 72%, var(--bg) 28%);overflow:hidden}.mcp-server-advanced>summary{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;list-style:none;display:flex}.mcp-server-advanced>summary::-webkit-details-marker{display:none}.mcp-server-advanced>summary:after{border-right:2px solid var(--text-muted);border-bottom:2px solid var(--text-muted);content:"";flex:none;width:7px;height:7px;transition:transform .15s;transform:rotate(45deg)}.mcp-server-advanced[open]>summary:after{transform:rotate(225deg)}.mcp-server-advanced-summary-copy{flex-direction:column;gap:2px;min-width:0;display:flex}.mcp-server-advanced-title{font-size:13px;font-weight:600}.mcp-server-advanced-fields{border-top:1px solid var(--border);flex-direction:column;gap:16px;padding:14px;display:flex}.copy-feedback-btn{align-items:center;gap:6px;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.copy-feedback-btn-copied{background:color-mix(in srgb, var(--success) 12%, var(--bg));border-color:color-mix(in srgb, var(--success) 40%, var(--border));color:var(--success)}.rate-limit-pressure-row{background-image:linear-gradient(to right, color-mix(in srgb, var(--success) 16%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.rate-limit-pressure-row.rate-limit-pressure-high{background-image:linear-gradient(to right, color-mix(in srgb, var(--warning) 20%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.rate-limit-pressure-row.rate-limit-pressure-full{background-image:linear-gradient(to right, color-mix(in srgb, var(--danger) 22%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.table-icon-btn.rate-limit-gauge-inherited{color:var(--accent-strong,var(--accent));background:linear-gradient(to right, color-mix(in srgb, var(--accent) 22%, var(--bg)) 50%, var(--bg) 50%);border-color:color-mix(in srgb, var(--accent) 30%, var(--border))}.auth-dialog-input-icon{width:16px;height:16px;color:var(--text-muted);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.auth-dialog-input-shell:focus-within .auth-dialog-input-icon{color:var(--accent)}.auth-dialog-submit-icon{flex:0 0 16px;width:16px;height:16px}.nav-icon{flex:0 0 18px;width:18px;height:18px}.api-key-open-icon{flex:0 0 15px;width:15px;height:15px}.theme-icon{flex:0 0 14px;width:14px;height:14px}.theme-toggle-mobile .theme-icon{flex-basis:16px;width:16px;height:16px}@media (width<=768px){.sidebar-footer .api-key-open-icon{flex-basis:16px;width:16px;height:16px}}.failover-drafts-loading{min-height:96px}.models-loading-state{top:16px;left:var(--sidebar-width);z-index:110;pointer-events:none;--loading-state-min-height:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-surface);width:fit-content;box-shadow:0 8px 24px color-mix(in srgb, var(--bg) 70%, transparent);margin:0 auto;padding:10px 14px;position:fixed;right:0}@media (width<=768px){.models-loading-state{left:60px}}.sidebar.sidebar-collapsed~.content .models-loading-state{left:60px}.alias-create-icon{flex:0 0 16px;width:16px;height:16px}.pricing-override-remove-row{margin-bottom:1px}@media (width<=768px){.pricing-override-remove-row{margin-bottom:0}}.pricing-recalculate-dialog{max-width:480px}.settings-refresh-btn.is-refreshing .settings-refresh-icon{transform-origin:50%;animation:.8s linear infinite loading-spin}.cost-source-icon{width:14px;height:14px;color:var(--success);cursor:help;vertical-align:-2px;stroke-width:2px;margin-left:4px}.cache-savings-icon{width:14px;height:14px;color:var(--accent);cursor:help;vertical-align:-2px;stroke-width:2px;margin-left:4px}.theme-toggle.svelte-1keql7b{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;margin-bottom:10px;padding:2px;display:inline-flex}.theme-btn.svelte-1keql7b{width:28px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:all .15s;display:flex}.theme-btn.svelte-1keql7b:hover{color:var(--text)}.theme-btn.active.svelte-1keql7b{background:var(--accent);color:#fff}.theme-btn.svelte-1keql7b:focus-visible,.theme-toggle-mobile.svelte-1keql7b:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.theme-toggle-mobile.svelte-1keql7b{background:var(--bg);border:1px solid var(--border);width:36px;height:36px;color:var(--text-muted);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:none}.theme-toggle-mobile.svelte-1keql7b:hover{color:var(--text)}.theme-toggle.is-compact.svelte-1keql7b{display:none}.theme-toggle-mobile.is-compact.svelte-1keql7b{margin:0 auto;display:flex}@media (width<=768px){.theme-toggle.svelte-1keql7b{display:none}.theme-toggle-mobile.svelte-1keql7b{margin:0 auto;display:flex}}.sidebar.svelte-1nwtzae{flex:0 0 var(--sidebar-width);width:var(--sidebar-width);background:var(--bg-surface);border-right:1px solid var(--border);-webkit-overflow-scrolling:touch;z-index:10;flex-direction:column;max-height:100vh;transition:flex-basis .2s,width .2s;display:flex;position:sticky;top:0;overflow:hidden auto}.sidebar.sidebar-resizing.svelte-1nwtzae{transition:none}.sidebar-header.svelte-1nwtzae{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:20px;display:flex}.sidebar-logo.svelte-1nwtzae{width:28px;height:28px;color:var(--accent);flex-shrink:0}.sidebar-logo.svelte-1nwtzae svg{width:100%;height:100%}.sidebar-header.svelte-1nwtzae h1{letter-spacing:-.3px;font-size:18px;font-weight:700}.sidebar-nav.svelte-1nwtzae{flex-direction:column;flex:1;gap:4px;padding:12px;display:flex}.nav-item.svelte-1nwtzae{border-radius:var(--radius);color:var(--text-muted);align-items:center;gap:10px;padding:8px 12px;font-size:14px;font-weight:500;text-decoration:none;transition:all .15s;display:flex}.nav-item.svelte-1nwtzae:hover{background:var(--bg-surface-hover);color:var(--text)}.nav-item.active.svelte-1nwtzae{background:var(--accent);color:#fff}.nav-label.svelte-1nwtzae{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.sidebar-footer.svelte-1nwtzae{border-top:1px solid var(--border);padding:16px}.api-key-section.svelte-1nwtzae{gap:8px;display:grid}.api-key-open-btn.svelte-1nwtzae{border:1px solid var(--accent);border-radius:var(--radius);width:100%;color:var(--accent);cursor:pointer;background:0 0;justify-content:center;align-items:center;gap:8px;padding:8px 10px;font-family:inherit;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s;display:inline-flex}.api-key-open-btn.svelte-1nwtzae:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);border-color:color-mix(in srgb, var(--accent) 78%, var(--text));color:color-mix(in srgb, var(--accent) 78%, var(--text))}.api-key-open-btn.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.sidebar-toggle.svelte-1nwtzae{cursor:ew-resize;z-index:11;background:0 0;border:none;flex:0 0 6px;width:6px;height:100vh;padding:0;transition:background .15s;position:sticky;top:0}.sidebar-toggle.svelte-1nwtzae:hover{background:color-mix(in srgb, var(--accent) 15%, transparent)}.sidebar-toggle.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}body.sidebar-resizing{cursor:ew-resize;-webkit-user-select:none;user-select:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-header:where(.svelte-1nwtzae){justify-content:center;padding:16px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-header:where(.svelte-1nwtzae) h1,.sidebar.sidebar-collapsed.svelte-1nwtzae .badge{display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-nav:where(.svelte-1nwtzae) .nav-item:where(.svelte-1nwtzae){justify-content:center;padding:10px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-nav:where(.svelte-1nwtzae) .nav-label:where(.svelte-1nwtzae){display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae){padding:8px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .api-key-section:where(.svelte-1nwtzae){display:none}@media (width<=768px){.sidebar.svelte-1nwtzae{flex-basis:60px;width:60px}.sidebar-header.svelte-1nwtzae{justify-content:center;padding:16px}.sidebar-header.svelte-1nwtzae h1{display:none}.sidebar-nav.svelte-1nwtzae .nav-item:where(.svelte-1nwtzae){justify-content:center;padding:10px}.sidebar-nav.svelte-1nwtzae .nav-item:where(.svelte-1nwtzae) .nav-label:where(.svelte-1nwtzae){display:none}.sidebar-footer.svelte-1nwtzae{gap:8px;padding:8px;display:grid}.sidebar-footer.svelte-1nwtzae .api-key-section:where(.svelte-1nwtzae),.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .api-key-section:where(.svelte-1nwtzae){display:grid}.sidebar-footer.svelte-1nwtzae .api-key-open-btn:where(.svelte-1nwtzae){justify-self:center;width:36px;height:36px;min-height:36px;padding:0}.sidebar-footer.svelte-1nwtzae .api-key-open-btn:where(.svelte-1nwtzae) span,.sidebar-toggle.svelte-1nwtzae{display:none}}.dialog-close-btn.svelte-11l1bb5{background:var(--bg);border:1px solid var(--border);width:32px;min-width:32px;height:32px;color:var(--text-muted);cursor:pointer;font:inherit;border-radius:6px;flex:0 0 32px;justify-content:center;align-items:center;padding:0;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.dialog-close-btn.svelte-11l1bb5:hover{color:var(--text);background:var(--bg-surface-hover)}.dialog-close-btn.svelte-11l1bb5:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.auth-dialog-backdrop.svelte-17e0w4c,.editor-modal-backdrop.svelte-17e0w4c{z-index:80;background:#0000007a;position:fixed;inset:0}.auth-dialog-shell.svelte-17e0w4c{z-index:90;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.editor-modal-shell.svelte-17e0w4c{z-index:90;place-items:center;padding:20px;display:grid;position:fixed;inset:0;overflow-y:auto}.editor-modal-shell.svelte-17e0w4c>*{overscroll-behavior:contain;width:min(760px,100%);max-height:min(100vh - 40px,960px);margin:0;overflow:auto;box-shadow:0 24px 70px #00000061}@media (width<=768px){.auth-dialog-shell.svelte-17e0w4c,.editor-modal-shell.svelte-17e0w4c{align-items:end;padding:12px}.editor-modal-shell.svelte-17e0w4c>*{max-height:calc(100vh - 24px)}}.auth-dialog-input-shell.svelte-1dsu6u0{position:relative}.auth-dialog-input.svelte-1dsu6u0{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:11px 12px 11px 38px;font-family:inherit;font-size:14px}.auth-dialog-input.svelte-1dsu6u0:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent)}.flash-region.svelte-1i257xg{top:16px;left:var(--sidebar-width);z-index:120;pointer-events:none;flex-direction:column;align-items:center;gap:10px;display:flex;position:fixed;right:0}.sidebar.sidebar-collapsed~.flash-region.svelte-1i257xg{left:60px}@media (width<=768px){.flash-region.svelte-1i257xg{left:60px}}.flash-toast.svelte-1i257xg{border-radius:var(--radius);pointer-events:auto;align-items:flex-start;gap:10px;width:max-content;max-width:min(480px,100% - 32px);padding:12px 12px 12px 16px;font-size:14px;animation:.9s ease-out svelte-1i257xg-flash-toast-glow;display:flex;box-shadow:0 10px 30px #00000059}@keyframes svelte-1i257xg-flash-toast-glow{0%{box-shadow:0 0 0 4px color-mix(in srgb, currentColor 45%, transparent), 0 10px 30px #00000059}to{box-shadow:0 0 0 4px #0000,0 10px 30px #00000059}}@media (prefers-reduced-motion:reduce){.flash-toast.svelte-1i257xg{animation:none}}.flash-toast-success.svelte-1i257xg{background:color-mix(in srgb, var(--success) 14%, var(--bg-surface));color:var(--success);border:1px solid #34d39959}.flash-toast-error.svelte-1i257xg{background:color-mix(in srgb, var(--warning) 14%, var(--bg-surface));color:var(--warning);border:1px solid #f59e0b66}.flash-toast-text.svelte-1i257xg{overflow-wrap:anywhere;flex:1;min-width:0}.flash-toast-dismiss.svelte-1i257xg{color:inherit;cursor:pointer;opacity:.7;background:0 0;border:0;flex-shrink:0;padding:0 2px;font-size:18px;line-height:1}.flash-toast-dismiss.svelte-1i257xg:hover{opacity:1}.demo-mode-banner.svelte-1s3mcn8{border:1px solid color-mix(in srgb, var(--warning) 55%, var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--warning) 14%, var(--bg-surface));color:var(--text);box-shadow:0 8px 24px color-mix(in srgb, var(--bg) 70%, transparent);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;margin-bottom:24px;padding:12px 16px;display:grid}.demo-mode-banner-icon.svelte-1s3mcn8{width:20px;height:20px;color:var(--warning);flex:0 0 20px}.demo-mode-banner-copy.svelte-1s3mcn8{align-items:baseline;gap:8px;min-width:0;font-size:13px;display:flex}.demo-mode-banner.svelte-1s3mcn8 strong{color:var(--warning);letter-spacing:.06em;text-transform:uppercase;flex-shrink:0;font-size:12px}.demo-mode-banner-links.svelte-1s3mcn8{justify-content:flex-end;align-items:center;gap:6px;display:flex}.demo-mode-banner-links.svelte-1s3mcn8 a{border:1px solid color-mix(in srgb, var(--warning) 42%, var(--border));border-radius:var(--radius);min-height:28px;color:var(--text);white-space:nowrap;align-items:center;padding:4px 8px;font-size:12px;font-weight:600;line-height:1;text-decoration:none;display:inline-flex}.demo-mode-banner-links.svelte-1s3mcn8 a:hover{border-color:var(--warning);background:color-mix(in srgb, var(--warning) 16%, transparent);color:var(--text)}.demo-mode-banner-links.svelte-1s3mcn8 a:focus-visible{outline:2px solid color-mix(in srgb, var(--warning) 42%, transparent);outline-offset:2px}@media (width<=768px){.demo-mode-banner.svelte-1s3mcn8{grid-template-columns:auto minmax(0,1fr);align-items:flex-start}.demo-mode-banner-copy.svelte-1s3mcn8{gap:2px;display:grid}.demo-mode-banner-links.svelte-1s3mcn8{flex-wrap:wrap;grid-column:2;justify-content:flex-start}}.auth-banner.svelte-1c5yh36{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.dp-calendar.svelte-g7ga4u{flex-shrink:0;width:224px}.dp-cal-header.svelte-g7ga4u{justify-content:space-between;align-items:center;margin-bottom:8px;padding:0 4px;display:flex}.dp-cal-title.svelte-g7ga4u{font-size:13px;font-weight:600}.dp-nav-btn.svelte-g7ga4u{width:28px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:flex}.dp-nav-btn.svelte-g7ga4u:hover{background:var(--bg-surface-hover);color:var(--text)}.dp-nav-btn.svelte-g7ga4u:disabled{opacity:.3;cursor:default;pointer-events:none}.dp-nav-prev-mobile.svelte-g7ga4u{display:none}.dp-weekdays.svelte-g7ga4u{text-align:center;grid-template-columns:repeat(7,1fr);margin-bottom:4px;display:grid}.dp-weekdays.svelte-g7ga4u span:where(.svelte-g7ga4u){color:var(--text-muted);padding:4px 0;font-size:11px;font-weight:600}.dp-days.svelte-g7ga4u{grid-template-columns:repeat(7,1fr);gap:1px;display:grid}.dp-day.svelte-g7ga4u{width:32px;height:32px;color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;font-family:inherit;font-size:12px;transition:all .1s;display:flex}.dp-day.svelte-g7ga4u:hover:not(.disabled):not(.other-month){background:var(--bg-surface-hover)}.dp-day.other-month.svelte-g7ga4u{color:var(--text-muted);opacity:.3;cursor:default}.dp-day.today.svelte-g7ga4u{color:var(--accent);box-shadow:inset 0 0 0 1.5px var(--accent);font-weight:700}.dp-day.in-range.svelte-g7ga4u{background:color-mix(in srgb, var(--accent) 15%, transparent);border-radius:0}.dp-day.range-start.svelte-g7ga4u{background:var(--accent);color:#fff;border-radius:6px 0 0 6px;font-weight:600}.dp-day.range-end.svelte-g7ga4u{background:var(--accent);color:#fff;border-radius:0 6px 6px 0;font-weight:600}.dp-day.range-start.range-end.svelte-g7ga4u{border-radius:6px}.dp-day.range-start.today.svelte-g7ga4u,.dp-day.range-end.today.svelte-g7ga4u{box-shadow:none}.dp-day.disabled.svelte-g7ga4u{color:var(--text-muted);opacity:.3;cursor:default;pointer-events:none}@media (width<=768px){.dp-nav-prev-mobile.svelte-g7ga4u{display:flex}}.date-picker.svelte-ax7ma4{position:relative}.date-picker-trigger.svelte-ax7ma4{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);cursor:pointer;white-space:nowrap;align-items:center;gap:8px;padding:8px 12px;font-family:inherit;font-size:13px;transition:all .15s;display:inline-flex}.date-picker-trigger.svelte-ax7ma4:hover{background:var(--bg-surface-hover)}.date-picker-trigger.svelte-ax7ma4 svg:where(.svelte-ax7ma4){color:var(--text-muted);flex-shrink:0}.date-picker-chevron.svelte-ax7ma4{transition:transform .15s}.date-picker-chevron.open.svelte-ax7ma4{transform:rotate(180deg)}.date-picker-dropdown.svelte-ax7ma4{z-index:100;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 8px 24px #00000040}.date-picker-presets.svelte-ax7ma4{border-right:1px solid var(--border);flex-direction:column;gap:2px;min-width:140px;padding:8px;display:flex}.preset-btn.svelte-ax7ma4{color:var(--text);text-align:left;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:8px 12px;font-family:inherit;font-size:13px;transition:all .15s}.preset-btn.svelte-ax7ma4:hover{background:var(--bg-surface-hover)}.preset-btn.active.svelte-ax7ma4{background:var(--accent);color:#fff}.date-picker-calendars.svelte-ax7ma4{flex-wrap:nowrap;gap:16px;padding:12px;display:flex}.dp-cursor-hint.svelte-ax7ma4{pointer-events:none;z-index:101;background:var(--bg-surface);color:var(--text);border:1px solid var(--accent);white-space:nowrap;border-radius:4px;align-items:center;gap:5px;padding:3px 8px;font-size:11px;font-weight:500;display:flex;position:fixed;transform:translate(12px,-50%)}.dp-cursor-hint.svelte-ax7ma4 svg:where(.svelte-ax7ma4){width:12px;height:12px;color:var(--accent);flex-shrink:0}@media (width<=768px){.date-picker-dropdown.svelte-ax7ma4{border-radius:var(--radius) var(--radius) 0 0;flex-direction:column;max-height:80vh;position:fixed;inset:auto 0 0;overflow-y:auto}.date-picker-presets.svelte-ax7ma4{-webkit-overflow-scrolling:touch;border-right:none;border-bottom:1px solid var(--border);flex-flow:row;min-width:0;overflow-x:auto}.date-picker-calendars.svelte-ax7ma4{justify-content:center}.date-picker-calendars.svelte-ax7ma4>.dp-calendar:first-child{display:none}}.segmented-control.svelte-92fh5i{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;padding:2px;display:inline-flex}.segmented-btn.svelte-92fh5i{color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:5px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .15s;display:flex}.segmented-btn.svelte-92fh5i:hover{color:var(--text)}.segmented-btn.active.svelte-92fh5i{background:var(--accent);color:#fff}@media (width<=768px){.segmented-btn.svelte-92fh5i{padding:4px 8px;font-size:11px}}.live-tokens.svelte-17qr2ta{margin-bottom:28px}.live-tokens-heading.svelte-17qr2ta{flex-direction:column;gap:2px;display:flex}.live-tokens-subtitle.svelte-17qr2ta{color:var(--text-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.live-tokens-legend.svelte-17qr2ta{flex-wrap:wrap;gap:8px 18px;margin-bottom:16px;display:flex}.live-tokens-legend-item.svelte-17qr2ta{color:var(--text-muted);align-items:center;gap:7px;font-size:12px;display:inline-flex}.live-tokens-swatch.svelte-17qr2ta{border-radius:2px;flex-shrink:0;width:10px;height:10px}.live-tokens-legend-value.svelte-17qr2ta{color:var(--text);font-weight:600}.live-tokens-empty.svelte-17qr2ta .live-tokens-empty-text:where(.svelte-17qr2ta){color:var(--text-muted);font-size:13px}.provider-status-flag.svelte-6tr9cf{grid-column:span 2}.provider-status-overview-card.svelte-6tr9cf{grid-column:span 1}.provider-status-flag.is-healthy.svelte-6tr9cf{border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, var(--bg-surface))}.provider-status-flag.is-degraded.svelte-6tr9cf{border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-flag.is-unhealthy.svelte-6tr9cf{border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface))}.provider-status-value.svelte-6tr9cf{margin-bottom:8px}.provider-status-card-link.svelte-6tr9cf{color:var(--accent-strong,var(--accent));font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;margin:0;padding:0;font-size:13px;font-weight:600}.provider-status-card-link.svelte-6tr9cf:hover{color:var(--text);text-decoration:underline}.provider-status-card-link.svelte-6tr9cf:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 32%, transparent);outline-offset:3px;border-radius:4px}.provider-status-card-note.svelte-6tr9cf{color:var(--text-muted);font-size:13px;display:block}@media (width>=720px){.card-wide.svelte-6tr9cf{grid-column:span 2}}.cache-token-value.svelte-6tr9cf{flex-wrap:wrap;align-items:center;gap:6px;line-height:1;display:flex}.cache-token-part.svelte-6tr9cf{align-items:center;display:inline-flex}.cache-token-operator.svelte-6tr9cf{color:var(--text-muted);letter-spacing:0;font-size:24px;font-weight:600;line-height:1}.cache-token-marker.svelte-6tr9cf{color:var(--text-muted);letter-spacing:0;text-transform:uppercase;margin-left:2px;font-size:14px;font-weight:700}.prompt-cache-gauge.svelte-6tr9cf{width:120px;height:60px;margin:8px auto 0;position:relative;overflow:hidden}.prompt-cache-gauge.svelte-6tr9cf canvas{display:block}.prompt-cache-gauge-value.svelte-6tr9cf{text-align:center;color:var(--text);font-size:18px;font-weight:700;line-height:1;position:absolute;bottom:4px;left:0;right:0}@media (width<=768px){.provider-status-flag.svelte-6tr9cf{grid-column:span 1}}.mcp-servers-flag.svelte-6tr9cf{grid-column:span 1}.cache-meter-header.svelte-1yzecxj{flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:16px;display:flex}.cache-meter-header.svelte-1yzecxj h3{font-size:16px;font-weight:600}.cache-meter-subtitle.svelte-1yzecxj{color:var(--text-muted);font-size:13px}.cache-meter-bar.svelte-1yzecxj{background:var(--bg-surface-hover);border-radius:6px;width:100%;height:28px;display:flex;overflow:hidden}.cache-meter-segment.svelte-1yzecxj{justify-content:center;align-items:center;min-width:3px;height:100%;transition:width .3s;display:flex;overflow:hidden}.cache-meter-segment-label.svelte-1yzecxj{color:#fff;white-space:nowrap;text-shadow:0 1px 2px #00000073;font-size:12px;font-weight:600;line-height:1}.cache-meter-segment.svelte-1yzecxj+.cache-meter-segment:where(.svelte-1yzecxj){box-shadow:-1px 0 0 var(--bg-surface)}.cache-meter-bar.is-empty.svelte-1yzecxj{background:var(--bg-surface-hover);justify-content:center;align-items:center;height:auto;min-height:28px;padding:6px 12px}.cache-meter-legend.svelte-1yzecxj{flex-wrap:wrap;gap:10px 24px;margin-top:16px;display:flex}.cache-meter-legend-item.svelte-1yzecxj{align-items:center;gap:8px;font-size:13px;display:flex}.cache-meter-swatch.svelte-1yzecxj{border-radius:3px;flex-shrink:0;width:12px;height:12px}.cache-meter-legend-label.svelte-1yzecxj{color:var(--text)}.cache-meter-legend-pct.svelte-1yzecxj{color:var(--text);font-weight:600}.cache-meter-legend-tokens.svelte-1yzecxj{color:var(--text-muted)}.cache-meter-empty.svelte-1yzecxj{color:var(--text-muted);text-align:center;font-size:13px}.spinner.svelte-b54l9o{width:var(--spinner-size);height:var(--spinner-size);border:2px solid var(--border,#80808059);border-top-color:var(--accent,currentColor);border-radius:50%;flex:none;animation:.7s linear infinite svelte-b54l9o-spinner-rotate;display:inline-block}@keyframes svelte-b54l9o-spinner-rotate{to{transform:rotate(360deg)}}.contribution-calendar-section.svelte-3hfxuq{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-top:24px;padding:24px}.contribution-calendar-header.svelte-3hfxuq{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.contribution-calendar-header.svelte-3hfxuq h3{font-size:16px;font-weight:600}.contribution-calendar-grid-wrapper.svelte-3hfxuq{gap:8px;display:flex}.contribution-calendar-day-labels.svelte-3hfxuq{flex-direction:column;gap:2px;padding-top:22px;display:flex}.contribution-calendar-day-labels.svelte-3hfxuq span{height:13px;color:var(--text-muted);text-align:right;min-width:28px;font-size:10px;line-height:13px}.contribution-calendar-scroll.svelte-3hfxuq{--contribution-week-size:13px;--contribution-week-gap:2px;flex:1;min-width:0;overflow-x:auto}.contribution-calendar-months.svelte-3hfxuq{grid-auto-columns:var(--contribution-week-size);gap:var(--contribution-week-gap);grid-auto-flow:column;height:16px;margin-bottom:6px;display:grid}.contribution-calendar-month-label.svelte-3hfxuq{color:var(--text-muted);white-space:nowrap;font-size:10px}.contribution-calendar-grid.svelte-3hfxuq{gap:var(--contribution-week-gap);display:flex}.contribution-calendar-week.svelte-3hfxuq{flex-direction:column;gap:2px;display:flex}.contribution-calendar-cell.svelte-3hfxuq{width:var(--contribution-week-size);height:var(--contribution-week-size);background:var(--cal-level-0);border-radius:2px}.contribution-calendar-cell.level-1.svelte-3hfxuq{background:var(--cal-level-1)}.contribution-calendar-cell.level-2.svelte-3hfxuq{background:var(--cal-level-2)}.contribution-calendar-cell.level-3.svelte-3hfxuq{background:var(--cal-level-3)}.contribution-calendar-cell.level-4.svelte-3hfxuq{background:var(--cal-level-4)}.contribution-calendar-cell.level-5.svelte-3hfxuq{background:var(--cal-level-5)}.contribution-calendar-cell.level-6.svelte-3hfxuq{background:var(--cal-level-6)}.contribution-calendar-cell.level-7.svelte-3hfxuq{background:var(--cal-level-7)}.contribution-calendar-cell.level-8.svelte-3hfxuq{background:var(--cal-level-8)}.contribution-calendar-cell.level-9.svelte-3hfxuq{background:var(--cal-level-9)}.contribution-calendar-cell.level-10.svelte-3hfxuq{background:var(--cal-level-10)}.contribution-calendar-cell.empty.svelte-3hfxuq{background:0 0}.contribution-calendar-footer.svelte-3hfxuq{justify-content:space-between;align-items:center;gap:12px;margin-top:12px;display:flex}.contribution-calendar-meta.svelte-3hfxuq{flex-direction:column;gap:4px;display:flex}.contribution-calendar-summary.svelte-3hfxuq{color:var(--text-muted);font-size:12px}.contribution-calendar-legend.svelte-3hfxuq{color:var(--text-muted);align-items:center;gap:4px;font-size:11px;display:flex}.contribution-calendar-legend.svelte-3hfxuq .contribution-calendar-cell:where(.svelte-3hfxuq){cursor:default;width:11px;height:11px}.contribution-calendar-tooltip.svelte-3hfxuq{z-index:200;background:var(--bg-surface);color:var(--text);border:1px solid var(--border);white-space:nowrap;pointer-events:none;border-radius:4px;padding:4px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;position:fixed;transform:translate(-50%);box-shadow:0 4px 12px #0003}@media (width<=768px){.contribution-calendar-day-labels.svelte-3hfxuq{display:none}.contribution-calendar-section.svelte-3hfxuq{padding:16px}.contribution-calendar-footer.svelte-3hfxuq{flex-direction:column;align-items:flex-start}}.inline-help-toggle.is-open.svelte-y40or3{color:var(--text);background:0 0}.inline-help-toggle.is-open.svelte-y40or3 .inline-help-toggle-icon{transform:rotate(540deg)}.audit-stats-section.svelte-14e9yan{margin-top:24px}.audit-stats-header.svelte-14e9yan{align-items:flex-start}.audit-stats-kpis.svelte-14e9yan{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.audit-stats-kpi.svelte-14e9yan{color:var(--text-muted);white-space:nowrap;align-items:center;gap:6px;font-size:12px;display:inline-flex}.audit-stats-kpi-value.svelte-14e9yan{color:var(--text);font-size:13px}.audit-stats-kpi-dot.svelte-14e9yan{border-radius:2px;flex-shrink:0;width:8px;height:8px}.audit-stats-dot-2xx.svelte-14e9yan{background:var(--success)}.audit-stats-dot-4xx.svelte-14e9yan{background:var(--warning)}.audit-stats-dot-5xx.svelte-14e9yan{background:var(--danger)}.provider-status-details.svelte-6y9wjv{opacity:0;grid-template-rows:0fr;transition:grid-template-rows .28s,opacity .22s;display:grid}.provider-status-details.is-expanded.svelte-6y9wjv{opacity:1;grid-template-rows:1fr}.provider-status-details.is-collapsed.svelte-6y9wjv{pointer-events:none}.provider-status-details-inner.svelte-6y9wjv{flex-direction:column;gap:14px;min-height:0;display:flex;overflow:hidden}.provider-status-reason.svelte-6y9wjv{color:var(--text-muted);font-size:13px}.provider-status-error.svelte-6y9wjv{color:var(--danger);overflow-wrap:break-word;font-size:12px}.provider-status-config-label.svelte-6y9wjv{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-config.svelte-6y9wjv{border-top:1px solid var(--border);flex-direction:column;gap:10px;padding-top:12px;display:flex}.provider-status-config-row.svelte-6y9wjv{flex-direction:column;gap:4px;display:flex}.provider-status-config-value.svelte-6y9wjv{color:var(--text);overflow-wrap:break-word;font-size:13px;display:block}.provider-status-health.svelte-6y9wjv{border-top:1px solid var(--border);flex-direction:column;gap:10px;margin-bottom:12px;padding-top:12px;display:flex}.provider-status-health-state.svelte-6y9wjv{border:1px solid var(--border);border-radius:999px;align-items:center;padding:1px 8px;font-size:12px;font-weight:600;display:inline-flex}.provider-status-health-state.is-healthy.svelte-6y9wjv{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.provider-status-health-state.is-degraded.svelte-6y9wjv{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-health-state.is-unhealthy.svelte-6y9wjv{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, transparent)}.provider-status-health-models.svelte-6y9wjv{flex-direction:column;gap:4px;display:flex}.provider-status-health-model.svelte-6y9wjv{color:var(--text);justify-content:space-between;gap:8px;font-size:13px;display:flex}.provider-status-health-model.is-flagged.svelte-6y9wjv{color:var(--danger)}.provider-status-health-model-name.svelte-6y9wjv{overflow-wrap:anywhere}.provider-status-health-model-stats.svelte-6y9wjv{white-space:nowrap;color:var(--text-muted)}.provider-status-health-model.is-flagged.svelte-6y9wjv .provider-status-health-model-stats:where(.svelte-6y9wjv){color:var(--danger);font-weight:700}.provider-status-card.svelte-nopjmh{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:14px;padding:18px;display:flex}.provider-status-card-toggle.svelte-nopjmh{border:0;border-top:1px solid var(--border);border-radius:0 0 var(--radius) var(--radius);color:var(--text-muted);cursor:pointer;background:0 0;justify-content:center;align-items:center;margin:auto -18px -18px;padding:7px 0;transition:background .15s,color .15s;display:flex}.provider-status-card-toggle.svelte-nopjmh:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);color:var(--text)}.provider-status-card-toggle.svelte-nopjmh:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 32%, transparent);outline-offset:-2px}.provider-status-card-toggle.svelte-nopjmh .provider-status-card-toggle-icon{width:16px;height:16px;transition:transform .28s;display:block}.provider-status-card-toggle.is-expanded.svelte-nopjmh .provider-status-card-toggle-icon{transform:rotate(180deg)}.provider-status-card-head.svelte-nopjmh{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.provider-status-name.svelte-nopjmh{letter-spacing:-.02em;flex-wrap:wrap;align-items:baseline;gap:6px;font-size:16px;font-weight:700;display:flex}.provider-doc-help.svelte-nopjmh{align-self:center;text-decoration:none}.provider-status-name-type.svelte-nopjmh{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-pill.svelte-nopjmh{border:1px solid var(--border);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;min-height:28px;padding:0 10px;font-size:12px;font-weight:700;display:inline-flex}.provider-status-pill.is-healthy.svelte-nopjmh{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.provider-status-pill.is-degraded.svelte-nopjmh{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-pill.is-unhealthy.svelte-nopjmh{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, transparent)}.provider-status-meta.svelte-nopjmh{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.provider-status-meta-item.svelte-nopjmh{background:var(--bg);border:1px solid var(--border);border-radius:6px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.provider-status-meta-label.svelte-nopjmh{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-meta-value.svelte-nopjmh{color:var(--text);font-size:14px}@media (width<=768px){.provider-status-meta.svelte-nopjmh{grid-template-columns:1fr}}.provider-status-section-loading.svelte-1kx3uw4{justify-content:center;padding:24px 0;display:flex}.provider-status-section-header.svelte-1kx3uw4{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px;display:flex}.provider-status-toggle.svelte-1kx3uw4{background:var(--bg-surface);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:10px;padding:8px 12px;font-family:inherit;font-size:12px;font-weight:600;transition:background-color .18s,border-color .18s,color .18s;display:inline-flex}.provider-status-toggle.svelte-1kx3uw4:hover{background:var(--bg-surface-hover)}.provider-status-toggle.svelte-1kx3uw4:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 28%, transparent);outline-offset:2px}.provider-status-toggle-copy.svelte-1kx3uw4{white-space:nowrap}.provider-status-toggle-track.svelte-1kx3uw4{background:color-mix(in srgb, var(--text-muted) 35%, var(--border));border-radius:999px;flex-shrink:0;width:34px;height:20px;transition:background-color .2s;position:relative}.provider-status-toggle-track.is-active.svelte-1kx3uw4{background:color-mix(in srgb, var(--accent) 82%, var(--bg-surface))}.provider-status-toggle-thumb.svelte-1kx3uw4{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .2s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #0000003d}.provider-status-toggle-track.is-active.svelte-1kx3uw4 .provider-status-toggle-thumb:where(.svelte-1kx3uw4){transform:translate(14px)}.provider-status-grid.svelte-1kx3uw4{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));align-items:start;gap:16px;display:grid}@media (width<=768px){.provider-status-section-header.svelte-1kx3uw4{flex-direction:column;align-items:flex-start}.provider-status-toggle.svelte-1kx3uw4{justify-content:space-between;width:100%}}.filter-input-wrap.svelte-30xz1k{flex:1;width:100%;min-width:min(400px,100%);display:flex;position:relative}.filter-input.svelte-30xz1k{flex:1;width:100%;min-width:0;padding-left:34px}.filter-input-wrap.svelte-30xz1k .filter-input-icon{width:14px;height:14px;color:var(--text-muted);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.usage-page-filters.svelte-1oi6ywk{flex-wrap:wrap;gap:10px;margin-bottom:20px;display:flex}.usage-page-filters.svelte-1oi6ywk .usage-log-select{flex:0 auto}.usage-page-filters.svelte-1oi6ywk .usage-page-filters-user-path{flex:220px;min-width:180px;max-width:360px}@media (width<=768px){.usage-page-filters.svelte-1oi6ywk .usage-log-select,.usage-page-filters.svelte-1oi6ywk .usage-page-filters-user-path{flex:100%;max-width:none}}.pro-saved-value.svelte-1qiwzdu{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.pro-saved-delta.svelte-1qiwzdu{color:var(--success);letter-spacing:0;font-size:13px;font-weight:600}.usage-breakdown-loading.svelte-1kee4g8{justify-content:center;align-items:center;min-height:120px;display:flex}.chart-view-toggle.svelte-1kee4g8{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;padding:2px;display:inline-flex}.chart-view-btn.svelte-1kee4g8{width:30px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:all .15s;display:inline-flex}.chart-view-btn.svelte-1kee4g8:hover{color:var(--text)}.chart-view-btn.active.svelte-1kee4g8{background:var(--accent);color:#fff}.chart-view-btn.svelte-1kee4g8 svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}.usage-chart-table-wrapper.svelte-1kee4g8{-webkit-overflow-scrolling:touch;margin-top:0;overflow-x:auto}.usage-chart-data-table.svelte-1kee4g8{min-width:max-content}.usage-chart-data-table.svelte-1kee4g8 th,.usage-chart-data-table.svelte-1kee4g8 td{white-space:nowrap}.pagination-info.svelte-1imew3q{color:var(--text-muted);font-size:13px}.pagination-buttons.svelte-1imew3q{gap:8px;display:flex}.usage-log-loading.svelte-hg4ill{justify-content:center;align-items:center;min-height:120px;display:flex}.usage-log-section.svelte-hg4ill{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.usage-log-section.svelte-hg4ill h3{margin-bottom:16px;font-size:16px;font-weight:600}.usage-log-section.svelte-hg4ill .table-wrapper{overflow-x:auto}.usage-log-toolbar.svelte-hg4ill{gap:12px;margin-bottom:16px;display:grid}.usage-filter-row.svelte-hg4ill{grid-template-columns:repeat(12,minmax(0,1fr));align-items:center;gap:12px;display:grid}.usage-filter-row-search.svelte-hg4ill .filter-input-wrap{grid-column:1/-1}.usage-filter-row-options.svelte-hg4ill{grid-template-columns:1fr}.usage-log-checkbox.svelte-hg4ill{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}.usage-log-checkbox.svelte-hg4ill input{cursor:pointer;width:16px;height:16px}.usage-ts.svelte-hg4ill{white-space:nowrap;font-size:12px}.usage-log-row-cached.svelte-hg4ill td{opacity:.75;font-style:italic}.usage-log-row-cached.svelte-hg4ill .usage-log-cache-cell:where(.svelte-hg4ill){font-weight:700}.caveat-icon.svelte-hg4ill{color:var(--warning);cursor:help;margin-left:4px;font-size:14px}@media (width<=768px){.usage-log-toolbar.svelte-hg4ill{gap:10px}.usage-filter-row.svelte-hg4ill{grid-template-columns:1fr}.usage-filter-row-search.svelte-hg4ill .filter-input-wrap{grid-column:1}.usage-log-table.svelte-hg4ill{display:block;overflow-x:auto}}.usage-sticky-controls.svelte-spwie6{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;display:flex}.usage-charts-grid.svelte-spwie6{flex-wrap:wrap;gap:24px;margin-bottom:24px;display:flex}.usage-charts-grid.svelte-spwie6 .model-chart-section{flex:calc(50% - 24px);min-width:420px;margin-bottom:0}@media (width<=520px){.usage-charts-grid.svelte-spwie6 .model-chart-section{min-width:0}}.loading-state.svelte-hzxv1d{min-height:var(--loading-state-min-height,64px);color:var(--text-muted);justify-content:center;align-items:center;gap:10px;font-size:14px;display:flex}.budget-bar-text-row-on-fill.svelte-1jm56wo{color:#fff;clip-path:inset(0 calc(100% - var(--budget-progress,0%)) 0 0)}.budget-bar-text-start.svelte-1jm56wo{left:8px;transform:translateY(-50%)}.budget-bar-track-period-custom.svelte-1jm56wo .budget-bar-text-row-on-fill:where(.svelte-1jm56wo){color:#3f332a}.budget-override-dialog.svelte-13ryo7h{max-width:460px}.budget-sort-control.svelte-1752fqe{align-items:center;gap:8px}.budget-sort-control.svelte-1752fqe label{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.budget-sort-select.svelte-1752fqe{background-color:var(--bg-surface);min-width:132px}.budget-sort-select.svelte-1752fqe:hover{background-color:var(--bg-surface-hover)}.model-name-cell.svelte-1iynym{flex-direction:column;gap:8px;display:flex}.model-name-primary.svelte-1iynym{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.model-name-secondary.svelte-1iynym{color:var(--text-muted);font-size:12px}.model-redirect-remove-btn.svelte-1iynym{appearance:none;color:var(--danger);cursor:pointer;background:0 0;border:0;margin-left:4px;padding:0;font-size:11px}.model-redirect-remove-btn.svelte-1iynym:hover:not(:disabled){text-decoration:underline}.model-redirect-remove-btn.svelte-1iynym:disabled{opacity:.45;cursor:default}.model-kind-icon.svelte-1iynym{border:1px solid color-mix(in srgb, var(--accent) 55%, var(--border));background:var(--bg);width:24px;height:24px;color:var(--accent);border-radius:999px;flex:0 0 24px;justify-content:center;align-items:center;display:inline-flex}.model-kind-icon-svg.svelte-1iynym{width:14px;height:14px}.model-row-actions.svelte-1iynym{text-align:right;width:170px}@media (width<=768px){.model-name-primary.svelte-1iynym{flex-direction:column;align-items:flex-start}}.provider-group-row.svelte-1911hy6 td{background:color-mix(in srgb, var(--accent) 6%, var(--bg));padding-top:12px;padding-bottom:12px}.provider-group-row.svelte-1911hy6:hover td{background:color-mix(in srgb, var(--accent) 8%, var(--bg))}.provider-group-header.svelte-1911hy6{justify-content:space-between;align-items:center;gap:16px;display:flex}.provider-group-meta.svelte-1911hy6{flex-direction:column;gap:4px;min-width:0;display:flex}.provider-group-title.svelte-1911hy6{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.provider-group-type.svelte-1911hy6,.provider-group-count.svelte-1911hy6,.provider-group-summary.svelte-1911hy6{color:var(--text-muted);font-size:12px}@media (width<=768px){.provider-group-header.svelte-1911hy6{flex-direction:column;align-items:flex-start}}.vm-session-affinity-checkbox.svelte-d1j6xw{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}.vm-session-affinity-checkbox.svelte-d1j6xw input:where(.svelte-d1j6xw){accent-color:var(--accent);cursor:pointer}.pricing-override-rows.svelte-u8snes{gap:12px;display:grid}.pricing-override-row.svelte-u8snes{grid-template-columns:minmax(220px,1fr) minmax(130px,180px) 32px;align-items:end;gap:12px;display:grid}.pricing-override-row-actions.svelte-u8snes{justify-content:flex-start;display:flex}.pricing-override-tier-note.svelte-u8snes{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);border-radius:6px;padding:10px 12px;font-size:13px}.pricing-preview.svelte-u8snes{border:1px solid var(--border);border-radius:6px;overflow:hidden}.pricing-preview-header.svelte-u8snes,.pricing-preview-row.svelte-u8snes{grid-template-columns:minmax(150px,1fr) minmax(90px,auto) minmax(130px,.8fr);align-items:center;gap:12px;padding:10px 12px;display:grid}.pricing-preview-header.svelte-u8snes{background:var(--bg);color:var(--text-muted);text-transform:uppercase;font-size:12px;font-weight:600}.pricing-preview-row.svelte-u8snes{border-top:1px solid var(--border);font-size:13px}.pricing-preview-row-empty.svelte-u8snes{color:var(--text-muted);grid-template-columns:1fr}@media (width<=768px){.pricing-override-row.svelte-u8snes,.pricing-preview-header.svelte-u8snes,.pricing-preview-row.svelte-u8snes{grid-template-columns:1fr}}.failover-drafts-editor.svelte-1n87bip{flex-direction:column;gap:16px;display:flex}.failover-draft-header-actions.svelte-1n87bip{flex:none;align-items:center;gap:10px;display:flex}.failover-draft-counter.svelte-1n87bip{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.failover-draft-toolbar.svelte-1n87bip{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.failover-draft-toolbar.svelte-1n87bip .filter-input-wrap,.failover-draft-toolbar.svelte-1n87bip .filter-input{min-width:0}.failover-draft-toggle-all.svelte-1n87bip{flex:none}.failover-draft-list.svelte-1n87bip{flex-direction:column;gap:8px;max-height:min(52vh,430px);padding-right:4px;display:flex;overflow-y:auto}.failover-draft-row.svelte-1n87bip{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:pointer;grid-template-columns:18px minmax(0,1fr);align-items:start;gap:10px;padding:10px;display:grid}.failover-draft-row.svelte-1n87bip:hover{border-color:color-mix(in srgb, var(--accent) 42%, var(--border));background:var(--bg-surface-hover)}.failover-draft-row.svelte-1n87bip input{width:16px;height:16px;margin-top:2px}.failover-draft-copy.svelte-1n87bip{gap:4px;min-width:0;display:grid}.failover-draft-source.svelte-1n87bip,.failover-draft-targets.svelte-1n87bip{overflow-wrap:anywhere}.failover-draft-targets.svelte-1n87bip{color:var(--text-muted);font-size:12px}.failover-drafts-empty.svelte-1n87bip{align-items:center;min-height:96px;display:flex}.failover-draft-actions.svelte-1n87bip{margin-top:0}.category-tabs.svelte-scpjps{-webkit-overflow-scrolling:touch;align-items:center;gap:4px;margin-bottom:16px;padding-bottom:2px;display:flex;overflow-x:auto}.category-tab.svelte-scpjps{background:var(--bg-surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;white-space:nowrap;border-radius:6px;flex-shrink:0;align-items:center;gap:6px;padding:6px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:all .15s;display:inline-flex}.category-tab.svelte-scpjps:hover{color:var(--text);background:var(--bg-surface-hover)}.category-tab.active.svelte-scpjps{background:var(--accent);color:#fff;border-color:var(--accent)}.category-tab.svelte-scpjps .tab-count:where(.svelte-scpjps){background:#ffffff26;border-radius:9px;justify-content:center;align-items:center;min-width:20px;height:18px;padding:0 5px;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.category-tab.svelte-scpjps:not(.active) .tab-count:where(.svelte-scpjps){background:var(--bg)}@media (width<=768px){.category-tabs.svelte-scpjps{gap:4px}.category-tab.svelte-scpjps{padding:5px 10px;font-size:12px}}.workflow-pipeline-meta.svelte-1viff7o{border:1px solid var(--border);background:color-mix(in srgb, var(--bg-surface) 86%, transparent);min-width:0;max-width:calc(100% - 28px);color:var(--text-muted);white-space:nowrap;appearance:none;cursor:pointer;text-align:left;border-radius:12px;align-items:center;gap:0;padding:2px 10px;font-size:12px;font-weight:500;line-height:1.2;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s;display:inline-flex;position:absolute;top:12px;right:14px;overflow:hidden}.workflow-pipeline-meta.svelte-1viff7o:hover,.workflow-pipeline-meta.svelte-1viff7o:focus-visible{border-color:color-mix(in srgb, var(--accent) 40%, var(--border));background:color-mix(in srgb, var(--accent) 8%, var(--bg-surface));color:color-mix(in srgb, var(--accent) 74%, var(--text))}.workflow-pipeline-meta.svelte-1viff7o:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}.workflow-pipeline-meta-label.svelte-1viff7o{flex:none;font-weight:700}.workflow-pipeline-meta-placeholder.svelte-1viff7o{opacity:1;flex:none;max-width:3ch;margin-left:4px;transition:max-width .18s,margin-left .18s,opacity .15s;overflow:hidden}.workflow-pipeline-meta-value.svelte-1viff7o{opacity:0;text-overflow:clip;flex:0 auto;max-width:0;margin-left:0;transition:max-width .22s,margin-left .18s,opacity .15s;overflow:hidden}.workflow-pipeline-meta.svelte-1viff7o:hover .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta.svelte-1viff7o:focus-visible .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta-error.svelte-1viff7o .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o){opacity:0;max-width:0;margin-left:0}.workflow-pipeline-meta.svelte-1viff7o:hover .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta.svelte-1viff7o:focus-visible .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta-error.svelte-1viff7o .workflow-pipeline-meta-value:where(.svelte-1viff7o){opacity:1;max-width:42ch;margin-left:4px}.workflow-pipeline-meta-icon.svelte-1viff7o{opacity:0;flex:none;justify-content:center;align-items:center;width:0;height:14px;margin-left:0;line-height:0;transition:width .18s,margin-left .18s,opacity .15s,transform .18s;display:inline-flex;overflow:hidden;transform:translate(4px)translateY(1px)scale(.84)}.workflow-pipeline-meta-icon.svelte-1viff7o svg{width:14px;height:14px}.workflow-pipeline-meta-copied.svelte-1viff7o,.workflow-pipeline-meta-copied.svelte-1viff7o:hover,.workflow-pipeline-meta-copied.svelte-1viff7o:focus-visible{background:color-mix(in srgb, var(--success) 12%, var(--bg));border-color:color-mix(in srgb, var(--success) 40%, var(--border));color:var(--success)}.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-icon:where(.svelte-1viff7o){opacity:1;width:14px;margin-left:6px;transform:translateY(1px)}.workflow-pipeline-meta-error.svelte-1viff7o,.workflow-pipeline-meta-error.svelte-1viff7o:hover,.workflow-pipeline-meta-error.svelte-1viff7o:focus-visible{background:color-mix(in srgb, var(--danger) 10%, var(--bg));border-color:color-mix(in srgb, var(--danger) 34%, var(--border));color:var(--danger)}.workflow-pipeline.svelte-nbptrg{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg);flex-direction:column;gap:0;margin-bottom:12px;padding:18px 20px 20px;display:flex;position:relative}.workflow-pipeline-has-meta.svelte-nbptrg{padding-top:42px}.workflow-pipeline-row.svelte-nbptrg{align-items:center;width:100%;min-width:0;display:flex;overflow-x:auto}.workflow-node-icon.svelte-nbptrg{border-radius:var(--radius);background:var(--bg);width:28px;height:28px;color:var(--text-muted);justify-content:center;align-items:center;display:flex}.workflow-node-icon.svelte-nbptrg svg{stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.workflow-node-label.svelte-nbptrg{letter-spacing:.03em;color:var(--text);white-space:nowrap;font-size:11px;font-weight:700;line-height:1.2}.workflow-node-sub.svelte-nbptrg{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;max-width:120px;font-size:10px;font-weight:500;line-height:1.2;font-family:var(--font-mono,ui-monospace, monospace);overflow:hidden}.workflow-node-badge.svelte-nbptrg{border-radius:var(--radius);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);align-items:center;padding:2px 7px;font-size:9px;font-weight:800;line-height:1.5;display:inline-flex}.workflow-node-endpoint.svelte-nbptrg{border-radius:var(--radius);border-color:var(--border);background:var(--bg-surface);flex-direction:row;gap:7px;min-width:auto;padding:10px 14px}.workflow-node-icon-endpoint.svelte-nbptrg{border-radius:var(--radius);width:auto;height:auto;color:var(--text-muted);background:0 0;justify-content:flex-start;padding:0}.workflow-node-icon-endpoint.svelte-nbptrg svg{width:14px;height:14px}.workflow-node-endpoint.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--text-muted);font-size:11px;font-weight:600}.workflow-node-feature.svelte-nbptrg{border-color:color-mix(in srgb, var(--accent) 46%, var(--border));background:color-mix(in srgb, var(--accent) 8%, var(--bg-surface))}.workflow-node-feature.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--accent) 16%, var(--bg));color:var(--accent)}.workflow-node-feature.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--accent)}.workflow-node-feature.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--accent) 70%, var(--text-muted))}.workflow-node-ai.svelte-nbptrg{border-radius:var(--radius);gap:6px;min-width:96px;padding:12px 16px}.workflow-async-section.svelte-nbptrg{justify-content:flex-end;align-items:center;gap:0;width:100%;min-width:0;margin-top:10px;display:flex}.workflow-async-turn.svelte-nbptrg{background:repeating-linear-gradient(to left, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 0, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 5px, transparent 5px, transparent 9px);flex:0 0 60px;height:2px;position:relative}.workflow-async-turn.svelte-nbptrg:before{content:"";background:color-mix(in srgb, var(--text-muted) 40%, var(--border));clip-path:polygon(100% 0,0 50%,100% 100%);width:7px;height:9px;position:absolute;top:50%;left:-7px;transform:translateY(-50%)}.workflow-async-turn.svelte-nbptrg:after{content:"";border-right:2px dashed color-mix(in srgb, var(--text-muted) 40%, var(--border));height:16px;position:absolute;bottom:1px;right:0}.workflow-async-row.svelte-nbptrg{align-items:center;min-width:0;margin-right:7px;display:flex}.workflow-conn-async.svelte-nbptrg{background:repeating-linear-gradient(to left, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 0, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 5px, transparent 5px, transparent 9px);flex:0 0 24px;width:24px}.workflow-conn-async.svelte-nbptrg:after{background:color-mix(in srgb, var(--text-muted) 45%, var(--border));clip-path:polygon(100% 0,0 50%,100% 100%);left:-1px;right:auto}.workflow-node-async.svelte-nbptrg{border-radius:var(--radius);border-style:dashed;flex-direction:row;gap:7px;min-width:auto;padding:7px 12px}.workflow-node-async.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){border-radius:var(--radius);width:12px;height:12px}.workflow-node-async.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg) svg{width:12px;height:12px}.workflow-node-async.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){font-size:10px;font-weight:700}.workflow-async-label.svelte-nbptrg{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);opacity:.55;white-space:nowrap;flex-shrink:0;align-items:center;margin-left:8px;font-size:9px;font-weight:800;display:inline-flex}.workflow-node-success.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--success) 18%, var(--bg));color:var(--success)}.workflow-node-success.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--success)}.workflow-node-success.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--success) 85%, var(--text))}.workflow-node-success.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--success) 74%, var(--text-muted))}.workflow-node-success.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--success) 14%, var(--bg));border-color:color-mix(in srgb, var(--success) 38%, var(--border));color:var(--success)}.workflow-node-current.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--info) 16%, var(--bg));color:var(--info)}.workflow-node-current.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--info)}.workflow-node-current.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--info) 85%, var(--text))}.workflow-node-current.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--info) 72%, var(--text-muted))}.workflow-node-current.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--info) 13%, var(--bg));border-color:color-mix(in srgb, var(--info) 36%, var(--border));color:var(--info)}.workflow-node-warning.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--warning) 14%, var(--bg));color:var(--warning)}.workflow-node-warning.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--warning)}.workflow-node-warning.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--warning) 85%, var(--text))}.workflow-node-warning.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--warning) 72%, var(--text-muted))}.workflow-node-warning.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--warning) 14%, var(--bg));border-color:color-mix(in srgb, var(--warning) 38%, var(--border));color:var(--warning)}.workflow-node-error.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--danger) 14%, var(--bg));color:var(--danger)}.workflow-node-error.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--danger)}.workflow-node-error.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--danger) 85%, var(--text))}.workflow-node-error.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--danger) 72%, var(--text-muted))}.workflow-node-neutral.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--text-muted) 12%, var(--bg));color:var(--text-muted)}.workflow-node-neutral.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg),.workflow-node-neutral.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--text-muted)}.workflow-node-neutral.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--text-muted) 84%, var(--border))}.workflow-node-neutral.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--text-muted) 10%, var(--bg));border-color:color-mix(in srgb, var(--text-muted) 28%, var(--border));color:var(--text-muted)}.workflow-conn-hit.svelte-nbptrg,.workflow-conn-hit.svelte-nbptrg:after{background:color-mix(in srgb, var(--success) 58%, var(--border))}.workflow-conn-dim.svelte-nbptrg,.workflow-conn-dim.svelte-nbptrg:after{background:color-mix(in srgb, var(--border) 75%, transparent)}.workflow-node-success.svelte-nbptrg{border-color:color-mix(in srgb, var(--success) 52%, var(--border));background:color-mix(in srgb, var(--success) 9%, var(--bg-surface))}.workflow-node-current.svelte-nbptrg{border-color:color-mix(in srgb, var(--info) 56%, var(--border));background:color-mix(in srgb, var(--info) 10%, var(--bg-surface))}.workflow-node-warning.svelte-nbptrg{border-color:color-mix(in srgb, var(--warning) 52%, var(--border));background:color-mix(in srgb, var(--warning) 9%, var(--bg-surface))}.workflow-node-error.svelte-nbptrg{border-color:color-mix(in srgb, var(--danger) 52%, var(--border));background:color-mix(in srgb, var(--danger) 9%, var(--bg-surface))}.workflow-node-neutral.svelte-nbptrg{border-color:color-mix(in srgb, var(--text-muted) 40%, var(--border));background:color-mix(in srgb, var(--text-muted) 8%, var(--bg-surface))}.workflow-node-skipped.svelte-nbptrg{opacity:.28;position:relative}.workflow-card.svelte-1fo9fvq{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:16px;padding:20px;display:flex}.workflow-card-head.svelte-1fo9fvq{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.workflow-card-footer.svelte-1fo9fvq{flex-direction:column;align-items:stretch;gap:10px;display:flex}.workflow-card-head.svelte-1fo9fvq h3{font-size:18px;font-weight:700}.workflow-card-badges.svelte-1fo9fvq,.workflow-card-meta.svelte-1fo9fvq{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.workflow-card-meta-footer.svelte-1fo9fvq{justify-content:flex-start}.workflow-card-footer.svelte-1fo9fvq .alias-actions-cell{align-self:flex-end}.workflow-card-description.svelte-1fo9fvq{color:var(--text-muted);font-size:14px}.workflow-guardrails.svelte-1fo9fvq{flex-direction:column;gap:12px;display:flex}.workflow-guardrail-list.svelte-1fo9fvq{flex-direction:column;gap:10px;display:flex}.workflow-guardrail-item.svelte-1fo9fvq{border:1px solid var(--border);background:var(--bg);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}@media (width<=768px){.workflow-card-head.svelte-1fo9fvq,.workflow-card-footer.svelte-1fo9fvq,.workflow-card-badges.svelte-1fo9fvq,.workflow-card-meta.svelte-1fo9fvq,.workflow-guardrail-item.svelte-1fo9fvq{flex-direction:column;align-items:flex-start}}.model-editor.workflow-editor{width:min(1080px,100%);margin-bottom:0}.alert-inline-actions.svelte-1bcpzh1{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.workflow-guardrail-editor.svelte-1bcpzh1{flex-direction:column;gap:12px;display:flex}.workflow-guardrail-list-editor.svelte-1bcpzh1{flex-direction:column;gap:10px;display:flex}.workflow-guardrail-row.svelte-1bcpzh1{border:1px solid var(--border);background:var(--bg);border-radius:10px;justify-content:stretch;align-items:center;gap:12px;padding:10px 12px;display:flex}.workflow-guardrail-field.svelte-1bcpzh1{flex:auto;min-width:0}.workflow-guardrail-step-field.svelte-1bcpzh1{flex:0 0 120px}.workflow-input.svelte-1bcpzh1{width:100%;max-width:none}.workflow-step-input.svelte-1bcpzh1{max-width:120px}@media (width<=768px){.workflow-guardrail-row.svelte-1bcpzh1{flex-direction:column;align-items:flex-start}.workflow-step-input.svelte-1bcpzh1{width:100%;max-width:none}.workflow-guardrail-field.svelte-1bcpzh1,.workflow-guardrail-step-field.svelte-1bcpzh1{flex-basis:auto;width:100%}}.workflow-list-loading.svelte-ie2kfk{justify-content:center;align-items:center;gap:8px;display:flex}.workflows-list.svelte-ie2kfk{min-width:0}.workflow-card-grid.svelte-ie2kfk{grid-template-columns:1fr;gap:16px;display:grid}.workflow-page-note.svelte-l8kr26{color:var(--text-muted);margin-top:6px;font-size:14px}.audit-log-toolbar.svelte-1pwbpcm{flex-direction:column;gap:10px;margin-bottom:14px;display:flex}.audit-filter-row.svelte-1pwbpcm{grid-template-columns:repeat(12,minmax(0,1fr));gap:10px;display:grid}.audit-filter-select.svelte-1pwbpcm{grid-column:span 2;min-width:0}.audit-filter-row-search.svelte-1pwbpcm .filter-input-wrap{grid-column:1/-1;max-width:none}.audit-filter-row-controls.svelte-1pwbpcm .audit-filter-select:where(.svelte-1pwbpcm){grid-column:span 2}.audit-filter-row-controls.svelte-1pwbpcm .btn{grid-column:11/-1;justify-self:end;min-width:108px}.audit-clear-btn.svelte-1pwbpcm{justify-content:center;align-items:center;gap:8px;font-weight:600;display:inline-flex}.audit-clear-btn.svelte-1pwbpcm .table-icon-svg{width:12px;height:12px}@media (width<=768px){.audit-log-toolbar.svelte-1pwbpcm{gap:8px}.audit-filter-row.svelte-1pwbpcm{grid-template-columns:1fr}.audit-filter-row.svelte-1pwbpcm .filter-input-wrap,.audit-filter-row.svelte-1pwbpcm .filter-input,.audit-filter-select.svelte-1pwbpcm,.audit-filter-row.svelte-1pwbpcm .btn{grid-column:auto}}.audit-live-status.svelte-tve6yv{color:var(--text-muted);align-items:center;gap:10px;margin-left:16px;padding-left:6px;font-size:12px;display:inline-flex}.audit-live-status.svelte-tve6yv .live-dot.is-streaming:where(.svelte-tve6yv){animation:1.8s ease-out infinite svelte-tve6yv-audit-live-dot-throb}@keyframes svelte-tve6yv-audit-live-dot-throb{0%{transform:scale(1)}35%{transform:scale(1.35)}70%{transform:scale(1)}to{transform:scale(1)}}@media (prefers-reduced-motion:reduce){.audit-live-status.svelte-tve6yv .live-dot.is-streaming:where(.svelte-tve6yv){animation:none}}.audit-live-status-text.is-live.svelte-tve6yv{color:var(--success);font-weight:600}.audit-entry-metadata.svelte-hyopt0{border-top:1px solid var(--border);align-items:center;gap:10px;margin-top:12px;padding-top:12px;display:flex}.audit-entry-metadata-label.svelte-hyopt0{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;flex:none;font-size:12px;font-weight:700}.audit-entry-context.svelte-hyopt0{flex-wrap:wrap;flex:auto;gap:8px;display:flex}.audit-alias-badge.svelte-hyopt0{background:color-mix(in srgb, var(--accent) 14%, var(--bg));border-color:color-mix(in srgb, var(--accent) 28%, var(--border));color:var(--accent-strong,var(--accent))}@media (width<=768px){.audit-entry-metadata.svelte-hyopt0{flex-direction:column;align-items:flex-start;gap:8px}}.audit-attempt-track.svelte-1eu22xn{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.audit-attempt-track-pips.svelte-1eu22xn{align-items:center;gap:3px;display:inline-flex}.audit-attempt-pip.svelte-1eu22xn{background:var(--text-muted);border-radius:2px;width:8px;height:8px}.audit-attempt-pip.audit-attempt-success.svelte-1eu22xn{background:var(--success)}.audit-attempt-pip.audit-attempt-error.svelte-1eu22xn{background:var(--danger)}.audit-attempt-track-count.svelte-1eu22xn{color:var(--text-muted);font-size:11px}.audit-entry-summary.svelte-17mysgz{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;padding:5px 14px;list-style:none;display:flex;position:relative}.audit-entry-summary.svelte-17mysgz::-webkit-details-marker{display:none}.audit-entry-summary-live-in-progress.svelte-17mysgz{background:color-mix(in srgb, var(--info) 7%, var(--bg))}.audit-entry-summary-has-interactions.svelte-17mysgz{padding-right:44px}.audit-entry-summary-live-in-progress.svelte-17mysgz:before{content:"";background:var(--info);pointer-events:none;width:3px;animation:1.2s ease-in-out infinite audit-live-summary-stripe-blink;position:absolute;inset:0 auto 0 0}@media (prefers-reduced-motion:reduce){.audit-entry-summary-live-in-progress.svelte-17mysgz:before{opacity:.78;animation:none}}.audit-entry-left.svelte-17mysgz{align-items:center;gap:8px;min-width:0;display:flex}.audit-entry-right.svelte-17mysgz{color:var(--text-muted);flex-shrink:0;align-items:center;gap:10px;min-height:28px;display:inline-flex}.audit-thread-expander.svelte-17mysgz{border:1px solid var(--border);background:var(--bg-surface);min-width:28px;height:28px;color:var(--text-muted);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;gap:3px;padding:0 7px 0 4px;transition:background .1s ease-out,color .1s ease-out;display:inline-flex}.audit-thread-expander.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 12%, var(--bg));color:var(--accent)}.audit-thread-expander.svelte-17mysgz .audit-thread-expander-svg{width:14px;height:14px}.audit-thread-count.svelte-17mysgz{font-size:11px;font-weight:600}.audit-conversation-trigger.svelte-17mysgz{border:0;border-left:1px solid var(--border);background:color-mix(in srgb, var(--accent) 12%, var(--bg));width:32px;height:100%;color:var(--accent);cursor:pointer;border-radius:0;justify-content:center;align-items:center;margin:0;transition:background .1s ease-out,color .1s ease-out;display:inline-flex;position:absolute;inset:0 0 0 auto}.audit-conversation-trigger.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 20%, var(--bg))}.audit-conversation-trigger.svelte-17mysgz .audit-conversation-trigger-svg{stroke-linecap:butt;stroke-linejoin:miter;width:18px;height:18px}.audit-path.svelte-17mysgz{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.audit-request-badge.svelte-17mysgz{white-space:nowrap;gap:6px;min-width:0}.audit-timestamp-time.svelte-17mysgz{display:none}.audit-provider-model.svelte-17mysgz{border:1px solid var(--border);background:var(--bg-surface);height:24px;color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;max-width:420px;padding:0 10px;font-size:12px;display:inline-flex;overflow:hidden}@container dashboard-content (width<=699px){.audit-entry-summary.svelte-17mysgz{flex-direction:column;align-items:flex-start}.audit-entry-right.svelte-17mysgz{justify-content:space-between;width:100%}.audit-request-status.svelte-17mysgz,.audit-timestamp-full.svelte-17mysgz{display:none}.audit-timestamp-time.svelte-17mysgz{display:inline}}.audit-pane-split.svelte-1h5puht{grid-template-columns:1fr 2fr;align-items:start;gap:10px 14px;display:grid}.audit-pane-split-single.svelte-1h5puht{grid-template-columns:minmax(0,1fr)}@container dashboard-content (width<=699px){.audit-pane-split.svelte-1h5puht{grid-template-columns:minmax(0,1fr)}}.audit-pane-split.svelte-1h5puht .audit-pane-block-error:where(.svelte-1h5puht),.audit-pane-split.svelte-1h5puht .audit-pane-empty:where(.svelte-1h5puht),.audit-pane-split.svelte-1h5puht .audit-size-warning:where(.svelte-1h5puht){grid-column:1/-1}.audit-pane-block.svelte-1h5puht{min-width:0}.audit-pane-block.svelte-1h5puht>h5{margin-bottom:6px}.audit-pane-block-head.svelte-1h5puht{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.audit-pane-block-title.svelte-1h5puht{align-items:center;gap:8px;min-width:0;display:inline-flex}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn{background-color:var(--bg-surface);border:1px solid color-mix(in srgb, var(--border) 70%, var(--text) 30%);color:var(--text);cursor:pointer;border-radius:6px;flex:none;align-items:center;gap:6px;padding:4px 8px;font-family:inherit;font-size:12px;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn:hover:not(:disabled){background:color-mix(in srgb, var(--bg-surface) 80%, var(--text) 20%);border-color:color-mix(in srgb, var(--border) 45%, var(--text) 55%)}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn.copy-feedback-btn-copied{background:color-mix(in srgb, var(--success) 18%, var(--bg-surface))}.audit-json.svelte-1h5puht{background:var(--bg-surface);border:1px solid var(--border);box-sizing:border-box;white-space:pre;max-width:100%;max-height:220px;color:var(--text);border-radius:6px;padding:10px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;line-height:1.45;overflow:auto}.audit-pane-error-message.svelte-1h5puht{color:var(--danger)}.audit-pane-clickable-preview.svelte-1h5puht{cursor:pointer}.audit-pane-clickable-preview.svelte-1h5puht:hover{background:color-mix(in srgb, var(--danger) 8%, transparent)}.audit-json-body.svelte-1h5puht{white-space:pre;overflow-wrap:normal}.audit-pane-empty.svelte-1h5puht{text-align:left;padding:8px 0 0}.audit-pane-pending.svelte-1h5puht{align-items:center;gap:8px;display:flex}.audit-pane-streaming.svelte-1h5puht{letter-spacing:.02em;color:var(--text-muted);align-items:center;gap:7px;padding-left:4px;font-size:11px;font-weight:600;display:inline-flex}.audit-size-warning.svelte-1h5puht{color:var(--warning);margin-top:8px;font-size:12px}.audit-request-response.svelte-1bc5vi5{margin-top:4px}.audit-pane-tablist.svelte-1bc5vi5{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:2px;display:flex}.audit-pane-tab.svelte-1bc5vi5{border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-bottom-color:#0000;border-radius:6px 6px 0 0;align-items:center;gap:8px;margin-bottom:-1px;margin-right:12px;padding:8px 12px;font-family:inherit;font-size:13px;transition:color .15s,border-color .15s,background-color .15s;display:inline-flex}.audit-pane-tab.svelte-1bc5vi5:not(.audit-pane-tab-active):hover{color:var(--text);background:color-mix(in srgb, var(--text) 5%, transparent)}.audit-pane-tab-active.svelte-1bc5vi5{color:var(--text);border-color:var(--border);border-bottom-color:var(--bg);background:var(--bg)}.audit-pane-tab-label.svelte-1bc5vi5{font-weight:600}.audit-pane-tabpanel.svelte-1bc5vi5{min-width:0}.audit-pane-icon.svelte-1bc5vi5{color:var(--text-muted);flex:none;align-items:center;display:inline-flex}.audit-pane-icon.svelte-1bc5vi5.audit-pane-icon-request{color:var(--accent)}.audit-pane-icon.svelte-1bc5vi5.audit-pane-icon-response{color:var(--info)}.audit-pane-icon.svelte-1bc5vi5 svg{width:16px;height:16px}.audit-pane-seq.svelte-1bc5vi5{color:var(--text-muted);font-size:12px}.audit-pane-kind.svelte-1bc5vi5{text-transform:uppercase;letter-spacing:.04em;font-size:10px;font-weight:600}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-primary{color:var(--text-muted)}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-failover{color:var(--accent);background:color-mix(in srgb, var(--accent) 14%, var(--bg));border-color:color-mix(in srgb, var(--accent) 30%, var(--border))}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-retry{color:var(--warning);background:color-mix(in srgb, var(--warning) 14%, var(--bg));border-color:color-mix(in srgb, var(--warning) 30%, var(--border))}.audit-savings-pill.svelte-1bc5vi5{border:1px solid color-mix(in srgb, var(--prompt-cache-color) 45%, var(--border));background:var(--prompt-cache-color-bg);color:var(--prompt-cache-color);letter-spacing:.02em;border-radius:999px;align-items:center;padding:1px 7px;font-size:11px;font-weight:700;display:inline-flex}.audit-step-pill.svelte-1bc5vi5{border:1px dashed var(--border);color:var(--text-muted);letter-spacing:.02em;border-radius:999px;align-items:center;padding:1px 7px;font-size:11px;display:inline-flex}.audit-entry.svelte-cmjgwr{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);transition:background .12s ease-out,border-color .12s ease-out;overflow:hidden}.audit-entry-interactions-open.svelte-cmjgwr{border-color:color-mix(in srgb, var(--prompt-cache-color) 38%, var(--border));background:color-mix(in srgb, var(--prompt-cache-color) 7%, var(--bg))}.audit-entry-details.svelte-cmjgwr{border-top:1px solid var(--border);background:var(--bg-surface);padding:12px;overflow:hidden}.audit-entry-interactions-open.svelte-cmjgwr .audit-entry-details:where(.svelte-cmjgwr){border-top-color:color-mix(in srgb, var(--prompt-cache-color) 24%, var(--border));background:color-mix(in srgb, var(--prompt-cache-color) 5%, var(--bg-surface))}.audit-thread.svelte-pneivi{flex-direction:column;gap:10px;display:flex}.audit-thread-children.svelte-pneivi{flex-direction:column;gap:10px;margin-left:26px;display:flex}.audit-thread-child.svelte-pneivi,.audit-thread-loading.svelte-pneivi{position:relative}.audit-thread-child.svelte-pneivi:before,.audit-thread-loading.svelte-pneivi:before{content:"";border-left:1px solid var(--border);border-bottom:1px solid var(--border);pointer-events:none;border-bottom-left-radius:6px;width:12px;height:calc(50% + 10px);position:absolute;top:-10px;left:-14px}.audit-thread-child.svelte-pneivi:not(:last-child):after{content:"";border-left:1px solid var(--border);pointer-events:none;position:absolute;top:50%;bottom:-10px;left:-14px}.audit-thread-loading.svelte-pneivi{padding:6px 0 6px 4px;display:flex}.audit-thread-more.svelte-pneivi{color:var(--text-muted);padding-left:4px;font-size:12px}.audit-log-loading.svelte-1nhcbov{justify-content:center;padding:2rem 0;display:flex}.audit-list-toolbar.svelte-1nhcbov{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.audit-list-toolbar-left.svelte-1nhcbov{flex-wrap:wrap;align-items:center;gap:16px;display:inline-flex}.audit-group-checkbox.svelte-1nhcbov{color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:7px;font-size:13px;display:inline-flex}.audit-group-checkbox.svelte-1nhcbov input:where(.svelte-1nhcbov){accent-color:var(--accent);cursor:pointer}.audit-retention-note.svelte-1nhcbov{color:var(--text-muted);font-size:13px}.audit-retention-highlight.svelte-1nhcbov{color:var(--text);font-weight:600}.audit-log-section.svelte-1nhcbov{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.audit-log-summary.svelte-1nhcbov{color:var(--text-muted);font-size:13px}.audit-log-list.svelte-1nhcbov{flex-direction:column;gap:10px;display:flex}.settings-guardrails-list.svelte-1bvx512{min-width:0}.settings-guardrail-type-pill.svelte-1bvx512{border:1px solid color-mix(in srgb, var(--accent) 18%, var(--border));background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--text);white-space:nowrap;border-radius:999px;align-items:center;padding:6px 10px;font-size:12px;font-weight:600;display:inline-flex}.settings-guardrail-summary.svelte-1bvx512{color:var(--text);font-size:14px;line-height:1.45}.settings-guardrail-description.svelte-1bvx512{color:var(--text-muted);margin-top:6px;font-size:12px}.model-editor.guardrails-editor-wide{width:min(1080px,100%)}.form-field-fieldset.svelte-s964s3{border:0;min-inline-size:0;margin:0;padding:0}.form-field-legend.svelte-s964s3{color:var(--text-muted);letter-spacing:.5px;text-transform:uppercase;padding:0;font-size:12px;font-weight:600}.model-editor.settings-guardrails-editor{min-width:0}.settings-guardrails-hero.svelte-5x874c{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--border));border-radius:var(--radius);background:radial-gradient(circle at top right, color-mix(in srgb, var(--accent-hover) 18%, transparent), transparent 42%), radial-gradient(circle at bottom left, color-mix(in srgb, var(--accent) 16%, transparent), transparent 40%), var(--bg-surface);justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:20px;padding:24px;display:flex}.settings-kicker.svelte-5x874c{color:var(--accent);letter-spacing:.08em;text-transform:uppercase;margin:0 0 10px;font-size:11px;font-weight:700}.settings-guardrails-hero.svelte-5x874c h3{margin-bottom:8px}.settings-guardrails-hero.svelte-5x874c p:last-child{color:var(--text-muted);margin-bottom:0}.settings-guardrails-meta.svelte-5x874c{gap:12px;display:flex}.settings-guardrails-stat.svelte-5x874c{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--border));background:color-mix(in srgb, var(--bg-surface-hover) 76%, transparent);border-radius:16px;min-width:110px;padding:14px 16px}.settings-guardrails-stat-label.svelte-5x874c{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;margin-bottom:8px;font-size:11px;font-weight:700;display:block}.settings-guardrails-stat.svelte-5x874c strong{font-size:24px;font-weight:700}@media (width<=768px){.settings-guardrails-hero.svelte-5x874c{flex-direction:column}.settings-guardrails-meta.svelte-5x874c{width:100%}.settings-guardrails-stat.svelte-5x874c{flex:1 1 0}}.mcp-catalog-section.svelte-1xqrzco{margin-top:18px}.mcp-catalog-section.svelte-1xqrzco .form-field-label{margin-bottom:8px}.mcp-catalog-subtitle.svelte-1xqrzco{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.mcp-catalog-list.svelte-1xqrzco{flex-direction:column;gap:12px;margin:0 0 8px;padding:0;list-style:none;display:flex}.mcp-catalog-item-name.svelte-1xqrzco{overflow-wrap:anywhere;font-size:13px}.mcp-catalog-item-aggregated.svelte-1xqrzco{color:var(--text-muted);overflow-wrap:anywhere;margin-top:2px;font-size:11px}.mcp-catalog-item-description.svelte-1xqrzco{color:var(--text-muted);margin:2px 0 0;font-size:13px;font-weight:400}.mcp-server-sub-counts.svelte-ah8nrt{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;max-width:280px;margin-top:4px;font-size:11px;overflow:hidden}.mcp-server-table-wrapper.svelte-ah8nrt{overflow-x:auto}.mcp-server-table-wrapper.svelte-ah8nrt .data-table{min-width:860px}.auth-key-form-fields.svelte-1gswxes>.form-field{margin-bottom:4px}.auth-key-dashboard-toggle.svelte-1gswxes{cursor:pointer;align-items:center;gap:8px;font-size:13px;display:inline-flex}.auth-key-issued-banner.svelte-1gswxes{background:color-mix(in srgb, var(--success) 8%, var(--bg-surface));border:1px solid color-mix(in srgb, var(--success) 30%, var(--border));border-radius:var(--radius);margin-bottom:20px;padding:16px}.auth-key-issued-warning.svelte-1gswxes{color:color-mix(in srgb, var(--success) 80%, var(--text));margin-bottom:12px;font-size:13px;font-weight:600}.auth-key-issued-value-row.svelte-1gswxes{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px;display:flex}.auth-key-issued-token.svelte-1gswxes{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);word-break:break-all;flex:1;min-width:0;padding:8px 12px;font-size:13px;overflow-x:auto}.usage-label-chip-static.svelte-nf0ldb,.usage-label-chip-static.svelte-nf0ldb:hover{cursor:default;background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg))}.auth-key-redacted.svelte-nf0ldb{color:var(--text-muted);font-size:13px}.auth-key-actions-cell.svelte-nf0ldb{white-space:nowrap}.auth-key-row-deactivated.svelte-nf0ldb td:where(.svelte-nf0ldb):not(.auth-key-actions-cell){opacity:.55}.auth-key-expiry.svelte-nf0ldb{white-space:nowrap;align-items:center;gap:8px;display:inline-flex}.auth-key-th-help.svelte-nf0ldb{cursor:help;align-items:center;gap:4px;display:inline-flex}.auth-key-row-actions.svelte-nf0ldb{align-items:center;gap:6px;display:inline-flex}.auth-keys-loading.svelte-1xpdcqx{justify-content:center;align-items:center;padding:32px 0;display:flex}.auth-keys-help-notice.svelte-1xpdcqx{margin-bottom:20px}.auth-keys-inactive-toggle.svelte-1xpdcqx{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;align-items:center;gap:8px;font-size:13px;display:inline-flex}.auth-keys-inactive-toggle.svelte-1xpdcqx input:where(.svelte-1xpdcqx){width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.settings-panel-header.svelte-15kyv2y{justify-content:space-between;gap:16px;margin-bottom:20px;display:flex}.settings-panel-header.svelte-15kyv2y h3{font-size:18px}.settings-form-grid.svelte-15kyv2y{grid-template-columns:minmax(280px,420px);gap:16px;display:grid}@media (width<=768px){.settings-form-grid.svelte-15kyv2y{grid-template-columns:1fr}}.budget-settings-section.svelte-a747ys{width:100%}.budget-settings-grid.svelte-a747ys{gap:12px;display:grid}.budget-settings-row.svelte-a747ys{grid-template-columns:96px minmax(170px,1fr) minmax(110px,140px) minmax(110px,140px) minmax(220px,280px);align-items:start;gap:12px;display:grid}.budget-settings-period.svelte-a747ys{color:var(--text);letter-spacing:0;text-transform:uppercase;align-self:end;min-height:35px;padding-bottom:9px;font-size:12px;font-weight:700}.budget-settings-spacer.svelte-a747ys{min-height:1px}.budget-settings-help-cell.svelte-a747ys{align-self:start;min-width:0;min-height:35px}.budget-settings-help-cell.svelte-a747ys .inline-help-copy{max-width:280px;margin:22px 0 0;font-size:12px;line-height:1.35}@media (width<=768px){.budget-settings-grid.svelte-a747ys,.budget-settings-row.svelte-a747ys{grid-template-columns:1fr}.budget-settings-spacer.svelte-a747ys{display:none}}.tagging-settings-grid.svelte-18e8yem{gap:12px;display:grid}.tagging-settings-row.svelte-18e8yem{grid-template-columns:minmax(170px,1fr) minmax(150px,1fr) minmax(80px,110px) auto minmax(90px,auto);align-items:end;gap:12px;display:grid}.tagging-do-not-pass.svelte-18e8yem{color:var(--text);white-space:nowrap;align-items:center;gap:6px;min-height:35px;font-size:13px;display:flex}.tagging-row-trailer.svelte-18e8yem{align-items:center;gap:8px;min-height:35px;display:flex}.tagging-settings-empty.svelte-18e8yem{color:var(--text-muted);margin:0}.tagging-settings-actions.svelte-18e8yem{flex-wrap:wrap;gap:10px;display:flex}@media (width<=768px){.tagging-settings-row.svelte-18e8yem{grid-template-columns:1fr;align-items:stretch}.tagging-settings-actions.svelte-18e8yem,.tagging-settings-actions.svelte-18e8yem .btn{width:100%}}.pricing-recalculate-section.svelte-1cdxzyk{width:100%}.pricing-recalculate-grid.svelte-1cdxzyk{grid-template-columns:minmax(220px,320px) minmax(260px,360px);justify-content:start;align-items:end;gap:12px;width:100%;display:grid}.pricing-recalculate-date-field.svelte-1cdxzyk{grid-column:1/-1;width:100%;max-width:320px}.pricing-recalculate-filter-field.svelte-1cdxzyk{width:100%;max-width:360px}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker{width:100%}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker-trigger{justify-content:space-between;width:100%}.pricing-recalculate-actions.svelte-1cdxzyk{flex-wrap:wrap;gap:10px;display:flex}@media (width<=768px){.pricing-recalculate-grid.svelte-1cdxzyk{grid-template-columns:1fr}.pricing-recalculate-actions.svelte-1cdxzyk,.pricing-recalculate-actions.svelte-1cdxzyk .btn{width:100%}}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker-dropdown{inset:auto auto calc(100% + 6px) 0}.settings-refresh-icon.svelte-yeq2mp{flex:0 0 16px;width:16px;height:16px}.runtime-refresh-steps.svelte-yeq2mp{color:var(--text-muted);gap:8px;margin-top:14px;padding-left:18px;font-size:13px;display:grid}.runtime-refresh-step.is-ok.svelte-yeq2mp{color:var(--success)}.runtime-refresh-step.is-partial.svelte-yeq2mp{color:var(--warning)}.runtime-refresh-step.is-failed.svelte-yeq2mp{color:var(--danger)}.runtime-settings-copy.svelte-tldbe5{min-width:180px}.runtime-settings-fields.svelte-tldbe5{gap:16px;width:min(560px,100%);display:grid}.runtime-setting-row.svelte-tldbe5{grid-template-columns:minmax(220px,1fr) 180px;align-items:center;gap:20px;display:grid}.runtime-setting-description.svelte-tldbe5,.runtime-setting-managed.svelte-tldbe5{color:var(--text-muted);margin:4px 0 0;font-size:12px}.runtime-setting-managed.svelte-tldbe5{color:var(--warning)}@media (width<=720px){.runtime-setting-row.svelte-tldbe5{grid-template-columns:1fr;gap:8px}}.settings-version-footer.svelte-3naq7u{color:var(--text-muted);text-align:right;margin-top:24px;font-size:12px}.chat-message.svelte-12s99s5{border:1px solid var(--border);background:var(--bg);border-radius:10px;max-width:94%;padding:10px 12px}.chat-message.is-anchor.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border));box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent)}.chat-message.is-after-anchor.svelte-12s99s5,.chat-function-note.is-after-anchor.svelte-12s99s5{opacity:.46}.chat-message.role-user.svelte-12s99s5{align-self:flex-start}.chat-message.role-assistant.svelte-12s99s5{background:color-mix(in srgb, var(--accent) 18%, var(--bg));align-self:flex-end}.chat-message.role-system.svelte-12s99s5{background:color-mix(in srgb, var(--warning) 10%, var(--bg));align-self:center;width:100%;max-width:100%}.chat-message.role-error.svelte-12s99s5{border-color:color-mix(in srgb, var(--danger) 55%, var(--border));background:color-mix(in srgb, var(--danger) 10%, var(--bg));align-self:flex-end}.chat-message.role-error.svelte-12s99s5 .chat-role:where(.svelte-12s99s5){color:color-mix(in srgb, var(--danger) 75%, var(--text-muted))}.chat-message-meta.svelte-12s99s5{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:6px;display:flex}.chat-role.svelte-12s99s5{text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted);font-size:12px;font-weight:700}.chat-time.svelte-12s99s5{color:var(--text-muted);white-space:nowrap;font-size:11px}.chat-content.svelte-12s99s5{white-space:pre-wrap;overflow-wrap:break-word;color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;line-height:1.5}.chat-tool-calls.svelte-12s99s5{border-top:1px solid var(--border);flex-direction:column;gap:3px;margin-top:8px;padding-top:6px;display:flex}.chat-tool-call.svelte-12s99s5{color:var(--text-muted);font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px}.chat-tool-call-name.svelte-12s99s5:before{content:"⚡"}.chat-function-note.svelte-12s99s5{max-width:94%;color:var(--text-muted);background:color-mix(in srgb, var(--border) 40%, transparent);border:1px dashed var(--border);border-radius:12px;align-self:center;padding:4px 12px;font-size:12px}.chat-function-note.is-anchor.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.chat-function-note-inner.svelte-12s99s5{align-items:baseline;gap:6px;display:flex;overflow:hidden}.chat-function-label.svelte-12s99s5{text-transform:uppercase;letter-spacing:.3px;white-space:nowrap;flex-shrink:0;font-size:11px;font-weight:600}.chat-function-detail.svelte-12s99s5{white-space:nowrap;text-overflow:ellipsis;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;overflow:hidden}.chat-function-note.role-function-call.svelte-12s99s5{background:color-mix(in srgb, var(--accent) 8%, transparent);border-color:color-mix(in srgb, var(--accent) 30%, var(--border));align-self:flex-end}.chat-function-note.role-function-result.svelte-12s99s5{background:color-mix(in srgb, var(--success) 8%, transparent);border-color:color-mix(in srgb, var(--success) 30%, var(--border));align-self:flex-start}.chat-function-note.is-anchor.role-function-call.svelte-12s99s5,.chat-function-note.is-anchor.role-function-result.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.chat-function-note-details.svelte-12s99s5{width:100%}.chat-function-note-details.svelte-12s99s5>summary{cursor:pointer;list-style:none}.chat-function-note-details.svelte-12s99s5>summary::-webkit-details-marker{display:none}.chat-function-expanded.svelte-12s99s5{border-top:1px solid var(--border);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);max-height:200px;margin-top:6px;padding-top:6px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.45;overflow:auto}@media (width<=768px){.chat-message.svelte-12s99s5{max-width:100%}}.conversation-drawer.svelte-ssrzja{flex:0 0 var(--conversation-panel-width);width:var(--conversation-panel-width);background:var(--bg-surface);border-left:1px solid var(--border);z-index:12;flex-direction:column;min-width:0;height:100vh;display:flex;position:sticky;top:0}.conversation-drawer-fullscreen.svelte-ssrzja{z-index:70;border-left:0;flex-basis:auto;width:100vw;height:100dvh;position:fixed;inset:0}.conversation-drawer-fullscreen.svelte-ssrzja .conversation-resize-handle:where(.svelte-ssrzja){display:none}.conversation-resize-handle.svelte-ssrzja{z-index:2;cursor:col-resize;touch-action:none;background:0 0;border:0;border-radius:0;outline:none;width:10px;padding:0;position:absolute;top:0;bottom:0;left:-5px}.conversation-resize-handle.svelte-ssrzja:after{content:"";background:0 0;width:2px;transition:background .15s;position:absolute;top:0;bottom:0;left:4px}.conversation-resize-handle.svelte-ssrzja:hover:after,.conversation-resize-handle.svelte-ssrzja:focus-visible:after{background:color-mix(in srgb, var(--accent) 70%, var(--border))}body.conversation-panel-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.conversation-drawer-header.svelte-ssrzja{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;display:flex}.conversation-drawer-header-actions.svelte-ssrzja{align-items:center;gap:6px;display:flex}.conversation-drawer-header.svelte-ssrzja h3{font-size:16px;font-weight:700}.conversation-meta.svelte-ssrzja{color:var(--text-muted);font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px}.conversation-drawer-footer.svelte-ssrzja{border-top:1px solid var(--border);background:var(--bg-surface);flex-direction:column;flex-shrink:0;gap:9px;padding:10px 16px;display:flex}.conversation-composer.svelte-ssrzja{flex-direction:column;gap:7px;display:flex}.conversation-composer.svelte-ssrzja label:where(.svelte-ssrzja){font-size:12px;font-weight:700}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja){resize:vertical;border:1px solid var(--border);background:var(--bg);width:100%;min-height:70px;color:var(--text);font:inherit;border-radius:7px;padding:9px 10px;line-height:1.45}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja):focus{outline:2px solid color-mix(in srgb, var(--accent) 38%, transparent);outline-offset:1px}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja):disabled{opacity:.65}.conversation-composer-actions.svelte-ssrzja{justify-content:space-between;align-items:center;gap:10px;display:flex}.conversation-endpoint.svelte-ssrzja{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);font-size:11px;overflow:hidden}.conversation-send-error.svelte-ssrzja{color:var(--danger);font-size:12px}.conversation-truncated.svelte-ssrzja{color:var(--text-muted);padding:0 16px 14px;font-size:12px}.conversation-thread.svelte-ssrzja{flex-direction:column;gap:10px;padding:14px 16px 20px;display:flex}.conversation-live-status.svelte-ssrzja{color:var(--text-muted);align-items:center;gap:10px;padding:4px 16px 20px;font-size:13px;display:flex} diff --git a/internal/admin/dashboard/static/dist/assets/index-nQCIlv1m.js b/internal/admin/dashboard/static/dist/assets/index-nQCIlv1m.js new file mode 100644 index 000000000..ea1e18bca --- /dev/null +++ b/internal/admin/dashboard/static/dist/assets/index-nQCIlv1m.js @@ -0,0 +1,67 @@ +(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Array.isArray,t=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,s=Object.prototype,c=Array.prototype,l=Object.getPrototypeOf,u=Object.isExtensible;function d(e){return typeof e==`function`}var f=()=>{};function p(e){for(var t=0;t{e=n,t=r}),resolve:e,reject:t}}function h(e,t,n=!1){return e===void 0?n?t():t:e}function g(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);let n=[];for(let r of e)if(n.push(r),n.length===t)break;return n}var _=1<<24,v=1024,y=2048,b=4096,x=8192,S=16384,C=32768,w=1<<25,T=65536,ee=1<<19,te=1<<20,ne=1<<25,re=65536,ie=1<<21,ae=1<<22,oe=1<<23,se=Symbol(`$state`),ce=Symbol(`legacy props`),le=Symbol(``),ue=Symbol(`attributes`),de=Symbol(`class`),fe=Symbol(`style`),pe=Symbol(`text`),me=Symbol(`form reset`),he=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},ge=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function _e(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function ve(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function ye(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function be(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function xe(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function Se(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function Ce(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function we(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Te(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function Ee(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function De(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var Oe={},ke=Symbol(`uninitialized`),Ae=`http://www.w3.org/1999/xhtml`,je=`http://www.w3.org/2000/svg`,Me=`http://www.w3.org/1998/Math/MathML`;function Ne(){console.warn(`https://svelte.dev/e/derived_inert`)}function Pe(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Fe(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function Ie(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var Le=!1;function Re(e){Le=e}var ze;function Be(e){if(e===null)throw Pe(),Oe;return ze=e}function Ve(){return Be(yn(ze))}function E(e){if(Le){if(yn(ze)!==null)throw Pe(),Oe;ze=e}}function He(e=1){if(Le){for(var t=e,n=ze;t--;)n=yn(n);ze=n}}function Ue(e=!0){for(var t=0,n=ze;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else(r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=yn(n);e&&n.remove(),n=i}}function We(e){if(!e||e.nodeType!==8)throw Pe(),Oe;return e.data}function Ge(e){return e===this.v}function Ke(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function qe(e){return!Ke(e,this.v)}var Je=null;function Ye(e){Je=e}function D(e,t=!1,n){Je={p:Je,i:!1,c:null,e:null,s:e,x:null,r:rr,l:null}}function O(e){var t=Je,n=t.e;if(n!==null){t.e=null;for(var r of n)An(r)}return e!==void 0&&(t.x=e),t.i=!0,Je=t.p,e??{}}function Xe(){return!0}var Ze=[];function Qe(){var e=Ze;Ze=[],p(e)}function $e(e){if(Ze.length===0&&!Rt){var t=Ze;queueMicrotask(()=>{t===Ze&&Qe()})}Ze.push(e)}function et(){for(;Ze.length>0;)Qe()}function tt(e){var t=rr;if(t===null)return er.f|=oe,e;if(!(t.f&32768)&&!(t.f&4))throw e;nt(e,t)}function nt(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var rt=~(y|b|v);function it(e,t){e.f=e.f&rt|t}function at(e){e.f&512||e.deps===null?it(e,v):it(e,b)}function ot(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=re,ot(t.deps))}function st(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),ot(e.deps),it(e,v)}var ct=!1;function lt(e){var t=ct;try{return ct=!1,[e(),ct]}finally{ct=t}}function ut(e,t){if(t){let t=document.body;e.autofocus=!0,$e(()=>{document.activeElement===t&&e.focus()})}}function dt(e){Le&&vn(e)!==null&&bn(e)}var ft=!1;function pt(){ft||(ft=!0,document.addEventListener(`reset`,e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(let t of e.target.elements)t[me]?.()})},{capture:!0}))}function mt(e){var t=er,n=rr;nr(null),ir(null);try{return e()}finally{nr(t),ir(n)}}function ht(e,t,n,r=n){e.addEventListener(t,()=>mt(n));let i=e[me];i?e[me]=()=>{i(),r(!0)}:e[me]=()=>r(!0),pt()}function gt(e){let t=0,n=rn(0),r;return()=>{Dn()&&(L(n),Fn(()=>(t===0&&(r=Tr(()=>e(()=>cn(n)))),t+=1,()=>{$e(()=>{--t,t===0&&(r?.(),r=void 0,cn(n))})})))}}var _t=T|ee;function vt(e,t,n,r){new yt(e,t,n,r)}var yt=class{parent;is_pending=!1;transform_error;#e;#t=Le?ze:null;#n;#r;#i;#a=null;#o=null;#s=null;#c=null;#l=0;#u=0;#d=!1;#f=new Set;#p=new Set;#m=null;#h=gt(()=>(this.#m=rn(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=rr;t.b=this,t.f|=128,n(e)},this.parent=rr.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=In(()=>{if(Le){let e=this.#t;Ve();let t=e.data===`[!`;if(e.data.startsWith(`[?`)){let t=JSON.parse(e.data.slice(2));this.#_(t)}else t?this.#v():this.#g()}else this.#y()},_t),Le&&(this.#e=ze)}#g(){try{this.#a=Rn(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=Rn(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=Rn(()=>e(this.#e)),$e(()=>{var e=this.#c=document.createDocumentFragment(),t=_n();e.append(t),this.#a=this.#x(()=>Rn(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,Gn(this.#o,()=>{this.#o=null}),this.#b(Pt))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=Rn(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();Yn(this.#a,e);let t=this.#n.pending;this.#o=Rn(()=>t(this.#e))}else this.#b(Pt)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){st(e,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#n.pending}#x(e){var t=rr,n=er,r=Je;ir(this.#i),nr(this.#i),Ye(this.#i.ctx);try{return Wt.ensure(),e()}catch(e){return tt(e),null}finally{ir(t),nr(n),Ye(r)}}#S(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#S(e,t);return}this.#u+=e,this.#u===0&&(this.#b(t),this.#o&&Gn(this.#o,()=>{this.#o=null}),this.#c&&=(this.#e.before(this.#c),null))}update_pending_count(e,t){this.#S(e,t),this.#l+=e,!(!this.#m||this.#d)&&(this.#d=!0,$e(()=>{this.#d=!1,this.#m&&on(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),L(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;Pt?.is_fork?(this.#a&&Pt.skip_effect(this.#a),this.#o&&Pt.skip_effect(this.#o),this.#s&&Pt.skip_effect(this.#s),Pt.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(Hn(this.#a),null),this.#o&&=(Hn(this.#o),null),this.#s&&=(Hn(this.#s),null),Le&&(Be(this.#t),He(),Be(Ue()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){Ie();return}r=!0,i&&De(),this.#s!==null&&Gn(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){nt(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return Rn(()=>{var t=rr;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return nt(e,this.#i.parent),null}}))};$e(()=>{var t;try{t=this.transform_error(e)}catch(e){nt(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>nt(e,this.#i&&this.#i.parent)):o(t)})}};function bt(e,t,n,r){let i=Xe()?wt:Dt;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=rr,c=xt(),l=a.length===1?a[0].promise:a.length>1?Promise.all(a.map(e=>e.promise)):null;function u(e){if(!(s.f&16384)){c();try{r([...o,...e])}catch(e){nt(e,s)}St()}}var d=Ct();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>Et(e))).then(u).catch(e=>nt(e,s)).finally(d)}l?l.then(()=>{c(),f(),St()}):f()}function xt(){var e=rr,t=er,n=Je,r=Pt;return function(i=!0){ir(e),nr(t),Ye(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function St(e=!0){ir(null),nr(null),Ye(null),e&&Pt?.deactivate()}function Ct(){var e=rr,t=e.b,n=Pt,r=!!t?.is_rendered();return t?.update_pending_count(1,n),n.increment(r,e),()=>{t?.update_pending_count(-1,n),n.decrement(r,e)}}function wt(e){var t=2|y;return rr!==null&&(rr.f|=ee),{ctx:Je,deps:null,effects:null,equals:Ge,f:t,fn:e,reactions:null,rv:0,v:ke,wv:0,parent:rr,ac:null}}var Tt=Symbol(`obsolete`);function Et(e,t,n){let r=rr;r===null&&_e();var i=void 0,a=rn(ke),o=!er,s=new Set;return Pn(()=>{var t=rr,n=m();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==he&&n.reject(e)}).finally(St)}catch(e){n.reject(e),St()}var c=Pt;if(o){if(t.f&32768)var l=Ct();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(Tt);else for(let e of s.values())e.reject(Tt);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==Tt&&(c.activate(),t?(a.f|=oe,on(a,t)):(a.f&8388608&&(a.f^=oe),on(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),On(()=>{for(let e of s)e.reject(Tt)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function k(e){let t=wt(e);return or(t),t}function Dt(e){let t=wt(e);return t.equals=qe,t}function Ot(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n{t.ac.abort(he),t.ac=null}),t.fn!==null&&(t.teardown=f),br(t,0),Bn(t))}function Mt(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&xr(t)}var Nt=null,Pt=null,Ft=null,It=null,Lt=null,Rt=!1,zt=!1,Bt=null,Vt=null,Ht=0,Ut=1,Wt=class e{id=Ut++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;#r=new Set;#i=new Set;#a=0;#o=new Map;#s=null;#c=[];#l=[];#u=new Set;#d=new Set;#f=new Map;#p=new Set;is_fork=!1;#m=!1;constructor(){Nt===null?Nt=this:(Nt.#n=this,this.#t=Nt),Nt=this}#h(){if(this.is_fork)return!0;for(let n of this.#o.keys()){for(var e=n,t=!1;e.parent!==null;){if(this.#f.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#f.get(e);if(n){this.#f.delete(e);for(var r of n.d)it(r,y),t(r);for(r of n.m)it(r,b),t(r)}this.#p.add(e)}#g(){this.#e=!0,Ht++>1e3&&(this.#x(),Kt());for(let e of this.#u)this.#d.delete(e),it(e,y),this.schedule(e);for(let e of this.#d)it(e,b),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=Bt=[],r=[],i=Vt=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw $t(e),this.#h()||this.discard(),t}if(Pt=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(Bt=null,Vt=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)Qt(e,t);i.length>0&&Pt.#g();return}let o=this.#v();if(o){this.#b(r),this.#b(n),o.#y(this);return}this.#u.clear(),this.#d.clear();for(let e of this.#r)e(this);this.#r.clear(),Ft=this,Jt(r),Jt(n),Ft=null,this.#s?.resolve();var s=Pt;if(this.#a===0&&(this.#c.length===0||s!==null)&&this.#x(),this.#c.length>0)if(s!==null){let e=s;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}else s=this;s!==null&&s.#g()}#_(e,t,n){e.f^=v;for(var r=e.first;r!==null;){var i=r.f,a=(i&96)!=0;if(!(a&&i&1024||i&8192||this.#f.has(r))&&r.fn!==null){a?r.f^=v:i&4?t.push(r):gr(r)&&(i&16&&this.#d.add(r),xr(r));var o=r.first;if(o!==null){r=o;continue}}for(;r!==null;){var s=r.next;if(s!==null){r=s;break}r=r.parent}}}#v(){for(var e=this.#t;e!==null;){if(!e.is_fork){for(let[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e}e=e.#t}return null}#y(e){for(let[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(let[t,n]of e.async_deriveds){let e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve).catch(e.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#u,e.#d);let t=e=>{var n=e.reactions;if(n!==null&&!(e.f&2&&!(e.f&6144)))for(let e of n){var r=e.f;if(r&2)t(e);else{var i=e;r&4194320&&!this.async_deriveds.has(i)&&(this.#d.delete(i),it(i,y),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#x(),Pt=this,this.#g()}#b(e){for(var t=0;t{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(let t of e)this.#u.add(t);for(let e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}settled(){return(this.#s??=m()).promise}static ensure(){if(Pt===null){let t=Pt=new e;!zt&&!Rt&&$e(()=>{t.#e||t.flush()})}return Pt}apply(){It=null}schedule(e){if(Lt=e,e.b?.is_pending&&e.f&16777228&&!(e.f&32768)){e.b.defer_effect(e);return}for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(Bt!==null&&t===rr&&(er===null||!(er.f&2)))return;if(n&96){if(!(n&1024))return;t.f^=v}}this.#c.push(t)}#x(){if(this.linked){var e=this.#t,t=this.#n;e===null||(e.#n=t),t===null?Nt=e:t.#t=e,this.linked=!1}}};function Gt(e){var t=Rt;Rt=!0;try{var n;for(e&&(Pt!==null&&!Pt.is_fork&&Pt.flush(),n=e());;){if(et(),Pt===null)return n;Pt.flush()}}finally{Rt=t}}function Kt(){try{Se()}catch(e){nt(e,Lt)}}var qt=null;function Jt(e){var t=e.length;if(t!==0){for(var n=0;n0)){tn.clear();for(let e of qt){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)qt.has(n)&&(qt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||xr(n)}}qt.clear()}}qt=null}}function Yt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(let i of e.reactions){let e=i.f;e&2?Yt(i,t,n,r):e&4194320&&!(e&2048)&&Xt(i,t,r)&&(it(i,y),Zt(i))}}function Xt(e,t,r){let i=r.get(e);if(i!==void 0)return i;if(e.deps!==null)for(let i of e.deps){if(n.call(t,i))return!0;if(i.f&2&&Xt(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function Zt(e){Pt.schedule(e)}function Qt(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),it(e,v);for(var n=e.first;n!==null;)Qt(n,t),n=n.next}}function $t(e){it(e,v);for(var t=e.first;t!==null;)$t(t),t=t.next}var en=new Set,tn=new Map,nn=!1;function rn(e,t){return{f:0,v:e,reactions:null,equals:Ge,rv:0,wv:0}}function A(e,t){let n=rn(e,t);return or(n),n}function an(e,t=!1,n=!0){let r=rn(e);return t||(r.equals=qe),r}function j(e,t,n=!1){return er!==null&&(!tr||er.f&131072)&&Xe()&&er.f&4325394&&(ar===null||!ar.has(e))&&Ee(),on(e,n?M(t):t,Vt)}function on(e,t,n=null){if(!e.equals(t)){tn.set(e,Qn?t:e.v);var r=Wt.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&kt(t),It===null&&at(t)}e.wv=hr(),ln(e,y,n),Xe()&&rr!==null&&rr.f&1024&&!(rr.f&96)&&(lr===null?ur([e]):lr.push(e)),!r.is_fork&&en.size>0&&!nn&&sn()}return t}function sn(){nn=!1;for(let e of en){e.f&1024&&it(e,b);let t;try{t=gr(e)}catch{t=!0}t&&xr(e)}en.clear()}function cn(e){j(e,e.v+1)}function ln(e,t,n){var r=e.reactions;if(r!==null)for(var i=Xe(),a=r.length,o=0;o{if(pr===d)return e();var t=er,n=pr;nr(null),mr(d);var r=e();return nr(t),mr(n),r};return i&&r.set(`length`,A(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&we();var i=r.get(t);return i===void 0?f(()=>{var e=A(n.value,u);return r.set(t,e),e}):j(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>A(ke,u));r.set(t,e),cn(o)}}else j(n,ke),cn(o);return!0},get(e,n,i){if(n===se)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>A(M(s?e[n]:ke),u)),r.set(n,o)),o!==void 0){var c=L(o);return c===ke?void 0:c}return Reflect.get(e,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&`value`in n){var i=r.get(t);i&&(n.value=L(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==ke)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===se)return!0;var n=r.get(t),i=n!==void 0&&n.v!==ke||Reflect.has(e,t);return(n!==void 0||rr!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>A(i?M(e[t]):ke,u)),r.set(t,n)),L(n)===ke)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;dA(ke,u)),r.set(d+``,p)):j(p,ke)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>A(void 0,u)),j(c,M(n)),r.set(t,c));else{l=c.v!==ke;var m=f(()=>M(n));j(c,m)}var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(s,n),!l){if(i&&typeof t==`string`){var g=r.get(`length`),_=Number(t);Number.isInteger(_)&&_>=g.v&&j(g,_+1)}cn(o)}return!0},ownKeys(e){L(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==ke});for(var[n,i]of r)i.v!==ke&&!(n in e)&&t.push(n);return t},setPrototypeOf(){Te()}})}function un(e){try{if(typeof e==`object`&&e&&se in e)return e[se]}catch{}return e}function dn(e,t){return Object.is(un(e),un(t))}var fn,pn,mn,hn;function gn(){if(fn===void 0){fn=window,pn=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;mn=a(t,`firstChild`).get,hn=a(t,`nextSibling`).get,u(e)&&(e[de]=void 0,e[ue]=null,e[fe]=void 0,e.__e=void 0),u(n)&&(n[pe]=void 0)}}function _n(e=``){return document.createTextNode(e)}function vn(e){return mn.call(e)}function yn(e){return hn.call(e)}function N(e,t){if(!Le)return vn(e);var n=vn(ze);if(n===null)n=ze.appendChild(_n());else if(t&&n.nodeType!==3){var r=_n();return n?.before(r),Be(r),r}return t&&Cn(n),Be(n),n}function P(e,t=!1){if(!Le){var n=vn(e);return n instanceof Comment&&n.data===``?yn(n):n}if(t){if(ze?.nodeType!==3){var r=_n();return ze?.before(r),Be(r),r}Cn(ze)}return ze}function F(e,t=1,n=!1){let r=Le?ze:e;for(var i;t--;)i=r,r=yn(r);if(!Le)return r;if(n){if(r?.nodeType!==3){var a=_n();return r===null?i?.after(a):r.before(a),Be(a),a}Cn(r)}return Be(r),r}function bn(e){e.textContent=``}function xn(){return!1}function Sn(e,t,n){return t==null||t===`http://www.w3.org/1999/xhtml`?n?document.createElement(e,{is:n}):document.createElement(e):n?document.createElementNS(t,e,{is:n}):document.createElementNS(t,e)}function Cn(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===3;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function wn(e){rr===null&&(er===null&&xe(e),be()),Qn&&ye(e)}function Tn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function En(e,t){var n=rr;n!==null&&n.f&8192&&(e|=x);var r={ctx:Je,deps:null,nodes:null,f:e|y|512,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Pt?.register_created_effect(r);var i=r;if(e&4)Bt===null?Wt.ensure().schedule(r):Bt.push(r);else if(t!==null){try{xr(r)}catch(e){throw Hn(r),e}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&!(i.f&524288)&&(i=i.first,e&16&&e&65536&&i!==null&&(i.f|=T))}if(i!==null&&(i.parent=n,n!==null&&Tn(i,n),er!==null&&er.f&2&&!(e&64))){var a=er;(a.effects??=[]).push(i)}return r}function Dn(){return er!==null&&!tr}function On(e){let t=En(8,null);return it(t,v),t.teardown=e,t}function kn(e){wn(`$effect`);var t=rr.f;if(!er&&t&32&&Je!==null&&!Je.i){var n=Je;(n.e??=[]).push(e)}else return An(e)}function An(e){return En(4|te,e)}function jn(e){Wt.ensure();let t=En(64|ee,e);return()=>{Hn(t)}}function Mn(e){Wt.ensure();let t=En(64|ee,e);return(e={})=>new Promise(n=>{e.outro?Gn(t,()=>{Hn(t),n(void 0)}):(Hn(t),n(void 0))})}function Nn(e){return En(4,e)}function Pn(e){return En(ae|ee,e)}function Fn(e,t=0){return En(8|t,e)}function I(e,t=[],n=[],r=[]){bt(r,t,n,t=>{En(8,()=>{e(...t.map(L))})})}function In(e,t=0){return En(16|t,e)}function Ln(e,t=0){return En(_|t,e)}function Rn(e){return En(32|ee,e)}function zn(e){var t=e.teardown;if(t!==null){let e=Qn,n=er;$n(!0),nr(null);try{t.call(null)}finally{$n(e),nr(n)}}}function Bn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&mt(()=>{e.abort(he)});var r=n.next;n.f&64?n.parent=null:Hn(n,t),n=r}}function Vn(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||Hn(t),t=n}}function Hn(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(Un(e.nodes.start,e.nodes.end),n=!0),e.f|=w,Bn(e,t&&!n),br(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();zn(e),e.f^=w,e.f|=S;var i=e.parent;i!==null&&i.first!==null&&Wn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Un(e,t){for(;e!==null;){var n=e===t?null:yn(e);e.remove(),e=n}}function Wn(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Gn(e,t,n=!0){var r=[];Kn(e,r,!0);var i=()=>{n&&Hn(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function Kn(e,t,n){if(!(e.f&8192)){e.f^=x;var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;i!==null;){var a=i.next;if(!(i.f&64)){var o=(i.f&65536)!=0||(i.f&32)!=0&&(e.f&16)!=0;Kn(i,t,o?n:!1)}i=a}}}function qn(e){Jn(e,!0)}function Jn(e,t){if(e.f&8192){e.f^=x,e.f&1024||(it(e,y),Wt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;Jn(n,i?t:!1),n=r}var a=e.nodes&&e.nodes.t;if(a!==null)for(let e of a)(e.is_global||t)&&e.in()}}function Yn(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:yn(n);t.append(n),n=i}}var Xn=null,Zn=!1,Qn=!1;function $n(e){Qn=e}var er=null,tr=!1;function nr(e){er=e}var rr=null;function ir(e){rr=e}var ar=null;function or(e){er!==null&&(ar??=new Set).add(e)}var sr=null,cr=0,lr=null;function ur(e){lr=e}var dr=1,fr=0,pr=fr;function mr(e){pr=e}function hr(){return++dr}function gr(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~re),t&4096){for(var n=e.deps,r=n.length,i=0;ie.wv)return!0}t&512&&It===null&&it(e,v)}return!1}function _r(e,t,n=!0){var r=e.reactions;if(r!==null&&!(ar!==null&&ar.has(e)))for(var i=0;i{e.ac.abort(he)}),e.ac=null);try{e.f|=ie;var u=e.fn,d=u();e.f|=C;var f=e.deps,p=Pt?.is_fork;if(sr!==null){var m;if(p||br(e,cr),f!==null&&cr>0)for(f.length=cr+sr.length,m=0;m{s.ac.abort(he),s.ac=null,it(s,y)}),jt(s),br(s,0)}}function br(e,t){var n=e.deps;if(n!==null)for(var r=t;rn?.call(this,e))}return e.startsWith(`pointer`)||e.startsWith(`touch`)||e===`wheel`?$e(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Br(e,t,n,r,i){var a={capture:r,passive:i},o=zr(e,t,n,a);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&On(()=>{t.removeEventListener(e,o,a)})}function R(e,t,n){(t[Ir]??={})[e]=n}function Vr(e){for(var t=0;t{throw e});throw p}}finally{e[Ir]=t,delete e.currentTarget,nr(d),ir(f)}}}var Wr=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function Gr(e){return Wr?.createHTML(e)??e}function Kr(e){var t=Sn(`template`);return t.innerHTML=Gr(e.replaceAll(``,``)),t.content}function qr(e,t){var n=rr;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function z(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(``);return()=>{if(Le)return qr(ze,null),ze;i===void 0&&(i=Kr(a?e:``+e),n||(i=vn(i)));var t=r||pn?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=vn(t),s=t.lastChild;qr(o,s)}else qr(t,t);return t}}function Jr(e,t,n=`svg`){var r=!e.startsWith(``),i=(t&1)!=0,a=`<${n}>${r?e:``+e}`,o;return()=>{if(Le)return qr(ze,null),ze;if(!o){var e=vn(Kr(a));if(i)for(o=document.createDocumentFragment();vn(e);)o.appendChild(vn(e));else o=vn(e)}var t=o.cloneNode(!0);if(i){var n=vn(t),r=t.lastChild;qr(n,r)}else qr(t,t);return t}}function Yr(e,t){return Jr(e,t,`svg`)}function Xr(e=``){if(!Le){var t=_n(e+``);return qr(t,t),t}var n=ze;return n.nodeType===3?Cn(n):(n.before(n=_n()),Be(n)),qr(n,n),n}function Zr(){if(Le)return qr(ze,null),ze;var e=document.createDocumentFragment(),t=document.createComment(``),n=_n();return e.append(t,n),qr(t,n),e}function B(e,t){if(Le){var n=rr;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=ze),Ve();return}e!==null&&e.before(t)}var Qr=!0;function $r(e){Qr=e}function V(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[pe]??=e.nodeValue)&&(e[pe]=n,e.nodeValue=`${n}`)}function ei(e,t){return ni(e,t)}var ti=new Map;function ni(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){gn();var l=void 0,u=Mn(()=>{var u=n??t.appendChild(_n());vt(u,{pending:()=>{}},t=>{D({});var n=Je;if(o&&(n.c=o),a&&(i.$$events=a),Le&&qr(t,null),Qr=s,l=e(t,i)||{},Qr=!0,Le&&(rr.nodes.end=ze,ze===null||ze.nodeType!==8||ze.data!==`]`))throw Pe(),Oe;O()},c);var d=new Set,f=e=>{for(var n=0;n{for(var e of d)for(let n of[t,document]){var r=ti.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,Ur),r.delete(e),r.size===0&&ti.delete(n)):r.set(e,i)}Rr.delete(f),u!==n&&u.parentNode?.removeChild(u)}});return ri.set(l,u),l}var ri=new WeakMap,ii=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)qn(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(qn(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(Hn(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();Yn(r,t),t.append(_n()),this.#n.set(e,{effect:r,fragment:t})}else Hn(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),Gn(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(Hn(n.effect),this.#n.delete(e))};ensure(e,t){var n=Pt,r=xn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=_n();i.append(a),this.#n.set(e,{effect:Rn(()=>t(a)),fragment:i})}else this.#t.set(e,Rn(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else Le&&(this.anchor=ze),this.#a(n)}};function H(e,t,n=!1){var r;Le&&(r=ze,Ve());var i=new ii(e),a=n?T:0;function o(e,t){if(Le){var n=We(r);if(e!==parseInt(n.substring(1))){var a=Ue();Be(a),i.anchor=a,Re(!1),i.ensure(e,t),Re(!0);return}}i.ensure(e,t)}In(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}function ai(e,t){return t}function oi(e,t,n){for(var i=[],a=t.length,o,s=t.length,c=0;c{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;si(e,r(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else--s},!1)}if(s===0){var l=i.length===0&&n!==null;if(l){var u=n,d=u.parentNode;bn(d),d.append(u),e.items.clear()}si(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function si(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i{var t=i();return e(t)?t:t==null?[]:r(t)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,ui(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=ne,fi(d,null,c)):qn(d):Gn(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:In(()=>{p=L(f);var e=p.length;let t=!1;Le&&We(c)===`[!`!=(e===0)&&(c=Ue(),Be(c),Re(!1),t=!0);for(var r=new Set,u=Pt,v=xn(),y=0;ys(c)):(d=Rn(()=>s(ci??=_n())),d.f|=ne)),e>r.size&&ve(``,``,``),Le&&e>0&&Be(Ue()),!h)if(m.set(u,r),v){for(let[e,t]of l)r.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);t&&Re(!0),L(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,Le&&(c=ze)}function li(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function ui(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=li(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v0){var ee=i&4&&s===0?n:null;if(o){for(v=0;v{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function di(e,t,n,r,i,a,o,s){var c=o&1?o&16?rn(n):an(n,!1,!1):null,l=o&2?rn(i):null;return{v:c,i:l,e:Rn(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function fi(e,t,n){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,a=t&&!(t.f&33554432)?t.nodes.start:n;r!==null;){var o=yn(r);if(a.before(r),r===i)return;r=o}}function pi(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function mi(e,t,n=!1,r=!1,i=!1,a=!1){var o=e,s=``;if(n){var c=e;Le&&(o=Be(vn(c)))}I(()=>{var e=rr;if(s===(s=t()??``)){Le&&Ve();return}if(n&&!Le){e.nodes=null,c.innerHTML=s,s!==``&&qr(vn(c),c.lastChild);return}if(e.nodes!==null&&(Un(e.nodes.start,e.nodes.end),e.nodes=null),s!==``){if(Le){for(var a=ze.data,l=Ve(),u=l;l!==null&&(l.nodeType!==8||l.data!==``);)u=l,l=yn(l);if(l===null)throw Pe(),Oe;qr(ze,u),o=Be(l);return}var d=Sn(r?`svg`:i?`math`:`template`,r?je:i?Me:void 0);d.innerHTML=s;var f=r||i?d:d.content;if(qr(vn(f),f.lastChild),r||i)for(;vn(f);)o.before(vn(f));else o.before(f)}})}function hi(e,t,...n){var r=new ii(e);In(()=>{let e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},T)}function gi(e,t,n){var r;Le&&(r=ze,Ve());var i=new ii(e);In(()=>{var e=t()??null;if(Le&&We(r)===`[`!=(e!==null)){var a=Ue();Be(a),i.anchor=a,Re(!1),i.ensure(e,e&&(t=>n(t,e))),Re(!0);return}i.ensure(e,e&&(t=>n(t,e)))},T)}var _i=()=>performance.now(),vi={tick:e=>requestAnimationFrame(e),now:()=>_i(),tasks:new Set};function yi(){let e=vi.now();vi.tasks.forEach(t=>{t.c(e)||(vi.tasks.delete(t),t.f())}),vi.tasks.size!==0&&vi.tick(yi)}function bi(e){let t;return vi.tasks.size===0&&vi.tick(yi),{promise:new Promise(n=>{vi.tasks.add(t={c:e,f:n})}),abort(){vi.tasks.delete(t)}}}function xi(e,t){mt(()=>{e.dispatchEvent(new CustomEvent(t))})}function Si(e){if(e===`float`)return`cssFloat`;if(e===`offset`)return`cssOffset`;if(e.startsWith(`--`))return e;let t=e.split(`-`);return t.length===1?t[0]:t[0]+t.slice(1).map(e=>e[0].toUpperCase()+e.slice(1)).join(``)}function Ci(e){let t={},n=e.split(`;`);for(let e of n){let[n,r]=e.split(`:`);if(!n||r===void 0)break;let i=Si(n.trim());t[i]=r.trim()}return t}var wi=e=>e,Ti=null;function Ei(e){Ti=e}function Di(e,t,n){var r=(Ti??rr).nodes,i,a,o,s=null;r.a??={element:e,measure(){i=this.element.getBoundingClientRect()},apply(){if(o?.abort(),a=this.element.getBoundingClientRect(),i.left!==a.left||i.right!==a.right||i.top!==a.top||i.bottom!==a.bottom){let e=t()(this.element,{from:i,to:a},n?.());o=ki(this.element,e,void 0,1,()=>{},()=>{o?.abort(),o=void 0})}},fix(){if(!e.getAnimations().length){var{position:t,width:n,height:r}=getComputedStyle(e);if(t!==`absolute`&&t!==`fixed`){var a=e.style;s={position:a.position,width:a.width,height:a.height,transform:a.transform},a.position=`absolute`,a.width=n,a.height=r;var o=e.getBoundingClientRect();if(i.left!==o.left||i.top!==o.top){var c=`translate(${i.left-o.left}px, ${i.top-o.top}px)`;a.transform=a.transform?`${a.transform} ${c}`:c}}}},unfix(){if(s){var t=e.style;t.position=s.position,t.width=s.width,t.height=s.height,t.transform=s.transform}}},r.a.element=e}function Oi(e,t,n,r){var i=(e&1)!=0,a=(e&2)!=0,o=i&&a,s=(e&4)!=0,c=o?`both`:i?`in`:`out`,l,u=t.inert,d=t.style.overflow,f,p;function m(){return mt(()=>l??=n()(t,r?.()??{},{direction:c}))}var h={is_global:s,in(){if(t.inert=u,!i){p?.abort(),p?.reset?.();return}a||f?.abort(),f=ki(t,m(),p,1,()=>{xi(t,`introstart`)},()=>{xi(t,`introend`),f?.abort(),f=l=void 0,t.style.overflow=d})},out(e){if(!a){e?.(),l=void 0;return}t.inert=!0,p=ki(t,m(),f,0,()=>{xi(t,`outrostart`)},()=>{xi(t,`outroend`),e?.()})},stop:()=>{f?.abort(),p?.abort()}},g=rr;if((g.nodes.t??=[]).push(h),i&&Qr){var _=s;if(!_){for(var v=g.parent;v&&v.f&65536;)for(;(v=v.parent)&&!(v.f&16););_=!v||(v.f&32768)!=0}_&&Nn(()=>{Tr(()=>h.in())})}}function ki(e,t,n,r,i,a){var o=r===1;if(d(t)){var s,c=!1;return $e(()=>{c||(s=ki(e,t({direction:o?`in`:`out`}),n,r,i,a))}),{abort:()=>{c=!0,s?.abort()},deactivate:()=>s.deactivate(),reset:()=>s.reset(),t:()=>s.t()}}if(n?.deactivate(),!t?.duration&&!t?.delay)return i(),a(),{abort:f,deactivate:f,reset:f,t:()=>r};let{delay:l=0,css:u,tick:p,easing:m=wi}=t;var h=[];if(o&&n===void 0&&(p&&p(0,1),u)){var g=Ci(u(0,1));h.push(g,g)}var _=()=>1-r,v=e.animate(h,{duration:l,fill:`forwards`});return v.onfinish=()=>{v.cancel(),i();var o=n?.t()??1-r;n?.abort();var s=r-o,c=t.duration*Math.abs(s),l=[];if(c>0){var d=!1;if(u)for(var f=Math.ceil(c/(1e3/60)),h=0;h<=f;h+=1){var g=o+s*m(h/f),y=Ci(u(g,1-g));l.push(y),d||=y.overflow===`hidden`}d&&(e.style.overflow=`hidden`),_=()=>{var e=v.currentTime;return o+s*m(e/c)},p&&bi(()=>{if(v.playState!==`running`)return!1;var e=_();return p(e,1-e),!0})}v=e.animate(l,{duration:c,fill:`forwards`}),v.onfinish=()=>{_=()=>r,p?.(r,1-r),a()}},{abort:()=>{v&&(v.cancel(),v.effect=null,v.onfinish=f)},deactivate:()=>{a=f},reset:()=>{r===0&&p?.(1,0)},t:()=>_()}}function Ai(e,t,n,r,i,a){let o=Le;Le&&Ve();var s=null;Le&&ze.nodeType===1&&(s=ze,Ve());var c=Le?ze:e,l=rr,u=new ii(c,!1);In(()=>{let e=t()||null;var a=i?i():n||e===`svg`?je:void 0;if(e===null){u.ensure(null,null),$r(!0);return}return u.ensure(e,t=>{if(e){if(s=Le?s:Sn(e,a),qr(s,s),r){var n=null;Le&&Fr(e)&&s.append(n=document.createComment(``));var i=Le?vn(s):s.appendChild(_n());Le&&(i===null?Re(!1):Be(i)),Ei(l),r(s,i),n?.remove(),Ei(null)}rr.nodes.end=s,t.before(s)}Le&&Be(t)}),$r(!0),()=>{e&&$r(!1)}},T),On(()=>{$r(!0)}),o&&(Re(!0),Be(c))}function ji(e,t){var n=void 0,r;Ln(()=>{n!==(n=t())&&(r&&=(Hn(r),null),n&&(r=Rn(()=>{Nn(()=>n(e))})))})}function Mi(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t=0;){var s=o+a;(o===0||Fi.includes(r[o-1]))&&(s===r.length||Fi.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Li(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function Ri(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function zi(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(Ri)),i&&c.push(...Object.keys(i).map(Ri));var l=0,u=-1;let t=e.length;for(var d=0;d{Hi(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),On(()=>{t.disconnect()})}function Wi(e,t,n=t){var r=new WeakSet,i=!0;ht(e,`change`,t=>{var i=t?`[selected]`:`:checked`,a;if(e.multiple)a=[].map.call(e.querySelectorAll(i),Gi);else{var o=e.querySelector(i)??e.querySelector(`option:not([disabled])`);a=o&&Gi(o)}n(a),e.__value=a,Pt!==null&&r.add(Pt)}),Nn(()=>{var a=t();if(e===document.activeElement){var o=Pt;if(r.has(o))return}if(Hi(e,a,i),i&&a===void 0){var s=e.querySelector(`:checked`);s!==null&&(a=Gi(s),n(a))}e.__value=a,i=!1}),Ui(e)}function Gi(e){return`__value`in e?e.__value:e.value}var Ki=Symbol(`class`),qi=Symbol(`style`),Ji=Symbol(`is custom element`),Yi=Symbol(`is html`),Xi=ge?`link`:`LINK`,Zi=ge?`input`:`INPUT`,Qi=ge?`option`:`OPTION`,$i=ge?`select`:`SELECT`,ea=ge?`progress`:`PROGRESS`;function ta(e){if(Le){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;G(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;G(e,`checked`,null),e.checked=r}}};e[me]=n,$e(n),pt()}}function na(e,t){var n=sa(e);n.value===(n.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==ea)||(e.value=t??``)}function ra(e,t){var n=sa(e);n.checked!==(n.checked=t??void 0)&&(e.checked=t)}function ia(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function G(e,t,n,r){var i=sa(e);Le&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===Xi)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[le]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&la(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function aa(e,t,n,r,i=!1,a=!1){if(Le&&i&&e.nodeName===Zi){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||ta(o)}var s=sa(e),c=s[Ji],l=!s[Yi];let u=Le&&c;u&&Re(!1);var d=t||{},f=e.nodeName===Qi;for(var p in t)p in n||(n[p]=null);n.class?n.class=Pi(n.class):(r||n[Ki])&&(n.class=null),n[qi]&&(n.style??=null);var m=la(e);if(e.nodeName===Zi&&`type`in n&&(`value`in n||`__value`in n)){var h=n.type;(h!==d.type||h===void 0&&e.hasAttribute(`type`))&&(d.type=h,G(e,`type`,h,a))}for(let i in n){let o=n[i];if(f&&i===`value`&&o==null){e.value=e.__value=``,d[i]=o;continue}if(i===`class`){W(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[Ki],n[Ki]),d[i]=o,d[Ki]=n[Ki];continue}if(i===`style`){Vi(e,o,t?.[qi],n[qi]),d[i]=o,d[qi]=n[qi];continue}var g=d[i];if(!(o===g&&!(o===void 0&&e.hasAttribute(i)))){d[i]=o;var _=i[0]+i[1];if(_!==`$$`)if(_===`on`){let t={},n=`$$`+i,r=i.slice(2);var v=Or(r);if(Er(r)&&(r=r.slice(0,-7),t.capture=!0),!v&&g){if(o!=null)continue;e.removeEventListener(r,d[n],t),d[n]=null}if(v)R(r,e,o),Vr([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=zr(r,e,a,t)}}else if(i===`style`)G(e,i,o);else if(i===`autofocus`)ut(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))e.value=e.__value=o;else if(i===`selected`&&f)ia(e,o);else{var y=i;l||(y=jr(y));var b=y===`defaultValue`||y===`defaultChecked`;if(o==null&&!c&&!b)if(s[i]=null,y===`value`||y===`checked`){let n=e,r=t===void 0;if(y===`value`){let e=n.defaultValue;n.removeAttribute(y),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(y),n.defaultChecked=e,n.checked=r?e:!1}}else e.removeAttribute(i);else b||m.includes(y)&&(c||typeof o!=`string`)?(e[y]=o,y in s&&(s[y]=ke)):typeof o!=`function`&&G(e,y,o,a)}}}return u&&Re(!0),d}function oa(e,t,n=[],r=[],i=[],a,o=!1,s=!1){bt(i,n,r,n=>{var r=void 0,i={},c=e.nodeName===$i,l=!1;if(Ln(()=>{var u=t(...n.map(L)),d=aa(e,r,u,a,o,s);l&&c&&`value`in u&&Hi(e,u.value);for(let e of Object.getOwnPropertySymbols(i))u[e]||Hn(i[e]);for(let t of Object.getOwnPropertySymbols(u)){var f=u[t];t.description===`@attach`&&(!r||f!==r[t])&&(i[t]&&Hn(i[t]),i[t]=Rn(()=>ji(e,()=>f))),d[t]=f}r=d}),c){var u=e;Nn(()=>{Hi(u,r.value,!0),Ui(u)})}l=!0})}function sa(e){return e[ue]??={[Ji]:e.nodeName.includes(`-`),[Yi]:e.namespaceURI===Ae}}var ca=new Map;function la(e){var t=e.getAttribute(`is`)||e.nodeName,n=ca.get(t);if(n)return n;ca.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function ua(e,t,n=t){var r=new WeakSet;ht(e,`input`,async i=>{var a=i?e.defaultValue:e.value;if(a=fa(e)?pa(a):a,n(a),Pt!==null&&r.add(Pt),await Sr(),a!==(a=t())){var o=e.selectionStart,s=e.selectionEnd,c=e.value.length;if(e.value=a??``,s!==null){var l=e.value.length;o===s&&s===c&&l>c?(e.selectionStart=l,e.selectionEnd=l):(e.selectionStart=o,e.selectionEnd=Math.min(s,l))}}}),(Le&&e.defaultValue!==e.value||Tr(t)==null&&e.value)&&(n(fa(e)?pa(e.value):e.value),Pt!==null&&r.add(Pt)),Fn(()=>{var n=t();if(e===document.activeElement){var i=Pt;if(r.has(i))return}fa(e)&&n===pa(e.value)||e.type===`date`&&!n&&!e.value||n!==e.value&&(e.value=n??``)})}function da(e,t,n=t){ht(e,`change`,t=>{n(t?e.defaultChecked:e.checked)}),(Le&&e.defaultChecked!==e.checked||Tr(t)==null)&&n(e.checked),Fn(()=>{e.checked=!!t()})}function fa(e){var t=e.type;return t===`number`||t===`range`}function pa(e){return e===``?null:+e}function ma(e,t){return e===t||e?.[se]===t}function ha(e={},t,n,r){var i=Je.r,a=rr;return Nn(()=>{var o,s;return Fn(()=>{o=s,s=r?.()||[],Tr(()=>{ma(n(...s),e)||(t(e,...s),o&&ma(n(...o),e)&&t(null,...o))})}),()=>{let r=a;for(;r!==i&&r.parent!==null&&r.parent.f&33554432;)r=r.parent;let o=()=>{s&&ma(n(...s),e)&&t(null,...s)},c=r.teardown;r.teardown=()=>{o(),c?.()}}}),e}var ga={get(e,t){if(!e.exclude.has(t))return e.props[t]},set(e,t){return!1},getOwnPropertyDescriptor(e,t){if(!e.exclude.has(t)&&t in e.props)return{enumerable:!0,configurable:!0,value:e.props[t]}},has(e,t){return!e.exclude.has(t)&&t in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(t=>!e.exclude.has(t))}};function _a(e,t,n){return new Proxy({props:e,exclude:t},ga)}function va(e,t,n,r){var i=!0,o=(n&8)!=0,s=(n&16)!=0,c=r,l=!0,u=void 0,d=()=>s&&i?(u??=wt(r),L(u)):(l&&(l=!1,c=s?Tr(r):r),c);let f;if(o){var p=se in e||ce in e;f=a(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;o?[m,h]=lt(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&Ce(t),f(m)));var g=i?()=>{var n=e[t];return n===void 0?d():(l=!0,n)}:()=>{var n=e[t];return n!==void 0&&(c=void 0),n===void 0?c:n};if(i&&!(n&4))return g;if(f){var _=e.$$legacy;return(function(e,t){return arguments.length>0?((!i||!t||_||h)&&f(t?g():e),e):g()})}var v=!1,y=(n&1?wt:Dt)(()=>(v=!1,g()));o&&L(y);var b=rr;return(function(e,t){if(arguments.length>0){let n=t?L(y):i&&o?M(e):e;return j(y,n),v=!0,c!==void 0&&(c=n),e}return Qn&&v||b.f&16384?y.v:L(y)})}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var ya=new Set([`$$slots`,`$$events`,`$$legacy`,`icon`,`class`]),ba=Yr(``);function K(e,t){let n=va(t,`icon`,19,()=>[]),r=va(t,`class`,3,``),i=_a(t,ya);var a=ba();oa(a,()=>({xmlns:`http://www.w3.org/2000/svg`,width:`24`,height:`24`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,class:r(),"aria-hidden":`true`,focusable:`false`,...i}));{let e=(t,n=f)=>{var r=Zr();U(P(r),17,n,ai,(t,n)=>{var r=k(()=>g(L(n),3));let i=()=>L(r)[0],a=()=>L(r)[1],o=()=>L(r)[2];var s=Zr();Ai(P(s),i,!0,(t,n)=>{oa(t,()=>({xmlns:`http://www.w3.org/2000/svg`,...a()}));var r=Zr(),i=P(r),s=t=>{e(t,o)},c=k(()=>Array.isArray(o()));H(i,e=>{L(c)&&e(s)}),B(n,r)}),B(t,s)}),B(t,r)};e(N(a),n),E(a)}B(e,a)}var xa=Yr(``);function Sa(e){B(e,xa())}function Ca(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function wa(e,t=null){let n=Ca();if(!n)return t;try{return n.getItem(e)??t}catch{return t}}function Ta(e,t){let n=Ca();if(n)try{n.setItem(e,String(t))}catch{}}function Ea(e){let t=Number(e);return Number.isFinite(t)?Math.min(240,Math.max(60,Math.round(t))):240}function Da(e,t,n){return Ea(Number(e)+Number(n)-Number(t))}var Oa=new class{#e=A(`system`);get theme(){return L(this.#e)}set theme(e){j(this.#e,e,!0)}#t=A(0);get tick(){return L(this.#t)}set tick(e){j(this.#t,e,!0)}init(){this.theme=wa(`gomodel_theme`,`system`),this.apply(),window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{this.theme===`system`&&this.tick++})}set(e){this.theme=e,Ta(`gomodel_theme`,e),this.apply(),this.tick++}toggle(){let e=[`light`,`system`,`dark`];this.set(e[(e.indexOf(this.theme)+1)%e.length])}apply(){let e=document.documentElement;this.theme===`system`?e.removeAttribute(`data-theme`):e.setAttribute(`data-theme`,this.theme)}},ka=new class{#e=A(M(240));get width(){return L(this.#e)}set width(e){j(this.#e,e,!0)}get collapsed(){return this.width===60}init(){let e=wa(`gomodel_sidebar_width`),t=wa(`gomodel_sidebar_collapsed`)===`true`;this.setWidth(e??(t?60:240))}toggle(){this.setWidth(this.collapsed?240:60,!0)}setWidth(e,t=!1){this.width=Ea(e),typeof document<`u`&&document.documentElement.style.setProperty(`--sidebar-width`,`${this.width}px`),t&&(Ta(`gomodel_sidebar_width`,this.width),Ta(`gomodel_sidebar_collapsed`,this.collapsed))}},Aa=new class{#e=A(M([]));get stack(){return L(this.#e)}set stack(e){j(this.#e,e,!0)}#t=1;opened(){let e=this.#t++;return this.stack=[...this.stack,e],e}closed(e){this.stack=this.stack.filter(t=>t!==e)}isTop(e){return this.stack.length>0&&this.stack[this.stack.length-1]===e}get openCount(){return this.stack.length}get anyOpen(){return this.stack.length>0}},ja=[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`}]],Ma=[[`path`,{d:`m12 19-7-7 7-7`}],[`path`,{d:`M19 12H5`}]],Na=[[`path`,{d:`M5 12h14`}],[`path`,{d:`m12 5 7 7-7 7`}]],Pa=[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`}],[`path`,{d:`M12 22V12`}]],Fa=[[`rect`,{width:`16`,height:`20`,x:`4`,y:`2`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`6`,y2:`6`}],[`line`,{x1:`16`,x2:`16`,y1:`14`,y2:`18`}],[`path`,{d:`M16 10h.01`}],[`path`,{d:`M12 10h.01`}],[`path`,{d:`M8 10h.01`}],[`path`,{d:`M12 14h.01`}],[`path`,{d:`M8 14h.01`}],[`path`,{d:`M12 18h.01`}],[`path`,{d:`M8 18h.01`}]],Ia=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}],[`path`,{d:`M8 14h.01`}],[`path`,{d:`M12 14h.01`}],[`path`,{d:`M16 14h.01`}],[`path`,{d:`M8 18h.01`}],[`path`,{d:`M12 18h.01`}],[`path`,{d:`M16 18h.01`}]],La=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}]],Ra=[[`path`,{d:`M13 17V9`}],[`path`,{d:`M18 17V5`}],[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M8 17v-3`}]],za=[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M18 17V9`}],[`path`,{d:`M13 17V5`}],[`path`,{d:`M8 17v-3`}]],Ba=[[`path`,{d:`M20 6 9 17l-5-5`}]],Va=[[`path`,{d:`m6 9 6 6 6-6`}]],Ha=[[`path`,{d:`m15 18-6-6 6-6`}]],Ua=[[`path`,{d:`m9 18 6-6-6-6`}]],Wa=[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`}],[`path`,{d:`m9 11 3 3L22 4`}]],Ga=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m9 12 2 2 4-4`}]],Ka=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`}],[`path`,{d:`M12 18V6`}]],qa=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 6v6l4 2`}]],Ja=[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`}]],Ya=[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}],[`path`,{d:`M3 5V19A9 3 0 0 0 15 21.84`}],[`path`,{d:`M21 5V8`}],[`path`,{d:`M21 12L18 17H22L19 22`}],[`path`,{d:`M3 12A9 3 0 0 0 14.59 14.87`}]],Xa=[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`}]],Za=[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`}],[`path`,{d:`M10 9H8`}],[`path`,{d:`M16 13H8`}],[`path`,{d:`M16 17H8`}]],Qa=[[`path`,{d:`m12 14 4-4`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`}]],$a=[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}],[`path`,{d:`M3 3v5h5`}],[`path`,{d:`M12 7v5l4 2`}]],eo=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 16v-4`}],[`path`,{d:`M12 8h.01`}]],to=[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`}]],no=[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`}]],ro=[[`path`,{d:`M3 5h.01`}],[`path`,{d:`M3 12h.01`}],[`path`,{d:`M3 19h.01`}],[`path`,{d:`M8 5h13`}],[`path`,{d:`M8 12h13`}],[`path`,{d:`M8 19h13`}]],io=[[`circle`,{cx:`12`,cy:`16`,r:`1`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`}]],ao=[[`path`,{d:`m16 17 5-5-5-5`}],[`path`,{d:`M21 12H9`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`}]],oo=[[`path`,{d:`M15 3h6v6`}],[`path`,{d:`m21 3-7 7`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M9 21H3v-6`}]],so=[[`path`,{d:`m14 10 7-7`}],[`path`,{d:`M20 10h-6V4`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M4 14h6v6`}]],co=[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`}]],lo=[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`}]],uo=[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`}],[`path`,{d:`m15 5 4 4`}]],fo=[[`path`,{d:`M12 22v-5`}],[`path`,{d:`M15 8V2`}],[`path`,{d:`M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z`}],[`path`,{d:`M9 8V2`}]],po=[[`path`,{d:`M5 12h14`}],[`path`,{d:`M12 5v14`}]],mo=[[`path`,{d:`M12 2v10`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`}]],ho=[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`}],[`path`,{d:`M21 3v5h-5`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`}],[`path`,{d:`M8 16H3v5`}]],go=[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}],[`path`,{d:`M3 3v5h5`}]],_o=[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`}]],vo=[[`path`,{d:`m21 21-4.34-4.34`}],[`circle`,{cx:`11`,cy:`11`,r:`8`}]],yo=[[`path`,{d:`m10.852 14.772-.383.923`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`}],[`path`,{d:`m13.148 9.228.383-.923`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`}],[`path`,{d:`m14.772 10.852.923-.383`}],[`path`,{d:`m14.772 13.148.923.383`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`}],[`path`,{d:`M6 18h.01`}],[`path`,{d:`M6 6h.01`}],[`path`,{d:`m9.228 10.852-.923-.383`}],[`path`,{d:`m9.228 13.148-.923.383`}]],bo=[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`}]],xo=[[`path`,{d:`M14 17H5`}],[`path`,{d:`M19 7h-9`}],[`circle`,{cx:`17`,cy:`17`,r:`3`}],[`circle`,{cx:`7`,cy:`7`,r:`3`}]],So=[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`}],[`circle`,{cx:`12`,cy:`12`,r:`3`}]],Co=[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`}],[`path`,{d:`m9 12 2 2 4-4`}]],wo=[[`path`,{d:`m2 2 20 20`}],[`path`,{d:`M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71`}],[`path`,{d:`M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264`}]],To=[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`}]],Eo=[[`path`,{d:`m18 14 4 4-4 4`}],[`path`,{d:`m18 2 4 4-4 4`}],[`path`,{d:`M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22`}],[`path`,{d:`M2 6h1.972a4 4 0 0 1 3.6 2.2`}],[`path`,{d:`M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45`}]],Do=[[`circle`,{cx:`12`,cy:`12`,r:`4`}],[`path`,{d:`M12 2v2`}],[`path`,{d:`M12 20v2`}],[`path`,{d:`m4.93 4.93 1.41 1.41`}],[`path`,{d:`m17.66 17.66 1.41 1.41`}],[`path`,{d:`M2 12h2`}],[`path`,{d:`M20 12h2`}],[`path`,{d:`m6.34 17.66-1.41 1.41`}],[`path`,{d:`m19.07 4.93-1.41 1.41`}]],Oo=[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`}]],ko=[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`}],[`circle`,{cx:`12`,cy:`14`,r:`8`}]],Ao=[[`path`,{d:`M10 11v6`}],[`path`,{d:`M14 11v6`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`}],[`path`,{d:`M3 6h18`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`}]],jo=[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`}],[`path`,{d:`M12 9v4`}],[`path`,{d:`M12 17h.01`}]],Mo=[[`circle`,{cx:`12`,cy:`8`,r:`5`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`}]],No=[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`}],[`circle`,{cx:`12`,cy:`7`,r:`4`}]],Po=[[`path`,{d:`M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1`}],[`path`,{d:`M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4`}]],Fo=[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`}],[`path`,{d:`m14 7 3 3`}],[`path`,{d:`M5 6v4`}],[`path`,{d:`M19 14v4`}],[`path`,{d:`M10 2v2`}],[`path`,{d:`M7 8H3`}],[`path`,{d:`M21 16h-4`}],[`path`,{d:`M11 3H9`}]],Io=[[`rect`,{width:`8`,height:`8`,x:`3`,y:`3`,rx:`2`}],[`path`,{d:`M7 11v4a2 2 0 0 0 2 2h4`}],[`rect`,{width:`8`,height:`8`,x:`13`,y:`13`,rx:`2`}]],Lo=[[`path`,{d:`M18 6 6 18`}],[`path`,{d:`m6 6 12 12`}]],Ro=z(``),zo=z(`
        `,1);function Bo(e,t){D(t,!0);let n=va(t,`compact`,3,!1),r=[{value:`light`,icon:Do,label:`Light theme`},{value:`system`,icon:co,label:`System theme`},{value:`dark`,icon:lo,label:`Dark theme`}],i=k(()=>r.find(e=>e.value===Oa.theme)||r[1]),a=k(()=>`Change theme (currently `+L(i).label+`)`);var o=zo(),s=P(o);let c;U(s,21,()=>r,e=>e.value,(e,t)=>{var n=Ro();let r;K(N(n),{get icon(){return L(t).icon},class:`theme-icon`}),E(n),I(()=>{r=W(n,1,`theme-btn svelte-1keql7b`,null,r,{active:Oa.theme===L(t).value}),G(n,`aria-pressed`,Oa.theme===L(t).value),G(n,`title`,L(t).label),G(n,`aria-label`,L(t).label)}),R(`click`,n,()=>Oa.set(L(t).value)),B(e,n)}),E(s);var l=F(s,2);let u;K(N(l),{get icon(){return L(i).icon},class:`theme-icon`}),E(l),I(()=>{c=W(s,1,`theme-toggle svelte-1keql7b`,null,c,{"is-compact":n()}),u=W(l,1,`theme-toggle-mobile svelte-1keql7b`,null,u,{"is-compact":n()}),G(l,`title`,L(a)),G(l,`aria-label`,L(a))}),R(`click`,l,()=>Oa.toggle()),B(e,o),O()}Vr([`click`]);function Vo(){return typeof window>`u`?`/`:window.GOMODEL_BASE_PATH||`/`}function Ho(e){let t=Vo();return!e||e.charAt(0)!==`/`||e.indexOf(`//`)===0||t===`/`||e===t||e.indexOf(t+`/`)===0?e:t+e}function Uo(e){let t=Vo();return t===`/`||!e?e:e===t?`/`:e.indexOf(t+`/`)===0?e.slice(t.length)||`/`:e}function Wo(){return typeof window>`u`?``:window.GOMODEL_VERSION||``}function Go(){return typeof window>`u`?!1:window.GOMODEL_DEMO_MODE===!0}var Ko=[`overview`,`usage`,`budgets`,`rate-limits`,`models`,`workflows`,`audit-logs`,`guardrails`,`mcp-servers`,`providers-config`,`auth-keys`,`settings`];function qo(e){return e.startsWith(`/admin/static/`)?`/`+e.slice(14).replace(/^\/+/,``):e}function Jo(e){let t=qo(Uo(e)).replace(/\/$/,``).replace(`/admin/dashboard`,``).replace(/^\//,``).split(`/`),n=t[0];n===`audit`&&(n=`audit-logs`);let r=t[1]||null;return n===`settings`&&r===`guardrails`?{page:`guardrails`,sub:null}:(n=Ko.includes(n)?n:`overview`,{page:n,sub:r})}var Yo=new class{#e=A(`overview`);get page(){return L(this.#e)}set page(e){j(this.#e,e,!0)}#t=A(null);get sub(){return L(this.#t)}set sub(e){j(this.#t,e,!0)}init(){let{page:e,sub:t}=Jo(window.location.pathname);this.page=e,this.sub=t,window.addEventListener(`popstate`,()=>{let{page:e,sub:t}=Jo(window.location.pathname);this.page=e,this.sub=t})}navigate(e,t=null){let n=t?`/`+t:``;history.pushState(null,``,Ho(`/admin/dashboard/`+e+n)),this.page=e,this.sub=t}},Xo=`X-GoModel-Auth-Login`,Zo=`X-GoModel-Auth-Logout`,Qo=`X-GoModel-Auth-User`;function $o(e){let t=String(e||``).trim();return!t.startsWith(`/`)||t.startsWith(`//`)||t.includes(`\\`)?``:t}function es(e){let t=e?.headers;if(!t||typeof t.has!=`function`)return null;let n={};return t.has(Xo)&&(n.loginURL=$o(t.get(Xo))),t.has(Zo)&&(n.logoutURL=$o(t.get(Zo))),t.has(Qo)&&(n.user=String(t.get(Qo)||``).trim().slice(0,256)),n}var ts=`gomodel_api_key`;function ns(e){let t=String(e||``).trim();if(/^Bearer\s*$/i.test(t))return``;let n=t.match(/^Bearer\s+(.+)$/i);return n?n[1].trim():t}var q=new class{#e=A(``);get apiKey(){return L(this.#e)}set apiKey(e){j(this.#e,e,!0)}#t=A(!1);get needsAuth(){return L(this.#t)}set needsAuth(e){j(this.#t,e,!0)}#n=A(!1);get authError(){return L(this.#n)}set authError(e){j(this.#n,e,!0)}#r=A(``);get authErrorMessage(){return L(this.#r)}set authErrorMessage(e){j(this.#r,e,!0)}#i=A(!1);get dialogOpen(){return L(this.#i)}set dialogOpen(e){j(this.#i,e,!0)}#a=A(``);get externalLoginURL(){return L(this.#a)}set externalLoginURL(e){j(this.#a,e,!0)}#o=A(``);get externalLogoutURL(){return L(this.#o)}set externalLogoutURL(e){j(this.#o,e,!0)}#s=A(``);get externalUser(){return L(this.#s)}set externalUser(e){j(this.#s,e,!0)}#c=A(0);get generation(){return L(this.#c)}set generation(e){j(this.#c,e,!0)}#l=A(0);get refreshTick(){return L(this.#l)}set refreshTick(e){j(this.#l,e,!0)}init(){try{this.apiKey=ns(localStorage.getItem(ts)||``)}catch{this.apiKey=``}}hasApiKey(){return ns(this.apiKey)!==``}save(){this.apiKey=ns(this.apiKey);try{localStorage.setItem(ts,this.apiKey)}catch{}}openDialog(){this.dialogOpen=!0}closeDialog(){this.dialogOpen=!1}submit(){let e=ns(this.apiKey);return e?(this.apiKey=e,this.save(),this.generation++,this.authError=!1,this.authErrorMessage=``,this.needsAuth=!1,this.closeDialog(),this.refresh(),!0):(this.apiKey=``,this.authError=!0,this.authErrorMessage=``,this.needsAuth=!0,this.openDialog(),!1)}refresh(){this.refreshTick++}observeResponse(e){let t=es(e);t&&(Object.hasOwn(t,`loginURL`)&&(this.externalLoginURL=t.loginURL),Object.hasOwn(t,`logoutURL`)&&(this.externalLogoutURL=t.logoutURL),Object.hasOwn(t,`user`)&&(this.externalUser=t.user))}handleUnauthorized(e,t=``){return typeof e==`number`&&e{r[e.type]=e.value}),r.year+`-`+r.month+`-`+r.day}formatTimestampInTimeZone(e,t){if(e==null)return`-`;let n=new Date(e);if(Number.isNaN(n.getTime()))return`-`;let r=ps(`en-CA`,{timeZone:ms(t)?t:ls,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`}).formatToParts(n),i={};return r.forEach(e=>{i[e.type]=e.value}),i.year+`-`+i.month+`-`+i.day+` `+i.hour+`:`+i.minute+`:`+i.second}formatTimestamp(e){return this.formatTimestampInTimeZone(e,this.effectiveTimezone())}currentDateKey(e){return this.dateKeyInTimeZone(e||new Date,this.effectiveTimezone())}dateKeyToDate(e){return is(e)}dateToDateKey(e){return as(e)}addDaysToDateKey(e,t){return os(e,t)}todayDate(){return this.dateKeyToDate(this.currentDateKey())}startOfMonthDate(e){let t=e instanceof Date?e:this.todayDate();return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),1))}timeZoneOffsetLabel(e,t){let n=ms(e)?e:ls;try{let e=ps(`en-US`,{timeZone:n,hour:`2-digit`,minute:`2-digit`,hourCycle:`h23`,timeZoneName:`longOffset`}).formatToParts(t||new Date).find(e=>e.type===`timeZoneName`);if(!e||!e.value)return`UTC+00:00`;let r=e.value.replace(`GMT`,`UTC`);return r===`UTC`?`UTC+00:00`:r}catch{return`UTC+00:00`}}timeZoneOffsetMinutes(e,t){let n=/^UTC([+-])(\d{2}):(\d{2})$/.exec(this.timeZoneOffsetLabel(e,t));if(!n)return 0;let r=Number(n[2])*60+Number(n[3]);return n[1]===`-`?-r:r}timeZoneOptionLabel(e,t){return e+` (`+this.timeZoneOffsetLabel(e,t)+`)`}detectedTimeZoneLabel(){return this.timeZoneOptionLabel(this.detectedTimezone)}effectiveTimeZoneLabel(){return this.timeZoneOptionLabel(this.effectiveTimezone())}ensureOptions(){if(this.optionsLoaded)return;let e=new Date,t=[];try{typeof Intl.supportedValuesOf==`function`&&(t=Intl.supportedValuesOf(`timeZone`))}catch{t=[]}[ls,this.detectedTimezone,this.override].forEach(e=>{e&&t.indexOf(e)===-1&&ms(e)&&t.push(e)}),t=t.filter(e=>ms(e)),t.sort((t,n)=>{let r=this.timeZoneOffsetMinutes(t,e)-this.timeZoneOffsetMinutes(n,e);return r===0?t.localeCompare(n):r}),this.options=t.map(t=>({value:t,label:this.timeZoneOptionLabel(t,e)})),this.optionsLoaded=!0}saveOverride(){let e=Ca();if(e)if(this.override&&ms(this.override))try{e.setItem(us,this.override)}catch{}else{try{e.removeItem(us)}catch{}this.override=``}this.optionsLoaded=!1,this.ensureOptions()}clearOverride(){let e=Ca();if(e)try{e.removeItem(us)}catch{}this.override=``}calendarTimeZoneText(){let e=this.override?`manual override`:`auto-detected`;return`Activity grouped by `+this.effectiveTimeZoneLabel()+` (`+e+`)`}};function vs(e,t){let n=e&&typeof e==`object`&&e.error&&e.error.message;return(typeof n==`string`?n.trim():``)||t}function ys(e,t){let n=e&&e.data;if(n&&typeof n==`object`){let e=[n.message,n.error,n.error&&typeof n.error==`object`?n.error.message:null];for(let t of e)if(typeof t==`string`&&t.trim())return t.trim()}return t}function bs(){let e={"Content-Type":`application/json`},t=ns(q.apiKey);return t&&(e.Authorization=`Bearer `+t),e[`X-GoModel-Timezone`]=_s.effectiveTimezone(),e}function xs(e,t={}){return fetch(Ho(e),{...t,headers:{...bs(),...t.headers||{}}})}async function Ss(e,t,{label:n=e,parse:r=!0}={}){let i=q.generation,a=await xs(e,t);if(q.observeResponse(a),a.status===401)return q.handleUnauthorized(i),{ok:!1,stale:ie.trim()).filter(Boolean);return e.length>0?e:Ds}cacheVisible(){if(this.flag(`CACHE_ENABLED`)!==``)return this.booleanFlag(`CACHE_ENABLED`,!1);let e=this.flag(`REDIS_URL`),t=this.flag(`SEMANTIC_CACHE_ENABLED`);return e===``&&t===``||this.booleanFlag(`REDIS_URL`,!1)||this.booleanFlag(`SEMANTIC_CACHE_ENABLED`,!1)}auditVisible(){return this.booleanFlag(`LOGGING_ENABLED`,!0)}usageVisible(){return this.booleanFlag(`USAGE_ENABLED`,!0)}budgetsVisible(){return this.booleanFlag(`BUDGETS_ENABLED`,!0)}rateLimitsVisible(){return this.booleanFlag(`RATE_LIMITS_ENABLED`,!0)}guardrailsVisible(){return this.booleanFlag(`GUARDRAILS_ENABLED`,!0)}mcpVisible(){return this.booleanFlag(`MCP_ENABLED`,!0)}liveLogsVisible(){return this.booleanFlag(`DASHBOARD_LIVE_LOGS_ENABLED`,!0)}fetch(){return this.#n||=this.#r().finally(()=>{this.#n=null}),this.#n}async ensureLoaded(){if(this.#n){await this.#n;return}this.loaded||await this.fetch()}async#r(){let e=typeof AbortController==`function`?new AbortController:null,t=e?setTimeout(()=>e.abort(),1e4):null;try{let t=await Cs(`/admin/runtime/config`,{label:`dashboard config`,signal:e?e.signal:void 0});if(t.stale)return;if(!t.ok){this.config={},this.loaded=!1;return}let n=t.data,r={};for(let e of Es)n&&typeof n==`object`&&!Array.isArray(n)&&n[e]!==void 0&&n[e]!==null&&(r[e]=String(n[e]).trim());this.config=r,this.loaded=!0}catch(e){console.error(`Failed to fetch dashboard config:`,e),this.config={},this.loaded=!1}finally{t!==null&&clearTimeout(t)}}},ks=[{page:`overview`,label:`Overview`,icon:no},{page:`providers-config`,label:`Providers`,icon:yo},{page:`models`,label:`Models`,icon:Pa},{page:`audit-logs`,label:`Audit Logs`,icon:$a},{page:`usage`,label:`Usage`,icon:za},{page:`budgets`,label:`Budgets`,icon:Po,visible:()=>Os.budgetsVisible()},{page:`rate-limits`,label:`Rate Limits`,icon:Qa,visible:()=>Os.rateLimitsVisible()},{page:`auth-keys`,label:`API Keys`,icon:to},{page:`workflows`,label:`Workflows`,icon:Io},{page:`guardrails`,label:`Guardrails (experimental)`,icon:Co,visible:()=>Os.guardrailsVisible()},{page:`mcp-servers`,label:`MCP Servers`,icon:fo,visible:()=>Os.mcpVisible()},{page:`settings`,label:`Settings`,icon:So}],As=z(` `),js=z(``),Ms=z(`
        `),Ns=z(` `,1);function Ps(e,t){D(t,!0);let n=k(()=>ks.filter(e=>!e.visible||e.visible())),r=A(null),i=0,a=0,o=!1;function s(e){e.button===0&&(e.preventDefault(),j(r,e.pointerId,!0),i=e.clientX,a=ka.width,o=!1,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`sidebar-resizing`))}function c(e){e.pointerId===L(r)&&(!o&&Math.abs(e.clientX-i)<=4||(o=!0,ka.setWidth(Da(a,i,e.clientX))))}function l(e){L(r)===null||e.pointerId!==void 0&&e.pointerId!==L(r)||(j(r,null),document.body.classList.remove(`sidebar-resizing`),ka.setWidth(ka.width,!0))}function u(){if(o){o=!1;return}ka.toggle()}function d(e){let t;if(e.key===`ArrowLeft`)t=ka.width-12;else if(e.key===`ArrowRight`)t=ka.width+12;else if(e.key===`Home`)t=60;else if(e.key===`End`)t=240;else if(e.key===`Enter`||e.key===` `){e.preventDefault(),ka.toggle();return}else return;e.preventDefault(),ka.setWidth(t,!0)}var f=Ns(),p=P(f);let m;var h=N(p),g=N(h);Sa(N(g),{}),E(g),He(4),E(h);var _=F(h,2);U(_,21,()=>L(n),e=>e.page,(e,t)=>{var n=As();let r;var i=N(n);K(i,{get icon(){return L(t).icon},class:`nav-icon`});var a=F(i,2),o=N(a,!0);E(a),E(n),I(e=>{G(n,`href`,e),r=W(n,1,`nav-item svelte-1nwtzae`,null,r,{active:Yo.page===L(t).page}),G(n,`title`,L(t).label),V(o,L(t).label)},[()=>Ho(`/admin/dashboard/`+L(t).page)]),R(`click`,n,e=>{e.preventDefault(),Yo.navigate(L(t).page)}),B(e,n)}),E(_);var v=F(_,2),y=N(v);Bo(y,{get compact(){return ka.collapsed}});var b=F(y,2),x=e=>{var t=js(),n=N(t),r=N(n);K(r,{get icon(){return Mo},class:`api-key-open-icon`});var i=F(r,2),a=N(i,!0);E(i),E(n);var o=F(n,2);K(N(o),{get icon(){return ao},class:`api-key-open-icon`}),He(2),E(o),E(t),I(e=>{G(n,`title`,q.externalUser),V(a,q.externalUser),G(o,`href`,e)},[()=>Ho(q.externalLogoutURL)]),B(e,t)};H(b,e=>{q.externalUser&&q.externalLogoutURL&&e(x)});var S=F(b,2),C=e=>{var t=Ms(),n=N(t),r=N(n);K(r,{get icon(){return io},class:`api-key-open-icon`});var i=F(r,2),a=N(i,!0);E(i),E(n),E(t),I(()=>{G(n,`aria-label`,q.needsAuth?`Enter API key`:`Change API key`),V(a,q.needsAuth?`Enter API key`:`Change API key`)}),R(`click`,n,()=>q.openDialog()),B(e,t)},w=k(()=>q.needsAuth||q.hasApiKey());H(S,e=>{L(w)&&e(C)}),E(v),E(p);var T=F(p,2);I(()=>{m=W(p,1,`sidebar svelte-1nwtzae`,null,m,{"sidebar-collapsed":ka.collapsed,"sidebar-resizing":L(r)!==null}),G(T,`aria-valuemin`,60),G(T,`aria-valuemax`,240),G(T,`aria-valuenow`,ka.width)}),R(`pointerdown`,T,s),R(`pointermove`,T,c),R(`pointerup`,T,l),Br(`pointercancel`,T,l),Br(`lostpointercapture`,T,l),R(`keydown`,T,d),R(`click`,T,u),B(e,f),O()}Vr([`click`,`pointerdown`,`pointermove`,`pointerup`,`keydown`]);var Fs=z(``);function Is(e,t){D(t,!0);let n=va(t,`label`,3,`Close`),r=va(t,`class`,3,``),i=va(t,`iconClass`,3,`table-icon-svg`),a=va(t,`disabled`,3,!1),o=va(t,`el`,15,null);var s=Fs();K(N(s),{get icon(){return Lo},get class(){return i()}}),E(s),ha(s,e=>o(e),()=>o()),I(()=>{W(s,1,Pi([`dialog-close-btn`,r()]),`svelte-11l1bb5`),G(s,`aria-label`,n()),s.disabled=a()}),R(`click`,s,function(...e){t.onclick?.apply(this,e)}),B(e,s),O()}Vr([`click`]);function Ls(e){return t=>{let n=n=>{t.contains(n.target)||e()},r=t=>{t.key===`Escape`&&e()};return document.addEventListener(`click`,n,!0),window.addEventListener(`keydown`,r),()=>{document.removeEventListener(`click`,n,!0),window.removeEventListener(`keydown`,r)}}}function Rs(e=`[data-modal-autofocus]`){return t=>{let n=t.querySelector(e);n&&typeof n.focus==`function`&&n.focus()}}var zs=z(`
        `,1);function Bs(e,t){D(t,!0);let n=va(t,`open`,3,!1),r=va(t,`variant`,3,`editor`),i=va(t,`closeOnBackdrop`,3,!0),a=k(()=>r()===`auth`?`auth-dialog-backdrop`:`editor-modal-backdrop`),o=k(()=>r()===`auth`?`auth-dialog-shell`:`editor-modal-shell`);kn(()=>{if(!n())return;let e=Tr(()=>Aa.opened()),r=n=>{n.key===`Escape`&&Aa.isTop(e)&&t.onclose?.()};return window.addEventListener(`keydown`,r),()=>{Aa.closed(e),window.removeEventListener(`keydown`,r)}});function s(e){i()&&e.target===e.currentTarget&&t.onclose?.()}var c=Zr(),l=P(c),u=e=>{var n=zs(),r=P(n),i=F(r,2);hi(N(i),()=>t.children??f),E(i),ji(i,Rs),I(()=>{W(r,1,Pi(L(a)),`svelte-17e0w4c`),W(i,1,Pi(L(o)),`svelte-17e0w4c`)}),R(`click`,i,s),B(e,n)};H(l,e=>{n()&&e(u)}),B(e,c),O()}Vr([`click`]);var Vs=z(`
        or use an API key
        `,1),Hs=z(``),Us=z(``);function Ws(e,t){D(t,!0),Bs(e,{get open(){return q.dialogOpen},variant:`auth`,onclose:()=>q.closeDialog(),children:(e,t)=>{var n=Us(),r=N(n),i=N(r),a=N(i),o=N(a,!0);E(a),E(i),Is(F(i,2),{label:`Close authentication dialog`,onclick:()=>q.closeDialog(),class:`auth-dialog-close`,iconClass:``}),E(r);var s=F(r,2),c=N(s),l=e=>{var t=Vs(),n=P(t);K(N(n),{get icon(){return to}}),He(2),E(n),He(2),I(e=>G(n,`href`,e),[()=>Ho(q.externalLoginURL)]),B(e,t)};H(c,e=>{q.externalLoginURL&&e(l)});var u=F(c,2),d=N(u);K(d,{get icon(){return io},class:`auth-dialog-input-icon`});var f=F(d,2);ta(f),E(u);var p=F(u,2),m=e=>{var t=Hs(),n=N(t,!0);E(t),I(()=>V(n,q.authErrorMessage||`Enter a valid API key to continue.`)),B(e,t)};H(p,e=>{q.authError&&e(m)});var h=F(p,4),g=N(h),_=N(g);K(_,{get icon(){return Ba},class:`auth-dialog-submit-icon`});var v=F(_,2),y=N(v,!0);E(v),E(g),E(h),E(s),E(n),I(()=>{V(o,q.needsAuth?`Dashboard locked`:`Change API key`),V(y,q.needsAuth?`Unlock dashboard`:`Save API key`)}),Br(`submit`,s,e=>{e.preventDefault(),q.submit()}),ua(f,()=>q.apiKey,e=>q.apiKey=e),B(e,n)},$$slots:{default:!0}}),O()}function Gs(){return{open:!1,title:``,titleId:`typedConfirmationDialogTitle`,inputId:`typed-confirmation-input`,message:``,requiredText:``,value:``,confirmLabel:`Confirm`,icon:jo,dialogClass:``,loading:!1,onConfirm:null,onClose:null}}var Ks=new class{#e=A(M(Gs()));get state(){return L(this.#e)}set state(e){j(this.#e,e,!0)}#t=A(``);get error(){return L(this.#t)}set error(e){j(this.#t,e,!0)}open(e){this.error=``,this.state={...Gs(),open:!0,...e||{}}}close(){let e=this.state;typeof e.onClose==`function`&&e.onClose(),this.state=Gs(),this.error=``}ready(){return String(this.state.value||``).trim().toLowerCase()===String(this.state.requiredText||``).trim().toLowerCase()}inputLabel(){return`Type `+String(this.state.requiredText||``).trim()+` to confirm`}async submit(){if(!this.ready()){this.error=this.inputLabel()+`.`;return}if(typeof this.state.onConfirm==`function`){this.state.loading=!0;try{await this.state.onConfirm()}finally{this.state.loading=!1}}}},qs=z(`

        `),Js=z(``),Ys=z(`

        `);function Xs(e,t){D(t,!0);let n=k(()=>Ks.state);Bs(e,{get open(){return L(n).open},variant:`auth`,onclose:()=>Ks.close(),children:(e,t)=>{var r=Ys(),i=N(r),a=N(i),o=N(a,!0);E(a),Is(F(a,2),{label:`Close confirmation dialog`,onclick:()=>Ks.close(),class:`auth-dialog-close`,iconClass:``}),E(i);var s=F(i,2),c=N(s),l=e=>{var t=qs(),r=N(t,!0);E(t),I(()=>V(r,L(n).message)),B(e,t)};H(c,e=>{L(n).message&&e(l)});var u=F(c,2),d=N(u),f=N(d,!0);E(d);var p=F(d,2);ta(p),E(u);var m=F(u,2),h=e=>{var t=Js(),n=N(t,!0);E(t),I(()=>V(n,Ks.error)),B(e,t)};H(m,e=>{Ks.error&&e(h)});var g=F(m,2),_=N(g),v=F(_,2),y=N(v);K(y,{get icon(){return L(n).icon},class:`form-action-icon`});var b=F(y,2),x=N(b,!0);E(b),E(v),E(g),E(s),E(r),I((e,t)=>{W(r,1,`auth-dialog ${L(n).dialogClass??``}`),G(r,`aria-labelledby`,L(n).titleId),G(a,`id`,L(n).titleId),V(o,L(n).title),G(d,`for`,L(n).inputId),V(f,e),G(p,`id`,L(n).inputId),v.disabled=t,V(x,L(n).confirmLabel)},[()=>Ks.inputLabel(),()=>L(n).loading||!Ks.ready()]),Br(`submit`,s,e=>{e.preventDefault(),Ks.submit()}),ua(p,()=>Ks.state.value,e=>Ks.state.value=e),R(`click`,_,()=>Ks.close()),B(e,r)},$$slots:{default:!0}}),O()}Vr([`click`]);var Zs=e=>e;function Qs(e){let t=e-1;return t*t*t+1}function $s(e){let t=typeof e==`string`&&e.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return t?[parseFloat(t[1]),t[2]||`px`]:[e,`px`]}function ec(e,{delay:t=0,duration:n=400,easing:r=Zs}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}function tc(e,{delay:t=0,duration:n=400,easing:r=Qs,x:i=0,y:a=0,opacity:o=0}={}){let s=getComputedStyle(e),c=+s.opacity,l=s.transform===`none`?``:s.transform,u=c*(1-o),[d,f]=$s(i),[p,m]=$s(a);return{delay:t,duration:n,easing:r,css:(e,t)=>` + transform: ${l} translate(${(1-e)*d}${f}, ${(1-e)*p}${m}); + opacity: ${c-u*t}`}}function nc(e,{delay:t=0,duration:n=400,easing:r=Qs,axis:i=`y`}={}){let a=getComputedStyle(e),o=+a.opacity,s=i===`y`?`height`:`width`,c=parseFloat(a[s]),l=i===`y`?[`top`,`bottom`]:[`left`,`right`],u=l.map(e=>`${e[0].toUpperCase()}${e.slice(1)}`),d=parseFloat(a[`padding${u[0]}`]),f=parseFloat(a[`padding${u[1]}`]),p=parseFloat(a[`margin${u[0]}`]),m=parseFloat(a[`margin${u[1]}`]),h=parseFloat(a[`border${u[0]}Width`]),g=parseFloat(a[`border${u[1]}Width`]);return{delay:t,duration:n,easing:r,css:e=>`overflow: hidden;opacity: ${Math.min(e*20,1)*o};${s}: ${e*c}px;padding-${l[0]}: ${e*d}px;padding-${l[1]}: ${e*f}px;margin-${l[0]}: ${e*p}px;margin-${l[1]}: ${e*m}px;border-${l[0]}-width: ${e*h}px;border-${l[1]}-width: ${e*g}px;min-${s}: 0`}}function rc(e){return--e*e*(2.70158*e+1.70158)+1}function ic(e){let t=e-1;return t*t*t+1}var ac=5e3,oc=8e3,J=new class{#e=A(M([]));get toasts(){return L(this.#e)}set toasts(e){j(this.#e,e,!0)}#t=0;#n=new Map;success(e){this.#r(`success`,e,ac)}error(e){this.#r(`error`,e,oc)}dismiss(e){let t=this.#n.get(e);t&&(clearTimeout(t),this.#n.delete(e)),this.toasts=this.toasts.filter(t=>t.id!==e)}#r(e,t,n){let r=String(t||``).trim();if(!r)return;let i=this.toasts.find(t=>t.kind===e&&t.text===r);i&&this.dismiss(i.id);let a=++this.#t;this.toasts=[...this.toasts,{id:a,kind:e,text:r}],this.#n.set(a,setTimeout(()=>this.dismiss(a),n))}},sc=z(`
        `),cc=z(`
        `);function lc(e,t){D(t,!0);var n=cc();U(n,21,()=>J.toasts,e=>e.id,(e,t)=>{var n=sc();let r;var i=N(n),a=N(i,!0);E(i);var o=F(i,2);E(n),I(()=>{r=W(n,1,`flash-toast svelte-1i257xg`,null,r,{"flash-toast-success":L(t).kind===`success`,"flash-toast-error":L(t).kind===`error`}),G(n,`role`,L(t).kind===`error`?`alert`:`status`),G(n,`aria-live`,L(t).kind===`error`?`assertive`:`polite`),V(a,L(t).text)}),R(`click`,o,()=>J.dismiss(L(t).id)),Oi(1,n,()=>tc,()=>({y:-24,duration:360,easing:rc})),Oi(2,n,()=>ec,()=>({duration:150})),B(e,n)}),E(n),B(e,n),O()}Vr([`click`]);var uc=z(``);function dc(e,t){D(t,!0);var n=Zr(),r=P(n),i=e=>{B(e,uc())},a=k(()=>Go());H(r,e=>{L(a)&&e(i)}),B(e,n),O()}function fc(e){return String(e||``).split(`,`).map(e=>e.trim()).filter(e=>e)}function pc(e){if(e==null||e===``)return`Not captured`;if(typeof e==`string`){let t=e.trim();if(t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`))try{return JSON.stringify(JSON.parse(t),null,2)}catch{return e}return e}try{return JSON.stringify(e,null,2)}catch{return String(e)}}function mc(e){return e==null||e===void 0?`-`:e.toLocaleString()}function hc(e){if(e==null)return`---`;let t=Number(e);return Number.isFinite(t)?t>0&&t<1e-4?`<$0.0001`:`$`+t.toFixed(4).replace(/(\.\d{2}\d*?)0+$/,`$1`):`---`}function gc(e){return e==null||e===void 0?`—`:`$`+e.toFixed(2)}function _c(e){return e==null||e===void 0?`—`:e<.01?`$`+e.toFixed(6):`$`+e.toFixed(4)}function vc(e){if(e==null||e===``)return`-`;let t=Number(e);if(!Number.isFinite(t))return`-`;let n=Math.abs(t),r=[{threshold:1e9,suffix:`B`},{threshold:1e6,suffix:`M`},{threshold:1e3,suffix:`K`}];for(let e=0;e=i.threshold){let n=t/i.threshold;return Math.abs(Number(n.toFixed(1)))>=1e3&&e>0&&(i=r[e-1],n=t/i.threshold),n.toFixed(1).replace(/\.0$/,``)+i.suffix}}return String(t)}function yc(e,t){let n=t==null||t===``?NaN:Number(t),r=Number.isFinite(n)?mc(n):`-`;return String(e||`Tokens`)+`: `+r}function bc(e){return e?typeof e==`string`?e:e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`):``}function xc(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.getUTCFullYear()+`-`+String(t.getUTCMonth()+1).padStart(2,`0`)+`-`+String(t.getUTCDate()).padStart(2,`0`)}function Sc(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.getUTCFullYear()+`-`+String(t.getUTCMonth()+1).padStart(2,`0`)+`-`+String(t.getUTCDate()).padStart(2,`0`)+` `+String(t.getUTCHours()).padStart(2,`0`)+`:`+String(t.getUTCMinutes()).padStart(2,`0`)+`:`+String(t.getUTCSeconds()).padStart(2,`0`)+` UTC`}function Cc(e){return String(e&&e.provider||``).trim()}function wc(e){return String(e&&e.provider_name||``).trim()||Cc(e)}function Tc(e,t){let n=String(t||``).trim();if(!n)return`-`;let r=wc(e);return!r||n===r||n.startsWith(r+`/`)?n:r+`/`+n}function Ec(e){return Tc(e,e&&e.model)}function Dc(e){return Tc(e,e&&e.resolved_model)}function Oc(e){let t=String(e&&(e.requested_model||e.model)||``).trim();if(!e)return t;let n=String(e.data&&e.data.failover&&e.data.failover.target_model||``).trim();if(n&&n!==t)return t+` ⮕ `+n;if(e.alias_used&&e.resolved_model){let n=Dc(e);if(n&&n!==`-`&&n!==t)return t+` ⮕ `+n}return t}var kc=`gomodel_date_range`,Ac=1;function jc(e){return/^[1-9]\d*$/.test(String(e??``))}var Mc=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function Nc({selectedPreset:e,startKey:t,endKey:n,followsToday:r}){return e&&jc(e)?{v:Ac,mode:`preset`,days:String(e)}:e?null:ss(t)&&ss(n)?{v:Ac,mode:`custom`,start:t,end:n,follow:r===!0}:null}function Pc(e){let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return null}return!t||typeof t!=`object`?null:t.mode===`preset`?jc(t.days)?{mode:`preset`,days:String(t.days)}:null:t.mode===`custom`&&ss(t.start)&&ss(t.end)&&t.start<=t.end?{mode:`custom`,start:t.start,end:t.end,follow:t.follow===!0}:null}function Fc(e,t,n){let r=cs(e,t);return r<1||!ss(n)?{start:e,end:t}:{start:os(n,-(r-1)),end:n}}function Ic(e,t){if(e===t)return`Today`;let[n,r,i]=e.split(`-`);return Mc[Number(r)-1]+` `+Number(i)+`, `+n}function Lc({selectedPreset:e,startKey:t,endKey:n,followsToday:r,todayKey:i}){if(e)return`Last `+e+` days`;if(!ss(t)||!ss(n))return``;let a=cs(t,n);return r||n===i?a===1?`Today`:`Last `+a+` days`:a===1?`1 day`:a+` days`}function Rc({selectedPreset:e,startKey:t,endKey:n,todayKey:r}){if(e)return`Last `+e+` days`;let i=e=>Ic(e,r);return ss(t)&&ss(n)?t===n?i(t):i(t)+` – `+i(n):ss(t)?i(t)+` – ...`:`Last 30 days`}var zc=6e4,Bc=new class{#e=A(M(`30`));get days(){return L(this.#e)}set days(e){j(this.#e,e,!0)}#t=A(M(`30`));get selectedPreset(){return L(this.#t)}set selectedPreset(e){j(this.#t,e,!0)}#n=A(null);get customStartDate(){return L(this.#n)}set customStartDate(e){j(this.#n,e,!0)}#r=A(null);get customEndDate(){return L(this.#r)}set customEndDate(e){j(this.#r,e,!0)}#i=A(!1);get followsToday(){return L(this.#i)}set followsToday(e){j(this.#i,e,!0)}#a=A(`daily`);get interval(){return L(this.#a)}set interval(e){j(this.#a,e,!0)}#o=A(0);get syncTick(){return L(this.#o)}set syncTick(e){j(this.#o,e,!0)}init(){this.restore(),this.syncToToday(),typeof setInterval==`function`&&setInterval(()=>this.syncToToday(),zc)}queryStr(){return this.customStartDate&&this.customEndDate?`start_date=`+bc(this.customStartDate)+`&end_date=`+bc(this.customEndDate):`days=`+this.days}selectPreset(e){this.selectedPreset=e,this.customStartDate=null,this.customEndDate=null,this.followsToday=!1,this.days=e,this.persist()}selectStart(e){this.selectedPreset=null,this.customStartDate=e,this.customEndDate&&this.customEndDatet.category===e);return t?t.count:0}get filteredModels(){if(!this.filter)return this.models;let e=this.filter.toLowerCase();return this.models.filter(t=>(t.model?.id??``).toLowerCase().includes(e)||(t.provider_name??``).toLowerCase().includes(e)||(t.provider_type??``).toLowerCase().includes(e)||(t.selector??``).toLowerCase().includes(e)||(t.model?.owned_by??``).toLowerCase().includes(e)||(t.model?.metadata?.modes??[]).join(`,`).toLowerCase().includes(e)||(t.model?.metadata?.categories??[]).join(`,`).toLowerCase().includes(e))}},Hc=z(``);function Uc(e,t){D(t,!0);var n=Zr(),r=P(n),i=e=>{var t=Hc(),n=F(N(t),2);E(t),R(`click`,n,()=>q.openDialog()),B(e,t)};H(r,e=>{q.authError&&e(i)}),B(e,n),O()}Vr([`click`]);function Wc(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null}}function Gc(){return{summary:{total_hits:0,exact_hits:0,semantic_hits:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,total_saved_cost:null},daily:[]}}var Kc=new class{#e=A(M(Wc()));get summary(){return L(this.#e)}set summary(e){j(this.#e,e,!0)}#t=A(M([]));get daily(){return L(this.#t)}set daily(e){j(this.#t,e,!0)}#n=A(M(Gc()));get cacheOverview(){return L(this.#n)}set cacheOverview(e){j(this.#n,e,!0)}#r=A(!1);get loading(){return L(this.#r)}set loading(e){j(this.#r,e,!0)}#i=null;#a=null;cacheAnalyticsEnabled(){return Os.cacheVisible()}async fetchUsage(){this.#i&&this.#i.abort();let e=new AbortController;this.#i=e,this.loading=!0;try{let t=Bc.queryStr()+`&interval=`+Bc.interval,[n,r]=await Promise.all([Cs(`/admin/usage/summary?`+t,{label:`usage summary`,signal:e.signal}),Cs(`/admin/usage/daily?`+t,{label:`usage daily`,signal:e.signal})]);if(n.stale||r.stale||e.signal.aborted)return;if(!n.ok||!r.ok){this.summary=Wc(),this.daily=[],this.cacheOverview=Gc();return}this.summary=n.data||Wc(),this.daily=Array.isArray(r.data)?r.data:[]}catch(e){if(Ts(e))return;console.error(`Failed to fetch usage:`,e),this.summary=Wc(),this.daily=[]}finally{this.#i===e&&(this.#i=null,this.loading=!1)}}async fetchCacheOverview(e=``){if(await Os.ensureLoaded(),!this.cacheAnalyticsEnabled()){this.cacheOverview=Gc();return}this.#a&&this.#a.abort();let t=new AbortController;this.#a=t;try{let n=await Cs(`/admin/cache/overview?`+(Bc.queryStr()+`&interval=`+Bc.interval+e),{label:`cache overview`,signal:t.signal});if(n.stale||t.signal.aborted)return;if(!n.ok){this.cacheOverview=Gc();return}let r=n.data&&typeof n.data==`object`?n.data:Gc();r.summary||=Gc().summary,Array.isArray(r.daily)||(r.daily=[]),this.cacheOverview=r}catch(e){if(Ts(e))return;console.error(`Failed to fetch cache overview:`,e),this.cacheOverview=Gc()}finally{this.#a===t&&(this.#a=null)}}},qc=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`];function Jc(e,t){let n=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return qc[n.getUTCMonth()]+` `+n.getUTCFullYear()}function Yc(e,t,n){let r=e.getUTCFullYear(),i=e.getUTCMonth()+t,a=new Date(Date.UTC(r,i,1)),o=new Date(Date.UTC(r,i+1,0)),s=(a.getUTCDay()+6)%7,c=[],l=new Date(Date.UTC(r,i,0));for(let e=s-1;e>=0;e--){let t=l.getUTCDate()-e,a=new Date(Date.UTC(r,i-1,t));c.push({day:t,date:a,current:!1,key:`p-`+n(a)})}for(let e=1;e<=o.getUTCDate();e++){let t=new Date(Date.UTC(r,i,e));c.push({day:e,date:t,current:!0,key:`c-`+n(t)})}let u=42-c.length;for(let e=1;e<=u;e++){let t=new Date(Date.UTC(r,i+1,e));c.push({day:e,date:t,current:!1,key:`n-`+n(t)})}return c}function Xc(e,t,n){let r=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return n&&r.getTime()>n.getTime()?e:r}function Zc(e,t){return e.getUTCFullYear()===t.getUTCFullYear()&&e.getUTCMonth()===t.getUTCMonth()}var Qc=z(``),$c=z(``),el=z(``),tl=z(`
        MoTuWeThFrSaSu
        `);function nl(e,t){D(t,!0);let n=va(t,`offset`,3,0),r=k(()=>Yc(t.calendarMonth,n(),e=>_s.dateToDateKey(e))),i=k(()=>Zc(t.calendarMonth,_s.todayDate())),a=e=>_s.dateToDateKey(e.date),o=e=>a(e)>_s.currentDateKey(),s=e=>e.current&&a(e)===_s.currentDateKey();function c(e,t){let n=t===`start`?Bc.rangeStart():Bc.rangeEnd();return e.current&&!!n&&a(e)===_s.dateToDateKey(n)}function l(e){let t=Bc.rangeStart(),n=Bc.rangeEnd();return!e.current||!t||!n?!1:a(e)>=_s.dateToDateKey(t)&&a(e)<=_s.dateToDateKey(n)}var u=tl(),d=N(u),f=N(d);let p;var m=F(f,2),h=N(m,!0);E(m);var g=F(m,2),_=e=>{B(e,Qc())},v=e=>{var n=$c();I(()=>n.disabled=L(i)),R(`click`,n,function(...e){t.onnext?.apply(this,e)}),B(e,n)};H(g,e=>{n()===-1?e(_):e(v,-1)}),E(d);var y=F(d,4);U(y,21,()=>L(r),e=>e.key,(e,n)=>{var r=el(),i=N(r,!0);E(r),I((e,t)=>{W(r,1,e,`svelte-g7ga4u`),r.disabled=t,V(i,L(n).day)},[()=>Pi([`dp-day`,{"other-month":!L(n).current,today:s(L(n)),"range-start":c(L(n),`start`),"range-end":c(L(n),`end`),"in-range":l(L(n)),disabled:o(L(n))}]),()=>o(L(n))||!L(n).current]),R(`click`,r,()=>t.onselect?.(L(n))),B(e,r)}),E(y),E(u),I(e=>{p=W(f,1,`dp-nav-btn svelte-g7ga4u`,null,p,{"dp-nav-prev-mobile":n()!==-1}),V(h,e)},[()=>Jc(t.calendarMonth,n())]),R(`click`,f,function(...e){t.onprev?.apply(this,e)}),B(e,u),O()}Vr([`click`]);var rl=z(``),il=z(`
        `),al=Yr(``),ol=Yr(``),sl=z(`
        `),cl=z(`
        `);function ll(e,t){D(t,!0);let n=[`3`,`7`,`14`,`30`,`90`],r=A(!1),i=A(`start`),a=A(M(new Date)),o=A(M({show:!1,x:0,y:0}));function s(){j(r,!L(r)),L(r)&&(Bc.syncToToday(),j(a,_s.startOfMonthDate(Bc.customEndDate||_s.todayDate()),!0),j(i,`start`))}function c(){j(r,!1),j(o,{show:!1,x:0,y:0},!0)}let l=Bc.syncTick;kn(()=>{let e=Bc.syncTick;e!==l&&(l=e,t.onchange?.())});function u(e){Bc.selectPreset(e),j(i,`start`),t.onchange?.(),c()}let d=()=>j(a,Xc(L(a),-1),!0),f=()=>j(a,Xc(L(a),1,_s.startOfMonthDate(_s.todayDate())),!0);function p(e){let n=new Date(e.date);if(L(i)===`start`){Bc.selectStart(n),j(i,`end`),t.onchange?.();return}Bc.selectEnd(n),j(i,`start`),t.onchange?.(),c()}var m=cl(),h=N(m),g=F(N(h),2),_=N(g,!0);E(g);var v=F(g,2);let y;E(h);var b=F(h,2),x=e=>{var t=il(),r=N(t);U(r,20,()=>n,e=>e,(e,t)=>{var n=rl();let r;var i=N(n);E(n),I(()=>{r=W(n,1,`preset-btn svelte-ax7ma4`,null,r,{active:Bc.selectedPreset===t}),V(i,`Last ${t??``} days`)}),R(`click`,n,()=>u(t)),B(e,n)}),E(r);var i=F(r,2);U(i,20,()=>[-1,0],e=>e,(e,t)=>{nl(e,{get calendarMonth(){return L(a)},get offset(){return t},onprev:d,onnext:f,onselect:p})}),E(i),E(t),R(`mousemove`,i,e=>j(o,{show:!0,x:e.clientX,y:e.clientY},!0)),Br(`mouseleave`,i,()=>j(o,{show:!1,x:0,y:0},!0)),B(e,t)};H(b,e=>{L(r)&&e(x)});var S=F(b,2),C=e=>{var t=sl(),n=N(t),r=e=>{B(e,al())},a=e=>{B(e,ol())};H(n,e=>{L(i)===`start`?e(r):e(a,-1)});var s=F(n,2),c=N(s,!0);E(s),E(t),I(()=>{Vi(t,`left:${L(o).x??``}px;top:${L(o).y??``}px`),V(c,L(i)===`end`?`Select end date`:`Select start date`)}),B(e,t)};H(S,e=>{L(o).show&&e(C)}),E(m),ji(m,()=>L(r)?Ls(c):void 0),I((e,t)=>{G(h,`title`,e),V(_,t),y=W(v,0,`date-picker-chevron svelte-ax7ma4`,null,y,{open:L(r)})},[()=>Bc.dateRangeSpanLabel(),()=>Bc.dateRangeLabel()]),R(`click`,h,s),B(e,m),O()}Vr([`click`,`mousemove`]);function ul(e){return e+.5|0}var dl=(e,t,n)=>Math.max(Math.min(e,n),t);function fl(e){return dl(ul(e*2.55),0,255)}function pl(e){return dl(ul(e*255),0,255)}function ml(e){return dl(ul(e/2.55)/100,0,1)}function hl(e){return dl(ul(e*100),0,100)}var gl={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},_l=[...`0123456789ABCDEF`],vl=e=>_l[e&15],yl=e=>_l[(e&240)>>4]+_l[e&15],bl=e=>(e&240)>>4==(e&15),xl=e=>bl(e.r)&&bl(e.g)&&bl(e.b)&&bl(e.a);function Sl(e){var t=e.length,n;return e[0]===`#`&&(t===4||t===5?n={r:255&gl[e[1]]*17,g:255&gl[e[2]]*17,b:255&gl[e[3]]*17,a:t===5?gl[e[4]]*17:255}:(t===7||t===9)&&(n={r:gl[e[1]]<<4|gl[e[2]],g:gl[e[3]]<<4|gl[e[4]],b:gl[e[5]]<<4|gl[e[6]],a:t===9?gl[e[7]]<<4|gl[e[8]]:255})),n}var Cl=(e,t)=>e<255?t(e):``;function wl(e){var t=xl(e)?vl:yl;return e?`#`+t(e.r)+t(e.g)+t(e.b)+Cl(e.a,t):void 0}var Tl=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function El(e,t,n){let r=t*Math.min(n,1-n),i=(t,i=(t+e/30)%12)=>n-r*Math.max(Math.min(i-3,9-i,1),-1);return[i(0),i(8),i(4)]}function Dl(e,t,n){let r=(r,i=(r+e/60)%6)=>n-n*t*Math.max(Math.min(i,4-i,1),0);return[r(5),r(3),r(1)]}function Ol(e,t,n){let r=El(e,1,.5),i;for(t+n>1&&(i=1/(t+n),t*=i,n*=i),i=0;i<3;i++)r[i]*=1-t-n,r[i]+=t;return r}function kl(e,t,n,r,i){return e===i?(t-n)/r+(t.5?l/(2-i-a):l/(i+a),s=kl(t,n,r,l,i),s=s*60+.5),[s|0,c||0,o]}function jl(e,t,n,r){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,n,r)).map(pl)}function Ml(e,t,n){return jl(El,e,t,n)}function Nl(e,t,n){return jl(Ol,e,t,n)}function Pl(e,t,n){return jl(Dl,e,t,n)}function Fl(e){return(e%360+360)%360}function Il(e){let t=Tl.exec(e),n=255,r;if(!t)return;t[5]!==r&&(n=t[6]?fl(+t[5]):pl(+t[5]));let i=Fl(+t[2]),a=t[3]/100,o=t[4]/100;return r=t[1]===`hwb`?Nl(i,a,o):t[1]===`hsv`?Pl(i,a,o):Ml(i,a,o),{r:r[0],g:r[1],b:r[2],a:n}}function Ll(e,t){var n=Al(e);n[0]=Fl(n[0]+t),n=Ml(n),e.r=n[0],e.g=n[1],e.b=n[2]}function Rl(e){if(!e)return;let t=Al(e),n=t[0],r=hl(t[1]),i=hl(t[2]);return e.a<255?`hsla(${n}, ${r}%, ${i}%, ${ml(e.a)})`:`hsl(${n}, ${r}%, ${i}%)`}var zl={x:`dark`,Z:`light`,Y:`re`,X:`blu`,W:`gr`,V:`medium`,U:`slate`,A:`ee`,T:`ol`,S:`or`,B:`ra`,C:`lateg`,D:`ights`,R:`in`,Q:`turquois`,E:`hi`,P:`ro`,O:`al`,N:`le`,M:`de`,L:`yello`,F:`en`,K:`ch`,G:`arks`,H:`ea`,I:`ightg`,J:`wh`},Bl={OiceXe:`f0f8ff`,antiquewEte:`faebd7`,aqua:`ffff`,aquamarRe:`7fffd4`,azuY:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`0`,blanKedOmond:`ffebcd`,Xe:`ff`,XeviTet:`8a2be2`,bPwn:`a52a2a`,burlywood:`deb887`,caMtXe:`5f9ea0`,KartYuse:`7fff00`,KocTate:`d2691e`,cSO:`ff7f50`,cSnflowerXe:`6495ed`,cSnsilk:`fff8dc`,crimson:`dc143c`,cyan:`ffff`,xXe:`8b`,xcyan:`8b8b`,xgTMnPd:`b8860b`,xWay:`a9a9a9`,xgYF:`6400`,xgYy:`a9a9a9`,xkhaki:`bdb76b`,xmagFta:`8b008b`,xTivegYF:`556b2f`,xSange:`ff8c00`,xScEd:`9932cc`,xYd:`8b0000`,xsOmon:`e9967a`,xsHgYF:`8fbc8f`,xUXe:`483d8b`,xUWay:`2f4f4f`,xUgYy:`2f4f4f`,xQe:`ced1`,xviTet:`9400d3`,dAppRk:`ff1493`,dApskyXe:`bfff`,dimWay:`696969`,dimgYy:`696969`,dodgerXe:`1e90ff`,fiYbrick:`b22222`,flSOwEte:`fffaf0`,foYstWAn:`228b22`,fuKsia:`ff00ff`,gaRsbSo:`dcdcdc`,ghostwEte:`f8f8ff`,gTd:`ffd700`,gTMnPd:`daa520`,Way:`808080`,gYF:`8000`,gYFLw:`adff2f`,gYy:`808080`,honeyMw:`f0fff0`,hotpRk:`ff69b4`,RdianYd:`cd5c5c`,Rdigo:`4b0082`,ivSy:`fffff0`,khaki:`f0e68c`,lavFMr:`e6e6fa`,lavFMrXsh:`fff0f5`,lawngYF:`7cfc00`,NmoncEffon:`fffacd`,ZXe:`add8e6`,ZcSO:`f08080`,Zcyan:`e0ffff`,ZgTMnPdLw:`fafad2`,ZWay:`d3d3d3`,ZgYF:`90ee90`,ZgYy:`d3d3d3`,ZpRk:`ffb6c1`,ZsOmon:`ffa07a`,ZsHgYF:`20b2aa`,ZskyXe:`87cefa`,ZUWay:`778899`,ZUgYy:`778899`,ZstAlXe:`b0c4de`,ZLw:`ffffe0`,lime:`ff00`,limegYF:`32cd32`,lRF:`faf0e6`,magFta:`ff00ff`,maPon:`800000`,VaquamarRe:`66cdaa`,VXe:`cd`,VScEd:`ba55d3`,VpurpN:`9370db`,VsHgYF:`3cb371`,VUXe:`7b68ee`,VsprRggYF:`fa9a`,VQe:`48d1cc`,VviTetYd:`c71585`,midnightXe:`191970`,mRtcYam:`f5fffa`,mistyPse:`ffe4e1`,moccasR:`ffe4b5`,navajowEte:`ffdead`,navy:`80`,Tdlace:`fdf5e6`,Tive:`808000`,TivedBb:`6b8e23`,Sange:`ffa500`,SangeYd:`ff4500`,ScEd:`da70d6`,pOegTMnPd:`eee8aa`,pOegYF:`98fb98`,pOeQe:`afeeee`,pOeviTetYd:`db7093`,papayawEp:`ffefd5`,pHKpuff:`ffdab9`,peru:`cd853f`,pRk:`ffc0cb`,plum:`dda0dd`,powMrXe:`b0e0e6`,purpN:`800080`,YbeccapurpN:`663399`,Yd:`ff0000`,Psybrown:`bc8f8f`,PyOXe:`4169e1`,saddNbPwn:`8b4513`,sOmon:`fa8072`,sandybPwn:`f4a460`,sHgYF:`2e8b57`,sHshell:`fff5ee`,siFna:`a0522d`,silver:`c0c0c0`,skyXe:`87ceeb`,UXe:`6a5acd`,UWay:`708090`,UgYy:`708090`,snow:`fffafa`,sprRggYF:`ff7f`,stAlXe:`4682b4`,tan:`d2b48c`,teO:`8080`,tEstN:`d8bfd8`,tomato:`ff6347`,Qe:`40e0d0`,viTet:`ee82ee`,JHt:`f5deb3`,wEte:`ffffff`,wEtesmoke:`f5f5f5`,Lw:`ffff00`,LwgYF:`9acd32`};function Vl(){let e={},t=Object.keys(Bl),n=Object.keys(zl),r,i,a,o,s;for(r=0;r>16&255,a>>8&255,a&255]}return e}var Hl;function Ul(e){Hl||(Hl=Vl(),Hl.transparent=[0,0,0,0]);let t=Hl[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Wl=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Gl(e){let t=Wl.exec(e),n=255,r,i,a;if(t){if(t[7]!==r){let e=+t[7];n=t[8]?fl(e):dl(e*255,0,255)}return r=+t[1],i=+t[3],a=+t[5],r=255&(t[2]?fl(r):dl(r,0,255)),i=255&(t[4]?fl(i):dl(i,0,255)),a=255&(t[6]?fl(a):dl(a,0,255)),{r,g:i,b:a,a:n}}}function Kl(e){return e&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${ml(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`)}var ql=e=>e<=.0031308?e*12.92:e**(1/2.4)*1.055-.055,Jl=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4;function Yl(e,t,n){let r=Jl(ml(e.r)),i=Jl(ml(e.g)),a=Jl(ml(e.b));return{r:pl(ql(r+n*(Jl(ml(t.r))-r))),g:pl(ql(i+n*(Jl(ml(t.g))-i))),b:pl(ql(a+n*(Jl(ml(t.b))-a))),a:e.a+n*(t.a-e.a)}}function Xl(e,t,n){if(e){let r=Al(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*n,t===0?360:1)),r=Ml(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function Zl(e,t){return e&&Object.assign(t||{},e)}function Ql(e){var t={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(t={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(t.a=pl(e[3]))):(t=Zl(e,{r:0,g:0,b:0,a:1}),t.a=pl(t.a)),t}function $l(e){return e.charAt(0)===`r`?Gl(e):Il(e)}var eu=class e{constructor(t){if(t instanceof e)return t;let n=typeof t,r;n===`object`?r=Ql(t):n===`string`&&(r=Sl(t)||Ul(t)||$l(t)),this._rgb=r,this._valid=!!r}get valid(){return this._valid}get rgb(){var e=Zl(this._rgb);return e&&(e.a=ml(e.a)),e}set rgb(e){this._rgb=Ql(e)}rgbString(){return this._valid?Kl(this._rgb):void 0}hexString(){return this._valid?wl(this._rgb):void 0}hslString(){return this._valid?Rl(this._rgb):void 0}mix(e,t){if(e){let n=this.rgb,r=e.rgb,i,a=t===i?.5:t,o=2*a-1,s=n.a-r.a,c=((o*s===-1?o:(o+s)/(1+o*s))+1)/2;i=1-c,n.r=255&c*n.r+i*r.r+.5,n.g=255&c*n.g+i*r.g+.5,n.b=255&c*n.b+i*r.b+.5,n.a=a*n.a+(1-a)*r.a,this.rgb=n}return this}interpolate(e,t){return e&&(this._rgb=Yl(this._rgb,e._rgb,t)),this}clone(){return new e(this.rgb)}alpha(e){return this._rgb.a=pl(e),this}clearer(e){let t=this._rgb;return t.a*=1-e,this}greyscale(){let e=this._rgb;return e.r=e.g=e.b=ul(e.r*.3+e.g*.59+e.b*.11),this}opaquer(e){let t=this._rgb;return t.a*=1+e,this}negate(){let e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return Xl(this._rgb,2,e),this}darken(e){return Xl(this._rgb,2,-e),this}saturate(e){return Xl(this._rgb,1,e),this}desaturate(e){return Xl(this._rgb,1,-e),this}rotate(e){return Ll(this._rgb,e),this}};function tu(){}var nu=(()=>{let e=0;return()=>e++})();function ru(e){return e==null}function iu(e){if(Array.isArray&&Array.isArray(e))return!0;let t=Object.prototype.toString.call(e);return t.slice(0,7)===`[object`&&t.slice(-6)===`Array]`}function au(e){return e!==null&&Object.prototype.toString.call(e)===`[object Object]`}function ou(e){return(typeof e==`number`||e instanceof Number)&&isFinite(+e)}function su(e,t){return ou(e)?e:t}function cu(e,t){return e===void 0?t:e}var lu=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100:+e/t,uu=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100*t:+e;function du(e,t,n){if(e&&typeof e.call==`function`)return e.apply(n,t)}function fu(e,t,n,r){let i,a,o;if(iu(e))if(a=e.length,r)for(i=a-1;i>=0;i--)t.call(n,e[i],i);else for(i=0;ie,x:e=>e.x,y:e=>e.y};function xu(e){let t=e.split(`.`),n=[],r=``;for(let e of t)r+=e,r.endsWith(`\\`)?r=r.slice(0,-1)+`.`:(n.push(r),r=``);return n}function Su(e){let t=xu(e);return e=>{for(let n of t){if(n===``)break;e&&=e[n]}return e}}function Cu(e,t){return(bu[t]||(bu[t]=Su(t)))(e)}function wu(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Tu=e=>e!==void 0,Eu=e=>typeof e==`function`,Du=(e,t)=>{if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0};function Ou(e){return e.type===`mouseup`||e.type===`click`||e.type===`contextmenu`}var ku=Math.PI,Au=2*ku,ju=Au+ku,Mu=1/0,Nu=ku/180,Pu=ku/2,Fu=ku/4,Iu=ku*2/3,Lu=Math.log10,Ru=Math.sign;function zu(e,t,n){return Math.abs(e-t)e-t).pop(),t}function Hu(e){return typeof e==`symbol`||typeof e==`object`&&!!e&&!(Symbol.toPrimitive in e||`toString`in e||`valueOf`in e)}function Uu(e){return!Hu(e)&&!isNaN(parseFloat(e))&&isFinite(e)}function Wu(e,t){let n=Math.round(e);return n-t<=e&&n+t>=e}function Gu(e,t,n){let r,i,a;for(r=0,i=e.length;rc&&l=Math.min(t,n)-r&&e<=Math.max(t,n)+r}function rd(e,t,n){n||=(n=>e[n]1;)a=i+r>>1,n(a)?i=a:r=a;return{lo:i,hi:r}}var id=(e,t,n,r)=>rd(e,n,r?r=>{let i=e[r][t];return ie[r][t]rd(e,n,r=>e[r][t]>=n);function od(e,t,n){let r=0,i=e.length;for(;rr&&e[i-1]>n;)i--;return r>0||i{let n=`_onData`+wu(t),r=e[t];Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value(...t){let i=r.apply(this,t);return e._chartjs.listeners.forEach(e=>{typeof e[n]==`function`&&e[n](...t)}),i}})})}function ld(e,t){let n=e._chartjs;if(!n)return;let r=n.listeners,i=r.indexOf(t);i!==-1&&r.splice(i,1),!(r.length>0)&&(sd.forEach(t=>{delete e[t]}),delete e._chartjs)}function ud(e){let t=new Set(e);return t.size===e.length?e:Array.from(t)}var dd=function(){return typeof window>`u`?function(e){return e()}:window.requestAnimationFrame}();function fd(e,t){let n=[],r=!1;return function(...i){n=i,r||(r=!0,dd.call(window,()=>{r=!1,e.apply(t,n)}))}}function pd(e,t){let n;return function(...r){return t?(clearTimeout(n),n=setTimeout(e,t,r)):e.apply(this,r),t}}var md=e=>e===`start`?`left`:e===`end`?`right`:`center`,hd=(e,t,n)=>e===`start`?t:e===`end`?n:(t+n)/2,gd=(e,t,n,r)=>e===(r?`left`:`right`)?n:e===`center`?(t+n)/2:t;function _d(e,t,n){let r=t.length,i=0,a=r;if(e._sorted){let{iScale:o,vScale:s,_parsed:c}=e,l=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null,u=o.axis,{min:d,max:f,minDefined:p,maxDefined:m}=o.getUserBounds();if(p){if(i=Math.min(id(c,u,d).lo,n?r:id(t,u,o.getPixelForValue(d)).lo),l){let e=c.slice(0,i+1).reverse().findIndex(e=>!ru(e[s.axis]));i-=Math.max(0,e)}i=ed(i,0,r-1)}if(m){let e=Math.max(id(c,o.axis,f,!0).hi+1,n?0:id(t,u,o.getPixelForValue(f),!0).hi+1);if(l){let t=c.slice(e-1).findIndex(e=>!ru(e[s.axis]));e+=Math.max(0,t)}a=ed(e,i,r)-i}else a=r-i}return{start:i,count:a}}function vd(e){let{xScale:t,yScale:n,_scaleRanges:r}=e,i={xmin:t.min,xmax:t.max,ymin:n.min,ymax:n.max};if(!r)return e._scaleRanges=i,!0;let a=r.xmin!==t.min||r.xmax!==t.max||r.ymin!==n.min||r.ymax!==n.max;return Object.assign(r,i),a}var yd=e=>e===0||e===1,bd=(e,t,n)=>-(2**(10*--e)*Math.sin((e-t)*Au/n)),xd=(e,t,n)=>2**(-10*e)*Math.sin((e-t)*Au/n)+1,Sd={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>-e*(e-2),easeInOutQuad:e=>(e/=.5)<1?.5*e*e:-.5*(--e*(e-2)-1),easeInCubic:e=>e*e*e,easeOutCubic:e=>--e*e*e+1,easeInOutCubic:e=>(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2),easeInQuart:e=>e*e*e*e,easeOutQuart:e=>-(--e*e*e*e-1),easeInOutQuart:e=>(e/=.5)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2),easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>--e*e*e*e*e+1,easeInOutQuint:e=>(e/=.5)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2),easeInSine:e=>-Math.cos(e*Pu)+1,easeOutSine:e=>Math.sin(e*Pu),easeInOutSine:e=>-.5*(Math.cos(ku*e)-1),easeInExpo:e=>e===0?0:2**(10*(e-1)),easeOutExpo:e=>e===1?1:-(2**(-10*e))+1,easeInOutExpo:e=>yd(e)?e:e<.5?.5*2**(10*(e*2-1)):.5*(-(2**(-10*(e*2-1)))+2),easeInCirc:e=>e>=1?e:-(Math.sqrt(1-e*e)-1),easeOutCirc:e=>Math.sqrt(1- --e*e),easeInOutCirc:e=>(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1),easeInElastic:e=>yd(e)?e:bd(e,.075,.3),easeOutElastic:e=>yd(e)?e:xd(e,.075,.3),easeInOutElastic(e){let t=.1125,n=.45;return yd(e)?e:e<.5?.5*bd(e*2,t,n):.5+.5*xd(e*2-1,t,n)},easeInBack(e){return e*e*(2.70158*e-1.70158)},easeOutBack(e){return--e*e*(2.70158*e+1.70158)+1},easeInOutBack(e){let t=1.70158;return(e/=.5)<1?.5*(e*e*(((t*=1.525)+1)*e-t)):.5*((e-=2)*e*(((t*=1.525)+1)*e+t)+2)},easeInBounce:e=>1-Sd.easeOutBounce(1-e),easeOutBounce(e){let t=7.5625,n=2.75;return e<1/n?t*e*e:e<2/n?t*(e-=1.5/n)*e+.75:e<2.5/n?t*(e-=2.25/n)*e+.9375:t*(e-=2.625/n)*e+.984375},easeInOutBounce:e=>e<.5?Sd.easeInBounce(e*2)*.5:Sd.easeOutBounce(e*2-1)*.5+.5};function Cd(e){if(e&&typeof e==`object`){let t=e.toString();return t===`[object CanvasPattern]`||t===`[object CanvasGradient]`}return!1}function wd(e){return Cd(e)?e:new eu(e)}function Td(e){return Cd(e)?e:new eu(e).saturate(.5).darken(.1).hexString()}var Ed=[`x`,`y`,`borderWidth`,`radius`,`tension`],Dd=[`color`,`borderColor`,`backgroundColor`];function Od(e){e.set(`animation`,{delay:void 0,duration:1e3,easing:`easeOutQuart`,fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),e.describe(`animation`,{_fallback:!1,_indexable:!1,_scriptable:e=>e!==`onProgress`&&e!==`onComplete`&&e!==`fn`}),e.set(`animations`,{colors:{type:`color`,properties:Dd},numbers:{type:`number`,properties:Ed}}),e.describe(`animations`,{_fallback:`animation`}),e.set(`transitions`,{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:`transparent`},visible:{type:`boolean`,duration:0}}},hide:{animations:{colors:{to:`transparent`},visible:{type:`boolean`,easing:`linear`,fn:e=>e|0}}}})}function kd(e){e.set(`layout`,{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var Ad=new Map;function jd(e,t){t||={};let n=e+JSON.stringify(t),r=Ad.get(n);return r||(r=new Intl.NumberFormat(e,t),Ad.set(n,r)),r}function Md(e,t,n){return jd(t,n).format(e)}var Nd={values(e){return iu(e)?e:``+e},numeric(e,t,n){if(e===0)return`0`;let r=this.chart.options.locale,i,a=e;if(n.length>1){let t=Math.max(Math.abs(n[0].value),Math.abs(n[n.length-1].value));(t<1e-4||t>0x38d7ea4c68000)&&(i=`scientific`),a=Pd(e,n)}let o=Lu(Math.abs(a)),s=isNaN(o)?1:Math.max(Math.min(-1*Math.floor(o),20),0),c={notation:i,minimumFractionDigits:s,maximumFractionDigits:s};return Object.assign(c,this.options.ticks.format),Md(e,r,c)},logarithmic(e,t,n){if(e===0)return`0`;let r=n[t].significand||e/10**Math.floor(Lu(e));return[1,2,3,5,10,15].includes(r)||t>.8*n.length?Nd.numeric.call(this,e,t,n):``}};function Pd(e,t){let n=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(n)>=1&&e!==Math.floor(e)&&(n=e-Math.floor(e)),n}var Fd={formatters:Nd};function Id(e){e.set(`scale`,{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:`ticks`,clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(e,t)=>t.lineWidth,tickColor:(e,t)=>t.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:``,padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:``,padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Fd.formatters.values,minor:{},major:{},align:`center`,crossAlign:`near`,showLabelBackdrop:!1,backdropColor:`rgba(255, 255, 255, 0.75)`,backdropPadding:2}}),e.route(`scale.ticks`,`color`,``,`color`),e.route(`scale.grid`,`color`,``,`borderColor`),e.route(`scale.border`,`color`,``,`borderColor`),e.route(`scale.title`,`color`,``,`color`),e.describe(`scale`,{_fallback:!1,_scriptable:e=>!e.startsWith(`before`)&&!e.startsWith(`after`)&&e!==`callback`&&e!==`parser`,_indexable:e=>e!==`borderDash`&&e!==`tickBorderDash`&&e!==`dash`}),e.describe(`scales`,{_fallback:`scale`}),e.describe(`scale.ticks`,{_scriptable:e=>e!==`backdropPadding`&&e!==`callback`,_indexable:e=>e!==`backdropPadding`})}var Ld=Object.create(null),Rd=Object.create(null);function zd(e,t){if(!t)return e;let n=t.split(`.`);for(let t=0,r=n.length;te.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[`mousemove`,`mouseout`,`click`,`touchstart`,`touchmove`],this.font={family:`'Helvetica Neue', 'Helvetica', 'Arial', sans-serif`,size:12,style:`normal`,lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,t)=>Td(t.backgroundColor),this.hoverBorderColor=(e,t)=>Td(t.borderColor),this.hoverColor=(e,t)=>Td(t.color),this.indexAxis=`x`,this.interaction={mode:`nearest`,intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(e),this.apply(t)}set(e,t){return Bd(this,e,t)}get(e){return zd(this,e)}describe(e,t){return Bd(Rd,e,t)}override(e,t){return Bd(Ld,e,t)}route(e,t,n,r){let i=zd(this,e),a=zd(this,n),o=`_`+t;Object.defineProperties(i,{[o]:{value:i[t],writable:!0},[t]:{enumerable:!0,get(){let e=this[o],t=a[r];return au(e)?Object.assign({},t,e):cu(e,t)},set(e){this[o]=e}}})}apply(e){e.forEach(e=>e(this))}}({_scriptable:e=>!e.startsWith(`on`),_indexable:e=>e!==`events`,hover:{_fallback:`interaction`},interaction:{_scriptable:!1,_indexable:!1}},[Od,kd,Id]);function Hd(e){return!e||ru(e.size)||ru(e.family)?null:(e.style?e.style+` `:``)+(e.weight?e.weight+` `:``)+e.size+`px `+e.family}function Ud(e,t,n,r,i){let a=t[i];return a||(a=t[i]=e.measureText(i).width,n.push(i)),a>r&&(r=a),r}function Wd(e,t,n,r){r||={};let i=r.data=r.data||{},a=r.garbageCollect=r.garbageCollect||[];r.font!==t&&(i=r.data={},a=r.garbageCollect=[],r.font=t),e.save(),e.font=t;let o=0,s=n.length,c,l,u,d,f;for(c=0;cn.length){for(c=0;c0&&e.stroke()}}function Yd(e,t,n){return n||=.5,!t||e&&e.x>t.left-n&&e.xt.top-n&&e.y0&&a.strokeColor!==``,c,l;for(e.save(),e.font=i.string,ef(e,a),c=0;c+e||0;function uf(e,t){let n={},r=au(t),i=r?Object.keys(t):t,a=au(e)?r?n=>cu(e[n],e[t[n]]):t=>e[t]:()=>e;for(let e of i)n[e]=lf(a(e));return n}function df(e){return uf(e,{top:`y`,right:`x`,bottom:`y`,left:`x`})}function ff(e){return uf(e,[`topLeft`,`topRight`,`bottomLeft`,`bottomRight`])}function pf(e){let t=df(e);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function mf(e,t){e||={},t||=Vd.font;let n=cu(e.size,t.size);typeof n==`string`&&(n=parseInt(n,10));let r=cu(e.style,t.style);r&&!(``+r).match(sf)&&(console.warn(`Invalid font style specified: "`+r+`"`),r=void 0);let i={family:cu(e.family,t.family),lineHeight:cf(cu(e.lineHeight,t.lineHeight),n),size:n,style:r,weight:cu(e.weight,t.weight),string:``};return i.string=Hd(i),i}function hf(e,t,n,r){let i=!0,a,o,s;for(a=0,o=e.length;an&&e===0?0:e+t;return{min:o(r,-Math.abs(a)),max:o(i,a)}}function _f(e,t){return Object.assign(Object.create(e),t)}function vf(e,t=[``],n,r,i=()=>e[0]){let a=n||e;return r===void 0&&(r=Pf(`_fallback`,e)),new Proxy({[Symbol.toStringTag]:`Object`,_cacheable:!0,_scopes:e,_rootScopes:a,_fallback:r,_getTarget:i,override:n=>vf([n,...e],t,a,r)},{deleteProperty(t,n){return delete t[n],delete t._keys,delete e[0][n],!0},get(n,r){return Cf(n,r,()=>Nf(r,t,e,n))},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e._scopes[0],t)},getPrototypeOf(){return Reflect.getPrototypeOf(e[0])},has(e,t){return Ff(e).includes(t)},ownKeys(e){return Ff(e)},set(e,t,n){let r=e._storage||=i();return e[t]=r[t]=n,delete e._keys,!0}})}function yf(e,t,n,r){let i={_cacheable:!1,_proxy:e,_context:t,_subProxy:n,_stack:new Set,_descriptors:bf(e,r),setContext:t=>yf(e,t,n,r),override:i=>yf(e.override(i),t,n,r)};return new Proxy(i,{deleteProperty(t,n){return delete t[n],delete e[n],!0},get(e,t,n){return Cf(e,t,()=>wf(e,t,n))},getOwnPropertyDescriptor(t,n){return t._descriptors.allKeys?Reflect.has(e,n)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(e,n)},getPrototypeOf(){return Reflect.getPrototypeOf(e)},has(t,n){return Reflect.has(e,n)},ownKeys(){return Reflect.ownKeys(e)},set(t,n,r){return e[n]=r,delete t[n],!0}})}function bf(e,t={scriptable:!0,indexable:!0}){let{_scriptable:n=t.scriptable,_indexable:r=t.indexable,_allKeys:i=t.allKeys}=e;return{allKeys:i,scriptable:n,indexable:r,isScriptable:Eu(n)?n:()=>n,isIndexable:Eu(r)?r:()=>r}}var xf=(e,t)=>e?e+wu(t):t,Sf=(e,t)=>au(t)&&e!==`adapters`&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Cf(e,t,n){if(Object.prototype.hasOwnProperty.call(e,t)||t===`constructor`)return e[t];let r=n();return e[t]=r,r}function wf(e,t,n){let{_proxy:r,_context:i,_subProxy:a,_descriptors:o}=e,s=r[t];return Eu(s)&&o.isScriptable(t)&&(s=Tf(t,s,e,n)),iu(s)&&s.length&&(s=Ef(t,s,e,o.isIndexable)),Sf(t,s)&&(s=yf(s,i,a&&a[t],o)),s}function Tf(e,t,n,r){let{_proxy:i,_context:a,_subProxy:o,_stack:s}=n;if(s.has(e))throw Error(`Recursion detected: `+Array.from(s).join(`->`)+`->`+e);s.add(e);let c=t(a,o||r);return s.delete(e),Sf(e,c)&&(c=Af(i._scopes,i,e,c)),c}function Ef(e,t,n,r){let{_proxy:i,_context:a,_subProxy:o,_descriptors:s}=n;if(a.index!==void 0&&r(e))return t[a.index%t.length];if(au(t[0])){let n=t,r=i._scopes.filter(e=>e!==n);t=[];for(let c of n){let n=Af(r,i,e,c);t.push(yf(n,a,o&&o[e],s))}}return t}function Df(e,t,n){return Eu(e)?e(t,n):e}var Of=(e,t)=>e===!0?t:typeof e==`string`?Cu(t,e):void 0;function kf(e,t,n,r,i){for(let a of t){let t=Of(n,a);if(t){e.add(t);let a=Df(t._fallback,n,i);if(a!==void 0&&a!==n&&a!==r)return a}else if(t===!1&&r!==void 0&&n!==r)return null}return!1}function Af(e,t,n,r){let i=t._rootScopes,a=Df(t._fallback,n,r),o=[...e,...i],s=new Set;s.add(r);let c=jf(s,o,n,a||n,r);return c===null||a!==void 0&&a!==n&&(c=jf(s,o,a,c,r),c===null)?!1:vf(Array.from(s),[``],i,a,()=>Mf(t,n,r))}function jf(e,t,n,r,i){for(;n;)n=kf(e,t,n,r,i);return n}function Mf(e,t,n){let r=e._getTarget();t in r||(r[t]={});let i=r[t];return iu(i)&&au(n)?n:i||{}}function Nf(e,t,n,r){let i;for(let a of t)if(i=Pf(xf(a,e),n),i!==void 0)return Sf(e,i)?Af(n,r,e,i):i}function Pf(e,t){for(let n of t){if(!n)continue;let t=n[e];if(t!==void 0)return t}}function Ff(e){let t=e._keys;return t||=e._keys=If(e._scopes),t}function If(e){let t=new Set;for(let n of e)for(let e of Object.keys(n).filter(e=>!e.startsWith(`_`)))t.add(e);return Array.from(t)}function Lf(e,t,n,r){let{iScale:i}=e,{key:a=`r`}=this._parsing,o=Array(r),s,c,l,u;for(s=0,c=r;ste===`x`?`y`:`x`;function Vf(e,t,n,r){let i=e.skip?t:e,a=t,o=n.skip?t:n,s=Xu(a,i),c=Xu(o,a),l=s/(s+c),u=c/(s+c);l=isNaN(l)?0:l,u=isNaN(u)?0:u;let d=r*l,f=r*u;return{previous:{x:a.x-d*(o.x-i.x),y:a.y-d*(o.y-i.y)},next:{x:a.x+f*(o.x-i.x),y:a.y+f*(o.y-i.y)}}}function Hf(e,t,n){let r=e.length,i,a,o,s,c,l=zf(e,0);for(let u=0;u!e.skip)),t.cubicInterpolationMode===`monotone`)Wf(e,i);else{let n=r?e[e.length-1]:e[0];for(a=0,o=e.length;ae.ownerDocument.defaultView.getComputedStyle(e,null);function Qf(e,t){return Zf(e).getPropertyValue(t)}var $f=[`top`,`right`,`bottom`,`left`];function ep(e,t,n){let r={};n=n?`-`+n:``;for(let i=0;i<4;i++){let a=$f[i];r[a]=parseFloat(e[t+`-`+a+n])||0}return r.width=r.left+r.right,r.height=r.top+r.bottom,r}var tp=(e,t,n)=>(e>0||t>0)&&(!n||!n.shadowRoot);function np(e,t){let n=e.touches,r=n&&n.length?n[0]:e,{offsetX:i,offsetY:a}=r,o=!1,s,c;if(tp(i,a,e.target))s=i,c=a;else{let e=t.getBoundingClientRect();s=r.clientX-e.left,c=r.clientY-e.top,o=!0}return{x:s,y:c,box:o}}function rp(e,t){if(`native`in e)return e;let{canvas:n,currentDevicePixelRatio:r}=t,i=Zf(n),a=i.boxSizing===`border-box`,o=ep(i,`padding`),s=ep(i,`border`,`width`),{x:c,y:l,box:u}=np(e,n),d=o.left+(u&&s.left),f=o.top+(u&&s.top),{width:p,height:m}=t;return a&&(p-=o.width+s.width,m-=o.height+s.height),{x:Math.round((c-d)/p*n.width/r),y:Math.round((l-f)/m*n.height/r)}}function ip(e,t,n){let r,i;if(t===void 0||n===void 0){let a=e&&Yf(e);if(!a)t=e.clientWidth,n=e.clientHeight;else{let e=a.getBoundingClientRect(),o=Zf(a),s=ep(o,`border`,`width`),c=ep(o,`padding`);t=e.width-c.width-s.width,n=e.height-c.height-s.height,r=Xf(o.maxWidth,a,`clientWidth`),i=Xf(o.maxHeight,a,`clientHeight`)}}return{width:t,height:n,maxWidth:r||Mu,maxHeight:i||Mu}}var ap=e=>Math.round(e*10)/10;function op(e,t,n,r){let i=Zf(e),a=ep(i,`margin`),o=Xf(i.maxWidth,e,`clientWidth`)||Mu,s=Xf(i.maxHeight,e,`clientHeight`)||Mu,c=ip(e,t,n),{width:l,height:u}=c;if(i.boxSizing===`content-box`){let e=ep(i,`border`,`width`),t=ep(i,`padding`);l-=t.width+e.width,u-=t.height+e.height}return l=Math.max(0,l-a.width),u=Math.max(0,r?l/r:u-a.height),l=ap(Math.min(l,o,c.maxWidth)),u=ap(Math.min(u,s,c.maxHeight)),l&&!u&&(u=ap(l/2)),(t!==void 0||n!==void 0)&&r&&c.height&&u>c.height&&(u=c.height,l=ap(Math.floor(u*r))),{width:l,height:u}}function sp(e,t,n){let r=t||1,i=ap(e.height*r),a=ap(e.width*r);e.height=ap(e.height),e.width=ap(e.width);let o=e.canvas;return o.style&&(n||!o.style.height&&!o.style.width)&&(o.style.height=`${e.height}px`,o.style.width=`${e.width}px`),e.currentDevicePixelRatio!==r||o.height!==i||o.width!==a?(e.currentDevicePixelRatio=r,o.height=i,o.width=a,e.ctx.setTransform(r,0,0,r,0,0),!0):!1}var cp=function(){let e=!1;try{let t={get passive(){return e=!0,!1}};Jf()&&(window.addEventListener(`test`,null,t),window.removeEventListener(`test`,null,t))}catch{}return e}();function lp(e,t){let n=Qf(e,t),r=n&&n.match(/^(\d+)(\.\d+)?px$/);return r?+r[1]:void 0}function up(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:e.y+n*(t.y-e.y)}}function dp(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:r===`middle`?n<.5?e.y:t.y:r===`after`?n<1?e.y:t.y:n>0?t.y:e.y}}function fp(e,t,n,r){let i={x:e.cp2x,y:e.cp2y},a={x:t.cp1x,y:t.cp1y},o=up(e,i,n),s=up(i,a,n),c=up(a,t,n);return up(up(o,s,n),up(s,c,n),n)}var pp=function(e,t){return{x(n){return e+e+t-n},setWidth(e){t=e},textAlign(e){return e===`center`?e:e===`right`?`left`:`right`},xPlus(e,t){return e-t},leftForLtr(e,t){return e-t}}},mp=function(){return{x(e){return e},setWidth(e){},textAlign(e){return e},xPlus(e,t){return e+t},leftForLtr(e,t){return e}}};function hp(e,t,n){return e?pp(t,n):mp()}function gp(e,t){let n,r;(t===`ltr`||t===`rtl`)&&(n=e.canvas.style,r=[n.getPropertyValue(`direction`),n.getPropertyPriority(`direction`)],n.setProperty(`direction`,t,`important`),e.prevTextDirection=r)}function _p(e,t){t!==void 0&&(delete e.prevTextDirection,e.canvas.style.setProperty(`direction`,t[0],t[1]))}function vp(e){return e===`angle`?{between:$u,compare:Zu,normalize:Qu}:{between:nd,compare:(e,t)=>e-t,normalize:e=>e}}function yp({start:e,end:t,count:n,loop:r,style:i}){return{start:e%n,end:t%n,loop:r&&(t-e+1)%n===0,style:i}}function bp(e,t,n){let{property:r,start:i,end:a}=n,{between:o,normalize:s}=vp(r),c=t.length,{start:l,end:u,loop:d}=e,f,p;if(d){for(l+=c,u+=c,f=0,p=c;fc(i,y,_)&&s(i,y)!==0,x=()=>s(a,_)===0||c(a,y,_),S=()=>h||b(),C=()=>!h||x();for(let e=u,n=u;e<=d;++e)v=t[e%o],!v.skip&&(_=l(v[r]),_!==y&&(h=c(_,i,a),g===null&&S()&&(g=s(_,i)===0?e:n),g!==null&&C()&&(m.push(yp({start:g,end:e,loop:f,count:o,style:p})),g=null),n=e,y=_));return g!==null&&m.push(yp({start:g,end:d,loop:f,count:o,style:p})),m}function Sp(e,t){let n=[],r=e.segments;for(let i=0;ii&&e[a%t].skip;)a--;return a%=t,{start:i,end:a}}function wp(e,t,n,r){let i=e.length,a=[],o=t,s=e[t],c;for(c=t+1;c<=n;++c){let n=e[c%i];n.skip||n.stop?s.skip||(r=!1,a.push({start:t%i,end:(c-1)%i,loop:r}),t=o=n.stop?c:null):(o=c,s.skip&&(t=c)),s=n}return o!==null&&a.push({start:t%i,end:o%i,loop:r}),a}function Tp(e,t){let n=e.points,r=e.options.spanGaps,i=n.length;if(!i)return[];let a=!!e._loop,{start:o,end:s}=Cp(n,i,a,r);return r===!0?Ep(e,[{start:o,end:s,loop:a}],n,t):Ep(e,wp(n,o,sr({chart:e,initial:t.initial,numSteps:a,currentStep:Math.min(n-t.start,a)}))}_refresh(){this._request||=(this._running=!0,dd.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let t=0;this._charts.forEach((n,r)=>{if(!n.running||!n.items.length)return;let i=n.items,a=i.length-1,o=!1,s;for(;a>=0;--a)s=i[a],s._active?(s._total>n.duration&&(n.duration=s._total),s.tick(e),o=!0):(i[a]=i[i.length-1],i.pop());o&&(r.draw(),this._notify(r,n,e,`progress`)),i.length||(n.running=!1,this._notify(r,n,e,`complete`),n.initial=!1),t+=i.length}),this._lastDate=e,t===0&&(this._running=!1)}_getAnims(e){let t=this._charts,n=t.get(e);return n||(n={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,n)),n}listen(e,t,n){this._getAnims(e).listeners[t].push(n)}add(e,t){!t||!t.length||this._getAnims(e).items.push(...t)}has(e){return this._getAnims(e).items.length>0}start(e){let t=this._charts.get(e);t&&(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((e,t)=>Math.max(e,t._duration),0),this._refresh())}running(e){if(!this._running)return!1;let t=this._charts.get(e);return!(!t||!t.running||!t.items.length)}stop(e){let t=this._charts.get(e);if(!t||!t.items.length)return;let n=t.items,r=n.length-1;for(;r>=0;--r)n[r].cancel();t.items=[],this._notify(e,t,Date.now(),`complete`)}remove(e){return this._charts.delete(e)}},Pp=`transparent`,Fp={boolean(e,t,n){return n>.5?t:e},color(e,t,n){let r=wd(e||Pp),i=r.valid&&wd(t||Pp);return i&&i.valid?i.mix(r,n).hexString():t},number(e,t,n){return e+(t-e)*n}},Ip=class{constructor(e,t,n,r){let i=t[n];r=hf([e.to,r,i,e.from]);let a=hf([e.from,i,r]);this._active=!0,this._fn=e.fn||Fp[e.type||typeof a],this._easing=Sd[e.easing]||Sd.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=t,this._prop=n,this._from=a,this._to=r,this._promises=void 0}active(){return this._active}update(e,t,n){if(this._active){this._notify(!1);let r=this._target[this._prop],i=n-this._start,a=this._duration-i;this._start=n,this._duration=Math.floor(Math.max(a,e.duration)),this._total+=i,this._loop=!!e.loop,this._to=hf([e.to,t,r,e.from]),this._from=hf([e.from,r,t])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){let t=e-this._start,n=this._duration,r=this._prop,i=this._from,a=this._loop,o=this._to,s;if(this._active=i!==o&&(a||t1?2-s:s,s=this._easing(Math.min(1,Math.max(0,s))),this._target[r]=this._fn(i,o,s)}wait(){let e=this._promises||=[];return new Promise((t,n)=>{e.push({res:t,rej:n})})}_notify(e){let t=e?`res`:`rej`,n=this._promises||[];for(let e=0;e{let i=e[r];if(!au(i))return;let a={};for(let e of t)a[e]=i[e];(iu(i.properties)&&i.properties||[r]).forEach(e=>{(e===r||!n.has(e))&&n.set(e,a)})})}_animateOptions(e,t){let n=t.options,r=zp(e,n);if(!r)return[];let i=this._createAnimations(r,n);return n.$shared&&Rp(e.options.$animations,n).then(()=>{e.options=n},()=>{}),i}_createAnimations(e,t){let n=this._properties,r=[],i=e.$animations||={},a=Object.keys(t),o=Date.now(),s;for(s=a.length-1;s>=0;--s){let c=a[s];if(c.charAt(0)===`$`)continue;if(c===`options`){r.push(...this._animateOptions(e,t));continue}let l=t[c],u=i[c],d=n.get(c);if(u)if(d&&u.active()){u.update(d,l,o);continue}else u.cancel();if(!d||!d.duration){e[c]=l;continue}i[c]=u=new Ip(d,e,c,l),r.push(u)}return r}update(e,t){if(this._properties.size===0){Object.assign(e,t);return}let n=this._createAnimations(e,t);if(n.length)return Np.add(this._chart,n),!0}};function Rp(e,t){let n=[],r=Object.keys(t);for(let t=0;t0||!n&&t<0)return i.index}return null}function Zp(e,t){let{chart:n,_cachedMeta:r}=e,i=n._stacks||={},{iScale:a,vScale:o,index:s}=r,c=a.axis,l=o.axis,u=qp(a,o,r),d=t.length,f;for(let e=0;en[e].axis===t).shift()}function $p(e,t){return _f(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:`default`,type:`dataset`})}function em(e,t,n){return _f(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:n,index:t,mode:`default`,type:`data`})}function tm(e,t){let n=e.controller.index,r=e.vScale&&e.vScale.axis;if(r){t||=e._parsed;for(let e of t){let t=e._stacks;if(!t||t[r]===void 0||t[r][n]===void 0)return;delete t[r][n],t[r]._visualValues!==void 0&&t[r]._visualValues[n]!==void 0&&delete t[r]._visualValues[n]}}}var nm=e=>e===`reset`||e===`none`,rm=(e,t)=>t?e:Object.assign({},e),im=(e,t,n)=>e&&!t.hidden&&t._stacked&&{keys:Up(n,!0),values:null},am=class{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(e,t){this.chart=e,this._ctx=e.ctx,this.index=t,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=Kp(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled(`filler`)&&console.warn(`Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options`)}updateIndex(e){this.index!==e&&tm(this._cachedMeta),this.index=e}linkScales(){let e=this.chart,t=this._cachedMeta,n=this.getDataset(),r=(e,t,n,r)=>e===`x`?t:e===`r`?r:n,i=t.xAxisID=cu(n.xAxisID,Qp(e,`x`)),a=t.yAxisID=cu(n.yAxisID,Qp(e,`y`)),o=t.rAxisID=cu(n.rAxisID,Qp(e,`r`)),s=t.indexAxis,c=t.iAxisID=r(s,i,a,o),l=t.vAxisID=r(s,a,i,o);t.xScale=this.getScaleForId(i),t.yScale=this.getScaleForId(a),t.rScale=this.getScaleForId(o),t.iScale=this.getScaleForId(c),t.vScale=this.getScaleForId(l)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){let t=this._cachedMeta;return e===t.iScale?t.vScale:t.iScale}reset(){this._update(`reset`)}_destroy(){let e=this._cachedMeta;this._data&&ld(this._data,this),e._stacked&&tm(e)}_dataCheck(){let e=this.getDataset(),t=e.data||=[],n=this._data;if(au(t)){let e=this._cachedMeta;this._data=Gp(t,e)}else if(n!==t){if(n){ld(n,this);let e=this._cachedMeta;tm(e),e._parsed=[]}t&&Object.isExtensible(t)&&cd(t,this),this._syncList=[],this._data=t}}addElements(){let e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){let t=this._cachedMeta,n=this.getDataset(),r=!1;this._dataCheck();let i=t._stacked;t._stacked=Kp(t.vScale,t),t.stack!==n.stack&&(r=!0,tm(t),t.stack=n.stack),this._resyncElements(e),(r||i!==t._stacked)&&(Zp(this,t._parsed),t._stacked=Kp(t.vScale,t))}configure(){let e=this.chart.config,t=e.datasetScopeKeys(this._type),n=e.getOptionScopes(this.getDataset(),t,!0);this.options=e.createResolver(n,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,t){let{_cachedMeta:n,_data:r}=this,{iScale:i,_stacked:a}=n,o=i.axis,s=e===0&&t===r.length||n._sorted,c=e>0&&n._parsed[e-1],l,u,d;if(this._parsing===!1)n._parsed=r,n._sorted=!0,d=r;else{d=iu(r[e])?this.parseArrayData(n,r,e,t):au(r[e])?this.parseObjectData(n,r,e,t):this.parsePrimitiveData(n,r,e,t);let i=()=>u[o]===null||c&&u[o]t||u=0;--d)if(!p()){this.updateRangeFromParsed(c,e,f,s);break}}return c}getAllParsedValues(e){let t=this._cachedMeta._parsed,n=[],r,i,a;for(r=0,i=t.length;r=0&&ethis.getContext(n,r,t),u);return p.$shared&&(p.$shared=s,i[a]=Object.freeze(rm(p,s))),p}_resolveAnimations(e,t,n){let r=this.chart,i=this._cachedDataOpts,a=`animation-${t}`,o=i[a];if(o)return o;let s;if(r.options.animation!==!1){let r=this.chart.config,i=r.datasetAnimationScopeKeys(this._type,t),a=r.getOptionScopes(this.getDataset(),i);s=r.createResolver(a,this.getContext(e,n,t))}let c=new Lp(r,s&&s.animations);return s&&s._cacheable&&(i[a]=Object.freeze(c)),c}getSharedOptions(e){if(e.$shared)return this._sharedOptions||=Object.assign({},e)}includeOptions(e,t){return!t||nm(e)||this.chart._animationsDisabled}_getSharedOptions(e,t){let n=this.resolveDataElementOptions(e,t),r=this._sharedOptions,i=this.getSharedOptions(n),a=this.includeOptions(t,i)||i!==r;return this.updateSharedOptions(i,t,n),{sharedOptions:i,includeOptions:a}}updateElement(e,t,n,r){nm(r)?Object.assign(e,n):this._resolveAnimations(t,r).update(e,n)}updateSharedOptions(e,t,n){e&&!nm(t)&&this._resolveAnimations(void 0,t).update(e,n)}_setStyle(e,t,n,r){e.active=r;let i=this.getStyle(t,r);this._resolveAnimations(t,n,r).update(e,{options:!r&&this.getSharedOptions(i)||i})}removeHoverStyle(e,t,n){this._setStyle(e,n,`active`,!1)}setHoverStyle(e,t,n){this._setStyle(e,n,`active`,!0)}_removeDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,`active`,!1)}_setDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,`active`,!0)}_resyncElements(e){let t=this._data,n=this._cachedMeta.data;for(let[e,t,n]of this._syncList)this[e](t,n);this._syncList=[];let r=n.length,i=t.length,a=Math.min(i,r);a&&this.parse(0,a),i>r?this._insertElements(r,i-r,e):i{for(e.length+=t,o=e.length-1;o>=a;o--)e[o]=e[o-t]};for(s(i),o=e;oe-t))}return e._cache.$bar}function sm(e){let t=e.iScale,n=om(t,e.type),r=t._length,i,a,o,s,c=()=>{o===32767||o===-32768||(Tu(s)&&(r=Math.min(r,Math.abs(o-s)||r)),s=o)};for(i=0,a=n.length;i0?i[e-1]:null,s=eMath.abs(s)&&(c=s,l=o),t[n.axis]=l,t._custom={barStart:c,barEnd:l,start:i,end:a,min:o,max:s}}function dm(e,t,n,r){return iu(e)?um(e,t,n,r):t[n.axis]=n.parse(e,r),t}function fm(e,t,n,r){let i=e.iScale,a=e.vScale,o=i.getLabels(),s=i===a,c=[],l,u,d,f;for(l=n,u=n+r;l=n?1:-1):Ru(e)}function hm(e){let t,n,r,i,a;return e.horizontal?(t=e.base>e.x,n=`left`,r=`right`):(t=e.basee.controller.options.grouped),i=n.options.stacked,a=[],o=this._cachedMeta.controller.getParsed(t),s=o&&o[n.axis],c=e=>{let t=e._parsed.find(e=>e[n.axis]===s),r=t&&t[e.vScale.axis];if(ru(r)||isNaN(r))return!0};for(let n of r)if(!(t!==void 0&&c(n))&&((i===!1||a.indexOf(n.stack)===-1||i===void 0&&n.stack===void 0)&&a.push(n.stack),n.index===e))break;return a.length||a.push(void 0),a}_getStackCount(e){return this._getStacks(void 0,e).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let e=this.chart.scales,t=this.chart.options.indexAxis;return Object.keys(e).filter(n=>e[n].axis===t).shift()}_getAxis(){let e={},t=this.getFirstScaleIdForIndexAxis();for(let n of this.chart.data.datasets)e[cu(this.chart.options.indexAxis===`x`?n.xAxisID:n.yAxisID,t)]=!0;return Object.keys(e)}_getStackIndex(e,t,n){let r=this._getStacks(e,n),i=t===void 0?-1:r.indexOf(t);return i===-1?r.length-1:i}_getRuler(){let e=this.options,t=this._cachedMeta,n=t.iScale,r=[],i,a;for(i=0,a=t.data.length;i=0;--n)t=Math.max(t,e[n].size(this.resolveDataElementOptions(n))/2);return t>0&&t}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart.data.labels||[],{xScale:r,yScale:i}=t,a=this.getParsed(e),o=r.getLabelForValue(a.x),s=i.getLabelForValue(a.y),c=a._custom;return{label:n[e]||``,value:`(`+o+`, `+s+(c?`, `+c:``)+`)`}}update(e){let t=this._cachedMeta.data;this.updateElements(t,0,t.length,e)}updateElements(e,t,n,r){let i=r===`reset`,{iScale:a,vScale:o}=this._cachedMeta,{sharedOptions:s,includeOptions:c}=this._getSharedOptions(t,r),l=a.axis,u=o.axis;for(let d=t;d$u(e,s,c,!0)?1:Math.max(t,t*n,r,r*n),m=(e,t,r)=>$u(e,s,c,!0)?-1:Math.min(t,t*n,r,r*n),h=p(0,l,d),g=p(Pu,u,f),_=m(ku,l,d),v=m(ku+Pu,u,f);r=(h-_)/2,i=(g-v)/2,a=-(h+_)/2,o=-(g+v)/2}return{ratioX:r,ratioY:i,offsetX:a,offsetY:o}}var wm=class extends am{static id=`doughnut`;static defaults={datasetElementType:!1,dataElementType:`arc`,animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:`number`,properties:[`circumference`,`endAngle`,`innerRadius`,`outerRadius`,`startAngle`,`x`,`y`,`offset`,`borderWidth`,`spacing`]}},cutout:`50%`,rotation:0,circumference:360,radius:`100%`,spacing:0,indexAxis:`r`};static descriptors={_scriptable:e=>e!==`spacing`,_indexable:e=>e!==`spacing`&&!e.startsWith(`borderDash`)&&!e.startsWith(`hoverBorderDash`)};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let t=e.data,{labels:{pointStyle:n,textAlign:r,color:i,useBorderRadius:a,borderRadius:o}}=e.legend.options;return t.labels.length&&t.datasets.length?t.labels.map((t,s)=>{let c=e.getDatasetMeta(0).controller.getStyle(s);return{text:t,fillStyle:c.backgroundColor,fontColor:i,hidden:!e.getDataVisibility(s),lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:c.borderWidth,strokeStyle:c.borderColor,textAlign:r,pointStyle:n,borderRadius:a&&(o||c.borderRadius),index:s}}):[]}},onClick(e,t,n){n.chart.toggleDataVisibility(t.index),n.chart.update()}}}};constructor(e,t){super(e,t),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,t){let n=this.getDataset().data,r=this._cachedMeta;if(this._parsing===!1)r._parsed=n;else{let i=e=>+n[e];if(au(n[e])){let{key:e=`value`}=this._parsing;i=t=>+Cu(n[t],e)}let a,o;for(a=e,o=e+t;a0&&!isNaN(e)?Math.abs(e)/t*Au:0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=Md(t._parsed[e],n.options.locale);return{label:r[e]||``,value:i}}getMaxBorderWidth(e){let t=0,n=this.chart,r,i,a,o,s;if(!e){for(r=0,i=n.data.datasets.length;r0&&this.getParsed(t-1);for(let n=0;n=_){v.skip=!0;continue}let b=this.getParsed(n),x=ru(b[f]),S=v[d]=a.getPixelForValue(b[d],n),C=v[f]=i||x?o.getBasePixel():o.getPixelForValue(s?this.applyStack(o,b,s):b[f],n);v.skip=isNaN(S)||isNaN(C)||x,v.stop=n>0&&Math.abs(b[d]-y[d])>h,m&&(v.parsed=b,v.raw=c.data[n]),u&&(v.options=l||this.resolveDataElementOptions(n,p.active?`active`:r)),g||this.updateElement(p,n,v,r),y=b}}getMaxOverflow(){let e=this._cachedMeta,t=e.dataset,n=t.options&&t.options.borderWidth||0,r=e.data||[];if(!r.length)return n;let i=r[0].size(this.resolveDataElementOptions(0)),a=r[r.length-1].size(this.resolveDataElementOptions(r.length-1));return Math.max(n,i,a)/2}draw(){let e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}},Em=class extends am{static id=`polarArea`;static defaults={dataElementType:`arc`,animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:`number`,properties:[`x`,`y`,`startAngle`,`endAngle`,`innerRadius`,`outerRadius`]}},indexAxis:`r`,startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let t=e.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:n,color:r}}=e.legend.options;return t.labels.map((t,i)=>{let a=e.getDatasetMeta(0).controller.getStyle(i);return{text:t,fillStyle:a.backgroundColor,strokeStyle:a.borderColor,fontColor:r,lineWidth:a.borderWidth,pointStyle:n,hidden:!e.getDataVisibility(i),index:i}})}return[]}},onClick(e,t,n){n.chart.toggleDataVisibility(t.index),n.chart.update()}}},scales:{r:{type:`radialLinear`,angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(e,t){super(e,t),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=Md(t._parsed[e].r,n.options.locale);return{label:r[e]||``,value:i}}parseObjectData(e,t,n,r){return Lf.bind(this)(e,t,n,r)}update(e){let t=this._cachedMeta.data;this._updateRadius(),this.updateElements(t,0,t.length,e)}getMinMax(){let e=this._cachedMeta,t={min:1/0,max:-1/0};return e.data.forEach((e,n)=>{let r=this.getParsed(n).r;!isNaN(r)&&this.chart.getDataVisibility(n)&&(rt.max&&(t.max=r))}),t}_updateRadius(){let e=this.chart,t=e.chartArea,n=e.options,r=Math.min(t.right-t.left,t.bottom-t.top),i=Math.max(r/2,0),a=(i-Math.max(n.cutoutPercentage?i/100*n.cutoutPercentage:1,0))/e.getVisibleDatasetCount();this.outerRadius=i-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(e,t,n,r){let i=r===`reset`,a=this.chart,o=a.options.animation,s=this._cachedMeta.rScale,c=s.xCenter,l=s.yCenter,u=s.getIndexAngle(0)-.5*ku,d=u,f,p=360/this.countVisibleElements();for(f=0;f{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&t++}),t}_computeAngle(e,t,n){return this.chart.getDataVisibility(e)?Ku(this.resolveDataElementOptions(e,t).angle||n):0}},Dm=Object.freeze({__proto__:null,BarController:xm,BubbleController:Sm,DoughnutController:wm,LineController:Tm,PieController:class extends wm{static id=`pie`;static defaults={cutout:0,rotation:0,circumference:360,radius:`100%`}},PolarAreaController:Em,RadarController:class extends am{static id=`radar`;static defaults={datasetElementType:`line`,dataElementType:`point`,indexAxis:`r`,showLine:!0,elements:{line:{fill:`start`}}};static overrides={aspectRatio:1,scales:{r:{type:`radialLinear`}}};getLabelAndValue(e){let t=this._cachedMeta.vScale,n=this.getParsed(e);return{label:t.getLabels()[e],value:``+t.getLabelForValue(n[t.axis])}}parseObjectData(e,t,n,r){return Lf.bind(this)(e,t,n,r)}update(e){let t=this._cachedMeta,n=t.dataset,r=t.data||[],i=t.iScale.getLabels();if(n.points=r,e!==`resize`){let t=this.resolveDatasetElementOptions(e);this.options.showLine||(t.borderWidth=0);let a={_loop:!0,_fullLoop:i.length===r.length,options:t};this.updateElement(n,void 0,a,e)}this.updateElements(r,0,r.length,e)}updateElements(e,t,n,r){let i=this._cachedMeta.rScale,a=r===`reset`;for(let o=t;o0&&this.getParsed(t-1);for(let l=t;l0&&Math.abs(n[f]-v[f])>g,h&&(m.parsed=n,m.raw=c.data[l]),d&&(m.options=u||this.resolveDataElementOptions(l,t.active?`active`:r)),_||this.updateElement(t,l,m,r),v=n}this.updateSharedOptions(u,r,l)}getMaxOverflow(){let e=this._cachedMeta,t=e.data||[];if(!this.options.showLine){let e=0;for(let n=t.length-1;n>=0;--n)e=Math.max(e,t[n].size(this.resolveDataElementOptions(n))/2);return e>0&&e}let n=e.dataset,r=n.options&&n.options.borderWidth||0;if(!t.length)return r;let i=t[0].size(this.resolveDataElementOptions(0)),a=t[t.length-1].size(this.resolveDataElementOptions(t.length-1));return Math.max(r,i,a)/2}}});function Om(){throw Error(`This method is not implemented: Check that a complete date adapter is provided.`)}var km={_date:class e{static override(t){Object.assign(e.prototype,t)}options;constructor(e){this.options=e||{}}init(){}formats(){return Om()}parse(){return Om()}format(){return Om()}add(){return Om()}diff(){return Om()}startOf(){return Om()}endOf(){return Om()}}};function Am(e,t,n,r){let{controller:i,data:a,_sorted:o}=e,s=i._cachedMeta.iScale,c=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null;if(s&&t===s.axis&&t!==`r`&&o&&a.length){let o=s._reversePixels?ad:id;if(!r){let r=o(a,t,n);if(c){let{vScale:t}=i._cachedMeta,{_parsed:n}=e,a=n.slice(0,r.lo+1).reverse().findIndex(e=>!ru(e[t.axis]));r.lo-=Math.max(0,a);let o=n.slice(r.hi).findIndex(e=>!ru(e[t.axis]));r.hi+=Math.max(0,o)}return r}else if(i._sharedOptions){let e=a[0],r=typeof e.getRange==`function`&&e.getRange(t);if(r){let e=o(a,t,n-r),i=o(a,t,n+r);return{lo:e.lo,hi:i.hi}}}}return{lo:0,hi:a.length-1}}function jm(e,t,n,r,i){let a=e.getSortedVisibleDatasetMetas(),o=n[t];for(let e=0,n=a.length;e{e[o]&&e[o](t[n],i)&&(a.push({element:e,datasetIndex:r,index:c}),s||=e.inRange(t.x,t.y,i))}),r&&!s?[]:a}var Rm={evaluateInteractionItems:jm,modes:{index(e,t,n,r){let i=rp(t,e),a=n.axis||`x`,o=n.includeInvisible||!1,s=n.intersect?Nm(e,i,a,r,o):Im(e,i,a,!1,r,o),c=[];return s.length?(e.getSortedVisibleDatasetMetas().forEach(e=>{let t=s[0].index,n=e.data[t];n&&!n.skip&&c.push({element:n,datasetIndex:e.index,index:t})}),c):[]},dataset(e,t,n,r){let i=rp(t,e),a=n.axis||`xy`,o=n.includeInvisible||!1,s=n.intersect?Nm(e,i,a,r,o):Im(e,i,a,!1,r,o);if(s.length>0){let t=s[0].datasetIndex,n=e.getDatasetMeta(t).data;s=[];for(let e=0;ee.pos===t)}function Vm(e,t){return e.filter(e=>zm.indexOf(e.pos)===-1&&e.box.axis===t)}function Hm(e,t){return e.sort((e,n)=>{let r=t?n:e,i=t?e:n;return r.weight===i.weight?r.index-i.index:r.weight-i.weight})}function Um(e){let t=[],n,r,i,a,o,s;for(n=0,r=(e||[]).length;ne.box.fullSize),!0),r=Hm(Bm(t,`left`),!0),i=Hm(Bm(t,`right`)),a=Hm(Bm(t,`top`),!0),o=Hm(Bm(t,`bottom`)),s=Vm(t,`x`),c=Vm(t,`y`);return{fullSize:n,leftAndTop:r.concat(a),rightAndBottom:i.concat(c).concat(o).concat(s),chartArea:Bm(t,`chartArea`),vertical:r.concat(i).concat(c),horizontal:a.concat(o).concat(s)}}function qm(e,t,n,r){return Math.max(e[n],t[n])+Math.max(e[r],t[r])}function Jm(e,t){e.top=Math.max(e.top,t.top),e.left=Math.max(e.left,t.left),e.bottom=Math.max(e.bottom,t.bottom),e.right=Math.max(e.right,t.right)}function Ym(e,t,n,r){let{pos:i,box:a}=n,o=e.maxPadding;if(!au(i)){n.size&&(e[i]-=n.size);let t=r[n.stack]||{size:0,count:1};t.size=Math.max(t.size,n.horizontal?a.height:a.width),n.size=t.size/t.count,e[i]+=n.size}a.getPadding&&Jm(o,a.getPadding());let s=Math.max(0,t.outerWidth-qm(o,e,`left`,`right`)),c=Math.max(0,t.outerHeight-qm(o,e,`top`,`bottom`)),l=s!==e.w,u=c!==e.h;return e.w=s,e.h=c,n.horizontal?{same:l,other:u}:{same:u,other:l}}function Xm(e){let t=e.maxPadding;function n(n){let r=Math.max(t[n]-e[n],0);return e[n]+=r,r}e.y+=n(`top`),e.x+=n(`left`),n(`right`),n(`bottom`)}function Zm(e,t){let n=t.maxPadding;function r(e){let r={left:0,top:0,right:0,bottom:0};return e.forEach(e=>{r[e]=Math.max(t[e],n[e])}),r}return r(e?[`left`,`right`]:[`top`,`bottom`])}function Qm(e,t,n,r){let i=[],a,o,s,c,l,u;for(a=0,o=e.length,l=0;a{typeof e.beforeLayout==`function`&&e.beforeLayout()});let u=c.reduce((e,t)=>t.box.options&&t.box.options.display===!1?e:e+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:n,padding:i,availableWidth:a,availableHeight:o,vBoxMaxWidth:a/2/u,hBoxMaxHeight:o/2}),f=Object.assign({},i);Jm(f,pf(r));let p=Object.assign({maxPadding:f,w:a,h:o,x:i.left,y:i.top},i),m=Gm(c.concat(l),d);Qm(s.fullSize,p,d,m),Qm(c,p,d,m),Qm(l,p,d,m)&&Qm(c,p,d,m),Xm(p),eh(s.leftAndTop,p,d,m),p.x+=p.w,p.y+=p.h,eh(s.rightAndBottom,p,d,m),e.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},fu(s.chartArea,t=>{let n=t.box;Object.assign(n,e.chartArea),n.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}},nh=class{acquireContext(e,t){}releaseContext(e){return!1}addEventListener(e,t,n){}removeEventListener(e,t,n){}getDevicePixelRatio(){return 1}getMaximumSize(e,t,n,r){return t=Math.max(0,t||e.width),n||=e.height,{width:t,height:Math.max(0,r?Math.floor(t/r):n)}}isAttached(e){return!0}updateConfig(e){}},rh=class extends nh{acquireContext(e){return e&&e.getContext&&e.getContext(`2d`)||null}updateConfig(e){e.options.animation=!1}},ih=`$chartjs`,ah={touchstart:`mousedown`,touchmove:`mousemove`,touchend:`mouseup`,pointerenter:`mouseenter`,pointerdown:`mousedown`,pointermove:`mousemove`,pointerup:`mouseup`,pointerleave:`mouseout`,pointerout:`mouseout`},oh=e=>e===null||e===``;function sh(e,t){let n=e.style,r=e.getAttribute(`height`),i=e.getAttribute(`width`);if(e[ih]={initial:{height:r,width:i,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||`block`,n.boxSizing=n.boxSizing||`border-box`,oh(i)){let t=lp(e,`width`);t!==void 0&&(e.width=t)}if(oh(r))if(e.style.height===``)e.height=e.width/(t||2);else{let t=lp(e,`height`);t!==void 0&&(e.height=t)}return e}var ch=cp?{passive:!0}:!1;function lh(e,t,n){e&&e.addEventListener(t,n,ch)}function uh(e,t,n){e&&e.canvas&&e.canvas.removeEventListener(t,n,ch)}function dh(e,t){let n=ah[e.type]||e.type,{x:r,y:i}=rp(e,t);return{type:n,chart:t,native:e,x:r===void 0?null:r,y:i===void 0?null:i}}function fh(e,t){for(let n of e)if(n===t||n.contains(t))return!0}function ph(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=fh(n.addedNodes,r),t&&=!fh(n.removedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}function mh(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=fh(n.removedNodes,r),t&&=!fh(n.addedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}var hh=new Map,gh=0;function _h(){let e=window.devicePixelRatio;e!==gh&&(gh=e,hh.forEach((t,n)=>{n.currentDevicePixelRatio!==e&&t()}))}function vh(e,t){hh.size||window.addEventListener(`resize`,_h),hh.set(e,t)}function yh(e){hh.delete(e),hh.size||window.removeEventListener(`resize`,_h)}function bh(e,t,n){let r=e.canvas,i=r&&Yf(r);if(!i)return;let a=fd((e,t)=>{let r=i.clientWidth;n(e,t),r{let t=e[0],n=t.contentRect.width,r=t.contentRect.height;n===0&&r===0||a(n,r)});return o.observe(i),vh(e,a),o}function xh(e,t,n){n&&n.disconnect(),t===`resize`&&yh(e)}function Sh(e,t,n){let r=e.canvas,i=fd(t=>{e.ctx!==null&&n(dh(t,e))},e);return lh(r,t,i),i}var Ch=class extends nh{acquireContext(e,t){let n=e&&e.getContext&&e.getContext(`2d`);return n&&n.canvas===e?(sh(e,t),n):null}releaseContext(e){let t=e.canvas;if(!t[ih])return!1;let n=t[ih].initial;[`height`,`width`].forEach(e=>{let r=n[e];ru(r)?t.removeAttribute(e):t.setAttribute(e,r)});let r=n.style||{};return Object.keys(r).forEach(e=>{t.style[e]=r[e]}),t.width=t.width,delete t[ih],!0}addEventListener(e,t,n){this.removeEventListener(e,t);let r=e.$proxies||={};r[t]=({attach:ph,detach:mh,resize:bh}[t]||Sh)(e,t,n)}removeEventListener(e,t){let n=e.$proxies||={},r=n[t];r&&(({attach:xh,detach:xh,resize:xh}[t]||uh)(e,t,r),n[t]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,t,n,r){return op(e,t,n,r)}isAttached(e){let t=e&&Yf(e);return!!(t&&t.isConnected)}};function wh(e){return!Jf()||typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas?rh:Ch}var Th=class{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(e){let{x:t,y:n}=this.getProps([`x`,`y`],e);return{x:t,y:n}}hasValue(){return Uu(this.x)&&Uu(this.y)}getProps(e,t){let n=this.$animations;if(!t||!n)return this;let r={};return e.forEach(e=>{r[e]=n[e]&&n[e].active()?n[e]._to:this[e]}),r}};function Eh(e,t){let n=e.options.ticks,r=Dh(e),i=Math.min(n.maxTicksLimit||r,r),a=n.major.enabled?kh(t):[],o=a.length,s=a[0],c=a[o-1],l=[];if(o>i)return Ah(t,l,a,o/i),l;let u=Oh(a,t,i);if(o>0){let e,n,r=o>1?Math.round((c-s)/(o-1)):null;for(jh(t,l,u,ru(r)?0:s-r,s),e=0,n=o-1;ei)return t}return Math.max(i,1)}function kh(e){let t=[],n,r;for(n=0,r=e.length;ne===`left`?`right`:e===`right`?`left`:e,Ph=(e,t,n)=>t===`top`||t===`left`?e[t]+n:e[t]-n,Fh=(e,t)=>Math.min(t||e,e);function Ih(e,t){let n=[],r=e.length/t,i=e.length,a=0;for(;ao+s)))return c}function Rh(e,t){fu(e,e=>{let n=e.gc,r=n.length/2,i;if(r>t){for(i=0;in?n:t,n=r&&t>n?t:n,{min:su(t,su(n,t)),max:su(n,su(t,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){return this._labelItems||=this._computeLabelItems(e)}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){du(this.options.beforeUpdate,[this])}update(e,t,n){let{beginAtZero:r,grace:i,ticks:a}=this.options,o=a.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=t,this._margins=n=Object.assign({left:0,right:0,top:0,bottom:0},n),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+n.left+n.right:this.height+n.top+n.bottom,this._dataLimitsCached||=(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=gf(this,i,r),!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let s=o=i||n<=1||!this.isHorizontal()){this.labelRotation=r;return}let l=this._getLabelSizes(),u=l.widest.width,d=l.highest.height,f=ed(this.chart.width-u,0,this.maxWidth);o=e.offset?this.maxWidth/n:f/(n-1),u+6>o&&(o=f/(n-(e.offset?.5:1)),s=this.maxHeight-zh(e.grid)-t.padding-Bh(e.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),a=qu(Math.min(Math.asin(ed((l.highest.height+6)/o,-1,1)),Math.asin(ed(s/c,-1,1))-Math.asin(ed(d/c,-1,1)))),a=Math.max(r,Math.min(i,a))),this.labelRotation=a}afterCalculateLabelRotation(){du(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){du(this.options.beforeFit,[this])}fit(){let e={width:0,height:0},{chart:t,options:{ticks:n,title:r,grid:i}}=this,a=this._isVisible(),o=this.isHorizontal();if(a){let a=Bh(r,t.options.font);if(o?(e.width=this.maxWidth,e.height=zh(i)+a):(e.height=this.maxHeight,e.width=zh(i)+a),n.display&&this.ticks.length){let{first:t,last:r,widest:i,highest:a}=this._getLabelSizes(),s=n.padding*2,c=Ku(this.labelRotation),l=Math.cos(c),u=Math.sin(c);if(o){let t=n.mirror?0:u*i.width+l*a.height;e.height=Math.min(this.maxHeight,e.height+t+s)}else{let t=n.mirror?0:l*i.width+u*a.height;e.width=Math.min(this.maxWidth,e.width+t+s)}this._calculatePadding(t,r,u,l)}}this._handleMargins(),o?(this.width=this._length=t.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=t.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,t,n,r){let{ticks:{align:i,padding:a},position:o}=this.options,s=this.labelRotation!==0,c=o!==`top`&&this.axis===`x`;if(this.isHorizontal()){let o=this.getPixelForTick(0)-this.left,l=this.right-this.getPixelForTick(this.ticks.length-1),u=0,d=0;s?c?(u=r*e.width,d=n*t.height):(u=n*e.height,d=r*t.width):i===`start`?d=t.width:i===`end`?u=e.width:i!==`inner`&&(u=e.width/2,d=t.width/2),this.paddingLeft=Math.max((u-o+a)*this.width/(this.width-o),0),this.paddingRight=Math.max((d-l+a)*this.width/(this.width-l),0)}else{let n=t.height/2,r=e.height/2;i===`start`?(n=0,r=e.height):i===`end`&&(n=t.height,r=0),this.paddingTop=n+a,this.paddingBottom=r+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){du(this.options.afterFit,[this])}isHorizontal(){let{axis:e,position:t}=this.options;return t===`top`||t===`bottom`||e===`x`}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){this.beforeTickToLabelConversion(),this.generateTickLabels(e);let t,n;for(t=0,n=e.length;t({width:a[e]||0,height:o[e]||0});return{first:C(0),last:C(t-1),widest:C(x),highest:C(S),widths:a,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,t){return NaN}getValueForPixel(e){}getPixelForTick(e){let t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);let t=this._startPixel+e*this._length;return td(this._alignToPixels?Gd(this.chart,t,0):t)}getDecimalForPixel(e){let t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:e,max:t}=this;return e<0&&t<0?t:e>0&&t>0?e:0}getContext(e){let t=this.ticks||[];if(e>=0&&eo*r?o/n:s/r:s*r0:!!e}_computeGridLineItems(e){let t=this.axis,n=this.chart,r=this.options,{grid:i,position:a,border:o}=r,s=i.offset,c=this.isHorizontal(),l=this.ticks.length+ +!!s,u=zh(i),d=[],f=o.setContext(this.getContext()),p=f.display?f.width:0,m=p/2,h=function(e){return Gd(n,e,p)},g,_,v,y,b,x,S,C,w,T,ee,te;if(a===`top`)g=h(this.bottom),x=this.bottom-u,C=g-m,T=h(e.top)+m,te=e.bottom;else if(a===`bottom`)g=h(this.top),T=e.top,te=h(e.bottom)-m,x=g+m,C=this.top+u;else if(a===`left`)g=h(this.right),b=this.right-u,S=g-m,w=h(e.left)+m,ee=e.right;else if(a===`right`)g=h(this.left),w=e.left,ee=h(e.right)-m,b=g+m,S=this.left+u;else if(t===`x`){if(a===`center`)g=h((e.top+e.bottom)/2+.5);else if(au(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}T=e.top,te=e.bottom,x=g+m,C=x+u}else if(t===`y`){if(a===`center`)g=h((e.left+e.right)/2);else if(au(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}b=g-m,S=b-u,w=e.left,ee=e.right}let ne=cu(r.ticks.maxTicksLimit,l),re=Math.max(1,Math.ceil(l/ne));for(_=0;_0&&(a-=r/2);break}f={left:a,top:i,width:r+t.width,height:n+t.height,color:e.backdropColor}}h.push({label:y,font:w,textOffset:te,options:{rotation:m,color:n,strokeColor:s,strokeWidth:l,textAlign:d,textBaseline:ne,translation:[b,x],backdrop:f}})}return h}_getXAxisLabelAlignment(){let{position:e,ticks:t}=this.options;if(-Ku(this.labelRotation))return e===`top`?`left`:`right`;let n=`center`;return t.align===`start`?n=`left`:t.align===`end`?n=`right`:t.align===`inner`&&(n=`inner`),n}_getYAxisLabelAlignment(e){let{position:t,ticks:{crossAlign:n,mirror:r,padding:i}}=this.options,a=this._getLabelSizes(),o=e+i,s=a.widest.width,c,l;return t===`left`?r?(l=this.right+i,n===`near`?c=`left`:n===`center`?(c=`center`,l+=s/2):(c=`right`,l+=s)):(l=this.right-o,n===`near`?c=`right`:n===`center`?(c=`center`,l-=s/2):(c=`left`,l=this.left)):t===`right`?r?(l=this.left+i,n===`near`?c=`right`:n===`center`?(c=`center`,l-=s/2):(c=`left`,l-=s)):(l=this.left+o,n===`near`?c=`left`:n===`center`?(c=`center`,l+=s/2):(c=`right`,l=this.right)):c=`right`,{textAlign:c,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;let e=this.chart,t=this.options.position;if(t===`left`||t===`right`)return{top:0,left:this.left,bottom:e.height,right:this.right};if(t===`top`||t===`bottom`)return{top:this.top,left:0,bottom:this.bottom,right:e.width}}drawBackground(){let{ctx:e,options:{backgroundColor:t},left:n,top:r,width:i,height:a}=this;t&&(e.save(),e.fillStyle=t,e.fillRect(n,r,i,a),e.restore())}getLineWidthForValue(e){let t=this.options.grid;if(!this._isVisible()||!t.display)return 0;let n=this.ticks.findIndex(t=>t.value===e);return n>=0?t.setContext(this.getContext(n)).lineWidth:0}drawGrid(e){let t=this.options.grid,n=this.ctx,r=this._gridLineItems||=this._computeGridLineItems(e),i,a,o=(e,t,r)=>{!r.width||!r.color||(n.save(),n.lineWidth=r.width,n.strokeStyle=r.color,n.setLineDash(r.borderDash||[]),n.lineDashOffset=r.borderDashOffset,n.beginPath(),n.moveTo(e.x,e.y),n.lineTo(t.x,t.y),n.stroke(),n.restore())};if(t.display)for(i=0,a=r.length;i{this.draw(e)}}]:[{z:r,draw:e=>{this.drawBackground(),this.drawGrid(e),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:n,draw:e=>{this.drawLabels(e)}}]}getMatchingVisibleMetas(e){let t=this.chart.getSortedVisibleDatasetMetas(),n=this.axis+`AxisID`,r=[],i,a;for(i=0,a=t.length;i{let r=n.split(`.`),i=r.pop(),a=[e].concat(r).join(`.`),o=t[n].split(`.`),s=o.pop(),c=o.join(`.`);Vd.route(a,i,c,s)})}function Yh(e){return`id`in e&&`defaults`in e}var Xh=new class{constructor(){this.controllers=new Kh(am,`datasets`,!0),this.elements=new Kh(Th,`elements`),this.plugins=new Kh(Object,`plugins`),this.scales=new Kh(Gh,`scales`),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each(`register`,e)}remove(...e){this._each(`unregister`,e)}addControllers(...e){this._each(`register`,e,this.controllers)}addElements(...e){this._each(`register`,e,this.elements)}addPlugins(...e){this._each(`register`,e,this.plugins)}addScales(...e){this._each(`register`,e,this.scales)}getController(e){return this._get(e,this.controllers,`controller`)}getElement(e){return this._get(e,this.elements,`element`)}getPlugin(e){return this._get(e,this.plugins,`plugin`)}getScale(e){return this._get(e,this.scales,`scale`)}removeControllers(...e){this._each(`unregister`,e,this.controllers)}removeElements(...e){this._each(`unregister`,e,this.elements)}removePlugins(...e){this._each(`unregister`,e,this.plugins)}removeScales(...e){this._each(`unregister`,e,this.scales)}_each(e,t,n){[...t].forEach(t=>{let r=n||this._getRegistryForType(t);n||r.isForType(t)||r===this.plugins&&t.id?this._exec(e,r,t):fu(t,t=>{let r=n||this._getRegistryForType(t);this._exec(e,r,t)})})}_exec(e,t,n){let r=wu(e);du(n[`before`+r],[],n),t[e](n),du(n[`after`+r],[],n)}_getRegistryForType(e){for(let t=0;te.filter(e=>!t.some(t=>e.plugin.id===t.plugin.id));this._notify(r(t,n),e,`stop`),this._notify(r(n,t),e,`start`)}};function Qh(e){let t={},n=[],r=Object.keys(Xh.plugins.items);for(let e=0;e1&&ag(e[0].toLowerCase());if(t)return t}throw Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`)}function cg(e,t,n){if(n[t+`AxisID`]===e)return{axis:t}}function lg(e,t){if(t.data&&t.data.datasets){let n=t.data.datasets.filter(t=>t.xAxisID===e||t.yAxisID===e);if(n.length)return cg(e,`x`,n[0])||cg(e,`y`,n[0])}return{}}function ug(e,t){let n=Ld[e.type]||{scales:{}},r=t.scales||{},i=ng(e.type,t),a=Object.create(null);return Object.keys(r).forEach(t=>{let o=r[t];if(!au(o))return console.error(`Invalid scale configuration for scale: ${t}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);let s=sg(t,o,lg(t,e),Vd.scales[o.type]),c=ig(s,i),l=n.scales||{};a[t]=vu(Object.create(null),[{axis:s},o,l[s],l[c]])}),e.data.datasets.forEach(n=>{let i=n.type||e.type,o=n.indexAxis||ng(i,t),s=(Ld[i]||{}).scales||{};Object.keys(s).forEach(e=>{let t=rg(e,o),i=n[t+`AxisID`]||t;a[i]=a[i]||Object.create(null),vu(a[i],[{axis:t},r[i],s[e]])})}),Object.keys(a).forEach(e=>{let t=a[e];vu(t,[Vd.scales[t.type],Vd.scale])}),a}function dg(e){let t=e.options||={};t.plugins=cu(t.plugins,{}),t.scales=ug(e,t)}function fg(e){return e||={},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function pg(e){return e||={},e.data=fg(e.data),dg(e),e}var mg=new Map,hg=new Set;function gg(e,t){let n=mg.get(e);return n||(n=t(),mg.set(e,n),hg.add(n)),n}var _g=(e,t,n)=>{let r=Cu(t,n);r!==void 0&&e.add(r)},vg=class{constructor(e){this._config=pg(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=fg(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){let e=this._config;this.clearCache(),dg(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return gg(e,()=>[[`datasets.${e}`,``]])}datasetAnimationScopeKeys(e,t){return gg(`${e}.transition.${t}`,()=>[[`datasets.${e}.transitions.${t}`,`transitions.${t}`],[`datasets.${e}`,``]])}datasetElementScopeKeys(e,t){return gg(`${e}-${t}`,()=>[[`datasets.${e}.elements.${t}`,`datasets.${e}`,`elements.${t}`,``]])}pluginScopeKeys(e){let t=e.id,n=this.type;return gg(`${n}-plugin-${t}`,()=>[[`plugins.${t}`,...e.additionalOptionScopes||[]]])}_cachedScopes(e,t){let n=this._scopeCache,r=n.get(e);return(!r||t)&&(r=new Map,n.set(e,r)),r}getOptionScopes(e,t,n){let{options:r,type:i}=this,a=this._cachedScopes(e,n),o=a.get(t);if(o)return o;let s=new Set;t.forEach(t=>{e&&(s.add(e),t.forEach(t=>_g(s,e,t))),t.forEach(e=>_g(s,r,e)),t.forEach(e=>_g(s,Ld[i]||{},e)),t.forEach(e=>_g(s,Vd,e)),t.forEach(e=>_g(s,Rd,e))});let c=Array.from(s);return c.length===0&&c.push(Object.create(null)),hg.has(t)&&a.set(t,c),c}chartOptionScopes(){let{options:e,type:t}=this;return[e,Ld[t]||{},Vd.datasets[t]||{},{type:t},Vd,Rd]}resolveNamedOptions(e,t,n,r=[``]){let i={$shared:!0},{resolver:a,subPrefixes:o}=yg(this._resolverCache,e,r),s=a;if(xg(a,t)){i.$shared=!1,n=Eu(n)?n():n;let t=this.createResolver(e,n,o);s=yf(a,n,t)}for(let e of t)i[e]=s[e];return i}createResolver(e,t,n=[``],r){let{resolver:i}=yg(this._resolverCache,e,n);return au(t)?yf(i,t,void 0,r):i}};function yg(e,t,n){let r=e.get(t);r||(r=new Map,e.set(t,r));let i=n.join(),a=r.get(i);return a||(a={resolver:vf(t,n),subPrefixes:n.filter(e=>!e.toLowerCase().includes(`hover`))},r.set(i,a)),a}var bg=e=>au(e)&&Object.getOwnPropertyNames(e).some(t=>Eu(e[t]));function xg(e,t){let{isScriptable:n,isIndexable:r}=bf(e);for(let i of t){let t=n(i),a=r(i),o=(a||t)&&e[i];if(t&&(Eu(o)||bg(o))||a&&iu(o))return!0}return!1}var Sg=`4.5.1`,Cg=[`top`,`bottom`,`left`,`right`,`chartArea`];function wg(e,t){return e===`top`||e===`bottom`||Cg.indexOf(e)===-1&&t===`x`}function Tg(e,t){return function(n,r){return n[e]===r[e]?n[t]-r[t]:n[e]-r[e]}}function Eg(e){let t=e.chart,n=t.options.animation;t.notifyPlugins(`afterRender`),du(n&&n.onComplete,[e],t)}function Dg(e){let t=e.chart,n=t.options.animation;du(n&&n.onProgress,[e],t)}function Og(e){return Jf()&&typeof e==`string`?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}var kg={},Ag=e=>{let t=Og(e);return Object.values(kg).filter(e=>e.canvas===t).pop()};function jg(e,t,n){let r=Object.keys(e);for(let i of r){let r=+i;if(r>=t){let a=e[i];delete e[i],(n>0||r>t)&&(e[r+n]=a)}}}function Mg(e,t,n,r){return!n||e.type===`mouseout`?null:r?t:e}var Ng=class{static defaults=Vd;static instances=kg;static overrides=Ld;static registry=Xh;static version=Sg;static getChart=Ag;static register(...e){Xh.add(...e),Pg()}static unregister(...e){Xh.remove(...e),Pg()}constructor(e,t){let n=this.config=new vg(t),r=Og(e),i=Ag(r);if(i)throw Error(`Canvas is already in use. Chart with ID '`+i.id+`' must be destroyed before the canvas with ID '`+i.canvas.id+`' can be reused.`);let a=n.createResolver(n.chartOptionScopes(),this.getContext());this.platform=new(n.platform||(wh(r))),this.platform.updateConfig(n);let o=this.platform.acquireContext(r,a.aspectRatio),s=o&&o.canvas,c=s&&s.height,l=s&&s.width;if(this.id=nu(),this.ctx=o,this.canvas=s,this.width=l,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Zh,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=pd(e=>this.update(e),a.resizeDelay||0),this._dataChanges=[],kg[this.id]=this,!o||!s){console.error(`Failed to create chart: can't acquire context from the given item`);return}Np.listen(this,`complete`,Eg),Np.listen(this,`progress`,Dg),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:e,maintainAspectRatio:t},width:n,height:r,_aspectRatio:i}=this;return ru(e)?t&&i?i:r?n/r:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return Xh}_initialize(){return this.notifyPlugins(`beforeInit`),this.options.responsive?this.resize():sp(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(`afterInit`),this}clear(){return Kd(this.canvas,this.ctx),this}stop(){return Np.stop(this),this}resize(e,t){Np.running(this)?this._resizeBeforeDraw={width:e,height:t}:this._resize(e,t)}_resize(e,t){let n=this.options,r=this.canvas,i=n.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(r,e,t,i),o=n.devicePixelRatio||this.platform.getDevicePixelRatio(),s=this.width?`resize`:`attach`;this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,sp(this,o,!0)&&(this.notifyPlugins(`resize`,{size:a}),du(n.onResize,[this,a],this),this.attached&&this._doResize(s)&&this.render())}ensureScalesHaveIDs(){fu(this.options.scales||{},(e,t)=>{e.id=t})}buildOrUpdateScales(){let e=this.options,t=e.scales,n=this.scales,r=Object.keys(n).reduce((e,t)=>(e[t]=!1,e),{}),i=[];t&&(i=i.concat(Object.keys(t).map(e=>{let n=t[e],r=sg(e,n),i=r===`r`,a=r===`x`;return{options:n,dposition:i?`chartArea`:a?`bottom`:`left`,dtype:i?`radialLinear`:a?`category`:`linear`}}))),fu(i,t=>{let i=t.options,a=i.id,o=sg(a,i),s=cu(i.type,t.dtype);(i.position===void 0||wg(i.position,o)!==wg(t.dposition))&&(i.position=t.dposition),r[a]=!0;let c=null;a in n&&n[a].type===s?c=n[a]:(c=new(Xh.getScale(s))({id:a,type:s,ctx:this.ctx,chart:this}),n[c.id]=c),c.init(i,e)}),fu(r,(e,t)=>{e||delete n[t]}),fu(n,e=>{th.configure(this,e,e.options),th.addBox(this,e)})}_updateMetasets(){let e=this._metasets,t=this.data.datasets.length,n=e.length;if(e.sort((e,t)=>e.index-t.index),n>t){for(let e=t;et.length&&delete this._stacks,e.forEach((e,n)=>{t.filter(t=>t===e._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let e=[],t=this.data.datasets,n,r;for(this._removeUnreferencedMetasets(),n=0,r=t.length;n{this.getDatasetMeta(t).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins(`reset`)}update(e){let t=this.config;t.update();let n=this._options=t.createResolver(t.chartOptionScopes(),this.getContext()),r=this._animationsDisabled=!n.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins(`beforeUpdate`,{mode:e,cancelable:!0})===!1)return;let i=this.buildOrUpdateControllers();this.notifyPlugins(`beforeElementsUpdate`);let a=0;for(let e=0,t=this.data.datasets.length;e{e.reset()}),this._updateDatasets(e),this.notifyPlugins(`afterUpdate`,{mode:e}),this._layers.sort(Tg(`z`,`_idx`));let{_active:o,_lastEvent:s}=this;s?this._eventHandler(s,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){fu(this.scales,e=>{th.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let e=this.options;(!Du(new Set(Object.keys(this._listeners)),new Set(e.events))||!!this._responsiveListeners!==e.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:e}=this,t=this._getUniformDataChanges()||[];for(let{method:n,start:r,count:i}of t)jg(e,r,n===`_removeElements`?-i:i)}_getUniformDataChanges(){let e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];let t=this.data.datasets.length,n=t=>new Set(e.filter(e=>e[0]===t).map((e,t)=>t+`,`+e.splice(1).join(`,`))),r=n(0);for(let e=1;ee.split(`,`)).map(e=>({method:e[1],start:+e[2],count:+e[3]}))}_updateLayout(e){if(this.notifyPlugins(`beforeLayout`,{cancelable:!0})===!1)return;th.update(this,this.width,this.height,e);let t=this.chartArea,n=t.width<=0||t.height<=0;this._layers=[],fu(this.boxes,e=>{n&&e.position===`chartArea`||(e.configure&&e.configure(),this._layers.push(...e._layers()))},this),this._layers.forEach((e,t)=>{e._idx=t}),this.notifyPlugins(`afterLayout`)}_updateDatasets(e){if(this.notifyPlugins(`beforeDatasetsUpdate`,{mode:e,cancelable:!0})!==!1){for(let e=0,t=this.data.datasets.length;e=0;--t)this._drawDataset(e[t]);this.notifyPlugins(`afterDatasetsDraw`)}_drawDataset(e){let t=this.ctx,n={meta:e,index:e.index,cancelable:!0},r=Mp(this,e);this.notifyPlugins(`beforeDatasetDraw`,n)!==!1&&(r&&Xd(t,r),e.controller.draw(),r&&Zd(t),n.cancelable=!1,this.notifyPlugins(`afterDatasetDraw`,n))}isPointInArea(e){return Yd(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,t,n,r){let i=Rm.modes[t];return typeof i==`function`?i(this,e,n,r):[]}getDatasetMeta(e){let t=this.data.datasets[e],n=this._metasets,r=n.filter(e=>e&&e._dataset===t).pop();return r||(r={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t&&t.order||0,index:e,_dataset:t,_parsed:[],_sorted:!1},n.push(r)),r}getContext(){return this.$context||=_f(null,{chart:this,type:`chart`})}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){let t=this.data.datasets[e];if(!t)return!1;let n=this.getDatasetMeta(e);return typeof n.hidden==`boolean`?!n.hidden:!t.hidden}setDatasetVisibility(e,t){let n=this.getDatasetMeta(e);n.hidden=!t}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,t,n){let r=n?`show`:`hide`,i=this.getDatasetMeta(e),a=i.controller._resolveAnimations(void 0,r);Tu(t)?(i.data[t].hidden=!n,this.update()):(this.setDatasetVisibility(e,n),a.update(i,{visible:n}),this.update(t=>t.datasetIndex===e?r:void 0))}hide(e,t){this._updateVisibility(e,t,!1)}show(e,t){this._updateVisibility(e,t,!0)}_destroyDatasetMeta(e){let t=this._metasets[e];t&&t.controller&&t.controller._destroy(),delete this._metasets[e]}_stop(){let e,t;for(this.stop(),Np.remove(this),e=0,t=this.data.datasets.length;e{t.addEventListener(this,n,r),e[n]=r},r=(e,t,n)=>{e.offsetX=t,e.offsetY=n,this._eventHandler(e)};fu(this.options.events,e=>n(e,r))}bindResponsiveEvents(){this._responsiveListeners||={};let e=this._responsiveListeners,t=this.platform,n=(n,r)=>{t.addEventListener(this,n,r),e[n]=r},r=(n,r)=>{e[n]&&(t.removeEventListener(this,n,r),delete e[n])},i=(e,t)=>{this.canvas&&this.resize(e,t)},a,o=()=>{r(`attach`,o),this.attached=!0,this.resize(),n(`resize`,i),n(`detach`,a)};a=()=>{this.attached=!1,r(`resize`,i),this._stop(),this._resize(0,0),n(`attach`,o)},t.isAttached(this.canvas)?o():a()}unbindEvents(){fu(this._listeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._listeners={},fu(this._responsiveListeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,t,n){let r=n?`set`:`remove`,i,a,o,s;for(t===`dataset`&&(i=this.getDatasetMeta(e[0].datasetIndex),i.controller[`_`+r+`DatasetHoverStyle`]()),o=0,s=e.length;o{let n=this.getDatasetMeta(e);if(!n)throw Error(`No dataset found at index `+e);return{datasetIndex:e,element:n.data[t],index:t}});pu(n,t)||(this._active=n,this._lastEvent=null,this._updateHoverStyles(n,t))}notifyPlugins(e,t,n){return this._plugins.notify(this,e,t,n)}isPluginEnabled(e){return this._plugins._cache.filter(t=>t.plugin.id===e).length===1}_updateHoverStyles(e,t,n){let r=this.options.hover,i=(e,t)=>e.filter(e=>!t.some(t=>e.datasetIndex===t.datasetIndex&&e.index===t.index)),a=i(t,e),o=n?e:i(e,t);a.length&&this.updateHoverStyle(a,r.mode,!1),o.length&&r.mode&&this.updateHoverStyle(o,r.mode,!0)}_eventHandler(e,t){let n={event:e,replay:t,cancelable:!0,inChartArea:this.isPointInArea(e)},r=t=>(t.options.events||this.options.events).includes(e.native.type);if(this.notifyPlugins(`beforeEvent`,n,r)===!1)return;let i=this._handleEvent(e,t,n.inChartArea);return n.cancelable=!1,this.notifyPlugins(`afterEvent`,n,r),(i||n.changed)&&this.render(),this}_handleEvent(e,t,n){let{_active:r=[],options:i}=this,a=t,o=this._getActiveElements(e,r,n,a),s=Ou(e),c=Mg(e,this._lastEvent,n,s);n&&(this._lastEvent=null,du(i.onHover,[e,o,this],this),s&&du(i.onClick,[e,o,this],this));let l=!pu(o,r);return(l||t)&&(this._active=o,this._updateHoverStyles(o,r,t)),this._lastEvent=c,l}_getActiveElements(e,t,n,r){if(e.type===`mouseout`)return[];if(!n)return t;let i=this.options.hover;return this.getElementsAtEventForMode(e,i.mode,i,r)}};function Pg(){return fu(Ng.instances,e=>e._plugins.invalidate())}function Fg(e,t,n){let{startAngle:r,x:i,y:a,outerRadius:o,innerRadius:s,options:c}=t,{borderWidth:l,borderJoinStyle:u}=c,d=Math.min(l/o,Qu(r-n));if(e.beginPath(),e.arc(i,a,o-l/2,r+d/2,n-d/2),s>0){let t=Math.min(l/s,Qu(r-n));e.arc(i,a,s+l/2,n-t/2,r+t/2,!0)}else{let t=Math.min(l/2,o*Qu(r-n));if(u===`round`)e.arc(i,a,t,n-ku/2,r+ku/2,!0);else if(u===`bevel`){let o=2*t*t,s=-o*Math.cos(n+ku/2)+i,c=-o*Math.sin(n+ku/2)+a,l=o*Math.cos(r+ku/2)+i,u=o*Math.sin(r+ku/2)+a;e.lineTo(s,c),e.lineTo(l,u)}}e.closePath(),e.moveTo(0,0),e.rect(0,0,e.canvas.width,e.canvas.height),e.clip(`evenodd`)}function Ig(e,t,n){let{startAngle:r,pixelMargin:i,x:a,y:o,outerRadius:s,innerRadius:c}=t,l=i/s;e.beginPath(),e.arc(a,o,s,r-l,n+l),c>i?(l=i/c,e.arc(a,o,c,n+l,r-l,!0)):e.arc(a,o,i,n+Pu,r-Pu),e.closePath(),e.clip()}function Lg(e){return uf(e,[`outerStart`,`outerEnd`,`innerStart`,`innerEnd`])}function Rg(e,t,n,r){let i=Lg(e.options.borderRadius),a=(n-t)/2,o=Math.min(a,r*t/2),s=e=>{let t=(n-Math.min(a,e))*r/2;return ed(e,0,Math.min(a,t))};return{outerStart:s(i.outerStart),outerEnd:s(i.outerEnd),innerStart:ed(i.innerStart,0,o),innerEnd:ed(i.innerEnd,0,o)}}function zg(e,t,n,r){return{x:n+e*Math.cos(t),y:r+e*Math.sin(t)}}function Bg(e,t,n,r,i,a){let{x:o,y:s,startAngle:c,pixelMargin:l,innerRadius:u}=t,d=Math.max(t.outerRadius+r+n-l,0),f=u>0?u+r+n+l:0,p=0,m=i-c;if(r){let e=((u>0?u-r:0)+(d>0?d-r:0))/2;p=(m-(e===0?m:m*e/(e+r)))/2}let h=(m-Math.max(.001,m*d-n/ku)/d)/2,g=c+h+p,_=i-h-p,{outerStart:v,outerEnd:y,innerStart:b,innerEnd:x}=Rg(t,f,d,_-g),S=d-v,C=d-y,w=g+v/S,T=_-y/C,ee=f+b,te=f+x,ne=g+b/ee,re=_-x/te;if(e.beginPath(),a){let t=(w+T)/2;if(e.arc(o,s,d,w,t),e.arc(o,s,d,t,T),y>0){let t=zg(C,T,o,s);e.arc(t.x,t.y,y,T,_+Pu)}let n=zg(te,_,o,s);if(e.lineTo(n.x,n.y),x>0){let t=zg(te,re,o,s);e.arc(t.x,t.y,x,_+Pu,re+Math.PI)}let r=(_-x/f+(g+b/f))/2;if(e.arc(o,s,f,_-x/f,r,!0),e.arc(o,s,f,r,g+b/f,!0),b>0){let t=zg(ee,ne,o,s);e.arc(t.x,t.y,b,ne+Math.PI,g-Pu)}let i=zg(S,g,o,s);if(e.lineTo(i.x,i.y),v>0){let t=zg(S,w,o,s);e.arc(t.x,t.y,v,g-Pu,w)}}else{e.moveTo(o,s);let t=Math.cos(w)*d+o,n=Math.sin(w)*d+s;e.lineTo(t,n);let r=Math.cos(T)*d+o,i=Math.sin(T)*d+s;e.lineTo(r,i)}e.closePath()}function Vg(e,t,n,r,i){let{fullCircles:a,startAngle:o,circumference:s}=t,c=t.endAngle;if(a){Bg(e,t,n,r,c,i);for(let t=0;t=ku&&p===0&&u!==`miter`&&Fg(e,t,h),a||(Bg(e,t,n,r,h,i),e.stroke())}var Ug=class extends Th{static id=`arc`;static defaults={borderAlign:`center`,borderColor:`#fff`,borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:`backgroundColor`};static descriptors={_scriptable:!0,_indexable:e=>e!==`borderDash`};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(e){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,t,n){let{angle:r,distance:i}=Yu(this.getProps([`x`,`y`],n),{x:e,y:t}),{startAngle:a,endAngle:o,innerRadius:s,outerRadius:c,circumference:l}=this.getProps([`startAngle`,`endAngle`,`innerRadius`,`outerRadius`,`circumference`],n),u=(this.options.spacing+this.options.borderWidth)/2,d=cu(l,o-a),f=$u(r,a,o)&&a!==o,p=d>=Au||f,m=nd(i,s+u,c+u);return p&&m}getCenterPoint(e){let{x:t,y:n,startAngle:r,endAngle:i,innerRadius:a,outerRadius:o}=this.getProps([`x`,`y`,`startAngle`,`endAngle`,`innerRadius`,`outerRadius`],e),{offset:s,spacing:c}=this.options,l=(r+i)/2,u=(a+o+c+s)/2;return{x:t+Math.cos(l)*u,y:n+Math.sin(l)*u}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){let{options:t,circumference:n}=this,r=(t.offset||0)/4,i=(t.spacing||0)/2,a=t.circular;if(this.pixelMargin=t.borderAlign===`inner`?.33:0,this.fullCircles=n>Au?Math.floor(n/Au):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();let o=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(o)*r,Math.sin(o)*r);let s=r*(1-Math.sin(Math.min(ku,n||0)));e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,Vg(e,this,s,i,a),Hg(e,this,s,i,a),e.restore()}};function Wg(e,t,n=t){e.lineCap=cu(n.borderCapStyle,t.borderCapStyle),e.setLineDash(cu(n.borderDash,t.borderDash)),e.lineDashOffset=cu(n.borderDashOffset,t.borderDashOffset),e.lineJoin=cu(n.borderJoinStyle,t.borderJoinStyle),e.lineWidth=cu(n.borderWidth,t.borderWidth),e.strokeStyle=cu(n.borderColor,t.borderColor)}function Gg(e,t,n){e.lineTo(n.x,n.y)}function Kg(e){return e.stepped?Qd:e.tension||e.cubicInterpolationMode===`monotone`?$d:Gg}function qg(e,t,n={}){let r=e.length,{start:i=0,end:a=r-1}=n,{start:o,end:s}=t,c=Math.max(i,o),l=Math.min(a,s),u=is&&a>s;return{count:r,start:c,loop:t.loop,ilen:l(o+(l?s-e:e))%a,y=()=>{h!==g&&(e.lineTo(u,g),e.lineTo(u,h),e.lineTo(u,_))};for(c&&(p=i[v(0)],e.moveTo(p.x,p.y)),f=0;f<=s;++f){if(p=i[v(f)],p.skip)continue;let t=p.x,n=p.y,r=t|0;r===m?(ng&&(g=n),u=(d*u+t)/++d):(y(),e.lineTo(t,n),m=r,d=0,h=g=n),_=n}y()}function Xg(e){let t=e.options,n=t.borderDash&&t.borderDash.length;return!e._decimated&&!e._loop&&!t.tension&&t.cubicInterpolationMode!==`monotone`&&!t.stepped&&!n?Yg:Jg}function Zg(e){return e.stepped?dp:e.tension||e.cubicInterpolationMode===`monotone`?fp:up}function Qg(e,t,n,r){let i=t._path;i||(i=t._path=new Path2D,t.path(i,n,r)&&i.closePath()),Wg(e,t.options),e.stroke(i)}function $g(e,t,n,r){let{segments:i,options:a}=t,o=Xg(t);for(let s of i)Wg(e,a,s.style),e.beginPath(),o(e,t,s,{start:n,end:n+r-1})&&e.closePath(),e.stroke()}var e_=typeof Path2D==`function`;function t_(e,t,n,r){e_&&!t.options.segment?Qg(e,t,n,r):$g(e,t,n,r)}var n_=class extends Th{static id=`line`;static defaults={borderCapStyle:`butt`,borderDash:[],borderDashOffset:0,borderJoinStyle:`miter`,borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:`default`,fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:`backgroundColor`,borderColor:`borderColor`};static descriptors={_scriptable:!0,_indexable:e=>e!==`borderDash`&&e!==`fill`};constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,t){let n=this.options;if((n.tension||n.cubicInterpolationMode===`monotone`)&&!n.stepped&&!this._pointsUpdated){let r=n.spanGaps?this._loop:this._fullLoop;qf(this._points,n,e,r,t),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||=Tp(this,this.options.segment)}first(){let e=this.segments,t=this.points;return e.length&&t[e[0].start]}last(){let e=this.segments,t=this.points,n=e.length;return n&&t[e[n-1].end]}interpolate(e,t){let n=this.options,r=e[t],i=this.points,a=Sp(this,{property:t,start:r,end:r});if(!a.length)return;let o=[],s=Zg(n),c,l;for(c=0,l=a.length;ce.replace(`rgb(`,`rgba(`).replace(`)`,`, 0.5)`));function __(e){return h_[e%h_.length]}function v_(e){return g_[e%g_.length]}function y_(e,t){return e.borderColor=__(t),e.backgroundColor=v_(t),++t}function b_(e,t){return e.backgroundColor=e.data.map(()=>__(t++)),t}function x_(e,t){return e.backgroundColor=e.data.map(()=>v_(t++)),t}function S_(e){let t=0;return(n,r)=>{let i=e.getDatasetMeta(r).controller;i instanceof wm?t=b_(n,t):i instanceof Em?t=x_(n,t):i&&(t=y_(n,t))}}function C_(e){let t;for(t in e)if(e[t].borderColor||e[t].backgroundColor)return!0;return!1}function w_(e){return e&&(e.borderColor||e.backgroundColor)}function T_(){return Vd.borderColor!==`rgba(0,0,0,0.1)`||Vd.backgroundColor!==`rgba(0,0,0,0.1)`}var E_={id:`colors`,defaults:{enabled:!0,forceOverride:!1},beforeLayout(e,t,n){if(!n.enabled)return;let{data:{datasets:r},options:i}=e.config,{elements:a}=i,o=C_(r)||w_(i)||a&&C_(a)||T_();if(!n.forceOverride&&o)return;let s=S_(e);r.forEach(s)}};function D_(e,t,n,r,i){let a=i.samples||r;if(a>=n)return e.slice(t,t+n);let o=[],s=(n-2)/(a-2),c=0,l=t+n-1,u=t,d,f,p,m,h;for(o[c++]=e[u],d=0;dp&&(p=m,f=e[a],h=a);o[c++]=f,u=h}return o[c++]=e[l],o}function O_(e,t,n,r){let i=0,a=0,o,s,c,l,u,d,f,p,m,h,g=[],_=t+n-1,v=e[t].x,y=e[_].x-v;for(o=t;oh&&(h=l,f=o),i=(a*i+s.x)/++a;else{let n=o-1;if(!ru(d)&&!ru(f)){let t=Math.min(d,f),r=Math.max(d,f);t!==p&&t!==n&&g.push({...e[t],x:i}),r!==p&&r!==n&&g.push({...e[r],x:i})}o>0&&n!==p&&g.push(e[n]),g.push(s),u=t,a=0,m=h=l,d=f=p=o}}return g}function k_(e){if(e._decimated){let t=e._data;delete e._decimated,delete e._data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function A_(e){e.data.datasets.forEach(e=>{k_(e)})}function j_(e,t){let n=t.length,r=0,i,{iScale:a}=e,{min:o,max:s,minDefined:c,maxDefined:l}=a.getUserBounds();return c&&(r=ed(id(t,a.axis,o).lo,0,n-1)),i=l?ed(id(t,a.axis,s).hi+1,r,n)-r:n-r,{start:r,count:i}}var M_={id:`decimation`,defaults:{algorithm:`min-max`,enabled:!1},beforeElementsUpdate:(e,t,n)=>{if(!n.enabled){A_(e);return}let r=e.width;e.data.datasets.forEach((t,i)=>{let{_data:a,indexAxis:o}=t,s=e.getDatasetMeta(i),c=a||t.data;if(hf([o,e.options.indexAxis])===`y`||!s.controller.supportsDecimation)return;let l=e.scales[s.xAxisID];if(l.type!==`linear`&&l.type!==`time`||e.options.parsing)return;let{start:u,count:d}=j_(s,c);if(d<=(n.threshold||4*r)){k_(t);return}ru(a)&&(t._data=c,delete t.data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(e){this._data=e}}));let f;switch(n.algorithm){case`lttb`:f=D_(c,u,d,r,n);break;case`min-max`:f=O_(c,u,d,r);break;default:throw Error(`Unsupported decimation algorithm '${n.algorithm}'`)}t._decimated=f})},destroy(e){A_(e)}};function N_(e,t,n){let r=e.segments,i=e.points,a=t.points,o=[];for(let e of r){let{start:r,end:s}=e;s=I_(r,s,i);let c=P_(n,i[r],i[s],e.loop);if(!t.segments){o.push({source:e,target:c,start:i[r],end:i[s]});continue}let l=Sp(t,c);for(let t of l){let r=P_(n,a[t.start],a[t.end],t.loop),s=xp(e,i,r);for(let e of s)o.push({source:e,target:t,start:{[n]:L_(c,r,`start`,Math.max)},end:{[n]:L_(c,r,`end`,Math.min)}})}}return o}function P_(e,t,n,r){if(r)return;let i=t[e],a=n[e];return e===`angle`&&(i=Qu(i),a=Qu(a)),{property:e,start:i,end:a}}function F_(e,t){let{x:n=null,y:r=null}=e||{},i=t.points,a=[];return t.segments.forEach(({start:e,end:t})=>{t=I_(e,t,i);let o=i[e],s=i[t];r===null?n!==null&&(a.push({x:n,y:o.y}),a.push({x:n,y:s.y})):(a.push({x:o.x,y:r}),a.push({x:s.x,y:r}))}),a}function I_(e,t,n){for(;t>e;t--){let e=n[t];if(!isNaN(e.x)&&!isNaN(e.y))break}return t}function L_(e,t,n,r){return e&&t?r(e[n],t[n]):e?e[n]:t?t[n]:0}function R_(e,t){let n=[],r=!1;return iu(e)?(r=!0,n=e):n=F_(e,t),n.length?new n_({points:n,options:{tension:0},_loop:r,_fullLoop:r}):null}function z_(e){return e&&e.fill!==!1}function B_(e,t,n){let r=e[t].fill,i=[t],a;if(!n)return r;for(;r!==!1&&i.indexOf(r)===-1;){if(!ou(r))return r;if(a=e[r],!a)return!1;if(a.visible)return r;i.push(r),r=a.fill}return!1}function V_(e,t,n){let r=G_(e);if(au(r))return!isNaN(r.value)&&r;let i=parseFloat(r);return ou(i)&&Math.floor(i)===i?H_(r[0],t,i,n):[`origin`,`start`,`end`,`stack`,`shape`].indexOf(r)>=0&&r}function H_(e,t,n,r){return(e===`-`||e===`+`)&&(n=t+n),n===t||n<0||n>=r?!1:n}function U_(e,t){let n=null;return e===`start`?n=t.bottom:e===`end`?n=t.top:au(e)?n=t.getPixelForValue(e.value):t.getBasePixel&&(n=t.getBasePixel()),n}function W_(e,t,n){let r;return r=e===`start`?n:e===`end`?t.options.reverse?t.min:t.max:au(e)?e.value:t.getBaseValue(),r}function G_(e){let t=e.options,n=t.fill,r=cu(n&&n.target,n);return r===void 0&&(r=!!t.backgroundColor),r===!1||r===null?!1:r===!0?`origin`:r}function K_(e){let{scale:t,index:n,line:r}=e,i=[],a=r.segments,o=r.points,s=q_(t,n);s.push(R_({x:null,y:t.bottom},r));for(let e=0;e=0;--t){let n=i[t].$filler;n&&(n.line.updateControlPoints(a,n.axis),r&&n.fill&&nv(e.ctx,n,a))}},beforeDatasetsDraw(e,t,n){if(n.drawTime!==`beforeDatasetsDraw`)return;let r=e.getSortedVisibleDatasetMetas();for(let t=r.length-1;t>=0;--t){let n=r[t].$filler;z_(n)&&nv(e.ctx,n,e.chartArea)}},beforeDatasetDraw(e,t,n){let r=t.meta.$filler;!z_(r)||n.drawTime!==`beforeDatasetDraw`||nv(e.ctx,r,e.chartArea)},defaults:{propagate:!0,drawTime:`beforeDatasetDraw`}},uv=(e,t)=>{let{boxHeight:n=t,boxWidth:r=t}=e;return e.usePointStyle&&(n=Math.min(n,t),r=e.pointStyleWidth||Math.min(r,t)),{boxWidth:r,boxHeight:n,itemHeight:Math.max(t,n)}},dv=(e,t)=>e!==null&&t!==null&&e.datasetIndex===t.datasetIndex&&e.index===t.index,fv=class extends Th{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t,n){this.maxWidth=e,this.maxHeight=t,this._margins=n,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let e=this.options.labels||{},t=du(e.generateLabels,[this.chart],this)||[];e.filter&&(t=t.filter(t=>e.filter(t,this.chart.data))),e.sort&&(t=t.sort((t,n)=>e.sort(t,n,this.chart.data))),this.options.reverse&&t.reverse(),this.legendItems=t}fit(){let{options:e,ctx:t}=this;if(!e.display){this.width=this.height=0;return}let n=e.labels,r=mf(n.font),i=r.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:s}=uv(n,i),c,l;t.font=r.string,this.isHorizontal()?(c=this.maxWidth,l=this._fitRows(a,i,o,s)+10):(l=this.maxHeight,c=this._fitCols(a,r,o,s)+10),this.width=Math.min(c,e.maxWidth||this.maxWidth),this.height=Math.min(l,e.maxHeight||this.maxHeight)}_fitRows(e,t,n,r){let{ctx:i,maxWidth:a,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],c=this.lineWidths=[0],l=r+o,u=e;i.textAlign=`left`,i.textBaseline=`middle`;let d=-1,f=-l;return this.legendItems.forEach((e,p)=>{let m=n+t/2+i.measureText(e.text).width;(p===0||c[c.length-1]+m+2*o>a)&&(u+=l,c[c.length-(p>0?0:1)]=0,f+=l,d++),s[p]={left:0,top:f,row:d,width:m,height:r},c[c.length-1]+=m+o}),u}_fitCols(e,t,n,r){let{ctx:i,maxHeight:a,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],c=this.columnSizes=[],l=a-e,u=o,d=0,f=0,p=0,m=0;return this.legendItems.forEach((e,a)=>{let{itemWidth:h,itemHeight:g}=pv(n,t,i,e,r);a>0&&f+g+2*o>l&&(u+=d+o,c.push({width:d,height:f}),p+=d+o,m++,d=f=0),s[a]={left:p,top:f,col:m,width:h,height:g},d=Math.max(d,h),f+=g+o}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let e=this._computeTitleHeight(),{legendHitBoxes:t,options:{align:n,labels:{padding:r},rtl:i}}=this,a=hp(i,this.left,this.width);if(this.isHorizontal()){let i=0,o=hd(n,this.left+r,this.right-this.lineWidths[i]);for(let s of t)i!==s.row&&(i=s.row,o=hd(n,this.left+r,this.right-this.lineWidths[i])),s.top+=this.top+e+r,s.left=a.leftForLtr(a.x(o),s.width),o+=s.width+r}else{let i=0,o=hd(n,this.top+e+r,this.bottom-this.columnSizes[i].height);for(let s of t)s.col!==i&&(i=s.col,o=hd(n,this.top+e+r,this.bottom-this.columnSizes[i].height)),s.top=o,s.left+=this.left+r,s.left=a.leftForLtr(a.x(s.left),s.width),o+=s.height+r}}isHorizontal(){return this.options.position===`top`||this.options.position===`bottom`}draw(){if(this.options.display){let e=this.ctx;Xd(e,this),this._draw(),Zd(e)}}_draw(){let{options:e,columnSizes:t,lineWidths:n,ctx:r}=this,{align:i,labels:a}=e,o=Vd.color,s=hp(e.rtl,this.left,this.width),c=mf(a.font),{padding:l}=a,u=c.size,d=u/2,f;this.drawTitle(),r.textAlign=s.textAlign(`left`),r.textBaseline=`middle`,r.lineWidth=.5,r.font=c.string;let{boxWidth:p,boxHeight:m,itemHeight:h}=uv(a,u),g=function(e,t,n){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;r.save();let i=cu(n.lineWidth,1);if(r.fillStyle=cu(n.fillStyle,o),r.lineCap=cu(n.lineCap,`butt`),r.lineDashOffset=cu(n.lineDashOffset,0),r.lineJoin=cu(n.lineJoin,`miter`),r.lineWidth=i,r.strokeStyle=cu(n.strokeStyle,o),r.setLineDash(cu(n.lineDash,[])),a.usePointStyle){let o={radius:m*Math.SQRT2/2,pointStyle:n.pointStyle,rotation:n.rotation,borderWidth:i},c=s.xPlus(e,p/2),l=t+d;Jd(r,o,c,l,a.pointStyleWidth&&p)}else{let a=t+Math.max((u-m)/2,0),o=s.leftForLtr(e,p),c=ff(n.borderRadius);r.beginPath(),Object.values(c).some(e=>e!==0)?af(r,{x:o,y:a,w:p,h:m,radius:c}):r.rect(o,a,p,m),r.fill(),i!==0&&r.stroke()}r.restore()},_=function(e,t,n){rf(r,n.text,e,t+h/2,c,{strikethrough:n.hidden,textAlign:s.textAlign(n.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();f=v?{x:hd(i,this.left+l,this.right-n[0]),y:this.top+l+y,line:0}:{x:this.left+l,y:hd(i,this.top+y+l,this.bottom-t[0].height),line:0},gp(this.ctx,e.textDirection);let b=h+l;this.legendItems.forEach((o,u)=>{r.strokeStyle=o.fontColor,r.fillStyle=o.fontColor;let m=r.measureText(o.text).width,h=s.textAlign(o.textAlign||=a.textAlign),x=p+d+m,S=f.x,C=f.y;s.setWidth(this.width),v?u>0&&S+x+l>this.right&&(C=f.y+=b,f.line++,S=f.x=hd(i,this.left+l,this.right-n[f.line])):u>0&&C+b>this.bottom&&(S=f.x=S+t[f.line].width+l,f.line++,C=f.y=hd(i,this.top+y+l,this.bottom-t[f.line].height));let w=s.x(S);if(g(w,C,o),S=gd(h,S+p+d,v?S+x:this.right,e.rtl),_(s.x(S),C,o),v)f.x+=x+l;else if(typeof o.text!=`string`){let e=c.lineHeight;f.y+=gv(o,e)+l}else f.y+=b}),_p(this.ctx,e.textDirection)}drawTitle(){let e=this.options,t=e.title,n=mf(t.font),r=pf(t.padding);if(!t.display)return;let i=hp(e.rtl,this.left,this.width),a=this.ctx,o=t.position,s=n.size/2,c=r.top+s,l,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),l=this.top+c,u=hd(e.align,u,this.right-d);else{let t=this.columnSizes.reduce((e,t)=>Math.max(e,t.height),0);l=c+hd(e.align,this.top,this.bottom-t-e.labels.padding-this._computeTitleHeight())}let f=hd(o,u,u+d);a.textAlign=i.textAlign(md(o)),a.textBaseline=`middle`,a.strokeStyle=t.color,a.fillStyle=t.color,a.font=n.string,rf(a,t.text,f,l,n)}_computeTitleHeight(){let e=this.options.title,t=mf(e.font),n=pf(e.padding);return e.display?t.lineHeight+n.height:0}_getLegendItemAt(e,t){let n,r,i;if(nd(e,this.left,this.right)&&nd(t,this.top,this.bottom)){for(i=this.legendHitBoxes,n=0;ne.length>t.length?e:t)),t+n.size/2+r.measureText(i).width}function hv(e,t,n){let r=e;return typeof t.text!=`string`&&(r=gv(t,n)),r}function gv(e,t){return t*(e.text?e.text.length:0)}function _v(e,t){return!!((e===`mousemove`||e===`mouseout`)&&(t.onHover||t.onLeave)||t.onClick&&(e===`click`||e===`mouseup`))}var vv={id:`legend`,_element:fv,start(e,t,n){let r=e.legend=new fv({ctx:e.ctx,options:n,chart:e});th.configure(e,r,n),th.addBox(e,r)},stop(e){th.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,n){let r=e.legend;th.configure(e,r,n),r.options=n},afterUpdate(e){let t=e.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(e,t){t.replay||e.legend.handleEvent(t.event)},defaults:{display:!0,position:`top`,align:`center`,fullSize:!0,reverse:!1,weight:1e3,onClick(e,t,n){let r=t.datasetIndex,i=n.chart;i.isDatasetVisible(r)?(i.hide(r),t.hidden=!0):(i.show(r),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:e=>e.chart.options.color,boxWidth:40,padding:10,generateLabels(e){let t=e.data.datasets,{labels:{usePointStyle:n,pointStyle:r,textAlign:i,color:a,useBorderRadius:o,borderRadius:s}}=e.legend.options;return e._getSortedDatasetMetas().map(e=>{let c=e.controller.getStyle(n?0:void 0),l=pf(c.borderWidth);return{text:t[e.index].label,fillStyle:c.backgroundColor,fontColor:a,hidden:!e.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:c.borderColor,pointStyle:r||c.pointStyle,rotation:c.rotation,textAlign:i||c.textAlign,borderRadius:o&&(s||c.borderRadius),datasetIndex:e.index}},this)}},title:{color:e=>e.chart.options.color,display:!1,position:`center`,text:``}},descriptors:{_scriptable:e=>!e.startsWith(`on`),labels:{_scriptable:e=>![`generateLabels`,`filter`,`sort`].includes(e)}}},yv=class extends Th{constructor(e){super(),this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t){let n=this.options;if(this.left=0,this.top=0,!n.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=e,this.height=this.bottom=t;let r=iu(n.text)?n.text.length:1;this._padding=pf(n.padding);let i=r*mf(n.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=i:this.width=i}isHorizontal(){let e=this.options.position;return e===`top`||e===`bottom`}_drawArgs(e){let{top:t,left:n,bottom:r,right:i,options:a}=this,o=a.align,s=0,c,l,u;return this.isHorizontal()?(l=hd(o,n,i),u=t+e,c=i-n):(a.position===`left`?(l=n+e,u=hd(o,r,t),s=ku*-.5):(l=i-e,u=hd(o,t,r),s=ku*.5),c=r-t),{titleX:l,titleY:u,maxWidth:c,rotation:s}}draw(){let e=this.ctx,t=this.options;if(!t.display)return;let n=mf(t.font),r=n.lineHeight/2+this._padding.top,{titleX:i,titleY:a,maxWidth:o,rotation:s}=this._drawArgs(r);rf(e,t.text,0,0,n,{color:t.color,maxWidth:o,rotation:s,textAlign:md(t.align),textBaseline:`middle`,translation:[i,a]})}};function bv(e,t){let n=new yv({ctx:e.ctx,options:t,chart:e});th.configure(e,n,t),th.addBox(e,n),e.titleBlock=n}var xv={id:`title`,_element:yv,start(e,t,n){bv(e,n)},stop(e){let t=e.titleBlock;th.removeBox(e,t),delete e.titleBlock},beforeUpdate(e,t,n){let r=e.titleBlock;th.configure(e,r,n),r.options=n},defaults:{align:`center`,display:!1,font:{weight:`bold`},fullSize:!0,padding:10,position:`top`,text:``,weight:2e3},defaultRoutes:{color:`color`},descriptors:{_scriptable:!0,_indexable:!1}},Sv=new WeakMap,Cv={id:`subtitle`,start(e,t,n){let r=new yv({ctx:e.ctx,options:n,chart:e});th.configure(e,r,n),th.addBox(e,r),Sv.set(e,r)},stop(e){th.removeBox(e,Sv.get(e)),Sv.delete(e)},beforeUpdate(e,t,n){let r=Sv.get(e);th.configure(e,r,n),r.options=n},defaults:{align:`center`,display:!1,font:{weight:`normal`},fullSize:!0,padding:0,position:`top`,text:``,weight:1500},defaultRoutes:{color:`color`},descriptors:{_scriptable:!0,_indexable:!1}},wv={average(e){if(!e.length)return!1;let t,n,r=new Set,i=0,a=0;for(t=0,n=e.length;te+t)/r.size,y:i/a}},nearest(e,t){if(!e.length)return!1;let n=t.x,r=t.y,i=1/0,a,o,s;for(a=0,o=e.length;a-1?e.split(` +`):e}function Dv(e,t){let{element:n,datasetIndex:r,index:i}=t,a=e.getDatasetMeta(r).controller,{label:o,value:s}=a.getLabelAndValue(i);return{chart:e,label:o,parsed:a.getParsed(i),raw:e.data.datasets[r].data[i],formattedValue:s,dataset:a.getDataset(),dataIndex:i,datasetIndex:r,element:n}}function Ov(e,t){let n=e.chart.ctx,{body:r,footer:i,title:a}=e,{boxWidth:o,boxHeight:s}=t,c=mf(t.bodyFont),l=mf(t.titleFont),u=mf(t.footerFont),d=a.length,f=i.length,p=r.length,m=pf(t.padding),h=m.height,g=0,_=r.reduce((e,t)=>e+t.before.length+t.lines.length+t.after.length,0);if(_+=e.beforeBody.length+e.afterBody.length,d&&(h+=d*l.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),_){let e=t.displayColors?Math.max(s,c.lineHeight):c.lineHeight;h+=p*e+(_-p)*c.lineHeight+(_-1)*t.bodySpacing}f&&(h+=t.footerMarginTop+f*u.lineHeight+(f-1)*t.footerSpacing);let v=0,y=function(e){g=Math.max(g,n.measureText(e).width+v)};return n.save(),n.font=l.string,fu(e.title,y),n.font=c.string,fu(e.beforeBody.concat(e.afterBody),y),v=t.displayColors?o+2+t.boxPadding:0,fu(r,e=>{fu(e.before,y),fu(e.lines,y),fu(e.after,y)}),v=0,n.font=u.string,fu(e.footer,y),n.restore(),g+=m.width,{width:g,height:h}}function kv(e,t){let{y:n,height:r}=t;return ne.height-r/2?`bottom`:`center`}function Av(e,t,n,r){let{x:i,width:a}=r,o=n.caretSize+n.caretPadding;if(e===`left`&&i+a+o>t.width||e===`right`&&i-a-o<0)return!0}function jv(e,t,n,r){let{x:i,width:a}=n,{width:o,chartArea:{left:s,right:c}}=e,l=`center`;return r===`center`?l=i<=(s+c)/2?`left`:`right`:i<=a/2?l=`left`:i>=o-a/2&&(l=`right`),Av(l,e,t,n)&&(l=`center`),l}function Mv(e,t,n){let r=n.yAlign||t.yAlign||kv(e,n);return{xAlign:n.xAlign||t.xAlign||jv(e,t,n,r),yAlign:r}}function Nv(e,t){let{x:n,width:r}=e;return t===`right`?n-=r:t===`center`&&(n-=r/2),n}function Pv(e,t,n){let{y:r,height:i}=e;return t===`top`?r+=n:t===`bottom`?r-=i+n:r-=i/2,r}function Fv(e,t,n,r){let{caretSize:i,caretPadding:a,cornerRadius:o}=e,{xAlign:s,yAlign:c}=n,l=i+a,{topLeft:u,topRight:d,bottomLeft:f,bottomRight:p}=ff(o),m=Nv(t,s),h=Pv(t,c,l);return c===`center`?s===`left`?m+=l:s===`right`&&(m-=l):s===`left`?m-=Math.max(u,f)+i:s===`right`&&(m+=Math.max(d,p)+i),{x:ed(m,0,r.width-t.width),y:ed(h,0,r.height-t.height)}}function Iv(e,t,n){let r=pf(n.padding);return t===`center`?e.x+e.width/2:t===`right`?e.x+e.width-r.right:e.x+r.left}function Lv(e){return Tv([],Ev(e))}function Rv(e,t,n){return _f(e,{tooltip:t,tooltipItems:n,type:`tooltip`})}function zv(e,t){let n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}var Bv={beforeTitle:tu,title(e){if(e.length>0){let t=e[0],n=t.chart.data.labels,r=n?n.length:0;if(this&&this.options&&this.options.mode===`dataset`)return t.dataset.label||``;if(t.label)return t.label;if(r>0&&t.dataIndex{let t={before:[],lines:[],after:[]},i=zv(n,e);Tv(t.before,Ev(Vv(i,`beforeLabel`,this,e))),Tv(t.lines,Vv(i,`label`,this,e)),Tv(t.after,Ev(Vv(i,`afterLabel`,this,e))),r.push(t)}),r}getAfterBody(e,t){return Lv(Vv(t.callbacks,`afterBody`,this,e))}getFooter(e,t){let{callbacks:n}=t,r=Vv(n,`beforeFooter`,this,e),i=Vv(n,`footer`,this,e),a=Vv(n,`afterFooter`,this,e),o=[];return o=Tv(o,Ev(r)),o=Tv(o,Ev(i)),o=Tv(o,Ev(a)),o}_createItems(e){let t=this._active,n=this.chart.data,r=[],i=[],a=[],o=[],s,c;for(s=0,c=t.length;se.filter(t,r,i,n))),e.itemSort&&(o=o.sort((t,r)=>e.itemSort(t,r,n))),fu(o,t=>{let n=zv(e.callbacks,t);r.push(Vv(n,`labelColor`,this,t)),i.push(Vv(n,`labelPointStyle`,this,t)),a.push(Vv(n,`labelTextColor`,this,t))}),this.labelColors=r,this.labelPointStyles=i,this.labelTextColors=a,this.dataPoints=o,o}update(e,t){let n=this.options.setContext(this.getContext()),r=this._active,i,a=[];if(!r.length)this.opacity!==0&&(i={opacity:0});else{let e=wv[n.position].call(this,r,this._eventPosition);a=this._createItems(n),this.title=this.getTitle(a,n),this.beforeBody=this.getBeforeBody(a,n),this.body=this.getBody(a,n),this.afterBody=this.getAfterBody(a,n),this.footer=this.getFooter(a,n);let t=this._size=Ov(this,n),o=Object.assign({},e,t),s=Mv(this.chart,n,o),c=Fv(n,o,s,this.chart);this.xAlign=s.xAlign,this.yAlign=s.yAlign,i={opacity:1,x:c.x,y:c.y,width:t.width,height:t.height,caretX:e.x,caretY:e.y}}this._tooltipItems=a,this.$context=void 0,i&&this._resolveAnimations().update(this,i),e&&n.external&&n.external.call(this,{chart:this.chart,tooltip:this,replay:t})}drawCaret(e,t,n,r){let i=this.getCaretPosition(e,n,r);t.lineTo(i.x1,i.y1),t.lineTo(i.x2,i.y2),t.lineTo(i.x3,i.y3)}getCaretPosition(e,t,n){let{xAlign:r,yAlign:i}=this,{caretSize:a,cornerRadius:o}=n,{topLeft:s,topRight:c,bottomLeft:l,bottomRight:u}=ff(o),{x:d,y:f}=e,{width:p,height:m}=t,h,g,_,v,y,b;return i===`center`?(y=f+m/2,r===`left`?(h=d,g=h-a,v=y+a,b=y-a):(h=d+p,g=h+a,v=y-a,b=y+a),_=h):(g=r===`left`?d+Math.max(s,l)+a:r===`right`?d+p-Math.max(c,u)-a:this.caretX,i===`top`?(v=f,y=v-a,h=g-a,_=g+a):(v=f+m,y=v+a,h=g+a,_=g-a),b=v),{x1:h,x2:g,x3:_,y1:v,y2:y,y3:b}}drawTitle(e,t,n){let r=this.title,i=r.length,a,o,s;if(i){let c=hp(n.rtl,this.x,this.width);for(e.x=Iv(this,n.titleAlign,n),t.textAlign=c.textAlign(n.titleAlign),t.textBaseline=`middle`,a=mf(n.titleFont),o=n.titleSpacing,t.fillStyle=n.titleColor,t.font=a.string,s=0;se!==0)?(e.beginPath(),e.fillStyle=i.multiKeyBackground,af(e,{x:t,y:p,w:c,h:s,radius:o}),e.fill(),e.stroke(),e.fillStyle=a.backgroundColor,e.beginPath(),af(e,{x:n,y:p+1,w:c-2,h:s-2,radius:o}),e.fill()):(e.fillStyle=i.multiKeyBackground,e.fillRect(t,p,c,s),e.strokeRect(t,p,c,s),e.fillStyle=a.backgroundColor,e.fillRect(n,p+1,c-2,s-2))}e.fillStyle=this.labelTextColors[n]}drawBody(e,t,n){let{body:r}=this,{bodySpacing:i,bodyAlign:a,displayColors:o,boxHeight:s,boxWidth:c,boxPadding:l}=n,u=mf(n.bodyFont),d=u.lineHeight,f=0,p=hp(n.rtl,this.x,this.width),m=function(n){t.fillText(n,p.x(e.x+f),e.y+d/2),e.y+=d+i},h=p.textAlign(a),g,_,v,y,b,x,S;for(t.textAlign=a,t.textBaseline=`middle`,t.font=u.string,e.x=Iv(this,h,n),t.fillStyle=n.bodyColor,fu(this.beforeBody,m),f=o&&h!==`right`?a===`center`?c/2+l:c+2+l:0,y=0,x=r.length;y0&&t.stroke()}_updateAnimationTarget(e){let t=this.chart,n=this.$animations,r=n&&n.x,i=n&&n.y;if(r||i){let n=wv[e.position].call(this,this._active,this._eventPosition);if(!n)return;let a=this._size=Ov(this,e),o=Object.assign({},n,this._size),s=Mv(t,e,o),c=Fv(e,o,s,t);(r._to!==c.x||i._to!==c.y)&&(this.xAlign=s.xAlign,this.yAlign=s.yAlign,this.width=a.width,this.height=a.height,this.caretX=n.x,this.caretY=n.y,this._resolveAnimations().update(this,c))}}_willRender(){return!!this.opacity}draw(e){let t=this.options.setContext(this.getContext()),n=this.opacity;if(!n)return;this._updateAnimationTarget(t);let r={width:this.width,height:this.height},i={x:this.x,y:this.y};n=Math.abs(n)<.001?0:n;let a=pf(t.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;t.enabled&&o&&(e.save(),e.globalAlpha=n,this.drawBackground(i,e,r,t),gp(e,t.textDirection),i.y+=a.top,this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),_p(e,t.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,t){let n=this._active,r=e.map(({datasetIndex:e,index:t})=>{let n=this.chart.getDatasetMeta(e);if(!n)throw Error(`Cannot find a dataset at index `+e);return{datasetIndex:e,element:n.data[t],index:t}}),i=!pu(n,r),a=this._positionChanged(r,t);(i||a)&&(this._active=r,this._eventPosition=t,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,t,n=!0){if(t&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let r=this.options,i=this._active||[],a=this._getActiveElements(e,i,t,n),o=this._positionChanged(a,e),s=t||!pu(a,i)||o;return s&&(this._active=a,(r.enabled||r.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,t))),s}_getActiveElements(e,t,n,r){let i=this.options;if(e.type===`mouseout`)return[];if(!r)return t.filter(e=>this.chart.data.datasets[e.datasetIndex]&&this.chart.getDatasetMeta(e.datasetIndex).controller.getParsed(e.index)!==void 0);let a=this.chart.getElementsAtEventForMode(e,i.mode,i,n);return i.reverse&&a.reverse(),a}_positionChanged(e,t){let{caretX:n,caretY:r,options:i}=this,a=wv[i.position].call(this,e,t);return a!==!1&&(n!==a.x||r!==a.y)}},Uv=Object.freeze({__proto__:null,Colors:E_,Decimation:M_,Filler:lv,Legend:vv,SubTitle:Cv,Title:xv,Tooltip:{id:`tooltip`,_element:Hv,positioners:wv,afterInit(e,t,n){n&&(e.tooltip=new Hv({chart:e,options:n}))},beforeUpdate(e,t,n){e.tooltip&&e.tooltip.initialize(n)},reset(e,t,n){e.tooltip&&e.tooltip.initialize(n)},afterDraw(e){let t=e.tooltip;if(t&&t._willRender()){let n={tooltip:t};if(e.notifyPlugins(`beforeTooltipDraw`,{...n,cancelable:!0})===!1)return;t.draw(e.ctx),e.notifyPlugins(`afterTooltipDraw`,n)}},afterEvent(e,t){if(e.tooltip){let n=t.replay;e.tooltip.handleEvent(t.event,n,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:`average`,backgroundColor:`rgba(0,0,0,0.8)`,titleColor:`#fff`,titleFont:{weight:`bold`},titleSpacing:2,titleMarginBottom:6,titleAlign:`left`,bodyColor:`#fff`,bodySpacing:2,bodyFont:{},bodyAlign:`left`,footerColor:`#fff`,footerSpacing:2,footerMarginTop:6,footerFont:{weight:`bold`},footerAlign:`left`,padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,t)=>t.bodyFont.size,boxWidth:(e,t)=>t.bodyFont.size,multiKeyBackground:`#fff`,displayColors:!0,boxPadding:0,borderColor:`rgba(0,0,0,0)`,borderWidth:0,animation:{duration:400,easing:`easeOutQuart`},animations:{numbers:{type:`number`,properties:[`x`,`y`,`width`,`height`,`caretX`,`caretY`]},opacity:{easing:`linear`,duration:200}},callbacks:Bv},defaultRoutes:{bodyFont:`font`,footerFont:`font`,titleFont:`font`},descriptors:{_scriptable:e=>e!==`filter`&&e!==`itemSort`&&e!==`external`,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:`animation`}},additionalOptionScopes:[`interaction`]}}),Wv=(e,t,n,r)=>(typeof t==`string`?(n=e.push(t)-1,r.unshift({index:n,label:t})):isNaN(t)&&(n=null),n);function Gv(e,t,n,r){let i=e.indexOf(t);return i===-1?Wv(e,t,n,r):i===e.lastIndexOf(t)?i:n}var Kv=(e,t)=>e===null?null:ed(Math.round(e),0,t);function qv(e){let t=this.getLabels();return e>=0&&et.length-1?null:this.getPixelForValue(t[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}};function Yv(e,t){let n=[],{bounds:r,step:i,min:a,max:o,precision:s,count:c,maxTicks:l,maxDigits:u,includeBounds:d}=e,f=i||1,p=l-1,{min:m,max:h}=t,g=!ru(a),_=!ru(o),v=!ru(c),y=(h-m)/(u+1),b=Bu((h-m)/p/f)*f,x,S,C,w;if(b<1e-14&&!g&&!_)return[{value:m},{value:h}];w=Math.ceil(h/b)-Math.floor(m/b),w>p&&(b=Bu(w*b/p/f)*f),ru(s)||(x=10**s,b=Math.ceil(b*x)/x),r===`ticks`?(S=Math.floor(m/b)*b,C=Math.ceil(h/b)*b):(S=m,C=h),g&&_&&i&&Wu((o-a)/i,b/1e3)?(w=Math.round(Math.min((o-a)/b,l)),b=(o-a)/w,S=a,C=o):v?(S=g?a:S,C=_?o:C,w=c-1,b=(C-S)/w):(w=(C-S)/b,w=zu(w,Math.round(w),b/1e3)?Math.round(w):Math.ceil(w));let T=Math.max(Ju(b),Ju(S));x=10**(ru(s)?T:s),S=Math.round(S*x)/x,C=Math.round(C*x)/x;let ee=0;for(g&&(d&&S!==a?(n.push({value:a}),So)break;n.push({value:e})}return _&&d&&C!==o?n.length&&zu(n[n.length-1].value,o,Xv(o,y,e))?n[n.length-1].value=o:n.push({value:o}):(!_||C===o)&&n.push({value:C}),n}function Xv(e,t,{horizontal:n,minRotation:r}){let i=Ku(r),a=(n?Math.sin(i):Math.cos(i))||.001,o=.75*t*(``+e).length;return Math.min(t/a,o)}var Zv=class extends Gh{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,t){return ru(e)||(typeof e==`number`||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){let{beginAtZero:e}=this.options,{minDefined:t,maxDefined:n}=this.getUserBounds(),{min:r,max:i}=this,a=e=>r=t?r:e,o=e=>i=n?i:e;if(e){let e=Ru(r),t=Ru(i);e<0&&t<0?o(0):e>0&&t>0&&a(0)}if(r===i){let t=i===0?1:Math.abs(i*.05);o(i+t),e||a(r-t)}this.min=r,this.max=i}getTickLimit(){let{maxTicksLimit:e,stepSize:t}=this.options.ticks,n;return t?(n=Math.ceil(this.max/t)-Math.floor(this.min/t)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${t} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e||=11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return 1/0}buildTicks(){let e=this.options,t=e.ticks,n=this.getTickLimit();n=Math.max(2,n);let r=Yv({maxTicks:n,bounds:e.bounds,min:e.min,max:e.max,precision:t.precision,step:t.stepSize,count:t.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:t.minRotation||0,includeBounds:t.includeBounds!==!1},this._range||this);return e.bounds===`ticks`&&Gu(r,this,`value`),e.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){let e=this.ticks,t=this.min,n=this.max;if(super.configure(),this.options.offset&&e.length){let r=(n-t)/Math.max(e.length-1,1)/2;t-=r,n+=r}this._startValue=t,this._endValue=n,this._valueRange=n-t}getLabelForValue(e){return Md(e,this.chart.options.locale,this.options.ticks.format)}},Qv=class extends Zv{static id=`linear`;static defaults={ticks:{callback:Fd.formatters.numeric}};determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=ou(e)?e:0,this.max=ou(t)?t:1,this.handleTickRangeOptions()}computeTickLimit(){let e=this.isHorizontal(),t=e?this.width:this.height,n=Ku(this.options.ticks.minRotation),r=(e?Math.sin(n):Math.cos(n))||.001,i=this._resolveTickFontOptions(0);return Math.ceil(t/Math.min(40,i.lineHeight/r))}getPixelForValue(e){return e===null?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}},$v=e=>Math.floor(Lu(e)),ey=(e,t)=>10**($v(e)+t);function ty(e){return e/10**$v(e)==1}function ny(e,t,n){let r=10**n,i=Math.floor(e/r);return Math.ceil(t/r)-i}function ry(e,t){let n=$v(t-e);for(;ny(e,t,n)>10;)n++;for(;ny(e,t,n)<10;)n--;return Math.min(n,$v(e))}function iy(e,{min:t,max:n}){t=su(e.min,t);let r=[],i=$v(t),a=ry(t,n),o=a<0?10**Math.abs(a):1,s=10**a,c=i>a?10**i:0,l=Math.round((t-c)*o)/o,u=Math.floor((t-c)/s/10)*s*10,d=Math.floor((l-u)/10**a),f=su(e.min,Math.round((c+u+d*10**a)*o)/o);for(;f=10?d=d<15?15:20:d++,d>=20&&(a++,d=2,o=a>=0?1:o),f=Math.round((c+u+d*10**a)*o)/o;let p=su(e.max,f);return r.push({value:p,major:ty(p),significand:d}),r}var ay=class extends Gh{static id=`logarithmic`;static defaults={ticks:{callback:Fd.formatters.logarithmic,major:{enabled:!0}}};constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,t){let n=Zv.prototype.parse.apply(this,[e,t]);if(n===0){this._zero=!0;return}return ou(n)&&n>0?n:null}determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=ou(e)?Math.max(0,e):null,this.max=ou(t)?Math.max(0,t):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!ou(this._userMin)&&(this.min=e===ey(this.min,0)?ey(this.min,-1):ey(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:e,maxDefined:t}=this.getUserBounds(),n=this.min,r=this.max,i=t=>n=e?n:t,a=e=>r=t?r:e;n===r&&(n<=0?(i(1),a(10)):(i(ey(n,-1)),a(ey(r,1)))),n<=0&&i(ey(r,-1)),r<=0&&a(ey(n,1)),this.min=n,this.max=r}buildTicks(){let e=this.options,t=iy({min:this._userMin,max:this._userMax},this);return e.bounds===`ticks`&&Gu(t,this,`value`),e.reverse?(t.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),t}getLabelForValue(e){return e===void 0?`0`:Md(e,this.chart.options.locale,this.options.ticks.format)}configure(){let e=this.min;super.configure(),this._startValue=Lu(e),this._valueRange=Lu(this.max)-Lu(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(Lu(e)-this._startValue)/this._valueRange)}getValueForPixel(e){let t=this.getDecimalForPixel(e);return 10**(this._startValue+t*this._valueRange)}};function oy(e){let t=e.ticks;if(t.display&&e.display){let e=pf(t.backdropPadding);return cu(t.font&&t.font.size,Vd.font.size)+e.height}return 0}function sy(e,t,n){return n=iu(n)?n:[n],{w:Wd(e,t.string,n),h:n.length*t.lineHeight}}function cy(e,t,n,r,i){return e===r||e===i?{start:t-n/2,end:t+n/2}:ei?{start:t-n,end:t}:{start:t,end:t+n}}function ly(e){let t={l:e.left+e._padding.left,r:e.right-e._padding.right,t:e.top+e._padding.top,b:e.bottom-e._padding.bottom},n=Object.assign({},t),r=[],i=[],a=e._pointLabels.length,o=e.options.pointLabels,s=o.centerPointLabels?ku/a:0;for(let c=0;ct.r&&(s=(r.end-t.r)/a,e.r=Math.max(e.r,t.r+s)),i.startt.b&&(c=(i.end-t.b)/o,e.b=Math.max(e.b,t.b+c))}function dy(e,t,n){let r=e.drawingArea,{extra:i,additionalAngle:a,padding:o,size:s}=n,c=e.getPointPosition(t,r+i+o,a),l=Math.round(qu(Qu(c.angle+Pu))),u=gy(c.y,s.h,l),d=my(l),f=hy(c.x,s.w,d);return{visible:!0,x:c.x,y:u,textAlign:d,left:f,top:u,right:f+s.w,bottom:u+s.h}}function fy(e,t){if(!t)return!0;let{left:n,top:r,right:i,bottom:a}=e;return!(Yd({x:n,y:r},t)||Yd({x:n,y:a},t)||Yd({x:i,y:r},t)||Yd({x:i,y:a},t))}function py(e,t,n){let r=[],i=e._pointLabels.length,a=e.options,{centerPointLabels:o,display:s}=a.pointLabels,c={extra:oy(a)/2,additionalAngle:o?ku/i:0},l;for(let a=0;a270||n<90)&&(e-=t),e}function _y(e,t,n){let{left:r,top:i,right:a,bottom:o}=n,{backdropColor:s}=t;if(!ru(s)){let n=ff(t.borderRadius),c=pf(t.backdropPadding);e.fillStyle=s;let l=r-c.left,u=i-c.top,d=a-r+c.width,f=o-i+c.height;Object.values(n).some(e=>e!==0)?(e.beginPath(),af(e,{x:l,y:u,w:d,h:f,radius:n}),e.fill()):e.fillRect(l,u,d,f)}}function vy(e,t){let{ctx:n,options:{pointLabels:r}}=e;for(let i=t-1;i>=0;i--){let t=e._pointLabelItems[i];if(!t.visible)continue;let a=r.setContext(e.getPointLabelContext(i));_y(n,a,t);let o=mf(a.font),{x:s,y:c,textAlign:l}=t;rf(n,e._pointLabels[i],s,c+o.lineHeight/2,o,{color:a.color,textAlign:l,textBaseline:`middle`})}}function yy(e,t,n,r){let{ctx:i}=e;if(n)i.arc(e.xCenter,e.yCenter,t,0,Au);else{let n=e.getPointPosition(0,t);i.moveTo(n.x,n.y);for(let a=1;a{let n=du(this.options.pointLabels.callback,[e,t],this);return n||n===0?n:``}).filter((e,t)=>this.chart.getDataVisibility(t))}fit(){let e=this.options;e.display&&e.pointLabels.display?ly(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,t,n,r){this.xCenter+=Math.floor((e-t)/2),this.yCenter+=Math.floor((n-r)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,t,n,r))}getIndexAngle(e){let t=Au/(this._pointLabels.length||1),n=this.options.startAngle||0;return Qu(e*t+Ku(n))}getDistanceFromCenterForValue(e){if(ru(e))return NaN;let t=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*t:(e-this.min)*t}getValueForDistanceFromCenter(e){if(ru(e))return NaN;let t=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-t:this.min+t}getPointLabelContext(e){let t=this._pointLabels||[];if(e>=0&&e{if(t!==0||t===0&&this.min<0){s=this.getDistanceFromCenterForValue(e.value);let n=this.getContext(t),o=r.setContext(n),c=i.setContext(n);by(this,o,s,a,c)}}),n.display){for(e.save(),o=a-1;o>=0;o--){let r=n.setContext(this.getPointLabelContext(o)),{color:i,lineWidth:a}=r;!a||!i||(e.lineWidth=a,e.strokeStyle=i,e.setLineDash(r.borderDash),e.lineDashOffset=r.borderDashOffset,s=this.getDistanceFromCenterForValue(t.reverse?this.min:this.max),c=this.getPointPosition(o,s),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(c.x,c.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){let e=this.ctx,t=this.options,n=t.ticks;if(!n.display)return;let r=this.getIndexAngle(0),i,a;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(r),e.textAlign=`center`,e.textBaseline=`middle`,this.ticks.forEach((r,o)=>{if(o===0&&this.min>=0&&!t.reverse)return;let s=n.setContext(this.getContext(o)),c=mf(s.font);if(i=this.getDistanceFromCenterForValue(this.ticks[o].value),s.showLabelBackdrop){e.font=c.string,a=e.measureText(r.label).width,e.fillStyle=s.backdropColor;let t=pf(s.backdropPadding);e.fillRect(-a/2-t.left,-i-c.size/2-t.top,a+t.width,c.size+t.height)}rf(e,r.label,0,-i,c,{color:s.color,strokeColor:s.textStrokeColor,strokeWidth:s.textStrokeWidth})}),e.restore()}drawTitle(){}},Cy={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},wy=Object.keys(Cy);function Ty(e,t){return e-t}function Ey(e,t){if(ru(t))return null;let n=e._adapter,{parser:r,round:i,isoWeekday:a}=e._parseOpts,o=t;return typeof r==`function`&&(o=r(o)),ou(o)||(o=typeof r==`string`?n.parse(o,r):n.parse(o)),o===null?null:(i&&(o=i===`week`&&(Uu(a)||a===!0)?n.startOf(o,`isoWeek`,a):n.startOf(o,i)),+o)}function Dy(e,t,n,r){let i=wy.length;for(let a=wy.indexOf(e);a=wy.indexOf(n);a--){let n=wy[a];if(Cy[n].common&&e._adapter.diff(i,r,n)>=t-1)return n}return wy[n?wy.indexOf(n):0]}function ky(e){for(let t=wy.indexOf(e)+1,n=wy.length;t=t?n[r]:n[i];e[a]=!0}}function jy(e,t,n,r){let i=e._adapter,a=+i.startOf(t[0].value,r),o=t[t.length-1].value,s,c;for(s=a;s<=o;s=+i.add(s,1,r))c=n[s],c>=0&&(t[c].major=!0);return t}function My(e,t,n){let r=[],i={},a=t.length,o,s;for(o=0;o+e.value))}initOffsets(e=[]){let t=0,n=0,r,i;this.options.offset&&e.length&&(r=this.getDecimalForValue(e[0]),t=e.length===1?1-r:(this.getDecimalForValue(e[1])-r)/2,i=this.getDecimalForValue(e[e.length-1]),n=e.length===1?i:(i-this.getDecimalForValue(e[e.length-2]))/2);let a=e.length<3?.5:.25;t=ed(t,0,a),n=ed(n,0,a),this._offsets={start:t,end:n,factor:1/(t+1+n)}}_generate(){let e=this._adapter,t=this.min,n=this.max,r=this.options,i=r.time,a=i.unit||Dy(i.minUnit,t,n,this._getLabelCapacity(t)),o=cu(r.ticks.stepSize,1),s=a===`week`&&i.isoWeekday,c=Uu(s)||s===!0,l={},u=t,d,f;if(c&&(u=+e.startOf(u,`isoWeek`,s)),u=+e.startOf(u,c?`day`:a),e.diff(n,t,a)>1e5*o)throw Error(t+` and `+n+` are too far apart with stepSize of `+o+` `+a);let p=r.ticks.source===`data`&&this.getDataTimestamps();for(d=u,f=0;d+e)}getLabelForValue(e){let t=this._adapter,n=this.options.time;return n.tooltipFormat?t.format(e,n.tooltipFormat):t.format(e,n.displayFormats.datetime)}format(e,t){let n=this.options.time.displayFormats,r=this._unit,i=t||n[r];return this._adapter.format(e,i)}_tickFormatFunction(e,t,n,r){let i=this.options,a=i.ticks.callback;if(a)return du(a,[e,t,n],this);let o=i.time.displayFormats,s=this._unit,c=this._majorUnit,l=s&&o[s],u=c&&o[c],d=n[t],f=c&&u&&d&&d.major;return this._adapter.format(e,r||(f?u:l))}generateTickLabels(e){let t,n,r;for(t=0,n=e.length;t0?o:1}getDataTimestamps(){let e=this._cache.data||[],t,n;if(e.length)return e;let r=this.getMatchingVisibleMetas();if(this._normalized&&r.length)return this._cache.data=r[0].controller.getAllParsedValues(this);for(t=0,n=r.length;t=e[r].pos&&t<=e[i].pos&&({lo:r,hi:i}=id(e,`pos`,t)),{pos:a,time:s}=e[r],{pos:o,time:c}=e[i]):(t>=e[r].time&&t<=e[i].time&&({lo:r,hi:i}=id(e,`time`,t)),{time:a,pos:s}=e[r],{time:o,pos:c}=e[i]);let l=o-a;return l?s+(c-s)*(t-a)/l:s}var Fy=class extends Ny{static id=`timeseries`;static defaults=Ny.defaults;constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let e=this._getTimestampsForTable(),t=this._table=this.buildLookupTable(e);this._minPos=Py(t,this.min),this._tableRange=Py(t,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){let{min:t,max:n}=this,r=[],i=[],a,o,s,c,l;for(a=0,o=e.length;a=t&&c<=n&&r.push(c);if(r.length<2)return[{time:t,pos:0},{time:n,pos:1}];for(a=0,o=r.length;ae-t)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;let t=this.getDataTimestamps(),n=this.getLabelTimestamps();return e=t.length&&n.length?this.normalize(t.concat(n)):t.length?t:n,e=this._cache.all=e,e}getDecimalForValue(e){return(Py(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){let t=this._offsets,n=this.getDecimalForPixel(e)/t.factor-t.end;return Py(this._table,n*this._tableRange+this._minPos,!0)}},Iy=[Dm,m_,Uv,Object.freeze({__proto__:null,CategoryScale:Jv,LinearScale:Qv,LogarithmicScale:ay,RadialLinearScale:Sy,TimeScale:Ny,TimeSeriesScale:Fy})];Ng.register(...Iy);var Ly=Ng,Ry=z(``);function zy(e,t){D(t,!0);let n=va(t,`class`,3,``),r=va(t,`ariaLabel`,3,``);function i(e){if(Oa.tick,typeof t.build!=`function`)return;let n=t.build();if(!n)return;let r=new Ly(e.getContext(`2d`),n);return()=>r.destroy()}var a=Ry();ji(a,()=>i),I(()=>{W(a,1,Pi(n())),G(a,`aria-label`,r())}),B(e,a),O()}var By=z(``),Vy=z(`
        `);function Hy(e,t){D(t,!0);let n=va(t,`options`,19,()=>[]),r=va(t,`ariaLabel`,3,``),i=va(t,`class`,3,``);var a=Vy();U(a,21,n,e=>e.value,(e,n)=>{var r=By();let i;var a=N(r,!0);E(r),I(()=>{i=W(r,1,`segmented-btn svelte-92fh5i`,null,i,{active:t.value===L(n).value}),G(r,`aria-pressed`,t.value===L(n).value),V(a,L(n).label)}),R(`click`,r,()=>t.onchange?.(L(n).value)),B(e,r)}),E(a),I(()=>{W(a,1,Pi([`segmented-control`,i()]),`svelte-92fh5i`),G(a,`aria-label`,r())}),B(e,a),O()}Vr([`click`]);function Uy(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function Wy(){return{grid:Uy(`--chart-grid`),text:Uy(`--chart-text`),dayMarker:Uy(`--chart-day-marker`),tooltipBg:Uy(`--chart-tooltip-bg`),tooltipBorder:Uy(`--chart-tooltip-border`),tooltipText:Uy(`--chart-tooltip-text`)}}function Gy(){return{size:11,family:`'SF Mono', Menlo, Consolas, monospace`}}function Ky(e,t){return{backgroundColor:e.tooltipBg,borderColor:e.tooltipBorder,borderWidth:1,titleColor:e.tooltipText,bodyColor:e.tooltipText,callbacks:t}}function qy(e){if(typeof document>`u`||!document.body)return e;let t=document.createElement(`span`);t.style.display=`none`,t.style.color=e,document.body.appendChild(t);let n=getComputedStyle(t).color;return document.body.removeChild(t),n||e}var Jy=[`#c2845a`,`#7a9e7e`,`#d4a574`,`#b8a98e`,`#8b9e6b`,`#7d8a97`,`#c47a5a`,`#6b8e6b`,`#a09486`,`#9b7ea4`,`#c49a6c`];function Yy(){return[...Jy]}function Xy(e){let t=5381,n=String(e||``);for(let e=0;evc(e)}}var nb={seconds:{apiName:`second`,windowLabel:`Last 60 seconds`,refreshMs:2e3},minutes:{apiName:`minute`,windowLabel:`Last 60 minutes`,refreshMs:5e3},hours:{apiName:`hour`,windowLabel:`Last 24 hours`,refreshMs:2e4},days:{apiName:`day`,windowLabel:`Last 30 days`,refreshMs:6e4}},rb=[{value:`seconds`,label:`Seconds`},{value:`minutes`,label:`Minutes`},{value:`hours`,label:`Hours`},{value:`days`,label:`Days`}];function ib(){return{input:0,output:0,prompt:0,local:0}}function ab(e){return String(e).padStart(2,`0`)}function ob(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function sb(e,t){if(!Number.isFinite(t))return``;let n=new Date(t);switch(e){case`seconds`:return ab(n.getHours())+`:`+ab(n.getMinutes())+`:`+ab(n.getSeconds());case`minutes`:return ab(n.getHours())+`:`+ab(n.getMinutes());case`hours`:return ab(n.getHours())+`:00`;default:return ab(n.getMonth()+1)+`-`+ab(n.getDate())}}function cb(e,t){let n=[],r=[],i={input:[],output:[],prompt:[],local:[]},a=ib();for(let o of e||[]){let e=Date.parse(o&&o.start),s=ob(o&&o.input_tokens),c=ob(o&&o.output_tokens),l=ob(o&&o.prompt_cached_tokens),u=ob(o&&o.locally_cached_tokens);n.push(sb(t,e)),r.push(Number.isFinite(e)?e:null),i.input.push(s),i.output.push(c),i.prompt.push(l),i.local.push(u),a.input+=s,a.output+=c,a.prompt+=l,a.local+=u}return{labels:n,stamps:r,cols:i,totals:a}}function lb(e){let t=e||ib();return t.input+t.output+t.prompt+t.local>0}function ub(e,t){return vc(Math.max(0,Math.round(e&&e[t]||0)))}function db(e){return(nb[e]||nb.minutes).windowLabel}function fb(e,t){return`Live token throughput, `+db(t).toLowerCase()+`. Input `+ub(e,`input`)+`, output `+ub(e,`output`)+`, prompt cached `+ub(e,`prompt`)+`, locally cached `+ub(e,`local`)+` tokens.`}function pb(e,t,n,r){let i=e=>vc(Math.max(0,Math.round(e))),a=n.stamps,o=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderWidth:0,borderRadius:0,categoryPercentage:1,barPercentage:1,stack:`tokens`});return{type:`bar`,plugins:[{id:`liveTokensDayMarks`,afterDatasetsDraw:t=>{if(r===`days`)return;let n=t.getDatasetMeta(0),i=t.chartArea;if(!n||!n.data||!i)return;let o=t.ctx;o.save(),o.font=`10px 'SF Mono', Menlo, Consolas, monospace`;let s=null;for(let t=0;t{if(!e.length)return``;let t=a[e[0].dataIndex];if(!t)return e[0].label;let n=new Date(t);return r===`days`?n.toLocaleDateString():n.toLocaleString()},label:e=>e.dataset.label+`: `+i(e.parsed.y),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+i(t)}})}}}}var mb=900,hb=new class{#e=A(`minutes`);get granularity(){return L(this.#e)}set granularity(e){j(this.#e,e,!0)}#t=A(M([]));get buckets(){return L(this.#t)}set buckets(e){j(this.#t,e,!0)}#n=A(!1);get active(){return L(this.#n)}set active(e){j(this.#n,e,!0)}#r=null;#i=null;#a=null;#o=0;#s=null;#c=!1;start(){this.stop(),this.active=!0,this.fetch(),this.#l(),this.#u()}stop(){this.active=!1,this.#r&&=(clearInterval(this.#r),null),this.#i&&=(clearTimeout(this.#i),null),this.#a&&=(clearTimeout(this.#a),null),this.#o=0,this.#s&&=(this.#s.abort(),null),this.buckets=[]}setGranularity(e){!nb[e]||e===this.granularity||(this.granularity=e,this.buckets=[],this.#l(),this.fetch())}#l(){this.#r&&=(clearInterval(this.#r),null);let e=nb[this.granularity]||nb.minutes;this.#r=setInterval(()=>{this.active&&this.fetch()},e.refreshMs)}noteUsageEvent(e){!this.active||e!==`usage.flushed`||(this.#i||=setTimeout(()=>{this.#i=null,this.fetch()},mb))}async fetch(){if(!this.active||this.#c)return;this.#c=!0;let e=this.granularity;try{let t=await Cs(`/admin/usage/throughput?granularity=`+(nb[e]||nb.minutes).apiName,{label:`token throughput`});if(t.stale||!t.ok||this.granularity!==e)return;this.buckets=t.data&&Array.isArray(t.data.buckets)?t.data.buckets:[]}catch(e){if(Ts(e))return;console.error(`Failed to fetch token throughput:`,e)}finally{this.#c=!1,this.active&&this.granularity!==e&&this.fetch()}}async#u(){await Os.ensureLoaded(),this.active&&Os.liveLogsVisible()&&(typeof ReadableStream>`u`||(this.#s&&this.#s.abort(),this.#s=new AbortController,this.#d(this.#s)))}async#d(e){try{let t=await xs(`/admin/live/logs?types=usage`,{signal:e.signal});if(!t.ok||!t.body||typeof t.body.getReader!=`function`){this.#p();return}this.#o=0,await Qy(t.body.getReader(),e=>this.#f(e)),this.#p()}catch(e){if(Ts(e))return;console.error(`Live usage stream failed:`,e),this.#p()}}#f(e){if(!e||typeof e!=`object`)return;let t=String(e.type||``).trim();t.indexOf(`usage.`)===0&&this.noteUsageEvent(t)}#p(){if(!this.active||this.#a)return;let{attempt:e,delay:t}=eb(this.#o);this.#o=e,this.#a=setTimeout(()=>{this.#a=null,this.#u()},t)}},gb=z(`
        `),_b=z(`
        Waiting for live requests…
        `),vb=z(`

        Live Token Throughput

        `);function yb(e,t){D(t,!0);let n=k(()=>cb(hb.buckets,hb.granularity)),r=k(()=>L(n).totals);function i(){return{input:qy(`var(--token-input)`),output:qy(`var(--token-output)`),prompt:qy(`var(--token-prompt)`),local:qy(`var(--token-local)`)}}let a=[{metric:`input`,label:`Input Tokens`,colorVar:`--token-input`},{metric:`output`,label:`Output Tokens`,colorVar:`--token-output`},{metric:`prompt`,label:`Prompt (Input) Cached`,colorVar:`--token-prompt`},{metric:`local`,label:`Locally Cached`,colorVar:`--token-local`}];var o=vb(),s=N(o),c=N(s),l=F(N(c),2),u=N(l);let d;var f=F(u,2),p=N(f,!0);E(f),E(l),E(c),Hy(F(c,2),{ariaLabel:`Live token throughput granularity`,get options(){return rb},get value(){return hb.granularity},onchange:e=>hb.setGranularity(e)}),E(s);var m=F(s,2);U(m,21,()=>a,e=>e.metric,(e,t)=>{var n=gb(),i=N(n),a=F(i,2),o=N(a,!0);E(a);var s=F(a,2),c=N(s,!0);E(s),E(n),I(e=>{Vi(i,`background: var(${L(t).colorVar??``})`),V(o,L(t).label),V(c,e)},[()=>ub(L(r),L(t).metric)]),B(e,n)}),E(m);var h=F(m,2),g=N(h);{let e=k(()=>fb(L(r),hb.granularity));zy(g,{get ariaLabel(){return L(e)},build:()=>pb(Wy(),i(),L(n),hb.granularity)})}var _=F(g,2),v=e=>{B(e,_b())},y=k(()=>!lb(L(r)));H(_,e=>{L(y)&&e(v)}),E(h),E(o),I(e=>{d=W(u,1,`live-dot`,null,d,{"is-streaming":hb.active}),V(p,e)},[()=>db(hb.granularity)]),B(e,o),O()}function bb(e){let t=e||{};if(t.total_tokens!==null&&t.total_tokens!==void 0){let e=Number(t.total_tokens);if(Number.isFinite(e))return e}let n=Number(t.total_input_tokens||0),r=Number(t.total_output_tokens||0);return(Number.isFinite(n)?n:0)+(Number.isFinite(r)?r:0)}function xb(e,t){if(!t)return 0;let n=e&&e.summary?e.summary:{},r=Number(n.total_hits||0);return Number.isFinite(r)&&r>0?r:0}function Sb(e,t,n){let r=Number(e&&e.total_requests||0);return(Number.isFinite(r)?r:0)+xb(t,n)}function Cb(e,t,n){let r=xb(t,n);return r<=0?``:mc(Sb(e,t,n)-r)+` to providers + `+mc(r)+` from cache`}function wb(e){let t=e&&e.summary?e.summary:{},n=Number(t.total_input_tokens||0),r=Number(t.total_output_tokens||0);return(Number.isFinite(n)?n:0)+(Number.isFinite(r)?r:0)}function Tb(e,t,n){let r=e=>{let t=Number(e||0);return Number.isFinite(t)&&t>0?t:0},i=e||{},a=r(i.uncached_input_tokens),o=r(i.cached_input_tokens),s=r(i.cache_write_input_tokens),c=t&&t.summary?t.summary:{},l=n?r(c.total_input_tokens):0;return[{key:`uncached`,label:`Regular`,tokens:a+s,colorVar:`--cache-meter-uncached`,note:s>0?`Includes `+mc(s)+` cache-write tokens`:``},{key:`prompt`,label:`Prompt cached`,tokens:o,colorVar:`--cache-meter-prompt`,note:`Provider prompt-cache reads`},{key:`local`,label:`Locally cached`,tokens:l,colorVar:`--cache-meter-local`,note:`Served from GoModel response cache`}]}function Eb(e,t,n){return Tb(e,t,n).reduce((e,t)=>e+t.tokens,0)}function Db(e,t,n){return Eb(e,t,n)>0}function Ob(e,t,n){let r=Tb(e,t,n),i=r.reduce((e,t)=>e+t.tokens,0);if(i<=0)return r.map(e=>Object.assign({},e,{pct:0}));let a=r.map(e=>{let t=e.tokens/i*100,n=Math.floor(t);return Object.assign({},e,{pct:n,remainder:t-n})}),o=100-a.reduce((e,t)=>e+t.pct,0);return a.map((e,t)=>({index:t,remainder:e.remainder,tokens:e.tokens})).filter(e=>e.tokens>0).sort((e,t)=>t.remainder-e.remainder).forEach(e=>{o>0&&(a[e.index].pct+=1,--o)}),a}function kb(e,t,n){return Ob(e,t,n).filter(e=>e.tokens>0)}function Ab(e){let t=[e.label+`: `+mc(e.tokens)+` input tokens (`+e.pct+`%)`];return e.note&&t.push(e.note),t.join(` +`)}function jb(e){let t=(e||[]).map(e=>e.label+` `+e.pct+`%`);return`Cache breakdown of input tokens — `+(t.length?t.join(`, `):`no data`)}function Mb(e){return e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`)}function Nb(e,t,n,r){if(t!==`daily`||!n||!r)return e;let i={};(e||[]).forEach(e=>{i[e.date]=e});let a=[];for(let e=new Date(n);e<=r;e.setUTCDate(e.getUTCDate()+1)){let t=Mb(e);a.push(i[t]||{date:t,input_tokens:0,output_tokens:0,total_tokens:0,requests:0,input_cost:null,output_cost:null,total_cost:null})}return a}function Pb(e,t){let n=e=>Number(e)||0,r=e.map(e=>e.date),i=e.map(e=>n(e.uncached_input_tokens)+n(e.cache_write_input_tokens)+n(e.cached_input_tokens)>0?n(e.uncached_input_tokens)+n(e.cache_write_input_tokens):n(e.input_tokens)),a=e.map(e=>n(e.output_tokens)),o=e.map(e=>n(e.cached_input_tokens)),s={};return(t||[]).forEach(e=>{s[e.date]=e}),{labels:r,inputPaid:i,output:a,prompt:o,local:r.map(e=>{let t=s[e];return t?n(t.input_tokens)+n(t.output_tokens):0})}}function Fb(e){let t=e||{},n=Math.max(0,Number(t.uncached_input_tokens)||0),r=Math.max(0,Number(t.cached_input_tokens)||0),i=Math.max(0,Number(t.cache_write_input_tokens)||0),a=n+r+i;return a>0?r/a*100:0}function Ib(e){let t=e||{};return(Number(t.uncached_input_tokens)||0)+(Number(t.cached_input_tokens)||0)+(Number(t.cache_write_input_tokens)||0)>0}function Lb(e){return Ib(e)?Math.round(Fb(e))+`%`:`—`}function Rb(e,t,n={}){let r=!!n.cacheEnabled,i=n.resolve||(e=>e),a=(e,t)=>i(`color-mix(in srgb, `+e+` `+t+`%, transparent)`),o=(e,t,n,r)=>Object.assign({label:e,data:t,borderColor:n,backgroundColor:n,fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4},r||{}),s=[o(`Input Tokens`,t.inputPaid,i(`var(--token-input)`),{fill:`origin`}),o(`Output Tokens`,t.output,i(`var(--token-output)`),{fill:`-1`}),o(`Prompt (Input) Cached`,t.prompt,i(`var(--token-prompt)`),{fill:`-1`,borderDash:[6,4]})];return r&&s.push(o(`Locally Cached`,t.local,a(`var(--info)`,35),{fill:`-1`,borderDash:[2,3]})),{type:`line`,data:{labels:t.labels,datasets:s},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Ky(e,{label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Gy(),maxRotation:0,autoSkip:!0,maxTicksLimit:10}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:tb(e)}}}}}function zb(e,t,n){let r=Math.max(0,Math.min(100,e));return{type:`doughnut`,data:{datasets:[{data:[r,100-r],backgroundColor:[t,n],borderWidth:0,spacing:0}]},options:{rotation:-90,circumference:180,cutout:`84%`,responsive:!0,maintainAspectRatio:!1,animation:{duration:0},layout:{padding:1},events:[],plugins:{legend:{display:!1},tooltip:{enabled:!1}}}}}var Bb=`gomodel_provider_status_details_expanded`,Vb=`gomodel_provider_card_expanded_overrides`,Hb=3e3,Ub=`https://gomodel.enterpilot.io/docs/providers/`,Wb={anthropic:`anthropic`,azure:`azure`,bailian:`bailian`,bedrock:`bedrock`,"bedrock-mantle":`bedrock-mantle`,cohere:`cohere`,deepseek:`deepseek`,gemini:`gemini`,opencode_go:`opencode-go`,oracle:`oracle`,vertex:`vertex`,vllm:`vllm`,xiaomi:`xiaomi`};function Gb(){return{summary:{total:0,healthy:0,degraded:0,unhealthy:0,overall_status:`degraded`},providers:[]}}function Kb(e){let t={detailsExpanded:!1,cardOverrides:{}};try{if(e){let n=e.getItem(Bb);n===`true`||n===`false`?t.detailsExpanded=n===`true`:e.setItem(Bb,`false`);let r=JSON.parse(e.getItem(Vb)||`{}`);r&&typeof r==`object`&&!Array.isArray(r)&&(t.cardOverrides=r)}}catch{}return t}function qb(e,t){if(e)try{e.setItem(Bb,t?`true`:`false`)}catch{}}function Jb(e,t){if(e)try{e.setItem(Vb,JSON.stringify(t))}catch{}}function Yb(e,t,n){let r=n&&n.name?String(n.name):``;return r&&Object.prototype.hasOwnProperty.call(e,r)?e[r]===!0:t}function Xb(e){return`is-`+(String(e&&e.overall_status||`degraded`).trim()||`degraded`)}function Zb(e){return`is-`+(String(e||`degraded`).trim()||`degraded`)}function Qb(e){let t=e||{};return String(t.healthy||0)+`/`+String(t.total||0)}function $b(e){let t=e||{},n=Number(t.total||0),r=Number(t.healthy||0);return n>0&&rString(e&&e.status_label||``).trim().toLowerCase()===`starting`)}function nx(e){if(!e||!e.runtime)return``;let t=e.runtime.last_model_fetch_at||``,n=e.runtime.last_availability_check_at||``;return t?n&&Date.parse(n)>Date.parse(t)?n:t:n}function rx(e,t){let n=nx(e);if(!n||typeof t!=`function`)return`-`;let r=t(n);if(!r||r===`-`)return`-`;let i=String(r).split(` `);return i.length>1?i.slice(1).join(` `):r}function ix(e,t){let n=nx(e);return n?typeof t==`function`?t(n):String(n):``}function ax(e){if(!e)return``;let t=String(e.name||``).trim(),n=String(e.type||e.config&&e.config.type||``).trim();return!n||n===t?``:n}function ox(e){let t=String(e&&(e.type||e.config&&e.config.type)||``).trim().toLowerCase(),n=t?Wb[t]:``;return n?Ub+n+`?utm_source=gomodel_dashboard`:``}function sx(e){let t=e&&e.config&&e.config.resilience?e.config.resilience.retry:null;return t?String(t.max_retries)+` retries, `+t.initial_backoff+` initial, `+t.max_backoff+` max, factor `+t.backoff_factor+`, jitter `+t.jitter_factor:`-`}function cx(e){let t=e&&e.config&&e.config.resilience?e.config.resilience.circuit_breaker:null;return t?String(t.failure_threshold)+` fail, `+String(t.success_threshold)+` success, `+t.timeout+` timeout`:`-`}function lx(e){let t=e&&e.config&&Array.isArray(e.config.models)?e.config.models.filter(Boolean):[];return t.length===0?`Automatic`:t.join(`, `)}function ux(e){if(!e)return``;let t=[];return e.status_reason&&t.push(String(e.status_reason)),e.last_error&&t.push(`Last error: `+String(e.last_error)),t.join(` + +`)}function dx(e){let t=e&&e.request_health;return t&&typeof t==`object`?t:null}function fx(e){let t=dx(e);return t?String(t.circuit_state||``).trim():``}function px(e){let t=fx(e);return t?t.charAt(0).toUpperCase()+t.slice(1):``}function mx(e){let t=fx(e);return t===`open`?`is-unhealthy`:t===`half-open`?`is-degraded`:`is-healthy`}function hx(e){let t=dx(e);if(!t)return``;let n=Number(t.requests||0),r=Number(t.errors||0),i=Math.round(Number(t.window_seconds||0)/60),a=i>0?`last `+i+` min`:`recent`;return String(n)+` request`+(n===1?``:`s`)+` · `+String(r)+` error`+(r===1?``:`s`)+` (`+a+`)`}function gx(e){let t=dx(e);return t&&Array.isArray(t.models)?t.models:[]}function _x(e){return e?String(Number(e.errors||0))+`/`+String(Number(e.requests||0))+` failed`:``}function vx(e){let t=e&&e.last_error;return!t||!t.message?``:(t.status_code?`HTTP `+String(t.status_code)+`: `:``)+t.message}function yx(){return{name:``,slug:``,url:``,transport:`http`,description:``,enabled:!0,headers:[],allowed_tools:``,disallowed_tools:``,user_paths:``,tool_timeout_seconds:``}}function bx(){return{server:``,status:``,instructions:``,tools:[],prompts:[],resources:[],templates:[]}}function xx(e){return String(e&&(e.slug||e.name)||``).trim()}function Sx(e){return String(e&&e.status||``).trim()||`connecting`}function Cx(e){switch(Sx(e)){case`connected`:return`status-success`;case`degraded`:return String(e&&e.last_error||``).trim()?`status-error`:`status-warning`;case`connecting`:return`status-neutral`;default:return`status-unknown`}}function wx(e,t){let n=Sx(e),r=String(e&&e.last_error||``).trim();return r&&n!==`connected`?r:n===`connected`&&e&&e.connected_at?`Connected since `+(typeof t==`function`?t:String)(e.connected_at):``}function Tx(e){return String(e&&e.transport||``)===`stdio`?`local command`:String(e&&e.url||``).trim()||`—`}function Ex(e){let t=Number(e&&e.prompt_count||0),n=Number(e&&e.resource_count||0);return t+` prompts · `+n+` resources`}function Dx(e){let t=String(e||``).normalize(`NFKD`).toLowerCase(),n=t.replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,64).replace(/-+$/g,``);if(n)return n;let r=2166136261;for(let e of t)r=Math.imul((r^e.codePointAt(0))>>>0,16777619)>>>0;return`mcp-`+r.toString(16).padStart(8,`0`)}function Ox(e){return String(e||``).split(` +`).map(e=>e.trim()).filter(e=>e)}function kx(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.keys(e).sort().map(t=>({name:t,value:String(e[t]||``)}))}function Ax(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=String(e&&e.name||``).trim();n&&(t[n]=String(e&&e.value||``))}),t}function jx(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.slug,e.url,e.transport,e.description,e.status].some(e=>String(e||``).toLowerCase().includes(r)))}function Mx(e){return{name:String(e.name||``).trim(),slug:xx(e),url:String(e.url||``).trim(),transport:e.transport===`sse`?`sse`:`http`,description:String(e.description||``).trim(),enabled:e.enabled!==!1,headers:kx(e.headers),allowed_tools:(Array.isArray(e.allowed_tools)?e.allowed_tools:[]).join(`, `),disallowed_tools:(Array.isArray(e.disallowed_tools)?e.disallowed_tools:[]).join(`, `),user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` +`),tool_timeout_seconds:e.tool_timeout_seconds?String(e.tool_timeout_seconds):``}}function Nx(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||Dx(r)).trim().toLowerCase(),a=String(e.url||``).trim(),o=e.transport===`sse`?`sse`:`http`;if(!r)return{error:`Name is required.`};if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(i))return{error:`Slug must use 1–64 lowercase ASCII letters, numbers, hyphens, or underscores.`};if(t===`create`&&(n||[]).some(e=>xx(e)===i))return{error:`Slug "`+i+`" is already in use.`};if(!a)return{error:`URL is required.`};let s,c=String(e.tool_timeout_seconds||``).trim();if(c!==``){let e=Number(c);if(!Number.isSafeInteger(e)||e<0)return{error:`Tool timeout must be a non-negative whole number of seconds.`};s=e}return{payload:{name:r,slug:i,url:a,transport:o,headers:Ax(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:fc(e.allowed_tools),disallowed_tools:fc(e.disallowed_tools),user_paths:Ox(e.user_paths),tool_timeout_seconds:s}}}function Px(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=e=>(Array.isArray(e)?e:[]).filter(e=>e&&typeof e==`object`);return{server:String(n.server||e||``).trim(),status:String(n.status||``).trim(),instructions:String(n.instructions||``).trim(),tools:r(n.tools),prompts:r(n.prompts),resources:r(n.resources),templates:r(n.templates)}}function Fx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function Ix(e){let t=e||bx(),n=(e,t)=>{let n=String(e||``).trim(),r=String(t||``).trim();return n&&r?n+` — `+r:r||n},r=e=>n=>({key:e+`:`+String(n.name||``),name:String(n.name||``),aggregated:Fx(t,n.name),description:String(n.description||``).trim()});return[{key:`tools`,title:`Tools`,items:(t.tools||[]).map(r(`tool`))},{key:`prompts`,title:`Prompts`,items:(t.prompts||[]).map(r(`prompt`))},{key:`resources`,title:`Resources`,items:(t.resources||[]).map(e=>({key:`resource:`+String(e.uri||``),name:String(e.uri||``),aggregated:``,description:n(e.name,e.description)}))},{key:`templates`,title:`Resource templates`,items:(t.templates||[]).map(e=>({key:`template:`+String(e.uri_template||``),name:String(e.uri_template||``),aggregated:``,description:n(e.name,e.description)}))}].filter(e=>e.items.length>0)}function Lx(e){return Ix(e).length===0}function Rx(e){return(e||[]).length}function zx(e){return(e||[]).filter(e=>Sx(e)===`connected`).length}function Bx(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&Sx(e)===`degraded`).length}function Vx(e,t){return!!e&&Rx(t)>0}function Hx(e){return String(zx(e))+`/`+String(Rx(e))}function Ux(e){return Bx(e)>0?`is-degraded`:`is-healthy`}function Wx(e){let t=Bx(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Rx(e),r=zx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Gx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Kx(e){let t=e&&typeof e==`object`?e:{};return{interval:t.interval===`hour`?`hour`:`day`,buckets:Array.isArray(t.buckets)?t.buckets:[],summary:t.summary&&typeof t.summary==`object`?t.summary:{requests:0},provider_latency:Array.isArray(t.provider_latency)?t.provider_latency:[]}}function qx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Jx(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Yx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function Xx(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function Zx(e){let t=Number(e);return Number.isFinite(t)?t>=6e4?(t/6e4).toFixed(1)+` min`:t>=1e3?(t/1e3).toFixed(2)+` s`:Math.round(t)+` ms`:`-`}function Qx(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:Zx(Number(t))}function $x(e,t){try{let n={};return new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,hourCycle:`h23`}).formatToParts(e).forEach(e=>{n[e.type]=e.value}),{year:n.year,month:n.month,day:n.day,hour:Number(n.hour)}}catch{return{year:String(e.getFullYear()),month:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][e.getMonth()],day:String(e.getDate()),hour:e.getHours()}}}function eS(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=$x(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function tS(e,t,n,r){let i=new Date(e.start);if(Number.isNaN(i.getTime()))return String(e.start||``);if(t===`hour`)return r(e.start);let a=$x(i,n);return a.month+` `+a.day+`, `+a.year}function nS(e){return{ok:e(`var(--success)`),clientError:e(`var(--warning)`),serverError:e(`var(--danger)`),other:e(`color-mix(in srgb, var(--text-muted) 55%, transparent)`)}}function rS(e,t,n={}){let r=n.interval===`hour`?`hour`:`day`,i=n.zone,a=n.resolve||(e=>e),o=n.formatTimestamp||(e=>String(e)),s=t.map(e=>eS(e,r,i)),c=nS(a),l=a(`var(--bg-surface)`),u=e=>Number(e)||0,d=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:l,borderWidth:1,borderSkipped:!1,borderRadius:2,maxBarThickness:28}),f=[d(`2xx`,t.map(e=>u(e.status_2xx)),c.ok),d(`4xx`,t.map(e=>u(e.status_4xx)),c.clientError),d(`5xx`,t.map(e=>u(e.status_5xx)),c.serverError)];return t.some(e=>u(e.status_other)>0)&&f.push(d(`Other`,t.map(e=>u(e.status_other)),c.other)),{type:`bar`,data:{labels:s,datasets:f},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Ky(e,{title:e=>e.length?tS(t[e[0].dataIndex],r,i,o):``,label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Gy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Gy(),precision:0,callback:e=>vc(e)}}}}}}function iS(e=Yy()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function aS(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||iS();return{type:`line`,data:{labels:t.map(e=>eS(e,i,a)),datasets:n.map(e=>({label:e.provider,data:(e.avg_duration_ms||[]).map(e=>e==null?null:Number(e)),borderColor:s(e.provider),backgroundColor:s(e.provider),fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4,spanGaps:i===`hour`&&2}))},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Ky(e,{title:e=>e.length?tS(t[e[0].dataIndex],i,a,o):``,label:e=>{let t=(n[e.datasetIndex]&&n[e.datasetIndex].requests||[])[e.dataIndex],r=Number(t)||0;return e.dataset.label+`: `+Zx(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Gy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Gy(),callback:e=>Zx(e)}}}}}}var oS=class{#e=A(M(Gb()));get status(){return L(this.#e)}set status(e){j(this.#e,e,!0)}#t=A(!1);get loading(){return L(this.#t)}set loading(e){j(this.#t,e,!0)}#n=A(!1);get loadedOnce(){return L(this.#n)}set loadedOnce(e){j(this.#n,e,!0)}#r=A(!1);get detailsExpanded(){return L(this.#r)}set detailsExpanded(e){j(this.#r,e,!0)}#i=A(M({}));get cardOverrides(){return L(this.#i)}set cardOverrides(e){j(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Kb(Ca());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Yb(this.cardOverrides,this.detailsExpanded,e)}toggleCard(e){let t=e&&e.name?String(e.name):``;if(!t)return;let n={...this.cardOverrides};n[t]=!this.cardExpanded(e),this.cardOverrides=n,Jb(Ca(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},qb(Ca(),this.detailsExpanded),Jb(Ca(),this.cardOverrides)}detailsToggleLabel(){return this.detailsExpanded?`Show Details`:`Hide Details`}async fetch(){this.initPreferences(),this.#a&&this.#a.abort();let e=new AbortController;this.#a=e,this.loading=!0;try{let t=await Cs(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Gb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Gb();n.summary||=Gb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(Ts(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Gb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),tx(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Hb))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},sS=class{#e=A(M(Gx()));get stats(){return L(this.#e)}set stats(e){j(this.#e,e,!0)}#t=A(!1);get loading(){return L(this.#t)}set loading(e){j(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await Cs(`/admin/audit/stats?`+Bc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Gx();return}this.stats=Kx(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Gx()}finally{e===this.#n&&(this.loading=!1)}}},cS=class{#e=A(M([]));get servers(){return L(this.#e)}set servers(e){j(this.#e,e,!0)}#t=A(!1);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}async fetch(){if(await Os.ensureLoaded(),!Os.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await Cs(`/admin/mcp-servers`,{label:`mcp servers`});if(e.stale)return;if(e.status===503||e.status===404){this.available=!1,this.servers=[];return}if(this.available=!0,!e.ok){this.servers=[];return}this.servers=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch MCP servers:`,e),this.servers=[]}finally{this.loading=!1}}},lS=class{#e=A(M([]));get data(){return L(this.#e)}set data(e){j(this.#e,e,!0)}#t=A(`tokens`);get mode(){return L(this.#t)}set mode(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=null;async fetch(){this.#r&&this.#r.abort();let e=new AbortController;this.#r=e,this.loading=!0;try{let t=await Cs(`/admin/usage/daily?days=365&interval=daily`,{label:`calendar`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.data=[];return}this.data=Array.isArray(t.data)?t.data:[]}catch(e){if(Ts(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},uS=new oS,dS=new sS,fS=new cS,pS=new lS,mS=(e,t=f,n=f,r=f,i=f)=>{var a=gS(),o=N(a),s=N(o,!0);E(o);var c=F(o,2),l=N(c),u=N(l),d=N(u,!0);E(u),He(),E(l);var p=F(l,4),m=N(p),h=N(m,!0);E(m),He(),E(p);var g=F(p,4),_=N(g,!0);E(g),E(c),E(a),I((e,n,r,i,a,o)=>{V(s,t()),G(l,`title`,e),V(d,n),G(p,`title`,r),V(h,i),G(g,`title`,a),V(_,o)},[()=>yc(`Input tokens`,n()),()=>vc(n()),()=>yc(`Output tokens`,r()),()=>vc(r()),()=>yc(`Total tokens`,i()),()=>vc(i())]),B(e,a)},hS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=yS(),c=N(s),l=N(c,!0);E(c);var u=F(c,2),d=N(u,!0);E(u);var p=F(u,2),m=e=>{var t=_S(),n=N(t,!0);E(t),I(()=>{G(t,`aria-label`,o().title),G(t,`title`,o().title),V(n,a())}),R(`click`,t,function(...e){o().onclick?.apply(this,e)}),B(e,t)},h=e=>{var t=vS(),n=N(t,!0);E(t),I(()=>V(n,a())),B(e,t)};H(p,e=>{o()?e(m):e(h,-1)}),E(s),I(()=>{W(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),V(l,r()),V(d,i())}),B(e,s)},gS=z(`
        i + o =
        `),_S=z(``),vS=z(` `),yS=z(`
        `),bS=z(`
        Cache Hits
        `),xS=z(`
        Total Requests
        Estimated Cost
        Prompt Cache Rate
        `);function SS(e,t){D(t,!0);let n=k(()=>Kc.summary),r=k(()=>Kc.cacheOverview),i=k(()=>Kc.cacheAnalyticsEnabled()),a=k(()=>uS.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=xS(),c=N(s);{let e=k(()=>bb(L(n)));mS(c,()=>`Tokens`,()=>L(n).total_input_tokens,()=>L(n).total_output_tokens,()=>L(e))}var l=F(c,2),u=F(N(l),2),d=N(u,!0);E(u),E(l);var f=F(l,2),p=e=>{var t=bS(),n=F(N(t),2),i=N(n,!0);E(n),E(t),I(e=>V(i,e),[()=>mc(L(r).summary.total_hits)]),B(e,t)};H(f,e=>{L(i)&&e(p)});var m=F(f,2),h=F(N(m),2),g=N(h,!0);E(h),E(m);var _=F(m,2),v=e=>{{let t=k(()=>wb(L(r)));mS(e,()=>`Local Cache`,()=>L(r).summary.total_input_tokens,()=>L(r).summary.total_output_tokens,()=>L(t))}};H(_,e=>{L(i)&&e(v)});var y=F(_,2),b=F(N(y),2),x=N(b);zy(x,{build:()=>zb(Fb(L(n)),qy(`var(--token-prompt)`),qy(`var(--bg-surface-hover)`))});var S=F(x,2),C=N(S,!0);E(S),E(b),E(y);var w=F(y,2),T=e=>{{let t=k(()=>Xb(L(a))),n=k(()=>Qb(L(a))),r=k(()=>ex(L(a))),i=k(()=>$b(L(a))?{title:`View providers overview`,onclick:o}:null);hS(e,()=>`provider-status-overview-card`,()=>L(t),()=>`Provider Status`,()=>L(n),()=>L(r),()=>L(i))}};H(w,e=>{L(a).total>0&&e(T)});var ee=F(w,2),te=e=>{{let t=k(()=>Ux(fS.servers)),n=k(()=>Hx(fS.servers)),r=k(()=>Wx(fS.servers));hS(e,()=>`mcp-servers-flag`,()=>L(t),()=>`MCP Servers`,()=>L(n),()=>L(r),()=>({title:`View MCP servers`,onclick:()=>Yo.navigate(`mcp-servers`)}))}},ne=k(()=>Vx(fS.available,fS.servers));H(ee,e=>{L(ne)&&e(te)}),E(s),I((e,t,n,r,i)=>{G(u,`title`,e),V(d,t),V(g,n),G(b,`aria-label`,r),V(C,i)},[()=>Cb(L(n),L(r),L(i)),()=>mc(Sb(L(n),L(r),L(i))),()=>hc(L(n).total_cost),()=>`Prompt cache rate `+Lb(L(n)),()=>Lb(L(n))]),B(e,s),O()}Vr([`click`]);var CS=z(` `),wS=z(`
        `),TS=z(`No usage in the selected period yet`),ES=z(`
        `),DS=z(`

        Tokens

        Share of input tokens over the selected period
        `);function OS(e,t){D(t,!0);let n=k(()=>Kc.cacheAnalyticsEnabled()),r=k(()=>Ob(Kc.summary,Kc.cacheOverview,L(n))),i=k(()=>kb(Kc.summary,Kc.cacheOverview,L(n))),a=k(()=>Db(Kc.summary,Kc.cacheOverview,L(n)));var o=DS(),s=F(N(o),2);let c;var l=N(s);U(l,17,()=>L(i),e=>e.key,(e,t)=>{var n=wS(),r=N(n),i=e=>{var n=CS(),r=N(n);E(n),I(()=>V(r,`${L(t).pct??``}%`)),B(e,n)};H(r,e=>{L(t).pct>=8&&e(i)}),E(n),I(e=>{Vi(n,`width: ${L(t).pct??``}%; background: var(${L(t).colorVar??``})`),G(n,`title`,e)},[()=>Ab(L(t))]),B(e,n)});var u=F(l,2),d=e=>{B(e,TS())};H(u,e=>{L(a)||e(d)}),E(s);var f=F(s,2);U(f,21,()=>L(r),e=>e.key,(e,t)=>{var n=ES(),r=N(n),i=F(r,2),a=N(i,!0);E(i);var o=F(i,2),s=N(o);E(o);var c=F(o,2),l=N(c,!0);E(c),E(n),I((e,i)=>{G(n,`title`,e),Vi(r,`background: var(${L(t).colorVar??``})`),V(a,L(t).label),V(s,`${L(t).pct??``}%`),V(l,i)},[()=>Ab(L(t)),()=>mc(L(t).tokens)]),B(e,n)}),E(f),E(o),I(e=>{c=W(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!L(a)}),G(s,`aria-label`,e)},[()=>jb(L(i))]),B(e,o),O()}var kS=z(``);function AS(e,t){let n=va(t,`size`,3,16),r=va(t,`label`,3,`Loading`),i=va(t,`class`,3,``);var a=kS();I(()=>{W(a,1,Pi([`spinner`,i()]),`svelte-b54l9o`),Vi(a,`--spinner-size: ${n()??``}px`),G(a,`aria-label`,r())}),B(e,a)}var jS=Yr(` `),MS=Yr(``);function NS(e,t){let n=va(t,`label`,3,`No data`);var r=MS(),i=F(N(r),9),a=e=>{var t=jS(),r=N(t,!0);E(t),I(()=>V(r,n())),B(e,t)};H(i,e=>{n()&&e(a)}),E(r),I(()=>{G(r,`role`,n()?`img`:void 0),G(r,`aria-label`,n()||void 0),G(r,`aria-hidden`,n()?void 0:`true`)}),B(e,r)}var PS=z(`
        `),FS=z(`

        `);function IS(e,t){D(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Bc.interval=e,t.onintervalchange?.()}function i(){let e=Kc.daily;if(e.length===0)return null;let t=Bc.rangeStart(),n=Bc.rangeEnd(),r=Pb(Nb(e,Bc.interval,t,n),Nb(Array.isArray(Kc.cacheOverview.daily)?Kc.cacheOverview.daily:[],Bc.interval,t,n));return Rb(Wy(),r,{cacheEnabled:Kc.cacheAnalyticsEnabled(),resolve:qy})}var a=FS(),o=N(a),s=N(o),c=N(s,!0);E(s);var l=F(s,2);{let e=k(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Hy(l,{ariaLabel:`Usage chart interval`,get options(){return L(e)},get value(){return Bc.interval},onchange:r})}E(o);var u=F(o,2),d=N(u);zy(d,{build:i});var f=F(d,2),p=e=>{var t=PS();AS(N(t),{size:24,label:`Loading usage`}),E(t),B(e,t)},m=e=>{var t=PS();NS(N(t),{}),E(t),B(e,t)};H(f,e=>{Kc.daily.length===0&&Kc.loading?e(p):Kc.daily.length===0&&!q.authError&&e(m,1)}),E(u),E(a),I(e=>V(c,e),[()=>Bc.chartTitle()]),B(e,a),O()}var LS=10,RS=.7;function zS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+RS,r=Math.ceil(n*LS);return r<1?1:r>LS?LS:r}function BS(){let e=[];for(let t=0;t<=LS;t++)e.push(t);return e}function VS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=is(os(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);as(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=as(e),i=r[n],a=0;i&&(a=t===`costs`?i.total_cost==null?0:i.total_cost:i.total_tokens||0),o.push({dateStr:n,value:a,level:0,empty:!1})}let s=0;for(let e=0;es&&(s=o[e].value);for(let e=0;e0){for(;l.length<7;)l.push({dateStr:``,value:0,level:0,empty:!0});c.push(l)}return c}function HS(e){let t=is(os(e,-364)),n=t.getUTCDay();t.setUTCDate(t.getUTCDate()-n);let r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[],a={},o=0;for(let n=new Date(t);as(n)<=e;n.setUTCDate(n.getUTCDate()+7),o++){let t=null;if(o===0)t=new Date(n);else for(let r=0;r<7;r++){let i=new Date(n);if(i.setUTCDate(n.getUTCDate()+r),as(i)>e)break;if(i.getUTCDate()===1){t=i;break}}if(!t)continue;let s=t.getUTCFullYear()+`-`+t.getUTCMonth();a[s]||(i.push({label:r[t.getUTCMonth()],col:o,key:s}),a[s]=!0)}for(let e=0;e `),KS=z(`
        `),qS=z(`
        `),JS=z(`
        `),YS=z(`
        `),XS=z(`

        Activity

        Mon Wed Fri
        `,1);function ZS(e,t){D(t,!0);let n=A(M({show:!1,x:0,y:0,text:``})),r=k(()=>_s.currentDateKey()),i=k(()=>VS(pS.data,pS.mode,L(r))),a=k(()=>HS(L(r)));function o(e,t){t.empty||j(n,{show:!0,x:e.clientX,y:e.clientY,text:WS(t,pS.mode)},!0)}function s(){j(n,{show:!1,x:0,y:0,text:``},!0)}var c=XS(),l=P(c),u=N(l),d=F(N(u),2),f=e=>{AS(e,{size:14,label:`Loading activity`})};H(d,e=>{pS.loading&&pS.data.length===0&&e(f)}),Hy(F(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return pS.mode},onchange:e=>pS.mode=e}),E(u);var p=F(u,2),m=F(N(p),2),h=N(m);U(h,21,()=>L(a),e=>e.key,(e,t)=>{var n=GS(),r=N(n,!0);E(n),I(()=>{Vi(n,`grid-column: ${L(t).col+1} / span ${L(t).span??``}`),V(r,L(t).label)}),B(e,n)}),E(h);var g=F(h,2);U(g,21,()=>L(i),ai,(e,t,n)=>{var r=qS();U(r,23,()=>L(t),(e,t)=>n+`-`+t,(e,t)=>{var n=KS();I(()=>W(n,1,Pi([`contribution-calendar-cell`,L(t).empty?`empty`:`level-${L(t).level}`]),`svelte-3hfxuq`)),Br(`mouseenter`,n,e=>o(e,L(t))),Br(`mouseleave`,n,s),B(e,n)}),E(r),B(e,r)}),E(g),E(m),E(p);var _=F(p,2),v=N(_),y=N(v),b=N(y,!0);E(y),E(v);var x=F(v,2);U(F(N(x),2),16,BS,e=>e,(e,t)=>{var n=JS();I(()=>W(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),B(e,n)}),He(2),E(x),E(_),E(l);var S=F(l,2),C=e=>{var t=YS(),r=N(t,!0);E(t),I(()=>{Vi(t,`left: ${L(n).x??``}px; top: ${L(n).y-40}px`),V(r,L(n).text)}),B(e,t)};H(S,e=>{L(n).show&&e(C)}),I(e=>V(b,e),[()=>US(pS.data,pS.mode)]),B(e,c),O()}var QS=z(``),$S=z(`

        `),eC=z(`
        `);function tC(e,t){D(t,!0);let n=va(t,`label`,3,`help`),r=va(t,`text`,3,``),i=va(t,`open`,15,!1),a=va(t,`external`,3,!1),o=k(()=>!!r()||!!t.help||a());var s=eC(),c=N(s),l=N(c);hi(l,()=>t.title??f);var u=F(l,2),d=e=>{var r=QS();let a;I(()=>{a=W(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),G(r,`aria-label`,(i()?`Hide `:`Show `)+n()),G(r,`aria-expanded`,i()),G(r,`aria-controls`,t.copyId)}),R(`click`,r,()=>i(!i())),B(e,r)};H(u,e=>{L(o)&&e(d)}),hi(F(u,2),()=>t.extra??f),E(c);var p=F(c,2),m=e=>{var n=$S(),i=N(n),a=e=>{var n=Zr();hi(P(n),()=>t.help),B(e,n)},o=e=>{var t=Xr();I(()=>V(t,r())),B(e,t)};H(i,e=>{t.help?e(a):e(o,-1)}),E(n),I(()=>G(n,`id`,t.copyId)),B(e,n)};H(p,e=>{i()&&L(o)&&!a()&&e(m)}),E(s),B(e,s),O()}Vr([`click`]);var nC=z(`

        Provider Latency

        `),rC=z(`
        Avg
        `),iC=z(`

        Requests by Status

        Success 2xx 4xx 5xx
        `,1);function aC(e,t){D(t,!0);let n=iS(),r=k(()=>dS.stats);function i(){return{interval:L(r).interval,zone:_s.effectiveTimezone(),resolve:qy,formatTimestamp:e=>_s.formatTimestamp(e)}}var a=Zr(),o=P(a),s=e=>{var t=iC(),a=P(t),o=N(a),s=F(N(o),2),c=N(s),l=F(N(c),2),u=N(l,!0);E(l),E(c);var d=F(c,2),f=F(N(d),4),p=N(f,!0);E(f),E(d);var m=F(d,2),h=F(N(m),4),g=N(h,!0);E(h),E(m);var _=F(m,2),v=F(N(_),4),y=N(v,!0);E(v),E(_),E(s),E(o);var b=F(o,2);zy(N(b),{build:()=>rS(Wy(),L(r).buckets,i())}),E(b),E(a);var x=F(a,2),S=e=>{var t=rC(),a=N(t),o=N(a);tC(o,{copyId:`audit-latency-help-copy`,label:`provider latency help`,text:`Average duration of successful requests as measured at the gateway, per provider. Local cache hits and failed requests are excluded; streamed responses count until the stream completes.`,title:e=>{B(e,nC())},$$slots:{title:!0}});var s=F(o,2),c=N(s),l=F(N(c),2),u=N(l,!0);E(l),E(c),E(s),E(a);var d=F(a,2);zy(N(d),{build:()=>aS(Wy(),L(r).buckets,L(r).provider_latency,{...i(),providerColor:n})}),E(d),E(t),I(e=>V(u,e),[()=>Qx(L(r))]),B(e,t)},C=k(()=>Jx(L(r)));H(x,e=>{L(C)&&e(S)}),I((e,t,n,r)=>{V(u,e),V(p,t),V(g,n),V(y,r)},[()=>Yx(L(r)),()=>mc(Xx(L(r),`status_2xx`)),()=>mc(Xx(L(r),`status_4xx`)),()=>mc(Xx(L(r),`status_5xx`))]),B(e,t)},c=k(()=>qx(L(r)));H(o,e=>{L(c)&&e(s)}),B(e,a),O()}var oC=(e,t=f,n=f,r)=>{let i=Dt(()=>h(r?.(),!1));var a=lC(),o=N(a),s=N(o,!0);E(o);var c=F(o,2),l=e=>{var t=sC(),r=N(t,!0);E(t),I(()=>V(r,n())),B(e,t)},u=e=>{var t=cC(),r=N(t,!0);E(t),I(()=>V(r,n())),B(e,t)};H(c,e=>{L(i)?e(l):e(u,-1)}),E(a),I(()=>V(s,t())),B(e,a)},sC=z(` `),cC=z(` `),lC=z(`
        `),uC=z(`

        `),dC=z(`
        Breaker State
        `),fC=z(`
        `),pC=z(`
        Models (Recent Traffic)
        `),mC=z(`
        `),hC=z(`

        `);function gC(e,t){D(t,!0);let n=k(()=>mx(t.provider)),r=k(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=hC();let a;var o=N(i),s=N(o),c=N(s,!0);E(s);var l=F(s,2),u=e=>{var n=uC(),r=N(n,!0);E(n),I(()=>V(r,t.provider.last_error)),B(e,n)};H(l,e=>{t.provider.last_error&&e(u)});var d=F(l,2),f=e=>{var r=mC(),i=N(r);{let e=k(()=>hx(t.provider));oC(i,()=>`Recent Requests`,()=>L(e))}var a=F(i,2),o=e=>{var r=dC(),i=F(N(r),2),a=N(i),o=N(a,!0);E(a),E(i),E(r),I(e=>{W(a,1,Pi([`provider-status-health-state`,L(n)]),`svelte-6y9wjv`),V(o,e)},[()=>px(t.provider)]),B(e,r)},s=k(()=>fx(t.provider));H(a,e=>{L(s)&&e(o)});var c=F(a,2),l=e=>{var n=pC(),r=F(N(n),2);U(r,21,()=>gx(t.provider),e=>e.model,(e,t)=>{var n=fC();let r;var i=N(n),a=N(i,!0);E(i);var o=F(i,2),s=N(o,!0);E(o),E(n),I((e,i)=>{r=W(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":L(t).flagged}),G(n,`title`,e),V(a,L(t).model),V(s,i)},[()=>vx(L(t)),()=>_x(L(t))]),B(e,n)}),E(r),E(n),B(e,n)},u=k(()=>gx(t.provider).length>0);H(c,e=>{L(u)&&e(l)}),E(r),B(e,r)},p=k(()=>dx(t.provider));H(d,e=>{L(p)&&e(f)});var m=F(d,2),h=N(m);U(h,17,()=>L(r),([e,t])=>e,(e,t)=>{var n=k(()=>g(L(t),2));oC(e,()=>L(n)[0],()=>L(n)[1],()=>!0)});var _=F(h,2);{let e=k(()=>lx(t.provider));oC(_,()=>`Configured Models`,()=>L(e))}var v=F(_,2);{let e=k(()=>sx(t.provider));oC(v,()=>`Retry`,()=>L(e))}var y=F(v,2);{let e=k(()=>cx(t.provider));oC(y,()=>`Circuit Breaker`,()=>L(e))}E(m),E(o),E(i),I(()=>{a=W(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),G(i,`aria-hidden`,!t.expanded),V(c,t.provider.status_reason)}),B(e,i),O()}var _C=z(` `),vC=z(``),yC=z(`

        Models Available
        Last Checked
        `);function bC(e,t){D(t,!0);let n=k(()=>uS.cardExpanded(t.provider)),r=e=>_s.formatTimestamp(e);var i=yC(),a=N(i),o=N(a),s=N(o),c=N(s),l=N(c,!0);E(c);var u=F(c,2),d=e=>{var n=_C(),r=N(n);E(n),I(e=>V(r,`(${e??``})`),[()=>ax(t.provider)]),B(e,n)},f=k(()=>ax(t.provider));H(u,e=>{L(f)&&e(d)});var p=F(u,2),m=e=>{var n=vC();I((e,t,r)=>{G(n,`href`,e),G(n,`aria-label`,t),G(n,`title`,r)},[()=>ox(t.provider),()=>`View `+(ax(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(ax(t.provider)||t.provider.name)+` provider docs`]),B(e,n)},h=k(()=>ox(t.provider));H(p,e=>{L(h)&&e(m)}),E(s),E(o);var g=F(o,2),_=N(g,!0);E(g),E(a);var v=F(a,2),y=N(v),b=F(N(y),2),x=N(b,!0);E(b),E(y);var S=F(y,2),C=F(N(S),2),w=N(C,!0);E(C),E(S),E(v);var T=F(v,2);gC(T,{get provider(){return t.provider},get expanded(){return L(n)}});var ee=F(T,2);let te;K(N(ee),{get icon(){return Va},class:`provider-status-card-toggle-icon`}),E(ee),E(i),I((e,r,i,a,o)=>{V(l,t.provider.name),W(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),G(g,`title`,r),V(_,t.provider.status_label),V(x,i),G(C,`title`,a),V(w,o),te=W(ee,1,`provider-status-card-toggle svelte-nopjmh`,null,te,{"is-expanded":L(n)}),G(ee,`aria-expanded`,L(n)),G(ee,`aria-label`,(L(n)?`Collapse `:`Expand `)+t.provider.name+` details`),G(ee,`title`,L(n)?`Collapse details`:`Expand details`)},[()=>Zb(t.provider.status),()=>ux(t.provider),()=>mc(t.provider.runtime?.discovered_model_count),()=>ix(t.provider,r),()=>rx(t.provider,r)]),R(`click`,ee,()=>uS.toggleCard(t.provider)),B(e,i),O()}Vr([`click`]);var xC=z(`

        Providers Overview

        `),SC=z(`
        `);function CC(e,t){D(t,!0);let n=k(()=>uS.status.providers);var r=Zr(),i=P(r),a=e=>{var t=xC(),r=N(t),i=F(N(r),2),a=N(i),o=N(a,!0);E(a);var s=F(a,2);let c;E(i),E(r);var l=F(r,2);U(l,21,()=>L(n),e=>e.name,(e,t)=>{bC(e,{get provider(){return L(t)}})}),E(l),E(t),I((e,t)=>{G(i,`aria-checked`,uS.detailsExpanded),G(i,`title`,e),V(o,t),c=W(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":uS.detailsExpanded})},[()=>uS.detailsToggleLabel(),()=>uS.detailsToggleLabel()]),R(`click`,i,()=>uS.toggleDetails()),B(e,t)},o=e=>{var t=SC();AS(N(t),{size:18,label:`Loading provider status`}),E(t),B(e,t)};H(i,e=>{L(n).length>0?e(a):uS.loading&&!uS.loadedOnce&&e(o,1)}),B(e,r),O()}Vr([`click`]);var wC=z(`
        `);function TC(e,t){D(t,!0);function n(){Kc.fetchUsage(),Kc.fetchCacheOverview(``),dS.fetch(),uS.fetch(),fS.fetch(),pS.fetch()}function r(){Kc.fetchUsage(),Kc.fetchCacheOverview(``),dS.fetch()}function i(){r(),pS.fetch()}kn(()=>{if(q.refreshTick,Yo.page===`overview`)return Tr(()=>{n(),hb.start()}),()=>{hb.stop(),uS.stopPolling()}});var a=wC(),o=N(a);yb(o,{});var s=F(o,4);ll(N(s),{onchange:i}),E(s);var c=F(s,2);Uc(c,{});var l=F(c,2);SS(l,{});var u=F(l,2);OS(u,{});var d=F(u,2);IS(d,{onintervalchange:r});var f=F(d,2);ZS(f,{});var p=F(f,2);aC(p,{}),CC(F(p,2),{}),E(a),B(e,a),O()}var EC=`/admin/live/logs?types=audit,usage`;function DC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function OC(e){switch(e){case`date_range`:return`Live paused — the selected date range does not include today. Set it to today to resume.`;case`filters`:return`Live paused while filters are active. Clear them to resume.`;case`pagination`:return`Live paused on later pages. Go to the first page to resume.`;default:return``}}function kC(e){let t=EC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function AC(){return{async consumeLiveLogsBody(e){await Qy(e,e=>this.applyLiveLogEvent(e))},applyLiveLogEvent(e){if(!e||typeof e!=`object`)return;let t=Number(e.seq||0);Number.isFinite(t)&&t>this.liveLogsLastSeq&&(this.liveLogsLastSeq=t);let n=String(e.type||``).trim();if(n!==`heartbeat`){if(n===`reset`){this.reloadLiveLogSources();return}if(n===`audit.removed`){this.removeLiveAuditEntry(e.data);return}if(n.indexOf(`audit.`)===0){this.mergeLiveAuditEntry(e.data||{},n);return}n.indexOf(`usage.`)===0&&(this.mergeLiveUsageEntry(e.data||{},n),typeof this.noteLiveTokenUsage==`function`&&this.noteLiveTokenUsage(n))}},reloadLiveLogSources(){typeof this.fetchUsage==`function`&&this.fetchUsage(),this.page===`audit-logs`&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},auditLivePauseReason(){return!this.auditLog||this.auditLog.offset!==0?`pagination`:this.auditSearch||this.auditMethod||this.auditStatusCode||this.auditStream?`filters`:!this.followsToday&&(this.customStartDate||this.customEndDate)?`date_range`:null},auditLiveInsertAllowed(){return!this.auditLivePauseReason()},usageLiveInsertAllowed(){return this.usageLog&&this.usageLog.offset===0&&!this.usageLogSearch&&!this.usageFilterModel&&!this.usageFilterProvider&&!this.usageFilterLabel&&!this.usageFilterUserPath},mergeLiveAuditEntry(e,t){if(!e||typeof e!=`object`)return;let n=String(e.id||e.request_id||``).trim();if(!n)return;let r=String(e.request_id||``).trim(),i=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],a=i.findIndex(e=>DC(e,n,r)),o=a>=0&&i[a]||{},s=t===`audit.detail`,c=s?{...e,_detail_loaded:!0,_response_partial:!1,bodies_omitted:!1}:this.liveAuditPatch(o,e,t);if(a>=0){let e=this.mergeLiveAuditPatch(o,c);return i.splice(a,1,e),this.auditLog.entries=[...i],this.regroupLiveAuditHead(e),s||this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.cacheMergedAuditRecord(l,t),l;if(!this.auditLiveInsertAllowed()){this.cacheMergedAuditRecord(c,t);return}if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),e}this.auditLog.entries=[this.mergeLiveAuditUsagePatch(c),...i].slice(0,this.auditLog.limit||25),this.auditLog.total=Number(this.auditLog.total||0)+1;let u=this.auditLog.entries[0];return s||this.fetchExpandedAuditDetailIfReady(u),this.cacheMergedAuditRecord(u,t),u},liveAuditPatch(e,t,n){let r=this.liveAuditStateAfter(e._live_state,n),i=this.liveAuditEventFlushed(e._live_state)||this.liveAuditEventFlushed(r),a={...t,_live:!0,_live_state:r,_audit_flushed:i,_live_pending:!i};return n===`audit.stream`?a._response_partial=!0:this.liveAuditStateSettled(n)&&(a._response_partial=!1),a},mergeLiveAuditChild(e,t){let n=this.auditThreadChildren;if(!n||typeof n!=`object`)return null;let r=String(e.id||``).trim(),i=String(e.request_id||``).trim(),a=Object.keys(n);for(let e=0;eDC(e,r,i));if(c<0)continue;let l=this.mergeLiveAuditPatch(s[c]||{},t),u=[...s];return u.splice(c,1,l),this.auditThreadChildren={...n,[a[e]]:{...o,entries:u}},l}return null},regroupLiveAuditHead(e){if(!this.auditGroupSessions)return null;let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=String(e.id||``).trim(),i=n.findIndex(e=>String(e.id||``).trim()===r);if(i<0)return null;let a=n.findIndex((e,n)=>n!==i&&String(e.session_id||``).trim()===t);if(a<0)return null;let o=n[a],s=Date.parse(o&&o.timestamp),c=Date.parse(e&&e.timestamp),l=Number.isFinite(s)&&Number.isFinite(c)&&s>c,u=l?o:e,d=l?e:o,f={...u,session_count:Math.max(1,Number(o.session_count||1))+Math.max(1,Number(e.session_count||1))},p=n.filter((e,t)=>t!==i&&t!==a);return p.unshift(f),this.auditLog.entries=p,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-1),this.prependLiveAuditThreadChild(t,d),f},foldLiveAuditIntoThread(e){let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(e=>String(e.session_id||``).trim()===t);if(r<0)return null;let i=n[r],a=Number(i.session_count),o=this.mergeLiveAuditUsagePatch({...e,session_count:(Number.isFinite(a)&&a>0?a:1)+1}),s=[...n];return s.splice(r,1),s.unshift(o),this.auditLog.entries=s,this.prependLiveAuditThreadChild(t,i),o},prependLiveAuditThreadChild(e,t){let n=this.auditThreadChildren||{},r=n[e],i={...t};delete i.session_count;let a=r&&Array.isArray(r.entries)?{...r,entries:[i,...r.entries],total:Number(r.total||r.entries.length)+1}:{loading:!1,loaded:!1,entries:[i],total:1};this.auditThreadChildren={...n,[e]:a}},removeLiveAuditThreadChild(e,t){let n=this.auditThreadChildren;!n||typeof n!=`object`||Object.keys(n).forEach(r=>{let i=n[r],a=i&&Array.isArray(i.entries)?i.entries:[],o=a.filter(n=>!DC(n,e,t)),s=a.length-o.length;s!==0&&(this.auditThreadChildren={...this.auditThreadChildren,[r]:{...i,entries:o,total:Math.max(0,Number(i.total||a.length)-s)}},this.decrementLiveAuditThreadCount(r,s))})},decrementLiveAuditThreadCount(e,t){let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(t=>String(t.session_id||``).trim()===e);if(r<0)return;let i=n[r],a=[...n];a.splice(r,1,{...i,session_count:Math.max(1,Number(i.session_count||1)-t)}),this.auditLog.entries=a},mergeLiveAuditPatch(e,t){let n={...e,...t};return t.data===void 0&&e.data!==void 0?n.data=e.data:e.data&&t.data&&typeof e.data==`object`&&typeof t.data==`object`&&!Array.isArray(e.data)&&!Array.isArray(t.data)&&(n.data={...e.data,...t.data}),this.mergeLiveAuditUsagePatch(n)},mergeLiveAuditUsagePatch(e){let t=this.liveUsageEntryForAudit(e);if(!t)return e;let n=this.auditEntryWithLiveUsage(e,t);return this.removeSkippedLiveUsage(t),n},liveUsageEntryForAudit(e){let t=String(e&&e.request_id||``).trim();return t&&((this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[]).find(e=>String(e&&e.request_id||``).trim()===t)||this.skippedLiveUsageByRequestId&&this.skippedLiveUsageByRequestId[t])||null},cacheMergedAuditRecord(e,t){return e&&typeof this.cacheAuditRecord==`function`?this.cacheAuditRecord(e,t):e},fetchExpandedAuditDetailIfReady(e){!e||!this.isAuditEntryExpanded||!this.isAuditEntryExpanded(e)||String(e._live_state||``).trim()!==`audit.flushed`&&!e._audit_flushed||typeof this.fetchAuditEntryDetail==`function`&&this.fetchAuditEntryDetail(e)},liveAuditStateRank(e){switch(String(e||``).trim()){case`audit.started`:return 10;case`audit.updated`:case`audit.stream`:return 20;case`audit.completed`:return 30;case`audit.failed`:case`audit.flushed`:case`audit.detail`:return 40;default:return 0}},liveAuditStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveAuditStateRank(n)>this.liveAuditStateRank(r)?n:r},liveAuditStateSettled(e){return this.liveAuditStateRank(e)>=this.liveAuditStateRank(`audit.completed`)},liveAuditEventFlushed(e){let t=String(e||``).trim();return t===`audit.failed`||t===`audit.flushed`||t===`audit.detail`},removeLiveAuditEntry(e){if(!e||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim();if(!t&&!n)return;let r=this.auditLog.entries,i=[],a=0,o=0,s=!1;r.forEach(e=>{if(!DC(e,t,n)){i.push(e);return}a++;let r=String(e.session_id||``).trim(),c=Math.max(1,Number(e.session_count||1));if(!this.auditGroupSessions||!r||c<=1)return;o++;let l=this.auditThreadChildren&&this.auditThreadChildren[r],u=l&&Array.isArray(l.entries)?l.entries.filter(e=>!DC(e,t,n)):[];if(u.length===0){s=!0;return}let d={...u[0],session_id:r,session_count:c-1};i.push(d),this.auditThreadChildren={...this.auditThreadChildren,[r]:{...l,entries:u.slice(1),total:Math.max(0,Number(l.total||c)-1)}}}),a>0&&(this.auditLog.entries=i,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-a+o)),this.removeLiveAuditThreadChild(t,n),s&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},mergeLiveUsageEntry(e,t){if(!e||typeof e!=`object`)return;e={...e,_live_state:t||e._live_state||`usage.completed`};let n=String(e.id||``).trim();if(!n)return;let r=this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[],i=r.findIndex(e=>String(e.id||``).trim()===n);if(i>=0){let t=r[i]||{},n=this.mergeLiveUsagePatch(t,e);if(this.applyLiveUsageToAudit(n),this.liveUsageShouldSkip(n)){r.splice(i,1),this.usageLog.entries=[...r],this.usageLog.total=Math.max(0,Number(this.usageLog.total||0)-1),this.storeSkippedLiveUsage(n);return}r.splice(i,1,n),this.usageLog.entries=[...r],this.removeSkippedLiveUsage(n);return}let a=this.mergeLiveUsagePatch(this.liveUsageSeedForEntry(e),e);if(this.applyLiveUsageToAudit(a),this.liveUsageShouldSkip(a)){this.storeSkippedLiveUsage(a);return}this.removeSkippedLiveUsage(a),this.usageLog.entries=[a,...r].slice(0,this.usageLog.limit||50),this.usageLog.total=Number(this.usageLog.total||0)+1},mergeLiveUsagePatch(e,t){e=e&&typeof e==`object`?e:{};let n=this.liveUsageStateAfter(e._live_state,t&&t._live_state),r=this.liveUsageEventFlushed(e)||this.liveUsageEventFlushed({...t,_live_state:n});return{...e,...t,_live:!0,_live_state:n||`usage.completed`,_live_pending:!r,_usage_flushed:r}},liveUsageShouldSkip(e){return!!(this.usageLogHideCached&&this.liveUsageEntryCached(e))||!this.usageLiveInsertAllowed()},liveUsageSeedForEntry(e){return this.skippedLiveUsageForEntry(e)||this.auditLiveUsageForEntry(e)},skippedLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();return t&&this.skippedLiveUsageByRequestId?this.skippedLiveUsageByRequestId[t]:null},auditLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return null;let n=this.auditLog.entries.find(e=>String(e&&e.request_id||``).trim()===t),r=n&&n.usage&&typeof n.usage==`object`&&!Array.isArray(n.usage)?n.usage:null;return r?{id:e&&e.id,request_id:t,entries:r.entries,input_tokens:r.input_tokens,uncached_input_tokens:r.uncached_input_tokens,cached_input_tokens:r.cached_input_tokens,cache_write_input_tokens:r.cache_write_input_tokens,output_tokens:r.output_tokens,total_tokens:r.total_tokens,cached_input_ratio:r.cached_input_ratio,estimated_cached_characters:r.estimated_cached_characters,_live_state:n._usage_live_state,_live_pending:n._usage_live_pending,_usage_flushed:n._usage_flushed}:null},storeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&((!this.skippedLiveUsageByRequestId||typeof this.skippedLiveUsageByRequestId!=`object`||Array.isArray(this.skippedLiveUsageByRequestId))&&(this.skippedLiveUsageByRequestId={}),this.skippedLiveUsageByRequestId[t]=e)},removeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&this.skippedLiveUsageByRequestId&&delete this.skippedLiveUsageByRequestId[t]},liveUsageEntryCached(e){let t=String(e&&e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`||!!(e&&e.cache_hit)},liveUsageEventFlushed(e){let t=String(e&&e._live_state||``).trim();return!!(e&&e._usage_flushed)||t===`usage.failed`||t===`usage.flushed`},liveUsageStateRank(e){switch(String(e||``).trim()){case`usage.completed`:return 10;case`usage.failed`:case`usage.flushed`:return 20;default:return 0}},liveUsageStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveUsageStateRank(n)>this.liveUsageStateRank(r)?n:r},applyLiveUsageToAudit(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let n=this.auditLog.entries.findIndex(e=>String(e.request_id||``).trim()===t);if(n>=0){let t=this.auditLog.entries[n];this.auditLog.entries.splice(n,1,this.auditEntryWithLiveUsage(t,e)),this.auditLog.entries=[...this.auditLog.entries]}let r=this.auditThreadChildren;if(!r||typeof r!=`object`)return;let i=r,a=!1;Object.keys(r).forEach(n=>{let r=i[n],o=r&&Array.isArray(r.entries)?r.entries:[],s=o.findIndex(e=>String(e.request_id||``).trim()===t);if(s<0)return;let c=[...o];c.splice(s,1,this.auditEntryWithLiveUsage(o[s],e)),i={...i,[n]:{...r,entries:c}},a=!0}),a&&(this.auditThreadChildren=i)},auditEntryWithLiveUsage(e,t){let n=this.liveUsageStateAfter(e._usage_live_state,t._live_state||`usage.completed`),r=this.liveUsageEventFlushed({_live_state:n,_usage_flushed:e._usage_flushed||t._usage_flushed});return{...e,usage:this.liveUsageSummary(t,e.usage),_usage_live_state:n||`usage.completed`,_usage_live_pending:!r,_usage_flushed:r}},liveUsageSummary(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=this.liveNumber(e.input_tokens,this.liveNumber(n.input_tokens,0)),i=this.liveNumber(e.output_tokens,this.liveNumber(n.output_tokens,0)),a=this.liveNumber(e.uncached_input_tokens,this.liveNumber(n.uncached_input_tokens,0)),o=this.liveNumber(e.cached_input_tokens,this.liveNumber(n.cached_input_tokens,0)),s=this.liveNumber(e.cache_write_input_tokens,this.liveNumber(n.cache_write_input_tokens,0));r>0&&a+o+s===0&&(a=r);let c=a+o+s||r,l=c+i||this.liveNumber(e.total_tokens,this.liveNumber(n.total_tokens,0)),u=this.liveNumber(e.cached_input_ratio,this.liveNumber(n.cached_input_ratio,c>0?o/c:0));return{entries:Math.max(1,this.liveNumber(e.entries,this.liveNumber(n.entries,1))),input_tokens:c,uncached_input_tokens:a,cached_input_tokens:o,cache_write_input_tokens:s,output_tokens:i,total_tokens:l,cached_input_ratio:u,estimated_cached_characters:this.liveNumber(e.estimated_cached_characters,this.liveNumber(n.estimated_cached_characters,o*4))}},liveNumber(e,t){let n=Number(e);return Number.isFinite(n)?n:t},auditEntryShouldFetchDetail(e){return!e||e._detail_loading||e._detail_loaded||this.auditEntryLiveDetailPending(e)?!1:this.auditEntryNeedsPersistedLiveDetail(e)||e.bodies_omitted?!0:!this.auditEntryHasDetailData(e)},auditEntryLiveDetailPending(e){if(!e||!e._live)return!1;let t=String(e._live_state||``).trim();return t===`audit.failed`||!e._audit_flushed&&t!==`audit.flushed`&&t!==`audit.detail`},auditEntryNeedsPersistedLiveDetail(e){return!!(e&&e._live&&!e._detail_loaded)},auditEntryHasDetailData(e){let t=e&&e.data;return!t||typeof t!=`object`?!1:t.request_headers!==void 0||t.response_headers!==void 0||t.request_body!==void 0||t.response_body!==void 0||t.request_body_too_big_to_handle!==void 0||t.response_body_too_big_to_handle!==void 0||t.user_agent!==void 0||t.api_key_hash!==void 0||t.temperature!==void 0||t.max_tokens!==void 0||t.error_message!==void 0||t.error_code!==void 0},clearAuditDetailLoading(e){if(!e)return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim(),r=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],i=r.find(e=>t&&String(e.id||``).trim()===t?!0:!!(n&&String(e.request_id||``).trim()===n)),a=i||e;a._detail_loading=!1,i&&(this.auditLog.entries=[...r])}}}var jC={"audit.started":10,"audit.updated":20,"audit.stream":20,"audit.completed":30,"audit.failed":40,"audit.flushed":40,"audit.detail":40},MC=new Set(Object.keys(jC));function NC(e){return String(e&&(e.id||e.request_id)||``).trim()}function PC(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i={...n,...r};r.data==null&&n.data!=null?i.data=n.data:LC(n.data)&&LC(r.data)&&(i.data={...n.data,...r.data});let a=String(n._live_state||``).trim(),o=String(r._live_state||``).trim();return(jC[a]||0)>(jC[o]||0)&&(i._live_state=a),n._audit_flushed&&(i._audit_flushed=!0),i._audit_flushed&&(i._live_pending=!1),n._detail_loaded&&!r._detail_loaded&&(i._detail_loaded=!0,i.bodies_omitted=!1),i.bodies_omitted&&LC(i.data)&&(i.data.request_body!==void 0||i.data.response_body!==void 0)&&(i.bodies_omitted=!1),i}function FC(e,t){let n=Number(t||0);return(Array.isArray(e)?e:[]).filter(e=>Number(e&&e.version||0)>n)}function IC(e){return MC.has(String(e&&e.eventType||``).trim())}function LC(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}var RC=200,zC=class{#e=A(M({entries:[],total:0,limit:25,offset:0}));get auditLog(){return L(this.#e)}set auditLog(e){j(this.#e,e,!0)}#t=A(M({entries:[],total:0,limit:50,offset:0}));get usageLog(){return L(this.#t)}set usageLog(e){j(this.#t,e,!0)}#n=A(M({}));get auditRecords(){return L(this.#n)}set auditRecords(e){j(this.#n,e,!0)}#r=A(M([]));get auditRecordChanges(){return L(this.#r)}set auditRecordChanges(e){j(this.#r,e,!0)}auditRecordVersion=0;auditRecordPins=new Set;#i=A(``);get auditSearch(){return L(this.#i)}set auditSearch(e){j(this.#i,e,!0)}#a=A(``);get auditMethod(){return L(this.#a)}set auditMethod(e){j(this.#a,e,!0)}#o=A(``);get auditStatusCode(){return L(this.#o)}set auditStatusCode(e){j(this.#o,e,!0)}#s=A(``);get auditStream(){return L(this.#s)}set auditStream(e){j(this.#s,e,!0)}#c=A(wa(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return L(this.#c)}set auditGroupSessions(e){j(this.#c,e,!0)}#l=A(M({}));get auditThreadChildren(){return L(this.#l)}set auditThreadChildren(e){j(this.#l,e,!0)}#u=A(``);get usageLogSearch(){return L(this.#u)}set usageLogSearch(e){j(this.#u,e,!0)}#d=A(``);get usageFilterModel(){return L(this.#d)}set usageFilterModel(e){j(this.#d,e,!0)}#f=A(``);get usageFilterProvider(){return L(this.#f)}set usageFilterProvider(e){j(this.#f,e,!0)}#p=A(``);get usageFilterLabel(){return L(this.#p)}set usageFilterLabel(e){j(this.#p,e,!0)}#m=A(``);get usageFilterUserPath(){return L(this.#m)}set usageFilterUserPath(e){j(this.#m,e,!0)}#h=A(!1);get usageLogHideCached(){return L(this.#h)}set usageLogHideCached(e){j(this.#h,e,!0)}#g=A(!1);get liveLogsStreaming(){return L(this.#g)}set liveLogsStreaming(e){j(this.#g,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;noteLiveTokenUsage=null;upsertAuditRecord(e,t=``){let n=NC(e);if(!n)return e;let r=PC(this.auditRecords[n],e);return this.auditRecords={...this.auditRecords,[n]:r},this.pruneAuditRecords(),this.auditRecordVersion++,this.auditRecordChanges=[...this.auditRecordChanges,{version:this.auditRecordVersion,key:n,eventType:t}].slice(-512),r}upsertAuditRecords(e,t=``){return(Array.isArray(e)?e:[]).map(e=>this.upsertAuditRecord(e,t))}auditRecord(e){let t=typeof e==`string`?String(e).trim():NC(e);return t&&this.auditRecords[t]||null}cacheAuditRecord(e,t){return this.upsertAuditRecord(e,t)}pinAuditRecords(e){this.auditRecordPins=new Set((Array.isArray(e)?e:[]).map(String))}pruneAuditRecords(){let e=Object.keys(this.auditRecords);if(e.length<=RC)return;let t={...this.auditRecords},n=e.length-RC;for(let r of e){if(n<=0)break;this.auditRecordPins.has(r)||(delete t[r],n--)}this.auditRecords=t}get page(){return Yo.page}get customStartDate(){return Bc.customStartDate}get customEndDate(){return Bc.customEndDate}get followsToday(){return Bc.followsToday}liveLogsEnabled(){return Os.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await Os.ensureLoaded(),this.liveLogsEnabled()&&(this.stopLiveLogs(),this.liveLogsController=typeof AbortController==`function`?new AbortController:null,this.readLiveLogsStream(this.liveLogsController)))}stopLiveLogs(){this.liveLogsStreaming=!1,this.liveLogsReconnectTimer&&=(clearTimeout(this.liveLogsReconnectTimer),null),this.liveLogsController&&typeof this.liveLogsController.abort==`function`&&this.liveLogsController.abort(),this.liveLogsController=null}ensureLiveLogs(){this.liveLogsController||this.liveLogsReconnectTimer||this.startLiveLogs()}async readLiveLogsStream(e){let t={};e&&(t.signal=e.signal);let n=kC(this.liveLogsLastSeq),r=q.generation;try{let i=await xs(n,t);if(i.status===401){if(q.handleUnauthorized(r),r{this.liveLogsReconnectTimer=null,this.startLiveLogs()},t)}async fetchAuditEntryDetail(e){if(!this.auditEntryShouldFetchDetail(e))return;let t=String(e.id||``).trim();if(!t)return;e._detail_loading=!0;let n=e;try{let e=await Cs(`/admin/audit/detail?log_id=`+encodeURIComponent(t),{label:`audit detail`});if(e.stale||!e.ok)return;n=this.mergeLiveAuditEntry(e.data,`audit.detail`)||n}catch(e){console.error(`Failed to fetch audit detail:`,e)}finally{this.clearAuditDetailLoading(n)}}};Object.assign(zC.prototype,AC());var BC=new zC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!BC.liveLogsController,BC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&BC.ensureLiveLogs()})}var VC=null;jn(()=>{kn(()=>{let e=q.refreshTick;if(VC===null){VC=e;return}e!==VC&&(VC=e,Tr(()=>{BC.stopLiveLogs(),BC.startLiveLogs()}))})});function HC(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,uncached_input_tokens:0,cached_input_tokens:0,cache_write_input_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null,rewrite_tokens_saved:0,rewrite_cost_saved:null}}function UC(){return{entries:[],total:0,limit:50,offset:0}}function WC(e,t){let n=[[`model`,e&&e.model],[`provider`,e&&e.provider],[`label`,e&&e.label],[`user_path`,e&&e.user_path]],r=``;for(let[e,i]of n)!i||e===t||(r+=`&`+e+`=`+encodeURIComponent(i));return r}function GC({limit:e,offset:t,hideCached:n,search:r}){let i=`&limit=`+e+`&offset=`+t;return i+=`&cache_mode=`+(n?`uncached`:`all`),r&&(i+=`&search=`+encodeURIComponent(r)),i}function KC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function qC(e,t){let n=Number(t&&t.total_requests||0)-Number(e&&e.total_requests||0);return Number.isFinite(n)&&n>0?n:0}function JC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function YC(e,t,n){let r=qC(e,t);return r<=0?``:n?mc(r)+` cached requests hidden`:mc(Number(e&&e.total_requests||0))+` to providers + `+mc(r)+` from cache`}function XC(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:hc(t.total_input_cost)+` input + `+hc(t.total_output_cost)+` output`}function ZC(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function QC(e){return ZC(e)>0}function $C(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function ew(){return`Estimated at 4 net characters removed per token`}function tw(e,t){return t===`costs`?hc($C(e)):vc(ZC(e))}function nw(e,t){let n=t===`costs`,r=n?Number($C(e)):ZC(e);if(!Number.isFinite(r)||r<=0)return null;let i=e&&(n?e.total_cost:e.total_input_tokens);if(i==null)return null;let a=Number(i);return!Number.isFinite(a)||a<0?null:r/(a+r)*100}function rw(e,t){let n=nw(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function iw(e,t){let n=ZC(e);if(n<=0)return``;let r=[mc(n)+` estimated prompt token-transmissions removed across provider requests`,ew(),`Savings are summed per provider request; resent conversation history is counted again`],i=$C(e);i!=null&&(r.push(hc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=rw(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` +`)}function aw(e){return String(e&&e.cost_source||``).trim()}function ow(e){let t=aw(e);return t===`openrouter_credits`||t===`xai_cost_in_usd_ticks`}function sw(e){switch(aw(e)){case`openrouter_credits`:return`Costs from OpenRouter USD-based credits.`;case`xai_cost_in_usd_ticks`:return`Costs from xAI usage.cost_in_usd_ticks.`;default:return``}}function cw(e){return String(e&&e.cache_type||``).trim().toLowerCase()}function lw(e){let t=cw(e);return t===`exact`||t===`semantic`}function uw(e){let t=cw(e);return t===`exact`?`Exact`:t===`semantic`?`Semantic`:`-`}function dw(e,t){let n=t?String(t):``;return lw(e)?n?`Saved by cache — not charged +`+n:`Saved by cache — not charged`:n}function fw(e){let t=Number(e&&e.cached_input_ratio);return!Number.isFinite(t)||t<=0?0:Math.min(1,t)}function pw(e){return Number(e&&e.cached_input_tokens||0)>0}function mw(e){return pw(e)?(fw(e)*100).toFixed(1)+`%`:``}function hw(e){if(!pw(e))return``;let t=Number(e.cached_input_tokens||0),n=Number(e.uncached_input_tokens||0),r=Number(e.cache_write_input_tokens||0),i=t+n+r,a=[mc(t)+` cached / `+mc(i)+` input tokens`];return r>0&&a.push(mc(r)+` cache write`),a.join(` +`)}function gw(e){let t=[];if(sw(e)&&(t.push(sw(e)),t.push(``)),t.push(`Input: `+hc(e.input_cost)),t.push(`Output: `+hc(e.output_cost)),e.raw_data){t.push(``);for(let[n,r]of Object.entries(e.raw_data)){let e=n.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase()),i=r&&typeof r==`object`?JSON.stringify(r):mc(r);t.push(e+`: `+i)}}return t.join(` +`)}function _w(e){return Array.isArray(e&&e.labels)?e.labels:[]}function vw(e,t,n){return(e||[]).length>0||t?!0:(n||[]).some(e=>_w(e).length>0)}function yw(e){return e&&typeof e.total_tokens==`number`?e.total_tokens:(e&&e.input_tokens||0)+(e&&e.output_tokens||0)}function bw(e,t){return t?e.total_cost||0:yw(e)}function xw(e,t){return[...e||[]].sort((e,n)=>t?(n.total_cost||0)-(e.total_cost||0):bw(n,t)-bw(e,t))}function Sw(e){let t=Array.isArray(e)?e:[];if(t.length===0)return!1;if(t.length!==1)return!0;let n=String(t[0]&&t[0].user_path||``).trim();return n!==``&&n!==`/`}function Cw(e){return(e||`chart`)===`chart`||e===`stacked`}function ww(e,t,n){let r=xw(e,n),i=e=>Number(e)||0,a=e=>n?Math.min(i(e.cached_input_cost),i(e.input_cost)):i(e.cached_input_tokens),o=e=>n?i(e.input_cost)-a(e):i(e.uncached_input_tokens)+i(e.cached_input_tokens)+i(e.cache_write_input_tokens)>0?i(e.uncached_input_tokens)+i(e.cache_write_input_tokens):i(e.input_tokens),s=e=>i(n?e.output_cost:e.output_tokens),c=e=>n?0:i(e.local_cached_input_tokens),l=e=>n?0:i(e.local_cached_output_tokens),u=r.slice(0,10),d=r.slice(10),f=u.map(t),p=u.map(o),m=u.map(s),h=u.map(a),g=u.map(c),_=u.map(l);if(d.length>0){f.push(`Other`);let e=e=>d.reduce((t,n)=>t+e(n),0);p.push(e(o)),m.push(e(s)),h.push(e(a)),g.push(e(c)),_.push(e(l))}return{labels:f,inputs:p,outputs:m,prompts:h,localIns:g,localOuts:_}}function Tw(e){return Math.max(200,e*32+72)}var Ew=new class{#e=A(`tokens`);get usageMode(){return L(this.#e)}set usageMode(e){j(this.#e,e,!0)}get usageFilterModel(){return BC.usageFilterModel}set usageFilterModel(e){BC.usageFilterModel=e}get usageFilterProvider(){return BC.usageFilterProvider}set usageFilterProvider(e){BC.usageFilterProvider=e}get usageFilterLabel(){return BC.usageFilterLabel}set usageFilterLabel(e){BC.usageFilterLabel=e}get usageFilterUserPath(){return BC.usageFilterUserPath}set usageFilterUserPath(e){BC.usageFilterUserPath=e}#t=A(M({models:[],providers:[],labels:[]}));get usageFacetOptions(){return L(this.#t)}set usageFacetOptions(e){j(this.#t,e,!0)}#n=A(M(HC()));get usageSummary(){return L(this.#n)}set usageSummary(e){j(this.#n,e,!0)}#r=A(M(HC()));get usageSummaryAll(){return L(this.#r)}set usageSummaryAll(e){j(this.#r,e,!0)}#i=A(M([]));get modelUsage(){return L(this.#i)}set modelUsage(e){j(this.#i,e,!0)}#a=A(M([]));get userPathUsage(){return L(this.#a)}set userPathUsage(e){j(this.#a,e,!0)}#o=A(M([]));get labelUsage(){return L(this.#o)}set labelUsage(e){j(this.#o,e,!0)}get usageLog(){return BC.usageLog}set usageLog(e){BC.usageLog=e}get usageLogSearch(){return BC.usageLogSearch}set usageLogSearch(e){BC.usageLogSearch=e}get usageLogHideCached(){return BC.usageLogHideCached}set usageLogHideCached(e){BC.usageLogHideCached=e}#s=A(`chart`);get modelUsageView(){return L(this.#s)}set modelUsageView(e){j(this.#s,e,!0)}#c=A(`chart`);get userPathUsageView(){return L(this.#c)}set userPathUsageView(e){j(this.#c,e,!0)}#l=A(`chart`);get labelUsageView(){return L(this.#l)}set labelUsageView(e){j(this.#l,e,!0)}#u=A(!1);get summaryLoading(){return L(this.#u)}set summaryLoading(e){j(this.#u,e,!0)}#d=A(!1);get modelUsageLoading(){return L(this.#d)}set modelUsageLoading(e){j(this.#d,e,!0)}#f=A(!1);get userPathUsageLoading(){return L(this.#f)}set userPathUsageLoading(e){j(this.#f,e,!0)}#p=A(!1);get labelUsageLoading(){return L(this.#p)}set labelUsageLoading(e){j(this.#p,e,!0)}#m=A(!1);get usageLogLoading(){return L(this.#m)}set usageLogLoading(e){j(this.#m,e,!0)}#h={};#g(e){this.#h[e]&&this.#h[e].abort();let t=new AbortController;return this.#h[e]=t,t}#_(e,t){this.#h[e]===t&&(this.#h[e]=null)}filterQueryStr(e){return WC({model:this.usageFilterModel,provider:this.usageFilterProvider,label:this.usageFilterLabel,user_path:this.usageFilterUserPath},e)}onUsageFilterChanged(){this.fetchUsagePage()}toggleUsageLabelFilter(e){this.usageFilterLabel=this.usageFilterLabel===e?``:e,this.onUsageFilterChanged()}usageLabelChipTitle(e){return this.usageFilterLabel===e?`Clear label filter`:`Filter usage by "`+e+`"`}toggleUsageMode(e){this.usageMode=e,Yo.navigate(`usage`,e===`costs`?`costs`:null)}toggleUsageChartView(e,t){e===`model`&&(this.modelUsageView=t),e===`userPath`&&(this.userPathUsageView=t),e===`label`&&(this.labelUsageView=t)}usageFilterModelOptions(){return KC(this.usageFacetOptions.models,this.usageFilterModel)}usageFilterProviderOptions(){return KC(this.usageFacetOptions.providers,this.usageFilterProvider)}usageFilterLabelOptions(){return KC(this.usageFacetOptions.labels,this.usageFilterLabel)}async fetchUsagePage(){await Os.ensureLoaded();let e=[this.fetchUsagePageSummary(),this.fetchUsageFacetOptions(),this.fetchModelUsage(),this.fetchUserPathUsage(),this.fetchLabelUsage(),this.fetchUsageLog(!0)];Kc.cacheAnalyticsEnabled()&&e.push(Kc.fetchCacheOverview(this.filterQueryStr())),await Promise.all(e)}async fetchUsagePageSummary(){let e=this.#g(`summary`);this.summaryLoading=!0;try{let t=Bc.queryStr()+this.filterQueryStr(),[n,r]=await Promise.all([Cs(`/admin/usage/summary?`+t+`&cache_mode=uncached`,{label:`usage page summary`,signal:e.signal}),Cs(`/admin/usage/summary?`+t+`&cache_mode=all`,{label:`usage page summary (all)`,signal:e.signal})]);if(n.stale||r.stale||e.signal.aborted)return;if(!n.ok||!r.ok){this.usageSummary=HC(),this.usageSummaryAll=HC();return}this.usageSummary=n.data&&typeof n.data==`object`?n.data:HC(),this.usageSummaryAll=r.data&&typeof r.data==`object`?r.data:HC()}catch(e){if(Ts(e))return;console.error(`Failed to fetch usage page summary:`,e),this.usageSummary=HC(),this.usageSummaryAll=HC()}finally{this.#_(`summary`,e),this.#h.summary===null&&(this.summaryLoading=!1)}}async fetchUsageFacetOptions(){let e=this.#g(`facets`);try{let t=async(t,n)=>{let r=await Cs(t+`?`+Bc.queryStr()+this.filterQueryStr(n),{label:`usage facet options`,signal:e.signal});return r.stale?null:r.ok&&Array.isArray(r.data)?r.data:[]},n=t(`/admin/usage/models`,`model`),r=!this.usageFilterModel&&!this.usageFilterProvider,[i,a,o]=await Promise.all([n,r?n:t(`/admin/usage/models`,`provider`),t(`/admin/usage/labels`,`label`)]);if(e.signal.aborted||i===null||a===null||o===null)return;this.usageFacetOptions={models:i.map(e=>e&&e.model).filter(Boolean),providers:a.map(e=>wc(e)).filter(Boolean),labels:o.map(e=>e&&e.label).filter(Boolean)}}catch(e){if(Ts(e))return;console.error(`Failed to fetch usage facet options:`,e),this.usageFacetOptions={models:[],providers:[],labels:[]}}finally{this.#_(`facets`,e)}}async#v(e,t,n,r,i){let a=this.#g(e);i(!0);try{let e=await Cs(t+`?`+Bc.queryStr()+this.filterQueryStr(),{label:n,signal:a.signal});if(e.stale||a.signal.aborted)return;if(!e.ok){r([]);return}r(Array.isArray(e.data)?e.data:[])}catch(e){if(Ts(e))return;console.error(`Failed to fetch `+n+`:`,e),r([])}finally{this.#_(e,a),this.#h[e]===null&&i(!1)}}fetchModelUsage(){return this.#v(`modelUsage`,`/admin/usage/models`,`usage models`,e=>this.modelUsage=e,e=>this.modelUsageLoading=e)}fetchUserPathUsage(){return this.#v(`userPathUsage`,`/admin/usage/user-paths`,`usage user paths`,e=>this.userPathUsage=e,e=>this.userPathUsageLoading=e)}fetchLabelUsage(){return this.#v(`labelUsage`,`/admin/usage/labels`,`usage labels`,e=>this.labelUsage=e,e=>this.labelUsageLoading=e)}async fetchUsageLog(e){let t=this.#g(`usageLog`);this.usageLogLoading=!0;try{e&&(this.usageLog.offset=0);let n=Bc.queryStr()+this.filterQueryStr();n+=GC({limit:this.usageLog.limit,offset:this.usageLog.offset,hideCached:this.usageLogHideCached,search:this.usageLogSearch});let r=await Cs(`/admin/usage/log?`+n,{label:`usage log`,signal:t.signal});if(r.stale||t.signal.aborted)return;if(!r.ok){this.usageLog=UC();return}let i=r.data&&typeof r.data==`object`?r.data:UC();i.entries||=[],this.usageLog=i}catch(e){if(Ts(e))return;console.error(`Failed to fetch usage log:`,e),this.usageLog=UC()}finally{this.#_(`usageLog`,t),this.#h.usageLog===null&&(this.usageLogLoading=!1)}}usageLogNextPage(){this.usageLog.offset+this.usageLog.limit0&&(this.usageLog.offset=Math.max(0,this.usageLog.offset-this.usageLog.limit),this.fetchUsageLog(!1))}};BC.fetchUsage=()=>{Yo.page===`usage`&&Ew.fetchUsagePage()};var Dw=z(`
        `);function Ow(e,t){D(t,!0);let n=va(t,`value`,15,``),r=va(t,`placeholder`,3,``),i=va(t,`label`,3,``),a=va(t,`id`,3,void 0),o=va(t,`oninput`,3,void 0),s=va(t,`class`,3,``);var c=Dw(),l=N(c);K(l,{get icon(){return vo},class:`filter-input-icon`});var u=F(l,2);ta(u),E(c),I(()=>{W(c,1,Pi([`filter-input-wrap`,s()]),`svelte-30xz1k`),G(u,`id`,a()),G(u,`placeholder`,r()),G(u,`aria-label`,i())}),R(`input`,u,function(...e){o()?.apply(this,e)}),ua(u,n),B(e,c),O()}Vr([`input`]);function kw(e,t=300){let n=null,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>{n=null,e(...r)},t)};return r.cancel=()=>{clearTimeout(n),n=null},r}var Aw=z(``),jw=z(``),Mw=z(`
        `);function Nw(e,t){D(t,!0);let n=kw(()=>Ew.onUsageFilterChanged());kn(()=>n.cancel);var r=Mw(),i=N(r),a=N(i);a.value=a.__value=``,U(F(a),16,()=>Ew.usageFilterModelOptions(),e=>e,(e,t)=>{var n=Aw(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(i);var o=F(i,2),s=N(o);s.value=s.__value=``,U(F(s),16,()=>Ew.usageFilterProviderOptions(),e=>e,(e,t)=>{var n=Aw(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(o);var c=F(o,2),l=e=>{var t=jw(),n=N(t);n.value=n.__value=``,U(F(n),16,()=>Ew.usageFilterLabelOptions(),e=>e,(e,t)=>{var n=Aw(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(t),R(`change`,t,()=>Ew.onUsageFilterChanged()),Wi(t,()=>Ew.usageFilterLabel,e=>Ew.usageFilterLabel=e),B(e,t)},u=k(()=>Ew.usageFilterLabelOptions().length>0);H(c,e=>{L(u)&&e(l)}),Ow(F(c,2),{class:`usage-page-filters-user-path`,placeholder:`User path /team/alpha`,label:`Filter by user path`,get oninput(){return n},get value(){return Ew.usageFilterUserPath},set value(e){Ew.usageFilterUserPath=e}}),E(r),R(`change`,i,()=>Ew.onUsageFilterChanged()),Wi(i,()=>Ew.usageFilterModel,e=>Ew.usageFilterModel=e),R(`change`,o,()=>Ew.onUsageFilterChanged()),Wi(o,()=>Ew.usageFilterProvider,e=>Ew.usageFilterProvider=e),B(e,r),O()}Vr([`change`]);var Pw=z(`
        Cache Saved
        Cache Hits
        `,1);function Fw(e,t){D(t,!0);var n=Zr(),r=P(n),i=e=>{var t=Pw(),n=P(t),r=F(N(n),2),i=N(r,!0);E(r),E(n);var a=F(n,2),o=F(N(a),2),s=N(o,!0);E(o),E(a),I((e,t)=>{V(i,e),V(s,t)},[()=>hc(Kc.cacheOverview.summary.total_saved_cost),()=>mc(Kc.cacheOverview.summary.total_hits)]),B(e,t)},a=k(()=>Kc.cacheAnalyticsEnabled());H(r,e=>{L(a)&&e(i)}),B(e,n),O()}var Iw=z(` `),Lw=z(`
        Pro Saved
        `),Rw=z(`
        Total Requests
        Estimated Cost
        `);function zw(e,t){D(t,!0);let n=k(()=>QC(Ew.usageSummary)),r=k(()=>tw(Ew.usageSummary,Ew.usageMode)),i=k(()=>rw(Ew.usageSummary,Ew.usageMode));var a=Rw(),o=N(a),s=F(N(o),2),c=N(s),l=e=>{AS(e,{size:18,label:`Loading usage summary`})},u=e=>{var t=Xr();I(e=>V(t,e),[()=>mc(JC(Ew.usageSummary,Ew.usageSummaryAll,Ew.usageLogHideCached))]),B(e,t)};H(c,e=>{Ew.summaryLoading?e(l):e(u,-1)}),E(s),E(o);var d=F(o,2),f=F(N(d),2),p=N(f),m=e=>{AS(e,{size:18,label:`Loading usage summary`})},h=e=>{var t=Xr();I(e=>V(t,e),[()=>hc(Ew.usageSummary.total_cost)]),B(e,t)};H(p,e=>{Ew.summaryLoading?e(m):e(h,-1)}),E(f),E(d);var g=F(d,2),_=e=>{var t=Lw(),n=F(N(t),2),a=N(n),o=N(a,!0);E(a);var s=F(a,2),c=e=>{var t=Iw(),n=N(t,!0);E(t),I(()=>V(n,L(i))),B(e,t)};H(s,e=>{L(i)&&e(c)}),E(n),E(t),I(e=>{G(n,`title`,e),V(o,L(r))},[()=>iw(Ew.usageSummary,Ew.usageMode)]),B(e,t)};H(g,e=>{L(n)&&e(_)}),Fw(F(g,2),{}),E(a),I((e,t)=>{G(s,`title`,e),G(f,`title`,t)},[()=>YC(Ew.usageSummary,Ew.usageSummaryAll,Ew.usageLogHideCached),()=>XC(Ew.usageSummary)]),B(e,a),O()}function Bw(e,t,n,r){let{stacked:i=!1,costs:a=!1,resolve:o=e=>e}=r||{},s=e=>a?`$`+Math.abs(e).toFixed(2):vc(Math.abs(e)),c=e=>a?`$`+Math.abs(e).toFixed(4):Math.abs(e).toLocaleString(),l=e=>e.map(e=>i?Math.abs(e):-Math.abs(e)),u=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:`transparent`,borderWidth:0,borderRadius:4,maxBarThickness:22}),d=e=>(e||[]).some(e=>Math.abs(e)>0),f=[u(a?`Input Cost`:`Input Tokens`,l(n.inputs),o(`var(--token-input)`)),u(a?`Output Cost`:`Output Tokens`,n.outputs,o(`var(--token-output)`))];return d(n.prompts)&&f.push(u(a?`Prompt Cached Cost`:`Prompt Cached`,l(n.prompts),o(`var(--token-prompt)`))),!a&&d(n.localIns)&&f.push(u(`Locally Cached (Input)`,l(n.localIns),o(`var(--token-local)`))),!a&&d(n.localOuts)&&f.push(u(`Locally Cached (Output)`,n.localOuts,o(`var(--token-local)`))),{type:`bar`,data:{labels:t,datasets:f},options:{indexAxis:`y`,responsive:!0,maintainAspectRatio:!1,animation:{duration:0},layout:{padding:{top:8}},scales:{x:{stacked:!0,beginAtZero:!0,grid:i?{color:e.grid}:{color:t=>t.tick&&t.tick.value===0?e.text:e.grid},border:{display:!1},ticks:{color:e.text,font:Gy(),callback:e=>s(e)}},y:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Gy(),autoSkip:!1}}},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Ky(e,{label:e=>e.dataset.label+`: `+c(e.parsed.x),footer:e=>{let t=0;return e.forEach(e=>{t+=Math.abs(Number(e.parsed.x))||0}),`Total: `+c(t)}})}}}}var Vw=z(`
        `),Hw=z(`

        `),Uw=z(`

        `,1),Ww=z(`
        `),Gw=z(`Model Provider`,1),Kw=z(`User Path`),qw=z(`Label Requests`,1),Jw=z(` `,1),Yw=z(` `),Xw=z(` `,1),Zw=z(` `),Qw=z(`
        Input TokensOutput TokensPrompt CachedLocal CachedTotal TokensInput CostOutput CostTotal Cost
        `),$w=z(`
        `),eT=z(`
        `);function tT(e,t){D(t,!0);let n=e=>{var n=Vw(),r=N(n);let a;var o=F(r,2);let s;var l=F(o,2);let u;E(n),I(()=>{G(n,`aria-label`,L(i).group),a=W(r,1,`chart-view-btn svelte-1kee4g8`,null,a,{active:L(c)===`chart`}),G(r,`aria-pressed`,L(c)===`chart`),G(r,`aria-label`,`Show ${L(i).noun??``} chart`),s=W(o,1,`chart-view-btn svelte-1kee4g8`,null,s,{active:L(c)===`stacked`}),G(o,`aria-pressed`,L(c)===`stacked`),G(o,`aria-label`,`Show ${L(i).noun??``} stacked chart`),u=W(l,1,`chart-view-btn svelte-1kee4g8`,null,u,{active:L(c)===`table`}),G(l,`aria-pressed`,L(c)===`table`),G(l,`aria-label`,`Show ${L(i).noun??``} table`)}),R(`click`,r,()=>Ew.toggleUsageChartView(t.kind,`chart`)),R(`click`,o,()=>Ew.toggleUsageChartView(t.kind,`stacked`)),R(`click`,l,()=>Ew.toggleUsageChartView(t.kind,`table`)),B(e,n)},r={model:{group:`Model usage view`,noun:`model usage`,tokensTitle:`Token Usage by Model`,costsTitle:`Cost by Model`},userPath:{group:`User path usage view`,noun:`user path usage`,tokensTitle:`Usage by User Path`,costsTitle:`Cost by User Path`},label:{group:`Label usage view`,noun:`label usage`,tokensTitle:`Usage by Label`,costsTitle:`Cost by Label`}},i=k(()=>r[t.kind]),a=k(()=>t.kind===`model`?e=>Ec(e):t.kind===`userPath`?e=>e.user_path||`/`:e=>e.label);function o(e){return t.kind===`model`?(e.provider_name||e.provider||`-`)+`/`+e.model:t.kind===`userPath`?e.user_path||`/`:e.label}let s=k(()=>t.kind===`model`?Ew.modelUsage:t.kind===`userPath`?Ew.userPathUsage:Ew.labelUsage),c=k(()=>t.kind===`model`?Ew.modelUsageView:t.kind===`userPath`?Ew.userPathUsageView:Ew.labelUsageView),l=k(()=>t.kind===`model`?Ew.modelUsageLoading:t.kind===`userPath`?Ew.userPathUsageLoading:Ew.labelUsageLoading),u=k(()=>Ew.usageMode===`costs`),d=k(()=>t.kind===`userPath`?Sw(L(s)):L(s).length>0),f=k(()=>L(u)?L(i).costsTitle:L(i).tokensTitle),p=k(()=>ww(L(s),L(a),L(u))),m=k(()=>xw(L(s),L(u)));function h(){return Cw(L(c))?Bw(Wy(),L(p).labels,L(p),{stacked:L(c)===`stacked`,costs:L(u),resolve:qy}):null}var g=Zr(),_=P(g),v=e=>{var r=$w(),a=N(r),s=N(a),u=e=>{tC(e,{copyId:`label-usage-help-copy`,label:`label usage help`,text:`One request can have multiple labels. Such a request counts once under each of its labels, so label rows can overlap and add up to more than the period totals.`,title:e=>{var t=Hw(),n=N(t,!0);E(t),I(()=>V(n,L(f))),B(e,t)},extra:e=>{var t=Zr(),n=P(t),r=e=>{AS(e,{size:14,get label(){return`Loading ${L(i).noun??``}`}})};H(n,e=>{L(l)&&e(r)}),B(e,t)},$$slots:{title:!0,extra:!0}})},d=e=>{var t=Uw(),n=P(t),r=N(n,!0);E(n);var a=F(n,2),o=e=>{AS(e,{size:14,get label(){return`Loading ${L(i).noun??``}`}})};H(a,e=>{L(l)&&e(o)}),I(()=>V(r,L(f))),B(e,t)};H(s,e=>{t.kind===`label`?e(u):e(d,-1)});var g=F(s,2);n(g),E(a);var _=F(a,2),v=e=>{var t=Ww();let n;zy(N(t),{build:h}),E(t),I(e=>n=Vi(t,``,n,e),[()=>({height:`${Tw(L(p).labels.length)??``}px`})]),B(e,t)},y=k(()=>Cw(L(c))),b=e=>{var n=Qw(),r=N(n),i=N(r),a=N(i),s=N(a),c=e=>{var t=Gw();He(2),B(e,t)},l=e=>{B(e,Kw())},u=e=>{var t=qw();He(2),B(e,t)};H(s,e=>{t.kind===`model`?e(c):t.kind===`userPath`?e(l,1):e(u,-1)}),He(8),E(a),E(i);var d=F(i);U(d,21,()=>L(m),e=>o(e),(e,n)=>{var r=Zw(),i=N(r),a=e=>{var t=Jw(),r=P(t),i=N(r,!0);E(r);var a=F(r,2),o=N(a),s=N(o,!0);E(o),E(a),I(e=>{V(i,L(n).model||`-`),V(s,e)},[()=>wc(L(n))||`-`]),B(e,t)},o=e=>{var t=Yw(),r=N(t,!0);E(t),I(()=>V(r,L(n).user_path||`/`)),B(e,t)},s=e=>{var t=Xw(),r=P(t),i=N(r);let a;var o=N(i,!0);E(i),E(r);var s=F(r,2),c=N(s,!0);E(s),I((e,t,r)=>{a=W(i,1,`usage-label-chip`,null,a,{active:Ew.usageFilterLabel===L(n).label}),Vi(i,`--label-color: ${e??``}`),G(i,`title`,t),V(o,L(n).label),V(c,r)},[()=>Xy(L(n).label),()=>Ew.usageLabelChipTitle(L(n).label),()=>mc(L(n).requests)]),R(`click`,i,()=>Ew.toggleUsageLabelFilter(L(n).label)),B(e,t)};H(i,e=>{t.kind===`model`?e(a):t.kind===`userPath`?e(o,1):e(s,-1)});var c=F(i),l=N(c,!0);E(c);var u=F(c),d=N(u,!0);E(u);var f=F(u),p=N(f,!0);E(f);var m=F(f),h=N(m,!0);E(m);var g=F(m),_=N(g,!0);E(g);var v=F(g),y=N(v,!0);E(v);var b=F(v),x=N(b,!0);E(b);var S=F(b),C=N(S,!0);E(S),E(r),I((e,t,n,r,i,a,o,s,c,u,g)=>{V(l,e),V(d,t),G(f,`title`,n),V(p,r),G(m,`title`,`${i??``} input + ${a??``} output`),V(h,o),V(_,s),V(y,c),V(x,u),V(C,g)},[()=>mc(L(n).input_tokens),()=>mc(L(n).output_tokens),()=>L(n).cached_input_cost==null?``:`~`+hc(L(n).cached_input_cost)+` at current cached-input pricing`,()=>mc(L(n).cached_input_tokens||0),()=>mc(L(n).local_cached_input_tokens||0),()=>mc(L(n).local_cached_output_tokens||0),()=>mc((L(n).local_cached_input_tokens||0)+(L(n).local_cached_output_tokens||0)),()=>mc(yw(L(n))),()=>hc(L(n).input_cost),()=>hc(L(n).output_cost),()=>hc(L(n).total_cost)]),B(e,r)}),E(d),E(r),E(n),B(e,n)};H(_,e=>{L(y)?e(v):e(b,-1)}),E(r),B(e,r)},y=e=>{var t=eT();AS(N(t),{size:20,get label(){return`Loading ${L(i).noun??``}`}}),E(t),B(e,t)};H(_,e=>{L(d)?e(v):L(l)&&e(y,1)}),B(e,g),O()}Vr([`click`]);var nT=z(``);function rT(e,t){D(t,!0);let n=va(t,`total`,3,0),r=va(t,`offset`,3,0),i=va(t,`limit`,3,25);var a=Zr(),o=P(a),s=e=>{var a=nT(),o=N(a),s=N(o);E(o);var c=F(o,2),l=N(c),u=F(l,2);E(c),E(a),I(e=>{V(s,`Showing ${r()+1}-${e??``} of ${n()??``}`),l.disabled=r()===0,u.disabled=r()+i()>=n()},[()=>Math.min(r()+i(),n())]),R(`click`,l,()=>t.onprev?.()),R(`click`,u,()=>t.onnext?.()),B(e,a)};H(o,e=>{n()>0&&e(s)}),B(e,a),O()}Vr([`click`]);var iT=(e,t=f)=>{var n=Zr(),r=P(n),i=e=>{var n=oT();U(n,20,()=>_w(t()),e=>e,(e,t)=>{var n=aT();let r;var i=N(n,!0);E(n),I((e,a)=>{r=W(n,1,`usage-label-chip`,null,r,{active:Ew.usageFilterLabel===t}),Vi(n,`--label-color: ${e??``}`),G(n,`title`,a),V(i,t)},[()=>Xy(t),()=>Ew.usageLabelChipTitle(t)]),R(`click`,n,()=>Ew.toggleUsageLabelFilter(t)),B(e,n)}),E(n),B(e,n)},a=k(()=>_w(t()).length>0),o=e=>{B(e,sT())};H(r,e=>{L(a)?e(i):e(o,-1)}),B(e,n)},aT=z(``),oT=z(`
        `),sT=z(`-`),cT=z(`Labels`),lT=z(`Cost`),uT=z(``),dT=z(` `),fT=z(``),pT=z(` `),mT=z(` `),hT=z(`
        TimestampProviderModelUser PathCacheProvider Cache
        `),gT=z(`
        `),_T=z(`
        `),vT=z(`

        Request Log

        `);function yT(e,t){D(t,!0);let n=k(()=>Ew.usageMode===`costs`),r=k(()=>vw(Ew.labelUsage,Ew.usageFilterLabel,Ew.usageLog.entries)),i=kw(()=>Ew.fetchUsageLog(!0));kn(()=>i.cancel);var a=vT(),o=F(N(a),2),s=N(o);Ow(N(s),{placeholder:`Search by request ID, model, provider...`,label:`Search by request ID, model, provider`,get oninput(){return i},get value(){return Ew.usageLogSearch},set value(e){Ew.usageLogSearch=e}}),E(s);var c=F(s,2),l=N(c),u=N(l);ta(u),He(2),E(l),E(c),E(o);var d=F(o,2),f=e=>{var t=hT(),i=N(t),a=N(i),o=N(a),s=F(N(o),4),c=e=>{B(e,cT())};H(s,e=>{L(r)&&e(c)});var l=F(s,3),u=N(l,!0);E(l);var d=F(l),f=N(d,!0);E(d);var p=F(d),m=N(p,!0);E(p);var h=F(p),g=e=>{B(e,lT())};H(h,e=>{L(n)||e(g)}),E(o),E(a);var _=F(a);U(_,21,()=>Ew.usageLog.entries,e=>e.id,(e,t)=>{var i=mT();let a;var o=N(i),s=N(o,!0);E(o);var c=F(o),l=N(c),u=N(l,!0);E(l),E(c);var d=F(c),f=N(d,!0);E(d);var p=F(d),m=N(p,!0);E(p);var h=F(p),g=e=>{var n=uT();iT(N(n),()=>L(t)),E(n),B(e,n)};H(h,e=>{L(r)&&e(g)});var _=F(h),v=N(_,!0);E(_);var y=F(_),b=N(y),x=e=>{var n=dT(),r=N(n,!0);E(n),I(e=>V(r,e),[()=>mw(L(t))]),B(e,n)},S=k(()=>pw(L(t))),C=e=>{B(e,sT())};H(b,e=>{L(S)?e(x):e(C,-1)}),E(y);var w=F(y),T=N(w,!0);E(w);var ee=F(w),te=N(ee,!0);E(ee);var ne=F(ee),re=N(ne),ie=N(re,!0);E(re);var ae=F(re,2),oe=e=>{{let n=k(()=>sw(L(t)));K(e,{get icon(){return Ka},class:`cost-source-icon`,get title(){return L(n)}})}},se=k(()=>L(n)&&ow(L(t)));H(ae,e=>{L(se)&&e(oe)});var ce=F(ae,2),le=e=>{K(e,{get icon(){return Ya},class:`cache-savings-icon`})},ue=k(()=>L(n)&&lw(L(t)));H(ce,e=>{L(ue)&&e(le)});var de=F(ce,2),fe=e=>{var n=fT();I(()=>G(n,`title`,L(t).costs_calculation_caveat)),B(e,n)};H(de,e=>{L(n)&&L(t).costs_calculation_caveat&&e(fe)}),E(ne);var pe=F(ne),me=e=>{var n=pT(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=e=>{{let n=k(()=>sw(L(t)));K(e,{get icon(){return Ka},class:`cost-source-icon`,get title(){return L(n)}})}},s=k(()=>ow(L(t)));H(a,e=>{L(s)&&e(o)});var c=F(a,2),l=e=>{K(e,{get icon(){return Ya},class:`cache-savings-icon`})},u=k(()=>lw(L(t)));H(c,e=>{L(u)&&e(l)});var d=F(c,2),f=e=>{var n=fT();I(()=>G(n,`title`,L(t).costs_calculation_caveat)),B(e,n)};H(d,e=>{L(t).costs_calculation_caveat&&e(f)}),E(n),I((e,t)=>{G(n,`title`,e),V(i,t)},[()=>dw(L(t),gw(L(t))),()=>hc(L(t).total_cost)]),B(e,n)};H(pe,e=>{L(n)||e(me)}),E(i),I((e,n,r,c,l,d,p,h,g,_,b,x,S)=>{a=W(i,1,`svelte-hg4ill`,null,a,e),G(o,`title`,n),V(s,r),V(u,c),V(f,L(t).model),V(m,L(t).user_path||`-`),V(v,l),G(y,`title`,d),G(w,`title`,p),V(T,h),G(ee,`title`,g),V(te,_),G(ne,`title`,b),G(re,`title`,x),V(ie,S)},[()=>({"usage-log-row-cached":lw(L(t))}),()=>Sc(L(t).timestamp),()=>_s.formatTimestamp(L(t).timestamp),()=>wc(L(t))||`-`,()=>uw(L(t)),()=>hw(L(t)),()=>L(n)?mc(L(t).input_tokens)+` tokens`:``,()=>L(n)?hc(L(t).input_cost):mc(L(t).input_tokens),()=>L(n)?mc(L(t).output_tokens)+` tokens`:``,()=>L(n)?hc(L(t).output_cost):mc(L(t).output_tokens),()=>L(n)?dw(L(t),``):``,()=>L(n)?dw(L(t),mc(L(t).total_tokens)+` tokens +`+gw(L(t))):``,()=>L(n)?hc(L(t).total_cost):mc(L(t).total_tokens)]),B(e,i)}),E(_),E(i),E(t),I(()=>{V(u,L(n)?`Input Cost`:`Input`),V(f,L(n)?`Output Cost`:`Output`),V(m,L(n)?`Total Cost`:`Total`)}),B(e,t)},p=e=>{var t=gT();AS(N(t),{size:20,label:`Loading request log`}),E(t),B(e,t)},m=e=>{var t=_T();NS(N(t),{}),E(t),B(e,t)};H(d,e=>{Ew.usageLog.entries.length>0?e(f):Ew.usageLogLoading?e(p,1):e(m,-1)}),rT(F(d,2),{get total(){return Ew.usageLog.total},get offset(){return Ew.usageLog.offset},get limit(){return Ew.usageLog.limit},onprev:()=>Ew.usageLogPrevPage(),onnext:()=>Ew.usageLogNextPage()}),E(a),R(`change`,u,()=>Ew.fetchUsageLog(!0)),da(u,()=>Ew.usageLogHideCached,e=>Ew.usageLogHideCached=e),B(e,a),O()}Vr([`click`,`change`]);var bT=z(`
        `);function xT(e,t){D(t,!0);let n=`usage`;kn(()=>{q.refreshTick,Yo.page===n&&(Ew.fetchUsagePage(),BC.ensureLiveLogs())}),kn(()=>{Yo.page===n&&(Ew.usageMode=Yo.sub===`costs`?`costs`:`tokens`)});var r=bT(),i=F(N(r),2),a=N(i);Hy(a,{ariaLabel:`Usage mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return Ew.usageMode},onchange:e=>Ew.toggleUsageMode(e)}),ll(F(a,2),{onchange:()=>Ew.fetchUsagePage()}),E(i);var o=F(i,2);Nw(o,{});var s=F(o,2);zw(s,{});var c=F(s,2),l=N(c);tT(l,{kind:`model`});var u=F(l,2);tT(u,{kind:`userPath`}),tT(F(u,2),{kind:`label`}),E(c),yT(F(c,2),{}),E(r),B(e,r),O()}var ST=z(`
        `);function CT(e,t){let n=va(t,`label`,3,`Loading...`),r=va(t,`class`,3,``);var i=ST(),a=F(N(i),2),o=N(a,!0);E(a),E(i),I(()=>{W(i,1,Pi([`loading-state`,r()]),`svelte-hzxv1d`),V(o,n())}),B(e,i)}var wT=z(``);function TT(e,t){let n=va(t,`label`,3,``),r=va(t,`class`,3,``),i=va(t,`disabled`,3,!1);var a=wT();hi(N(a),()=>t.children??f),E(a),I(()=>{W(a,1,Pi([`table-action-btn`,r()])),G(a,`aria-label`,n()),G(a,`title`,n()),a.disabled=i()}),R(`click`,a,function(...e){t.onclick?.apply(this,e)}),B(e,a)}Vr([`click`]);async function ET(e,{label:t,errorFallback:n=`Unable to load ${t}.`,unavailableStatuses:r=[503],normalize:i=e=>Array.isArray(e)?e:[],options:a}){let o;try{o=await Cs(e,{...a||{},label:t})}catch(e){return Ts(e)||console.error(`Failed to fetch ${t}:`,e),{status:`error`,items:[],error:n,result:null}}return o.stale?{status:`stale`,items:[],error:``,result:o}:r.includes(o.status)?{status:`unavailable`,items:[],error:``,result:o}:o.ok?{status:`ok`,items:i(o.data),error:``,result:o}:{status:`error`,items:[],error:o.status===401?``:vs(o.data,n),result:o}}async function DT(e,t,n,{label:r,errorFallback:i=`Unable to ${r}.`,unavailableStatuses:a=[503],unavailableMessage:o=`This feature is unavailable on the gateway.`,options:s}){let c;try{c=await ws(e,t,n,{...s||{},label:r})}catch(e){return Ts(e)||console.error(`Failed to ${r}:`,e),{status:`error`,error:i,result:null}}return c.stale?{status:`stale`,error:``,result:c}:a.includes(c.status)?{status:`unavailable`,error:o,result:c}:c.ok?{status:`ok`,error:``,result:c}:{status:`error`,error:c.status===401?`Authentication required.`:vs(c.data,i),result:c}}function OT(){return{scope:`user_path`,subject:`/`,period:`daily`,period_seconds:86400,amount:``,source:`manual`}}function kT(e){let t={user_path:{label:`User path`,chip:`user path`,fieldLabel:`User Path`,placeholder:`/team/alpha`},label:{label:`Label`,chip:`label`,fieldLabel:`Label`,placeholder:`Mobile-App-iOS`}};return t[e]||t.user_path}function AT(){return[`user_path`,`label`].map(e=>({value:e,label:kT(e).label}))}function jT(e){return String(e&&e.scope||``).trim()||`user_path`}function MT(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function NT(e){return kT(jT(e)).chip}function PT(e){return jT(e)===`label`?`budget-label`:`budget-user-path`}function FT(e){return kT(String(e&&e.scope||``)).fieldLabel}function IT(e){return kT(String(e&&e.scope||``)).placeholder}function LT(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function RT(){return[{value:`hourly`,label:`Hourly`},{value:`daily`,label:`Daily`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`},{value:`custom`,label:`Custom seconds`}]}function zT(e){switch(String(e||``).trim().toLowerCase()){case`hourly`:return 3600;case`daily`:return 86400;case`weekly`:return 604800;case`monthly`:return 2592e3;default:return 0}}function BT(e){switch(Number(e||0)){case 3600:return`hourly`;case 86400:return`daily`;case 604800:return`weekly`;case 2592e3:return`monthly`;default:return`custom`}}function VT(e){return jT(e)+`:`+MT(e)+`:`+String(e&&e.period_seconds||``)}function HT(e,t){if(!t||!Array.isArray(e))return null;let n=VT(t);return e.find(e=>VT(e)===n)||null}function UT(e){let t=String(e||``).trim();if(!t)return`User path is required.`;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function WT(e){if(UT(e))return``;let t=String(e||``).trim(),n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function GT(e){return`/`+String(e||``).trimStart().replace(/^\/+/,``)}function KT(e){return Array.isArray(e)?e:e&&Array.isArray(e.budgets)?e.budgets:[]}function qT(e){let t=Number(e&&e.period_seconds||0);return[MT(e),NT(e),uE(e),BT(t),t?String(t)+`s`:``,t?String(t)+` seconds`:``].join(` `).toLowerCase()}var JT={user_path:0,label:1};function YT(e,t){let n=Array.isArray(e)?e.slice():[],r=String(t||`subject`);return n.sort((e,t)=>{let n=(JT[jT(e)]||0)-(JT[jT(t)]||0),i=MT(e).localeCompare(MT(t)),a=Number(t&&t.period_seconds||0)-Number(e&&e.period_seconds||0);return r===`period`?a||n||i:n||i||a}),n}function XT(e,t,n){let r=Array.isArray(e)?e:[],i=String(t||``).trim().toLowerCase();return YT(i?r.filter(e=>qT(e).includes(i)):r.slice(),n)}function ZT(e){let t=e||{},n=jT(t),r=String(t.subject||``).trim();if(n===`user_path`){let e=UT(r);if(e)return{payload:null,error:e}}else if(!r)return{payload:null,error:`Label is required.`};let i=Number(t.amount);if(!Number.isFinite(i)||i<=0)return{payload:null,error:`Amount must be greater than 0.`};let a=String(t.period||``).trim(),o=zT(a);return a===`custom`&&(o=Number(t.period_seconds)),!Number.isFinite(o)||o<=0?{payload:null,error:`Period seconds must be greater than 0.`}:{payload:{scope:n,subject:n===`user_path`?WT(r):r,period_seconds:Math.trunc(o),amount:i,source:String(t.source||`manual`).trim()||`manual`},error:``}}function QT(e){return{scope:jT(e),subject:MT(e),budget_key:{period_seconds:e.period_seconds},amount:e.amount}}function $T(e){return{scope:jT(e),subject:MT(e),budget_key:{period_seconds:e.period_seconds}}}function eE(e){return{scope:jT(e),subject:MT(e),period_seconds:e.period_seconds}}function tE(e){return hc(e)}function nE(e,t){let n=e||{},r=t||{};return`A budget for "`+((MT(n)||MT(r))+` `+uE({period_seconds:n.period_seconds||r.period_seconds,period_label:r.period_label}))+`" already exists. Saving will override the current `+tE(r.amount)+` limit with `+tE(n.amount)+`.`}function rE(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:t}function iE(e,t){let n=rE(e);return Math.round((t?Math.min(n,1):n)*1e3)/10}function aE(e){return rE(e&&e.usage_ratio)}function oE(e){return iE(aE(e),!0)}function sE(e){return iE(e&&e.period_ratio,!0)}function cE(e){return iE(aE(e),!1).toFixed(1).replace(/\.0$/,``)+`%`}function lE(e){return sE(e).toFixed(1).replace(/\.0$/,``)+`%`}function uE(e){let t=Number(e&&e.period_seconds||0);switch(t){case 3600:return`Hourly`;case 86400:return`Daily`;case 604800:return`Weekly`;case 2592e3:return`Monthly`;default:{let n=String(e&&e.period_label||``).trim();return n?`Custom `+n:`Custom `+String(t||``)+`s`}}}function dE(e){switch(Number(e&&e.period_seconds||0)){case 3600:return`budget-period-label-hourly`;case 86400:return`budget-period-label-daily`;case 604800:return`budget-period-label-weekly`;case 2592e3:return`budget-period-label-monthly`;default:return`budget-period-label-custom`}}function fE(e){return dE(e).replace(`budget-period-label-`,`budget-bar-fill-period-`)}function pE(e){return dE(e).replace(`budget-period-label-`,`budget-bar-track-period-`)}function mE(e){switch(Number(e&&e.period_seconds||0)){case 3600:return qa;case 86400:return Do;case 604800:return Ia;case 2592e3:return La;default:return xo}}function hE(e){let t=Math.max(0,Math.trunc(Number(e||0)));return t+` `+(t===1?`second`:`seconds`)}function gE(e){let t=Number(e&&e.period_seconds||0);switch(t){case 3600:return`1 hour`;case 86400:return`1 day`;case 604800:return`1 week`;case 2592e3:return`1 month`;default:return hE(t)}}function _E(e){return String(e&&e.source||``).trim()||`manual`}function vE(e){let t=_E(e).toLowerCase();return t===`manual`?`Created from the dashboard.`:t===`config`?`Loaded from configuration.`:`Budget source: `+t}function yE(e){let t=Number(e&&e.remaining);return Number.isFinite(t)?t<0?hc(Math.abs(t))+` over`:hc(t)+` remaining`:``}var Y=new class{#e=A(M([]));get budgets(){return L(this.#e)}set budgets(e){j(this.#e,e,!0)}#t=A(!0);get budgetsAvailable(){return L(this.#t)}set budgetsAvailable(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get filter(){return L(this.#r)}set filter(e){j(this.#r,e,!0)}#i=A(`subject`);get sortBy(){return L(this.#i)}set sortBy(e){j(this.#i,e,!0)}#a=A(``);get error(){return L(this.#a)}set error(e){j(this.#a,e,!0)}#o=A(!1);get formOpen(){return L(this.#o)}set formOpen(e){j(this.#o,e,!0)}#s=A(!1);get formSubmitting(){return L(this.#s)}set formSubmitting(e){j(this.#s,e,!0)}#c=A(``);get formError(){return L(this.#c)}set formError(e){j(this.#c,e,!0)}#l=A(!1);get editing(){return L(this.#l)}set editing(e){j(this.#l,e,!0)}#u=A(M(OT()));get form(){return L(this.#u)}set form(e){j(this.#u,e,!0)}#d=A(!1);get overrideDialogOpen(){return L(this.#d)}set overrideDialogOpen(e){j(this.#d,e,!0)}#f=A(null);get overridePendingPayload(){return L(this.#f)}set overridePendingPayload(e){j(this.#f,e,!0)}#p=A(null);get overrideExistingBudget(){return L(this.#p)}set overrideExistingBudget(e){j(this.#p,e,!0)}#m=A(``);get resettingKey(){return L(this.#m)}set resettingKey(e){j(this.#m,e,!0)}#h=A(``);get deletingKey(){return L(this.#h)}set deletingKey(e){j(this.#h,e,!0)}#g=A(!1);get resetAllLoading(){return L(this.#g)}set resetAllLoading(e){j(this.#g,e,!0)}#_=null;managementEnabled(){return Os.budgetsVisible()}filteredBudgets(){return XT(this.budgets,this.filter,this.sortBy)}async fetchBudgetsPage(){if(await Os.ensureLoaded(),!this.managementEnabled()){this.budgets=[],this.budgetsAvailable=!1,this.error=``;return}return this.#_||=this.fetchBudgets().finally(()=>{this.#_=null}),this.#_}async fetchBudgets(){this.loading=!0,this.error=``;let e=await ET(`/admin/budgets`,{label:`budgets`,errorFallback:`Unable to load budgets.`,normalize:KT});if(this.loading=!1,e.status!==`stale`){if(e.status===`unavailable`){this.budgetsAvailable=!1,this.budgets=[];return}if(!e.result){this.budgets=[],this.error=e.error;return}if(this.budgetsAvailable=!0,e.status===`error`){this.error=e.error;return}this.budgets=e.items}}openForm(e){if(this.editing=!!e,this.formError=``,e){let t=Number(e.period_seconds||0);this.form={scope:jT(e),subject:MT(e),period:BT(t),period_seconds:t,amount:String(e.amount||``),source:String(e.source||`manual`)}}else this.form=OT();this.formOpen=!0}syncPeriodSeconds(){let e=zT(String(this.form.period||``).trim());e>0&&(this.form.period_seconds=e)}setFormSubject(e){this.form.subject=this.form.scope===`label`?String(e??``):GT(e)}syncScope(){LT(this.form)}closeForm(){this.closeOverrideDialog(),this.formOpen=!1,this.formSubmitting=!1,this.formError=``,this.editing=!1,this.form=OT()}async submitForm(){if(this.formSubmitting)return;let{payload:e,error:t}=ZT(this.form);if(!e){this.formError=t;return}if(!this.editing){let t=HT(this.budgets,e);if(t){this.openOverrideDialog(t,e);return}}await this.saveBudgetPayload(e)}async saveBudgetPayload(e){if(this.formSubmitting||!e)return;this.formSubmitting=!0,this.formError=``;let t=await DT(`/admin/budgets`,`PUT`,QT(e),{label:`save budget`,errorFallback:`Unable to save budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.formSubmitting=!1,t.status!==`stale`){if(t.status===`unavailable`){this.budgetsAvailable=!1,this.formError=t.error;return}if(t.status===`error`){this.formError=t.error;return}this.closeForm(),J.success(`Budget saved.`),this.fetchBudgets()}}openOverrideDialog(e,t){this.overrideExistingBudget=e||null,this.overridePendingPayload=t||null,this.overrideDialogOpen=!0}closeOverrideDialog(){this.overrideDialogOpen=!1,this.overridePendingPayload=null,this.overrideExistingBudget=null}async confirmOverride(){if(!this.overridePendingPayload){this.closeOverrideDialog();return}let e=this.overridePendingPayload;this.closeOverrideDialog(),await this.saveBudgetPayload(e)}async resetBudget(e){if(!e)return;let t=VT(e);if(this.resettingKey===t)return;let n=MT(e)+` `+uE(e);if(!confirm(`Reset budget "`+n+`"?`))return;this.resettingKey=t;let r=await DT(`/admin/budgets/reset-one`,`POST`,eE(e),{label:`reset budget`,errorFallback:`Unable to reset budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.resettingKey=``,r.status!==`stale`){if(r.status===`unavailable`){this.budgetsAvailable=!1,J.error(r.error);return}if(r.status===`error`){J.error(r.error);return}J.success(`Budget reset.`),this.fetchBudgets()}}async deleteBudget(e){if(!e)return;let t=VT(e);if(this.deletingKey===t)return;let n=MT(e)+` `+uE(e);if(!confirm(`Delete budget "`+n+`"? This cannot be undone.`))return;this.deletingKey=t;let r=await DT(`/admin/budgets`,`DELETE`,$T(e),{label:`delete budget`,errorFallback:`Unable to delete budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.deletingKey=``,r.status!==`stale`){if(r.status===`unavailable`){this.budgetsAvailable=!1,J.error(r.error);return}if(r.status===`error`){J.error(r.error);return}this.budgets=KT(r.result.data),J.success(`Budget deleted.`)}}openResetDialog(){Ks.open({title:`Reset Budgets`,titleId:`budgetResetDialogTitle`,inputId:`budget-reset-confirmation`,requiredText:`reset`,confirmLabel:`Reset All Budgets`,icon:go,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.resetAllBudgets()})}async resetAllBudgets(){if(this.resetAllLoading)return;this.resetAllLoading=!0;let e=await DT(`/admin/budgets/reset`,`POST`,{confirmation:`reset`},{label:`reset budgets`,errorFallback:`Unable to reset budgets.`,unavailableStatuses:[]});if(this.resetAllLoading=!1,e.status!==`stale`){if(e.status!==`ok`){Ks.error=e.error;return}Ks.close(),J.success(`Budgets reset.`),Yo.page===`budgets`&&this.fetchBudgets()}}},bE=z(` Edit`,1),xE=z(` `,1),SE=z(`
        Usage
        Period
        `),CE=z(`
        `);function wE(e,t){D(t,!0);let n=va(t,`budgets`,19,()=>[]);function r(e){if(!e)return``;let t=_s.formatTimestamp(e);return!t||t===`-`?``:t+` `+_s.effectiveTimeZoneLabel()}var i=CE();U(i,21,n,e=>VT(e),(e,t)=>{var n=SE(),i=N(n),a=N(i),o=N(a),s=N(o),c=e=>{K(e,{get icon(){return Oo},class:`budget-scope-icon`})},l=k(()=>jT(L(t))===`label`);H(s,e=>{L(l)&&e(c)});var u=F(s);E(o);var d=F(o,2),f=N(d),p=N(f);{let e=k(()=>mE(L(t)));K(p,{get icon(){return L(e)},class:`budget-period-icon`})}var m=F(p,2),h=N(m,!0);E(m),E(f),E(d);var g=F(d,2),_=N(g),v=N(_),y=N(v,!0);E(v),E(_);var b=F(_,2),x=N(b);TT(x,{label:`Edit budget`,class:`budget-action-btn`,onclick:()=>Y.openForm(L(t)),children:(e,t)=>{var n=bE();K(P(n),{get icon(){return uo},class:`budget-action-icon`}),He(2),B(e,n)},$$slots:{default:!0}});var S=F(x,2);{let e=k(()=>Y.resettingKey===VT(L(t))?`Resetting budget`:`Reset budget`),n=k(()=>Y.resettingKey===VT(L(t)));TT(S,{get label(){return L(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>Y.resetBudget(L(t)),get disabled(){return L(n)},children:(e,n)=>{var r=xE(),i=P(r);K(i,{get icon(){return go},class:`budget-action-icon`});var a=F(i,2),o=N(a,!0);E(a),I(e=>V(o,e),[()=>Y.resettingKey===VT(L(t))?`Resetting`:`Reset`]),B(e,r)},$$slots:{default:!0}})}var C=F(S,2);{let e=k(()=>Y.deletingKey===VT(L(t))?`Deleting budget`:`Delete budget`),n=k(()=>Y.deletingKey===VT(L(t)));TT(C,{get label(){return L(e)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>Y.deleteBudget(L(t)),get disabled(){return L(n)},children:(e,n)=>{var r=xE(),i=P(r);K(i,{get icon(){return Ao},class:`budget-action-icon`});var a=F(i,2),o=N(a,!0);E(a),I(e=>V(o,e),[()=>Y.deletingKey===VT(L(t))?`Deleting`:`Delete`]),B(e,r)},$$slots:{default:!0}})}E(b),E(g),E(a);var w=F(a,2),T=N(w),ee=N(T),te=F(N(ee),2),ne=N(te,!0);E(te),E(ee);var re=F(ee,2),ie=N(re);let ae;var oe=F(ie,2),se=N(oe),ce=N(se,!0);E(se);var le=F(se,2),ue=N(le,!0);E(le),E(oe);var de=F(oe,2),fe=N(de),pe=N(fe,!0);E(fe);var me=F(fe,2),he=N(me,!0);E(me),E(de),E(re),E(T);var ge=F(T,2),_e=N(ge),ve=F(N(_e),2),ye=N(ve,!0);E(ve),E(_e);var be=F(_e,2),xe=N(be),Se=F(xe,2),Ce=N(Se),we=N(Ce,!0);E(Ce);var Te=F(Ce,2),Ee=N(Te,!0);E(Te);var De=F(Te,2),Oe=N(De,!0);E(De),E(Se);var ke=F(Se,2),Ae=N(ke),je=N(Ae,!0);E(Ae);var Me=F(Ae,2),Ne=N(Me,!0);E(Me);var Pe=F(Me,2),Fe=N(Pe,!0);E(Pe),E(ke),E(be),E(ge),E(w),E(i),E(n),I((e,t,n,r,i,a,s,c,l,d,p,m,g,_,b,x,S,C,w,T,ee,te,oe,se,le,de,fe,me,ge,_e)=>{W(o,1,`budget-scope-value ${e??``}`,`svelte-1jm56wo`),Vi(o,t),G(o,`title`,n),V(u,` ${r??``}`),W(f,1,`budget-period-label ${i??``}`,`svelte-1jm56wo`),V(h,a),G(v,`title`,s),V(y,c),V(ne,l),G(re,`aria-valuenow`,d),G(re,`aria-label`,p),Vi(re,`--budget-progress: ${m??``}%`),ae=W(ie,1,`budget-bar-fill budget-bar-fill-usage`,null,ae,g),V(ce,_),V(ue,b),V(pe,x),V(he,S),V(ye,C),W(be,1,`budget-bar-track ${w??``}`,`svelte-1jm56wo`),G(be,`aria-valuenow`,T),Vi(be,`--budget-progress: ${ee??``}%`),W(xe,1,`budget-bar-fill budget-bar-fill-period ${te??``}`,`svelte-1jm56wo`),G(Ce,`title`,oe),V(we,se),V(Ee,le),G(De,`title`,de),V(Oe,fe),V(je,me),V(Ne,ge),V(Fe,_e)},[()=>PT(L(t)),()=>jT(L(t))===`label`?`--label-color: `+Xy(MT(L(t))):void 0,()=>NT(L(t))+`: `+MT(L(t)),()=>MT(L(t)),()=>dE(L(t)),()=>uE(L(t)),()=>vE(L(t)),()=>_E(L(t)),()=>cE(L(t)),()=>oE(L(t)),()=>`Budget usage: `+hc(L(t).spent)+` of `+hc(L(t).amount)+`, `+yE(L(t)),()=>oE(L(t)),()=>({"budget-bar-fill-danger":aE(L(t))>=1}),()=>hc(L(t).spent)+` of `+hc(L(t).amount),()=>yE(L(t)),()=>hc(L(t).spent)+` of `+hc(L(t).amount),()=>yE(L(t)),()=>lE(L(t)),()=>pE(L(t)),()=>sE(L(t)),()=>sE(L(t)),()=>fE(L(t)),()=>r(L(t).period_start),()=>_s.formatTimestamp(L(t).period_start),()=>gE(L(t)),()=>r(L(t).period_end),()=>_s.formatTimestamp(L(t).period_end),()=>_s.formatTimestamp(L(t).period_start),()=>gE(L(t)),()=>_s.formatTimestamp(L(t).period_end)]),B(e,n)}),E(i),B(e,i),O()}var TE=z(`

        `,1),EE=z(``),DE=z(``),OE=z(`
        `);function kE(e,t){D(t,!0);let n=va(t,`open`,3,!1),r=va(t,`title`,3,``),i=va(t,`ariaLabel`,3,``),a=va(t,`error`,3,``),o=va(t,`submitting`,3,!1),s=va(t,`submitDisabled`,3,!1),c=va(t,`submitLabel`,3,`Save`),l=va(t,`submittingLabel`,3,`Saving...`),u=va(t,`submitIcon`,3,_o),d=va(t,`cancel`,3,!0),p=va(t,`dialogClass`,3,``),m=va(t,`novalidate`,3,!1),h=va(t,`canClose`,3,()=>!0);function g(){q.dialogOpen||h()()&&t.onclose?.()}Bs(e,{get open(){return n()},variant:`editor`,onclose:g,children:(e,n)=>{var h=OE(),g=N(h),_=N(g),v=N(_),y=N(v),b=e=>{var n=Zr();hi(P(n),()=>t.header),B(e,n)},x=e=>{var n=TE(),i=P(n),a=N(i,!0);E(i);var o=F(i,2),s=e=>{var n=Zr();hi(P(n),()=>t.headerHint),B(e,n)};H(o,e=>{t.headerHint&&e(s)}),I(()=>V(a,r())),B(e,n)};H(y,e=>{t.header?e(b):e(x,-1)}),E(v);var S=F(v,2);{let e=k(()=>`Close `+(i()||r()).toLowerCase());Is(S,{get label(){return L(e)},onclick:()=>t.onclose?.()})}E(_);var C=F(_,2);hi(C,()=>t.children??f);var w=F(C,2),T=e=>{var t=EE(),n=N(t,!0);E(t),I(()=>V(n,a())),B(e,t)};H(w,e=>{a()&&e(T)});var ee=F(w,2),te=N(ee),ne=e=>{var n=DE();R(`click`,n,()=>t.onclose?.()),B(e,n)};H(te,e=>{d()&&e(ne)});var re=F(te,2),ie=e=>{var n=Zr();hi(P(n),()=>t.extraActions),B(e,n)};H(re,e=>{t.extraActions&&e(ie)});var ae=F(re,2),oe=N(ae);K(oe,{get icon(){return u()},class:`form-action-icon`});var se=F(oe,2),ce=N(se,!0);E(se),E(ae),E(ee),E(g),E(h),I(()=>{W(h,1,Pi([`model-editor`,p()])),G(h,`aria-label`,i()||r()),g.noValidate=m(),ae.disabled=o()||s(),V(ce,o()?l():c())}),Br(`submit`,g,e=>{e.preventDefault(),t.onsubmit?.()}),B(e,h)},$$slots:{default:!0}}),O()}Vr([`click`]);var AE=z(`
        `);function jE(e,t){let n=va(t,`label`,3,``);var r=AE(),i=N(r),a=N(i,!0);E(i),hi(F(i,2),()=>t.children??f),E(r),I(()=>{G(i,`for`,t.id),V(a,n())}),B(e,r)}var ME=z(``),NE=z(``),PE=z(``),FE=z(``),IE=z(``),LE=z(``),RE=z(`

        Editing a budget updates its limit only. Use Reset to start a new + budget period.

        `),zE=z(`
        `,1),BE=z(``),VE=z(` `,1);function HE(e,t){D(t,!0);function n(e){Y.setFormSubject(e.target.value),e.target.value=Y.form.subject}var r=VE(),i=P(r);{let e=k(()=>Y.editing?`Edit Budget`:`Create Budget`);kE(i,{get open(){return Y.formOpen},get title(){return L(e)},ariaLabel:`Budget editor`,get error(){return Y.formError},get submitting(){return Y.formSubmitting},submitLabel:`Save Budget`,dialogClass:`budget-editor`,canClose:()=>!Y.overrideDialogOpen,onclose:()=>Y.closeForm(),onsubmit:()=>Y.submitForm(),children:(e,t)=>{var r=zE(),i=P(r),a=N(i);jE(a,{id:`budget-scope`,label:`Scope`,children:(e,t)=>{var n=NE();U(n,21,AT,e=>e.value,(e,t)=>{var n=ME(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n),I(()=>n.disabled=Y.editing),R(`change`,n,()=>Y.syncScope()),Wi(n,()=>Y.form.scope,e=>Y.form.scope=e),B(e,n)},$$slots:{default:!0}});var o=F(a,2);{let e=k(()=>FT(Y.form));jE(o,{id:`budget-subject`,get label(){return L(e)},children:(e,t)=>{var r=PE();ta(r),I(e=>{G(r,`placeholder`,e),na(r,Y.form.subject),r.disabled=Y.editing,G(r,`data-modal-autofocus`,!Y.editing||void 0)},[()=>IT(Y.form)]),R(`input`,r,n),B(e,r)},$$slots:{default:!0}})}var s=F(o,2);jE(s,{id:`budget-period`,label:`Period`,children:(e,t)=>{var n=FE();U(n,21,RT,e=>e.value,(e,t)=>{var n=ME(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n),I(()=>n.disabled=Y.editing),R(`change`,n,()=>Y.syncPeriodSeconds()),Wi(n,()=>Y.form.period,e=>Y.form.period=e),B(e,n)},$$slots:{default:!0}});var c=F(s,2),l=e=>{jE(e,{id:`budget-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=IE();ta(n),I(()=>n.disabled=Y.editing),ua(n,()=>Y.form.period_seconds,e=>Y.form.period_seconds=e),B(e,n)},$$slots:{default:!0}})};H(c,e=>{Y.form.period===`custom`&&e(l)}),jE(F(c,2),{id:`budget-amount`,label:`Amount`,children:(e,t)=>{var n=LE();ta(n),I(()=>G(n,`data-modal-autofocus`,Y.editing||void 0)),ua(n,()=>Y.form.amount,e=>Y.form.amount=e),B(e,n)},$$slots:{default:!0}}),E(i);var u=F(i,2),d=e=>{B(e,RE())};H(u,e=>{Y.editing&&e(d)}),B(e,r)},$$slots:{default:!0}})}Bs(F(i,2),{get open(){return Y.overrideDialogOpen},variant:`auth`,onclose:()=>Y.closeOverrideDialog(),children:(e,t)=>{var n=BE(),r=N(n);Is(F(N(r),2),{label:`Close budget override dialog`,onclick:()=>Y.closeOverrideDialog(),class:`auth-dialog-close`,iconClass:``}),E(r);var i=F(r,2),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s),l=F(c,2),u=N(l);K(u,{get icon(){return _o},class:`form-action-icon`});var d=F(u,2),f=N(d,!0);E(d),E(l),E(s),E(i),E(n),I(e=>{V(o,e),l.disabled=Y.formSubmitting,V(f,Y.formSubmitting?`Saving...`:`Override Budget`)},[()=>nE(Y.overridePendingPayload,Y.overrideExistingBudget)]),Br(`submit`,i,e=>{e.preventDefault(),Y.confirmOverride()}),R(`click`,c,()=>Y.closeOverrideDialog()),B(e,n)},$$slots:{default:!0}}),B(e,r),O()}Vr([`change`,`input`,`click`]);var UE=z(`

        Budgets

        `),WE=z(``),GE=z(`
        Budget management is unavailable.
        `),KE=z(``),qE=z(`
        `),JE=z(`

        No budgets configured yet.

        `),YE=z(`

        No budgets match your filter.

        `),XE=z(`
        `);function ZE(e,t){D(t,!0),kn(()=>{q.refreshTick,Yo.page===`budgets`&&Y.fetchBudgetsPage()});let n=k(()=>Y.filteredBudgets());var r=XE(),i=N(r),a=N(i);tC(N(a),{copyId:`budgets-help-copy`,label:`budgets help`,title:e=>{B(e,UE())},help:e=>{He(),B(e,Xr(`Budgets are evaluated from tracked usage cost records for each user + path subtree. Enforcement runs only when Budget is enabled for the + active workflow.`))},$$slots:{title:!0,help:!0}}),E(a);var o=F(a,2),s=N(o),c=e=>{var t=WE();K(N(t),{get icon(){return po},class:`form-action-icon`}),He(2),E(t),I(()=>t.disabled=Y.formSubmitting),R(`click`,t,()=>Y.openForm()),B(e,t)},l=k(()=>Y.managementEnabled()&&Y.budgetsAvailable&&!q.authError);H(s,e=>{L(l)&&e(c)}),E(o),E(i);var u=F(i,2);Uc(u,{});var d=F(u,2),f=e=>{B(e,GE())},p=k(()=>(!Y.managementEnabled()||!Y.budgetsAvailable)&&!q.authError);H(d,e=>{L(p)&&e(f)});var m=F(d,2),h=e=>{var t=KE(),n=N(t,!0);E(t),I(()=>V(n,Y.error)),B(e,t)};H(m,e=>{Y.error&&!q.authError&&e(h)});var g=F(m,2),_=e=>{CT(e,{label:`Loading budgets...`})};H(g,e=>{Y.loading&&!q.authError&&e(_)});var v=F(g,2),y=e=>{var t=qE(),n=N(t);Ow(N(n),{id:`budget-filter`,placeholder:`Filter by user path, label, or period...`,label:`Filter budgets by user path or period`,get value(){return Y.filter},set value(e){Y.filter=e}}),E(n);var r=F(n,2),i=F(N(r),2),a=N(i);a.value=a.__value=`subject`;var o=F(a);o.value=o.__value=`period`,E(i),E(r),E(t),Wi(i,()=>Y.sortBy,e=>Y.sortBy=e),B(e,t)};H(v,e=>{(Y.budgets.length>0||Y.filter)&&Y.budgetsAvailable&&!q.authError&&!Y.formOpen&&e(y)});var b=F(v,2);HE(b,{});var x=F(b,2),S=e=>{wE(e,{get budgets(){return L(n)}})};H(x,e=>{L(n).length>0&&Y.budgetsAvailable&&!q.authError&&e(S)});var C=F(x,2),w=e=>{B(e,JE())},T=k(()=>Y.budgets.length===0&&!Y.filter&&!Y.loading&&!q.authError&&!Y.error&&Y.budgetsAvailable&&Y.managementEnabled());H(C,e=>{L(T)&&e(w)});var ee=F(C,2),te=e=>{B(e,YE())},ne=k(()=>Y.budgets.length>0&&L(n).length===0&&Y.filter&&!Y.loading&&!q.authError&&!Y.error&&Y.budgetsAvailable&&Y.managementEnabled());H(ee,e=>{L(ne)&&e(te)}),E(r),B(e,r),O()}Vr([`click`]);function QE(){return{scope:`user_path`,subject:`/`,period:`minute`,period_seconds:60,max_requests:``,max_tokens:``,source:`manual`}}function $E(e){let t={user_path:{label:`User path`,chip:`user path`,fieldLabel:`User Path`,placeholder:`/team/alpha`},provider:{label:`Provider`,chip:`provider`,fieldLabel:`Provider Name`,placeholder:`openai`},model:{label:`Model`,chip:`model`,fieldLabel:`Model`,placeholder:`openai/gpt-4o`}};return t[e]||t.user_path}function eD(){return[`user_path`,`provider`,`model`].map(e=>({value:e,label:$E(e).label}))}function tD(e){return String(e&&e.scope||``).trim()||`user_path`}function nD(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function rD(e){return $E(tD(e)).chip}function iD(e){return $E(String(e&&e.scope||``)).fieldLabel}function aD(e){return $E(String(e&&e.scope||``)).placeholder}function oD(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function sD(){return[{value:`minute`,label:`Per minute`},{value:`hour`,label:`Per hour`},{value:`day`,label:`Per day`},{value:`concurrent`,label:`Concurrent (in-flight)`},{value:`custom`,label:`Custom seconds`}]}function cD(e){switch(String(e||``).trim().toLowerCase()){case`minute`:return 60;case`hour`:return 3600;case`day`:return 86400;case`concurrent`:return 0;default:return-1}}function lD(e){switch(Number(e||0)){case 60:return`minute`;case 3600:return`hour`;case 86400:return`day`;case 0:return`concurrent`;default:return`custom`}}function uD(e){let t=String(e&&e.period||``).trim(),n=cD(t);n>=0&&(e.period_seconds=n),t===`concurrent`&&(e.max_tokens=``)}function dD(e){return tD(e)+`:`+nD(e)+`:`+String(e&&e.period_seconds||`0`)}function fD(e){return Number(e&&e.period_seconds||0)===0}function pD(e){return String(e&&e.period_label||``).trim()||lD(Number(e&&e.period_seconds||0))}function mD(e){return String(e&&e.source||``)===`config`?`config`:`manual`}function hD(e){return String(e&&e.source||``)===`config`}function gD(e){let t=Number(e);return Number.isFinite(t)?t.toLocaleString():`0`}function _D(e,t){let n=Number(e),r=Number(t);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0)return 0;let i=Math.round(n/r*100);return Math.min(Math.max(i,0),100)}function vD(e,t){let n=String(t||``).trim().toLowerCase(),r=Array.isArray(e)?e.slice():[],i={user_path:0,provider:1,model:2};return r.sort((e,t)=>{let n=(i[tD(e)]||0)-(i[tD(t)]||0);if(n!==0)return n;let r=nD(e).localeCompare(nD(t));return r===0?Number(e.period_seconds||0)-Number(t.period_seconds||0):r}),n?r.filter(e=>{let t=nD(e).toLowerCase(),r=rD(e).toLowerCase(),i=pD(e).toLowerCase();return t.includes(n)||r.includes(n)||i.includes(n)}):r}function yD(e){return!e||!Array.isArray(e.rate_limits)?[]:e.rate_limits}function bD(e,t,n){let r=String(t||``).trim();return r=e===`provider`||e===`model`?r.toLowerCase():`/`+r.split(`/`).map(e=>e.trim()).filter(Boolean).join(`/`),e+`:`+r+`:`+Number(n||0)}function xD(e,t){return e?bD(t.scope,t.subject,t.limit_key.period_seconds)!==bD(e.scope,e.subject,e.period_seconds):!1}function SD(e){let t=e||{},n=String(t.scope||`user_path`),r=String(t.subject||``).trim();if(n!==`user_path`&&!r)return{error:iD(t)+` is required.`};let i=String(t.period||``)===`concurrent`,a=t.period_seconds;if(a===``||a==null)return{error:`Period seconds is required.`};let o=Number(a);if(!Number.isInteger(o)||o<0||o===0&&!i)return{error:`Period seconds must be a positive integer (0 only for the concurrent period).`};let s=String(t.max_requests===void 0||t.max_requests===null?``:t.max_requests).trim(),c=String(t.max_tokens===void 0||t.max_tokens===null?``:t.max_tokens).trim();if(!s&&!c)return{error:`Set max requests, max tokens, or both.`};if(i&&c)return{error:`Token limits are not valid for the concurrent period.`};let l={scope:n,subject:r||`/`,limit_key:{period_seconds:o}};if(s){let e=Number(s);if(!Number.isInteger(e)||e<=0)return{error:`Max requests must be a positive integer.`};l.max_requests=e}if(c){let e=Number(c);if(!Number.isInteger(e)||e<=0)return{error:`Max tokens must be a positive integer.`};l.max_tokens=e}return{payload:l}}function CD(e,t,n){if(tD(e)!==`model`)return!1;let r=String(nD(e)).toLowerCase(),i=String(n||``).trim().toLowerCase();if(!i)return!1;if(r===i)return!0;let a=String(t||``).trim().toLowerCase();return a?r===a+`/`+i||i.startsWith(a+`/`)&&r===i.slice(a.length+1):!1}function wD(e,t){return tD(e)===`provider`&&String(nD(e)).toLowerCase()===String(t||``).trim().toLowerCase()}function TD(e){let t=e||{},n=String(t.model||``),r=String(t.provider||``);return!r||n.toLowerCase().startsWith(r+`/`)?n:r+`/`+n}function ED(e,t){let n=e||{},r=Array.isArray(t)?t:[],i=[];return n.kind===`model`&&i.push({key:`model`,title:`Model limits`,scope:`model`,subject:TD(n),hint:``,items:r.filter(e=>CD(e,n.provider,n.model))}),i.push({key:`provider`,title:`Provider limits (`+n.provider+`)`,scope:`provider`,subject:n.provider,hint:n.kind===`model`?`Shared by every model routed to this provider.`:``,items:r.filter(e=>wD(e,n.provider))}),i.push({key:`global`,title:`Global limits`,scope:`user_path`,subject:`/`,hint:`Root user-path rules throttle all traffic. Narrower user-path rules also apply, per consumer.`,items:r.filter(e=>tD(e)===`user_path`&&nD(e)===`/`)}),i}function DD(e){return fD(e)?_D(e.in_flight,e.max_requests):Math.max(_D(e.requests_used,e.max_requests),_D(e.tokens_used,e.max_tokens))}function OD(e){return`--rate-limit-pressure: `+DD(e)+`%`}function kD(e){let t=DD(e);return t>=100?`rate-limit-pressure-row rate-limit-pressure-full`:t>=75?`rate-limit-pressure-row rate-limit-pressure-high`:`rate-limit-pressure-row`}function AD(e){return(Array.isArray(e)?e:[]).some(e=>tD(e)===`user_path`&&nD(e)===`/`)}function jD(e,t,n){let r=Array.isArray(e)?e:[];return r.some(e=>CD(e,t,n))?`table-action-btn-active`:r.some(e=>wD(e,t))||AD(r)?`rate-limit-gauge-inherited`:``}function MD(e,t){let n=Array.isArray(e)?e:[];return n.some(e=>wD(e,t))?`table-action-btn-active`:AD(n)?`rate-limit-gauge-inherited`:``}function ND(e,t){let n=`Rate limits for `+e;return t===`table-action-btn-active`?n+` (direct limits configured)`:t?n+` (inherited limits apply)`:n}function PD(e){if(fD(e))return gD(e.in_flight)+` of `+gD(e.max_requests)+` in flight`;let t=[];return e.max_requests!==null&&e.max_requests!==void 0&&t.push(gD(e.requests_used)+`/`+gD(e.max_requests)+` req`),e.max_tokens!==null&&e.max_tokens!==void 0&&t.push(gD(e.tokens_used)+`/`+gD(e.max_tokens)+` tok`),t.join(` · `)}var X=new class{#e=A(M([]));get rateLimits(){return L(this.#e)}set rateLimits(e){j(this.#e,e,!0)}#t=A(!0);get rateLimitsAvailable(){return L(this.#t)}set rateLimitsAvailable(e){j(this.#t,e,!0)}#n=A(!1);get rateLimitsLoading(){return L(this.#n)}set rateLimitsLoading(e){j(this.#n,e,!0)}rateLimitFetchPromise=null;#r=A(``);get rateLimitFilter(){return L(this.#r)}set rateLimitFilter(e){j(this.#r,e,!0)}#i=A(``);get rateLimitError(){return L(this.#i)}set rateLimitError(e){j(this.#i,e,!0)}#a=A(!1);get rateLimitFormOpen(){return L(this.#a)}set rateLimitFormOpen(e){j(this.#a,e,!0)}#o=A(!1);get rateLimitFormSubmitting(){return L(this.#o)}set rateLimitFormSubmitting(e){j(this.#o,e,!0)}#s=A(``);get rateLimitFormError(){return L(this.#s)}set rateLimitFormError(e){j(this.#s,e,!0)}#c=A(!1);get rateLimitEditing(){return L(this.#c)}set rateLimitEditing(e){j(this.#c,e,!0)}rateLimitEditingOriginal=null;rateLimitFormReturnToInspector=!1;#l=A(``);get rateLimitResettingKey(){return L(this.#l)}set rateLimitResettingKey(e){j(this.#l,e,!0)}#u=A(``);get rateLimitDeletingKey(){return L(this.#u)}set rateLimitDeletingKey(e){j(this.#u,e,!0)}#d=A(!1);get rateLimitInspectorOpen(){return L(this.#d)}set rateLimitInspectorOpen(e){j(this.#d,e,!0)}#f=A(M({kind:``,provider:``,model:``,title:``}));get rateLimitInspector(){return L(this.#f)}set rateLimitInspector(e){j(this.#f,e,!0)}#p=A(M(QE()));get rateLimitForm(){return L(this.#p)}set rateLimitForm(e){j(this.#p,e,!0)}rateLimitsEnabled(){return Os.rateLimitsVisible()}defaultRateLimitForm(){return QE()}rateLimitScopeMeta(e){return $E(e)}rateLimitScopeOptions(){return eD()}rateLimitScope(e){return tD(e)}rateLimitSubject(e){return nD(e)}rateLimitScopeLabel(e){return rD(e)}rateLimitSubjectFieldLabel(){return iD(this.rateLimitForm)}rateLimitSubjectPlaceholder(){return aD(this.rateLimitForm)}syncRateLimitScope(){oD(this.rateLimitForm)}rateLimitPeriodOptions(){return sD()}rateLimitPeriodSeconds(e){return cD(e)}rateLimitPeriodFromSeconds(e){return lD(e)}syncRateLimitPeriodSeconds(){uD(this.rateLimitForm)}rateLimitKey(e){return dD(e)}rateLimitIsConcurrent(e){return fD(e)}rateLimitPeriodLabel(e){return pD(e)}rateLimitSourceLabel(e){return mD(e)}rateLimitIsReadOnly(e){return hD(e)}formatRateLimitNumber(e){return gD(e)}rateLimitUsagePercent(e,t){return _D(e,t)}filteredRateLimits(){return vD(this.rateLimits,this.rateLimitFilter)}normalizeRateLimitListPayload(e){return yD(e)}async fetchRateLimitsPage(){if(await Os.ensureLoaded(),!this.rateLimitsEnabled()){this.rateLimits=[],this.rateLimitsAvailable=!1,this.rateLimitError=``;return}return this.rateLimitFetchPromise||=this.fetchRateLimits().finally(()=>{this.rateLimitFetchPromise=null}),this.rateLimitFetchPromise}async fetchRateLimits(){this.rateLimitsLoading=!0,this.rateLimitError=``;let e=await ET(`/admin/rate-limits`,{label:`rate limits`,errorFallback:`Unable to load rate limits.`,normalize:yD});if(this.rateLimitsLoading=!1,e.status!==`stale`){if(e.status===`unavailable`){this.rateLimitsAvailable=!1,this.rateLimits=[];return}if(!e.result){this.rateLimits=[],this.rateLimitError=e.error;return}if(this.rateLimitsAvailable=!0,e.status===`error`){this.rateLimitError=e.error;return}this.rateLimits=e.items}}openRateLimitForm(e){if(this.rateLimitEditing=!!e,this.rateLimitFormError=``,e){let t=Number(e.period_seconds||0);this.rateLimitEditingOriginal={scope:tD(e),subject:nD(e),period_seconds:t},this.rateLimitForm={scope:tD(e),subject:nD(e),period:lD(t),period_seconds:t,max_requests:e.max_requests===null||e.max_requests===void 0?``:String(e.max_requests),max_tokens:e.max_tokens===null||e.max_tokens===void 0?``:String(e.max_tokens),source:String(e.source||`manual`)}}else this.rateLimitEditingOriginal=null,this.rateLimitForm=QE();this.rateLimitFormOpen=!0}closeRateLimitForm(){this.rateLimitFormOpen=!1,this.rateLimitFormSubmitting=!1,this.rateLimitFormError=``,this.rateLimitEditing=!1,this.rateLimitEditingOriginal=null,this.rateLimitForm=QE(),this.rateLimitFormReturnToInspector&&(this.rateLimitFormReturnToInspector=!1,this.rateLimitInspectorOpen=!0)}rateLimitNormalizedIdentity(e,t,n){return bD(e,t,n)}rateLimitIdentityMoved(e){return xD(this.rateLimitEditingOriginal,e)}setRateLimitFormSubject(e){this.rateLimitForm.subject=String(e||``)}rateLimitFormPayload(){return SD(this.rateLimitForm)}async submitRateLimitForm(){if(this.rateLimitFormSubmitting)return;let{payload:e,error:t}=this.rateLimitFormPayload();if(t){this.rateLimitFormError=t;return}let n=this.rateLimitIdentityMoved(e),r=this.rateLimitEditingOriginal;this.rateLimitFormSubmitting=!0,this.rateLimitFormError=``;try{let t=await DT(`/admin/rate-limits`,`PUT`,e,{label:`save rate limit`,errorFallback:`Unable to save rate limit.`,unavailableStatuses:[]});if(t.status===`stale`)return;if(t.status!==`ok`){this.rateLimitFormError=t.error;return}if(this.rateLimits=yD(t.result.data),n&&!await this.deleteMovedRateLimitOriginal(r))return;this.closeRateLimitForm(),J.success(n?`Rate limit moved; live counters restarted.`:`Rate limit saved.`)}finally{this.rateLimitFormSubmitting=!1}}async deleteMovedRateLimitOriginal(e){let t=await DT(`/admin/rate-limits`,`DELETE`,{scope:e.scope,subject:e.subject,limit_key:{period_seconds:Number(e.period_seconds||0)}},{label:`remove the moved rate limit`,errorFallback:`The new rule was saved, but the previous one could not be removed. Delete it manually.`,unavailableStatuses:[]});return t.status===`stale`?!1:t.status===`ok`?(this.rateLimits=yD(t.result.data),!0):(this.rateLimitFormError=t.error,!1)}async deleteRateLimit(e){let t=dD(e);if(this.rateLimitDeletingKey===t)return;this.rateLimitDeletingKey=t;let n=await DT(`/admin/rate-limits`,`DELETE`,{scope:tD(e),subject:nD(e),limit_key:{period_seconds:Number(e.period_seconds||0)}},{label:`delete rate limit`,errorFallback:`Unable to delete rate limit.`,unavailableStatuses:[]});if(this.rateLimitDeletingKey=``,n.status!==`stale`){if(n.status!==`ok`){J.error(n.error);return}this.rateLimits=yD(n.result.data),J.success(`Rate limit deleted.`)}}async resetRateLimit(e){let t=dD(e);if(this.rateLimitResettingKey===t)return;this.rateLimitResettingKey=t;let n=await DT(`/admin/rate-limits/reset-one`,`POST`,{scope:tD(e),subject:nD(e),period_seconds:Number(e.period_seconds||0)},{label:`reset rate limit`,errorFallback:`Unable to reset rate limit.`,unavailableStatuses:[]});if(this.rateLimitResettingKey=``,n.status!==`stale`){if(n.status!==`ok`){J.error(n.error);return}this.rateLimits=yD(n.result.data),J.success(`Rate limit counters reset.`)}}rateLimitInspectorModelID(e){return String(e&&e.model&&e.model.id||``).trim()}openRateLimitInspectorForModel(e){let t=this.rateLimitInspectorModelID(e),n=String(e&&e.provider_name||``).trim().toLowerCase();this.rateLimitInspector={kind:`model`,provider:n,model:t,title:String(e&&e.display_name||t)},this.showRateLimitInspector()}openRateLimitInspectorForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase();this.rateLimitInspector={kind:`provider`,provider:t,model:``,title:String(e&&e.display_name||t)},this.showRateLimitInspector()}showRateLimitInspector(){this.rateLimitInspectorOpen=!0,this.fetchRateLimitsPage()}closeRateLimitInspector(){this.rateLimitInspectorOpen=!1}rateLimitRuleMatchesModel(e,t,n){return CD(e,t,n)}rateLimitRuleMatchesProvider(e,t){return wD(e,t)}rateLimitInspectorQualifiedModel(){return TD(this.rateLimitInspector)}rateLimitInspectorSections(){return ED(this.rateLimitInspector,this.rateLimits)}rateLimitPressurePercent(e){return DD(e)}rateLimitPressureStyle(e){return OD(e)}rateLimitPressureClass(e){return kD(e)}rateLimitGaugeCache={rules:null,states:{}};rateLimitGaugeMemo(e,t){this.rateLimitGaugeCache.rules!==this.rateLimits&&(this.rateLimitGaugeCache={rules:this.rateLimits,states:{}});let n=this.rateLimitGaugeCache.states;return e in n||(n[e]=t()),n[e]}rateLimitGaugeClassForModel(e){let t=this.rateLimitInspectorModelID(e),n=String(e&&e.provider_name||``).trim().toLowerCase(),r=this.rateLimits;return this.rateLimitGaugeMemo(`model:`+n+`/`+t,()=>jD(r,n,t))}rateLimitGaugeClassForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase(),n=this.rateLimits;return this.rateLimitGaugeMemo(`provider:`+t,()=>MD(n,t))}hasGlobalRateLimits(){let e=this.rateLimits;return this.rateLimitGaugeMemo(`global`,()=>AD(e))}rateLimitGaugeTitle(e,t){return ND(e,t)}rateLimitInspectorSummary(e){return PD(e)}openRateLimitFormFromInspector(e,t,n){this.rateLimitInspectorOpen=!1,this.rateLimitFormReturnToInspector=!0,this.openRateLimitForm(n||void 0),n||(this.rateLimitForm.scope=e,this.rateLimitForm.subject=t)}},FD=z(``),ID=z(``),LD=z(``),RD=z(``),zD=z(``),BD=z(``),VD=z(``),HD=z(`

        Scope, subject, and period identify the rule: changing any of them + moves the rule to a new key and restarts its live counters.

        `),UD=z(`

        A user path rule limits the whole subtree; provider and model rules cap + all traffic routed there and make load balancing skip the target while + it is saturated. One shared counter per rule. Leave a field empty to + skip that limit. Token limits require usage tracking.

        `,1);function WD(e,t){D(t,!0);{let t=k(()=>X.rateLimitEditing?`Edit Rate Limit`:`Create Rate Limit`);kE(e,{get open(){return X.rateLimitFormOpen},get title(){return L(t)},ariaLabel:`Rate limit editor`,get error(){return X.rateLimitFormError},get submitting(){return X.rateLimitFormSubmitting},submitLabel:`Save Rate Limit`,dialogClass:`budget-editor`,novalidate:!0,onclose:()=>X.closeRateLimitForm(),onsubmit:()=>X.submitRateLimitForm(),children:(e,t)=>{var n=UD(),r=P(n),i=N(r);jE(i,{id:`rate-limit-scope`,label:`Scope`,children:(e,t)=>{var n=ID();U(n,21,()=>X.rateLimitScopeOptions(),e=>e.value,(e,t)=>{var n=FD(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n),R(`change`,n,()=>X.syncRateLimitScope()),Wi(n,()=>X.rateLimitForm.scope,e=>X.rateLimitForm.scope=e),B(e,n)},$$slots:{default:!0}});var a=F(i,2);{let e=k(()=>X.rateLimitSubjectFieldLabel());jE(a,{id:`rate-limit-subject`,get label(){return L(e)},children:(e,t)=>{var n=LD();ta(n),I(e=>{G(n,`placeholder`,e),G(n,`data-modal-autofocus`,!X.rateLimitEditing||void 0),na(n,X.rateLimitForm.subject)},[()=>X.rateLimitSubjectPlaceholder()]),R(`input`,n,e=>X.setRateLimitFormSubject(e.currentTarget.value)),B(e,n)},$$slots:{default:!0}})}var o=F(a,2);jE(o,{id:`rate-limit-period`,label:`Period`,children:(e,t)=>{var n=RD();U(n,21,()=>X.rateLimitPeriodOptions(),e=>e.value,(e,t)=>{var n=FD(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n),R(`change`,n,()=>X.syncRateLimitPeriodSeconds()),Wi(n,()=>X.rateLimitForm.period,e=>X.rateLimitForm.period=e),B(e,n)},$$slots:{default:!0}});var s=F(o,2),c=e=>{jE(e,{id:`rate-limit-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=zD();ta(n),ua(n,()=>X.rateLimitForm.period_seconds,e=>X.rateLimitForm.period_seconds=e),B(e,n)},$$slots:{default:!0}})};H(s,e=>{X.rateLimitForm.period===`custom`&&e(c)});var l=F(s,2);{let e=k(()=>X.rateLimitForm.period===`concurrent`?`Max In-Flight Requests`:`Max Requests`);jE(l,{id:`rate-limit-max-requests`,get label(){return L(e)},children:(e,t)=>{var n=BD();ta(n),I(()=>G(n,`data-modal-autofocus`,X.rateLimitEditing?!0:void 0)),ua(n,()=>X.rateLimitForm.max_requests,e=>X.rateLimitForm.max_requests=e),B(e,n)},$$slots:{default:!0}})}var u=F(l,2),d=e=>{jE(e,{id:`rate-limit-max-tokens`,label:`Max Tokens`,children:(e,t)=>{var n=VD();ta(n),ua(n,()=>X.rateLimitForm.max_tokens,e=>X.rateLimitForm.max_tokens=e),B(e,n)},$$slots:{default:!0}})};H(u,e=>{X.rateLimitForm.period!==`concurrent`&&e(d)}),E(r);var f=F(r,4),p=e=>{B(e,HD())};H(f,e=>{X.rateLimitEditing&&e(p)}),B(e,n)},$$slots:{default:!0}})}O()}Vr([`change`,`input`]);var GD=z(` `),KD=z(` Edit`,1),qD=z(` `,1),JD=z(`
        In-flight
        `),YD=z(`
        Requests
        `),XD=z(`
        Tokens
        `),ZD=z(`
        `),QD=z(`
        `);function $D(e,t){D(t,!0);var n=QD();U(n,21,()=>t.rules,e=>X.rateLimitKey(e),(e,t)=>{var n=ZD(),r=N(n),i=N(r),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s),l=e=>{var n=GD(),r=N(n);{let e=k(()=>X.rateLimitScope(L(t))===`provider`?bo:Pa);K(r,{get icon(){return L(e)},class:`budget-period-icon`})}var i=F(r,2),a=N(i,!0);E(i),E(n),I((e,t)=>{G(n,`title`,e),V(a,t)},[()=>`Rule scope: `+X.rateLimitScopeLabel(L(t)),()=>X.rateLimitScopeLabel(L(t))]),B(e,n)},u=k(()=>X.rateLimitScope(L(t))!==`user_path`);H(c,e=>{L(u)&&e(l)});var d=F(c,2),f=N(d);{let e=k(()=>X.rateLimitIsConcurrent(L(t))?ja:ko);K(f,{get icon(){return L(e)},class:`budget-period-icon`})}var p=F(f,2),m=N(p,!0);E(p),E(d),E(s);var h=F(s,2),g=N(h),_=N(g),v=N(_,!0);E(_),E(g);var y=F(g,2),b=N(y),x=e=>{TT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitForm(L(t)),children:(e,t)=>{var n=KD();K(P(n),{get icon(){return uo},class:`budget-action-icon`}),He(2),B(e,n)},$$slots:{default:!0}})},S=k(()=>!X.rateLimitIsReadOnly(L(t)));H(b,e=>{L(S)&&e(x)});var C=F(b,2);{let e=k(()=>X.rateLimitResettingKey===X.rateLimitKey(L(t))?`Resetting counters`:`Reset counters`),n=k(()=>X.rateLimitResettingKey===X.rateLimitKey(L(t)));TT(C,{get label(){return L(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>X.resetRateLimit(L(t)),get disabled(){return L(n)},children:(e,n)=>{var r=qD(),i=P(r);K(i,{get icon(){return go},class:`budget-action-icon`});var a=F(i,2),o=N(a,!0);E(a),I(e=>V(o,e),[()=>X.rateLimitResettingKey===X.rateLimitKey(L(t))?`Resetting`:`Reset`]),B(e,r)},$$slots:{default:!0}})}var w=F(C,2),T=e=>{{let n=k(()=>X.rateLimitDeletingKey===X.rateLimitKey(L(t))?`Deleting rate limit`:`Delete rate limit`),r=k(()=>X.rateLimitDeletingKey===X.rateLimitKey(L(t)));TT(e,{get label(){return L(n)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>X.deleteRateLimit(L(t)),get disabled(){return L(r)},children:(e,n)=>{var r=qD(),i=P(r);K(i,{get icon(){return Ao},class:`budget-action-icon`});var a=F(i,2),o=N(a,!0);E(a),I(e=>V(o,e),[()=>X.rateLimitDeletingKey===X.rateLimitKey(L(t))?`Deleting`:`Delete`]),B(e,r)},$$slots:{default:!0}})}},ee=k(()=>!X.rateLimitIsReadOnly(L(t)));H(w,e=>{L(ee)&&e(T)}),E(y),E(h),E(i);var te=F(i,2),ne=N(te),re=e=>{var n=JD(),r=N(n),i=F(N(r),2),a=N(i,!0);E(i),E(r);var o=F(r,2),s=N(o);let c;var l=F(s,2),u=N(l),d=N(u,!0);E(u),E(l),E(o),E(n),I((e,t,n,r,i,l)=>{V(a,e),G(o,`aria-valuenow`,t),G(o,`aria-label`,n),Vi(o,r),c=W(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),V(d,l)},[()=>X.rateLimitUsagePercent(L(t).in_flight,L(t).max_requests)+`%`,()=>X.rateLimitUsagePercent(L(t).in_flight,L(t).max_requests),()=>`In-flight requests: `+X.formatRateLimitNumber(L(t).in_flight)+` of `+X.formatRateLimitNumber(L(t).max_requests),()=>`--budget-progress: `+X.rateLimitUsagePercent(L(t).in_flight,L(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(L(t).in_flight,L(t).max_requests)>=100}),()=>X.formatRateLimitNumber(L(t).in_flight)+` of `+X.formatRateLimitNumber(L(t).max_requests)+` in flight`]),B(e,n)},ie=k(()=>X.rateLimitIsConcurrent(L(t)));H(ne,e=>{L(ie)&&e(re)});var ae=F(ne,2),oe=e=>{var n=YD(),r=N(n),i=F(N(r),2),a=N(i,!0);E(i),E(r);var o=F(r,2),s=N(o);let c;var l=F(s,2),u=N(l),d=N(u,!0);E(u);var f=F(u,2),p=N(f,!0);E(f),E(l),E(o),E(n),I((e,t,n,r,i,l,u)=>{V(a,e),G(o,`aria-valuenow`,t),G(o,`aria-label`,n),Vi(o,r),c=W(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),V(d,l),V(p,u)},[()=>X.rateLimitUsagePercent(L(t).requests_used,L(t).max_requests)+`%`,()=>X.rateLimitUsagePercent(L(t).requests_used,L(t).max_requests),()=>`Requests used: `+X.formatRateLimitNumber(L(t).requests_used)+` of `+X.formatRateLimitNumber(L(t).max_requests),()=>`--budget-progress: `+X.rateLimitUsagePercent(L(t).requests_used,L(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(L(t).requests_used,L(t).max_requests)>=100}),()=>X.formatRateLimitNumber(L(t).requests_used)+` of `+X.formatRateLimitNumber(L(t).max_requests)+` requests`,()=>X.formatRateLimitNumber(L(t).requests_remaining)+` left`]),B(e,n)},se=k(()=>!X.rateLimitIsConcurrent(L(t))&&L(t).max_requests);H(ae,e=>{L(se)&&e(oe)});var ce=F(ae,2),le=e=>{var n=XD(),r=N(n),i=F(N(r),2),a=N(i,!0);E(i),E(r);var o=F(r,2),s=N(o);let c;var l=F(s,2),u=N(l),d=N(u,!0);E(u);var f=F(u,2),p=N(f,!0);E(f),E(l),E(o),E(n),I((e,t,n,r,i,l,u)=>{V(a,e),G(o,`aria-valuenow`,t),G(o,`aria-label`,n),Vi(o,r),c=W(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),V(d,l),V(p,u)},[()=>X.rateLimitUsagePercent(L(t).tokens_used,L(t).max_tokens)+`%`,()=>X.rateLimitUsagePercent(L(t).tokens_used,L(t).max_tokens),()=>`Tokens used: `+X.formatRateLimitNumber(L(t).tokens_used)+` of `+X.formatRateLimitNumber(L(t).max_tokens),()=>`--budget-progress: `+X.rateLimitUsagePercent(L(t).tokens_used,L(t).max_tokens)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(L(t).tokens_used,L(t).max_tokens)>=100}),()=>X.formatRateLimitNumber(L(t).tokens_used)+` of `+X.formatRateLimitNumber(L(t).max_tokens)+` tokens`,()=>X.formatRateLimitNumber(L(t).tokens_remaining)+` left`]),B(e,n)},ue=k(()=>!X.rateLimitIsConcurrent(L(t))&&L(t).max_tokens);H(ce,e=>{L(ue)&&e(le)}),E(te),E(r),E(n),I((e,t,n,r,i)=>{G(a,`title`,e),V(o,t),V(m,n),G(_,`title`,r),V(v,i)},[()=>X.rateLimitScopeLabel(L(t))+`: `+X.rateLimitSubject(L(t)),()=>X.rateLimitSubject(L(t)),()=>X.rateLimitPeriodLabel(L(t)),()=>X.rateLimitIsReadOnly(L(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>X.rateLimitSourceLabel(L(t))]),B(e,n)}),E(n),B(e,n),O()}var eO=z(`

        Rate Limits

        `),tO=z(``),nO=z(`
        Rate limit management is unavailable.
        `),rO=z(``),iO=z(`
        `),aO=z(`

        No rate limits configured yet.

        `),oO=z(`

        No rate limits match your filter.

        `),sO=z(`
        `);function cO(e,t){D(t,!0),kn(()=>{q.refreshTick,Yo.page===`rate-limits`&&X.fetchRateLimitsPage()});let n=k(()=>X.filteredRateLimits());var r=sO(),i=N(r),a=N(i);tC(N(a),{copyId:`rate-limits-help-copy`,label:`rate limits help`,text:`Rate limits cap requests, tokens, and in-flight concurrency for a user path subtree, a provider, or a model. Consumer (user path) breaches return 429 with Retry-After and x-ratelimit-* headers; saturated providers and models are skipped by load balancing and failover while capacity exists elsewhere. Counters are per gateway instance and reset on restart; token limits need usage tracking.`,title:e=>{B(e,eO())},$$slots:{title:!0}}),E(a);var o=F(a,2),s=N(o),c=e=>{var t=tO();K(N(t),{get icon(){return po},class:`form-action-icon`}),He(2),E(t),I(()=>t.disabled=X.rateLimitFormSubmitting),R(`click`,t,()=>X.openRateLimitForm()),B(e,t)},l=k(()=>X.rateLimitsEnabled()&&X.rateLimitsAvailable&&!q.authError);H(s,e=>{L(l)&&e(c)}),E(o),E(i);var u=F(i,2);Uc(u,{});var d=F(u,2),f=e=>{B(e,nO())},p=k(()=>(!X.rateLimitsEnabled()||!X.rateLimitsAvailable)&&!q.authError);H(d,e=>{L(p)&&e(f)});var m=F(d,2),h=e=>{var t=rO(),n=N(t,!0);E(t),I(()=>V(n,X.rateLimitError)),B(e,t)};H(m,e=>{X.rateLimitError&&!q.authError&&e(h)});var g=F(m,2),_=e=>{CT(e,{label:`Loading rate limits...`})};H(g,e=>{X.rateLimitsLoading&&!q.authError&&e(_)});var v=F(g,2),y=e=>{var t=iO(),n=N(t);Ow(N(n),{id:`rate-limit-filter`,placeholder:`Filter by subject, scope, or period...`,label:`Filter rate limits by subject, scope, or period`,get value(){return X.rateLimitFilter},set value(e){X.rateLimitFilter=e}}),E(n),E(t),B(e,t)};H(v,e=>{(X.rateLimits.length>0||X.rateLimitFilter)&&X.rateLimitsAvailable&&!q.authError&&!X.rateLimitFormOpen&&e(y)});var b=F(v,2);WD(b,{});var x=F(b,2),S=e=>{$D(e,{get rules(){return L(n)}})};H(x,e=>{L(n).length>0&&X.rateLimitsAvailable&&!q.authError&&e(S)});var C=F(x,2),w=e=>{B(e,aO())},T=k(()=>X.rateLimits.length===0&&!X.rateLimitFilter&&!X.rateLimitsLoading&&!q.authError&&!X.rateLimitError&&X.rateLimitsAvailable&&X.rateLimitsEnabled());H(C,e=>{L(T)&&e(w)});var ee=F(C,2),te=e=>{B(e,oO())},ne=k(()=>X.rateLimits.length>0&&L(n).length===0&&X.rateLimitFilter&&!X.rateLimitsLoading&&!q.authError&&!X.rateLimitError&&X.rateLimitsAvailable&&X.rateLimitsEnabled());H(ee,e=>{L(ne)&&e(te)}),E(r),B(e,r),O()}Vr([`click`]);function lO(e){return String(e||``).trim().toLowerCase()}function uO(e){if(!e)return``;let t=String(e.selector||``).trim();if(t)return t;if(!e.model||!e.model.id)return``;let n=String(e.model.id||``).trim(),r=String(e.provider_name||``).trim();if(r)return r+`/`+n;let i=String(e.provider_type||``).trim();return!i||n.includes(`/`)?n:i+`/`+n}function dO(e,t,n,r){let i=new Set,a=String(e||``).trim().toLowerCase(),o=String(t||``).trim().toLowerCase(),s=String(n||``).trim().toLowerCase(),c=String(r||``).trim().toLowerCase();if(c&&i.add(c),!a)return i;i.add(a),s&&i.add(s+`/`+a),o&&!a.includes(`/`)&&i.add(o+`/`+a);let l=a.split(`/`);return l.length===2&&l[1]&&i.add(l[1]),i}function fO(e){return dO(e&&e.model?e.model.id:``,e?e.provider_type:``,e?e.provider_name:``,e?e.selector:``)}function pO(e){let t=new Set,n=String(e.resolved_model||``).trim().toLowerCase(),r=String(e.target_model||``).trim().toLowerCase(),i=String(e.target_provider||``).trim().toLowerCase();if(n){t.add(n);let e=n.split(`/`);e.length===2&&e[1]&&t.add(e[1])}if(r){t.add(r);let e=r.split(`/`);e.length===2&&e[1]&&t.add(e[1])}return r&&i&&t.add(i+`/`+r),t}function mO(e){if(!e)return``;let t=String(e.provider||``).trim(),n=String(e.model||``).trim();return!t||!n||n===t||n.startsWith(t+`/`)?n:t+`/`+n}function hO(e){if(e===``||e==null)return null;let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function gO(e,t){let n={model:e},r=hO(t);return r!==null&&(n.weight=r),n}function _O(e){let t=Array.isArray(e)?e:[],n=[];for(let e of t){let t=String(e&&e.model||``).trim();t&&n.push(gO(t,e&&e.weight))}return n}function vO(e){switch(String(e||``).toLowerCase()){case`cost`:return`lowest cost`;case`round_robin`:case``:return`round robin`;default:return e}}var yO={round_robin:`Round-robin (rotate across targets; honors weights)`,cost:`Lowest cost (cheapest target per request)`,adaptive:`Adaptive (target chosen by the registered routing extension)`};function bO(e,t){let n=Array.isArray(e)?[...e]:[],r=String(t||``).trim().toLowerCase();return r&&!n.includes(r)&&n.push(r),n.map(e=>({value:e,label:yO[e]||e}))}function xO(e){let t=Array.isArray(e.targets)?e.targets:[],n=t.length>0?t[0]:{},r=t.map(e=>{let t={provider:e.provider||``,model:e.model||``};return e.weight&&(t.weight=e.weight),t});return{name:e.source,target_provider:n.provider||``,target_model:n.model||``,targets:r,strategy:e.strategy||``,session_affinity:e.session_affinity!==!1,description:e.description||``,enabled:e.enabled!==!1,managed:!!e.managed,valid:!!e.valid,resolved_model:e.resolved_model||``,provider_type:e.provider_type||``,user_paths:Array.isArray(e.user_paths)?e.user_paths:[]}}function SO(e){let t=Array.isArray(e)?e:[],n=[],r=[];for(let e of t)!e||typeof e!=`object`||(e.kind===`redirect`?n.push(xO(e)):e.kind===`policy`&&r.push({selector:e.source,provider_name:e.provider_name||``,model:e.model||``,user_paths:Array.isArray(e.user_paths)?e.user_paths:[],description:e.description||``,enabled:e.enabled!==!1,managed:!!e.managed,scope_kind:e.scope_kind||``}));return{aliases:n,policies:r}}function CO(e){if(!e)return`—`;let t=Array.isArray(e.targets)?e.targets:[];return t.length>1?t.length+` targets · `+vO(e.strategy):e.resolved_model?e.resolved_model:e.target_provider?e.target_provider+`/`+e.target_model:e.target_model||`—`}function wO(e){return e?e.enabled===!1?`is-disabled`:e.valid?`is-valid`:`is-invalid`:`is-invalid`}function TO(e){return e?e.enabled===!1?`Disabled`:e.valid?`Active`:`Invalid`:`Invalid`}function EO(e){return Array.isArray(e)&&e.length>0&&e.indexOf(`/`)===-1}function DO(e,t){return!t||!e?``:e.effective_enabled===!1?`is-disabled`:EO(e.user_paths)?`is-restricted`:`is-enabled`}function OO(e){if(!e)return``;let t=[];e.effective_enabled===!1&&t.push(e.default_enabled===!1?`Disabled by default`:`Disabled`);let n=Array.isArray(e.user_paths)?e.user_paths:[];return n.length>0&&t.push(`Allowed for `+n.join(`, `)),t.join(` · `)}function kO({models:e,aliases:t,virtualModelsAvailable:n,activeCategory:r}){let i=Array.isArray(e)?e:[],a=Array.isArray(t)?t:[],o=new Map;if(n)for(let e of a){let t=lO(e&&e.name);!t||e.enabled===!1||!e.valid||o.set(t,e)}let s=new Map,c=i.map(e=>{let t=uO(e),n=null;for(let t of fO(e))s.has(t)||s.set(t,e),!n&&o.has(t)&&(n=o.get(t));let r=e&&e.access?e.access:null;return{key:`model:`+t,display_name:t,secondary_name:``,provider_name:e.provider_name||``,provider_type:e.provider_type||``,model:e.model,selector:e.selector||``,is_alias:!1,alias:null,access:r,masking_alias:n,has_virtual_model:!!(n||r&&r.override),alias_state_class:``,alias_state_text:``}});if(!n)return c;for(let e of a){let t=s.get(lO(e&&e.name));if(e&&e.enabled!==!1&&e.valid&&t)continue;let n=null;for(let t of pO(e))if(n=s.get(t)||null,n)break;!n&&r&&r!==`all`||c.push({key:`alias:`+e.name,display_name:e.name,secondary_name:CO(e),provider_name:n&&n.provider_name||``,provider_type:n?n.provider_type||e.provider_type||``:e.provider_type||``,model:n?n.model:{id:e.name,object:`model`},selector:``,is_alias:!0,alias:e,access:null,masking_alias:null,source_model_exists:!!t,has_virtual_model:!0,alias_state_class:wO(e),alias_state_text:TO(e)})}return c.sort((e,t)=>e.is_alias===t.is_alias?String(e.display_name||``).localeCompare(String(t.display_name||``)):e.is_alias?-1:1)}function AO(e,t){if(!t)return e;let n=String(t).toLowerCase();return e.filter(e=>[e.display_name,e.secondary_name,e.provider_name,e.provider_type,e.model&&e.model.owned_by,e.alias&&e.alias.description,e.alias&&e.alias_state_text,e.model&&e.model.metadata&&e.model.metadata.modes?e.model.metadata.modes.join(`,`):``,e.model&&e.model.metadata&&e.model.metadata.categories?e.model.metadata.categories.join(`,`):``].some(e=>String(e||``).toLowerCase().includes(n)))}function jO(e,t){return String(e||``).trim()||String(t||``).trim()||`Unassigned`}function MO(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return!r||r===n?``:r}function NO(e){let t=String(e||``).trim();return t?t+`/`:``}function PO(e){let t=Array.isArray(e)?e:[],n=t.filter(e=>e&&!e.is_alias).length,r=t.filter(e=>e&&e.is_alias).length,i=[];return n>0&&i.push(n+(n===1?` model`:` models`)),r>0&&i.push(r+(r===1?` alias`:` aliases`)),i.join(` · `)}function FO(e,t,n){let r=String(t||``).trim(),i=String(n||``).trim();for(let t of Array.isArray(e)?e:[]){let e=String(t&&t.provider_name||``).trim(),n=String(t&&t.provider_type||``).trim();if(!(r&&e!==r)&&!(!r&&i&&n!==i)&&t&&t.access)return t.access.default_enabled!==!1}return!0}function IO(e){for(let t of Array.isArray(e)?e:[])if(t&&t.access)return t.access.default_enabled!==!1;return!0}function LO(e,t){let n=String(t||``).trim();if(!n)return null;for(let t of Array.isArray(e)?e:[])if(String(t&&t.selector||``).trim()===n)return t;return null}function RO(e,t,n,r){let i=NO(t),a=r&&r.get(`/`)||null,o=i&&r&&r.get(i)||null,s=FO(e,t,n),c=o||a,l=c&&Array.isArray(c.user_paths)?Array.from(new Set(c.user_paths)).sort():[];return{selector:i,default_enabled:s,effective_enabled:c?c.enabled!==!1:s,user_paths:l,override:o}}function zO(e,t,n){if(!Array.isArray(e)||e.length===0)return[];let r=new Map;for(let e of Array.isArray(n)?n:[]){let t=String(e&&e.selector||``).trim();t&&r.set(t,e)}let i=[],a=new Map;for(let t of e){if(t&&t.is_alias){i.push(t);continue}let e=String(t&&t.provider_name||``).trim(),n=String(t&&t.provider_type||``).trim(),r=`provider-group:`+(e||n||`unassigned`);a.has(r)||a.set(r,{key:r,provider_name:e,provider_type:n,display_name:jO(e,n),type_label:MO(e,n),rows:[]});let o=a.get(r);!o.provider_name&&e&&(o.provider_name=e),!o.provider_type&&n&&(o.provider_type=n),o.display_name=jO(o.provider_name,o.provider_type),o.type_label=MO(o.provider_name,o.provider_type),o.rows.push(t)}let o=Array.from(a.values()).map(e=>{let n=RO(t,e.provider_name,e.provider_type,r);return{...e,access:n,access_summary:OO(n),item_count_label:PO(e.rows)}}).sort((e,t)=>String(e.display_name||``).localeCompare(String(t.display_name||``)));return i.length>0&&o.unshift({key:`virtual-model-group`,is_virtual_models:!0,provider_name:``,provider_type:``,display_name:`Virtual models`,type_label:``,rows:i,access:{selector:``},access_summary:``,item_count_label:PO(i)}),o}function BO(e,t){let n=LO(t,`/`),r=IO(e),i=n&&Array.isArray(n.user_paths)?n.user_paths:[];return{key:`scope-global`,is_alias:!1,display_name:`all providers and models`,access:{selector:`/`,default_enabled:r,effective_enabled:n?n.enabled!==!1:r,user_paths:i,override:n}}}function VO(e){return e?String(e.access&&e.access.selector||``).trim()||String(e.override_selector||``).trim()||uO(e):``}function HO(e){if(!e)return[];let t=[];return e.is_alias?t.push(`alias-row`,wO(e.alias)):e.has_virtual_model&&t.push(`alias-row`,`is-valid`),!e.is_alias&&e.masking_alias&&t.push(`masked-model-row`),!e.is_alias&&e.access&&e.access.effective_enabled===!1&&t.push(`model-access-disabled-row`),t}function UO(e){return!!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)}function WO(e){return!!(e&&!e.is_alias&&e.masking_alias&&e.masking_alias.name&&!e.masking_alias.managed)}function GO(e){return e&&e.is_alias&&e.alias&&e.alias.name?`alias-row-`+String(e.alias.name).replace(/[^a-zA-Z0-9_-]+/g,`-`):``}function KO(e){return e?e.is_alias?!!(e.alias&&e.alias.managed):!!(e.access&&e.access.override&&e.access.override.managed||e.masking_alias&&e.masking_alias.managed):!1}function qO(e){return!!(e&&e.override)}function JO(e){return e?`table-action-btn-active`:``}function YO(e,t){let n=`Edit `+String(e||`model access`);return t?n+` (virtual model exists)`:n}function XO(){return{source:``,target_model:``,target_weight:1,targets:[],strategy:`round_robin`,session_affinity:!0,user_paths:``,description:``,enabled:!0}}function ZO(e){return String(e&&e.target_model||``).trim()!==``}function QO(e){return String(e&&e.target_model||``).trim()?!0:_O(e&&e.targets).length>0}function $O(e){return!!e&&Array.isArray(e.targets)&&e.targets.length>0}function ek(e){return $O(e)&&String(e&&e.strategy||``).toLowerCase()!==`cost`}function tk(e){let t=Array.isArray(e.targets)?e.targets:[];if(t.length>0){let n=t.shift();e.target_model=n.model||``,e.target_weight=n.weight||1;return}e.target_model=``,e.target_weight=1}function nk(e){let t=Array.isArray(e&&e.targets)?e.targets:[];return t.length>0?{primaryModel:mO(t[0]),primaryWeight:t[0].weight||1,extraTargets:t.slice(1).map(e=>({model:mO(e),weight:e.weight||1}))}:{primaryModel:e&&e.target_provider?e.target_provider+`/`+e.target_model:e&&e.target_model||``,primaryWeight:1,extraTargets:[]}}function rk(e){return String(e||``).split(/\r?\n|,/).map(e=>String(e||``).trim()).filter(Boolean)}function ik(e,t,n){let r=String(e&&e.source||``).trim(),i=String(e&&e.target_model||``).trim(),a=_O(e&&e.targets),o=QO(e),s=String(t||``).trim(),c=n===`edit`&&!!s&&r!==s,l={source:r,user_paths:rk(e&&e.user_paths),description:String(e&&e.description||``).trim(),enabled:!!(e&&e.enabled)};if(c&&(l.old_source=s),o){let t=[];if(i&&t.push(gO(i,e.target_weight)),t.push(...a),t.length>1){let n=e.strategy||`round_robin`;l.targets=n===`cost`?t.map(e=>({model:e.model})):t,l.strategy=n,e&&e.session_affinity===!1&&(l.session_affinity=!1)}else l.target_model=t[0].model}return{payload:l,source:r,isRedirect:o,isRename:c}}function ak(e){let t={source:e.name,description:String(e.description||``).trim(),user_paths:Array.isArray(e.user_paths)?e.user_paths:[],enabled:e.enabled===!1},n=Array.isArray(e.targets)?e.targets:[];return n.length>1?(t.strategy=e.strategy||`round_robin`,e.session_affinity===!1&&(t.session_affinity=!1),t.targets=t.strategy===`cost`?n.map(e=>({model:mO(e)})):n.map(e=>gO(mO(e),e.weight))):n.length===1?t.target_model=mO(n[0]):t.target_model=e.target_provider?e.target_provider+`/`+e.target_model:e.target_model,t}function ok(e,t,n){let r=n||{},i=r.effective_enabled===!1,a=t&&Array.isArray(t.user_paths)?t.user_paths:[],o=`PUT`,s;return i===!1?s={source:e,enabled:!1,user_paths:a}:t&&a.length===0&&r.default_enabled!==!1?(o=`DELETE`,s={source:e}):s={source:e,enabled:!0,user_paths:a},{method:o,payload:s,desired:i}}function sk(e,t,n){let r=Math.max(1,Number(t||75)),i=Math.min(n,e+r);return{limit:i,rendering:ikO({models:Vc.models,aliases:this.aliases,virtualModelsAvailable:this.virtualModelsAvailable,activeCategory:Vc.activeCategory}));get displayModels(){return L(this.#T)}set displayModels(e){j(this.#T,e)}#E=k(()=>zO(this.displayModels,Vc.models,this.modelOverrideViews));get displayModelGroups(){return L(this.#E)}set displayModelGroups(e){j(this.#E,e)}#D=k(()=>AO(this.displayModels,Vc.filter));get filteredDisplayModels(){return L(this.#D)}set filteredDisplayModels(e){j(this.#D,e)}#O=k(()=>{let e=this.filteredDisplayModels,t=Math.max(0,Math.min(Number(this.modelRenderLimit||0),e.length));return!Vc.filter&&t>=this.displayModels.length?this.displayModelGroups:zO(e.slice(0,t),Vc.models,this.modelOverrideViews)});get filteredDisplayModelGroups(){return L(this.#O)}set filteredDisplayModelGroups(e){j(this.#O,e)}#k=k(()=>BO(Vc.models,this.modelOverrideViews));get globalScopeRow(){return L(this.#k)}set globalScopeRow(e){j(this.#k,e)}modelsBusy(){return!!(Vc.loading||this.modelsRendering)}modelLoadingText(){if(Vc.loading)return this.displayModels.length>0?`Refreshing models...`:`Loading models...`;let e=this.filteredDisplayModels.length;return`Rendering models... `+Math.min(Number(this.modelRenderLimit||0),e)+` / `+e}restartModelRendering(e){let t=++this.#a,n=ck(this.modelRenderBatchSize,e);this.modelRenderLimit=n.limit,this.modelsRendering=n.rendering,n.rendering&&this.#A(t)}stopModelRendering(){this.#a++,this.modelsRendering=!1}#A(e){let t=()=>{if(e!==this.#a)return;let t=sk(this.modelRenderLimit,this.modelRenderBatchSize,this.filteredDisplayModels.length);this.modelRenderLimit=t.limit,this.modelsRendering=t.rendering,t.rendering&&this.#A(e)};typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>setTimeout(t,0)):setTimeout(t,0)}async fetchVirtualModels(){this.aliasLoading=!0,this.aliasError=``;try{let e=await Cs(`/admin/virtual-models`,{label:`virtual models`});if(e.status===503){this.virtualModelsAvailable=!1,this.aliases=[],this.modelOverrideViews=[];return}if(e.stale)return;if(this.virtualModelsAvailable=!0,!e.ok){this.aliases=[],this.modelOverrideViews=[];return}let{aliases:t,policies:n}=SO(e.data);this.aliases=t,this.modelOverrideViews=n}catch(e){console.error(`Failed to fetch virtual models:`,e),this.aliases=[],this.modelOverrideViews=[],this.aliasError=`Unable to load virtual models.`}finally{this.aliasLoading=!1}}qualifiedModelName(e){return uO(e)}findModelOverrideView(e){return LO(this.modelOverrideViews,e)}hasGlobalModelOverride(){return!!this.findModelOverrideView(`/`)}findExistingAliasByName(e){let t=lO(e);if(!t)return null;for(let e of this.aliases)if(lO(e&&e.name)===t)return e;return null}findConcreteModelByName(e){let t=lO(e);if(!t)return null;for(let e of Vc.models)if(fO(e).has(t))return e;return null}rowToggleEnabled(e){return e?e.is_alias?e.alias&&e.alias.enabled!==!1:!!(e.access&&e.access.effective_enabled!==!1):!1}rowToggleLabel(e){return this.rowTogglingKey&&this.rowTogglingKey===e.key?`Updating...`:this.rowToggleRestricted(e)?`Restricted`:this.rowToggleEnabled(e)?`Enabled`:`Disabled`}rowToggleRestricted(e){return!!e&&!e.is_alias&&DO(e.access,this.virtualModelsAvailable)===`is-restricted`}rowToggleAriaLabel(e){if(!e)return``;let t=this.rowToggleEnabled(e)?`Disable `:`Enable `,n;return n=e.is_alias?`alias `+String(e.alias&&e.alias.name||``):String(e.display_name||e.access&&e.access.selector||`model`),t+n.trim()}async toggleRowEnabled(e){if(this.virtualModelsAvailable&&!(!e||this.rowTogglingKey===e.key)){if(KO(e)){J.success(`This virtual model is managed by configuration and is read-only.`);return}if(e.is_alias){await this.toggleAliasRow(e);return}await this.toggleModelRow(e)}}async toggleAliasRow(e){let t=e.alias;if(!t||!t.name)return;this.rowTogglingKey=e.key;let n=ak(t);try{let e=await ws(`/admin/virtual-models`,`PUT`,n,{label:`alias state`});if(e.status===503){this.virtualModelsAvailable=!1,J.error(`Virtual models feature is unavailable.`);return}if(e.stale)return;if(!e.ok){J.error(e.status===401?`Authentication required.`:ys(e,`Failed to update alias state.`));return}J.success(n.enabled?`Alias enabled.`:`Alias disabled.`),this.fetchVirtualModels()}catch(e){console.error(`Failed to toggle alias state:`,e),J.error(`Failed to update alias state.`)}finally{this.rowTogglingKey=``}}async toggleModelRow(e){let t=VO(e);if(!t)return;let{method:n,payload:r,desired:i}=ok(t,this.findModelOverrideView(t),e.access||{});this.rowTogglingKey=e.key;try{let e=await ws(`/admin/virtual-models`,n,r,{label:`model access`});if(e.status===503){this.virtualModelsAvailable=!1,J.error(`Virtual models feature is unavailable.`);return}if(!(n===`DELETE`&&e.status===404)){if(e.stale)return;if(!e.ok){J.error(e.status===401?`Authentication required.`:ys(e,`Failed to update model access.`));return}}J.success(i?`Model enabled.`:`Model disabled.`),Promise.all([Vc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to toggle model access:`,e),J.error(`Failed to update model access.`)}finally{this.rowTogglingKey=``}}async removeAliasRow(e){if(!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)||this.rowDeletingKey)return;let t=String(e.alias.name||``).trim();t&&await this.mutateVirtualModelRow({rowKey:e.key,confirmMessage:`Remove the virtual model alias "`+t+`"?`,method:`DELETE`,payload:{source:t},operation:`virtual model`,failureMessage:`Failed to remove virtual model.`,notice:`Virtual model removed.`,ignoreNotFound:!0})}async removeRedirectRow(e){let t=e&&e.masking_alias;if(!(e&&!e.is_alias&&t&&t.name&&!t.managed)||this.rowDeletingKey)return;let n=String(t.name||``).trim();n&&await this.mutateVirtualModelRow({rowKey:e.key,confirmMessage:`Remove the redirect for "`+n+`"? Other virtual model settings will be preserved.`,method:`PUT`,payload:{source:n,user_paths:Array.isArray(t.user_paths)?t.user_paths:[],description:String(t.description||``).trim(),enabled:t.enabled!==!1},operation:`virtual model redirect`,failureMessage:`Failed to remove redirect.`,notice:`Redirect removed. Other virtual model settings were preserved.`})}async mutateVirtualModelRow(e){if(!this.rowDeletingKey&&window.confirm(e.confirmMessage)){this.rowDeletingKey=e.rowKey;try{let t=await ws(`/admin/virtual-models`,e.method,e.payload,{label:e.operation});if(t.status===503){this.virtualModelsAvailable=!1,J.error(`Virtual models feature is unavailable.`);return}if(!(e.ignoreNotFound&&t.status===404)){if(t.stale)return;if(!t.ok){J.error(t.status===401?`Authentication required.`:ys(t,e.failureMessage));return}}this.virtualModelsAvailable=!0,J.success(e.notice),Promise.all([Vc.fetchModels(),this.fetchVirtualModels()])}catch(t){console.error(e.failureMessage,t),J.error(e.failureMessage)}finally{this.rowDeletingKey=``}}}addVmTarget(){Array.isArray(this.vmForm.targets)||(this.vmForm.targets=[]),this.vmForm.targets.push({model:``,weight:1})}removeVmTarget(e){Array.isArray(this.vmForm.targets)&&this.vmForm.targets.splice(e,1)}removePrimaryTarget(){tk(this.vmForm)}vmFormHasPrimaryTarget(){return ZO(this.vmForm)}vmFormShowStrategy(){return $O(this.vmForm)}vmStrategyOptions(){return bO(Os.virtualModelStrategies(),this.vmForm.strategy)}vmFormShowWeights(){return ek(this.vmForm)}vmFormToggleRestricted(){return!!(this.vmForm&&this.vmForm.enabled)&&EO(rk(this.vmForm.user_paths))}vmFormToggleLabel(){return!this.vmForm||!this.vmForm.enabled?`Disabled`:this.vmFormToggleRestricted()?`Restricted`:`Enabled`}resetVirtualModelForm(){this.vmFormError=``,this.vmFormHelpOpen=!1,this.vmFormUserPathsHelpOpen=!1,this.vmSubmitting=!1,this.vmDeleting=!1,this.vmFormHasExisting=!1,this.vmFormDefaultEnabled=!0,this.vmFormEffectiveEnabled=!0,this.vmFormDisplayName=``,this.vmFormSourceLocked=!1,this.vmFormOriginalSource=``,this.vmFormManaged=!1,this.vmForm=XO()}closeVirtualModelForm(){this.vmFormOpen=!1,this.resetVirtualModelForm()}openVirtualModelCreate(e){this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`create`,this.vmFormSourceLocked=!1,this.vmFormDisplayName=`New virtual model`,e&&e.model&&e.model.id&&(this.vmForm.target_model=uO(e))}openVirtualModelEditAlias(e){if(!e)return;this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!1,this.vmFormHasExisting=!0,this.vmFormManaged=!!e.managed,this.vmFormOriginalSource=e.name||``,this.vmFormDisplayName=e.name||``,this.vmFormDefaultEnabled=IO(Vc.models),this.vmFormEffectiveEnabled=e.enabled!==!1;let{primaryModel:t,primaryWeight:n,extraTargets:r}=nk(e);this.vmForm={source:e.name||``,target_model:t,target_weight:n,targets:r,strategy:e.strategy||`round_robin`,session_affinity:e.session_affinity!==!1,user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` +`),description:e.description||``,enabled:e.enabled!==!1}}openVirtualModelEditModel(e){if(!e||e.is_alias)return;let t=e.access||{},n=t.override||null,r=n&&Array.isArray(n.user_paths)?n.user_paths:Array.isArray(t.user_paths)?t.user_paths:[],i=VO(e);this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!0,this.vmFormHasExisting=!!n,this.vmFormOriginalSource=i;let a=n?n.enabled!==!1:t.effective_enabled!==!1;this.vmFormDefaultEnabled=t.default_enabled!==!1,this.vmFormEffectiveEnabled=a,this.vmFormManaged=!!(n&&n.managed),this.vmFormDisplayName=e.access_display_name||e.display_name||i||``,this.vmForm={source:i,target_model:``,target_weight:``,targets:[],strategy:`round_robin`,user_paths:r.join(` +`),description:n&&n.description?n.description:``,enabled:a}}openGlobalModelOverrideEdit(){let e=this.findModelOverrideView(`/`),t=e&&Array.isArray(e.user_paths)?e.user_paths:[],n=IO(Vc.models);this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!0,this.vmFormHasExisting=!!e,this.vmFormOriginalSource=`/`,this.vmFormDefaultEnabled=n,this.vmFormEffectiveEnabled=e?e.enabled!==!1:n,this.vmFormManaged=!!(e&&e.managed),this.vmFormDisplayName=`All providers and models`,this.vmForm={source:`/`,target_model:``,target_weight:``,targets:[],strategy:`round_robin`,user_paths:t.join(` +`),description:e&&e.description?e.description:``,enabled:e?e.enabled!==!1:n}}openProviderOverrideEdit(e){!e||!e.access||!e.access.selector||this.openVirtualModelEditModel({display_name:e.display_name,access_display_name:`All models in `+e.display_name,provider_name:e.provider_name,provider_type:e.provider_type,access:e.access,override_selector:e.access.selector,is_alias:!1})}async submitVirtualModelForm(){if(this.vmFormManaged){this.vmFormError=`This virtual model is managed by configuration and cannot be edited here.`;return}let{payload:e,source:t,isRedirect:n,isRename:r}=ik(this.vmForm,this.vmFormOriginalSource,this.vmFormMode);if(!t){this.vmFormError=`Source is required.`;return}if(this.vmFormError=``,this.vmFormMode!==`edit`){let e=this.findExistingAliasByName(t),r=e?null:this.findModelOverrideView(t);if(e||r){let n=e?`A virtual model named "`+e.name+`" already exists. Saving will update that virtual model. Continue?`:`An access policy for "`+t+`" already exists. Saving will update that virtual model. Continue?`;if(!window.confirm(n)){this.vmFormError=`Choose a different source or edit the existing virtual model.`;return}}else if(n){let e=this.findConcreteModelByName(t);if(e){let t=uO(e)||String(e.model&&e.model.id||``).trim();if(!window.confirm(`A model named "`+t+`" already exists. Creating this alias will mask that model in the list. Continue?`)){this.vmFormError=`Choose a different source to avoid masking an existing model.`;return}}}}else if(r){let e=(this.aliases||[]).find(e=>e&&e.name===t)||null,r=e?null:this.findModelOverrideView(t);if(e||r){this.vmFormError=`A virtual model for "`+t+`" already exists. Choose a different source.`;return}if(n){let e=this.findConcreteModelByName(t);if(e){let t=uO(e)||String(e.model&&e.model.id||``).trim();if(!window.confirm(`A model named "`+t+`" already exists. Renaming to that name will mask the model in the list. Continue?`)){this.vmFormError=`Choose a different source to avoid masking an existing model.`;return}}}}this.vmSubmitting=!0;try{let t=await ws(`/admin/virtual-models`,`PUT`,e,{label:`virtual model`});if(t.status===503){this.virtualModelsAvailable=!1,this.vmFormError=`Virtual models feature is unavailable.`;return}if(t.stale)return;if(!t.ok){this.vmFormError=t.status===401?`Authentication required.`:ys(t,`Failed to save virtual model.`);return}let r=!n&&t.status===204;this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),J.success(n?`Alias saved.`:r?`Model access reset to inherited/default.`:`Model access saved.`),Promise.all([Vc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to save virtual model:`,e),this.vmFormError=`Failed to save virtual model.`}finally{this.vmSubmitting=!1}}async deleteVirtualModel(){if(this.vmFormManaged){this.vmFormError=`This virtual model is managed by configuration and cannot be removed here.`;return}let e=String(this.vmForm.source||this.vmFormOriginalSource||``).trim();if(!(!e||!this.vmFormHasExisting)&&window.confirm(`Remove the virtual model for "`+e+`"? This reverts to inherited/default behavior.`)){this.vmDeleting=!0,this.vmFormError=``;try{let t=await ws(`/admin/virtual-models`,`DELETE`,{source:e},{label:`virtual model`});if(t.status===503){this.virtualModelsAvailable=!1,this.vmFormError=`Virtual models feature is unavailable.`;return}if(t.status!==404){if(t.stale)return;if(!t.ok){this.vmFormError=t.status===401?`Authentication required.`:ys(t,`Failed to remove virtual model.`);return}}this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),J.success(`Virtual model removed.`),Promise.all([Vc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to delete virtual model:`,e),this.vmFormError=`Failed to remove virtual model.`}finally{this.vmDeleting=!1}}}},uk=[{value:`input_per_mtok`,label:`Input $/MTok`,group:`Tokens`},{value:`output_per_mtok`,label:`Output $/MTok`,group:`Tokens`},{value:`cached_input_per_mtok`,label:`Cached input $/MTok`,group:`Tokens`},{value:`cache_write_per_mtok`,label:`Cache write $/MTok`,group:`Tokens`},{value:`reasoning_output_per_mtok`,label:`Reasoning output $/MTok`,group:`Tokens`},{value:`batch_input_per_mtok`,label:`Batch input $/MTok`,group:`Batch`},{value:`batch_output_per_mtok`,label:`Batch output $/MTok`,group:`Batch`},{value:`audio_input_per_mtok`,label:`Audio input $/MTok`,group:`Audio`},{value:`audio_output_per_mtok`,label:`Audio output $/MTok`,group:`Audio`},{value:`per_image`,label:`$/Image`,group:`Image`},{value:`input_per_image`,label:`Input $/Image`,group:`Image`},{value:`per_second_input`,label:`Input $/Second`,group:`Audio/Video`},{value:`per_second_output`,label:`Output $/Second`,group:`Video`},{value:`per_character_input`,label:`$/Character`,group:`Audio`},{value:`per_page`,label:`$/Page`,group:`Utility`},{value:`per_request`,label:`$/Request`,group:`Utility`}];function dk(e){let t=uk.find(t=>t.value===e);return t?t.label:String(e||``).replace(/_/g,` `)}function fk(e){return e&&typeof e==`object`?JSON.parse(JSON.stringify(e)):{}}function pk(e,t){let n=fk(e),r=t&&t.pricing?t.pricing:t;if(!r||typeof r!=`object`)return n;for(let e of uk)r[e.value]!==null&&r[e.value]!==void 0&&(n[e.value]=Number(r[e.value]));return Array.isArray(r.tiers)&&r.tiers.length>0&&(n.tiers=fk(r.tiers)),n}function mk(e){switch(String(e||``).trim()){case`config_yaml`:return`config.yaml`;case`model_registry`:return`Model registry`;default:return e?String(e):`Unknown`}}function hk(e){let t=e&&e.pricing?e.pricing:{},n=e&&e.pricing_sources&&typeof e.pricing_sources==`object`?e.pricing_sources:{},r={};for(let e of uk)t[e.value]!==null&&t[e.value]!==void 0&&(r[e.value]=mk(n[e.value]||`model_registry`));return r}function gk(e){let t=String(e&&e.selector||``).trim();return t?`Dashboard/API override (`+t+`)`:`Dashboard/API override`}function _k(e){let t=String(e||``).trim();return t?t+`/`:``}function vk(e){return String(e&&e.model&&e.model.id||``).trim()}function yk(e){let t=String(e&&e.provider_name||``).trim(),n=vk(e);return t&&n?t+`/`+n:n}function bk(e){return vk(e)}function xk(e){let t=new Map;for(let n of Array.isArray(e)?e:[]){let e=String(n&&n.selector||``).trim();e&&t.set(e,n)}return t}function Sk(e,t){let n=String(t||``).trim();return n&&xk(e).get(n)||null}function Ck(e,t,n){let r=xk(e),i=yk(t),a=bk(t),o=_k(t&&t.provider_name),s=String(n||``).trim();for(let e of[i,a,o,`/`]){if(!e||e===s)continue;let t=r.get(e);if(t)return t}return null}function wk(e,t,n){let r=e&&e.model&&e.model.metadata?e.model.metadata:null,i=fk(r&&r.pricing),a=hk(r),o=Ck(t,e,n),s=o&&o.pricing?o.pricing:null;if(s){let e=gk(o);for(let t of uk)s[t.value]!==null&&s[t.value]!==void 0&&(i[t.value]=Number(s[t.value]),a[t.value]=e);Array.isArray(s.tiers)&&s.tiers.length>0&&(i.tiers=fk(s.tiers),a.tiers=e)}return{pricing:i,sources:a}}function Tk(e,t){let n=e&&e.pricing?e.pricing:{},r=[];for(let e of uk)n[e.value]!==null&&n[e.value]!==void 0&&r.push({id:t(),field:e.value,value:String(n[e.value])});return r}function Ek(e,t){let n=new Set;for(let r of Array.isArray(e)?e:[]){if(t&&r.id===t)continue;let e=String(r.field||``).trim();e&&n.add(e)}return n}function Dk(e,t){let n=Ek(e,t&&t.id);return uk.filter(e=>e.value===(t&&t.field)||!n.has(e.value))}function Ok(e,t){let n={},r=new Set;for(let t of Array.isArray(e)?e:[]){let e=String(t.field||``).trim();if(!e)return{error:`Choose a price type for every row.`};if(r.has(e))return{error:`Each price type can only be used once.`};r.add(e);let i=String(t.value||``).trim();if(i===``)return{error:`Enter a value for `+dk(e)+`.`};let a=Number(i);if(!Number.isFinite(a)||a<0)return{error:`Pricing values must be numbers greater than or equal to 0.`};n[e]=a}let i=Array.isArray(t)?t:[];return i.length>0&&(n.tiers=fk(i)),Object.keys(n).length===0?{error:`Add at least one pricing field before saving.`}:{pricing:n}}function kk(e,t,n){let r=e||{},i=t||{},a=n||{},o=pk(r,a);return uk.map(e=>{let t=a[e.value]!==null&&a[e.value]!==void 0,n=r[e.value]!==null&&r[e.value]!==void 0;return{field:e.value,label:e.label,value:o[e.value],source:t?`Form/API value`:n?i[e.value]||`Model registry`:`Unset`}}).filter(e=>e.source!==`Unset`||e.value!==void 0)}var Ak=new class{#e=A(!0);get modelPricingOverridesAvailable(){return L(this.#e)}set modelPricingOverridesAvailable(e){j(this.#e,e,!0)}#t=A(M([]));get modelPricingOverrideViews(){return L(this.#t)}set modelPricingOverrideViews(e){j(this.#t,e,!0)}#n=A(``);get modelPricingOverrideError(){return L(this.#n)}set modelPricingOverrideError(e){j(this.#n,e,!0)}#r=A(!1);get modelPricingOverrideFormOpen(){return L(this.#r)}set modelPricingOverrideFormOpen(e){j(this.#r,e,!0)}#i=A(!1);get modelPricingOverrideSubmitting(){return L(this.#i)}set modelPricingOverrideSubmitting(e){j(this.#i,e,!0)}#a=A(!1);get modelPricingOverrideFormHasExistingOverride(){return L(this.#a)}set modelPricingOverrideFormHasExistingOverride(e){j(this.#a,e,!0)}#o=A(``);get modelPricingOverrideFormDisplayName(){return L(this.#o)}set modelPricingOverrideFormDisplayName(e){j(this.#o,e,!0)}#s=A(``);get modelPricingOverrideFormScope(){return L(this.#s)}set modelPricingOverrideFormScope(e){j(this.#s,e,!0)}#c=A(M([]));get modelPricingOverrideFormScopeOptions(){return L(this.#c)}set modelPricingOverrideFormScopeOptions(e){j(this.#c,e,!0)}#l=A(null);get modelPricingOverrideFormRow(){return L(this.#l)}set modelPricingOverrideFormRow(e){j(this.#l,e,!0)}#u=A(null);get modelPricingOverrideFormBasePricing(){return L(this.#u)}set modelPricingOverrideFormBasePricing(e){j(this.#u,e,!0)}#d=A(null);get modelPricingOverrideFormBasePricingSources(){return L(this.#d)}set modelPricingOverrideFormBasePricingSources(e){j(this.#d,e,!0)}#f=A(M([]));get modelPricingOverrideFormPreservedTiers(){return L(this.#f)}set modelPricingOverrideFormPreservedTiers(e){j(this.#f,e,!0)}#p=A(M([]));get modelPricingOverrideRows(){return L(this.#p)}set modelPricingOverrideRows(e){j(this.#p,e,!0)}#m=A(M({selector:``}));get modelPricingOverrideForm(){return L(this.#m)}set modelPricingOverrideForm(e){j(this.#m,e,!0)}_modelPricingOverrideRowID=0;pricingFieldOptions(){return uk}pricingFieldLabel(e){return dk(e)}async fetchModelPricingOverrides(){this.modelPricingOverrideError=``;try{let e=await Cs(`/admin/model-pricing-overrides`,{label:`model pricing overrides`});if(e.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideViews=[];return}if(e.stale)return;if(this.modelPricingOverridesAvailable=!0,!e.ok){this.modelPricingOverrideViews=[];return}this.modelPricingOverrideViews=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch model pricing overrides:`,e),this.modelPricingOverrideViews=[],this.modelPricingOverrideError=`Unable to load model pricing overrides.`}}findModelPricingOverrideView(e){return Sk(this.modelPricingOverrideViews,e)}hasGlobalPricingOverride(){return!!this.findModelPricingOverrideView(`/`)}hasProviderPricingOverride(e){return!!this.findModelPricingOverrideView(_k(e&&e.provider_name))}hasModelPricingOverride(e){return!!this.findModelPricingOverrideView(yk(e))}modelPricingButtonClass(e){return e?`table-action-btn-active`:``}modelPricingButtonLabel(e,t){let n=`Edit `+String(e||`model pricing`);return t?n+` (override exists)`:n}modelRowPricing(e){return wk(e,this.modelPricingOverrideViews).pricing}openGlobalPricingOverrideEdit(){this.openModelPricingOverrideForm({displayName:`All providers and models`,selector:`/`,scope:`global`,scopeOptions:[{value:`global`,label:`All providers and models`,selector:`/`}],row:null})}openProviderPricingOverrideEdit(e){let t=_k(e&&e.provider_name);t&&this.openModelPricingOverrideForm({displayName:`All models in `+(e.display_name||e.provider_name||t),selector:t,scope:`provider`,scopeOptions:[{value:`provider`,label:`Provider`,selector:t}],row:null})}openModelPricingOverrideEdit(e){if(!e||e.is_alias)return;let t=yk(e),n=bk(e),r=[{value:`exact`,label:`This provider and model`,selector:t}];n&&n!==t&&r.push({value:`model`,label:`This model across providers`,selector:n}),this.openModelPricingOverrideForm({displayName:e.display_name||t,selector:t,scope:`exact`,scopeOptions:r,row:e})}openModelPricingOverrideForm(e){let t=e||{};this.modelPricingOverrideFormOpen=!0,this.modelPricingOverrideError=``,this.modelPricingOverrideFormDisplayName=t.displayName||t.selector||`Pricing`,this.modelPricingOverrideFormScope=t.scope||``,this.modelPricingOverrideFormScopeOptions=Array.isArray(t.scopeOptions)?t.scopeOptions:[],this.modelPricingOverrideFormRow=t.row||null,this.modelPricingOverrideForm={selector:t.selector||``},this.loadModelPricingOverrideFormSelector(t.selector||``)}loadModelPricingOverrideFormSelector(e){e=String(e||``).trim();let t=this.findModelPricingOverrideView(e);this.modelPricingOverrideFormHasExistingOverride=!!t,this.modelPricingOverrideRows=Tk(t,()=>this.nextModelPricingOverrideRowID()),this.modelPricingOverrideFormPreservedTiers=t&&t.pricing&&Array.isArray(t.pricing.tiers)?fk(t.pricing.tiers):[],this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow();let n=this.modelPricingOverrideFormRow,r=n?wk(n,this.modelPricingOverrideViews,e):{pricing:{},sources:{}};this.modelPricingOverrideFormBasePricing=r.pricing,this.modelPricingOverrideFormBasePricingSources=r.sources}setModelPricingOverrideScope(e){this.modelPricingOverrideFormScope=e;let t=this.modelPricingOverrideFormScopeOptions.find(t=>t.value===e);t&&(this.modelPricingOverrideForm.selector=t.selector,this.loadModelPricingOverrideFormSelector(t.selector))}nextModelPricingOverrideRowID(){return this._modelPricingOverrideRowID=(this._modelPricingOverrideRowID||0)+1,`pricing-row-`+this._modelPricingOverrideRowID}availablePricingFieldOptions(e){return Dk(this.modelPricingOverrideRows,e)}addModelPricingOverrideRow(){let e=Ek(this.modelPricingOverrideRows),t=uk.find(t=>!e.has(t.value))||uk[0];t&&this.modelPricingOverrideRows.push({id:this.nextModelPricingOverrideRowID(),field:t.value,value:``})}removeModelPricingOverrideRow(e){this.modelPricingOverrideRows=this.modelPricingOverrideRows.filter(t=>t.id!==e.id),this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow()}modelPricingOverridePayload(){return Ok(this.modelPricingOverrideRows,this.modelPricingOverrideFormPreservedTiers)}modelPricingOverrideDraftPricing(){let e=this.modelPricingOverridePayload();return e&&e.pricing?e.pricing:{}}modelPricingEffectivePreviewRows(){return kk(this.modelPricingOverrideFormBasePricing,this.modelPricingOverrideFormBasePricingSources,this.modelPricingOverrideDraftPricing())}closeModelPricingOverrideForm(){this.modelPricingOverrideFormOpen=!1,this.modelPricingOverrideSubmitting=!1,this.modelPricingOverrideError=``,this.modelPricingOverrideFormHasExistingOverride=!1,this.modelPricingOverrideFormDisplayName=``,this.modelPricingOverrideFormScope=``,this.modelPricingOverrideFormScopeOptions=[],this.modelPricingOverrideFormRow=null,this.modelPricingOverrideFormBasePricing=null,this.modelPricingOverrideFormBasePricingSources=null,this.modelPricingOverrideFormPreservedTiers=[],this.modelPricingOverrideRows=[],this.modelPricingOverrideForm={selector:``}}async submitModelPricingOverrideForm(){let e=String(this.modelPricingOverrideForm.selector||``).trim();if(!e){this.modelPricingOverrideError=`Model pricing selector is required.`;return}let t=this.modelPricingOverridePayload();if(t.error){this.modelPricingOverrideError=t.error;return}let n={selector:e,...t};this.modelPricingOverrideSubmitting=!0,this.modelPricingOverrideError=``;try{let e=await ws(`/admin/model-pricing-overrides`,`PUT`,n,{label:`model pricing override`});if(e.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideError=`Model pricing overrides feature is unavailable.`;return}if(e.stale)return;if(!e.ok){this.modelPricingOverrideError=e.status===401?`Authentication required.`:ys(e,`Failed to save model pricing.`);return}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),J.success(`Model pricing saved.`),this.fetchModelPricingOverrides()}catch(e){console.error(`Failed to save model pricing override:`,e),this.modelPricingOverrideError=`Failed to save model pricing.`}finally{this.modelPricingOverrideSubmitting=!1}}async deleteModelPricingOverride(){let e=String(this.modelPricingOverrideForm.selector||``).trim();if(!(!e||!this.modelPricingOverrideFormHasExistingOverride)&&window.confirm(`Remove the model pricing override for "`+e+`"?`)){this.modelPricingOverrideSubmitting=!0,this.modelPricingOverrideError=``;try{let t=await ws(`/admin/model-pricing-overrides`,`DELETE`,{selector:e},{label:`model pricing override`});if(t.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideError=`Model pricing overrides feature is unavailable.`;return}if(t.status!==404){if(t.stale)return;if(!t.ok){this.modelPricingOverrideError=t.status===401?`Authentication required.`:ys(t,`Failed to remove model pricing override.`);return}}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),J.success(`Model pricing override removed.`),this.fetchModelPricingOverrides()}catch(e){console.error(`Failed to delete model pricing override:`,e),this.modelPricingOverrideError=`Failed to remove model pricing override.`}finally{this.modelPricingOverrideSubmitting=!1}}}},jk=z(``);function Mk(e,t){D(t,!0);var n=jk();let r;var i=F(N(n),2),a=N(i,!0);E(i),E(n),I((e,i,o)=>{r=W(n,1,`alias-toggle`,null,r,e),n.disabled=lk.rowTogglingKey===t.row.key||!lk.virtualModelsAvailable,G(n,`aria-label`,i),V(a,o)},[()=>({enabled:lk.rowToggleEnabled(t.row),restricted:lk.rowToggleRestricted(t.row)}),()=>lk.rowToggleAriaLabel(t.row),()=>lk.rowToggleLabel(t.row)]),R(`click`,n,()=>lk.toggleRowEnabled(t.row)),B(e,n),O()}Vr([`click`]);var Nk=z(`
        `);function Pk(e,t){D(t,!0);var n=Nk(),r=N(n),i=e=>{Mk(e,{get row(){return lk.globalScopeRow}})};H(r,e=>{lk.virtualModelsAvailable&&e(i)});var a=F(r,2),o=e=>{{let t=k(()=>Ak.modelPricingButtonLabel(`global model pricing`,Ak.hasGlobalPricingOverride())),n=k(()=>Ak.modelPricingButtonClass(Ak.hasGlobalPricingOverride()));TT(e,{get label(){return L(t)},get class(){return`table-icon-btn ${L(n)??``}`},onclick:()=>Ak.openGlobalPricingOverrideEdit(),children:(e,t)=>{K(e,{get icon(){return Ka},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(a,e=>{Ak.modelPricingOverridesAvailable&&e(o)});var s=F(a,2),c=e=>{{let t=k(()=>YO(`global model access`,lk.hasGlobalModelOverride())),n=k(()=>JO(lk.hasGlobalModelOverride()));TT(e,{get label(){return L(t)},get class(){return`table-icon-btn ${L(n)??``}`},onclick:()=>lk.openGlobalModelOverrideEdit(),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(s,e=>{lk.virtualModelsAvailable&&e(c)}),E(n),B(e,n),O()}function Fk(e){return String(e&&(e.primary_model||e.source)||``).trim()}function Ik(e){return Array.isArray(e&&e.fallback_models)?e.fallback_models:Array.isArray(e&&e.targets)?e.targets:[]}function Lk(e){return Array.isArray(e)?e.map(e=>({...e,source:Fk(e),targets:Ik(e)})):[]}function Rk(e){let t=Ik(e);return t.length===0?`-`:t.join(`, `)}function zk(e){return e&&e.enabled===!1?`Off`:e&&e.managed?`Config`:`On`}function Bk(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>Fk(e)===n)||null}function Vk(e,t){if(!t||t.is_alias)return!1;let n=Bk(e,uO(t));return!!(n&&n.enabled!==!1&&Ik(n).length>0)}function Hk(e,t){return Vk(e,t)?`table-action-btn-failover-active`:``}function Uk(e,t){let n=`Edit failover for `+(t&&t.display_name?t.display_name:`model`);return Vk(e,t)?n+` (active)`:n}function Wk(e){let t=[e&&e.target_model];return(Array.isArray(e&&e.targets)?e.targets:[]).forEach(e=>t.push(e&&e.model)),t.map(e=>String(e||``).trim()).filter(Boolean)}function Gk(e){let t=Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(Boolean):[];return{target_model:t[0]||``,targets:t.slice(1).map(e=>({model:e}))}}function Kk(e){return{primary_model:String(e&&e.source||``).trim(),fallback_models:Wk(e),enabled:!(e&&e.enabled===!1)}}function qk(e){return Fk(e)}function Jk(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=qk(e);n&&(t[n]=!0)}),t}function Yk(e,t){let n=qk(t);return!!(n&&e&&e[n])}function Xk(e,t){return(Array.isArray(e)?e:[]).filter(e=>Yk(t,e))}function Zk(e,t){let n=Array.isArray(e)?e:[];return n.length>0&&Xk(n,t).length===n.length}function Qk(e){return[Fk(e),Ik(e).join(` `)].join(` `).toLowerCase()}function $k(e,t){let n=Array.isArray(e)?e:[],r=String(t||``).trim().toLowerCase();return r?n.filter(e=>Qk(e).includes(r)):n}function eA(e){return{primary_model:Fk(e),fallback_models:Ik(e).map(e=>String(e||``).trim()).filter(Boolean),enabled:!!(e&&e.enabled!==!1)}}function tA(){return{source:``,target_model:``,targets:[],enabled:!0}}var Z=new class{#e=A(!0);get failoverAvailable(){return L(this.#e)}set failoverAvailable(e){j(this.#e,e,!0)}#t=A(M([]));get failoverRules(){return L(this.#t)}set failoverRules(e){j(this.#t,e,!0)}#n=A(!1);get failoverLoading(){return L(this.#n)}set failoverLoading(e){j(this.#n,e,!0)}#r=A(!1);get failoverSaving(){return L(this.#r)}set failoverSaving(e){j(this.#r,e,!0)}#i=A(!1);get failoverGenerating(){return L(this.#i)}set failoverGenerating(e){j(this.#i,e,!0)}#a=A(``);get failoverError(){return L(this.#a)}set failoverError(e){j(this.#a,e,!0)}#o=A(M([]));get failoverGeneratedRules(){return L(this.#o)}set failoverGeneratedRules(e){j(this.#o,e,!0)}#s=A(!1);get failoverDraftsOpen(){return L(this.#s)}set failoverDraftsOpen(e){j(this.#s,e,!0)}#c=A(M({}));get failoverDraftSelections(){return L(this.#c)}set failoverDraftSelections(e){j(this.#c,e,!0)}#l=A(``);get failoverDraftFilter(){return L(this.#l)}set failoverDraftFilter(e){j(this.#l,e,!0)}#u=A(!1);get failoverDraftSaving(){return L(this.#u)}set failoverDraftSaving(e){j(this.#u,e,!0)}#d=A(!1);get failoverFormOpen(){return L(this.#d)}set failoverFormOpen(e){j(this.#d,e,!0)}#f=A(`create`);get failoverFormMode(){return L(this.#f)}set failoverFormMode(e){j(this.#f,e,!0)}#p=A(!1);get failoverFormManaged(){return L(this.#p)}set failoverFormManaged(e){j(this.#p,e,!0)}#m=A(M(tA()));get failoverForm(){return L(this.#m)}set failoverForm(e){j(this.#m,e,!0)}failoverEnabled(){return Os.booleanFlag(`FAILOVER_ENABLED`,!0)}async fetchFailoverRules(){if(!this.failoverEnabled()){this.failoverAvailable=!1,this.failoverRules=[],this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,this.failoverError=``,this.failoverLoading=!1;return}this.failoverLoading=!0,this.failoverError=``;try{let e=await Cs(`/admin/failover`,{label:`failover mappings`});if(e.status===503){this.failoverAvailable=!1,this.failoverRules=[];return}if(e.stale)return;if(this.failoverAvailable=!0,!e.ok){this.failoverRules=[];return}this.failoverRules=Lk(e.data)}catch(e){console.error(`Failed to fetch failover mappings:`,e),this.failoverRules=[],this.failoverError=`Unable to load failover mappings.`}finally{this.failoverLoading=!1}}resetFailoverForm(){this.failoverFormMode=`create`,this.failoverFormManaged=!1,this.failoverForm=tA()}openFailoverCreate(){this.resetFailoverForm(),this.failoverFormOpen=!0,this.focusFailoverEditor()}openFailoverEdit(e){if(!e)return;this.resetFailoverForm(),this.failoverFormMode=`edit`,this.failoverFormOpen=!0,this.failoverFormManaged=!!e.managed;let t=this.failoverPrimaryModel(e),n=this.failoverTargets(e);this.failoverForm={source:t,target_model:n[0]||``,targets:n.slice(1).map(e=>({model:e})),enabled:e.enabled!==!1},this.focusFailoverEditor()}openFailoverForModel(e){if(!e||e.is_alias)return;let t=this.qualifiedModelName(e),n=this.failoverRules.find(e=>this.failoverPrimaryModel(e)===t);if(n){this.openFailoverEdit(n);return}this.resetFailoverForm(),this.failoverFormMode=`create`,this.failoverFormOpen=!0,this.failoverForm.source=t,this.focusFailoverEditor()}closeFailoverForm(){this.failoverFormOpen=!1}closeFailoverDraftsModal(){this.failoverDraftSaving||(this.failoverDraftsOpen=!1)}failoverFormTargets(){return Wk(this.failoverForm)}setFailoverFormTargets(e){let t=Gk(e);this.failoverForm.target_model=t.target_model,this.failoverForm.targets=t.targets}addFailoverTarget(){Array.isArray(this.failoverForm.targets)||(this.failoverForm.targets=[]),this.failoverForm.targets.push({model:``}),this.focusFailoverEditor()}removeFailoverTarget(e){if(!Array.isArray(this.failoverForm.targets)){this.failoverForm.targets=[];return}this.failoverForm.targets.splice(e,1)}removePrimaryFailoverTarget(){let e=Array.isArray(this.failoverForm.targets)?this.failoverForm.targets:[];if(e.length>0){let t=e.shift();this.failoverForm.target_model=t&&t.model?t.model:``,this.failoverForm.targets=e;return}this.failoverForm.target_model=``}failoverRulePayload(){return Kk(this.failoverForm)}async submitFailoverForm(){if(this.failoverSaving||this.failoverGenerating||this.failoverFormManaged)return;let e=this.failoverRulePayload();if(!e.primary_model){this.failoverError=`Primary model is required.`;return}if(e.enabled&&e.fallback_models.length===0){this.failoverError=`Add at least one failover target.`;return}this.failoverSaving=!0,this.failoverError=``;try{let t=await ws(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to save failover mapping.`;return}J.success(`Failover mapping saved.`),this.closeFailoverForm(),this.fetchFailoverRules()}catch(e){console.error(`Failed to save failover mapping:`,e),this.failoverError=`Failed to save failover mapping.`}finally{this.failoverSaving=!1}}async deleteFailoverRule(e){let t=String(e&&this.failoverPrimaryModel(e)||this.failoverForm.source||``).trim();if(!(!t||this.failoverSaving||this.failoverGenerating)&&confirm(`Remove failover mapping for "`+t+`"?`)){this.failoverSaving=!0,this.failoverError=``;try{let e=await ws(`/admin/failover`,`DELETE`,{primary_model:t},{label:`failover mapping`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mapping.`;return}J.success(`Failover mapping removed.`),this.closeFailoverForm(),this.fetchFailoverRules()}catch(e){console.error(`Failed to remove failover mapping:`,e),this.failoverError=`Failed to remove failover mapping.`}finally{this.failoverSaving=!1}}}async generateFailoverForForm(){if(this.failoverGenerating||this.failoverSaving||this.failoverFormManaged)return;let e=String(this.failoverForm.source||``).trim();if(!e){this.failoverError=`Primary model is required.`;return}this.failoverGenerating=!0,this.failoverError=``;try{let t=await ws(`/admin/failover/generate`,`POST`,{primary_model:e},{label:`failover generation`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to generate failover mapping.`;return}let n=Lk(t.data),r=n.find(t=>this.failoverPrimaryModel(t)===e)||n[0]||null,i=this.failoverTargets(r);if(i.length===0){this.failoverError=`No failover suggestions were generated for this model.`;return}this.setFailoverFormTargets(i),J.success(`Generated `+i.length+` fallback model`+(i.length===1?`.`:`s.`)),this.focusFailoverEditor()}catch(e){console.error(`Failed to generate failover mapping:`,e),this.failoverError=`Failed to generate failover mapping.`}finally{this.failoverGenerating=!1}}openFailoverResetDialog(){Ks.open({title:`Remove failover models`,titleId:`failoverResetDialogTitle`,inputId:`failover-reset-confirmation`,message:`Remove every dashboard-managed failover mapping. Configuration-managed mappings remain active.`,requiredText:`remove`,confirmLabel:`Remove Failover`,icon:Ao,dialogClass:`budget-reset-dialog`,onConfirm:async()=>{await this.resetFailoverRules(),this.failoverError&&(Ks.error=this.failoverError)}})}async resetFailoverRules(){if(!this.failoverSaving){this.failoverSaving=!0,this.failoverError=``;try{let e=await ws(`/admin/failover/reset`,`POST`,void 0,{label:`failover removal`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mappings.`;return}this.failoverRules=Lk(e.data),this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,J.success(`Dashboard-managed failover mappings removed.`),Ks.close()}catch(e){console.error(`Failed to remove failover mappings:`,e),this.failoverError=`Failed to remove failover mappings.`}finally{this.failoverSaving=!1}}}async generateFailoverRules(){if(!(this.failoverGenerating||this.failoverDraftSaving)){this.failoverGenerating=!0,this.failoverError=``,this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!0;try{let e=await ws(`/admin/failover/generate`,`POST`,void 0,{label:`failover generation`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to generate failover mappings.`;return}this.failoverGeneratedRules=Lk(e.data),this.selectAllFailoverDrafts(this.failoverGeneratedRules)}catch(e){console.error(`Failed to generate failover mappings:`,e),this.failoverError=`Failed to generate failover mappings.`}finally{this.failoverGenerating=!1}}}failoverDraftKey(e){return qk(e)}selectAllFailoverDrafts(e){this.failoverDraftSelections=Jk(e)}failoverDraftSelected(e){return Yk(this.failoverDraftSelections,e)}setFailoverDraftSelected(e,t){let n=this.failoverDraftKey(e);n&&(this.failoverDraftSelections={...this.failoverDraftSelections,[n]:!!t})}selectedFailoverDrafts(){return Xk(this.failoverGeneratedRules,this.failoverDraftSelections)}selectedFailoverDraftCount(){return this.selectedFailoverDrafts().length}failoverDraftCountLabel(){return this.selectedFailoverDraftCount()+` / `+this.failoverGeneratedRules.length+` selected`}allFailoverDraftsSelected(){return Zk(this.failoverGeneratedRules,this.failoverDraftSelections)}toggleAllFailoverDrafts(){if(!(this.failoverDraftSaving||this.failoverGenerating||this.failoverGeneratedRules.length===0)){if(this.allFailoverDraftsSelected()){this.failoverDraftSelections={};return}this.selectAllFailoverDrafts(this.failoverGeneratedRules)}}failoverDraftSearchText(e){return Qk(e)}filteredFailoverDrafts(){return $k(this.failoverGeneratedRules,this.failoverDraftFilter)}failoverDraftPayload(e){return eA(e)}async saveSelectedFailoverDrafts(){if(this.failoverDraftSaving||this.failoverGenerating)return;let e=this.selectedFailoverDrafts();if(e.length===0){this.failoverError=`Select at least one failover draft.`;return}this.failoverDraftSaving=!0,this.failoverError=``;try{for(let t of e){let e=this.failoverDraftPayload(t);if(!e.primary_model||e.fallback_models.length===0){this.failoverError=`Generated failover draft is missing model data.`;return}let n=await ws(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(n.stale)return;if(!n.ok){this.failoverError=`Failed to save failover mapping.`;return}}J.success(`Saved `+e.length+` failover mapping`+(e.length===1?`.`:`s.`)),this.failoverDraftsOpen=!1,this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.fetchFailoverRules()}catch(e){console.error(`Failed to save generated failover mappings:`,e),this.failoverError=`Failed to save failover mappings.`}finally{this.failoverDraftSaving=!1}}focusFailoverEditor(){setTimeout(()=>{let e=document.querySelector(`[data-failover-editor]`),t=e&&e.querySelector?e.querySelector(`[data-modal-autofocus], input:not([disabled]), textarea:not([disabled]), button:not([disabled])`):null;t&&typeof t.focus==`function`&&t.focus({preventScroll:!0})},0)}failoverTargetLabel(e){return Rk(e)}failoverPrimaryModel(e){return Fk(e)}failoverTargets(e){return Ik(e)}findFailoverMapping(e){return Bk(this.failoverRules,e)}hasActiveFailoverMapping(e){return Vk(this.failoverRules,e)}failoverButtonClass(e){return Hk(this.failoverRules,e)}failoverButtonLabel(e){return Uk(this.failoverRules,e)}normalizeFailoverRules(e){return Lk(e)}failoverRuleStatus(e){return zk(e)}qualifiedModelName(e){return uO(e)}},nA=z(``),rA=z(``),iA=z(`Config`),aA=z(`
        Targets
        `),oA=z(``),sA=z(`
        Redirects to
        `),cA=z(` `),lA=z(`
        `),uA=z(`
        `),dA=z(`
        `);function fA(e,t){D(t,!0);let n=k(()=>Ak.modelRowPricing(t.row));var r=dA(),i=N(r),a=N(i),o=N(a),s=N(o),c=N(s,!0);E(s);var l=F(s,2),u=e=>{B(e,nA())};H(l,e=>{t.row.is_alias&&e(u)});var d=F(l,2),f=e=>{B(e,rA())};H(d,e=>{!t.row.is_alias&&t.row.masking_alias&&e(f)});var p=F(d,2),m=e=>{B(e,iA())},h=k(()=>KO(t.row));H(p,e=>{L(h)&&e(m)}),E(o);var g=F(o,2),_=e=>{var n=aA(),r=F(N(n)),i=N(r,!0);E(r),E(n),I(()=>V(i,t.row.secondary_name)),B(e,n)};H(g,e=>{t.row.is_alias&&e(_)});var v=F(g,2),y=e=>{var n=sA(),r=F(N(n)),i=N(r,!0);E(r);var a=F(r,2),o=e=>{var n=oA();I(e=>{G(n,`aria-label`,lk.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),G(n,`title`,lk.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),n.disabled=e},[()=>!!lk.rowDeletingKey]),R(`click`,n,()=>lk.removeRedirectRow(t.row)),B(e,n)},s=k(()=>lk.virtualModelsAvailable&&WO(t.row));H(a,e=>{L(s)&&e(o)}),E(n),I(e=>V(i,e),[()=>CO(t.row.masking_alias)]),B(e,n)};H(v,e=>{!t.row.is_alias&&t.row.masking_alias&&e(y)}),E(a),E(i);var b=F(i);U(b,17,()=>t.columns,ai,(e,r)=>{var i=cA(),a=N(i,!0);E(i),I(e=>{W(i,1,Pi(L(r).class),`svelte-1iynym`),V(a,e)},[()=>L(r).value(t.row,L(n))]),B(e,i)});var x=F(b),S=N(x),C=e=>{var n=lA(),r=N(n);Mk(r,{get row(){return t.row}});var i=F(r,2),a=e=>{{let n=k(()=>lk.rowDeletingKey===t.row.key?`Removing alias `+t.row.alias.name:`Remove alias `+t.row.alias.name),r=k(()=>!!lk.rowDeletingKey);TT(e,{get label(){return L(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>lk.removeAliasRow(t.row),get disabled(){return L(r)},children:(e,t)=>{K(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})}},o=k(()=>lk.virtualModelsAvailable&&UO(t.row));H(i,e=>{L(o)&&e(a)});var s=F(i,2),c=e=>{{let n=k(()=>`Edit alias `+t.row.alias.name);TT(e,{get label(){return L(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>lk.openVirtualModelEditAlias(t.row.alias),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(s,e=>{lk.virtualModelsAvailable&&e(c)}),E(n),B(e,n)},w=e=>{var n=uA(),r=N(n);Mk(r,{get row(){return t.row}});var i=F(r,2),a=e=>{{let n=k(()=>Ak.modelPricingButtonLabel(`model pricing for `+t.row.display_name,Ak.hasModelPricingOverride(t.row))),r=k(()=>Ak.modelPricingButtonClass(Ak.hasModelPricingOverride(t.row)));TT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>Ak.openModelPricingOverrideEdit(t.row),children:(e,t)=>{K(e,{get icon(){return Ka},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(i,e=>{Ak.modelPricingOverridesAvailable&&e(a)});var o=F(i,2),s=e=>{{let n=k(()=>Z.failoverButtonLabel(t.row)),r=k(()=>Z.failoverButtonClass(t.row));TT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>Z.openFailoverForModel(t.row),children:(e,t)=>{K(e,{get icon(){return Eo},class:`table-icon-svg`})},$$slots:{default:!0}})}},c=k(()=>Z.failoverAvailable&&Z.failoverEnabled());H(o,e=>{L(c)&&e(s)});var l=F(o,2),u=e=>{{let n=k(()=>X.rateLimitGaugeTitle(t.row.display_name,X.rateLimitGaugeClassForModel(t.row))),r=k(()=>X.rateLimitGaugeClassForModel(t.row));TT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>X.openRateLimitInspectorForModel(t.row),children:(e,t)=>{K(e,{get icon(){return Qa},class:`table-icon-svg`})},$$slots:{default:!0}})}},d=k(()=>X.rateLimitsEnabled()&&X.rateLimitInspectorModelID(t.row));H(l,e=>{L(d)&&e(u)});var f=F(l,2),p=e=>{{let n=k(()=>`Edit redirect for `+t.row.display_name);TT(e,{get label(){return L(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>lk.openVirtualModelEditAlias(t.row.masking_alias),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(f,e=>{lk.virtualModelsAvailable&&t.row.masking_alias&&t.row.masking_alias.name&&e(p)});var m=F(f,2),h=e=>{{let n=k(()=>YO(`model access for `+t.row.display_name,qO(t.row.access))),r=k(()=>JO(qO(t.row.access)));TT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>lk.openVirtualModelEditModel(t.row),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(m,e=>{lk.virtualModelsAvailable&&!t.row.masking_alias&&e(h)}),E(n),B(e,n)};H(S,e=>{t.row.is_alias?e(C):e(w,-1)}),E(x),E(r),I((e,n)=>{G(r,`id`,e),W(r,1,n,`svelte-1iynym`),V(c,t.row.display_name)},[()=>GO(t.row)||void 0,()=>Pi(HO(t.row))]),B(e,r),O()}Vr([`click`]);var pA={headerLines:[`Modes`],value:e=>(e.model?.metadata?.modes??[]).join(`, `)||`-`};function mA(e,t){return{headerLines:e,class:`col-price`,value:t}}var hA=mA([`Input / Output ($/MTok)`],(e,t)=>gc(t?.input_per_mtok)+` / `+gc(t?.output_per_mtok)),gA={all:[hA],text_generation:[pA,hA,mA([`Cached $/MTok`],(e,t)=>gc(t?.cached_input_per_mtok))],embedding:[mA([`Input`,`$/MTok`],(e,t)=>gc(t?.input_per_mtok))],image:[mA([`$/Image`],(e,t)=>_c(t?.per_image))],audio:[mA([`$/Second`],(e,t)=>_c(t?.per_second_input)),mA([`$/Character`],(e,t)=>_c(t?.per_character_input))],video:[mA([`$/Second (In)`],(e,t)=>_c(t?.per_second_input)),mA([`$/Second (Out)`],(e,t)=>_c(t?.per_second_output))],utility:[mA([`$/Page`],(e,t)=>_c(t?.per_page)),mA([`$/Request`],(e,t)=>_c(t?.per_request))]};function _A(e){return gA[e]||gA.all}function vA(e){return _A(e).length+2}var yA=z(`
        `),bA=z(` `,1),xA=z(``),SA=z(` `),CA=z(` `),wA=z(`
        `),TA=z(`
        `),EA=z(`
        Model
        `);function DA(e,t){D(t,!0);let n=k(()=>Vc.activeCategory||`all`),r=k(()=>_A(L(n))),i=k(()=>vA(L(n)));var a=EA(),o=N(a),s=N(o),c=N(s),l=F(N(c));U(l,17,()=>L(r),ai,(e,t)=>{var n=xA();U(n,21,()=>L(t).headerLines,ai,(e,t,n)=>{var r=bA(),i=P(r),a=e=>{B(e,yA())};H(i,e=>{n>0&&e(a)});var o=F(i,1,!0);I(()=>V(o,L(t))),B(e,r)}),E(n),I(()=>W(n,1,Pi(L(t).class),`svelte-1911hy6`)),B(e,n)});var u=F(l);Pk(N(u),{}),E(u),E(c),E(s),U(F(s),17,()=>lk.filteredDisplayModelGroups,e=>e.key,(e,t)=>{var n=TA(),a=N(n),o=N(a),s=N(o),c=N(s),l=N(c),u=N(l),d=N(u,!0);E(u);var f=F(u,2),p=e=>{var n=SA(),r=N(n,!0);E(n),I(()=>V(r,`(`+L(t).type_label+`)`)),B(e,n)};H(f,e=>{L(t).type_label&&e(p)});var m=F(f,2),h=e=>{var n=CA(),r=N(n,!0);E(n),I(()=>V(r,L(t).item_count_label)),B(e,n)};H(m,e=>{L(t).item_count_label&&e(h)}),E(l);var g=F(l,2),_=e=>{var n=wA(),r=N(n,!0);E(n),I(()=>V(r,L(t).access_summary)),B(e,n)};H(g,e=>{L(t).access_summary&&e(_)}),E(c);var v=F(c,2),y=N(v),b=e=>{Mk(e,{get row(){return L(t)}})};H(y,e=>{L(t).access.selector&&e(b)});var x=F(y,2),S=e=>{{let n=k(()=>Ak.modelPricingButtonLabel(`provider pricing for `+L(t).display_name,Ak.hasProviderPricingOverride(L(t)))),r=k(()=>Ak.modelPricingButtonClass(Ak.hasProviderPricingOverride(L(t))));TT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>Ak.openProviderPricingOverrideEdit(L(t)),children:(e,t)=>{K(e,{get icon(){return Ka},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(x,e=>{Ak.modelPricingOverridesAvailable&&L(t).provider_name&&e(S)});var C=F(x,2),w=e=>{{let n=k(()=>X.rateLimitGaugeTitle(`provider `+L(t).display_name,X.rateLimitGaugeClassForProvider(L(t)))),r=k(()=>X.rateLimitGaugeClassForProvider(L(t)));TT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>X.openRateLimitInspectorForProvider(L(t)),children:(e,t)=>{K(e,{get icon(){return Qa},class:`table-icon-svg`})},$$slots:{default:!0}})}},T=k(()=>X.rateLimitsEnabled()&&L(t).provider_name);H(C,e=>{L(T)&&e(w)});var ee=F(C,2),te=e=>{{let n=k(()=>YO(`provider access for `+L(t).display_name,qO(L(t).access))),r=k(()=>JO(qO(L(t).access)));TT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>lk.openProviderOverrideEdit(L(t)),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(ee,e=>{lk.virtualModelsAvailable&&L(t).access.selector&&e(te)}),E(v),E(s),E(o),E(a),U(F(a),17,()=>L(t).rows,e=>e.key,(e,t)=>{fA(e,{get row(){return L(t)},get columns(){return L(r)}})}),E(n),I(()=>{G(o,`colspan`,L(i)),V(d,L(t).display_name)}),B(e,n)}),E(o),E(a),B(e,a),O()}var OA=z(``);function kA(e,t){let n=va(t,`enabled`,3,!1),r=va(t,`label`,3,``),i=va(t,`disabled`,3,!1),a=va(t,`restricted`,3,!1);var o=OA();let s;var c=F(N(o),2),l=N(c,!0);E(c),E(o),I(()=>{s=W(o,1,`alias-toggle`,null,s,{enabled:n(),restricted:a()}),o.disabled=i(),G(o,`aria-label`,(n()?`Disable `:`Enable `)+r()),V(l,t.text??(n()?`Enabled`:`Disabled`))}),R(`click`,o,function(...e){t.onclick?.apply(this,e)}),B(e,o)}Vr([`click`]);var AA=z(``),jA=z(`
        `);function MA(e,t){D(t,!0);let n=va(t,`model`,15,``),r=va(t,`weight`,15),i=va(t,`id`,3,void 0),a=va(t,`placeholder`,3,`openai/gpt-4o`),o=va(t,`showRemove`,3,!0);var s=jA(),c=N(s);ta(c);var l=F(c,2),u=e=>{var t=AA();ta(t),I(()=>t.disabled=lk.vmFormManaged),ua(t,r),B(e,t)},d=k(()=>lk.vmFormShowWeights());H(l,e=>{L(d)&&e(u)});var f=F(l,2),p=e=>{TT(e,{label:`Remove target`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,get onclick(){return t.onremove},get disabled(){return lk.vmFormManaged},children:(e,t)=>{K(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};H(f,e=>{o()&&e(p)}),E(s),I(()=>{G(c,`id`,i()),G(c,`placeholder`,a()),c.disabled=lk.vmFormManaged}),ua(c,n),B(e,s),O()}var NA=z(`

        `),PA=z(`adaptive lets the registered routing extension pick the target per + request.`,1),FA=z(`Add one target to make this a redirect/alias, or two or more to load + balance across them, then pick a strategy: round_robin rotates across targets + (weight biases the share) and cost always routes to the cheapest available + target. Leave Targets empty to make it only an access policy on the Source selector. The selector uses / for all providers and + models, for one provider, or for one model. user_paths is + matched against the effective request user_path: the managed API key user_path when present, otherwise the configured user path request header.`,1),IA=z(``),LA=z(`

        This virtual model is defined in configuration (config.yaml / VIRTUAL_MODELS) and is read-only here. Edit your configuration to change it.

        `),RA=z(``),zA=z(``),BA=z(``),VA=z(`
        `,1),HA=z(``),UA=z(`Use / to allow every user path. Use a team path to restrict to that + subtree, or an unused path to make the selector unavailable.`,1),WA=z(``),GA=z(` `),KA=z(`
        Targets
        `,1);function qA(e,t){D(t,!0);let n=lk;kn(()=>{n.vmFormOpen&&Os.ensureLoaded()});{let t=e=>{tC(e,{copyId:`virtual-model-help-copy`,label:`virtual model help`,get open(){return n.vmFormHelpOpen},set open(e){n.vmFormHelpOpen=e},title:e=>{var t=NA(),r=N(t,!0);E(t),I(()=>V(r,n.vmFormDisplayName||n.vmForm.source||`Virtual model`)),B(e,t)},help:e=>{He();var t=FA(),n=F(P(t),7),r=e=>{var t=PA();He(),B(e,t)},i=k(()=>Os.virtualModelStrategies().includes(`adaptive`));H(n,e=>{L(i)&&e(r)});var a=F(n,8);a.textContent=`{provider_name}/`;var o=F(a,2);o.textContent=`{provider_name}/{model}`,He(7),B(e,t)},$$slots:{title:!0,help:!0}})},r=e=>{var t=Zr(),r=P(t),i=e=>{var t=IA();I(()=>t.disabled=n.vmDeleting||n.vmSubmitting),R(`click`,t,()=>n.deleteVirtualModel()),B(e,t)};H(r,e=>{n.vmFormHasExisting&&!n.vmFormManaged&&e(i)}),B(e,t)},i=k(()=>n.vmDeleting||n.vmFormManaged),a=k(()=>n.vmFormMode===`edit`?`Save`:`Create`),o=k(()=>n.vmFormMode===`edit`?_o:po);kE(e,{get open(){return n.vmFormOpen},ariaLabel:`Virtual model editor`,get error(){return n.vmFormError},get submitting(){return n.vmSubmitting},get submitDisabled(){return L(i)},get submitLabel(){return L(a)},get submitIcon(){return L(o)},onclose:()=>n.closeVirtualModelForm(),onsubmit:()=>n.submitVirtualModelForm(),header:t,extraActions:r,children:(e,t)=>{var r=KA(),i=P(r),a=e=>{B(e,LA())};H(i,e=>{n.vmFormManaged&&e(a)});var o=F(i,2);jE(o,{id:`virtual-model-source`,label:`Source`,children:(e,t)=>{var r=RA();ta(r),I(()=>r.disabled=n.vmFormSourceLocked||n.vmFormManaged),ua(r,()=>n.vmForm.source,e=>n.vmForm.source=e),B(e,r)},$$slots:{default:!0}});var s=F(o,2);U(s,21,()=>Vc.models,e=>uO(e),(e,t)=>{var n=zA(),r=N(n,!0);E(n);var i={};I((e,t)=>{V(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>uO(L(t)),()=>uO(L(t))]),B(e,n)}),E(s);var c=F(s,2),l=F(N(c),2);{let e=k(()=>n.vmFormHasPrimaryTarget());MA(l,{id:`virtual-model-target`,get showRemove(){return L(e)},onremove:()=>n.removePrimaryTarget(),get model(){return n.vmForm.target_model},set model(e){n.vmForm.target_model=e},get weight(){return n.vmForm.target_weight},set weight(e){n.vmForm.target_weight=e}})}var u=F(l,2);U(u,17,()=>n.vmForm.targets,ai,(e,t,r)=>{MA(e,{placeholder:`groq/llama`,onremove:()=>n.removeVmTarget(r),get model(){return L(t).model},set model(e){L(t).model=e},get weight(){return L(t).weight},set weight(e){L(t).weight=e}})});var d=F(u,2),f=N(d);K(N(f),{get icon(){return po},class:`form-action-icon`}),He(2),E(f),E(d),E(c);var p=F(c,2),m=e=>{var t=VA(),r=P(t);jE(r,{id:`virtual-model-strategy`,label:`Load-balancing strategy`,children:(e,t)=>{var r=BA();U(r,21,()=>n.vmStrategyOptions(),e=>e.value,(e,t)=>{var n=zA(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(r),I(()=>r.disabled=n.vmFormManaged),Wi(r,()=>n.vmForm.strategy,e=>n.vmForm.strategy=e),B(e,r)},$$slots:{default:!0}});var i=F(r,2),a=N(i),o=N(a);ta(o),He(2),E(a),E(i),I(()=>o.disabled=n.vmFormManaged),da(o,()=>n.vmForm.session_affinity,e=>n.vmForm.session_affinity=e),B(e,t)},h=k(()=>n.vmFormShowStrategy());H(p,e=>{L(h)&&e(m)});var g=F(p,2),_=N(g);tC(_,{copyId:`virtual-model-user-paths-help`,label:`user paths help`,get open(){return n.vmFormUserPathsHelpOpen},set open(e){n.vmFormUserPathsHelpOpen=e},title:e=>{B(e,HA())},help:e=>{He();var t=UA();He(2),B(e,t)},$$slots:{title:!0,help:!0}});var v=F(_,2);dt(v),G(v,`placeholder`,`/ +/team/alpha +/non-existing`),E(g);var y=F(g,2);jE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=WA();dt(r),I(()=>r.disabled=n.vmFormManaged),ua(r,()=>n.vmForm.description,e=>n.vmForm.description=e),B(e,r)},$$slots:{default:!0}});var b=F(y,2),x=N(b),S=e=>{var t=GA(),r=N(t,!0);E(t),I(()=>V(r,`Default enabled: `+(n.vmFormDefaultEnabled?`yes`:`no`)+` · Effective now: `+(n.vmFormEffectiveEnabled?`yes`:`no`))),B(e,t)};H(x,e=>{n.vmFormMode===`edit`&&e(S)});var C=F(x,2),w=N(C);{let e=k(()=>n.vmFormToggleRestricted()),t=k(()=>n.vmFormToggleLabel());kA(w,{get enabled(){return n.vmForm.enabled},get restricted(){return L(e)},label:`virtual model`,get disabled(){return n.vmFormManaged},get text(){return L(t)},onclick:()=>{n.vmFormManaged||(n.vmForm.enabled=!n.vmForm.enabled)}})}E(C),E(b),I(()=>{f.disabled=n.vmFormManaged,v.disabled=n.vmFormManaged}),R(`click`,f,()=>n.addVmTarget()),ua(v,()=>n.vmForm.user_paths,e=>n.vmForm.user_paths=e),B(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}})}O()}Vr([`click`]);var JA=z(`

        Pricing override

        `,1),YA=z(``),XA=z(``),ZA=z(``),QA=z(``),$A=z(`
        `),ej=z(`
        Tiered pricing exists for this override and will be preserved. Tier editing can be added + without a database migration.
        `),tj=z(`
        No pricing fields set.
        `),nj=z(`
        `),rj=z(`

        Currency is USD. Saved fields override model registry and config.yaml pricing for this + selector; unset fields continue to inherit.

        Price Type USD Source
        `,1);function ij(e,t){D(t,!0);let n=Ak;kE(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=JA(),r=F(P(t),2),i=N(r,!0);E(r),I(()=>V(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),B(e,t)},extraActions:e=>{var t=Zr(),r=P(t),i=e=>{var t=YA();I(()=>t.disabled=n.modelPricingOverrideSubmitting),R(`click`,t,()=>n.deleteModelPricingOverride()),B(e,t)};H(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),B(e,t)},children:(e,t)=>{var r=rj(),i=P(r),a=N(i);jE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=XA();ta(r),ua(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),B(e,r)},$$slots:{default:!0}});var o=F(a,2),s=e=>{jE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=QA();U(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=ZA(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(r),R(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Wi(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),B(e,r)},$$slots:{default:!0}})};H(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),E(i);var c=F(i,4);U(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=$A(),a=N(i),o=N(a),s=F(o,2);U(s,21,()=>n.availablePricingFieldOptions(L(t)),e=>e.value,(e,t)=>{var n=ZA(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).group+` - `+L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(s),E(a);var c=F(a,2),l=N(c),u=F(l,2);ta(u),E(c);var d=F(c,2);{let e=k(()=>`Remove `+n.pricingFieldLabel(L(t).field));TT(d,{get label(){return L(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(L(t)),children:(e,t)=>{K(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}E(i),I(()=>{G(o,`for`,`pricing-type-`+L(t).id),G(s,`id`,`pricing-type-`+L(t).id),G(l,`for`,`pricing-value-`+L(t).id),G(u,`id`,`pricing-value-`+L(t).id)}),Wi(s,()=>L(t).field,e=>L(t).field=e),ua(u,()=>L(t).value,e=>L(t).value=e),B(e,i)}),E(c);var l=F(c,2),u=N(l);K(N(u),{get icon(){return po},class:`form-action-icon`}),He(2),E(u),E(l);var d=F(l,2),f=e=>{B(e,ej())};H(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=F(d,2),m=F(N(p),2),h=e=>{B(e,tj())},g=k(()=>n.modelPricingEffectivePreviewRows().length===0);H(m,e=>{L(g)&&e(h)}),U(F(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=nj(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=N(a,!0);E(a);var s=F(a,2),c=N(s,!0);E(s),E(n),I(e=>{V(i,L(t).label),V(o,e),V(c,L(t).source)},[()=>L(t).value===null||L(t).value===void 0?`-`:_c(Number(L(t).value))]),B(e,n)}),E(p),R(`click`,u,()=>n.addModelPricingOverrideRow()),B(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),O()}Vr([`click`,`change`]);var aj=z(`

        Failover mapping

        `,1),oj=z(``),sj=z(`

        This failover mapping is defined in configuration and is read-only here.

        `),cj=z(``),lj=z(`
        `),uj=z(`
        `,1),dj=z(`
        `);function fj(e,t){D(t,!0);{let t=e=>{var t=aj(),n=F(P(t),2),r=N(n,!0);E(n),I(()=>V(r,Z.failoverForm.source||`Failover`)),B(e,t)},n=e=>{var t=Zr(),n=P(t),r=e=>{var t=oj();I(()=>t.disabled=Z.failoverSaving||Z.failoverGenerating),R(`click`,t,()=>Z.deleteFailoverRule()),B(e,t)};H(n,e=>{Z.failoverFormMode===`edit`&&!Z.failoverFormManaged&&e(r)}),B(e,t)},r=k(()=>Z.failoverGenerating||Z.failoverFormManaged);kE(e,{get open(){return Z.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Z.failoverError},get submitting(){return Z.failoverSaving},get submitDisabled(){return L(r)},submitLabel:`Save`,onclose:()=>Z.closeFailoverForm(),onsubmit:()=>Z.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=dj(),r=N(n),i=e=>{B(e,sj())};H(r,e=>{Z.failoverFormManaged&&e(i)});var a=F(r,2);U(a,21,()=>Vc.models,ai,(e,t)=>{var n=cj(),r=N(n,!0);E(n);var i={};I((e,t)=>{V(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>uO(L(t)),()=>uO(L(t))]),B(e,n)}),E(a);var o=F(a,2);jE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=uj(),r=P(n),i=N(r),a=N(i);ta(a);var o=F(a,2),s=e=>{TT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Z.removePrimaryFailoverTarget(),get disabled(){return Z.failoverFormManaged},children:(e,t)=>{K(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}})};H(o,e=>{Z.failoverForm.target_model&&e(s)}),E(i),U(F(i,2),17,()=>Z.failoverForm.targets,ai,(e,t,n)=>{var r=lj(),i=N(r);ta(i),TT(F(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Z.removeFailoverTarget(n),get disabled(){return Z.failoverFormManaged},children:(e,t)=>{K(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),E(r),I(()=>i.disabled=Z.failoverFormManaged),ua(i,()=>L(t).model,e=>L(t).model=e),B(e,r)}),E(r);var c=F(r,2),l=N(c);K(N(l),{get icon(){return po},class:`form-action-icon`}),He(2),E(l);var u=F(l,2),d=N(u);K(d,{get icon(){return Fo},class:`form-action-icon`});var f=F(d,2),p=N(f,!0);E(f),E(u),E(c),I(e=>{a.disabled=Z.failoverFormManaged,l.disabled=Z.failoverFormManaged||Z.failoverGenerating||Z.failoverSaving,u.disabled=e,V(p,Z.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Z.failoverFormManaged||Z.failoverGenerating||Z.failoverSaving||!Z.failoverEnabled()]),ua(a,()=>Z.failoverForm.target_model,e=>Z.failoverForm.target_model=e),R(`click`,l,()=>Z.addFailoverTarget()),R(`click`,u,()=>Z.generateFailoverForForm()),B(e,n)},$$slots:{default:!0}});var s=F(o,2),c=N(s);kA(N(c),{get enabled(){return Z.failoverForm.enabled},label:`failover mapping`,get disabled(){return Z.failoverFormManaged},onclick:()=>{Z.failoverFormManaged||(Z.failoverForm.enabled=!Z.failoverForm.enabled)}}),E(c),E(s),E(n),B(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}O()}Vr([`click`]);var pj=z(` `),mj=z(`
        `),hj=z(``),gj=z(`
        `),_j=z(`

        No failover suggestions were generated.

        `),vj=z(`

        No failover drafts match the filter.

        `),yj=z(``),bj=z(``);function xj(e,t){D(t,!0),Bs(e,{get open(){return Z.failoverDraftsOpen},variant:`editor`,onclose:()=>Z.closeFailoverDraftsModal(),children:(e,t)=>{var n=bj(),r=N(n),i=F(N(r),2),a=N(i),o=e=>{var t=pj(),n=N(t,!0);E(t),I(e=>V(n,e),[()=>Z.failoverDraftCountLabel()]),B(e,t)};H(a,e=>{Z.failoverGeneratedRules.length>0&&e(o)}),Is(F(a,2),{label:`Close failover drafts`,onclick:()=>Z.closeFailoverDraftsModal(),get disabled(){return Z.failoverDraftSaving}}),E(i),E(r);var s=F(r,2),c=e=>{CT(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};H(s,e=>{Z.failoverGenerating&&e(c)});var l=F(s,2),u=e=>{var t=mj(),n=N(t);Ow(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Z.failoverDraftFilter},set value(e){Z.failoverDraftFilter=e}});var r=F(n,2),i=N(r);K(i,{get icon(){return Ba},class:`form-action-icon`});var a=F(i,2),o=N(a,!0);E(a),E(r),E(t),I(e=>{r.disabled=Z.failoverDraftSaving,V(o,e)},[()=>Z.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),R(`click`,r,()=>Z.toggleAllFailoverDrafts()),B(e,t)};H(l,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length>0&&e(u)});var d=F(l,2),f=e=>{var t=gj();U(t,21,()=>Z.filteredFailoverDrafts(),e=>`failover-draft:`+Z.failoverPrimaryModel(e),(e,t)=>{var n=hj(),r=N(n);ta(r);var i=F(r,2),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s,!0);E(s),E(i),E(n),I((e,t,n,i)=>{ra(r,e),r.disabled=Z.failoverDraftSaving,G(r,`aria-label`,t),V(o,n),V(c,i)},[()=>Z.failoverDraftSelected(L(t)),()=>`Select failover draft for `+Z.failoverPrimaryModel(L(t)),()=>Z.failoverPrimaryModel(L(t)),()=>Z.failoverTargetLabel(L(t))]),R(`change`,r,e=>Z.setFailoverDraftSelected(L(t),e.currentTarget.checked)),B(e,n)}),E(t),B(e,t)},p=k(()=>!Z.failoverGenerating&&Z.filteredFailoverDrafts().length>0);H(d,e=>{L(p)&&e(f)});var m=F(d,2),h=e=>{B(e,_j())};H(m,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length===0&&!Z.failoverError&&e(h)});var g=F(m,2),_=e=>{B(e,vj())},v=k(()=>!Z.failoverGenerating&&Z.failoverGeneratedRules.length>0&&Z.filteredFailoverDrafts().length===0);H(g,e=>{L(v)&&e(_)});var y=F(g,2),b=e=>{var t=yj(),n=N(t,!0);E(t),I(()=>V(n,Z.failoverError)),B(e,t)};H(y,e=>{Z.failoverError&&e(b)});var x=F(y,2),S=N(x),C=F(S,2),w=N(C);K(w,{get icon(){return _o},class:`form-action-icon`});var T=F(w,2),ee=N(T,!0);E(T),E(C),E(x),E(n),I(e=>{S.disabled=Z.failoverDraftSaving,C.disabled=e,V(ee,Z.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Z.failoverGenerating||Z.failoverDraftSaving||Z.selectedFailoverDraftCount()===0]),R(`click`,S,()=>Z.closeFailoverDraftsModal()),R(`click`,C,()=>Z.saveSelectedFailoverDrafts()),B(e,n)},$$slots:{default:!0}}),O()}Vr([`click`,`change`]);var Sj=z(`
        Rate limit management is unavailable.
        `),Cj=z(` Add`,1),wj=z(`

        `),Tj=z(`

        No rules.

        `),Ej=z(` Edit`,1),Dj=z(`
        `),Oj=z(`
        `),kj=z(`

        `),Aj=z(``),jj=z(``);function Mj(e,t){D(t,!0);function n(){q.dialogOpen||X.closeRateLimitInspector()}Bs(e,{get open(){return X.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=jj(),r=N(n),i=N(r),a=F(N(i),2),o=N(a),s=N(o,!0);E(o),E(a),E(i),Is(F(i,2),{label:`Close rate limits inspector`,onclick:()=>X.closeRateLimitInspector()}),E(r);var c=F(r,2),l=e=>{CT(e,{label:`Loading rate limits...`})},u=e=>{B(e,Sj())},d=e=>{var t=Zr();U(P(t),17,()=>X.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=kj(),r=N(n),i=N(r),a=N(i,!0);E(i);var o=F(i,2);{let e=k(()=>`Add `+L(t).title.toLowerCase());TT(o,{get label(){return L(e)},class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(L(t).scope,L(t).subject),children:(e,t)=>{var n=Cj();K(P(n),{get icon(){return po},class:`table-icon-svg`}),He(2),B(e,n)},$$slots:{default:!0}})}E(r);var s=F(r,2),c=e=>{var n=wj(),r=N(n,!0);E(n),I(()=>V(r,L(t).hint)),B(e,n)};H(s,e=>{L(t).hint&&e(c)});var l=F(s,2),u=e=>{B(e,Tj())},d=e=>{var n=Oj();U(n,21,()=>L(t).items,e=>X.rateLimitKey(e),(e,t)=>{var n=Dj(),r=N(n),i=N(r),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s),l=N(c);{let e=k(()=>X.rateLimitIsConcurrent(L(t))?ja:ko);K(l,{get icon(){return L(e)},class:`budget-period-icon`})}var u=F(l,2),d=N(u,!0);E(u),E(c),E(s);var f=F(s,2),p=N(f),m=N(p),h=N(m,!0);E(m);var g=F(m,2),_=N(g,!0);E(g),E(p);var v=F(p,2),y=N(v),b=e=>{TT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(null,null,L(t)),children:(e,t)=>{var n=Ej();K(P(n),{get icon(){return uo},class:`budget-action-icon`}),He(2),B(e,n)},$$slots:{default:!0}})},x=k(()=>!X.rateLimitIsReadOnly(L(t)));H(y,e=>{L(x)&&e(b)}),E(v),E(f),E(i),E(r),E(n),I((e,t,r,i,a,s,c,l)=>{W(n,1,`budget-row ${e??``}`),Vi(n,t),G(n,`title`,r),V(o,i),V(d,a),V(h,s),G(g,`title`,c),V(_,l)},[()=>X.rateLimitPressureClass(L(t)),()=>X.rateLimitPressureStyle(L(t)),()=>X.rateLimitPressurePercent(L(t))+`% of the most constrained cap used`,()=>X.rateLimitSubject(L(t)),()=>X.rateLimitPeriodLabel(L(t)),()=>X.rateLimitInspectorSummary(L(t)),()=>X.rateLimitIsReadOnly(L(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>X.rateLimitSourceLabel(L(t))]),B(e,n)}),E(n),B(e,n)};H(l,e=>{L(t).items.length===0?e(u):e(d,-1)}),E(n),I(()=>V(a,L(t).title)),B(e,n)}),B(e,t)};H(c,e=>{X.rateLimitsLoading?e(l):X.rateLimitsAvailable?e(d,-1):e(u,1)});var f=F(c,2),p=N(f),m=F(p,2),h=e=>{var t=Aj();R(`click`,t,()=>{X.closeRateLimitInspector(),Yo.navigate(`rate-limits`)}),B(e,t)},g=k(()=>X.rateLimitsEnabled());H(m,e=>{L(g)&&e(h)}),E(f),E(n),I(()=>V(s,X.rateLimitInspector.title)),R(`click`,p,()=>X.closeRateLimitInspector()),B(e,n)},$$slots:{default:!0}}),O()}Vr([`click`]);var Nj=z(`
        models
        `),Pj=z(`
        Virtual models feature is unavailable.
        `),Fj=z(`
        `),Ij=z(``),Lj=z(`
        `),Rj=z(``),zj=z(`
        `),Bj=z(`

        No models registered.

        `),Vj=z(`

        No models in this category.

        `),Hj=z(`

        No models match your filter.

        `),Uj=z(`
        `);function Wj(e,t){D(t,!0),kn(()=>{q.refreshTick,Yo.page===`models`&&(lk.fetchVirtualModels(),Ak.fetchModelPricingOverrides(),Z.fetchFailoverRules(),X.fetchRateLimitsPage())}),kn(()=>{let e=lk.filteredDisplayModels.length;return Tr(()=>lk.restartModelRendering(e)),()=>lk.stopModelRendering()});let n=k(()=>q.needsAuth);var r=Uj(),i=N(r),a=F(N(i),2),o=e=>{var t=Nj(),n=N(t),r=N(n,!0);E(n),He(),E(t),I(()=>V(r,Vc.filter?lk.filteredDisplayModels.length+` / `+lk.displayModels.length:lk.displayModels.length)),B(e,t)};H(a,e=>{lk.displayModels.length>0&&e(o)}),E(i);var s=F(i,2);Uc(s,{});var c=F(s,2),l=e=>{B(e,Pj())};H(c,e=>{!lk.virtualModelsAvailable&&!L(n)&&e(l)});var u=F(c,2),d=e=>{var t=Fj(),n=N(t,!0);E(t),I(()=>V(n,lk.aliasError)),B(e,t)};H(u,e=>{lk.aliasError&&!L(n)&&e(d)});var f=F(u,2),p=e=>{var t=Fj(),n=N(t,!0);E(t),I(()=>V(n,Ak.modelPricingOverrideError)),B(e,t)};H(f,e=>{Ak.modelPricingOverrideError&&!L(n)&&!Ak.modelPricingOverrideFormOpen&&e(p)});var m=F(f,2),h=e=>{var t=Lj();U(t,21,()=>Vc.categories,e=>e.category,(e,t)=>{var n=Ij();let r;var i=N(n),a=N(i,!0);E(i);var o=F(i,2),s=N(o,!0);E(o),E(n),I(()=>{r=W(n,1,`category-tab svelte-scpjps`,null,r,{active:Vc.activeCategory===L(t).category}),V(a,L(t).display_name),V(s,L(t).count)}),R(`click`,n,()=>Vc.selectCategory(L(t).category)),B(e,n)}),E(t),B(e,t)};H(m,e=>{Vc.categories.length>0&&e(h)});var g=F(m,2),_=e=>{var t=zj(),n=N(t);Ow(N(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Vc.filter},set value(e){Vc.filter=e}}),E(n);var r=F(n,2),i=N(r),a=e=>{var t=Rj();K(N(t),{get icon(){return po},class:`alias-create-icon`}),He(2),E(t),R(`click`,t,()=>lk.openVirtualModelCreate()),B(e,t)};H(i,e=>{lk.virtualModelsAvailable&&e(a)}),E(r),E(t),B(e,t)};H(g,e=>{(lk.displayModels.length>0||Vc.filter||lk.virtualModelsAvailable)&&e(_)});var v=F(g,2),y=e=>{{let t=k(()=>lk.modelLoadingText());CT(e,{get label(){return L(t)},class:`models-loading-state`})}},b=k(()=>lk.modelsBusy()&&!L(n));H(v,e=>{L(b)&&e(y)});var x=F(v,2);qA(x,{});var S=F(x,2);ij(S,{});var C=F(S,2),w=e=>{DA(e,{})};H(C,e=>{(lk.displayModels.length>0||Vc.filter)&&e(w)});var T=F(C,2),ee=e=>{B(e,Bj())};H(T,e=>{lk.displayModels.length===0&&!Vc.loading&&!L(n)&&!Vc.filter&&(Vc.activeCategory===`all`||!Vc.activeCategory)&&e(ee)});var te=F(T,2),ne=e=>{B(e,Vj())};H(te,e=>{lk.displayModels.length===0&&!Vc.loading&&!L(n)&&!Vc.filter&&Vc.activeCategory&&Vc.activeCategory!==`all`&&e(ne)});var re=F(te,2),ie=e=>{B(e,Hj())};H(re,e=>{lk.displayModels.length>0&&lk.filteredDisplayModels.length===0&&Vc.filter&&e(ie)});var ae=F(re,2);Mj(ae,{});var oe=F(ae,2);WD(oe,{});var se=F(oe,2);fj(se,{}),xj(F(se,2),{}),E(r),B(e,r),O()}Vr([`click`]);var Gj=`draft-workflow-preview`;function Kj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function qj(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function Jj(e){return{ref:``,step:Number.isFinite(e)?e:10}}function Yj(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function Xj(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function Zj(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function Qj(e){return{cache:!!Xj(e,`cache`,!1),audit:!!Xj(e,`audit`,!1),usage:!!Xj(e,`usage`,!1),budget:Xj(e,`budget`,!0)!==!1,guardrails:!!Xj(e,`guardrails`,!1),failover:Xj(e,`failover`,!0)!==!1}}function $j(e,t){let n=Qj(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function eM(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...$j((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:Qj(n).failover}}function tM(e,t){return eM(e,t).failover?`On`:`Off`}function nM(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:Yj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function rM(e,t){return eM(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function iM(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function aM(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function oM(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=aM(e);t&&n.add(t)}),[...n].sort()}function sM(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&aM(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function cM(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function lM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function uM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=lM(e);return n===`global`?`All models`:n}function dM(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function fM(e){if(dM(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function pM(e){let t=e||Kj(),n=String(t.scope_provider||``).trim(),r=fM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function mM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=fM(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function hM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=fM(e&&e.scope_user_path),i=mM({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function gM(e,t){let n=t||qj(),r=iM(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=fM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===fM(n.scope_user_path)}function _M(e,t,n){let r=pM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>gM(e,r))||null}function vM(e){return String(e&&e.scope_type||``).trim()!==`global`}function yM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function bM(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,iM(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function xM(e,t){let n=e||Kj(),r=pM(n),i=Qj(n.features||{}),a=$j(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?nM(n):[];return{id:Gj,scope_type:mM(r),scope_display:hM(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function SM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Kj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=fM(a.scope_user_path),l=Qj(a.features||{}),u=$j(l,t),d=_M(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=Zj(f,`failover`),m=p?Xj(f,`failover`,!0)!==!1:null,h=i||qj(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&fM(h.scope_user_path)===fM(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:Yj(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function CM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||qj(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!oM(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=sM(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=dM(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var wM=new class{#e=A(M([]));get workflows(){return L(this.#e)}set workflows(e){j(this.#e,e,!0)}#t=A(!0);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get error(){return L(this.#r)}set error(e){j(this.#r,e,!0)}#i=A(``);get filter(){return L(this.#i)}set filter(e){j(this.#i,e,!0)}#a=A(!1);get formOpen(){return L(this.#a)}set formOpen(e){j(this.#a,e,!0)}#o=A(!1);get submitting(){return L(this.#o)}set submitting(e){j(this.#o,e,!0)}#s=A(``);get deactivatingID(){return L(this.#s)}set deactivatingID(e){j(this.#s,e,!0)}#c=A(``);get formError(){return L(this.#c)}set formError(e){j(this.#c,e,!0)}#l=A(!1);get formHydrated(){return L(this.#l)}set formHydrated(e){j(this.#l,e,!0)}#u=A(M(qj()));get hydratedScope(){return L(this.#u)}set hydratedScope(e){j(this.#u,e,!0)}#d=A(M([]));get guardrailRefs(){return L(this.#d)}set guardrailRefs(e){j(this.#d,e,!0)}#f=A(M(Kj()));get form(){return L(this.#f)}set form(e){j(this.#f,e,!0)}#p=null;failoverVisible(){return Os.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:Os.cacheVisible(),audit:Os.auditVisible(),usage:Os.usageVisible(),budget:Os.budgetsVisible(),guardrails:Os.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return bM(this.workflows,this.filter)}providerOptions(){return oM(Vc.models,this.hydratedScope)}modelOptions(e){return sM(Vc.models,e,this.hydratedScope)}activeScopeMatch(){return _M(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return xM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=qj(),this.form=Kj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:iM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?Qj(e.workflow_payload.features):eM(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:Yj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):nM(e);this.form={scope_provider:iM(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=qj(),this.form=Kj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(Jj(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return SM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await ET(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await ET(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([Os.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=CM(e,{models:Vc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await DT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}J.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!vM(e))return;let n=uM(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await DT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){J.error(e.error);return}J.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function TM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function EM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=M({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await TM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var DM=z(``);function OM(e,t){D(t,!0);let n=va(t,`workflowID`,3,``),r=EM({logPrefix:`Failed to copy workflow ID:`});kn(()=>{n(),r.reset()});let i=k(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=k(()=>n()?L(i)+` `+n():L(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=DM();let c;var l=F(N(s),4),u=N(l,!0);E(l);var d=F(l,2);K(N(d),{get icon(){return Ja}}),E(d),E(s),I(()=>{c=W(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),G(s,`title`,L(i)),G(s,`aria-label`,L(a)),V(u,n())}),R(`click`,s,o),B(e,s),O()}Vr([`click`]);var kM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Dt(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=NM(),l=N(c),u=e=>{var t=AM();let r;K(N(t),{get icon(){return n()}}),E(t),I(()=>r=W(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":L(i)===`workflow-node-endpoint`})),B(e,t)};H(l,e=>{n()&&e(u)});var d=F(l,2),f=N(d,!0);E(d);var p=F(d,2),m=e=>{var t=jM(),n=N(t,!0);E(t),I(()=>V(n,s())),B(e,t)};H(p,e=>{s()&&e(m)});var g=F(p,2),_=e=>{var t=MM(),n=N(t,!0);E(t),I(()=>V(n,o())),B(e,t)};H(g,e=>{o()&&e(_)}),E(c),I(()=>{W(c,1,Pi([`workflow-node`,L(i),a()]),`svelte-nbptrg`),V(f,r())}),B(e,c)},AM=z(`
        `),jM=z(` `),MM=z(` `),NM=z(`
        `),PM=z(`
        `,1),FM=z(`
        `,1),IM=z(`
        `),LM=z(`
        Async
        `),RM=z(`
        `);function zM(e,t){D(t,!0);let n=va(t,`chart`,19,()=>({}));var r=RM();let i;var a=N(r),o=e=>{OM(e,{get workflowID(){return n().workflowID}})};H(a,e=>{n().workflowID&&e(o)});var s=F(a,2),c=N(s);kM(c,()=>({icon:No,label:`Client`,variant:`workflow-node-endpoint`}));var l=F(c,4);kM(l,()=>({icon:Xa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=F(l,2),d=e=>{var t=PM(),r=P(t);kM(F(r,2),()=>({icon:Xa,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),I(()=>W(r,1,Pi([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),B(e,t)};H(u,e=>{n().showCache&&e(d)});var f=F(u,2),p=e=>{var t=FM();kM(F(P(t),2),()=>({icon:Po,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),B(e,t)};H(f,e=>{n().showBudget&&e(p)});var m=F(f,2),h=e=>{var t=FM();kM(F(P(t),2),()=>({icon:To,label:`Guardrails`,sub:n().guardrailLabel})),B(e,t)};H(m,e=>{n().showGuardrails&&e(h)});var g=F(m,2),_=F(g,2);kM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=F(_,2),y=e=>{var t=PM(),r=P(t);kM(F(r,2),()=>({icon:oo,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),I(()=>W(r,1,Pi([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),B(e,t)};H(v,e=>{n().showFailover&&e(y)});var b=F(v,2);kM(F(b,2),()=>({icon:Wa,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),E(s);var x=F(s,2),S=e=>{var t=LM(),r=N(t),i=N(r),a=e=>{kM(e,()=>({icon:Ra,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};H(i,e=>{n().showUsage&&e(a)});var o=F(i,2),s=e=>{B(e,IM())};H(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=F(o,2),l=e=>{kM(e,()=>({icon:Za,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};H(c,e=>{n().showAudit&&e(l)}),E(r),He(4),E(t),B(e,t)};H(x,e=>{n().showAsync&&e(S)}),E(r),I(()=>{i=W(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),W(g,1,Pi([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),W(b,1,Pi([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),B(e,r),O()}function BM(e){let t=nM(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function VM(e,t){return t&&t.provider?t.provider:iM(e&&e.scope)||`AI`}function HM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function UM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function WM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:Qj(t)}function GM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function KM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return KM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=KM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:KM(e.error,t+1)):``}function qM(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||KM(t.response_body)}function JM(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function YM(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=GM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=JM(n);if(i)return i;let a=iM(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function XM(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=GM(e),o=YM(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=qM(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function ZM(e){return!!(e&&e.cacheHit)}function QM(e){return!!(e&&e.failoverTarget)}function $M(e){return!!(e&&e.budgetExceeded)}function eN(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function tN(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function nN(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function rN(e,t,n,r){return e?$M(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function iN(e){return $M(e)?`Exceeded`:null}function aN(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function oN(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function sN(e){return e&&e.failoverTarget?`Redirected`:null}function cN(e){return e&&e.failoverTarget?e.failoverTarget:null}function lN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function uN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function dN(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function fN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function pN(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function mN(e){return!e||!e.authMethod?null:e.authMethod}function hN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function gN(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function _N(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function vN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function yN(e,t){return!e||!e._live||gN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function bN(e,t,n){return!e||!e._live?``:vN(e)?`usage`:yN(e,t)?`audit`:gN(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function xN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?Qj(i.features):eM(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||$M(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||QM(t),m=UM(e,i.entry),h=bN(i.entry,t,a),g=vN(i.entry),_=yN(i.entry,t),v=gN(i.entry,s),y=_N(i.entry,s);return{showBudget:c,budgetNodeClass:rN(c,t,s,h===`budget`),budgetStatusLabel:iN(t),showGuardrails:l,guardrailLabel:l?BM(e):``,showCache:!!i.forceCache||!!a.cache||ZM(t),cacheNodeClass:eN(t,h===`cache`),cacheConnClass:tN(t),cacheStatusLabel:nN(t),showFailover:p,failoverNodeClass:p?aN(t):``,failoverConnClass:p?oN(t):``,failoverStatusLabel:p?sN(t):null,failoverTargetLabel:p?cN(t):null,aiLabel:VM(e,t),aiSublabel:HM(e,t),aiConnClass:lN(t),aiNodeClass:uN(t,h===`ai`),responseConnClass:lN(t),responseNodeClass:dN(t,h===`response`),responseNodeSublabel:fN(t),authNodeClass:pN(t,h===`auth`),authNodeSublabel:mN(t),usageNodeClass:hN(u,y,g),auditNodeClass:hN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function SN(e,t){return xN(e,null,{forceCache:!1},t)}function CN(e,t,n){return xN(t,XM(e,t),{entry:e,features:WM(e)||(t?eM(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var wN=z(`

        `),TN=z(`

        `),EN=z(`
        `),DN=z(`
        `),ON=z(`

        No guardrails configured for this workflow.

        `),kN=z(`

        Guardrails

        `),AN=z(``),jN=z(`

        `);function MN(e,t){D(t,!0);let n=va(t,`preview`,3,!1),r=k(()=>wM.featureCaps()),i=k(()=>uM(t.workflow)),a=k(()=>rM(t.workflow,L(r))),o=k(()=>SN(t.workflow,L(r))),s=k(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=jN();let l;var u=N(c),d=N(u),f=N(d),p=N(f,!0);E(f);var m=F(f,2),h=N(m,!0);E(m),E(d);var g=F(d,2),_=N(g),v=N(_,!0);E(_),E(g),E(u);var y=F(u,2),b=e=>{var n=wN(),r=N(n,!0);E(n),I(()=>V(r,t.workflow.description)),B(e,n)};H(y,e=>{t.workflow.description&&e(b)});var x=F(y,2),S=e=>{var n=TN(),i=N(n);E(n),I(e=>V(i,`Failover: ${e??``}`),[()=>tM(t.workflow,L(r))]),B(e,n)},C=k(()=>wM.failoverVisible());H(x,e=>{L(C)&&e(S)});var w=F(x,2);zM(w,{get chart(){return L(o)}});var T=F(w,2),ee=e=>{var t=kN(),n=N(t),r=F(N(n),2),i=N(r,!0);E(r),E(n);var o=F(n,2),c=e=>{var t=DN();U(t,23,()=>L(a),(e,t)=>L(s)+t,(e,t)=>{var n=EN(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=N(a);E(a),E(n),I(()=>{V(i,L(t).ref),V(o,`step ${L(t).step??``}`)}),B(e,n)}),E(t),B(e,t)},l=e=>{B(e,ON())};H(o,e=>{L(a).length>0?e(c):e(l,-1)}),E(t),I(()=>V(i,L(a).length?L(a).length+` steps`:`None`)),B(e,t)},te=k(()=>Os.guardrailsVisible());H(T,e=>{L(te)&&e(ee)});var ne=F(T,2),re=e=>{var n=AN(),r=N(n),a=N(r),o=N(a,!0);E(a);var s=F(a,2);{let e=k(()=>`Edit workflow `+L(i));TT(s,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>wM.openCreate(t.workflow),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}E(r);var c=F(r,2),l=N(c),u=N(l);E(l);var d=F(l,2),f=N(d);E(d);var p=F(d,2),m=N(p);E(p),E(c),E(n),I((e,n,r,s)=>{a.disabled=e,G(a,`aria-label`,`Deactivate workflow `+L(i)),G(a,`title`,n),V(o,wM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),V(u,`version: v${t.workflow.version??``}`),V(f,`created: ${r??``}`),V(m,`hash: ${s??``}`)},[()=>wM.deactivatingID===t.workflow.id||!vM(t.workflow),()=>vM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>_s.formatTimestamp(t.workflow.created_at),()=>yM(t.workflow.workflow_hash)]),R(`click`,a,()=>wM.deactivate(t.workflow)),B(e,n)};H(ne,e=>{n()||e(re)}),E(c),I((e,t)=>{l=W(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),V(p,e),V(h,L(i)),V(v,t)},[()=>cM(t.workflow),()=>lM(t.workflow)]),B(e,c),O()}Vr([`click`]);var NN=z(`

        `),PN=z(``),FN=z(``),IN=z(``),LN=z(``),RN=z(``),zN=z(``),BN=z(``),VN=z(``),HN=z(``),UN=z(``),WN=z(``),GN=z(``),KN=z(`
        No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
        `),qN=z(`
        `),JN=z(`
        `),YN=z(`

        No guardrail steps configured yet.

        `),XN=z(`

        Guardrail Steps

        Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

        `),ZN=z(`

        Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

        Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

        If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

        Preview

        Live
        `,1);function QN(e,t){D(t,!0);{let t=e=>{tC(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=NN(),n=N(t,!0);E(t),I(e=>V(n,e),[()=>wM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),B(e,t)},$$slots:{title:!0}})},n=k(()=>wM.submitLabel()),r=k(()=>wM.submittingLabel()),i=k(()=>wM.submitMode()===`create`?po:_o);kE(e,{get open(){return wM.formOpen},ariaLabel:`Workflow editor`,get error(){return wM.formError},get submitting(){return wM.submitting},get submitLabel(){return L(n)},get submittingLabel(){return L(r)},get submitIcon(){return L(i)},dialogClass:`workflow-editor`,onclose:()=>wM.closeForm(),onsubmit:()=>wM.submitForm(),header:t,children:(e,t)=>{var n=ZN(),r=P(n),i=N(r);jE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=FN(),r=N(n);r.value=r.__value=``,U(F(r),16,()=>wM.providerOptions(),e=>e,(e,t)=>{var n=PN(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(n),R(`change`,n,e=>wM.setProvider(e.currentTarget.value)),Wi(n,()=>wM.form.scope_provider,e=>wM.form.scope_provider=e),B(e,n)},$$slots:{default:!0}});var a=F(i,2),o=e=>{jE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=IN(),r=N(n);r.value=r.__value=``,U(F(r),17,()=>wM.modelOptions(wM.form.scope_provider),e=>wM.form.scope_provider+`-`+e,(e,t)=>{var n=PN(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t)),i!==(i=L(t))&&(n.value=(n.__value=L(t))??``)}),B(e,n)}),E(n),Wi(n,()=>wM.form.scope_model,e=>wM.form.scope_model=e),B(e,n)},$$slots:{default:!0}})};H(a,e=>{wM.form.scope_provider&&e(o)});var s=F(a,2);jE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=LN();ta(n),ua(n,()=>wM.form.name,e=>wM.form.name=e),B(e,n)},$$slots:{default:!0}}),jE(F(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=RN();ta(n),ua(n,()=>wM.form.scope_user_path,e=>wM.form.scope_user_path=e),B(e,n)},$$slots:{default:!0}}),E(r);var c=F(r,8);jE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=zN();dt(n),ua(n,()=>wM.form.description,e=>wM.form.description=e),B(e,n)},$$slots:{default:!0}});var l=F(c,2),u=N(l),d=e=>{var t=BN(),n=N(t);ta(n),He(2),E(t),da(n,()=>wM.form.features.cache,e=>wM.form.features.cache=e),B(e,t)},f=k(()=>Os.cacheVisible());H(u,e=>{L(f)&&e(d)});var p=F(u,2),m=e=>{var t=VN(),n=N(t);ta(n),He(2),E(t),da(n,()=>wM.form.features.audit,e=>wM.form.features.audit=e),B(e,t)},h=k(()=>Os.auditVisible());H(p,e=>{L(h)&&e(m)});var g=F(p,2),_=e=>{var t=HN(),n=N(t);ta(n),He(2),E(t),da(n,()=>wM.form.features.usage,e=>wM.form.features.usage=e),B(e,t)},v=k(()=>Os.usageVisible());H(g,e=>{L(v)&&e(_)});var y=F(g,2),b=e=>{var t=UN(),n=N(t);ta(n),He(2),E(t),da(n,()=>wM.form.features.budget,e=>wM.form.features.budget=e),B(e,t)},x=k(()=>Os.budgetsVisible());H(y,e=>{L(x)&&e(b)});var S=F(y,2),C=e=>{var t=WN(),n=N(t);ta(n),He(2),E(t),da(n,()=>wM.form.features.guardrails,e=>wM.form.features.guardrails=e),B(e,t)},w=k(()=>Os.guardrailsVisible());H(S,e=>{L(w)&&e(C)});var T=F(S,2),ee=e=>{var t=GN(),n=N(t);ta(n),He(2),E(t),da(n,()=>wM.form.features.failover,e=>wM.form.features.failover=e),B(e,t)},te=k(()=>wM.failoverVisible());H(T,e=>{L(te)&&e(ee)}),E(l);var ne=F(l,2),re=F(N(ne),2);{let e=k(()=>wM.preview());MN(re,{get workflow(){return L(e)},preview:!0})}E(ne);var ie=F(ne,2),ae=e=>{var t=XN(),n=N(t),r=F(N(n),2);E(n);var i=F(n,2),a=e=>{var t=KN(),n=F(N(t),2);E(t),R(`click`,n,()=>Yo.navigate(`guardrails`)),B(e,t)};H(i,e=>{wM.guardrailRefs.length===0&&e(a)});var o=F(i,2),s=e=>{var t=JN();U(t,21,()=>wM.form.guardrails,ai,(e,t,n)=>{var r=qN(),i=N(r),a=N(i);G(a,`for`,`workflow-guardrail-ref-`+n);var o=F(a,2);ta(o),G(o,`id`,`workflow-guardrail-ref-`+n),G(o,`aria-label`,`Guardrail reference `+(n+1)),E(i);var s=F(i,2),c=N(s);G(c,`for`,`workflow-guardrail-step-`+n);var l=F(c,2);ta(l),G(l,`id`,`workflow-guardrail-step-`+n),G(l,`aria-label`,`Guardrail step `+(n+1)),E(s);var u=F(s,2);E(r),ua(o,()=>L(t).ref,e=>L(t).ref=e),ua(l,()=>L(t).step,e=>L(t).step=e),R(`click`,u,()=>wM.removeGuardrailStep(n)),B(e,r)}),E(t),B(e,t)},c=e=>{B(e,YN())};H(o,e=>{wM.form.guardrails.length>0?e(s):e(c,-1)}),E(t),R(`click`,r,()=>wM.addGuardrailStep()),B(e,t)},oe=k(()=>wM.form.features.guardrails&&Os.guardrailsVisible());H(ie,e=>{L(oe)&&e(ae)}),B(e,n)},$$slots:{header:!0,default:!0}})}O()}Vr([`change`,`click`]);var $N=z(`

        Loading workflows...

        `),eP=z(`
        `),tP=z(`

        No active workflows found.

        `),nP=z(`

        No workflows match your filter.

        `),rP=z(`
        `);function iP(e,t){D(t,!0);var n=rP(),r=N(n),i=e=>{var t=$N();AS(N(t),{size:16,label:`Loading workflows`}),He(),E(t),B(e,t)};H(r,e=>{wM.loading&&!q.authError&&e(i)});var a=F(r,2),o=e=>{var t=eP();U(t,21,()=>wM.filteredWorkflows,e=>e.id,(e,t)=>{MN(e,{get workflow(){return L(t)}})}),E(t),B(e,t)};H(a,e=>{wM.filteredWorkflows.length>0&&e(o)});var s=F(a,2),c=e=>{B(e,tP())};H(s,e=>{wM.workflows.length===0&&!wM.loading&&!q.authError&&wM.available&&e(c)});var l=F(s,2),u=e=>{B(e,nP())};H(l,e=>{wM.workflows.length>0&&wM.filteredWorkflows.length===0&&!wM.loading&&e(u)}),E(n),B(e,n),O()}var aP=z(``),oP=z(`
        Workflows feature is unavailable.
        `),sP=z(`
        `),cP=z(`
        `),lP=z(``),uP=z(`
        `);function dP(e,t){D(t,!0),kn(()=>{q.refreshTick,wM.fetchPage()});var n=uP(),r=N(n),i=F(N(r),2),a=N(i),o=e=>{var t=aP();K(N(t),{get icon(){return po},class:`form-action-icon`,"aria-hidden":`true`}),He(2),E(t),R(`click`,t,()=>wM.openCreate()),B(e,t)};H(a,e=>{wM.available&&e(o)}),E(i),E(r);var s=F(r,2),c=e=>{B(e,oP())};H(s,e=>{!wM.available&&!q.authError&&e(c)});var l=F(s,2),u=e=>{var t=sP(),n=N(t,!0);E(t),I(()=>V(n,wM.error)),B(e,t)};H(l,e=>{wM.error&&!q.authError&&e(u)});var d=F(l,2),f=e=>{var t=cP(),n=N(t);Ow(N(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return wM.filter},set value(e){wM.filter=e}}),E(n);var r=F(n,2),i=N(r),a=N(i,!0);E(i),E(r),E(t),I(()=>V(a,wM.filteredWorkflows.length+` active scopes`)),B(e,t)};H(d,e=>{wM.available&&e(f)});var p=F(d,2);QN(p,{});var m=F(p,2);iP(m,{});var h=F(m,2);U(h,20,()=>wM.guardrailRefs,e=>e,(e,t)=>{var n=lP(),r={};I(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(h),E(n),B(e,n),O()}Vr([`click`]);function fP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=ic}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=pP(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function pP(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var mP=null;function hP(){return mP===null&&(mP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(mP&&mP.matches)}function gP(e){return hP()?0:e}function _P(e,t){return!t||!t.live?{duration:0}:nc(e,{duration:gP(150)})}var vP=new class{#e=A(M({}));get workflowVersionsByID(){return L(this.#e)}set workflowVersionsByID(e){j(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:Os.cacheVisible(),audit:Os.auditVisible(),usage:Os.usageVisible(),budget:Os.budgetsVisible(),guardrails:Os.guardrailsVisible(),failover:Os.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await Cs(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},yP=6;function bP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function xP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>yP)return r;let i=bP(r);return i==null?r:SP(i,t+1,n)||n&&n(i)||r}function SP(e,t=0,n=null,r=null){if(e==null||t>yP)return``;if(typeof e==`string`){let i=bP(e.trim());return i==null?``:SP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||TP(t&&t.response_body)}function DP(e){let t=e&&e.data?e.data:null;return t?CP(t.error_message)||(EP(e,t)?SP(t.response_body,0):``):``}function OP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function kP(e){let t=OP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function AP(e){let t=OP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function jP(e){let t=OP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function MP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function NP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function PP(e){return String(e&&e.session_id||``).trim()}function FP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function IP(e){return!!PP(e)&&FP(e)>1}function LP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>({...e.latest,session_id:PP(e.latest)||String(e.session_id||``).trim(),session_count:Number(e.count||1)})),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function RP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>HP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!HP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>HP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!HP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function zP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function BP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>PP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function VP(e){return String(e&&e.id||``).trim()}function HP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function UP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function WP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function GP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&WP(t)}function KP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!GP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>UP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>HP(e))),s=[];return a.forEach(e=>{let t=HP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function qP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!GP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>UP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>HP(e))),s=new Map;i.forEach((e,t)=>{let n=PP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=HP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=PP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(FP(l[r]),FP(e))},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function JP(e,t){let n=VP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function YP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>VP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function XP(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function ZP(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function QP(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function $P(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function eF(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function tF(e){let t=eF(e);return t.length>1||t.some(e=>!(e&&e.success))}function nF(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function rF(e){return String(e&&e.kind||``).trim()||`attempt`}function iF(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function aF(e){return String(e&&e.model||``).trim()||`-`}function oF(e){let t=eF(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function sF(e){return eF(e).length+`×`}function cF(e){let t=eF(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function lF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=rF(e);n&&n!==`attempt`&&t.push(n),t.push(nF(e));let r=iF(e);r&&r!==`-`&&t.push(r);let i=aF(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function uF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function dF(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function fF(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function pF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function mF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=uF(e,t),a=fF(e,t),o=dF(t),s=i!=null&&i!==``,c=rF(t),l=eF(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:pF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function hF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function gF(e){return hF(e).filter(e=>!(e&&e.no_change))}function _F(e){return hF(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function vF(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function yF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=gF(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:vF(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function bF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function xF(e){let t=bF(e);return Number(t&&t.cached_input_tokens||0)>0}function SF(e){let t=bF(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function CF(e){let t=bF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?mc(r)+` cached`:SF(e).toFixed(1)+`% cached`}function wF(e){return xF(e)?CF(e):``}function TF(e,t){let n=bF(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function EF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&QP(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:wF(e),promptCacheHighlight:TF(e,t),noChangeSteps:_F(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function DF(e){let t=e&&e.data?e.data:null,n=DP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&QP(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&QP(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function OF(e,t){let n=[{id:`request`,pane:EF(e,t)}];return gF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:yF(e,t)})}),tF(e)?eF(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:mF(e,t)})}):n.push({id:`response`,pane:DF(e)}),n}function kF(e){if(!tF(e))return`response`;let t=eF(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function AF(e,t,n){return e&&(Array.isArray(n)?n:OF(t)).some(t=>t.id===e)?e:kF(t)}function jF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var MF=100;function NF(){return{entries:[],total:0,limit:25,offset:0}}var PF=new class{#e=A(M({}));get auditExpandedEntries(){return L(this.#e)}set auditExpandedEntries(e){j(this.#e,e,!0)}#t=A(M({}));get auditExpandedThreads(){return L(this.#t)}set auditExpandedThreads(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return BC.auditLog}set auditLog(e){BC.auditLog=e}get auditSearch(){return BC.auditSearch}set auditSearch(e){BC.auditSearch=e}get auditMethod(){return BC.auditMethod}set auditMethod(e){BC.auditMethod=e}get auditStatusCode(){return BC.auditStatusCode}set auditStatusCode(e){BC.auditStatusCode=e}get auditStream(){return BC.auditStream}set auditStream(e){BC.auditStream=e}get auditGroupSessions(){return BC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Bc.customStartDate,customEndDate:Bc.customEndDate}}toggleAuditGroupSessions(){BC.auditGroupSessions=!BC.auditGroupSessions,Ta(`gomodel_audit_group_sessions`,BC.auditGroupSessions),this.auditExpandedThreads={},BC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=MP({dateQuery:Bc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await Cs((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=NF();return}let a=n?LP(i.data):i.data,o=(n?qP:KP)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=BC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=BP(this.auditExpandedThreads,o.entries),BC.auditThreadChildren=BP(BC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=YP(this.auditExpandedEntries,s);try{await vP.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=NF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=BC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&BC.auditThreadChildren[e]||null}async toggleThread(e){let t=PP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=zP(this.auditExpandedThreads,t);let r=BC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=PP(e);if(!t)return;let n=BC.auditThreadChildren[t];BC.auditThreadChildren={...BC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...BC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=zP(this.auditExpandedThreads,t))),BC.auditThreadChildren=e};try{let n=await Cs(`/admin/audit/log?`+NP({sessionId:t,limit:MF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=BC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>PP(e)===t),o=RP(i,n.data.entries,a?[a]:[e]);o.entries=BC.upsertAuditRecords(o.entries,`audit.thread`),BC.auditThreadChildren={...BC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=VP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=JP(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof BC.fetchAuditEntryDetail==`function`&&BC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};BC.fetchAuditLog=e=>PF.fetchAuditLog(e),BC.isAuditEntryExpanded=e=>PF.isAuditEntryExpanded(e);var FF=z(`
        `);function IF(e,t){D(t,!0);let n=kw(()=>PF.fetchAuditLog(!0));kn(()=>n.cancel);var r=FF(),i=N(r);Ow(N(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return PF.auditSearch},set value(e){PF.auditSearch=e}}),E(i);var a=F(i,2),o=N(a),s=N(o);s.value=s.__value=``;var c=F(s);c.value=c.__value=`GET`;var l=F(c);l.value=l.__value=`POST`;var u=F(l);u.value=u.__value=`PUT`;var d=F(u);d.value=d.__value=`PATCH`;var f=F(d);f.value=f.__value=`DELETE`,E(o);var p=F(o,2),m=N(p);m.value=m.__value=``;var h=F(m);h.value=h.__value=`200`;var g=F(h);g.value=g.__value=`201`;var _=F(g);_.value=_.__value=`400`;var v=F(_);v.value=v.__value=`401`;var y=F(v);y.value=y.__value=`403`;var b=F(y);b.value=b.__value=`404`;var x=F(b);x.value=x.__value=`429`;var S=F(x);S.value=S.__value=`500`;var C=F(S);C.value=C.__value=`502`;var w=F(C);w.value=w.__value=`503`;var T=F(w);T.value=T.__value=`504`,E(p);var ee=F(p,2),te=N(ee);te.value=te.__value=``;var ne=F(te);ne.value=ne.__value=`true`;var re=F(ne);re.value=re.__value=`false`,E(ee);var ie=F(ee,2);K(N(ie),{get icon(){return Lo},class:`table-icon-svg`}),He(2),E(ie),E(a),E(r),R(`change`,o,()=>PF.fetchAuditLog(!0)),Wi(o,()=>PF.auditMethod,e=>PF.auditMethod=e),R(`change`,p,()=>PF.fetchAuditLog(!0)),Wi(p,()=>PF.auditStatusCode,e=>PF.auditStatusCode=e),R(`change`,ee,()=>PF.fetchAuditLog(!0)),Wi(ee,()=>PF.auditStream,e=>PF.auditStream=e),R(`click`,ie,()=>PF.clearAuditFilters()),B(e,r),O()}Vr([`change`,`click`]);var LF=z(`Live stream connecting…`),RF=z(` `),zF=z(`Live`),BF=z(` `);function VF(e,t){D(t,!0);let n=k(()=>BC.auditLivePauseReason()),r=k(()=>BC.liveLogsStreaming&&!L(n));var i=Zr(),a=P(i),o=e=>{var t=BF(),i=N(t);let a;var o=F(i,2),s=e=>{B(e,LF())},c=e=>{var t=RF(),r=N(t,!0);E(t),I(e=>V(r,e),[()=>OC(L(n))]),B(e,t)},l=e=>{B(e,zF())};H(o,e=>{BC.liveLogsStreaming?L(n)?e(c,1):e(l,-1):e(s)}),E(t),I(()=>a=W(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":L(r)})),B(e,t)},s=k(()=>Os.liveLogsVisible());H(a,e=>{L(s)&&e(o)}),B(e,i),O()}var HF=z(` `),UF=z(``);function WF(e,t){D(t,!0);let n=k(()=>[{key:`provider`,text:wc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+Dc(t.entry),mono:!0},{key:`failover`,text:$P(t.entry)&&`failover: `+$P(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=UF(),i=F(N(r),2);U(i,21,()=>L(n),e=>e.key,(e,t)=>{var n=HF(),r=N(n,!0);E(n),I(()=>{W(n,1,Pi([`provider-badge`,L(t).class,{mono:L(t).mono}]),`svelte-hyopt0`),V(r,L(t).text)}),B(e,n)}),E(i),E(r),B(e,r),O()}var GF=z(``),KF=z(` `);function qF(e,t){D(t,!0);let n=k(()=>oF(t.entry)),r=k(()=>L(n).length>0?cF(t.entry):``),i=k(()=>L(n).length>0?sF(t.entry):``);var a=Zr(),o=P(a),s=e=>{var a=KF(),o=N(a);U(o,21,()=>L(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=GF();let r;I(e=>{r=W(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(L(t)&&L(t).success),"audit-attempt-error":!(L(t)&&L(t).success)}),G(n,`title`,e)},[()=>lF(L(t))]),B(e,n)}),E(o);var s=F(o,2),c=N(s,!0);E(s),E(a),I(()=>{G(a,`title`,L(r)),G(a,`aria-label`,L(r)),V(c,L(i))}),B(e,a)};H(o,e=>{L(n).length>0&&e(s)}),B(e,a),O()}var JF=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function YF(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:``).filter(Boolean).join(` +`).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function XF(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function ZF(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=YF(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=YF(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function QF(e){return!e||typeof e!=`object`?``:Array.isArray(e.content)?e.content.map(e=>e&&typeof e.text==`string`?e.text:``).filter(Boolean).join(` +`).trim():YF(e.content)}function $F(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...XF(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||t.push(...XF(e.content))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{!e||typeof e!=`object`||(t.push(...XF(e.content)),typeof e.text==`string`&&t.push(e.text))}):e.input&&typeof e.input==`object`&&(t.push(...XF(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var eI=e=>YF(e);function tI(e){if(!e||!e.data)return``;let t=SP(e.data.response_body,0,eI);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?SP(bP(e),0,eI)||e:``}return SP(n,0,eI)||YF(n)}function nI(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function rI(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function iI(e){return e?!!oI(e):!1}function aI(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function oI(e){switch(aI(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function sI(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function cI(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function lI(e){let t=oI(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||WI(n)!==``}function uI(e,t){let n=String(t||``).trim(),r=oI(e&&e.path),i=sI(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=WI(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&cI(o,sI(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&cI(o,{role:String(a.role||`assistant`),content:sI(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var dI=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function fI(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||dI.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function pI(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function mI(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=hI(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function hI(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function gI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function _I(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?GI(t,e)>=0?t:e:t,null)}function vI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return _I((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function yI(e,t){let n=_I(e);return!!n&&String(n.id||``)===String(t||``)}function bI(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function xI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function SI(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||nI(n.output));return!!(r||i)}function CI(e){return!e||rI(e.path)?!1:iI(e.path)||SI(e)}function wI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function OI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function kI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
        `+DI(t)+``+DI(jI(e[t]))+`
        `);return t.length?``:``}function NI(e){let t=AI(e.content_type),n=DI(t+` · `+kI(e.bytes)),r=MI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
        `+n+`
        `+r+`
        `}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
        `+n+`
        `+DI(i)+`
        `+r+`
        `}function PI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function FI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function II(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return DI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+DI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+DI(e.slice(r)):DI(e)}function LI(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=FI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return DI(o);if(!i(e))return o.split(` +`).map(e=>II(e,a)).join(` +`);let s=o.split(` +`),c=[],l=0;for(;lII(e,a)).join(` +`);c.push(``+o+``),l=r+1;continue}c.push(II(e,a)),l++}return c.join(` +`)}function RI(e){let t=String(e||``).toLowerCase();return t===`system`||t===`developer`?{role:`system`,label:`System Prompt`,className:`role-system`}:t===`assistant`?{role:`assistant`,label:`Agent`,className:`role-assistant`}:t===`error`?{role:`error`,label:`Error`,className:`role-error`}:t===`function_call`?{role:`function_call`,label:`Function Call`,className:`role-function-call`}:t===`function_result`?{role:`function_result`,label:`Function Result`,className:`role-function-result`}:{role:`user`,label:`User`,className:`role-user`}}function zI(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c}){let l=RI(e);return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:l.role,roleLabel:l.label,roleClass:l.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``}}function BI(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e;return{name:t.name||e.name||``,arguments:t.arguments||e.arguments||``}}).filter(Boolean):[]}function VI(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{!t||!Array.isArray(t.tool_calls)||t.tool_calls.forEach(t=>{if(!t)return;let n=t.id||``,r=(t.function||t).name||t.name||``;n&&r&&(e[n]=r)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{if(!t||typeof t!=`object`||t.type!==`function_call`)return;let n=t.id||t.call_id||``,r=t.name||``;n&&r&&(e[n]=r)}),n&&Array.isArray(n.choices)){let t=n.choices[0];t&&t.message&&Array.isArray(t.message.tool_calls)&&t.message.tool_calls.forEach(t=>{if(!t)return;let n=t.id||``,r=(t.function||t).name||t.name||``;n&&r&&(e[n]=r)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{if(!t||t.type!==`function_call`)return;let n=t.id||t.call_id||``,r=t.name||``;n&&r&&(e[n]=r)})}function HI(e){return Array.isArray(e)?`[`+e.map(HI).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+HI(e[t])).join(`,`)+`}`:JSON.stringify(e)}function UI(e){if(!e||typeof e!=`object`)return null;let t=[];if(e.system!==void 0&&t.push({system:e.system}),e.instructions!==void 0&&t.push({instructions:e.instructions}),Array.isArray(e.messages))t.push(...e.messages);else if(Array.isArray(e.input)&&e.previous_response_id==null&&e.conversation==null)t.push(...e.input);else return null;return t.map(HI)}function WI(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function GI(e,t){let n=new Date(e&&e.timestamp).getTime(),r=new Date(t&&t.timestamp).getTime();if(Number.isFinite(n)&&Number.isFinite(r)&&n!==r)return n-r;let i=String(e&&e.timestamp||``).localeCompare(String(t&&t.timestamp||``));if(i!==0)return i;let a=String(e&&e.id||``),o=String(t&&t.id||``);return ao)}function KI(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(GI),r={};n.forEach(e=>{let t=e.data&&e.data.request_body?e.data.request_body:null,n=e.data&&e.data.response_body?e.data.response_body:null;VI(r,t,n)});let i=[],a=new Set,o=new Set,s=new Set,c=[],l=null,u=0,d=n.findIndex(e=>e.id===t),f=e=>JSON.stringify({role:e.role,text:e.text,toolCalls:e.toolCalls,functionName:e.functionName});return n.forEach((e,n)=>{let p=e.id===t,m=d>=0&&n>d,h=e.timestamp,g=e.data&&e.data.request_body?e.data.request_body:null,_=e.data&&e.data.response_body?e.data.response_body:null,v=i.length,y=(t,n,{toolCalls:r,functionName:i}={})=>zI(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i});if(g&&g.system!==void 0){let e=YF(g.system);e&&i.push(y(`system`,e))}if(g&&g.instructions!==void 0){let e=YF(g.instructions);e&&i.push(y(`system`,e))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=YF(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(y(`function_result`,t,{functionName:n}));return}if(t===`assistant`){let n=YF(e.content),r=BI(e.tool_calls);(n||r.length>0)&&i.push(y(t,n,{toolCalls:r}));return}let n=YF(e.content);n&&i.push(y(t,n))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`){let t=typeof e.output==`string`?e.output:YF(e.output);t&&i.push(y(`function_result`,t,{functionName:r[e.call_id]||``}))}else if(e.type===`function_call`)i.push(y(`function_call`,``,{toolCalls:[{name:e.name||``,arguments:e.arguments||``}]}));else if(e.role){let t=String(e.role).toLowerCase(),n=YF(e.content);n&&i.push(y(t,n))}}}):ZF(g.input).forEach(e=>{e.text&&i.push(y(e.role,e.text))}));let b=i.splice(v),x=b.map(f),S=UI(g),C=S!==null,w=hI(e),T=!!w&&a.has(w),ee=String(g&&g.previous_response_id||``).trim(),te=WI(g),ne=T||!!ee&&o.has(ee)||!!te&&s.has(te);if(m){let e=C&&l&&l.length>0&&l.every((e,t)=>S[t]===e);if(C&&!e&&!T||!C&&!ne)return}p&&C&&(l=[...S]);let re=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),re&&(p||m)&&a.add(re),te&&s.add(te);let ie=0;for(;ie0;){let t=c.slice(-e),n=x.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...b.slice(e)),c.push(...x.slice(e))}if(_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=YF(e.message.content),r=BI(e.message.tool_calls);if(n||r.length>0){let e=y(t,n,{toolCalls:r});i.push(e),c.push(f(e))}}}if(_&&Array.isArray(_.output)&&_.output.forEach(e=>{if(!e)return;if(e.type===`function_call`){let t=y(`function_call`,``,{toolCalls:[{name:e.name||``,arguments:e.arguments||``}]});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=QF(e);if(n){let e=y(t,n);i.push(e),c.push(f(e))}}),_&&_.content!==void 0&&!Array.isArray(_.choices)&&!Array.isArray(_.output)){let e=String(_.role||`assistant`).toLowerCase(),t=YF(_.content);if(t){let n=y(e,t);i.push(n),c.push(f(n))}}let ae=tI(e);ae&&i.push(y(`error`,ae));let oe=String(_&&_.id||``).trim();oe&&o.add(oe)}),{messages:i,entryIDs:[...a]}}function qI(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){let t=e.arguments||``;try{t=JSON.stringify(JSON.parse(t),null,2)}catch{}return e.name+`(`+t+`)`}).join(` + +`):e.text||``}var JI=600*1e3,YI=15*1e3,XI=250,ZI=class{#e=A(!1);get conversationOpen(){return L(this.#e)}set conversationOpen(e){j(this.#e,e,!0)}#t=A(!1);get conversationLoading(){return L(this.#t)}set conversationLoading(e){j(this.#t,e,!0)}#n=A(``);get conversationError(){return L(this.#n)}set conversationError(e){j(this.#n,e,!0)}#r=A(``);get conversationAnchorID(){return L(this.#r)}set conversationAnchorID(e){j(this.#r,e,!0)}#i=A(M([]));get conversationEntryIDs(){return L(this.#i)}set conversationEntryIDs(e){j(this.#i,e,!0)}#a=A(``);get conversationSessionID(){return L(this.#a)}set conversationSessionID(e){j(this.#a,e,!0)}#o=A(!1);get conversationTruncated(){return L(this.#o)}set conversationTruncated(e){j(this.#o,e,!0)}#s=A(!1);get conversationFollowLatest(){return L(this.#s)}set conversationFollowLatest(e){j(this.#s,e,!0)}#c=A(``);get conversationOpenedFromID(){return L(this.#c)}set conversationOpenedFromID(e){j(this.#c,e,!0)}#l=A(``);get followUpText(){return L(this.#l)}set followUpText(e){j(this.#l,e,!0)}#u=A(!1);get followUpSending(){return L(this.#u)}set followUpSending(e){j(this.#u,e,!0)}#d=A(``);get followUpError(){return L(this.#d)}set followUpError(e){j(this.#d,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#f=A(null);get conversationDialogEl(){return L(this.#f)}set conversationDialogEl(e){j(this.#f,e,!0)}#p=A(null);get conversationCloseBtnEl(){return L(this.#p)}set conversationCloseBtnEl(e){j(this.#p,e,!0)}#m=A(null);get conversationThreadEl(){return L(this.#m)}set conversationThreadEl(e){j(this.#m,e,!0)}get conversationEntries(){return(this.conversationEntryIDs||[]).map(e=>BC.auditRecord(e)).filter(Boolean)}#h=k(()=>KI(this.conversationEntries,this.conversationAnchorID));get conversationView(){return L(this.#h)}set conversationView(e){j(this.#h,e)}get conversationMessages(){return this.conversationView.messages}get conversationBranchEntryIDs(){return this.conversationView.entryIDs}_setConversationEntryIDs(e){this.conversationEntryIDs=[...new Set((Array.isArray(e)?e:[]).filter(Boolean))],BC.pinAuditRecords(this.conversationEntryIDs)}canShowConversation(e){return CI(e)}startBodyInteraction(e){this.bodyPointerStart={x:e.clientX,y:e.clientY}}_isBodyDrag(e){if(!this.bodyPointerStart)return!1;let t=Math.abs(e.clientX-this.bodyPointerStart.x),n=Math.abs(e.clientY-this.bodyPointerStart.y);return t>4||n>4}_hasActiveSelection(){let e=window.getSelection?window.getSelection():null;return!e||e.isCollapsed?!1:String(e.toString()||``).trim().length>0}handleBodyConversationClick(e,t){let n=this._isBodyDrag(e);if(this.bodyPointerStart=null,n||this._hasActiveSelection()||!this.canShowConversation(t))return;let r=e.target&&e.target.closest?e.target.closest(`[data-conversation-trigger="1"]`):null;r&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,r))}handleErrorConversationClick(e,t){let n=this._isBodyDrag(e);this.bodyPointerStart=null,!n&&(this._hasActiveSelection()||this.canShowConversation(t)&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,e.currentTarget)))}formatJSON(e){return pc(e)}renderBodyWithConversationHighlights(e,t,n){return LI(e,t,{formatJSON:e=>this.formatJSON(e),canShowConversation:e=>this.canShowConversation(e),promptCacheHighlight:n&&n.promptCacheHighlight})}async openConversation(e,t){if(!e||!e.id||!this.canShowConversation(e))return;let n=document.activeElement instanceof HTMLElement?document.activeElement:null;t instanceof HTMLElement?this.conversationReturnFocusEl=t:n&&n!==document.body&&(this.conversationReturnFocusEl=n);let r=++this.conversationRequestToken;if(this.conversationOpen=!0,this.conversationError=``,this.conversationAnchorID=e.id,this.conversationOpenedFromID=e.id,this.conversationSessionID=String(e.session_id||``).trim(),this._setConversationEntryIDs([]),this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this._addConversationRecord(BC.upsertAuditRecord(e,`conversation.live`));return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof BC.auditEntryLiveDetailPending==`function`&&BC.auditEntryLiveDetailPending(e)}_applyConversationView(){let e=this.conversationEntries,t=KI(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=vI(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id))}}handleAuditRecordChange(e,t){if(!this.conversationOpen||!e)return;let n=String(e.id||``).trim(),r=mI(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(r.accepted&&(this.followUpRequestID=r.followUpRequestID,n&&r.submittedChild&&(this.conversationAnchorID=n,this.conversationFollowLatest=!0),this._addConversationRecord(e),bI(String(t||e._live_state||``).trim(),n,this.conversationAnchorID))){this.conversationMessages.length===0&&(this.conversationLoading=!0);let e=++this.conversationRequestToken;this.fetchConversation(n,e,!1)}}_addConversationRecord(e){let t=NC(e);t&&!this.conversationEntryIDs.includes(t)&&this._setConversationEntryIDs([...this.conversationEntryIDs,t]),!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(),this.conversationFollowLatest&&this._scheduleLatestScroll()}conversationLiveWaiting(){if(!this.conversationOpen)return!1;let e=new Set(this.conversationBranchEntryIDs||[]);return(this.conversationEntries||[]).some(t=>e.has(String(t&&t.id||``))&&t._live&&(typeof BC.liveAuditStateSettled!=`function`||!BC.liveAuditStateSettled(t._live_state)))}conversationLiveStatusText(){return(this.conversationMessages||[]).length>0?`Model is responding…`:`Waiting for request data…`}closeConversation(){this.followUpAbort&&this.followUpAbort.abort(),this.conversationOpen=!1,this.conversationRequestToken++,this.conversationSessionID=``,this._setConversationEntryIDs([]),this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1;let e=this.conversationReturnFocusEl;this.conversationReturnFocusEl=null,e&&typeof e.focus==`function`&&document.contains(e)&&requestAnimationFrame(()=>e.focus())}_focusConversationDrawer(){if(!this.conversationOpen)return;let e=this.conversationCloseBtnEl;if(e&&typeof e.focus==`function`){e.focus();return}let t=this.conversationDialogEl;t&&typeof t.focus==`function`&&t.focus()}async fetchConversation(e,t,n=!0,r=!1){try{let i=await Cs(`/admin/audit/conversation?`+(`log_id=`+encodeURIComponent(e)+`&limit=120`),{label:`audit conversation`});if(t!==this.conversationRequestToken||i.stale)return;if(!i.ok){this.conversationError=`Unable to load interactions.`;return}let a=i.data||{},o=a.anchor_id||e,s=Array.isArray(a.entries)?a.entries:[],c=BC.upsertAuditRecords(s,`conversation.hydrated`),l=xI(this.conversationEntryIDs,c);l.length>this.conversationEntryIDs.length&&this._setConversationEntryIDs(l),r&&(this.conversationFollowLatest=yI(c,o)),this.conversationAnchorID=o;let u=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);u&&u.session_id&&(this.conversationSessionID=String(u.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(),this.conversationFollowLatest?this._scheduleLatestScroll():n&&this._scheduleAnchorScroll()}catch(e){if(t!==this.conversationRequestToken)return;console.error(`Failed to fetch audit conversation:`,e),this.conversationError=`Failed to load interactions.`}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return gI(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return lI(e)?oI(e.path):``}canSendFollowUp(){return!!this.followUpKind()&&!!String(this.followUpText||``).trim()&&!this.followUpSending&&!this.conversationLiveWaiting()}async sendFollowUp(){if(!this.canSendFollowUp())return;let e=this.selectedConversationEntry(),t=uI(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=$I(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},JI);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=fI(e,n,r),o=await xs(e.path,{method:`POST`,headers:a,body:JSON.stringify(t),signal:i.signal}),s=String(o.headers.get(`X-Request-ID`)||``).trim();if(s&&this.followUpRequestID&&(this.followUpRequestID=s),!o.ok){let e=`Unable to send message.`;try{let t=await o.json();e=t&&t.error&&t.error.message||e}catch{}this.followUpError=e,(this.followUpRequestID===r||this.followUpRequestID===s)&&(this.followUpRequestID=``);return}if(this.followUpText=``,await QI(o),!BC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){Ts(e)||i.signal.aborted?a&&this.conversationOpen&&(this.followUpError=`The request timed out.`):(console.error(`Failed to send interaction follow-up:`,e),this.followUpError=`Failed to send message.`)}finally{clearTimeout(o),this.followUpAbort===i&&(this.followUpAbort=null,this.followUpSending=!1)}}async _selectPersistedFollowUp(e,t,n,r){let i=Date.now()+YI;for(;this.conversationOpen&&n===this.conversationRequestToken&&Date.now(){let e=this.conversationThreadEl;if(!e)return;let t=e.querySelectorAll(`[data-conversation-anchor="true"]`),n=t[t.length-1];n&&typeof n.scrollIntoView==`function`&&n.scrollIntoView({block:`center`})})}_scheduleLatestScroll(){requestAnimationFrame(()=>{let e=this.conversationThreadEl;if(!e)return;let t=e.lastElementChild;t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`end`})})}};async function QI(e){let t=e&&e.body&&typeof e.body.getReader==`function`?e.body.getReader():null;if(!t){await e.text();return}for(;!(await t.read()).done;);}function $I(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function eL(e,t){return new Promise((n,r)=>{let i,a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};if(i=setTimeout(()=>{t&&t.removeEventListener(`abort`,a),n()},e),t){if(t.aborted){a();return}t.addEventListener(`abort`,a,{once:!0})}})}var tL=new ZI,nL=0;jn(()=>{kn(()=>{let e=FC(BC.auditRecordChanges,nL);e.length!==0&&(nL=Number(e[e.length-1].version||0),Tr(()=>{e.forEach(e=>{if(!IC(e))return;let t=BC.auditRecord(e.key);tL.handleAuditRecordChange(t,e.eventType)})}))})});var rL=z(``),iL=z(` `),aL=z(``),oL=z(`
        `);function sL(e,t){D(t,!0);let n=va(t,`thread`,3,null),r=va(t,`expanded`,3,!1),i=va(t,`onactivate`,3,null),a=k(()=>_s.formatTimestamp(t.entry.timestamp)),o=k(()=>L(a)===`-`?L(a):L(a).slice(L(a).lastIndexOf(` `)+1)),s=k(()=>tL.conversationOpen&&String(tL.conversationAnchorID||``)===String(t.entry.id||``));function c(e){e.preventDefault(),i()&&i()()}function l(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function u(e){if(e.stopPropagation(),e.preventDefault(),L(s)){tL.closeConversation();return}tL.openConversation(t.entry,e.currentTarget)}var d=oL();let f;var p=N(d),m=N(p),h=e=>{var t=rL(),r=N(t);{let e=k(()=>n().expanded?Va:Ua);K(r,{get icon(){return L(e)},class:`audit-thread-expander-svg`})}var i=F(r,2),a=N(i,!0);E(i),E(t),I(()=>{G(t,`aria-expanded`,n().expanded),G(t,`title`,`Session with `+n().count+` requests`),G(t,`aria-label`,`Session with `+n().count+` requests, `+(n().expanded?`collapse`:`expand`)),V(a,n().count)}),R(`click`,t,l),B(e,t)};H(m,e=>{n()&&e(h)});var g=F(m,2),_=N(g),v=N(_,!0);E(_);var y=F(_,2),b=N(y,!0);E(y),E(g);var x=F(g,2),S=e=>{var n=iL(),r=N(n,!0);E(n),I(e=>V(r,e),[()=>Oc(t.entry)]),B(e,n)};H(x,e=>{(t.entry.requested_model||t.entry.model)&&e(S)});var C=F(x,2),w=N(C,!0);E(C),E(p);var T=F(p,2),ee=N(T);qF(ee,{get entry(){return t.entry}});var te=F(ee,2),ne=N(te),re=N(ne,!0);E(ne);var ie=F(ne,2),ae=N(ie,!0);E(ie),E(te);var oe=F(te,2),se=N(oe,!0);E(oe);var ce=F(oe,2),le=e=>{var t=aL();let n;var r=N(t);{let e=k(()=>L(s)?Ha:Ua);K(r,{get icon(){return L(e)},class:`audit-conversation-trigger-svg`})}E(t),I(()=>{n=W(t,1,`audit-conversation-trigger svelte-17mysgz`,null,n,{"audit-conversation-trigger-active":L(s)}),G(t,`title`,L(s)?`Close interactions`:`Open interactions`),G(t,`aria-label`,L(s)?`Close interactions`:`Open interactions`),G(t,`aria-pressed`,L(s))}),R(`click`,t,u),B(e,t)},ue=k(()=>tL.canShowConversation(t.entry));H(ce,e=>{L(ue)&&e(le)}),E(T),E(d),I((e,n,i,s)=>{f=W(d,1,`audit-entry-summary svelte-17mysgz`,null,f,e),G(d,`aria-expanded`,r()),W(g,1,`audit-status-badge audit-request-badge ${n??``}`,`svelte-17mysgz`),G(g,`title`,`Status `+(t.entry.status_code||`-`)+` · `+(t.entry.method||`-`)),G(g,`aria-label`,(t.entry.status_code||`-`)+` `+(t.entry.method||`-`)),V(v,t.entry.status_code||`-`),V(b,t.entry.method||`-`),V(w,t.entry.path||`-`),G(te,`title`,i),G(te,`aria-label`,L(a)),V(re,L(a)),V(ae,L(o)),V(se,s)},[()=>({"audit-entry-summary-live-in-progress":QP(t.entry),"audit-entry-summary-has-interactions":tL.canShowConversation(t.entry)}),()=>ZP(t.entry.status_code),()=>Sc(t.entry.timestamp),()=>XP(t.entry.duration_ns)]),R(`click`,d,c),B(e,d),O()}Vr([`click`]);var cL=z(``);function lL(e,t){D(t,!0);let n=va(t,`label`,3,`Copy`),r=va(t,`copiedLabel`,3,`Copied`),i=va(t,`errorLabel`,3,``),a=va(t,`class`,3,`btn`),o=k(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=cL();let c;var l=N(s),u=e=>{K(e,{get icon(){return Ga},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{K(e,{get icon(){return Ja},width:`14`,height:`14`})};H(l,e=>{t.state.copied?e(u):e(d,-1)});var f=F(l,2),p=N(f,!0);E(f),E(s),I(()=>{c=W(s,1,Pi([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),V(p,L(o))}),R(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),B(e,s),O()}Vr([`click`]);var uL=z(`
        Error Message
         
        `),dL=z(`
         
        `),fL=z(` `),pL=z(` streaming`),mL=z(`
        Body
        `),hL=z(`

        `),gL=z(`

        `),_L=z(`

        `),vL=z(`
        `);function yL(e,t){D(t,!0);let n=EM({logPrefix:`Failed to copy audit payload:`}),r=EM({logPrefix:`Failed to copy audit payload:`}),i=k(()=>t.pane&&t.pane.showHeaders?pc(t.pane.headers):``),a=k(()=>!t.pane||!t.pane.showBody?``:OI(t.pane.body)?NI(t.pane.body):tL.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=k(()=>!!(t.pane&&tL.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),tL.handleErrorConversationClick(e,t.pane.entry))}var c=vL();let l;var u=N(c),d=e=>{var n=uL(),r=F(N(n),2);let i;var a=N(r,!0);E(r),E(n),I(()=>{i=W(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":L(o)}),G(r,`role`,L(o)?`button`:null),G(r,`tabindex`,L(o)?0:null),V(a,t.pane.errorMessage)}),R(`mousedown`,r,e=>tL.startBodyInteraction(e)),R(`keydown`,r,s),R(`click`,r,e=>tL.handleErrorConversationClick(e,t.pane.entry)),B(e,n)};H(u,e=>{t.pane.showErrorMessage&&e(d)});var f=F(u,2),p=e=>{var n=dL(),a=N(n),o=N(a),s=N(o,!0);E(o),lL(F(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,pc)}),E(a);var c=F(a,2),l=N(c,!0);E(c),E(n),I(()=>{V(s,t.pane.headersTitle||`Headers`),V(l,L(i))}),B(e,n)};H(f,e=>{t.pane.showHeaders&&e(p)});var m=F(f,2),h=e=>{var r=mL(),i=N(r),o=N(i),s=F(N(o),2),c=e=>{var n=fL(),r=N(n,!0);E(n),I(()=>V(r,t.pane.bodyCacheRatioLabel)),B(e,n)};H(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=F(s,2),u=e=>{B(e,pL())};H(l,e=>{t.pane.streaming&&e(u)}),E(o),lL(F(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,pc)}),E(i);var d=F(i,2);mi(d,()=>L(a),!0),E(d),E(r),R(`mousedown`,d,e=>tL.startBodyInteraction(e)),R(`click`,d,e=>tL.handleBodyConversationClick(e,t.pane.entry)),B(e,r)};H(m,e=>{t.pane.showBody&&e(h)});var g=F(m,2),_=e=>{var n=hL(),r=N(n,!0);E(n),I(()=>V(r,t.pane.emptyMessage)),B(e,n)};H(g,e=>{t.pane.showEmpty&&e(_)});var v=F(g,2),y=e=>{var n=gL(),r=F(N(n),2),i=N(r,!0);E(r),E(n),I(()=>V(i,t.pane.pendingMessage)),B(e,n)};H(v,e=>{t.pane.showPending&&e(y)});var b=F(v,2),x=e=>{var n=_L(),r=N(n,!0);E(n),I(()=>V(r,t.pane.tooLargeMessage)),B(e,n)};H(b,e=>{t.pane.showTooLarge&&e(x)}),E(c),I(()=>l=W(c,1,`audit-pane svelte-1h5puht`,null,l,{"audit-pane-split":t.pane&&t.pane.layout===`split`,"audit-pane-split-single":t.pane&&t.pane.layout===`split`&&!(t.pane.showHeaders&&t.pane.showBody)})),B(e,c),O()}Vr([`mousedown`,`keydown`,`click`]);var bL=z(` `),xL=z(` `),SL=z(` `),CL=z(` `),wL=z(``),TL=z(`
        `),EL=z(`
        `);function DL(e,t){D(t,!0);let n=va(t,`panes`,19,()=>[]),r=A(null),i=k(()=>AF(L(r),t.entry,n())),a=e=>`audit-tab-`+t.entry.id+`-`+e,o=e=>`audit-tabpanel-`+t.entry.id+`-`+e;function s(e,t){let i=n().map(e=>e.id),a=jF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),j(r,a,!0))}var c=EL(),l=N(c);U(l,21,n,e=>e.id,(e,t)=>{var n=wL();let c;var l=N(n),u=N(l),d=e=>{K(e,{get icon(){return Na}})},f=e=>{K(e,{get icon(){return Ma}})};H(u,e=>{L(t).pane.direction===`request`?e(d):L(t).pane.direction===`response`&&e(f,1)}),E(l);var p=F(l,2),m=N(p,!0);E(p);var h=F(p,2),g=e=>{var n=bL(),r=N(n);E(n),I(()=>V(r,`#${L(t).pane.seq??``}`)),B(e,n)};H(h,e=>{L(t).pane.seq&&e(g)});var _=F(h,2),v=e=>{var n=xL(),r=N(n,!0);E(n),I(()=>{W(n,1,`provider-badge audit-pane-kind audit-pane-kind-${L(t).pane.kind??``}`,`svelte-1bc5vi5`),V(r,L(t).pane.kind)}),B(e,n)};H(_,e=>{L(t).pane.kind&&e(v)});var y=F(_,2);U(y,17,()=>L(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=SL(),r=N(n,!0);E(n),I(()=>{G(n,`title`,L(t).title),V(r,L(t).label)}),B(e,n)});var b=F(y,2),x=e=>{var n=CL(),r=N(n,!0);E(n),I(()=>V(r,L(t).pane.savingsLabel)),B(e,n)};H(b,e=>{L(t).pane.savingsLabel&&e(x)});var S=F(b,2),C=e=>{var n=xL(),r=N(n,!0);E(n),I(e=>{W(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),V(r,L(t).pane.statusCode)},[()=>ZP(L(t).pane.statusCode)]),B(e,n)};H(S,e=>{L(t).pane.statusCode&&e(C)}),E(n),I((e,r)=>{c=W(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":L(i)===L(t).id}),G(n,`aria-selected`,L(i)===L(t).id),G(n,`id`,e),G(n,`aria-controls`,r),G(n,`tabindex`,L(i)===L(t).id?0:-1),W(l,1,Pi([`audit-pane-icon`,L(t).pane.direction&&`audit-pane-icon-${L(t).pane.direction}`]),`svelte-1bc5vi5`),V(m,L(t).pane.title)},[()=>a(L(t).id),()=>o(L(t).id)]),R(`keydown`,n,e=>s(e,L(t).id)),R(`click`,n,()=>j(r,L(t).id,!0)),B(e,n)}),E(l),U(F(l,2),17,n,e=>e.id,(e,t)=>{var n=TL();let r;yL(N(n),{get pane(){return L(t).pane}}),E(n),I((e,a)=>{G(n,`id`,e),G(n,`aria-labelledby`,a),r=Vi(n,``,r,{display:L(i)===L(t).id?null:`none`})},[()=>o(L(t).id),()=>a(L(t).id)]),B(e,n)}),E(c),B(e,c),O()}Vr([`keydown`,`click`]);var OL=z(`
        `),kL=z(`
        `);function AL(e,t){D(t,!0);let n=va(t,`thread`,3,null),r=k(()=>PF.isAuditEntryExpanded(t.entry)),i=k(()=>tL.conversationOpen&&String(tL.conversationAnchorID||``)===String(t.entry.id||``)),a=k(()=>L(r)?OF(t.entry,$F):[]),o=k(()=>L(r)?CN(t.entry,vP.auditEntryWorkflow(t.entry),vP.workflowFeatureCaps()):null);function s(){PF.toggleAuditEntryExpanded(t.entry)}var c=kL();let l;var u=N(c);sL(u,{get entry(){return t.entry},get thread(){return n()},get expanded(){return L(r)},onactivate:s});var d=F(u,2),f=e=>{var n=OL(),r=N(n),i=e=>{zM(e,{get chart(){return L(o)}})};H(r,e=>{L(o)&&e(i)});var s=F(r,2);DL(s,{get entry(){return t.entry},get panes(){return L(a)}}),WF(F(s,2),{get entry(){return t.entry}}),E(n),Oi(3,n,()=>tc,()=>({y:-6,duration:gP(150)})),B(e,n)};H(d,e=>{L(r)&&e(f)}),E(c),I(()=>l=W(c,1,`audit-entry svelte-cmjgwr`,null,l,{"audit-entry-interactions-open":L(i)})),B(e,c),O()}var jL=z(`
        `),ML=z(`
        `),NL=z(`

        `),PL=z(`
        `),FL=z(`
        `);function IL(e,t){D(t,!0);let n=k(()=>PP(t.entry)),r=k(()=>PF.isThreadExpanded(L(n))),i=k(()=>PF.threadChildren(L(n))),a=k(()=>L(i)&&!L(i).loading&&Number(L(i).total||0)>L(i).entries.length+1);var o=Zr(),s=P(o),c=e=>{AL(e,{get entry(){return t.entry}})},l=k(()=>!IP(t.entry)),u=e=>{var n=FL(),o=N(n);{let e=k(()=>({count:FP(t.entry),expanded:L(r),ontoggle:()=>PF.toggleThread(t.entry)}));AL(o,{get entry(){return t.entry},get thread(){return L(e)}})}var s=F(o,2),c=e=>{var t=PL(),n=N(t),r=e=>{var t=jL();AS(N(t),{size:14,label:`Loading session requests`}),E(t),B(e,t)};H(n,e=>{L(i)&&L(i).loading&&e(r)});var o=F(n,2);U(o,17,()=>L(i)&&L(i).entries||[],e=>e.id,(e,t)=>{var n=ML();AL(N(n),{get entry(){return L(t)}}),E(n),B(e,n)});var s=F(o,2),c=e=>{var t=NL(),n=N(t);E(t),I(()=>V(n,`Showing the latest ${L(i).entries.length+1} of ${L(i).total??``} + requests in this session.`)),B(e,t)};H(s,e=>{L(a)&&e(c)}),E(t),Oi(3,t,()=>nc,()=>({duration:gP(150)})),B(e,t)};H(s,e=>{L(r)&&e(c)}),E(n),B(e,n)};H(s,e=>{L(l)?e(c):e(u,-1)}),B(e,o),O()}var LL=z(`

        .

        `),RL=z(`
        Audit logging is off. Live entries are temporary and disappear after + refresh. Set LOGGING_ENABLED=true to persist them.
        `),zL=z(`

        `),BL=z(`
        `),VL=z(`
        `),HL=z(`
        `),UL=z(`
        `),WL=z(`
        `);function GL(e,t){D(t,!0);let n=k(()=>Os.config&&Os.config.LOGGING_RETENTION_DAYS);kn(()=>{if(q.refreshTick,Yo.page===`audit-logs`)return Tr(()=>r())});function r(){let e=!1;return(async()=>{try{await Os.ensureLoaded()}finally{await PF.fetchAuditLog(!0),!e&&Os.liveLogsVisible()&&BC.ensureLiveLogs()}})(),()=>{e=!0,BC.stopLiveLogs()}}var i=WL(),a=N(i),o=N(a),s=F(N(o),2),c=e=>{tC(e,{copyId:`audit-retention-help-copy`,label:`retention help`,text:`If you want to change the retention period, set LOGGING_RETENTION_DAYS (env var) or logging.retention_days (config.yaml) and restart the gateway. Default is 30 days; 0 keeps audit logs forever.`,title:e=>{var t=LL(),r=N(t,!0),i=F(r),a=N(i,!0);E(i),He(),E(t),I((e,t)=>{V(r,e),V(a,t)},[()=>AP(L(n)),()=>jP(L(n))]),B(e,t)},$$slots:{title:!0}})},l=k(()=>kP(L(n)));H(s,e=>{L(l)&&e(c)}),E(o),E(a);var u=F(a,2);ll(N(u),{onchange:()=>PF.fetchAuditLog(!0)}),E(u);var d=F(u,2);Uc(d,{});var f=F(d,2),p=e=>{B(e,RL())},m=k(()=>Os.loaded&&!Os.auditVisible()&&!q.needsAuth);H(f,e=>{L(m)&&e(p)});var h=F(f,2),g=N(h);IF(g,{});var _=F(g,2),v=N(_),y=N(v),b=e=>{var t=zL(),n=N(t);E(t),I(e=>V(n,`Showing ${PF.auditLog.offset+1}-${e??``} of ${PF.auditLog.total??``} + ${PF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(PF.auditLog.offset+PF.auditLog.limit,PF.auditLog.total)]),B(e,t)};H(y,e=>{PF.auditLog.total>0&&e(b)});var x=F(y,2),S=N(x);ta(S),He(2),E(x),E(v),VF(F(v,2),{}),E(_);var C=F(_,2),w=e=>{var t=BL();AS(N(t),{size:18,label:`Loading audit logs`}),E(t),B(e,t)},T=e=>{var t=HL();U(t,29,()=>PF.auditLog.entries,e=>e.id,(e,t)=>{var n=VL(),r=N(n),i=e=>{IL(e,{get entry(){return L(t)}})},a=e=>{AL(e,{get entry(){return L(t)}})};H(r,e=>{PF.auditGroupSessions?e(i):e(a,-1)}),E(n),Di(n,()=>fP,()=>({duration:gP(150)})),Oi(1,n,()=>_P,()=>({live:L(t)._live})),B(e,n)}),E(t),B(e,t)};H(C,e=>{PF.loading&&PF.auditLog.entries.length===0?e(w):PF.auditLog.entries.length>0&&e(T,1)});var ee=F(C,2),te=e=>{var t=UL();NS(N(t),{}),E(t),B(e,t)};H(ee,e=>{PF.auditLog.entries.length===0&&!PF.loading&&!q.needsAuth&&e(te)}),rT(F(ee,2),{get total(){return PF.auditLog.total},get offset(){return PF.auditLog.offset},get limit(){return PF.auditLog.limit},onprev:()=>PF.auditLogPrevPage(),onnext:()=>PF.auditLogNextPage()}),E(h),E(i),I(()=>ra(S,PF.auditGroupSessions)),R(`change`,S,()=>PF.toggleAuditGroupSessions()),B(e,i),O()}Vr([`change`]);function KL(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function qL(e){return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(e=>e):e==null?[]:String(e).split(`,`).map(e=>e.trim()).filter(e=>e)}function JL(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function YL(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function XL(e,t){let n=String(t||``).trim();return n&&JL(e,n)?n:YL(e)}function ZL(e,t){let n=JL(e,t);return!n||!n.defaults?{}:KL(n.defaults)}function QL(e,t,n){return{...ZL(e,n),...KL(t)}}function $L(e,t){let n=XL(e,t);return{name:``,type:n,description:``,user_path:``,config:ZL(e,n)}}function eR(e,t){if(!t)return e||[];let n=String(t).toLowerCase();return(e||[]).filter(e=>[e.name,e.type,e.user_path,e.description,e.summary].some(e=>String(e||``).toLowerCase().includes(n)))}function tR(e,t){let n=JL(e,t);return n&&n.label?n.label:t||`Unknown`}function nR(e,t){let n=JL(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function rR(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?qL(n):n}function iR(e,t,n){if(!t)return e;let r=KL(e);if(t.input===`number`){let e=String(n||``).trim();if(e===``)delete r[t.key];else{let n=Number(e);r[t.key]=Number.isFinite(n)?n:e}}else t.input===`checkboxes`?r[t.key]=qL(n):r[t.key]=n;return r}function aR(e,t,n){return rR(e,t).includes(String(n||``).trim())}function oR(e,t,n,r){let i=qL(rR(e,t)),a=String(n||``).trim();return a?iR(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function sR(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),description:String(e&&e.description||``).trim()||void 0,user_path:String(e&&e.user_path||``).trim()||void 0,config:KL(e&&e.config)}}var cR=new class{#e=A(M([]));get guardrails(){return L(this.#e)}set guardrails(e){j(this.#e,e,!0)}#t=A(M([]));get types(){return L(this.#t)}set types(e){j(this.#t,e,!0)}#n=A(!0);get available(){return L(this.#n)}set available(e){j(this.#n,e,!0)}#r=A(!1);get loading(){return L(this.#r)}set loading(e){j(this.#r,e,!0)}#i=A(!1);get typesLoading(){return L(this.#i)}set typesLoading(e){j(this.#i,e,!0)}#a=A(``);get error(){return L(this.#a)}set error(e){j(this.#a,e,!0)}#o=A(``);get filter(){return L(this.#o)}set filter(e){j(this.#o,e,!0)}#s=A(!1);get formOpen(){return L(this.#s)}set formOpen(e){j(this.#s,e,!0)}#c=A(!1);get formSubmitting(){return L(this.#c)}set formSubmitting(e){j(this.#c,e,!0)}#l=A(``);get deletingName(){return L(this.#l)}set deletingName(e){j(this.#l,e,!0)}#u=A(`create`);get formMode(){return L(this.#u)}set formMode(e){j(this.#u,e,!0)}#d=A(``);get formOriginalName(){return L(this.#d)}set formOriginalName(e){j(this.#d,e,!0)}#f=A(M({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return L(this.#f)}set form(e){j(this.#f,e,!0)}get filtered(){return eR(this.guardrails,this.filter)}typeLabel(e){return tR(this.types,e)}typeFields(e){return nR(this.types,e)}fieldValue(e){return rR(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:iR(this.form.config,e,t)}}arrayFieldSelected(e,t){return aR(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:oR(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=$L(this.types,YL(this.types)),this.formOpen=!0}openEdit(e){let t=XL(this.types,e&&e.type);this.formMode=`edit`,this.formOriginalName=String(e&&e.name||``).trim(),this.error=``,this.form={name:this.formOriginalName,type:t,description:String(e&&e.description||``).trim(),user_path:String(e&&e.user_path||``).trim(),config:QL(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=$L(this.types,YL(this.types))}changeType(e){let t=XL(this.types,e);this.form={...this.form,type:t,config:ZL(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await ET(`/admin/guardrails/types`,{label:`guardrail types`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.types=[];return}if(e.result&&(this.available=!0),this.types=e.items,e.status===`error`){this.error=e.error;return}let t=XL(this.types,this.form.type);this.form={...this.form,type:t,config:QL(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await ET(`/admin/guardrails`,{label:`guardrails`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.guardrails=[];return}e.result&&(this.available=!0),this.guardrails=e.items,this.error=e.error}finally{this.loading=!1}}async fetchPage(){await Promise.all([this.fetchTypes(),this.fetchGuardrails()])}async submitForm(){let e=String(this.form.name||``).trim(),t=String(this.form.type||``).trim();if(!e){this.error=`Name is required.`;return}if(!t){this.error=`Type is required.`;return}this.error=``,this.formSubmitting=!0;let n=sR(this.form);try{let t=await DT(`/admin/guardrails`,`PUT`,n,{label:`save guardrail`,errorFallback:`Failed to save guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}J.success(`Guardrail "`+e+`" saved.`),this.closeForm(),this.fetchGuardrails()}finally{this.formSubmitting=!1}}async deleteGuardrail(e){let t=String(e&&e.name||``).trim();if(!(!t||this.deletingName)&&window.confirm(`Delete guardrail "`+t+`"? Workflows that still reference it must be updated first.`)){this.deletingName=t;try{let e=await DT(`/admin/guardrails`,`DELETE`,{name:t},{label:`delete guardrail`,errorFallback:`Failed to delete guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,J.error(e.error);return}if(e.status===`error`){J.error(e.error);return}J.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},lR=z(`
        `),uR=z(`

        Loading guardrails...

        `),dR=z(`
        `),fR=z(`
        `),pR=z(`
        NameTypeUser PathSummaryActions
        `),mR=z(`

        No guardrails defined yet.

        `),hR=z(`

        Instances

        Each instance has a reusable name, a type, an optional user path for + future UI visibility scoping, and a JSON-backed config payload for + that type.

        `);function gR(e,t){D(t,!0);var n=hR(),r=N(n),i=F(N(r),2);K(N(i),{get icon(){return po},class:`form-action-icon`}),He(2),E(i),E(r);var a=F(r,2),o=e=>{var t=lR(),n=N(t);Ow(N(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return cR.filter},set value(e){cR.filter=e}}),E(n),E(t),B(e,t)};H(a,e=>{cR.available&&e(o)});var s=F(a,2),c=e=>{var t=uR();AS(N(t),{size:16,label:`Loading guardrails`}),He(),E(t),B(e,t)};H(s,e=>{cR.loading&&cR.filtered.length===0&&e(c)});var l=F(s,2),u=e=>{var t=pR(),n=N(t),r=F(N(n));U(r,21,()=>cR.filtered,e=>e.name,(e,t)=>{var n=fR(),r=N(n),i=N(r,!0);E(r);var a=F(r),o=N(a),s=N(o,!0);E(o),E(a);var c=F(a),l=N(c,!0);E(c);var u=F(c),d=N(u),f=N(d,!0);E(d);var p=F(d,2),m=e=>{var n=dR(),r=N(n,!0);E(n),I(()=>V(r,L(t).description)),B(e,n)};H(p,e=>{L(t).description&&e(m)}),E(u);var h=F(u),g=N(h),_=N(g);{let e=k(()=>`Edit guardrail `+L(t).name);TT(_,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>cR.openEdit(L(t)),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=F(_,2);{let e=k(()=>(cR.deletingName===L(t).name?`Deleting guardrail `:`Delete guardrail `)+L(t).name),n=k(()=>cR.deletingName===L(t).name);TT(v,{get label(){return L(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>cR.deleteGuardrail(L(t)),get disabled(){return L(n)},children:(e,t)=>{K(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}E(g),E(h),E(n),I(e=>{V(i,L(t).name),V(s,e),V(l,L(t).user_path||`—`),V(f,L(t).summary||L(t).description||`No summary yet.`)},[()=>cR.typeLabel(L(t).type)]),B(e,n)}),E(r),E(n),E(t),B(e,t)};H(l,e=>{cR.filtered.length>0&&e(u)});var d=F(l,2),f=e=>{B(e,mR())};H(d,e=>{cR.filtered.length===0&&!cR.loading&&cR.available&&!cR.error&&!q.authError&&e(f)}),E(n),I(()=>i.disabled=cR.typesLoading||cR.formSubmitting||!cR.available),R(`click`,i,()=>cR.openCreate()),B(e,n),O()}Vr([`click`]);var _R=z(`

        Workflows reference these names directly, so renames are + intentionally avoided after creation.

        `),vR=z(``),yR=z(``),bR=z(``),xR=z(``),SR=z(``),CR=z(``),wR=z(``),TR=z(``),ER=z(``),DR=z(`
        `),OR=z(``),kR=z(` `),AR=z(`
        `),jR=z(`
        `);function MR(e,t){D(t,!0);let n=k(()=>cR.formMode===`edit`);{let t=e=>{B(e,_R())},r=k(()=>L(n)?`Edit Guardrail`:`Create Guardrail`);kE(e,{get open(){return cR.formOpen},get title(){return L(r)},ariaLabel:`Guardrail editor`,get error(){return cR.error},get submitting(){return cR.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>cR.closeForm(),onsubmit:()=>cR.submitForm(),headerHint:t,children:(e,t)=>{var r=jR(),i=N(r);jE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=vR();ta(r),I(()=>{r.disabled=L(n),G(r,`data-modal-autofocus`,!L(n)||void 0)}),ua(r,()=>cR.form.name,e=>cR.form.name=e),B(e,r)},$$slots:{default:!0}});var a=F(i,2);jE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=bR();U(r,21,()=>cR.types,e=>e.type,(e,t)=>{var n=yR(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).type)&&(n.value=(n.__value=L(t).type)??``)}),B(e,n)}),E(r);var i;Ui(r),I(()=>{r.disabled=L(n),i!==(i=cR.form.type)&&(r.value=(r.__value=cR.form.type)??``,Hi(r,cR.form.type))}),R(`change`,r,e=>cR.changeType(e.currentTarget.value)),B(e,r)},$$slots:{default:!0}});var o=F(a,2);jE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=xR();ta(r),I(()=>G(r,`data-modal-autofocus`,L(n)?!0:void 0)),ua(r,()=>cR.form.description,e=>cR.form.description=e),B(e,r)},$$slots:{default:!0}});var s=F(o,2),c=N(s);tC(c,{copyId:`guardrail-user-path-help-copy`,label:`guardrail user path help`,text:`Only used for auxiliary rewrite (llm_based_altering) guardrails; ignored for other guardrail types.`,title:e=>{B(e,SR())},$$slots:{title:!0}});var l=F(c,2);ta(l),E(s),U(F(s,2),17,()=>cR.typeFields(cR.form.type),e=>e.key,(e,t)=>{var n=Zr(),r=P(n),i=e=>{var n=DR(),r=N(n);{let e=e=>{var n=CR(),r=N(n,!0);E(n),I(()=>{G(n,`for`,`guardrail-field-`+L(t).key),V(r,L(t).label)}),B(e,n)},n=k(()=>`guardrail-field-help-`+L(t).key),i=k(()=>L(t).label+` help`),a=k(()=>L(t).help||``);tC(r,{get copyId(){return L(n)},get label(){return L(i)},get text(){return L(a)},title:e,$$slots:{title:!0}})}var i=F(r,2),a=e=>{var n=wR();U(n,21,()=>L(t).options||[],e=>e.value,(e,t)=>{var n=yR(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n);var r;Ui(n),I(e=>{G(n,`id`,`guardrail-field-`+L(t).key),G(n,`aria-describedby`,L(t).help?`guardrail-field-help-`+L(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Hi(n,e))},[()=>cR.fieldValue(L(t))]),R(`change`,n,e=>cR.setFieldValue(L(t),e.currentTarget.value)),B(e,n)},o=e=>{var n=TR();dt(n),I(e=>{G(n,`id`,`guardrail-field-`+L(t).key),G(n,`placeholder`,L(t).placeholder||``),na(n,e),G(n,`aria-describedby`,L(t).help?`guardrail-field-help-`+L(t).key:void 0)},[()=>cR.fieldValue(L(t))]),R(`input`,n,e=>cR.setFieldValue(L(t),e.currentTarget.value)),B(e,n)},s=e=>{var n=ER();ta(n),I(e=>{G(n,`id`,`guardrail-field-`+L(t).key),G(n,`type`,L(t).input||`text`),G(n,`placeholder`,L(t).placeholder||``),na(n,e),G(n,`aria-describedby`,L(t).help?`guardrail-field-help-`+L(t).key:void 0)},[()=>cR.fieldValue(L(t))]),R(`input`,n,e=>cR.setFieldValue(L(t),e.currentTarget.value)),B(e,n)};H(i,e=>{L(t).input===`select`?e(a):L(t).input===`textarea`?e(o,1):e(s,-1)}),E(n),B(e,n)},a=e=>{var n=AR(),r=N(n),i=N(r,!0);E(r);var a=F(r,2);U(a,21,()=>L(t).options||[],e=>L(t).key+`-`+e.value,(e,n)=>{var r=OR(),i=N(r);ta(i);var a=F(i,2),o=N(a,!0);E(a),E(r),I(e=>{ra(i,e),V(o,L(n).label)},[()=>cR.arrayFieldSelected(L(t),L(n).value)]),R(`change`,i,e=>cR.toggleArrayFieldValue(L(t),L(n).value,e.currentTarget.checked)),B(e,r)}),E(a);var o=F(a,2),s=e=>{var n=kR(),r=N(n,!0);E(n),I(()=>{G(n,`id`,`guardrail-field-help-`+L(t).key),V(r,L(t).help)}),B(e,n)};H(o,e=>{L(t).help&&e(s)}),E(n),I(()=>{G(n,`aria-describedby`,L(t).help?`guardrail-field-help-`+L(t).key:void 0),V(i,L(t).label)}),B(e,n)};H(r,e=>{L(t).input===`checkboxes`?e(a,-1):e(i)}),B(e,n)}),E(r),ua(l,()=>cR.form.user_path,e=>cR.form.user_path=e),B(e,r)},$$slots:{headerHint:!0,default:!0}})}O()}Vr([`change`,`input`]);var NR=z(`

        Guardrails

        `),PR=z(`
        Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage + definitions here.
        `),FR=z(`
        Guardrails feature is unavailable.
        `),IR=z(`
        `),LR=z(`

        Reusable Policy Objects

        Guardrail Library

        Store guardrails in the database, keep them hot in memory, and attach + them to workflows by reference.

        Instances
        Types
        `);function RR(e,t){D(t,!0),kn(()=>{q.refreshTick,Yo.page===`guardrails`&&(Os.ensureLoaded(),cR.fetchPage())});var n=LR(),r=N(n),i=N(r);tC(N(i),{copyId:`guardrails-help-copy`,label:`guardrails help`,text:`Reusable policy objects stored in the database and kept hot in memory for workflow execution.`,title:e=>{B(e,NR())},$$slots:{title:!0}}),E(i),E(r);var a=F(r,2),o=F(N(a),2),s=N(o),c=F(N(s),2),l=N(c,!0);E(c),E(s);var u=F(s,2),d=F(N(u),2),f=N(d,!0);E(d),E(u),E(o),E(a);var p=F(a,2);Uc(p,{});var m=F(p,2),h=e=>{B(e,PR())},g=k(()=>!Os.guardrailsVisible());H(m,e=>{L(g)&&e(h)});var _=F(m,2),v=e=>{B(e,FR())};H(_,e=>{!q.authError&&!cR.available&&e(v)});var y=F(_,2),b=e=>{var t=IR(),n=N(t,!0);E(t),I(()=>V(n,cR.error)),B(e,t)};H(y,e=>{!q.authError&&cR.error&&!cR.formOpen&&e(b)});var x=F(y,2);MR(x,{}),gR(F(x,2),{}),E(n),I((e,t)=>{V(l,e),V(f,t)},[()=>mc(cR.guardrails.length),()=>mc(cR.types.length)]),B(e,n),O()}var Q=new class{#e=A(M([]));get servers(){return L(this.#e)}set servers(e){j(this.#e,e,!0)}#t=A(!0);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get error(){return L(this.#r)}set error(e){j(this.#r,e,!0)}#i=A(``);get filter(){return L(this.#i)}set filter(e){j(this.#i,e,!0)}#a=A(!1);get formOpen(){return L(this.#a)}set formOpen(e){j(this.#a,e,!0)}#o=A(!1);get formSubmitting(){return L(this.#o)}set formSubmitting(e){j(this.#o,e,!0)}#s=A(`create`);get formMode(){return L(this.#s)}set formMode(e){j(this.#s,e,!0)}#c=A(!1);get slugEdited(){return L(this.#c)}set slugEdited(e){j(this.#c,e,!0)}#l=A(!1);get advancedOpen(){return L(this.#l)}set advancedOpen(e){j(this.#l,e,!0)}#u=A(M(yx()));get form(){return L(this.#u)}set form(e){j(this.#u,e,!0)}#d=A(``);get deletingName(){return L(this.#d)}set deletingName(e){j(this.#d,e,!0)}#f=A(``);get reconnectingName(){return L(this.#f)}set reconnectingName(e){j(this.#f,e,!0)}#p=A(!1);get catalogOpen(){return L(this.#p)}set catalogOpen(e){j(this.#p,e,!0)}#m=A(!1);get catalogLoading(){return L(this.#m)}set catalogLoading(e){j(this.#m,e,!0)}#h=A(``);get catalogError(){return L(this.#h)}set catalogError(e){j(this.#h,e,!0)}#g=A(M(bx()));get catalog(){return L(this.#g)}set catalog(e){j(this.#g,e,!0)}#_=k(()=>jx(this.servers,this.filter));get filtered(){return L(this.#_)}set filtered(e){j(this.#_,e)}async fetchServers(){if(await Os.ensureLoaded(),!Os.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await ET(`/admin/mcp-servers`,{label:`mcp servers`,errorFallback:`Failed to load MCP servers.`,unavailableStatuses:[503,404]});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.servers=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.servers=[],this.error=e.error;return}this.available=!0,this.servers=e.items}finally{this.loading=!1}}openCreate(){this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=yx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=Mx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=yx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=Dx(this.form.name))}markSlugEdited(){this.formMode===`create`&&(this.slugEdited=!0)}addHeader(){this.form.headers.push({name:``,value:``})}removeHeader(e){this.form.headers.splice(e,1)}async submitForm(){let e=Nx(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await DT(`/admin/mcp-servers`,`PUT`,e.payload,{label:`save mcp server`,errorFallback:`Failed to save MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}J.success(`MCP server "`+e.payload.name+`" saved.`),this.closeForm(),this.fetchServers()}finally{this.formSubmitting=!1}}async deleteServer(e){let t=String(e&&e.name||``).trim(),n=xx(e);if(!(!n||this.deletingName||e&&e.managed)&&confirm(`Delete MCP server "`+t+`"? Clients lose access to its tools immediately.`)){this.deletingName=n;try{let e=await DT(`/admin/mcp-servers/`+encodeURIComponent(n),`DELETE`,void 0,{label:`delete mcp server`,errorFallback:`Failed to delete MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,J.error(e.error);return}if(e.status===`error`){J.error(e.error);return}J.success(`MCP server "`+t+`" deleted.`),this.formOpen&&this.form.slug===n&&this.closeForm(),this.fetchServers()}finally{this.deletingName=``}}}async reconnectServer(e){let t=String(e&&e.name||``).trim(),n=xx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await DT(`/admin/mcp-servers/`+encodeURIComponent(n)+`/reconnect`,`POST`,void 0,{label:`reconnect mcp server`,errorFallback:`Failed to reconnect MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,J.error(e.error);return}if(e.status===`error`){J.error(e.error);return}let r=e.result.data,i=Sx(r);i===`connected`?J.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?J.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):J.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>xx(e)===xx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=xx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...bx(),server:n,status:Sx(e)};try{let e=await Cs(`/admin/mcp-servers/`+encodeURIComponent(n)+`/catalog`,{label:`mcp server catalog`});if(e.stale)return;if(e.status===503){this.available=!1,this.catalogError=`MCP server management is unavailable.`;return}if(e.status===404){this.catalogError=`MCP server "`+t+`" was not found.`;return}if(!e.ok){this.catalogError=e.status===401?`Authentication required.`:vs(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Px(n,e.data)}catch(e){console.error(`Failed to load MCP server catalog:`,e),this.catalogError=`Failed to load MCP server catalog.`}finally{this.catalogLoading=!1}}}closeCatalog(){this.catalogOpen=!1,this.catalogLoading=!1,this.catalogError=``,this.catalog=bx()}},zR=z(``),BR=z(`

        `),VR=z(`
        `),HR=z(`

        `),UR=z(`
      • `),WR=z(`

          `),GR=z(`

          No tools listed — the server may still be connecting or degraded.

          `),KR=z(` `,1),qR=z(``);function JR(e,t){D(t,!0);let n=k(()=>Ix(Q.catalog));Bs(e,{get open(){return Q.catalogOpen},variant:`editor`,onclose:()=>Q.closeCatalog(),children:(e,t)=>{var r=qR(),i=N(r),a=N(i),o=F(N(a),2),s=N(o),c=N(s,!0);E(s);var l=F(s,2),u=N(l,!0);E(l),E(o),E(a),Is(F(a,2),{label:`Close MCP server catalog`,onclick:()=>Q.closeCatalog()}),E(i);var d=F(i,2),f=e=>{CT(e,{label:`Loading catalog...`})},p=e=>{var t=zR(),n=N(t,!0);E(t),I(()=>V(n,Q.catalogError)),B(e,t)},m=e=>{var t=KR(),r=P(t),i=e=>{var t=BR(),n=N(t,!0);E(t),I(()=>V(n,Q.catalog.instructions)),B(e,t)};H(r,e=>{Q.catalog.instructions&&e(i)});var a=F(r,2);U(a,17,()=>L(n),e=>e.key,(e,t)=>{var n=WR(),r=N(n),i=N(r,!0);E(r);var a=F(r,2);U(a,21,()=>L(t).items,e=>e.key,(e,t)=>{var n=UR(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=e=>{var n=VR(),r=N(n,!0);E(n),I(()=>{G(n,`title`,`Exposed on the aggregated /mcp endpoint as `+L(t).aggregated),V(r,L(t).aggregated)}),B(e,n)};H(a,e=>{L(t).aggregated&&e(o)});var s=F(a,2),c=e=>{var n=HR(),r=N(n,!0);E(n),I(()=>V(r,L(t).description)),B(e,n)};H(s,e=>{L(t).description&&e(c)}),E(n),I(()=>{G(r,`title`,L(t).aggregated||L(t).name),V(i,L(t).name)}),B(e,n)}),E(a),E(n),I(()=>V(i,L(t).title)),B(e,n)});var o=F(a,2),s=e=>{B(e,GR())},c=k(()=>Lx(Q.catalog));H(o,e=>{L(c)&&e(s)}),B(e,t)};H(d,e=>{Q.catalogLoading?e(f):Q.catalogError?e(p,1):e(m,-1)});var h=F(d,2),g=N(h);E(h),E(r),I((e,t)=>{V(c,Q.catalog.server),W(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),V(u,t)},[()=>Cx(Q.catalog),()=>Sx(Q.catalog)]),R(`click`,g,()=>Q.closeCatalog()),B(e,r)},$$slots:{default:!0}}),O()}Vr([`click`]);var YR=z(`

          The display name can change. The slug is the stable client-facing identity.

          `),XR=z(` Human-readable and Unicode-friendly. You can change it later.`,1),ZR=z(`Derived from the name. You may edit it before saving.`),QR=z(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),$R=z(` `,1),ez=z(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),tz=z(``),nz=z(`
          `),rz=z(`
          Headers
          Sent only to the configured server origin. Saved values are shown as ***; leave *** unchanged to keep the stored value.
          Advanced settings Description, access rules, and timeout
          `,1);function iz(e,t){D(t,!0);{let t=e=>{B(e,YR())},n=k(()=>Q.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);kE(e,{get open(){return Q.formOpen},get title(){return L(n)},ariaLabel:`MCP server editor`,get error(){return Q.error},get submitting(){return Q.formSubmitting},onclose:()=>Q.closeForm(),onsubmit:()=>Q.submitForm(),headerHint:t,children:(e,t)=>{var n=rz(),r=P(n);jE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=XR(),r=P(n);ta(r),He(2),R(`input`,r,()=>Q.syncSlugFromName()),ua(r,()=>Q.form.name,e=>Q.form.name=e),B(e,n)},$$slots:{default:!0}});var i=F(r,2);jE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=$R(),r=P(n);ta(r);var i=F(r,2),a=e=>{B(e,ZR())},o=e=>{B(e,QR())};H(i,e=>{Q.formMode===`create`?e(a):e(o,-1)}),I(()=>r.disabled=Q.formMode===`edit`),R(`input`,r,()=>Q.markSlugEdited()),ua(r,()=>Q.form.slug,e=>Q.form.slug=e),B(e,n)},$$slots:{default:!0}});var a=F(i,2);jE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=ez(),r=P(n),i=N(r);i.value=i.__value=`http`;var a=F(i);a.value=a.__value=`sse`,E(r),He(2),Wi(r,()=>Q.form.transport,e=>Q.form.transport=e),B(e,n)},$$slots:{default:!0}});var o=F(a,2);jE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=tz();ta(n),ua(n,()=>Q.form.url,e=>Q.form.url=e),B(e,n)},$$slots:{default:!0}});var s=F(o,2),c=F(N(s),2);U(c,21,()=>Q.form.headers,ai,(e,t,n)=>{var r=nz(),i=N(r);ta(i);var a=F(i,2);ta(a),TT(F(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeHeader(n),children:(e,t)=>{K(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),E(r),ua(i,()=>L(t).name,e=>L(t).name=e),ua(a,()=>L(t).value,e=>L(t).value=e),B(e,r)}),E(c);var l=F(c,2),u=N(l);K(N(u),{get icon(){return po},class:`form-action-icon`}),He(2),E(u),E(l),He(2),E(s);var d=F(s,2),f=N(d);kA(N(f),{get enabled(){return Q.form.enabled},label:`MCP server`,onclick:()=>Q.form.enabled=!Q.form.enabled}),E(f),E(d);var p=F(d,2),m=F(N(p),2),h=N(m),g=F(N(h),2);ta(g),E(h);var _=F(h,2),v=F(N(_),2);ta(v),E(_);var y=F(_,2),b=F(N(y),2);ta(b),E(y);var x=F(y,2),S=F(N(x),2);dt(S),G(S,`placeholder`,`/ +/team/alpha`),E(x);var C=F(x,2),w=F(N(C),2);ta(w),E(C),E(m),E(p),I(()=>p.open=Q.advancedOpen),R(`click`,u,()=>Q.addHeader()),Br(`toggle`,p,e=>Q.advancedOpen=e.currentTarget.open),ua(g,()=>Q.form.description,e=>Q.form.description=e),ua(v,()=>Q.form.allowed_tools,e=>Q.form.allowed_tools=e),ua(b,()=>Q.form.disallowed_tools,e=>Q.form.disallowed_tools=e),ua(S,()=>Q.form.user_paths,e=>Q.form.user_paths=e),ua(w,()=>Q.form.tool_timeout_seconds,e=>Q.form.tool_timeout_seconds=e),B(e,n)},$$slots:{headerHint:!0,default:!0}})}O()}Vr([`input`,`click`]);var az=z(`Config`),oz=z(`
          `),sz=z(`
          `),cz=z(`
          NameTransportEndpointStatusToolsEnabledActions
          `);function lz(e,t){D(t,!0);function n(e){return wx(e,e=>_s.formatTimestamp(e))}var r=cz(),i=N(r),a=F(N(i));U(a,21,()=>Q.filtered,e=>xx(e),(e,t)=>{var r=sz(),i=N(r),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=e=>{B(e,az())};H(s,e=>{L(t).managed&&e(c)});var l=F(s,2),u=N(l,!0);E(l),E(i);var d=F(i),f=N(d),p=N(f,!0);E(f),E(d);var m=F(d),h=N(m,!0);E(m);var g=F(m),_=N(g),v=N(_,!0);E(_);var y=F(_,2),b=e=>{var n=oz(),r=N(n,!0);E(n),I(()=>V(r,L(t).last_error)),B(e,n)},x=k(()=>Sx(L(t))===`degraded`&&L(t).last_error);H(y,e=>{L(x)&&e(b)}),E(g);var S=F(g),C=N(S),w=N(C,!0);E(C);var T=F(C,2),ee=N(T,!0);E(T),E(S);var te=F(S),ne=N(te),re=N(ne,!0);E(ne),E(te);var ie=F(te),ae=N(ie),oe=N(ae),se=e=>{{let n=k(()=>`Edit MCP server `+L(t).name);TT(e,{get label(){return L(n)},class:`table-icon-btn`,onclick:()=>Q.openEdit(L(t)),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(oe,e=>{L(t).managed||e(se)});var ce=F(oe,2);{let e=k(()=>`Inspect catalog of MCP server `+L(t).name);TT(ce,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>Q.openCatalog(L(t)),children:(e,t)=>{K(e,{get icon(){return ro},class:`form-action-icon`})},$$slots:{default:!0}})}var le=F(ce,2);{let e=k(()=>(Q.reconnectingName===xx(L(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+L(t).name),n=k(()=>Q.reconnectingName===xx(L(t)));TT(le,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>Q.reconnectServer(L(t)),get disabled(){return L(n)},children:(e,t)=>{K(e,{get icon(){return ho},class:`form-action-icon`})},$$slots:{default:!0}})}var ue=F(le,2),de=e=>{{let n=k(()=>(Q.deletingName===xx(L(t))?`Deleting MCP server `:`Delete MCP server `)+L(t).name),r=k(()=>Q.deletingName===xx(L(t)));TT(e,{get label(){return L(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>Q.deleteServer(L(t)),get disabled(){return L(r)},children:(e,t)=>{K(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(ue,e=>{L(t).managed||e(de)}),E(ae),E(ie),E(r),I((e,n,r,i,a,s,c,l)=>{V(o,L(t).name),V(u,e),V(p,L(t).transport||`http`),G(m,`title`,n),V(h,r),W(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),G(_,`title`,a),V(v,s),V(w,c),V(ee,l),W(ne,1,Pi([`auth-key-status-badge`,L(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),V(re,L(t).enabled?`Enabled`:`Disabled`)},[()=>xx(L(t)),()=>Tx(L(t)),()=>Tx(L(t)),()=>Cx(L(t)),()=>n(L(t)),()=>Sx(L(t)),()=>mc(L(t).tool_count||0),()=>Ex(L(t))]),B(e,r)}),E(a),E(i),E(r),B(e,r),O()}var uz=z(`

          MCP Servers

          `),dz=z(``),fz=z(`
          MCP server management is unavailable.
          `),pz=z(``),mz=z(`
          `),hz=z(`

          No MCP servers yet. Add one here, or declare servers in config.yaml under mcp.servers.

          `),gz=z(`

          No MCP servers match your filter.

          `),_z=z(`
          `);function vz(e,t){D(t,!0),kn(()=>{q.refreshTick,Yo.page===`mcp-servers`&&Q.fetchServers()});var n=_z(),r=N(n),i=N(r);tC(N(i),{copyId:`mcp-servers-help-copy`,label:`MCP servers help`,text:`Upstream Model Context Protocol servers whose tools, prompts, and resources the gateway exposes to clients. Servers added here connect over HTTP or SSE; stdio servers and rows marked Config are declared in config.yaml under mcp.servers and are read-only in the dashboard. Saved header values are masked in API and dashboard responses.`,title:e=>{B(e,uz())},$$slots:{title:!0}}),E(i);var a=F(i,2),o=N(a),s=e=>{var t=dz();K(N(t),{get icon(){return po},class:`form-action-icon`}),He(2),E(t),I(()=>t.disabled=Q.formSubmitting),R(`click`,t,()=>Q.openCreate()),B(e,t)};H(o,e=>{Q.available&&!q.authError&&e(s)}),E(a),E(r);var c=F(r,2),l=e=>{B(e,fz())};H(c,e=>{!Q.available&&!q.authError&&e(l)});var u=F(c,2),d=e=>{var t=pz(),n=N(t,!0);E(t),I(()=>V(n,Q.error)),B(e,t)};H(u,e=>{Q.error&&!q.authError&&!Q.formOpen&&e(d)});var f=F(u,2),p=e=>{CT(e,{label:`Loading MCP servers...`})};H(f,e=>{Q.loading&&!q.authError&&e(p)});var m=F(f,2),h=e=>{var t=mz(),n=N(t);Ow(N(n),{id:`mcp-server-filter`,placeholder:`Filter by name, slug, URL, transport, or status...`,label:`Filter MCP servers by name, slug, URL, transport, or status`,get value(){return Q.filter},set value(e){Q.filter=e}}),E(n),E(t),B(e,t)};H(m,e=>{(Q.servers.length>0||Q.filter)&&Q.available&&!q.authError&&e(h)});var g=F(m,2);iz(g,{});var _=F(g,2);JR(_,{});var v=F(_,2),y=e=>{lz(e,{})};H(v,e=>{Q.filtered.length>0&&Q.available&&!q.authError&&e(y)});var b=F(v,2),x=e=>{B(e,hz())};H(b,e=>{Q.servers.length===0&&!Q.filter&&!Q.loading&&!q.authError&&!Q.error&&Q.available&&e(x)});var S=F(b,2),C=e=>{B(e,gz())};H(S,e=>{Q.servers.length>0&&Q.filtered.length===0&&Q.filter&&!Q.loading&&!q.authError&&Q.available&&e(C)}),E(n),B(e,n),O()}Vr([`click`]);var yz=`api_keys`,bz=`session_sticky_keys`,xz=`base_url`,Sz=`service_account_json`,Cz=`models`,wz={[yz]:{label:`API Keys`,control:`keys`,hint:`Identified sessions stay on one key by default, improving provider prompt-cache hits. Saved values are shown as ***********; leave the asterisks unchanged to keep the stored key.`},[bz]:{label:`Session-sticky API keys`,control:`checkbox`,hint:`Keep each identified conversation on one API key to preserve provider prompt-cache affinity. Turn off to rotate keys round-robin on every request.`},[xz]:{label:`Base URL`,control:`text`},api_version:{label:`API Version`,control:`text`,placeholder:`e.g. 2024-10-01-preview`,hint:`Leave empty for the provider default. Realtime endpoints may need a newer version.`},backend:{label:`Backend`,control:`select`,hint:`Which Google surface to call. Vertex authenticates with Google credentials instead of an API key.`},auth_type:{label:`Auth Type`,control:`select`,hint:`How to obtain Google credentials. Leave on the default to use Application Default Credentials.`},api_mode:{label:`API Mode`,control:`select`,hint:`Which request shape to send upstream.`},vertex_project:{label:`Vertex Project`,control:`text`,placeholder:`my-gcp-project`},vertex_location:{label:`Vertex Location`,control:`text`,placeholder:`us-central1`},service_account_file:{label:`Service Account File`,control:`text`,placeholder:`/path/to/service-account.json`,hint:`Path readable by the gateway process.`},[Sz]:{label:`Service Account JSON`,control:`textarea`,placeholder:`Paste service account JSON`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value, or clear it to remove.`},service_account_json_base64:{label:`Service Account JSON (base64)`,control:`text`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value.`},gcp_scope:{label:`GCP Scope`,control:`text`,placeholder:`https://www.googleapis.com/auth/cloud-platform`},[Cz]:{label:`Models (comma-separated)`,control:`text`,placeholder:`gpt-4o, gpt-4o-mini`,hint:`Leave empty to auto-discover models from the provider's /models endpoint where supported.`}};function Tz(e){return wz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function Ez(){return{name:``,type:``,api_keys:[],session_sticky_keys:!0,base_url:``,api_version:``,backend:``,auth_type:``,api_mode:``,vertex_project:``,vertex_location:``,service_account_file:``,service_account_json:``,service_account_json_base64:``,gcp_scope:``,models:``,enabled:!0}}function Dz(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.type,e.base_url].some(e=>String(e||``).toLowerCase().includes(r)))}function Oz(e,t){let n=(Array.isArray(e)?e:[]).map(e=>String(e&&e.type||``).trim()).filter(Boolean),r=String(t||``).trim();return r&&!n.includes(r)&&n.push(r),n}function kz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function Az(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(wz).map(e=>({name:e,advanced:e!==yz})),r=t||e&&e.default_base_url||``,i=[],a=[];for(let e of n){let t=String(e&&e.name||``).trim();if(!t)continue;let n={...Tz(t),name:t,required:!!(e&&e.required),options:Array.isArray(e&&e.options)?e.options:[]};t===`base_url`&&r&&(n.placeholder=r,n.hint=`Defaults to `+r),n.options.length>0&&(n.control=`select`),(e&&e.advanced?a:i).push(n)}return{primary:i,advanced:a}}var jz=new Set([`name`,`type`,`enabled`]);function Mz(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=Ez(),i={...e};for(let e of Object.keys(r))!jz.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function Nz(e){let t=Array.isArray(e&&e.api_keys)?e.api_keys.length:0;return t>0?t+` key`+(t===1?``:`s`):String(e&&e.service_account_json||``).trim()||String(e&&e.service_account_json_base64||``).trim()||String(e&&e.service_account_file||``).trim()?`service account`:String(e&&e.vertex_project||``).trim()?`ADC`:`keyless`}function Pz(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function Fz(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function Iz(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function Lz(e,t){let n=String(t||``).trim();if(!n)return``;let r=new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.name||``).trim()));if(!r.has(n))return n;let i=1;for(;r.has(n+`-`+i);)i+=1;return n+`-`+i}function Rz(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:Fz(e&&e.api_keys),session_sticky_keys:!e||e.session_sticky_keys!==!1,base_url:String(e&&e.base_url||``),api_version:String(e&&e.api_version||``),backend:String(e&&e.backend||``),auth_type:String(e&&e.auth_type||``),api_mode:String(e&&e.api_mode||``),vertex_project:String(e&&e.vertex_project||``),vertex_location:String(e&&e.vertex_location||``),service_account_file:String(e&&e.service_account_file||``),service_account_json:String(e&&e.service_account_json||``),service_account_json_base64:String(e&&e.service_account_json_base64||``),gcp_scope:String(e&&e.gcp_scope||``),models:(Array.isArray(e&&e.models)?e.models:[]).join(`, `),enabled:!e||e.enabled!==!1}}function zz(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function Bz(e,t,n,r){let i={},a=String(e&&e.name||``).trim();String(e&&e.type||``).trim()||(i.type=`Select a provider type.`),a?a.includes(`/`)?i.name=`Name cannot contain '/' — it separates the provider from the model.`:t===`create`&&(Array.isArray(n)?n:[]).some(e=>String(e&&e.name||``).trim()===a)&&(i.name=`Provider "`+a+`" already exists.`):i.name=`Name is required.`;let{primary:o,advanced:s}=Az(r);for(let t of[...o,...s]){let n=Vz(e,t);n&&(i[t.name]=n)}return i}function Vz(e,t){if(t.name===`api_keys`){let n=Iz(e&&e.api_keys);return t.required&&!n.some(e=>e.trim())?`At least one API key is required for this provider type.`:n.some(e=>!e.trim())?`Remove the empty row instead of leaving a key blank.`:``}let n=String(e&&e[t.name]||``).trim();if(t.required&&!n)return t.label+` is required for this provider type.`;if(!n)return``;if(t.name===`base_url`&&!n.includes(`://`)&&/[./]/.test(n))return`Include the scheme, e.g. https://`+n;if(t.name===`service_account_json`&&!zz(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function Hz(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=Az(t),a=!!(t&&Array.isArray(t.fields)&&t.fields.length>0),o=new Set;for(let t of[...r,...i])!a&&t.name===`session_sticky_keys`||(o.add(t.name),n[t.name]=Uz(e,t.name));for(let t of Object.keys(wz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=Uz(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function Uz(e,t){switch(t){case yz:return Iz(e&&e.api_keys);case Cz:return fc(e&&e.models);case bz:return!!(e&&e.session_sticky_keys);case Sz:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var $=new class{#e=A(M([]));get rows(){return L(this.#e)}set rows(e){j(this.#e,e,!0)}#t=A(!0);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get error(){return L(this.#r)}set error(e){j(this.#r,e,!0)}#i=A(``);get filter(){return L(this.#i)}set filter(e){j(this.#i,e,!0)}#a=A(!1);get formOpen(){return L(this.#a)}set formOpen(e){j(this.#a,e,!0)}#o=A(!1);get formSubmitting(){return L(this.#o)}set formSubmitting(e){j(this.#o,e,!0)}#s=A(`create`);get formMode(){return L(this.#s)}set formMode(e){j(this.#s,e,!0)}#c=A(!1);get advancedOpen(){return L(this.#c)}set advancedOpen(e){j(this.#c,e,!0)}#l=A(M(Ez()));get form(){return L(this.#l)}set form(e){j(this.#l,e,!0)}#u=A(M({}));get fieldErrors(){return L(this.#u)}set fieldErrors(e){j(this.#u,e,!0)}#d=A(``);get focusField(){return L(this.#d)}set focusField(e){j(this.#d,e,!0)}#f=A(``);get deletingName(){return L(this.#f)}set deletingName(e){j(this.#f,e,!0)}#p=A(!1);get deleteSubmitting(){return L(this.#p)}set deleteSubmitting(e){j(this.#p,e,!0)}#m=A(M([]));get types(){return L(this.#m)}set types(e){j(this.#m,e,!0)}#h=A(!1);get typesLoaded(){return L(this.#h)}set typesLoaded(e){j(this.#h,e,!0)}#g=null;get filteredRows(){return Dz(this.rows,this.filter)}get schema(){return kz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return Az(e,e&&e.default_base_url)}async fetchTypes(){let e=await ET(`/admin/provider-credentials/types`,{label:`provider credential types`});e.status===`ok`&&(this.types=e.items,this.typesLoaded=!0)}async fetchPage(){this.#g&&this.#g.abort();let e=new AbortController;this.#g=e,this.loading=!0,this.error=``;try{let t=await ET(`/admin/provider-credentials`,{label:`provider credentials`,errorFallback:`Failed to load provider credentials.`,unavailableStatuses:[503,404],options:{signal:e.signal}});if(t.status===`stale`||e.signal.aborted)return;if(t.status===`unavailable`){this.available=!1,this.rows=[];return}if(t.status===`error`){t.result&&(this.available=!0),this.rows=[],this.error=t.error;return}this.available=!0,this.rows=t.items,this.typesLoaded||await this.fetchTypes()}finally{this.#g===e&&(this.#g=null,this.loading=!1)}}#_(e,t){this.formMode=e,this.form=t,this.advancedOpen=!1,this.error=``,this.fieldErrors={},this.focusField=``}openCreate(){this.#_(`create`,Ez()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,Rz(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,Ez())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=Mz(this.form,e));let t=e.primary.find(e=>e.name===`api_keys`);t&&t.required&&this.form.api_keys.length===0&&(this.form.api_keys=[{value:``}])}clearFieldError(e){if(this.fieldErrors[e]===void 0)return;let{[e]:t,...n}=this.fieldErrors;this.fieldErrors=n}addApiKeyRow(){this.form.api_keys.push({value:``}),this.clearFieldError(`api_keys`)}removeApiKeyRow(e){this.form.api_keys.splice(e,1),this.clearFieldError(`api_keys`)}#v(e){let t=vs(e,`Failed to save provider credential.`),n=String(e&&e.error&&typeof e.error==`object`&&e.error.param||``).trim();if(n&&this.#y(n)){this.fieldErrors={...this.fieldErrors,[n]:t},this.error=``,this.#b();return}this.error=t}#y(e){if(e===`name`||e===`type`)return!0;let{primary:t,advanced:n}=this.formFields;return[...t,...n].some(t=>t.name===e)}#b(){let e=Object.keys(this.fieldErrors);if(e.length===0)return;let{primary:t,advanced:n}=this.formFields;n.some(t=>e.includes(t.name))&&(this.advancedOpen=!0);let r=[`type`,`name`,...t.map(e=>e.name),...n.map(e=>e.name)];this.focusField=r.find(t=>e.includes(t))||e[0]}#x(){Vc.fetchModels(),Vc.fetchCategories()}async submitForm(){let e=this.schema,t=Bz(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=Hz(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await DT(`/admin/provider-credentials`,`PUT`,n,{label:`save provider credential`,errorFallback:`Failed to save provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.error=e.error;return}if(e.status===`error`){e.result&&e.result.status!==401?this.#v(e.result.data):this.error=e.error;return}J.success(`Provider "`+n.name+`" saved.`),this.closeForm(),this.#x(),this.fetchPage()}finally{this.formSubmitting=!1}}async performDelete(e){this.deleteSubmitting=!0,this.deletingName=e;try{let t=await DT(`/admin/provider-credentials/`+encodeURIComponent(e),`DELETE`,void 0,{label:`delete provider credential`,errorFallback:`Failed to delete provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Ks.error=t.error;return}if(t.status===`error`){Ks.error=t.error;return}J.success(`Provider "`+e+`" deleted.`),Ks.close(),this.formOpen&&this.form.name===e&&this.closeForm(),this.#x(),this.fetchPage()}finally{this.deleteSubmitting=!1,this.deletingName=``}}requestDelete(e){let t=String(e||``).trim();if(!t||this.deleteSubmitting)return;let n=(this.rows||[]).find(e=>String(e&&e.name||``).trim()===t);n&&n.managed||Ks.open({title:`Delete Provider`,titleId:`providerCredentialDeleteDialogTitle`,inputId:`provider-credential-delete-confirmation`,message:`Type "`+t+`" to permanently delete this provider credential. Requests routed to it will fail until it is reconfigured.`,requiredText:t,confirmLabel:`Delete Provider`,icon:Ao,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},Wz=z(`Config`),Gz=z(` `,1),Kz=z(`
          `),qz=z(`
          NameTypeBase URLAuthModelsEnabledUpdatedActions
          `);function Jz(e,t){D(t,!0);var n=qz(),r=N(n),i=F(N(r));U(i,21,()=>$.filteredRows,e=>e.name,(e,t)=>{var n=Kz(),r=N(n),i=N(r),a=N(i,!0);E(i);var o=F(i,2),s=e=>{B(e,Wz())};H(o,e=>{L(t).managed&&e(s)}),E(r);var c=F(r),l=N(c),u=N(l,!0);E(l),E(c);var d=F(c),f=N(d,!0);E(d);var p=F(d),m=N(p,!0);E(p);var h=F(p),g=N(h,!0);E(h);var _=F(h),v=N(_);let y;var b=N(v,!0);E(v),E(_);var x=F(_),S=N(x,!0);E(x);var C=F(x),w=N(C),T=N(w),ee=e=>{var n=Gz(),r=P(n);{let e=k(()=>`Edit provider `+L(t).name);TT(r,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>$.openEdit(L(t)),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=F(r,2);{let e=k(()=>($.deletingName===L(t).name?`Deleting provider `:`Delete provider `)+L(t).name),n=k(()=>$.deletingName===L(t).name);TT(i,{get label(){return L(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.requestDelete(L(t).name),get disabled(){return L(n)},children:(e,t)=>{K(e,{get icon(){return Lo},class:`table-icon-svg`})},$$slots:{default:!0}})}B(e,n)};H(T,e=>{L(t).managed||e(ee)}),E(w),E(C),E(n),I((e,n,r)=>{V(a,L(t).name),V(u,L(t).type),G(d,`title`,L(t).base_url||``),V(f,L(t).base_url||`—`),V(m,e),V(g,n),y=W(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":L(t).enabled,"auth-key-status-inactive":!L(t).enabled}),V(b,L(t).enabled?`Enabled`:`Disabled`),V(S,r)},[()=>Nz(L(t)),()=>Pz(L(t)),()=>_s.formatTimestamp(L(t).updated_at)]),B(e,n)}),E(i),E(r),E(n),B(e,n),O()}var Yz=z(``),Xz=z(`
          `),Zz=z(`
          `,1),Qz=z(``),$z=z(``),eB=z(``),tB=z(``),nB=z(``),rB=z(` `),iB=z(` `),aB=z(`
          `);function oB(e,t){D(t,!0);let n=k(()=>`provider-credential-`+t.field.name),r=k(()=>$.fieldErrors[t.field.name]||``),i=k(()=>L(r)?L(n)+`-error`:t.field.hint?L(n)+`-hint`:void 0),a=k(()=>{let e=String($.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){$.clearFieldError(t.field.name)}var s=aB(),c=N(s),l=N(c),u=F(l),d=e=>{B(e,Yz())};H(u,e=>{t.field.required&&e(d)}),E(c);var f=F(c,2),p=e=>{var t=Zz(),a=P(t);U(a,21,()=>$.form.api_keys,ai,(e,t,a)=>{var s=Xz(),c=N(s);ta(c),G(c,`aria-label`,`API key `+(a+1)),TT(F(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeApiKeyRow(a),children:(e,t)=>{K(e,{get icon(){return Ao},class:`table-icon-svg`})},$$slots:{default:!0}}),E(s),I(()=>{G(c,`id`,a===0?L(n):L(n)+`-`+a),G(c,`aria-invalid`,L(r)?`true`:void 0),G(c,`aria-describedby`,a===0?L(i):void 0)}),R(`input`,c,o),ua(c,()=>L(t).value,e=>L(t).value=e),B(e,s)}),E(a);var s=F(a,2),c=N(s);K(N(c),{get icon(){return po},class:`form-action-icon`}),He(2),E(c),E(s),I(()=>G(c,`id`,$.form.api_keys.length===0?L(n):void 0)),R(`click`,c,()=>$.addApiKeyRow()),B(e,t)},m=e=>{var s=$z(),c=N(s);c.value=c.__value=``,U(F(c),16,()=>L(a),e=>e,(e,t)=>{var n=Qz(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(s),I(()=>{G(s,`id`,L(n)),G(s,`aria-invalid`,L(r)?`true`:void 0),G(s,`aria-describedby`,L(i))}),R(`change`,s,o),Wi(s,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),B(e,s)},h=e=>{var a=eB();ta(a),I(()=>{G(a,`id`,L(n)),G(a,`aria-invalid`,L(r)?`true`:void 0),G(a,`aria-describedby`,L(i))}),R(`change`,a,o),da(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),B(e,a)},g=e=>{var a=tB();dt(a),I(()=>{G(a,`id`,L(n)),G(a,`placeholder`,t.field.placeholder||``),G(a,`aria-invalid`,L(r)?`true`:void 0),G(a,`aria-describedby`,L(i))}),R(`input`,a,o),ua(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),B(e,a)},_=e=>{var a=nB();ta(a),I(()=>{G(a,`id`,L(n)),G(a,`placeholder`,t.field.placeholder||``),G(a,`aria-invalid`,L(r)?`true`:void 0),G(a,`aria-describedby`,L(i))}),R(`input`,a,o),ua(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),B(e,a)};H(f,e=>{t.field.control===`keys`?e(p):t.field.control===`select`?e(m,1):t.field.control===`checkbox`?e(h,2):t.field.control===`textarea`?e(g,3):e(_,-1)});var v=F(f,2),y=e=>{var t=rB(),i=N(t,!0);E(t),I(()=>{G(t,`id`,L(n)+`-error`),V(i,L(r))}),B(e,t)},b=e=>{var r=iB(),i=N(r,!0);E(r),I(()=>{G(r,`id`,L(n)+`-hint`),V(i,t.field.hint)}),B(e,r)};H(v,e=>{L(r)?e(y):t.field.hint&&e(b,1)}),E(s),I(()=>{G(c,`for`,L(n)),V(l,`${t.field.label??``} `)}),B(e,s),O()}Vr([`input`,`click`,`change`]);var sB=z(`

          The name is the stable identity used for routing and cannot change once created.

          `),cB=z(``),lB=z(` `),uB=z(`Determines which fields the gateway uses to build requests.`),dB=z(` `),fB=z(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),pB=z(`Immutable once created.`),mB=z(`

          Pick a type to configure its credentials — each provider type asks for different settings.

          `),hB=z(`
          Advanced settings
          `),gB=z(`
          `,1);function _B(e,t){D(t,!0);let n=k(()=>Oz($.types,$.form.type)),r=k(()=>$.formFields),i=k(()=>$.fieldErrors.name||``),a=k(()=>$.fieldErrors.type||``);function o(){$.selectType(),$.formMode===`create`&&($.form.name=Lz($.rows,$.form.type))}kn(()=>{let e=$.focusField;if(!e)return;$.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{B(e,sB())},s=k(()=>$.formMode===`edit`?`Edit Provider`:`Add Provider`);kE(e,{get open(){return $.formOpen},get title(){return L(s)},ariaLabel:`Provider credential editor`,get error(){return $.error},get submitting(){return $.formSubmitting},novalidate:!0,onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var s=gB(),c=P(s),l=F(N(c),2),u=N(l);u.value=u.__value=``,U(F(u),16,()=>L(n),e=>e,(e,t)=>{var n=cB(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(l);var d=F(l,2),f=e=>{var t=lB(),n=N(t,!0);E(t),I(()=>V(n,L(a))),B(e,t)},p=e=>{B(e,uB())};H(d,e=>{L(a)?e(f):e(p,-1)}),E(c);var m=F(c,2),h=F(N(m),2);ta(h);var g=F(h,2),_=e=>{var t=dB(),n=N(t,!0);E(t),I(()=>V(n,L(i))),B(e,t)},v=e=>{B(e,fB())},y=e=>{B(e,pB())};H(g,e=>{L(i)?e(_):$.formMode===`create`?e(v,1):e(y,-1)}),E(m);var b=F(m,2),x=e=>{B(e,mB())};H(b,e=>{$.form.type||e(x)});var S=F(b,2);U(S,17,()=>L(r).primary,e=>e.name,(e,t)=>{oB(e,{get field(){return L(t)}})});var C=F(S,2),w=N(C);kA(N(w),{get enabled(){return $.form.enabled},label:`provider`,onclick:()=>$.form.enabled=!$.form.enabled}),E(w),E(C);var T=F(C,2),ee=e=>{var t=hB(),n=N(t),i=N(n),a=F(N(i),2),o=N(a,!0);E(a),E(i),E(n);var s=F(n,2);U(s,21,()=>L(r).advanced,e=>e.name,(e,t)=>{oB(e,{get field(){return L(t)}})}),E(s),E(t),I(e=>{t.open=$.advancedOpen,V(o,e)},[()=>L(r).advanced.map(e=>e.label).join(`, `)]),Br(`toggle`,t,e=>$.advancedOpen=e.currentTarget.open),B(e,t)};H(T,e=>{L(r).advanced.length>0&&e(ee)}),I(()=>{l.disabled=$.formMode===`edit`,G(l,`aria-invalid`,L(a)?`true`:void 0),G(l,`aria-describedby`,L(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=$.formMode===`edit`,G(h,`aria-invalid`,L(i)?`true`:void 0),G(h,`aria-describedby`,L(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),R(`change`,l,o),Wi(l,()=>$.form.type,e=>$.form.type=e),R(`input`,h,()=>$.clearFieldError(`name`)),ua(h,()=>$.form.name,e=>$.form.name=e),B(e,s)},$$slots:{headerHint:!0,default:!0}})}O()}Vr([`change`,`input`]);var vB=z(`

          Providers

          `),yB=z(``),bB=z(`
          Provider credential management is unavailable.
          `),xB=z(``),SB=z(`
          `),CB=z(`

          No dashboard-managed providers yet. Add one here, or declare providers in config.yaml / environment variables.

          `),wB=z(`

          No providers match your filter.

          `),TB=z(`
          `);function EB(e,t){D(t,!0),kn(()=>{q.refreshTick,Yo.page===`providers-config`&&$.fetchPage()});var n=TB(),r=N(n),i=N(r);tC(N(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{B(e,vB())},help:e=>{He(),B(e,Xr(`Configure LLM provider credentials here instead of setting API keys as + environment variables. Providers declared in config.yaml or env vars + are read-only (Config badge) and cannot be edited or deleted from the + dashboard. Keys are masked after saving.`))},$$slots:{title:!0,help:!0}}),E(i);var a=F(i,2),o=N(a),s=e=>{var t=yB();K(N(t),{get icon(){return po},class:`form-action-icon`}),He(2),E(t),I(()=>t.disabled=$.formSubmitting),R(`click`,t,()=>$.openCreate()),B(e,t)};H(o,e=>{$.available&&!q.needsAuth&&e(s)}),E(a),E(r);var c=F(r,2),l=e=>{B(e,bB())};H(c,e=>{!$.available&&!q.needsAuth&&e(l)});var u=F(c,2),d=e=>{var t=xB(),n=N(t,!0);E(t),I(()=>V(n,$.error)),B(e,t)};H(u,e=>{$.error&&!q.needsAuth&&!$.formOpen&&e(d)});var f=F(u,2),p=e=>{CT(e,{label:`Loading providers...`})};H(f,e=>{$.loading&&!q.needsAuth&&e(p)});var m=F(f,2),h=e=>{var t=SB(),n=N(t);Ow(N(n),{id:`provider-credential-filter`,placeholder:`Filter by name, type, or base URL...`,label:`Filter providers by name, type, or base URL`,get value(){return $.filter},set value(e){$.filter=e}}),E(n),E(t),B(e,t)};H(m,e=>{($.rows.length>0||$.filter)&&$.available&&!q.needsAuth&&e(h)});var g=F(m,2);_B(g,{});var _=F(g,2),v=e=>{Jz(e,{})};H(_,e=>{$.filteredRows.length>0&&$.available&&!q.needsAuth&&e(v)});var y=F(_,2),b=e=>{B(e,CB())};H(y,e=>{$.rows.length===0&&!$.filter&&!$.loading&&!q.needsAuth&&!$.error&&$.available&&e(b)});var x=F(y,2),S=e=>{B(e,wB())};H(x,e=>{$.rows.length>0&&$.filteredRows.length===0&&$.filter&&!$.loading&&!q.needsAuth&&$.available&&e(S)}),E(n),B(e,n),O()}Vr([`click`]);function DB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function OB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function kB(e){let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t;for(let e of n.split(`/`)){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function AB(e){if(kB(e))return``;let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t,r=[];for(let e of n.split(`/`)){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function jB(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=kB(t.user_path);if(r)return{error:r};let i=AB(t.user_path),a=OB(t.labels),o={name:n,description:String(t.description||``).trim()||void 0,user_path:i||void 0,labels:a.length?a:void 0,dashboard_access:t.dashboard_access?!0:void 0};return t.expires_at&&(o.expires_at=t.expires_at+`T23:59:59Z`),{payload:o}}function MB(e,t=Date.now()){let n=e&&e.expires_at;if(!n)return!1;let r=Date.parse(n);return Number.isFinite(r)&&r<=t}function NB(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function PB(e,t=Date.now()){return!e||e.active===!1||NB(e)?!1:!MB(e,t)}function FB(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function IB(e,t={}){let{query:n=``,showInactive:r=!1,now:i=Date.now()}=t,a=String(n||``).trim().toLowerCase();return(Array.isArray(e)?e:[]).filter(e=>!r&&!PB(e,i)?!1:!a||FB(e).includes(a))}function LB(e,t){return NB(e)?2:+!PB(e,t)}function RB(e){let t=e&&e.expires_at;if(!t)return 1/0;let n=Date.parse(t);return Number.isFinite(n)?n:1/0}function zB(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function BB(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=LB(e,t),i=LB(n,t);if(r!==i)return r-i;let[a,o]=r===2?[zB(e),zB(n)]:[RB(e),RB(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function VB(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!PB(n,t),0)}function HB(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var UB=new class{#e=A(M([]));get keys(){return L(this.#e)}set keys(e){j(this.#e,e,!0)}#t=A(!0);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get error(){return L(this.#r)}set error(e){j(this.#r,e,!0)}#i=A(``);get filter(){return L(this.#i)}set filter(e){j(this.#i,e,!0)}#a=A(!1);get showInactive(){return L(this.#a)}set showInactive(e){j(this.#a,e,!0)}#o=k(()=>BB(IB(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return L(this.#o)}set visibleKeys(e){j(this.#o,e)}#s=k(()=>VB(this.keys));get inactiveCount(){return L(this.#s)}set inactiveCount(e){j(this.#s,e)}#c=A(!1);get formOpen(){return L(this.#c)}set formOpen(e){j(this.#c,e,!0)}#l=A(!1);get formSubmitting(){return L(this.#l)}set formSubmitting(e){j(this.#l,e,!0)}#u=A(``);get issuedValue(){return L(this.#u)}set issuedValue(e){j(this.#u,e,!0)}#d=A(``);get deactivatingID(){return L(this.#d)}set deactivatingID(e){j(this.#d,e,!0)}#f=A(``);get dashboardAccessID(){return L(this.#f)}set dashboardAccessID(e){j(this.#f,e,!0)}#p=A(M(DB()));get form(){return L(this.#p)}set form(e){j(this.#p,e,!0)}#m=A(M(HB()));get labelsEditor(){return L(this.#m)}set labelsEditor(e){j(this.#m,e,!0)}copyState=EM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await ET(`/admin/auth-keys`,{label:`auth keys`,errorFallback:`Unable to load API keys.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.keys=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.error=e.error;return}this.available=!0,this.keys=e.items}finally{this.loading=!1}}openForm(){this.formSubmitting||this.formOpen||(this.formOpen=!0,this.error=``,this.issuedValue||(this.copyState.reset(),this.form=DB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=DB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=DB()}async submitForm(){let e=jB(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await DT(`/admin/auth-keys`,`POST`,e.payload,{label:`create API key`,errorFallback:`Failed to create API key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error,t.result&&t.result.status!==401&&console.error(`Failed to create API key:`,t.result.status,this.error);return}let n=t.result.data||{};this.issuedValue=n.value||``,this.formOpen=!0,this.copyState.reset(),this.form=DB(),this.fetchKeys()}finally{this.formSubmitting=!1}}openLabelsEditor(e){!e||this.labelsEditor.submitting||(this.labelsEditor={open:!0,id:e.id,name:e.name||``,value:(e.labels||[]).join(`, `),submitting:!1,error:``})}closeLabelsEditor(){!this.labelsEditor.open||this.labelsEditor.submitting||(this.labelsEditor=HB())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:OB(e.value)};try{let n=await DT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/labels`,`PUT`,t,{label:`update API key labels`,errorFallback:`Failed to update labels.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,e.error=n.error;return}if(n.status===`error`){e.error=n.error,n.result&&n.result.status!==401&&console.error(`Failed to update auth key labels:`,n.result.status,e.error);return}J.success(`Labels updated for key "`+e.name+`".`),e.submitting=!1,this.closeLabelsEditor(),this.fetchKeys()}finally{e.submitting=!1}}async toggleDashboardAccess(e){if(!e||!e.active||this.dashboardAccessID)return;let t=!e.dashboard_access;this.dashboardAccessID=e.id;try{let n=await DT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/dashboard-access`,`PUT`,{dashboard_access:t},{label:`update API key dashboard access`,errorFallback:`Failed to update dashboard access.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,J.error(n.error);return}if(n.status===`error`){n.result&&n.result.status!==401&&console.error(`Failed to update auth key dashboard access:`,n.result.status,n.error),J.error(n.error);return}J.success(`Dashboard access `+(t?`granted to`:`revoked for`)+` key "`+e.name+`".`),this.fetchKeys()}finally{this.dashboardAccessID=``}}async deactivateKey(e){if(!(!e||!e.active)&&window.confirm(`Deactivate key "`+e.name+`"? This cannot be undone.`)){this.deactivatingID=e.id;try{let t=await DT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/deactivate`,`POST`,void 0,{label:`deactivate API key`,errorFallback:`Failed to deactivate key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,J.error(t.error);return}if(t.status===`error`){t.result&&t.result.status!==401&&console.error(`Failed to deactivate auth key:`,t.result.status,t.error),J.error(t.error);return}J.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},WB=z(``),GB=z(`

          Store this key securely — it won’t be shown again.

          `),KB=z(``),qB=z(``),JB=z(``),YB=z(``),XB=z(`
          `);function ZB(e,t){D(t,!0);{let t=k(()=>UB.issuedValue?``:UB.error),n=k(()=>UB.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=k(()=>UB.issuedValue?Ba:po);kE(e,{get open(){return UB.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return L(t)},get submitting(){return UB.formSubmitting},get submitLabel(){return L(n)},submittingLabel:`Creating...`,get submitIcon(){return L(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>UB.closeForm(),onsubmit:()=>UB.issuedValue?UB.dismissIssuedKey():UB.submitForm(),children:(e,t)=>{var n=Zr(),r=P(n),i=e=>{var t=GB(),n=F(N(t),2),r=N(n),i=N(r,!0);E(r),lL(F(r,2),{get state(){return UB.copyState},onclick:()=>UB.copyIssuedValue()}),E(n);var a=F(n,2),o=e=>{B(e,WB())};H(a,e=>{UB.copyState.error&&e(o)}),E(t),I(()=>V(i,UB.issuedValue)),B(e,t)},a=e=>{var t=XB(),n=N(t),r=N(n),i=F(N(r),2);ta(i),E(r);var a=F(r,2),o=F(N(a),2);ta(o),E(a),E(n);var s=F(n,2),c=N(s);tC(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{B(e,KB())},help:e=>{He(),B(e,Xr(`When set, this key overrides the configured user path request + header for audit logging and downstream request context.`))},$$slots:{title:!0,help:!0}});var l=F(c,2);ta(l),E(s);var u=F(s,2),d=N(u);tC(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{B(e,qB())},help:e=>{He(),B(e,Xr(`Every request authenticated with this key gets these labels, in + addition to any labels from tagging headers. Labels show up in + usage analytics, the request log, and audit logs.`))},$$slots:{title:!0,help:!0}});var f=F(d,2);ta(f),E(u);var p=F(u,2),m=N(p);tC(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{B(e,JB())},help:e=>{He(),B(e,Xr(`When off, this key is denied the dashboard and every /admin API + endpoint. Model endpoints and GET /v1/usage stay available to + the key. The master key always has dashboard access.`))},$$slots:{title:!0,help:!0}});var h=F(m,2),g=N(h);ta(g),He(2),E(h),E(p),jE(F(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=YB();dt(n),ua(n,()=>UB.form.description,e=>UB.form.description=e),B(e,n)},$$slots:{default:!0}}),E(t),ua(i,()=>UB.form.name,e=>UB.form.name=e),ua(o,()=>UB.form.expires_at,e=>UB.form.expires_at=e),ua(l,()=>UB.form.user_path,e=>UB.form.user_path=e),ua(f,()=>UB.form.labels,e=>UB.form.labels=e),da(g,()=>UB.form.dashboard_access,e=>UB.form.dashboard_access=e),B(e,t)};H(r,e=>{UB.issuedValue?e(i):e(a,-1)}),B(e,n)},$$slots:{default:!0}})}O()}var QB=z(`

          `),$B=z(`

          Applies to new requests made with this key. Leave empty to remove all labels.

          `,1);function eV(e,t){D(t,!0),kE(e,{get open(){return UB.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return UB.labelsEditor.error},get submitting(){return UB.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>UB.closeLabelsEditor(),onsubmit:()=>UB.submitLabelsEditor(),headerHint:e=>{var t=QB(),n=N(t,!0);E(t),I(()=>V(n,UB.labelsEditor.name)),B(e,t)},children:(e,t)=>{jE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=$B(),r=P(n);ta(r),He(2),ua(r,()=>UB.labelsEditor.value,e=>UB.labelsEditor.value=e),B(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),O()}var tV=z(` `),nV=z(`
          `),rV=z(``),iV=z(`Expired`),aV=z(` `),oV=z(` `,1),sV=z(`Deactivated`),cV=z(`
          `),lV=z(`
          NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
          `);function uV(e,t){D(t,!0);var n=lV(),r=N(n),i=N(r),a=N(i),o=F(N(a),5),s=N(o);K(F(N(s)),{get icon(){return eo},width:`13`,height:`13`}),E(s),E(o),He(3),E(a),E(i);var c=F(i);U(c,21,()=>UB.visibleKeys,e=>e.id,(e,t)=>{var n=cV();let r;var i=N(n),a=N(i,!0);E(i);var o=F(i),s=N(o,!0);E(o);var c=F(o),l=N(c,!0);E(c);var u=F(c),d=N(u),f=e=>{var n=nV();U(n,20,()=>L(t).labels||[],e=>e,(e,t)=>{var n=tV(),r=N(n,!0);E(n),I(e=>{Vi(n,e),V(r,t)},[()=>Zy(t)]),B(e,n)}),E(n),B(e,n)},p=e=>{B(e,rV())};H(d,e=>{(L(t).labels||[]).length>0?e(f):e(p,-1)}),E(u);var m=F(u),h=N(m),g=N(h,!0);E(h),E(m);var _=F(m),v=N(_);let y;var b=N(v,!0);E(v),E(_);var x=F(_),S=N(x),C=e=>{var n=aV(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=e=>{B(e,iV())},s=k(()=>MB(L(t)));H(a,e=>{L(s)&&e(o)}),E(n),I(e=>V(i,e),[()=>xc(L(t).expires_at)]),B(e,n)},w=e=>{B(e,Xr(`—`))};H(S,e=>{L(t).expires_at?e(C):e(w,-1)}),E(x);var T=F(x),ee=N(T,!0);E(T);var te=F(T),ne=N(te),re=N(ne),ie=e=>{var n=oV(),r=P(n);{let e=k(()=>(L(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+L(t).name),n=k(()=>!!UB.dashboardAccessID);TT(r,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>UB.toggleDashboardAccess(L(t)),get disabled(){return L(n)},children:(e,n)=>{{let n=k(()=>L(t).dashboard_access?wo:Co);K(e,{get icon(){return L(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=F(r,2);{let e=k(()=>`Edit labels for API key `+L(t).name);TT(i,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>UB.openLabelsEditor(L(t)),children:(e,t)=>{K(e,{get icon(){return uo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=F(i,2);{let e=k(()=>(UB.deactivatingID===L(t).id?`Deactivating API key `:`Deactivate API key `)+L(t).name),n=k(()=>UB.deactivatingID===L(t).id);TT(a,{get label(){return L(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>UB.deactivateKey(L(t)),get disabled(){return L(n)},children:(e,t)=>{K(e,{get icon(){return mo},class:`table-icon-svg`})},$$slots:{default:!0}})}B(e,n)},ae=e=>{var n=sV();I(e=>G(n,`title`,e),[()=>L(t).deactivated_at?`Deactivated on `+Sc(L(t).deactivated_at):`Deactivated`]),B(e,n)},oe=k(()=>NB(L(t)));H(re,e=>{L(t).active?e(ie):L(oe)&&e(ae,1)}),E(ne),E(te),E(n),I((e,i,o)=>{r=W(n,1,`svelte-nf0ldb`,null,r,e),V(a,L(t).name),V(s,L(t).description||`—`),V(l,L(t).user_path||`—`),V(g,L(t).redacted_value),y=W(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":L(t).dashboard_access,"auth-key-status-inactive":!L(t).dashboard_access}),V(b,L(t).dashboard_access?`Allowed`:`Denied`),G(x,`title`,i),V(ee,o)},[()=>({"auth-key-row-deactivated":NB(L(t))}),()=>L(t).expires_at?Sc(L(t).expires_at):``,()=>_s.formatTimestamp(L(t).created_at)]),B(e,n)}),E(c),E(r),E(n),B(e,n),O()}var dV=z(``),fV=z(`
          API key management is unavailable.
          `),pV=z(``),mV=z(`

          Managed API keys authenticate requests to the gateway. Deactivation is + permanent — create a new key if access needs to be restored.

          `),hV=z(`
          `),gV=z(`
          `),_V=z(`

          `),vV=z(`

          No API keys yet. Issue a key to get started.

          `),yV=z(`
          `);function bV(e,t){D(t,!0),kn(()=>{q.refreshTick,Yo.page===`auth-keys`&&UB.fetchKeys()});var n=yV(),r=N(n),i=F(N(r),2),a=N(i),o=e=>{var t=dV();K(N(t),{get icon(){return po},class:`table-icon-svg`}),He(2),E(t),I(()=>t.disabled=UB.formSubmitting),R(`click`,t,()=>{UB.formSubmitting||UB.openForm()}),B(e,t)};H(a,e=>{UB.available&&!q.authError&&e(o)}),E(i),E(r);var s=F(r,2),c=e=>{B(e,fV())};H(s,e=>{!UB.available&&!q.authError&&e(c)});var l=F(s,2),u=e=>{var t=pV(),n=N(t,!0);E(t),I(()=>V(n,UB.error)),B(e,t)};H(l,e=>{UB.error&&!q.authError&&!UB.formOpen&&e(u)});var d=F(l,2),f=e=>{B(e,mV())};H(d,e=>{UB.available&&!q.authError&&e(f)});var p=F(d,2);ZB(p,{});var m=F(p,2);eV(m,{});var h=F(m,2),g=e=>{var t=hV();AS(N(t),{size:18,label:`Loading API keys`}),E(t),B(e,t)};H(h,e=>{UB.loading&&UB.keys.length===0&&e(g)});var _=F(h,2),v=e=>{var t=gV(),n=N(t);Ow(N(n),{placeholder:`Filter by name, description, user path, label, or token...`,label:`Filter API keys by name, description, user path, label, or token`,get value(){return UB.filter},set value(e){UB.filter=e}}),E(n);var r=F(n,2),i=N(r),a=N(i);ta(a);var o=F(a,2),s=F(N(o)),c=e=>{var t=Xr();I(()=>V(t,`(${UB.inactiveCount??``})`)),B(e,t)};H(s,e=>{UB.inactiveCount>0&&e(c)}),E(o),E(i),E(r),E(t),da(a,()=>UB.showInactive,e=>UB.showInactive=e),B(e,t)};H(_,e=>{UB.keys.length>0&&UB.available&&e(v)});var y=F(_,2),b=e=>{uV(e,{})};H(y,e=>{UB.visibleKeys.length>0&&UB.available&&e(b)});var x=F(y,2),S=e=>{var t=_V(),n=N(t);E(t),I(()=>V(n,`No API keys match the current filter.${UB.inactiveCount>0&&!UB.showInactive?` `+UB.inactiveCount+` inactive `+(UB.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),B(e,t)};H(x,e=>{UB.keys.length>0&&UB.visibleKeys.length===0&&UB.available&&e(S)});var C=F(x,2),w=e=>{B(e,vV())};H(C,e=>{UB.keys.length===0&&!UB.loading&&!q.authError&&!UB.error&&UB.available&&e(w)}),E(n),B(e,n),O()}Vr([`click`]);var xV=z(`

          Timezone

          `),SV=z(``),CV=z(``),wV=z(`
          `,1);function TV(e,t){D(t,!0);function n(){_s.saveOverride(),q.refresh()}function r(){_s.clearOverride(),q.refresh()}var i=wV(),a=P(i);tC(N(a),{copyId:`timezone-help-copy`,label:`timezone help`,text:`Day-based analytics, charts, and date filters use your effective timezone. Usage and audit logs keep UTC in the hover title while rendering row timestamps in your effective timezone.`,title:e=>{B(e,xV())},$$slots:{title:!0}}),E(a);var o=F(a,2),s=N(o),c=F(N(s),2),l=N(c),u=N(l);E(l),l.value=l.__value=``,U(F(l),17,()=>_s.options,e=>e.value,(e,t)=>{var n=SV(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(c),E(s),E(o);var d=F(o,2),f=N(d),p=e=>{var t=CV();R(`click`,t,r),B(e,t)};H(f,e=>{_s.override&&e(p)}),E(d),I(e=>V(u,`Automatic (${e??``})`),[()=>_s.detectedTimeZoneLabel()]),Br(`focus`,c,()=>_s.ensureOptions()),R(`change`,c,n),Wi(c,()=>_s.override,e=>_s.override=e),B(e,i),O()}Vr([`change`,`click`]);var EV=z(``),DV=z(`

          Failover

          `,1);function OV(e,t){D(t,!0);let n=k(()=>Z.failoverSaving||Z.failoverGenerating||Z.failoverDraftSaving||!Z.failoverAvailable||!Z.failoverEnabled());var r=DV(),i=P(r),a=F(N(i),2),o=N(a),s=N(o);K(s,{get icon(){return Fo},class:`form-action-icon`});var c=F(s,2),l=N(c,!0);E(c),E(o);var u=F(o,2);K(N(u),{get icon(){return Ao},class:`form-action-icon`}),He(2),E(u),E(a),E(i);var d=F(i,2),f=N(d),p=e=>{var t=EV(),n=N(t,!0);E(t),I(()=>V(n,Z.failoverError)),B(e,t)};H(f,e=>{Z.failoverError&&e(p)}),E(d),xj(F(d,2),{}),I(()=>{o.disabled=L(n),V(l,Z.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=L(n)}),R(`click`,o,()=>Z.generateFailoverRules()),R(`click`,u,()=>Z.openFailoverResetDialog()),B(e,r),O()}Vr([`click`]);function kV(){return{daily_reset_hour:0,daily_reset_minute:0,weekly_reset_weekday:1,weekly_reset_hour:0,weekly_reset_minute:0,monthly_reset_day:1,monthly_reset_hour:0,monthly_reset_minute:0}}function AV(e,t){let n=t||{},r=(e,t)=>{if(e===``)return t;let n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)?Math.trunc(n):t},i=(e,t)=>r(n[e],t),a=(t,n)=>e?r(e[t],n):n;return{daily_reset_hour:a(`daily_reset_hour`,i(`daily_reset_hour`,0)),daily_reset_minute:a(`daily_reset_minute`,i(`daily_reset_minute`,0)),weekly_reset_weekday:a(`weekly_reset_weekday`,i(`weekly_reset_weekday`,1)),weekly_reset_hour:a(`weekly_reset_hour`,i(`weekly_reset_hour`,0)),weekly_reset_minute:a(`weekly_reset_minute`,i(`weekly_reset_minute`,0)),monthly_reset_day:a(`monthly_reset_day`,i(`monthly_reset_day`,1)),monthly_reset_hour:a(`monthly_reset_hour`,i(`monthly_reset_hour`,0)),monthly_reset_minute:a(`monthly_reset_minute`,i(`monthly_reset_minute`,0))}}function jV(){return[{value:0,label:`Sunday`},{value:1,label:`Monday`},{value:2,label:`Tuesday`},{value:3,label:`Wednesday`},{value:4,label:`Thursday`},{value:5,label:`Friday`},{value:6,label:`Saturday`}]}var MV=z(`

          Budget Resets

          `),NV=z(``),PV=z(`

          If the selected day does not exist in a month, the reset runs on + the last day of that month.

          `),FV=z(``),IV=z(``),LV=z(`
          Monthly
          Weekly
          Daily
          `,1);function RV(e,t){D(t,!0);let n=A(M(kV())),r=A(!1),i=A(!1),a=A(``),o=A(!1),s=k(()=>Os.budgetsVisible());async function c(){if(await Os.ensureLoaded(),!Os.budgetsVisible()){j(a,``);return}j(r,!0),j(a,``);try{let e=await Cs(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){j(a,`Unable to load budget settings.`);return}j(n,AV(e.data,L(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),j(a,`Unable to load budget settings.`)}finally{j(r,!1)}}async function l(){if(!L(i)){j(i,!0);try{let e=await ws(`/admin/budgets/settings`,`PUT`,AV(L(n),L(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){J.error(`Unable to save budget settings.`);return}j(n,AV(e.data,L(n)),!0),j(a,``),J.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),J.error(`Unable to save budget settings.`)}finally{j(i,!1)}}}kn(()=>{q.refreshTick,c()});var u=Zr(),d=P(u),f=e=>{var t=LV(),s=P(t),c=N(s);tC(c,{copyId:`budget-settings-help-copy`,label:`budget help`,text:`Budget reset anchors are stored in the database and evaluated in UTC. Hourly budgets reset at the top of each hour.`,title:e=>{B(e,MV())},$$slots:{title:!0}});var u=F(c,2),d=N(u),f=F(N(d),2),p=N(f);tC(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return L(o)},set open(e){j(o,e,!0)},title:e=>{B(e,NV())},$$slots:{title:!0}});var m=F(p,2);ta(m),E(f);var h=F(f,2),g=F(N(h),2);ta(g),E(h);var _=F(h,2),v=F(N(_),2);ta(v),E(_);var y=F(_,2),b=N(y),x=e=>{B(e,PV())};H(b,e=>{L(o)&&e(x)}),E(y),E(d);var S=F(d,2),C=F(N(S),2),w=F(N(C),2);U(w,21,jV,e=>e.value,(e,t)=>{var n=FV(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(w),E(C);var T=F(C,2),ee=F(N(T),2);ta(ee),E(T);var te=F(T,2),ne=F(N(te),2);ta(ne),E(te),He(2),E(S);var re=F(S,2),ie=F(N(re),4),ae=F(N(ie),2);ta(ae),E(ie);var oe=F(ie,2),se=F(N(oe),2);ta(se),E(oe),He(2),E(re),E(u);var ce=F(u,2),le=N(ce);K(N(le),{get icon(){return _o},class:`form-action-icon`}),He(2),E(le);var ue=F(le,2),de=e=>{AS(e,{size:16,label:`Loading budget settings`})};H(ue,e=>{L(r)&&e(de)}),E(ce),E(s);var fe=F(s,2),pe=N(fe),me=e=>{var t=IV(),n=N(t,!0);E(t),I(()=>V(n,L(a))),B(e,t)};H(pe,e=>{L(a)&&e(me)}),E(fe),I(()=>{le.disabled=L(i)||L(r),G(le,`aria-busy`,L(i)?`true`:`false`)}),ua(m,()=>L(n).monthly_reset_day,e=>L(n).monthly_reset_day=e),ua(g,()=>L(n).monthly_reset_hour,e=>L(n).monthly_reset_hour=e),ua(v,()=>L(n).monthly_reset_minute,e=>L(n).monthly_reset_minute=e),Wi(w,()=>L(n).weekly_reset_weekday,e=>L(n).weekly_reset_weekday=e),ua(ee,()=>L(n).weekly_reset_hour,e=>L(n).weekly_reset_hour=e),ua(ne,()=>L(n).weekly_reset_minute,e=>L(n).weekly_reset_minute=e),ua(ae,()=>L(n).daily_reset_hour,e=>L(n).daily_reset_hour=e),ua(se,()=>L(n).daily_reset_minute,e=>L(n).daily_reset_minute=e),R(`click`,le,l),B(e,t)};H(d,e=>{L(s)&&e(f)}),B(e,u),O()}Vr([`click`]);var zV=z(`

          Reset All Budgets

          Start new budget periods for every configured budget without changing + the limits.

          `);function BV(e,t){D(t,!0);var n=Zr(),r=P(n),i=e=>{var t=zV(),n=F(N(t),2),r=N(n);K(N(r),{get icon(){return go},class:`form-action-icon`}),He(2),E(r),E(n),E(t),I(()=>r.disabled=Y.resetAllLoading),R(`click`,r,()=>Y.openResetDialog()),B(e,t)},a=k(()=>Os.budgetsVisible());H(r,e=>{L(a)&&e(i)}),B(e,n),O()}Vr([`click`]);function VV(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function HV(e){return(e&&Array.isArray(e.headers)?e.headers:[]).map(e=>({header:typeof e.header==`string`?e.header:``,prefix:typeof e.prefix==`string`?e.prefix:``,do_not_pass:e.do_not_pass===!0,delimiter:typeof e.delimiter==`string`&&e.delimiter!==`,`?e.delimiter:``,managed:e.managed===!0}))}function UV(e){return{headers:(Array.isArray(e)?e:[]).filter(e=>!e.managed&&e.header.trim()!==``).map(e=>({header:e.header.trim(),prefix:e.prefix,do_not_pass:e.do_not_pass,delimiter:e.delimiter}))}}function WV(e){return e&&e.error&&e.error.message?e.error.message:``}var GV=z(`

          Tagging based on headers

          `),KV=z(`config`),qV=z(``),JV=z(`
          `),YV=z(`

          No tagging headers configured. Requests are not labelled.

          `),XV=z(``),ZV=z(`
          `,1);function QV(e,t){D(t,!0);let n=A(M([])),r=A(!0),i=A(!1),a=A(!1),o=A(``);function s(){L(n).push(VV())}function c(e){let t=L(n)[e];!t||t.managed||L(n).splice(e,1)}async function l(){j(i,!0),j(o,``);try{let e=await Cs(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){j(o,`Unable to load tagging settings.`);return}j(n,HV(e.data),!0),j(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),j(o,`Unable to load tagging settings.`)}finally{j(i,!1)}}async function u(){if(!(L(a)||!L(r))){j(a,!0);try{let e=await ws(`/admin/tagging/settings`,`PUT`,UV(L(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){J.error(e.status!==401&&WV(e.data)||`Unable to save tagging settings.`);return}j(n,HV(e.data),!0),j(r,e.data&&e.data.editable!==!1,!0),j(o,``),J.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),J.error(`Unable to save tagging settings.`)}finally{j(a,!1)}}}kn(()=>{q.refreshTick,l()});var d=ZV(),f=P(d),p=N(f);tC(p,{copyId:`tagging-settings-help-copy`,label:`tagging help`,text:`Each request is labelled from the listed headers; labels land in usage tracking and audit logs. A header value can carry several labels split by the delimiter (default: comma). The prefix is trimmed from each label only — the header itself is forwarded unchanged unless 'Do not pass' is checked. Rows marked CONFIG come from config.yaml or TAGGING_HEADER_* env vars and are read-only here.`,title:e=>{B(e,GV())},$$slots:{title:!0}});var m=F(p,2),h=N(m);U(h,17,()=>L(n),ai,(e,t,n)=>{var i=JV(),a=N(i),o=N(a);G(o,`for`,`tagging-header-`+n);var s=F(o,2);ta(s),G(s,`id`,`tagging-header-`+n),E(a);var l=F(a,2),u=N(l);G(u,`for`,`tagging-prefix-`+n);var d=F(u,2);ta(d),G(d,`id`,`tagging-prefix-`+n),E(l);var f=F(l,2),p=N(f);G(p,`for`,`tagging-delimiter-`+n);var m=F(p,2);ta(m),G(m,`id`,`tagging-delimiter-`+n),E(f);var h=F(f,2),g=N(h);ta(g),He(2),E(h);var _=F(h,2),v=N(_),y=e=>{B(e,KV())},b=e=>{var i=qV();I(()=>{i.disabled=!L(r),G(i,`aria-label`,`Remove tagging header `+(L(t).header||n+1))}),R(`click`,i,()=>c(n)),B(e,i)};H(v,e=>{L(t).managed?e(y):e(b,-1)}),E(_),E(i),I(()=>{s.disabled=L(t).managed||!L(r),d.disabled=L(t).managed||!L(r),m.disabled=L(t).managed||!L(r),g.disabled=L(t).managed||!L(r)}),ua(s,()=>L(t).header,e=>L(t).header=e),ua(d,()=>L(t).prefix,e=>L(t).prefix=e),ua(m,()=>L(t).delimiter,e=>L(t).delimiter=e),da(g,()=>L(t).do_not_pass,e=>L(t).do_not_pass=e),B(e,i)});var g=F(h,2),_=e=>{AS(e,{size:16,label:`Loading tagging settings`})};H(g,e=>{L(i)&&e(_)});var v=F(g,2),y=e=>{B(e,YV())};H(v,e=>{!L(i)&&L(n).length===0&&e(y)}),E(m);var b=F(m,2),x=N(b);K(N(x),{get icon(){return po},class:`form-action-icon`}),He(2),E(x);var S=F(x,2);K(N(S),{get icon(){return _o},class:`form-action-icon`}),He(2),E(S),E(b),E(f);var C=F(f,2),w=N(C),T=e=>{var t=XV(),n=N(t,!0);E(t),I(()=>V(n,L(o))),B(e,t)};H(w,e=>{L(o)&&e(T)}),E(C),I(()=>{x.disabled=!L(r)||L(a)||L(i),S.disabled=!L(r)||L(a)||L(i),G(S,`aria-busy`,L(a)?`true`:`false`)}),R(`click`,x,s),R(`click`,S,u),B(e,d),O()}Vr([`click`]);function $V(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?bc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?bc(r):``}}function eH(e,t,n,r){return{...$V(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function tH(e){let t=Number(e&&e.matched||0),n=Number(e&&e.recalculated||0),r=Number(e&&e.without_pricing||0),i=`Pricing recalculated for `+n+` of `+t+` usage record`+(t===1?``:`s`)+`.`;return r>0&&(i+=` `+r+` usage record`+(r===1?` still lacks`:`s still lack`)+` pricing metadata.`),i}var nH=z(`

          Usage Pricing Recalculation

          `),rH=z(`
          `);function iH(e,t){D(t,!0);let n=A(``),r=A(``),i=A(!1),a=k(()=>Os.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!L(a)){J.error(`Usage pricing recalculation is unavailable.`);return}L(i)||Ks.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Fa,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!L(a)){J.error(`Usage pricing recalculation is unavailable.`);return}if(!L(i)){j(i,!0);try{let e=await ws(`/admin/usage/recalculate-pricing`,`POST`,eH({selectedPreset:Bc.selectedPreset,customStartDate:Bc.customStartDate,customEndDate:Bc.customEndDate,today:_s.todayDate()},L(n),L(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Ks.error=`Unable to recalculate pricing.`;return}Ks.close(),J.success(tH(e.data)),Kc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Ks.error=`Unable to recalculate pricing.`}finally{j(i,!1)}}}var c=Zr(),l=P(c),u=e=>{var t=rH(),s=N(t);tC(s,{copyId:`pricing-recalculate-help-copy`,label:`pricing recalculation help`,text:`Recalculate stored input, output, total, and Pro Saved costs from the current model pricing metadata. This overwrites matching historical cost fields. Filters are applied to the selected date range, user path subtree, and provider/model selector or alias.`,title:e=>{B(e,nH())},$$slots:{title:!0}});var c=F(s,2),l=N(c),u=F(N(l),2);ll(N(u),{}),E(u),E(l);var d=F(l,2),f=F(N(d),2);ta(f),E(d);var p=F(d,2),m=F(N(p),2);ta(m),E(p),E(c);var h=F(c,2),g=N(h);K(N(g),{get icon(){return Fa},class:`form-action-icon`}),He(2),E(g),E(h),E(t),I(()=>{g.disabled=L(i)||!L(a),G(g,`aria-busy`,L(i)?`true`:`false`)}),ua(f,()=>L(n),e=>j(n,e)),ua(m,()=>L(r),e=>j(r,e)),R(`click`,g,o),B(e,t)};H(l,e=>{L(a)&&e(u)}),B(e,c),O()}Vr([`click`]);function aH(e){return String(e&&e.status||`ok`).toLowerCase()}function oH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=aH(e);return(r===`ok`?`Runtime refreshed.`:r===`partial`?`Runtime refresh completed with warnings.`:`Runtime refresh failed.`)+` `+t+` model`+(t===1?``:`s`)+` across `+n+` provider`+(n===1?``:`s`)+`.`}function sH(e){return!!e&&aH(e)===`ok`}function cH(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function lH(e){let t=String(e&&e.name||``).replace(/_/g,` `),n=String(e&&e.status||``).trim(),r=String(e&&(e.error||e.message)||``).trim();return t?r?t+`: `+n+` - `+r:t+`: `+n:r||n||``}var uH=z(`

          Runtime Refresh

          `),dH=z(`
        • `),fH=z(`
            `),pH=z(`
            `,1);function mH(e,t){D(t,!0);let n=A(!1),r=A(null);async function i(){if(!L(n)){j(n,!0),j(r,null);try{let e=await ws(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){J.error(`Runtime refresh failed.`);return}j(r,e.data&&typeof e.data==`object`?e.data:null,!0),sH(L(r))?J.success(oH(L(r))):J.error(oH(L(r))),q.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),J.error(`Runtime refresh failed.`)}finally{j(n,!1)}}}var a=pH(),o=P(a),s=N(o);tC(s,{copyId:`runtime-refresh-help-copy`,label:`runtime refresh help`,text:`Pull the latest model metadata, provider inventory, API keys, aliases, model access rules, guardrails, and workflows.`,title:e=>{B(e,uH())},$$slots:{title:!0}});var c=F(s,2),l=N(c);let u;K(N(l),{get icon(){return ho},class:`settings-refresh-icon`}),He(2),E(l),E(c),E(o);var d=F(o,2),f=N(d),p=e=>{var t=fH();U(t,21,()=>cH(L(r)),e=>e.name,(e,t)=>{var n=dH(),r=N(n,!0);E(n),I(e=>{W(n,1,`runtime-refresh-step is-${L(t).status??``}`,`svelte-yeq2mp`),V(r,e)},[()=>lH(L(t))]),B(e,n)}),E(t),B(e,t)},m=k(()=>cH(L(r)).length>0);H(f,e=>{L(m)&&e(p)}),E(d),I(()=>{u=W(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":L(n)}),l.disabled=L(n),G(l,`aria-busy`,L(n)?`true`:`false`)}),R(`click`,l,i),B(e,a),O()}Vr([`click`]);var hH=z(``),gH=z(`

            `),_H=z(`

            `),vH=z(``),yH=z(`
            `),bH=z(`

            AI Processing

            `);function xH(e,t){D(t,!0);let n=A(M([])),r=A(!1),i=A(``),a=A(``);async function o(){j(r,!0),j(a,``);try{let e=await Cs(`/admin/runtime/settings`,{label:`runtime settings`});if(e.stale)return;if(!e.ok){j(a,`Unable to load runtime settings.`);return}j(n,Array.isArray(e.data?.settings)?e.data.settings:[],!0)}catch(e){console.error(`Failed to load runtime settings:`,e),j(a,`Unable to load runtime settings.`)}finally{j(r,!1)}}async function s(e,t,r){if(!(e.locked||L(i))){j(i,e.key,!0);try{let i=await ws(`/admin/runtime/settings/${encodeURIComponent(e.key)}`,`PUT`,{value:t},{label:`save ${e.label}`});if(i.stale){r.value=e.value;return}if(!i.ok){r.value=e.value,J.error(`Unable to save ${e.label}.`);return}j(n,L(n).map(t=>t.key===e.key?i.data:t),!0),J.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),J.error(`Unable to save ${e.label}.`)}finally{j(i,``)}}}kn(()=>{q.refreshTick,o()});var c=Zr(),l=P(c),u=e=>{var t=bH(),o=N(t),c=F(N(o),2),l=e=>{var t=hH(),n=N(t,!0);E(t),I(()=>V(n,L(a))),B(e,t)};H(c,e=>{L(a)&&e(l)}),E(o);var u=F(o,2);U(u,21,()=>L(n),e=>e.key,(e,t)=>{var n=yH(),r=N(n),a=N(r),o=N(a,!0);E(a);var c=F(a,2),l=e=>{var n=gH(),r=N(n,!0);E(n),I(()=>V(r,L(t).description)),B(e,n)};H(c,e=>{L(t).description&&e(l)});var u=F(c,2),d=e=>{var n=_H(),r=N(n);E(n),I(()=>V(r,`Managed by ${(L(t).managed_by||`environment`)??``}`)),B(e,n)};H(u,e=>{L(t).locked&&e(d)}),E(r);var f=F(r,2);U(f,21,()=>L(t).options||[],e=>e.value,(e,t)=>{var n=vH(),r=N(n,!0);E(n);var i={};I(()=>{G(n,`title`,L(t).description||``),V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(f);var p;Ui(f),E(n),I(()=>{G(a,`for`,`runtime-setting-${L(t).key}`),V(o,L(t).label),G(f,`id`,`runtime-setting-${L(t).key}`),f.disabled=L(t).locked||L(i)!==``,p!==(p=L(t).value)&&(f.value=(f.__value=L(t).value)??``,Hi(f,L(t).value))}),R(`change`,f,e=>s(L(t),e.currentTarget.value,e.currentTarget)),B(e,n)}),E(u),E(t),I(()=>G(u,`aria-busy`,L(r)?`true`:`false`)),B(e,t)};H(l,e=>{(L(n).length>0||L(a))&&e(u)}),B(e,c),O()}Vr([`change`]);var SH=z(`
            `);function CH(e,t){D(t,!0),kn(()=>{q.refreshTick,Yo.page===`settings`&&(_s.ensureOptions(),Os.ensureLoaded())});var n=SH(),r=F(N(n),2),i=N(r);TV(i,{});var a=F(i,2);OV(a,{});var o=F(a,2);RV(o,{});var s=F(o,2);BV(s,{});var c=F(s,2);QV(c,{});var l=F(c,2);xH(l,{});var u=F(l,2);iH(u,{}),mH(F(u,2),{}),E(r);var d=F(r,2),f=N(d,!0);E(d),E(n),I(e=>V(f,e),[()=>Wo()]),B(e,n),O()}var wH=z(`
             
            `),TH=z(`
             
            `),EH=z(`
            `),DH=z(`
            `),OH=z(`
            `,1),kH=z(`
            `);function AH(e,t){D(t,!0);let n=k(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function r(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var i=kH(),a=N(i),o=e=>{var n=wH(),i=N(n),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s,!0);E(s),E(i);var l=F(i,2),u=N(l,!0);E(l),E(n),I((e,n)=>{V(o,t.msg.roleLabel),V(c,e),V(u,n)},[()=>r(t.msg),()=>qI(t.msg)]),B(e,n)},s=e=>{var n=OH(),r=P(n),i=N(r),a=N(i,!0);E(i);var o=F(i,2),s=N(o,!0);E(o),E(r);var c=F(r,2),l=e=>{var n=TH(),r=N(n,!0);E(n),I(()=>V(r,t.msg.text)),B(e,n)};H(c,e=>{t.msg.text&&e(l)});var u=F(c,2),d=e=>{var n=DH();U(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=EH(),r=N(n),i=N(r,!0);E(r),E(n),I(()=>V(i,L(t).name+`()`)),B(e,n)}),E(n),B(e,n)};H(u,e=>{t.msg.toolCalls&&e(d)}),I(e=>{V(a,t.msg.roleLabel),V(s,e)},[()=>_s.formatTimestamp(t.msg.timestamp)]),B(e,n)};H(a,e=>{L(n)?e(o):e(s,-1)}),E(i),I(()=>{W(i,1,Pi([L(n)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),G(i,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),G(i,`data-entry-id`,t.msg.entryID)}),B(e,i),O()}function jH(e,t=0){let n=Math.max(0,PH(e)-Math.max(0,PH(t))),r=Math.min(320,Math.max(180,Math.floor(n*.58))),i=Math.min(360,Math.max(128,Math.floor(n*.35)));return{min:r,max:Math.max(r,n-i)}}function MH(e,t,n=0){let r=jH(t,n),i=PH(e)||520;return Math.min(r.max,Math.max(r.min,Math.round(i)))}function NH(e,t,n=0){return MH(PH(t)-PH(e),t,n)}function PH(e){let t=Number(e);return Number.isFinite(t)?t:0}var FH=z(`
            `),IH=z(`

            Loading interactions...

            `),LH=z(`

            No interaction data available for this entry.

            `),RH=z(`
            `),zH=z(`

            Showing the newest part of this session and the selected log.

            `),BH=z(`
            `),VH=z(``),HH=z(`
            `),UH=z(``),WH=z(``);function GH(e,t){D(t,!0);let n=tL,r=Number(wa(`gomodel_interactions_panel_width`)),i=Number.isFinite(r)&&r>0?r:520,a=A(M(i)),o=A(320),s=A(760),c=A(!1),l=null;function u(){return(document.querySelector(`.sidebar`)?.getBoundingClientRect().width||0)+(document.querySelector(`.sidebar-toggle`)?.getBoundingClientRect().width||0)}function d(){let e=u(),t=jH(window.innerWidth,e);j(o,t.min,!0),j(s,t.max,!0),j(a,MH(i,window.innerWidth,e),!0)}function f(e){j(a,NH(e,window.innerWidth,u()),!0),i=L(a)}function p(e){e.button===0&&(e.preventDefault(),l=e.pointerId,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`conversation-panel-resizing`),f(e.clientX))}function m(e){e.pointerId===l&&f(e.clientX)}function h(e){l===null||e.pointerId!==void 0&&e.pointerId!==l||(l=null,document.body.classList.remove(`conversation-panel-resizing`),Ta(`gomodel_interactions_panel_width`,i))}function g(e){e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||(e.preventDefault(),i=L(a)+(e.key===`ArrowLeft`?24:-24),d(),i=L(a),Ta(`gomodel_interactions_panel_width`,i))}function _(){return[document.querySelector(`.sidebar`),document.querySelector(`.sidebar-toggle`),document.getElementById(`dashboard-content`)].filter(Boolean)}kn(()=>{if(!n.conversationOpen)return;d();let e=document.querySelector(`.sidebar`),t=new ResizeObserver(d);e&&t.observe(e);let r=e=>{e.key===`Escape`&&!Aa.anyOpen&&(L(c)?j(c,!1):n.closeConversation())};return window.addEventListener(`keydown`,r),window.addEventListener(`resize`,d),()=>{h({}),t.disconnect(),window.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,d)}}),kn(()=>{n.conversationOpen||j(c,!1)}),kn(()=>{if(!L(c))return;let e=_().map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));return e.forEach(({element:e})=>{e.inert=!0,e.setAttribute(`aria-hidden`,`true`)}),()=>{e.forEach(({element:e,inert:t,ariaHidden:n})=>{e.inert=t,n===null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)})}}),kn(()=>{Yo.page!==`audit-logs`&&n.conversationOpen&&n.closeConversation()});var v=Zr(),y=P(v),b=e=>{var t=WH();let r,i;var l=N(t),u=F(l,2),d=F(N(u),2),f=N(d),_=N(f);{let e=k(()=>L(c)?so:oo);K(_,{get icon(){return L(e)},class:`table-icon-svg`})}E(f),Is(F(f,2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),E(d),E(u);var v=F(u,2),y=N(v),b=e=>{var t=FH(),r=N(t,!0);E(t),I(()=>V(r,n.conversationError)),B(e,t)};H(y,e=>{n.conversationError&&e(b)});var x=F(y,2),S=e=>{B(e,IH())};H(x,e=>{n.conversationLoading&&e(S)});var C=F(x,2),w=e=>{B(e,LH())},T=k(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());H(C,e=>{L(T)&&e(w)});var ee=F(C,2),te=e=>{var t=RH();U(t,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{AH(e,{get msg(){return L(t)}})}),E(t),ha(t,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),B(e,t)};H(ee,e=>{n.conversationMessages.length>0&&e(te)});var ne=F(ee,2),re=e=>{B(e,zH())};H(ne,e=>{n.conversationTruncated&&e(re)});var ie=F(ne,2),ae=e=>{var t=BH(),r=F(N(t),2),i=N(r,!0);E(r),E(t),I(e=>V(i,e),[()=>n.conversationLiveStatusText()]),B(e,t)},oe=k(()=>n.conversationLiveWaiting());H(ie,e=>{L(oe)&&e(ae)}),E(v);var se=F(v,2),ce=e=>{var t=UH(),r=N(t),i=e=>{var t=HH(),r=F(N(t),2);dt(r);var i=F(r,2),a=e=>{var t=VH(),r=N(t,!0);E(t),I(()=>V(r,n.followUpError)),B(e,t)};H(i,e=>{n.followUpError&&e(a)});var o=F(i,2),s=N(o),c=N(s,!0);E(s);var l=F(s,2),u=N(l,!0);E(l),E(o),E(t),I((e,t,i)=>{r.disabled=e,V(c,t),l.disabled=i,V(u,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),Br(`submit`,t,e=>{e.preventDefault(),n.sendFollowUp()}),ua(r,()=>n.followUpText,e=>n.followUpText=e),B(e,t)},a=k(()=>n.followUpKind());H(r,e=>{L(a)&&e(i)});var o=F(r,2),s=N(o,!0);E(o),E(t),I(()=>V(s,n.conversationFollowLatest?`Following latest interaction`:`Opened from log: `+n.conversationOpenedFromID)),B(e,t)};H(se,e=>{n.conversationAnchorID&&e(ce)}),E(t),ha(t,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),I(()=>{r=W(t,1,`conversation-drawer svelte-ssrzja`,null,r,{"conversation-drawer-fullscreen":L(c)}),G(t,`role`,L(c)?`dialog`:void 0),G(t,`aria-modal`,L(c)?`true`:void 0),i=Vi(t,``,i,{"--conversation-panel-width":L(a)+`px`}),G(l,`aria-valuemin`,L(o)),G(l,`aria-valuemax`,L(s)),G(l,`aria-valuenow`,L(a)),G(f,`aria-label`,L(c)?`Exit fullscreen interactions`:`Show interactions fullscreen`),G(f,`title`,L(c)?`Exit fullscreen`:`Fullscreen`),G(f,`aria-pressed`,L(c))}),R(`pointerdown`,l,p),R(`pointermove`,l,m),R(`pointerup`,l,h),Br(`pointercancel`,l,h),Br(`lostpointercapture`,l,h),R(`keydown`,l,g),R(`click`,f,()=>j(c,!L(c))),B(e,t)};H(y,e=>{n.conversationOpen&&e(b)}),B(e,v),O()}Vr([`pointerdown`,`pointermove`,`pointerup`,`keydown`,`click`]);var KH=z(`
            `,1);function qH(e,t){D(t,!0);let n={overview:TC,usage:xT,budgets:ZE,"rate-limits":cO,models:Wj,workflows:dP,"audit-logs":GL,guardrails:RR,"mcp-servers":vz,"providers-config":EB,"auth-keys":bV,settings:CH};_s.init(),Bc.init(),q.init(),Oa.init(),ka.init(),Yo.init(),kn(()=>{q.refreshTick,Os.fetch(),Vc.fetchModels(),Vc.fetchCategories()}),kn(()=>{document.body.classList.toggle(`dashboard-modal-open`,Aa.anyOpen)});let r=k(()=>n[Yo.page]||TC);var i=KH(),a=P(i);Ps(a,{});var o=F(a,2);let s;var c=N(o);dc(c,{}),gi(F(c,2),()=>L(r),(e,t)=>{t(e,{})}),E(o);var l=F(o,2);GH(l,{});var u=F(l,2);Ws(u,{});var d=F(u,2);Xs(d,{}),lc(F(d,2),{}),I(()=>s=W(o,1,`content`,null,s,{"interactions-open":tL.conversationOpen})),B(e,i),O()}ei(qH,{target:document.getElementById(`app`)}); \ No newline at end of file diff --git a/internal/admin/dashboard/static/dist/index.html b/internal/admin/dashboard/static/dist/index.html index 0c1b91a47..f87c85182 100644 --- a/internal/admin/dashboard/static/dist/index.html +++ b/internal/admin/dashboard/static/dist/index.html @@ -7,8 +7,8 @@ GoModel Dashboard - - + +
            diff --git a/internal/app/app.go b/internal/app/app.go index b4132ff7f..d96b74124 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -9,6 +9,7 @@ import ( "log/slog" "net" "net/http" + "reflect" "strings" "sync" "time" @@ -74,6 +75,7 @@ type App struct { server *server.Server storage storage.Storage runtimeSettings *runtimesettings.Service + extensionAuth bool // registered records every successfully initialized subsystem in // construction order, together with the teardown path that owns it. It is @@ -217,7 +219,8 @@ func New(ctx context.Context, cfg Config) (*App, error) { } app := &App{ - config: appCfg, + config: appCfg, + extensionAuth: hasUsableRequestAuthenticator(cfg.Extensions), } app.live = live.NewBroker(live.Config{ Enabled: appCfg.Admin.LiveLogsEnabled, @@ -302,6 +305,7 @@ func New(ctx context.Context, cfg Config) (*App, error) { } app.audit = auditResult app.register(subsystemAudit, ownedByShutdown, app.audit.Close) + bindAuthenticationEventRecorders(cfg.Extensions, auditlog.NewAuthenticationEventRecorder(auditResult.Logger)) // Initialize usage tracking. Disabled tracking yields a noop logger. usageResult, err := usage.New(ctx, appCfg, sharedStorage) @@ -980,6 +984,12 @@ func (a *App) logStartupInfo() { // Security warnings managedKeysConfigured := a.authKeys != nil && a.authKeys.Service != nil && a.authKeys.Service.Enabled() switch { + case a.extensionAuth && cfg.Server.MasterKey != "" && managedKeysConfigured: + slog.Info("authentication enabled", "mode", "master_key+managed_keys+extension") + case a.extensionAuth && (cfg.Server.MasterKey != "" || managedKeysConfigured): + slog.Info("authentication enabled", "mode", "extension+bearer") + case a.extensionAuth: + slog.Info("authentication enabled", "mode", "extension") case cfg.Server.MasterKey != "" && managedKeysConfigured: slog.Info("authentication enabled", "mode", "master_key+managed_keys", "managed_key_total", a.authKeys.Service.Total(), "managed_key_active", a.authKeys.Service.ActiveCount()) case managedKeysConfigured: @@ -1031,6 +1041,45 @@ func (a *App) logStartupInfo() { } +func hasUsableRequestAuthenticator(registry *ext.Registry) bool { + if registry == nil { + return false + } + for _, authenticator := range registry.Authenticators() { + if !nilInterface(authenticator) { + return true + } + } + return false +} + +func bindAuthenticationEventRecorders(registry *ext.Registry, recorder ext.AuthenticationEventRecorder) { + if registry == nil || recorder == nil { + return + } + for _, authenticator := range registry.Authenticators() { + if nilInterface(authenticator) { + continue + } + if aware, ok := authenticator.(ext.AuthenticationEventRecorderAware); ok && !nilInterface(aware) { + aware.SetAuthenticationEventRecorder(recorder) + } + } +} + +func nilInterface(value any) bool { + if value == nil { + return true + } + reflected := reflect.ValueOf(value) + switch reflected.Kind() { + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice: + return reflected.IsNil() + default: + return false + } +} + // initAdmin creates the admin API handler and optionally the dashboard handler. // Returns nil dashboard handler if uiEnabled is false. func initAdmin( diff --git a/internal/app/app_test.go b/internal/app/app_test.go index b3c41a92f..25b96119a 100644 --- a/internal/app/app_test.go +++ b/internal/app/app_test.go @@ -1,11 +1,14 @@ package app import ( + "bytes" "context" "errors" "io" + "log/slog" "net/http" "net/http/httptest" + "strings" "testing" "time" @@ -734,6 +737,65 @@ func (*appTestAuthenticator) AuthenticateRequest(context.Context, *http.Request) return nil, nil } +type recorderAwareAppAuthenticator struct { + recorder ext.AuthenticationEventRecorder +} + +func (*recorderAwareAppAuthenticator) Name() string { return "recorder-aware" } + +func (*recorderAwareAppAuthenticator) AuthenticateRequest(context.Context, *http.Request) (*ext.Authentication, error) { + return nil, nil +} + +func (a *recorderAwareAppAuthenticator) SetAuthenticationEventRecorder(recorder ext.AuthenticationEventRecorder) { + a.recorder = recorder +} + +type appAuthenticationEventRecorder struct{} + +func (*appAuthenticationEventRecorder) RecordAuthenticationEvent(ext.AuthenticationEvent) {} + +func TestExtensionAuthenticationDetectionAndRecorderBinding(t *testing.T) { + if hasUsableRequestAuthenticator(nil) { + t.Fatal("nil registry reported extension authentication") + } + + registry := &ext.Registry{} + var typedNil *appTestAuthenticator + registry.RegisterAuthenticator(typedNil) + if hasUsableRequestAuthenticator(registry) { + t.Fatal("typed-nil authenticator reported extension authentication") + } + + authenticator := &recorderAwareAppAuthenticator{} + registry.RegisterAuthenticator(authenticator) + if !hasUsableRequestAuthenticator(registry) { + t.Fatal("usable authenticator was not detected") + } + recorder := &appAuthenticationEventRecorder{} + bindAuthenticationEventRecorders(registry, recorder) + if authenticator.recorder != recorder { + t.Fatal("authentication event recorder was not installed") + } +} + +func TestLogStartupInfoTreatsExtensionAuthenticatorAsEffectiveAuth(t *testing.T) { + var logs bytes.Buffer + previous := slog.Default() + slog.SetDefault(slog.New(slog.NewTextHandler(&logs, nil))) + t.Cleanup(func() { slog.SetDefault(previous) }) + + app := &App{config: &config.Config{}, extensionAuth: true} + app.logStartupInfo() + output := logs.String() + if strings.Contains(output, "UNSAFE MODE") || strings.Contains(output, "unauthenticated access allowed") { + t.Fatalf("extension-authenticated startup emitted unsafe warning: %s", output) + } + if !strings.Contains(output, `mode=extension`) { + t.Fatalf("extension authentication mode was not logged: %s", output) + } +} + type staticRewriter struct{ name string } func (r *staticRewriter) Name() string { return r.name } diff --git a/internal/auditlog/auditlog.go b/internal/auditlog/auditlog.go index 40bdad482..3ce983aa6 100644 --- a/internal/auditlog/auditlog.go +++ b/internal/auditlog/auditlog.go @@ -122,6 +122,9 @@ type LogData struct { // Identity UserAgent string `json:"user_agent,omitempty" bson:"user_agent,omitempty"` APIKeyHash string `json:"api_key_hash,omitempty" bson:"api_key_hash,omitempty"` + // EventType identifies non-request security lifecycle entries written + // through the extension authentication event recorder. + EventType string `json:"event_type,omitempty" bson:"event_type,omitempty"` // Labels are request labels extracted from configured tagging headers. Labels []string `json:"labels,omitempty" bson:"labels,omitempty"` diff --git a/internal/auditlog/authentication_events.go b/internal/auditlog/authentication_events.go new file mode 100644 index 000000000..bc92c264a --- /dev/null +++ b/internal/auditlog/authentication_events.go @@ -0,0 +1,77 @@ +package auditlog + +import ( + "strings" + "time" + + "github.com/google/uuid" + + "github.com/enterpilot/gomodel/ext" + "github.com/enterpilot/gomodel/internal/core" +) + +const authenticationEventProvider = "authentication" + +type authenticationEventRecorder struct { + logger LoggerInterface +} + +// NewAuthenticationEventRecorder adapts extension authentication lifecycle +// events into ordinary durable audit entries. It intentionally uses the same +// logger, retention, storage backend, and shutdown flush as request auditing. +func NewAuthenticationEventRecorder(logger LoggerInterface) ext.AuthenticationEventRecorder { + return &authenticationEventRecorder{logger: logger} +} + +func (r *authenticationEventRecorder) RecordAuthenticationEvent(event ext.AuthenticationEvent) { + if r == nil || r.logger == nil || !r.logger.Config().Enabled { + return + } + + timestamp := event.Timestamp + if timestamp.IsZero() { + timestamp = time.Now() + } + userPath, err := core.NormalizeUserPath(event.UserPath) + if err != nil || userPath == "" { + userPath = "/" + } + method := NormalizeAuthMethod(event.Method) + if method == "" { + method = AuthMethodExtension + } + status := 200 + errorType := "" + eventType := NormalizeAuthMethod(event.Type) + if eventType == "" { + eventType = "authentication" + } + reason := NormalizeAuthMethod(event.Reason) + if strings.EqualFold(strings.TrimSpace(event.Outcome), "failure") { + status = 401 + errorType = "authentication_error" + if reason == "" { + reason = "unspecified" + } + } + + r.logger.Write(&LogEntry{ + ID: uuid.NewString(), + Timestamp: timestamp.UTC(), + Provider: authenticationEventProvider, + StatusCode: status, + RequestID: strings.TrimSpace(event.RequestID), + PrincipalID: strings.TrimSpace(event.PrincipalID), + AuthMethod: method, + ClientIP: strings.TrimSpace(event.ClientIP), + Method: strings.TrimSpace(event.HTTPMethod), + Path: strings.TrimSpace(event.Path), + UserPath: userPath, + ErrorType: errorType, + Data: &LogData{ + UserAgent: strings.TrimSpace(event.UserAgent), + EventType: eventType, + ErrorCode: reason, + }, + }) +} diff --git a/internal/auditlog/authentication_events_test.go b/internal/auditlog/authentication_events_test.go new file mode 100644 index 000000000..a42978942 --- /dev/null +++ b/internal/auditlog/authentication_events_test.go @@ -0,0 +1,41 @@ +package auditlog + +import ( + "testing" + "time" + + "github.com/enterpilot/gomodel/ext" +) + +func TestAuthenticationEventRecorderWritesDurableAuditEntry(t *testing.T) { + logger := &capturingLogger{cfg: Config{Enabled: true, OnlyModelInteractions: true}} + recorder := NewAuthenticationEventRecorder(logger) + timestamp := time.Date(2026, 8, 7, 12, 0, 0, 0, time.FixedZone("test", 2*60*60)) + recorder.RecordAuthenticationEvent(ext.AuthenticationEvent{ + Timestamp: timestamp, Type: "login", Outcome: "failure", Method: "sso", + RequestID: "request-1", ClientIP: "192.0.2.10", HTTPMethod: "GET", + Path: "/sso/callback", UserAgent: "browser", Reason: "group_denied", + }) + + if len(logger.entries) != 1 { + t.Fatalf("entries = %d, want 1", len(logger.entries)) + } + entry := logger.entries[0] + if entry.Provider != authenticationEventProvider || entry.StatusCode != 401 || + entry.AuthMethod != "sso" || entry.Path != "/sso/callback" || + entry.ErrorType != "authentication_error" || entry.Data.EventType != "login" || + entry.Data.ErrorCode != "group_denied" { + t.Fatalf("entry = %+v, data = %+v", entry, entry.Data) + } + if entry.Timestamp.Location() != time.UTC || !entry.Timestamp.Equal(timestamp) { + t.Fatalf("timestamp = %v, want %v in UTC", entry.Timestamp, timestamp) + } +} + +func TestAuthenticationEventRecorderNoopsWhenAuditDisabled(t *testing.T) { + logger := &capturingLogger{} + NewAuthenticationEventRecorder(logger).RecordAuthenticationEvent(ext.AuthenticationEvent{Type: "login"}) + if len(logger.entries) != 0 { + t.Fatalf("entries = %d, want none", len(logger.entries)) + } +} diff --git a/internal/auditlog/stream_wrapper.go b/internal/auditlog/stream_wrapper.go index 0964a305b..f85dcda95 100644 --- a/internal/auditlog/stream_wrapper.go +++ b/internal/auditlog/stream_wrapper.go @@ -258,6 +258,7 @@ func CreateStreamEntry(ctx context.Context, baseEntry *LogEntry) *LogEntry { entryCopy.Data = &LogData{ UserAgent: baseEntry.Data.UserAgent, APIKeyHash: baseEntry.Data.APIKeyHash, + EventType: baseEntry.Data.EventType, Labels: baseEntry.Data.Labels, Temperature: baseEntry.Data.Temperature, MaxTokens: baseEntry.Data.MaxTokens, diff --git a/web/dashboard/src/lib/api/client.js b/web/dashboard/src/lib/api/client.js index 5f6be9298..5f1ddbda9 100644 --- a/web/dashboard/src/lib/api/client.js +++ b/web/dashboard/src/lib/api/client.js @@ -31,6 +31,7 @@ export function apiFetch(path, options = {}) { async function request(path, options, { label = path, parse = true } = {}) { const generation = auth.generation; const res = await apiFetch(path, options); + auth.observeResponse(res); if (res.status === 401) { auth.handleUnauthorized(generation); return { ok: false, stale: generation < auth.generation, status: 401, data: null, res }; diff --git a/web/dashboard/src/lib/components/organisms/AuthDialog.svelte b/web/dashboard/src/lib/components/organisms/AuthDialog.svelte index d9a407da1..9f9b52f09 100644 --- a/web/dashboard/src/lib/components/organisms/AuthDialog.svelte +++ b/web/dashboard/src/lib/components/organisms/AuthDialog.svelte @@ -3,7 +3,8 @@ import Modal from "$lib/components/atoms/Modal.svelte"; import Icon from "$lib/components/atoms/Icon.svelte"; import { auth } from "$lib/stores/auth.svelte.js"; - import { Check, LockKeyhole } from "lucide"; + import { gomodelPath } from "$lib/api/paths.js"; + import { Check, KeyRound, LockKeyhole } from "lucide"; + {#if auth.externalLoginURL} + +
            or use an API key
            + {/if}