SYMBOL INDEX (3512 symbols across 396 files) FILE: cc-switch-main/src/config/universalProviderPresets.ts type UniversalProviderPreset (line 17) | interface UniversalProviderPreset { constant NEWAPI_DEFAULT_MODELS (line 41) | const NEWAPI_DEFAULT_MODELS: UniversalProviderModels = { constant N1N_DEFAULT_MODELS (line 57) | const N1N_DEFAULT_MODELS: UniversalProviderModels = { function createUniversalProviderFromPreset (line 126) | function createUniversalProviderFromPreset( function getPresetDisplayName (line 151) | function getPresetDisplayName(preset: UniversalProviderPreset): string { function findPresetByType (line 158) | function findPresetByType( FILE: scripts/extract-icons.js constant ICONS_TO_EXTRACT (line 5) | const ICONS_TO_EXTRACT = { constant ALL_ICONS (line 31) | const ALL_ICONS = [ constant OUTPUT_DIR (line 39) | const OUTPUT_DIR = path.join(__dirname, '../src/icons/extracted'); constant SOURCE_DIR (line 40) | const SOURCE_DIR = path.join(__dirname, '../node_modules/@lobehub/icons-... FILE: scripts/filter-icons.js constant ICONS_DIR (line 4) | const ICONS_DIR = path.join(__dirname, '../src/icons/extracted'); constant KEEP_LIST (line 8) | const KEEP_LIST = [ FILE: scripts/generate-icon-index.js constant ICONS_DIR (line 4) | const ICONS_DIR = path.join(__dirname, '../src/icons/extracted'); constant INDEX_FILE (line 5) | const INDEX_FILE = path.join(ICONS_DIR, 'index.ts'); constant METADATA_FILE (line 6) | const METADATA_FILE = path.join(ICONS_DIR, 'metadata.ts'); constant KNOWN_METADATA (line 9) | const KNOWN_METADATA = { FILE: src-tauri/build.rs function main (line 1) | fn main() { FILE: src-tauri/src/app_config.rs type McpApps (line 9) | pub struct McpApps { method is_enabled_for (line 22) | pub fn is_enabled_for(&self, app: &AppType) -> bool { method set_enabled_for (line 33) | pub fn set_enabled_for(&mut self, app: &AppType, enabled: bool) { method enabled_apps (line 44) | pub fn enabled_apps(&self) -> Vec { method is_empty (line 62) | pub fn is_empty(&self) -> bool { type SkillApps (line 69) | pub struct SkillApps { method is_enabled_for (line 82) | pub fn is_enabled_for(&self, app: &AppType) -> bool { method set_enabled_for (line 93) | pub fn set_enabled_for(&mut self, app: &AppType, enabled: bool) { method enabled_apps (line 104) | pub fn enabled_apps(&self) -> Vec { method is_empty (line 122) | pub fn is_empty(&self) -> bool { method only (line 127) | pub fn only(app: &AppType) -> Self { method from_labels (line 137) | pub fn from_labels(labels: &[String]) -> Self { type InstalledSkill (line 151) | pub struct InstalledSkill { type UnmanagedSkill (line 182) | pub struct UnmanagedSkill { type McpServer (line 198) | pub struct McpServer { type McpConfig (line 215) | pub struct McpConfig { method is_empty (line 223) | pub fn is_empty(&self) -> bool { type McpRoot (line 230) | pub struct McpRoot { method default (line 251) | fn default() -> Self { type PromptConfig (line 267) | pub struct PromptConfig { type PromptRoot (line 274) | pub struct PromptRoot { type AppType (line 295) | pub enum AppType { method as_str (line 304) | pub fn as_str(&self) -> &str { method is_additive_mode (line 318) | pub fn is_additive_mode(&self) -> bool { method all (line 323) | pub fn all() -> impl Iterator { type Err (line 336) | type Err = AppError; method from_str (line 338) | fn from_str(s: &str) -> Result { type CommonConfigSnippets (line 357) | pub struct CommonConfigSnippets { method get (line 376) | pub fn get(&self, app: &AppType) -> Option<&String> { method set (line 387) | pub fn set(&mut self, app: &AppType, snippet: Option) { type MultiAppConfig (line 400) | pub struct MultiAppConfig { method load (line 450) | pub fn load() -> Result { method save (line 555) | pub fn save(&self) -> Result<(), AppError> { method get_manager (line 570) | pub fn get_manager(&self, app: &AppType) -> Option<&ProviderManager> { method get_manager_mut (line 575) | pub fn get_manager_mut(&mut self, app: &AppType) -> Option<&mut Provid... method ensure_app (line 580) | pub fn ensure_app(&mut self, app: &AppType) { method mcp_for (line 588) | pub fn mcp_for(&self, app: &AppType) -> &McpConfig { method mcp_for_mut (line 599) | pub fn mcp_for_mut(&mut self, app: &AppType) -> &mut McpConfig { method default_with_auto_import (line 610) | fn default_with_auto_import() -> Result { method maybe_auto_import_prompts_for_existing_config (line 635) | fn maybe_auto_import_prompts_for_existing_config(&mut self) -> Result<... method auto_import_prompt_if_exists (line 670) | fn auto_import_prompt_if_exists(config: &mut Self, app: AppType) -> Re... method migrate_mcp_to_unified (line 741) | pub fn migrate_mcp_to_unified(&mut self) -> Result { function default_version (line 423) | fn default_version() -> u32 { method default (line 428) | fn default() -> Self { type TempHome (line 881) | struct TempHome { method new (line 889) | fn new() -> Self { method drop (line 906) | fn drop(&mut self) { function write_prompt_file (line 919) | fn write_prompt_file(app: AppType, content: &str) { function auto_imports_existing_prompt_when_config_missing (line 929) | fn auto_imports_existing_prompt_when_config_missing() { function skips_empty_prompt_files_during_import (line 955) | fn skips_empty_prompt_files_during_import() { function auto_import_happens_only_once (line 968) | fn auto_import_happens_only_once() { function auto_imports_gemini_prompt_on_first_launch (line 1005) | fn auto_imports_gemini_prompt_on_first_launch() { function auto_imports_all_three_apps_prompts (line 1029) | fn auto_imports_all_three_apps_prompts() { FILE: src-tauri/src/app_store.rs constant STORE_KEY_APP_CONFIG_DIR (line 9) | const STORE_KEY_APP_CONFIG_DIR: &str = "app_config_dir_override"; function override_cache (line 14) | fn override_cache() -> &'static RwLock> { function update_cached_override (line 18) | fn update_cached_override(value: Option) { function get_app_config_dir_override (line 25) | pub fn get_app_config_dir_override() -> Option { function read_override_from_store (line 29) | fn read_override_from_store(app: &tauri::AppHandle) -> Option { function refresh_app_config_dir_override (line 67) | pub fn refresh_app_config_dir_override(app: &tauri::AppHandle) -> Option... function set_app_config_dir_to_store (line 74) | pub fn set_app_config_dir_to_store( function resolve_path (line 109) | fn resolve_path(raw: &str) -> PathBuf { function migrate_app_config_dir_from_settings (line 128) | pub fn migrate_app_config_dir_from_settings(app: &tauri::AppHandle) -> R... FILE: src-tauri/src/auto_launch.rs function get_macos_app_bundle_path (line 7) | fn get_macos_app_bundle_path(exe_path: &std::path::Path) -> Option Result { function enable_auto_launch (line 44) | pub fn enable_auto_launch() -> Result<(), AppError> { function disable_auto_launch (line 54) | pub fn disable_auto_launch() -> Result<(), AppError> { function is_auto_launch_enabled (line 64) | pub fn is_auto_launch_enabled() -> Result { function test_get_macos_app_bundle_path_valid (line 77) | fn test_get_macos_app_bundle_path_valid() { function test_get_macos_app_bundle_path_with_spaces (line 88) | fn test_get_macos_app_bundle_path_with_spaces() { function test_get_macos_app_bundle_path_not_in_bundle (line 102) | fn test_get_macos_app_bundle_path_not_in_bundle() { function test_get_macos_app_bundle_path_dev_build (line 110) | fn test_get_macos_app_bundle_path_dev_build() { FILE: src-tauri/src/claude_mcp.rs constant WINDOWS_WRAP_COMMANDS (line 13) | const WINDOWS_WRAP_COMMANDS: &[&str] = &["npx", "npm", "yarn", "pnpm", "... function wrap_command_for_windows (line 18) | fn wrap_command_for_windows(obj: &mut Map) { function wrap_command_for_windows (line 64) | fn wrap_command_for_windows(_obj: &mut Map) { function is_wsl_path (line 72) | fn is_wsl_path(path: &Path) -> bool { function is_wsl_path (line 88) | fn is_wsl_path(_path: &Path) -> bool { type McpStatus (line 94) | pub struct McpStatus { function user_config_path (line 100) | fn user_config_path() -> PathBuf { function ensure_mcp_override_migrated (line 105) | fn ensure_mcp_override_migrated() { function read_json_value (line 146) | fn read_json_value(path: &Path) -> Result { function write_json_value (line 155) | fn write_json_value(path: &Path, value: &Value) -> Result<(), AppError> { function get_mcp_status (line 164) | pub fn get_mcp_status() -> Result { function read_mcp_json (line 181) | pub fn read_mcp_json() -> Result, AppError> { function set_has_completed_onboarding (line 192) | pub fn set_has_completed_onboarding() -> Result { function clear_has_completed_onboarding (line 219) | pub fn clear_has_completed_onboarding() -> Result { function upsert_mcp_server (line 239) | pub fn upsert_mcp_server(id: &str, spec: Value) -> Result { function delete_mcp_server (line 311) | pub fn delete_mcp_server(id: &str) -> Result { function validate_command_in_path (line 331) | pub fn validate_command_in_path(cmd: &str) -> Result { function read_mcp_servers_map (line 369) | pub fn read_mcp_servers_map() -> Result Result { function claude_config_path (line 18) | pub fn claude_config_path() -> Result { function ensure_claude_dir_exists (line 22) | pub fn ensure_claude_dir_exists() -> Result { function read_claude_config (line 30) | pub fn read_claude_config() -> Result, AppError> { function is_managed_config (line 40) | fn is_managed_config(content: &str) -> bool { function write_claude_config (line 51) | pub fn write_claude_config() -> Result { function clear_claude_config (line 90) | pub fn clear_claude_config() -> Result { function claude_config_status (line 121) | pub fn claude_config_status() -> Result<(bool, PathBuf), AppError> { function is_claude_config_applied (line 126) | pub fn is_claude_config_applied() -> Result { FILE: src-tauri/src/codex_config.rs function get_codex_config_dir (line 15) | pub fn get_codex_config_dir() -> PathBuf { function get_codex_auth_path (line 24) | pub fn get_codex_auth_path() -> PathBuf { function get_codex_config_path (line 29) | pub fn get_codex_config_path() -> PathBuf { function get_codex_provider_paths (line 35) | pub fn get_codex_provider_paths( function delete_codex_provider_config (line 51) | pub fn delete_codex_provider_config( function write_codex_live_atomic (line 64) | pub fn write_codex_live_atomic( function read_codex_config_text (line 114) | pub fn read_codex_config_text() -> Result { function validate_config_toml (line 124) | pub fn validate_config_toml(text: &str) -> Result<(), AppError> { function read_and_validate_codex_config_text (line 134) | pub fn read_and_validate_codex_config_text() -> Result { function update_codex_toml_field (line 148) | pub fn update_codex_toml_field(toml_str: &str, field: &str, value: &str)... function remove_codex_toml_base_url_if (line 208) | pub fn remove_codex_toml_base_url_if(toml_str: &str, predicate: impl Fn(... function base_url_writes_into_correct_model_provider_section (line 258) | fn base_url_writes_into_correct_model_provider_section() { function base_url_creates_section_when_missing (line 291) | fn base_url_creates_section_when_missing() { function base_url_falls_back_to_top_level_without_model_provider (line 309) | fn base_url_falls_back_to_top_level_without_model_provider() { function clearing_base_url_removes_only_from_correct_section (line 324) | fn clearing_base_url_removes_only_from_correct_section() { function model_field_operates_on_top_level (line 357) | fn model_field_operates_on_top_level() { function preserves_comments_and_whitespace (line 376) | fn preserves_comments_and_whitespace() { function does_not_misplace_when_profiles_section_follows (line 395) | fn does_not_misplace_when_profiles_section_follows() { function remove_base_url_if_predicate (line 427) | fn remove_base_url_if_predicate() { function remove_base_url_if_keeps_non_matching (line 452) | fn remove_base_url_if_keeps_non_matching() { FILE: src-tauri/src/commands/auth.rs constant AUTH_PROVIDER_GITHUB_COPILOT (line 6) | const AUTH_PROVIDER_GITHUB_COPILOT: &str = "github_copilot"; type ManagedAuthAccount (line 9) | pub struct ManagedAuthAccount { type ManagedAuthStatus (line 19) | pub struct ManagedAuthStatus { type ManagedAuthDeviceCodeResponse (line 28) | pub struct ManagedAuthDeviceCodeResponse { function ensure_auth_provider (line 37) | fn ensure_auth_provider(auth_provider: &str) -> Result<&str, String> { function map_account (line 44) | fn map_account( function map_device_code_response (line 59) | fn map_device_code_response( function auth_start_login (line 74) | pub async fn auth_start_login( function auth_poll_for_account (line 88) | pub async fn auth_poll_for_account( function auth_list_accounts (line 109) | pub async fn auth_list_accounts( function auth_get_status (line 125) | pub async fn auth_get_status( function auth_remove_account (line 147) | pub async fn auth_remove_account( function auth_set_default_account (line 161) | pub async fn auth_set_default_account( function auth_logout (line 175) | pub async fn auth_logout( FILE: src-tauri/src/commands/config.rs function get_claude_config_status (line 13) | pub async fn get_claude_config_status() -> Result { function invalid_json_format_error (line 19) | fn invalid_json_format_error(error: serde_json::Error) -> String { function invalid_toml_format_error (line 31) | fn invalid_toml_format_error(error: toml_edit::TomlError) -> String { function validate_common_config_snippet (line 43) | fn validate_common_config_snippet(app_type: &str, snippet: &str) -> Resu... function get_config_status (line 65) | pub async fn get_config_status(app: String) -> Result Result { function get_config_dir (line 113) | pub async fn get_config_dir(app: String) -> Result { function open_config_folder (line 126) | pub async fn open_config_folder(handle: AppHandle, app: String) -> Resul... function pick_directory (line 148) | pub async fn pick_directory( function get_app_config_path (line 179) | pub async fn get_app_config_path() -> Result { function open_app_config_folder (line 185) | pub async fn open_app_config_folder(handle: AppHandle) -> Result>); function copilot_start_device_flow (line 22) | pub async fn copilot_start_device_flow( function copilot_poll_for_auth (line 37) | pub async fn copilot_poll_for_auth( function copilot_poll_for_account (line 62) | pub async fn copilot_poll_for_account( function copilot_list_accounts (line 83) | pub async fn copilot_list_accounts( function copilot_remove_account (line 92) | pub async fn copilot_remove_account( function copilot_set_default_account (line 105) | pub async fn copilot_set_default_account( function copilot_get_auth_status (line 120) | pub async fn copilot_get_auth_status( function copilot_is_authenticated (line 129) | pub async fn copilot_is_authenticated(state: State<'_, CopilotAuthState>... function copilot_logout (line 136) | pub async fn copilot_logout(state: State<'_, CopilotAuthState>) -> Resul... function copilot_get_token (line 147) | pub async fn copilot_get_token(state: State<'_, CopilotAuthState>) -> Re... function copilot_get_token_for_account (line 157) | pub async fn copilot_get_token_for_account( function copilot_get_models (line 172) | pub async fn copilot_get_models( function copilot_get_models_for_account (line 181) | pub async fn copilot_get_models_for_account( function copilot_get_usage (line 194) | pub async fn copilot_get_usage( function copilot_get_usage_for_account (line 203) | pub async fn copilot_get_usage_for_account( FILE: src-tauri/src/commands/deeplink.rs function parse_deeplink (line 10) | pub fn parse_deeplink(url: String) -> Result Result, Stri... function delete_env_vars (line 14) | pub fn delete_env_vars(conflicts: Vec) -> Result Result<(), String> { FILE: src-tauri/src/commands/failover.rs function get_failover_queue (line 13) | pub async fn get_failover_queue( function get_available_providers_for_failover (line 25) | pub async fn get_available_providers_for_failover( function add_to_failover_queue (line 37) | pub async fn add_to_failover_queue( function remove_from_failover_queue (line 50) | pub async fn remove_from_failover_queue( function get_auto_failover_enabled (line 63) | pub async fn get_auto_failover_enabled( function set_auto_failover_enabled (line 79) | pub async fn set_auto_failover_enabled( FILE: src-tauri/src/commands/global_proxy.rs function get_global_proxy_url (line 15) | pub fn get_global_proxy_url(state: tauri::State<'_, AppState>) -> Result... function set_global_proxy_url (line 35) | pub fn set_global_proxy_url(state: tauri::State<'_, AppState>, url: Stri... type ProxyTestResult (line 75) | pub struct ProxyTestResult { function test_proxy_url (line 89) | pub async fn test_proxy_url(url: String) -> Result UpstreamProxyStatus { type UpstreamProxyStatus (line 175) | pub struct UpstreamProxyStatus { type DetectedProxy (line 185) | pub struct DetectedProxy { constant PROXY_PORTS (line 197) | const PROXY_PORTS: &[(u16, &str, bool)] = &[ function scan_local_proxies (line 213) | pub async fn scan_local_proxies() -> Vec { FILE: src-tauri/src/commands/import_export.rs function export_config_to_file (line 21) | pub async fn export_config_to_file( function import_config_from_file (line 42) | pub async fn import_config_from_file( function sync_current_providers_live (line 63) | pub async fn sync_current_providers_live(state: State<'_, AppState>) -> ... function save_file_dialog (line 82) | pub async fn save_file_dialog( function open_file_dialog (line 98) | pub async fn open_file_dialog( function open_zip_file_dialog (line 112) | pub async fn open_zip_file_dialog( function create_db_backup (line 128) | pub async fn create_db_backup(state: State<'_, AppState>) -> Result Result, String> { function restore_db_backup (line 152) | pub async fn restore_db_backup( function rename_db_backup (line 165) | pub fn rename_db_backup( function delete_db_backup (line 174) | pub fn delete_db_backup(filename: String) -> Result<(), String> { FILE: src-tauri/src/commands/mcp.rs function get_claude_mcp_status (line 16) | pub async fn get_claude_mcp_status() -> Result Result, String> { function upsert_claude_mcp_server (line 28) | pub async fn upsert_claude_mcp_server(id: String, spec: serde_json::Valu... function delete_claude_mcp_server (line 34) | pub async fn delete_claude_mcp_server(id: String) -> Result { function validate_mcp_command (line 40) | pub async fn validate_mcp_command(cmd: String) -> Result { type McpConfigResponse (line 45) | pub struct McpConfigResponse { function get_mcp_config (line 55) | pub async fn get_mcp_config( function upsert_mcp_server_in_config (line 73) | pub async fn upsert_mcp_server_in_config( function delete_mcp_server_in_config (line 135) | pub async fn delete_mcp_server_in_config( function set_mcp_enabled (line 146) | pub async fn set_mcp_enabled( function get_mcp_servers (line 164) | pub async fn get_mcp_servers( function upsert_mcp_server (line 172) | pub async fn upsert_mcp_server( function delete_mcp_server (line 181) | pub async fn delete_mcp_server(state: State<'_, AppState>, id: String) -... function toggle_mcp_app (line 187) | pub async fn toggle_mcp_app( function import_mcp_from_apps (line 199) | pub async fn import_mcp_from_apps(state: State<'_, AppState>) -> Result<... FILE: src-tauri/src/commands/misc.rs constant CREATE_NO_WINDOW (line 19) | const CREATE_NO_WINDOW: u32 = 0x08000000; function open_external (line 23) | pub async fn open_external(app: AppHandle, url: String) -> Result Result { function is_portable_mode (line 53) | pub async fn is_portable_mode() -> Result { function get_init_error (line 65) | pub async fn get_init_error() -> Result, String> { function get_migration_result (line 72) | pub async fn get_migration_result() -> Result { function get_skills_migration_result (line 79) | pub async fn get_skills_migration_result() -> Result (String, Option) { function tool_env_type_and_wsl_distro (line 117) | fn tool_env_type_and_wsl_distro(_tool: &str) -> (String, Option) { function tool_env_type_and_wsl_distro (line 122) | fn tool_env_type_and_wsl_distro(_tool: &str) -> (String, Option) { function tool_env_type_and_wsl_distro (line 127) | fn tool_env_type_and_wsl_distro(_tool: &str) -> (String, Option) { function get_tool_versions (line 132) | pub async fn get_tool_versions( function get_single_tool_version_impl (line 173) | async fn get_single_tool_version_impl( function fetch_npm_latest_version (line 221) | async fn fetch_npm_latest_version(client: &reqwest::Client, package: &st... function fetch_github_latest_version (line 239) | async fn fetch_github_latest_version(client: &reqwest::Client, repo: &st... function extract_version (line 266) | fn extract_version(raw: &str) -> String { function try_get_version (line 274) | fn try_get_version(tool: &str) -> (Option, Option) { function is_valid_wsl_distro_name (line 323) | fn is_valid_wsl_distro_name(name: &str) -> bool { function is_valid_shell (line 333) | fn is_valid_shell(shell: &str) -> bool { function is_valid_shell_flag (line 342) | fn is_valid_shell_flag(flag: &str) -> bool { function default_flag_for_shell (line 348) | fn default_flag_for_shell(shell: &str) -> &'static str { function try_get_version_wsl (line 357) | fn try_get_version_wsl( function try_get_version_wsl (line 457) | fn try_get_version_wsl( function push_unique_path (line 469) | fn push_unique_path(paths: &mut Vec, path: std::path... function push_env_single_dir (line 479) | fn push_env_single_dir(paths: &mut Vec, value: Optio... function extend_from_path_list (line 485) | fn extend_from_path_list( function opencode_extra_search_paths (line 504) | fn opencode_extra_search_paths( function tool_executable_candidates (line 526) | fn tool_executable_candidates(tool: &str, dir: &Path) -> Vec (Option, Option) { function wsl_distro_for_tool (line 674) | fn wsl_distro_for_tool(tool: &str) -> Option { function wsl_distro_from_path (line 689) | fn wsl_distro_from_path(path: &Path) -> Option { function open_provider_terminal (line 717) | pub async fn open_provider_terminal( function extract_env_vars_from_config (line 743) | fn extract_env_vars_from_config( function launch_terminal_with_env (line 794) | fn launch_terminal_with_env( function write_claude_config (line 831) | fn write_claude_config( function launch_macos_terminal (line 852) | fn launch_macos_terminal(config_file: &std::path::Path) -> Result<(), St... function launch_macos_terminal_app (line 907) | fn launch_macos_terminal_app(script_file: &std::path::Path) -> Result<()... function launch_macos_iterm2 (line 938) | fn launch_macos_iterm2(script_file: &std::path::Path) -> Result<(), Stri... function launch_macos_open_app (line 974) | fn launch_macos_open_app( function launch_linux_terminal (line 1008) | fn launch_linux_terminal(config_file: &std::path::Path) -> Result<(), St... function which_command (line 1105) | fn which_command(cmd: &str) -> bool { function launch_windows_terminal (line 1116) | fn launch_windows_terminal( function run_windows_start_command (line 1167) | fn run_windows_start_command(args: &[&str], terminal_name: &str) -> Resu... function set_window_theme (line 1195) | pub async fn set_window_theme(window: tauri::Window, theme: String) -> R... function test_extract_version (line 1213) | fn test_extract_version() { function test_is_valid_shell (line 1224) | fn test_is_valid_shell() { function test_is_valid_shell_flag (line 1238) | fn test_is_valid_shell_flag() { function test_default_flag_for_shell (line 1248) | fn test_default_flag_for_shell() { function test_is_valid_wsl_distro_name (line 1259) | fn test_is_valid_wsl_distro_name() { function opencode_extra_search_paths_includes_install_and_fallback_dirs (line 1270) | fn opencode_extra_search_paths_includes_install_and_fallback_dirs() { function opencode_extra_search_paths_deduplicates_repeated_entries (line 1289) | fn opencode_extra_search_paths_deduplicates_repeated_entries() { function tool_executable_candidates_non_windows_uses_plain_binary_name (line 1304) | fn tool_executable_candidates_non_windows_uses_plain_binary_name() { function tool_executable_candidates_windows_includes_cmd_exe_and_plain_name (line 1313) | fn tool_executable_candidates_windows_includes_cmd_exe_and_plain_name() { FILE: src-tauri/src/commands/omo.rs function read_omo_local_file (line 8) | pub async fn read_omo_local_file() -> Result { function get_current_omo_provider_id (line 13) | pub async fn get_current_omo_provider_id(state: State<'_, AppState>) -> ... function disable_current_omo (line 22) | pub async fn disable_current_omo(state: State<'_, AppState>) -> Result<(... function read_omo_slim_local_file (line 42) | pub async fn read_omo_slim_local_file() -> Result) -> Res... FILE: src-tauri/src/commands/openclaw.rs function import_openclaw_providers_from_live (line 16) | pub fn import_openclaw_providers_from_live(state: State<'_, AppState>) -... function get_openclaw_live_provider_ids (line 23) | pub fn get_openclaw_live_provider_ids() -> Result, String> { function get_openclaw_live_provider (line 31) | pub fn get_openclaw_live_provider( function scan_openclaw_config_health (line 39) | pub fn scan_openclaw_config_health() -> Result Result Result Result Result { function read_claude_plugin_config (line 18) | pub async fn read_claude_plugin_config() -> Result, Strin... function apply_claude_plugin_config (line 24) | pub async fn apply_claude_plugin_config(official: bool) -> Result Result { function apply_claude_onboarding_skip (line 40) | pub async fn apply_claude_onboarding_skip() -> Result { function clear_claude_onboarding_skip (line 46) | pub async fn clear_claude_onboarding_skip() -> Result { FILE: src-tauri/src/commands/prompt.rs function get_prompts (line 12) | pub async fn get_prompts( function upsert_prompt (line 21) | pub async fn upsert_prompt( function delete_prompt (line 32) | pub async fn delete_prompt( function enable_prompt (line 42) | pub async fn enable_prompt( function import_prompt_from_file (line 52) | pub async fn import_prompt_from_file( function get_current_prompt_file_content (line 61) | pub async fn get_current_prompt_file_content(app: String) -> Result, app: String) -> ... function add_provider (line 35) | pub fn add_provider( function update_provider (line 45) | pub fn update_provider( function delete_provider (line 55) | pub fn delete_provider( function remove_provider_from_live_config (line 67) | pub fn remove_provider_from_live_config( function switch_provider_internal (line 78) | fn switch_provider_internal( function switch_provider_test_hook (line 87) | pub fn switch_provider_test_hook( function switch_provider (line 96) | pub fn switch_provider( function import_default_config_internal (line 105) | fn import_default_config_internal(state: &AppState, app_type: AppType) -... function import_default_config_test_hook (line 134) | pub fn import_default_config_test_hook( function import_default_config (line 142) | pub fn import_default_config(state: State<'_, AppState>, app: String) ->... function queryProviderUsage (line 149) | pub async fn queryProviderUsage( function testUsageScript (line 218) | pub async fn testUsageScript( function read_live_provider_settings (line 248) | pub fn read_live_provider_settings(app: String) -> Result) -... function get_opencode_live_provider_ids (line 405) | pub fn get_opencode_live_provider_ids() -> Result, String> { FILE: src-tauri/src/commands/proxy.rs function start_proxy_server (line 12) | pub async fn start_proxy_server( function stop_proxy_with_restore (line 20) | pub async fn stop_proxy_with_restore(state: tauri::State<'_, AppState>) ... function get_proxy_takeover_status (line 26) | pub async fn get_proxy_takeover_status( function set_proxy_takeover_for_app (line 34) | pub async fn set_proxy_takeover_for_app( function get_proxy_status (line 47) | pub async fn get_proxy_status(state: tauri::State<'_, AppState>) -> Resu... function get_proxy_config (line 53) | pub async fn get_proxy_config(state: tauri::State<'_, AppState>) -> Resu... function update_proxy_config (line 59) | pub async fn update_proxy_config( function get_global_proxy_config (line 72) | pub async fn get_global_proxy_config( function update_global_proxy_config (line 85) | pub async fn update_global_proxy_config( function get_proxy_config_for_app (line 99) | pub async fn get_proxy_config_for_app( function update_proxy_config_for_app (line 113) | pub async fn update_proxy_config_for_app( function get_default_cost_multiplier_internal (line 123) | async fn get_default_cost_multiplier_internal( function get_default_cost_multiplier_test_hook (line 132) | pub async fn get_default_cost_multiplier_test_hook( function get_default_cost_multiplier (line 141) | pub async fn get_default_cost_multiplier( function set_default_cost_multiplier_internal (line 150) | async fn set_default_cost_multiplier_internal( function set_default_cost_multiplier_test_hook (line 160) | pub async fn set_default_cost_multiplier_test_hook( function set_default_cost_multiplier (line 170) | pub async fn set_default_cost_multiplier( function get_pricing_model_source_internal (line 180) | async fn get_pricing_model_source_internal( function get_pricing_model_source_test_hook (line 189) | pub async fn get_pricing_model_source_test_hook( function get_pricing_model_source (line 198) | pub async fn get_pricing_model_source( function set_pricing_model_source_internal (line 207) | async fn set_pricing_model_source_internal( function set_pricing_model_source_test_hook (line 217) | pub async fn set_pricing_model_source_test_hook( function set_pricing_model_source (line 227) | pub async fn set_pricing_model_source( function is_proxy_running (line 239) | pub async fn is_proxy_running(state: tauri::State<'_, AppState>) -> Resu... function is_live_takeover_active (line 245) | pub async fn is_live_takeover_active(state: tauri::State<'_, AppState>) ... function switch_proxy_provider (line 251) | pub async fn switch_proxy_provider( function get_provider_health (line 266) | pub async fn get_provider_health( function reset_circuit_breaker (line 283) | pub async fn reset_circuit_breaker( function get_circuit_breaker_config (line 367) | pub async fn get_circuit_breaker_config( function update_circuit_breaker_config (line 378) | pub async fn update_circuit_breaker_config( function get_circuit_breaker_stats (line 400) | pub async fn get_circuit_breaker_stats( FILE: src-tauri/src/commands/session_manager.rs function list_sessions (line 6) | pub async fn list_sessions() -> Result... function get_session_messages (line 14) | pub async fn get_session_messages( function launch_session_terminal (line 28) | pub async fn launch_session_terminal( function delete_session (line 62) | pub async fn delete_session( FILE: src-tauri/src/commands/settings.rs function merge_settings_for_save (line 5) | fn merge_settings_for_save( function get_settings (line 17) | pub async fn get_settings() -> Result Re... function restart_app (line 32) | pub async fn restart_app(app: AppHandle) -> Result { function get_app_config_dir_override (line 43) | pub async fn get_app_config_dir_override(app: AppHandle) -> Result Result { function save_settings_should_preserve_existing_webdav_when_payload_omits_it (line 75) | fn save_settings_should_preserve_existing_webdav_when_payload_omits_it() { function save_settings_should_keep_incoming_webdav_when_present (line 95) | fn save_settings_should_keep_incoming_webdav_when_present() { function get_auto_launch_status (line 123) | pub async fn get_auto_launch_status() -> Result { function get_rectifier_config (line 129) | pub async fn get_rectifier_config( function set_rectifier_config (line 137) | pub async fn set_rectifier_config( function get_optimizer_config (line 150) | pub async fn get_optimizer_config( function set_optimizer_config (line 158) | pub async fn set_optimizer_config( function get_log_config (line 180) | pub async fn get_log_config( function set_log_config (line 188) | pub async fn set_log_config( FILE: src-tauri/src/commands/skill.rs type SkillServiceState (line 18) | pub struct SkillServiceState(pub Arc); function parse_app_type (line 21) | fn parse_app_type(app: &str) -> Result { function get_installed_skills (line 35) | pub fn get_installed_skills(app_state: State<'_, AppState>) -> Result Result, String> { function delete_skill_backup (line 45) | pub fn delete_skill_backup(backup_id: String) -> Result { function install_skill_unified (line 56) | pub async fn install_skill_unified( function uninstall_skill_unified (line 73) | pub fn uninstall_skill_unified( function restore_skill_backup (line 81) | pub fn restore_skill_backup( function toggle_skill_app (line 93) | pub fn toggle_skill_app( function scan_unmanaged_skills (line 106) | pub fn scan_unmanaged_skills( function import_skills_from_apps (line 114) | pub fn import_skills_from_apps( function discover_available_skills (line 125) | pub async fn discover_available_skills( function get_skills (line 141) | pub async fn get_skills( function get_skills_for_app (line 155) | pub async fn get_skills_for_app( function install_skill (line 167) | pub async fn install_skill( function install_skill_for_app (line 177) | pub async fn install_skill_for_app( function uninstall_skill (line 222) | pub fn uninstall_skill( function uninstall_skill_for_app (line 231) | pub fn uninstall_skill_for_app( function get_skill_repos (line 253) | pub fn get_skill_repos(app_state: State<'_, AppState>) -> Result) -... function remove_skill_repo (line 269) | pub fn remove_skill_repo( function install_skills_from_zip (line 283) | pub fn install_skills_from_zip( FILE: src-tauri/src/commands/stream_check.rs function stream_check_provider (line 15) | pub async fn stream_check_provider( function stream_check_all_providers (line 43) | pub async fn stream_check_all_providers( function get_stream_check_config (line 102) | pub fn get_stream_check_config(state: State<'_, AppState>) -> Result) -> Result<(), AppE... function post_sync_warning (line 17) | fn post_sync_warning(err: E) -> String { function post_sync_warning_from_result (line 26) | pub(crate) fn post_sync_warning_from_result( function attach_warning (line 36) | pub(crate) fn attach_warning(mut value: Value, warning: Option) ... function success_payload_with_warning (line 45) | pub(crate) fn success_payload_with_warning(backup_id: String, warning: O... function post_sync_warning_from_result_returns_none_on_success (line 62) | fn post_sync_warning_from_result_returns_none_on_success() { function post_sync_warning_from_result_returns_some_on_sync_error (line 68) | fn post_sync_warning_from_result_returns_some_on_sync_error() { function post_sync_warning_from_result_returns_some_on_join_error (line 75) | async fn post_sync_warning_from_result_returns_some_on_join_error() { function attach_warning_adds_warning_without_dropping_existing_fields (line 85) | fn attach_warning_adds_warning_without_dropping_existing_fields() { FILE: src-tauri/src/commands/usage.rs function get_usage_summary (line 10) | pub fn get_usage_summary( function get_usage_trends (line 20) | pub fn get_usage_trends( function get_provider_stats (line 30) | pub fn get_provider_stats(state: State<'_, AppState>) -> Result) -> Result) -> Result, model_id: String... type ModelPricingInfo (line 172) | pub struct ModelPricingInfo { FILE: src-tauri/src/commands/webdav_sync.rs function persist_sync_error (line 14) | fn persist_sync_error(settings: &mut WebDavSyncSettings, error: &AppErro... function webdav_not_configured_error (line 20) | fn webdav_not_configured_error() -> String { function webdav_sync_disabled_error (line 29) | fn webdav_sync_disabled_error() -> String { function require_enabled_webdav_settings (line 38) | fn require_enabled_webdav_settings() -> Result &'static tokio::sync::Mutex<()> { function run_with_webdav_lock (line 64) | async fn run_with_webdav_lock(operation: Fut) -> Result(result: Result, on_error: F) -> Re... function webdav_test_connection (line 85) | pub async fn webdav_test_connection( function webdav_sync_upload (line 105) | pub async fn webdav_sync_upload(state: State<'_, AppState>) -> Result) -> Result<... function webdav_sync_save_settings (line 142) | pub async fn webdav_sync_save_settings( function webdav_sync_fetch_remote_info (line 163) | pub async fn webdav_sync_fetch_remote_info() -> Result { function webdav_sync_mutex_is_singleton (line 185) | async fn webdav_sync_mutex_is_singleton() { function webdav_sync_mutex_serializes_concurrent_access (line 193) | async fn webdav_sync_mutex_serializes_concurrent_access() { function map_sync_result_runs_error_handler_after_lock_release (line 217) | async fn map_sync_result_runs_error_handler_after_lock_release() { function resolve_password_for_request_preserves_existing_when_requested (line 233) | fn resolve_password_for_request_preserves_existing_when_requested() { function resolve_password_for_request_allows_explicit_empty_password (line 249) | fn resolve_password_for_request_allows_explicit_empty_password() { function persist_sync_error_updates_status_without_overwriting_credentials (line 266) | fn persist_sync_error_updates_status_without_overwriting_credentials() { function require_enabled_webdav_settings_rejects_disabled_config (line 311) | fn require_enabled_webdav_settings_rejects_disabled_config() { function require_enabled_webdav_settings_returns_settings_when_enabled (line 336) | fn require_enabled_webdav_settings_returns_settings_when_enabled() { FILE: src-tauri/src/commands/workspace.rs constant ALLOWED_FILES (line 10) | const ALLOWED_FILES: &[&str] = &[ function validate_filename (line 22) | fn validate_filename(filename: &str) -> Result<(), String> { function validate_daily_memory_filename (line 37) | fn validate_daily_memory_filename(filename: &str) -> Result<(), String> { type DailyMemoryFileInfo (line 48) | pub struct DailyMemoryFileInfo { function list_daily_memory_files (line 60) | pub async fn list_daily_memory_files() -> Result Result usize { function ceil_char_boundary (line 166) | fn ceil_char_boundary(s: &str, mut i: usize) -> usize { type DailyMemorySearchResult (line 179) | pub struct DailyMemorySearchResult { function search_daily_memory_files (line 194) | pub async fn search_daily_memory_files( function delete_daily_memory_file (line 289) | pub async fn delete_daily_memory_file(filename: String) -> Result<(), St... function read_workspace_file (line 310) | pub async fn read_workspace_file(filename: String) -> Result ... function open_workspace_directory (line 346) | pub async fn open_workspace_directory(handle: AppHandle, subdir: String)... FILE: src-tauri/src/config.rs function get_home_dir (line 21) | pub fn get_home_dir() -> PathBuf { function get_claude_config_dir (line 36) | pub fn get_claude_config_dir() -> PathBuf { function get_default_claude_mcp_path (line 45) | pub fn get_default_claude_mcp_path() -> PathBuf { function derive_mcp_path_from_override (line 49) | fn derive_mcp_path_from_override(dir: &Path) -> Option { function get_claude_mcp_path (line 63) | pub fn get_claude_mcp_path() -> PathBuf { function get_claude_settings_path (line 73) | pub fn get_claude_settings_path() -> PathBuf { function get_app_config_dir (line 89) | pub fn get_app_config_dir() -> PathBuf { function get_app_config_path (line 125) | pub fn get_app_config_path() -> PathBuf { function sanitize_provider_name (line 131) | pub fn sanitize_provider_name(name: &str) -> String { function get_provider_config_path (line 143) | pub fn get_provider_config_path(provider_id: &str, provider_name: Option... function read_json_file (line 152) | pub fn read_json_file Deserialize<'a>>(path: &Path) -> Result... function write_json_file (line 163) | pub fn write_json_file(path: &Path, data: &T) -> Result<()... function write_text_file (line 176) | pub fn write_text_file(path: &Path, data: &str) -> Result<(), AppError> { function atomic_write (line 184) | pub fn atomic_write(path: &Path, data: &[u8]) -> Result<(), AppError> { function derive_mcp_path_from_override_preserves_folder_name (line 246) | fn derive_mcp_path_from_override_preserves_folder_name() { function derive_mcp_path_from_override_handles_non_hidden_folder (line 254) | fn derive_mcp_path_from_override_handles_non_hidden_folder() { function derive_mcp_path_from_override_supports_relative_rootless_dir (line 262) | fn derive_mcp_path_from_override_supports_relative_rootless_dir() { function derive_mcp_path_from_root_like_dir_returns_none (line 270) | fn derive_mcp_path_from_root_like_dir_returns_none() { function copy_file (line 277) | pub fn copy_file(from: &Path, to: &Path) -> Result<(), AppError> { function delete_file (line 286) | pub fn delete_file(path: &Path) -> Result<(), AppError> { type ConfigStatus (line 295) | pub struct ConfigStatus { function get_claude_config_status (line 301) | pub fn get_claude_config_status() -> ConfigStatus { FILE: src-tauri/src/database/backup.rs constant CC_SWITCH_SQL_EXPORT_HEADER (line 16) | const CC_SWITCH_SQL_EXPORT_HEADER: &str = "-- CC Switch SQLite 导出"; constant SYNC_SKIP_TABLES (line 19) | const SYNC_SKIP_TABLES: &[&str] = &[ constant SYNC_PRESERVE_TABLES (line 29) | const SYNC_PRESERVE_TABLES: &[&str] = &[ type BackupEntry (line 39) | pub struct BackupEntry { method export_sql_string (line 47) | pub fn export_sql_string(&self) -> Result { method export_sql_string_for_sync (line 53) | pub fn export_sql_string_for_sync(&self) -> Result { method export_sql (line 59) | pub fn export_sql(&self, target_path: &Path) -> Result<(), AppError> { method import_sql (line 70) | pub fn import_sql(&self, source_path: &Path) -> Result { method import_sql_string (line 84) | pub fn import_sql_string(&self, sql_raw: &str) -> Result Result... method import_sql_string_inner (line 94) | fn import_sql_string_inner( method snapshot_to_memory (line 150) | pub(crate) fn snapshot_to_memory(&self) -> Result { method validate_cc_switch_sql_export (line 166) | fn validate_cc_switch_sql_export(sql: &str) -> Result<(), AppError> { method restore_tables (line 179) | fn restore_tables( method periodic_backup_if_needed (line 236) | pub(crate) fn periodic_backup_if_needed(&self) -> Result<(), AppError> { method backup_database_file (line 298) | pub(crate) fn backup_database_file(&self) -> Result, App... method cleanup_db_backups (line 337) | fn cleanup_db_backups(dir: &Path) -> Result<(), AppError> { method validate_basic_state (line 370) | fn validate_basic_state(conn: &Connection) -> Result<(), AppError> { method dump_sql (line 387) | fn dump_sql(conn: &Connection, skip_tables: &[&str]) -> Result Result) -> Result { method list_backups (line 516) | pub fn list_backups() -> Result, AppError> { method restore_from_backup (line 552) | pub fn restore_from_backup(&self, filename: &str) -> Result Result Result<(), AppError> { function sync_import_preserves_local_only_tables (line 698) | fn sync_import_preserves_local_only_tables() -> Result<(), AppError> { function periodic_maintenance_runs_even_when_auto_backup_disabled (line 786) | fn periodic_maintenance_runs_even_when_auto_backup_disabled() -> Result<... FILE: src-tauri/src/database/dao/failover.rs type FailoverQueueItem (line 13) | pub struct FailoverQueueItem { method get_failover_queue (line 21) | pub fn get_failover_queue(&self, app_type: &str) -> Result Result Result<(), AppErro... method is_in_failover_queue (line 114) | pub fn is_in_failover_queue( method get_available_providers_for_failover (line 133) | pub fn get_available_providers_for_failover( FILE: src-tauri/src/database/dao/mcp.rs method get_all_mcp_servers (line 13) | pub fn get_all_mcp_servers(&self) -> Result,... method save_mcp_server (line 68) | pub fn save_mcp_server(&self, server: &McpServer) -> Result<(), AppError> { method delete_mcp_server (line 97) | pub fn delete_mcp_server(&self, id: &str) -> Result<(), AppError> { FILE: src-tauri/src/database/dao/prompts.rs method get_prompts (line 13) | pub fn get_prompts(&self, app_type: &str) -> Result Result<(),... method delete_prompt (line 79) | pub fn delete_prompt(&self, app_type: &str, id: &str) -> Result<(), AppE... FILE: src-tauri/src/database/dao/providers.rs type OmoProviderRow (line 8) | type OmoProviderRow = ( method get_all_providers (line 20) | pub fn get_all_providers( method get_current_provider (line 111) | pub fn get_current_provider(&self, app_type: &str) -> Result Resu... method delete_provider (line 280) | pub fn delete_provider(&self, app_type: &str, id: &str) -> Result<(), Ap... method set_current_provider (line 290) | pub fn set_current_provider(&self, app_type: &str, id: &str) -> Result<(... method update_provider_settings_config (line 312) | pub fn update_provider_settings_config( method add_custom_endpoint (line 333) | pub fn add_custom_endpoint( method remove_custom_endpoint (line 348) | pub fn remove_custom_endpoint( method set_omo_provider_current (line 363) | pub fn set_omo_provider_current( method is_omo_provider_current (line 406) | pub fn is_omo_provider_current( method clear_omo_provider_current (line 425) | pub fn clear_omo_provider_current( method get_current_omo_provider (line 441) | pub fn get_current_omo_provider( FILE: src-tauri/src/database/dao/proxy.rs method get_global_proxy_config (line 17) | pub async fn get_global_proxy_config(&self) -> Result Resul... method set_default_cost_multiplier (line 101) | pub async fn set_default_cost_multiplier( method get_pricing_model_source (line 139) | pub async fn get_pricing_model_source(&self, app_type: &str) -> Result Result<(), A... method init_proxy_config_rows (line 337) | async fn init_proxy_config_rows(&self) -> Result<(), AppError> { method get_proxy_config (line 383) | pub async fn get_proxy_config(&self) -> Result { method update_proxy_config (line 422) | pub async fn update_proxy_config(&self, config: ProxyConfig) -> Result<(... method set_live_takeover_active (line 452) | pub async fn set_live_takeover_active(&self, _active: bool) -> Result<()... method is_live_takeover_active (line 461) | pub async fn is_live_takeover_active(&self) -> Result { method get_provider_health (line 476) | pub async fn get_provider_health( method update_provider_health (line 525) | pub async fn update_provider_health( method update_provider_health_with_threshold (line 541) | pub async fn update_provider_health_with_threshold( method reset_provider_health (line 606) | pub async fn reset_provider_health( method clear_provider_health_for_app (line 625) | pub async fn clear_provider_health_for_app(&self, app_type: &str) -> Res... method clear_all_provider_health (line 639) | pub async fn clear_all_provider_health(&self) -> Result<(), AppError> { method get_circuit_breaker_config (line 655) | pub async fn get_circuit_breaker_config( method update_circuit_breaker_config (line 694) | pub async fn update_circuit_breaker_config( method save_live_backup (line 725) | pub async fn save_live_backup( method has_any_live_backup (line 745) | pub async fn has_any_live_backup(&self) -> Result { method get_live_backup (line 756) | pub async fn get_live_backup(&self, app_type: &str) -> Result Result<(), App... method delete_all_live_backups (line 793) | pub async fn delete_all_live_backups(&self) -> Result<(), AppError> { method get_proxy_flags_sync (line 809) | pub fn get_proxy_flags_sync(&self, app_type: &str) -> (bool, bool) { method set_proxy_flags_sync (line 826) | pub fn set_proxy_flags_sync( function test_default_cost_multiplier_round_trip (line 857) | async fn test_default_cost_multiplier_round_trip() -> Result<(), AppErro... function test_default_cost_multiplier_validation (line 871) | async fn test_default_cost_multiplier_validation() -> Result<(), AppErro... function test_pricing_model_source_round_trip_and_validation (line 891) | async fn test_pricing_model_source_round_trip_and_validation() -> Result... FILE: src-tauri/src/database/dao/settings.rs constant LEGACY_COMMON_CONFIG_MIGRATED_KEY (line 10) | const LEGACY_COMMON_CONFIG_MIGRATED_KEY: &'static str = "common_config_l... method config_snippet_cleared_key (line 12) | fn config_snippet_cleared_key(app_type: &str) -> String { method get_setting (line 17) | pub fn get_setting(&self, key: &str) -> Result, AppError> { method set_setting (line 37) | pub fn set_setting(&self, key: &str, value: &str) -> Result<(), AppError> { method get_config_snippet (line 50) | pub fn get_config_snippet(&self, app_type: &str) -> Result Result Resu... method is_legacy_common_config_migrated (line 86) | pub fn is_legacy_common_config_migrated(&self) -> Result { method set_legacy_common_config_migrated (line 94) | pub fn set_legacy_common_config_migrated(&self, migrated: bool) -> Resul... method set_config_snippet (line 109) | pub fn set_config_snippet( constant GLOBAL_PROXY_URL_KEY (line 129) | const GLOBAL_PROXY_URL_KEY: &'static str = "global_proxy_url"; method get_global_proxy_url (line 135) | pub fn get_global_proxy_url(&self) -> Result, AppError> { method set_global_proxy_url (line 143) | pub fn set_global_proxy_url(&self, url: Option<&str>) -> Result<(), AppE... method get_proxy_takeover_enabled (line 168) | pub fn get_proxy_takeover_enabled(&self, app_type: &str) -> Result Result { method clear_all_proxy_takeover (line 216) | pub fn clear_all_proxy_takeover(&self) -> Result<(), AppError> { method get_rectifier_config (line 232) | pub fn get_rectifier_config(&self) -> Result Result Result... FILE: src-tauri/src/database/dao/skills.rs method get_all_installed_skills (line 20) | pub fn get_all_installed_skills(&self) -> Result Result Result<(), AppError> { method delete_skill (line 127) | pub fn delete_skill(&self, id: &str) -> Result { method clear_skills (line 136) | pub fn clear_skills(&self) -> Result<(), AppError> { method update_skill_apps (line 144) | pub fn update_skill_apps(&self, id: &str, apps: &SkillApps) -> Result Result, AppError> { method save_skill_repo (line 185) | pub fn save_skill_repo(&self, repo: &SkillRepo) -> Result<(), AppError> { method delete_skill_repo (line 196) | pub fn delete_skill_repo(&self, owner: &str, name: &str) -> Result<(), A... method init_default_skill_repos (line 207) | pub fn init_default_skill_repos(&self) -> Result { FILE: src-tauri/src/database/dao/stream_check.rs method save_stream_check_log (line 9) | pub fn save_stream_check_log( method get_stream_check_config (line 43) | pub fn get_stream_check_config(&self) -> Result Result<... method save_stream_check_config (line 69) | pub fn save_stream_check_config(&self, config: &StreamCheckConfig) -> Re... FILE: src-tauri/src/database/dao/universal_providers.rs constant UNIVERSAL_PROVIDERS_KEY (line 11) | const UNIVERSAL_PROVIDERS_KEY: &str = "universal_providers"; method get_all_universal_providers (line 15) | pub fn get_all_universal_providers( method get_universal_provider (line 36) | pub fn get_universal_provider(&self, id: &str) -> Result R... method delete_universal_provider (line 49) | pub fn delete_universal_provider(&self, id: &str) -> Result Result { method do_rollup_and_prune (line 54) | fn do_rollup_and_prune(conn: &rusqlite::Connection, cutoff: i64) -> Resu... function test_rollup_and_prune (line 117) | fn test_rollup_and_prune() -> Result<(), AppError> { function test_rollup_noop_when_no_old_data (line 169) | fn test_rollup_noop_when_no_old_data() -> Result<(), AppError> { function test_rollup_merges_with_existing (line 176) | fn test_rollup_merges_with_existing() -> Result<(), AppError> { FILE: src-tauri/src/database/migration.rs method migrate_from_json (line 12) | pub fn migrate_from_json(&self, config: &MultiAppConfig) -> Result<(), A... method migrate_from_json_dry_run (line 28) | pub fn migrate_from_json_dry_run(config: &MultiAppConfig) -> Result<(), ... method migrate_from_json_tx (line 45) | fn migrate_from_json_tx( method migrate_providers (line 68) | fn migrate_providers( method migrate_mcp_servers (line 121) | fn migrate_mcp_servers( method migrate_prompts (line 152) | fn migrate_prompts( method migrate_skills (line 191) | fn migrate_skills( method migrate_common_config (line 217) | fn migrate_common_config( FILE: src-tauri/src/database/mod.rs constant SCHEMA_VERSION (line 47) | pub(crate) const SCHEMA_VERSION: i32 = 6; function to_json_string (line 50) | pub(crate) fn to_json_string(value: &T) -> Result Result { method memory (line 157) | pub fn memory() -> Result { method get_auto_vacuum_mode (line 176) | pub(crate) fn get_auto_vacuum_mode(conn: &Connection) -> Result Result { method ensure_incremental_auto_vacuum_on_conn (line 192) | pub(crate) fn ensure_incremental_auto_vacuum_on_conn( method ensure_incremental_auto_vacuum (line 215) | pub(crate) fn ensure_incremental_auto_vacuum(&self) -> Result Result { method is_prompts_table_empty (line 259) | pub fn is_prompts_table_empty(&self) -> Result { function register_db_change_hook (line 75) | fn register_db_change_hook(conn: &Connection) { FILE: src-tauri/src/database/schema.rs type LegacySkillMigrationRow (line 11) | struct LegacySkillMigrationRow { method create_tables (line 18) | pub(crate) fn create_tables(&self) -> Result<(), AppError> { method create_tables_on_conn (line 24) | pub(crate) fn create_tables_on_conn(conn: &Connection) -> Result<(), App... method apply_schema_migrations (line 341) | pub(crate) fn apply_schema_migrations(&self) -> Result<(), AppError> { method apply_schema_migrations_on_conn (line 347) | pub(crate) fn apply_schema_migrations_on_conn(conn: &Connection) -> Resu... method migrate_v0_to_v1 (line 422) | fn migrate_v0_to_v1(conn: &Connection) -> Result<(), AppError> { method migrate_v1_to_v2 (line 482) | fn migrate_v1_to_v2(conn: &Connection) -> Result<(), AppError> { method migrate_proxy_config_to_per_app (line 619) | fn migrate_proxy_config_to_per_app(conn: &Connection) -> Result<(), AppE... method migrate_skills_table (line 756) | fn migrate_skills_table(conn: &Connection) -> Result<(), AppError> { method migrate_v2_to_v3 (line 847) | fn migrate_v2_to_v3(conn: &Connection) -> Result<(), AppError> { method migrate_v3_to_v4 (line 928) | fn migrate_v3_to_v4(conn: &Connection) -> Result<(), AppError> { method migrate_v4_to_v5 (line 950) | fn migrate_v4_to_v5(conn: &Connection) -> Result<(), AppError> { method migrate_v5_to_v6 (line 974) | fn migrate_v5_to_v6(conn: &Connection) -> Result<(), AppError> { method seed_model_pricing (line 1051) | fn seed_model_pricing(conn: &Connection) -> Result<(), AppError> { method ensure_model_pricing_seeded (line 1419) | pub fn ensure_model_pricing_seeded(&self) -> Result<(), AppError> { method ensure_model_pricing_seeded_on_conn (line 1424) | fn ensure_model_pricing_seeded_on_conn(conn: &Connection) -> Result<(), ... method get_user_version (line 1431) | pub(crate) fn get_user_version(conn: &Connection) -> Result Resul... method validate_identifier (line 1446) | fn validate_identifier(s: &str, kind: &str) -> Result<(), AppError> { method table_exists (line 1458) | pub(crate) fn table_exists(conn: &Connection, table: &str) -> Result Colu... function normalize_default (line 148) | fn normalize_default(default: &Option) -> Option { function schema_migration_sets_user_version_when_missing (line 155) | fn schema_migration_sets_user_version_when_missing() { function schema_migration_rejects_future_version (line 173) | fn schema_migration_rejects_future_version() { function schema_migration_adds_missing_columns_for_providers (line 187) | fn schema_migration_adds_missing_columns_for_providers() { function schema_migration_aligns_column_defaults_and_types (line 228) | fn schema_migration_aligns_column_defaults_and_types() { function schema_create_tables_include_pricing_model_columns (line 272) | fn schema_create_tables_include_pricing_model_columns() { function schema_migration_v4_adds_pricing_model_columns (line 295) | fn schema_migration_v4_adds_pricing_model_columns() { function schema_create_tables_repairs_legacy_proxy_config_singleton_to_per_app (line 341) | fn schema_create_tables_repairs_legacy_proxy_config_singleton_to_per_app... function migration_from_v3_8_schema_v1_to_current_schema_v3 (line 388) | fn migration_from_v3_8_schema_v1_to_current_schema_v3() { function schema_dry_run_does_not_write_to_disk (line 525) | fn schema_dry_run_does_not_write_to_disk() { function dry_run_validates_schema_compatibility (line 549) | fn dry_run_validates_schema_compatibility() { function schema_model_pricing_is_seeded_on_init (line 599) | fn schema_model_pricing_is_seeded_on_init() { function ensure_incremental_auto_vacuum_rebuilds_existing_file_db (line 658) | fn ensure_incremental_auto_vacuum_rebuilds_existing_file_db() { FILE: src-tauri/src/deeplink/mcp.rs type McpImportResult (line 17) | pub struct McpImportResult { type McpImportError (line 29) | pub struct McpImportError { function import_mcp_from_deeplink (line 40) | pub fn import_mcp_from_deeplink( function parse_mcp_apps (line 164) | pub(crate) fn parse_mcp_apps(apps_str: &str) -> Result { FILE: src-tauri/src/deeplink/mod.rs type DeepLinkImportRequest (line 36) | pub struct DeepLinkImportRequest { FILE: src-tauri/src/deeplink/parser.rs function parse_deeplink_url (line 15) | pub fn parse_deeplink_url(url_str: &str) -> Result String { function build_provider_meta (line 184) | fn build_provider_meta(request: &DeepLinkImportRequest) -> Result serde_json:... function build_codex_settings (line 281) | fn build_codex_settings(request: &DeepLinkImportRequest) -> serde_json::... function build_gemini_settings (line 352) | fn build_gemini_settings(request: &DeepLinkImportRequest) -> serde_json:... function build_opencode_settings (line 369) | fn build_opencode_settings(request: &DeepLinkImportRequest) -> serde_jso... function build_openclaw_settings (line 395) | fn build_openclaw_settings(request: &DeepLinkImportRequest) -> serde_jso... function parse_and_merge_config (line 431) | pub fn parse_and_merge_config( function merge_claude_config (line 505) | fn merge_claude_config( function merge_codex_config (line 570) | fn merge_codex_config( function merge_gemini_config (line 619) | fn merge_gemini_config( function merge_additive_config (line 664) | fn merge_additive_config( function extract_codex_base_url (line 702) | fn extract_codex_base_url(toml_value: &toml::Value) -> Option { FILE: src-tauri/src/deeplink/skill.rs function import_skill_from_deeplink (line 11) | pub fn import_skill_from_deeplink( FILE: src-tauri/src/deeplink/tests.rs function test_parse_valid_claude_deeplink (line 19) | fn test_parse_valid_claude_deeplink() { function test_parse_deeplink_with_notes (line 38) | fn test_parse_deeplink_with_notes() { function test_parse_invalid_scheme (line 47) | fn test_parse_invalid_scheme() { function test_parse_unsupported_version (line 56) | fn test_parse_unsupported_version() { function test_parse_missing_required_field (line 68) | fn test_parse_missing_required_field() { function test_validate_invalid_url (line 85) | fn test_validate_invalid_url() { function test_validate_invalid_scheme (line 91) | fn test_validate_invalid_scheme() { function test_infer_homepage (line 101) | fn test_infer_homepage() { function test_build_gemini_provider_with_model (line 121) | fn test_build_gemini_provider_with_model() { function test_build_gemini_provider_without_model (line 174) | fn test_build_gemini_provider_without_model() { function test_parse_and_merge_config_claude (line 220) | fn test_parse_and_merge_config_claude() { function test_parse_and_merge_config_url_override (line 271) | fn test_parse_and_merge_config_url_override() { function test_import_prompt_allows_space_in_base64_content (line 324) | fn test_import_prompt_allows_space_in_base64_content() { function test_parse_mcp_apps (line 348) | fn test_parse_mcp_apps() { function test_parse_prompt_deeplink (line 364) | fn test_parse_prompt_deeplink() { function test_parse_mcp_deeplink (line 382) | fn test_parse_mcp_deeplink() { function test_parse_skill_deeplink (line 398) | fn test_parse_skill_deeplink() { function test_parse_multiple_endpoints_comma_separated (line 413) | fn test_parse_multiple_endpoints_comma_separated() { function test_parse_single_endpoint_backward_compatible (line 427) | fn test_parse_single_endpoint_backward_compatible() { function test_parse_endpoints_with_spaces_trimmed (line 440) | fn test_parse_endpoints_with_spaces_trimmed() { function test_infer_homepage_from_endpoint_without_homepage (line 450) | fn test_infer_homepage_from_endpoint_without_homepage() { FILE: src-tauri/src/deeplink/utils.rs function validate_url (line 10) | pub fn validate_url(url_str: &str, field_name: &str) -> Result<(), AppEr... function decode_base64_param (line 30) | pub fn decode_base64_param(field: &str, raw: &str) -> Result, Ap... function infer_homepage_from_endpoint (line 88) | pub fn infer_homepage_from_endpoint(endpoint: &str) -> Option { FILE: src-tauri/src/error.rs type AppError (line 7) | pub enum AppError { method io (line 64) | pub fn io(path: impl AsRef, source: std::io::Error) -> Self { method json (line 71) | pub fn json(path: impl AsRef, source: serde_json::Error) -> Self { method toml (line 78) | pub fn toml(path: impl AsRef, source: toml::de::Error) -> Self { method localized (line 85) | pub fn localized(key: &'static str, zh: impl Into, en: impl In... method from (line 95) | fn from(err: PoisonError) -> Self { method from (line 101) | fn from(err: rusqlite::Error) -> Self { method serialize (line 113) | fn serialize(&self, serializer: S) -> Result method from (line 107) | fn from(err: AppError) -> Self { function format_skill_error (line 122) | pub fn format_skill_error( FILE: src-tauri/src/gemini_config.rs function get_gemini_dir (line 9) | pub fn get_gemini_dir() -> PathBuf { function get_gemini_env_path (line 18) | pub fn get_gemini_env_path() -> PathBuf { function parse_env_file (line 26) | pub fn parse_env_file(content: &str) -> HashMap { function parse_env_file_strict (line 74) | pub fn parse_env_file_strict(content: &str) -> Result) -> String { function read_gemini_env (line 143) | pub fn read_gemini_env() -> Result, AppError> { function write_gemini_env_atomic (line 156) | pub fn write_gemini_env_atomic(map: &HashMap) -> Result<... function env_to_json (line 193) | pub fn env_to_json(env_map: &HashMap) -> Value { function json_to_env (line 204) | pub fn json_to_env(settings: &Value) -> Result, ... function validate_gemini_settings (line 224) | pub fn validate_gemini_settings(settings: &Value) -> Result<(), AppError> { function validate_gemini_settings_strict (line 255) | pub fn validate_gemini_settings_strict(settings: &Value) -> Result<(), A... function get_gemini_settings_path (line 281) | pub fn get_gemini_settings_path() -> PathBuf { function update_selected_type (line 294) | fn update_selected_type(selected_type: &str) -> Result<(), AppError> { function write_packycode_settings (line 351) | pub fn write_packycode_settings() -> Result<(), AppError> { function write_google_oauth_settings (line 369) | pub fn write_google_oauth_settings() -> Result<(), AppError> { function test_parse_env_file (line 378) | fn test_parse_env_file() { function test_serialize_env_file (line 403) | fn test_serialize_env_file() { function test_env_json_conversion (line 418) | fn test_env_json_conversion() { function test_parse_env_file_strict_success (line 432) | fn test_parse_env_file_strict_success() { function test_parse_env_file_strict_missing_equals (line 460) | fn test_parse_env_file_strict_missing_equals() { function test_parse_env_file_strict_empty_key (line 476) | fn test_parse_env_file_strict_empty_key() { function test_parse_env_file_strict_invalid_key_characters (line 492) | fn test_parse_env_file_strict_invalid_key_characters() { function test_parse_env_file_lax_vs_strict (line 508) | fn test_parse_env_file_lax_vs_strict() { function test_packycode_settings_structure (line 525) | fn test_packycode_settings_structure() { function test_packycode_settings_merge (line 542) | fn test_packycode_settings_merge() { function test_google_oauth_settings_structure (line 588) | fn test_google_oauth_settings_structure() { function test_validate_empty_env_for_oauth (line 605) | fn test_validate_empty_env_for_oauth() { function test_validate_env_with_api_key (line 617) | fn test_validate_env_with_api_key() { function test_validate_env_without_api_key_relaxed (line 631) | fn test_validate_env_without_api_key_relaxed() { function test_validate_invalid_env_type (line 646) | fn test_validate_invalid_env_type() { FILE: src-tauri/src/gemini_mcp.rs function user_config_path (line 10) | fn user_config_path() -> PathBuf { function read_json_value (line 14) | fn read_json_value(path: &Path) -> Result { function write_json_value (line 23) | fn write_json_value(path: &Path, value: &Value) -> Result<(), AppError> { function read_mcp_servers_map (line 38) | pub fn read_mcp_servers_map() -> Result &'static RwLock> { function set_init_error (line 17) | pub fn set_init_error(payload: InitErrorPayload) { function get_init_error (line 24) | pub fn get_init_error() -> Option { function migration_cell (line 34) | fn migration_cell() -> &'static RwLock { function set_migration_success (line 38) | pub fn set_migration_success() { function take_migration_success (line 45) | pub fn take_migration_success() -> bool { type SkillsMigrationPayload (line 60) | pub struct SkillsMigrationPayload { function skills_migration_cell (line 68) | fn skills_migration_cell() -> &'static RwLock Option { function init_error_roundtrip (line 101) | fn init_error_roundtrip() { FILE: src-tauri/src/lib.rs function redact_url_for_log (line 64) | fn redact_url_for_log(url_str: &str) -> String { function handle_deeplink_url (line 100) | fn handle_deeplink_url( function update_tray_menu (line 158) | async fn update_tray_menu( function macos_tray_icon (line 179) | fn macos_tray_icon() -> Option> { function run (line 192) | pub fn run() { function cleanup_before_exit (line 1212) | pub async fn cleanup_before_exit(app_handle: &tauri::AppHandle) { function restore_proxy_state_on_startup (line 1257) | async fn restore_proxy_state_on_startup(state: &store::AppState) { function initialize_common_config_snippets (line 1300) | fn initialize_common_config_snippets(state: &store::AppState) { function is_chinese_locale (line 1384) | fn is_chinese_locale() -> bool { function show_migration_error_dialog (line 1394) | fn show_migration_error_dialog(app: &tauri::AppHandle, error: &str) -> b... function show_database_init_error_dialog (line 1445) | fn show_database_init_error_dialog( FILE: src-tauri/src/main.rs function main (line 4) | fn main() { FILE: src-tauri/src/mcp/claude.rs function should_sync_claude_mcp (line 11) | fn should_sync_claude_mcp() -> bool { function collect_enabled_servers (line 18) | fn collect_enabled_servers(cfg: &McpConfig) -> HashMap { function sync_enabled_to_claude (line 41) | pub fn sync_enabled_to_claude(config: &MultiAppConfig) -> Result<(), App... function import_from_claude (line 51) | pub fn import_from_claude(config: &mut MultiAppConfig) -> Result Result<(), AppError> { FILE: src-tauri/src/mcp/codex.rs function should_sync_codex_mcp (line 16) | fn should_sync_codex_mcp() -> bool { function collect_enabled_servers (line 23) | fn collect_enabled_servers(cfg: &McpConfig) -> HashMap { function import_from_codex (line 52) | pub fn import_from_codex(config: &mut MultiAppConfig) -> Result Result<(), AppE... function sync_single_server_to_codex (line 347) | pub fn sync_single_server_to_codex( function remove_server_from_codex (line 405) | pub fn remove_server_from_codex(id: &str) -> Result<(), AppError> { function json_value_to_toml_item (line 466) | fn json_value_to_toml_item(value: &Value, field_name: &str) -> Option Result bool { function collect_enabled_servers (line 18) | fn collect_enabled_servers(cfg: &McpConfig) -> HashMap { function sync_enabled_to_gemini (line 41) | pub fn sync_enabled_to_gemini(config: &MultiAppConfig) -> Result<(), App... function import_from_gemini (line 51) | pub fn import_from_gemini(config: &mut MultiAppConfig) -> Result Result<(), AppError> { FILE: src-tauri/src/mcp/opencode.rs function should_sync_opencode_mcp (line 29) | fn should_sync_opencode_mcp() -> bool { function convert_to_opencode_format (line 43) | pub fn convert_to_opencode_format(spec: &Value) -> Result Result Result<(), AppError> { function import_from_opencode (line 212) | pub fn import_from_opencode(config: &mut MultiAppConfig) -> Result Result<(), AppError> { function extract_server_spec (line 54) | pub fn extract_server_spec(entry: &Value) -> Result { FILE: src-tauri/src/openclaw_config.rs constant OPENCLAW_DEFAULT_SOURCE (line 24) | const OPENCLAW_DEFAULT_SOURCE: &str = constant OPENCLAW_TOOLS_PROFILES (line 26) | const OPENCLAW_TOOLS_PROFILES: &[&str] = &["minimal", "coding", "messagi... function get_openclaw_dir (line 36) | pub fn get_openclaw_dir() -> PathBuf { function get_openclaw_config_path (line 49) | pub fn get_openclaw_config_path() -> PathBuf { function default_openclaw_config_value (line 53) | fn default_openclaw_config_value() -> Value { function openclaw_write_lock (line 62) | fn openclaw_write_lock() -> &'static Mutex<()> { type OpenClawHealthWarning (line 74) | pub struct OpenClawHealthWarning { type OpenClawWriteOutcome (line 84) | pub struct OpenClawWriteOutcome { type OpenClawProviderConfig (line 94) | pub struct OpenClawProviderConfig { type OpenClawModelEntry (line 112) | pub struct OpenClawModelEntry { type OpenClawModelCost (line 128) | pub struct OpenClawModelCost { type OpenClawDefaultModel (line 137) | pub struct OpenClawDefaultModel { type OpenClawModelCatalogEntry (line 147) | pub struct OpenClawModelCatalogEntry { type OpenClawAgentsDefaults (line 156) | pub struct OpenClawAgentsDefaults { type OpenClawAgents (line 168) | pub struct OpenClawAgents { type OpenClawEnvConfig (line 177) | pub struct OpenClawEnvConfig { type OpenClawToolsConfig (line 184) | pub struct OpenClawToolsConfig { function read_openclaw_config (line 202) | pub fn read_openclaw_config() -> Result { function scan_openclaw_config_health (line 216) | pub fn scan_openclaw_config_health() -> Result Result { method set_root_section (line 265) | fn set_root_section(&mut self, key: &str, value: &Value) -> Result<(),... method save (line 327) | fn save(self) -> Result { function write_root_section (line 382) | fn write_root_section(section: &str, value: &Value) -> Result Result { function cleanup_openclaw_backups (line 408) | fn cleanup_openclaw_backups(dir: &Path) -> Result<(), AppError> { function ensure_object (line 440) | fn ensure_object(value: &mut Value) -> &mut Map { function ensure_kvp_context (line 449) | fn ensure_kvp_context(pair: &mut RtJSONKeyValuePair) -> &mut RtKeyValueP... function extract_trailing_indent (line 455) | fn extract_trailing_indent(separator_ws: &str) -> String { function derive_closing_ws_from_separator (line 462) | fn derive_closing_ws_from_separator(separator_ws: &str) -> String { function derive_entry_separator (line 480) | fn derive_entry_separator(leading_ws: &str) -> String { function value_to_rt_value (line 492) | fn value_to_rt_value(value: &Value, parent_indent: &str) -> Result String { function normalize_json_five_output (line 529) | fn normalize_json_five_output(source: &str) -> String { function make_root_pair (line 533) | fn make_root_pair(key: &str, value: RtJSONValue, closing_ws: String) -> ... function make_json5_key (line 543) | fn make_json5_key(key: &str) -> RtJSONValue { function is_identifier_key (line 551) | fn is_identifier_key(key: &str) -> bool { function json5_key_name (line 561) | fn json5_key_name(key: &RtJSONValue) -> Option<&str> { function warning (line 570) | fn warning(code: &str, message: impl Into, path: Option<&str>) -... function scan_openclaw_health_from_value (line 578) | fn scan_openclaw_health_from_value(config: &Value) -> Vec Result, AppError> { function get_provider (line 655) | pub fn get_provider(id: &str) -> Result, AppError> { function set_provider (line 662) | pub fn set_provider(id: &str, provider_config: Value) -> Result Result Result Result, AppEr... function set_default_model (line 765) | pub fn set_default_model(model: &OpenClawDefaultModel) -> Result Result Result, A... function set_agents_defaults (line 845) | pub fn set_agents_defaults( function get_env_config (line 871) | pub fn get_env_config() -> Result { function set_env_config (line 885) | pub fn set_env_config(env: &OpenClawEnvConfig) -> Result Result { function set_tools_config (line 912) | pub fn set_tools_config(tools: &OpenClawToolsConfig) -> Result std::sync::MutexGuard<'static, ()> { function with_test_paths (line 929) | fn with_test_paths(source: &str, test: impl FnOnce(&Path) -> T) -> T { function scan_health_detects_known_openclaw_issues (line 953) | fn scan_health_detects_known_openclaw_issues() { function default_model_write_preserves_top_level_comments (line 972) | fn default_model_write_preserves_top_level_comments() { function default_model_noop_write_skips_backup (line 1000) | fn default_model_noop_write_skips_backup() { function save_detects_external_conflict (line 1034) | fn save_detects_external_conflict() { FILE: src-tauri/src/opencode_config.rs function get_opencode_dir (line 9) | pub fn get_opencode_dir() -> PathBuf { function get_opencode_config_path (line 19) | pub fn get_opencode_config_path() -> PathBuf { function get_opencode_env_path (line 24) | pub fn get_opencode_env_path() -> PathBuf { function read_opencode_config (line 28) | pub fn read_opencode_config() -> Result { function write_opencode_config (line 41) | pub fn write_opencode_config(config: &Value) -> Result<(), AppError> { function get_providers (line 49) | pub fn get_providers() -> Result, AppError> { function set_provider (line 58) | pub fn set_provider(id: &str, config: Value) -> Result<(), AppError> { function remove_provider (line 75) | pub fn remove_provider(id: &str) -> Result<(), AppError> { function get_typed_providers (line 85) | pub fn get_typed_providers() -> Result ... function get_mcp_servers (line 108) | pub fn get_mcp_servers() -> Result, AppError> { function set_mcp_server (line 117) | pub fn set_mcp_server(id: &str, config: Value) -> Result<(), AppError> { function remove_mcp_server (line 131) | pub fn remove_mcp_server(id: &str) -> Result<(), AppError> { function add_plugin (line 141) | pub fn add_plugin(plugin_name: &str) -> Result<(), AppError> { function remove_plugin_by_prefix (line 182) | pub fn remove_plugin_by_prefix(prefix: &str) -> Result<(), AppError> { FILE: src-tauri/src/panic_hook.rs constant APP_VERSION (line 13) | const APP_VERSION: &str = env!("CARGO_PKG_VERSION"); function init_app_config_dir (line 17) | pub fn init_app_config_dir(dir: PathBuf) { function default_app_config_dir (line 22) | fn default_app_config_dir() -> PathBuf { function get_app_config_dir (line 29) | fn get_app_config_dir() -> PathBuf { function get_crash_log_path (line 37) | fn get_crash_log_path() -> PathBuf { function get_log_dir (line 42) | pub fn get_log_dir() -> PathBuf { function get_system_info (line 47) | fn get_system_info() -> String { function setup_panic_hook (line 80) | pub fn setup_panic_hook() { function test_crash_log_path (line 192) | fn test_crash_log_path() { function test_system_info (line 199) | fn test_system_info() { FILE: src-tauri/src/prompt.rs type Prompt (line 4) | pub struct Prompt { FILE: src-tauri/src/prompt_files.rs function prompt_file_path (line 12) | pub fn prompt_file_path(app: &AppType) -> Result { function get_base_dir_with_fallback (line 32) | fn get_base_dir_with_fallback( FILE: src-tauri/src/provider.rs type Provider (line 10) | pub struct Provider { method with_id (line 47) | pub fn with_id( type ProviderManager (line 72) | pub struct ProviderManager { method get_all_providers (line 317) | pub fn get_all_providers(&self) -> &IndexMap { type UsageScript (line 79) | pub struct UsageScript { type UsageData (line 113) | pub struct UsageData { type UsageResult (line 137) | pub struct UsageResult { type ProviderTestConfig (line 147) | pub struct ProviderTestConfig { type ProviderProxyConfig (line 173) | pub struct ProviderProxyConfig { type AuthBindingSource (line 197) | pub enum AuthBindingSource { type AuthBinding (line 207) | pub struct AuthBinding { type ProviderMeta (line 221) | pub struct ProviderMeta { method managed_account_id_for (line 298) | pub fn managed_account_id_for(&self, auth_provider: &str) -> Option Option { method to_codex_provider (line 511) | pub fn to_codex_provider(&self) -> Option { method to_gemini_provider (line 576) | pub fn to_gemini_provider(&self) -> Option { type OpenCodeProviderConfig (line 627) | pub struct OpenCodeProviderConfig { method default (line 645) | fn default() -> Self { type OpenCodeProviderOptions (line 657) | pub struct OpenCodeProviderOptions { type OpenCodeModel (line 678) | pub struct OpenCodeModel { type OpenCodeModelLimit (line 698) | pub struct OpenCodeModelLimit { function provider_meta_serializes_pricing_model_source (line 717) | fn provider_meta_serializes_pricing_model_source() { function provider_meta_omits_pricing_model_source_when_none (line 733) | fn provider_meta_omits_pricing_model_source_when_none() { function provider_with_id_populates_defaults (line 741) | fn provider_with_id_populates_defaults() { function provider_manager_get_all_providers_returns_map (line 767) | fn provider_manager_get_all_providers_returns_map() { function universal_provider_to_claude_provider_uses_models (line 782) | fn universal_provider_to_claude_provider_uses_models() { function universal_provider_to_claude_provider_disabled_returns_none (line 834) | fn universal_provider_to_claude_provider_disabled_returns_none() { function universal_provider_to_codex_provider_appends_v1 (line 847) | fn universal_provider_to_codex_provider_appends_v1() { function universal_provider_to_codex_provider_keeps_v1_suffix (line 879) | fn universal_provider_to_codex_provider_keeps_v1_suffix() { function universal_provider_to_codex_provider_disabled_returns_none (line 900) | fn universal_provider_to_codex_provider_disabled_returns_none() { function universal_provider_to_gemini_provider_defaults_model (line 913) | fn universal_provider_to_gemini_provider_defaults_model() { function universal_provider_to_gemini_provider_uses_model (line 935) | fn universal_provider_to_gemini_provider_uses_model() { function opencode_provider_config_defaults (line 960) | fn opencode_provider_config_defaults() { function universal_codex_provider_origin_base_url_adds_v1 (line 972) | fn universal_codex_provider_origin_base_url_adds_v1() { function universal_codex_provider_custom_prefix_does_not_force_v1 (line 993) | fn universal_codex_provider_custom_prefix_does_not_force_v1() { FILE: src-tauri/src/provider_defaults.rs type ProviderIcon (line 7) | pub struct ProviderIcon { function infer_provider_icon (line 187) | pub fn infer_provider_icon(provider_name: &str) -> Option { function test_exact_match (line 210) | fn test_exact_match() { function test_fuzzy_match (line 219) | fn test_fuzzy_match() { function test_case_insensitive (line 227) | fn test_case_insensitive() { function test_no_match (line 234) | fn test_no_match() { FILE: src-tauri/src/proxy/body_filter.rs function filter_private_params (line 40) | pub fn filter_private_params(body: Value) -> Value { function filter_private_params_with_whitelist (line 66) | pub fn filter_private_params_with_whitelist(body: Value, whitelist: &[St... function filter_recursive_with_whitelist (line 72) | fn filter_recursive_with_whitelist( function test_filter_top_level_private_params (line 118) | fn test_filter_top_level_private_params() { function test_filter_nested_private_params (line 135) | fn test_filter_nested_private_params() { function test_filter_deeply_nested (line 171) | fn test_filter_deeply_nested() { function test_filter_array_of_objects (line 198) | fn test_filter_array_of_objects() { function test_no_private_params (line 217) | fn test_no_private_params() { function test_empty_object (line 230) | fn test_empty_object() { function test_primitive_values (line 237) | fn test_primitive_values() { function test_whitelist_preserves_private_params (line 246) | fn test_whitelist_preserves_private_params() { function test_whitelist_nested (line 267) | fn test_whitelist_nested() { function test_empty_whitelist_same_as_default (line 286) | fn test_empty_whitelist_same_as_default() { FILE: src-tauri/src/proxy/cache_injector.rs function inject (line 9) | pub fn inject(body: &mut Value, config: &OptimizerConfig) { function make_cache_control (line 116) | fn make_cache_control(ttl: &str) -> Value { function count_existing (line 124) | fn count_existing(body: &Value) -> usize { function upgrade_existing_ttl (line 155) | fn upgrade_existing_ttl(body: &mut Value, ttl: &str) { function default_config (line 194) | fn default_config() -> OptimizerConfig { function test_empty_body_no_injection (line 204) | fn test_empty_body_no_injection() { function test_inject_three_breakpoints (line 213) | fn test_inject_three_breakpoints() { function test_existing_four_breakpoints_only_upgrades_ttl (line 240) | fn test_existing_four_breakpoints_only_upgrades_ttl() { function test_existing_two_injects_two_more (line 270) | fn test_existing_two_injects_two_more() { function test_system_string_converted_to_array (line 293) | fn test_system_string_converted_to_array() { function test_ttl_5m_no_ttl_field (line 311) | fn test_ttl_5m_no_ttl_field() { function test_disabled_no_change (line 330) | fn test_disabled_no_change() { function test_skip_thinking_blocks_in_assistant (line 349) | fn test_skip_thinking_blocks_in_assistant() { FILE: src-tauri/src/proxy/circuit_breaker.rs type CircuitState (line 15) | pub enum CircuitState { method fmt (line 25) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type CircuitBreakerConfig (line 37) | pub struct CircuitBreakerConfig { method default (line 51) | fn default() -> Self { type CircuitBreaker (line 63) | pub struct CircuitBreaker { method new (line 94) | pub fn new(config: CircuitBreakerConfig) -> Self { method update_config (line 108) | pub async fn update_config(&self, new_config: CircuitBreakerConfig) { method is_available (line 120) | pub async fn is_available(&self) -> bool { method allow_request (line 144) | pub async fn allow_request(&self) -> AllowResult { method record_success (line 190) | pub async fn record_success(&self, used_half_open_permit: bool) { method record_failure (line 217) | pub async fn record_failure(&self, used_half_open_permit: bool) { method get_state (line 279) | pub async fn get_state(&self) -> CircuitState { method get_stats (line 285) | pub async fn get_stats(&self) -> CircuitBreakerStats { method reset (line 297) | pub async fn reset(&self) { method allow_half_open_probe (line 302) | fn allow_half_open_probe(&self) -> AllowResult { method release_half_open_permit (line 326) | pub fn release_half_open_permit(&self) { method transition_to_open (line 346) | async fn transition_to_open(&self) { method transition_to_half_open (line 354) | async fn transition_to_half_open(&self) { method transition_to_closed (line 367) | async fn transition_to_closed(&self) { type AllowResult (line 87) | pub struct AllowResult { type CircuitBreakerStats (line 380) | pub struct CircuitBreakerStats { function test_circuit_breaker_closed_to_open (line 393) | async fn test_circuit_breaker_closed_to_open() { function test_circuit_breaker_half_open_to_closed (line 415) | async fn test_circuit_breaker_half_open_to_closed() { function test_half_open_transition_does_not_reset_inflight_permit (line 441) | async fn test_half_open_transition_does_not_reset_inflight_permit() { function test_circuit_breaker_reset (line 465) | async fn test_circuit_breaker_reset() { FILE: src-tauri/src/proxy/error.rs type ProxyError (line 10) | pub enum ProxyError { method into_response (line 81) | fn into_response(self) -> Response { type ErrorCategory (line 180) | pub enum ErrorCategory { function categorize_error (line 191) | pub fn categorize_error(error: &reqwest::Error) -> ErrorCategory { FILE: src-tauri/src/proxy/error_mapper.rs function map_proxy_error_to_status (line 16) | pub fn map_proxy_error_to_status(error: &ProxyError) -> u16 { function get_error_message (line 54) | pub fn get_error_message(error: &ProxyError) -> String { function test_map_upstream_error (line 81) | fn test_map_upstream_error() { function test_map_timeout_error (line 90) | fn test_map_timeout_error() { function test_map_connection_error (line 96) | fn test_map_connection_error() { function test_map_no_provider_error (line 102) | fn test_map_no_provider_error() { function test_get_error_message (line 108) | fn test_get_error_message() { FILE: src-tauri/src/proxy/failover_switch.rs type FailoverSwitchManager (line 22) | pub struct FailoverSwitchManager { method new (line 29) | pub fn new(db: Arc) -> Self { method try_switch (line 44) | pub async fn try_switch( method do_switch (line 77) | async fn do_switch( FILE: src-tauri/src/proxy/forwarder.rs constant HEADER_BLACKLIST (line 34) | const HEADER_BLACKLIST: &[&str] = &[ type ForwardResult (line 81) | pub struct ForwardResult { type ForwardError (line 86) | pub struct ForwardError { type RequestForwarder (line 91) | pub struct RequestForwarder { method new (line 112) | pub fn new( method forward_with_retry (line 146) | pub async fn forward_with_retry( method forward (line 784) | async fn forward( method categorize_proxy_error (line 1017) | fn categorize_proxy_error(&self, error: &ProxyError) -> ErrorCategory { function extract_error_message (line 1041) | fn extract_error_message(error: &ProxyError) -> Option { function is_bedrock_provider (line 1049) | fn is_bedrock_provider(provider: &Provider) -> bool { function build_retryable_failure_log (line 1059) | fn build_retryable_failure_log( function build_terminal_failure_log (line 1082) | fn build_terminal_failure_log( function summarize_proxy_error (line 1103) | fn summarize_proxy_error(error: &ProxyError) -> String { function summarize_upstream_body (line 1135) | fn summarize_upstream_body(body: &str) -> String { function extract_json_error_message (line 1149) | fn extract_json_error_message(body: &Value) -> Option { function should_force_identity_encoding (line 1163) | fn should_force_identity_encoding( function summarize_text_for_log (line 1187) | fn summarize_text_for_log(text: &str, max_chars: usize) -> String { function single_provider_retryable_log_uses_single_provider_code (line 1207) | fn single_provider_retryable_log_uses_single_provider_code() { function multi_provider_retryable_log_keeps_failover_wording (line 1223) | fn multi_provider_retryable_log_keeps_failover_wording() { function single_provider_has_no_terminal_all_failed_log (line 1234) | fn single_provider_has_no_terminal_all_failed_log() { function multi_provider_terminal_log_contains_last_error_summary (line 1239) | fn multi_provider_terminal_log_contains_last_error_summary() { function summarize_upstream_body_prefers_json_message (line 1251) | fn summarize_upstream_body_prefers_json_message() { function summarize_text_for_log_collapses_whitespace_and_truncates (line 1265) | fn summarize_text_for_log_collapses_whitespace_and_truncates() { function force_identity_for_stream_flag_requests (line 1272) | fn force_identity_for_stream_flag_requests() { function force_identity_for_gemini_stream_endpoints (line 1283) | fn force_identity_for_gemini_stream_endpoints() { function force_identity_for_sse_accept_header (line 1294) | fn force_identity_for_sse_accept_header() { function non_streaming_requests_allow_automatic_compression (line 1306) | fn non_streaming_requests_allow_automatic_compression() { FILE: src-tauri/src/proxy/handler_config.rs type StreamUsageParser (line 10) | pub type StreamUsageParser = fn(&[Value]) -> Option; type ResponseUsageParser (line 11) | pub type ResponseUsageParser = fn(&Value) -> Option; type StreamModelExtractor (line 15) | pub type StreamModelExtractor = fn(&[Value], &str) -> String; type UsageParserConfig (line 19) | pub struct UsageParserConfig { function claude_model_extractor (line 35) | fn claude_model_extractor(events: &[Value], request_model: &str) -> Stri... function openai_model_extractor (line 46) | fn openai_model_extractor(events: &[Value], request_model: &str) -> Stri... function codex_auto_model_extractor (line 62) | fn codex_auto_model_extractor(events: &[Value], request_model: &str) -> ... function gemini_model_extractor (line 88) | fn gemini_model_extractor(events: &[Value], request_model: &str) -> Stri... constant CLAUDE_PARSER_CONFIG (line 103) | pub const CLAUDE_PARSER_CONFIG: UsageParserConfig = UsageParserConfig { constant OPENAI_PARSER_CONFIG (line 111) | pub const OPENAI_PARSER_CONFIG: UsageParserConfig = UsageParserConfig { constant CODEX_PARSER_CONFIG (line 119) | pub const CODEX_PARSER_CONFIG: UsageParserConfig = UsageParserConfig { constant GEMINI_PARSER_CONFIG (line 127) | pub const GEMINI_PARSER_CONFIG: UsageParserConfig = UsageParserConfig { type HandlerConfig (line 143) | pub struct HandlerConfig { constant CLAUDE_HANDLER_CONFIG (line 156) | pub const CLAUDE_HANDLER_CONFIG: HandlerConfig = HandlerConfig { constant CODEX_CHAT_HANDLER_CONFIG (line 165) | pub const CODEX_CHAT_HANDLER_CONFIG: HandlerConfig = HandlerConfig { constant CODEX_RESPONSES_HANDLER_CONFIG (line 174) | pub const CODEX_RESPONSES_HANDLER_CONFIG: HandlerConfig = HandlerConfig { constant GEMINI_HANDLER_CONFIG (line 183) | pub const GEMINI_HANDLER_CONFIG: HandlerConfig = HandlerConfig { FILE: src-tauri/src/proxy/handler_context.rs type StreamingTimeoutConfig (line 19) | pub struct StreamingTimeoutConfig { type RequestContext (line 35) | pub struct RequestContext { method new (line 79) | pub async fn new( method with_model_from_uri (line 170) | pub fn with_model_from_uri(mut self, uri: &axum::http::Uri) -> Self { method create_forwarder (line 194) | pub fn create_forwarder(&self, state: &ProxyState) -> RequestForwarder { method get_providers (line 230) | pub fn get_providers(&self) -> Vec { method latency_ms (line 236) | pub fn latency_ms(&self) -> u64 { method streaming_timeout_config (line 246) | pub fn streaming_timeout_config(&self) -> StreamingTimeoutConfig { FILE: src-tauri/src/proxy/handlers.rs function health_check (line 37) | pub async fn health_check() -> (StatusCode, Json) { function get_status (line 48) | pub async fn get_status(State(state): State) -> Result u16 { function init (line 54) | pub fn init(proxy_url: Option<&str>) -> Result<(), String> { function validate_proxy (line 93) | pub fn validate_proxy(proxy_url: Option<&str>) -> Result<(), String> { function apply_proxy (line 107) | pub fn apply_proxy(proxy_url: Option<&str>) -> Result<(), String> { function update_proxy (line 151) | pub fn update_proxy(proxy_url: Option<&str>) -> Result<(), String> { function get (line 189) | pub fn get() -> Client { function get_current_proxy_url (line 203) | pub fn get_current_proxy_url() -> Option { function is_proxy_enabled (line 212) | pub fn is_proxy_enabled() -> bool { function build_client (line 217) | fn build_client(proxy_url: Option<&str>) -> Result { function system_proxy_points_to_loopback (line 261) | fn system_proxy_points_to_loopback() -> bool { function proxy_points_to_loopback (line 278) | fn proxy_points_to_loopback(value: &str) -> bool { function mask_url (line 314) | pub fn mask_url(url: &str) -> String { function build_proxy_url_from_config (line 335) | fn build_proxy_url_from_config(config: &ProviderProxyConfig) -> Option) -> C... function env_lock (line 431) | fn env_lock() -> &'static Mutex<()> { function test_mask_url (line 437) | fn test_mask_url() { function test_build_client_direct (line 459) | fn test_build_client_direct() { function test_build_client_with_http_proxy (line 465) | fn test_build_client_with_http_proxy() { function test_build_client_with_socks5_proxy (line 471) | fn test_build_client_with_socks5_proxy() { function test_build_client_invalid_url (line 477) | fn test_build_client_invalid_url() { function test_proxy_points_to_loopback (line 485) | fn test_proxy_points_to_loopback() { function test_system_proxy_points_to_loopback (line 504) | fn test_system_proxy_points_to_loopback() { FILE: src-tauri/src/proxy/log_codes.rs constant OPEN_TO_HALF_OPEN (line 15) | pub const OPEN_TO_HALF_OPEN: &str = "CB-001"; constant HALF_OPEN_TO_CLOSED (line 16) | pub const HALF_OPEN_TO_CLOSED: &str = "CB-002"; constant HALF_OPEN_PROBE_FAILED (line 17) | pub const HALF_OPEN_PROBE_FAILED: &str = "CB-003"; constant TRIGGERED_FAILURES (line 18) | pub const TRIGGERED_FAILURES: &str = "CB-004"; constant TRIGGERED_ERROR_RATE (line 19) | pub const TRIGGERED_ERROR_RATE: &str = "CB-005"; constant MANUAL_RESET (line 20) | pub const MANUAL_RESET: &str = "CB-006"; constant STARTED (line 25) | pub const STARTED: &str = "SRV-001"; constant STOPPED (line 26) | pub const STOPPED: &str = "SRV-002"; constant STOP_TIMEOUT (line 27) | pub const STOP_TIMEOUT: &str = "SRV-003"; constant TASK_ERROR (line 28) | pub const TASK_ERROR: &str = "SRV-004"; constant PROVIDER_FAILED_RETRY (line 33) | pub const PROVIDER_FAILED_RETRY: &str = "FWD-001"; constant ALL_PROVIDERS_FAILED (line 34) | pub const ALL_PROVIDERS_FAILED: &str = "FWD-002"; constant SINGLE_PROVIDER_FAILED (line 35) | pub const SINGLE_PROVIDER_FAILED: &str = "FWD-003"; constant SWITCH_SUCCESS (line 40) | pub const SWITCH_SUCCESS: &str = "FO-001"; constant CONFIG_READ_ERROR (line 41) | pub const CONFIG_READ_ERROR: &str = "FO-002"; constant LIVE_BACKUP_ERROR (line 42) | pub const LIVE_BACKUP_ERROR: &str = "FO-003"; constant ALL_CIRCUIT_OPEN (line 43) | pub const ALL_CIRCUIT_OPEN: &str = "FO-004"; constant NO_PROVIDERS (line 44) | pub const NO_PROVIDERS: &str = "FO-005"; constant BUILD_STREAM_ERROR (line 49) | pub const BUILD_STREAM_ERROR: &str = "RSP-001"; constant READ_BODY_ERROR (line 50) | pub const READ_BODY_ERROR: &str = "RSP-002"; constant BUILD_RESPONSE_ERROR (line 51) | pub const BUILD_RESPONSE_ERROR: &str = "RSP-003"; constant STREAM_TIMEOUT (line 52) | pub const STREAM_TIMEOUT: &str = "RSP-004"; constant STREAM_ERROR (line 53) | pub const STREAM_ERROR: &str = "RSP-005"; constant LOG_FAILED (line 58) | pub const LOG_FAILED: &str = "USG-001"; constant PRICING_NOT_FOUND (line 59) | pub const PRICING_NOT_FOUND: &str = "USG-002"; FILE: src-tauri/src/proxy/model_mapper.rs type ModelMapping (line 9) | pub struct ModelMapping { method from_provider (line 19) | pub fn from_provider(provider: &Provider) -> Self { method has_mapping (line 52) | pub fn has_mapping(&self) -> bool { method map_model (line 61) | pub fn map_model(&self, original_model: &str, has_thinking: bool) -> S... function has_thinking_enabled (line 99) | pub fn has_thinking_enabled(body: &Value) -> bool { function apply_model_mapping (line 120) | pub fn apply_model_mapping( function create_provider_with_mapping (line 154) | fn create_provider_with_mapping() -> Provider { function create_provider_without_mapping (line 179) | fn create_provider_without_mapping() -> Provider { function create_provider_with_reasoning_only (line 196) | fn create_provider_with_reasoning_only() -> Provider { function test_sonnet_mapping (line 218) | fn test_sonnet_mapping() { function test_haiku_mapping (line 228) | fn test_haiku_mapping() { function test_opus_mapping (line 237) | fn test_opus_mapping() { function test_thinking_mode (line 246) | fn test_thinking_mode() { function test_reasoning_only_mapping_in_thinking_mode (line 258) | fn test_reasoning_only_mapping_in_thinking_mode() { function test_reasoning_only_mapping_does_not_affect_non_thinking (line 270) | fn test_reasoning_only_mapping_does_not_affect_non_thinking() { function test_thinking_disabled (line 283) | fn test_thinking_disabled() { function test_unknown_model_uses_default (line 295) | fn test_unknown_model_uses_default() { function test_no_mapping_configured (line 304) | fn test_no_mapping_configured() { function test_thinking_adaptive (line 314) | fn test_thinking_adaptive() { function test_thinking_unknown_type (line 326) | fn test_thinking_unknown_type() { function test_case_insensitive (line 338) | fn test_case_insensitive() { FILE: src-tauri/src/proxy/provider_router.rs type ProviderRouter (line 16) | pub struct ProviderRouter { method new (line 25) | pub fn new(db: Arc) -> Self { method select_providers (line 37) | pub async fn select_providers(&self, app_type: &str) -> Result Arc Self { method drop (line 296) | fn drop(&mut self) { function test_provider_router_creation (line 311) | async fn test_provider_router_creation() { function test_failover_disabled_uses_current_provider (line 322) | async fn test_failover_disabled_uses_current_provider() { function test_failover_enabled_uses_queue_order_ignoring_current (line 345) | async fn test_failover_enabled_uses_queue_order_ignoring_current() { function test_failover_enabled_uses_queue_only_even_if_current_not_in_queue (line 380) | async fn test_failover_enabled_uses_queue_only_even_if_current_not_in_qu... function test_select_providers_does_not_consume_half_open_permit (line 410) | async fn test_select_providers_does_not_consume_half_open_permit() { function test_release_permit_neutral_frees_half_open_slot (line 453) | async fn test_release_permit_neutral_frees_half_open_slot() { FILE: src-tauri/src/proxy/providers/adapter.rs type ProviderAdapter (line 43) | pub trait ProviderAdapter: Send + Sync { method name (line 45) | fn name(&self) -> &'static str; method extract_base_url (line 55) | fn extract_base_url(&self, provider: &Provider) -> Result Option; method build_url (line 75) | fn build_url(&self, base_url: &str, endpoint: &str) -> String; method add_auth_headers (line 85) | fn add_auth_headers(&self, request: RequestBuilder, auth: &AuthInfo) -... method needs_transform (line 94) | fn needs_transform(&self, _provider: &Provider) -> bool { method transform_request (line 110) | fn transform_request(&self, body: Value, _provider: &Provider) -> Resu... method transform_response (line 128) | fn transform_response(&self, body: Value) -> Result { FILE: src-tauri/src/proxy/providers/auth.rs type AuthInfo (line 9) | pub struct AuthInfo { method new (line 20) | pub fn new(api_key: String, strategy: AuthStrategy) -> Self { method with_access_token (line 29) | pub fn with_access_token(api_key: String, access_token: String) -> Self { method masked_key (line 42) | pub fn masked_key(&self) -> String { method masked_access_token (line 62) | pub fn masked_access_token(&self) -> Option { type AuthStrategy (line 86) | pub enum AuthStrategy { function test_masked_key_long (line 129) | fn test_masked_key_long() { function test_masked_key_short (line 135) | fn test_masked_key_short() { function test_masked_key_exactly_8 (line 141) | fn test_masked_key_exactly_8() { function test_masked_key_9_chars (line 147) | fn test_masked_key_9_chars() { function test_masked_key_utf8_safe (line 153) | fn test_masked_key_utf8_safe() { function test_auth_strategy_equality (line 160) | fn test_auth_strategy_equality() { function test_auth_info_new_has_no_access_token (line 167) | fn test_auth_info_new_has_no_access_token() { function test_auth_info_with_access_token (line 173) | fn test_auth_info_with_access_token() { function test_masked_access_token_long (line 187) | fn test_masked_access_token_long() { function test_masked_access_token_utf8_safe (line 194) | fn test_masked_access_token_utf8_safe() { function test_masked_access_token_short (line 202) | fn test_masked_access_token_short() { function test_masked_access_token_none (line 208) | fn test_masked_access_token_none() { function test_claude_auth_strategy (line 214) | fn test_claude_auth_strategy() { function test_google_oauth_strategy (line 222) | fn test_google_oauth_strategy() { function test_all_strategies_are_distinct (line 229) | fn test_all_strategies_are_distinct() { FILE: src-tauri/src/proxy/providers/claude.rs function get_claude_api_format (line 25) | pub fn get_claude_api_format(provider: &Provider) -> &'static str { type ClaudeAdapter (line 70) | pub struct ClaudeAdapter; method new (line 73) | pub fn new() -> Self { method provider_type (line 84) | pub fn provider_type(&self, provider: &Provider) -> ProviderType { method is_github_copilot (line 104) | fn is_github_copilot(&self, provider: &Provider) -> bool { method is_openrouter (line 123) | fn is_openrouter(&self, provider: &Provider) -> bool { method get_api_format (line 136) | fn get_api_format(&self, provider: &Provider) -> &'static str { method is_bearer_only_mode (line 141) | fn is_bearer_only_mode(&self, provider: &Provider) -> bool { method extract_key (line 166) | fn extract_key(&self, provider: &Provider) -> Option { method default (line 223) | fn default() -> Self { method name (line 229) | fn name(&self) -> &'static str { method extract_base_url (line 233) | fn extract_base_url(&self, provider: &Provider) -> Result Option { method build_url (line 294) | fn build_url(&self, base_url: &str, endpoint: &str) -> String { method add_auth_headers (line 333) | fn add_auth_headers(&self, request: RequestBuilder, auth: &AuthInfo) -> ... method needs_transform (line 359) | fn needs_transform(&self, provider: &Provider) -> bool { method transform_request (line 375) | fn transform_request( method transform_response (line 395) | fn transform_response(&self, body: serde_json::Value) -> Result Provider { function create_provider_with_meta (line 432) | fn create_provider_with_meta(config: serde_json::Value, meta: ProviderMe... function test_extract_base_url_from_env (line 450) | fn test_extract_base_url_from_env() { function test_extract_auth_anthropic (line 463) | fn test_extract_auth_anthropic() { function test_extract_auth_anthropic_api_key (line 478) | fn test_extract_auth_anthropic_api_key() { function test_extract_auth_openrouter (line 493) | fn test_extract_auth_openrouter() { function test_extract_auth_claude_auth_mode (line 508) | fn test_extract_auth_claude_auth_mode() { function test_extract_auth_claude_auth_env_mode (line 524) | fn test_extract_auth_claude_auth_env_mode() { function test_provider_type_detection (line 540) | fn test_provider_type_detection() { function test_build_url_anthropic (line 576) | fn test_build_url_anthropic() { function test_build_url_openrouter (line 584) | fn test_build_url_openrouter() { function test_build_url_no_beta_for_other_endpoints (line 592) | fn test_build_url_no_beta_for_other_endpoints() { function test_build_url_preserve_existing_query (line 600) | fn test_build_url_preserve_existing_query() { function test_build_url_no_beta_for_openai_chat_completions (line 608) | fn test_build_url_no_beta_for_openai_chat_completions() { function test_needs_transform (line 617) | fn test_needs_transform() { function test_github_copilot_detection_by_url (line 736) | fn test_github_copilot_detection_by_url() { function test_github_copilot_detection_by_meta (line 749) | fn test_github_copilot_detection_by_meta() { function test_github_copilot_auth (line 771) | fn test_github_copilot_auth() { function test_github_copilot_needs_transform (line 785) | fn test_github_copilot_needs_transform() { FILE: src-tauri/src/proxy/providers/codex.rs type CodexAdapter (line 21) | pub struct CodexAdapter; method new (line 24) | pub fn new() -> Self { method is_official_client (line 32) | pub fn is_official_client(user_agent: &str) -> bool { method extract_key (line 37) | fn extract_key(&self, provider: &Provider) -> Option { method default (line 78) | fn default() -> Self { method name (line 84) | fn name(&self) -> &'static str { method extract_base_url (line 88) | fn extract_base_url(&self, provider: &Provider) -> Result Option { method build_url (line 140) | fn build_url(&self, base_url: &str, endpoint: &str) -> String { method add_auth_headers (line 177) | fn add_auth_headers(&self, request: RequestBuilder, auth: &AuthInfo) -> ... function create_provider (line 187) | fn create_provider(config: serde_json::Value) -> Provider { function test_extract_base_url_direct (line 205) | fn test_extract_base_url_direct() { function test_extract_auth_from_auth_field (line 216) | fn test_extract_auth_from_auth_field() { function test_extract_auth_from_env (line 230) | fn test_extract_auth_from_env() { function test_build_url (line 243) | fn test_build_url() { function test_build_url_origin_adds_v1 (line 250) | fn test_build_url_origin_adds_v1() { function test_build_url_custom_prefix_no_v1 (line 257) | fn test_build_url_custom_prefix_no_v1() { function test_build_url_dedup_v1 (line 264) | fn test_build_url_dedup_v1() { function test_is_official_client_vscode (line 273) | fn test_is_official_client_vscode() { function test_is_official_client_cli (line 280) | fn test_is_official_client_cli() { function test_is_not_official_client (line 286) | fn test_is_not_official_client() { function test_is_official_client_partial_match (line 295) | fn test_is_official_client_partial_match() { FILE: src-tauri/src/proxy/providers/copilot_auth.rs constant GITHUB_CLIENT_ID (line 28) | const GITHUB_CLIENT_ID: &str = "Iv1.b507a08c87ecfe98"; constant GITHUB_DEVICE_CODE_URL (line 31) | const GITHUB_DEVICE_CODE_URL: &str = "https://github.com/login/device/co... constant GITHUB_OAUTH_TOKEN_URL (line 34) | const GITHUB_OAUTH_TOKEN_URL: &str = "https://github.com/login/oauth/acc... constant COPILOT_TOKEN_URL (line 37) | const COPILOT_TOKEN_URL: &str = "https://api.github.com/copilot_internal... constant GITHUB_USER_URL (line 40) | const GITHUB_USER_URL: &str = "https://api.github.com/user"; constant TOKEN_REFRESH_BUFFER_SECONDS (line 43) | const TOKEN_REFRESH_BUFFER_SECONDS: i64 = 60; constant COPILOT_MODELS_URL (line 46) | const COPILOT_MODELS_URL: &str = "https://api.githubcopilot.com/models"; constant COPILOT_EDITOR_VERSION (line 49) | const COPILOT_EDITOR_VERSION: &str = "vscode/1.96.0"; constant COPILOT_PLUGIN_VERSION (line 50) | const COPILOT_PLUGIN_VERSION: &str = "copilot-chat/0.26.7"; constant COPILOT_USER_AGENT (line 51) | const COPILOT_USER_AGENT: &str = "GitHubCopilotChat/0.26.7"; constant COPILOT_API_VERSION (line 52) | const COPILOT_API_VERSION: &str = "2025-04-01"; constant COPILOT_USAGE_URL (line 55) | const COPILOT_USAGE_URL: &str = "https://api.github.com/copilot_internal... type CopilotUsageResponse (line 59) | pub struct CopilotUsageResponse { type QuotaSnapshots (line 70) | pub struct QuotaSnapshots { type QuotaDetail (line 81) | pub struct QuotaDetail { type CopilotModel (line 94) | pub struct CopilotModel { type CopilotModelsResponse (line 107) | struct CopilotModelsResponse { type CopilotModelsResponseItem (line 113) | struct CopilotModelsResponseItem { type CopilotAuthError (line 122) | pub enum CopilotAuthError { method from (line 158) | fn from(err: reqwest::Error) -> Self { method from (line 164) | fn from(err: std::io::Error) -> Self { type GitHubDeviceCodeResponse (line 171) | pub struct GitHubDeviceCodeResponse { type GitHubOAuthResponse (line 186) | struct GitHubOAuthResponse { type CopilotToken (line 196) | pub struct CopilotToken { method is_expiring_soon (line 205) | pub fn is_expiring_soon(&self) -> bool { type CopilotTokenResponse (line 213) | struct CopilotTokenResponse { type GitHubUser (line 222) | pub struct GitHubUser { type GitHubAccount (line 230) | pub struct GitHubAccount { method from (line 242) | fn from(data: &GitHubAccountData) -> Self { type CopilotAuthStatus (line 254) | pub struct CopilotAuthStatus { type GitHubAccountData (line 271) | struct GitHubAccountData { type CopilotAuthStore (line 285) | struct CopilotAuthStore { type CopilotAuthManager (line 303) | pub struct CopilotAuthManager { method new (line 324) | pub fn new(data_dir: PathBuf) -> Self { method list_accounts (line 349) | pub async fn list_accounts(&self) -> Vec { method get_account (line 356) | pub async fn get_account(&self, account_id: &str) -> Option Result<(), Cop... method add_account_internal (line 397) | async fn add_account_internal( method set_default_account (line 441) | pub async fn set_default_account(&self, account_id: &str) -> Result<()... method start_device_flow (line 461) | pub async fn start_device_flow(&self) -> Result Result { method fetch_models_for_account (line 626) | pub async fn fetch_models_for_account( method fetch_models (line 679) | pub async fn fetch_models(&self) -> Result, CopilotA... method fetch_usage_for_account (line 687) | pub async fn fetch_usage_for_account( method fetch_usage (line 741) | pub async fn fetch_usage(&self) -> Result CopilotAuthStatus { method is_authenticated (line 785) | pub async fn is_authenticated(&self) -> bool { method clear_auth (line 791) | pub async fn clear_auth(&self) -> Result<(), CopilotAuthError> { method fallback_default_account_id (line 822) | fn fallback_default_account_id( method sorted_accounts (line 835) | fn sorted_accounts( method resolve_default_account_id (line 853) | async fn resolve_default_account_id(&self) -> Option { method get_refresh_lock (line 866) | async fn get_refresh_lock(&self, account_id: &str) -> Arc> { method set_migration_error (line 882) | async fn set_migration_error(&self, message: Option) { method write_store_atomic (line 887) | fn write_store_atomic(&self, content: &str) -> Result<(), CopilotAuthE... method fetch_user_info_with_token (line 943) | async fn fetch_user_info_with_token( method fetch_copilot_token_with_github_token (line 970) | async fn fetch_copilot_token_with_github_token( method load_from_disk_sync (line 1029) | fn load_from_disk_sync(&self) -> Result<(), CopilotAuthError> { method ensure_migration_complete (line 1064) | async fn ensure_migration_complete(&self) -> Result<(), CopilotAuthErr... method save_to_disk (line 1112) | async fn save_to_disk(&self) -> Result<(), CopilotAuthError> { function test_copilot_token_expiry (line 1143) | fn test_copilot_token_expiry() { function test_auth_status_serialization (line 1169) | fn test_auth_status_serialization() { function test_multi_account_store_serialization (line 1197) | fn test_multi_account_store_serialization() { function test_legacy_format_detection (line 1245) | fn test_legacy_format_detection() { function test_github_account_from_data (line 1259) | fn test_github_account_from_data() { function test_fallback_default_account_prefers_latest_authenticated (line 1281) | fn test_fallback_default_account_prefers_latest_authenticated() { FILE: src-tauri/src/proxy/providers/gemini.rs type GeminiAdapter (line 15) | pub struct GeminiAdapter; method new (line 41) | pub fn new() -> Self { method provider_type (line 50) | pub fn provider_type(&self, provider: &Provider) -> ProviderType { method detect_auth_type (line 65) | pub fn detect_auth_type(&self, provider: &Provider) -> AuthStrategy { method parse_oauth_credentials (line 73) | pub fn parse_oauth_credentials(&self, key: &str) -> Option Option { type OAuthCredentials (line 20) | pub struct OAuthCredentials { method needs_refresh (line 30) | pub fn needs_refresh(&self) -> bool { method can_refresh (line 35) | pub fn can_refresh(&self) -> bool { method default (line 144) | fn default() -> Self { method name (line 150) | fn name(&self) -> &'static str { method extract_base_url (line 154) | fn extract_base_url(&self, provider: &Provider) -> Result Option { method build_url (line 202) | fn build_url(&self, base_url: &str, endpoint: &str) -> String { method add_auth_headers (line 220) | fn add_auth_headers(&self, request: RequestBuilder, auth: &AuthInfo) -> ... function create_provider (line 240) | fn create_provider(config: serde_json::Value) -> Provider { function test_extract_base_url_from_env (line 258) | fn test_extract_base_url_from_env() { function test_extract_auth_api_key (line 271) | fn test_extract_auth_api_key() { function test_extract_auth_oauth_access_token (line 286) | fn test_extract_auth_oauth_access_token() { function test_extract_auth_oauth_json (line 303) | fn test_extract_auth_oauth_json() { function test_provider_type_detection (line 317) | fn test_provider_type_detection() { function test_extract_auth_fallback (line 355) | fn test_extract_auth_fallback() { function test_build_url_dedup (line 368) | fn test_build_url_dedup() { function test_build_url_normal (line 382) | fn test_build_url_normal() { function test_parse_oauth_credentials_direct_token (line 395) | fn test_parse_oauth_credentials_direct_token() { function test_parse_oauth_credentials_json (line 405) | fn test_parse_oauth_credentials_json() { function test_parse_oauth_credentials_invalid (line 417) | fn test_parse_oauth_credentials_invalid() { FILE: src-tauri/src/proxy/providers/mod.rs type ProviderType (line 43) | pub enum ProviderType { method needs_transform (line 67) | pub fn needs_transform(&self) -> bool { method default_endpoint (line 77) | pub fn default_endpoint(&self) -> &'static str { method from_app_type_and_config (line 93) | pub fn from_app_type_and_config(app_type: &AppType, provider: &Provide... method as_str (line 166) | pub fn as_str(&self) -> &'static str { method fmt (line 180) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type Err (line 186) | type Err = String; method from_str (line 188) | fn from_str(s: &str) -> Result { function get_adapter (line 205) | pub fn get_adapter(app_type: &AppType) -> Box { function get_adapter_for_provider_type (line 223) | pub fn get_adapter_for_provider_type(provider_type: &ProviderType) -> Bo... function create_provider (line 239) | fn create_provider(config: serde_json::Value) -> Provider { function test_provider_type_needs_transform (line 257) | fn test_provider_type_needs_transform() { function test_provider_type_default_endpoint (line 268) | fn test_provider_type_default_endpoint() { function test_provider_type_from_str (line 300) | fn test_provider_type_from_str() { function test_provider_type_as_str (line 349) | fn test_provider_type_as_str() { function test_provider_type_serde (line 360) | fn test_provider_type_serde() { function test_from_app_type_claude_direct (line 379) | fn test_from_app_type_claude_direct() { function test_from_app_type_claude_openrouter (line 392) | fn test_from_app_type_claude_openrouter() { function test_from_app_type_claude_auth (line 405) | fn test_from_app_type_claude_auth() { function test_from_app_type_codex (line 419) | fn test_from_app_type_codex() { function test_from_app_type_gemini_api_key (line 431) | fn test_from_app_type_gemini_api_key() { function test_from_app_type_gemini_cli_oauth (line 443) | fn test_from_app_type_gemini_cli_oauth() { function test_from_app_type_gemini_cli_json (line 455) | fn test_from_app_type_gemini_cli_json() { function test_get_adapter_for_provider_type (line 467) | fn test_get_adapter_for_provider_type() { FILE: src-tauri/src/proxy/providers/models/anthropic.rs type AnthropicRequest (line 12) | pub struct AnthropicRequest { type AnthropicMessage (line 30) | pub struct AnthropicMessage { type AnthropicContentBlock (line 38) | pub enum AnthropicContentBlock { type ImageSource (line 55) | pub struct ImageSource { type AnthropicTool (line 64) | pub struct AnthropicTool { type AnthropicResponse (line 73) | pub struct AnthropicResponse { type AnthropicResponseContent (line 90) | pub enum AnthropicResponseContent { type AnthropicUsage (line 103) | pub struct AnthropicUsage { FILE: src-tauri/src/proxy/providers/models/openai.rs type OpenAIRequest (line 12) | pub struct OpenAIRequest { type OpenAIMessage (line 29) | pub struct OpenAIMessage { type OpenAIContentPart (line 42) | pub enum OpenAIContentPart { type ImageUrl (line 51) | pub struct ImageUrl { type OpenAIToolCall (line 57) | pub struct OpenAIToolCall { type OpenAIFunction (line 66) | pub struct OpenAIFunction { type OpenAITool (line 73) | pub struct OpenAITool { type OpenAIFunctionDef (line 81) | pub struct OpenAIFunctionDef { type OpenAIResponse (line 90) | pub struct OpenAIResponse { type OpenAIChoice (line 102) | pub struct OpenAIChoice { type OpenAIUsage (line 111) | pub struct OpenAIUsage { FILE: src-tauri/src/proxy/providers/streaming.rs type OpenAIStreamChunk (line 13) | struct OpenAIStreamChunk { type StreamChoice (line 22) | struct StreamChoice { type Delta (line 29) | struct Delta { type DeltaToolCall (line 39) | struct DeltaToolCall { type DeltaFunction (line 50) | struct DeltaFunction { type Usage (line 59) | struct Usage { type PromptTokensDetails (line 75) | struct PromptTokensDetails { type ToolBlockState (line 81) | struct ToolBlockState { function create_anthropic_sse_stream (line 90) | pub fn create_anthropic_sse_stream( function extract_cache_read_tokens (line 539) | fn extract_cache_read_tokens(usage: &Usage) -> Option { function map_stop_reason (line 553) | fn map_stop_reason(finish_reason: Option<&str>) -> Option { function test_map_stop_reason_legacy_and_filtered_values (line 578) | fn test_map_stop_reason_legacy_and_filtered_values() { function test_streaming_tool_calls_routed_by_index (line 590) | async fn test_streaming_tool_calls_routed_by_index() { function test_streaming_delays_tool_start_until_id_and_name_ready (line 677) | async fn test_streaming_delays_tool_start_until_id_and_name_ready() { FILE: src-tauri/src/proxy/providers/streaming_responses.rs function response_object_from_event (line 18) | fn response_object_from_event(data: &Value) -> &Value { function content_part_key (line 23) | fn content_part_key(data: &Value) -> Option { function tool_item_key_from_added (line 40) | fn tool_item_key_from_added(data: &Value, item: &Value) -> Option { function tool_item_key_from_event (line 54) | fn tool_item_key_from_event(data: &Value) -> Option { function resolve_content_index (line 69) | fn resolve_content_index( function create_anthropic_sse_stream_from_responses (line 98) | pub fn create_anthropic_sse_stream_from_responses( function test_map_responses_stop_reason_tool_use (line 712) | fn test_map_responses_stop_reason_tool_use() { function test_response_object_from_event_with_wrapper (line 732) | fn test_response_object_from_event_with_wrapper() { function test_streaming_conversion_with_wrapped_response_events (line 746) | async fn test_streaming_conversion_with_wrapped_response_events() { function test_streaming_conversion_interleaved_tool_deltas_by_item_id (line 782) | async fn test_streaming_conversion_interleaved_tool_deltas_by_item_id() { function test_streaming_reasoning_delta_emits_thinking_blocks (line 853) | async fn test_streaming_reasoning_delta_emits_thinking_blocks() { FILE: src-tauri/src/proxy/providers/transform.rs function is_openai_o_series (line 11) | pub fn is_openai_o_series(model: &str) -> bool { function anthropic_to_openai (line 20) | pub fn anthropic_to_openai(body: Value, cache_key: Option<&str>) -> Resu... function convert_message_to_openai (line 122) | fn convert_message_to_openai( function clean_schema (line 251) | pub fn clean_schema(mut schema: Value) -> Value { function openai_to_anthropic (line 273) | pub fn openai_to_anthropic(body: Value) -> Result { function test_anthropic_to_openai_simple (line 449) | fn test_anthropic_to_openai_simple() { function test_anthropic_to_openai_with_system (line 464) | fn test_anthropic_to_openai_with_system() { function test_anthropic_to_openai_with_tools (line 482) | fn test_anthropic_to_openai_with_tools() { function test_anthropic_to_openai_tool_use (line 500) | fn test_anthropic_to_openai_tool_use() { function test_anthropic_to_openai_tool_result (line 521) | fn test_anthropic_to_openai_tool_result() { function test_openai_to_anthropic_simple (line 541) | fn test_openai_to_anthropic_simple() { function test_openai_to_anthropic_with_tool_calls (line 566) | fn test_openai_to_anthropic_with_tool_calls() { function test_model_passthrough (line 597) | fn test_model_passthrough() { function test_anthropic_to_openai_with_cache_key (line 610) | fn test_anthropic_to_openai_with_cache_key() { function test_anthropic_to_openai_no_cache_key (line 622) | fn test_anthropic_to_openai_no_cache_key() { function test_anthropic_to_openai_cache_control_preserved (line 634) | fn test_anthropic_to_openai_cache_control_preserved() { function test_openai_to_anthropic_with_cache_tokens (line 672) | fn test_openai_to_anthropic_with_cache_tokens() { function test_openai_to_anthropic_with_direct_cache_fields (line 697) | fn test_openai_to_anthropic_with_direct_cache_fields() { function test_openai_to_anthropic_finish_reason_content_filter_maps_end_turn (line 720) | fn test_openai_to_anthropic_finish_reason_content_filter_maps_end_turn() { function test_openai_to_anthropic_with_legacy_function_call (line 737) | fn test_openai_to_anthropic_with_legacy_function_call() { function test_openai_to_anthropic_with_content_parts_and_refusal (line 764) | fn test_openai_to_anthropic_with_content_parts_and_refusal() { function test_is_openai_o_series (line 790) | fn test_is_openai_o_series() { function test_anthropic_to_openai_o_series_max_completion_tokens (line 804) | fn test_anthropic_to_openai_o_series_max_completion_tokens() { function test_anthropic_to_openai_non_o_series_keeps_max_tokens (line 825) | fn test_anthropic_to_openai_non_o_series_keeps_max_tokens() { FILE: src-tauri/src/proxy/providers/transform_responses.rs function anthropic_to_responses (line 17) | pub fn anthropic_to_responses(body: Value, cache_key: Option<&str>) -> R... function map_tool_choice_to_responses (line 100) | fn map_tool_choice_to_responses(tool_choice: &Value) -> Value { function map_responses_stop_reason (line 122) | pub(crate) fn map_responses_stop_reason( function build_anthropic_usage_from_responses (line 155) | pub(crate) fn build_anthropic_usage_from_responses(usage: Option<&Value>... function convert_messages_to_input (line 210) | fn convert_messages_to_input(messages: &[Value]) -> Result, P... function responses_to_anthropic (line 346) | pub fn responses_to_anthropic(body: Value) -> Result { function test_anthropic_to_responses_simple (line 455) | fn test_anthropic_to_responses_simple() { function test_anthropic_to_responses_with_system_string (line 473) | fn test_anthropic_to_responses_with_system_string() { function test_anthropic_to_responses_with_system_array (line 488) | fn test_anthropic_to_responses_with_system_array() { function test_anthropic_to_responses_with_tools (line 504) | fn test_anthropic_to_responses_with_tools() { function test_anthropic_to_responses_tool_choice_any_to_required (line 525) | fn test_anthropic_to_responses_tool_choice_any_to_required() { function test_anthropic_to_responses_tool_choice_tool_to_function (line 538) | fn test_anthropic_to_responses_tool_choice_tool_to_function() { function test_anthropic_to_responses_tool_use_lifting (line 552) | fn test_anthropic_to_responses_tool_use_lifting() { function test_anthropic_to_responses_tool_result_lifting (line 583) | fn test_anthropic_to_responses_tool_result_lifting() { function test_anthropic_to_responses_thinking_discarded (line 606) | fn test_anthropic_to_responses_thinking_discarded() { function test_anthropic_to_responses_image (line 629) | fn test_anthropic_to_responses_image() { function test_responses_to_anthropic_simple (line 651) | fn test_responses_to_anthropic_simple() { function test_responses_to_anthropic_with_function_call (line 677) | fn test_responses_to_anthropic_with_function_call() { function test_responses_to_anthropic_with_refusal_block (line 703) | fn test_responses_to_anthropic_with_refusal_block() { function test_responses_to_anthropic_with_reasoning (line 722) | fn test_responses_to_anthropic_with_reasoning() { function test_responses_to_anthropic_incomplete_status (line 758) | fn test_responses_to_anthropic_incomplete_status() { function test_responses_to_anthropic_incomplete_non_token_reason (line 775) | fn test_responses_to_anthropic_incomplete_non_token_reason() { function test_model_passthrough (line 793) | fn test_model_passthrough() { function test_anthropic_to_responses_with_cache_key (line 805) | fn test_anthropic_to_responses_with_cache_key() { function test_anthropic_to_responses_strip_cache_control_on_tools (line 817) | fn test_anthropic_to_responses_strip_cache_control_on_tools() { function test_anthropic_to_responses_strip_cache_control_on_text (line 835) | fn test_anthropic_to_responses_strip_cache_control_on_text() { function test_responses_to_anthropic_with_cache_tokens (line 854) | fn test_responses_to_anthropic_with_cache_tokens() { function test_responses_to_anthropic_with_direct_cache_fields (line 879) | fn test_responses_to_anthropic_with_direct_cache_fields() { function test_anthropic_to_responses_o_series_uses_max_output_tokens (line 902) | fn test_anthropic_to_responses_o_series_uses_max_output_tokens() { FILE: src-tauri/src/proxy/response_handler.rs type ResponseType (line 19) | pub enum ResponseType { method from_content_type (line 29) | pub fn from_content_type(content_type: &str) -> Self { type StreamHandler (line 40) | pub struct StreamHandler { method new (line 50) | pub fn new(idle_timeout_secs: u64) -> Self { method handle_stream (line 60) | pub fn handle_stream( method get_events (line 127) | pub async fn get_events(&self) -> Vec { method extract_usage (line 133) | pub async fn extract_usage(&self, session: &ProxySession) -> Option ResponseType { function test_response_type_detection (line 194) | fn test_response_type_detection() { function test_stream_handler_creation (line 210) | fn test_stream_handler_creation() { FILE: src-tauri/src/proxy/response_processor.rs function is_sse_response (line 32) | pub fn is_sse_response(response: &reqwest::Response) -> bool { function handle_streaming (line 42) | pub async fn handle_streaming( function handle_non_streaming (line 88) | pub async fn handle_non_streaming( function process_response (line 191) | pub async fn process_response( type UsageCallbackWithTiming (line 208) | type UsageCallbackWithTiming = Arc, Option) + Sen... type SseUsageCollector (line 212) | pub struct SseUsageCollector { method new (line 226) | pub fn new( method push (line 243) | pub async fn push(&self, event: Value) { method finish (line 256) | pub async fn finish(&self) { type SseUsageCollectorInner (line 216) | struct SseUsageCollectorInner { function create_usage_collector (line 280) | fn create_usage_collector( function spawn_log_usage (line 360) | fn spawn_log_usage( function log_usage_internal (line 404) | async fn log_usage_internal( function create_logged_passthrough_stream (line 460) | pub fn create_logged_passthrough_stream( function format_headers (line 568) | fn format_headers(headers: &HeaderMap) -> String { function build_state (line 594) | fn build_state(db: Arc) -> ProxyState { function seed_pricing (line 607) | fn seed_pricing(db: &Database) -> Result<(), AppError> { function insert_provider (line 624) | fn insert_provider( function test_log_usage_uses_provider_override_config (line 643) | async fn test_log_usage_uses_provider_override_config() -> Result<(), Ap... function test_log_usage_falls_back_to_global_defaults (line 704) | async fn test_log_usage_falls_back_to_global_defaults() -> Result<(), Ap... FILE: src-tauri/src/proxy/server.rs type ProxyState (line 23) | pub struct ProxyState { type ProxyServer (line 39) | pub struct ProxyServer { method new (line 48) | pub fn new( method start (line 77) | pub async fn start(&self) -> Result { method stop (line 142) | pub async fn stop(&self) -> Result<(), ProxyError> { method get_status (line 174) | pub async fn get_status(&self) -> ProxyStatus { method set_active_target (line 200) | pub async fn set_active_target(&self, app_type: &str, provider_id: &st... method build_router (line 208) | fn build_router(&self) -> Router { method apply_runtime_config (line 267) | pub async fn apply_runtime_config(&self, config: &ProxyConfig) { method update_circuit_breaker_configs (line 274) | pub async fn update_circuit_breaker_configs( method reset_provider_circuit_breaker (line 282) | pub async fn reset_provider_circuit_breaker(&self, provider_id: &str, ... FILE: src-tauri/src/proxy/session.rs type ClientFormat (line 19) | pub enum ClientFormat { method from_path (line 37) | pub fn from_path(path: &str) -> Self { method from_body (line 61) | pub fn from_body(body: &serde_json::Value) -> Self { method as_str (line 89) | pub fn as_str(&self) -> &'static str { method fmt (line 102) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type ProxySession (line 112) | pub struct ProxySession { method from_request (line 136) | pub fn from_request( method with_provider (line 176) | pub fn with_provider(mut self, provider_id: &str) -> Self { method latency_ms (line 182) | pub fn latency_ms(&self) -> u64 { type SessionIdSource (line 193) | pub enum SessionIdSource { type SessionIdResult (line 208) | pub struct SessionIdResult { function extract_session_id (line 240) | pub fn extract_session_id( function extract_codex_session (line 262) | fn extract_codex_session(headers: &HeaderMap, body: &serde_json::Value) ... function extract_from_metadata (line 309) | fn extract_from_metadata(body: &serde_json::Value) -> Option Option { function generate_new_session_id (line 352) | fn generate_new_session_id() -> SessionIdResult { function test_client_format_from_path_claude (line 366) | fn test_client_format_from_path_claude() { function test_client_format_from_path_codex (line 378) | fn test_client_format_from_path_codex() { function test_client_format_from_path_openai (line 386) | fn test_client_format_from_path_openai() { function test_client_format_from_path_gemini (line 394) | fn test_client_format_from_path_gemini() { function test_client_format_from_path_gemini_cli (line 402) | fn test_client_format_from_path_gemini_cli() { function test_client_format_from_body_claude (line 410) | fn test_client_format_from_body_claude() { function test_client_format_from_body_codex (line 420) | fn test_client_format_from_body_codex() { function test_client_format_from_body_gemini (line 428) | fn test_client_format_from_body_gemini() { function test_session_id_uniqueness (line 436) | fn test_session_id_uniqueness() { function test_session_from_request (line 443) | fn test_session_from_request() { function test_session_with_provider (line 463) | fn test_session_with_provider() { function test_client_format_as_str (line 471) | fn test_client_format_as_str() { function test_extract_session_from_claude_metadata_user_id (line 483) | fn test_extract_session_from_claude_metadata_user_id() { function test_extract_session_from_claude_metadata_session_id (line 501) | fn test_extract_session_from_claude_metadata_session_id() { function test_extract_session_from_codex_previous_response_id (line 519) | fn test_extract_session_from_codex_previous_response_id() { function test_extract_session_generates_new_when_not_found (line 534) | fn test_extract_session_generates_new_when_not_found() { function test_parse_session_from_user_id (line 549) | fn test_parse_session_from_user_id() { FILE: src-tauri/src/proxy/thinking_budget_rectifier.rs constant MAX_THINKING_BUDGET (line 10) | const MAX_THINKING_BUDGET: u64 = 32000; constant MAX_TOKENS_VALUE (line 13) | const MAX_TOKENS_VALUE: u64 = 64000; constant MIN_MAX_TOKENS_FOR_BUDGET (line 16) | const MIN_MAX_TOKENS_FOR_BUDGET: u64 = MAX_THINKING_BUDGET + 1; type BudgetRectifySnapshot (line 20) | pub struct BudgetRectifySnapshot { type BudgetRectifyResult (line 31) | pub struct BudgetRectifyResult { function should_rectify_thinking_budget (line 43) | pub fn should_rectify_thinking_budget( function rectify_thinking_budget (line 81) | pub fn rectify_thinking_budget(body: &mut Value) -> BudgetRectifyResult { function snapshot_budget (line 124) | fn snapshot_budget(body: &Value) -> BudgetRectifySnapshot { function enabled_config (line 146) | fn enabled_config() -> RectifierConfig { function budget_disabled_config (line 154) | fn budget_disabled_config() -> RectifierConfig { function master_disabled_config (line 162) | fn master_disabled_config() -> RectifierConfig { function test_detect_budget_tokens_thinking_error (line 173) | fn test_detect_budget_tokens_thinking_error() { function test_detect_budget_tokens_max_tokens_error (line 181) | fn test_detect_budget_tokens_max_tokens_error() { function test_detect_budget_tokens_1024_error (line 189) | fn test_detect_budget_tokens_1024_error() { function test_detect_budget_tokens_with_thinking_and_1024_error (line 197) | fn test_detect_budget_tokens_with_thinking_and_1024_error() { function test_no_trigger_for_unrelated_error (line 205) | fn test_no_trigger_for_unrelated_error() { function test_disabled_budget_config (line 214) | fn test_disabled_budget_config() { function test_master_disabled (line 222) | fn test_master_disabled() { function test_rectify_budget_basic (line 232) | fn test_rectify_budget_basic() { function test_rectify_budget_skips_adaptive (line 257) | fn test_rectify_budget_skips_adaptive() { function test_rectify_budget_preserves_large_max_tokens (line 274) | fn test_rectify_budget_preserves_large_max_tokens() { function test_rectify_budget_creates_thinking_object_when_missing (line 290) | fn test_rectify_budget_creates_thinking_object_when_missing() { function test_rectify_budget_no_max_tokens (line 312) | fn test_rectify_budget_no_max_tokens() { function test_rectify_budget_normalizes_non_enabled_type (line 327) | fn test_rectify_budget_normalizes_non_enabled_type() { function test_rectify_budget_no_change_when_already_valid (line 345) | fn test_rectify_budget_no_change_when_already_valid() { FILE: src-tauri/src/proxy/thinking_optimizer.rs function optimize (line 12) | pub fn optimize(body: &mut Value, config: &OptimizerConfig) { function append_beta (line 77) | fn append_beta(body: &mut Value, beta: &str) { function enabled_config (line 102) | fn enabled_config() -> OptimizerConfig { function disabled_config (line 111) | fn disabled_config() -> OptimizerConfig { function test_adaptive_opus_4_6 (line 121) | fn test_adaptive_opus_4_6() { function test_adaptive_sonnet_4_6 (line 139) | fn test_adaptive_sonnet_4_6() { function test_legacy_sonnet_4_5_thinking_null (line 156) | fn test_legacy_sonnet_4_5_thinking_null() { function test_legacy_budget_too_small_upgraded (line 172) | fn test_legacy_budget_too_small_upgraded() { function test_skip_haiku (line 187) | fn test_skip_haiku() { function test_thinking_optimizer_disabled (line 201) | fn test_thinking_optimizer_disabled() { function test_adaptive_dedup_beta (line 215) | fn test_adaptive_dedup_beta() { function test_legacy_disabled_thinking_injected (line 234) | fn test_legacy_disabled_thinking_injected() { function test_legacy_default_max_tokens (line 249) | fn test_legacy_default_max_tokens() { function test_append_beta_null_field (line 262) | fn test_append_beta_null_field() { FILE: src-tauri/src/proxy/thinking_rectifier.rs type RectifyResult (line 11) | pub struct RectifyResult { function should_rectify_thinking_signature (line 26) | pub fn should_rectify_thinking_signature( function rectify_anthropic_request (line 110) | pub fn rectify_anthropic_request(body: &mut Value) -> RectifyResult { function should_remove_top_level_thinking (line 184) | fn should_remove_top_level_thinking(body: &Value, messages: &[Value]) ->... function normalize_thinking_type (line 232) | pub fn normalize_thinking_type(body: Value) -> Value { function enabled_config (line 241) | fn enabled_config() -> RectifierConfig { function disabled_config (line 249) | fn disabled_config() -> RectifierConfig { function master_disabled_config (line 257) | fn master_disabled_config() -> RectifierConfig { function test_detect_invalid_signature (line 268) | fn test_detect_invalid_signature() { function test_detect_invalid_signature_no_backticks (line 276) | fn test_detect_invalid_signature_no_backticks() { function test_detect_invalid_signature_nested_json (line 284) | fn test_detect_invalid_signature_nested_json() { function test_detect_thinking_expected (line 294) | fn test_detect_thinking_expected() { function test_no_detect_thinking_expected_without_tool_use (line 302) | fn test_no_detect_thinking_expected_without_tool_use() { function test_detect_must_start_with_thinking (line 310) | fn test_detect_must_start_with_thinking() { function test_no_trigger_for_unrelated_error (line 318) | fn test_no_trigger_for_unrelated_error() { function test_detect_signature_field_required (line 331) | fn test_detect_signature_field_required() { function test_disabled_config (line 346) | fn test_disabled_config() { function test_master_disabled (line 355) | fn test_master_disabled() { function test_rectify_removes_thinking_blocks (line 366) | fn test_rectify_removes_thinking_blocks() { function test_rectify_removes_top_level_thinking (line 396) | fn test_rectify_removes_top_level_thinking() { function test_rectify_no_change_when_no_issues (line 418) | fn test_rectify_no_change_when_no_issues() { function test_rectify_no_messages (line 434) | fn test_rectify_no_messages() { function test_rectify_preserves_thinking_when_prefix_exists (line 441) | fn test_rectify_preserves_thinking_when_prefix_exists() { function test_detect_signature_extra_inputs (line 467) | fn test_detect_signature_extra_inputs() { function test_detect_thinking_cannot_be_modified (line 476) | fn test_detect_thinking_cannot_be_modified() { function test_detect_invalid_request (line 485) | fn test_detect_invalid_request() { function test_do_not_detect_thinking_type_tag_mismatch (line 502) | fn test_do_not_detect_thinking_type_tag_mismatch() { function test_rectify_keeps_adaptive_when_no_legacy_blocks (line 513) | fn test_rectify_keeps_adaptive_when_no_legacy_blocks() { function test_rectify_adaptive_preserves_existing_budget_tokens (line 531) | fn test_rectify_adaptive_preserves_existing_budget_tokens() { function test_rectify_does_not_change_enabled_type (line 549) | fn test_rectify_does_not_change_enabled_type() { function test_rectify_removes_top_level_thinking_adaptive (line 566) | fn test_rectify_removes_top_level_thinking_adaptive() { function test_rectify_adaptive_still_cleans_legacy_signature_blocks (line 589) | fn test_rectify_adaptive_still_cleans_legacy_signature_blocks() { function test_normalize_thinking_type_adaptive_unchanged (line 616) | fn test_normalize_thinking_type_adaptive_unchanged() { function test_normalize_thinking_type_enabled_unchanged (line 629) | fn test_normalize_thinking_type_enabled_unchanged() { function test_normalize_thinking_type_disabled_unchanged (line 642) | fn test_normalize_thinking_type_disabled_unchanged() { function test_normalize_thinking_type_preserves_budget (line 654) | fn test_normalize_thinking_type_preserves_budget() { function test_normalize_thinking_type_no_thinking (line 667) | fn test_normalize_thinking_type_no_thinking() { function test_normalize_thinking_type_unknown_unchanged (line 678) | fn test_normalize_thinking_type_unknown_unchanged() { FILE: src-tauri/src/proxy/types.rs type ProxyConfig (line 5) | pub struct ProxyConfig { function default_streaming_first_byte_timeout (line 30) | fn default_streaming_first_byte_timeout() -> u64 { function default_streaming_idle_timeout (line 34) | fn default_streaming_idle_timeout() -> u64 { function default_non_streaming_timeout (line 38) | fn default_non_streaming_timeout() -> u64 { method default (line 43) | fn default() -> Self { type ProxyStatus (line 60) | pub struct ProxyStatus { type ActiveTarget (line 96) | pub struct ActiveTarget { type ProxyServerInfo (line 104) | pub struct ProxyServerInfo { type ProxyTakeoverStatus (line 112) | pub struct ProxyTakeoverStatus { type ApiFormat (line 123) | pub enum ApiFormat { type ProviderHealth (line 131) | pub struct ProviderHealth { type LiveBackup (line 144) | pub struct LiveBackup { type GlobalProxyConfig (line 156) | pub struct GlobalProxyConfig { type AppProxyConfig (line 170) | pub struct AppProxyConfig { type RectifierConfig (line 202) | pub struct RectifierConfig { function default_true (line 218) | fn default_true() -> bool { function default_log_level (line 222) | fn default_log_level() -> String { method default (line 227) | fn default() -> Self { type OptimizerConfig (line 242) | pub struct OptimizerConfig { function default_cache_ttl (line 257) | fn default_cache_ttl() -> String { method default (line 262) | fn default() -> Self { type LogConfig (line 277) | pub struct LogConfig { method to_level_filter (line 297) | pub fn to_level_filter(&self) -> log::LevelFilter { method default (line 287) | fn default() -> Self { function test_rectifier_config_default_enabled (line 317) | fn test_rectifier_config_default_enabled() { function test_rectifier_config_serde_default (line 332) | fn test_rectifier_config_serde_default() { function test_rectifier_config_serde_explicit_true (line 342) | fn test_rectifier_config_serde_explicit_true() { function test_rectifier_config_serde_partial_fields (line 353) | fn test_rectifier_config_serde_partial_fields() { function test_log_config_default (line 363) | fn test_log_config_default() { function test_log_config_serde_default (line 370) | fn test_log_config_serde_default() { function test_log_config_to_level_filter (line 378) | fn test_log_config_to_level_filter() { function test_log_config_serde_roundtrip (line 425) | fn test_log_config_serde_roundtrip() { FILE: src-tauri/src/proxy/usage/calculator.rs type CostBreakdown (line 11) | pub struct CostBreakdown { type ModelPricing (line 21) | pub struct ModelPricing { method from_strings (line 90) | pub fn from_strings( type CostCalculator (line 29) | pub struct CostCalculator; method calculate (line 44) | pub fn calculate( method try_calculate (line 79) | pub fn try_calculate( function test_cost_calculation (line 110) | fn test_cost_calculation() { function test_cost_multiplier (line 140) | fn test_cost_multiplier() { function test_unknown_model_handling (line 161) | fn test_unknown_model_handling() { function test_decimal_precision (line 177) | fn test_decimal_precision() { FILE: src-tauri/src/proxy/usage/logger.rs type RequestLog (line 13) | pub struct RequestLog { type UsageLogger (line 35) | pub struct UsageLogger<'a> { function new (line 40) | pub fn new(db: &'a Database) -> Self { function log_request (line 45) | pub fn log_request(&self, log: &RequestLog) -> Result<(), AppError> { function log_error (line 118) | pub fn log_error( function log_error_with_context (line 154) | pub fn log_error_with_context( function get_model_pricing (line 190) | pub fn get_model_pricing(&self, model_id: &str) -> Result Result<(), AppError> { function test_log_error (line 395) | fn test_log_error() -> Result<(), AppError> { FILE: src-tauri/src/proxy/usage/parser.rs type TokenUsage (line 14) | pub struct TokenUsage { method from_claude_response (line 35) | pub fn from_claude_response(body: &Value) -> Option { method from_claude_stream_events (line 60) | pub fn from_claude_stream_events(events: &[Value]) -> Option { method from_openrouter_response (line 148) | pub fn from_openrouter_response(body: &Value) -> Option { method from_codex_response (line 160) | pub fn from_codex_response(body: &Value) -> Option { method from_codex_response_adjusted (line 213) | pub fn from_codex_response_adjusted(body: &Value) -> Option { method from_codex_stream_events (line 253) | pub fn from_codex_stream_events(events: &[Value]) -> Option { method from_codex_response_auto (line 277) | pub fn from_codex_response_auto(body: &Value) -> Option { method from_codex_stream_events_auto (line 295) | pub fn from_codex_stream_events_auto(events: &[Value]) -> Option { method from_openai_response (line 316) | pub fn from_openai_response(body: &Value) -> Option { method from_openai_stream_events (line 346) | pub fn from_openai_stream_events(events: &[Value]) -> Option { method from_gemini_response (line 362) | pub fn from_gemini_response(body: &Value) -> Option { method from_gemini_stream_chunks (line 391) | pub fn from_gemini_stream_chunks(chunks: &[Value]) -> Option { type ApiType (line 26) | pub enum ApiType { function test_claude_response_parsing (line 449) | fn test_claude_response_parsing() { function test_claude_response_parsing_no_model (line 469) | fn test_claude_response_parsing_no_model() { function test_claude_stream_parsing (line 488) | fn test_claude_stream_parsing() { function test_claude_stream_parsing_no_model (line 518) | fn test_claude_stream_parsing_no_model() { function test_openrouter_response_parsing (line 547) | fn test_openrouter_response_parsing() { function test_gemini_response_parsing (line 563) | fn test_gemini_response_parsing() { function test_gemini_response_parsing_no_model (line 585) | fn test_gemini_response_parsing_no_model() { function test_gemini_response_with_thoughts (line 605) | fn test_gemini_response_with_thoughts() { function test_codex_response_parsing_cached_tokens_in_details (line 644) | fn test_codex_response_parsing_cached_tokens_in_details() { function test_codex_response_adjusted (line 663) | fn test_codex_response_adjusted() { function test_codex_response_adjusted_no_cache (line 682) | fn test_codex_response_adjusted_no_cache() { function test_codex_response_adjusted_cache_read_input_tokens (line 698) | fn test_codex_response_adjusted_cache_read_input_tokens() { function test_codex_response_adjusted_saturating_sub (line 714) | fn test_codex_response_adjusted_saturating_sub() { function test_openrouter_stream_parsing (line 733) | fn test_openrouter_stream_parsing() { function test_native_claude_stream_parsing (line 766) | fn test_native_claude_stream_parsing() { function test_codex_response_auto_openai_format (line 800) | fn test_codex_response_auto_openai_format() { function test_codex_response_auto_codex_format (line 821) | fn test_codex_response_auto_codex_format() { function test_codex_stream_events_auto_codex_format (line 843) | fn test_codex_stream_events_auto_codex_format() { function test_codex_stream_events_auto_openai_format (line 876) | fn test_codex_stream_events_auto_openai_format() { FILE: src-tauri/src/services/config.rs constant MAX_BACKUPS (line 10) | const MAX_BACKUPS: usize = 10; type ConfigService (line 13) | pub struct ConfigService; method create_backup (line 17) | pub fn create_backup(config_path: &Path) -> Result { method cleanup_old_backups (line 41) | fn cleanup_old_backups(backup_dir: &Path, retain: usize) -> Result<(),... method sync_current_providers_to_live (line 87) | pub fn sync_current_providers_to_live(config: &mut MultiAppConfig) -> ... method sync_current_provider_for_app (line 94) | fn sync_current_provider_for_app( method sync_codex_live (line 138) | fn sync_codex_live( method sync_claude_live (line 176) | fn sync_claude_live( method sync_gemini_live (line 201) | fn sync_gemini_live( FILE: src-tauri/src/services/env_checker.rs type EnvConflict (line 7) | pub struct EnvConflict { function check_env_conflicts (line 20) | pub fn check_env_conflicts(app: &str) -> Result, String> { function get_keywords_for_app (line 35) | fn get_keywords_for_app(app: &str) -> Vec<&str> { function check_system_env (line 46) | fn check_system_env(keywords: &[&str]) -> Result, Strin... function check_system_env (line 83) | fn check_system_env(keywords: &[&str]) -> Result, Strin... function check_shell_configs (line 103) | fn check_shell_configs(keywords: &[&str]) -> Result, St... function test_get_keywords (line 159) | fn test_get_keywords() { FILE: src-tauri/src/services/env_manager.rs type BackupInfo (line 14) | pub struct BackupInfo { function delete_env_vars (line 21) | pub fn delete_env_vars(conflicts: Vec) -> Result Result { function get_backup_dir (line 69) | fn get_backup_dir() -> Result { function delete_single_env (line 76) | fn delete_single_env(conflict: &EnvConflict) -> Result<(), String> { function delete_single_env (line 105) | fn delete_single_env(conflict: &EnvConflict) -> Result<(), String> { function restore_from_backup (line 153) | pub fn restore_from_backup(backup_path: String) -> Result<(), String> { function restore_single_env (line 170) | fn restore_single_env(conflict: &EnvConflict) -> Result<(), String> { function restore_single_env (line 200) | fn restore_single_env(conflict: &EnvConflict) -> Result<(), String> { function test_backup_dir_creation (line 236) | fn test_backup_dir_creation() { FILE: src-tauri/src/services/mcp.rs type McpService (line 10) | pub struct McpService; method get_all_servers (line 14) | pub fn get_all_servers(state: &AppState) -> Result Result<()... method delete_server (line 51) | pub fn delete_server(state: &AppState, id: &str) -> Result Resul... method sync_server_to_app (line 99) | fn sync_server_to_app( method sync_server_to_app_no_config (line 107) | fn sync_server_to_app_no_config(server: &McpServer, app: &AppType) -> ... method remove_server_from_all_apps (line 136) | fn remove_server_from_all_apps( method remove_server_from_app (line 148) | fn remove_server_from_app(_state: &AppState, id: &str, app: &AppType) ... method sync_all_enabled (line 165) | pub fn sync_all_enabled(state: &AppState) -> Result<(), AppError> { method get_servers (line 191) | pub fn get_servers( method set_enabled (line 209) | pub fn set_enabled( method sync_enabled (line 221) | pub fn sync_enabled(state: &AppState, app: AppType) -> Result<(), AppE... method import_from_claude (line 234) | pub fn import_from_claude(state: &AppState) -> Result { method import_from_codex (line 272) | pub fn import_from_codex(state: &AppState) -> Result { method import_from_gemini (line 310) | pub fn import_from_gemini(state: &AppState) -> Result { method import_from_opencode (line 348) | pub fn import_from_opencode(state: &AppState) -> Result, Option, Option); type OmoVariant (line 23) | pub struct OmoVariant { constant STANDARD (line 34) | pub const STANDARD: OmoVariant = OmoVariant { constant SLIM (line 45) | pub const SLIM: OmoVariant = OmoVariant { type OmoService (line 58) | pub struct OmoService; method config_path (line 63) | fn config_path(v: &OmoVariant) -> PathBuf { method resolve_local_config_path (line 67) | fn resolve_local_config_path(v: &OmoVariant) -> Result Result, AppErr... method extract_other_fields_with_keys (line 94) | fn extract_other_fields_with_keys( method insert_opt_value (line 109) | fn insert_opt_value(result: &mut Map, key: &str, value:... method insert_object_entries (line 115) | fn insert_object_entries(result: &mut Map, value: Optio... method delete_config_file (line 125) | pub fn delete_config_file(v: &OmoVariant) -> Result<(), AppError> { method write_config_to_file (line 135) | pub fn write_config_to_file(state: &AppState, v: &OmoVariant) -> Resul... method build_config (line 161) | fn build_config(v: &OmoVariant, profile_data: Option<&OmoProfileData>)... method import_from_local (line 173) | pub fn import_from_local( method read_local_file (line 227) | pub fn read_local_file(v: &OmoVariant) -> Result String { function test_strip_jsonc_comments (line 335) | fn test_strip_jsonc_comments() { function test_build_config_empty (line 350) | fn test_build_config_empty() { function test_build_config_with_profile (line 357) | fn test_build_config_with_profile() { function test_build_local_file_data_keeps_all_non_agent_category_fields_in_other (line 377) | fn test_build_local_file_data_keeps_all_non_agent_category_fields_in_oth... function test_build_config_ignores_non_object_other_fields (line 421) | fn test_build_config_ignores_non_object_other_fields() { function test_build_config_slim_excludes_categories (line 434) | fn test_build_config_slim_excludes_categories() { FILE: src-tauri/src/services/prompt.rs function get_unix_timestamp (line 11) | fn get_unix_timestamp() -> Result { type PromptService (line 18) | pub struct PromptService; method get_prompts (line 21) | pub fn get_prompts( method upsert_prompt (line 28) | pub fn upsert_prompt( method delete_prompt (line 60) | pub fn delete_prompt(state: &AppState, app: AppType, id: &str) -> Resu... method enable_prompt (line 73) | pub fn enable_prompt(state: &AppState, app: AppType, id: &str) -> Resu... method import_from_file (line 146) | pub fn import_from_file(state: &AppState, app: AppType) -> Result Result... method import_from_file_on_first_launch (line 187) | pub fn import_from_file_on_first_launch( FILE: src-tauri/src/services/provider/endpoints.rs function get_custom_endpoints (line 13) | pub fn get_custom_endpoints( function add_custom_endpoint (line 35) | pub fn add_custom_endpoint( function remove_custom_endpoint (line 57) | pub fn remove_custom_endpoint( function update_endpoint_last_used (line 71) | pub fn update_endpoint_last_used( function now_millis (line 93) | fn now_millis() -> i64 { FILE: src-tauri/src/services/provider/gemini_auth.rs type GeminiAuthType (line 12) | pub(crate) enum GeminiAuthType { constant PACKYCODE_PARTNER_KEY (line 22) | const PACKYCODE_PARTNER_KEY: &str = "packycode"; constant GOOGLE_OFFICIAL_PARTNER_KEY (line 23) | const GOOGLE_OFFICIAL_PARTNER_KEY: &str = "google-official"; constant PACKYCODE_KEYWORDS (line 26) | const PACKYCODE_KEYWORDS: [&str; 3] = ["packycode", "packyapi", "packy"]; function detect_gemini_auth_type (line 37) | pub(crate) fn detect_gemini_auth_type(provider: &Provider) -> GeminiAuth... function contains_packycode_keyword (line 85) | fn contains_packycode_keyword(value: &str) -> bool { function is_google_official_gemini (line 97) | pub(crate) fn is_google_official_gemini(provider: &Provider) -> bool { function ensure_google_oauth_security_flag (line 132) | pub(crate) fn ensure_google_oauth_security_flag(provider: &Provider) -> ... FILE: src-tauri/src/services/provider/live.rs function sanitize_claude_settings_for_live (line 24) | pub(crate) fn sanitize_claude_settings_for_live(settings: &Value) -> Val... function json_is_subset (line 36) | fn json_is_subset(target: &Value, source: &Value) -> bool { function json_array_contains_subset (line 58) | fn json_array_contains_subset(target_arr: &[Value], source_arr: &[Value]... function json_remove_array_items (line 73) | fn json_remove_array_items(target_arr: &mut Vec, source_arr: &[Va... function json_deep_merge (line 84) | fn json_deep_merge(target: &mut Value, source: &Value) { function json_deep_remove (line 102) | fn json_deep_remove(target: &mut Value, source: &Value) { function toml_value_is_subset (line 130) | fn toml_value_is_subset(target: &toml_edit::Value, source: &toml_edit::V... function toml_array_contains_subset (line 161) | fn toml_array_contains_subset(target: &toml_edit::Array, source: &toml_e... function toml_remove_array_items (line 181) | fn toml_remove_array_items(target: &mut toml_edit::Array, source: &toml_... function toml_item_is_subset (line 198) | fn toml_item_is_subset(target: &Item, source: &Item) -> bool { function merge_toml_item (line 218) | fn merge_toml_item(target: &mut Item, source: &Item) { function merge_toml_table_like (line 229) | fn merge_toml_table_like(target: &mut dyn TableLike, source: &dyn TableL... function remove_toml_item (line 240) | fn remove_toml_item(target: &mut Item, source: &Item) { function remove_toml_table_like (line 275) | fn remove_toml_table_like(target: &mut dyn TableLike, source: &dyn Table... function settings_contain_common_config (line 294) | fn settings_contain_common_config(app_type: &AppType, settings: &Value, ... function provider_uses_common_config (line 339) | pub(crate) fn provider_uses_common_config( function remove_common_config_from_settings (line 356) | pub(crate) fn remove_common_config_from_settings( function apply_common_config_to_settings (line 409) | fn apply_common_config_to_settings( function build_effective_settings_with_common_config (line 464) | pub(crate) fn build_effective_settings_with_common_config( function write_live_with_common_config (line 490) | pub(crate) fn write_live_with_common_config( function strip_common_config_from_live_settings (line 502) | pub(crate) fn strip_common_config_from_live_settings( function normalize_provider_common_config_for_storage (line 541) | pub(crate) fn normalize_provider_common_config_for_storage( type LiveSnapshot (line 581) | pub(crate) enum LiveSnapshot { method restore (line 597) | pub(crate) fn restore(&self) -> Result<(), AppError> { function write_live_snapshot (line 652) | pub(crate) fn write_live_snapshot(app_type: &AppType, provider: &Provide... function sync_all_providers_to_live (line 788) | fn sync_all_providers_to_live(state: &AppState, app_type: &AppType) -> R... function sync_current_provider_for_app_to_live (line 810) | pub(crate) fn sync_current_provider_for_app_to_live( function sync_current_to_live (line 841) | pub fn sync_current_to_live(state: &AppState) -> Result<(), AppError> { function read_live_settings (line 879) | pub fn read_live_settings(app_type: AppType) -> Result { function import_default_config (line 975) | pub fn import_default_config(state: &AppState, app_type: AppType) -> Res... function write_gemini_live (line 1072) | pub(crate) fn write_gemini_live(provider: &Provider) -> Result<(), AppEr... function remove_opencode_provider_from_live (line 1162) | pub(crate) fn remove_opencode_provider_from_live(provider_id: &str) -> R... function import_opencode_providers_from_live (line 1182) | pub fn import_opencode_providers_from_live(state: &AppState) -> Result Result Result<(... function claude_common_config_apply_and_remove_roundtrip_for_non_overlapping_fields (line 1320) | fn claude_common_config_apply_and_remove_roundtrip_for_non_overlapping_f... function codex_common_config_apply_and_remove_roundtrip_for_non_overlapping_fields (line 1344) | fn codex_common_config_apply_and_remove_roundtrip_for_non_overlapping_fi... function explicit_common_config_flag_overrides_legacy_subset_detection (line 1364) | fn explicit_common_config_flag_overrides_legacy_subset_detection() { function claude_common_config_array_subset_detection_and_strip_preserve_extra_items (line 1389) | fn claude_common_config_array_subset_detection_and_strip_preserve_extra_... function codex_common_config_array_subset_detection_and_strip_preserve_extra_items (line 1413) | fn codex_common_config_array_subset_detection_and_strip_preserve_extra_i... FILE: src-tauri/src/services/provider/mod.rs type ProviderService (line 43) | pub struct ProviderService; method normalize_provider_if_claude (line 135) | fn normalize_provider_if_claude(app_type: &AppType, provider: &mut Pro... method list (line 145) | pub fn list( method current (line 159) | pub fn current(state: &AppState, app_type: AppType) -> Result... method update (line 207) | pub fn update( method delete (line 295) | pub fn delete(state: &AppState, app_type: AppType, id: &str) -> Result... method remove_from_live_config (line 363) | pub fn remove_from_live_config( method switch (line 440) | pub fn switch(state: &AppState, app_type: AppType, id: &str) -> Result... method switch_normal (line 520) | fn switch_normal( method sync_current_to_live (line 609) | pub fn sync_current_to_live(state: &AppState) -> Result<(), AppError> { method sync_current_provider_for_app (line 613) | pub fn sync_current_provider_for_app( method migrate_legacy_common_config_usage (line 660) | pub fn migrate_legacy_common_config_usage( method migrate_legacy_common_config_usage_if_needed (line 714) | pub fn migrate_legacy_common_config_usage_if_needed( method extract_common_config_snippet (line 737) | pub fn extract_common_config_snippet( method extract_common_config_snippet_from_settings (line 762) | pub fn extract_common_config_snippet_from_settings( method extract_claude_common_config (line 776) | fn extract_claude_common_config(settings: &Value) -> Result Result Result Result Result R... method read_live_settings (line 957) | pub fn read_live_settings(app_type: AppType) -> Result { method get_custom_endpoints (line 962) | pub fn get_custom_endpoints( method add_custom_endpoint (line 971) | pub fn add_custom_endpoint( method remove_custom_endpoint (line 981) | pub fn remove_custom_endpoint( method update_endpoint_last_used (line 991) | pub fn update_endpoint_last_used( method update_sort_order (line 1001) | pub fn update_sort_order( method query_usage (line 1019) | pub async fn query_usage( method test_usage_script (line 1029) | pub async fn test_usage_script( method write_gemini_live (line 1056) | pub(crate) fn write_gemini_live(provider: &Provider) -> Result<(), App... method validate_provider_settings (line 1060) | fn validate_provider_settings(app_type: &AppType, provider: &Provider)... method extract_credentials (line 1150) | fn extract_credentials( method list_universal (line 1426) | pub fn list_universal( method get_universal (line 1433) | pub fn get_universal( method upsert_universal (line 1441) | pub fn upsert_universal( method delete_universal (line 1452) | pub fn delete_universal(state: &AppState, id: &str) -> Result Result ... type ProviderSortUpdate (line 1411) | pub struct ProviderSortUpdate { FILE: src-tauri/src/services/provider/usage.rs function execute_and_format_usage_result (line 13) | pub(crate) async fn execute_and_format_usage_result( function extract_api_key_from_provider (line 85) | fn extract_api_key_from_provider(provider: &crate::provider::Provider) -... function extract_base_url_from_provider (line 100) | fn extract_base_url_from_provider(provider: &crate::provider::Provider) ... function query_usage (line 113) | pub async fn query_usage( function test_usage_script (line 187) | pub async fn test_usage_script( function validate_usage_script (line 213) | pub(crate) fn validate_usage_script(script: &UsageScript) -> Result<(), ... FILE: src-tauri/src/services/proxy.rs constant PROXY_TOKEN_PLACEHOLDER (line 20) | const PROXY_TOKEN_PLACEHOLDER: &str = "PROXY_MANAGED"; constant CLAUDE_MODEL_OVERRIDE_ENV_KEYS (line 26) | const CLAUDE_MODEL_OVERRIDE_ENV_KEYS: [&str; 6] = [ type ProxyService (line 37) | pub struct ProxyService { method new (line 45) | pub fn new(db: Arc) -> Self { method cleanup_claude_model_overrides_in_live (line 57) | pub fn cleanup_claude_model_overrides_in_live(&self) -> Result<(), Str... method set_app_handle (line 79) | pub fn set_app_handle(&self, handle: tauri::AppHandle) { method start (line 86) | pub async fn start(&self) -> Result { method start_with_takeover (line 136) | pub async fn start_with_takeover(&self) -> Result Result Result<()... method sync_live_config_to_provider (line 392) | async fn sync_live_config_to_provider( method sync_live_to_providers (line 610) | async fn sync_live_to_providers(&self) -> Result<(), String> { method stop (line 631) | pub async fn stop(&self) -> Result<(), String> { method stop_with_restore (line 662) | pub async fn stop_with_restore(&self) -> Result<(), String> { method stop_with_restore_keep_state (line 709) | pub async fn stop_with_restore_keep_state(&self) -> Result<(), String> { method backup_live_configs (line 742) | async fn backup_live_configs(&self) -> Result<(), String> { method backup_live_config_strict (line 778) | async fn backup_live_config_strict(&self, app_type: &AppType) -> Resul... method build_proxy_urls (line 804) | async fn build_proxy_urls(&self) -> Result<(String, String), String> { method takeover_live_configs (line 839) | async fn takeover_live_configs(&self) -> Result<(), String> { method takeover_live_config_strict (line 922) | async fn takeover_live_config_strict(&self, app_type: &AppType) -> Res... method takeover_live_config_best_effort (line 1013) | async fn takeover_live_config_best_effort(&self, app_type: &AppType) -... method restore_live_config_for_app (line 1102) | async fn restore_live_config_for_app(&self, app_type: &AppType) -> Res... method restore_live_configs (line 1140) | async fn restore_live_configs(&self) -> Result<(), String> { method restore_live_config_for_app_with_fallback (line 1159) | async fn restore_live_config_for_app_with_fallback( method write_live_config_for_app (line 1208) | fn write_live_config_for_app(&self, app_type: &AppType, config: &Value... method detect_takeover_in_live_config_for_app (line 1224) | pub fn detect_takeover_in_live_config_for_app(&self, app_type: &AppTyp... method restore_live_from_ssot_for_app (line 1254) | fn restore_live_from_ssot_for_app(&self, app_type: &AppType) -> Result... method cleanup_takeover_placeholders_in_live_for_app (line 1277) | fn cleanup_takeover_placeholders_in_live_for_app( method is_local_proxy_url (line 1296) | fn is_local_proxy_url(url: &str) -> bool { method cleanup_claude_takeover_placeholders_in_live (line 1311) | fn cleanup_claude_takeover_placeholders_in_live(&self) -> Result<(), S... method cleanup_codex_takeover_placeholders_in_live (line 1342) | fn cleanup_codex_takeover_placeholders_in_live(&self) -> Result<(), St... method remove_local_toml_base_url (line 1362) | fn remove_local_toml_base_url(toml_str: &str) -> String { method cleanup_gemini_takeover_placeholders_in_live (line 1366) | fn cleanup_gemini_takeover_placeholders_in_live(&self) -> Result<(), S... method is_takeover_active (line 1391) | pub async fn is_takeover_active(&self) -> Result { method recover_from_crash (line 1400) | pub async fn recover_from_crash(&self) -> Result<(), String> { method detect_takeover_in_live_configs (line 1424) | pub fn detect_takeover_in_live_configs(&self) -> bool { method is_claude_live_taken_over (line 1446) | fn is_claude_live_taken_over(config: &Value) -> bool { method is_codex_live_taken_over (line 1466) | fn is_codex_live_taken_over(config: &Value) -> bool { method is_gemini_live_taken_over (line 1474) | fn is_gemini_live_taken_over(config: &Value) -> bool { method update_live_backup_from_provider (line 1486) | pub async fn update_live_backup_from_provider( method preserve_codex_mcp_servers_in_backup (line 1543) | fn preserve_codex_mcp_servers_in_backup( method switch_proxy_target (line 1605) | pub async fn switch_proxy_target( method update_toml_base_url (line 1657) | fn update_toml_base_url(toml_str: &str, new_url: &str) -> String { method read_claude_live (line 1662) | fn read_claude_live(&self) -> Result { method write_claude_live (line 1693) | fn write_claude_live(&self, config: &Value) -> Result<(), String> { method read_codex_live (line 1699) | fn read_codex_live(&self) -> Result { method write_codex_live (line 1724) | fn write_codex_live(&self, config: &Value) -> Result<(), String> { method read_gemini_live (line 1751) | fn read_gemini_live(&self) -> Result { method write_gemini_live (line 1763) | fn write_gemini_live(&self, config: &Value) -> Result<(), String> { method get_status (line 1774) | pub async fn get_status(&self) -> Result { method get_config (line 1787) | pub async fn get_config(&self) -> Result { method update_config (line 1795) | pub async fn update_config(&self, config: &ProxyConfig) -> Result<(), ... method is_running (line 1876) | pub async fn is_running(&self) -> bool { method update_circuit_breaker_configs (line 1883) | pub async fn update_circuit_breaker_configs( method reset_provider_circuit_breaker (line 1899) | pub async fn reset_provider_circuit_breaker( type TempHome (line 1922) | struct TempHome { method new (line 1930) | fn new() -> Self { method drop (line 1947) | fn drop(&mut self) { function update_toml_base_url_updates_active_model_provider_base_url (line 1961) | fn update_toml_base_url_updates_active_model_provider_base_url() { function update_toml_base_url_falls_back_to_top_level_base_url (line 2003) | fn update_toml_base_url_falls_back_to_top_level_base_url() { function sync_claude_token_does_not_add_anthropic_api_key (line 2024) | async fn sync_claude_token_does_not_add_anthropic_api_key() { function sync_claude_token_respects_existing_api_key_field (line 2080) | async fn sync_claude_token_respects_existing_api_key_field() { function switch_proxy_target_updates_live_backup_when_taken_over (line 2136) | async fn switch_proxy_target_updates_live_backup_when_taken_over() { function update_live_backup_from_provider_applies_claude_common_config (line 2198) | async fn update_live_backup_from_provider_applies_claude_common_config() { function update_live_backup_from_provider_applies_codex_common_config (line 2254) | async fn update_live_backup_from_provider_applies_codex_common_config() { function update_live_backup_from_provider_preserves_codex_mcp_servers (line 2313) | async fn update_live_backup_from_provider_preserves_codex_mcp_servers() { function update_live_backup_from_provider_keeps_new_codex_mcp_entries_on_conflict (line 2388) | async fn update_live_backup_from_provider_keeps_new_codex_mcp_entries_on... FILE: src-tauri/src/services/skill.rs type SyncMethod (line 27) | pub enum SyncMethod { type DiscoverableSkill (line 39) | pub struct DiscoverableSkill { type Skill (line 64) | pub struct Skill { type SkillRepo (line 91) | pub struct SkillRepo { type SkillState (line 104) | pub struct SkillState { type SkillStore (line 114) | pub struct SkillStore { method default (line 122) | fn default() -> Self { type SkillUninstallResult (line 158) | pub struct SkillUninstallResult { type SkillBackupEntry (line 165) | pub struct SkillBackupEntry { type SkillBackupMetadata (line 174) | struct SkillBackupMetadata { constant SKILL_BACKUP_RETAIN_COUNT (line 180) | const SKILL_BACKUP_RETAIN_COUNT: usize = 20; type SkillMetadata (line 184) | pub struct SkillMetadata { type ImportSkillSelection (line 192) | pub struct ImportSkillSelection { type LegacySkillMigrationRow (line 199) | struct LegacySkillMigrationRow { type AgentsLockFile (line 208) | struct AgentsLockFile { type AgentsLockSkill (line 215) | struct AgentsLockSkill { type LockRepoInfo (line 225) | struct LockRepoInfo { function normalize_optional_branch (line 232) | fn normalize_optional_branch(branch: Option) -> Option { function parse_branch_from_source_url (line 243) | fn parse_branch_from_source_url(source_url: Option<&str>) -> Option Option { function parse_agents_lock (line 296) | fn parse_agents_lock() -> HashMap { type SkillService (line 354) | pub struct SkillService; method new (line 363) | pub fn new() -> Self { method build_skill_doc_url (line 368) | fn build_skill_doc_url(owner: &str, repo: &str, branch: &str, doc_path... method extract_doc_path_from_url (line 373) | fn extract_doc_path_from_url(url: &str) -> Option { method get_ssot_dir (line 393) | pub fn get_ssot_dir() -> Result { method get_backup_dir (line 400) | fn get_backup_dir() -> Result { method get_app_skills_dir (line 407) | pub fn get_app_skills_dir(app: &AppType) -> Result { method get_all_installed (line 456) | pub fn get_all_installed(db: &Arc) -> Result, id: &str) -> Result Result> { method delete_backup (line 743) | pub fn delete_backup(backup_id: &str) -> Result<()> { method restore_from_backup (line 762) | pub fn restore_from_backup( method toggle_app (line 832) | pub fn toggle_app(db: &Arc, id: &str, app: &AppType, enabled... method scan_unmanaged (line 859) | pub fn scan_unmanaged(db: &Arc) -> Result Result<()> { method create_symlink (line 1031) | fn create_symlink(src: &Path, dest: &Path) -> Result<()> { method is_symlink (line 1037) | fn is_symlink(path: &Path) -> bool { method get_sync_method (line 1044) | fn get_sync_method() -> SyncMethod { method sync_to_app_dir (line 1054) | pub fn sync_to_app_dir(directory: &str, app: &AppType) -> Result<()> { method copy_to_app (line 1109) | pub fn copy_to_app(directory: &str, app: &AppType) -> Result<()> { method remove_path (line 1114) | fn remove_path(path: &Path) -> Result<()> { method is_symlink_to_ssot (line 1132) | fn is_symlink_to_ssot(path: &Path, ssot_dir: &Path) -> bool { method remove_from_app (line 1159) | pub fn remove_from_app(directory: &str, app: &AppType) -> Result<()> { method sync_to_app (line 1172) | pub fn sync_to_app(db: &Arc, app: &AppType) -> Result<()> { method discover_available (line 1217) | pub async fn discover_available( method list_skills (line 1248) | pub async fn list_skills( method fetch_repo_skills (line 1315) | async fn fetch_repo_skills(&self, repo: &SkillRepo) -> Result Result { method parse_skill_metadata_static (line 1423) | fn parse_skill_metadata_static(path: &Path) -> Result { method read_skill_name_desc (line 1445) | fn read_skill_name_desc(skill_md: &Path, fallback_name: &str) -> (Stri... method sanitize_skill_source_path (line 1460) | fn sanitize_skill_source_path(raw: &str) -> Option { method sanitize_install_name (line 1492) | fn sanitize_install_name(raw: &str) -> Option { method deduplicate_discoverable_skills (line 1518) | fn deduplicate_discoverable_skills(skills: &mut Vec) { method download_repo (line 1534) | async fn download_repo(&self, repo: &SkillRepo) -> Result<(PathBuf, St... method download_and_extract (line 1572) | async fn download_and_extract(&self, url: &str, dest: &Path) -> Result... method copy_dir_recursive (line 1648) | fn copy_dir_recursive(src: &Path, dest: &Path) -> Result<()> { method resolve_uninstall_backup_source (line 1666) | fn resolve_uninstall_backup_source(skill: &InstalledSkill) -> Result String { method cleanup_old_skill_backups (line 1704) | fn cleanup_old_skill_backups(dir: &Path) -> Result<()> { method backup_path_for_id (line 1730) | fn backup_path_for_id(backup_id: &str) -> Result { method read_backup_metadata (line 1742) | fn read_backup_metadata(backup_path: &Path) -> Result Result Result { method scan_skills_in_dir (line 2055) | fn scan_skills_in_dir(dir: &Path) -> Result> { method scan_skills_recursive (line 2062) | fn scan_skills_recursive(current: &Path, results: &mut Vec) -... method list_repos (line 2092) | pub fn list_repos(&self, store: &SkillStore) -> Vec { method add_repo (line 2097) | pub fn add_repo(&self, store: &mut SkillStore, repo: SkillRepo) -> Res... method remove_repo (line 2112) | pub fn remove_repo(&self, store: &mut SkillStore, owner: String, name:... method default (line 357) | fn default() -> Self { function build_repo_info_from_lock (line 2126) | fn build_repo_info_from_lock( function save_repos_from_lock (line 2162) | fn save_repos_from_lock( function migrate_skills_to_ssot (line 2202) | pub fn migrate_skills_to_ssot(db: &Arc) -> Result { FILE: src-tauri/src/services/speedtest.rs constant DEFAULT_TIMEOUT_SECS (line 8) | const DEFAULT_TIMEOUT_SECS: u64 = 8; constant MAX_TIMEOUT_SECS (line 9) | const MAX_TIMEOUT_SECS: u64 = 30; constant MIN_TIMEOUT_SECS (line 10) | const MIN_TIMEOUT_SECS: u64 = 2; type EndpointLatency (line 14) | pub struct EndpointLatency { type SpeedtestService (line 22) | pub struct SpeedtestService; method test_endpoints (line 26) | pub async fn test_endpoints( method build_client (line 119) | fn build_client(timeout_secs: u64) -> Result<(Client, std::time::Durat... method sanitize_timeout (line 126) | fn sanitize_timeout(timeout_secs: Option) -> u64 { function sanitize_timeout_clamps_values (line 137) | fn sanitize_timeout_clamps_values() { function test_endpoints_handles_empty_list (line 157) | fn test_endpoints_handles_empty_list() { function test_endpoints_reports_invalid_url (line 165) | fn test_endpoints_reports_invalid_url() { FILE: src-tauri/src/services/stream_check.rs type HealthStatus (line 21) | pub enum HealthStatus { type StreamCheckConfig (line 30) | pub struct StreamCheckConfig { function default_test_prompt (line 45) | fn default_test_prompt() -> String { method default (line 50) | fn default() -> Self { type StreamCheckResult (line 66) | pub struct StreamCheckResult { type StreamCheckService (line 78) | pub struct StreamCheckService; method check_with_retry (line 84) | pub async fn check_with_retry( method merge_provider_config (line 142) | fn merge_provider_config( method check_once (line 181) | async fn check_once( method check_claude_stream (line 295) | async fn check_claude_stream( method check_codex_stream (line 447) | async fn check_codex_stream( method check_gemini_stream (line 535) | async fn check_gemini_stream( method determine_status (line 590) | fn determine_status(latency_ms: u64, threshold: u64) -> HealthStatus { method parse_model_with_effort (line 600) | fn parse_model_with_effort(model: &str) -> (String, Option) { method should_retry (line 611) | fn should_retry(msg: &str) -> bool { method map_request_error (line 616) | fn map_request_error(e: reqwest::Error) -> AppError { method resolve_test_model (line 626) | fn resolve_test_model( method extract_opencode_model (line 652) | fn extract_opencode_model(provider: &Provider) -> Option { method extract_openclaw_model (line 662) | fn extract_openclaw_model(provider: &Provider) -> Option { method extract_env_model (line 677) | fn extract_env_model(provider: &Provider, key: &str) -> Option { method extract_codex_model (line 687) | fn extract_codex_model(provider: &Provider) -> Option { method get_os_name (line 704) | fn get_os_name() -> &'static str { method get_arch_name (line 714) | fn get_arch_name() -> &'static str { method resolve_claude_stream_url (line 724) | fn resolve_claude_stream_url( function test_determine_status (line 754) | fn test_determine_status() { function test_should_retry (line 770) | fn test_should_retry() { function test_default_config (line 778) | fn test_default_config() { function test_parse_model_with_effort (line 786) | fn test_parse_model_with_effort() { function test_get_os_name (line 804) | fn test_get_os_name() { function test_get_arch_name (line 820) | fn test_get_arch_name() { function test_auth_strategy_imports (line 833) | fn test_auth_strategy_imports() { function test_resolve_claude_stream_url_for_github_copilot (line 851) | fn test_resolve_claude_stream_url_for_github_copilot() { function test_resolve_claude_stream_url_for_openai_chat (line 862) | fn test_resolve_claude_stream_url_for_openai_chat() { function test_resolve_claude_stream_url_for_anthropic (line 873) | fn test_resolve_claude_stream_url_for_anthropic() { FILE: src-tauri/src/services/usage_stats.rs type UsageSummary (line 17) | pub struct UsageSummary { type DailyStats (line 30) | pub struct DailyStats { type ProviderStats (line 44) | pub struct ProviderStats { type ModelStats (line 57) | pub struct ModelStats { type LogFilters (line 68) | pub struct LogFilters { type PaginatedLogs (line 80) | pub struct PaginatedLogs { type RequestLogDetail (line 90) | pub struct RequestLogDetail { method get_usage_summary (line 120) | pub fn get_usage_summary( method get_daily_trends (line 228) | pub fn get_daily_trends( method get_provider_stats (line 401) | pub fn get_provider_stats(&self) -> Result, AppError> { method get_model_stats (line 472) | pub fn get_model_stats(&self) -> Result, AppError> { method get_request_logs (line 527) | pub fn get_request_logs( method get_request_detail (line 655) | pub fn get_request_detail( method check_provider_limits (line 719) | pub fn check_provider_limits( type ProviderLimitStatus (line 811) | pub struct ProviderLimitStatus { type PricingInfo (line 822) | struct PricingInfo { method maybe_backfill_log_costs (line 830) | fn maybe_backfill_log_costs( method get_cost_multiplier_cached (line 909) | fn get_cost_multiplier_cached( method get_model_pricing_cached (line 942) | fn get_model_pricing_cached( function find_model_pricing_row (line 972) | pub(crate) fn find_model_pricing_row( function test_get_usage_summary (line 1019) | fn test_get_usage_summary() -> Result<(), AppError> { function test_get_model_stats (line 1051) | fn test_get_model_stats() -> Result<(), AppError> { function test_model_pricing_matching (line 1087) | fn test_model_pricing_matching() -> Result<(), AppError> { FILE: src-tauri/src/services/webdav.rs constant DEFAULT_TIMEOUT_SECS (line 13) | const DEFAULT_TIMEOUT_SECS: u64 = 30; constant TRANSFER_TIMEOUT_SECS (line 15) | const TRANSFER_TIMEOUT_SECS: u64 = 300; type WebDavAuth (line 18) | pub type WebDavAuth = Option<(String, Option)>; function method_propfind (line 22) | fn method_propfind() -> Method { function method_mkcol (line 26) | fn method_mkcol() -> Method { function parse_base_url (line 33) | pub fn parse_base_url(raw: &str) -> Result { function build_remote_url (line 62) | pub fn build_remote_url(base_url: &str, segments: &[String]) -> Result impl Iterator { function auth_from_credentials (line 88) | pub fn auth_from_credentials(username: &str, password: &str) -> WebDavAu... function apply_auth (line 97) | fn apply_auth(builder: RequestBuilder, auth: &WebDavAuth) -> RequestBuil... function webdav_transport_error (line 104) | fn webdav_transport_error( function test_connection (line 132) | pub async fn test_connection(base_url: &str, auth: &WebDavAuth) -> Resul... function ensure_remote_directories (line 165) | pub async fn ensure_remote_directories( function put_bytes (line 224) | pub async fn put_bytes( function get_bytes (line 252) | pub async fn get_bytes( function head_etag (line 300) | pub async fn head_etag(url: &str, auth: &WebDavAuth) -> Result bool { function webdav_status_error (line 368) | pub fn webdav_status_error(op: &str, status: StatusCode, url: &str) -> A... function redact_url (line 402) | fn redact_url(raw: &str) -> String { function response_too_large_error (line 432) | fn response_too_large_error(url: &str, max_bytes: usize) -> AppError { function ensure_content_length_within_limit (line 449) | fn ensure_content_length_within_limit( function build_remote_url_encodes_path_segments (line 475) | fn build_remote_url_encodes_path_segments() { function is_jianguoyun_detects_correctly (line 495) | fn is_jianguoyun_detects_correctly() { function path_segments_splits_correctly (line 502) | fn path_segments_splits_correctly() { function auth_from_credentials_trims_and_rejects_blank (line 514) | fn auth_from_credentials_trims_and_rejects_blank() { function redact_url_hides_credentials_and_query_values (line 521) | fn redact_url_hides_credentials_and_query_values() { function ensure_content_length_within_limit_accepts_missing_or_small_values (line 528) | fn ensure_content_length_within_limit_accepts_missing_or_small_values() { function ensure_content_length_within_limit_rejects_oversized_values (line 542) | fn ensure_content_length_within_limit_rejects_oversized_values() { FILE: src-tauri/src/services/webdav_auto_sync.rs constant AUTO_SYNC_DEBOUNCE_MS (line 15) | const AUTO_SYNC_DEBOUNCE_MS: u64 = 1000; constant MAX_AUTO_SYNC_WAIT_MS (line 16) | pub(crate) const MAX_AUTO_SYNC_WAIT_MS: u64 = 10_000; type AutoSyncSuppressionGuard (line 21) | pub(crate) struct AutoSyncSuppressionGuard; method new (line 24) | pub fn new() -> Self { method drop (line 31) | fn drop(&mut self) { function is_auto_sync_suppressed (line 39) | pub(crate) fn is_auto_sync_suppressed() -> bool { function should_trigger_for_table (line 43) | pub fn should_trigger_for_table(table: &str) -> bool { function enqueue_change_signal (line 58) | pub(crate) fn enqueue_change_signal(tx: &Sender, table: &str) ->... function auto_sync_wait_duration (line 65) | pub(crate) fn auto_sync_wait_duration(started_at: Instant, now: Instant)... function should_run_auto_sync (line 75) | fn should_run_auto_sync(settings: Option<&WebDavSyncSettings>) -> bool { function persist_auto_sync_error (line 82) | fn persist_auto_sync_error(settings: &mut WebDavSyncSettings, error: &Ap... function emit_auto_sync_status_updated (line 88) | fn emit_auto_sync_status_updated(app: &AppHandle, status: &str, error: O... function run_auto_sync_upload (line 106) | async fn run_auto_sync_upload( function notify_db_changed (line 138) | pub fn notify_db_changed(table: &str) { function start_worker (line 151) | pub fn start_worker(db: Arc, app: tauri::AppH... function run_worker_loop (line 167) | async fn run_worker_loop( function should_trigger_sync_for_config_tables_only (line 211) | fn should_trigger_sync_for_config_tables_only() { function suppression_guard_enables_and_restores_state (line 219) | fn suppression_guard_enables_and_restores_state() { function max_wait_caps_flush_latency_for_continuous_events (line 229) | fn max_wait_caps_flush_latency_for_continuous_events() { function enqueue_change_signal_drops_when_channel_is_full (line 236) | async fn enqueue_change_signal_drops_when_channel_is_full() { function should_run_auto_sync_requires_enabled_and_auto_sync_flag (line 243) | fn should_run_auto_sync_requires_enabled_and_auto_sync_flag() { function service_layer_does_not_depend_on_commands_layer (line 269) | fn service_layer_does_not_depend_on_commands_layer() { FILE: src-tauri/src/services/webdav_sync.rs constant PROTOCOL_FORMAT (line 32) | const PROTOCOL_FORMAT: &str = "cc-switch-webdav-sync"; constant PROTOCOL_VERSION (line 33) | const PROTOCOL_VERSION: u32 = 2; constant DB_COMPAT_VERSION (line 34) | const DB_COMPAT_VERSION: u32 = 6; constant LEGACY_DB_COMPAT_VERSION (line 35) | const LEGACY_DB_COMPAT_VERSION: u32 = 5; constant REMOTE_DB_SQL (line 36) | const REMOTE_DB_SQL: &str = "db.sql"; constant REMOTE_SKILLS_ZIP (line 37) | const REMOTE_SKILLS_ZIP: &str = "skills.zip"; constant REMOTE_MANIFEST (line 38) | const REMOTE_MANIFEST: &str = "manifest.json"; constant MAX_DEVICE_NAME_LEN (line 39) | const MAX_DEVICE_NAME_LEN: usize = 64; constant MAX_MANIFEST_BYTES (line 40) | const MAX_MANIFEST_BYTES: usize = 1024 * 1024; constant MAX_SYNC_ARTIFACT_BYTES (line 41) | pub(super) const MAX_SYNC_ARTIFACT_BYTES: u64 = 512 * 1024 * 1024; function sync_mutex (line 43) | pub fn sync_mutex() -> &'static tokio::sync::Mutex<()> { function run_with_sync_lock (line 48) | pub async fn run_with_sync_lock(operation: Fut) -> Result, en: impl Into &'static str { type RemoteSnapshot (line 117) | struct RemoteSnapshot { function check_connection (line 127) | pub async fn check_connection(settings: &WebDavSyncSettings) -> Result<(... function upload (line 137) | pub async fn upload( function download (line 183) | pub async fn download( function fetch_remote_info (line 237) | pub async fn fetch_remote_info(settings: &WebDavSyncSettings) -> Result<... function persist_sync_success (line 264) | fn persist_sync_success( function persist_sync_success_best_effort (line 281) | fn persist_sync_success_best_effort( function build_local_snapshot (line 301) | fn build_local_snapshot( function compute_snapshot_id (line 364) | fn compute_snapshot_id(artifacts: &BTreeMap) -> St... function sha256_hex (line 372) | fn sha256_hex(bytes: &[u8]) -> String { function detect_system_device_name (line 378) | fn detect_system_device_name() -> Option { function normalize_device_name (line 396) | fn normalize_device_name(raw: &str) -> Option { function effective_db_compat_version (line 424) | fn effective_db_compat_version(manifest: &SyncManifest, layout: RemoteLa... function validate_manifest_compat (line 430) | fn validate_manifest_compat(manifest: &SyncManifest, layout: RemoteLayou... function find_remote_snapshot (line 493) | async fn find_remote_snapshot( function fetch_remote_snapshot (line 503) | async fn fetch_remote_snapshot( function download_and_verify (line 531) | async fn download_and_verify( function apply_snapshot (line 594) | fn apply_snapshot( function remote_dir_segments (line 629) | fn remote_dir_segments(settings: &WebDavSyncSettings, layout: RemoteLayo... function remote_file_url (line 640) | fn remote_file_url( function remote_dir_display (line 650) | fn remote_dir_display(settings: &WebDavSyncSettings, layout: RemoteLayou... function auth_for (line 655) | fn auth_for(settings: &WebDavSyncSettings) -> WebDavAuth { function validate_artifact_size_limit (line 659) | fn validate_artifact_size_limit(artifact_name: &str, size: u64) -> Resul... function artifact (line 680) | fn artifact(sha256: &str, size: u64) -> ArtifactMeta { function snapshot_id_is_stable (line 688) | fn snapshot_id_is_stable() { function snapshot_id_changes_with_artifacts (line 699) | fn snapshot_id_changes_with_artifacts() { function remote_dir_segments_uses_current_layout (line 710) | fn remote_dir_segments_uses_current_layout() { function remote_dir_segments_uses_legacy_layout (line 721) | fn remote_dir_segments_uses_legacy_layout() { function sha256_hex_is_correct (line 732) | fn sha256_hex_is_correct() { function persist_best_effort_returns_true_on_success (line 741) | fn persist_best_effort_returns_true_on_success() { function persist_best_effort_returns_false_on_error (line 753) | fn persist_best_effort_returns_false_on_error() { function manifest_with (line 764) | fn manifest_with(format: &str, version: u32, db_compat_version: Option Result<(), AppError> { function restore_skills_zip (line 66) | pub(super) fn restore_skills_zip(raw: &[u8]) -> Result<(), AppError> { function backup_current_skills (line 162) | pub(super) fn backup_current_skills() -> Result { function restore_skills_from_backup (line 193) | pub(super) fn restore_skills_from_backup(backup: &SkillsBackup) -> Resul... function zip_dir_recursive (line 205) | fn zip_dir_recursive( function copy_dir_recursive (line 293) | fn copy_dir_recursive(src: &Path, dest: &Path) -> Result<(), AppError> { function copy_dir_recursive_inner (line 298) | fn copy_dir_recursive_inner( function mark_visited_dir (line 327) | fn mark_visited_dir(path: &Path, visited: &mut HashSet) -> Resu... function copy_entry_with_total_limit (line 332) | fn copy_entry_with_total_limit( function mark_visited_dir_tracks_canonical_duplicates (line 376) | fn mark_visited_dir_tracks_canonical_duplicates() { function copy_entry_with_total_limit_rejects_oversized_stream_before_write (line 387) | fn copy_entry_with_total_limit_rejects_oversized_stream_before_write() { FILE: src-tauri/src/session_manager/mod.rs type SessionMeta (line 11) | pub struct SessionMeta { type SessionMessage (line 32) | pub struct SessionMessage { function scan_sessions (line 39) | pub fn scan_sessions() -> Vec { function load_messages (line 71) | pub fn load_messages(provider_id: &str, source_path: &str) -> Result Result { function canonicalize_existing_path (line 131) | fn canonicalize_existing_path(path: &Path, label: &str) -> Result Vec { function load_messages (line 31) | pub fn load_messages(path: &Path) -> Result, String> { function delete_session (line 73) | pub fn delete_session(_root: &Path, path: &Path, session_id: &str) -> Re... function parse_session (line 108) | fn parse_session(path: &Path) -> Option { function is_agent_session (line 193) | fn is_agent_session(path: &Path) -> bool { function infer_session_id_from_filename (line 200) | fn infer_session_id_from_filename(path: &Path) -> Option { function collect_jsonl_files (line 206) | fn collect_jsonl_files(root: &Path, files: &mut Vec) { function remove_path_if_exists (line 226) | fn remove_path_if_exists(path: &Path) -> std::io::Result<()> { function delete_session_removes_main_file_and_sidecar_directory (line 246) | fn delete_session_removes_main_file_and_sidecar_directory() { FILE: src-tauri/src/session_manager/providers/codex.rs constant PROVIDER_ID (line 16) | const PROVIDER_ID: &str = "codex"; function scan_sessions (line 23) | pub fn scan_sessions() -> Vec { function load_messages (line 38) | pub fn load_messages(path: &Path) -> Result, String> { function delete_session (line 84) | pub fn delete_session(_root: &Path, path: &Path, session_id: &str) -> Re... function parse_session (line 105) | fn parse_session(path: &Path) -> Option { function infer_session_id_from_filename (line 192) | fn infer_session_id_from_filename(path: &Path) -> Option { function collect_jsonl_files (line 197) | fn collect_jsonl_files(root: &Path, files: &mut Vec) { function delete_session_removes_jsonl_file (line 223) | fn delete_session_removes_jsonl_file() { FILE: src-tauri/src/session_manager/providers/gemini.rs constant PROVIDER_ID (line 9) | const PROVIDER_ID: &str = "gemini"; function scan_sessions (line 11) | pub fn scan_sessions() -> Vec { function load_messages (line 51) | pub fn load_messages(path: &Path) -> Result, String> { function delete_session (line 83) | pub fn delete_session(_root: &Path, path: &Path, session_id: &str) -> Re... function parse_session (line 108) | fn parse_session(path: &Path) -> Option { function delete_session_removes_json_file (line 150) | fn delete_session_removes_json_file() { FILE: src-tauri/src/session_manager/providers/openclaw.rs constant PROVIDER_ID (line 17) | const PROVIDER_ID: &str = "openclaw"; function scan_sessions (line 19) | pub fn scan_sessions() -> Vec { function load_messages (line 73) | pub fn load_messages(path: &Path) -> Result, String> { function delete_session (line 121) | pub fn delete_session(_root: &Path, path: &Path, session_id: &str) -> Re... function parse_session (line 152) | fn parse_session(path: &Path) -> Option { function prune_sessions_index (line 244) | fn prune_sessions_index( function delete_session_updates_index_and_removes_jsonl (line 288) | fn delete_session_updates_index_and_removes_jsonl() { FILE: src-tauri/src/session_manager/providers/opencode.rs constant PROVIDER_ID (line 9) | const PROVIDER_ID: &str = "opencode"; function get_opencode_data_dir (line 15) | pub(crate) fn get_opencode_data_dir() -> PathBuf { function scan_sessions (line 26) | pub fn scan_sessions() -> Vec { function load_messages (line 45) | pub fn load_messages(path: &Path) -> Result, String> { function delete_session (line 114) | pub fn delete_session(storage: &Path, path: &Path, session_id: &str) -> ... function parse_session (line 179) | fn parse_session(storage: &Path, path: &Path) -> Option { function get_first_user_summary (line 237) | fn get_first_user_summary(storage: &Path, session_id: &str) -> Option String { function collect_json_files (line 323) | fn collect_json_files(root: &Path, files: &mut Vec) { function find_session_file (line 343) | fn find_session_file(storage: &Path, session_id: &str) -> Option { function remove_file_if_exists (line 354) | fn remove_file_if_exists(path: &Path) -> std::io::Result<()> { function remove_dir_all_if_exists (line 362) | fn remove_dir_all_if_exists(path: &Path) -> std::io::Result<()> { function delete_session_removes_session_diff_messages_and_parts (line 376) | fn delete_session_removes_session_diff_messages_and_parts() { FILE: src-tauri/src/session_manager/providers/utils.rs function read_head_tail_lines (line 10) | pub fn read_head_tail_lines( function parse_timestamp_to_ms (line 48) | pub fn parse_timestamp_to_ms(value: &Value) -> Option { function extract_text (line 55) | pub fn extract_text(content: &Value) -> String { function extract_text_from_item (line 73) | fn extract_text_from_item(item: &Value) -> Option { function truncate_summary (line 96) | pub fn truncate_summary(text: &str, max_chars: usize) -> String { function path_basename (line 110) | pub fn path_basename(value: &str) -> Option { FILE: src-tauri/src/session_manager/terminal/mod.rs function launch_terminal (line 3) | pub fn launch_terminal( function launch_macos_terminal (line 29) | fn launch_macos_terminal(command: &str, cwd: Option<&str>) -> Result<(),... function launch_iterm (line 52) | fn launch_iterm(command: &str, cwd: Option<&str>) -> Result<(), String> { function launch_ghostty (line 79) | fn launch_ghostty(command: &str, cwd: Option<&str>) -> Result<(), String> { function build_ghostty_args (line 94) | fn build_ghostty_args(command: &str, cwd: Option<&str>) -> Vec { function ghostty_raw_input (line 114) | fn ghostty_raw_input(command: &str) -> String { function launch_kitty (line 128) | fn launch_kitty(command: &str, cwd: Option<&str>) -> Result<(), String> { function launch_wezterm (line 153) | fn launch_wezterm(command: &str, cwd: Option<&str>) -> Result<(), String> { function launch_alacritty (line 185) | fn launch_alacritty(command: &str, cwd: Option<&str>) -> Result<(), Stri... function launch_custom (line 214) | fn launch_custom( function build_shell_command (line 246) | fn build_shell_command(command: &str, cwd: Option<&str>) -> String { function shell_escape (line 255) | fn shell_escape(value: &str) -> String { function escape_osascript (line 260) | fn escape_osascript(value: &str) -> String { function ghostty_uses_shell_mode_for_resume_commands (line 269) | fn ghostty_uses_shell_mode_for_resume_commands() { function ghostty_keeps_command_without_cwd_prefix_when_not_provided (line 286) | fn ghostty_keeps_command_without_cwd_prefix_when_not_provided() { function ghostty_escapes_newlines_and_backslashes_in_input (line 302) | fn ghostty_escapes_newlines_and_backslashes_in_input() { FILE: src-tauri/src/settings.rs type CustomEndpoint (line 14) | pub struct CustomEndpoint { function default_true (line 21) | fn default_true() -> bool { type VisibleApps (line 28) | pub struct VisibleApps { method is_visible (line 55) | pub fn is_visible(&self, app: &AppType) -> bool { method default (line 42) | fn default() -> Self { type WebDavSyncStatus (line 69) | pub struct WebDavSyncStatus { function default_remote_root (line 84) | fn default_remote_root() -> String { function default_profile (line 87) | fn default_profile() -> String { type WebDavSyncSettings (line 94) | pub struct WebDavSyncSettings { method validate (line 129) | pub fn validate(&self) -> Result<(), crate::error::AppError> { method normalize (line 147) | pub fn normalize(&mut self) { method is_empty (line 161) | fn is_empty(&self) -> bool { method default (line 114) | fn default() -> Self { type AppSettings (line 172) | pub struct AppSettings { method settings_path (line 320) | fn settings_path() -> Option { method normalize_paths (line 329) | fn normalize_paths(&mut self) { method load_from_file (line 380) | fn load_from_file() -> Self { function default_show_in_tray (line 274) | fn default_show_in_tray() -> bool { function default_minimize_to_tray_on_close (line 278) | fn default_minimize_to_tray_on_close() -> bool { method default (line 283) | fn default() -> Self { function save_settings_file (line 405) | fn save_settings_file(settings: &AppSettings) -> Result<(), AppError> { function settings_store (line 444) | fn settings_store() -> &'static RwLock { function resolve_override_path (line 448) | fn resolve_override_path(raw: &str) -> PathBuf { function get_settings (line 466) | pub fn get_settings() -> AppSettings { function get_settings_for_frontend (line 476) | pub fn get_settings_for_frontend() -> AppSettings { function update_settings (line 485) | pub fn update_settings(mut new_settings: AppSettings) -> Result<(), AppE... function mutate_settings (line 497) | fn mutate_settings(mutator: F) -> Result<(), AppError> function reload_settings (line 515) | pub fn reload_settings() -> Result<(), AppError> { function get_claude_override_dir (line 525) | pub fn get_claude_override_dir() -> Option { function get_codex_override_dir (line 533) | pub fn get_codex_override_dir() -> Option { function get_gemini_override_dir (line 541) | pub fn get_gemini_override_dir() -> Option { function get_opencode_override_dir (line 549) | pub fn get_opencode_override_dir() -> Option { function get_openclaw_override_dir (line 557) | pub fn get_openclaw_override_dir() -> Option { function get_current_provider (line 571) | pub fn get_current_provider(app_type: &AppType) -> Option { function set_current_provider (line 586) | pub fn set_current_provider(app_type: &AppType, id: Option<&str>) -> Res... function get_effective_current_provider (line 609) | pub fn get_effective_current_provider( function get_skill_sync_method (line 638) | pub fn get_skill_sync_method() -> SyncMethod { function effective_backup_interval_hours (line 651) | pub fn effective_backup_interval_hours() -> u32 { function effective_backup_retain_count (line 663) | pub fn effective_backup_retain_count() -> usize { function get_preferred_terminal (line 678) | pub fn get_preferred_terminal() -> Option { function get_webdav_sync_settings (line 692) | pub fn get_webdav_sync_settings() -> Option { function set_webdav_sync_settings (line 697) | pub fn set_webdav_sync_settings(settings: Option) ->... function update_webdav_sync_status (line 704) | pub fn update_webdav_sync_status(status: WebDavSyncStatus) -> Result<(),... FILE: src-tauri/src/store.rs type AppState (line 6) | pub struct AppState { method new (line 13) | pub fn new(db: Arc) -> Self { FILE: src-tauri/src/tray.rs type TrayTexts (line 14) | pub struct TrayTexts { method from_language (line 22) | pub fn from_language(language: &str) -> Self { type TrayAppSection (line 48) | pub struct TrayAppSection { constant AUTO_SUFFIX (line 58) | pub const AUTO_SUFFIX: &str = "auto"; constant TRAY_SECTIONS (line 60) | pub const TRAY_SECTIONS: [TrayAppSection; 3] = [ function append_provider_section (line 88) | fn append_provider_section<'a>( function handle_provider_tray_event (line 163) | pub fn handle_provider_tray_event(app: &tauri::AppHandle, event_id: &str... function handle_auto_click (line 196) | fn handle_auto_click(app: &tauri::AppHandle, app_type: &AppType) -> Resu... function handle_provider_click (line 285) | fn handle_provider_click( function create_tray_menu (line 333) | pub fn create_tray_menu( function apply_tray_policy (line 397) | pub fn apply_tray_policy(app: &tauri::AppHandle, dock_visible: bool) { function handle_tray_menu_event (line 416) | pub fn handle_tray_menu_event(app: &tauri::AppHandle, event_id: &str) { FILE: src-tauri/src/usage_script.rs function execute_usage_script (line 9) | pub async fn execute_usage_script( type RequestConfig (line 214) | struct RequestConfig { function send_http_request (line 224) | async fn send_http_request(config: &RequestConfig, timeout_secs: u64) ->... function validate_result (line 292) | fn validate_result(result: &Value) -> Result<(), AppError> { function validate_single_usage (line 319) | fn validate_single_usage(result: &Value) -> Result<(), AppError> { function build_script_with_vars (line 402) | fn build_script_with_vars( function validate_base_url (line 424) | fn validate_base_url(base_url: &str) -> Result<(), AppError> { function validate_request_url (line 484) | fn validate_request_url( function is_private_ip (line 596) | fn is_private_ip(host: &str) -> bool { function is_private_ip_addr (line 612) | fn is_private_ip_addr(ip: std::net::IpAddr) -> bool { function is_suspicious_hostname (line 683) | fn is_suspicious_hostname(hostname: &str) -> bool { function is_loopback_host (line 710) | fn is_loopback_host(url: &Url) -> bool { function test_private_ip_validation (line 724) | fn test_private_ip_validation() { function test_ipv6_private_validation (line 765) | fn test_ipv6_private_validation() { function test_hostname_bypass_prevention (line 785) | fn test_hostname_bypass_prevention() { function test_https_bypass_prevention (line 795) | fn test_https_bypass_prevention() { function test_edge_cases (line 805) | fn test_edge_cases() { function test_ip_addr_parsing (line 820) | fn test_ip_addr_parsing() { function test_port_comparison (line 836) | fn test_port_comparison() { FILE: src-tauri/tests/app_config_load.rs function cfg_path (line 9) | fn cfg_path() -> PathBuf { function load_v1_config_returns_error_and_does_not_write (line 15) | fn load_v1_config_returns_error_and_does_not_write() { function load_v1_with_extra_version_still_treated_as_v1 (line 41) | fn load_v1_with_extra_version_still_treated_as_v1() { function load_invalid_json_returns_parse_error_and_does_not_write (line 66) | fn load_invalid_json_returns_parse_error_and_does_not_write() { function load_valid_v2_config_succeeds (line 89) | fn load_valid_v2_config_succeeds() { FILE: src-tauri/tests/app_type_parse.rs function parse_known_apps_case_insensitive_and_trim (line 6) | fn parse_known_apps_case_insensitive_and_trim() { function parse_unknown_app_returns_localized_error_message (line 17) | fn parse_unknown_app_returns_localized_error_message() { FILE: src-tauri/tests/deeplink_import.rs function deeplink_import_claude_provider_persists_to_db (line 12) | fn deeplink_import_claude_provider_persists_to_db() { function deeplink_import_codex_provider_builds_auth_and_config (line 52) | fn deeplink_import_codex_provider_builds_auth_and_config() { FILE: src-tauri/tests/import_export_sync.rs function sync_claude_provider_writes_live_settings (line 17) | fn sync_claude_provider_writes_live_settings() { function sync_codex_provider_writes_auth_and_config (line 73) | fn sync_codex_provider_writes_auth_and_config() { function sync_enabled_to_codex_writes_enabled_servers (line 143) | fn sync_enabled_to_codex_writes_enabled_servers() { function sync_enabled_to_codex_preserves_non_mcp_content_and_style (line 178) | fn sync_enabled_to_codex_preserves_non_mcp_content_and_style() { function sync_enabled_to_codex_migrates_erroneous_mcp_dot_servers_to_mcp_servers (line 237) | fn sync_enabled_to_codex_migrates_erroneous_mcp_dot_servers_to_mcp_serve... function sync_enabled_to_codex_removes_servers_when_none_enabled (line 275) | fn sync_enabled_to_codex_removes_servers_when_none_enabled() { function sync_enabled_to_codex_returns_error_on_invalid_toml (line 301) | fn sync_enabled_to_codex_returns_error_on_invalid_toml() { function sync_codex_provider_missing_auth_returns_error (line 342) | fn sync_codex_provider_missing_auth_returns_error() { function write_codex_live_atomic_persists_auth_and_config (line 382) | fn write_codex_live_atomic_persists_auth_and_config() { function write_codex_live_atomic_rolls_back_auth_when_config_write_fails (line 414) | fn write_codex_live_atomic_rolls_back_auth_when_config_write_fails() { function import_from_codex_adds_servers_from_mcp_servers_table (line 465) | fn import_from_codex_adds_servers_from_mcp_servers_table() { function import_from_codex_merges_into_existing_entries (line 524) | fn import_from_codex_merges_into_existing_entries() { function sync_claude_enabled_mcp_projects_to_user_config (line 590) | fn sync_claude_enabled_mcp_projects_to_user_config() { function import_from_claude_merges_into_config (line 647) | fn import_from_claude_merges_into_config() { function create_backup_skips_missing_file (line 721) | fn create_backup_skips_missing_file() { function create_backup_generates_snapshot_file (line 736) | fn create_backup_generates_snapshot_file() { function create_backup_retains_only_latest_entries (line 766) | fn create_backup_retains_only_latest_entries() { function sync_gemini_packycode_sets_security_selected_type (line 820) | fn sync_gemini_packycode_sets_security_selected_type() { function sync_gemini_google_official_sets_oauth_security (line 870) | fn sync_gemini_google_official_sets_oauth_security() { function export_sql_writes_to_target_path (line 921) | fn export_sql_writes_to_target_path() { function export_sql_returns_error_for_invalid_path (line 967) | fn export_sql_returns_error_for_invalid_path() { function import_sql_rejects_non_cc_switch_backup (line 1006) | fn import_sql_rejects_non_cc_switch_backup() { function import_sql_accepts_cc_switch_exported_backup (line 1030) | fn import_sql_accepts_cc_switch_exported_backup() { FILE: src-tauri/tests/mcp_commands.rs function import_default_config_claude_persists_provider (line 18) | fn import_default_config_claude_persists_provider() { function import_default_config_without_live_file_returns_error (line 71) | fn import_default_config_without_live_file_returns_error() { function import_mcp_from_claude_creates_config_and_enables_servers (line 107) | fn import_mcp_from_claude_creates_config_and_enables_servers() { function import_mcp_from_claude_invalid_json_preserves_state (line 154) | fn import_mcp_from_claude_invalid_json_preserves_state() { function set_mcp_enabled_for_codex_writes_live_config (line 186) | fn set_mcp_enabled_for_codex_writes_live_config() { function enabling_codex_mcp_skips_when_codex_dir_missing (line 254) | fn enabling_codex_mcp_skips_when_codex_dir_missing() { function upsert_mcp_server_disabling_app_removes_from_claude_live_config (line 304) | fn upsert_mcp_server_disabling_app_removes_from_claude_live_config() { function import_mcp_from_multiple_apps_merges_enabled_flags (line 379) | fn import_mcp_from_multiple_apps_merges_enabled_flags() { function import_mcp_from_gemini_sse_url_only_is_valid (line 424) | fn import_mcp_from_gemini_sse_url_only_is_valid() { function enabling_gemini_mcp_skips_when_gemini_dir_missing (line 463) | fn enabling_gemini_mcp_skips_when_gemini_dir_missing() { function enabling_claude_mcp_skips_when_claude_config_absent (line 513) | fn enabling_claude_mcp_skips_when_claude_config_absent() { function sync_all_enabled_removes_known_disabled_but_preserves_unknown_live_entries (line 567) | fn sync_all_enabled_removes_known_disabled_but_preserves_unknown_live_en... FILE: src-tauri/tests/provider_commands.rs function switch_provider_updates_codex_live_and_state (line 14) | fn switch_provider_updates_codex_live_and_state() { function switch_provider_missing_provider_returns_error (line 158) | fn switch_provider_missing_provider_returns_error() { function switch_provider_updates_claude_live_and_state (line 183) | fn switch_provider_updates_claude_live_and_state() { function switch_provider_codex_missing_auth_returns_error_and_keeps_state (line 313) | fn switch_provider_codex_missing_auth_returns_error_and_keeps_state() { FILE: src-tauri/tests/provider_service.rs function sanitize_provider_name (line 14) | fn sanitize_provider_name(name: &str) -> String { function migrate_legacy_common_config_usage_marks_historical_provider_enabled (line 25) | fn migrate_legacy_common_config_usage_marks_historical_provider_enabled() { function provider_service_switch_codex_updates_live_and_config (line 99) | fn provider_service_switch_codex_updates_live_and_config() { function sync_current_provider_for_app_keeps_live_takeover_and_updates_restore_backup (line 242) | fn sync_current_provider_for_app_keeps_live_takeover_and_updates_restore... function explicitly_cleared_common_snippet_is_not_auto_extracted (line 341) | fn explicitly_cleared_common_snippet_is_not_auto_extracted() { function legacy_common_config_migration_flag_roundtrip (line 379) | fn legacy_common_config_migration_flag_roundtrip() { function switch_packycode_gemini_updates_security_selected_type (line 420) | fn switch_packycode_gemini_updates_security_selected_type() { function packycode_partner_meta_triggers_security_flag_even_without_keywords (line 473) | fn packycode_partner_meta_triggers_security_flag_even_without_keywords() { function switch_google_official_gemini_sets_oauth_security (line 528) | fn switch_google_official_gemini_sets_oauth_security() { function provider_service_switch_claude_updates_live_and_state (line 582) | fn provider_service_switch_claude_updates_live_and_state() { function provider_service_switch_missing_provider_returns_error (line 676) | fn provider_service_switch_missing_provider_returns_error() { function provider_service_switch_codex_missing_auth_returns_error (line 697) | fn provider_service_switch_codex_missing_auth_returns_error() { function provider_service_delete_codex_removes_provider_and_files (line 734) | fn provider_service_delete_codex_removes_provider_and_files() { function provider_service_delete_claude_removes_provider_files (line 797) | fn provider_service_delete_claude_removes_provider_files() { function provider_service_delete_current_provider_returns_error (line 857) | fn provider_service_delete_current_provider_returns_error() { FILE: src-tauri/tests/proxy_commands.rs function default_cost_multiplier_commands_round_trip (line 13) | async fn default_cost_multiplier_commands_round_trip() { function pricing_model_source_commands_round_trip (line 48) | async fn pricing_model_source_commands_round_trip() { FILE: src-tauri/tests/skill_sync.rs function write_skill (line 11) | fn write_skill(dir: &std::path::Path, name: &str) { function symlink_dir (line 21) | fn symlink_dir(src: &std::path::Path, dest: &std::path::Path) { function symlink_dir (line 26) | fn symlink_dir(src: &std::path::Path, dest: &std::path::Path) { function import_from_apps_respects_explicit_app_selection (line 31) | fn import_from_apps_respects_explicit_app_selection() { function sync_to_app_removes_disabled_and_orphaned_ssot_symlinks (line 78) | fn sync_to_app_removes_disabled_and_orphaned_ssot_symlinks() { function uninstall_skill_creates_backup_before_removing_ssot (line 129) | fn uninstall_skill_creates_backup_before_removing_ssot() { function restore_skill_backup_restores_files_to_ssot_and_current_app (line 197) | fn restore_skill_backup_restores_files_to_ssot_and_current_app() { function delete_skill_backup_removes_backup_directory (line 276) | fn delete_skill_backup_removes_backup_directory() { function migration_snapshot_overrides_multi_source_directory_inference (line 341) | fn migration_snapshot_overrides_multi_source_directory_inference() { FILE: src-tauri/tests/support.rs function ensure_test_home (line 9) | pub fn ensure_test_home() -> &'static Path { function reset_test_fs (line 29) | pub fn reset_test_fs() { function test_mutex (line 56) | pub fn test_mutex() -> &'static Mutex<()> { function create_test_state (line 63) | pub fn create_test_state() -> Result = { FILE: src/components/agents/AgentsPanel.tsx type AgentsPanelProps (line 3) | interface AgentsPanelProps { function AgentsPanel (line 7) | function AgentsPanel({}: AgentsPanelProps) { FILE: src/components/common/AppCountBar.tsx type AppCountBarProps (line 6) | interface AppCountBarProps { FILE: src/components/common/AppToggleGroup.tsx type AppToggleGroupProps (line 10) | interface AppToggleGroupProps { FILE: src/components/common/FullScreenPanel.tsx type FullScreenPanelProps (line 9) | interface FullScreenPanelProps { constant DRAG_BAR_HEIGHT (line 17) | const DRAG_BAR_HEIGHT = isWindows() || isLinux() ? 0 : 28; constant HEADER_HEIGHT (line 18) | const HEADER_HEIGHT = 64; FILE: src/components/common/ListItemRow.tsx type ListItemRowProps (line 3) | interface ListItemRowProps { FILE: src/components/deeplink/McpConfirmation.tsx function McpConfirmation (line 6) | function McpConfirmation({ FILE: src/components/deeplink/PromptConfirmation.tsx function PromptConfirmation (line 6) | function PromptConfirmation({ FILE: src/components/deeplink/SkillConfirmation.tsx function SkillConfirmation (line 4) | function SkillConfirmation({ FILE: src/components/env/EnvWarningBanner.tsx type EnvWarningBannerProps (line 18) | interface EnvWarningBannerProps { function EnvWarningBanner (line 24) | function EnvWarningBanner({ FILE: src/components/icons/TerminalIcons.tsx function ITermIcon (line 3) | function ITermIcon(props: SVGProps) { function AlacrittyIcon (line 17) | function AlacrittyIcon(props: SVGProps) { function WezTermIcon (line 31) | function WezTermIcon(props: SVGProps) { function GhosttyIcon (line 45) | function GhosttyIcon(props: SVGProps) { function KittyIcon (line 59) | function KittyIcon(props: SVGProps) { FILE: src/components/mcp/McpFormModal.tsx type McpFormModalProps (line 28) | interface McpFormModalProps { FILE: src/components/mcp/McpWizardModal.tsx type McpWizardModalProps (line 16) | interface McpWizardModalProps { FILE: src/components/mcp/UnifiedMcpPanel.tsx type UnifiedMcpPanelProps (line 25) | interface UnifiedMcpPanelProps { type UnifiedMcpPanelHandle (line 29) | interface UnifiedMcpPanelHandle { type UnifiedMcpListItemProps (line 209) | interface UnifiedMcpListItemProps { FILE: src/components/mcp/useMcpValidation.ts function useMcpValidation (line 4) | function useMcpValidation() { FILE: src/components/mode-toggle.tsx function ModeToggle (line 6) | function ModeToggle() { FILE: src/components/openclaw/AgentsDefaultsPanel.tsx constant UNSET_SENTINEL (line 25) | const UNSET_SENTINEL = "__unset__"; FILE: src/components/openclaw/OpenClawHealthBanner.tsx type OpenClawHealthBannerProps (line 7) | interface OpenClawHealthBannerProps { function getWarningText (line 11) | function getWarningText( FILE: src/components/openclaw/ToolsPanel.tsx type ListItem (line 27) | interface ListItem { FILE: src/components/openclaw/hooks/useOpenClawModelOptions.ts type ModelOption (line 5) | interface ModelOption { function useOpenClawModelOptions (line 10) | function useOpenClawModelOptions(): { FILE: src/components/openclaw/utils.ts constant OPENCLAW_TOOL_PROFILES (line 7) | const OPENCLAW_TOOL_PROFILES: OpenClawToolsProfile[] = [ constant OPENCLAW_UNSUPPORTED_PROFILE (line 14) | const OPENCLAW_UNSUPPORTED_PROFILE = "__unsupported_profile__"; constant OPENCLAW_UNSET_PROFILE (line 15) | const OPENCLAW_UNSET_PROFILE = "__unset_profile__"; function parseOpenClawEnvEditorValue (line 17) | function parseOpenClawEnvEditorValue(raw: string): OpenClawEnvConfig { function isOpenClawToolsProfile (line 35) | function isOpenClawToolsProfile( function getOpenClawToolsProfileSelectValue (line 44) | function getOpenClawToolsProfileSelectValue(profile?: string): string { function getOpenClawUnsupportedProfile (line 53) | function getOpenClawUnsupportedProfile(profile?: string): string | null { function getOpenClawTimeoutInputValue (line 60) | function getOpenClawTimeoutInputValue( FILE: src/components/prompts/PromptFormModal.tsx type PromptFormModalProps (line 16) | interface PromptFormModalProps { FILE: src/components/prompts/PromptFormPanel.tsx type PromptFormPanelProps (line 10) | interface PromptFormPanelProps { FILE: src/components/prompts/PromptListItem.tsx type PromptListItemProps (line 8) | interface PromptListItemProps { FILE: src/components/prompts/PromptPanel.tsx type PromptPanelProps (line 10) | interface PromptPanelProps { type PromptPanelHandle (line 16) | interface PromptPanelHandle { FILE: src/components/prompts/PromptToggle.tsx type PromptToggleProps (line 3) | interface PromptToggleProps { FILE: src/components/providers/AddProviderDialog.tsx type AddProviderDialogProps (line 25) | interface AddProviderDialogProps { function AddProviderDialog (line 37) | function AddProviderDialog({ FILE: src/components/providers/EditProviderDialog.tsx type EditProviderDialogProps (line 13) | interface EditProviderDialogProps { function EditProviderDialog (line 22) | function EditProviderDialog({ FILE: src/components/providers/FailoverPriorityBadge.tsx type FailoverPriorityBadgeProps (line 4) | interface FailoverPriorityBadgeProps { function FailoverPriorityBadge (line 13) | function FailoverPriorityBadge({ FILE: src/components/providers/HealthStatusIndicator.tsx type HealthStatusIndicatorProps (line 6) | interface HealthStatusIndicatorProps { FILE: src/components/providers/ProviderActions.tsx type ProviderActionsProps (line 20) | interface ProviderActionsProps { function ProviderActions (line 44) | function ProviderActions({ FILE: src/components/providers/ProviderCard.tsx type DragHandleProps (line 20) | interface DragHandleProps { type ProviderCardProps (line 26) | interface ProviderCardProps { function ProviderCard (line 90) | function ProviderCard({ FILE: src/components/providers/ProviderEmptyState.tsx type ProviderEmptyStateProps (line 6) | interface ProviderEmptyStateProps { function ProviderEmptyState (line 12) | function ProviderEmptyState({ FILE: src/components/providers/ProviderHealthBadge.tsx type ProviderHealthBadgeProps (line 5) | interface ProviderHealthBadgeProps { function ProviderHealthBadge (line 14) | function ProviderHealthBadge({ FILE: src/components/providers/ProviderList.tsx type ProviderListProps (line 47) | interface ProviderListProps { function ProviderList (line 69) | function ProviderList({ type SortableProviderCardProps (line 470) | interface SortableProviderCardProps { function SortableProviderCard (line 501) | function SortableProviderCard({ FILE: src/components/providers/forms/ApiKeyInput.tsx type ApiKeyInputProps (line 5) | interface ApiKeyInputProps { FILE: src/components/providers/forms/BasicFormFields.tsx type BasicFormFieldsProps (line 26) | interface BasicFormFieldsProps { function BasicFormFields (line 32) | function BasicFormFields({ FILE: src/components/providers/forms/ClaudeFormFields.tsx type EndpointCandidate (line 43) | interface EndpointCandidate { type ClaudeFormFieldsProps (line 47) | interface ClaudeFormFieldsProps { function ClaudeFormFields (line 113) | function ClaudeFormFields({ FILE: src/components/providers/forms/CodexCommonConfigModal.tsx type CodexCommonConfigModalProps (line 8) | interface CodexCommonConfigModalProps { FILE: src/components/providers/forms/CodexConfigEditor.tsx type CodexConfigEditorProps (line 5) | interface CodexConfigEditorProps { FILE: src/components/providers/forms/CodexConfigSections.tsx type CodexAuthSectionProps (line 10) | interface CodexAuthSectionProps { type CodexConfigSectionProps (line 83) | interface CodexConfigSectionProps { FILE: src/components/providers/forms/CodexFormFields.tsx type EndpointCandidate (line 6) | interface EndpointCandidate { type CodexFormFieldsProps (line 10) | interface CodexFormFieldsProps { function CodexFormFields (line 40) | function CodexFormFields({ FILE: src/components/providers/forms/CommonConfigEditor.tsx type CommonConfigEditorProps (line 9) | interface CommonConfigEditorProps { function CommonConfigEditor (line 24) | function CommonConfigEditor({ FILE: src/components/providers/forms/CopilotAuthSection.tsx type CopilotAuthSectionProps (line 27) | interface CopilotAuthSectionProps { FILE: src/components/providers/forms/EndpointSpeedTest.tsx constant ENDPOINT_TIMEOUT_SECS (line 12) | const ENDPOINT_TIMEOUT_SECS: Record = { type TestResult (line 20) | interface TestResult { type EndpointSpeedTestProps (line 27) | interface EndpointSpeedTestProps { type EndpointEntry (line 42) | interface EndpointEntry extends EndpointCandidate { FILE: src/components/providers/forms/GeminiCommonConfigModal.tsx type GeminiCommonConfigModalProps (line 8) | interface GeminiCommonConfigModalProps { FILE: src/components/providers/forms/GeminiConfigEditor.tsx type GeminiConfigEditorProps (line 5) | interface GeminiConfigEditorProps { FILE: src/components/providers/forms/GeminiConfigSections.tsx type GeminiEnvSectionProps (line 5) | interface GeminiEnvSectionProps { type GeminiConfigSectionProps (line 122) | interface GeminiConfigSectionProps { FILE: src/components/providers/forms/GeminiFormFields.tsx type EndpointCandidate (line 9) | interface EndpointCandidate { type GeminiFormFieldsProps (line 13) | interface GeminiFormFieldsProps { function GeminiFormFields (line 44) | function GeminiFormFields({ FILE: src/components/providers/forms/OmoFormFields.tsx constant ADVANCED_PLACEHOLDER (line 53) | const ADVANCED_PLACEHOLDER = `{ type OmoFormFieldsProps (line 61) | interface OmoFormFieldsProps { type CustomModelItem (line 82) | type CustomModelItem = { type BuiltinModelDef (line 87) | type BuiltinModelDef = Pick< type ModelOption (line 91) | type ModelOption = { value: string; label: string }; function DeferredKeyInput (line 93) | function DeferredKeyInput({ constant BUILTIN_AGENT_KEYS (line 125) | const BUILTIN_AGENT_KEYS = new Set(OMO_BUILTIN_AGENTS.map((a) => a.key)); constant BUILTIN_AGENT_KEYS_SLIM (line 126) | const BUILTIN_AGENT_KEYS_SLIM = new Set( constant BUILTIN_CATEGORY_KEYS (line 129) | const BUILTIN_CATEGORY_KEYS = new Set(OMO_BUILTIN_CATEGORIES.map((c) => ... constant EMPTY_VARIANT_VALUE (line 130) | const EMPTY_VARIANT_VALUE = "__cc_switch_omo_variant_empty__"; function ModelCombobox (line 132) | function ModelCombobox({ function getAdvancedStr (line 229) | function getAdvancedStr(config: Record | undefined): st... function collectCustomModels (line 238) | function collectCustomModels( function mergeCustomModelsIntoStore (line 255) | function mergeCustomModelsIntoStore( function OmoFormFields (line 305) | function OmoFormFields({ FILE: src/components/providers/forms/OpenClawFormFields.tsx type OpenClawFormFieldsProps (line 25) | interface OpenClawFormFieldsProps { function OpenClawFormFields (line 52) | function OpenClawFormFields({ FILE: src/components/providers/forms/OpenCodeFormFields.tsx function ModelIdInput (line 29) | function ModelIdInput({ function ExtraOptionKeyInput (line 65) | function ExtraOptionKeyInput({ function ModelOptionKeyInput (line 103) | function ModelOptionKeyInput({ type OpenCodeFormFieldsProps (line 139) | interface OpenCodeFormFieldsProps { function OpenCodeFormFields (line 166) | function OpenCodeFormFields({ FILE: src/components/providers/forms/ProviderAdvancedConfig.tsx type PricingModelSourceOption (line 27) | type PricingModelSourceOption = "inherit" | "request" | "response"; type ProviderPricingConfig (line 29) | interface ProviderPricingConfig { type ProviderAdvancedConfigProps (line 35) | interface ProviderAdvancedConfigProps { function buildProxyUrl (line 45) | function buildProxyUrl(config: ProviderProxyConfig): string { function parseProxyUrl (line 56) | function parseProxyUrl(url: string): Partial { function ProviderAdvancedConfig (line 89) | function ProviderAdvancedConfig({ FILE: src/components/providers/forms/ProviderForm.tsx type PresetEntry (line 95) | type PresetEntry = { type ProviderFormProps (line 105) | interface ProviderFormProps { function ProviderForm (line 127) | function ProviderForm({ type ProviderFormValues (line 1678) | type ProviderFormValues = ProviderFormData & { FILE: src/components/providers/forms/ProviderPresetSelector.tsx type PresetEntry (line 15) | type PresetEntry = { type ProviderPresetSelectorProps (line 20) | interface ProviderPresetSelectorProps { function ProviderPresetSelector (line 31) | function ProviderPresetSelector({ FILE: src/components/providers/forms/helpers/opencodeFormUtils.ts constant CLAUDE_DEFAULT_CONFIG (line 6) | const CLAUDE_DEFAULT_CONFIG = JSON.stringify({ env: {} }, null, 2); constant CODEX_DEFAULT_CONFIG (line 7) | const CODEX_DEFAULT_CONFIG = JSON.stringify( constant GEMINI_DEFAULT_CONFIG (line 12) | const GEMINI_DEFAULT_CONFIG = JSON.stringify( constant OPENCODE_DEFAULT_NPM (line 24) | const OPENCODE_DEFAULT_NPM = "@ai-sdk/openai-compatible"; constant OPENCODE_DEFAULT_CONFIG (line 25) | const OPENCODE_DEFAULT_CONFIG = JSON.stringify( constant OPENCODE_KNOWN_OPTION_KEYS (line 38) | const OPENCODE_KNOWN_OPTION_KEYS = [ constant OPENCLAW_DEFAULT_CONFIG (line 44) | const OPENCLAW_DEFAULT_CONFIG = JSON.stringify( function isKnownOpencodeOptionKey (line 57) | function isKnownOpencodeOptionKey(key: string): boolean { function parseOpencodeConfig (line 63) | function parseOpencodeConfig( function parseOpencodeConfigStrict (line 94) | function parseOpencodeConfigStrict( constant OPENCODE_KNOWN_MODEL_KEYS (line 113) | const OPENCODE_KNOWN_MODEL_KEYS = ["name", "limit", "options"] as const; function isKnownModelKey (line 115) | function isKnownModelKey(key: string): boolean { function getModelExtraFields (line 121) | function getModelExtraFields( function toOpencodeExtraOptions (line 133) | function toOpencodeExtraOptions( FILE: src/components/providers/forms/hooks/useApiKeyLink.ts type PresetEntry (line 9) | type PresetEntry = { type UseApiKeyLinkProps (line 18) | interface UseApiKeyLinkProps { function useApiKeyLink (line 29) | function useApiKeyLink({ FILE: src/components/providers/forms/hooks/useApiKeyState.ts type UseApiKeyStateProps (line 9) | interface UseApiKeyStateProps { function useApiKeyState (line 22) | function useApiKeyState({ FILE: src/components/providers/forms/hooks/useBaseUrlState.ts type UseBaseUrlStateProps (line 9) | interface UseBaseUrlStateProps { function useBaseUrlState (line 22) | function useBaseUrlState({ FILE: src/components/providers/forms/hooks/useCodexCommonConfig.ts constant LEGACY_STORAGE_KEY (line 11) | const LEGACY_STORAGE_KEY = "cc-switch:codex-common-config-snippet"; constant DEFAULT_CODEX_COMMON_CONFIG_SNIPPET (line 12) | const DEFAULT_CODEX_COMMON_CONFIG_SNIPPET = `# Common Codex config type UseCodexCommonConfigProps (line 15) | interface UseCodexCommonConfigProps { function useCodexCommonConfig (line 29) | function useCodexCommonConfig({ FILE: src/components/providers/forms/hooks/useCodexConfigState.ts type UseCodexConfigStateProps (line 10) | interface UseCodexConfigStateProps { function useCodexConfigState (line 20) | function useCodexConfigState({ initialData }: UseCodexConfigStateProps) { FILE: src/components/providers/forms/hooks/useCodexTomlValidation.ts function useCodexTomlValidation (line 8) | function useCodexTomlValidation() { FILE: src/components/providers/forms/hooks/useCommonConfigSnippet.ts constant LEGACY_STORAGE_KEY (line 10) | const LEGACY_STORAGE_KEY = "cc-switch:common-config-snippet"; constant DEFAULT_COMMON_CONFIG_SNIPPET (line 11) | const DEFAULT_COMMON_CONFIG_SNIPPET = `{ type UseCommonConfigSnippetProps (line 15) | interface UseCommonConfigSnippetProps { function useCommonConfigSnippet (line 31) | function useCommonConfigSnippet({ FILE: src/components/providers/forms/hooks/useCopilotAuth.ts function useCopilotAuth (line 4) | function useCopilotAuth() { FILE: src/components/providers/forms/hooks/useCustomEndpoints.ts type PresetEntry (line 7) | type PresetEntry = { type UseCustomEndpointsProps (line 12) | interface UseCustomEndpointsProps { function useCustomEndpoints (line 29) | function useCustomEndpoints({ FILE: src/components/providers/forms/hooks/useGeminiCommonConfig.ts constant LEGACY_STORAGE_KEY (line 5) | const LEGACY_STORAGE_KEY = "cc-switch:gemini-common-config-snippet"; constant DEFAULT_GEMINI_COMMON_CONFIG_SNIPPET (line 6) | const DEFAULT_GEMINI_COMMON_CONFIG_SNIPPET = "{}"; constant GEMINI_COMMON_ENV_FORBIDDEN_KEYS (line 8) | const GEMINI_COMMON_ENV_FORBIDDEN_KEYS = [ type GeminiForbiddenEnvKey (line 12) | type GeminiForbiddenEnvKey = (typeof GEMINI_COMMON_ENV_FORBIDDEN_KEYS)[n... type UseGeminiCommonConfigProps (line 14) | interface UseGeminiCommonConfigProps { function isPlainObject (line 26) | function isPlainObject(value: unknown): value is Record { function useGeminiCommonConfig (line 41) | function useGeminiCommonConfig({ FILE: src/components/providers/forms/hooks/useGeminiConfigState.ts type UseGeminiConfigStateProps (line 3) | interface UseGeminiConfigStateProps { function useGeminiConfigState (line 13) | function useGeminiConfigState({ FILE: src/components/providers/forms/hooks/useManagedAuth.ts type PollingState (line 10) | type PollingState = "idle" | "polling" | "success" | "error"; function useManagedAuth (line 12) | function useManagedAuth(authProvider: ManagedAuthProvider) { FILE: src/components/providers/forms/hooks/useModelState.ts type UseModelStateProps (line 3) | interface UseModelStateProps { function parseModelsFromConfig (line 11) | function parseModelsFromConfig(settingsConfig: string) { function useModelState (line 48) | function useModelState({ FILE: src/components/providers/forms/hooks/useOmoDraftState.ts type UseOmoDraftStateParams (line 7) | interface UseOmoDraftStateParams { type OmoDraftState (line 14) | interface OmoDraftState { function useOmoDraftState (line 29) | function useOmoDraftState({ FILE: src/components/providers/forms/hooks/useOmoModelSource.ts type UseOmoModelSourceParams (line 10) | interface UseOmoModelSourceParams { type OmoModelBuild (line 15) | interface OmoModelBuild { type OmoModelSourceResult (line 29) | interface OmoModelSourceResult { function useOmoModelSource (line 42) | function useOmoModelSource({ FILE: src/components/providers/forms/hooks/useOpenclawFormState.ts type UseOpenclawFormStateParams (line 7) | interface UseOpenclawFormStateParams { constant OPENCLAW_DEFAULT_USER_AGENT (line 17) | const OPENCLAW_DEFAULT_USER_AGENT = type OpenclawFormState (line 20) | interface OpenclawFormState { function parseOpenclawField (line 37) | function parseOpenclawField( function useOpenclawFormState (line 54) | function useOpenclawFormState({ FILE: src/components/providers/forms/hooks/useOpencodeFormState.ts type UseOpencodeFormStateParams (line 11) | interface UseOpencodeFormStateParams { type OpencodeFormState (line 21) | interface OpencodeFormState { function useOpencodeFormState (line 37) | function useOpencodeFormState({ FILE: src/components/providers/forms/hooks/useProviderCategory.ts type UseProviderCategoryProps (line 9) | interface UseProviderCategoryProps { function useProviderCategory (line 20) | function useProviderCategory({ FILE: src/components/providers/forms/hooks/useSpeedTestEndpoints.ts type PresetEntry (line 8) | type PresetEntry = { type UseSpeedTestEndpointsProps (line 13) | interface UseSpeedTestEndpointsProps { function useSpeedTestEndpoints (line 36) | function useSpeedTestEndpoints({ FILE: src/components/providers/forms/hooks/useTemplateValues.ts type TemplatePath (line 9) | type TemplatePath = Array; type TemplateValueMap (line 10) | type TemplateValueMap = Record; type PresetEntry (line 12) | interface PresetEntry { type UseTemplateValuesProps (line 17) | interface UseTemplateValuesProps { function useTemplateValues (line 165) | function useTemplateValues({ FILE: src/components/providers/forms/shared/ApiKeySection.tsx type ApiKeySectionProps (line 5) | interface ApiKeySectionProps { function ApiKeySection (line 22) | function ApiKeySection({ FILE: src/components/providers/forms/shared/EndpointField.tsx type EndpointFieldProps (line 6) | interface EndpointFieldProps { function EndpointField (line 18) | function EndpointField({ FILE: src/components/proxy/AutoFailoverConfigPanel.tsx type AutoFailoverConfigPanelProps (line 11) | interface AutoFailoverConfigPanelProps { function AutoFailoverConfigPanel (line 16) | function AutoFailoverConfigPanel({ FILE: src/components/proxy/CircuitBreakerConfigPanel.tsx function CircuitBreakerConfigPanel (line 16) | function CircuitBreakerConfigPanel() { FILE: src/components/proxy/FailoverQueueManager.tsx type FailoverQueueManagerProps (line 35) | interface FailoverQueueManagerProps { function FailoverQueueManager (line 40) | function FailoverQueueManager({ type QueueItemProps (line 249) | interface QueueItemProps { function QueueItem (line 257) | function QueueItem({ FILE: src/components/proxy/FailoverToggle.tsx type FailoverToggleProps (line 17) | interface FailoverToggleProps { function FailoverToggle (line 22) | function FailoverToggle({ className, activeApp }: FailoverToggleProps) { FILE: src/components/proxy/ProxyPanel.tsx type ProxyPanelProps (line 33) | interface ProxyPanelProps { function ProxyPanel (line 40) | function ProxyPanel({ type StatCardProps (line 591) | interface StatCardProps { function StatCard (line 598) | function StatCard({ icon, label, value, variant = "default" }: StatCardP... type ProviderQueueGroupProps (line 618) | interface ProviderQueueGroupProps { function ProviderQueueGroup (line 628) | function ProviderQueueGroup({ type ProviderQueueItemProps (line 665) | interface ProviderQueueItemProps { function ProviderQueueItem (line 675) | function ProviderQueueItem({ FILE: src/components/proxy/ProxyToggle.tsx type ProxyToggleProps (line 15) | interface ProxyToggleProps { function ProxyToggle (line 20) | function ProxyToggle({ className, activeApp }: ProxyToggleProps) { FILE: src/components/sessions/SessionItem.tsx type SessionItemProps (line 19) | interface SessionItemProps { function SessionItem (line 25) | function SessionItem({ FILE: src/components/sessions/SessionManagerPage.tsx type ProviderFilter (line 56) | type ProviderFilter = function SessionManagerPage (line 64) | function SessionManagerPage({ appId }: { appId: string }) { FILE: src/components/sessions/SessionMessageItem.tsx type SessionMessageItemProps (line 14) | interface SessionMessageItemProps { function SessionMessageItem (line 22) | function SessionMessageItem({ FILE: src/components/sessions/SessionToc.tsx type TocItem (line 15) | interface TocItem { type SessionTocSidebarProps (line 21) | interface SessionTocSidebarProps { function SessionTocSidebar (line 26) | function SessionTocSidebar({ type SessionTocDialogProps (line 66) | interface SessionTocDialogProps { function SessionTocDialog (line 73) | function SessionTocDialog({ FILE: src/components/settings/AboutSection.tsx type AboutSectionProps (line 32) | interface AboutSectionProps { type ToolVersion (line 36) | interface ToolVersion { constant TOOL_NAMES (line 45) | const TOOL_NAMES = ["claude", "codex", "gemini", "opencode"] as const; type ToolName (line 46) | type ToolName = (typeof TOOL_NAMES)[number]; type WslShellPreference (line 48) | type WslShellPreference = { constant WSL_SHELL_OPTIONS (line 53) | const WSL_SHELL_OPTIONS = ["sh", "bash", "zsh", "fish", "dash"] as const; constant WSL_SHELL_FLAG_OPTIONS (line 55) | const WSL_SHELL_FLAG_OPTIONS = ["-lic", "-lc", "-c"] as const; constant ENV_BADGE_CONFIG (line 57) | const ENV_BADGE_CONFIG: Record< constant ONE_CLICK_INSTALL_COMMANDS (line 83) | const ONE_CLICK_INSTALL_COMMANDS = `# Claude Code (Native install - reco... function AboutSection (line 92) | function AboutSection({ isPortable }: AboutSectionProps) { FILE: src/components/settings/AppVisibilitySettings.tsx type AppVisibilitySettingsProps (line 9) | interface AppVisibilitySettingsProps { constant APP_CONFIG (line 14) | const APP_CONFIG: Array<{ function AppVisibilitySettings (line 26) | function AppVisibilitySettings({ type AppButtonProps (line 90) | interface AppButtonProps { function AppButton (line 99) | function AppButton({ FILE: src/components/settings/AuthCenterPanel.tsx function AuthCenterPanel (line 6) | function AuthCenterPanel() { FILE: src/components/settings/BackupListSection.tsx type BackupListSectionProps (line 26) | interface BackupListSectionProps { function formatBytes (line 35) | function formatBytes(bytes: number): string { function formatBackupDate (line 41) | function formatBackupDate(isoString: string): string { function getDisplayName (line 51) | function getDisplayName(filename: string): string { function BackupListSection (line 64) | function BackupListSection({ FILE: src/components/settings/DirectorySettings.tsx type DirectorySettingsProps (line 9) | interface DirectorySettingsProps { function DirectorySettings (line 24) | function DirectorySettings({ type DirectoryInputProps (line 138) | interface DirectoryInputProps { function DirectoryInput (line 149) | function DirectoryInput({ FILE: src/components/settings/GlobalProxySettings.tsx function extractAuth (line 21) | function extractAuth(url: string): { function mergeAuth (line 42) | function mergeAuth( function GlobalProxySettings (line 72) | function GlobalProxySettings() { FILE: src/components/settings/ImportExportSection.tsx type ImportExportSectionProps (line 14) | interface ImportExportSectionProps { function ImportExportSection (line 26) | function ImportExportSection({ type ImportStatusMessageProps (line 126) | interface ImportStatusMessageProps { function ImportStatusMessage (line 132) | function ImportStatusMessage({ FILE: src/components/settings/LanguageSettings.tsx type LanguageOption (line 5) | type LanguageOption = "zh" | "en" | "ja"; type LanguageSettingsProps (line 7) | interface LanguageSettingsProps { function LanguageSettings (line 12) | function LanguageSettings({ value, onChange }: LanguageSettingsProps) { type LanguageButtonProps (line 38) | interface LanguageButtonProps { function LanguageButton (line 44) | function LanguageButton({ active, onClick, children }: LanguageButtonPro... FILE: src/components/settings/LogConfigPanel.tsx constant LOG_LEVELS (line 15) | const LOG_LEVELS = ["error", "warn", "info", "debug", "trace"] as const; function LogConfigPanel (line 17) | function LogConfigPanel() { FILE: src/components/settings/ProxyTabContent.tsx type ProxyTabContentProps (line 23) | interface ProxyTabContentProps { function ProxyTabContent (line 28) | function ProxyTabContent({ FILE: src/components/settings/RectifierConfigPanel.tsx function RectifierConfigPanel (line 12) | function RectifierConfigPanel() { FILE: src/components/settings/SettingsPage.tsx type SettingsDialogProps (line 52) | interface SettingsDialogProps { function SettingsPage (line 59) | function SettingsPage({ FILE: src/components/settings/SkillSyncMethodSettings.tsx type SkillSyncMethodSettingsProps (line 6) | interface SkillSyncMethodSettingsProps { function SkillSyncMethodSettings (line 11) | function SkillSyncMethodSettings({ type SyncMethodButtonProps (line 51) | interface SyncMethodButtonProps { function SyncMethodButton (line 57) | function SyncMethodButton({ FILE: src/components/settings/TerminalSettings.tsx constant MACOS_TERMINALS (line 12) | const MACOS_TERMINALS = [ constant WINDOWS_TERMINALS (line 21) | const WINDOWS_TERMINALS = [ constant LINUX_TERMINALS (line 30) | const LINUX_TERMINALS = [ function getTerminalOptions (line 46) | function getTerminalOptions() { function getDefaultTerminal (line 61) | function getDefaultTerminal(): string { type TerminalSettingsProps (line 74) | interface TerminalSettingsProps { function TerminalSettings (line 79) | function TerminalSettings({ value, onChange }: TerminalSettingsProps) { FILE: src/components/settings/ThemeSettings.tsx function ThemeSettings (line 7) | function ThemeSettings() { type ThemeButtonProps (line 46) | interface ThemeButtonProps { function ThemeButton (line 53) | function ThemeButton({ FILE: src/components/settings/WebdavSyncSection.tsx type WebDavPreset (line 42) | interface WebDavPreset { constant WEBDAV_PRESETS (line 50) | const WEBDAV_PRESETS: WebDavPreset[] = [ function detectPreset (line 81) | function detectPreset(url: string): string { function formatDate (line 92) | function formatDate(rfc3339: string): string { function formatDbCompatVersion (line 97) | function formatDbCompatVersion(version?: number | null): string | null { type ActionState (line 103) | type ActionState = type DialogType (line 111) | type DialogType = "upload" | "download" | null; type WebdavSyncSectionProps (line 113) | interface WebdavSyncSectionProps { function ActionButton (line 122) | function ActionButton({ function WebdavSyncSection (line 158) | function WebdavSyncSection({ FILE: src/components/settings/WindowSettings.tsx type WindowSettingsProps (line 7) | interface WindowSettingsProps { function WindowSettings (line 12) | function WindowSettings({ settings, onChange }: WindowSettingsProps) { FILE: src/components/skills/RepoManager.tsx type RepoManagerProps (line 17) | interface RepoManagerProps { function RepoManager (line 26) | function RepoManager({ FILE: src/components/skills/RepoManagerPanel.tsx type RepoManagerPanelProps (line 11) | interface RepoManagerPanelProps { function RepoManagerPanel (line 19) | function RepoManagerPanel({ FILE: src/components/skills/SkillCard.tsx type SkillCardSkill (line 17) | type SkillCardSkill = DiscoverableSkill & { installed: boolean }; type SkillCardProps (line 19) | interface SkillCardProps { function SkillCard (line 25) | function SkillCard({ skill, onInstall, onUninstall }: SkillCardProps) { FILE: src/components/skills/SkillsPage.tsx type SkillsPageProps (line 28) | interface SkillsPageProps { type SkillsPageHandle (line 32) | interface SkillsPageHandle { type DiscoverableSkillItem (line 82) | type DiscoverableSkillItem = DiscoverableSkill & { installed: boolean }; FILE: src/components/skills/UnifiedSkillsPanel.tsx type UnifiedSkillsPanelProps (line 37) | interface UnifiedSkillsPanelProps { type UnifiedSkillsPanelHandle (line 42) | interface UnifiedSkillsPanelHandle { function formatSkillBackupDate (line 49) | function formatSkillBackupDate(unixSeconds: number): string { type InstalledSkillListItemProps (line 331) | interface InstalledSkillListItemProps { type ImportSkillsDialogProps (line 414) | interface ImportSkillsDialogProps { type RestoreSkillsDialogProps (line 426) | interface RestoreSkillsDialogProps { FILE: src/components/theme-provider.tsx type Theme (line 10) | type Theme = "light" | "dark" | "system"; type ThemeProviderProps (line 12) | interface ThemeProviderProps { type ThemeContextValue (line 18) | interface ThemeContextValue { function ThemeProvider (line 27) | function ThemeProvider({ function useTheme (line 169) | function useTheme() { FILE: src/components/ui/badge.tsx type BadgeProps (line 26) | interface BadgeProps function Badge (line 30) | function Badge({ className, variant, ...props }: BadgeProps) { FILE: src/components/ui/button.tsx type ButtonProps (line 45) | interface ButtonProps FILE: src/components/ui/form.tsx type FormFieldContextValue (line 16) | type FormFieldContextValue< FILE: src/components/ui/input.tsx type InputProps (line 4) | type InputProps = React.InputHTMLAttributes; FILE: src/components/ui/sonner.tsx function Toaster (line 4) | function Toaster() { FILE: src/components/ui/textarea.tsx type TextareaProps (line 4) | type TextareaProps = React.TextareaHTMLAttributes; FILE: src/components/ui/toggle-row.tsx type ToggleRowProps (line 3) | interface ToggleRowProps { function ToggleRow (line 12) | function ToggleRow({ FILE: src/components/universal/UniversalProviderCard.tsx type UniversalProviderCardProps (line 7) | interface UniversalProviderCardProps { function UniversalProviderCard (line 14) | function UniversalProviderCard({ FILE: src/components/universal/UniversalProviderFormModal.tsx type UniversalProviderFormModalProps (line 19) | interface UniversalProviderFormModalProps { function UniversalProviderFormModal (line 28) | function UniversalProviderFormModal({ FILE: src/components/universal/UniversalProviderPanel.tsx function UniversalProviderPanel (line 11) | function UniversalProviderPanel() { FILE: src/components/usage/ModelStatsTable.tsx type ModelStatsTableProps (line 13) | interface ModelStatsTableProps { function ModelStatsTable (line 17) | function ModelStatsTable({ refreshIntervalMs }: ModelStatsTableProps) { FILE: src/components/usage/ModelTestConfigPanel.tsx function ModelTestConfigPanel (line 16) | function ModelTestConfigPanel() { FILE: src/components/usage/PricingConfigPanel.tsx constant PRICING_APPS (line 36) | const PRICING_APPS = ["claude", "codex", "gemini"] as const; type PricingApp (line 37) | type PricingApp = (typeof PRICING_APPS)[number]; type PricingModelSource (line 38) | type PricingModelSource = "request" | "response"; type AppConfig (line 40) | interface AppConfig { type AppConfigState (line 45) | type AppConfigState = Record; function PricingConfigPanel (line 47) | function PricingConfigPanel() { FILE: src/components/usage/PricingEditModal.tsx type PricingEditModalProps (line 12) | interface PricingEditModalProps { function PricingEditModal (line 19) | function PricingEditModal({ FILE: src/components/usage/ProviderStatsTable.tsx type ProviderStatsTableProps (line 13) | interface ProviderStatsTableProps { function ProviderStatsTable (line 17) | function ProviderStatsTable({ FILE: src/components/usage/RequestDetailPanel.tsx type RequestDetailPanelProps (line 10) | interface RequestDetailPanelProps { function RequestDetailPanel (line 15) | function RequestDetailPanel({ FILE: src/components/usage/RequestLogTable.tsx type RequestLogTableProps (line 31) | interface RequestLogTableProps { constant ONE_DAY_SECONDS (line 35) | const ONE_DAY_SECONDS = 24 * 60 * 60; constant MAX_FIXED_RANGE_SECONDS (line 36) | const MAX_FIXED_RANGE_SECONDS = 30 * ONE_DAY_SECONDS; type TimeMode (line 38) | type TimeMode = "rolling" | "fixed"; function RequestLogTable (line 40) | function RequestLogTable({ refreshIntervalMs }: RequestLogTableProps) { FILE: src/components/usage/UsageDashboard.tsx function UsageDashboard (line 29) | function UsageDashboard() { FILE: src/components/usage/UsageSummaryCards.tsx type UsageSummaryCardsProps (line 9) | interface UsageSummaryCardsProps { function UsageSummaryCards (line 14) | function UsageSummaryCards({ FILE: src/components/usage/UsageTrendChart.tsx type UsageTrendChartProps (line 21) | interface UsageTrendChartProps { function UsageTrendChart (line 26) | function UsageTrendChart({ FILE: src/components/usage/format.ts function parseFiniteNumber (line 1) | function parseFiniteNumber(value: unknown): number | null { function fmtInt (line 14) | function fmtInt( function fmtUsd (line 24) | function fmtUsd( function getLocaleFromLanguage (line 34) | function getLocaleFromLanguage(language: string): string { FILE: src/components/workspace/DailyMemoryPanel.tsx type DailyMemoryPanelProps (line 23) | interface DailyMemoryPanelProps { function getTodayFilename (line 28) | function getTodayFilename(): string { function formatFileSize (line 36) | function formatFileSize(bytes: number): string { FILE: src/components/workspace/WorkspaceFileEditor.tsx type WorkspaceFileEditorProps (line 9) | interface WorkspaceFileEditorProps { FILE: src/components/workspace/WorkspaceFilesPanel.tsx type WorkspaceFile (line 24) | interface WorkspaceFile { constant WORKSPACE_FILES (line 30) | const WORKSPACE_FILES: WorkspaceFile[] = [ FILE: src/config/appConfig.tsx type AppConfig (line 11) | interface AppConfig { constant APP_IDS (line 18) | const APP_IDS: AppId[] = [ constant MCP_SKILLS_APP_IDS (line 27) | const MCP_SKILLS_APP_IDS: AppId[] = [ constant APP_ICON_MAP (line 34) | const APP_ICON_MAP: Record = { FILE: src/config/claudeProviderPresets.ts type TemplateValueConfig (line 6) | interface TemplateValueConfig { type PresetTheme (line 16) | interface PresetTheme { type ProviderPreset (line 25) | interface ProviderPreset { FILE: src/config/codexProviderPresets.ts type CodexProviderPreset (line 7) | interface CodexProviderPreset { function generateThirdPartyAuth (line 32) | function generateThirdPartyAuth(apiKey: string): Record { function generateThirdPartyConfig (line 41) | function generateThirdPartyConfig( FILE: src/config/codexTemplates.ts type CodexTemplate (line 6) | interface CodexTemplate { function getCodexCustomTemplate (line 15) | function getCodexCustomTemplate(): CodexTemplate { FILE: src/config/constants.ts constant PROVIDER_TYPES (line 2) | const PROVIDER_TYPES = { constant TEMPLATE_TYPES (line 7) | const TEMPLATE_TYPES = { type TemplateType (line 14) | type TemplateType = FILE: src/config/geminiProviderPresets.ts type GeminiPresetTheme (line 6) | interface GeminiPresetTheme { type GeminiProviderPreset (line 15) | interface GeminiProviderPreset { function getGeminiPresetByName (line 259) | function getGeminiPresetByName( function getGeminiPresetByUrl (line 265) | function getGeminiPresetByUrl( FILE: src/config/iconInference.ts function inferIconForPreset (line 42) | function inferIconForPreset(presetName: string): { function addIconsToPresets (line 61) | function addIconsToPresets< FILE: src/config/mcpPresets.ts type McpPreset (line 4) | type McpPreset = Omit; FILE: src/config/openclawProviderPresets.ts type OpenClawSuggestedDefaults (line 13) | interface OpenClawSuggestedDefaults { type OpenClawProviderPreset (line 20) | interface OpenClawProviderPreset { FILE: src/config/opencodeProviderPresets.ts type OpenCodeProviderPreset (line 4) | interface OpenCodeProviderPreset { type PresetModelVariant (line 29) | interface PresetModelVariant { constant OPENCODE_PRESET_MODEL_VARIANTS (line 39) | const OPENCODE_PRESET_MODEL_VARIANTS: Record< function getPresetModelDefaults (line 284) | function getPresetModelDefaults( FILE: src/config/universalProviderPresets.ts type UniversalProviderPreset (line 17) | interface UniversalProviderPreset { constant NEWAPI_DEFAULT_MODELS (line 41) | const NEWAPI_DEFAULT_MODELS: UniversalProviderModels = { function createUniversalProviderFromPreset (line 95) | function createUniversalProviderFromPreset( function getPresetDisplayName (line 120) | function getPresetDisplayName(preset: UniversalProviderPreset): string { function findPresetByType (line 127) | function findPresetByType( FILE: src/contexts/UpdateContext.tsx type UpdateContextValue (line 12) | interface UpdateContextValue { function UpdateProvider (line 31) | function UpdateProvider({ children }: { children: React.ReactNode }) { function useUpdate (line 149) | function useUpdate() { FILE: src/hooks/useAutoCompact.ts function useAutoCompact (line 12) | function useAutoCompact( FILE: src/hooks/useBackupManager.ts function useBackupManager (line 4) | function useBackupManager() { FILE: src/hooks/useDirectorySettings.ts type DirectoryKey (line 8) | type DirectoryKey = "appConfig" | "claude" | "codex" | "gemini" | "openc... type ResolvedDirectories (line 10) | interface ResolvedDirectories { type UseDirectorySettingsProps (line 60) | interface UseDirectorySettingsProps { type UseDirectorySettingsResult (line 65) | interface UseDirectorySettingsResult { function useDirectorySettings (line 93) | function useDirectorySettings({ FILE: src/hooks/useDragSort.ts function useDragSort (line 16) | function useDragSort(providers: Record, appId: AppId) { FILE: src/hooks/useGlobalProxy.ts function useGlobalProxyUrl (line 24) | function useGlobalProxyUrl() { function useSetGlobalProxyUrl (line 35) | function useSetGlobalProxyUrl() { function useTestProxy (line 61) | function useTestProxy() { function useUpstreamProxyStatus (line 86) | function useUpstreamProxyStatus() { function useScanProxies (line 96) | function useScanProxies() { FILE: src/hooks/useImportExport.ts type ImportStatus (line 7) | type ImportStatus = type UseImportExportOptions (line 14) | interface UseImportExportOptions { type UseImportExportResult (line 18) | interface UseImportExportResult { function useImportExport (line 31) | function useImportExport( FILE: src/hooks/useLastValidValue.ts function useLastValidValue (line 10) | function useLastValidValue(value: T | null | undefined): T | null { FILE: src/hooks/useMcp.ts function useAllMcpServers (line 9) | function useAllMcpServers() { function useUpsertMcpServer (line 19) | function useUpsertMcpServer() { function useToggleMcpApp (line 32) | function useToggleMcpApp() { function useDeleteMcpServer (line 53) | function useDeleteMcpServer() { function useImportMcpFromApps (line 66) | function useImportMcpFromApps() { FILE: src/hooks/useOpenClaw.ts function useOpenClawLiveProviderIds (line 32) | function useOpenClawLiveProviderIds(enabled: boolean) { function useOpenClawDefaultModel (line 44) | function useOpenClawDefaultModel(enabled: boolean) { function useOpenClawEnv (line 55) | function useOpenClawEnv() { function useOpenClawTools (line 66) | function useOpenClawTools() { function useOpenClawAgentsDefaults (line 77) | function useOpenClawAgentsDefaults() { function useOpenClawHealth (line 85) | function useOpenClawHealth(enabled: boolean) { function useSaveOpenClawEnv (line 102) | function useSaveOpenClawEnv() { function useSaveOpenClawTools (line 117) | function useSaveOpenClawTools() { function useSaveOpenClawAgentsDefaults (line 133) | function useSaveOpenClawAgentsDefaults() { FILE: src/hooks/usePromptActions.ts function usePromptActions (line 6) | function usePromptActions(appId: AppId) { FILE: src/hooks/useProviderActions.ts function useProviderActions (line 26) | function useProviderActions(activeApp: AppId) { FILE: src/hooks/useProxyConfig.ts function useProxyConfig (line 14) | function useProxyConfig() { FILE: src/hooks/useProxyStatus.ts function useProxyStatus (line 19) | function useProxyStatus() { FILE: src/hooks/useSessionSearch.ts type UseSessionSearchOptions (line 5) | interface UseSessionSearchOptions { type UseSessionSearchResult (line 10) | interface UseSessionSearchResult { function useSessionSearch (line 18) | function useSessionSearch({ FILE: src/hooks/useSettings.ts type Language (line 15) | type Language = "zh" | "en" | "ja"; type SaveResult (line 17) | interface SaveResult { type UseSettingsResult (line 21) | interface UseSettingsResult { function useSettings (line 62) | function useSettings(): UseSettingsResult { FILE: src/hooks/useSettingsForm.ts type Language (line 6) | type Language = "zh" | "en" | "ja"; type SettingsFormState (line 8) | type SettingsFormState = Omit & { type UseSettingsFormResult (line 24) | interface UseSettingsFormResult { function useSettingsForm (line 42) | function useSettingsForm(): UseSettingsFormResult { FILE: src/hooks/useSettingsMetadata.ts type UseSettingsMetadataResult (line 4) | interface UseSettingsMetadataResult { function useSettingsMetadata (line 18) | function useSettingsMetadata(): UseSettingsMetadataResult { FILE: src/hooks/useSkills.ts function useInstalledSkills (line 14) | function useInstalledSkills() { function useSkillBackups (line 21) | function useSkillBackups() { function useDeleteSkillBackup (line 29) | function useDeleteSkillBackup() { function useDiscoverableSkills (line 42) | function useDiscoverableSkills() { function useInstallSkill (line 53) | function useInstallSkill() { function useUninstallSkill (line 73) | function useUninstallSkill() { function useRestoreSkillBackup (line 84) | function useRestoreSkillBackup() { function useToggleSkillApp (line 104) | function useToggleSkillApp() { function useScanUnmanagedSkills (line 125) | function useScanUnmanagedSkills() { function useImportSkillsFromApps (line 136) | function useImportSkillsFromApps() { function useSkillRepos (line 151) | function useSkillRepos() { function useAddSkillRepo (line 161) | function useAddSkillRepo() { function useRemoveSkillRepo (line 175) | function useRemoveSkillRepo() { function useInstallSkillsFromZip (line 190) | function useInstallSkillsFromZip() { FILE: src/hooks/useStreamCheck.ts function useStreamCheck (line 11) | function useStreamCheck(appId: AppId) { FILE: src/i18n/index.ts type Language (line 8) | type Language = "zh" | "en" | "ja"; constant DEFAULT_LANGUAGE (line 10) | const DEFAULT_LANGUAGE: Language = "zh"; FILE: src/icons/extracted/index.ts function getIcon (line 78) | function getIcon(name: string): string { function hasIcon (line 82) | function hasIcon(name: string): boolean { FILE: src/icons/extracted/metadata.ts function getIconMetadata (line 406) | function getIconMetadata(name: string): IconMetadata | undefined { function searchIcons (line 410) | function searchIcons(query: string): string[] { FILE: src/lib/api/auth.ts type ManagedAuthProvider (line 3) | type ManagedAuthProvider = "github_copilot"; type ManagedAuthAccount (line 5) | interface ManagedAuthAccount { type ManagedAuthStatus (line 14) | interface ManagedAuthStatus { type ManagedAuthDeviceCodeResponse (line 22) | interface ManagedAuthDeviceCodeResponse { function authStartLogin (line 31) | async function authStartLogin( function authPollForAccount (line 39) | async function authPollForAccount( function authListAccounts (line 49) | async function authListAccounts( function authGetStatus (line 57) | async function authGetStatus( function authRemoveAccount (line 65) | async function authRemoveAccount( function authSetDefaultAccount (line 75) | async function authSetDefaultAccount( function authLogout (line 85) | async function authLogout( FILE: src/lib/api/config.ts type AppType (line 4) | type AppType = "claude" | "codex" | "gemini" | "omo" | "omo_slim"; function getClaudeCommonConfigSnippet (line 11) | async function getClaudeCommonConfigSnippet(): Promise { function setClaudeCommonConfigSnippet (line 21) | async function setClaudeCommonConfigSnippet( function getCommonConfigSnippet (line 32) | async function getCommonConfigSnippet( function setCommonConfigSnippet (line 44) | async function setCommonConfigSnippet( type ExtractCommonConfigSnippetOptions (line 61) | type ExtractCommonConfigSnippetOptions = { function extractCommonConfigSnippet (line 65) | async function extractCommonConfigSnippet( FILE: src/lib/api/copilot.ts type CopilotDeviceCodeResponse (line 13) | interface CopilotDeviceCodeResponse { type GitHubAccount (line 24) | interface GitHubAccount { type CopilotAuthStatus (line 38) | interface CopilotAuthStatus { function copilotStartDeviceFlow (line 58) | async function copilotStartDeviceFlow(): Promise { function copilotGetAuthStatus (line 81) | async function copilotGetAuthStatus(): Promise { function copilotLogout (line 88) | async function copilotLogout(): Promise { function copilotIsAuthenticated (line 97) | async function copilotIsAuthenticated(): Promise { type CopilotModel (line 104) | interface CopilotModel { function copilotGetToken (line 118) | async function copilotGetToken(): Promise { function copilotGetModels (line 127) | async function copilotGetModels(): Promise { type QuotaDetail (line 134) | interface QuotaDetail { type QuotaSnapshots (line 144) | interface QuotaSnapshots { type CopilotUsageResponse (line 153) | interface CopilotUsageResponse { function copilotGetUsage (line 164) | async function copilotGetUsage(): Promise { function copilotListAccounts (line 175) | async function copilotListAccounts(): Promise { function copilotPollForAccount (line 188) | async function copilotPollForAccount( function copilotRemoveAccount (line 201) | async function copilotRemoveAccount(accountId: string): Promise { function copilotSetDefaultAccount (line 210) | async function copilotSetDefaultAccount( function copilotGetTokenForAccount (line 224) | async function copilotGetTokenForAccount( function copilotGetModelsForAccount (line 236) | async function copilotGetModelsForAccount( function copilotGetUsageForAccount (line 250) | async function copilotGetUsageForAccount( FILE: src/lib/api/deeplink.ts type ResourceType (line 3) | type ResourceType = "provider" | "prompt" | "mcp" | "skill"; type DeepLinkImportRequest (line 5) | interface DeepLinkImportRequest { type McpImportResult (line 52) | interface McpImportResult { type ImportResult (line 61) | type ImportResult = FILE: src/lib/api/env.ts function checkEnvConflicts (line 13) | async function checkEnvConflicts( function deleteEnvVars (line 24) | async function deleteEnvVars( function restoreEnvBackup (line 34) | async function restoreEnvBackup(backupPath: string): Promise { function checkAllEnvConflicts (line 42) | async function checkAllEnvConflicts(): Promise< FILE: src/lib/api/failover.ts type Provider (line 9) | interface Provider { method getProviderHealth (line 27) | async getProviderHealth( method resetCircuitBreaker (line 35) | async resetCircuitBreaker( method getCircuitBreakerConfig (line 43) | async getCircuitBreakerConfig(): Promise { method updateCircuitBreakerConfig (line 48) | async updateCircuitBreakerConfig( method getCircuitBreakerStats (line 55) | async getCircuitBreakerStats( method getFailoverQueue (line 65) | async getFailoverQueue(appType: string): Promise { method getAvailableProvidersForFailover (line 70) | async getAvailableProvidersForFailover(appType: string): Promise { method setAutoFailoverEnabled (line 93) | async setAutoFailoverEnabled( FILE: src/lib/api/globalProxy.ts type ProxyTestResult (line 12) | interface ProxyTestResult { type UpstreamProxyStatus (line 21) | interface UpstreamProxyStatus { type DetectedProxy (line 29) | interface DetectedProxy { function getGlobalProxyUrl (line 40) | async function getGlobalProxyUrl(): Promise { function setGlobalProxyUrl (line 50) | async function setGlobalProxyUrl(url: string): Promise { function testProxyUrl (line 65) | async function testProxyUrl(url: string): Promise { function getUpstreamProxyStatus (line 74) | async function getUpstreamProxyStatus(): Promise { function scanLocalProxies (line 83) | async function scanLocalProxies(): Promise { FILE: src/lib/api/mcp.ts method getStatus (line 12) | async getStatus(): Promise { method readConfig (line 16) | async readConfig(): Promise { method upsertServer (line 20) | async upsertServer( method deleteServer (line 27) | async deleteServer(id: string): Promise { method validateCommand (line 31) | async validateCommand(cmd: string): Promise { method getConfig (line 38) | async getConfig(app: AppId = "claude"): Promise { method upsertServerInConfig (line 45) | async upsertServerInConfig( method deleteServerInConfig (line 65) | async deleteServerInConfig( method setEnabled (line 83) | async setEnabled(app: AppId, id: string, enabled: boolean): Promise { method upsertUnifiedServer (line 101) | async upsertUnifiedServer(server: McpServer): Promise { method deleteUnifiedServer (line 108) | async deleteUnifiedServer(id: string): Promise { method toggleApp (line 115) | async toggleApp( method importFromApps (line 126) | async importFromApps(): Promise { FILE: src/lib/api/model-test.ts type HealthStatus (line 6) | type HealthStatus = "operational" | "degraded" | "failed"; type StreamCheckConfig (line 8) | interface StreamCheckConfig { type StreamCheckResult (line 18) | interface StreamCheckResult { function streamCheckProvider (line 34) | async function streamCheckProvider( function streamCheckAllProviders (line 44) | async function streamCheckAllProviders( function getStreamCheckConfig (line 54) | async function getStreamCheckConfig(): Promise { function saveStreamCheckConfig (line 61) | async function saveStreamCheckConfig( FILE: src/lib/api/openclaw.ts method getDefaultModel (line 28) | async getDefaultModel(): Promise { method setDefaultModel (line 35) | async setDefaultModel( method getModelCatalog (line 44) | async getModelCatalog(): Promise { method setAgentsDefaults (line 70) | async setAgentsDefaults( method getEnv (line 83) | async getEnv(): Promise { method setEnv (line 90) | async setEnv(env: OpenClawEnvConfig): Promise { method getTools (line 101) | async getTools(): Promise { method setTools (line 108) | async setTools(tools: OpenClawToolsConfig): Promise { method scanHealth (line 112) | async scanHealth(): Promise { method getLiveProvider (line 116) | async getLiveProvider( FILE: src/lib/api/prompts.ts type Prompt (line 4) | interface Prompt { method getPrompts (line 15) | async getPrompts(app: AppId): Promise> { method upsertPrompt (line 19) | async upsertPrompt(app: AppId, id: string, prompt: Prompt): Promise { method deletePrompt (line 23) | async deletePrompt(app: AppId, id: string): Promise { method enablePrompt (line 27) | async enablePrompt(app: AppId, id: string): Promise { method importFromFile (line 31) | async importFromFile(app: AppId): Promise { method getCurrentFileContent (line 35) | async getCurrentFileContent(app: AppId): Promise { FILE: src/lib/api/providers.ts type ProviderSortUpdate (line 10) | interface ProviderSortUpdate { type ProviderSwitchEvent (line 15) | interface ProviderSwitchEvent { type SwitchResult (line 20) | interface SwitchResult { method getAll (line 25) | async getAll(appId: AppId): Promise> { method getCurrent (line 29) | async getCurrent(appId: AppId): Promise { method add (line 33) | async add(provider: Provider, appId: AppId): Promise { method update (line 37) | async update(provider: Provider, appId: AppId): Promise { method delete (line 41) | async delete(id: string, appId: AppId): Promise { method removeFromLiveConfig (line 49) | async removeFromLiveConfig(id: string, appId: AppId): Promise { method switch (line 53) | async switch(id: string, appId: AppId): Promise { method importDefault (line 57) | async importDefault(appId: AppId): Promise { method updateTrayMenu (line 61) | async updateTrayMenu(): Promise { method updateSortOrder (line 65) | async updateSortOrder( method onSwitched (line 72) | async onSwitched( method openTerminal (line 86) | async openTerminal(providerId: string, appId: AppId): Promise { method importOpenCodeFromLive (line 94) | async importOpenCodeFromLive(): Promise { method getOpenCodeLiveProviderIds (line 102) | async getOpenCodeLiveProviderIds(): Promise { method getOpenClawLiveProviderIds (line 110) | async getOpenClawLiveProviderIds(): Promise { method importOpenClawFromLive (line 118) | async importOpenClawFromLive(): Promise { method getAll (line 131) | async getAll(): Promise { method get (line 138) | async get(id: string): Promise { method upsert (line 145) | async upsert(provider: UniversalProvider): Promise { method delete (line 152) | async delete(id: string): Promise { method sync (line 159) | async sync(id: string): Promise { FILE: src/lib/api/proxy.ts method startProxyServer (line 15) | async startProxyServer(): Promise { method stopProxyWithRestore (line 20) | async stopProxyWithRestore(): Promise { method getProxyStatus (line 25) | async getProxyStatus(): Promise { method isProxyRunning (line 30) | async isProxyRunning(): Promise { method isLiveTakeoverActive (line 35) | async isLiveTakeoverActive(): Promise { method switchProxyProvider (line 40) | async switchProxyProvider( method getProxyTakeoverStatus (line 50) | async getProxyTakeoverStatus(): Promise { method setProxyTakeoverForApp (line 55) | async setProxyTakeoverForApp( method getProxyConfig (line 65) | async getProxyConfig(): Promise { method updateProxyConfig (line 70) | async updateProxyConfig(config: ProxyConfig): Promise { method getGlobalProxyConfig (line 77) | async getGlobalProxyConfig(): Promise { method updateGlobalProxyConfig (line 82) | async updateGlobalProxyConfig(config: GlobalProxyConfig): Promise { method getProxyConfigForApp (line 87) | async getProxyConfigForApp(appType: string): Promise { method updateProxyConfigForApp (line 92) | async updateProxyConfigForApp(config: AppProxyConfig): Promise { method getDefaultCostMultiplier (line 99) | async getDefaultCostMultiplier(appType: string): Promise { method setDefaultCostMultiplier (line 104) | async setDefaultCostMultiplier( method getPricingModelSource (line 112) | async getPricingModelSource(appType: string): Promise { method setPricingModelSource (line 117) | async setPricingModelSource(appType: string, value: string): Promise { method getMessages (line 15) | async getMessages( method delete (line 22) | async delete(options: DeleteSessionOptions): Promise { method launchTerminal (line 31) | async launchTerminal(options: { FILE: src/lib/api/settings.ts type ConfigTransferResult (line 5) | interface ConfigTransferResult { type WebDavTestResult (line 12) | interface WebDavTestResult { type WebDavSyncResult (line 17) | interface WebDavSyncResult { method get (line 22) | async get(): Promise { method save (line 26) | async save(settings: Settings): Promise { method restart (line 30) | async restart(): Promise { method checkUpdates (line 34) | async checkUpdates(): Promise { method isPortable (line 38) | async isPortable(): Promise { method getConfigDir (line 42) | async getConfigDir(appId: AppId): Promise { method openConfigFolder (line 46) | async openConfigFolder(appId: AppId): Promise { method selectConfigDirectory (line 50) | async selectConfigDirectory(defaultPath?: string): Promise { method getClaudeCodeConfigPath (line 54) | async getClaudeCodeConfigPath(): Promise { method getAppConfigPath (line 58) | async getAppConfigPath(): Promise { method openAppConfigFolder (line 62) | async openAppConfigFolder(): Promise { method getAppConfigDirOverride (line 66) | async getAppConfigDirOverride(): Promise { method setAppConfigDirOverride (line 70) | async setAppConfigDirOverride(path: string | null): Promise { method applyClaudePluginConfig (line 74) | async applyClaudePluginConfig(options: { method applyClaudeOnboardingSkip (line 81) | async applyClaudeOnboardingSkip(): Promise { method clearClaudeOnboardingSkip (line 85) | async clearClaudeOnboardingSkip(): Promise { method saveFileDialog (line 89) | async saveFileDialog(defaultName: string): Promise { method openFileDialog (line 93) | async openFileDialog(): Promise { method exportConfigToFile (line 97) | async exportConfigToFile(filePath: string): Promise { method importConfigFromFile (line 101) | async importConfigFromFile(filePath: string): Promise { method webdavSyncDownload (line 121) | async webdavSyncDownload(): Promise { method webdavSyncSaveSettings (line 125) | async webdavSyncSaveSettings( method webdavSyncFetchRemoteInfo (line 135) | async webdavSyncFetchRemoteInfo(): Promise< method syncCurrentProvidersLive (line 141) | async syncCurrentProvidersLive(): Promise { method openExternal (line 151) | async openExternal(url: string): Promise { method setAutoLaunch (line 164) | async setAutoLaunch(enabled: boolean): Promise { method getAutoLaunchStatus (line 168) | async getAutoLaunchStatus(): Promise { method getToolVersions (line 172) | async getToolVersions( method getRectifierConfig (line 191) | async getRectifierConfig(): Promise { method setRectifierConfig (line 195) | async setRectifierConfig(config: RectifierConfig): Promise { method getOptimizerConfig (line 199) | async getOptimizerConfig(): Promise { method setOptimizerConfig (line 203) | async setOptimizerConfig(config: OptimizerConfig): Promise { method getLogConfig (line 207) | async getLogConfig(): Promise { method setLogConfig (line 211) | async setLogConfig(config: LogConfig): Promise { type RectifierConfig (line 216) | interface RectifierConfig { type OptimizerConfig (line 222) | interface OptimizerConfig { type LogConfig (line 229) | interface LogConfig { type BackupEntry (line 234) | interface BackupEntry { method createDbBackup (line 241) | async createDbBackup(): Promise { method listDbBackups (line 245) | async listDbBackups(): Promise { method restoreDbBackup (line 249) | async restoreDbBackup(filename: string): Promise { method renameDbBackup (line 253) | async renameDbBackup(oldFilename: string, newName: string): Promise { FILE: src/lib/api/skills.ts type AppType (line 5) | type AppType = "claude" | "codex" | "gemini" | "opencode" | "openclaw"; type SkillApps (line 8) | interface SkillApps { type InstalledSkill (line 17) | interface InstalledSkill { type SkillUninstallResult (line 30) | interface SkillUninstallResult { type SkillBackupEntry (line 34) | interface SkillBackupEntry { type DiscoverableSkill (line 42) | interface DiscoverableSkill { type UnmanagedSkill (line 54) | interface UnmanagedSkill { type ImportSkillSelection (line 63) | interface ImportSkillSelection { type Skill (line 69) | interface Skill { type SkillRepo (line 82) | interface SkillRepo { method getInstalled (line 95) | async getInstalled(): Promise { method getBackups (line 100) | async getBackups(): Promise { method deleteBackup (line 105) | async deleteBackup(backupId: string): Promise { method installUnified (line 110) | async installUnified( method uninstallUnified (line 118) | async uninstallUnified(id: string): Promise { method restoreBackup (line 123) | async restoreBackup( method toggleApp (line 131) | async toggleApp(id: string, app: AppId, enabled: boolean): Promise { method importFromApps (line 141) | async importFromApps( method discoverAvailable (line 148) | async discoverAvailable(): Promise { method getAll (line 155) | async getAll(app: AppId = "claude"): Promise { method install (line 163) | async install(directory: string, app: AppId = "claude"): Promise { method uninstall (line 171) | async uninstall( method getRepos (line 184) | async getRepos(): Promise { method addRepo (line 189) | async addRepo(repo: SkillRepo): Promise { method removeRepo (line 194) | async removeRepo(owner: string, name: string): Promise { method openZipFileDialog (line 201) | async openZipFileDialog(): Promise { method installFromZip (line 206) | async installFromZip( FILE: src/lib/api/types.ts type AppId (line 2) | type AppId = "claude" | "codex" | "gemini" | "opencode" | "openclaw"; FILE: src/lib/api/vscode.ts type EndpointLatencyResult (line 5) | interface EndpointLatencyResult { method getLiveProviderSettings (line 13) | async getLiveProviderSettings(appId: AppId) { method testApiEndpoints (line 17) | async testApiEndpoints( method getCustomEndpoints (line 27) | async getCustomEndpoints( method addCustomEndpoint (line 37) | async addCustomEndpoint( method removeCustomEndpoint (line 49) | async removeCustomEndpoint( method updateEndpointLastUsed (line 61) | async updateEndpointLastUsed( method exportConfigToFile (line 73) | async exportConfigToFile(filePath: string) { method importConfigFromFile (line 79) | async importConfigFromFile(filePath: string) { method saveFileDialog (line 85) | async saveFileDialog(defaultName: string): Promise { method openFileDialog (line 91) | async openFileDialog(): Promise { FILE: src/lib/api/workspace.ts type DailyMemoryFileInfo (line 3) | interface DailyMemoryFileInfo { type DailyMemorySearchResult (line 11) | interface DailyMemorySearchResult { method readFile (line 21) | async readFile(filename: string): Promise { method writeFile (line 25) | async writeFile(filename: string, content: string): Promise { method listDailyMemoryFiles (line 29) | async listDailyMemoryFiles(): Promise { method readDailyMemoryFile (line 33) | async readDailyMemoryFile(filename: string): Promise { method writeDailyMemoryFile (line 37) | async writeDailyMemoryFile(filename: string, content: string): Promise { method searchDailyMemoryFiles (line 45) | async searchDailyMemoryFiles( method openDirectory (line 53) | async openDirectory(subdir: "workspace" | "memory"): Promise { FILE: src/lib/authBinding.ts function resolveManagedAccountId (line 3) | function resolveManagedAccountId( FILE: src/lib/errors/skillErrorParser.ts type SkillError (line 6) | interface SkillError { function parseSkillError (line 16) | function parseSkillError(errorString: string): SkillError | null { function getErrorI18nKey (line 31) | function getErrorI18nKey(code: string): string { function getSuggestionI18nKey (line 50) | function getSuggestionI18nKey(suggestion: string): string { function formatSkillError (line 74) | function formatSkillError( FILE: src/lib/query/failover.ts function useProviderHealth (line 12) | function useProviderHealth(providerId: string, appType: string) { function useResetCircuitBreaker (line 28) | function useResetCircuitBreaker() { function useCircuitBreakerConfig (line 59) | function useCircuitBreakerConfig() { function useUpdateCircuitBreakerConfig (line 69) | function useUpdateCircuitBreakerConfig() { function useCircuitBreakerStats (line 83) | function useCircuitBreakerStats(providerId: string, appType: string) { function useFailoverQueue (line 97) | function useFailoverQueue(appType: string) { function useAvailableProvidersForFailover (line 108) | function useAvailableProvidersForFailover(appType: string) { function useAddToFailoverQueue (line 119) | function useAddToFailoverQueue() { function useRemoveFromFailoverQueue (line 147) | function useRemoveFromFailoverQueue() { function useAutoFailoverEnabled (line 189) | function useAutoFailoverEnabled(appType: string) { function useSetAutoFailoverEnabled (line 201) | function useSetAutoFailoverEnabled() { FILE: src/lib/query/omo.ts function createOmoQueryKeys (line 6) | function createOmoQueryKeys(prefix: string) { function createOmoQueryHooks (line 13) | function createOmoQueryHooks( FILE: src/lib/query/proxy.ts function useProxyStatus (line 12) | function useProxyStatus() { function useIsProxyRunning (line 23) | function useIsProxyRunning() { function useIsLiveTakeoverActive (line 34) | function useIsLiveTakeoverActive() { function useProxyTakeoverStatus (line 45) | function useProxyTakeoverStatus() { function useStartProxyServer (line 58) | function useStartProxyServer() { function useStopProxyServer (line 75) | function useStopProxyServer() { function useSetProxyTakeoverForApp (line 92) | function useSetProxyTakeoverForApp() { function useSwitchProxyProvider (line 108) | function useSwitchProxyProvider() { function useProxyConfig (line 137) | function useProxyConfig() { function useGlobalProxyConfig (line 173) | function useGlobalProxyConfig() { function useUpdateGlobalProxyConfig (line 183) | function useUpdateGlobalProxyConfig() { function useAppProxyConfig (line 207) | function useAppProxyConfig(appType: string) { function useUpdateAppProxyConfig (line 218) | function useUpdateAppProxyConfig() { FILE: src/lib/query/queries.ts type ProvidersQueryData (line 44) | interface ProvidersQueryData { type UseProvidersQueryOptions (line 49) | interface UseProvidersQueryOptions { type UseUsageQueryOptions (line 96) | interface UseUsageQueryOptions { FILE: src/lib/query/usage.ts constant DEFAULT_REFETCH_INTERVAL_MS (line 5) | const DEFAULT_REFETCH_INTERVAL_MS = 30000; type UsageQueryOptions (line 7) | type UsageQueryOptions = { type RequestLogsTimeMode (line 12) | type RequestLogsTimeMode = "rolling" | "fixed"; type RequestLogsQueryArgs (line 14) | type RequestLogsQueryArgs = { type RequestLogsKey (line 23) | type RequestLogsKey = { function useUsageSummary (line 70) | function useUsageSummary(days: number, options?: UsageQueryOptions) { function useUsageTrends (line 82) | function useUsageTrends(days: number, options?: UsageQueryOptions) { function useProviderStats (line 94) | function useProviderStats(options?: UsageQueryOptions) { function useModelStats (line 103) | function useModelStats(options?: UsageQueryOptions) { function useRequestLogs (line 118) | function useRequestLogs({ function useRequestDetail (line 152) | function useRequestDetail(requestId: string) { function useModelPricing (line 160) | function useModelPricing() { function useProviderLimits (line 167) | function useProviderLimits(providerId: string, appType: string) { function useUpdateModelPricing (line 175) | function useUpdateModelPricing() { function useDeleteModelPricing (line 201) | function useDeleteModelPricing() { FILE: src/lib/schemas/common.ts function parseJsonError (line 7) | function parseJsonError(error: unknown): string { FILE: src/lib/schemas/mcp.ts type McpServerFormData (line 42) | type McpServerFormData = z.infer; FILE: src/lib/schemas/provider.ts function parseJsonError (line 6) | function parseJsonError(error: unknown): string { type ProviderFormData (line 60) | type ProviderFormData = z.infer; FILE: src/lib/schemas/settings.ts type SettingsFormData (line 57) | type SettingsFormData = z.infer; FILE: src/lib/updater.ts type UpdateChannel (line 8) | type UpdateChannel = "stable" | "beta"; type UpdaterPhase (line 10) | type UpdaterPhase = type UpdateInfo (line 20) | interface UpdateInfo { type UpdateProgressEvent (line 27) | interface UpdateProgressEvent { type UpdateHandle (line 33) | interface UpdateHandle { type CheckOptions (line 44) | interface CheckOptions { function mapUpdateHandle (line 49) | function mapUpdateHandle(raw: Update): UpdateHandle { function getCurrentVersion (line 85) | async function getCurrentVersion(): Promise { function checkForUpdate (line 93) | async function checkForUpdate( function relaunchApp (line 120) | async function relaunchApp(): Promise { FILE: src/lib/utils.ts function cn (line 4) | function cn(...inputs: ClassValue[]) { FILE: src/lib/utils/base64.ts function decodeBase64Utf8 (line 13) | function decodeBase64Utf8(str: string): string { FILE: src/main.tsx type ConfigLoadErrorPayload (line 30) | interface ConfigLoadErrorPayload { function handleConfigLoadError (line 39) | async function handleConfigLoadError( function bootstrap (line 73) | async function bootstrap() { FILE: src/types.ts type ProviderCategory (line 1) | type ProviderCategory = type Provider (line 11) | interface Provider { type AppConfig (line 33) | interface AppConfig { type CustomEndpoint (line 39) | interface CustomEndpoint { type EndpointCandidate (line 46) | interface EndpointCandidate { type UsageScript (line 55) | interface UsageScript { type UsageData (line 77) | interface UsageData { type UsageResult (line 89) | interface UsageResult { type ProviderTestConfig (line 96) | interface ProviderTestConfig { type ProviderProxyConfig (line 112) | interface ProviderProxyConfig { type AuthBindingSource (line 127) | type AuthBindingSource = "provider_config" | "managed_account"; type AuthBinding (line 129) | interface AuthBinding { type ProviderMeta (line 136) | interface ProviderMeta { type SkillSyncMethod (line 175) | type SkillSyncMethod = "auto" | "symlink" | "copy"; type ClaudeApiFormat (line 181) | type ClaudeApiFormat = "anthropic" | "openai_chat" | "openai_responses"; type ClaudeApiKeyField (line 184) | type ClaudeApiKeyField = "ANTHROPIC_AUTH_TOKEN" | "ANTHROPIC_API_KEY"; type VisibleApps (line 187) | interface VisibleApps { type WebDavSyncStatus (line 196) | interface WebDavSyncStatus { type WebDavSyncSettings (line 206) | interface WebDavSyncSettings { type RemoteSnapshotLayout (line 217) | type RemoteSnapshotLayout = "current" | "legacy"; type RemoteSnapshotInfo (line 220) | interface RemoteSnapshotInfo { type Settings (line 235) | interface Settings { type SessionMeta (line 310) | interface SessionMeta { type SessionMessage (line 322) | interface SessionMessage { type McpServerSpec (line 329) | interface McpServerSpec { type McpApps (line 345) | interface McpApps { type McpServer (line 354) | interface McpServer { type McpServersMap (line 370) | type McpServersMap = Record; type McpStatus (line 373) | interface McpStatus { type McpConfigResponse (line 380) | interface McpConfigResponse { type UniversalProviderApps (line 390) | interface UniversalProviderApps { type ClaudeModelConfig (line 397) | interface ClaudeModelConfig { type CodexModelConfig (line 405) | interface CodexModelConfig { type GeminiModelConfig (line 411) | interface GeminiModelConfig { type UniversalProviderModels (line 416) | interface UniversalProviderModels { type UniversalProvider (line 423) | interface UniversalProvider { type UniversalProvidersMap (line 441) | type UniversalProvidersMap = Record; type OpenCodeModel (line 448) | interface OpenCodeModel { type OpenCodeProviderOptions (line 460) | interface OpenCodeProviderOptions { type OpenCodeProviderConfig (line 469) | interface OpenCodeProviderConfig { type OpenCodeMcpServerSpec (line 477) | interface OpenCodeMcpServerSpec { type OpenClawModel (line 494) | interface OpenClawModel { type OpenClawDefaultModel (line 511) | interface OpenClawDefaultModel { type OpenClawModelCatalogEntry (line 517) | interface OpenClawModelCatalogEntry { type OpenClawHealthWarning (line 521) | interface OpenClawHealthWarning { type OpenClawWriteOutcome (line 527) | interface OpenClawWriteOutcome { type OpenClawToolsProfile (line 532) | type OpenClawToolsProfile = "minimal" | "coding" | "messaging" | "full"; type OpenClawProviderConfig (line 536) | interface OpenClawProviderConfig { type OpenClawAgentsDefaults (line 546) | interface OpenClawAgentsDefaults { type OpenClawEnvConfig (line 555) | interface OpenClawEnvConfig { type OpenClawToolsConfig (line 560) | interface OpenClawToolsConfig { FILE: src/types/env.ts type EnvConflict (line 8) | interface EnvConflict { type BackupInfo (line 22) | interface BackupInfo { FILE: src/types/icon.ts type IconMetadata (line 1) | interface IconMetadata { type IconPreset (line 9) | interface IconPreset { FILE: src/types/omo.ts type OmoLocalFileData (line 1) | interface OmoLocalFileData { type OmoAgentDef (line 9) | interface OmoAgentDef { type OmoCategoryDef (line 18) | interface OmoCategoryDef { constant OMO_BUILTIN_AGENTS (line 26) | const OMO_BUILTIN_AGENTS: OmoAgentDef[] = [ constant OMO_BUILTIN_CATEGORIES (line 116) | const OMO_BUILTIN_CATEGORIES: OmoCategoryDef[] = [ constant OMO_DISABLEABLE_AGENTS (line 175) | const OMO_DISABLEABLE_AGENTS = [ constant OMO_DISABLEABLE_MCPS (line 190) | const OMO_DISABLEABLE_MCPS = [ constant OMO_DISABLEABLE_HOOKS (line 196) | const OMO_DISABLEABLE_HOOKS = [ constant OMO_DISABLEABLE_SKILLS (line 242) | const OMO_DISABLEABLE_SKILLS = [ constant OMO_DEFAULT_SCHEMA_URL (line 248) | const OMO_DEFAULT_SCHEMA_URL = constant OMO_SISYPHUS_AGENT_PLACEHOLDER (line 251) | const OMO_SISYPHUS_AGENT_PLACEHOLDER = `{ constant OMO_LSP_PLACEHOLDER (line 258) | const OMO_LSP_PLACEHOLDER = `{ constant OMO_EXPERIMENTAL_PLACEHOLDER (line 269) | const OMO_EXPERIMENTAL_PLACEHOLDER = `{ constant OMO_BACKGROUND_TASK_PLACEHOLDER (line 275) | const OMO_BACKGROUND_TASK_PLACEHOLDER = `{ constant OMO_BROWSER_AUTOMATION_PLACEHOLDER (line 288) | const OMO_BROWSER_AUTOMATION_PLACEHOLDER = `{ constant OMO_CLAUDE_CODE_PLACEHOLDER (line 292) | const OMO_CLAUDE_CODE_PLACEHOLDER = `{ function parseOmoOtherFieldsObject (line 301) | function parseOmoOtherFieldsObject( constant OMO_SLIM_BUILTIN_AGENTS (line 316) | const OMO_SLIM_BUILTIN_AGENTS: OmoAgentDef[] = [ constant OMO_SLIM_DISABLEABLE_AGENTS (line 367) | const OMO_SLIM_DISABLEABLE_AGENTS = [ constant OMO_SLIM_DISABLEABLE_MCPS (line 376) | const OMO_SLIM_DISABLEABLE_MCPS = [ constant OMO_SLIM_DISABLEABLE_HOOKS (line 382) | const OMO_SLIM_DISABLEABLE_HOOKS = [ constant OMO_SLIM_DEFAULT_SCHEMA_URL (line 388) | const OMO_SLIM_DEFAULT_SCHEMA_URL = function buildOmoProfilePreview (line 391) | function buildOmoProfilePreview( function buildOmoSlimProfilePreview (line 417) | function buildOmoSlimProfilePreview( FILE: src/types/proxy.ts type ProxyConfig (line 1) | interface ProxyConfig { type ProxyStatus (line 14) | interface ProxyStatus { type ActiveTarget (line 32) | interface ActiveTarget { type ProxyServerInfo (line 38) | interface ProxyServerInfo { type ProxyTakeoverStatus (line 44) | interface ProxyTakeoverStatus { type ProviderHealth (line 52) | interface ProviderHealth { type CircuitBreakerConfig (line 64) | interface CircuitBreakerConfig { type CircuitState (line 72) | type CircuitState = "closed" | "open" | "half_open"; type CircuitBreakerStats (line 74) | interface CircuitBreakerStats { type ProviderHealthStatus (line 83) | enum ProviderHealthStatus { type ProviderHealthWithStatus (line 91) | interface ProviderHealthWithStatus extends ProviderHealth { type ProxyUsageRecord (line 96) | interface ProxyUsageRecord { type FailoverQueueItem (line 109) | interface FailoverQueueItem { type GlobalProxyConfig (line 116) | interface GlobalProxyConfig { type AppProxyConfig (line 124) | interface AppProxyConfig { FILE: src/types/usage.ts type TokenUsage (line 3) | interface TokenUsage { type RequestLog (line 10) | interface RequestLog { type PaginatedLogs (line 36) | interface PaginatedLogs { type ModelPricing (line 43) | interface ModelPricing { type UsageSummary (line 52) | interface UsageSummary { type DailyStats (line 62) | interface DailyStats { type ProviderStats (line 73) | interface ProviderStats { type ModelStats (line 83) | interface ModelStats { type LogFilters (line 91) | interface LogFilters { type ProviderLimitStatus (line 100) | interface ProviderLimitStatus { type TimeRange (line 110) | type TimeRange = "1d" | "7d" | "30d"; type StatsFilters (line 112) | interface StatsFilters { FILE: src/utils/domUtils.ts function isTextEditableTarget (line 1) | function isTextEditableTarget(target: EventTarget | null): boolean { FILE: src/utils/formatters.ts function formatJSON (line 7) | function formatJSON(value: string): string { function parseSmartMcpJson (line 26) | function parseSmartMcpJson(jsonText: string): { FILE: src/utils/postChangeSync.ts function syncCurrentProvidersLiveSafe (line 7) | async function syncCurrentProvidersLiveSafe(): Promise<{ FILE: src/utils/providerConfigUtils.ts type UpdateCommonConfigResult (line 82) | interface UpdateCommonConfigResult { type UpdateTomlCommonConfigResult (line 362) | interface UpdateTomlCommonConfigResult { constant TOML_SECTION_HEADER_PATTERN (line 417) | const TOML_SECTION_HEADER_PATTERN = /^\s*\[([^\]\r\n]+)\]\s*$/; constant TOML_BASE_URL_PATTERN (line 418) | const TOML_BASE_URL_PATTERN = constant TOML_MODEL_PATTERN (line 420) | const TOML_MODEL_PATTERN = /^\s*model\s*=\s*(["'])([^"'\r\n]+)\1\s*(?:#.... constant TOML_MODEL_PROVIDER_LINE_PATTERN (line 421) | const TOML_MODEL_PROVIDER_LINE_PATTERN = constant TOML_MODEL_PROVIDER_PATTERN (line 423) | const TOML_MODEL_PROVIDER_PATTERN = type TomlSectionRange (line 426) | interface TomlSectionRange { type TomlAssignmentMatch (line 431) | interface TomlAssignmentMatch { FILE: src/utils/providerMetaUtils.ts function mergeProviderMeta (line 10) | function mergeProviderMeta( FILE: src/utils/tomlUtils.ts function normalizeServerConfig (line 101) | function normalizeServerConfig(config: any): McpServerSpec { FILE: src/utils/uuid.ts function generateUUID (line 10) | function generateUUID(): string { FILE: tests/components/ProviderList.test.tsx function createProvider (line 100) | function createProvider(overrides: Partial = {}): Provider { function renderWithQueryClient (line 113) | function renderWithQueryClient(ui: ReactElement) { FILE: tests/components/SettingsDialog.test.tsx type SettingsMock (line 40) | interface SettingsMock { type ImportExportMock (line 96) | interface ImportExportMock { FILE: tests/components/WebdavSyncSection.test.tsx function renderSection (line 100) | function renderSection(config?: WebDavSyncSettings) { FILE: tests/hooks/useDragSort.test.tsx type WrapperProps (line 26) | interface WrapperProps { function createWrapper (line 30) | function createWrapper() { FILE: tests/hooks/useProviderActions.test.tsx type WrapperProps (line 81) | interface WrapperProps { function createWrapper (line 85) | function createWrapper() { function createProvider (line 95) | function createProvider(overrides: Partial = {}): Provider { FILE: tests/hooks/useProxyStatus.test.tsx type WrapperProps (line 39) | interface WrapperProps { function createWrapper (line 43) | function createWrapper() { FILE: tests/msw/handlers.ts constant TAURI_ENDPOINT (line 27) | const TAURI_ENDPOINT = "http://tauri.local"; FILE: tests/msw/state.ts type ProvidersByApp (line 10) | type ProvidersByApp = Record>; type CurrentProviderState (line 11) | type CurrentProviderState = Record; type McpConfigState (line 12) | type McpConfigState = Record>; FILE: tests/msw/tauriMocks.ts constant TAURI_ENDPOINT (line 5) | const TAURI_ENDPOINT = "http://tauri.local"; FILE: tests/setupGlobals.ts method observe (line 4) | observe() {} method unobserve (line 5) | unobserve() {} method disconnect (line 6) | disconnect() {} method length (line 29) | get length() {