Explorar el Código

feature: Closable welcome message (#2541)

* draft: try to add a setting button

* Add showGreeting setting and related changes

* i18n: showGreeting

* fix chinese i18n 'dot'
Zhang Tony hace 10 meses
padre
commit
d3c65ceac6

+ 3 - 0
src/core/webview/ClineProvider.ts

@@ -1242,6 +1242,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			telemetrySetting,
 			showRooIgnoredFiles,
 			language,
+			showGreeting,
 			maxReadFileLine,
 		} = await this.getState()
 
@@ -1323,6 +1324,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			renderContext: this.renderContext,
 			maxReadFileLine: maxReadFileLine ?? 500,
 			settingsImportedAt: this.settingsImportedAt,
+			showGreeting: showGreeting ?? true, // Ensure showGreeting is included in the returned state
 		}
 	}
 
@@ -1410,6 +1412,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			telemetrySetting: stateValues.telemetrySetting || "unset",
 			showRooIgnoredFiles: stateValues.showRooIgnoredFiles ?? true,
 			maxReadFileLine: stateValues.maxReadFileLine ?? 500,
+			showGreeting: stateValues.showGreeting ?? true, // Ensure showGreeting is returned by getState
 		}
 	}
 

+ 5 - 0
src/core/webview/webviewMessageHandler.ts

@@ -645,6 +645,11 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
 			await updateGlobalState("diffEnabled", diffEnabled)
 			await provider.postStateToWebview()
 			break
+		case "showGreeting":
+			const showGreeting = message.bool ?? true
+			await updateGlobalState("showGreeting", showGreeting)
+			await provider.postStateToWebview()
+			break
 		case "enableCheckpoints":
 			const enableCheckpoints = message.bool ?? true
 			await updateGlobalState("enableCheckpoints", enableCheckpoints)

+ 1 - 0
src/exports/roo-code.d.ts

