Quellcode durchsuchen

ux: Improvements to the new, RCC Provider centric onboarding flow (#9709)

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Bruno Bergher vor 1 Monat
Ursprung
Commit
f26d5a479f
66 geänderte Dateien mit 407 neuen und 219 gelöschten Zeilen
  1. 2 2
      webview-ui/src/components/chat/ChatView.tsx
  2. 89 34
      webview-ui/src/components/settings/ApiOptions.tsx
  3. 33 19
      webview-ui/src/components/settings/ModelPicker.tsx
  4. 1 0
      webview-ui/src/components/settings/providers/Anthropic.tsx
  5. 1 0
      webview-ui/src/components/settings/providers/Baseten.tsx
  6. 1 0
      webview-ui/src/components/settings/providers/Bedrock.tsx
  7. 3 0
      webview-ui/src/components/settings/providers/Chutes.tsx
  8. 1 0
      webview-ui/src/components/settings/providers/ClaudeCode.tsx
  9. 3 0
      webview-ui/src/components/settings/providers/DeepInfra.tsx
  10. 1 0
      webview-ui/src/components/settings/providers/DeepSeek.tsx
  11. 1 0
      webview-ui/src/components/settings/providers/Doubao.tsx
  12. 3 3
      webview-ui/src/components/settings/providers/Gemini.tsx
  13. 3 0
      webview-ui/src/components/settings/providers/Glama.tsx
  14. 3 0
      webview-ui/src/components/settings/providers/IOIntelligence.tsx
  15. 1 0
      webview-ui/src/components/settings/providers/LMStudio.tsx
  16. 3 0
      webview-ui/src/components/settings/providers/LiteLLM.tsx
  17. 1 0
      webview-ui/src/components/settings/providers/Mistral.tsx
  18. 1 0
      webview-ui/src/components/settings/providers/Moonshot.tsx
  19. 1 0
      webview-ui/src/components/settings/providers/OpenAI.tsx
  20. 3 0
      webview-ui/src/components/settings/providers/OpenAICompatible.tsx
  21. 4 3
      webview-ui/src/components/settings/providers/OpenRouter.tsx
  22. 1 0
      webview-ui/src/components/settings/providers/QwenCode.tsx
  23. 3 0
      webview-ui/src/components/settings/providers/Requesty.tsx
  24. 3 0
      webview-ui/src/components/settings/providers/Roo.tsx
  25. 3 0
      webview-ui/src/components/settings/providers/Unbound.tsx
  26. 3 0
      webview-ui/src/components/settings/providers/VercelAiGateway.tsx
  27. 3 3
      webview-ui/src/components/settings/providers/Vertex.tsx
  28. 6 6
      webview-ui/src/components/settings/providers/__tests__/Gemini.spec.tsx
  29. 4 4
      webview-ui/src/components/settings/providers/__tests__/Vertex.spec.tsx
  30. 142 119
      webview-ui/src/components/welcome/WelcomeViewProvider.tsx
  31. 2 1
      webview-ui/src/i18n/locales/ca/settings.json
  32. 2 0
      webview-ui/src/i18n/locales/ca/welcome.json
  33. 2 1
      webview-ui/src/i18n/locales/de/settings.json
  34. 4 2
      webview-ui/src/i18n/locales/de/welcome.json
  35. 2 1
      webview-ui/src/i18n/locales/en/settings.json
  36. 6 4
      webview-ui/src/i18n/locales/en/welcome.json
  37. 2 1
      webview-ui/src/i18n/locales/es/settings.json
  38. 4 2
      webview-ui/src/i18n/locales/es/welcome.json
  39. 2 1
      webview-ui/src/i18n/locales/fr/settings.json
  40. 2 0
      webview-ui/src/i18n/locales/fr/welcome.json
  41. 2 1
      webview-ui/src/i18n/locales/hi/settings.json
  42. 2 0
      webview-ui/src/i18n/locales/hi/welcome.json
  43. 2 1
      webview-ui/src/i18n/locales/id/settings.json
  44. 2 0
      webview-ui/src/i18n/locales/id/welcome.json
  45. 2 1
      webview-ui/src/i18n/locales/it/settings.json
  46. 2 0
      webview-ui/src/i18n/locales/it/welcome.json
  47. 2 1
      webview-ui/src/i18n/locales/ja/settings.json
  48. 2 0
      webview-ui/src/i18n/locales/ja/welcome.json
  49. 2 1
      webview-ui/src/i18n/locales/ko/settings.json
  50. 2 0
      webview-ui/src/i18n/locales/ko/welcome.json
  51. 2 1
      webview-ui/src/i18n/locales/nl/settings.json
  52. 2 0
      webview-ui/src/i18n/locales/nl/welcome.json
  53. 2 1
      webview-ui/src/i18n/locales/pl/settings.json
  54. 2 0
      webview-ui/src/i18n/locales/pl/welcome.json
  55. 2 1
      webview-ui/src/i18n/locales/pt-BR/settings.json
  56. 2 0
      webview-ui/src/i18n/locales/pt-BR/welcome.json
  57. 2 1
      webview-ui/src/i18n/locales/ru/settings.json
  58. 2 0
      webview-ui/src/i18n/locales/ru/welcome.json
  59. 2 1
      webview-ui/src/i18n/locales/tr/settings.json
  60. 2 0
      webview-ui/src/i18n/locales/tr/welcome.json
  61. 2 1
      webview-ui/src/i18n/locales/vi/settings.json
  62. 2 0
      webview-ui/src/i18n/locales/vi/welcome.json
  63. 2 1
      webview-ui/src/i18n/locales/zh-CN/settings.json
  64. 2 0
      webview-ui/src/i18n/locales/zh-CN/welcome.json
  65. 2 1
      webview-ui/src/i18n/locales/zh-TW/settings.json
  66. 2 0
      webview-ui/src/i18n/locales/zh-TW/welcome.json

+ 2 - 2
webview-ui/src/components/chat/ChatView.tsx

@@ -1426,10 +1426,10 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
 						{!cloudIsAuthenticated && taskHistory.length >= 6 && (
 						{!cloudIsAuthenticated && taskHistory.length >= 6 && (
 							<DismissibleUpsell
 							<DismissibleUpsell
 								upsellId="taskList2"
 								upsellId="taskList2"
-								icon={<Cloud className="size-5 mt-0.5 shrink-0" />}
+								icon={<Cloud className="size-5 shrink-0" />}
 								onClick={() => openUpsell()}
 								onClick={() => openUpsell()}
 								dismissOnClick={false}
 								dismissOnClick={false}
-								className="!bg-vscode-editor-background mt-6 border-border rounded-xl pl-4 pr-3 py-3 !text-base">
+							className="bg-none mt-6 border-border rounded-xl p-0 py-3 !text-base">
 								<Trans
 								<Trans
 									i18nKey="cloud:upsell.taskList"
 									i18nKey="cloud:upsell.taskList"
 									components={{
 									components={{

+ 89 - 34
webview-ui/src/components/settings/ApiOptions.tsx

@@ -119,6 +119,7 @@ import { ConsecutiveMistakeLimitControl } from "./ConsecutiveMistakeLimitControl
 import { BedrockCustomArn } from "./providers/BedrockCustomArn"
 import { BedrockCustomArn } from "./providers/BedrockCustomArn"
 import { RooBalanceDisplay } from "./providers/RooBalanceDisplay"
 import { RooBalanceDisplay } from "./providers/RooBalanceDisplay"
 import { buildDocLink } from "@src/utils/docLinks"
 import { buildDocLink } from "@src/utils/docLinks"
+import { BookOpenText } from "lucide-react"
 
 
 export interface ApiOptionsProps {
 export interface ApiOptionsProps {
 	uriScheme: string | undefined
 	uriScheme: string | undefined
@@ -466,6 +467,12 @@ const ApiOptions = ({
 				const [rooOption] = options.splice(rooIndex, 1)
 				const [rooOption] = options.splice(rooIndex, 1)
 				options.unshift(rooOption)
 				options.unshift(rooOption)
 			}
 			}
+		} else {
+			const openRouterIndex = options.findIndex((opt) => opt.value === "openrouter")
+			if (openRouterIndex > 0) {
+				const [openRouterOption] = options.splice(openRouterIndex, 1)
+				options.unshift(openRouterOption)
+			}
 		}
 		}
 
 
 		return options
 		return options
@@ -475,16 +482,15 @@ const ApiOptions = ({
 		<div className="flex flex-col gap-3">
 		<div className="flex flex-col gap-3">
 			<div className="flex flex-col gap-1 relative">
 			<div className="flex flex-col gap-1 relative">
 				<div className="flex justify-between items-center">
 				<div className="flex justify-between items-center">
-					<label className="block font-medium mb-1">{t("settings:providers.apiProvider")}</label>
+					<label className="block font-medium">{t("settings:providers.apiProvider")}</label>
 					{selectedProvider === "roo" && cloudIsAuthenticated ? (
 					{selectedProvider === "roo" && cloudIsAuthenticated ? (
 						<RooBalanceDisplay />
 						<RooBalanceDisplay />
 					) : (
 					) : (
 						docs && (
 						docs && (
-							<div className="text-xs text-vscode-descriptionForeground">
-								<VSCodeLink href={docs.url} className="hover:text-vscode-foreground" target="_blank">
-									{t("settings:providers.providerDocumentation", { provider: docs.name })}
-								</VSCodeLink>
-							</div>
+							<VSCodeLink href={docs.url} target="_blank" className="flex gap-2">
+								{docs.name}
+								<BookOpenText className="size-4 inline ml-2" />
+							</VSCodeLink>
 						)
 						)
 					)}
 					)}
 				</div>
 				</div>
@@ -509,7 +515,7 @@ const ApiOptions = ({
 					routerModels={routerModels}
 					routerModels={routerModels}
 					selectedModelId={selectedModelId}
 					selectedModelId={selectedModelId}
 					uriScheme={uriScheme}
 					uriScheme={uriScheme}
-					fromWelcomeView={fromWelcomeView}
+					simplifySettings={fromWelcomeView}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
 				/>
 				/>
@@ -524,6 +530,7 @@ const ApiOptions = ({
 					refetchRouterModels={refetchRouterModels}
 					refetchRouterModels={refetchRouterModels}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -535,6 +542,7 @@ const ApiOptions = ({
 					uriScheme={uriScheme}
 					uriScheme={uriScheme}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -545,6 +553,7 @@ const ApiOptions = ({
 					routerModels={routerModels}
 					routerModels={routerModels}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -556,15 +565,24 @@ const ApiOptions = ({
 					refetchRouterModels={refetchRouterModels}
 					refetchRouterModels={refetchRouterModels}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
 			{selectedProvider === "anthropic" && (
 			{selectedProvider === "anthropic" && (
-				<Anthropic apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<Anthropic
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "claude-code" && (
 			{selectedProvider === "claude-code" && (
-				<ClaudeCode apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<ClaudeCode
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "openai-native" && (
 			{selectedProvider === "openai-native" && (
@@ -572,15 +590,24 @@ const ApiOptions = ({
 					apiConfiguration={apiConfiguration}
 					apiConfiguration={apiConfiguration}
 					setApiConfigurationField={setApiConfigurationField}
 					setApiConfigurationField={setApiConfigurationField}
 					selectedModelInfo={selectedModelInfo}
 					selectedModelInfo={selectedModelInfo}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
 			{selectedProvider === "mistral" && (
 			{selectedProvider === "mistral" && (
-				<Mistral apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<Mistral
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "baseten" && (
 			{selectedProvider === "baseten" && (
-				<Baseten apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<Baseten
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "bedrock" && (
 			{selectedProvider === "bedrock" && (
@@ -588,6 +615,7 @@ const ApiOptions = ({
 					apiConfiguration={apiConfiguration}
 					apiConfiguration={apiConfiguration}
 					setApiConfigurationField={setApiConfigurationField}
 					setApiConfigurationField={setApiConfigurationField}
 					selectedModelInfo={selectedModelInfo}
 					selectedModelInfo={selectedModelInfo}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -595,7 +623,7 @@ const ApiOptions = ({
 				<Vertex
 				<Vertex
 					apiConfiguration={apiConfiguration}
 					apiConfiguration={apiConfiguration}
 					setApiConfigurationField={setApiConfigurationField}
 					setApiConfigurationField={setApiConfigurationField}
-					fromWelcomeView={fromWelcomeView}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -603,7 +631,7 @@ const ApiOptions = ({
 				<Gemini
 				<Gemini
 					apiConfiguration={apiConfiguration}
 					apiConfiguration={apiConfiguration}
 					setApiConfigurationField={setApiConfigurationField}
 					setApiConfigurationField={setApiConfigurationField}
-					fromWelcomeView={fromWelcomeView}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -613,27 +641,48 @@ const ApiOptions = ({
 					setApiConfigurationField={setApiConfigurationField}
 					setApiConfigurationField={setApiConfigurationField}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
 			{selectedProvider === "lmstudio" && (
 			{selectedProvider === "lmstudio" && (
-				<LMStudio apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<LMStudio
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "deepseek" && (
 			{selectedProvider === "deepseek" && (
-				<DeepSeek apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<DeepSeek
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "doubao" && (
 			{selectedProvider === "doubao" && (
-				<Doubao apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<Doubao
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "qwen-code" && (
 			{selectedProvider === "qwen-code" && (
-				<QwenCode apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<QwenCode
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "moonshot" && (
 			{selectedProvider === "moonshot" && (
-				<Moonshot apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
+				<Moonshot
+					apiConfiguration={apiConfiguration}
+					setApiConfigurationField={setApiConfigurationField}
+					simplifySettings={fromWelcomeView}
+				/>
 			)}
 			)}
 
 
 			{selectedProvider === "minimax" && (
 			{selectedProvider === "minimax" && (
@@ -671,6 +720,7 @@ const ApiOptions = ({
 					routerModels={routerModels}
 					routerModels={routerModels}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -680,6 +730,7 @@ const ApiOptions = ({
 					setApiConfigurationField={setApiConfigurationField}
 					setApiConfigurationField={setApiConfigurationField}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -697,6 +748,7 @@ const ApiOptions = ({
 					setApiConfigurationField={setApiConfigurationField}
 					setApiConfigurationField={setApiConfigurationField}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -707,6 +759,7 @@ const ApiOptions = ({
 					routerModels={routerModels}
 					routerModels={routerModels}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -733,6 +786,7 @@ const ApiOptions = ({
 					cloudIsAuthenticated={cloudIsAuthenticated}
 					cloudIsAuthenticated={cloudIsAuthenticated}
 					organizationAllowList={organizationAllowList}
 					organizationAllowList={organizationAllowList}
 					modelValidationError={modelValidationError}
 					modelValidationError={modelValidationError}
+					simplifySettings={fromWelcomeView}
 				/>
 				/>
 			)}
 			)}
 
 
@@ -801,24 +855,25 @@ const ApiOptions = ({
 				</>
 				</>
 			)}
 			)}
 
 
-			{selectedProvider === "roo" ? (
-				<SimpleThinkingBudget
-					key={`${selectedProvider}-${selectedModelId}`}
-					apiConfiguration={apiConfiguration}
-					setApiConfigurationField={setApiConfigurationField}
-					modelInfo={selectedModelInfo}
-				/>
-			) : (
-				<ThinkingBudget
-					key={`${selectedProvider}-${selectedModelId}`}
-					apiConfiguration={apiConfiguration}
-					setApiConfigurationField={setApiConfigurationField}
-					modelInfo={selectedModelInfo}
-				/>
-			)}
+			{!fromWelcomeView &&
+				(selectedProvider === "roo" ? (
+					<SimpleThinkingBudget
+						key={`${selectedProvider}-${selectedModelId}`}
+						apiConfiguration={apiConfiguration}
+						setApiConfigurationField={setApiConfigurationField}
+						modelInfo={selectedModelInfo}
+					/>
+				) : (
+					<ThinkingBudget
+						key={`${selectedProvider}-${selectedModelId}`}
+						apiConfiguration={apiConfiguration}
+						setApiConfigurationField={setApiConfigurationField}
+						modelInfo={selectedModelInfo}
+					/>
+				))}
 
 
 			{/* Gate Verbosity UI by capability flag */}
 			{/* Gate Verbosity UI by capability flag */}
-			{selectedModelInfo?.supportsVerbosity && (
+			{!fromWelcomeView && selectedModelInfo?.supportsVerbosity && (
 				<Verbosity
 				<Verbosity
 					apiConfiguration={apiConfiguration}
 					apiConfiguration={apiConfiguration}
 					setApiConfigurationField={setApiConfigurationField}
 					setApiConfigurationField={setApiConfigurationField}

+ 33 - 19
webview-ui/src/components/settings/ModelPicker.tsx

@@ -1,7 +1,7 @@
 import { useMemo, useState, useCallback, useEffect, useRef } from "react"
 import { useMemo, useState, useCallback, useEffect, useRef } from "react"
 import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"
 import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"
 import { Trans } from "react-i18next"
 import { Trans } from "react-i18next"
-import { ChevronsUpDown, Check, X } from "lucide-react"
+import { ChevronsUpDown, Check, X, Info } from "lucide-react"
 
 
 import type { ProviderSettings, ModelInfo, OrganizationAllowList } from "@roo-code/types"
 import type { ProviderSettings, ModelInfo, OrganizationAllowList } from "@roo-code/types"
 
 
@@ -54,6 +54,7 @@ interface ModelPickerProps {
 	) => void
 	) => void
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	errorMessage?: string
 	errorMessage?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const ModelPicker = ({
 export const ModelPicker = ({
@@ -66,6 +67,7 @@ export const ModelPicker = ({
 	setApiConfigurationField,
 	setApiConfigurationField,
 	organizationAllowList,
 	organizationAllowList,
 	errorMessage,
 	errorMessage,
+	simplifySettings,
 }: ModelPickerProps) => {
 }: ModelPickerProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
@@ -246,25 +248,37 @@ export const ModelPicker = ({
 			{selectedModelInfo?.deprecated && (
 			{selectedModelInfo?.deprecated && (
 				<ApiErrorMessage errorMessage={t("settings:validation.modelDeprecated")} />
 				<ApiErrorMessage errorMessage={t("settings:validation.modelDeprecated")} />
 			)}
 			)}
-			{selectedModelId && selectedModelInfo && !selectedModelInfo.deprecated && (
-				<ModelInfoView
-					apiProvider={apiConfiguration.apiProvider}
-					selectedModelId={selectedModelId}
-					modelInfo={selectedModelInfo}
-					isDescriptionExpanded={isDescriptionExpanded}
-					setIsDescriptionExpanded={setIsDescriptionExpanded}
-				/>
+
+			{simplifySettings ? (
+				<p className="text-xs text-vscode-descriptionForeground m-0">
+					<Info className="size-3 inline mr-1" />
+					{t("settings:modelPicker.simplifiedExplanation")}
+				</p>
+			) : (
+				<div>
+					{selectedModelId && selectedModelInfo && !selectedModelInfo.deprecated && (
+						<ModelInfoView
+							apiProvider={apiConfiguration.apiProvider}
+							selectedModelId={selectedModelId}
+							modelInfo={selectedModelInfo}
+							isDescriptionExpanded={isDescriptionExpanded}
+							setIsDescriptionExpanded={setIsDescriptionExpanded}
+						/>
+					)}
+					<div className="text-sm text-vscode-descriptionForeground">
+						<Trans
+							i18nKey="settings:modelPicker.automaticFetch"
+							components={{
+								serviceLink: <VSCodeLink href={serviceUrl} className="text-sm" />,
+								defaultModelLink: (
+									<VSCodeLink onClick={() => onSelect(defaultModelId)} className="text-sm" />
+								),
+							}}
+							values={{ serviceName, defaultModelId }}
+						/>
+					</div>
+				</div>
 			)}
 			)}
-			<div className="text-sm text-vscode-descriptionForeground">
-				<Trans
-					i18nKey="settings:modelPicker.automaticFetch"
-					components={{
-						serviceLink: <VSCodeLink href={serviceUrl} className="text-sm" />,
-						defaultModelLink: <VSCodeLink onClick={() => onSelect(defaultModelId)} className="text-sm" />,
-					}}
-					values={{ serviceName, defaultModelId }}
-				/>
-			</div>
 		</>
 		</>
 	)
 	)
 }
 }

+ 1 - 0
webview-ui/src/components/settings/providers/Anthropic.tsx

@@ -13,6 +13,7 @@ import { inputEventTransform, noTransform } from "../transforms"
 type AnthropicProps = {
 type AnthropicProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
+	simplifySettings?: boolean
 }
 }
 
 
 export const Anthropic = ({ apiConfiguration, setApiConfigurationField }: AnthropicProps) => {
 export const Anthropic = ({ apiConfiguration, setApiConfigurationField }: AnthropicProps) => {

+ 1 - 0
webview-ui/src/components/settings/providers/Baseten.tsx

@@ -11,6 +11,7 @@ import { inputEventTransform } from "../transforms"
 type BasetenProps = {
 type BasetenProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
+	simplifySettings?: boolean
 }
 }
 
 
 export const Baseten = ({ apiConfiguration, setApiConfigurationField }: BasetenProps) => {
 export const Baseten = ({ apiConfiguration, setApiConfigurationField }: BasetenProps) => {

+ 1 - 0
webview-ui/src/components/settings/providers/Bedrock.tsx

@@ -19,6 +19,7 @@ type BedrockProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	selectedModelInfo?: ModelInfo
 	selectedModelInfo?: ModelInfo
+	simplifySettings?: boolean
 }
 }
 
 
 export const Bedrock = ({ apiConfiguration, setApiConfigurationField, selectedModelInfo }: BedrockProps) => {
 export const Bedrock = ({ apiConfiguration, setApiConfigurationField, selectedModelInfo }: BedrockProps) => {

+ 3 - 0
webview-ui/src/components/settings/providers/Chutes.tsx

@@ -18,6 +18,7 @@ type ChutesProps = {
 	routerModels?: RouterModels
 	routerModels?: RouterModels
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const Chutes = ({
 export const Chutes = ({
@@ -26,6 +27,7 @@ export const Chutes = ({
 	routerModels,
 	routerModels,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: ChutesProps) => {
 }: ChutesProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
@@ -69,6 +71,7 @@ export const Chutes = ({
 				serviceUrl="https://llm.chutes.ai/v1/models"
 				serviceUrl="https://llm.chutes.ai/v1/models"
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 1 - 0
webview-ui/src/components/settings/providers/ClaudeCode.tsx

@@ -7,6 +7,7 @@ import { Slider } from "@src/components/ui"
 interface ClaudeCodeProps {
 interface ClaudeCodeProps {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
+	simplifySettings?: boolean
 }
 }
 
 
 export const ClaudeCode: React.FC<ClaudeCodeProps> = ({ apiConfiguration, setApiConfigurationField }) => {
 export const ClaudeCode: React.FC<ClaudeCodeProps> = ({ apiConfiguration, setApiConfigurationField }) => {

+ 3 - 0
webview-ui/src/components/settings/providers/DeepInfra.tsx

@@ -19,6 +19,7 @@ type DeepInfraProps = {
 	refetchRouterModels: () => void
 	refetchRouterModels: () => void
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const DeepInfra = ({
 export const DeepInfra = ({
@@ -28,6 +29,7 @@ export const DeepInfra = ({
 	refetchRouterModels,
 	refetchRouterModels,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: DeepInfraProps) => {
 }: DeepInfraProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
@@ -88,6 +90,7 @@ export const DeepInfra = ({
 				serviceUrl="https://deepinfra.com/models"
 				serviceUrl="https://deepinfra.com/models"
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 1 - 0
webview-ui/src/components/settings/providers/DeepSeek.tsx

@@ -11,6 +11,7 @@ import { inputEventTransform } from "../transforms"
 type DeepSeekProps = {
 type DeepSeekProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
+	simplifySettings?: boolean
 }
 }
 
 
 export const DeepSeek = ({ apiConfiguration, setApiConfigurationField }: DeepSeekProps) => {
 export const DeepSeek = ({ apiConfiguration, setApiConfigurationField }: DeepSeekProps) => {

+ 1 - 0
webview-ui/src/components/settings/providers/Doubao.tsx

@@ -11,6 +11,7 @@ import { inputEventTransform } from "../transforms"
 type DoubaoProps = {
 type DoubaoProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
+	simplifySettings?: boolean
 }
 }
 
 
 export const Doubao = ({ apiConfiguration, setApiConfigurationField }: DoubaoProps) => {
 export const Doubao = ({ apiConfiguration, setApiConfigurationField }: DoubaoProps) => {

+ 3 - 3
webview-ui/src/components/settings/providers/Gemini.tsx

@@ -12,10 +12,10 @@ import { inputEventTransform } from "../transforms"
 type GeminiProps = {
 type GeminiProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
-	fromWelcomeView?: boolean
+	simplifySettings?: boolean
 }
 }
 
 
-export const Gemini = ({ apiConfiguration, setApiConfigurationField, fromWelcomeView }: GeminiProps) => {
+export const Gemini = ({ apiConfiguration, setApiConfigurationField, simplifySettings }: GeminiProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
 	const [googleGeminiBaseUrlSelected, setGoogleGeminiBaseUrlSelected] = useState(
 	const [googleGeminiBaseUrlSelected, setGoogleGeminiBaseUrlSelected] = useState(
@@ -74,7 +74,7 @@ export const Gemini = ({ apiConfiguration, setApiConfigurationField, fromWelcome
 					/>
 					/>
 				)}
 				)}
 
 
-				{!fromWelcomeView && (
+				{!simplifySettings && (
 					<>
 					<>
 						<Checkbox
 						<Checkbox
 							className="mt-6"
 							className="mt-6"

+ 3 - 0
webview-ui/src/components/settings/providers/Glama.tsx

@@ -19,6 +19,7 @@ type GlamaProps = {
 	uriScheme?: string
 	uriScheme?: string
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const Glama = ({
 export const Glama = ({
@@ -28,6 +29,7 @@ export const Glama = ({
 	uriScheme,
 	uriScheme,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: GlamaProps) => {
 }: GlamaProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
@@ -70,6 +72,7 @@ export const Glama = ({
 				serviceUrl="https://glama.ai/models"
 				serviceUrl="https://glama.ai/models"
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 3 - 0
webview-ui/src/components/settings/providers/IOIntelligence.tsx

@@ -21,6 +21,7 @@ type IOIntelligenceProps = {
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const IOIntelligence = ({
 export const IOIntelligence = ({
@@ -28,6 +29,7 @@ export const IOIntelligence = ({
 	setApiConfigurationField,
 	setApiConfigurationField,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: IOIntelligenceProps) => {
 }: IOIntelligenceProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 	const { routerModels } = useExtensionState()
 	const { routerModels } = useExtensionState()
@@ -71,6 +73,7 @@ export const IOIntelligence = ({
 				setApiConfigurationField={setApiConfigurationField}
 				setApiConfigurationField={setApiConfigurationField}
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 1 - 0
webview-ui/src/components/settings/providers/LMStudio.tsx

@@ -17,6 +17,7 @@ import { ModelRecord } from "@roo/api"
 type LMStudioProps = {
 type LMStudioProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
+	simplifySettings?: boolean
 }
 }
 
 
 export const LMStudio = ({ apiConfiguration, setApiConfigurationField }: LMStudioProps) => {
 export const LMStudio = ({ apiConfiguration, setApiConfigurationField }: LMStudioProps) => {

+ 3 - 0
webview-ui/src/components/settings/providers/LiteLLM.tsx

@@ -19,6 +19,7 @@ type LiteLLMProps = {
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const LiteLLM = ({
 export const LiteLLM = ({
@@ -26,6 +27,7 @@ export const LiteLLM = ({
 	setApiConfigurationField,
 	setApiConfigurationField,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: LiteLLMProps) => {
 }: LiteLLMProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 	const { routerModels } = useExtensionState()
 	const { routerModels } = useExtensionState()
@@ -151,6 +153,7 @@ export const LiteLLM = ({
 				setApiConfigurationField={setApiConfigurationField}
 				setApiConfigurationField={setApiConfigurationField}
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 
 
 			{/* Show prompt caching option if the selected model supports it */}
 			{/* Show prompt caching option if the selected model supports it */}

+ 1 - 0
webview-ui/src/components/settings/providers/Mistral.tsx

@@ -14,6 +14,7 @@ type MistralProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	routerModels?: RouterModels
 	routerModels?: RouterModels
+	simplifySettings?: boolean
 }
 }
 
 
 export const Mistral = ({ apiConfiguration, setApiConfigurationField }: MistralProps) => {
 export const Mistral = ({ apiConfiguration, setApiConfigurationField }: MistralProps) => {

+ 1 - 0
webview-ui/src/components/settings/providers/Moonshot.tsx

@@ -12,6 +12,7 @@ import { cn } from "@/lib/utils"
 type MoonshotProps = {
 type MoonshotProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
+	simplifySettings?: boolean
 }
 }
 
 
 export const Moonshot = ({ apiConfiguration, setApiConfigurationField }: MoonshotProps) => {
 export const Moonshot = ({ apiConfiguration, setApiConfigurationField }: MoonshotProps) => {

+ 1 - 0
webview-ui/src/components/settings/providers/OpenAI.tsx

@@ -14,6 +14,7 @@ type OpenAIProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	selectedModelInfo?: ModelInfo
 	selectedModelInfo?: ModelInfo
+	simplifySettings?: boolean
 }
 }
 
 
 export const OpenAI = ({ apiConfiguration, setApiConfigurationField, selectedModelInfo }: OpenAIProps) => {
 export const OpenAI = ({ apiConfiguration, setApiConfigurationField, selectedModelInfo }: OpenAIProps) => {

+ 3 - 0
webview-ui/src/components/settings/providers/OpenAICompatible.tsx

@@ -28,6 +28,7 @@ type OpenAICompatibleProps = {
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const OpenAICompatible = ({
 export const OpenAICompatible = ({
@@ -35,6 +36,7 @@ export const OpenAICompatible = ({
 	setApiConfigurationField,
 	setApiConfigurationField,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: OpenAICompatibleProps) => {
 }: OpenAICompatibleProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
@@ -147,6 +149,7 @@ export const OpenAICompatible = ({
 				serviceUrl="https://platform.openai.com"
 				serviceUrl="https://platform.openai.com"
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 			<R1FormatSetting
 			<R1FormatSetting
 				onChange={handleInputChange("openAiR1FormatEnabled", noTransform)}
 				onChange={handleInputChange("openAiR1FormatEnabled", noTransform)}

+ 4 - 3
webview-ui/src/components/settings/providers/OpenRouter.tsx

@@ -22,7 +22,7 @@ type OpenRouterProps = {
 	routerModels?: RouterModels
 	routerModels?: RouterModels
 	selectedModelId: string
 	selectedModelId: string
 	uriScheme: string | undefined
 	uriScheme: string | undefined
-	fromWelcomeView?: boolean
+	simplifySettings?: boolean
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
 }
 }
@@ -32,7 +32,7 @@ export const OpenRouter = ({
 	setApiConfigurationField,
 	setApiConfigurationField,
 	routerModels,
 	routerModels,
 	uriScheme,
 	uriScheme,
-	fromWelcomeView,
+	simplifySettings,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
 }: OpenRouterProps) => {
 }: OpenRouterProps) => {
@@ -77,7 +77,7 @@ export const OpenRouter = ({
 					{t("settings:providers.getOpenRouterApiKey")}
 					{t("settings:providers.getOpenRouterApiKey")}
 				</VSCodeButtonLink>
 				</VSCodeButtonLink>
 			)}
 			)}
-			{!fromWelcomeView && (
+			{!simplifySettings && (
 				<>
 				<>
 					<div>
 					<div>
 						<Checkbox
 						<Checkbox
@@ -123,6 +123,7 @@ export const OpenRouter = ({
 				serviceUrl="https://openrouter.ai/models"
 				serviceUrl="https://openrouter.ai/models"
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 1 - 0
webview-ui/src/components/settings/providers/QwenCode.tsx

@@ -5,6 +5,7 @@ import { type ProviderSettings } from "@roo-code/types"
 interface QwenCodeProps {
 interface QwenCodeProps {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
+	simplifySettings?: boolean
 }
 }
 
 
 export const QwenCode: React.FC<QwenCodeProps> = ({ apiConfiguration, setApiConfigurationField }) => {
 export const QwenCode: React.FC<QwenCodeProps> = ({ apiConfiguration, setApiConfigurationField }) => {

+ 3 - 0
webview-ui/src/components/settings/providers/Requesty.tsx

@@ -23,6 +23,7 @@ type RequestyProps = {
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
 	uriScheme?: string
 	uriScheme?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const Requesty = ({
 export const Requesty = ({
@@ -33,6 +34,7 @@ export const Requesty = ({
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
 	uriScheme,
 	uriScheme,
+	simplifySettings,
 }: RequestyProps) => {
 }: RequestyProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
@@ -143,6 +145,7 @@ export const Requesty = ({
 				serviceUrl="https://requesty.ai"
 				serviceUrl="https://requesty.ai"
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 3 - 0
webview-ui/src/components/settings/providers/Roo.tsx

@@ -15,6 +15,7 @@ type RooProps = {
 	cloudIsAuthenticated: boolean
 	cloudIsAuthenticated: boolean
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const Roo = ({
 export const Roo = ({
@@ -24,6 +25,7 @@ export const Roo = ({
 	cloudIsAuthenticated,
 	cloudIsAuthenticated,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: RooProps) => {
 }: RooProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
@@ -55,6 +57,7 @@ export const Roo = ({
 				serviceUrl="https://roocode.com"
 				serviceUrl="https://roocode.com"
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 3 - 0
webview-ui/src/components/settings/providers/Unbound.tsx

@@ -24,6 +24,7 @@ type UnboundProps = {
 	routerModels?: RouterModels
 	routerModels?: RouterModels
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const Unbound = ({
 export const Unbound = ({
@@ -32,6 +33,7 @@ export const Unbound = ({
 	routerModels,
 	routerModels,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: UnboundProps) => {
 }: UnboundProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 	const [didRefetch, setDidRefetch] = useState<boolean>()
 	const [didRefetch, setDidRefetch] = useState<boolean>()
@@ -185,6 +187,7 @@ export const Unbound = ({
 				setApiConfigurationField={setApiConfigurationField}
 				setApiConfigurationField={setApiConfigurationField}
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 3 - 0
webview-ui/src/components/settings/providers/VercelAiGateway.tsx

@@ -17,6 +17,7 @@ type VercelAiGatewayProps = {
 	routerModels?: RouterModels
 	routerModels?: RouterModels
 	organizationAllowList: OrganizationAllowList
 	organizationAllowList: OrganizationAllowList
 	modelValidationError?: string
 	modelValidationError?: string
+	simplifySettings?: boolean
 }
 }
 
 
 export const VercelAiGateway = ({
 export const VercelAiGateway = ({
@@ -25,6 +26,7 @@ export const VercelAiGateway = ({
 	routerModels,
 	routerModels,
 	organizationAllowList,
 	organizationAllowList,
 	modelValidationError,
 	modelValidationError,
+	simplifySettings,
 }: VercelAiGatewayProps) => {
 }: VercelAiGatewayProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
@@ -70,6 +72,7 @@ export const VercelAiGateway = ({
 				serviceUrl="https://vercel.com/ai-gateway/models"
 				serviceUrl="https://vercel.com/ai-gateway/models"
 				organizationAllowList={organizationAllowList}
 				organizationAllowList={organizationAllowList}
 				errorMessage={modelValidationError}
 				errorMessage={modelValidationError}
+				simplifySettings={simplifySettings}
 			/>
 			/>
 		</>
 		</>
 	)
 	)

+ 3 - 3
webview-ui/src/components/settings/providers/Vertex.tsx

@@ -12,10 +12,10 @@ import { inputEventTransform } from "../transforms"
 type VertexProps = {
 type VertexProps = {
 	apiConfiguration: ProviderSettings
 	apiConfiguration: ProviderSettings
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
 	setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
-	fromWelcomeView?: boolean
+	simplifySettings?: boolean
 }
 }
 
 
-export const Vertex = ({ apiConfiguration, setApiConfigurationField, fromWelcomeView }: VertexProps) => {
+export const Vertex = ({ apiConfiguration, setApiConfigurationField, simplifySettings }: VertexProps) => {
 	const { t } = useAppTranslation()
 	const { t } = useAppTranslation()
 
 
 	const handleInputChange = useCallback(
 	const handleInputChange = useCallback(
@@ -94,7 +94,7 @@ export const Vertex = ({ apiConfiguration, setApiConfigurationField, fromWelcome
 				</Select>
 				</Select>
 			</div>
 			</div>
 
 
-			{!fromWelcomeView && apiConfiguration.apiModelId?.startsWith("gemini") && (
+			{!simplifySettings && apiConfiguration.apiModelId?.startsWith("gemini") && (
 				<div className="mt-6">
 				<div className="mt-6">
 					<Checkbox
 					<Checkbox
 						data-testid="checkbox-url-context"
 						data-testid="checkbox-url-context"

+ 6 - 6
webview-ui/src/components/settings/providers/__tests__/Gemini.spec.tsx

@@ -128,13 +128,13 @@ describe("Gemini", () => {
 		})
 		})
 	})
 	})
 
 
-	describe("fromWelcomeView prop", () => {
-		it("should hide URL context and grounding checkboxes when fromWelcomeView is true, but keep custom base URL", () => {
+	describe("simplifySettings prop", () => {
+		it("should hide URL context and grounding checkboxes when simplifySettings is true, but keep custom base URL", () => {
 			render(
 			render(
 				<Gemini
 				<Gemini
 					apiConfiguration={defaultApiConfiguration}
 					apiConfiguration={defaultApiConfiguration}
 					setApiConfigurationField={mockSetApiConfigurationField}
 					setApiConfigurationField={mockSetApiConfigurationField}
-					fromWelcomeView={true}
+					simplifySettings={true}
 				/>,
 				/>,
 			)
 			)
 
 
@@ -145,12 +145,12 @@ describe("Gemini", () => {
 			expect(screen.queryByTestId("checkbox-grounding-search")).not.toBeInTheDocument()
 			expect(screen.queryByTestId("checkbox-grounding-search")).not.toBeInTheDocument()
 		})
 		})
 
 
-		it("should show all checkboxes when fromWelcomeView is false", () => {
+		it("should show all checkboxes when simplifySettings is false", () => {
 			render(
 			render(
 				<Gemini
 				<Gemini
 					apiConfiguration={defaultApiConfiguration}
 					apiConfiguration={defaultApiConfiguration}
 					setApiConfigurationField={mockSetApiConfigurationField}
 					setApiConfigurationField={mockSetApiConfigurationField}
-					fromWelcomeView={false}
+					simplifySettings={false}
 				/>,
 				/>,
 			)
 			)
 
 
@@ -160,7 +160,7 @@ describe("Gemini", () => {
 			expect(screen.getByTestId("checkbox-grounding-search")).toBeInTheDocument()
 			expect(screen.getByTestId("checkbox-grounding-search")).toBeInTheDocument()
 		})
 		})
 
 
-		it("should show all checkboxes when fromWelcomeView is undefined (default behavior)", () => {
+		it("should show all checkboxes when simplifySettings is undefined (default behavior)", () => {
 			render(
 			render(
 				<Gemini
 				<Gemini
 					apiConfiguration={defaultApiConfiguration}
 					apiConfiguration={defaultApiConfiguration}

+ 4 - 4
webview-ui/src/components/settings/providers/__tests__/Vertex.spec.tsx

@@ -138,12 +138,12 @@ describe("Vertex", () => {
 			expect(urlContextCheckbox).toBeNull()
 			expect(urlContextCheckbox).toBeNull()
 		})
 		})
 
 
-		it("should NOT render URL context checkbox when fromWelcomeView is true", () => {
+		it("should NOT render URL context checkbox when simplifySettings is true", () => {
 			render(
 			render(
 				<Vertex
 				<Vertex
 					apiConfiguration={defaultApiConfiguration}
 					apiConfiguration={defaultApiConfiguration}
 					setApiConfigurationField={mockSetApiConfigurationField}
 					setApiConfigurationField={mockSetApiConfigurationField}
-					fromWelcomeView={true}
+					simplifySettings={true}
 				/>,
 				/>,
 			)
 			)
 
 
@@ -208,12 +208,12 @@ describe("Vertex", () => {
 			expect(groundingCheckbox).toBeNull()
 			expect(groundingCheckbox).toBeNull()
 		})
 		})
 
 
-		it("should NOT render grounding search checkbox when fromWelcomeView is true", () => {
+		it("should NOT render grounding search checkbox when simplifySettings is true", () => {
 			render(
 			render(
 				<Vertex
 				<Vertex
 					apiConfiguration={defaultApiConfiguration}
 					apiConfiguration={defaultApiConfiguration}
 					setApiConfigurationField={mockSetApiConfigurationField}
 					setApiConfigurationField={mockSetApiConfigurationField}
-					fromWelcomeView={true}
+					simplifySettings={true}
 				/>,
 				/>,
 			)
 			)
 
 

+ 142 - 119
webview-ui/src/components/welcome/WelcomeViewProvider.tsx

@@ -1,5 +1,11 @@
 import { useCallback, useEffect, useRef, useState } from "react"
 import { useCallback, useEffect, useRef, useState } from "react"
-import { VSCodeLink, VSCodeProgressRing, VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
+import {
+	VSCodeLink,
+	VSCodeProgressRing,
+	VSCodeRadio,
+	VSCodeRadioGroup,
+	VSCodeTextField,
+} from "@vscode/webview-ui-toolkit/react"
 
 
 import type { ProviderSettings } from "@roo-code/types"
 import type { ProviderSettings } from "@roo-code/types"
 
 
@@ -14,7 +20,7 @@ import { Tab, TabContent } from "../common/Tab"
 
 
 import RooHero from "./RooHero"
 import RooHero from "./RooHero"
 import { Trans } from "react-i18next"
 import { Trans } from "react-i18next"
-import { ArrowLeft } from "lucide-react"
+import { ArrowLeft, ArrowRight, BadgeInfo } from "lucide-react"
 
 
 type ProviderOption = "roo" | "custom"
 type ProviderOption = "roo" | "custom"
 
 
@@ -27,6 +33,7 @@ const WelcomeViewProvider = () => {
 	const [authInProgress, setAuthInProgress] = useState(false)
 	const [authInProgress, setAuthInProgress] = useState(false)
 	const [showManualEntry, setShowManualEntry] = useState(false)
 	const [showManualEntry, setShowManualEntry] = useState(false)
 	const [manualUrl, setManualUrl] = useState("")
 	const [manualUrl, setManualUrl] = useState("")
+	const [manualErrorMessage, setManualErrorMessage] = useState<boolean | undefined>(undefined)
 	const manualUrlInputRef = useRef<HTMLInputElement | null>(null)
 	const manualUrlInputRef = useRef<HTMLInputElement | null>(null)
 
 
 	// When auth completes during the provider signup flow, save the Roo config
 	// When auth completes during the provider signup flow, save the Roo config
@@ -92,6 +99,7 @@ const WelcomeViewProvider = () => {
 		setAuthInProgress(false)
 		setAuthInProgress(false)
 		setShowManualEntry(false)
 		setShowManualEntry(false)
 		setManualUrl("")
 		setManualUrl("")
+		setManualErrorMessage(false)
 	}, [])
 	}, [])
 
 
 	const handleManualUrlChange = (e: any) => {
 	const handleManualUrlChange = (e: any) => {
@@ -101,19 +109,21 @@ const WelcomeViewProvider = () => {
 		// Auto-trigger authentication when a complete URL is pasted
 		// Auto-trigger authentication when a complete URL is pasted
 		setTimeout(() => {
 		setTimeout(() => {
 			if (url.trim() && url.includes("://") && url.includes("/auth/clerk/callback")) {
 			if (url.trim() && url.includes("://") && url.includes("/auth/clerk/callback")) {
+				setManualErrorMessage(false)
 				vscode.postMessage({ type: "rooCloudManualUrl", text: url.trim() })
 				vscode.postMessage({ type: "rooCloudManualUrl", text: url.trim() })
 			}
 			}
 		}, 100)
 		}, 100)
 	}
 	}
 
 
-	const handleKeyDown = (e: any) => {
-		if (e.key === "Enter") {
-			const url = manualUrl.trim()
-			if (url && url.includes("://") && url.includes("/auth/clerk/callback")) {
-				vscode.postMessage({ type: "rooCloudManualUrl", text: url })
-			}
+	const handleSubmit = useCallback(() => {
+		const url = manualUrl.trim()
+		if (url && url.includes("://") && url.includes("/auth/clerk/callback")) {
+			setManualErrorMessage(false)
+			vscode.postMessage({ type: "rooCloudManualUrl", text: url })
+		} else {
+			setManualErrorMessage(true)
 		}
 		}
-	}
+	}, [manualUrl])
 
 
 	const handleOpenSignupUrl = () => {
 	const handleOpenSignupUrl = () => {
 		vscode.postMessage({ type: "rooCloudSignIn", useProviderSignup: true })
 		vscode.postMessage({ type: "rooCloudSignIn", useProviderSignup: true })
@@ -127,132 +137,149 @@ const WelcomeViewProvider = () => {
 					<div className="flex flex-col items-start gap-4 pt-8">
 					<div className="flex flex-col items-start gap-4 pt-8">
 						<VSCodeProgressRing className="size-6" />
 						<VSCodeProgressRing className="size-6" />
 						<h2 className="mt-0 mb-0 text-lg font-semibold">{t("welcome:waitingForCloud.heading")}</h2>
 						<h2 className="mt-0 mb-0 text-lg font-semibold">{t("welcome:waitingForCloud.heading")}</h2>
-						<p className="text-sm text-vscode-descriptionForeground mt-0">
+						<p className="text-vscode-descriptionForeground mt-0">
 							{t("welcome:waitingForCloud.description")}
 							{t("welcome:waitingForCloud.description")}
 						</p>
 						</p>
 
 
-						<p className="text-sm text-vscode-descriptionForeground mt-2">
-							<Trans
-								i18nKey="welcome:waitingForCloud.noPrompt"
-								components={{
-									clickHere: (
-										<button
-											onClick={handleOpenSignupUrl}
-											className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0 text-sm"
-										/>
-									),
-								}}
-							/>
-						</p>
-
-						<p className="text-sm text-vscode-descriptionForeground">
-							<Trans
-								i18nKey="welcome:waitingForCloud.havingTrouble"
-								components={{
-									clickHere: (
-										<button
-											onClick={() => setShowManualEntry(true)}
-											className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0 text-sm"
-										/>
-									),
-								}}
-							/>
-						</p>
+						<div className="flex gap-2 items-start pr-4 text-vscode-descriptionForeground">
+							<BadgeInfo className="size-4 inline shrink-0" />
+							<p className="m-0">
+								<Trans
+									i18nKey="welcome:waitingForCloud.noPrompt"
+									components={{
+										clickHere: (
+											<button
+												onClick={handleOpenSignupUrl}
+												className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0"
+											/>
+										),
+									}}
+								/>
+							</p>
+						</div>
 
 
-						{showManualEntry && (
-							<div className="mt-2 w-full max-w-sm">
-								<p className="text-sm text-vscode-descriptionForeground mb-2">
-									{t("welcome:waitingForCloud.pasteUrl")}
+						<div className="flex gap-2 items-start pr-4 text-vscode-descriptionForeground">
+							<ArrowRight className="size-4 inline shrink-0" />
+							<div>
+								<p className="m-0">
+									<Trans
+										i18nKey="welcome:waitingForCloud.havingTrouble"
+										components={{
+											clickHere: (
+												<button
+													onClick={() => setShowManualEntry(true)}
+													className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0	"
+												/>
+											),
+										}}
+									/>
 								</p>
 								</p>
-								<VSCodeTextField
-									ref={manualUrlInputRef as any}
-									value={manualUrl}
-									onChange={handleManualUrlChange}
-									onKeyDown={handleKeyDown}
-									placeholder="vscode://RooVeterinaryInc.roo-cline/auth/clerk/callback?state=..."
-									className="w-full"
-								/>
+
+								{showManualEntry && (
+									<div className="w-full max-w-sm">
+										<p className="text-vscode-descriptionForeground">
+											{t("welcome:waitingForCloud.pasteUrl")}
+										</p>
+										<div className="flex gap-2 items-center">
+											<VSCodeTextField
+												ref={manualUrlInputRef as any}
+												value={manualUrl}
+												onKeyUp={handleManualUrlChange}
+												placeholder="vscode://RooVeterinaryInc.roo-cline/auth/clerk/callback?state=..."
+												className="flex-1"
+											/>
+											<Button
+												onClick={handleSubmit}
+												disabled={manualUrl.length < 40}
+												variant="secondary">
+												<ArrowRight className="size-4" />
+											</Button>
+										</div>
+										{manualUrl && manualErrorMessage && (
+											<p className="text-vscode-errorForeground mt-2">
+												{t("welcome:waitingForCloud.invalidURL")}
+											</p>
+										)}
+									</div>
+								)}
 							</div>
 							</div>
-						)}
+						</div>
+					</div>
+
+					<div className="mt-4">
+						<Button onClick={handleGoBack} variant="secondary">
+							<ArrowLeft className="size-4" />
+							{t("welcome:waitingForCloud.goBack")}
+						</Button>
 					</div>
 					</div>
 				</TabContent>
 				</TabContent>
-				<div className="sticky bottom-0 bg-vscode-sideBar-background p-4 border-t border-vscode-panel-border">
-					<Button onClick={handleGoBack} variant="secondary" className="flex items-center gap-2">
-						<ArrowLeft className="size-4" />
-						{t("welcome:waitingForCloud.goBack")}
-					</Button>
-				</div>
 			</Tab>
 			</Tab>
 		)
 		)
 	}
 	}
 
 
 	return (
 	return (
 		<Tab>
 		<Tab>
-			<TabContent className="flex flex-col gap-4 p-6">
+			<TabContent className="flex flex-col gap-4 p-6 justify-center">
 				<RooHero />
 				<RooHero />
 				<h2 className="mt-0 mb-0 text-xl">{t("welcome:greeting")}</h2>
 				<h2 className="mt-0 mb-0 text-xl">{t("welcome:greeting")}</h2>
 
 
-				<div className="text-base text-vscode-foreground">
-					<p className="mb-3 leading-relaxed">
-						<Trans i18nKey="welcome:introduction" />
-					</p>
-					<p className="mb-0 leading-relaxed">
+				<div className="text-base text-vscode-foreground space-y-3">
+					{selectedProvider === "roo" && (
+						<p>
+							<Trans i18nKey="welcome:introduction" />
+						</p>
+					)}
+					<p>
 						<Trans i18nKey="welcome:chooseProvider" />
 						<Trans i18nKey="welcome:chooseProvider" />
 					</p>
 					</p>
 				</div>
 				</div>
 
 
 				<div className="mb-4">
 				<div className="mb-4">
-					{/* Roo Code Cloud Provider Option */}
-					<div
-						className="flex items-start gap-3 p-4 mb-3 border border-vscode-panel-border rounded-md cursor-pointer hover:bg-vscode-list-hoverBackground"
-						onClick={() => setSelectedProvider("roo")}>
-						<input
-							type="radio"
-							name="provider"
-							checked={selectedProvider === "roo"}
-							onChange={() => setSelectedProvider("roo")}
-							className="mt-1"
-						/>
-						<div className="flex-1">
-							<span className="text-sm font-semibold mb-2 block">
-								{t("welcome:providerSignup.rooCloudProvider")}
-							</span>
-							<p className="text-xs text-vscode-descriptionForeground mb-1">
-								{t("welcome:providerSignup.rooCloudDescription")} (
-								<VSCodeLink
-									href="https://roocode.com/provider/pricing?utm_source=extension&utm_medium=welcome-screen&utm_campaign=provider-signup&utm_content=learn-more"
-									className="text-xs">
-									{t("welcome:providerSignup.learnMore")}
-								</VSCodeLink>
-								).
-							</p>
-						</div>
-					</div>
+					<VSCodeRadioGroup
+						value={selectedProvider}
+						onChange={(e: Event | React.FormEvent<HTMLElement>) => {
+							const target = ((e as CustomEvent)?.detail?.target ||
+								(e.target as HTMLInputElement)) as HTMLInputElement
+							setSelectedProvider(target.value as ProviderOption)
+						}}>
+						{/* Roo Code Cloud Provider Option */}
+						<VSCodeRadio value="roo" className="flex items-start gap-2">
+							<div className="flex-1 space-y-1 cursor-pointer">
+								<p className="text-lg font-semibold block -mt-1">
+									{t("welcome:providerSignup.rooCloudProvider")}
+								</p>
+								<p className="text-base text-vscode-descriptionForeground mt-0">
+									{t("welcome:providerSignup.rooCloudDescription")} (
+									<VSCodeLink
+										href="https://roocode.com/provider/pricing?utm_source=extension&utm_medium=welcome-screen&utm_campaign=provider-signup&utm_content=learn-more"
+										className="cursor-pointer">
+										{t("welcome:providerSignup.learnMore")}
+									</VSCodeLink>
+									).
+								</p>
+							</div>
+						</VSCodeRadio>
 
 
-					{/* Use Another Provider Option */}
-					<div
-						className="flex items-start gap-3 p-4 mb-4 border border-vscode-panel-border rounded-md cursor-pointer hover:bg-vscode-list-hoverBackground"
-						onClick={() => setSelectedProvider("custom")}>
-						<input
-							type="radio"
-							name="provider"
-							checked={selectedProvider === "custom"}
-							onChange={() => setSelectedProvider("custom")}
-							className="mt-1"
-						/>
-						<div className="flex-1">
-							<span className="text-sm font-semibold mb-2 block">
-								{t("welcome:providerSignup.useAnotherProvider")}
-							</span>
-							<p className="text-xs text-vscode-descriptionForeground mb-1">
-								{t("welcome:providerSignup.useAnotherProviderDescription")}
-							</p>
-						</div>
-					</div>
+						{/* Use Another Provider Option */}
+						<VSCodeRadio value="custom" className="flex items-start gap-2">
+							<div className="flex-1 space-y-1 cursor-pointer">
+								<p className="text-lg font-semibold block -mt-1">
+									{t("welcome:providerSignup.useAnotherProvider")}
+								</p>
+								<p className="text-base text-vscode-descriptionForeground mt-0">
+									{t("welcome:providerSignup.useAnotherProviderDescription")}
+								</p>
+							</div>
+						</VSCodeRadio>
+					</VSCodeRadioGroup>
 
 
-					{/* Show API options only when custom provider is selected */}
-					{selectedProvider === "custom" && (
-						<div className="mt-4">
+					{/* Expand API options only when custom provider is selected, max height is used to force a transition */}
+					<div className="mb-8 border-l-2 border-vscode-panel-border pl-6 ml-[7px]">
+						<div
+							className={`overflow-clip transition-[max-height] ease-in-out duration-300 ${selectedProvider === "custom" ? "max-h-[600px]" : "max-h-0"}`}>
+							<p className="text-base text-vscode-descriptionForeground mt-0">
+								{t("welcome:providerSignup.noApiKeys")}
+							</p>
 							<ApiOptions
 							<ApiOptions
 								fromWelcomeView
 								fromWelcomeView
 								apiConfiguration={apiConfiguration || {}}
 								apiConfiguration={apiConfiguration || {}}
@@ -262,19 +289,15 @@ const WelcomeViewProvider = () => {
 								setErrorMessage={setErrorMessage}
 								setErrorMessage={setErrorMessage}
 							/>
 							/>
 						</div>
 						</div>
-					)}
+					</div>
 				</div>
 				</div>
-			</TabContent>
-			<div className="sticky bottom-0 bg-vscode-sideBar-background p-4 border-t border-vscode-panel-border">
-				<div className="flex flex-col gap-2">
+
+				<div className="-mt-8">
 					<Button onClick={handleGetStarted} variant="primary">
 					<Button onClick={handleGetStarted} variant="primary">
 						{t("welcome:providerSignup.getStarted")} →
 						{t("welcome:providerSignup.getStarted")} →
 					</Button>
 					</Button>
-					{errorMessage && selectedProvider === "custom" && (
-						<div className="text-vscode-errorForeground text-sm">{errorMessage}</div>
-					)}
 				</div>
 				</div>
-			</div>
+			</TabContent>
 		</Tab>
 		</Tab>
 	)
 	)
 }
 }

+ 2 - 1
webview-ui/src/i18n/locales/ca/settings.json

@@ -858,7 +858,8 @@
 		"label": "Model",
 		"label": "Model",
 		"searchPlaceholder": "Cerca",
 		"searchPlaceholder": "Cerca",
 		"noMatchFound": "No s'ha trobat cap coincidència",
 		"noMatchFound": "No s'ha trobat cap coincidència",
-		"useCustomModel": "Utilitzar personalitzat: {{modelId}}"
+		"useCustomModel": "Utilitzar personalitzat: {{modelId}}",
+		"simplifiedExplanation": "Pots ajustar la configuració detallada del model més tard."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Si teniu qualsevol pregunta o comentari, no dubteu a obrir un issue a <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unir-vos a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Si teniu qualsevol pregunta o comentari, no dubteu a obrir un issue a <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unir-vos a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/ca/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "més informació",
 		"learnMore": "més informació",
 		"useAnotherProvider": "Utilitza un altre proveïdor",
 		"useAnotherProvider": "Utilitza un altre proveïdor",
 		"useAnotherProviderDescription": "Introdueix una clau API i comença.",
 		"useAnotherProviderDescription": "Introdueix una clau API i comença.",
+		"noApiKeys": "No vols haver de tractar amb claus? Opta pel Proveïdor Roo Code Cloud.",
 		"getStarted": "Començar"
 		"getStarted": "Començar"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Si no se t'avisa per obrir una URL, <clickHere>feu clic aquí</clickHere>.",
 		"noPrompt": "Si no se t'avisa per obrir una URL, <clickHere>feu clic aquí</clickHere>.",
 		"havingTrouble": "Si has completat el registre però tens problemes, <clickHere>feu clic aquí</clickHere>.",
 		"havingTrouble": "Si has completat el registre però tens problemes, <clickHere>feu clic aquí</clickHere>.",
 		"pasteUrl": "Enganxa la URL de resposta del teu navegador:",
 		"pasteUrl": "Enganxa la URL de resposta del teu navegador:",
+		"invalidURL": "No sembla una URL de resposta vàlida. Copia el que Roo Code Cloud mostra al teu navegador.",
 		"goBack": "Enrere"
 		"goBack": "Enrere"
 	},
 	},
 	"startRouter": "Recomanem utilitzar un router LLM:",
 	"startRouter": "Recomanem utilitzar un router LLM:",

+ 2 - 1
webview-ui/src/i18n/locales/de/settings.json

@@ -858,7 +858,8 @@
 		"label": "Modell",
 		"label": "Modell",
 		"searchPlaceholder": "Suchen",
 		"searchPlaceholder": "Suchen",
 		"noMatchFound": "Keine Übereinstimmung gefunden",
 		"noMatchFound": "Keine Übereinstimmung gefunden",
-		"useCustomModel": "Benutzerdefiniert verwenden: {{modelId}}"
+		"useCustomModel": "Benutzerdefiniert verwenden: {{modelId}}",
+		"simplifiedExplanation": "Du kannst detaillierte Modelleinstellungen später anpassen."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Wenn du Fragen oder Feedback hast, kannst du gerne ein Issue auf <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> eröffnen oder <redditLink>reddit.com/r/RooCode</redditLink> oder <discordLink>discord.gg/roocode</discordLink> beitreten",
 		"feedback": "Wenn du Fragen oder Feedback hast, kannst du gerne ein Issue auf <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> eröffnen oder <redditLink>reddit.com/r/RooCode</redditLink> oder <discordLink>discord.gg/roocode</discordLink> beitreten",

+ 4 - 2
webview-ui/src/i18n/locales/de/welcome.json

@@ -16,21 +16,23 @@
 			"incentive": "Probier Roo kostenlos aus"
 			"incentive": "Probier Roo kostenlos aus"
 		}
 		}
 	},
 	},
-	"chooseProvider": "Um loszulegen, brauchst du einen LLM-Anbieter:",
+	"chooseProvider": "Roo braucht einen LLM-Anbieter. Wähle deinen:",
 	"providerSignup": {
 	"providerSignup": {
 		"rooCloudProvider": "Roo Code Cloud Provider",
 		"rooCloudProvider": "Roo Code Cloud Provider",
 		"rooCloudDescription": "Der einfachste Weg, Roo zu nutzen. Eine kuratierte Mischung aus kostenlosen und bezahlten Modellen zu niedrigen Kosten",
 		"rooCloudDescription": "Der einfachste Weg, Roo zu nutzen. Eine kuratierte Mischung aus kostenlosen und bezahlten Modellen zu niedrigen Kosten",
 		"learnMore": "mehr erfahren",
 		"learnMore": "mehr erfahren",
 		"useAnotherProvider": "Anderen Anbieter verwenden",
 		"useAnotherProvider": "Anderen Anbieter verwenden",
 		"useAnotherProviderDescription": "Gib einen API-Schlüssel ein und leg los.",
 		"useAnotherProviderDescription": "Gib einen API-Schlüssel ein und leg los.",
+		"noApiKeys": "Du möchtest dich nicht mit Schlüsseln herumschlagen? Geh mit dem Roo Code Cloud Provider.",
 		"getStarted": "Loslegen"
 		"getStarted": "Loslegen"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
 		"heading": "Wir bringen dich zu Roo Code Cloud...",
 		"heading": "Wir bringen dich zu Roo Code Cloud...",
-		"description": "Schließe die Anmeldung in deinem Browser ab und du wirst automatisch hierher zurückgebracht.",
+		"description": "Wir bringen dich in deinen Browser, um dich für Roo Code Cloud zu registrieren. Dann bringen wir dich hierher zurück, um das Einrichten abzuschließen.",
 		"noPrompt": "Wenn du nicht aufgefordert wirst, eine URL zu öffnen, <clickHere>klick hier</clickHere>.",
 		"noPrompt": "Wenn du nicht aufgefordert wirst, eine URL zu öffnen, <clickHere>klick hier</clickHere>.",
 		"havingTrouble": "Wenn du die Anmeldung abgeschlossen hast, aber Probleme hast, <clickHere>klick hier</clickHere>.",
 		"havingTrouble": "Wenn du die Anmeldung abgeschlossen hast, aber Probleme hast, <clickHere>klick hier</clickHere>.",
 		"pasteUrl": "Füge die Callback-URL aus deinem Browser ein:",
 		"pasteUrl": "Füge die Callback-URL aus deinem Browser ein:",
+		"invalidURL": "Das sieht nicht wie eine gültige Callback-URL aus. Bitte kopiere das, was Roo Code Cloud in deinem Browser anzeigt.",
 		"goBack": "Zurück"
 		"goBack": "Zurück"
 	},
 	},
 	"startRouter": "Wir empfehlen die Verwendung eines LLM-Routers:",
 	"startRouter": "Wir empfehlen die Verwendung eines LLM-Routers:",

+ 2 - 1
webview-ui/src/i18n/locales/en/settings.json

@@ -863,7 +863,8 @@
 		"label": "Model",
 		"label": "Model",
 		"searchPlaceholder": "Search",
 		"searchPlaceholder": "Search",
 		"noMatchFound": "No match found",
 		"noMatchFound": "No match found",
-		"useCustomModel": "Use custom: {{modelId}}"
+		"useCustomModel": "Use custom: {{modelId}}",
+		"simplifiedExplanation": "You can adjust detailed model settings later."
 	},
 	},
 	"footer": {
 	"footer": {
 		"telemetry": {
 		"telemetry": {

+ 6 - 4
webview-ui/src/i18n/locales/en/welcome.json

@@ -16,21 +16,23 @@
 			"incentive": "Try Roo out for free"
 			"incentive": "Try Roo out for free"
 		}
 		}
 	},
 	},
-	"chooseProvider": "To get started, you need an LLM provider:",
+	"chooseProvider": "Roo needs an LLM provider to work. Choose yours:",
 	"providerSignup": {
 	"providerSignup": {
 		"rooCloudProvider": "Roo Code Cloud Provider",
 		"rooCloudProvider": "Roo Code Cloud Provider",
 		"rooCloudDescription": "The simplest way to use Roo. A curated mix of free and paid models at a low cost",
 		"rooCloudDescription": "The simplest way to use Roo. A curated mix of free and paid models at a low cost",
 		"learnMore": "learn more",
 		"learnMore": "learn more",
 		"useAnotherProvider": "Use another provider",
 		"useAnotherProvider": "Use another provider",
 		"useAnotherProviderDescription": "Enter an API key and get going.",
 		"useAnotherProviderDescription": "Enter an API key and get going.",
+		"noApiKeys": "Don't want to deal with keys? Go with the Roo Code Cloud Provider.",
 		"getStarted": "Get started"
 		"getStarted": "Get started"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
 		"heading": "Taking you to Roo Code Cloud...",
 		"heading": "Taking you to Roo Code Cloud...",
-		"description": "Complete sign-up in your browser, then you'll return here automatically.",
+		"description": "We'll take you to your browser to sign up for Roo Code Cloud. We'll then bring you back here to finish.",
 		"noPrompt": "If you don't get prompted to open a URL, <clickHere>click here</clickHere>.",
 		"noPrompt": "If you don't get prompted to open a URL, <clickHere>click here</clickHere>.",
-		"havingTrouble": "If you've completed the sign up but are having trouble, <clickHere>click here</clickHere>.",
-		"pasteUrl": "Paste the callback URL from your browser:",
+		"havingTrouble": "If you've completed sign up but are having trouble, <clickHere>click here</clickHere>.",
+		"pasteUrl": "Paste the callback URL shown in your browser:",
+		"invalidURL": "That doesn't look like a valid callback URL. Please copy what Roo Code Cloud is showing in your browser.",
 		"goBack": "Go back"
 		"goBack": "Go back"
 	},
 	},
 	"startRouter": "We recommend using an LLM Router:",
 	"startRouter": "We recommend using an LLM Router:",

+ 2 - 1
webview-ui/src/i18n/locales/es/settings.json

@@ -858,7 +858,8 @@
 		"label": "Modelo",
 		"label": "Modelo",
 		"searchPlaceholder": "Buscar",
 		"searchPlaceholder": "Buscar",
 		"noMatchFound": "No se encontraron coincidencias",
 		"noMatchFound": "No se encontraron coincidencias",
-		"useCustomModel": "Usar personalizado: {{modelId}}"
+		"useCustomModel": "Usar personalizado: {{modelId}}",
+		"simplifiedExplanation": "Puedes ajustar la configuración detallada del modelo más tarde."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Si tiene alguna pregunta o comentario, no dude en abrir un issue en <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unirse a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Si tiene alguna pregunta o comentario, no dude en abrir un issue en <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unirse a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",

+ 4 - 2
webview-ui/src/i18n/locales/es/welcome.json

@@ -16,21 +16,23 @@
 			"incentive": "Prueba Roo gratis"
 			"incentive": "Prueba Roo gratis"
 		}
 		}
 	},
 	},
-	"chooseProvider": "Para comenzar, necesitas un proveedor LLM:",
+	"chooseProvider": "Roo necesita un proveedor de LLM. Elige el tuyo:",
 	"providerSignup": {
 	"providerSignup": {
 		"rooCloudProvider": "Proveedor Roo Code Cloud",
 		"rooCloudProvider": "Proveedor Roo Code Cloud",
 		"rooCloudDescription": "La forma más sencilla de usar Roo. Una mezcla seleccionada de modelos gratuitos y de pago a bajo costo",
 		"rooCloudDescription": "La forma más sencilla de usar Roo. Una mezcla seleccionada de modelos gratuitos y de pago a bajo costo",
 		"learnMore": "más información",
 		"learnMore": "más información",
 		"useAnotherProvider": "Usar otro proveedor",
 		"useAnotherProvider": "Usar otro proveedor",
 		"useAnotherProviderDescription": "Introduce una clave API y comienza.",
 		"useAnotherProviderDescription": "Introduce una clave API y comienza.",
+		"noApiKeys": "¿No quieres lidiar con claves? Ve con el Proveedor de Roo Code Cloud.",
 		"getStarted": "Comenzar"
 		"getStarted": "Comenzar"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
 		"heading": "Te llevamos a Roo Code Cloud...",
 		"heading": "Te llevamos a Roo Code Cloud...",
-		"description": "Completa el registro en tu navegador y volverás aquí automáticamente.",
+		"description": "Te llevaremos a tu navegador para que te registres en Roo Code Cloud. Luego te traeremos aquí para terminar.",
 		"noPrompt": "Si no se te pide que abras una URL, <clickHere>haz clic aquí</clickHere>.",
 		"noPrompt": "Si no se te pide que abras una URL, <clickHere>haz clic aquí</clickHere>.",
 		"havingTrouble": "Si completaste el registro pero tienes problemas, <clickHere>haz clic aquí</clickHere>.",
 		"havingTrouble": "Si completaste el registro pero tienes problemas, <clickHere>haz clic aquí</clickHere>.",
 		"pasteUrl": "Pega la URL de respuesta de tu navegador:",
 		"pasteUrl": "Pega la URL de respuesta de tu navegador:",
+		"invalidURL": "Eso no parece ser una URL de respuesta válida. Por favor copia lo que Roo Code Cloud está mostrando en tu navegador.",
 		"goBack": "Volver"
 		"goBack": "Volver"
 	},
 	},
 	"startRouter": "Recomendamos usar un router LLM:",
 	"startRouter": "Recomendamos usar un router LLM:",

+ 2 - 1
webview-ui/src/i18n/locales/fr/settings.json

@@ -858,7 +858,8 @@
 		"label": "Modèle",
 		"label": "Modèle",
 		"searchPlaceholder": "Rechercher",
 		"searchPlaceholder": "Rechercher",
 		"noMatchFound": "Aucune correspondance trouvée",
 		"noMatchFound": "Aucune correspondance trouvée",
-		"useCustomModel": "Utiliser personnalisé : {{modelId}}"
+		"useCustomModel": "Utiliser personnalisé : {{modelId}}",
+		"simplifiedExplanation": "Tu peux ajuster les paramètres détaillés du modèle ultérieurement."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Si vous avez des questions ou des commentaires, n'hésitez pas à ouvrir un problème sur <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> ou à rejoindre <redditLink>reddit.com/r/RooCode</redditLink> ou <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Si vous avez des questions ou des commentaires, n'hésitez pas à ouvrir un problème sur <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> ou à rejoindre <redditLink>reddit.com/r/RooCode</redditLink> ou <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/fr/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "en savoir plus",
 		"learnMore": "en savoir plus",
 		"useAnotherProvider": "Utiliser un autre fournisseur",
 		"useAnotherProvider": "Utiliser un autre fournisseur",
 		"useAnotherProviderDescription": "Entre une clé API et commence.",
 		"useAnotherProviderDescription": "Entre une clé API et commence.",
+		"noApiKeys": "Tu ne veux pas te soucier des clés? Opte pour le Fournisseur Roo Code Cloud.",
 		"getStarted": "Commencer"
 		"getStarted": "Commencer"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Si tu n'es pas invité à ouvrir une URL, <clickHere>clique ici</clickHere>.",
 		"noPrompt": "Si tu n'es pas invité à ouvrir une URL, <clickHere>clique ici</clickHere>.",
 		"havingTrouble": "Si tu as terminé l'inscription mais que tu rencontres des problèmes, <clickHere>clique ici</clickHere>.",
 		"havingTrouble": "Si tu as terminé l'inscription mais que tu rencontres des problèmes, <clickHere>clique ici</clickHere>.",
 		"pasteUrl": "Colle l'URL de rappel depuis ton navigateur :",
 		"pasteUrl": "Colle l'URL de rappel depuis ton navigateur :",
+		"invalidURL": "Cela ne ressemble pas à une URL de rappel valide. Copie ce que Roo Code Cloud affiche dans ton navigateur.",
 		"goBack": "Retour"
 		"goBack": "Retour"
 	},
 	},
 	"startRouter": "Nous recommandons d'utiliser un routeur LLM :",
 	"startRouter": "Nous recommandons d'utiliser un routeur LLM :",

+ 2 - 1
webview-ui/src/i18n/locales/hi/settings.json

@@ -859,7 +859,8 @@
 		"label": "मॉडल",
 		"label": "मॉडल",
 		"searchPlaceholder": "खोजें",
 		"searchPlaceholder": "खोजें",
 		"noMatchFound": "कोई मिलान नहीं मिला",
 		"noMatchFound": "कोई मिलान नहीं मिला",
-		"useCustomModel": "कस्टम उपयोग करें: {{modelId}}"
+		"useCustomModel": "कस्टम उपयोग करें: {{modelId}}",
+		"simplifiedExplanation": "आप बाद में विस्तृत मॉडल सेटिंग्स समायोजित कर सकते हैं।"
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "यदि आपके कोई प्रश्न या प्रतिक्रिया है, तो <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> पर एक मुद्दा खोलने या <redditLink>reddit.com/r/RooCode</redditLink> या <discordLink>discord.gg/roocode</discordLink> में शामिल होने में संकोच न करें",
 		"feedback": "यदि आपके कोई प्रश्न या प्रतिक्रिया है, तो <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> पर एक मुद्दा खोलने या <redditLink>reddit.com/r/RooCode</redditLink> या <discordLink>discord.gg/roocode</discordLink> में शामिल होने में संकोच न करें",

+ 2 - 0
webview-ui/src/i18n/locales/hi/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "और जानें",
 		"learnMore": "और जानें",
 		"useAnotherProvider": "दूसरे प्रदाता का उपयोग करें",
 		"useAnotherProvider": "दूसरे प्रदाता का उपयोग करें",
 		"useAnotherProviderDescription": "एक API कुंजी दर्ज करें और शुरू करें।",
 		"useAnotherProviderDescription": "एक API कुंजी दर्ज करें और शुरू करें।",
+		"noApiKeys": "कुंजियों से निपटना नहीं चाहते? Roo Code Cloud प्रदाता के साथ जाएं।",
 		"getStarted": "शुरू करें"
 		"getStarted": "शुरू करें"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "यदि आपको URL खोलने के लिए संकेत नहीं मिलता है, तो <clickHere>यहां क्लिक करें</clickHere>।",
 		"noPrompt": "यदि आपको URL खोलने के लिए संकेत नहीं मिलता है, तो <clickHere>यहां क्लिक करें</clickHere>।",
 		"havingTrouble": "यदि आपने साइन अप पूरा कर लिया है लेकिन समस्या हो रही है, तो <clickHere>यहां क्लिक करें</clickHere>।",
 		"havingTrouble": "यदि आपने साइन अप पूरा कर लिया है लेकिन समस्या हो रही है, तो <clickHere>यहां क्लिक करें</clickHere>।",
 		"pasteUrl": "अपने ब्राउज़र से कॉलबैक URL पेस्ट करें:",
 		"pasteUrl": "अपने ब्राउज़र से कॉलबैक URL पेस्ट करें:",
+		"invalidURL": "यह एक वैध कॉलबैक URL नहीं लगता है। कृपया वह कॉपी करें जो Roo Code Cloud आपके ब्राउज़र में दिखा रहा है।",
 		"goBack": "वापस जाएं"
 		"goBack": "वापस जाएं"
 	},
 	},
 	"startRouter": "हम एक LLM राउटर का उपयोग करने की सलाह देते हैं:",
 	"startRouter": "हम एक LLM राउटर का उपयोग करने की सलाह देते हैं:",

+ 2 - 1
webview-ui/src/i18n/locales/id/settings.json

@@ -888,7 +888,8 @@
 		"label": "Model",
 		"label": "Model",
 		"searchPlaceholder": "Cari",
 		"searchPlaceholder": "Cari",
 		"noMatchFound": "Tidak ada yang cocok ditemukan",
 		"noMatchFound": "Tidak ada yang cocok ditemukan",
-		"useCustomModel": "Gunakan kustom: {{modelId}}"
+		"useCustomModel": "Gunakan kustom: {{modelId}}",
+		"simplifiedExplanation": "Anda dapat menyesuaikan pengaturan model terperinci nanti."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Jika kamu punya pertanyaan atau feedback, jangan ragu untuk membuka issue di <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> atau bergabung <redditLink>reddit.com/r/RooCode</redditLink> atau <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Jika kamu punya pertanyaan atau feedback, jangan ragu untuk membuka issue di <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> atau bergabung <redditLink>reddit.com/r/RooCode</redditLink> atau <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/id/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "pelajari lebih lanjut",
 		"learnMore": "pelajari lebih lanjut",
 		"useAnotherProvider": "Gunakan penyedia lain",
 		"useAnotherProvider": "Gunakan penyedia lain",
 		"useAnotherProviderDescription": "Masukkan kunci API dan mulai.",
 		"useAnotherProviderDescription": "Masukkan kunci API dan mulai.",
+		"noApiKeys": "Tidak ingin menangani kunci? Pilih Penyedia Roo Code Cloud.",
 		"getStarted": "Mulai"
 		"getStarted": "Mulai"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Jika kamu tidak diminta untuk membuka URL, <clickHere>klik di sini</clickHere>.",
 		"noPrompt": "Jika kamu tidak diminta untuk membuka URL, <clickHere>klik di sini</clickHere>.",
 		"havingTrouble": "Jika kamu telah menyelesaikan pendaftaran tetapi mengalami masalah, <clickHere>klik di sini</clickHere>.",
 		"havingTrouble": "Jika kamu telah menyelesaikan pendaftaran tetapi mengalami masalah, <clickHere>klik di sini</clickHere>.",
 		"pasteUrl": "Tempel URL callback dari browser Anda:",
 		"pasteUrl": "Tempel URL callback dari browser Anda:",
+		"invalidURL": "Itu tidak terlihat seperti URL callback yang valid. Salin apa yang ditampilkan Roo Code Cloud di browser Anda.",
 		"goBack": "Kembali"
 		"goBack": "Kembali"
 	},
 	},
 	"startRouter": "Kami merekomendasikan menggunakan Router LLM:",
 	"startRouter": "Kami merekomendasikan menggunakan Router LLM:",

+ 2 - 1
webview-ui/src/i18n/locales/it/settings.json

@@ -859,7 +859,8 @@
 		"label": "Modello",
 		"label": "Modello",
 		"searchPlaceholder": "Cerca",
 		"searchPlaceholder": "Cerca",
 		"noMatchFound": "Nessuna corrispondenza trovata",
 		"noMatchFound": "Nessuna corrispondenza trovata",
-		"useCustomModel": "Usa personalizzato: {{modelId}}"
+		"useCustomModel": "Usa personalizzato: {{modelId}}",
+		"simplifiedExplanation": "Puoi modificare le impostazioni dettagliate del modello in seguito."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Se hai domande o feedback, sentiti libero di aprire un issue su <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unirti a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Se hai domande o feedback, sentiti libero di aprire un issue su <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unirti a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/it/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "scopri di più",
 		"learnMore": "scopri di più",
 		"useAnotherProvider": "Usa un altro provider",
 		"useAnotherProvider": "Usa un altro provider",
 		"useAnotherProviderDescription": "Inserisci una chiave API e inizia.",
 		"useAnotherProviderDescription": "Inserisci una chiave API e inizia.",
+		"noApiKeys": "Non vuoi occuparti di chiavi? Scegli il Provider Roo Code Cloud.",
 		"getStarted": "Inizia"
 		"getStarted": "Inizia"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Se non ti viene chiesto di aprire un URL, <clickHere>fai clic qui</clickHere>.",
 		"noPrompt": "Se non ti viene chiesto di aprire un URL, <clickHere>fai clic qui</clickHere>.",
 		"havingTrouble": "Se hai completato l'iscrizione ma hai problemi, <clickHere>fai clic qui</clickHere>.",
 		"havingTrouble": "Se hai completato l'iscrizione ma hai problemi, <clickHere>fai clic qui</clickHere>.",
 		"pasteUrl": "Incolla l'URL di callback dal tuo browser:",
 		"pasteUrl": "Incolla l'URL di callback dal tuo browser:",
+		"invalidURL": "Questo non sembra un URL di callback valido. Copia quello che Roo Code Cloud mostra nel tuo browser.",
 		"goBack": "Indietro"
 		"goBack": "Indietro"
 	},
 	},
 	"startRouter": "Consigliamo di utilizzare un router LLM:",
 	"startRouter": "Consigliamo di utilizzare un router LLM:",

+ 2 - 1
webview-ui/src/i18n/locales/ja/settings.json

@@ -859,7 +859,8 @@
 		"label": "モデル",
 		"label": "モデル",
 		"searchPlaceholder": "検索",
 		"searchPlaceholder": "検索",
 		"noMatchFound": "一致するものが見つかりません",
 		"noMatchFound": "一致するものが見つかりません",
-		"useCustomModel": "カスタムを使用: {{modelId}}"
+		"useCustomModel": "カスタムを使用: {{modelId}}",
+		"simplifiedExplanation": "詳細なモデル設定は後で調整できます。"
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "質問やフィードバックがある場合は、<githubLink>github.com/RooCodeInc/Roo-Code</githubLink>で問題を開くか、<redditLink>reddit.com/r/RooCode</redditLink>や<discordLink>discord.gg/roocode</discordLink>に参加してください",
 		"feedback": "質問やフィードバックがある場合は、<githubLink>github.com/RooCodeInc/Roo-Code</githubLink>で問題を開くか、<redditLink>reddit.com/r/RooCode</redditLink>や<discordLink>discord.gg/roocode</discordLink>に参加してください",

+ 2 - 0
webview-ui/src/i18n/locales/ja/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "詳細を見る",
 		"learnMore": "詳細を見る",
 		"useAnotherProvider": "別のプロバイダーを使用",
 		"useAnotherProvider": "別のプロバイダーを使用",
 		"useAnotherProviderDescription": "APIキーを入力して始める。",
 		"useAnotherProviderDescription": "APIキーを入力して始める。",
+		"noApiKeys": "キーを扱いたくないですか?Roo Code Cloudプロバイダーを選びましょう。",
 		"getStarted": "始める"
 		"getStarted": "始める"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "URLを開くように促されない場合は、<clickHere>ここをクリック</clickHere>してください。",
 		"noPrompt": "URLを開くように促されない場合は、<clickHere>ここをクリック</clickHere>してください。",
 		"havingTrouble": "サインアップを完了しましたが問題がある場合は、<clickHere>ここをクリック</clickHere>してください。",
 		"havingTrouble": "サインアップを完了しましたが問題がある場合は、<clickHere>ここをクリック</clickHere>してください。",
 		"pasteUrl": "ブラウザからコールバックURLを貼り付けてください:",
 		"pasteUrl": "ブラウザからコールバックURLを貼り付けてください:",
+		"invalidURL": "有効なコールバックURLのようには見えません。Roo Code Cloudがブラウザに表示しているものをコピーしてください。",
 		"goBack": "戻る"
 		"goBack": "戻る"
 	},
 	},
 	"startRouter": "LLMルーターの使用をお勧めします:",
 	"startRouter": "LLMルーターの使用をお勧めします:",

+ 2 - 1
webview-ui/src/i18n/locales/ko/settings.json

@@ -859,7 +859,8 @@
 		"label": "모델",
 		"label": "모델",
 		"searchPlaceholder": "검색",
 		"searchPlaceholder": "검색",
 		"noMatchFound": "일치하는 항목 없음",
 		"noMatchFound": "일치하는 항목 없음",
-		"useCustomModel": "사용자 정의 사용: {{modelId}}"
+		"useCustomModel": "사용자 정의 사용: {{modelId}}",
+		"simplifiedExplanation": "나중에 자세한 모델 설정을 조정할 수 있습니다."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "질문이나 피드백이 있으시면 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink>에서 이슈를 열거나 <redditLink>reddit.com/r/RooCode</redditLink> 또는 <discordLink>discord.gg/roocode</discordLink>에 가입하세요",
 		"feedback": "질문이나 피드백이 있으시면 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink>에서 이슈를 열거나 <redditLink>reddit.com/r/RooCode</redditLink> 또는 <discordLink>discord.gg/roocode</discordLink>에 가입하세요",

+ 2 - 0
webview-ui/src/i18n/locales/ko/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "자세히 알아보기",
 		"learnMore": "자세히 알아보기",
 		"useAnotherProvider": "다른 제공업체 사용",
 		"useAnotherProvider": "다른 제공업체 사용",
 		"useAnotherProviderDescription": "API 키를 입력하고 시작하세요.",
 		"useAnotherProviderDescription": "API 키를 입력하고 시작하세요.",
+		"noApiKeys": "키를 다루기 싫으세요? Roo Code Cloud 제공업체를 선택하세요.",
 		"getStarted": "시작하기"
 		"getStarted": "시작하기"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "URL을 열도록 요청받지 않으면 <clickHere>여기를 클릭</clickHere>하세요.",
 		"noPrompt": "URL을 열도록 요청받지 않으면 <clickHere>여기를 클릭</clickHere>하세요.",
 		"havingTrouble": "가입을 완료했지만 문제가 있으면 <clickHere>여기를 클릭</clickHere>하세요.",
 		"havingTrouble": "가입을 완료했지만 문제가 있으면 <clickHere>여기를 클릭</clickHere>하세요.",
 		"pasteUrl": "브라우저에서 콜백 URL을 붙여넣으세요:",
 		"pasteUrl": "브라우저에서 콜백 URL을 붙여넣으세요:",
+		"invalidURL": "유효한 콜백 URL로 보이지 않습니다. Roo Code Cloud에서 브라우저에 표시하는 내용을 복사하세요.",
 		"goBack": "돌아가기"
 		"goBack": "돌아가기"
 	},
 	},
 	"startRouter": "LLM 라우터 사용을 권장합니다:",
 	"startRouter": "LLM 라우터 사용을 권장합니다:",

+ 2 - 1
webview-ui/src/i18n/locales/nl/settings.json

@@ -859,7 +859,8 @@
 		"label": "Model",
 		"label": "Model",
 		"searchPlaceholder": "Zoeken",
 		"searchPlaceholder": "Zoeken",
 		"noMatchFound": "Geen overeenkomsten gevonden",
 		"noMatchFound": "Geen overeenkomsten gevonden",
-		"useCustomModel": "Aangepast gebruiken: {{modelId}}"
+		"useCustomModel": "Aangepast gebruiken: {{modelId}}",
+		"simplifiedExplanation": "Je kunt later gedetailleerde modelinstellingen aanpassen."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Heb je vragen of feedback? Open gerust een issue op <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> of sluit je aan bij <redditLink>reddit.com/r/RooCode</redditLink> of <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Heb je vragen of feedback? Open gerust een issue op <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> of sluit je aan bij <redditLink>reddit.com/r/RooCode</redditLink> of <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/nl/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "meer informatie",
 		"learnMore": "meer informatie",
 		"useAnotherProvider": "Gebruik een andere provider",
 		"useAnotherProvider": "Gebruik een andere provider",
 		"useAnotherProviderDescription": "Voer een API-sleutel in en ga aan de slag.",
 		"useAnotherProviderDescription": "Voer een API-sleutel in en ga aan de slag.",
+		"noApiKeys": "Geen zin in sleutels? Kies dan voor de Roo Code Cloud Provider.",
 		"getStarted": "Beginnen"
 		"getStarted": "Beginnen"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Als je niet wordt gevraagd een URL te openen, <clickHere>klik hier</clickHere>.",
 		"noPrompt": "Als je niet wordt gevraagd een URL te openen, <clickHere>klik hier</clickHere>.",
 		"havingTrouble": "Als je de registratie hebt voltooid maar problemen hebt, <clickHere>klik hier</clickHere>.",
 		"havingTrouble": "Als je de registratie hebt voltooid maar problemen hebt, <clickHere>klik hier</clickHere>.",
 		"pasteUrl": "Plak de callback-URL vanuit je browser:",
 		"pasteUrl": "Plak de callback-URL vanuit je browser:",
+		"invalidURL": "Dat ziet er niet uit als een geldige callback-URL. Kopieer wat Roo Code Cloud in je browser toont.",
 		"goBack": "Terug"
 		"goBack": "Terug"
 	},
 	},
 	"startRouter": "We raden aan om een LLM-router te gebruiken:",
 	"startRouter": "We raden aan om een LLM-router te gebruiken:",

+ 2 - 1
webview-ui/src/i18n/locales/pl/settings.json

@@ -859,7 +859,8 @@
 		"label": "Model",
 		"label": "Model",
 		"searchPlaceholder": "Wyszukaj",
 		"searchPlaceholder": "Wyszukaj",
 		"noMatchFound": "Nie znaleziono dopasowań",
 		"noMatchFound": "Nie znaleziono dopasowań",
-		"useCustomModel": "Użyj niestandardowy: {{modelId}}"
+		"useCustomModel": "Użyj niestandardowy: {{modelId}}",
+		"simplifiedExplanation": "Można dostosować szczegółowe ustawienia modelu później."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Jeśli masz jakiekolwiek pytania lub opinie, śmiało otwórz zgłoszenie na <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> lub dołącz do <redditLink>reddit.com/r/RooCode</redditLink> lub <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Jeśli masz jakiekolwiek pytania lub opinie, śmiało otwórz zgłoszenie na <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> lub dołącz do <redditLink>reddit.com/r/RooCode</redditLink> lub <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/pl/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "dowiedz się więcej",
 		"learnMore": "dowiedz się więcej",
 		"useAnotherProvider": "Użyj innego dostawcy",
 		"useAnotherProvider": "Użyj innego dostawcy",
 		"useAnotherProviderDescription": "Wprowadź klucz API i zacznij.",
 		"useAnotherProviderDescription": "Wprowadź klucz API i zacznij.",
+		"noApiKeys": "Nie chcesz się zajmować kluczami? Wybierz Dostawcę Roo Code Cloud.",
 		"getStarted": "Rozpocznij"
 		"getStarted": "Rozpocznij"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Jeśli nie zostaniesz poproszony o otwarcie adresu URL, <clickHere>kliknij tutaj</clickHere>.",
 		"noPrompt": "Jeśli nie zostaniesz poproszony o otwarcie adresu URL, <clickHere>kliknij tutaj</clickHere>.",
 		"havingTrouble": "Jeśli ukończyłeś rejestrację, ale masz problemy, <clickHere>kliknij tutaj</clickHere>.",
 		"havingTrouble": "Jeśli ukończyłeś rejestrację, ale masz problemy, <clickHere>kliknij tutaj</clickHere>.",
 		"pasteUrl": "Wklej adres URL wywołania zwrotnego z przeglądarki:",
 		"pasteUrl": "Wklej adres URL wywołania zwrotnego z przeglądarki:",
+		"invalidURL": "To nie wygląda na ważny adres URL wywołania zwrotnego. Skopiuj to, co Roo Code Cloud pokazuje w Twojej przeglądarce.",
 		"goBack": "Wróć"
 		"goBack": "Wróć"
 	},
 	},
 	"startRouter": "Zalecamy korzystanie z routera LLM:",
 	"startRouter": "Zalecamy korzystanie z routera LLM:",

+ 2 - 1
webview-ui/src/i18n/locales/pt-BR/settings.json

@@ -859,7 +859,8 @@
 		"label": "Modelo",
 		"label": "Modelo",
 		"searchPlaceholder": "Pesquisar",
 		"searchPlaceholder": "Pesquisar",
 		"noMatchFound": "Nenhuma correspondência encontrada",
 		"noMatchFound": "Nenhuma correspondência encontrada",
-		"useCustomModel": "Usar personalizado: {{modelId}}"
+		"useCustomModel": "Usar personalizado: {{modelId}}",
+		"simplifiedExplanation": "Você pode ajustar as configurações detalhadas do modelo mais tarde."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Se tiver alguma dúvida ou feedback, sinta-se à vontade para abrir um problema em <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> ou juntar-se a <redditLink>reddit.com/r/RooCode</redditLink> ou <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Se tiver alguma dúvida ou feedback, sinta-se à vontade para abrir um problema em <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> ou juntar-se a <redditLink>reddit.com/r/RooCode</redditLink> ou <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/pt-BR/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "saiba mais",
 		"learnMore": "saiba mais",
 		"useAnotherProvider": "Usar outro provedor",
 		"useAnotherProvider": "Usar outro provedor",
 		"useAnotherProviderDescription": "Digite uma chave API e comece.",
 		"useAnotherProviderDescription": "Digite uma chave API e comece.",
+		"noApiKeys": "Não quer lidar com chaves? Escolha o Provedor Roo Code Cloud.",
 		"getStarted": "Começar"
 		"getStarted": "Começar"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Se você não for solicitado a abrir uma URL, <clickHere>clique aqui</clickHere>.",
 		"noPrompt": "Se você não for solicitado a abrir uma URL, <clickHere>clique aqui</clickHere>.",
 		"havingTrouble": "Se você completou o registro mas está tendo problemas, <clickHere>clique aqui</clickHere>.",
 		"havingTrouble": "Se você completou o registro mas está tendo problemas, <clickHere>clique aqui</clickHere>.",
 		"pasteUrl": "Cole a URL de callback do seu navegador:",
 		"pasteUrl": "Cole a URL de callback do seu navegador:",
+		"invalidURL": "Isso não parece uma URL de callback válida. Copie o que o Roo Code Cloud está mostrando no seu navegador.",
 		"goBack": "Voltar"
 		"goBack": "Voltar"
 	},
 	},
 	"startRouter": "Recomendamos usar um roteador LLM:",
 	"startRouter": "Recomendamos usar um roteador LLM:",

+ 2 - 1
webview-ui/src/i18n/locales/ru/settings.json

@@ -859,7 +859,8 @@
 		"label": "Модель",
 		"label": "Модель",
 		"searchPlaceholder": "Поиск",
 		"searchPlaceholder": "Поиск",
 		"noMatchFound": "Совпадений не найдено",
 		"noMatchFound": "Совпадений не найдено",
-		"useCustomModel": "Использовать пользовательскую: {{modelId}}"
+		"useCustomModel": "Использовать пользовательскую: {{modelId}}",
+		"simplifiedExplanation": "Ты сможешь настроить подробные параметры модели позже."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Если у вас есть вопросы или предложения, откройте issue на <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> или присоединяйтесь к <redditLink>reddit.com/r/RooCode</redditLink> или <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Если у вас есть вопросы или предложения, откройте issue на <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> или присоединяйтесь к <redditLink>reddit.com/r/RooCode</redditLink> или <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/ru/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "подробнее",
 		"learnMore": "подробнее",
 		"useAnotherProvider": "Использовать другого провайдера",
 		"useAnotherProvider": "Использовать другого провайдера",
 		"useAnotherProviderDescription": "Введи API-ключ и начни.",
 		"useAnotherProviderDescription": "Введи API-ключ и начни.",
+		"noApiKeys": "Не хочешь заниматься ключами? Выбери Провайдер Roo Code Cloud.",
 		"getStarted": "Начать"
 		"getStarted": "Начать"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Если вас не попросят открыть URL, <clickHere>нажмите здесь</clickHere>.",
 		"noPrompt": "Если вас не попросят открыть URL, <clickHere>нажмите здесь</clickHere>.",
 		"havingTrouble": "Если вы завершили регистрацию, но у вас возникли проблемы, <clickHere>нажмите здесь</clickHere>.",
 		"havingTrouble": "Если вы завершили регистрацию, но у вас возникли проблемы, <clickHere>нажмите здесь</clickHere>.",
 		"pasteUrl": "Вставьте URL обратного вызова из браузера:",
 		"pasteUrl": "Вставьте URL обратного вызова из браузера:",
+		"invalidURL": "Это не похоже на корректный URL обратного вызова. Скопируй то, что показывает Roo Code Cloud в твоем браузере.",
 		"goBack": "Назад"
 		"goBack": "Назад"
 	},
 	},
 	"startRouter": "Мы рекомендуем использовать маршрутизатор LLM:",
 	"startRouter": "Мы рекомендуем использовать маршрутизатор LLM:",

+ 2 - 1
webview-ui/src/i18n/locales/tr/settings.json

@@ -859,7 +859,8 @@
 		"label": "Model",
 		"label": "Model",
 		"searchPlaceholder": "Ara",
 		"searchPlaceholder": "Ara",
 		"noMatchFound": "Eşleşme bulunamadı",
 		"noMatchFound": "Eşleşme bulunamadı",
-		"useCustomModel": "Özel kullan: {{modelId}}"
+		"useCustomModel": "Özel kullan: {{modelId}}",
+		"simplifiedExplanation": "Ayrıntılı model ayarlarını daha sonra ayarlayabilirsiniz."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Herhangi bir sorunuz veya geri bildiriminiz varsa, <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> adresinde bir konu açmaktan veya <redditLink>reddit.com/r/RooCode</redditLink> ya da <discordLink>discord.gg/roocode</discordLink>'a katılmaktan çekinmeyin",
 		"feedback": "Herhangi bir sorunuz veya geri bildiriminiz varsa, <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> adresinde bir konu açmaktan veya <redditLink>reddit.com/r/RooCode</redditLink> ya da <discordLink>discord.gg/roocode</discordLink>'a katılmaktan çekinmeyin",

+ 2 - 0
webview-ui/src/i18n/locales/tr/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "daha fazla bilgi",
 		"learnMore": "daha fazla bilgi",
 		"useAnotherProvider": "Başka bir sağlayıcı kullan",
 		"useAnotherProvider": "Başka bir sağlayıcı kullan",
 		"useAnotherProviderDescription": "Bir API anahtarı gir ve başla.",
 		"useAnotherProviderDescription": "Bir API anahtarı gir ve başla.",
+		"noApiKeys": "Anahtarlarla uğraşmak istemez misin? Roo Code Cloud Sağlayıcısı'nı seç.",
 		"getStarted": "Başla"
 		"getStarted": "Başla"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "URL açmanız istenmezse, <clickHere>buraya tıkla</clickHere>.",
 		"noPrompt": "URL açmanız istenmezse, <clickHere>buraya tıkla</clickHere>.",
 		"havingTrouble": "Kaydı tamamladıysan ama sorun yaşıyorsan, <clickHere>buraya tıkla</clickHere>.",
 		"havingTrouble": "Kaydı tamamladıysan ama sorun yaşıyorsan, <clickHere>buraya tıkla</clickHere>.",
 		"pasteUrl": "Tarayıcınızdan geri arama URL'sini yapıştırın:",
 		"pasteUrl": "Tarayıcınızdan geri arama URL'sini yapıştırın:",
+		"invalidURL": "Bu geçerli bir geri arama URL'si gibi görünmüyor. Roo Code Cloud'un tarayıcında gösterdiği şeyi kopyala.",
 		"goBack": "Geri Dön"
 		"goBack": "Geri Dön"
 	},
 	},
 	"startRouter": "Bir LLM yönlendiricisi kullanmanı öneririz:",
 	"startRouter": "Bir LLM yönlendiricisi kullanmanı öneririz:",

+ 2 - 1
webview-ui/src/i18n/locales/vi/settings.json

@@ -859,7 +859,8 @@
 		"label": "Mô hình",
 		"label": "Mô hình",
 		"searchPlaceholder": "Tìm kiếm",
 		"searchPlaceholder": "Tìm kiếm",
 		"noMatchFound": "Không tìm thấy kết quả",
 		"noMatchFound": "Không tìm thấy kết quả",
-		"useCustomModel": "Sử dụng tùy chỉnh: {{modelId}}"
+		"useCustomModel": "Sử dụng tùy chỉnh: {{modelId}}",
+		"simplifiedExplanation": "Bạn có thể điều chỉnh cài đặt mô hình chi tiết sau."
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng mở một vấn đề tại <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> hoặc tham gia <redditLink>reddit.com/r/RooCode</redditLink> hoặc <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng mở một vấn đề tại <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> hoặc tham gia <redditLink>reddit.com/r/RooCode</redditLink> hoặc <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/vi/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "tìm hiểu thêm",
 		"learnMore": "tìm hiểu thêm",
 		"useAnotherProvider": "Sử dụng nhà cung cấp khác",
 		"useAnotherProvider": "Sử dụng nhà cung cấp khác",
 		"useAnotherProviderDescription": "Nhập khóa API và bắt đầu.",
 		"useAnotherProviderDescription": "Nhập khóa API và bắt đầu.",
+		"noApiKeys": "Không muốn phải xử lý các khóa? Hãy sử dụng Nhà cung cấp Roo Code Cloud.",
 		"getStarted": "Bắt đầu"
 		"getStarted": "Bắt đầu"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "Nếu bạn không được nhắc mở URL, <clickHere>hãy nhấp vào đây</clickHere>.",
 		"noPrompt": "Nếu bạn không được nhắc mở URL, <clickHere>hãy nhấp vào đây</clickHere>.",
 		"havingTrouble": "Nếu bạn đã hoàn thành đăng ký nhưng gặp sự cố, <clickHere>hãy nhấp vào đây</clickHere>.",
 		"havingTrouble": "Nếu bạn đã hoàn thành đăng ký nhưng gặp sự cố, <clickHere>hãy nhấp vào đây</clickHere>.",
 		"pasteUrl": "Dán URL callback từ trình duyệt của bạn:",
 		"pasteUrl": "Dán URL callback từ trình duyệt của bạn:",
+		"invalidURL": "Điều đó không giống như một URL callback hợp lệ. Vui lòng sao chép những gì Roo Code Cloud đang hiển thị trong trình duyệt của bạn.",
 		"goBack": "Quay lại"
 		"goBack": "Quay lại"
 	},
 	},
 	"startRouter": "Chúng tôi khuyên bạn nên sử dụng bộ định tuyến LLM:",
 	"startRouter": "Chúng tôi khuyên bạn nên sử dụng bộ định tuyến LLM:",

+ 2 - 1
webview-ui/src/i18n/locales/zh-CN/settings.json

@@ -859,7 +859,8 @@
 		"label": "模型",
 		"label": "模型",
 		"searchPlaceholder": "搜索",
 		"searchPlaceholder": "搜索",
 		"noMatchFound": "未找到匹配项",
 		"noMatchFound": "未找到匹配项",
-		"useCustomModel": "使用自定义:{{modelId}}"
+		"useCustomModel": "使用自定义:{{modelId}}",
+		"simplifiedExplanation": "你可以稍后调整详细的模型设置。"
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "如果您有任何问题或反馈,请随时在 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> 上提出问题或加入 <redditLink>reddit.com/r/RooCode</redditLink> 或 <discordLink>discord.gg/roocode</discordLink>",
 		"feedback": "如果您有任何问题或反馈,请随时在 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> 上提出问题或加入 <redditLink>reddit.com/r/RooCode</redditLink> 或 <discordLink>discord.gg/roocode</discordLink>",

+ 2 - 0
webview-ui/src/i18n/locales/zh-CN/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "了解更多",
 		"learnMore": "了解更多",
 		"useAnotherProvider": "使用其他提供商",
 		"useAnotherProvider": "使用其他提供商",
 		"useAnotherProviderDescription": "输入 API 密钥即可开始。",
 		"useAnotherProviderDescription": "输入 API 密钥即可开始。",
+		"noApiKeys": "不想处理密钥?选择 Roo Code Cloud 提供商吧。",
 		"getStarted": "开始使用"
 		"getStarted": "开始使用"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "如果你未被提示打开 URL,<clickHere>请点击此处</clickHere>。",
 		"noPrompt": "如果你未被提示打开 URL,<clickHere>请点击此处</clickHere>。",
 		"havingTrouble": "如果你已完成注册但遇到问题,<clickHere>请点击此处</clickHere>。",
 		"havingTrouble": "如果你已完成注册但遇到问题,<clickHere>请点击此处</clickHere>。",
 		"pasteUrl": "从浏览器粘贴回调 URL:",
 		"pasteUrl": "从浏览器粘贴回调 URL:",
+		"invalidURL": "这看起来不像是有效的回调 URL。请复制 Roo Code Cloud 在你的浏览器中显示的内容。",
 		"goBack": "返回"
 		"goBack": "返回"
 	},
 	},
 	"startRouter": "我们推荐使用 LLM 路由器:",
 	"startRouter": "我们推荐使用 LLM 路由器:",

+ 2 - 1
webview-ui/src/i18n/locales/zh-TW/settings.json

@@ -859,7 +859,8 @@
 		"label": "模型",
 		"label": "模型",
 		"searchPlaceholder": "搜尋",
 		"searchPlaceholder": "搜尋",
 		"noMatchFound": "找不到符合的項目",
 		"noMatchFound": "找不到符合的項目",
-		"useCustomModel": "使用自訂模型:{{modelId}}"
+		"useCustomModel": "使用自訂模型:{{modelId}}",
+		"simplifiedExplanation": "你可以稍後調整詳細的模型設定。"
 	},
 	},
 	"footer": {
 	"footer": {
 		"feedback": "若您有任何問題或建議,歡迎至 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> 提出 issue,或加入 <redditLink>reddit.com/r/RooCode</redditLink> 或 <discordLink>discord.gg/roocode</discordLink> 討論。",
 		"feedback": "若您有任何問題或建議,歡迎至 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> 提出 issue,或加入 <redditLink>reddit.com/r/RooCode</redditLink> 或 <discordLink>discord.gg/roocode</discordLink> 討論。",

+ 2 - 0
webview-ui/src/i18n/locales/zh-TW/welcome.json

@@ -23,6 +23,7 @@
 		"learnMore": "了解更多",
 		"learnMore": "了解更多",
 		"useAnotherProvider": "使用其他提供者",
 		"useAnotherProvider": "使用其他提供者",
 		"useAnotherProviderDescription": "輸入 API 金鑰即可開始。",
 		"useAnotherProviderDescription": "輸入 API 金鑰即可開始。",
+		"noApiKeys": "不想處理金鑰?選擇 Roo Code Cloud 提供者吧。",
 		"getStarted": "開始使用"
 		"getStarted": "開始使用"
 	},
 	},
 	"waitingForCloud": {
 	"waitingForCloud": {
@@ -31,6 +32,7 @@
 		"noPrompt": "如果您未被提示開啟 URL,<clickHere>請點擊此處</clickHere>。",
 		"noPrompt": "如果您未被提示開啟 URL,<clickHere>請點擊此處</clickHere>。",
 		"havingTrouble": "如果您已完成註冊但遇到問題,<clickHere>請點擊此處</clickHere>。",
 		"havingTrouble": "如果您已完成註冊但遇到問題,<clickHere>請點擊此處</clickHere>。",
 		"pasteUrl": "從瀏覽器貼上回呼 URL:",
 		"pasteUrl": "從瀏覽器貼上回呼 URL:",
+		"invalidURL": "這看起來不像是有效的回呼 URL。請複製 Roo Code Cloud 在您的瀏覽器中顯示的內容。",
 		"goBack": "返回"
 		"goBack": "返回"
 	},
 	},
 	"startRouter": "我們建議使用 LLM 路由器:",
 	"startRouter": "我們建議使用 LLM 路由器:",