From d2553978c46cc2fe58afbb39bff71567e428e20e Mon Sep 17 00:00:00 2001 From: Lifei Zhou Date: Thu, 26 Mar 2026 11:34:22 +1100 Subject: [PATCH] Lifei/clean up old onboarding flow (#8099) --- crates/goose-server/src/openapi.rs | 3 - .../src/routes/config_management.rs | 37 -- crates/goose/src/providers/auto_detect.rs | 61 -- crates/goose/src/providers/mod.rs | 1 - ui/desktop/openapi.json | 62 -- ui/desktop/src/App.test.tsx | 17 - ui/desktop/src/App.tsx | 33 +- ui/desktop/src/api/index.ts | 4 +- ui/desktop/src/api/sdk.gen.ts | 11 +- ui/desktop/src/api/types.gen.ts | 32 - ui/desktop/src/components/ApiKeyTester.tsx | 182 ------ ui/desktop/src/components/LocalModelSetup.tsx | 40 -- ui/desktop/src/components/ProviderGuard.tsx | 582 ------------------ ui/desktop/src/components/SetupModal.tsx | 62 -- .../src/components/WelcomeGooseLogo.tsx | 14 - .../reset_provider/ResetProviderSection.tsx | 1 - ui/desktop/src/featureFlags.ts | 1 - ui/desktop/src/utils/analytics.ts | 12 - ui/desktop/src/utils/chatgptCodexSetup.ts | 16 - ui/desktop/src/utils/openRouterSetup.ts | 17 - 20 files changed, 10 insertions(+), 1178 deletions(-) delete mode 100644 crates/goose/src/providers/auto_detect.rs delete mode 100644 ui/desktop/src/components/ApiKeyTester.tsx delete mode 100644 ui/desktop/src/components/LocalModelSetup.tsx delete mode 100644 ui/desktop/src/components/ProviderGuard.tsx delete mode 100644 ui/desktop/src/components/SetupModal.tsx delete mode 100644 ui/desktop/src/components/WelcomeGooseLogo.tsx delete mode 100644 ui/desktop/src/featureFlags.ts delete mode 100644 ui/desktop/src/utils/chatgptCodexSetup.ts delete mode 100644 ui/desktop/src/utils/openRouterSetup.ts diff --git a/crates/goose-server/src/openapi.rs b/crates/goose-server/src/openapi.rs index 6eaaa1bc61..288aa9cbb1 100644 --- a/crates/goose-server/src/openapi.rs +++ b/crates/goose-server/src/openapi.rs @@ -387,7 +387,6 @@ derive_utoipa!(Icon as IconSchema); super::routes::status::diagnostics, super::routes::mcp_ui_proxy::mcp_ui_proxy, super::routes::config_management::backup_config, - super::routes::config_management::detect_provider, super::routes::config_management::recover_config, super::routes::config_management::validate_config, super::routes::config_management::init_config, @@ -484,8 +483,6 @@ derive_utoipa!(Icon as IconSchema); components(schemas( super::routes::config_management::UpsertConfigQuery, super::routes::config_management::ConfigKeyQuery, - super::routes::config_management::DetectProviderRequest, - super::routes::config_management::DetectProviderResponse, super::routes::config_management::ConfigResponse, super::routes::config_management::ProvidersResponse, super::routes::config_management::ProviderDetails, diff --git a/crates/goose-server/src/routes/config_management.rs b/crates/goose-server/src/routes/config_management.rs index 2c4c749077..ba57c88f8f 100644 --- a/crates/goose-server/src/routes/config_management.rs +++ b/crates/goose-server/src/routes/config_management.rs @@ -12,7 +12,6 @@ use goose::config::paths::Paths; use goose::config::ExtensionEntry; use goose::config::{Config, ConfigError}; use goose::model::ModelConfig; -use goose::providers::auto_detect::detect_provider_from_api_key; use goose::providers::base::{ProviderMetadata, ProviderType}; use goose::providers::canonical::maybe_get_canonical_model; use goose::providers::catalog::{ @@ -149,16 +148,6 @@ pub struct SlashCommandsResponse { pub commands: Vec, } -#[derive(Deserialize, ToSchema)] -pub struct DetectProviderRequest { - pub api_key: String, -} - -#[derive(Serialize, ToSchema)] -pub struct DetectProviderResponse { - pub provider_name: String, - pub models: Vec, -} #[utoipa::path( post, path = "/config/upsert", @@ -534,31 +523,6 @@ pub async fn upsert_permissions( Ok(Json("Permissions updated successfully".to_string())) } -#[utoipa::path( - post, - path = "/config/detect-provider", - request_body = DetectProviderRequest, - responses( - (status = 200, description = "Provider detected successfully", body = DetectProviderResponse), - (status = 404, description = "No matching provider found"), - ) -)] -pub async fn detect_provider( - Json(detect_request): Json, -) -> Result, ErrorResponse> { - let api_key = detect_request.api_key.trim(); - - match detect_provider_from_api_key(api_key).await { - Some((provider_name, models)) => Ok(Json(DetectProviderResponse { - provider_name, - models, - })), - None => Err(ErrorResponse::not_found( - "Could not detect provider from the provided API key", - )), - } -} - #[utoipa::path( post, path = "/config/backup", @@ -930,7 +894,6 @@ pub fn routes(state: Arc) -> Router { "/config/providers/{name}/cleanup", post(cleanup_provider_cache), ) - .route("/config/detect-provider", post(detect_provider)) .route("/config/slash_commands", get(get_slash_commands)) .route( "/config/canonical-model-info", diff --git a/crates/goose/src/providers/auto_detect.rs b/crates/goose/src/providers/auto_detect.rs deleted file mode 100644 index fff59bafde..0000000000 --- a/crates/goose/src/providers/auto_detect.rs +++ /dev/null @@ -1,61 +0,0 @@ -use crate::model::ModelConfig; -use crate::providers::retry::{retry_operation, RetryConfig}; - -pub async fn detect_provider_from_api_key(api_key: &str) -> Option<(String, Vec)> { - let provider_tests = vec![ - ("anthropic", "ANTHROPIC_API_KEY"), - ("openai", "OPENAI_API_KEY"), - ("google", "GOOGLE_API_KEY"), - ("groq", "GROQ_API_KEY"), - ("xai", "XAI_API_KEY"), - // Ollama and OpenRouter don't validate keys, so they would match any input - ]; - - let tasks: Vec<_> = provider_tests - .into_iter() - .map(|(provider_name, env_key)| { - let api_key = api_key.to_string(); - tokio::spawn(async move { - let original_value = std::env::var(env_key).ok(); - std::env::set_var(env_key, &api_key); - - let result = match crate::providers::create( - provider_name, - ModelConfig::new_or_fail("default").with_canonical_limits(provider_name), - Vec::new(), - ) - .await - { - Ok(provider) => { - match retry_operation(&RetryConfig::default(), || async { - provider.fetch_supported_models().await - }) - .await - { - Ok(models) if !models.is_empty() => { - Some((provider_name.to_string(), models)) - } - _ => None, - } - } - Err(_) => None, - }; - - match original_value { - Some(val) => std::env::set_var(env_key, val), - None => std::env::remove_var(env_key), - } - - result - }) - }) - .collect(); - - for task in tasks { - if let Ok(Some(result)) = task.await { - return Some(result); - } - } - - None -} diff --git a/crates/goose/src/providers/mod.rs b/crates/goose/src/providers/mod.rs index 3cb824e6dd..52fed00e65 100644 --- a/crates/goose/src/providers/mod.rs +++ b/crates/goose/src/providers/mod.rs @@ -1,6 +1,5 @@ pub mod anthropic; pub mod api_client; -pub mod auto_detect; pub mod avian; pub mod azure; pub mod azureauth; diff --git a/ui/desktop/openapi.json b/ui/desktop/openapi.json index 1297cd5684..af47a77def 100644 --- a/ui/desktop/openapi.json +++ b/ui/desktop/openapi.json @@ -969,39 +969,6 @@ } } }, - "/config/detect-provider": { - "post": { - "tags": [ - "super::routes::config_management" - ], - "operationId": "detect_provider", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DetectProviderRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Provider detected successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DetectProviderResponse" - } - } - } - }, - "404": { - "description": "No matching provider found" - } - } - } - }, "/config/extensions": { "get": { "tags": [ @@ -4701,35 +4668,6 @@ } } }, - "DetectProviderRequest": { - "type": "object", - "required": [ - "api_key" - ], - "properties": { - "api_key": { - "type": "string" - } - } - }, - "DetectProviderResponse": { - "type": "object", - "required": [ - "provider_name", - "models" - ], - "properties": { - "models": { - "type": "array", - "items": { - "type": "string" - } - }, - "provider_name": { - "type": "string" - } - } - }, "DictationProvider": { "type": "string", "enum": [ diff --git a/ui/desktop/src/App.test.tsx b/ui/desktop/src/App.test.tsx index 09a9408365..073dd54912 100644 --- a/ui/desktop/src/App.test.tsx +++ b/ui/desktop/src/App.test.tsx @@ -61,10 +61,6 @@ vi.mock('./sessions', () => ({ generateSessionId: vi.fn(), })); -vi.mock('./utils/openRouterSetup', () => ({ - startOpenRouterSetup: vi.fn().mockResolvedValue({ success: false, message: 'Test' }), -})); - // Mock the ConfigContext module vi.mock('./components/ConfigContext', () => ({ useConfig: () => ({ @@ -83,19 +79,6 @@ vi.mock('./components/ErrorBoundary', () => ({ ErrorUI: ({ error }: { error: Error }) =>
Error: {error.message}
, })); -// Mock ProviderGuard to show the welcome screen when no provider is configured -vi.mock('./components/ProviderGuard', () => ({ - default: ({ children }: { children: React.ReactNode }) => { - // In a real app, ProviderGuard would check for provider and show welcome screen - // For this test, we'll simulate that behavior - const hasProvider = window.electron?.getConfig()?.GOOSE_DEFAULT_PROVIDER; - if (!hasProvider) { - return
Welcome to Goose!
; - } - return <>{children}; - }, -})); - vi.mock('./components/ModelAndProviderContext', () => ({ ModelAndProviderProvider: ({ children }: { children: React.ReactNode }) => <>{children}, useModelAndProvider: () => ({ diff --git a/ui/desktop/src/App.tsx b/ui/desktop/src/App.tsx index 15f6141858..bc9702d56c 100644 --- a/ui/desktop/src/App.tsx +++ b/ui/desktop/src/App.tsx @@ -15,9 +15,7 @@ import { ExtensionInstallModal } from './components/ExtensionInstallModal'; import { ToastContainer } from 'react-toastify'; import AnnouncementModal from './components/AnnouncementModal'; import TelemetryOptOutModal from './components/TelemetryOptOutModal'; -import ProviderGuard from './components/ProviderGuard'; import OnboardingGuard from './components/onboarding/OnboardingGuard'; -import { USE_NEW_ONBOARDING } from './featureFlags'; import { createSession } from './sessions'; import { ChatType } from './types/chat'; @@ -249,11 +247,7 @@ const ConfigureProvidersRoute = () => { ); }; -interface WelcomeRouteProps { - onSelectProvider: () => void; -} - -const WelcomeRoute = ({ onSelectProvider }: WelcomeRouteProps) => { +const WelcomeRoute = () => { const navigate = useNavigate(); return ( @@ -265,7 +259,6 @@ const WelcomeRoute = ({ onSelectProvider }: WelcomeRouteProps) => { isOnboarding={true} onProviderLaunched={(model?: string) => { trackOnboardingCompleted('other', model); - onSelectProvider(); navigate('/', { replace: true }); }} /> @@ -351,7 +344,6 @@ export function AppInner() { const [fatalError, setFatalError] = useState(null); const [isLoadingSharedSession, setIsLoadingSharedSession] = useState(false); const [sharedSessionError, setSharedSessionError] = useState(null); - const [didSelectProvider, setDidSelectProvider] = useState(false); const navigate = useNavigate(); const setView = useNavigation(); @@ -650,28 +642,17 @@ export function AppInner() {
} /> - setDidSelectProvider(true)} />} - /> + } /> } /> } /> - - - - - ) : ( - - - - - - ) + + + + + } > } /> diff --git a/ui/desktop/src/api/index.ts b/ui/desktop/src/api/index.ts index 05482b7a42..a79ba63877 100644 --- a/ui/desktop/src/api/index.ts +++ b/ui/desktop/src/api/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts -export { addExtension, agentAddExtension, agentRemoveExtension, backupConfig, callTool, cancelDownload, cancelLocalModelDownload, checkProvider, cleanupProviderCache, configureProviderOauth, confirmToolAction, createCustomProvider, createRecipe, createSchedule, decodeRecipe, deleteLocalModel, deleteModel, deleteRecipe, deleteSchedule, deleteSession, detectProvider, diagnostics, downloadHfModel, downloadModel, encodeRecipe, exportApp, exportSession, forkSession, getCanonicalModelInfo, getCustomProvider, getDictationConfig, getDownloadProgress, getExtensions, getFeatures, getLocalModelDownloadProgress, getModelSettings, getPrompt, getPrompts, getProviderCatalog, getProviderCatalogTemplate, getProviderModels, getRepoFiles, getSession, getSessionExtensions, getSessionInsights, getSlashCommands, getTools, getTunnelStatus, importApp, importSession, initConfig, inspectRunningJob, killRunningJob, listApps, listLocalModels, listModels, listRecipes, listSchedules, listSessions, mcpUiProxy, type Options, parseRecipe, pauseSchedule, providers, readAllConfig, readConfig, readResource, recipeToYaml, recoverConfig, removeConfig, removeCustomProvider, removeExtension, reply, resetPrompt, restartAgent, resumeAgent, runNowHandler, savePrompt, saveRecipe, scanRecipe, scheduleRecipe, searchHfModels, searchSessions, sendTelemetryEvent, sessionCancel, sessionEvents, sessionReply, sessionsHandler, setConfigProvider, setRecipeSlashCommand, startAgent, startNanogptSetup, startOpenrouterSetup, startTetrateSetup, startTunnel, status, stopAgent, stopTunnel, systemInfo, transcribeDictation, unpauseSchedule, updateAgentProvider, updateCustomProvider, updateFromSession, updateModelSettings, updateSchedule, updateSession, updateSessionName, updateSessionUserRecipeValues, updateWorkingDir, upsertConfig, upsertPermissions, validateConfig } from './sdk.gen'; -export type { ActionRequired, ActionRequiredData, AddExtensionData, AddExtensionErrors, AddExtensionRequest, AddExtensionResponse, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponse, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponse, AgentRemoveExtensionResponses, Annotations, Author, AuthorRequest, BackupConfigData, BackupConfigErrors, BackupConfigResponse, BackupConfigResponses, CallToolData, CallToolErrors, CallToolRequest, CallToolResponse, CallToolResponse2, CallToolResponses, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, CancelLocalModelDownloadData, CancelLocalModelDownloadErrors, CancelLocalModelDownloadResponses, CancelRequest, ChatRequest, CheckProviderData, CheckProviderRequest, CleanupProviderCacheData, CleanupProviderCacheErrors, CleanupProviderCacheResponse, CleanupProviderCacheResponses, ClientOptions, CommandType, ConfigKey, ConfigKeyQuery, ConfigResponse, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionRequest, ConfirmToolActionResponses, Content, ContentBlock, Conversation, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponse, CreateCustomProviderResponse2, CreateCustomProviderResponses, CreateRecipeData, CreateRecipeErrors, CreateRecipeRequest, CreateRecipeResponse, CreateRecipeResponse2, CreateRecipeResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleRequest, CreateScheduleResponse, CreateScheduleResponses, CspMetadata, DeclarativeProviderConfig, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeRequest, DecodeRecipeResponse, DecodeRecipeResponse2, DecodeRecipeResponses, DeleteLocalModelData, DeleteLocalModelErrors, DeleteLocalModelResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeRequest, DeleteRecipeResponse, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponse, DeleteScheduleResponses, DeleteSessionData, DeleteSessionErrors, DeleteSessionResponses, DetectProviderData, DetectProviderErrors, DetectProviderRequest, DetectProviderResponse, DetectProviderResponse2, DetectProviderResponses, DiagnosticsData, DiagnosticsErrors, DiagnosticsResponse, DiagnosticsResponses, DictationProvider, DictationProviderStatus, DownloadHfModelData, DownloadHfModelErrors, DownloadHfModelResponse, DownloadHfModelResponses, DownloadModelData, DownloadModelErrors, DownloadModelRequest, DownloadModelResponses, DownloadProgress, DownloadStatus, EmbeddedResource, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeRequest, EncodeRecipeResponse, EncodeRecipeResponse2, EncodeRecipeResponses, Envs, EnvVarConfig, ErrorResponse, ExportAppData, ExportAppError, ExportAppErrors, ExportAppResponse, ExportAppResponses, ExportSessionData, ExportSessionErrors, ExportSessionResponse, ExportSessionResponses, ExtensionConfig, ExtensionData, ExtensionEntry, ExtensionLoadResult, ExtensionQuery, ExtensionResponse, FeaturesResponse, ForkRequest, ForkResponse, ForkSessionData, ForkSessionErrors, ForkSessionResponse, ForkSessionResponses, FrontendToolRequest, GetCanonicalModelInfoData, GetCanonicalModelInfoResponse, GetCanonicalModelInfoResponses, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponse, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponse, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponse, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponse, GetExtensionsResponses, GetFeaturesData, GetFeaturesResponse, GetFeaturesResponses, GetLocalModelDownloadProgressData, GetLocalModelDownloadProgressErrors, GetLocalModelDownloadProgressResponse, GetLocalModelDownloadProgressResponses, GetModelSettingsData, GetModelSettingsErrors, GetModelSettingsResponse, GetModelSettingsResponses, GetPromptData, GetPromptErrors, GetPromptResponse, GetPromptResponses, GetPromptsData, GetPromptsResponse, GetPromptsResponses, GetProviderCatalogData, GetProviderCatalogErrors, GetProviderCatalogResponse, GetProviderCatalogResponses, GetProviderCatalogTemplateData, GetProviderCatalogTemplateErrors, GetProviderCatalogTemplateResponse, GetProviderCatalogTemplateResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponse, GetProviderModelsResponses, GetRepoFilesData, GetRepoFilesResponse, GetRepoFilesResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponse, GetSessionExtensionsResponses, GetSessionInsightsData, GetSessionInsightsErrors, GetSessionInsightsResponse, GetSessionInsightsResponses, GetSessionResponse, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponse, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsQuery, GetToolsResponse, GetToolsResponses, GetTunnelStatusData, GetTunnelStatusResponse, GetTunnelStatusResponses, GooseApp, GooseMode, HfGgufFile, HfModelInfo, HfQuantVariant, Icon, ImageContent, ImportAppData, ImportAppError, ImportAppErrors, ImportAppRequest, ImportAppResponse, ImportAppResponse2, ImportAppResponses, ImportSessionData, ImportSessionErrors, ImportSessionRequest, ImportSessionResponse, ImportSessionResponses, InitConfigData, InitConfigErrors, InitConfigResponse, InitConfigResponses, InspectJobResponse, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponse, InspectRunningJobResponses, JsonObject, KillJobResponse, KillRunningJobData, KillRunningJobResponses, ListAppsData, ListAppsError, ListAppsErrors, ListAppsRequest, ListAppsResponse, ListAppsResponse2, ListAppsResponses, ListLocalModelsData, ListLocalModelsResponse, ListLocalModelsResponses, ListModelsData, ListModelsResponse, ListModelsResponses, ListRecipeResponse, ListRecipesData, ListRecipesErrors, ListRecipesResponse, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponse, ListSchedulesResponse2, ListSchedulesResponses, ListSessionsData, ListSessionsErrors, ListSessionsResponse, ListSessionsResponses, LoadedProvider, LocalModelResponse, McpAppResource, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, Message, MessageContent, MessageEvent, MessageMetadata, ModelCapabilities, ModelConfig, ModelDownloadStatus, ModelInfo, ModelInfoData, ModelInfoQuery, ModelInfoResponse, ModelSettings, ModelTemplate, ParseRecipeData, ParseRecipeError, ParseRecipeErrors, ParseRecipeRequest, ParseRecipeResponse, ParseRecipeResponse2, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponse, PauseScheduleResponses, Permission, PermissionLevel, PermissionsMetadata, PrincipalType, PromptContentResponse, PromptsListResponse, ProviderCatalogEntry, ProviderDetails, ProviderEngine, ProviderMetadata, ProvidersData, ProvidersResponse, ProvidersResponse2, ProvidersResponses, ProviderTemplate, ProviderType, RawAudioContent, RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ReadAllConfigData, ReadAllConfigResponse, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, ReadResourceData, ReadResourceErrors, ReadResourceRequest, ReadResourceResponse, ReadResourceResponse2, ReadResourceResponses, Recipe, RecipeManifest, RecipeParameter, RecipeParameterInputType, RecipeParameterRequirement, RecipeToYamlData, RecipeToYamlError, RecipeToYamlErrors, RecipeToYamlRequest, RecipeToYamlResponse, RecipeToYamlResponse2, RecipeToYamlResponses, RecoverConfigData, RecoverConfigErrors, RecoverConfigResponse, RecoverConfigResponses, RedactedThinkingContent, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponse, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponse, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionRequest, RemoveExtensionResponse, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponse, ReplyResponses, RepoVariantsResponse, ResetPromptData, ResetPromptErrors, ResetPromptResponse, ResetPromptResponses, ResourceContents, ResourceMetadata, Response, RestartAgentData, RestartAgentErrors, RestartAgentRequest, RestartAgentResponse, RestartAgentResponse2, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentRequest, ResumeAgentResponse, ResumeAgentResponse2, ResumeAgentResponses, RetryConfig, Role, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponse, RunNowHandlerResponses, RunNowResponse, SamplingConfig, SavePromptData, SavePromptErrors, SavePromptRequest, SavePromptResponse, SavePromptResponses, SaveRecipeData, SaveRecipeError, SaveRecipeErrors, SaveRecipeRequest, SaveRecipeResponse, SaveRecipeResponse2, SaveRecipeResponses, ScanRecipeData, ScanRecipeRequest, ScanRecipeResponse, ScanRecipeResponse2, ScanRecipeResponses, ScheduledJob, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeRequest, ScheduleRecipeResponses, SearchHfModelsData, SearchHfModelsErrors, SearchHfModelsResponse, SearchHfModelsResponses, SearchSessionsData, SearchSessionsErrors, SearchSessionsResponse, SearchSessionsResponses, SendTelemetryEventData, SendTelemetryEventResponses, Session, SessionCancelData, SessionCancelResponses, SessionDisplayInfo, SessionEventsData, SessionEventsErrors, SessionEventsResponse, SessionEventsResponses, SessionExtensionsResponse, SessionInsights, SessionListResponse, SessionReplyData, SessionReplyErrors, SessionReplyRequest, SessionReplyResponse, SessionReplyResponse2, SessionReplyResponses, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponse, SessionsHandlerResponses, SessionsQuery, SessionType, SetConfigProviderData, SetProviderRequest, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, SetSlashCommandRequest, Settings, SetupResponse, SlashCommand, SlashCommandsResponse, StartAgentData, StartAgentError, StartAgentErrors, StartAgentRequest, StartAgentResponse, StartAgentResponses, StartNanogptSetupData, StartNanogptSetupResponse, StartNanogptSetupResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponse, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponse, StartTetrateSetupResponses, StartTunnelData, StartTunnelError, StartTunnelErrors, StartTunnelResponse, StartTunnelResponses, StatusData, StatusResponse, StatusResponses, StopAgentData, StopAgentErrors, StopAgentRequest, StopAgentResponse, StopAgentResponses, StopTunnelData, StopTunnelError, StopTunnelErrors, StopTunnelResponses, SubRecipe, SuccessCheck, SystemInfo, SystemInfoData, SystemInfoResponse, SystemInfoResponses, SystemNotificationContent, SystemNotificationType, TaskSupport, TelemetryEventRequest, Template, TextContent, ThinkingContent, TokenState, Tool, ToolAnnotations, ToolConfirmationRequest, ToolExecution, ToolInfo, ToolPermission, ToolRequest, ToolResponse, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponse, TranscribeDictationResponses, TranscribeRequest, TranscribeResponse, TunnelInfo, TunnelState, UiMetadata, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponse, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderRequest, UpdateCustomProviderResponse, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionRequest, UpdateFromSessionResponses, UpdateModelSettingsData, UpdateModelSettingsErrors, UpdateModelSettingsResponse, UpdateModelSettingsResponses, UpdateProviderRequest, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleRequest, UpdateScheduleResponse, UpdateScheduleResponses, UpdateSessionData, UpdateSessionErrors, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameRequest, UpdateSessionNameResponses, UpdateSessionRequest, UpdateSessionResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesError, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesRequest, UpdateSessionUserRecipeValuesResponse, UpdateSessionUserRecipeValuesResponse2, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirRequest, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigQuery, UpsertConfigResponse, UpsertConfigResponses, UpsertPermissionsData, UpsertPermissionsErrors, UpsertPermissionsQuery, UpsertPermissionsResponse, UpsertPermissionsResponses, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponse, ValidateConfigResponses, WhisperModelResponse, WindowProps } from './types.gen'; +export { addExtension, agentAddExtension, agentRemoveExtension, backupConfig, callTool, cancelDownload, cancelLocalModelDownload, checkProvider, cleanupProviderCache, configureProviderOauth, confirmToolAction, createCustomProvider, createRecipe, createSchedule, decodeRecipe, deleteLocalModel, deleteModel, deleteRecipe, deleteSchedule, deleteSession, diagnostics, downloadHfModel, downloadModel, encodeRecipe, exportApp, exportSession, forkSession, getCanonicalModelInfo, getCustomProvider, getDictationConfig, getDownloadProgress, getExtensions, getFeatures, getLocalModelDownloadProgress, getModelSettings, getPrompt, getPrompts, getProviderCatalog, getProviderCatalogTemplate, getProviderModels, getRepoFiles, getSession, getSessionExtensions, getSessionInsights, getSlashCommands, getTools, getTunnelStatus, importApp, importSession, initConfig, inspectRunningJob, killRunningJob, listApps, listLocalModels, listModels, listRecipes, listSchedules, listSessions, mcpUiProxy, type Options, parseRecipe, pauseSchedule, providers, readAllConfig, readConfig, readResource, recipeToYaml, recoverConfig, removeConfig, removeCustomProvider, removeExtension, reply, resetPrompt, restartAgent, resumeAgent, runNowHandler, savePrompt, saveRecipe, scanRecipe, scheduleRecipe, searchHfModels, searchSessions, sendTelemetryEvent, sessionCancel, sessionEvents, sessionReply, sessionsHandler, setConfigProvider, setRecipeSlashCommand, startAgent, startNanogptSetup, startOpenrouterSetup, startTetrateSetup, startTunnel, status, stopAgent, stopTunnel, systemInfo, transcribeDictation, unpauseSchedule, updateAgentProvider, updateCustomProvider, updateFromSession, updateModelSettings, updateSchedule, updateSession, updateSessionName, updateSessionUserRecipeValues, updateWorkingDir, upsertConfig, upsertPermissions, validateConfig } from './sdk.gen'; +export type { ActionRequired, ActionRequiredData, AddExtensionData, AddExtensionErrors, AddExtensionRequest, AddExtensionResponse, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponse, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponse, AgentRemoveExtensionResponses, Annotations, Author, AuthorRequest, BackupConfigData, BackupConfigErrors, BackupConfigResponse, BackupConfigResponses, CallToolData, CallToolErrors, CallToolRequest, CallToolResponse, CallToolResponse2, CallToolResponses, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, CancelLocalModelDownloadData, CancelLocalModelDownloadErrors, CancelLocalModelDownloadResponses, CancelRequest, ChatRequest, CheckProviderData, CheckProviderRequest, CleanupProviderCacheData, CleanupProviderCacheErrors, CleanupProviderCacheResponse, CleanupProviderCacheResponses, ClientOptions, CommandType, ConfigKey, ConfigKeyQuery, ConfigResponse, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionRequest, ConfirmToolActionResponses, Content, ContentBlock, Conversation, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponse, CreateCustomProviderResponse2, CreateCustomProviderResponses, CreateRecipeData, CreateRecipeErrors, CreateRecipeRequest, CreateRecipeResponse, CreateRecipeResponse2, CreateRecipeResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleRequest, CreateScheduleResponse, CreateScheduleResponses, CspMetadata, DeclarativeProviderConfig, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeRequest, DecodeRecipeResponse, DecodeRecipeResponse2, DecodeRecipeResponses, DeleteLocalModelData, DeleteLocalModelErrors, DeleteLocalModelResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeRequest, DeleteRecipeResponse, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponse, DeleteScheduleResponses, DeleteSessionData, DeleteSessionErrors, DeleteSessionResponses, DiagnosticsData, DiagnosticsErrors, DiagnosticsResponse, DiagnosticsResponses, DictationProvider, DictationProviderStatus, DownloadHfModelData, DownloadHfModelErrors, DownloadHfModelResponse, DownloadHfModelResponses, DownloadModelData, DownloadModelErrors, DownloadModelRequest, DownloadModelResponses, DownloadProgress, DownloadStatus, EmbeddedResource, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeRequest, EncodeRecipeResponse, EncodeRecipeResponse2, EncodeRecipeResponses, Envs, EnvVarConfig, ErrorResponse, ExportAppData, ExportAppError, ExportAppErrors, ExportAppResponse, ExportAppResponses, ExportSessionData, ExportSessionErrors, ExportSessionResponse, ExportSessionResponses, ExtensionConfig, ExtensionData, ExtensionEntry, ExtensionLoadResult, ExtensionQuery, ExtensionResponse, FeaturesResponse, ForkRequest, ForkResponse, ForkSessionData, ForkSessionErrors, ForkSessionResponse, ForkSessionResponses, FrontendToolRequest, GetCanonicalModelInfoData, GetCanonicalModelInfoResponse, GetCanonicalModelInfoResponses, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponse, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponse, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponse, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponse, GetExtensionsResponses, GetFeaturesData, GetFeaturesResponse, GetFeaturesResponses, GetLocalModelDownloadProgressData, GetLocalModelDownloadProgressErrors, GetLocalModelDownloadProgressResponse, GetLocalModelDownloadProgressResponses, GetModelSettingsData, GetModelSettingsErrors, GetModelSettingsResponse, GetModelSettingsResponses, GetPromptData, GetPromptErrors, GetPromptResponse, GetPromptResponses, GetPromptsData, GetPromptsResponse, GetPromptsResponses, GetProviderCatalogData, GetProviderCatalogErrors, GetProviderCatalogResponse, GetProviderCatalogResponses, GetProviderCatalogTemplateData, GetProviderCatalogTemplateErrors, GetProviderCatalogTemplateResponse, GetProviderCatalogTemplateResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponse, GetProviderModelsResponses, GetRepoFilesData, GetRepoFilesResponse, GetRepoFilesResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponse, GetSessionExtensionsResponses, GetSessionInsightsData, GetSessionInsightsErrors, GetSessionInsightsResponse, GetSessionInsightsResponses, GetSessionResponse, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponse, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsQuery, GetToolsResponse, GetToolsResponses, GetTunnelStatusData, GetTunnelStatusResponse, GetTunnelStatusResponses, GooseApp, GooseMode, HfGgufFile, HfModelInfo, HfQuantVariant, Icon, ImageContent, ImportAppData, ImportAppError, ImportAppErrors, ImportAppRequest, ImportAppResponse, ImportAppResponse2, ImportAppResponses, ImportSessionData, ImportSessionErrors, ImportSessionRequest, ImportSessionResponse, ImportSessionResponses, InitConfigData, InitConfigErrors, InitConfigResponse, InitConfigResponses, InspectJobResponse, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponse, InspectRunningJobResponses, JsonObject, KillJobResponse, KillRunningJobData, KillRunningJobResponses, ListAppsData, ListAppsError, ListAppsErrors, ListAppsRequest, ListAppsResponse, ListAppsResponse2, ListAppsResponses, ListLocalModelsData, ListLocalModelsResponse, ListLocalModelsResponses, ListModelsData, ListModelsResponse, ListModelsResponses, ListRecipeResponse, ListRecipesData, ListRecipesErrors, ListRecipesResponse, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponse, ListSchedulesResponse2, ListSchedulesResponses, ListSessionsData, ListSessionsErrors, ListSessionsResponse, ListSessionsResponses, LoadedProvider, LocalModelResponse, McpAppResource, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, Message, MessageContent, MessageEvent, MessageMetadata, ModelCapabilities, ModelConfig, ModelDownloadStatus, ModelInfo, ModelInfoData, ModelInfoQuery, ModelInfoResponse, ModelSettings, ModelTemplate, ParseRecipeData, ParseRecipeError, ParseRecipeErrors, ParseRecipeRequest, ParseRecipeResponse, ParseRecipeResponse2, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponse, PauseScheduleResponses, Permission, PermissionLevel, PermissionsMetadata, PrincipalType, PromptContentResponse, PromptsListResponse, ProviderCatalogEntry, ProviderDetails, ProviderEngine, ProviderMetadata, ProvidersData, ProvidersResponse, ProvidersResponse2, ProvidersResponses, ProviderTemplate, ProviderType, RawAudioContent, RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ReadAllConfigData, ReadAllConfigResponse, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, ReadResourceData, ReadResourceErrors, ReadResourceRequest, ReadResourceResponse, ReadResourceResponse2, ReadResourceResponses, Recipe, RecipeManifest, RecipeParameter, RecipeParameterInputType, RecipeParameterRequirement, RecipeToYamlData, RecipeToYamlError, RecipeToYamlErrors, RecipeToYamlRequest, RecipeToYamlResponse, RecipeToYamlResponse2, RecipeToYamlResponses, RecoverConfigData, RecoverConfigErrors, RecoverConfigResponse, RecoverConfigResponses, RedactedThinkingContent, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponse, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponse, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionRequest, RemoveExtensionResponse, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponse, ReplyResponses, RepoVariantsResponse, ResetPromptData, ResetPromptErrors, ResetPromptResponse, ResetPromptResponses, ResourceContents, ResourceMetadata, Response, RestartAgentData, RestartAgentErrors, RestartAgentRequest, RestartAgentResponse, RestartAgentResponse2, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentRequest, ResumeAgentResponse, ResumeAgentResponse2, ResumeAgentResponses, RetryConfig, Role, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponse, RunNowHandlerResponses, RunNowResponse, SamplingConfig, SavePromptData, SavePromptErrors, SavePromptRequest, SavePromptResponse, SavePromptResponses, SaveRecipeData, SaveRecipeError, SaveRecipeErrors, SaveRecipeRequest, SaveRecipeResponse, SaveRecipeResponse2, SaveRecipeResponses, ScanRecipeData, ScanRecipeRequest, ScanRecipeResponse, ScanRecipeResponse2, ScanRecipeResponses, ScheduledJob, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeRequest, ScheduleRecipeResponses, SearchHfModelsData, SearchHfModelsErrors, SearchHfModelsResponse, SearchHfModelsResponses, SearchSessionsData, SearchSessionsErrors, SearchSessionsResponse, SearchSessionsResponses, SendTelemetryEventData, SendTelemetryEventResponses, Session, SessionCancelData, SessionCancelResponses, SessionDisplayInfo, SessionEventsData, SessionEventsErrors, SessionEventsResponse, SessionEventsResponses, SessionExtensionsResponse, SessionInsights, SessionListResponse, SessionReplyData, SessionReplyErrors, SessionReplyRequest, SessionReplyResponse, SessionReplyResponse2, SessionReplyResponses, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponse, SessionsHandlerResponses, SessionsQuery, SessionType, SetConfigProviderData, SetProviderRequest, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, SetSlashCommandRequest, Settings, SetupResponse, SlashCommand, SlashCommandsResponse, StartAgentData, StartAgentError, StartAgentErrors, StartAgentRequest, StartAgentResponse, StartAgentResponses, StartNanogptSetupData, StartNanogptSetupResponse, StartNanogptSetupResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponse, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponse, StartTetrateSetupResponses, StartTunnelData, StartTunnelError, StartTunnelErrors, StartTunnelResponse, StartTunnelResponses, StatusData, StatusResponse, StatusResponses, StopAgentData, StopAgentErrors, StopAgentRequest, StopAgentResponse, StopAgentResponses, StopTunnelData, StopTunnelError, StopTunnelErrors, StopTunnelResponses, SubRecipe, SuccessCheck, SystemInfo, SystemInfoData, SystemInfoResponse, SystemInfoResponses, SystemNotificationContent, SystemNotificationType, TaskSupport, TelemetryEventRequest, Template, TextContent, ThinkingContent, TokenState, Tool, ToolAnnotations, ToolConfirmationRequest, ToolExecution, ToolInfo, ToolPermission, ToolRequest, ToolResponse, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponse, TranscribeDictationResponses, TranscribeRequest, TranscribeResponse, TunnelInfo, TunnelState, UiMetadata, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponse, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderRequest, UpdateCustomProviderResponse, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionRequest, UpdateFromSessionResponses, UpdateModelSettingsData, UpdateModelSettingsErrors, UpdateModelSettingsResponse, UpdateModelSettingsResponses, UpdateProviderRequest, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleRequest, UpdateScheduleResponse, UpdateScheduleResponses, UpdateSessionData, UpdateSessionErrors, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameRequest, UpdateSessionNameResponses, UpdateSessionRequest, UpdateSessionResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesError, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesRequest, UpdateSessionUserRecipeValuesResponse, UpdateSessionUserRecipeValuesResponse2, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirRequest, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigQuery, UpsertConfigResponse, UpsertConfigResponses, UpsertPermissionsData, UpsertPermissionsErrors, UpsertPermissionsQuery, UpsertPermissionsResponse, UpsertPermissionsResponses, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponse, ValidateConfigResponses, WhisperModelResponse, WindowProps } from './types.gen'; diff --git a/ui/desktop/src/api/sdk.gen.ts b/ui/desktop/src/api/sdk.gen.ts index dfd96fb432..97a5747dee 100644 --- a/ui/desktop/src/api/sdk.gen.ts +++ b/ui/desktop/src/api/sdk.gen.ts @@ -2,7 +2,7 @@ import type { Client, Options as Options2, TDataShape } from './client'; import { client } from './client.gen'; -import type { AddExtensionData, AddExtensionErrors, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponses, BackupConfigData, BackupConfigErrors, BackupConfigResponses, CallToolData, CallToolErrors, CallToolResponses, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, CancelLocalModelDownloadData, CancelLocalModelDownloadErrors, CancelLocalModelDownloadResponses, CheckProviderData, CleanupProviderCacheData, CleanupProviderCacheErrors, CleanupProviderCacheResponses, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionResponses, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponses, CreateRecipeData, CreateRecipeErrors, CreateRecipeResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleResponses, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeResponses, DeleteLocalModelData, DeleteLocalModelErrors, DeleteLocalModelResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponses, DeleteSessionData, DeleteSessionErrors, DeleteSessionResponses, DetectProviderData, DetectProviderErrors, DetectProviderResponses, DiagnosticsData, DiagnosticsErrors, DiagnosticsResponses, DownloadHfModelData, DownloadHfModelErrors, DownloadHfModelResponses, DownloadModelData, DownloadModelErrors, DownloadModelResponses, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeResponses, ExportAppData, ExportAppErrors, ExportAppResponses, ExportSessionData, ExportSessionErrors, ExportSessionResponses, ForkSessionData, ForkSessionErrors, ForkSessionResponses, GetCanonicalModelInfoData, GetCanonicalModelInfoResponses, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponses, GetFeaturesData, GetFeaturesResponses, GetLocalModelDownloadProgressData, GetLocalModelDownloadProgressErrors, GetLocalModelDownloadProgressResponses, GetModelSettingsData, GetModelSettingsErrors, GetModelSettingsResponses, GetPromptData, GetPromptErrors, GetPromptResponses, GetPromptsData, GetPromptsResponses, GetProviderCatalogData, GetProviderCatalogErrors, GetProviderCatalogResponses, GetProviderCatalogTemplateData, GetProviderCatalogTemplateErrors, GetProviderCatalogTemplateResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponses, GetRepoFilesData, GetRepoFilesResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponses, GetSessionInsightsData, GetSessionInsightsErrors, GetSessionInsightsResponses, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsResponses, GetTunnelStatusData, GetTunnelStatusResponses, ImportAppData, ImportAppErrors, ImportAppResponses, ImportSessionData, ImportSessionErrors, ImportSessionResponses, InitConfigData, InitConfigErrors, InitConfigResponses, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponses, KillRunningJobData, KillRunningJobResponses, ListAppsData, ListAppsErrors, ListAppsResponses, ListLocalModelsData, ListLocalModelsResponses, ListModelsData, ListModelsResponses, ListRecipesData, ListRecipesErrors, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponses, ListSessionsData, ListSessionsErrors, ListSessionsResponses, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, ParseRecipeData, ParseRecipeErrors, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponses, ProvidersData, ProvidersResponses, ReadAllConfigData, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, ReadResourceData, ReadResourceErrors, ReadResourceResponses, RecipeToYamlData, RecipeToYamlErrors, RecipeToYamlResponses, RecoverConfigData, RecoverConfigErrors, RecoverConfigResponses, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponses, ResetPromptData, ResetPromptErrors, ResetPromptResponses, RestartAgentData, RestartAgentErrors, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentResponses, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponses, SavePromptData, SavePromptErrors, SavePromptResponses, SaveRecipeData, SaveRecipeErrors, SaveRecipeResponses, ScanRecipeData, ScanRecipeResponses, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeResponses, SearchHfModelsData, SearchHfModelsErrors, SearchHfModelsResponses, SearchSessionsData, SearchSessionsErrors, SearchSessionsResponses, SendTelemetryEventData, SendTelemetryEventResponses, SessionCancelData, SessionCancelResponses, SessionEventsData, SessionEventsErrors, SessionEventsResponses, SessionReplyData, SessionReplyErrors, SessionReplyResponses, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponses, SetConfigProviderData, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, StartAgentData, StartAgentErrors, StartAgentResponses, StartNanogptSetupData, StartNanogptSetupResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponses, StartTunnelData, StartTunnelErrors, StartTunnelResponses, StatusData, StatusResponses, StopAgentData, StopAgentErrors, StopAgentResponses, StopTunnelData, StopTunnelErrors, StopTunnelResponses, SystemInfoData, SystemInfoResponses, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponses, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionResponses, UpdateModelSettingsData, UpdateModelSettingsErrors, UpdateModelSettingsResponses, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleResponses, UpdateSessionData, UpdateSessionErrors, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameResponses, UpdateSessionResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigResponses, UpsertPermissionsData, UpsertPermissionsErrors, UpsertPermissionsResponses, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponses } from './types.gen'; +import type { AddExtensionData, AddExtensionErrors, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponses, BackupConfigData, BackupConfigErrors, BackupConfigResponses, CallToolData, CallToolErrors, CallToolResponses, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, CancelLocalModelDownloadData, CancelLocalModelDownloadErrors, CancelLocalModelDownloadResponses, CheckProviderData, CleanupProviderCacheData, CleanupProviderCacheErrors, CleanupProviderCacheResponses, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionResponses, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponses, CreateRecipeData, CreateRecipeErrors, CreateRecipeResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleResponses, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeResponses, DeleteLocalModelData, DeleteLocalModelErrors, DeleteLocalModelResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponses, DeleteSessionData, DeleteSessionErrors, DeleteSessionResponses, DiagnosticsData, DiagnosticsErrors, DiagnosticsResponses, DownloadHfModelData, DownloadHfModelErrors, DownloadHfModelResponses, DownloadModelData, DownloadModelErrors, DownloadModelResponses, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeResponses, ExportAppData, ExportAppErrors, ExportAppResponses, ExportSessionData, ExportSessionErrors, ExportSessionResponses, ForkSessionData, ForkSessionErrors, ForkSessionResponses, GetCanonicalModelInfoData, GetCanonicalModelInfoResponses, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponses, GetFeaturesData, GetFeaturesResponses, GetLocalModelDownloadProgressData, GetLocalModelDownloadProgressErrors, GetLocalModelDownloadProgressResponses, GetModelSettingsData, GetModelSettingsErrors, GetModelSettingsResponses, GetPromptData, GetPromptErrors, GetPromptResponses, GetPromptsData, GetPromptsResponses, GetProviderCatalogData, GetProviderCatalogErrors, GetProviderCatalogResponses, GetProviderCatalogTemplateData, GetProviderCatalogTemplateErrors, GetProviderCatalogTemplateResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponses, GetRepoFilesData, GetRepoFilesResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponses, GetSessionInsightsData, GetSessionInsightsErrors, GetSessionInsightsResponses, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsResponses, GetTunnelStatusData, GetTunnelStatusResponses, ImportAppData, ImportAppErrors, ImportAppResponses, ImportSessionData, ImportSessionErrors, ImportSessionResponses, InitConfigData, InitConfigErrors, InitConfigResponses, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponses, KillRunningJobData, KillRunningJobResponses, ListAppsData, ListAppsErrors, ListAppsResponses, ListLocalModelsData, ListLocalModelsResponses, ListModelsData, ListModelsResponses, ListRecipesData, ListRecipesErrors, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponses, ListSessionsData, ListSessionsErrors, ListSessionsResponses, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, ParseRecipeData, ParseRecipeErrors, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponses, ProvidersData, ProvidersResponses, ReadAllConfigData, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, ReadResourceData, ReadResourceErrors, ReadResourceResponses, RecipeToYamlData, RecipeToYamlErrors, RecipeToYamlResponses, RecoverConfigData, RecoverConfigErrors, RecoverConfigResponses, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponses, ResetPromptData, ResetPromptErrors, ResetPromptResponses, RestartAgentData, RestartAgentErrors, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentResponses, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponses, SavePromptData, SavePromptErrors, SavePromptResponses, SaveRecipeData, SaveRecipeErrors, SaveRecipeResponses, ScanRecipeData, ScanRecipeResponses, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeResponses, SearchHfModelsData, SearchHfModelsErrors, SearchHfModelsResponses, SearchSessionsData, SearchSessionsErrors, SearchSessionsResponses, SendTelemetryEventData, SendTelemetryEventResponses, SessionCancelData, SessionCancelResponses, SessionEventsData, SessionEventsErrors, SessionEventsResponses, SessionReplyData, SessionReplyErrors, SessionReplyResponses, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponses, SetConfigProviderData, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, StartAgentData, StartAgentErrors, StartAgentResponses, StartNanogptSetupData, StartNanogptSetupResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponses, StartTunnelData, StartTunnelErrors, StartTunnelResponses, StatusData, StatusResponses, StopAgentData, StopAgentErrors, StopAgentResponses, StopTunnelData, StopTunnelErrors, StopTunnelResponses, SystemInfoData, SystemInfoResponses, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponses, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionResponses, UpdateModelSettingsData, UpdateModelSettingsErrors, UpdateModelSettingsResponses, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleResponses, UpdateSessionData, UpdateSessionErrors, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameResponses, UpdateSessionResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigResponses, UpsertPermissionsData, UpsertPermissionsErrors, UpsertPermissionsResponses, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponses } from './types.gen'; export type Options = Options2 & { /** @@ -194,15 +194,6 @@ export const updateCustomProvider = (optio } }); -export const detectProvider = (options: Options) => (options.client ?? client).post({ - url: '/config/detect-provider', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers - } -}); - export const getExtensions = (options?: Options) => (options?.client ?? client).get({ url: '/config/extensions', ...options }); export const addExtension = (options: Options) => (options.client ?? client).post({ diff --git a/ui/desktop/src/api/types.gen.ts b/ui/desktop/src/api/types.gen.ts index cfd14f84f7..10d7b59b5c 100644 --- a/ui/desktop/src/api/types.gen.ts +++ b/ui/desktop/src/api/types.gen.ts @@ -234,15 +234,6 @@ export type DeleteRecipeRequest = { id: string; }; -export type DetectProviderRequest = { - api_key: string; -}; - -export type DetectProviderResponse = { - models: Array; - provider_name: string; -}; - export type DictationProvider = 'openai' | 'elevenlabs' | 'groq' | 'local'; export type DictationProviderStatus = { @@ -2356,29 +2347,6 @@ export type UpdateCustomProviderResponses = { export type UpdateCustomProviderResponse = UpdateCustomProviderResponses[keyof UpdateCustomProviderResponses]; -export type DetectProviderData = { - body: DetectProviderRequest; - path?: never; - query?: never; - url: '/config/detect-provider'; -}; - -export type DetectProviderErrors = { - /** - * No matching provider found - */ - 404: unknown; -}; - -export type DetectProviderResponses = { - /** - * Provider detected successfully - */ - 200: DetectProviderResponse; -}; - -export type DetectProviderResponse2 = DetectProviderResponses[keyof DetectProviderResponses]; - export type GetExtensionsData = { body?: never; path?: never; diff --git a/ui/desktop/src/components/ApiKeyTester.tsx b/ui/desktop/src/components/ApiKeyTester.tsx deleted file mode 100644 index 435ac7e590..0000000000 --- a/ui/desktop/src/components/ApiKeyTester.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import { useState, useRef } from 'react'; -import { detectProvider } from '../api'; -import { Key } from './icons/Key'; -import { ArrowRight } from './icons/ArrowRight'; -import { Button } from './ui/button'; - -interface ApiKeyTesterProps { - onSuccess: (provider: string, model: string, apiKey: string) => void; - onStartTesting?: () => void; -} - -interface DetectionResult { - provider: string; - model: string; - totalModels: number; -} - -export default function ApiKeyTester({ onSuccess, onStartTesting }: ApiKeyTesterProps) { - const [apiKey, setApiKey] = useState(''); - const [isLoading, setIsLoading] = useState(false); - const [result, setResult] = useState(null); - const [error, setError] = useState(false); - const inputRef = useRef(null); - - const testApiKey = async () => { - const actualValue = inputRef.current?.value || apiKey; - - if (!actualValue.trim()) { - return; - } - - onStartTesting?.(); - - setIsLoading(true); - setResult(null); - setError(false); - - try { - const response = await detectProvider({ - body: { api_key: actualValue }, - throwOnError: true, - }); - - if (response.data) { - const { provider_name, models } = response.data; - - setResult({ - provider: provider_name, - model: models[0], - totalModels: models.length, - }); - - setTimeout(() => { - onSuccess(provider_name, models[0], actualValue); - }, 1500); - } - } catch { - setError(true); - } finally { - setIsLoading(false); - } - }; - - const hasInput = apiKey.trim().length > 0; - const canSubmit = hasInput && !isLoading; - - return ( -
- {/* Recommended pill */} -
- - Recommended if you have API access already - -
- -
-
- -
-

- Quick Setup with API Key -

- - Auto-detect your provider - -
-
- -
-
- setApiKey(e.target.value)} - placeholder="Enter your API key (OpenAI, Anthropic, Google, etc.)" - className="flex-1 px-3 py-2 border rounded-lg bg-background-primary text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" - disabled={isLoading} - onKeyDown={(e) => { - if (e.key === 'Enter' && canSubmit) { - testApiKey(); - } - }} - /> - -
- - {/* Loading state */} - {isLoading && ( -
-
- Detecting provider and validating key... -
- )} - - {/* Success result */} - {result && ( -
- -
-
Detected {result.provider}
-
- Model: {result.model} ({result.totalModels} models available) -
-
-
- )} - - {/* Error result */} - {error && ( -
-
- -
-
Provider Detection Failed
-
- Could not detect provider from API key -
-
-
-
-

Suggestions:

-
    -
  • - - - Make sure you are using a valid API key from OpenAI, Anthropic, Google, Groq, - or xAI - -
  • -
  • - - Check that the key is complete and not truncated -
  • -
  • - - Verify your API key is active and has sufficient credits -
  • -
  • - - For local Ollama setup, use the "Other Providers" section below -
  • -
-
-
- )} -
-
-
- ); -} diff --git a/ui/desktop/src/components/LocalModelSetup.tsx b/ui/desktop/src/components/LocalModelSetup.tsx deleted file mode 100644 index bb96a22c84..0000000000 --- a/ui/desktop/src/components/LocalModelSetup.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useConfig } from './ConfigContext'; -import { toastService } from '../toasts'; -import { Goose } from './icons'; -import LocalModelPicker from './onboarding/LocalModelPicker'; - -interface LocalModelSetupProps { - onSuccess: () => void; - onCancel: () => void; -} - -export function LocalModelSetup({ onSuccess, onCancel }: LocalModelSetupProps) { - const { upsert } = useConfig(); - - const handleConfigured = async (_providerName: string, modelId: string) => { - await upsert('GOOSE_PROVIDER', 'local', false); - await upsert('GOOSE_MODEL', modelId, false); - toastService.success({ - title: 'Local Model Ready', - msg: `Running entirely on your machine with ${modelId}.`, - }); - onSuccess(); - }; - - return ( -
-
-
- -
-

Run Locally

-

- Download a model to run goose entirely on your machine — no API keys, no accounts, - completely free and private. -

-
- - -
- ); -} diff --git a/ui/desktop/src/components/ProviderGuard.tsx b/ui/desktop/src/components/ProviderGuard.tsx deleted file mode 100644 index 6234ba26a7..0000000000 --- a/ui/desktop/src/components/ProviderGuard.tsx +++ /dev/null @@ -1,582 +0,0 @@ -import { useEffect, useState, useMemo, useRef, useCallback } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { useConfig } from './ConfigContext'; -import { SetupModal } from './SetupModal'; -import { startOpenRouterSetup } from '../utils/openRouterSetup'; -import { startTetrateSetup } from '../utils/tetrateSetup'; -import { startChatGptCodexSetup } from '../utils/chatgptCodexSetup'; -import WelcomeGooseLogo from './WelcomeGooseLogo'; -import { toastService } from '../toasts'; -import { LocalModelSetup } from './LocalModelSetup'; -import ApiKeyTester from './ApiKeyTester'; -import { SwitchModelModal } from './settings/models/subcomponents/SwitchModelModal'; -import { createNavigationHandler } from '../utils/navigationUtils'; -import TelemetrySettings from './settings/app/TelemetrySettings'; -import { - trackOnboardingStarted, - trackOnboardingProviderSelected, - trackOnboardingCompleted, - trackOnboardingAbandoned, - trackOnboardingSetupFailed, -} from '../utils/analytics'; - -import { Goose, OpenRouter, Tetrate, ChatGPT } from './icons'; - -interface ProviderGuardProps { - didSelectProvider: boolean; - children: React.ReactNode; -} - -export default function ProviderGuard({ didSelectProvider, children }: ProviderGuardProps) { - const { read, upsert, getProviders } = useConfig(); - const navigate = useNavigate(); - const [isChecking, setIsChecking] = useState(true); - const [hasProvider, setHasProvider] = useState(false); - const [showFirstTimeSetup, setShowFirstTimeSetup] = useState(false); - const [showLocalModelSetup, setShowLocalModelSetup] = useState(false); - const [userInActiveSetup, setUserInActiveSetup] = useState(false); - const [showSwitchModelModal, setShowSwitchModelModal] = useState(false); - const [switchModelProvider, setSwitchModelProvider] = useState(null); - const onboardingTracked = useRef(false); - const scrollContainerRef = useRef(null); - const [showScrollIndicator, setShowScrollIndicator] = useState(true); - - const checkScrollPosition = useCallback(() => { - const container = scrollContainerRef.current; - if (!container) return; - - const { scrollTop, scrollHeight, clientHeight } = container; - const isNearBottom = scrollTop + clientHeight >= scrollHeight - 50; - const canScroll = scrollHeight > clientHeight; - - setShowScrollIndicator(canScroll && !isNearBottom); - }, []); - - const setView = useMemo(() => createNavigationHandler(navigate), [navigate]); - - const [openRouterSetupState, setOpenRouterSetupState] = useState<{ - show: boolean; - title: string; - message: string; - showRetry: boolean; - autoClose?: number; - } | null>(null); - - const [tetrateSetupState, setTetrateSetupState] = useState<{ - show: boolean; - title: string; - message: string; - showRetry: boolean; - autoClose?: number; - } | null>(null); - - const [chatgptCodexSetupState, setChatgptCodexSetupState] = useState<{ - show: boolean; - title: string; - message: string; - showRetry: boolean; - autoClose?: number; - } | null>(null); - - const handleTetrateSetup = async () => { - trackOnboardingProviderSelected({ method: 'tetrate' }); - try { - const result = await startTetrateSetup(); - if (result.success) { - setSwitchModelProvider('tetrate'); - setShowSwitchModelModal(true); - } else { - trackOnboardingSetupFailed('tetrate', result.message); - setTetrateSetupState({ - show: true, - title: 'Setup Failed', - message: result.message, - showRetry: true, - }); - } - } catch (error) { - console.error('Tetrate setup error:', error); - trackOnboardingSetupFailed('tetrate', 'unexpected_error'); - setTetrateSetupState({ - show: true, - title: 'Setup Error', - message: 'An unexpected error occurred during setup.', - showRetry: true, - }); - } - }; - - const handleChatGptCodexSetup = async () => { - trackOnboardingProviderSelected({ method: 'chatgpt_codex' }); - try { - const result = await startChatGptCodexSetup(); - if (result.success) { - await getProviders(true); - setSwitchModelProvider('chatgpt_codex'); - setShowSwitchModelModal(true); - } else { - trackOnboardingSetupFailed('chatgpt_codex', result.message); - setChatgptCodexSetupState({ - show: true, - title: 'Setup Failed', - message: result.message, - showRetry: true, - }); - } - } catch (error) { - console.error('ChatGPT Codex setup error:', error); - trackOnboardingSetupFailed('chatgpt_codex', 'unexpected_error'); - setChatgptCodexSetupState({ - show: true, - title: 'Setup Error', - message: 'An unexpected error occurred during setup.', - showRetry: true, - }); - } - }; - - const handleApiKeySuccess = async (provider: string, _model: string, apiKey: string) => { - trackOnboardingProviderSelected({ method: 'api_key' }); - const keyName = `${provider.toUpperCase()}_API_KEY`; - await upsert(keyName, apiKey, true); - await upsert('GOOSE_PROVIDER', provider, false); - - setSwitchModelProvider(provider); - setShowSwitchModelModal(true); - }; - - const handleModelSelected = (model: string) => { - if (switchModelProvider) { - trackOnboardingCompleted(switchModelProvider, model); - } - setShowSwitchModelModal(false); - setUserInActiveSetup(false); - setShowFirstTimeSetup(false); - setHasProvider(true); - navigate('/', { replace: true }); - }; - - const handleSwitchModelClose = () => { - setShowSwitchModelModal(false); - }; - - const handleOpenRouterSetup = async () => { - trackOnboardingProviderSelected({ method: 'openrouter' }); - try { - const result = await startOpenRouterSetup(); - if (result.success) { - setSwitchModelProvider('openrouter'); - setShowSwitchModelModal(true); - } else { - trackOnboardingSetupFailed('openrouter', result.message); - setOpenRouterSetupState({ - show: true, - title: 'Setup Failed', - message: result.message, - showRetry: true, - }); - } - } catch (error) { - console.error('OpenRouter setup error:', error); - trackOnboardingSetupFailed('openrouter', 'unexpected_error'); - setOpenRouterSetupState({ - show: true, - title: 'Setup Error', - message: 'An unexpected error occurred during setup.', - showRetry: true, - }); - } - }; - - const handleLocalModelComplete = () => { - trackOnboardingCompleted('local'); - setShowLocalModelSetup(false); - setShowFirstTimeSetup(false); - setHasProvider(true); - navigate('/', { replace: true }); - }; - - const handleLocalModelCancel = () => { - trackOnboardingAbandoned('local_model_setup'); - setShowLocalModelSetup(false); - }; - - const handleRetrySetup = (setupType: 'openrouter' | 'tetrate' | 'chatgpt_codex') => { - if (setupType === 'openrouter') { - setOpenRouterSetupState(null); - handleOpenRouterSetup(); - } else if (setupType === 'tetrate') { - setTetrateSetupState(null); - handleTetrateSetup(); - } else { - setChatgptCodexSetupState(null); - handleChatGptCodexSetup(); - } - }; - - const closeSetupModal = (setupType: 'openrouter' | 'tetrate' | 'chatgpt_codex') => { - if (setupType === 'openrouter') { - setOpenRouterSetupState(null); - } else if (setupType === 'tetrate') { - setTetrateSetupState(null); - } else { - setChatgptCodexSetupState(null); - } - }; - - useEffect(() => { - const checkProvider = async () => { - try { - const provider = ((await read('GOOSE_PROVIDER', false)) as string) || ''; - const hasConfiguredProvider = provider.trim() !== ''; - - // If user is actively testing keys, don't redirect - if (userInActiveSetup) { - setHasProvider(false); - setShowFirstTimeSetup(true); - } else if (hasConfiguredProvider || didSelectProvider) { - setHasProvider(true); - setShowFirstTimeSetup(false); - } else { - setHasProvider(false); - setShowFirstTimeSetup(true); - } - } catch (error) { - console.error('Error checking provider:', error); - toastService.error({ - title: 'Configuration Error', - msg: 'Failed to check provider configuration.', - traceback: error instanceof Error ? error.stack || '' : '', - }); - setHasProvider(false); - setShowFirstTimeSetup(true); - } finally { - setIsChecking(false); - } - }; - - checkProvider(); - }, [read, didSelectProvider, userInActiveSetup]); - - useEffect(() => { - if (!isChecking && !hasProvider && showFirstTimeSetup && !onboardingTracked.current) { - trackOnboardingStarted(); - onboardingTracked.current = true; - } - }, [isChecking, hasProvider, showFirstTimeSetup]); - - useEffect(() => { - if (!isChecking && !hasProvider && showFirstTimeSetup) { - // Check scroll position after content renders - const timer = setTimeout(checkScrollPosition, 100); - return () => clearTimeout(timer); - } - return undefined; - }, [isChecking, hasProvider, showFirstTimeSetup, checkScrollPosition]); - - if (isChecking) { - return ( -
- -
- ); - } - - if (showLocalModelSetup) { - return ( -
-
-
-
- -
-
-
-
- ); - } - - if (!hasProvider && showFirstTimeSetup) { - return ( -
-
-
-
- {/* Header section */} -
-
-
- -
-

Welcome to Goose

-
-

- Since it’s your first time here, let’s get you set up with an AI provider so goose - can work its magic. -

-
- - { - setUserInActiveSetup(true); - }} - /> - - {/* Run Locally Card */} -
-
- - Free & Private - -
-
{ - trackOnboardingProviderSelected({ method: 'local' }); - setShowLocalModelSetup(true); - }} - className="w-full p-4 sm:p-6 bg-transparent border rounded-xl transition-all duration-200 cursor-pointer group" - > -
-
- - Run Locally - -
-
- - - -
-
-

- Download a model and run entirely on your machine. No API keys, no accounts. -

-
-
- - {/* ChatGPT Subscription Card - Full Width */} -
-
- - Recommended if you have ChatGPT Plus/Pro - -
- -
-
-
- - - ChatGPT Subscription - -
-
- - - -
-
-

- Use your ChatGPT Plus/Pro subscription for GPT-5 Codex models. -

-
-
- - {/* Tetrate Card - Full Width */} -
-
- - Recommended for new users - -
- -
-
-
- - - Agent Router - by Tetrate - -
-
- - - -
-
-

- Access multiple AI models with automatic setup. Sign up to receive $10 credit. -

-
-
- - {/* OpenRouter Card - Full Width */} -
- {/* Subtle shimmer effect */} -
- -
-
- - - OpenRouter - -
-
- - - -
-
-

- Access 200+ models with one API. Pay-per-use pricing. -

-
- - {/* Other providers section */} -
-

- Other Providers -

-

- Set up additional providers manually through settings. -

- -
-
- -
-
-
-
- - {/* Scroll indicator - fixed at bottom, hides when scrolled to bottom */} - {showScrollIndicator && ( -
-
- More options below - - - -
-
- )} - - {/* Setup Modals */} - {openRouterSetupState?.show && ( - handleRetrySetup('openrouter')} - onClose={() => closeSetupModal('openrouter')} - autoClose={openRouterSetupState.autoClose} - /> - )} - - {tetrateSetupState?.show && ( - handleRetrySetup('tetrate')} - onClose={() => closeSetupModal('tetrate')} - autoClose={tetrateSetupState.autoClose} - /> - )} - - {chatgptCodexSetupState?.show && ( - handleRetrySetup('chatgpt_codex')} - onClose={() => closeSetupModal('chatgpt_codex')} - autoClose={chatgptCodexSetupState.autoClose} - /> - )} - - {showSwitchModelModal && ( - - )} -
- ); - } - - return <>{children}; -} diff --git a/ui/desktop/src/components/SetupModal.tsx b/ui/desktop/src/components/SetupModal.tsx deleted file mode 100644 index cefb2c5020..0000000000 --- a/ui/desktop/src/components/SetupModal.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { useEffect } from 'react'; -import { Button } from './ui/button'; - -interface SetupModalProps { - title: string; - message: string; - showProgress?: boolean; - showRetry?: boolean; - onRetry?: () => void; - autoClose?: number; - onClose?: () => void; -} - -export function SetupModal({ - title, - message, - showProgress, - showRetry, - onRetry, - autoClose, - onClose, -}: SetupModalProps) { - useEffect(() => { - if (autoClose && onClose) { - const timer = window.setTimeout(() => { - onClose(); - }, autoClose); - return () => window.clearTimeout(timer); - } - return undefined; - }, [autoClose, onClose]); - - return ( -
-
-

{title}

-

{message}

- - {showProgress && ( -
-
-
- )} - - {onClose && ( -
- -
-
- )} - - {showRetry && onRetry && ( - - )} -
-
- ); -} diff --git a/ui/desktop/src/components/WelcomeGooseLogo.tsx b/ui/desktop/src/components/WelcomeGooseLogo.tsx deleted file mode 100644 index b47ab9fa37..0000000000 --- a/ui/desktop/src/components/WelcomeGooseLogo.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Goose, Rain } from './icons/Goose'; - -export default function WelcomeGooseLogo({ className = '' }) { - return ( -
-
- -
-
- -
-
- ); -} diff --git a/ui/desktop/src/components/settings/reset_provider/ResetProviderSection.tsx b/ui/desktop/src/components/settings/reset_provider/ResetProviderSection.tsx index 92063be94d..ef99078547 100644 --- a/ui/desktop/src/components/settings/reset_provider/ResetProviderSection.tsx +++ b/ui/desktop/src/components/settings/reset_provider/ResetProviderSection.tsx @@ -15,7 +15,6 @@ export default function ResetProviderSection(_props: ResetProviderSectionProps) await remove('GOOSE_PROVIDER', false); await remove('GOOSE_MODEL', false); - // Refresh the page to trigger the ProviderGuard check window.location.reload(); } catch (error) { console.error('Failed to reset provider and model:', error); diff --git a/ui/desktop/src/featureFlags.ts b/ui/desktop/src/featureFlags.ts deleted file mode 100644 index 663954c73f..0000000000 --- a/ui/desktop/src/featureFlags.ts +++ /dev/null @@ -1 +0,0 @@ -export const USE_NEW_ONBOARDING = true; diff --git a/ui/desktop/src/utils/analytics.ts b/ui/desktop/src/utils/analytics.ts index 8c818f653e..a62b6f2e13 100644 --- a/ui/desktop/src/utils/analytics.ts +++ b/ui/desktop/src/utils/analytics.ts @@ -303,18 +303,6 @@ export function trackOnboardingCompleted(provider: string, model?: string): void onboardingStartTime = null; } -export function trackOnboardingAbandoned(step: string): void { - const durationSeconds = onboardingStartTime - ? Math.round((Date.now() - onboardingStartTime) / 1000) - : undefined; - - trackEvent({ - name: 'onboarding_abandoned', - properties: { step, duration_seconds: durationSeconds }, - }); - onboardingStartTime = null; -} - export function trackOnboardingSetupFailed( provider: 'openrouter' | 'tetrate' | 'chatgpt_codex' | 'local', errorMessage?: string diff --git a/ui/desktop/src/utils/chatgptCodexSetup.ts b/ui/desktop/src/utils/chatgptCodexSetup.ts deleted file mode 100644 index 2593b0dd9b..0000000000 --- a/ui/desktop/src/utils/chatgptCodexSetup.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { configureProviderOauth } from '../api'; - -export async function startChatGptCodexSetup(): Promise<{ success: boolean; message: string }> { - try { - await configureProviderOauth({ - path: { name: 'chatgpt_codex' }, - throwOnError: true, - }); - return { success: true, message: 'ChatGPT Codex setup completed' }; - } catch (e) { - return { - success: false, - message: `Failed to start ChatGPT Codex setup: ${e}`, - }; - } -} diff --git a/ui/desktop/src/utils/openRouterSetup.ts b/ui/desktop/src/utils/openRouterSetup.ts deleted file mode 100644 index 8e34cc47c8..0000000000 --- a/ui/desktop/src/utils/openRouterSetup.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { startOpenrouterSetup } from '../api'; - -export interface OpenRouterSetupStatus { - isRunning: boolean; - error: string | null; -} - -export async function startOpenRouterSetup(): Promise<{ success: boolean; message: string }> { - try { - return (await startOpenrouterSetup({ throwOnError: true })).data; - } catch (e) { - return { - success: false, - message: `Failed to start OpenRouter setup ['${e}]`, - }; - } -}