@@ -258,6 +258,7 @@ type GlobalSettings = {
 	cachedChromeHostUrl?: string | undefined
 	enableCheckpoints?: boolean | undefined
 	checkpointStorage?: ("task" | "workspace") | undefined
+	showGreeting?: boolean | undefined
 	ttsEnabled?: boolean | undefined
 	ttsSpeed?: number | undefined
 	soundEnabled?: boolean | undefined

+ 1 - 0
src/exports/types.ts

@@ -261,6 +261,7 @@ type GlobalSettings = {
 	cachedChromeHostUrl?: string | undefined
 	enableCheckpoints?: boolean | undefined
 	checkpointStorage?: ("task" | "workspace") | undefined
+	showGreeting?: boolean | undefined
 	ttsEnabled?: boolean | undefined
 	ttsSpeed?: number | undefined
 	soundEnabled?: boolean | undefined

+ 4 - 0
src/schemas/index.ts

@@ -534,6 +534,8 @@ export const globalSettingsSchema = z.object({
 	enableCheckpoints: z.boolean().optional(),
 	checkpointStorage: checkpointStoragesSchema.optional(),
 
+	showGreeting: z.boolean().optional(),
+
 	ttsEnabled: z.boolean().optional(),
 	ttsSpeed: z.number().optional(),
 	soundEnabled: z.boolean().optional(),
@@ -610,6 +612,8 @@ const globalSettingsRecord: GlobalSettingsRecord = {
 	enableCheckpoints: undefined,
 	checkpointStorage: undefined,
 
+	showGreeting: undefined,
+
 	ttsEnabled: undefined,
 	ttsSpeed: undefined,
 	soundEnabled: undefined,

+ 1 - 0
src/shared/ExtensionMessage.ts

@@ -143,6 +143,7 @@ export type ExtensionState = Pick<
 	| "remoteBrowserHost"
 	// | "enableCheckpoints" // Optional in GlobalSettings, required here.
 	// | "checkpointStorage" // Optional in GlobalSettings, required here.
+	| "showGreeting"
 	| "ttsEnabled"
 	| "ttsSpeed"
 	| "soundEnabled"

+ 1 - 0
src/shared/WebviewMessage.ts

@@ -126,6 +126,7 @@ export interface WebviewMessage {
 		| "maxReadFileLine"
 		| "searchFiles"
 		| "toggleApiConfigPin"
+		| "showGreeting"
 	text?: string
 	disabled?: boolean
 	askResponse?: ClineAskResponse

+ 7 - 5
webview-ui/src/components/chat/ChatView.tsx

@@ -69,6 +69,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 		alwaysAllowSubtasks,
 		customModes,
 		telemetrySetting,
+		showGreeting,
 	} = useExtensionState()
 
 	//const task = messages.length > 0 ? (messages[0].say === "task" ? messages[0] : undefined) : undefined) : undefined
@@ -95,7 +96,6 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 	const [showScrollToBottom, setShowScrollToBottom] = useState(false)
 	const [isAtBottom, setIsAtBottom] = useState(false)
 	const lastTtsRef = useRef<string>("")
-
 	const [wasStreaming, setWasStreaming] = useState<boolean>(false)
 	const [showCheckpointWarning, setShowCheckpointWarning] = useState<boolean>(false)
 
@@ -1207,10 +1207,12 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 					}}>
 					{telemetrySetting === "unset" && <TelemetryBanner />}
 					{showAnnouncement && <Announcement version={version} hideAnnouncement={hideAnnouncement} />}
-					<div style={{ padding: "0 20px", flexShrink: 0 }}>
-						<h2>{t("chat:greeting")}</h2>
-						<p>{t("chat:aboutMe")}</p>
-					</div>
+					{showGreeting === true && (
+						<div style={{ padding: "0 20px", flexShrink: 0 }}>
+							<h2>{t("chat:greeting")}</h2>
+							<p>{t("chat:aboutMe")}</p>
+						</div>
+					)}
 					{taskHistory.length > 0 && <HistoryPreview showHistoryView={showHistoryView} />}
 				</div>
 			)}

+ 40 - 0
webview-ui/src/components/settings/InterfaceSettings.tsx

@@ -0,0 +1,40 @@
+import { HTMLAttributes } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
+import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
+import { Monitor } from "lucide-react"
+
+import { SetCachedStateField } from "./types"
+import { SectionHeader } from "./SectionHeader"
+import { Section } from "./Section"
+
+type InterfaceSettingsProps = HTMLAttributes<HTMLDivElement> & {
+	showGreeting?: boolean
+	setCachedStateField: SetCachedStateField<"showGreeting">
+}
+
+export const InterfaceSettings = ({ showGreeting, setCachedStateField, ...props }: InterfaceSettingsProps) => {
+	const { t } = useAppTranslation()
+	return (
+		<div {...props}>
+			<SectionHeader>
+				<div className="flex items-center gap-2">
+					<Monitor className="w-4" />
+					<div>{t("settings:sections.interface")}</div>
+				</div>
+			</SectionHeader>
+
+			<Section>
+				<div>
+					<VSCodeCheckbox
+						checked={showGreeting}
+						onChange={(e: any) => setCachedStateField("showGreeting", e.target.checked)}>
+						<span className="font-medium">{t("settings:interface.showgreeting.label")}</span>
+					</VSCodeCheckbox>
+					<div className="text-vscode-descriptionForeground text-sm mt-1">
+						{t("settings:interface.showgreeting.description")}
+					</div>
+				</div>
+			</Section>
+		</div>
+	)
+}

+ 12 - 0
webview-ui/src/components/settings/SettingsView.tsx

@@ -14,6 +14,7 @@ import {
 	Globe,
 	Info,
 	LucideIcon,
+	Monitor,
 } from "lucide-react"
 import { CaretSortIcon } from "@radix-ui/react-icons"
 
@@ -47,6 +48,7 @@ import ApiOptions from "./ApiOptions"
 import { AutoApproveSettings } from "./AutoApproveSettings"
 import { BrowserSettings } from "./BrowserSettings"
 import { CheckpointSettings } from "./CheckpointSettings"
+import { InterfaceSettings } from "./InterfaceSettings"
 import { NotificationSettings } from "./NotificationSettings"
 import { ContextManagementSettings } from "./ContextManagementSettings"
 import { TerminalSettings } from "./TerminalSettings"
@@ -65,6 +67,7 @@ const sectionNames = [
 	"autoApprove",
 	"browser",
 	"checkpoints",
+	"interface",
 	"notifications",
 	"contextManagement",
 	"terminal",
@@ -139,6 +142,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 		showRooIgnoredFiles,
 		remoteBrowserEnabled,
 		maxReadFileLine,
+		showGreeting,
 	} = cachedState
 
 	// Make sure apiConfiguration is initialized and managed by SettingsView.
@@ -262,6 +266,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 			vscode.postMessage({ type: "alwaysAllowSubtasks", bool: alwaysAllowSubtasks })
 			vscode.postMessage({ type: "upsertApiConfiguration", text: currentApiConfigName, apiConfiguration })
 			vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting })
