SYMBOL INDEX (954 symbols across 91 files) FILE: backend-go/internal/config/config.go type UpstreamConfig (line 17) | type UpstreamConfig struct type UpstreamUpdate (line 39) | type UpstreamUpdate struct type Config (line 60) | type Config struct type FailedKey (line 79) | type FailedKey struct type ConfigManager (line 85) | type ConfigManager struct method GetConfig (line 100) | func (cm *ConfigManager) GetConfig() Config { method GetNextAPIKey (line 136) | func (cm *ConfigManager) GetNextAPIKey(upstream *UpstreamConfig, faile... method MarkKeyAsFailed (line 196) | func (cm *ConfigManager) MarkKeyAsFailed(apiKey string, apiType string) { method isKeyFailed (line 221) | func (cm *ConfigManager) isKeyFailed(apiKey string) bool { method IsKeyFailed (line 239) | func (cm *ConfigManager) IsKeyFailed(apiKey string) bool { method clearFailedKeysForUpstream (line 246) | func (cm *ConfigManager) clearFailedKeysForUpstream(upstream *Upstream... method cleanupExpiredFailures (line 256) | func (cm *ConfigManager) cleanupExpiredFailures() { method GetFuzzyModeEnabled (line 286) | func (cm *ConfigManager) GetFuzzyModeEnabled() bool { method SetFuzzyModeEnabled (line 293) | func (cm *ConfigManager) SetFuzzyModeEnabled(enabled bool) error { FILE: backend-go/internal/config/config_baseurl_test.go function TestUpdateUpstream_BaseURLConsistency (line 15) | func TestUpdateUpstream_BaseURLConsistency(t *testing.T) { function TestUpdateResponsesUpstream_BaseURLConsistency (line 114) | func TestUpdateResponsesUpstream_BaseURLConsistency(t *testing.T) { function TestUpdateGeminiUpstream_BaseURLConsistency (line 161) | func TestUpdateGeminiUpstream_BaseURLConsistency(t *testing.T) { function TestGetAllBaseURLs_Priority (line 208) | func TestGetAllBaseURLs_Priority(t *testing.T) { function TestGetEffectiveBaseURL_Priority (line 266) | func TestGetEffectiveBaseURL_Priority(t *testing.T) { function TestDeduplicateBaseURLs (line 309) | func TestDeduplicateBaseURLs(t *testing.T) { function TestAddUpstream_BaseURLDeduplication (line 370) | func TestAddUpstream_BaseURLDeduplication(t *testing.T) { function strPtr (line 412) | func strPtr(s string) *string { FILE: backend-go/internal/config/config_gemini.go method GetCurrentGeminiUpstream (line 16) | func (cm *ConfigManager) GetCurrentGeminiUpstream() (*UpstreamConfig, er... method AddGeminiUpstream (line 37) | func (cm *ConfigManager) AddGeminiUpstream(upstream UpstreamConfig) error { method UpdateGeminiUpstream (line 62) | func (cm *ConfigManager) UpdateGeminiUpstream(index int, updates Upstrea... method RemoveGeminiUpstream (line 176) | func (cm *ConfigManager) RemoveGeminiUpstream(index int) (*UpstreamConfi... method AddGeminiAPIKey (line 199) | func (cm *ConfigManager) AddGeminiAPIKey(index int, apiKey string) error { method RemoveGeminiAPIKey (line 236) | func (cm *ConfigManager) RemoveGeminiAPIKey(index int, apiKey string) er... method GetNextGeminiAPIKey (line 281) | func (cm *ConfigManager) GetNextGeminiAPIKey(upstream *UpstreamConfig, f... method MoveGeminiAPIKeyToTop (line 286) | func (cm *ConfigManager) MoveGeminiAPIKeyToTop(upstreamIndex int, apiKey... method MoveGeminiAPIKeyToBottom (line 312) | func (cm *ConfigManager) MoveGeminiAPIKeyToBottom(upstreamIndex int, api... method ReorderGeminiUpstreams (line 340) | func (cm *ConfigManager) ReorderGeminiUpstreams(order []int) error { method SetGeminiChannelStatus (line 374) | func (cm *ConfigManager) SetGeminiChannelStatus(index int, status string... method SetGeminiChannelPromotion (line 405) | func (cm *ConfigManager) SetGeminiChannelPromotion(index int, duration t... method GetPromotedGeminiChannel (line 432) | func (cm *ConfigManager) GetPromotedGeminiChannel() (int, bool) { method SetGeminiLoadBalance (line 445) | func (cm *ConfigManager) SetGeminiLoadBalance(strategy string) error { FILE: backend-go/internal/config/config_loader.go constant maxBackups (line 15) | maxBackups = 10 constant keyRecoveryTime (line 16) | keyRecoveryTime = 5 * time.Minute constant maxFailureCount (line 17) | maxFailureCount = 3 function NewConfigManager (line 21) | func NewConfigManager(configFile string) (*ConfigManager, error) { method loadConfig (line 47) | func (cm *ConfigManager) loadConfig() error { method createDefaultConfig (line 96) | func (cm *ConfigManager) createDefaultConfig() error { method applyConfigDefaults (line 119) | func (cm *ConfigManager) applyConfigDefaults(rawJSON []byte) bool { method migrateOldFormat (line 149) | func (cm *ConfigManager) migrateOldFormat() bool { method migrateUpstreams (line 170) | func (cm *ConfigManager) migrateUpstreams(upstreams []UpstreamConfig, cu... method validateChannelKeys (line 204) | func (cm *ConfigManager) validateChannelKeys() bool { method saveConfigLocked (line 259) | func (cm *ConfigManager) saveConfigLocked(config Config) error { method SaveConfig (line 277) | func (cm *ConfigManager) SaveConfig() error { method backupConfig (line 284) | func (cm *ConfigManager) backupConfig() { method cleanupOldBackups (line 315) | func (cm *ConfigManager) cleanupOldBackups(backupDir string) { method startWatcher (line 332) | func (cm *ConfigManager) startWatcher() error { method Close (line 370) | func (cm *ConfigManager) Close() error { FILE: backend-go/internal/config/config_messages.go method GetCurrentUpstream (line 16) | func (cm *ConfigManager) GetCurrentUpstream() (*UpstreamConfig, error) { method AddUpstream (line 37) | func (cm *ConfigManager) AddUpstream(upstream UpstreamConfig) error { method UpdateUpstream (line 62) | func (cm *ConfigManager) UpdateUpstream(index int, updates UpstreamUpdat... method RemoveUpstream (line 173) | func (cm *ConfigManager) RemoveUpstream(index int) (*UpstreamConfig, err... method AddAPIKey (line 196) | func (cm *ConfigManager) AddAPIKey(index int, apiKey string) error { method RemoveAPIKey (line 233) | func (cm *ConfigManager) RemoveAPIKey(index int, apiKey string) error { method SetLoadBalance (line 278) | func (cm *ConfigManager) SetLoadBalance(strategy string) error { method MoveAPIKeyToTop (line 297) | func (cm *ConfigManager) MoveAPIKeyToTop(upstreamIndex int, apiKey strin... method MoveAPIKeyToBottom (line 324) | func (cm *ConfigManager) MoveAPIKeyToBottom(upstreamIndex int, apiKey st... method ReorderUpstreams (line 353) | func (cm *ConfigManager) ReorderUpstreams(order []int) error { method SetChannelStatus (line 388) | func (cm *ConfigManager) SetChannelStatus(index int, status string) error { method SetChannelPromotion (line 420) | func (cm *ConfigManager) SetChannelPromotion(index int, duration time.Du... method GetPromotedChannel (line 447) | func (cm *ConfigManager) GetPromotedChannel() (int, bool) { method DeprioritizeAPIKey (line 460) | func (cm *ConfigManager) DeprioritizeAPIKey(apiKey string) error { FILE: backend-go/internal/config/config_responses.go method GetCurrentResponsesUpstream (line 16) | func (cm *ConfigManager) GetCurrentResponsesUpstream() (*UpstreamConfig,... method AddResponsesUpstream (line 37) | func (cm *ConfigManager) AddResponsesUpstream(upstream UpstreamConfig) e... method UpdateResponsesUpstream (line 62) | func (cm *ConfigManager) UpdateResponsesUpstream(index int, updates Upst... method RemoveResponsesUpstream (line 170) | func (cm *ConfigManager) RemoveResponsesUpstream(index int) (*UpstreamCo... method AddResponsesAPIKey (line 193) | func (cm *ConfigManager) AddResponsesAPIKey(index int, apiKey string) er... method RemoveResponsesAPIKey (line 230) | func (cm *ConfigManager) RemoveResponsesAPIKey(index int, apiKey string)... method GetNextResponsesAPIKey (line 275) | func (cm *ConfigManager) GetNextResponsesAPIKey(upstream *UpstreamConfig... method SetResponsesLoadBalance (line 280) | func (cm *ConfigManager) SetResponsesLoadBalance(strategy string) error { method MoveResponsesAPIKeyToTop (line 299) | func (cm *ConfigManager) MoveResponsesAPIKeyToTop(upstreamIndex int, api... method MoveResponsesAPIKeyToBottom (line 325) | func (cm *ConfigManager) MoveResponsesAPIKeyToBottom(upstreamIndex int, ... method ReorderResponsesUpstreams (line 353) | func (cm *ConfigManager) ReorderResponsesUpstreams(order []int) error { method SetResponsesChannelStatus (line 387) | func (cm *ConfigManager) SetResponsesChannelStatus(index int, status str... method SetResponsesChannelPromotion (line 418) | func (cm *ConfigManager) SetResponsesChannelPromotion(index int, duratio... method GetPromotedResponsesChannel (line 445) | func (cm *ConfigManager) GetPromotedResponsesChannel() (int, bool) { FILE: backend-go/internal/config/config_utils.go function deduplicateStrings (line 12) | func deduplicateStrings(items []string) []string { function deduplicateBaseURLs (line 28) | func deduplicateBaseURLs(urls []string) []string { function validateLoadBalanceStrategy (line 45) | func validateLoadBalanceStrategy(strategy string) error { type ConfigError (line 55) | type ConfigError struct method Error (line 59) | func (e *ConfigError) Error() string { function RedirectModel (line 66) | func RedirectModel(model string, upstream *UpstreamConfig) string { function GetChannelStatus (line 104) | func GetChannelStatus(upstream *UpstreamConfig) string { function GetChannelPriority (line 112) | func GetChannelPriority(upstream *UpstreamConfig, index int) int { function IsChannelInPromotion (line 120) | func IsChannelInPromotion(upstream *UpstreamConfig) bool { method Clone (line 132) | func (u *UpstreamConfig) Clone() *UpstreamConfig { method GetEffectiveBaseURL (line 164) | func (u *UpstreamConfig) GetEffectiveBaseURL() string { method GetAllBaseURLs (line 179) | func (u *UpstreamConfig) GetAllBaseURLs() []string { FILE: backend-go/internal/config/env.go type EnvConfig (line 8) | type EnvConfig struct method IsDevelopment (line 88) | func (c *EnvConfig) IsDevelopment() bool { method IsProduction (line 93) | func (c *EnvConfig) IsProduction() bool { method ShouldLog (line 98) | func (c *EnvConfig) ShouldLog(level string) bool { function NewEnvConfig (line 44) | func NewEnvConfig() *EnvConfig { function getEnv (line 120) | func getEnv(key, defaultValue string) string { function getEnvAsInt (line 128) | func getEnvAsInt(key string, defaultValue int) int { function getEnvAsInt64 (line 138) | func getEnvAsInt64(key string, defaultValue int64) int64 { function getEnvAsFloat (line 148) | func getEnvAsFloat(key string, defaultValue float64) float64 { function clampInt (line 158) | func clampInt(value, minVal, maxVal int) int { FILE: backend-go/internal/converters/chat_to_responses.go type chatToResponsesState (line 15) | type chatToResponsesState struct method closeReasoningBlock (line 403) | func (st *chatToResponsesState) closeReasoningBlock(nextSeq func() int... method closeTextBlock (line 440) | func (st *chatToResponsesState) closeTextBlock(nextSeq func() int) []s... method closeFuncBlocks (line 480) | func (st *chatToResponsesState) closeFuncBlocks(nextSeq func() int) []... method generateCompletedEvents (line 542) | func (st *chatToResponsesState) generateCompletedEvents(originalReques... function emitResponsesEvent (line 50) | func emitResponsesEvent(event string, payload string) string { function ConvertOpenAIChatToResponses (line 61) | func ConvertOpenAIChatToResponses(ctx context.Context, modelName string,... function ConvertOpenAIChatToResponsesNonStream (line 721) | func ConvertOpenAIChatToResponsesNonStream(_ context.Context, _ string, ... FILE: backend-go/internal/converters/chat_to_responses_test.go function TestConvertResponsesToOpenAIChatRequest (line 12) | func TestConvertResponsesToOpenAIChatRequest(t *testing.T) { function TestConvertOpenAIChatToResponses_Stream (line 135) | func TestConvertOpenAIChatToResponses_Stream(t *testing.T) { function TestConvertOpenAIChatToResponses_ToolCall (line 197) | func TestConvertOpenAIChatToResponses_ToolCall(t *testing.T) { function TestConvertOpenAIChatToResponsesNonStream (line 247) | func TestConvertOpenAIChatToResponsesNonStream(t *testing.T) { function TestConvertOpenAIChatToResponsesNonStream_ToolCalls (line 313) | func TestConvertOpenAIChatToResponsesNonStream_ToolCalls(t *testing.T) { FILE: backend-go/internal/converters/claude_converter.go type ClaudeConverter (line 11) | type ClaudeConverter struct method ToProviderRequest (line 14) | func (c *ClaudeConverter) ToProviderRequest(sess *session.Session, req... method FromProviderResponse (line 51) | func (c *ClaudeConverter) FromProviderResponse(resp map[string]interfa... method GetProviderName (line 56) | func (c *ClaudeConverter) GetProviderName() string { FILE: backend-go/internal/converters/converter.go function OpenAIFinishReasonToAnthropic (line 12) | func OpenAIFinishReasonToAnthropic(reason string) string { function AnthropicStopReasonToOpenAI (line 31) | func AnthropicStopReasonToOpenAI(reason string) string { function OpenAIFinishReasonToResponses (line 52) | func OpenAIFinishReasonToResponses(reason string) string { type ResponsesConverter (line 69) | type ResponsesConverter interface FILE: backend-go/internal/converters/converter_test.go function TestExtractTextFromContent_String (line 12) | func TestExtractTextFromContent_String(t *testing.T) { function TestExtractTextFromContent_ContentBlockArray (line 21) | func TestExtractTextFromContent_ContentBlockArray(t *testing.T) { function TestExtractTextFromContent_MixedTypes (line 41) | func TestExtractTextFromContent_MixedTypes(t *testing.T) { function TestExtractTextFromContent_EmptyArray (line 65) | func TestExtractTextFromContent_EmptyArray(t *testing.T) { function TestOpenAIChatConverter_WithInstructions (line 76) | func TestOpenAIChatConverter_WithInstructions(t *testing.T) { function TestOpenAIChatConverter_WithMessageType (line 141) | func TestOpenAIChatConverter_WithMessageType(t *testing.T) { function TestClaudeConverter_WithInstructions (line 186) | func TestClaudeConverter_WithInstructions(t *testing.T) { function TestConverterFactory (line 229) | func TestConverterFactory(t *testing.T) { function TestOpenAIChatConverter_WithSessionHistory (line 256) | func TestOpenAIChatConverter_WithSessionHistory(t *testing.T) { function TestOpenAIFinishReasonToAnthropic (line 306) | func TestOpenAIFinishReasonToAnthropic(t *testing.T) { function TestAnthropicStopReasonToOpenAI (line 330) | func TestAnthropicStopReasonToOpenAI(t *testing.T) { function TestOpenAIFinishReasonToResponses (line 355) | func TestOpenAIFinishReasonToResponses(t *testing.T) { FILE: backend-go/internal/converters/factory.go function NewConverter (line 8) | func NewConverter(serviceType string) ResponsesConverter { FILE: backend-go/internal/converters/gemini_converter.go function GeminiToClaudeRequest (line 14) | func GeminiToClaudeRequest(geminiReq *types.GeminiRequest, model string)... function GeminiToOpenAIRequest (line 92) | func GeminiToOpenAIRequest(geminiReq *types.GeminiRequest, model string)... function ClaudeResponseToGemini (line 166) | func ClaudeResponseToGemini(claudeResp map[string]interface{}) (*types.G... function OpenAIResponseToGemini (line 249) | func OpenAIResponseToGemini(openaiResp map[string]interface{}) (*types.G... function geminiContentToClaudeMessage (line 340) | func geminiContentToClaudeMessage(content *types.GeminiContent) (map[str... function geminiContentToOpenAIMessage (line 408) | func geminiContentToOpenAIMessage(content *types.GeminiContent) (map[str... function extractTextFromGeminiParts (line 491) | func extractTextFromGeminiParts(parts []types.GeminiPart) string { function claudeStopReasonToGemini (line 502) | func claudeStopReasonToGemini(stopReason string) string { function openaiFinishReasonToGemini (line 516) | func openaiFinishReasonToGemini(finishReason string) string { function geminiFinishReasonToClaude (line 532) | func geminiFinishReasonToClaude(finishReason string) string { function geminiFinishReasonToOpenAI (line 546) | func geminiFinishReasonToOpenAI(finishReason string) string { function JSONMarshal (line 560) | func JSONMarshal(v interface{}) ([]byte, error) { function JSONUnmarshal (line 565) | func JSONUnmarshal(data []byte, v interface{}) error { FILE: backend-go/internal/converters/gemini_converter_test.go function TestClaudeResponseToGemini_WithThoughtSignature (line 10) | func TestClaudeResponseToGemini_WithThoughtSignature(t *testing.T) { function TestOpenAIResponseToGemini_WithThoughtSignature (line 79) | func TestOpenAIResponseToGemini_WithThoughtSignature(t *testing.T) { FILE: backend-go/internal/converters/openai_converter.go type OpenAIChatConverter (line 11) | type OpenAIChatConverter struct method ToProviderRequest (line 14) | func (c *OpenAIChatConverter) ToProviderRequest(sess *session.Session,... method FromProviderResponse (line 58) | func (c *OpenAIChatConverter) FromProviderResponse(resp map[string]int... method GetProviderName (line 63) | func (c *OpenAIChatConverter) GetProviderName() string { type OpenAICompletionsConverter (line 70) | type OpenAICompletionsConverter struct method ToProviderRequest (line 73) | func (c *OpenAICompletionsConverter) ToProviderRequest(sess *session.S... method FromProviderResponse (line 119) | func (c *OpenAICompletionsConverter) FromProviderResponse(resp map[str... method GetProviderName (line 124) | func (c *OpenAICompletionsConverter) GetProviderName() string { FILE: backend-go/internal/converters/responses_converter.go function ResponsesToClaudeMessages (line 16) | func ResponsesToClaudeMessages(sess *session.Session, newInput interface... function responsesItemToClaudeMessage (line 50) | func responsesItemToClaudeMessage(item types.ResponsesItem) (*types.Clau... function ClaudeResponseToResponses (line 113) | func ClaudeResponseToResponses(claudeResp map[string]interface{}, sessio... function ResponsesToOpenAIChatMessages (line 155) | func ResponsesToOpenAIChatMessages(sess *session.Session, newInput inter... function responsesItemToOpenAIMessage (line 191) | func responsesItemToOpenAIMessage(item types.ResponsesItem) map[string]i... function OpenAIChatResponseToResponses (line 234) | func OpenAIChatResponseToResponses(openaiResp map[string]interface{}, se... function extractTextFromContent (line 276) | func extractTextFromContent(content interface{}) string { function parseResponsesInput (line 313) | func parseResponsesInput(input interface{}) ([]types.ResponsesItem, erro... function generateResponseID (line 353) | func generateResponseID() string { function getCurrentTimestamp (line 358) | func getCurrentTimestamp() int64 { function ExtractTextFromResponses (line 363) | func ExtractTextFromResponses(sess *session.Session, newInput interface{... function OpenAICompletionsResponseToResponses (line 393) | func OpenAICompletionsResponseToResponses(completionsResp map[string]int... function JSONToMap (line 425) | func JSONToMap(data []byte) (map[string]interface{}, error) { function getIntFromMap (line 433) | func getIntFromMap(m map[string]interface{}, key string) (int, bool) { function parseResponsesUsage (line 454) | func parseResponsesUsage(usageRaw interface{}) types.ResponsesUsage { function parseClaudeUsage (line 513) | func parseClaudeUsage(usageRaw interface{}) types.ResponsesUsage { function parseGeminiUsage (line 585) | func parseGeminiUsage(usageRaw interface{}) types.ResponsesUsage { function ExtractUsageMetrics (line 631) | func ExtractUsageMetrics(usageRaw interface{}) types.ResponsesUsage { FILE: backend-go/internal/converters/responses_passthrough.go type ResponsesPassthroughConverter (line 12) | type ResponsesPassthroughConverter struct method ToProviderRequest (line 15) | func (c *ResponsesPassthroughConverter) ToProviderRequest(sess *sessio... method FromProviderResponse (line 36) | func (c *ResponsesPassthroughConverter) FromProviderResponse(resp map[... method GetProviderName (line 76) | func (c *ResponsesPassthroughConverter) GetProviderName() string { FILE: backend-go/internal/converters/responses_to_chat.go function ConvertResponsesToOpenAIChatRequest (line 24) | func ConvertResponsesToOpenAIChatRequest(modelName string, inputRawJSON ... function convertInputArrayToMessages (line 118) | func convertInputArrayToMessages(input gjson.Result, out string) string { function convertMessageItem (line 145) | func convertMessageItem(item gjson.Result, out string) string { function convertFunctionCallItem (line 197) | func convertFunctionCallItem(item gjson.Result, out string) string { function convertFunctionCallOutputItem (line 222) | func convertFunctionCallOutputItem(item gjson.Result, out string) string { function convertToolsToOpenAIFormat (line 239) | func convertToolsToOpenAIFormat(tools gjson.Result, out string) string { FILE: backend-go/internal/handlers/channel_metrics_handler.go function GetChannelMetricsWithConfig (line 15) | func GetChannelMetricsWithConfig(metricsManager *metrics.MetricsManager,... function GetAllKeyMetrics (line 62) | func GetAllKeyMetrics(metricsManager *metrics.MetricsManager) gin.Handle... function GetChannelMetrics (line 107) | func GetChannelMetrics(metricsManager *metrics.MetricsManager) gin.Handl... function GetResponsesChannelMetrics (line 153) | func GetResponsesChannelMetrics(metricsManager *metrics.MetricsManager) ... function ResumeChannel (line 159) | func ResumeChannel(sch *scheduler.ChannelScheduler, isResponses bool) gi... function GetSchedulerStats (line 183) | func GetSchedulerStats(sch *scheduler.ChannelScheduler) gin.HandlerFunc { function SetChannelPromotion (line 216) | func SetChannelPromotion(cfgManager ConfigManager) gin.HandlerFunc { function SetResponsesChannelPromotion (line 256) | func SetResponsesChannelPromotion(cfgManager ResponsesConfigManager) gin... type ConfigManager (line 295) | type ConfigManager interface type ResponsesConfigManager (line 300) | type ResponsesConfigManager interface type MetricsHistoryResponse (line 305) | type MetricsHistoryResponse struct function GetChannelMetricsHistory (line 315) | func GetChannelMetricsHistory(metricsManager *metrics.MetricsManager, cf... type ChannelKeyMetricsHistoryResponse (line 384) | type ChannelKeyMetricsHistoryResponse struct type KeyMetricsHistoryResult (line 391) | type KeyMetricsHistoryResult struct function GetChannelKeyMetricsHistory (line 408) | func GetChannelKeyMetricsHistory(metricsManager *metrics.MetricsManager,... function truncateKeyMask (line 525) | func truncateKeyMask(keyMask string, maxLen int) string { function GetChannelDashboard (line 535) | func GetChannelDashboard(cfgManager *config.ConfigManager, sch *schedule... function GetGeminiChannelMetricsHistory (line 648) | func GetGeminiChannelMetricsHistory(metricsManager *metrics.MetricsManag... function GetGeminiChannelKeyMetricsHistory (line 709) | func GetGeminiChannelKeyMetricsHistory(metricsManager *metrics.MetricsMa... function GetGeminiChannelMetrics (line 817) | func GetGeminiChannelMetrics(metricsManager *metrics.MetricsManager, cfg... FILE: backend-go/internal/handlers/common/client_error_test.go function TestIsClientSideError (line 10) | func TestIsClientSideError(t *testing.T) { FILE: backend-go/internal/handlers/common/failover.go type FailoverError (line 13) | type FailoverError struct function ShouldRetryWithNextKey (line 32) | func ShouldRetryWithNextKey(statusCode int, bodyBytes []byte, fuzzyMode ... function shouldRetryWithNextKeyFuzzy (line 44) | func shouldRetryWithNextKeyFuzzy(statusCode int, bodyBytes []byte, apiTy... function shouldRetryWithNextKeyNormal (line 79) | func shouldRetryWithNextKeyNormal(statusCode int, bodyBytes []byte, apiT... function classifyByStatusCode (line 112) | func classifyByStatusCode(statusCode int) (bool, bool) { function classifyByErrorMessage (line 159) | func classifyByErrorMessage(bodyBytes []byte, apiType string) (bool, boo... function classifyMessage (line 215) | func classifyMessage(msg string) (bool, bool) { function classifyErrorType (line 261) | func classifyErrorType(errType string) (bool, bool) { function HandleAllChannelsFailed (line 305) | func HandleAllChannelsFailed(c *gin.Context, fuzzyMode bool, lastFailove... function HandleAllKeysFailed (line 343) | func HandleAllKeysFailed(c *gin.Context, fuzzyMode bool, lastFailoverErr... function getMapKeys (line 381) | func getMapKeys(m map[string]interface{}) []string { function isNonRetryableErrorCode (line 391) | func isNonRetryableErrorCode(code string) bool { function isNonRetryableError (line 414) | func isNonRetryableError(bodyBytes []byte) bool { FILE: backend-go/internal/handlers/common/failover_test.go function TestClassifyByStatusCode (line 9) | func TestClassifyByStatusCode(t *testing.T) { function TestClassifyMessage (line 64) | func TestClassifyMessage(t *testing.T) { function TestClassifyErrorType (line 114) | func TestClassifyErrorType(t *testing.T) { function TestClassifyByErrorMessage (line 158) | func TestClassifyByErrorMessage(t *testing.T) { function TestClassifyByErrorMessage_InvalidJSON (line 298) | func TestClassifyByErrorMessage_InvalidJSON(t *testing.T) { function TestShouldRetryWithNextKey_403WithPredeductQuotaError (line 316) | func TestShouldRetryWithNextKey_403WithPredeductQuotaError(t *testing.T) { function TestClassifyMessage_ChineseQuotaKeywords (line 331) | func TestClassifyMessage_ChineseQuotaKeywords(t *testing.T) { function TestShouldRetryWithNextKey (line 357) | func TestShouldRetryWithNextKey(t *testing.T) { function TestShouldRetryWithNextKeyFuzzyMode (line 477) | func TestShouldRetryWithNextKeyFuzzyMode(t *testing.T) { function TestShouldRetryWithNextKey_FuzzyMode_403WithQuotaMessage (line 590) | func TestShouldRetryWithNextKey_FuzzyMode_403WithQuotaMessage(t *testing... function TestIsNonRetryableErrorCode (line 649) | func TestIsNonRetryableErrorCode(t *testing.T) { function TestShouldRetryWithNextKey_SensitiveWordsDetected (line 691) | func TestShouldRetryWithNextKey_SensitiveWordsDetected(t *testing.T) { FILE: backend-go/internal/handlers/common/multi_channel_failover.go type MultiChannelAttemptResult (line 14) | type MultiChannelAttemptResult struct type TrySelectedChannelFunc (line 25) | type TrySelectedChannelFunc type OnMultiChannelHandledFunc (line 28) | type OnMultiChannelHandledFunc type HandleAllFailedFunc (line 31) | type HandleAllFailedFunc function HandleMultiChannelFailover (line 35) | func HandleMultiChannelFailover( FILE: backend-go/internal/handlers/common/request.go function ReadRequestBody (line 23) | func ReadRequestBody(c *gin.Context, maxBodySize int64) ([]byte, error) { function RestoreRequestBody (line 44) | func RestoreRequestBody(c *gin.Context, bodyBytes []byte) { function SendRequest (line 51) | func SendRequest(req *http.Request, upstream *config.UpstreamConfig, env... function logRequestDetails (line 79) | func logRequestDetails(req *http.Request, envCfg *config.EnvConfig, apiT... function LogOriginalRequest (line 112) | func LogOriginalRequest(c *gin.Context, bodyBytes []byte, envCfg *config... function AreAllKeysSuspended (line 147) | func AreAllKeysSuspended(metricsManager *metrics.MetricsManager, baseURL... function RemoveEmptySignatures (line 165) | func RemoveEmptySignatures(bodyBytes []byte, enableLog bool, apiType str... function removeEmptySignaturesInMessages (line 193) | func removeEmptySignaturesInMessages(data map[string]interface{}) (bool,... function ExtractUserID (line 237) | func ExtractUserID(bodyBytes []byte) string { function ExtractConversationID (line 251) | func ExtractConversationID(c *gin.Context, bodyBytes []byte) string { FILE: backend-go/internal/handlers/common/stream.go type StreamContext (line 22) | type StreamContext struct type CollectedUsageData (line 46) | type CollectedUsageData struct function NewStreamContext (line 58) | func NewStreamContext(envCfg *config.EnvConfig) *StreamContext { function seedSynthesizerFromRequest (line 73) | func seedSynthesizerFromRequest(ctx *StreamContext, requestBody []byte) { function SetupStreamHeaders (line 113) | func SetupStreamHeaders(c *gin.Context, resp *http.Response) { function ProcessStreamEvents (line 124) | func ProcessStreamEvents( function ProcessStreamEvent (line 166) | func ProcessStreamEvent( function updateCollectedUsage (line 326) | func updateCollectedUsage(collected *CollectedUsageData, usageData Colle... function inferImplicitCacheRead (line 355) | func inferImplicitCacheRead(ctx *StreamContext, enableLog bool) { function logStreamCompletion (line 386) | func logStreamCompletion(ctx *StreamContext, envCfg *config.EnvConfig, s... function logPartialResponse (line 431) | func logPartialResponse(ctx *StreamContext, envCfg *config.EnvConfig) { function logSynthesizedContent (line 438) | func logSynthesizedContent(ctx *StreamContext) { function IsClientDisconnectError (line 462) | func IsClientDisconnectError(err error) bool { function HandleStreamResponse (line 468) | func HandleStreamResponse( function CheckEventUsageStatus (line 506) | func CheckEventUsageStatus(event string, enableLog bool) (bool, bool, bo... function checkUsageFieldsWithPatch (line 548) | func checkUsageFieldsWithPatch(usage interface{}) (bool, bool, bool) { function extractUsageFromMap (line 580) | func extractUsageFromMap(usage map[string]interface{}) CollectedUsageData { function logUsageDetection (line 618) | func logUsageDetection(location string, usage map[string]interface{}, ne... function HasEventWithUsage (line 629) | func HasEventWithUsage(event string) bool { function PatchTokensInEvent (line 655) | func PatchTokensInEvent(event string, estimatedInputTokens, estimatedOut... function PatchTokensInEventWithCache (line 703) | func PatchTokensInEventWithCache(event string, estimatedInputTokens, est... function PatchMessageStartInputTokensIfNeeded (line 771) | func PatchMessageStartInputTokensIfNeeded(event string, requestBody []by... function patchUsageFieldsWithLog (line 799) | func patchUsageFieldsWithLog(usage map[string]interface{}, estimatedInpu... function abs (line 891) | func abs(x int) int { function BuildStreamErrorEvent (line 899) | func BuildStreamErrorEvent(err error) string { function BuildUsageEvent (line 912) | func BuildUsageEvent(requestBody []byte, outputText string) string { function IsMessageStartEvent (line 928) | func IsMessageStartEvent(event string) bool { function PatchMessageStartEvent (line 934) | func PatchMessageStartEvent(event string, requestModel string, rewriteMo... function IsMessageStopEvent (line 1005) | func IsMessageStopEvent(event string) bool { function IsMessageDeltaEvent (line 1029) | func IsMessageDeltaEvent(event string) bool { function ExtractInputTokensFromEvent (line 1051) | func ExtractInputTokensFromEvent(event string) int { function ExtractTextFromEvent (line 1083) | func ExtractTextFromEvent(event string, buf *bytes.Buffer) { function extractSSEEventInfo (line 1115) | func extractSSEEventInfo(event string) (eventType string, blockIndex int... function truncateForLog (line 1143) | func truncateForLog(s string, maxLen int) string { FILE: backend-go/internal/handlers/common/stream_test.go function TestPatchUsageFieldsWithLog_NilInputTokens (line 11) | func TestPatchUsageFieldsWithLog_NilInputTokens(t *testing.T) { function TestPatchMessageStartInputTokensIfNeeded (line 63) | func TestPatchMessageStartInputTokensIfNeeded(t *testing.T) { function TestInferImplicitCacheRead (line 168) | func TestInferImplicitCacheRead(t *testing.T) { function TestPatchTokensInEventWithCache (line 276) | func TestPatchTokensInEventWithCache(t *testing.T) { FILE: backend-go/internal/handlers/common/upstream_failover.go function isClientSideError (line 23) | func isClientSideError(err error) bool { type NextAPIKeyFunc (line 32) | type NextAPIKeyFunc type BuildRequestFunc (line 35) | type BuildRequestFunc type DeprioritizeKeyFunc (line 38) | type DeprioritizeKeyFunc type HandleSuccessFunc (line 42) | type HandleSuccessFunc function TryUpstreamWithAllKeys (line 51) | func TryUpstreamWithAllKeys( function BuildDefaultURLResults (line 240) | func BuildDefaultURLResults(urls []string) []warmup.URLLatencyResult { FILE: backend-go/internal/handlers/frontend.go function ServeFrontend (line 13) | func ServeFrontend(r *gin.Engine, frontendFS embed.FS) { function isAPIPath (line 76) | func isAPIPath(path string) bool { function getContentType (line 94) | func getContentType(path string) string { function getErrorPage (line 141) | func getErrorPage() string { FILE: backend-go/internal/handlers/gemini/channels.go function GetUpstreams (line 17) | func GetUpstreams(cfgManager *config.ConfigManager) gin.HandlerFunc { function AddUpstream (line 55) | func AddUpstream(cfgManager *config.ConfigManager) gin.HandlerFunc { function UpdateUpstream (line 73) | func UpdateUpstream(cfgManager *config.ConfigManager, sch *scheduler.Cha... function DeleteUpstream (line 104) | func DeleteUpstream(cfgManager *config.ConfigManager, sch *scheduler.Cha... function AddApiKey (line 131) | func AddApiKey(cfgManager *config.ConfigManager) gin.HandlerFunc { function DeleteApiKey (line 167) | func DeleteApiKey(cfgManager *config.ConfigManager) gin.HandlerFunc { function MoveApiKeyToTop (line 200) | func MoveApiKeyToTop(cfgManager *config.ConfigManager) gin.HandlerFunc { function MoveApiKeyToBottom (line 214) | func MoveApiKeyToBottom(cfgManager *config.ConfigManager) gin.HandlerFunc { function ReorderChannels (line 228) | func ReorderChannels(cfgManager *config.ConfigManager) gin.HandlerFunc { function SetChannelStatus (line 251) | func SetChannelStatus(cfgManager *config.ConfigManager) gin.HandlerFunc { function SetChannelPromotion (line 286) | func SetChannelPromotion(cfgManager *config.ConfigManager) gin.HandlerFu... function PingChannel (line 325) | func PingChannel(cfgManager *config.ConfigManager) gin.HandlerFunc { function PingAllChannels (line 379) | func PingAllChannels(cfgManager *config.ConfigManager) gin.HandlerFunc { function UpdateLoadBalance (line 436) | func UpdateLoadBalance(cfgManager *config.ConfigManager) gin.HandlerFunc { FILE: backend-go/internal/handlers/gemini/dashboard.go function GetDashboard (line 14) | func GetDashboard(cfgManager *config.ConfigManager, sch *scheduler.Chann... FILE: backend-go/internal/handlers/gemini/dashboard_test.go function TestGetDashboard_IncludesStripThoughtSignature (line 20) | func TestGetDashboard_IncludesStripThoughtSignature(t *testing.T) { FILE: backend-go/internal/handlers/gemini/handler.go function Handler (line 26) | func Handler( function extractModelName (line 103) | func extractModelName(param string) string { function handleMultiChannel (line 115) | func handleMultiChannel( function handleSingleChannel (line 196) | func handleSingleChannel( function ensureThoughtSignatures (line 280) | func ensureThoughtSignatures(geminiReq *types.GeminiRequest) { function stripThoughtSignature (line 293) | func stripThoughtSignature(geminiReq *types.GeminiRequest) { function cloneGeminiRequest (line 306) | func cloneGeminiRequest(req *types.GeminiRequest) *types.GeminiRequest { function buildProviderRequest (line 314) | func buildProviderRequest( function handleSuccess (line 448) | func handleSuccess( function handleAllChannelsFailed (line 547) | func handleAllChannelsFailed(c *gin.Context, failoverErr *common.Failove... function handleAllKeysFailed (line 568) | func handleAllKeysFailed(c *gin.Context, failoverErr *common.FailoverErr... FILE: backend-go/internal/handlers/gemini/handler_test.go function TestHandler_RequiresProxyAccessKeyEvenWhenGeminiKeyProvided (line 16) | func TestHandler_RequiresProxyAccessKeyEvenWhenGeminiKeyProvided(t *test... function TestStripThoughtSignature (line 54) | func TestStripThoughtSignature(t *testing.T) { function TestBuildProviderRequest_StripThoughtSignature (line 249) | func TestBuildProviderRequest_StripThoughtSignature(t *testing.T) { function TestBuildProviderRequest_InjectDummyThoughtSignature_PreservesThoughtSignatureAtPartLevel (line 359) | func TestBuildProviderRequest_InjectDummyThoughtSignature_PreservesThoug... FILE: backend-go/internal/handlers/gemini/stream.go function handleStreamSuccess (line 18) | func handleStreamSuccess( function streamGeminiToGemini (line 60) | func streamGeminiToGemini( function streamClaudeToGemini (line 105) | func streamClaudeToGemini( function streamOpenAIToGemini (line 212) | func streamOpenAIToGemini( function openaiFinishReasonToGemini (line 353) | func openaiFinishReasonToGemini(finishReason string) string { FILE: backend-go/internal/handlers/global_stats_handler.go function GetGlobalStatsHistory (line 12) | func GetGlobalStatsHistory(metricsManager *metrics.MetricsManager) gin.H... FILE: backend-go/internal/handlers/health.go function HealthCheck (line 11) | func HealthCheck(envCfg *config.EnvConfig, cfgManager *config.ConfigMana... function getVersion (line 33) | func getVersion() gin.H { function getVersionString (line 51) | func getVersionString() string { return versionString } function getBuildTime (line 52) | func getBuildTime() string { return buildTime } function getGitCommit (line 53) | func getGitCommit() string { return gitCommit } function SetVersionInfo (line 56) | func SetVersionInfo(version, build, commit string) { function SaveConfigHandler (line 63) | func SaveConfigHandler(cfgManager *config.ConfigManager) gin.HandlerFunc { function DevInfo (line 90) | func DevInfo(envCfg *config.EnvConfig, cfgManager *config.ConfigManager)... FILE: backend-go/internal/handlers/messages/channels.go function GetUpstreams (line 18) | func GetUpstreams(cfgManager *config.ConfigManager) gin.HandlerFunc { function AddUpstream (line 54) | func AddUpstream(cfgManager *config.ConfigManager) gin.HandlerFunc { function UpdateUpstream (line 75) | func UpdateUpstream(cfgManager *config.ConfigManager, sch *scheduler.Cha... function DeleteUpstream (line 113) | func DeleteUpstream(cfgManager *config.ConfigManager, sch *scheduler.Cha... function AddApiKey (line 143) | func AddApiKey(cfgManager *config.ConfigManager) gin.HandlerFunc { function DeleteApiKey (line 179) | func DeleteApiKey(cfgManager *config.ConfigManager) gin.HandlerFunc { function MoveApiKeyToTop (line 212) | func MoveApiKeyToTop(cfgManager *config.ConfigManager) gin.HandlerFunc { function MoveApiKeyToBottom (line 237) | func MoveApiKeyToBottom(cfgManager *config.ConfigManager) gin.HandlerFunc { function UpdateLoadBalance (line 262) | func UpdateLoadBalance(cfgManager *config.ConfigManager) gin.HandlerFunc { function ReorderChannels (line 289) | func ReorderChannels(cfgManager *config.ConfigManager) gin.HandlerFunc { function SetChannelStatus (line 309) | func SetChannelStatus(cfgManager *config.ConfigManager) gin.HandlerFunc { function SetChannelPromotion (line 337) | func SetChannelPromotion(cfgManager *config.ConfigManager) gin.HandlerFu... function PingChannel (line 377) | func PingChannel(cfgManager *config.ConfigManager) gin.HandlerFunc { function pingChannelURLs (line 399) | func pingChannelURLs(ch *config.UpstreamConfig) gin.H { function pingURL (line 466) | func pingURL(testURL string, insecureSkipVerify bool) gin.H { function PingAllChannels (line 484) | func PingAllChannels(cfgManager *config.ConfigManager) gin.HandlerFunc { FILE: backend-go/internal/handlers/messages/handler.go function Handler (line 24) | func Handler(envCfg *config.EnvConfig, cfgManager *config.ConfigManager,... function handleMultiChannel (line 69) | func handleMultiChannel( function handleSingleChannel (line 159) | func handleSingleChannel( function handleNormalResponse (line 238) | func handleNormalResponse( function CountTokensHandler (line 362) | func CountTokensHandler(envCfg *config.EnvConfig, cfgManager *config.Con... FILE: backend-go/internal/handlers/messages/models.go constant modelsRequestTimeout (line 21) | modelsRequestTimeout = 30 * time.Second type ModelsResponse (line 24) | type ModelsResponse struct type ModelEntry (line 30) | type ModelEntry struct function ModelsHandler (line 38) | func ModelsHandler(envCfg *config.EnvConfig, cfgManager *config.ConfigMa... function ModelsDetailHandler (line 75) | func ModelsDetailHandler(envCfg *config.EnvConfig, cfgManager *config.Co... function fetchModelsFromChannels (line 115) | func fetchModelsFromChannels(c *gin.Context, cfgManager *config.ConfigMa... function mergeModels (line 135) | func mergeModels(models1, models2 []ModelEntry) []ModelEntry { function tryModelsRequest (line 159) | func tryModelsRequest(c *gin.Context, cfgManager *config.ConfigManager, ... function buildModelsURL (line 241) | func buildModelsURL(baseURL string) string { FILE: backend-go/internal/handlers/responses/channels.go function GetUpstreams (line 14) | func GetUpstreams(cfgManager *config.ConfigManager) gin.HandlerFunc { function AddUpstream (line 50) | func AddUpstream(cfgManager *config.ConfigManager) gin.HandlerFunc { function UpdateUpstream (line 68) | func UpdateUpstream(cfgManager *config.ConfigManager, sch *scheduler.Cha... function DeleteUpstream (line 99) | func DeleteUpstream(cfgManager *config.ConfigManager, sch *scheduler.Cha... function AddApiKey (line 126) | func AddApiKey(cfgManager *config.ConfigManager) gin.HandlerFunc { function DeleteApiKey (line 162) | func DeleteApiKey(cfgManager *config.ConfigManager) gin.HandlerFunc { function MoveApiKeyToTop (line 195) | func MoveApiKeyToTop(cfgManager *config.ConfigManager) gin.HandlerFunc { function MoveApiKeyToBottom (line 209) | func MoveApiKeyToBottom(cfgManager *config.ConfigManager) gin.HandlerFunc { function UpdateLoadBalance (line 223) | func UpdateLoadBalance(cfgManager *config.ConfigManager) gin.HandlerFunc { function ReorderChannels (line 250) | func ReorderChannels(cfgManager *config.ConfigManager) gin.HandlerFunc { function SetChannelStatus (line 273) | func SetChannelStatus(cfgManager *config.ConfigManager) gin.HandlerFunc { FILE: backend-go/internal/handlers/responses/compact.go type compactError (line 22) | type compactError struct function CompactHandler (line 30) | func CompactHandler( function handleSingleChannelCompact (line 65) | func handleSingleChannelCompact( function handleMultiChannelCompact (line 130) | func handleMultiChannelCompact( function tryCompactChannelWithAllKeys (line 190) | func tryCompactChannelWithAllKeys( function tryCompactWithKey (line 249) | func tryCompactWithKey( function buildCompactURL (line 291) | func buildCompactURL(upstream *config.UpstreamConfig) string { FILE: backend-go/internal/handlers/responses/handler.go function Handler (line 29) | func Handler( function handleMultiChannel (line 75) | func handleMultiChannel( function handleSingleChannel (line 158) | func handleSingleChannel( function handleSuccess (line 231) | func handleSuccess( function patchResponsesUsage (line 339) | func patchResponsesUsage(resp *types.ResponsesResponse, requestBody []by... function estimateResponsesOutputFromItems (line 399) | func estimateResponsesOutputFromItems(output []types.ResponsesItem) int { function handleStreamSuccess (line 457) | func handleStreamSuccess( type responsesStreamUsage (line 633) | type responsesStreamUsage struct function extractResponsesTextFromEvent (line 646) | func extractResponsesTextFromEvent(event string, buf *bytes.Buffer) { function checkResponsesEventUsage (line 696) | func checkResponsesEventUsage(event string, enableLog bool) (bool, bool,... function extractResponsesUsageFromMap (line 750) | func extractResponsesUsageFromMap(usage map[string]interface{}) response... function updateResponsesStreamUsage (line 818) | func updateResponsesStreamUsage(collected *responsesStreamUsage, usageDa... function isResponsesCompletedEvent (line 850) | func isResponsesCompletedEvent(event string) bool { function isClientDisconnectError (line 856) | func isClientDisconnectError(err error) bool { function injectResponsesUsageToCompletedEvent (line 863) | func injectResponsesUsageToCompletedEvent(event string, requestBody []by... function patchResponsesCompletedEventUsage (line 1042) | func patchResponsesCompletedEventUsage(event string, requestBody []byte,... function parseInputToItems (line 1124) | func parseInputToItems(input interface{}) ([]types.ResponsesItem, error) { FILE: backend-go/internal/handlers/settings.go function GetFuzzyMode (line 10) | func GetFuzzyMode(cfgManager *config.ConfigManager) gin.HandlerFunc { function SetFuzzyMode (line 19) | func SetFuzzyMode(cfgManager *config.ConfigManager) gin.HandlerFunc { FILE: backend-go/internal/httpclient/client.go type ClientManager (line 14) | type ClientManager struct method GetStandardClient (line 30) | func (cm *ClientManager) GetStandardClient(timeout time.Duration, inse... method GetStreamClient (line 77) | func (cm *ClientManager) GetStreamClient(insecure bool) *http.Client { function GetManager (line 24) | func GetManager() *ClientManager { FILE: backend-go/internal/logger/logger.go type Config (line 14) | type Config struct function DefaultConfig (line 32) | func DefaultConfig() *Config { function Setup (line 45) | func Setup(cfg *Config) error { FILE: backend-go/internal/metrics/channel_metrics.go type RequestRecord (line 16) | type RequestRecord struct type KeyMetrics (line 26) | type KeyMetrics struct type ChannelMetrics (line 47) | type ChannelMetrics struct type TimeWindowStats (line 63) | type TimeWindowStats struct type MetricsManager (line 79) | type MetricsManager struct method loadFromStore (line 158) | func (m *MetricsManager) loadFromStore() error { method getOrCreateKeyLocked (line 238) | func (m *MetricsManager) getOrCreateKeyLocked(baseURL, metricsKey, key... method getOrCreateKey (line 266) | func (m *MetricsManager) getOrCreateKey(baseURL, apiKey string) *KeyMe... method RecordSuccess (line 283) | func (m *MetricsManager) RecordSuccess(baseURL, apiKey string) { method RecordSuccessWithUsage (line 288) | func (m *MetricsManager) RecordSuccessWithUsage(baseURL, apiKey string... method recordSuccessWithUsageLocked (line 295) | func (m *MetricsManager) recordSuccessWithUsageLocked(baseURL, apiKey ... method RecordFailure (line 346) | func (m *MetricsManager) RecordFailure(baseURL, apiKey string) { method recordFailureLocked (line 353) | func (m *MetricsManager) recordFailureLocked(baseURL, apiKey string, n... method RecordRequestConnected (line 392) | func (m *MetricsManager) RecordRequestConnected(baseURL, apiKey string... method RecordRequestConnectedAt (line 397) | func (m *MetricsManager) RecordRequestConnectedAt(baseURL, apiKey stri... method RecordRequestFinalizeSuccess (line 424) | func (m *MetricsManager) RecordRequestFinalizeSuccess(baseURL, apiKey ... method RecordRequestFinalizeFailure (line 498) | func (m *MetricsManager) RecordRequestFinalizeFailure(baseURL, apiKey ... method RecordRequestFinalizeClientCancel (line 559) | func (m *MetricsManager) RecordRequestFinalizeClientCancel(baseURL, ap... method RecordRequestStart (line 593) | func (m *MetricsManager) RecordRequestStart(baseURL, apiKey string) { method RecordRequestEnd (line 602) | func (m *MetricsManager) RecordRequestEnd(baseURL, apiKey string) { method isKeyCircuitBroken (line 615) | func (m *MetricsManager) isKeyCircuitBroken(metrics *KeyMetrics) bool { method calculateKeyFailureRateInternal (line 625) | func (m *MetricsManager) calculateKeyFailureRateInternal(metrics *KeyM... method appendToWindowKey (line 639) | func (m *MetricsManager) appendToWindowKey(metrics *KeyMetrics, succes... method appendToHistoryKey (line 648) | func (m *MetricsManager) appendToHistoryKey(metrics *KeyMetrics, times... method cleanupHistoryLocked (line 654) | func (m *MetricsManager) cleanupHistoryLocked(metrics *KeyMetrics) { method appendToHistoryKeyWithUsage (line 696) | func (m *MetricsManager) appendToHistoryKeyWithUsage(metrics *KeyMetri... method IsKeyHealthy (line 711) | func (m *MetricsManager) IsKeyHealthy(baseURL, apiKey string) bool { method IsChannelHealthyWithKeys (line 726) | func (m *MetricsManager) IsChannelHealthyWithKeys(baseURL string, acti... method CalculateKeyFailureRate (line 767) | func (m *MetricsManager) CalculateKeyFailureRate(baseURL, apiKey strin... method CalculateChannelFailureRate (line 781) | func (m *MetricsManager) CalculateChannelFailureRate(baseURL string, a... method GetKeyMetrics (line 812) | func (m *MetricsManager) GetKeyMetrics(baseURL, apiKey string) *KeyMet... method GetChannelAggregatedMetrics (line 836) | func (m *MetricsManager) GetChannelAggregatedMetrics(channelIndex int,... method GetChannelKeyUsageInfo (line 890) | func (m *MetricsManager) GetChannelKeyUsageInfo(baseURL string, apiKey... method GetChannelKeyUsageInfoMultiURL (line 943) | func (m *MetricsManager) GetChannelKeyUsageInfoMultiURL(baseURLs []str... method GetAllKeyMetrics (line 1054) | func (m *MetricsManager) GetAllKeyMetrics() []*KeyMetrics { method GetTimeWindowStatsForKey (line 1077) | func (m *MetricsManager) GetTimeWindowStatsForKey(baseURL, apiKey stri... method GetAllTimeWindowStatsForKey (line 1115) | func (m *MetricsManager) GetAllTimeWindowStatsForKey(baseURL, apiKey s... method ResetKeyFailureState (line 1126) | func (m *MetricsManager) ResetKeyFailureState(baseURL, apiKey string) { method ResetKey (line 1140) | func (m *MetricsManager) ResetKey(baseURL, apiKey string) { method ResetAll (line 1167) | func (m *MetricsManager) ResetAll() { method Stop (line 1175) | func (m *MetricsManager) Stop() { method DeleteKeysForChannel (line 1183) | func (m *MetricsManager) DeleteKeysForChannel(baseURLs, apiKeys []stri... method DeleteChannelMetrics (line 1212) | func (m *MetricsManager) DeleteChannelMetrics(baseURLs, apiKeys []stri... method cleanupCircuitBreakers (line 1233) | func (m *MetricsManager) cleanupCircuitBreakers() { method recoverExpiredCircuitBreakers (line 1254) | func (m *MetricsManager) recoverExpiredCircuitBreakers() { method cleanupStaleKeys (line 1274) | func (m *MetricsManager) cleanupStaleKeys() { method GetCircuitRecoveryTime (line 1305) | func (m *MetricsManager) GetCircuitRecoveryTime() time.Duration { method GetFailureThreshold (line 1310) | func (m *MetricsManager) GetFailureThreshold() float64 { method GetWindowSize (line 1315) | func (m *MetricsManager) GetWindowSize() int { method ToResponseMultiURL (line 1353) | func (m *MetricsManager) ToResponseMultiURL(channelIndex int, baseURLs... method ToResponse (line 1519) | func (m *MetricsManager) ToResponse(channelIndex int, baseURL string, ... method calculateAggregatedTimeWindowsInternal (line 1619) | func (m *MetricsManager) calculateAggregatedTimeWindowsInternal(baseUR... method calculateAggregatedTimeWindowsMultiURL (line 1683) | func (m *MetricsManager) calculateAggregatedTimeWindowsMultiURL(baseUR... method IsChannelHealthy (line 1754) | func (m *MetricsManager) IsChannelHealthy(channelIndex int) bool { method CalculateFailureRate (line 1760) | func (m *MetricsManager) CalculateFailureRate(channelIndex int) float64 { method CalculateSuccessRate (line 1765) | func (m *MetricsManager) CalculateSuccessRate(channelIndex int) float64 { method Reset (line 1770) | func (m *MetricsManager) Reset(channelIndex int) { method GetMetrics (line 1775) | func (m *MetricsManager) GetMetrics(channelIndex int) *ChannelMetrics { method GetAllMetrics (line 1780) | func (m *MetricsManager) GetAllMetrics() []*ChannelMetrics { method GetTimeWindowStats (line 1785) | func (m *MetricsManager) GetTimeWindowStats(channelIndex int, duration... method GetAllTimeWindowStats (line 1790) | func (m *MetricsManager) GetAllTimeWindowStats(channelIndex int) map[s... method ShouldSuspend (line 1800) | func (m *MetricsManager) ShouldSuspend(channelIndex int) bool { method ShouldSuspendKey (line 1805) | func (m *MetricsManager) ShouldSuspendKey(baseURL, apiKey string) bool { method GetHistoricalStats (line 1851) | func (m *MetricsManager) GetHistoricalStats(baseURL string, activeKeys... method GetHistoricalStatsMultiURL (line 1924) | func (m *MetricsManager) GetHistoricalStatsMultiURL(baseURLs []string,... method GetAllKeysHistoricalStats (line 2005) | func (m *MetricsManager) GetAllKeysHistoricalStats(duration, interval ... method GetKeyHistoricalStats (line 2073) | func (m *MetricsManager) GetKeyHistoricalStats(baseURL, apiKey string,... method GetKeyHistoricalStatsMultiURL (line 2162) | func (m *MetricsManager) GetKeyHistoricalStatsMultiURL(baseURLs []stri... method GetGlobalHistoricalStatsWithTokens (line 2305) | func (m *MetricsManager) GetGlobalHistoricalStatsWithTokens(duration, ... method GetRecentActivityMultiURL (line 2466) | func (m *MetricsManager) GetRecentActivityMultiURL(channelIndex int, b... function NewMetricsManager (line 94) | func NewMetricsManager() *MetricsManager { function NewMetricsManagerWithConfig (line 108) | func NewMetricsManagerWithConfig(windowSize int, failureThreshold float6... function NewMetricsManagerWithPersistence (line 128) | func NewMetricsManagerWithPersistence(windowSize int, failureThreshold f... function generateMetricsKey (line 254) | func generateMetricsKey(baseURL, apiKey string) string { function GenerateMetricsKey (line 261) | func GenerateMetricsKey(baseURL, apiKey string) string { type KeyUsageInfo (line 881) | type KeyUsageInfo struct function SelectTopKeys (line 1016) | func SelectTopKeys(infos []KeyUsageInfo, maxDisplay int) []KeyUsageInfo { type MetricsResponse (line 1322) | type MetricsResponse struct type KeyMetricsResponse (line 1340) | type KeyMetricsResponse struct type HistoryDataPoint (line 1827) | type HistoryDataPoint struct type KeyHistoryDataPoint (line 1836) | type KeyHistoryDataPoint struct type bucketData (line 1999) | type bucketData struct type keyBucketData (line 2259) | type keyBucketData struct type GlobalHistoryDataPoint (line 2272) | type GlobalHistoryDataPoint struct type GlobalStatsSummary (line 2285) | type GlobalStatsSummary struct type GlobalStatsHistoryResponse (line 2298) | type GlobalStatsHistoryResponse struct type globalBucketData (line 2420) | type globalBucketData struct function CalculateTodayDuration (line 2431) | func CalculateTodayDuration() time.Duration { type ActivitySegment (line 2440) | type ActivitySegment struct type ChannelRecentActivity (line 2449) | type ChannelRecentActivity struct FILE: backend-go/internal/metrics/channel_metrics_activity_test.go function floatEquals (line 10) | func floatEquals(a, b, epsilon float64) bool { function TestGetRecentActivityMultiURL_EmptyInputs (line 14) | func TestGetRecentActivityMultiURL_EmptyInputs(t *testing.T) { function TestGetRecentActivityMultiURL_SegmentBoundaries (line 37) | func TestGetRecentActivityMultiURL_SegmentBoundaries(t *testing.T) { function TestGetRecentActivityMultiURL_FailureCount (line 116) | func TestGetRecentActivityMultiURL_FailureCount(t *testing.T) { function TestGetRecentActivityMultiURL_MultipleURLs (line 161) | func TestGetRecentActivityMultiURL_MultipleURLs(t *testing.T) { function TestGetRecentActivityMultiURL_MultipleKeys (line 204) | func TestGetRecentActivityMultiURL_MultipleKeys(t *testing.T) { function TestGetRecentActivityMultiURL_MultipleURLsAndKeys (line 247) | func TestGetRecentActivityMultiURL_MultipleURLsAndKeys(t *testing.T) { FILE: backend-go/internal/metrics/channel_metrics_cache_stats_test.go function TestToResponse_TimeWindowsIncludesCacheStats (line 10) | func TestToResponse_TimeWindowsIncludesCacheStats(t *testing.T) { function TestRecordSuccessWithUsage_CacheCreationFallbackFromTTLBreakdown (line 53) | func TestRecordSuccessWithUsage_CacheCreationFallbackFromTTLBreakdown(t ... FILE: backend-go/internal/metrics/persistence.go type PersistenceStore (line 8) | type PersistenceStore interface type PersistentRecord (line 27) | type PersistentRecord struct FILE: backend-go/internal/metrics/sqlite_store.go type SQLiteStore (line 17) | type SQLiteStore struct method AddRecord (line 142) | func (s *SQLiteStore) AddRecord(record PersistentRecord) { method flush (line 165) | func (s *SQLiteStore) flush() { method batchInsertRecords (line 192) | func (s *SQLiteStore) batchInsertRecords(records []PersistentRecord) e... method LoadRecords (line 232) | func (s *SQLiteStore) LoadRecords(since time.Time, apiType string) ([]... method CleanupOldRecords (line 269) | func (s *SQLiteStore) CleanupOldRecords(before time.Time) (int64, erro... method DeleteRecordsByMetricsKeys (line 282) | func (s *SQLiteStore) DeleteRecordsByMetricsKeys(metricsKeys []string,... method flushLoop (line 331) | func (s *SQLiteStore) flushLoop() { method cleanupLoop (line 354) | func (s *SQLiteStore) cleanupLoop() { method doCleanup (line 374) | func (s *SQLiteStore) doCleanup() { method Close (line 385) | func (s *SQLiteStore) Close() error { method GetRecordCount (line 402) | func (s *SQLiteStore) GetRecordCount() (int64, error) { type SQLiteStoreConfig (line 39) | type SQLiteStoreConfig struct constant defaultBatchSize (line 46) | defaultBatchSize = 100 constant defaultFlushInterval (line 47) | defaultFlushInterval = 30 * time.Second function NewSQLiteStore (line 51) | func NewSQLiteStore(cfg *SQLiteStoreConfig) (*SQLiteStore, error) { function initSchema (line 111) | func initSchema(db *sql.DB) error { FILE: backend-go/internal/middleware/auth.go function WebAuthMiddleware (line 13) | func WebAuthMiddleware(envCfg *config.EnvConfig, cfgManager *config.Conf... function isPollingEndpoint (line 90) | func isPollingEndpoint(path string) bool { function isStaticResource (line 108) | func isStaticResource(path string) bool { function getAPIKey (line 124) | func getAPIKey(c *gin.Context) string { function ProxyAuthMiddleware (line 144) | func ProxyAuthMiddleware(envCfg *config.EnvConfig) gin.HandlerFunc { FILE: backend-go/internal/middleware/auth_test.go function setupRouterWithAuth (line 13) | func setupRouterWithAuth(envCfg *config.EnvConfig) *gin.Engine { function TestWebAuthMiddleware_APIRequiresKey (line 42) | func TestWebAuthMiddleware_APIRequiresKey(t *testing.T) { function TestWebAuthMiddleware_SPAPassesThrough (line 85) | func TestWebAuthMiddleware_SPAPassesThrough(t *testing.T) { function TestWebAuthMiddleware_AdminRequiresKey (line 102) | func TestWebAuthMiddleware_AdminRequiresKey(t *testing.T) { function TestWebAuthMiddleware_DevInfoRequiresKeyInDevelopment (line 133) | func TestWebAuthMiddleware_DevInfoRequiresKeyInDevelopment(t *testing.T) { function TestWebAuthMiddleware_AllowsV1BetaRoutesWhenWebUIDisabled (line 165) | func TestWebAuthMiddleware_AllowsV1BetaRoutesWhenWebUIDisabled(t *testin... FILE: backend-go/internal/middleware/cors.go function CORSMiddleware (line 11) | func CORSMiddleware(envCfg *config.EnvConfig) gin.HandlerFunc { FILE: backend-go/internal/middleware/logger.go function FilteredLogger (line 24) | func FilteredLogger(envCfg *config.EnvConfig, skipPrefixes ...string) gi... FILE: backend-go/internal/providers/claude.go type ClaudeProvider (line 19) | type ClaudeProvider struct method ConvertToProviderRequest (line 53) | func (p *ClaudeProvider) ConvertToProviderRequest(c *gin.Context, upst... method ConvertToClaudeResponse (line 116) | func (p *ClaudeProvider) ConvertToClaudeResponse(providerResp *types.P... method HandleStreamResponse (line 125) | func (p *ClaudeProvider) HandleStreamResponse(body io.ReadCloser) (<-c... function redirectModelInBody (line 23) | func redirectModelInBody(bodyBytes []byte, upstream *config.UpstreamConf... FILE: backend-go/internal/providers/gemini.go type GeminiProvider (line 19) | type GeminiProvider struct method ConvertToProviderRequest (line 22) | func (p *GeminiProvider) ConvertToProviderRequest(c *gin.Context, upst... method convertToGeminiRequest (line 67) | func (p *GeminiProvider) convertToGeminiRequest(claudeReq *types.Claud... method convertMessages (line 112) | func (p *GeminiProvider) convertMessages(claudeMessages []types.Claude... method convertMessage (line 126) | func (p *GeminiProvider) convertMessage(msg types.ClaudeMessage) map[s... method convertTools (line 209) | func (p *GeminiProvider) convertTools(claudeTools []types.ClaudeTool) ... method ConvertToClaudeResponse (line 255) | func (p *GeminiProvider) ConvertToClaudeResponse(providerResp *types.P... method HandleStreamResponse (line 354) | func (p *GeminiProvider) HandleStreamResponse(body io.ReadCloser) (<-c... function normalizeGeminiParameters (line 225) | func normalizeGeminiParameters(schema interface{}) map[string]interface{} { FILE: backend-go/internal/providers/openai.go type OpenAIProvider (line 21) | type OpenAIProvider struct method ConvertToProviderRequest (line 24) | func (p *OpenAIProvider) ConvertToProviderRequest(c *gin.Context, upst... method convertMessages (line 100) | func (p *OpenAIProvider) convertMessages(claudeReq *types.ClaudeReques... method convertMessage (line 124) | func (p *OpenAIProvider) convertMessage(msg types.ClaudeMessage) []typ... method convertTools (line 226) | func (p *OpenAIProvider) convertTools(claudeTools []types.ClaudeTool) ... method ConvertToClaudeResponse (line 297) | func (p *OpenAIProvider) ConvertToClaudeResponse(providerResp *types.P... method HandleStreamResponse (line 357) | func (p *OpenAIProvider) HandleStreamResponse(body io.ReadCloser) (<-c... function cleanJsonSchema (line 244) | func cleanJsonSchema(schema interface{}) interface{} { type ToolCallAccumulator (line 564) | type ToolCallAccumulator struct function processToolUsePart (line 571) | func processToolUsePart(id, name string, input interface{}, index int) [... function extractSystemText (line 613) | func extractSystemText(system interface{}) string { function normalizeRole (line 641) | func normalizeRole(role string) string { function generateID (line 651) | func generateID() string { FILE: backend-go/internal/providers/provider.go type Provider (line 13) | type Provider interface function GetProvider (line 25) | func GetProvider(serviceType string) Provider { FILE: backend-go/internal/providers/request_context_test.go type testContextKey (line 14) | type testContextKey function newGinContext (line 16) | func newGinContext(method, url string, body []byte, ctx context.Context)... function TestConvertToProviderRequest_PropagatesContext (line 28) | func TestConvertToProviderRequest_PropagatesContext(t *testing.T) { FILE: backend-go/internal/providers/responses.go type ResponsesProvider (line 21) | type ResponsesProvider struct method ConvertToProviderRequest (line 26) | func (p *ResponsesProvider) ConvertToProviderRequest( method buildTargetURL (line 124) | func (p *ResponsesProvider) buildTargetURL(upstream *config.UpstreamCo... method ConvertToClaudeResponse (line 156) | func (p *ResponsesProvider) ConvertToClaudeResponse(providerResp *type... method ConvertToResponsesResponse (line 162) | func (p *ResponsesProvider) ConvertToResponsesResponse( method HandleStreamResponse (line 179) | func (p *ResponsesProvider) HandleStreamResponse(body io.ReadCloser) (... FILE: backend-go/internal/providers/url_builder_test.go function buildOpenAIURL (line 12) | func buildOpenAIURL(baseURL string) string { function buildClaudeURL (line 30) | func buildClaudeURL(baseURL, requestPath string) string { function TestOpenAIURL_SkipVersionWithHash (line 45) | func TestOpenAIURL_SkipVersionWithHash(t *testing.T) { function TestClaudeURL_SkipVersionWithHash (line 68) | func TestClaudeURL_SkipVersionWithHash(t *testing.T) { function TestBuildTargetURL_SkipVersionWithHash (line 93) | func TestBuildTargetURL_SkipVersionWithHash(t *testing.T) { FILE: backend-go/internal/scheduler/channel_scheduler.go type ChannelScheduler (line 18) | type ChannelScheduler struct method getMetricsManager (line 59) | func (s *ChannelScheduler) getMetricsManager(kind ChannelKind) *metric... method SelectChannel (line 79) | func (s *ChannelScheduler) SelectChannel( method findPromotedChannel (line 195) | func (s *ChannelScheduler) findPromotedChannel(activeChannels []Channe... method selectFallbackChannel (line 214) | func (s *ChannelScheduler) selectFallbackChannel( method getActiveChannels (line 270) | func (s *ChannelScheduler) getActiveChannels(kind ChannelKind) []Chann... method getUpstreamByIndex (line 317) | func (s *ChannelScheduler) getUpstreamByIndex(index int, kind ChannelK... method RecordSuccess (line 339) | func (s *ChannelScheduler) RecordSuccess(baseURL, apiKey string, kind ... method RecordSuccessWithUsage (line 344) | func (s *ChannelScheduler) RecordSuccessWithUsage(baseURL, apiKey stri... method RecordFailure (line 349) | func (s *ChannelScheduler) RecordFailure(baseURL, apiKey string, kind ... method RecordRequestStart (line 354) | func (s *ChannelScheduler) RecordRequestStart(baseURL, apiKey string, ... method RecordRequestEnd (line 359) | func (s *ChannelScheduler) RecordRequestEnd(baseURL, apiKey string, ki... method SetTraceAffinity (line 364) | func (s *ChannelScheduler) SetTraceAffinity(userID string, channelInde... method UpdateTraceAffinity (line 371) | func (s *ChannelScheduler) UpdateTraceAffinity(userID string) { method GetMessagesMetricsManager (line 378) | func (s *ChannelScheduler) GetMessagesMetricsManager() *metrics.Metric... method GetResponsesMetricsManager (line 383) | func (s *ChannelScheduler) GetResponsesMetricsManager() *metrics.Metri... method GetGeminiMetricsManager (line 388) | func (s *ChannelScheduler) GetGeminiMetricsManager() *metrics.MetricsM... method GetTraceAffinityManager (line 393) | func (s *ChannelScheduler) GetTraceAffinityManager() *session.TraceAff... method ResetChannelMetrics (line 399) | func (s *ChannelScheduler) ResetChannelMetrics(channelIndex int, kind ... method ResetKeyMetrics (line 415) | func (s *ChannelScheduler) ResetKeyMetrics(baseURL, apiKey string, kin... method DeleteChannelMetrics (line 421) | func (s *ChannelScheduler) DeleteChannelMetrics(upstream *config.Upstr... method GetActiveChannelCount (line 436) | func (s *ChannelScheduler) GetActiveChannelCount(kind ChannelKind) int { method IsMultiChannelMode (line 441) | func (s *ChannelScheduler) IsMultiChannelMode(kind ChannelKind) bool { method GetSortedURLsForChannel (line 455) | func (s *ChannelScheduler) GetSortedURLsForChannel( method MarkURLSuccess (line 476) | func (s *ChannelScheduler) MarkURLSuccess(kind ChannelKind, channelInd... method MarkURLFailure (line 483) | func (s *ChannelScheduler) MarkURLFailure(kind ChannelKind, channelInd... method InvalidateURLCache (line 490) | func (s *ChannelScheduler) InvalidateURLCache(kind ChannelKind, channe... method GetURLManagerStats (line 497) | func (s *ChannelScheduler) GetURLManagerStats() map[string]interface{} { type ChannelKind (line 31) | type ChannelKind constant ChannelKindMessages (line 34) | ChannelKindMessages ChannelKind = "messages" constant ChannelKindResponses (line 35) | ChannelKindResponses ChannelKind = "responses" constant ChannelKindGemini (line 36) | ChannelKindGemini ChannelKind = "gemini" function NewChannelScheduler (line 40) | func NewChannelScheduler( type SelectionResult (line 71) | type SelectionResult struct type ChannelInfo (line 262) | type ChannelInfo struct function maskUserID (line 446) | func maskUserID(userID string) string { function kindSchedulerLogPrefix (line 504) | func kindSchedulerLogPrefix(kind ChannelKind) string { function urlManagerChannelKey (line 515) | func urlManagerChannelKey(kind ChannelKind, channelIndex int) int { function urlManagerChannelKeyOrdinal (line 520) | func urlManagerChannelKeyOrdinal(kind ChannelKind) int { FILE: backend-go/internal/scheduler/channel_scheduler_test.go function createTestConfigManager (line 18) | func createTestConfigManager(t *testing.T, cfg config.Config) (*config.C... function createTestScheduler (line 56) | func createTestScheduler(t *testing.T, cfg config.Config) (*ChannelSched... function TestPromotedChannelBypassesHealthCheck (line 77) | func TestPromotedChannelBypassesHealthCheck(t *testing.T) { function TestPromotedChannelSkippedAfterFailure (line 136) | func TestPromotedChannelSkippedAfterFailure(t *testing.T) { function TestNonPromotedChannelStillChecksHealth (line 183) | func TestNonPromotedChannelStillChecksHealth(t *testing.T) { function TestExpiredPromotionNotBypassHealthCheck (line 228) | func TestExpiredPromotionNotBypassHealthCheck(t *testing.T) { FILE: backend-go/internal/session/manager.go type Session (line 15) | type Session struct type SessionManager (line 25) | type SessionManager struct method GetOrCreateSession (line 53) | func (sm *SessionManager) GetOrCreateSession(previousResponseID string... method RecordResponseMapping (line 86) | func (sm *SessionManager) RecordResponseMapping(responseID, sessionID ... method AppendMessage (line 95) | func (sm *SessionManager) AppendMessage(sessionID string, item types.R... method UpdateLastResponseID (line 112) | func (sm *SessionManager) UpdateLastResponseID(sessionID, responseID s... method GetSession (line 126) | func (sm *SessionManager) GetSession(sessionID string) (*Session, erro... method cleanupLoop (line 139) | func (sm *SessionManager) cleanupLoop() { method cleanup (line 149) | func (sm *SessionManager) cleanup() { method GetStats (line 200) | func (sm *SessionManager) GetStats() map[string]interface{} { function NewSessionManager (line 37) | func NewSessionManager(maxAge time.Duration, maxMessages int, maxTokens ... function generateID (line 211) | func generateID(prefix string) string { FILE: backend-go/internal/session/trace_affinity.go type TraceAffinity (line 15) | type TraceAffinity struct type TraceAffinityManager (line 21) | type TraceAffinityManager struct method GetPreferredChannel (line 61) | func (m *TraceAffinityManager) GetPreferredChannel(userID string) (int... method SetPreferredChannel (line 83) | func (m *TraceAffinityManager) SetPreferredChannel(userID string, chan... method UpdateLastUsed (line 114) | func (m *TraceAffinityManager) UpdateLastUsed(userID string) { method Remove (line 128) | func (m *TraceAffinityManager) Remove(userID string) { method RemoveByChannel (line 146) | func (m *TraceAffinityManager) RemoveByChannel(channelIndex int) { method Cleanup (line 163) | func (m *TraceAffinityManager) Cleanup() int { method cleanupLoop (line 184) | func (m *TraceAffinityManager) cleanupLoop() { method Stop (line 199) | func (m *TraceAffinityManager) Stop() { method Size (line 204) | func (m *TraceAffinityManager) Size() int { method GetTTL (line 211) | func (m *TraceAffinityManager) GetTTL() time.Duration { method GetAll (line 216) | func (m *TraceAffinityManager) GetAll() map[string]TraceAffinity { function NewTraceAffinityManager (line 29) | func NewTraceAffinityManager() *TraceAffinityManager { function NewTraceAffinityManagerWithTTL (line 43) | func NewTraceAffinityManagerWithTTL(ttl time.Duration) *TraceAffinityMan... function maskUserID (line 229) | func maskUserID(userID string) string { FILE: backend-go/internal/types/gemini.go constant DummyThoughtSignature (line 11) | DummyThoughtSignature = "skip_thought_signature_validator" constant StripThoughtSignatureMarker (line 15) | StripThoughtSignatureMarker = "__STRIP_THOUGHT_SIGNATURE__" type GeminiRequest (line 22) | type GeminiRequest struct type GeminiContent (line 31) | type GeminiContent struct type GeminiPart (line 37) | type GeminiPart struct method UnmarshalJSON (line 53) | func (p *GeminiPart) UnmarshalJSON(data []byte) error { method MarshalJSON (line 80) | func (p GeminiPart) MarshalJSON() ([]byte, error) { type GeminiInlineData (line 100) | type GeminiInlineData struct type GeminiFileData (line 106) | type GeminiFileData struct type GeminiFunctionCall (line 116) | type GeminiFunctionCall struct type GeminiFunctionResponse (line 123) | type GeminiFunctionResponse struct type GeminiTool (line 129) | type GeminiTool struct type GeminiFunctionDeclaration (line 134) | type GeminiFunctionDeclaration struct method UnmarshalJSON (line 144) | func (fd *GeminiFunctionDeclaration) UnmarshalJSON(data []byte) error { function sanitizeGeminiToolSchema (line 184) | func sanitizeGeminiToolSchema(v interface{}) interface{} { type GeminiGenerationConfig (line 223) | type GeminiGenerationConfig struct type GeminiThinkingConfig (line 235) | type GeminiThinkingConfig struct type GeminiSafetySetting (line 242) | type GeminiSafetySetting struct type GeminiResponse (line 252) | type GeminiResponse struct type GeminiCandidate (line 260) | type GeminiCandidate struct type GeminiPromptFeedback (line 268) | type GeminiPromptFeedback struct type GeminiSafetyRating (line 274) | type GeminiSafetyRating struct type GeminiUsageMetadata (line 280) | type GeminiUsageMetadata struct type GeminiStreamChunk (line 293) | type GeminiStreamChunk struct type GeminiError (line 303) | type GeminiError struct type GeminiErrorDetail (line 308) | type GeminiErrorDetail struct FILE: backend-go/internal/types/gemini_test.go function TestGeminiPart_UnmarshalJSON_ThoughtSignatureAtPartLevel (line 8) | func TestGeminiPart_UnmarshalJSON_ThoughtSignatureAtPartLevel(t *testing... function TestGeminiFunctionDeclaration_UnmarshalJSON_ParametersJsonSchema (line 90) | func TestGeminiFunctionDeclaration_UnmarshalJSON_ParametersJsonSchema(t ... function TestGeminiFunctionDeclaration_UnmarshalJSON_SanitizeParametersSchema (line 130) | func TestGeminiFunctionDeclaration_UnmarshalJSON_SanitizeParametersSchem... FILE: backend-go/internal/types/responses.go type ResponsesRequest (line 6) | type ResponsesRequest struct type ResponsesItem (line 29) | type ResponsesItem struct type ContentBlock (line 37) | type ContentBlock struct type ToolUse (line 43) | type ToolUse struct type ResponsesResponse (line 50) | type ResponsesResponse struct type ResponsesUsage (line 63) | type ResponsesUsage struct type InputTokensDetails (line 79) | type InputTokensDetails struct type OutputTokensDetails (line 84) | type OutputTokensDetails struct type ResponsesStreamEvent (line 89) | type ResponsesStreamEvent struct type ResponsesDelta (line 101) | type ResponsesDelta struct FILE: backend-go/internal/types/types.go type ClaudeRequest (line 4) | type ClaudeRequest struct type ClaudeMessage (line 16) | type ClaudeMessage struct type CacheControl (line 23) | type CacheControl struct type ClaudeContent (line 28) | type ClaudeContent struct type ClaudeTool (line 39) | type ClaudeTool struct type ClaudeResponse (line 47) | type ClaudeResponse struct type OpenAIRequest (line 57) | type OpenAIRequest struct type OpenAIMessage (line 68) | type OpenAIMessage struct type OpenAIToolCall (line 76) | type OpenAIToolCall struct type OpenAIToolCallFunction (line 83) | type OpenAIToolCallFunction struct type OpenAITool (line 89) | type OpenAITool struct type OpenAIToolFunction (line 95) | type OpenAIToolFunction struct type OpenAIResponse (line 102) | type OpenAIResponse struct type OpenAIChoice (line 109) | type OpenAIChoice struct type Usage (line 116) | type Usage struct type ProviderRequest (line 131) | type ProviderRequest struct type ProviderResponse (line 139) | type ProviderResponse struct FILE: backend-go/internal/utils/compression.go function DecompressGzipIfNeeded (line 14) | func DecompressGzipIfNeeded(resp *http.Response, bodyBytes []byte) []byte { FILE: backend-go/internal/utils/headers.go function PrepareUpstreamHeaders (line 13) | func PrepareUpstreamHeaders(c *gin.Context, targetHost string) http.Head... function PrepareMinimalHeaders (line 34) | func PrepareMinimalHeaders(targetHost string) http.Header { function SetAuthenticationHeader (line 46) | func SetAuthenticationHeader(headers http.Header, apiKey string) { function SetGeminiAuthenticationHeader (line 64) | func SetGeminiAuthenticationHeader(headers http.Header, apiKey string) { function EnsureCompatibleUserAgent (line 71) | func EnsureCompatibleUserAgent(headers http.Header, serviceType string) { function ForwardResponseHeaders (line 84) | func ForwardResponseHeaders(upstreamHeaders http.Header, clientWriter ht... FILE: backend-go/internal/utils/headers_test.go function TestPrepareUpstreamHeaders (line 11) | func TestPrepareUpstreamHeaders(t *testing.T) { function TestSetAuthenticationHeader (line 89) | func TestSetAuthenticationHeader(t *testing.T) { function TestSetGeminiAuthenticationHeader (line 140) | func TestSetGeminiAuthenticationHeader(t *testing.T) { function TestEnsureCompatibleUserAgent (line 159) | func TestEnsureCompatibleUserAgent(t *testing.T) { FILE: backend-go/internal/utils/json.go function MarshalJSONNoEscape (line 12) | func MarshalJSONNoEscape(v interface{}) ([]byte, error) { function TruncateJSONIntelligently (line 25) | func TruncateJSONIntelligently(data interface{}, maxTextLength int) inte... function SimplifyToolsArray (line 61) | func SimplifyToolsArray(data interface{}) interface{} { function compactContentArray (line 109) | func compactContentArray(contents []interface{}) []interface{} { function compactGeminiContentsArray (line 230) | func compactGeminiContentsArray(contents []interface{}) []interface{} { function compactGeminiPart (line 264) | func compactGeminiPart(partMap map[string]interface{}) map[string]interf... function truncateInputValues (line 334) | func truncateInputValues(data interface{}, maxLength int) interface{} { function extractToolNames (line 363) | func extractToolNames(toolsArray []interface{}) []interface{} { function extractToolName (line 409) | func extractToolName(tool interface{}) interface{} { function SimplifyToolsInJSON (line 432) | func SimplifyToolsInJSON(jsonData []byte) []byte { function FormatJSONForLog (line 450) | func FormatJSONForLog(data interface{}, maxTextLength int) string { function formatMapAsOneLine (line 463) | func formatMapAsOneLine(m map[string]interface{}) string { function formatInputMapCompact (line 515) | func formatInputMapCompact(m map[string]interface{}) string { function formatMessageAsOneLine (line 533) | func formatMessageAsOneLine(m map[string]interface{}) string { function formatJSONWithCompactArrays (line 583) | func formatJSONWithCompactArrays(data interface{}, indent string, depth ... function FormatJSONBytesForLog (line 752) | func FormatJSONBytesForLog(jsonData []byte, maxTextLength int) string { function MaskSensitiveHeaders (line 767) | func MaskSensitiveHeaders(headers map[string]string) map[string]string { function MaskAPIKey (line 792) | func MaskAPIKey(key string) string { function FormatJSONBytesRaw (line 809) | func FormatJSONBytesRaw(jsonData []byte) string { FILE: backend-go/internal/utils/json_compact_test.go function TestCompactContentArray (line 9) | func TestCompactContentArray(t *testing.T) { function TestContentArrayCompactFormat (line 79) | func TestContentArrayCompactFormat(t *testing.T) { function TestNoTruncationInMiddleOfJSON (line 166) | func TestNoTruncationInMiddleOfJSON(t *testing.T) { function TestFormatJSONBytesForLog (line 208) | func TestFormatJSONBytesForLog(t *testing.T) { function TestCodexResponsesFormat (line 244) | func TestCodexResponsesFormat(t *testing.T) { function TestGeminiContentsFormat (line 332) | func TestGeminiContentsFormat(t *testing.T) { function TestGeminiToolsFormat (line 417) | func TestGeminiToolsFormat(t *testing.T) { FILE: backend-go/internal/utils/json_test.go function TestTruncateJSONIntelligently (line 9) | func TestTruncateJSONIntelligently(t *testing.T) { function TestSimplifyToolsArray (line 59) | func TestSimplifyToolsArray(t *testing.T) { function TestFormatJSONForLog (line 123) | func TestFormatJSONForLog(t *testing.T) { function TestMaskAPIKey (line 167) | func TestMaskAPIKey(t *testing.T) { FILE: backend-go/internal/utils/stream_synthesizer.go type StreamSynthesizer (line 12) | type StreamSynthesizer struct method ProcessLine (line 39) | func (s *StreamSynthesizer) ProcessLine(line string) { method processResponses (line 87) | func (s *StreamSynthesizer) processResponses(data map[string]interface... method processGemini (line 202) | func (s *StreamSynthesizer) processGemini(data map[string]interface{}) { method processOpenAI (line 249) | func (s *StreamSynthesizer) processOpenAI(data map[string]interface{}) { method processClaude (line 306) | func (s *StreamSynthesizer) processClaude(data map[string]interface{}) { method GetSynthesizedContent (line 402) | func (s *StreamSynthesizer) GetSynthesizedContent() string { method mergeSplitToolCalls (line 488) | func (s *StreamSynthesizer) mergeSplitToolCalls() { method IsParseFailed (line 543) | func (s *StreamSynthesizer) IsParseFailed() bool { method HasToolCalls (line 548) | func (s *StreamSynthesizer) HasToolCalls() bool { type ToolCall (line 23) | type ToolCall struct function NewStreamSynthesizer (line 30) | func NewStreamSynthesizer(serviceType string) *StreamSynthesizer { FILE: backend-go/internal/utils/token_counter.go function EstimateTokens (line 14) | func EstimateTokens(text string) int { function EstimateMessagesTokens (line 38) | func EstimateMessagesTokens(messages interface{}) int { function EstimateRequestTokens (line 59) | func EstimateRequestTokens(bodyBytes []byte) int { function EstimateResponseTokens (line 100) | func EstimateResponseTokens(content interface{}) int { function isCJK (line 137) | func isCJK(r rune) bool { function EstimateResponsesRequestTokens (line 148) | func EstimateResponsesRequestTokens(bodyBytes []byte) int { function estimateResponsesInputTokens (line 179) | func estimateResponsesInputTokens(input interface{}) int { function estimateContentTokens (line 216) | func estimateContentTokens(content interface{}) int { function EstimateResponsesOutputTokens (line 241) | func EstimateResponsesOutputTokens(output interface{}) int { function estimateResponsesItemTokens (line 307) | func estimateResponsesItemTokens(item types.ResponsesItem) int { FILE: backend-go/internal/utils/token_counter_test.go function TestEstimateTokens (line 10) | func TestEstimateTokens(t *testing.T) { function TestEstimateResponsesRequestTokens (line 33) | func TestEstimateResponsesRequestTokens(t *testing.T) { function TestEstimateResponsesOutputTokens (line 95) | func TestEstimateResponsesOutputTokens(t *testing.T) { function TestEstimateResponsesOutputTokensWithTypedItems (line 159) | func TestEstimateResponsesOutputTokensWithTypedItems(t *testing.T) { function TestEstimateRequestTokens (line 181) | func TestEstimateRequestTokens(t *testing.T) { FILE: backend-go/internal/warmup/url_manager.go type URLLatencyResult (line 12) | type URLLatencyResult struct type URLState (line 19) | type URLState struct type ChannelURLState (line 30) | type ChannelURLState struct type URLManager (line 37) | type URLManager struct method GetSortedURLs (line 64) | func (m *URLManager) GetSortedURLs(channelIndex int, urls []string) []... method MarkSuccess (line 97) | func (m *URLManager) MarkSuccess(channelIndex int, url string) { method MarkFailure (line 121) | func (m *URLManager) MarkFailure(channelIndex int, url string) { method ensureChannelState (line 148) | func (m *URLManager) ensureChannelState(channelIndex int, urls []strin... method urlsMatch (line 189) | func (m *URLManager) urlsMatch(states []*URLState, urls []string) bool { method sortURLs (line 210) | func (m *URLManager) sortURLs(state *ChannelURLState) { method InvalidateChannel (line 251) | func (m *URLManager) InvalidateChannel(channelIndex int) { method InvalidateAll (line 259) | func (m *URLManager) InvalidateAll() { method GetStats (line 267) | func (m *URLManager) GetStats() map[string]interface{} { function NewURLManager (line 45) | func NewURLManager(failureCooldown time.Duration, maxFailCount int) *URL... FILE: backend-go/main.go function main (line 32) | func main() { FILE: frontend/src/composables/useTheme.ts constant RETRO_THEME (line 4) | const RETRO_THEME = { function useAppTheme (line 9) | function useAppTheme() { FILE: frontend/src/services/api.ts class ApiError (line 4) | class ApiError extends Error { method constructor (line 8) | constructor(message: string, status: number, details?: unknown) { constant API_BASE (line 35) | const API_BASE = getApiBase() type ChannelStatus (line 48) | type ChannelStatus = 'active' | 'suspended' | 'disabled' type TimeWindowStats (line 52) | interface TimeWindowStats { type ChannelMetrics (line 64) | interface ChannelMetrics { type Channel (line 84) | interface Channel { type ChannelsResponse (line 109) | interface ChannelsResponse { type ChannelDashboardResponse (line 116) | interface ChannelDashboardResponse { type PingResult (line 132) | interface PingResult { type HistoryDataPoint (line 140) | interface HistoryDataPoint { type MetricsHistoryResponse (line 149) | interface MetricsHistoryResponse { type KeyHistoryDataPoint (line 156) | interface KeyHistoryDataPoint { type KeyHistoryData (line 169) | interface KeyHistoryData { type ChannelKeyMetricsHistoryResponse (line 176) | interface ChannelKeyMetricsHistoryResponse { type GlobalHistoryDataPoint (line 185) | interface GlobalHistoryDataPoint { type GlobalStatsSummary (line 198) | interface GlobalStatsSummary { type GlobalStatsHistoryResponse (line 211) | interface GlobalStatsHistoryResponse { type ActivitySegment (line 219) | interface ActivitySegment { type ChannelRecentActivity (line 228) | interface ChannelRecentActivity { type ModelEntry (line 237) | interface ModelEntry { type ModelsResponse (line 244) | interface ModelsResponse { function buildModelsURL (line 253) | function buildModelsURL(baseURL: string): string { function fetchUpstreamModels (line 277) | async function fetchUpstreamModels( class ApiService (line 318) | class ApiService { method getApiKey (line 320) | private getApiKey(): string | null { method parseResponseBody (line 325) | private async parseResponseBody(response: Response): Promise { method request (line 336) | private async request(url: string, options: RequestInit = {}): Promise... method getChannels (line 382) | async getChannels(): Promise { method addChannel (line 386) | async addChannel(channel: Omit): Promise { method addApiKey (line 406) | async addApiKey(channelId: number, apiKey: string): Promise { method removeApiKey (line 413) | async removeApiKey(channelId: number, apiKey: string): Promise { method pingChannel (line 419) | async pingChannel(id: number): Promise { method pingAllChannels (line 423) | async pingAllChannels(): Promise { method updateResponsesLoadBalance (line 434) | async updateResponsesLoadBalance(strategy: string): Promise { method getResponsesChannels (line 443) | async getResponsesChannels(): Promise { method addResponsesChannel (line 447) | async addResponsesChannel(channel: Omit): P... method deleteResponsesChannel (line 461) | async deleteResponsesChannel(id: number): Promise { method addResponsesApiKey (line 467) | async addResponsesApiKey(channelId: number, apiKey: string): Promise { method moveApiKeyToBottom (line 486) | async moveApiKeyToBottom(channelId: number, apiKey: string): Promise { method setChannelStatus (line 515) | async setChannelStatus(channelId: number, status: ChannelStatus): Prom... method resumeChannel (line 523) | async resumeChannel(channelId: number): Promise { method getChannelMetrics (line 530) | async getChannelMetrics(): Promise { method getSchedulerStats (line 535) | async getSchedulerStats(type?: 'messages' | 'responses' | 'gemini'): P... method getChannelDashboard (line 559) | async getChannelDashboard(type: 'messages' | 'responses' | 'gemini' = ... method reorderResponsesChannels (line 571) | async reorderResponsesChannels(order: number[]): Promise { method setResponsesChannelStatus (line 579) | async setResponsesChannelStatus(channelId: number, status: ChannelStat... method resumeResponsesChannel (line 587) | async resumeResponsesChannel(channelId: number): Promise { method getResponsesChannelMetrics (line 594) | async getResponsesChannelMetrics(): Promise { method setChannelPromotion (line 601) | async setChannelPromotion(channelId: number, durationSeconds: number):... method setResponsesChannelPromotion (line 609) | async setResponsesChannelPromotion(channelId: number, durationSeconds:... method getFuzzyMode (line 619) | async getFuzzyMode(): Promise<{ fuzzyModeEnabled: boolean }> { method setFuzzyMode (line 624) | async setFuzzyMode(enabled: boolean): Promise { method getChannelMetricsHistory (line 634) | async getChannelMetricsHistory(duration: '1h' | '6h' | '24h' = '24h'):... method getResponsesChannelMetricsHistory (line 639) | async getResponsesChannelMetricsHistory(duration: '1h' | '6h' | '24h' ... method getChannelKeyMetricsHistory (line 646) | async getChannelKeyMetricsHistory(channelId: number, duration: '1h' | ... method getResponsesChannelKeyMetricsHistory (line 651) | async getResponsesChannelKeyMetricsHistory(channelId: number, duration... method getMessagesGlobalStats (line 658) | async getMessagesGlobalStats(duration: '1h' | '6h' | '24h' | 'today' =... method getResponsesGlobalStats (line 663) | async getResponsesGlobalStats(duration: '1h' | '6h' | '24h' | 'today' ... method getGeminiChannels (line 669) | async getGeminiChannels(): Promise { method addGeminiChannel (line 673) | async addGeminiChannel(channel: Omit): Prom... method deleteGeminiChannel (line 687) | async deleteGeminiChannel(id: number): Promise { method addGeminiApiKey (line 693) | async addGeminiApiKey(channelId: number, apiKey: string): Promise { method removeGeminiApiKey (line 700) | async removeGeminiApiKey(channelId: number, apiKey: string): Promise { method setGeminiChannelStatus (line 727) | async setGeminiChannelStatus(channelId: number, status: ChannelStatus)... method resumeGeminiChannel (line 735) | async resumeGeminiChannel(channelId: number): Promise { method getGeminiChannelMetrics (line 739) | async getGeminiChannelMetrics(): Promise { method setGeminiChannelPromotion (line 743) | async setGeminiChannelPromotion(channelId: number, durationSeconds: nu... method updateGeminiLoadBalance (line 750) | async updateGeminiLoadBalance(strategy: string): Promise { method getGeminiChannelMetricsHistory (line 760) | async getGeminiChannelMetricsHistory(duration: '1h' | '6h' | '24h' = '... method getGeminiChannelKeyMetricsHistory (line 765) | async getGeminiChannelKeyMetricsHistory(channelId: number, duration: '... method getGeminiGlobalStats (line 770) | async getGeminiGlobalStats(duration: '1h' | '6h' | '24h' | 'today' = '... method pingGeminiChannel (line 774) | async pingGeminiChannel(id: number): Promise { method pingAllGeminiChannels (line 778) | async pingAllGeminiChannels(): Promise { type HealthResponse (line 796) | interface HealthResponse { FILE: frontend/src/services/version.ts constant CACHE_KEY (line 6) | const CACHE_KEY = 'claude-proxy-version-info' constant CACHE_DURATION (line 7) | const CACHE_DURATION = 30 * 60 * 1000 // 30分钟缓存 constant ERROR_CACHE_DURATION (line 8) | const ERROR_CACHE_DURATION = 5 * 60 * 1000 // 错误状态缓存5分钟,避免频繁请求 constant GITHUB_API_TIMEOUT (line 9) | const GITHUB_API_TIMEOUT = 10000 // 10秒超时 type GitHubRelease (line 11) | interface GitHubRelease { type VersionInfo (line 19) | interface VersionInfo { constant PRERELEASE_PATTERN (line 30) | const PRERELEASE_PATTERN = /-(alpha|beta|rc|dev|pre|canary|nightly)/i class VersionService (line 32) | class VersionService { method isPrerelease (line 38) | private isPrerelease(version: string): boolean { method setCurrentVersion (line 45) | setCurrentVersion(version: string): void { method getCurrentVersion (line 52) | getCurrentVersion(): string { method getCachedVersionInfo (line 59) | private getCachedVersionInfo(): VersionInfo | null { method setCachedVersionInfo (line 96) | private setCachedVersionInfo(info: VersionInfo): void { method clearCache (line 107) | clearCache(): void { method compareVersions (line 115) | private compareVersions(current: string, latest: string): number { method fetchLatestVersion (line 138) | private async fetchLatestVersion(): Promise { method checkForUpdates (line 174) | async checkForUpdates(): Promise { FILE: frontend/src/stores/auth.ts function setApiKey (line 53) | function setApiKey(key: string | null) { function clearAuth (line 63) | function clearAuth() { function initializeAuth (line 69) | function initializeAuth() { function setAuthError (line 81) | function setAuthError(error: string) { function incrementAuthAttempts (line 85) | function incrementAuthAttempts() { function resetAuthAttempts (line 89) | function resetAuthAttempts() { function setAuthLockout (line 93) | function setAuthLockout(lockoutTime: Date | null) { function setAutoAuthenticating (line 97) | function setAutoAuthenticating(value: boolean) { function setInitialized (line 101) | function setInitialized(value: boolean) { function setAuthLoading (line 105) | function setAuthLoading(value: boolean) { function setAuthKeyInput (line 109) | function setAuthKeyInput(value: string) { FILE: frontend/src/stores/channel.ts type ApiTab (line 19) | type ApiTab = 'messages' | 'responses' | 'gemini' type DashboardCache (line 55) | interface DashboardCache { function mergeChannelsWithLocalData (line 130) | function mergeChannelsWithLocalData(newChannels: Channel[], existingChan... function refreshChannels (line 153) | async function refreshChannels() { function saveChannel (line 231) | async function saveChannel( function deleteChannel (line 314) | async function deleteChannel(channelId: number) { function pingChannel (line 329) | async function pingChannel(channelId: number) { function pingAllChannels (line 350) | async function pingAllChannels() { function updateLoadBalance (line 381) | async function updateLoadBalance(strategy: string) { function startAutoRefresh (line 398) | function startAutoRefresh() { function stopAutoRefresh (line 425) | function stopAutoRefresh() { function clearChannels (line 435) | function clearChannels() { FILE: frontend/src/stores/dialog.ts function openAddChannelModal (line 30) | function openAddChannelModal() { function openEditChannelModal (line 38) | function openEditChannelModal(channel: Channel) { function closeAddChannelModal (line 46) | function closeAddChannelModal() { function openAddKeyModal (line 54) | function openAddKeyModal(channelId: number) { function closeAddKeyModal (line 63) | function closeAddKeyModal() { function resetDialogState (line 72) | function resetDialogState() { FILE: frontend/src/stores/preferences.ts function setDarkMode (line 30) | function setDarkMode(mode: 'light' | 'dark' | 'auto') { function toggleDarkMode (line 37) | function toggleDarkMode() { function setFuzzyMode (line 47) | function setFuzzyMode(enabled: boolean) { function toggleFuzzyMode (line 54) | function toggleFuzzyMode() { function toggleGlobalStats (line 61) | function toggleGlobalStats() { FILE: frontend/src/stores/system.ts type SystemStatus (line 17) | type SystemStatus = 'running' | 'error' | 'connecting' function setSystemStatus (line 71) | function setSystemStatus(status: SystemStatus) { function setVersionInfo (line 78) | function setVersionInfo(info: VersionInfo) { function setCurrentVersion (line 85) | function setCurrentVersion(version: string) { function setCheckingVersion (line 92) | function setCheckingVersion(checking: boolean) { function setFuzzyModeLoading (line 99) | function setFuzzyModeLoading(loading: boolean) { function setFuzzyModeLoadError (line 106) | function setFuzzyModeLoadError(error: boolean) { function resetSystemState (line 113) | function resetSystemState() { FILE: frontend/src/utils/quickInputParser.ts constant PLATFORM_KEY_PATTERNS (line 43) | const PLATFORM_KEY_PATTERNS: RegExp[] = [ constant MAX_BASE_URLS (line 197) | const MAX_BASE_URLS = 10