Просмотр исходного кода

feat: rename Account tab to Cloud tab (#7558)

Co-authored-by: Roo Code <[email protected]>
Co-authored-by: Matt Rubens <[email protected]>
roomote[bot] 4 месяцев назад
Родитель
Сommit
f5e0525536
49 измененных файлов с 114 добавлено и 109 удалено
  1. 1 1
      packages/types/src/vscode.ts
  2. 3 3
      src/activate/registerCommands.ts
  3. 1 1
      src/core/webview/ClineProvider.ts
  4. 3 3
      src/core/webview/webviewMessageHandler.ts
  5. 5 5
      src/package.json
  6. 1 1
      src/package.nls.ca.json
  7. 1 1
      src/package.nls.de.json
  8. 1 1
      src/package.nls.es.json
  9. 1 1
      src/package.nls.fr.json
  10. 1 1
      src/package.nls.hi.json
  11. 1 1
      src/package.nls.id.json
  12. 1 1
      src/package.nls.it.json
  13. 1 1
      src/package.nls.ja.json
  14. 1 1
      src/package.nls.json
  15. 1 1
      src/package.nls.ko.json
  16. 1 1
      src/package.nls.nl.json
  17. 1 1
      src/package.nls.pl.json
  18. 1 1
      src/package.nls.pt-BR.json
  19. 1 1
      src/package.nls.ru.json
  20. 1 1
      src/package.nls.tr.json
  21. 1 1
      src/package.nls.vi.json
  22. 1 1
      src/package.nls.zh-CN.json
  23. 1 1
      src/package.nls.zh-TW.json
  24. 1 1
      src/shared/ExtensionMessage.ts
  25. 2 2
      src/shared/WebviewMessage.ts
  26. 6 6
      webview-ui/src/App.tsx
  27. 4 4
      webview-ui/src/__tests__/App.spec.tsx
  28. 6 6
      webview-ui/src/components/chat/ShareButton.tsx
  29. 7 7
      webview-ui/src/components/chat/__tests__/TaskActions.spec.tsx
  30. 21 16
      webview-ui/src/components/cloud/CloudView.tsx
  31. 18 18
      webview-ui/src/components/cloud/__tests__/CloudView.spec.tsx
  32. 1 1
      webview-ui/src/i18n/locales/ca/cloud.json
  33. 1 1
      webview-ui/src/i18n/locales/de/cloud.json
  34. 1 1
      webview-ui/src/i18n/locales/en/cloud.json
  35. 1 1
      webview-ui/src/i18n/locales/es/cloud.json
  36. 1 1
      webview-ui/src/i18n/locales/fr/cloud.json
  37. 1 1
      webview-ui/src/i18n/locales/hi/cloud.json
  38. 1 1
      webview-ui/src/i18n/locales/id/cloud.json
  39. 1 1
      webview-ui/src/i18n/locales/it/cloud.json
  40. 1 1
      webview-ui/src/i18n/locales/ja/cloud.json
  41. 1 1
      webview-ui/src/i18n/locales/ko/cloud.json
  42. 1 1
      webview-ui/src/i18n/locales/nl/cloud.json
  43. 1 1
      webview-ui/src/i18n/locales/pl/cloud.json
  44. 1 1
      webview-ui/src/i18n/locales/pt-BR/cloud.json
  45. 1 1
      webview-ui/src/i18n/locales/ru/cloud.json
  46. 1 1
      webview-ui/src/i18n/locales/tr/cloud.json
  47. 1 1
      webview-ui/src/i18n/locales/vi/cloud.json
  48. 1 1
      webview-ui/src/i18n/locales/zh-CN/cloud.json
  49. 1 1
      webview-ui/src/i18n/locales/zh-TW/cloud.json

+ 1 - 1
packages/types/src/vscode.ts

@@ -35,7 +35,7 @@ export const commandIds = [
 	"historyButtonClicked",
 	"marketplaceButtonClicked",
 	"popoutButtonClicked",
-	"accountButtonClicked",
+	"cloudButtonClicked",
 	"settingsButtonClicked",
 
 	"openInNewTab",

+ 3 - 3
src/activate/registerCommands.ts

@@ -74,16 +74,16 @@ export const registerCommands = (options: RegisterCommandOptions) => {
 
 const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOptions): Record<CommandId, any> => ({
 	activationCompleted: () => {},
-	accountButtonClicked: () => {
+	cloudButtonClicked: () => {
 		const visibleProvider = getVisibleProviderOrLog(outputChannel)
 
 		if (!visibleProvider) {
 			return
 		}
 
-		TelemetryService.instance.captureTitleButtonClicked("account")
+		TelemetryService.instance.captureTitleButtonClicked("cloud")
 
-		visibleProvider.postMessageToWebview({ type: "action", action: "accountButtonClicked" })
+		visibleProvider.postMessageToWebview({ type: "action", action: "cloudButtonClicked" })
 	},
 	plusButtonClicked: async () => {
 		const visibleProvider = getVisibleProviderOrLog(outputChannel)

+ 1 - 1
src/core/webview/ClineProvider.ts

@@ -1395,7 +1395,7 @@ export class ClineProvider
 		// Check MDM compliance and send user to account tab if not compliant
 		// Only redirect if there's an actual MDM policy requiring authentication
 		if (this.mdmService?.requiresCloudAuth() && !this.checkMdmCompliance()) {
-			await this.postMessageToWebview({ type: "action", action: "accountButtonClicked" })
+			await this.postMessageToWebview({ type: "action", action: "cloudButtonClicked" })
 		}
 	}
 

+ 3 - 3
src/core/webview/webviewMessageHandler.ts

@@ -2028,9 +2028,9 @@ export const webviewMessageHandler = async (
 			await provider.postStateToWebview()
 			break
 		}
-		case "accountButtonClicked": {
-			// Navigate to the account tab.
-			provider.postMessageToWebview({ type: "action", action: "accountButtonClicked" })
+		case "cloudButtonClicked": {
+			// Navigate to the cloud tab.
+			provider.postMessageToWebview({ type: "action", action: "cloudButtonClicked" })
 			break
 		}
 		case "rooCloudSignIn": {

+ 5 - 5
src/package.json

@@ -101,9 +101,9 @@
 				"icon": "$(link-external)"
 			},
 			{
-				"command": "roo-cline.accountButtonClicked",
-				"title": "%command.account.title%",
-				"icon": "$(account)"
+				"command": "roo-cline.cloudButtonClicked",
+				"title": "%command.cloud.title%",
+				"icon": "$(cloud)"
 			},
 			{
 				"command": "roo-cline.settingsButtonClicked",
@@ -234,7 +234,7 @@
 					"when": "view == roo-cline.SidebarProvider"
 				},
 				{
-					"command": "roo-cline.accountButtonClicked",
+					"command": "roo-cline.cloudButtonClicked",
 					"group": "navigation@4",
 					"when": "view == roo-cline.SidebarProvider"
 				},
@@ -276,7 +276,7 @@
 					"when": "activeWebviewPanelId == roo-cline.TabPanelProvider"
 				},
 				{
-					"command": "roo-cline.accountButtonClicked",
+					"command": "roo-cline.cloudButtonClicked",
 					"group": "navigation@4",
 					"when": "activeWebviewPanelId == roo-cline.TabPanelProvider"
 				},

+ 1 - 1
src/package.nls.ca.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Historial",
 	"command.marketplace.title": "Mercat",
 	"command.openInEditor.title": "Obrir a l'Editor",
-	"command.account.title": "Compte",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Configuració",
 	"command.documentation.title": "Documentació",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.de.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Verlauf",
 	"command.marketplace.title": "Marktplatz",
 	"command.openInEditor.title": "Im Editor Öffnen",
-	"command.account.title": "Konto",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Einstellungen",
 	"command.documentation.title": "Dokumentation",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.es.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Historial",
 	"command.marketplace.title": "Mercado",
 	"command.openInEditor.title": "Abrir en Editor",
-	"command.account.title": "Cuenta",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Configuración",
 	"command.documentation.title": "Documentación",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.fr.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Historique",
 	"command.marketplace.title": "Marché",
 	"command.openInEditor.title": "Ouvrir dans l'Éditeur",
-	"command.account.title": "Compte",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Paramètres",
 	"command.documentation.title": "Documentation",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.hi.json

@@ -23,7 +23,7 @@
 	"command.history.title": "इतिहास",
 	"command.marketplace.title": "मार्केटप्लेस",
 	"command.openInEditor.title": "एडिटर में खोलें",
-	"command.account.title": "खाता",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "सेटिंग्स",
 	"command.documentation.title": "दस्तावेज़ीकरण",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.id.json

@@ -11,7 +11,7 @@
 	"command.history.title": "Riwayat",
 	"command.marketplace.title": "Marketplace",
 	"command.openInEditor.title": "Buka di Editor",
-	"command.account.title": "Akun",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Pengaturan",
 	"command.documentation.title": "Dokumentasi",
 	"command.openInNewTab.title": "Buka di Tab Baru",

+ 1 - 1
src/package.nls.it.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Cronologia",
 	"command.marketplace.title": "Marketplace",
 	"command.openInEditor.title": "Apri nell'Editor",
-	"command.account.title": "Account",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Impostazioni",
 	"command.documentation.title": "Documentazione",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.ja.json

@@ -11,7 +11,7 @@
 	"command.history.title": "履歴",
 	"command.marketplace.title": "マーケットプレイス",
 	"command.openInEditor.title": "エディタで開く",
-	"command.account.title": "アカウント",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "設定",
 	"command.documentation.title": "ドキュメント",
 	"command.openInNewTab.title": "新しいタブで開く",

+ 1 - 1
src/package.nls.json

@@ -11,7 +11,7 @@
 	"command.history.title": "History",
 	"command.marketplace.title": "Marketplace",
 	"command.openInEditor.title": "Open in Editor",
-	"command.account.title": "Account",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Settings",
 	"command.documentation.title": "Documentation",
 	"command.openInNewTab.title": "Open In New Tab",

+ 1 - 1
src/package.nls.ko.json

@@ -23,7 +23,7 @@
 	"command.history.title": "기록",
 	"command.marketplace.title": "마켓플레이스",
 	"command.openInEditor.title": "에디터에서 열기",
-	"command.account.title": "계정",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "설정",
 	"command.documentation.title": "문서",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.nl.json

@@ -11,7 +11,7 @@
 	"command.history.title": "Geschiedenis",
 	"command.marketplace.title": "Marktplaats",
 	"command.openInEditor.title": "Openen in Editor",
-	"command.account.title": "Account",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Instellingen",
 	"command.documentation.title": "Documentatie",
 	"command.openInNewTab.title": "Openen in Nieuw Tabblad",

+ 1 - 1
src/package.nls.pl.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Historia",
 	"command.marketplace.title": "Marketplace",
 	"command.openInEditor.title": "Otwórz w Edytorze",
-	"command.account.title": "Konto",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Ustawienia",
 	"command.documentation.title": "Dokumentacja",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.pt-BR.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Histórico",
 	"command.marketplace.title": "Marketplace",
 	"command.openInEditor.title": "Abrir no Editor",
-	"command.account.title": "Conta",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Configurações",
 	"command.documentation.title": "Documentação",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.ru.json

@@ -11,7 +11,7 @@
 	"command.history.title": "История",
 	"command.marketplace.title": "Маркетплейс",
 	"command.openInEditor.title": "Открыть в редакторе",
-	"command.account.title": "Аккаунт",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Настройки",
 	"command.documentation.title": "Документация",
 	"command.openInNewTab.title": "Открыть в новой вкладке",

+ 1 - 1
src/package.nls.tr.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Geçmiş",
 	"command.marketplace.title": "Marketplace",
 	"command.openInEditor.title": "Düzenleyicide Aç",
-	"command.account.title": "Hesap",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Ayarlar",
 	"command.documentation.title": "Dokümantasyon",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.vi.json

@@ -23,7 +23,7 @@
 	"command.history.title": "Lịch Sử",
 	"command.marketplace.title": "Marketplace",
 	"command.openInEditor.title": "Mở trong Trình Soạn Thảo",
-	"command.account.title": "Tài khoản",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "Cài Đặt",
 	"command.documentation.title": "Tài Liệu",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.zh-CN.json

@@ -23,7 +23,7 @@
 	"command.history.title": "历史记录",
 	"command.marketplace.title": "应用市场",
 	"command.openInEditor.title": "在编辑器中打开",
-	"command.account.title": "账户",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "设置",
 	"command.documentation.title": "文档",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/package.nls.zh-TW.json

@@ -23,7 +23,7 @@
 	"command.history.title": "歷史記錄",
 	"command.marketplace.title": "應用市場",
 	"command.openInEditor.title": "在編輯器中開啟",
-	"command.account.title": "帳戶",
+	"command.cloud.title": "Cloud",
 	"command.settings.title": "設定",
 	"command.documentation.title": "文件",
 	"configuration.title": "Roo Code",

+ 1 - 1
src/shared/ExtensionMessage.ts

@@ -131,7 +131,7 @@ export interface ExtensionMessage {
 		| "historyButtonClicked"
 		| "promptsButtonClicked"
 		| "marketplaceButtonClicked"
-		| "accountButtonClicked"
+		| "cloudButtonClicked"
 		| "didBecomeVisible"
 		| "focusInput"
 		| "switchTab"

+ 2 - 2
src/shared/WebviewMessage.ts

@@ -174,7 +174,7 @@ export interface WebviewMessage {
 		| "toggleApiConfigPin"
 		| "setHistoryPreviewCollapsed"
 		| "hasOpenedModeSelector"
-		| "accountButtonClicked"
+		| "cloudButtonClicked"
 		| "rooCloudSignIn"
 		| "rooCloudSignOut"
 		| "condenseTaskContextRequest"
@@ -217,7 +217,7 @@ export interface WebviewMessage {
 		| "openRouterImageGenerationSelectedModel"
 	text?: string
 	editedMessageContent?: string
-	tab?: "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "account"
+	tab?: "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "cloud"
 	disabled?: boolean
 	context?: string
 	dataUri?: string

+ 6 - 6
webview-ui/src/App.tsx

@@ -21,12 +21,12 @@ import ModesView from "./components/modes/ModesView"
 import { HumanRelayDialog } from "./components/human-relay/HumanRelayDialog"
 import { DeleteMessageDialog, EditMessageDialog } from "./components/chat/MessageModificationConfirmationDialog"
 import ErrorBoundary from "./components/ErrorBoundary"
-import { AccountView } from "./components/account/AccountView"
+import { CloudView } from "./components/cloud/CloudView"
 import { useAddNonInteractiveClickListener } from "./components/ui/hooks/useNonInteractiveClick"
 import { TooltipProvider } from "./components/ui/tooltip"
 import { STANDARD_TOOLTIP_DELAY } from "./components/ui/standard-tooltip"
 
-type Tab = "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "account"
+type Tab = "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "cloud"
 
 interface HumanRelayDialogState {
 	isOpen: boolean
@@ -58,7 +58,7 @@ const tabsByMessageAction: Partial<Record<NonNullable<ExtensionMessage["action"]
 	mcpButtonClicked: "mcp",
 	historyButtonClicked: "history",
 	marketplaceButtonClicked: "marketplace",
-	accountButtonClicked: "account",
+	cloudButtonClicked: "cloud",
 }
 
 const App = () => {
@@ -107,7 +107,7 @@ const App = () => {
 		(newTab: Tab) => {
 			// Only check MDM compliance if mdmCompliant is explicitly false (meaning there's an MDM policy and user is non-compliant)
 			// If mdmCompliant is undefined or true, allow tab switching
-			if (mdmCompliant === false && newTab !== "account") {
+			if (mdmCompliant === false && newTab !== "cloud") {
 				// Notify the user that authentication is required by their organization
 				vscode.postMessage({ type: "showMdmAuthRequiredNotification" })
 				return
@@ -249,8 +249,8 @@ const App = () => {
 					targetTab={currentMarketplaceTab as "mcp" | "mode" | undefined}
 				/>
 			)}
-			{tab === "account" && (
-				<AccountView
+			{tab === "cloud" && (
+				<CloudView
 					userInfo={cloudUserInfo}
 					isAuthenticated={cloudIsAuthenticated}
 					cloudApiUrl={cloudApiUrl}

+ 4 - 4
webview-ui/src/__tests__/App.spec.tsx

@@ -90,11 +90,11 @@ vi.mock("@src/components/marketplace/MarketplaceView", () => ({
 	},
 }))
 
-vi.mock("@src/components/account/AccountView", () => ({
-	AccountView: function AccountView({ onDone }: { onDone: () => void }) {
+vi.mock("@src/components/cloud/CloudView", () => ({
+	CloudView: function CloudView({ onDone }: { onDone: () => void }) {
 		return (
-			<div data-testid="account-view" onClick={onDone}>
-				Account View
+			<div data-testid="cloud-view" onClick={onDone}>
+				Cloud View
 			</div>
 		)
 	},

+ 6 - 6
webview-ui/src/components/chat/ShareButton.tsx

@@ -245,34 +245,34 @@ export const ShareButton = ({ item, disabled = false, showLabel = false }: Share
 				<DialogContent className="max-w-sm">
 					<DialogHeader className="text-center">
 						<DialogTitle className="text-lg font-medium text-vscode-foreground">
-							{t("account:cloudBenefitsTitle")}
+							{t("cloud:cloudBenefitsTitle")}
 						</DialogTitle>
 					</DialogHeader>
 
 					<div className="flex flex-col space-y-6">
 						<div>
 							<p className="text-md text-vscode-descriptionForeground mb-4">
-								{t("account:cloudBenefitsSubtitle")}
+								{t("cloud:cloudBenefitsSubtitle")}
 							</p>
 							<ul className="text-sm text-vscode-descriptionForeground space-y-2">
 								<li className="flex items-start">
 									<span className="mr-2 text-vscode-foreground">•</span>
-									{t("account:cloudBenefitSharing")}
+									{t("cloud:cloudBenefitSharing")}
 								</li>
 								<li className="flex items-start">
 									<span className="mr-2 text-vscode-foreground">•</span>
-									{t("account:cloudBenefitHistory")}
+									{t("cloud:cloudBenefitHistory")}
 								</li>
 								<li className="flex items-start">
 									<span className="mr-2 text-vscode-foreground">•</span>
-									{t("account:cloudBenefitMetrics")}
+									{t("cloud:cloudBenefitMetrics")}
 								</li>
 							</ul>
 						</div>
 
 						<div className="flex flex-col gap-4">
 							<Button onClick={handleConnectToCloud} className="w-full">
-								{t("account:connect")}
+								{t("cloud:connect")}
 							</Button>
 						</div>
 					</div>

+ 7 - 7
webview-ui/src/components/chat/__tests__/TaskActions.spec.tsx

@@ -42,12 +42,12 @@ vi.mock("react-i18next", () => ({
 				"chat:task.connectToCloud": "Connect to Cloud",
 				"chat:task.connectToCloudDescription": "Sign in to Roo Code Cloud to share tasks",
 				"chat:task.sharingDisabledByOrganization": "Sharing disabled by organization",
-				"account:cloudBenefitsTitle": "Connect to Roo Code Cloud",
-				"account:cloudBenefitsSubtitle": "Sign in to Roo Code Cloud to share tasks",
-				"account:cloudBenefitHistory": "Access your task history from anywhere",
-				"account:cloudBenefitSharing": "Share tasks with your team",
-				"account:cloudBenefitMetrics": "Track usage and costs",
-				"account:connect": "Connect",
+				"cloud:cloudBenefitsTitle": "Connect to Roo Code Cloud",
+				"cloud:cloudBenefitsSubtitle": "Sign in to Roo Code Cloud to share tasks",
+				"cloud:cloudBenefitHistory": "Access your task history from anywhere",
+				"cloud:cloudBenefitSharing": "Share tasks with your team",
+				"cloud:cloudBenefitMetrics": "Track usage and costs",
+				"cloud:connect": "Connect",
 			}
 			return translations[key] || key
 		},
@@ -260,7 +260,7 @@ describe("TaskActions", () => {
 			// Verify popover is not open initially
 			expect(screen.queryByText("Share with Organization")).not.toBeInTheDocument()
 
-			// Simulate user becoming authenticated (e.g., from AccountView)
+			// Simulate user becoming authenticated (e.g., from CloudView)
 			mockUseExtensionState.mockReturnValue({
 				sharingEnabled: true,
 				cloudIsAuthenticated: true,

+ 21 - 16
webview-ui/src/components/account/AccountView.tsx → webview-ui/src/components/cloud/CloudView.tsx

@@ -11,14 +11,14 @@ import { ToggleSwitch } from "@/components/ui/toggle-switch"
 
 import { History, PiggyBank, SquareArrowOutUpRightIcon } from "lucide-react"
 
-type AccountViewProps = {
+type CloudViewProps = {
 	userInfo: CloudUserInfo | null
 	isAuthenticated: boolean
 	cloudApiUrl?: string
 	onDone: () => void
 }
 
-export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }: AccountViewProps) => {
+export const CloudView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }: CloudViewProps) => {
 	const { t } = useAppTranslation()
 	const { remoteControlEnabled, setRemoteControlEnabled } = useExtensionState()
 	const wasAuthenticatedRef = useRef(false)
@@ -31,25 +31,30 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
 			wasAuthenticatedRef.current = true
 		} else if (wasAuthenticatedRef.current && !isAuthenticated) {
 			// User just logged out successfully
+			// NOTE: Telemetry events use ACCOUNT_* naming for continuity with existing analytics
+			// and to maintain historical data consistency, even though the UI now uses "Cloud" terminology
 			telemetryClient.capture(TelemetryEventName.ACCOUNT_LOGOUT_SUCCESS)
 			wasAuthenticatedRef.current = false
 		}
 	}, [isAuthenticated])
 
 	const handleConnectClick = () => {
-		// Send telemetry for account connect action
+		// Send telemetry for cloud connect action
+		// NOTE: Using ACCOUNT_* telemetry events for backward compatibility with analytics
 		telemetryClient.capture(TelemetryEventName.ACCOUNT_CONNECT_CLICKED)
 		vscode.postMessage({ type: "rooCloudSignIn" })
 	}
 
 	const handleLogoutClick = () => {
-		// Send telemetry for account logout action
+		// Send telemetry for cloud logout action
+		// NOTE: Using ACCOUNT_* telemetry events for backward compatibility with analytics
 		telemetryClient.capture(TelemetryEventName.ACCOUNT_LOGOUT_CLICKED)
 		vscode.postMessage({ type: "rooCloudSignOut" })
 	}
 
 	const handleVisitCloudWebsite = () => {
 		// Send telemetry for cloud website visit
+		// NOTE: Using ACCOUNT_* telemetry events for backward compatibility with analytics
 		telemetryClient.capture(TelemetryEventName.ACCOUNT_CONNECT_CLICKED)
 		const cloudUrl = cloudApiUrl || "https://app.roocode.com"
 		vscode.postMessage({ type: "openExternal", url: cloudUrl })
@@ -64,7 +69,7 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
 	return (
 		<div className="flex flex-col h-full">
 			<div className="flex justify-between items-center mb-6">
-				<h1 className="text-xl font-medium text-vscode-foreground">{t("account:title")}</h1>
+				<h1 className="text-xl font-medium text-vscode-foreground">{t("cloud:title")}</h1>
 				<VSCodeButton appearance="secondary" onClick={onDone}>
 					{t("settings:common.done")}
 				</VSCodeButton>
@@ -77,7 +82,7 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
 								{userInfo?.picture ? (
 									<img
 										src={userInfo.picture}
-										alt={t("account:profilePicture")}
+										alt={t("cloud:profilePicture")}
 										className="w-full h-full object-cover"
 									/>
 								) : (
@@ -114,13 +119,13 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
 									checked={remoteControlEnabled}
 									onChange={handleRemoteControlToggle}
 									size="medium"
-									aria-label={t("account:remoteControl")}
+									aria-label={t("cloud:remoteControl")}
 									data-testid="remote-control-toggle"
 								/>
-								<span className="font-medium text-vscode-foreground">{t("account:remoteControl")}</span>
+								<span className="font-medium text-vscode-foreground">{t("cloud:remoteControl")}</span>
 							</div>
 							<div className="text-vscode-descriptionForeground text-sm mt-1 mb-4 ml-8">
-								{t("account:remoteControlDescription")}
+								{t("cloud:remoteControlDescription")}
 							</div>
 							<hr className="border-vscode-widget-border mb-4" />
 						</div>
@@ -128,10 +133,10 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
 
 					<div className="flex flex-col gap-2 mt-4">
 						<VSCodeButton appearance="secondary" onClick={handleVisitCloudWebsite} className="w-full">
-							{t("account:visitCloudWebsite")}
+							{t("cloud:visitCloudWebsite")}
 						</VSCodeButton>
 						<VSCodeButton appearance="secondary" onClick={handleLogoutClick} className="w-full">
-							{t("account:logOut")}
+							{t("cloud:logOut")}
 						</VSCodeButton>
 					</div>
 				</>
@@ -156,27 +161,27 @@ export const AccountView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }:
 
 					<div className="flex flex-col mb-6 text-center">
 						<h2 className="text-xl font-bold text-vscode-foreground mb-2">
-							{t("account:cloudBenefitsTitle")}
+							{t("cloud:cloudBenefitsTitle")}
 						</h2>
 						<ul className="text-vscode-descriptionForeground space-y-3 mx-auto px-8">
 							<li className="flex items-start text-left gap-4">
 								<SquareArrowOutUpRightIcon size="16" className="shrink-0" />
-								{t("account:cloudBenefitSharing")}
+								{t("cloud:cloudBenefitSharing")}
 							</li>
 							<li className="flex items-start text-left gap-4">
 								<History size="16" className="shrink-0" />
-								{t("account:cloudBenefitHistory")}
+								{t("cloud:cloudBenefitHistory")}
 							</li>
 							<li className="flex items-start text-left gap-4">
 								<PiggyBank size="16" className="shrink-0" />
-								{t("account:cloudBenefitMetrics")}
+								{t("cloud:cloudBenefitMetrics")}
 							</li>
 						</ul>
 					</div>
 
 					<div className="flex flex-col items-center gap-4">
 						<VSCodeButton appearance="primary" onClick={handleConnectClick} className="w-1/2">
-							{t("account:connect")}
+							{t("cloud:connect")}
 						</VSCodeButton>
 					</div>
 				</>

+ 18 - 18
webview-ui/src/components/account/__tests__/AccountView.spec.tsx → webview-ui/src/components/cloud/__tests__/CloudView.spec.tsx

@@ -1,26 +1,26 @@
 import { render, screen } from "@/utils/test-utils"
 
-import { AccountView } from "../AccountView"
+import { CloudView } from "../CloudView"
 
 // Mock the translation context
 vi.mock("@src/i18n/TranslationContext", () => ({
 	useAppTranslation: () => ({
 		t: (key: string) => {
 			const translations: Record<string, string> = {
-				"account:title": "Account",
+				"cloud:title": "Cloud",
 				"settings:common.done": "Done",
-				"account:signIn": "Connect to Roo Code Cloud",
-				"account:cloudBenefitsTitle": "Connect to Roo Code Cloud",
-				"account:cloudBenefitSharing": "Share tasks with others",
-				"account:cloudBenefitHistory": "Access your task history",
-				"account:cloudBenefitMetrics": "Get a holistic view of your token consumption",
-				"account:logOut": "Log out",
-				"account:connect": "Connect Now",
-				"account:visitCloudWebsite": "Visit Roo Code Cloud",
-				"account:remoteControl": "Roomote Control",
-				"account:remoteControlDescription":
+				"cloud:signIn": "Connect to Roo Code Cloud",
+				"cloud:cloudBenefitsTitle": "Connect to Roo Code Cloud",
+				"cloud:cloudBenefitSharing": "Share tasks with others",
+				"cloud:cloudBenefitHistory": "Access your task history",
+				"cloud:cloudBenefitMetrics": "Get a holistic view of your token consumption",
+				"cloud:logOut": "Log out",
+				"cloud:connect": "Connect Now",
+				"cloud:visitCloudWebsite": "Visit Roo Code Cloud",
+				"cloud:remoteControl": "Roomote Control",
+				"cloud:remoteControlDescription":
 					"Enable following and interacting with tasks in this workspace with Roo Code Cloud",
-				"account:profilePicture": "Profile picture",
+				"cloud:profilePicture": "Profile picture",
 			}
 			return translations[key] || key
 		},
@@ -55,10 +55,10 @@ Object.defineProperty(window, "IMAGES_BASE_URI", {
 	writable: true,
 })
 
-describe("AccountView", () => {
+describe("CloudView", () => {
 	it("should display benefits when user is not authenticated", () => {
 		render(
-			<AccountView
+			<CloudView
 				userInfo={null}
 				isAuthenticated={false}
 				cloudApiUrl="https://app.roocode.com"
@@ -83,7 +83,7 @@ describe("AccountView", () => {
 		}
 
 		render(
-			<AccountView
+			<CloudView
 				userInfo={mockUserInfo}
 				isAuthenticated={true}
 				cloudApiUrl="https://app.roocode.com"
@@ -112,7 +112,7 @@ describe("AccountView", () => {
 		}
 
 		render(
-			<AccountView
+			<CloudView
 				userInfo={mockUserInfo}
 				isAuthenticated={true}
 				cloudApiUrl="https://app.roocode.com"
@@ -136,7 +136,7 @@ describe("AccountView", () => {
 		}
 
 		render(
-			<AccountView
+			<CloudView
 				userInfo={mockUserInfo}
 				isAuthenticated={true}
 				cloudApiUrl="https://app.roocode.com"

+ 1 - 1
webview-ui/src/i18n/locales/ca/account.json → webview-ui/src/i18n/locales/ca/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Compte",
+	"title": "Cloud",
 	"profilePicture": "Imatge de perfil",
 	"logOut": "Tancar sessió",
 	"testApiAuthentication": "Provar autenticació d'API",

+ 1 - 1
webview-ui/src/i18n/locales/de/account.json → webview-ui/src/i18n/locales/de/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Konto",
+	"title": "Cloud",
 	"profilePicture": "Profilbild",
 	"logOut": "Abmelden",
 	"testApiAuthentication": "API-Authentifizierung testen",

+ 1 - 1
webview-ui/src/i18n/locales/en/account.json → webview-ui/src/i18n/locales/en/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Account",
+	"title": "Cloud",
 	"profilePicture": "Profile picture",
 	"logOut": "Log out",
 	"testApiAuthentication": "Test API Authentication",

+ 1 - 1
webview-ui/src/i18n/locales/es/account.json → webview-ui/src/i18n/locales/es/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Cuenta",
+	"title": "Cloud",
 	"profilePicture": "Foto de perfil",
 	"logOut": "Cerrar sesión",
 	"testApiAuthentication": "Probar autenticación de API",

+ 1 - 1
webview-ui/src/i18n/locales/fr/account.json → webview-ui/src/i18n/locales/fr/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Compte",
+	"title": "Cloud",
 	"profilePicture": "Photo de profil",
 	"logOut": "Déconnexion",
 	"testApiAuthentication": "Tester l'authentification API",

+ 1 - 1
webview-ui/src/i18n/locales/hi/account.json → webview-ui/src/i18n/locales/hi/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "खाता",
+	"title": "Cloud",
 	"profilePicture": "प्रोफाइल चित्र",
 	"logOut": "लॉग आउट",
 	"testApiAuthentication": "API प्रमाणीकरण का परीक्षण करें",

+ 1 - 1
webview-ui/src/i18n/locales/id/account.json → webview-ui/src/i18n/locales/id/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Akun",
+	"title": "Cloud",
 	"profilePicture": "Foto profil",
 	"logOut": "Keluar",
 	"testApiAuthentication": "Uji Autentikasi API",

+ 1 - 1
webview-ui/src/i18n/locales/it/account.json → webview-ui/src/i18n/locales/it/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Account",
+	"title": "Cloud",
 	"profilePicture": "Immagine del profilo",
 	"logOut": "Disconnetti",
 	"testApiAuthentication": "Verifica autenticazione API",

+ 1 - 1
webview-ui/src/i18n/locales/ja/account.json → webview-ui/src/i18n/locales/ja/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "アカウント",
+	"title": "Cloud",
 	"profilePicture": "プロフィール画像",
 	"logOut": "ログアウト",
 	"testApiAuthentication": "API認証をテスト",

+ 1 - 1
webview-ui/src/i18n/locales/ko/account.json → webview-ui/src/i18n/locales/ko/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "계정",
+	"title": "Cloud",
 	"profilePicture": "프로필 사진",
 	"logOut": "로그아웃",
 	"testApiAuthentication": "API 인증 테스트",

+ 1 - 1
webview-ui/src/i18n/locales/nl/account.json → webview-ui/src/i18n/locales/nl/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Account",
+	"title": "Cloud",
 	"profilePicture": "Profielfoto",
 	"logOut": "Uitloggen",
 	"testApiAuthentication": "API-authenticatie testen",

+ 1 - 1
webview-ui/src/i18n/locales/pl/account.json → webview-ui/src/i18n/locales/pl/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Konto",
+	"title": "Cloud",
 	"profilePicture": "Zdjęcie profilowe",
 	"logOut": "Wyloguj",
 	"testApiAuthentication": "Testuj uwierzytelnianie API",

+ 1 - 1
webview-ui/src/i18n/locales/pt-BR/account.json → webview-ui/src/i18n/locales/pt-BR/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Conta",
+	"title": "Cloud",
 	"profilePicture": "Foto de perfil",
 	"logOut": "Sair",
 	"testApiAuthentication": "Testar Autenticação de API",

+ 1 - 1
webview-ui/src/i18n/locales/ru/account.json → webview-ui/src/i18n/locales/ru/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Учетная запись",
+	"title": "Cloud",
 	"profilePicture": "Фото профиля",
 	"logOut": "Выход",
 	"testApiAuthentication": "Проверить аутентификацию API",

+ 1 - 1
webview-ui/src/i18n/locales/tr/account.json → webview-ui/src/i18n/locales/tr/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Hesap",
+	"title": "Cloud",
 	"profilePicture": "Profil resmi",
 	"logOut": "Çıkış yap",
 	"testApiAuthentication": "API Kimlik Doğrulamayı Test Et",

+ 1 - 1
webview-ui/src/i18n/locales/vi/account.json → webview-ui/src/i18n/locales/vi/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "Tài khoản",
+	"title": "Cloud",
 	"profilePicture": "Ảnh hồ sơ",
 	"logOut": "Đăng xuất",
 	"testApiAuthentication": "Kiểm tra xác thực API",

+ 1 - 1
webview-ui/src/i18n/locales/zh-CN/account.json → webview-ui/src/i18n/locales/zh-CN/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "账户",
+	"title": "Cloud",
 	"profilePicture": "头像",
 	"logOut": "退出登录",
 	"testApiAuthentication": "测试 API 认证",

+ 1 - 1
webview-ui/src/i18n/locales/zh-TW/account.json → webview-ui/src/i18n/locales/zh-TW/cloud.json

@@ -1,5 +1,5 @@
 {
-	"title": "帳號",
+	"title": "Cloud",
 	"profilePicture": "個人圖片",
 	"logOut": "登出",
 	"testApiAuthentication": "測試 API 認證",