+			vscode.postMessage({ type: "showGreeting", bool: showGreeting })
 			setChangeDetected(false)
 		}
 	}
@@ -290,6 +295,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 	const autoApproveRef = useRef<HTMLDivElement>(null)
 	const browserRef = useRef<HTMLDivElement>(null)
 	const checkpointsRef = useRef<HTMLDivElement>(null)
+	const interfaceRef = useRef<HTMLDivElement>(null)
 	const notificationsRef = useRef<HTMLDivElement>(null)
 	const contextManagementRef = useRef<HTMLDivElement>(null)
 	const terminalRef = useRef<HTMLDivElement>(null)
@@ -304,6 +310,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 			{ id: "autoApprove", icon: CheckCheck, ref: autoApproveRef },
 			{ id: "browser", icon: SquareMousePointer, ref: browserRef },
 			{ id: "checkpoints", icon: GitBranch, ref: checkpointsRef },
+			{ id: "interface", icon: Monitor, ref: interfaceRef },
 			{ id: "notifications", icon: Bell, ref: notificationsRef },
 			{ id: "contextManagement", icon: Database, ref: contextManagementRef },
 			{ id: "terminal", icon: SquareTerminal, ref: terminalRef },
@@ -317,6 +324,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 			autoApproveRef,
 			browserRef,
 			checkpointsRef,
+			interfaceRef,
 			notificationsRef,
 			contextManagementRef,
 			terminalRef,
@@ -469,6 +477,10 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
 					/>
 				</div>
 
+				<div ref={interfaceRef}>
+					<InterfaceSettings showGreeting={showGreeting} setCachedStateField={setCachedStateField} />
+				</div>
+
 				<div ref={notificationsRef}>
 					<NotificationSettings
 						ttsEnabled={ttsEnabled}

+ 3 - 0
webview-ui/src/context/ExtensionStateContext.tsx

@@ -86,6 +86,7 @@ export interface ExtensionStateContextType extends ExtensionState {
 	pinnedApiConfigs?: Record<string, boolean>
 	setPinnedApiConfigs: (value: Record<string, boolean>) => void
 	togglePinnedApiConfig: (configName: string) => void
+	setShowGreeting: (value: boolean) => void
 }
 
 export const ExtensionStateContext = createContext<ExtensionStateContextType | undefined>(undefined)
@@ -123,6 +124,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 		clineMessages: [],
 		taskHistory: [],
 		shouldShowAnnouncement: false,
+		showGreeting: true,
 		allowedCommands: [],
 		soundEnabled: false,
 		soundVolume: 0.5,
