gitextract_y5v1mptu/ ├── .gitattributes ├── .gitignore ├── .node-version ├── CHANGELOG.md ├── LICENSE ├── README.md ├── README_JA.md ├── README_ZH.md ├── cc-switch-main/ │ └── src/ │ └── config/ │ └── universalProviderPresets.ts ├── components.json ├── deplink.html ├── docs/ │ ├── proxy-guide-zh.md │ ├── release-notes/ │ │ ├── v3.10.0-en.md │ │ ├── v3.10.0-ja.md │ │ ├── v3.10.0-zh.md │ │ ├── v3.11.0-en.md │ │ ├── v3.11.0-ja.md │ │ ├── v3.11.0-zh.md │ │ ├── v3.11.1-en.md │ │ ├── v3.11.1-ja.md │ │ ├── v3.11.1-zh.md │ │ ├── v3.12.0-en.md │ │ ├── v3.12.0-ja.md │ │ ├── v3.12.0-zh.md │ │ ├── v3.12.1-en.md │ │ ├── v3.12.1-ja.md │ │ ├── v3.12.1-zh.md │ │ ├── v3.12.2-en.md │ │ ├── v3.12.2-ja.md │ │ ├── v3.12.2-zh.md │ │ ├── v3.12.3-en.md │ │ ├── v3.12.3-ja.md │ │ ├── v3.12.3-zh.md │ │ ├── v3.6.0-en.md │ │ ├── v3.6.0-zh.md │ │ ├── v3.6.1-en.md │ │ ├── v3.6.1-zh.md │ │ ├── v3.7.0-en.md │ │ ├── v3.7.0-zh.md │ │ ├── v3.7.1-en.md │ │ ├── v3.7.1-zh.md │ │ ├── v3.8.0-en.md │ │ ├── v3.8.0-ja.md │ │ ├── v3.8.0-zh.md │ │ ├── v3.9.0-en.md │ │ ├── v3.9.0-ja.md │ │ └── v3.9.0-zh.md │ └── user-manual/ │ ├── README.md │ ├── en/ │ │ ├── 1-getting-started/ │ │ │ ├── 1.1-introduction.md │ │ │ ├── 1.2-installation.md │ │ │ ├── 1.3-interface.md │ │ │ ├── 1.4-quickstart.md │ │ │ └── 1.5-settings.md │ │ ├── 2-providers/ │ │ │ ├── 2.1-add.md │ │ │ ├── 2.2-switch.md │ │ │ ├── 2.3-edit.md │ │ │ ├── 2.4-sort-duplicate.md │ │ │ └── 2.5-usage-query.md │ │ ├── 3-extensions/ │ │ │ ├── 3.1-mcp.md │ │ │ ├── 3.2-prompts.md │ │ │ └── 3.3-skills.md │ │ ├── 4-proxy/ │ │ │ ├── 4.1-service.md │ │ │ ├── 4.2-takeover.md │ │ │ ├── 4.3-failover.md │ │ │ ├── 4.4-usage.md │ │ │ └── 4.5-model-test.md │ │ ├── 5-faq/ │ │ │ ├── 5.1-config-files.md │ │ │ ├── 5.2-questions.md │ │ │ ├── 5.3-deeplink.md │ │ │ └── 5.4-env-conflict.md │ │ └── README.md │ ├── ja/ │ │ ├── 1-getting-started/ │ │ │ ├── 1.1-introduction.md │ │ │ ├── 1.2-installation.md │ │ │ ├── 1.3-interface.md │ │ │ ├── 1.4-quickstart.md │ │ │ └── 1.5-settings.md │ │ ├── 2-providers/ │ │ │ ├── 2.1-add.md │ │ │ ├── 2.2-switch.md │ │ │ ├── 2.3-edit.md │ │ │ ├── 2.4-sort-duplicate.md │ │ │ └── 2.5-usage-query.md │ │ ├── 3-extensions/ │ │ │ ├── 3.1-mcp.md │ │ │ ├── 3.2-prompts.md │ │ │ └── 3.3-skills.md │ │ ├── 4-proxy/ │ │ │ ├── 4.1-service.md │ │ │ ├── 4.2-takeover.md │ │ │ ├── 4.3-failover.md │ │ │ ├── 4.4-usage.md │ │ │ └── 4.5-model-test.md │ │ ├── 5-faq/ │ │ │ ├── 5.1-config-files.md │ │ │ ├── 5.2-questions.md │ │ │ ├── 5.3-deeplink.md │ │ │ └── 5.4-env-conflict.md │ │ └── README.md │ └── zh/ │ ├── 1-getting-started/ │ │ ├── 1.1-introduction.md │ │ ├── 1.2-installation.md │ │ ├── 1.3-interface.md │ │ ├── 1.4-quickstart.md │ │ └── 1.5-settings.md │ ├── 2-providers/ │ │ ├── 2.1-add.md │ │ ├── 2.2-switch.md │ │ ├── 2.3-edit.md │ │ ├── 2.4-sort-duplicate.md │ │ └── 2.5-usage-query.md │ ├── 3-extensions/ │ │ ├── 3.1-mcp.md │ │ ├── 3.2-prompts.md │ │ └── 3.3-skills.md │ ├── 4-proxy/ │ │ ├── 4.1-service.md │ │ ├── 4.2-takeover.md │ │ ├── 4.3-failover.md │ │ ├── 4.4-usage.md │ │ └── 4.5-model-test.md │ ├── 5-faq/ │ │ ├── 5.1-config-files.md │ │ ├── 5.2-questions.md │ │ ├── 5.3-deeplink.md │ │ └── 5.4-env-conflict.md │ └── README.md ├── flatpak/ │ ├── README.md │ ├── com.ccswitch.desktop.desktop │ ├── com.ccswitch.desktop.metainfo.xml │ └── com.ccswitch.desktop.yml ├── package.json ├── pnpm-workspace.yaml ├── postcss.config.cjs ├── scripts/ │ ├── extract-icons.js │ ├── filter-icons.js │ └── generate-icon-index.js ├── session-manager.md ├── src/ │ ├── App.tsx │ ├── components/ │ │ ├── AppSwitcher.tsx │ │ ├── BrandIcons.tsx │ │ ├── ColorPicker.tsx │ │ ├── ConfirmDialog.tsx │ │ ├── DeepLinkImportDialog.tsx │ │ ├── IconPicker.tsx │ │ ├── JsonEditor.tsx │ │ ├── MarkdownEditor.tsx │ │ ├── ProviderIcon.tsx │ │ ├── UpdateBadge.tsx │ │ ├── UsageFooter.tsx │ │ ├── UsageScriptModal.tsx │ │ ├── agents/ │ │ │ └── AgentsPanel.tsx │ │ ├── common/ │ │ │ ├── AppCountBar.tsx │ │ │ ├── AppToggleGroup.tsx │ │ │ ├── FullScreenPanel.tsx │ │ │ └── ListItemRow.tsx │ │ ├── deeplink/ │ │ │ ├── McpConfirmation.tsx │ │ │ ├── PromptConfirmation.tsx │ │ │ └── SkillConfirmation.tsx │ │ ├── env/ │ │ │ └── EnvWarningBanner.tsx │ │ ├── icons/ │ │ │ └── TerminalIcons.tsx │ │ ├── mcp/ │ │ │ ├── McpFormModal.tsx │ │ │ ├── McpWizardModal.tsx │ │ │ ├── UnifiedMcpPanel.tsx │ │ │ └── useMcpValidation.ts │ │ ├── mode-toggle.tsx │ │ ├── openclaw/ │ │ │ ├── AgentsDefaultsPanel.tsx │ │ │ ├── EnvPanel.tsx │ │ │ ├── OpenClawHealthBanner.tsx │ │ │ ├── ToolsPanel.tsx │ │ │ ├── hooks/ │ │ │ │ └── useOpenClawModelOptions.ts │ │ │ └── utils.ts │ │ ├── prompts/ │ │ │ ├── PromptFormModal.tsx │ │ │ ├── PromptFormPanel.tsx │ │ │ ├── PromptListItem.tsx │ │ │ ├── PromptPanel.tsx │ │ │ └── PromptToggle.tsx │ │ ├── providers/ │ │ │ ├── AddProviderDialog.tsx │ │ │ ├── EditProviderDialog.tsx │ │ │ ├── FailoverPriorityBadge.tsx │ │ │ ├── HealthStatusIndicator.tsx │ │ │ ├── ProviderActions.tsx │ │ │ ├── ProviderCard.tsx │ │ │ ├── ProviderEmptyState.tsx │ │ │ ├── ProviderHealthBadge.tsx │ │ │ ├── ProviderList.tsx │ │ │ └── forms/ │ │ │ ├── ApiKeyInput.tsx │ │ │ ├── BasicFormFields.tsx │ │ │ ├── ClaudeFormFields.tsx │ │ │ ├── CodexCommonConfigModal.tsx │ │ │ ├── CodexConfigEditor.tsx │ │ │ ├── CodexConfigSections.tsx │ │ │ ├── CodexFormFields.tsx │ │ │ ├── CommonConfigEditor.tsx │ │ │ ├── CopilotAuthSection.tsx │ │ │ ├── EndpointSpeedTest.tsx │ │ │ ├── GeminiCommonConfigModal.tsx │ │ │ ├── GeminiConfigEditor.tsx │ │ │ ├── GeminiConfigSections.tsx │ │ │ ├── GeminiFormFields.tsx │ │ │ ├── OmoFormFields.tsx │ │ │ ├── OpenClawFormFields.tsx │ │ │ ├── OpenCodeFormFields.tsx │ │ │ ├── ProviderAdvancedConfig.tsx │ │ │ ├── ProviderForm.tsx │ │ │ ├── ProviderPresetSelector.tsx │ │ │ ├── helpers/ │ │ │ │ └── opencodeFormUtils.ts │ │ │ ├── hooks/ │ │ │ │ ├── index.ts │ │ │ │ ├── useApiKeyLink.ts │ │ │ │ ├── useApiKeyState.ts │ │ │ │ ├── useBaseUrlState.ts │ │ │ │ ├── useCodexCommonConfig.ts │ │ │ │ ├── useCodexConfigState.ts │ │ │ │ ├── useCodexTomlValidation.ts │ │ │ │ ├── useCommonConfigSnippet.ts │ │ │ │ ├── useCopilotAuth.ts │ │ │ │ ├── useCustomEndpoints.ts │ │ │ │ ├── useGeminiCommonConfig.ts │ │ │ │ ├── useGeminiConfigState.ts │ │ │ │ ├── useManagedAuth.ts │ │ │ │ ├── useModelState.ts │ │ │ │ ├── useOmoDraftState.ts │ │ │ │ ├── useOmoModelSource.ts │ │ │ │ ├── useOpenclawFormState.ts │ │ │ │ ├── useOpencodeFormState.ts │ │ │ │ ├── useProviderCategory.ts │ │ │ │ ├── useSpeedTestEndpoints.ts │ │ │ │ └── useTemplateValues.ts │ │ │ └── shared/ │ │ │ ├── ApiKeySection.tsx │ │ │ ├── EndpointField.tsx │ │ │ └── index.ts │ │ ├── proxy/ │ │ │ ├── AutoFailoverConfigPanel.tsx │ │ │ ├── CircuitBreakerConfigPanel.tsx │ │ │ ├── FailoverQueueManager.tsx │ │ │ ├── FailoverToggle.tsx │ │ │ ├── ProxyPanel.tsx │ │ │ ├── ProxyToggle.tsx │ │ │ └── index.ts │ │ ├── sessions/ │ │ │ ├── SessionItem.tsx │ │ │ ├── SessionManagerPage.tsx │ │ │ ├── SessionMessageItem.tsx │ │ │ ├── SessionToc.tsx │ │ │ └── utils.ts │ │ ├── settings/ │ │ │ ├── AboutSection.tsx │ │ │ ├── AppVisibilitySettings.tsx │ │ │ ├── AuthCenterPanel.tsx │ │ │ ├── BackupListSection.tsx │ │ │ ├── DirectorySettings.tsx │ │ │ ├── GlobalProxySettings.tsx │ │ │ ├── ImportExportSection.tsx │ │ │ ├── LanguageSettings.tsx │ │ │ ├── LogConfigPanel.tsx │ │ │ ├── ProxyTabContent.tsx │ │ │ ├── RectifierConfigPanel.tsx │ │ │ ├── SettingsPage.tsx │ │ │ ├── SkillSyncMethodSettings.tsx │ │ │ ├── TerminalSettings.tsx │ │ │ ├── ThemeSettings.tsx │ │ │ ├── WebdavSyncSection.tsx │ │ │ └── WindowSettings.tsx │ │ ├── skills/ │ │ │ ├── RepoManager.tsx │ │ │ ├── RepoManagerPanel.tsx │ │ │ ├── SkillCard.tsx │ │ │ ├── SkillsPage.tsx │ │ │ └── UnifiedSkillsPanel.tsx │ │ ├── theme-provider.tsx │ │ ├── ui/ │ │ │ ├── accordion.tsx │ │ │ ├── alert.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── form.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── popover.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── sonner.tsx │ │ │ ├── switch.tsx │ │ │ ├── table.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toggle-row.tsx │ │ │ └── tooltip.tsx │ │ ├── universal/ │ │ │ ├── UniversalProviderCard.tsx │ │ │ ├── UniversalProviderFormModal.tsx │ │ │ ├── UniversalProviderPanel.tsx │ │ │ └── index.ts │ │ ├── usage/ │ │ │ ├── ModelStatsTable.tsx │ │ │ ├── ModelTestConfigPanel.tsx │ │ │ ├── PricingConfigPanel.tsx │ │ │ ├── PricingEditModal.tsx │ │ │ ├── ProviderStatsTable.tsx │ │ │ ├── RequestDetailPanel.tsx │ │ │ ├── RequestLogTable.tsx │ │ │ ├── UsageDashboard.tsx │ │ │ ├── UsageSummaryCards.tsx │ │ │ ├── UsageTrendChart.tsx │ │ │ └── format.ts │ │ └── workspace/ │ │ ├── DailyMemoryPanel.tsx │ │ ├── WorkspaceFileEditor.tsx │ │ └── WorkspaceFilesPanel.tsx │ ├── config/ │ │ ├── appConfig.tsx │ │ ├── claudeProviderPresets.ts │ │ ├── codexProviderPresets.ts │ │ ├── codexTemplates.ts │ │ ├── constants.ts │ │ ├── geminiProviderPresets.ts │ │ ├── iconInference.ts │ │ ├── mcpPresets.ts │ │ ├── openclawProviderPresets.ts │ │ ├── opencodeProviderPresets.ts │ │ └── universalProviderPresets.ts │ ├── contexts/ │ │ └── UpdateContext.tsx │ ├── hooks/ │ │ ├── useAutoCompact.ts │ │ ├── useBackupManager.ts │ │ ├── useDirectorySettings.ts │ │ ├── useDragSort.ts │ │ ├── useGlobalProxy.ts │ │ ├── useImportExport.ts │ │ ├── useLastValidValue.ts │ │ ├── useMcp.ts │ │ ├── useOpenClaw.ts │ │ ├── usePromptActions.ts │ │ ├── useProviderActions.ts │ │ ├── useProxyConfig.ts │ │ ├── useProxyStatus.ts │ │ ├── useSessionSearch.ts │ │ ├── useSettings.ts │ │ ├── useSettingsForm.ts │ │ ├── useSettingsMetadata.ts │ │ ├── useSkills.ts │ │ └── useStreamCheck.ts │ ├── i18n/ │ │ ├── index.ts │ │ └── locales/ │ │ ├── en.json │ │ ├── ja.json │ │ └── zh.json │ ├── icons/ │ │ └── extracted/ │ │ ├── index.ts │ │ └── metadata.ts │ ├── index.css │ ├── index.html │ ├── lib/ │ │ ├── api/ │ │ │ ├── auth.ts │ │ │ ├── config.ts │ │ │ ├── copilot.ts │ │ │ ├── deeplink.ts │ │ │ ├── env.ts │ │ │ ├── failover.ts │ │ │ ├── globalProxy.ts │ │ │ ├── index.ts │ │ │ ├── mcp.ts │ │ │ ├── model-test.ts │ │ │ ├── omo.ts │ │ │ ├── openclaw.ts │ │ │ ├── prompts.ts │ │ │ ├── providers.ts │ │ │ ├── proxy.ts │ │ │ ├── sessions.ts │ │ │ ├── settings.ts │ │ │ ├── skills.ts │ │ │ ├── types.ts │ │ │ ├── usage.ts │ │ │ ├── vscode.ts │ │ │ └── workspace.ts │ │ ├── authBinding.ts │ │ ├── errors/ │ │ │ └── skillErrorParser.ts │ │ ├── platform.ts │ │ ├── query/ │ │ │ ├── failover.ts │ │ │ ├── index.ts │ │ │ ├── mutations.ts │ │ │ ├── omo.ts │ │ │ ├── proxy.ts │ │ │ ├── queries.ts │ │ │ ├── queryClient.ts │ │ │ └── usage.ts │ │ ├── schemas/ │ │ │ ├── common.ts │ │ │ ├── mcp.ts │ │ │ ├── provider.ts │ │ │ └── settings.ts │ │ ├── updater.ts │ │ ├── utils/ │ │ │ └── base64.ts │ │ └── utils.ts │ ├── main.tsx │ ├── types/ │ │ ├── env.ts │ │ ├── icon.ts │ │ ├── omo.ts │ │ ├── proxy.ts │ │ └── usage.ts │ ├── types.ts │ ├── utils/ │ │ ├── domUtils.ts │ │ ├── errorUtils.ts │ │ ├── formatters.ts │ │ ├── postChangeSync.ts │ │ ├── providerConfigUtils.ts │ │ ├── providerMetaUtils.ts │ │ ├── textNormalization.ts │ │ ├── tomlUtils.ts │ │ └── uuid.ts │ └── vite-env.d.ts ├── src-tauri/ │ ├── .gitignore │ ├── Cargo.toml │ ├── Info.plist │ ├── build.rs │ ├── capabilities/ │ │ └── default.json │ ├── common-controls.manifest │ ├── icons/ │ │ └── icon.icns │ ├── src/ │ │ ├── app_config.rs │ │ ├── app_store.rs │ │ ├── auto_launch.rs │ │ ├── claude_mcp.rs │ │ ├── claude_plugin.rs │ │ ├── codex_config.rs │ │ ├── commands/ │ │ │ ├── auth.rs │ │ │ ├── config.rs │ │ │ ├── copilot.rs │ │ │ ├── deeplink.rs │ │ │ ├── env.rs │ │ │ ├── failover.rs │ │ │ ├── global_proxy.rs │ │ │ ├── import_export.rs │ │ │ ├── mcp.rs │ │ │ ├── misc.rs │ │ │ ├── mod.rs │ │ │ ├── omo.rs │ │ │ ├── openclaw.rs │ │ │ ├── plugin.rs │ │ │ ├── prompt.rs │ │ │ ├── provider.rs │ │ │ ├── proxy.rs │ │ │ ├── session_manager.rs │ │ │ ├── settings.rs │ │ │ ├── skill.rs │ │ │ ├── stream_check.rs │ │ │ ├── sync_support.rs │ │ │ ├── usage.rs │ │ │ ├── webdav_sync.rs │ │ │ └── workspace.rs │ │ ├── config.rs │ │ ├── database/ │ │ │ ├── backup.rs │ │ │ ├── dao/ │ │ │ │ ├── failover.rs │ │ │ │ ├── mcp.rs │ │ │ │ ├── mod.rs │ │ │ │ ├── prompts.rs │ │ │ │ ├── providers.rs │ │ │ │ ├── proxy.rs │ │ │ │ ├── settings.rs │ │ │ │ ├── skills.rs │ │ │ │ ├── stream_check.rs │ │ │ │ ├── universal_providers.rs │ │ │ │ └── usage_rollup.rs │ │ │ ├── migration.rs │ │ │ ├── mod.rs │ │ │ ├── schema.rs │ │ │ └── tests.rs │ │ ├── deeplink/ │ │ │ ├── mcp.rs │ │ │ ├── mod.rs │ │ │ ├── parser.rs │ │ │ ├── prompt.rs │ │ │ ├── provider.rs │ │ │ ├── skill.rs │ │ │ ├── tests.rs │ │ │ └── utils.rs │ │ ├── error.rs │ │ ├── gemini_config.rs │ │ ├── gemini_mcp.rs │ │ ├── init_status.rs │ │ ├── lib.rs │ │ ├── main.rs │ │ ├── mcp/ │ │ │ ├── claude.rs │ │ │ ├── codex.rs │ │ │ ├── gemini.rs │ │ │ ├── mod.rs │ │ │ ├── opencode.rs │ │ │ └── validation.rs │ │ ├── openclaw_config.rs │ │ ├── opencode_config.rs │ │ ├── panic_hook.rs │ │ ├── prompt.rs │ │ ├── prompt_files.rs │ │ ├── provider.rs │ │ ├── provider_defaults.rs │ │ ├── proxy/ │ │ │ ├── body_filter.rs │ │ │ ├── cache_injector.rs │ │ │ ├── circuit_breaker.rs │ │ │ ├── error.rs │ │ │ ├── error_mapper.rs │ │ │ ├── failover_switch.rs │ │ │ ├── forwarder.rs │ │ │ ├── handler_config.rs │ │ │ ├── handler_context.rs │ │ │ ├── handlers.rs │ │ │ ├── health.rs │ │ │ ├── http_client.rs │ │ │ ├── log_codes.rs │ │ │ ├── mod.rs │ │ │ ├── model_mapper.rs │ │ │ ├── provider_router.rs │ │ │ ├── providers/ │ │ │ │ ├── adapter.rs │ │ │ │ ├── auth.rs │ │ │ │ ├── claude.rs │ │ │ │ ├── codex.rs │ │ │ │ ├── copilot_auth.rs │ │ │ │ ├── gemini.rs │ │ │ │ ├── mod.rs │ │ │ │ ├── models/ │ │ │ │ │ ├── anthropic.rs │ │ │ │ │ ├── mod.rs │ │ │ │ │ └── openai.rs │ │ │ │ ├── streaming.rs │ │ │ │ ├── streaming_responses.rs │ │ │ │ ├── transform.rs │ │ │ │ └── transform_responses.rs │ │ │ ├── response_handler.rs │ │ │ ├── response_processor.rs │ │ │ ├── server.rs │ │ │ ├── session.rs │ │ │ ├── thinking_budget_rectifier.rs │ │ │ ├── thinking_optimizer.rs │ │ │ ├── thinking_rectifier.rs │ │ │ ├── types.rs │ │ │ └── usage/ │ │ │ ├── calculator.rs │ │ │ ├── logger.rs │ │ │ ├── mod.rs │ │ │ └── parser.rs │ │ ├── services/ │ │ │ ├── config.rs │ │ │ ├── env_checker.rs │ │ │ ├── env_manager.rs │ │ │ ├── mcp.rs │ │ │ ├── mod.rs │ │ │ ├── omo.rs │ │ │ ├── prompt.rs │ │ │ ├── provider/ │ │ │ │ ├── endpoints.rs │ │ │ │ ├── gemini_auth.rs │ │ │ │ ├── live.rs │ │ │ │ ├── mod.rs │ │ │ │ └── usage.rs │ │ │ ├── proxy.rs │ │ │ ├── skill.rs │ │ │ ├── speedtest.rs │ │ │ ├── stream_check.rs │ │ │ ├── usage_stats.rs │ │ │ ├── webdav.rs │ │ │ ├── webdav_auto_sync.rs │ │ │ ├── webdav_sync/ │ │ │ │ └── archive.rs │ │ │ └── webdav_sync.rs │ │ ├── session_manager/ │ │ │ ├── mod.rs │ │ │ ├── providers/ │ │ │ │ ├── claude.rs │ │ │ │ ├── codex.rs │ │ │ │ ├── gemini.rs │ │ │ │ ├── mod.rs │ │ │ │ ├── openclaw.rs │ │ │ │ ├── opencode.rs │ │ │ │ └── utils.rs │ │ │ └── terminal/ │ │ │ └── mod.rs │ │ ├── settings.rs │ │ ├── store.rs │ │ ├── tray.rs │ │ └── usage_script.rs │ ├── tauri.conf.json │ ├── tauri.windows.conf.json │ ├── tests/ │ │ ├── app_config_load.rs │ │ ├── app_type_parse.rs │ │ ├── deeplink_import.rs │ │ ├── import_export_sync.rs │ │ ├── mcp_commands.rs │ │ ├── provider_commands.rs │ │ ├── provider_service.rs │ │ ├── proxy_commands.rs │ │ ├── skill_sync.rs │ │ └── support.rs │ └── wix/ │ └── per-user-main.wxs ├── tailwind.config.cjs ├── tests/ │ ├── components/ │ │ ├── AddProviderDialog.test.tsx │ │ ├── CommonConfigModalBehavior.test.tsx │ │ ├── GlobalProxySettings.test.tsx │ │ ├── ImportExportSection.test.tsx │ │ ├── McpFormModal.test.tsx │ │ ├── OmoFormFields.mergeCustomModelsIntoStore.test.ts │ │ ├── ProviderList.test.tsx │ │ ├── SessionManagerPage.test.tsx │ │ ├── SettingsDialog.test.tsx │ │ ├── UnifiedSkillsPanel.test.tsx │ │ ├── WebdavSyncSection.test.tsx │ │ └── openclaw.utils.test.ts │ ├── config/ │ │ ├── claudeProviderPresets.test.ts │ │ └── opencodeProviderPresets.test.ts │ ├── hooks/ │ │ ├── useCommonConfigSave.test.tsx │ │ ├── useDirectorySettings.test.tsx │ │ ├── useDragSort.test.tsx │ │ ├── useImportExport.extra.test.tsx │ │ ├── useImportExport.test.tsx │ │ ├── useMcpValidation.test.tsx │ │ ├── useProviderActions.test.tsx │ │ ├── useProxyStatus.test.tsx │ │ ├── useSettings.test.tsx │ │ ├── useSettingsForm.test.tsx │ │ └── useSettingsMetadata.test.tsx │ ├── integration/ │ │ ├── App.test.tsx │ │ └── SettingsDialog.test.tsx │ ├── msw/ │ │ ├── handlers.ts │ │ ├── server.ts │ │ ├── state.ts │ │ └── tauriMocks.ts │ ├── setupGlobals.ts │ ├── setupTests.ts │ └── utils/ │ ├── omoConfig.test.ts │ ├── providerConfigUtils.codex.test.ts │ ├── providerMetaUtils.test.ts │ └── testQueryClient.ts ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── vitest.config.ts