@@ -316,6 +318,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
 		setAwsUsePromptCache: (value) => setState((prevState) => ({ ...prevState, awsUsePromptCache: value })),
 		setMaxReadFileLine: (value) => setState((prevState) => ({ ...prevState, maxReadFileLine: value })),
 		setPinnedApiConfigs: (value) => setState((prevState) => ({ ...prevState, pinnedApiConfigs: value })),
+		setShowGreeting: (value) => setState((prevState) => ({ ...prevState, showGreeting: value })),
 		togglePinnedApiConfig: (configId) =>
 			setState((prevState) => {
 				const currentPinned = prevState.pinnedApiConfigs || {}

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

@@ -29,7 +29,8 @@
 		"advanced": "Avançat",
 		"experimental": "Funcions experimentals",
 		"language": "Idioma",
-		"about": "Sobre Roo Code"
+		"about": "Sobre Roo Code",
+		"interface": "Interfície"
 	},
 	"autoApprove": {
 		"description": "Permet que Roo realitzi operacions automàticament sense requerir aprovació. Activeu aquesta configuració només si confieu plenament en la IA i enteneu els riscos de seguretat associats.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "ARN personalitzat",
 		"useCustomArn": "Utilitza ARN personalitzat..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Mostrar missatge de benvinguda",
+			"description": "Quan està activat, Roo mostrarà un missatge de benvinguda i introducció."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Erweitert",
 		"experimental": "Experimentelle Funktionen",
 		"language": "Sprache",
-		"about": "Über Roo Code"
+		"about": "Über Roo Code",
+		"interface": "Oberfläche"
 	},
 	"autoApprove": {
 		"description": "Erlaubt Roo, Operationen automatisch ohne Genehmigung durchzuführen. Aktiviere diese Einstellungen nur, wenn du der KI vollständig vertraust und die damit verbundenen Sicherheitsrisiken verstehst.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "Benutzerdefinierte ARN",
 		"useCustomArn": "Benutzerdefinierte ARN verwenden..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Begrüßungsnachricht anzeigen",
+			"description": "Wenn aktiviert, zeigt Roo eine Willkommensnachricht und Einführung an."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Advanced",
 		"experimental": "Experimental Features",
 		"language": "Language",
-		"about": "About Roo Code"
+		"about": "About Roo Code",
+		"interface": "Interface"
 	},
 	"autoApprove": {
 		"description": "Allow Roo to automatically perform operations without requiring approval. Enable these settings only if you fully trust the AI and understand the associated security risks.",
@@ -470,5 +471,11 @@
 	"labels": {
 		"customArn": "Custom ARN",
 		"useCustomArn": "Use custom ARN..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Show greeting message",
+			"description": "When enabled, Roo will display a welcome message and introduction."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Avanzado",
 		"experimental": "Funciones experimentales",
 		"language": "Idioma",
-		"about": "Acerca de Roo Code"
+		"about": "Acerca de Roo Code",
+		"interface": "Interfaz"
 	},
 	"autoApprove": {
 		"description": "Permitir que Roo realice operaciones automáticamente sin requerir aprobación. Habilite esta configuración solo si confía plenamente en la IA y comprende los riesgos de seguridad asociados.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "ARN personalizado",
 		"useCustomArn": "Usar ARN personalizado..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Mostrar mensaje de bienvenida",
+			"description": "Cuando está habilitado, Roo mostrará un mensaje de bienvenida e introducción."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Avancé",
 		"experimental": "Fonctionnalités expérimentales",
 		"language": "Langue",
-		"about": "À propos de Roo Code"
+		"about": "À propos de Roo Code",
+		"interface": "Interface"
 	},
 	"autoApprove": {
 		"description": "Permettre à Roo d'effectuer automatiquement des opérations sans requérir d'approbation. Activez ces paramètres uniquement si vous faites entièrement confiance à l'IA et que vous comprenez les risques de sécurité associés.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "ARN personnalisé",
 		"useCustomArn": "Utiliser un ARN personnalisé..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Afficher le message de bienvenue",
+			"description": "Lorsque cette option est activée, Roo affichera un message de bienvenue et une introduction."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "उन्नत",
 		"experimental": "प्रायोगिक सुविधाएँ",
 		"language": "भाषा",
-		"about": "Roo Code के बारे में"
+		"about": "Roo Code के बारे में",
+		"interface": "इंटरफ़ेस"
 	},
 	"autoApprove": {
 		"description": "Roo को अनुमोदन की आवश्यकता के बिना स्वचालित रूप से ऑपरेशन करने की अनुमति दें। इन सेटिंग्स को केवल तभी सक्षम करें जब आप AI पर पूरी तरह से भरोसा करते हों और संबंधित सुरक्षा जोखिमों को समझते हों।",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "कस्टम ARN",
 		"useCustomArn": "कस्टम ARN का उपयोग करें..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "स्वागत संदेश दिखाएँ",
+			"description": "जब सक्षम किया जाता है, तो Roo एक स्वागत संदेश और परिचय प्रदर्शित करेगा।"
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Avanzate",
 		"experimental": "Funzionalità sperimentali",
 		"language": "Lingua",
-		"about": "Informazioni su Roo Code"
+		"about": "Informazioni su Roo Code",
+		"interface": "Interfaccia"
 	},
 	"autoApprove": {
 		"description": "Permetti a Roo di eseguire automaticamente operazioni senza richiedere approvazione. Abilita queste impostazioni solo se ti fidi completamente dell'IA e comprendi i rischi di sicurezza associati.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "ARN personalizzato",
 		"useCustomArn": "Usa ARN personalizzato..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Mostra messaggio di benvenuto",
+			"description": "Quando abilitato, Roo mostrerà un messaggio di benvenuto e un'introduzione."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "詳細設定",
 		"experimental": "実験的機能",
 		"language": "言語",
-		"about": "Roo Codeについて"
+		"about": "Roo Codeについて",
+		"interface": "インターフェース"
 	},
 	"autoApprove": {
 		"description": "Rooが承認なしで自動的に操作を実行できるようにします。AIを完全に信頼し、関連するセキュリティリスクを理解している場合にのみ、これらの設定を有効にしてください。",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "カスタム ARN",
 		"useCustomArn": "カスタム ARN を使用..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "ようこそメッセージを表示",
+			"description": "有効にすると、Rooはようこそメッセージと紹介を表示します。"
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "고급",
 		"experimental": "실험적 기능",
 		"language": "언어",
-		"about": "Roo Code 정보"
+		"about": "Roo Code 정보",
+		"interface": "인터페이스"
 	},
 	"autoApprove": {
 		"description": "Roo가 승인 없이 자동으로 작업을 수행할 수 있도록 허용합니다. AI를 완전히 신뢰하고 관련 보안 위험을 이해하는 경우에만 이러한 설정을 활성화하세요.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "사용자 지정 ARN",
 		"useCustomArn": "사용자 지정 ARN 사용..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "환영 메시지 표시",
+			"description": "활성화하면 Roo가 환영 메시지와 소개를 표시합니다."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Zaawansowane",
 		"experimental": "Funkcje eksperymentalne",
 		"language": "Język",
-		"about": "O Roo Code"
+		"about": "O Roo Code",
+		"interface": "Interfejs"
 	},
 	"autoApprove": {
 		"description": "Pozwól Roo na automatyczne wykonywanie operacji bez wymagania zatwierdzenia. Włącz te ustawienia tylko jeśli w pełni ufasz AI i rozumiesz związane z tym zagrożenia bezpieczeństwa.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "Niestandardowy ARN",
 		"useCustomArn": "Użyj niestandardowego ARN..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Pokaż wiadomość powitalną",
+			"description": "Gdy włączone, Roo wyświetli wiadomość powitalną i wprowadzenie."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Avançado",
 		"experimental": "Recursos experimentais",
 		"language": "Idioma",
-		"about": "Sobre o Roo Code"
+		"about": "Sobre o Roo Code",
+		"interface": "Interface"
 	},
 	"autoApprove": {
 		"description": "Permitir que o Roo realize operações automaticamente sem exigir aprovação. Ative essas configurações apenas se confiar totalmente na IA e compreender os riscos de segurança associados.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "ARN personalizado",
 		"useCustomArn": "Usar ARN personalizado..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Mostrar mensagem de boas-vindas",
+			"description": "Quando ativado, o Roo exibirá uma mensagem de boas-vindas e introdução."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Gelişmiş",
 		"experimental": "Deneysel Özellikler",
 		"language": "Dil",
-		"about": "Roo Code Hakkında"
+		"about": "Roo Code Hakkında",
+		"interface": "Arayüz"
 	},
 	"autoApprove": {
 		"description": "Roo'nun onay gerektirmeden otomatik olarak işlemler gerçekleştirmesine izin verin. Bu ayarları yalnızca yapay zekaya tamamen güveniyorsanız ve ilgili güvenlik risklerini anlıyorsanız etkinleştirin.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "Özel ARN",
 		"useCustomArn": "Özel ARN kullan..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Karşılama mesajını göster",
+			"description": "Etkinleştirildiğinde, Roo bir karşılama mesajı ve tanıtım gösterecektir."
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "Nâng cao",
 		"experimental": "Tính năng thử nghiệm",
 		"language": "Ngôn ngữ",
-		"about": "Về Roo Code"
+		"about": "Về Roo Code",
+		"interface": "Giao diện"
 	},
 	"autoApprove": {
 		"description": "Cho phép Roo tự động thực hiện các hoạt động mà không cần phê duyệt. Chỉ bật những cài đặt này nếu bạn hoàn toàn tin tưởng AI và hiểu rõ các rủi ro bảo mật liên quan.",
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "ARN tùy chỉnh",
 		"useCustomArn": "Sử dụng ARN tùy chỉnh..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "Hiển thị thông báo chào mừng",
+			"description": "Khi được bật, Roo sẽ hiển thị thông báo chào mừng và giới thiệu."
+		}
 	}
 }

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

@@ -21,8 +21,9 @@
 	"sections": {
 		"providers": "提供商",
 		"autoApprove": "自动批准",
-		"browser": "浏览器交互设置",
+		"browser": "浏览器交互",
 		"checkpoints": "检查点",
+		"interface": "界面内容",
 		"notifications": "通知",
 		"contextManagement": "上下文管理",
 		"terminal": "终端",
@@ -258,7 +259,7 @@
 	"checkpoints": {
 		"enable": {
 			"label": "启用自动检查点",
-			"description": "开启后自动创建任务检查点,方便回溯修改"
+			"description": "开启后自动创建任务检查点,方便回溯修改"
 		}
 	},
 	"notifications": {
@@ -471,5 +472,11 @@
 	"labels": {
 		"customArn": "自定义 ARN",
 		"useCustomArn": "使用自定义 ARN..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "显示欢迎消息",
+			"description": "启用后,Roo 将显示欢迎语和简介。"
+		}
 	}
 }

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

@@ -29,7 +29,8 @@
 		"advanced": "進階",
 		"experimental": "實驗性功能",
 		"language": "語言",
-		"about": "關於 Roo Code"
+		"about": "關於 Roo Code",
+		"interface": "介面"
 	},
 	"autoApprove": {
 		"description": "允許 Roo 無需核准即執行操作。僅在您完全信任 AI 並了解相關安全風險時啟用這些設定。",
@@ -470,5 +471,11 @@
 	"labels": {
 		"customArn": "自訂 ARN",
 		"useCustomArn": "使用自訂 ARN..."
+	},
+	"interface": {
+		"showgreeting": {
+			"label": "顯示歡迎訊息",
+			"description": "啟用後,Roo 將顯示歡迎訊息與介紹。"
+		}
 	}
 }