Bläddra i källkod

ux: Updates to CloudView (#9776)

* refactor: remove TabHeader and onDone callback from CloudView

- Removed TabHeader component from CloudView as it is no longer needed
- Removed onDone prop from CloudView component definition and usage
- Updated all test files to reflect the removal of onDone prop
- Kept Button import that was accidentally removed initially

* Updates upsell copy to reflect today's product

* Update webview-ui/src/components/cloud/CloudView.tsx

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update webview-ui/src/i18n/locales/ko/cloud.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update webview-ui/src/i18n/locales/zh-CN/cloud.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Test fixes

---------

Co-authored-by: Roo Code <[email protected]>
Co-authored-by: Bruno Bergher <[email protected]>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
roomote[bot] 1 månad sedan
förälder
incheckning
18117f0723

+ 0 - 1
webview-ui/src/App.tsx

@@ -263,7 +263,6 @@ const App = () => {
 					isAuthenticated={cloudIsAuthenticated}
 					cloudApiUrl={cloudApiUrl}
 					organizations={cloudOrganizations}
-					onDone={() => switchTab("chat")}
 				/>
 			)}
 			<ChatView

+ 2 - 6
webview-ui/src/__tests__/App.spec.tsx

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

+ 18 - 9
webview-ui/src/components/cloud/CloudUpsellDialog.tsx

@@ -1,7 +1,7 @@
 import { useTranslation } from "react-i18next"
 import { Dialog, DialogContent, DialogHeader, Button } from "@/components/ui"
 import RooHero from "../welcome/RooHero"
-import { CircleDollarSign, FileStack, Router, Share } from "lucide-react"
+import { ArrowRight, Brain, Cable, CircleDollarSign, FileStack, Router, Users2 } from "lucide-react"
 import { DialogTitle } from "@radix-ui/react-dialog"
 
 interface CloudUpsellDialogProps {
@@ -19,21 +19,29 @@ export const renderCloudBenefitsContent = (t: any) => {
 			</div>
 			<h1 className="text-xl font-bold text-vscode-foreground">{t("cloud:cloudBenefitsTitle")}</h1>
 			<div className="text-lg">
-				<ul className="text-vscode-descriptionForeground space-y-4 my-8">
+				<ul className="text-vscode-descriptionForeground space-y-2 my-8">
 					<li className="flex items-start gap-2">
-						<Router className="size-4 mt-0.5 shrink-0" />
-						{t("cloud:cloudBenefitWalkaway")}
+						<Brain className="size-4 mt-1 shrink-0" />
+						{t("cloud:cloudBenefitProvider")}
+					</li>
+					<li className="flex items-start gap-2">
+						<Users2 className="size-4 mt-1 shrink-0" />
+						{t("cloud:cloudBenefitCloudAgents")}
 					</li>
 					<li className="flex items-start gap-2">
-						<Share className="size-4 mt-0.5 shrink-0" />
-						{t("cloud:cloudBenefitSharing")}
+						<Cable className="size-4 mt-1 shrink-0" />
+						{t("cloud:cloudBenefitTriggers")}
+					</li>
+					<li className="flex items-start gap-2">
+						<Router className="size-4 mt-1 shrink-0" />
+						{t("cloud:cloudBenefitWalkaway")}
 					</li>
 					<li className="flex items-start gap-2">
-						<CircleDollarSign className="size-4 mt-0.5 shrink-0" />
+						<CircleDollarSign className="size-4 mt-1 shrink-0" />
 						{t("cloud:cloudBenefitMetrics")}
 					</li>
 					<li className="flex items-start gap-2">
-						<FileStack className="size-4 mt-0.5 shrink-0" />
+						<FileStack className="size-4 mt-1 shrink-0" />
 						{t("cloud:cloudBenefitHistory")}
 					</li>
 				</ul>
@@ -56,8 +64,9 @@ export const CloudUpsellDialog = ({ open, onOpenChange, onConnect }: CloudUpsell
 					{renderCloudBenefitsContent(t)}
 
 					<div className="flex flex-col gap-4">
-						<Button onClick={onConnect} className="w-full">
+						<Button variant="primary" onClick={onConnect} className="w-full">
 							{t("cloud:connect")}
+							<ArrowRight />
 						</Button>
 					</div>
 				</div>

+ 6 - 11
webview-ui/src/components/cloud/CloudView.tsx

@@ -9,9 +9,9 @@ import { vscode } from "@src/utils/vscode"
 import { telemetryClient } from "@src/utils/TelemetryClient"
 import { ToggleSwitch } from "@/components/ui/toggle-switch"
 import { renderCloudBenefitsContent } from "./CloudUpsellDialog"
-import { CircleAlert, Info, Lock, TriangleAlert } from "lucide-react"
+import { ArrowRight, CircleAlert, Info, Lock, TriangleAlert } from "lucide-react"
 import { cn } from "@/lib/utils"
-import { Tab, TabContent, TabHeader } from "../common/Tab"
+import { Tab, TabContent } from "../common/Tab"
 import { Button } from "@/components/ui/button"
 import { OrganizationSwitcher } from "./OrganizationSwitcher"
 import { StandardTooltip } from "../ui"
@@ -23,11 +23,10 @@ type CloudViewProps = {
 	userInfo: CloudUserInfo | null
 	isAuthenticated: boolean
 	cloudApiUrl?: string
-	onDone: () => void
 	organizations?: CloudOrganizationMembership[]
 }
 
-export const CloudView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone, organizations = [] }: CloudViewProps) => {
+export const CloudView = ({ userInfo, isAuthenticated, cloudApiUrl, organizations = [] }: CloudViewProps) => {
 	const { t } = useAppTranslation()
 	const {
 		remoteControlEnabled,
@@ -159,11 +158,6 @@ export const CloudView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone, orga
 
 	return (
 		<Tab>
-			<TabHeader className="flex justify-between items-center">
-				<h3 className="text-vscode-foreground m-0">{isAuthenticated && t("cloud:title")}</h3>
-				<Button onClick={onDone}>{t("settings:common.done")}</Button>
-			</TabHeader>
-
 			<TabContent className="pt-10">
 				{isAuthenticated ? (
 					<>
@@ -271,12 +265,13 @@ export const CloudView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone, orga
 					</>
 				) : (
 					<>
-						<div className="flex flex-col items-start gap-4 px-8 max-w-100">
+						<div className="flex flex-col items-start gap-4 px-4 max-w-lg">
 							<div className={cn(authInProgress && "opacity-50")}>{renderCloudBenefitsContent(t)}</div>
 
 							{!authInProgress && (
-								<Button variant="primary" onClick={handleConnectClick} className="w-full">
+								<Button variant="primary" onClick={handleConnectClick}>
 									{t("cloud:connect")}
+									<ArrowRight />
 								</Button>
 							)}
 

+ 22 - 15
webview-ui/src/components/cloud/__tests__/CloudUpsellDialog.spec.tsx

@@ -7,12 +7,14 @@ vi.mock("react-i18next", () => ({
 	useTranslation: () => ({
 		t: (key: string) => {
 			const translations: Record<string, string> = {
-				"cloud:cloudBenefitsTitle": "Connect to Roo Cloud",
-				"cloud:cloudBenefitSharing": "Share tasks with your team",
-				"cloud:cloudBenefitHistory": "Access conversation history",
-				"cloud:cloudBenefitMetrics": "View usage metrics",
-				"cloud:cloudBenefitWalkaway": "Walk away with your code",
-				"cloud:connect": "Connect to Cloud",
+				"cloud:cloudBenefitsTitle": "Try Roo Code Cloud",
+				"cloud:cloudBenefitProvider": "Access free and paid models that work great with Roo",
+				"cloud:cloudBenefitCloudAgents": "Give tasks to autonomous Cloud agents",
+				"cloud:cloudBenefitTriggers": "Get code reviews on Github, start tasks from Slack and more",
+				"cloud:cloudBenefitWalkaway": "Follow and control tasks from anywhere (including your phone)",
+				"cloud:cloudBenefitHistory": "Access your task history from anywhere and share them with others",
+				"cloud:cloudBenefitMetrics": "Get a holistic view of your token consumption",
+				"cloud:connect": "Get started",
 			}
 			return translations[key] || key
 		},
@@ -30,32 +32,37 @@ describe("CloudUpsellDialog", () => {
 	it("renders dialog when open", () => {
 		render(<CloudUpsellDialog open={true} onOpenChange={mockOnOpenChange} onConnect={mockOnConnect} />)
 
-		expect(screen.getByText("Connect to Roo Cloud")).toBeInTheDocument()
-		expect(screen.getByText("Share tasks with your team")).toBeInTheDocument()
-		expect(screen.getByText("Access conversation history")).toBeInTheDocument()
-		expect(screen.getByText("View usage metrics")).toBeInTheDocument()
-		expect(screen.getByRole("button", { name: "Connect to Cloud" })).toBeInTheDocument()
+		expect(screen.getByText("Try Roo Code Cloud")).toBeInTheDocument()
+		expect(screen.getByText("Access free and paid models that work great with Roo")).toBeInTheDocument()
+		expect(screen.getByText("Give tasks to autonomous Cloud agents")).toBeInTheDocument()
+		expect(screen.getByText("Get code reviews on Github, start tasks from Slack and more")).toBeInTheDocument()
+		expect(screen.getByText("Follow and control tasks from anywhere (including your phone)")).toBeInTheDocument()
+		expect(
+			screen.getByText("Access your task history from anywhere and share them with others"),
+		).toBeInTheDocument()
+		expect(screen.getByText("Get a holistic view of your token consumption")).toBeInTheDocument()
+		expect(screen.getByRole("button", { name: "Get started" })).toBeInTheDocument()
 	})
 
 	it("does not render dialog when closed", () => {
 		render(<CloudUpsellDialog open={false} onOpenChange={mockOnOpenChange} onConnect={mockOnConnect} />)
 
-		expect(screen.queryByText("Connect to Roo Cloud")).not.toBeInTheDocument()
+		expect(screen.queryByText("Try Roo Code Cloud")).not.toBeInTheDocument()
 	})
 
 	it("calls onConnect when connect button is clicked", () => {
 		render(<CloudUpsellDialog open={true} onOpenChange={mockOnOpenChange} onConnect={mockOnConnect} />)
 
-		const connectButton = screen.getByRole("button", { name: "Connect to Cloud" })
+		const connectButton = screen.getByRole("button", { name: "Get started" })
 		fireEvent.click(connectButton)
 
 		expect(mockOnConnect).toHaveBeenCalledTimes(1)
 	})
 
-	it("renders all three benefits as list items", () => {
+	it("renders all benefits as list items", () => {
 		render(<CloudUpsellDialog open={true} onOpenChange={mockOnOpenChange} onConnect={mockOnConnect} />)
 
 		const listItems = screen.getAllByRole("listitem")
-		expect(listItems).toHaveLength(4)
+		expect(listItems).toHaveLength(6)
 	})
 })

+ 38 - 108
webview-ui/src/components/cloud/__tests__/CloudView.spec.tsx

@@ -10,12 +10,15 @@ vi.mock("@src/i18n/TranslationContext", () => ({
 				"cloud:title": "Cloud",
 				"settings:common.done": "Done",
 				"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:cloudBenefitsTitle": "Try Roo Code Cloud",
+				"cloud:cloudBenefitProvider": "Access free and paid models that work great with Roo",
+				"cloud:cloudBenefitCloudAgents": "Give tasks to autonomous Cloud agents",
+				"cloud:cloudBenefitTriggers": "Get code reviews on Github, start tasks from Slack and more",
+				"cloud:cloudBenefitWalkaway": "Follow and control tasks from anywhere (including your phone)",
+				"cloud:cloudBenefitHistory": "Access your task history from anywhere and share them with others",
 				"cloud:cloudBenefitMetrics": "Get a holistic view of your token consumption",
 				"cloud:logOut": "Log out",
-				"cloud:connect": "Connect Now",
+				"cloud:connect": "Get started",
 				"cloud:visitCloudWebsite": "Visit Roo Code Cloud",
 				"cloud:taskSync": "Task sync",
 				"cloud:taskSyncDescription": "Sync your tasks for viewing and sharing on Roo Code Cloud",
@@ -69,23 +72,21 @@ Object.defineProperty(window, "IMAGES_BASE_URI", {
 
 describe("CloudView", () => {
 	it("should display benefits when user is not authenticated", () => {
-		render(
-			<CloudView
-				userInfo={null}
-				isAuthenticated={false}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={null} isAuthenticated={false} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the benefits section is displayed
-		expect(screen.getByRole("heading", { name: "Connect to Roo Code Cloud" })).toBeInTheDocument()
-		expect(screen.getByText("Share tasks with others")).toBeInTheDocument()
-		expect(screen.getByText("Access your task history")).toBeInTheDocument()
+		expect(screen.getByRole("heading", { name: "Try Roo Code Cloud" })).toBeInTheDocument()
+		expect(screen.getByText("Access free and paid models that work great with Roo")).toBeInTheDocument()
+		expect(screen.getByText("Give tasks to autonomous Cloud agents")).toBeInTheDocument()
+		expect(screen.getByText("Get code reviews on Github, start tasks from Slack and more")).toBeInTheDocument()
+		expect(screen.getByText("Follow and control tasks from anywhere (including your phone)")).toBeInTheDocument()
+		expect(
+			screen.getByText("Access your task history from anywhere and share them with others"),
+		).toBeInTheDocument()
 		expect(screen.getByText("Get a holistic view of your token consumption")).toBeInTheDocument()
 
 		// Check that the connect button is also present
-		expect(screen.getByText("Connect Now")).toBeInTheDocument()
+		expect(screen.getByRole("button", { name: "Get started" })).toBeInTheDocument()
 	})
 
 	it("should not display benefits when user is authenticated", () => {
@@ -94,21 +95,20 @@ describe("CloudView", () => {
 			email: "[email protected]",
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the benefits section is NOT displayed
+		expect(screen.queryByText("Access free and paid models that work great with Roo")).not.toBeInTheDocument()
+		expect(screen.queryByText("Give tasks to autonomous Cloud agents")).not.toBeInTheDocument()
+		expect(
+			screen.queryByText("Get code reviews on Github, start tasks from Slack and more"),
+		).not.toBeInTheDocument()
+		expect(
+			screen.queryByText("Follow and control tasks from anywhere (including your phone)"),
+		).not.toBeInTheDocument()
 		expect(
-			screen.queryByText("Follow and control tasks from anywhere with Roomote Control"),
+			screen.queryByText("Access your task history from anywhere and share them with others"),
 		).not.toBeInTheDocument()
-		expect(screen.queryByText("Share tasks with others")).not.toBeInTheDocument()
-		expect(screen.queryByText("Access your task history")).not.toBeInTheDocument()
 		expect(screen.queryByText("Get a holistic view of your token consumption")).not.toBeInTheDocument()
 
 		// Check that user info is displayed instead
@@ -123,14 +123,7 @@ describe("CloudView", () => {
 			extensionBridgeEnabled: true,
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the remote control toggle is displayed
 		expect(screen.getByTestId("remote-control-toggle")).toBeInTheDocument()
@@ -147,14 +140,7 @@ describe("CloudView", () => {
 			extensionBridgeEnabled: false,
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the remote control toggle is NOT displayed
 		expect(screen.queryByTestId("remote-control-toggle")).not.toBeInTheDocument()
@@ -172,14 +158,7 @@ describe("CloudView", () => {
 			extensionBridgeEnabled: true, // Bridge enabled but roomote control disabled
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the remote control toggle is NOT displayed
 		expect(screen.queryByTestId("remote-control-toggle")).not.toBeInTheDocument()
@@ -202,14 +181,7 @@ describe("CloudView", () => {
 			extensionBridgeEnabled: true,
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the remote control toggle IS displayed for organization users
 		// (The ClineProvider would set featureRoomoteControlEnabled to true for org users)
@@ -226,14 +198,7 @@ describe("CloudView", () => {
 			email: "[email protected]",
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the cloud URL pill is NOT displayed for production URL
 		expect(screen.queryByText(/Roo Code Cloud URL:/)).not.toBeInTheDocument()
@@ -245,14 +210,7 @@ describe("CloudView", () => {
 			email: "[email protected]",
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://staging.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://staging.roocode.com" />)
 
 		// Check that the cloud URL pill is displayed with the staging URL
 		expect(screen.getByText(/Roo Code Cloud URL:/)).toBeInTheDocument()
@@ -260,14 +218,7 @@ describe("CloudView", () => {
 	})
 
 	it("should display cloud URL pill for non-authenticated users when not pointing to production", () => {
-		render(
-			<CloudView
-				userInfo={null}
-				isAuthenticated={false}
-				cloudApiUrl="https://dev.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={null} isAuthenticated={false} cloudApiUrl="https://dev.roocode.com" />)
 
 		// Check that the cloud URL pill is displayed even when not authenticated
 		expect(screen.getByText(/Roo Code Cloud URL:/)).toBeInTheDocument()
@@ -280,7 +231,7 @@ describe("CloudView", () => {
 			email: "[email protected]",
 		}
 
-		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} onDone={() => {}} />)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} />)
 
 		// Check that the cloud URL pill is NOT displayed when cloudApiUrl is undefined
 		expect(screen.queryByText(/Roo Code Cloud URL:/)).not.toBeInTheDocument()
@@ -294,14 +245,7 @@ describe("CloudView", () => {
 			organizationName: "Test Organization",
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the task sync toggle is disabled for organization users
 		const taskSyncToggle = screen.getByTestId("task-sync-toggle")
@@ -326,14 +270,7 @@ describe("CloudView", () => {
 			// No organizationId - regular user
 		}
 
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the task sync toggle is enabled for non-organization users
 		const taskSyncToggle = screen.getByTestId("task-sync-toggle")
@@ -353,14 +290,7 @@ describe("CloudView", () => {
 		}
 
 		// Test with task sync enabled
-		render(
-			<CloudView
-				userInfo={mockUserInfo}
-				isAuthenticated={true}
-				cloudApiUrl="https://app.roocode.com"
-				onDone={() => {}}
-			/>,
-		)
+		render(<CloudView userInfo={mockUserInfo} isAuthenticated={true} cloudApiUrl="https://app.roocode.com" />)
 
 		// Check that the toggle shows the current state (enabled in this case)
 		const taskSyncToggle = screen.getByTestId("task-sync-toggle")

+ 1 - 1
webview-ui/src/components/ui/button.tsx

@@ -5,7 +5,7 @@ import { cva, type VariantProps } from "class-variance-authority"
 import { cn } from "@/lib/utils"
 
 const buttonVariants = cva(
-	"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer active:opacity-80",
+	"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-full text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer active:opacity-80",
 	{
 		variants: {
 			variant: {

+ 7 - 5
webview-ui/src/i18n/locales/ca/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Tancar sessió",
 	"testApiAuthentication": "Provar autenticació d'API",
 	"signIn": "Connecta't a Roo Code Cloud",
-	"connect": "Connecta",
-	"cloudBenefitsTitle": "Connecta't a Roo Code Cloud",
-	"cloudBenefitWalkaway": "Segueix i controla tasques des de qualsevol lloc amb Roomote Control",
-	"cloudBenefitSharing": "Comparteix tasques amb altres",
-	"cloudBenefitHistory": "Accedeix al teu historial de tasques",
+	"connect": "Comença",
+	"cloudBenefitsTitle": "Prova Roo Code Cloud",
+	"cloudBenefitProvider": "Accedeix a models gratuïts i de pagament que funcionen molt bé amb Roo",
+	"cloudBenefitCloudAgents": "Dona tasques a agents autònoms al núvol",
+	"cloudBenefitTriggers": "Obtén revisions de codi a Github, inicia tasques des de Slack i més",
+	"cloudBenefitWalkaway": "Segueix i controla tasques des de qualsevol lloc (inclòs el telèfon)",
+	"cloudBenefitHistory": "Accedeix al teu historial de tasques des de qualsevol lloc i comparteix-les amb altres",
 	"cloudBenefitMetrics": "Obtén una visió holística del teu consum de tokens",
 	"visitCloudWebsite": "Visita Roo Code Cloud",
 	"taskSync": "Sincronització de tasques",

+ 7 - 5
webview-ui/src/i18n/locales/de/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Abmelden",
 	"testApiAuthentication": "API-Authentifizierung testen",
 	"signIn": "Mit Roo Code Cloud verbinden",
-	"connect": "Jetzt verbinden",
-	"cloudBenefitsTitle": "Mit Roo Code Cloud verbinden",
-	"cloudBenefitWalkaway": "Verfolge und steuere Aufgaben von überall mit Roomote Control",
-	"cloudBenefitSharing": "Aufgaben mit anderen teilen",
-	"cloudBenefitHistory": "Auf deinen Aufgabenverlauf zugreifen",
+	"connect": "Loslegen",
+	"cloudBenefitsTitle": "Roo Code Cloud ausprobieren",
+	"cloudBenefitProvider": "Zugriff auf kostenlose und kostenpflichtige Modelle, die hervorragend mit Roo funktionieren",
+	"cloudBenefitCloudAgents": "Aufgaben an autonome Cloud-Agenten übergeben",
+	"cloudBenefitTriggers": "Code-Reviews auf Github erhalten, Aufgaben aus Slack starten und mehr",
+	"cloudBenefitWalkaway": "Aufgaben von überall verfolgen und steuern (auch vom Handy)",
+	"cloudBenefitHistory": "Von überall auf deinen Aufgabenverlauf zugreifen und ihn mit anderen teilen",
 	"cloudBenefitMetrics": "Erhalte einen ganzheitlichen Überblick über deinen Token-Verbrauch",
 	"visitCloudWebsite": "Roo Code Cloud besuchen",
 	"taskSync": "Aufgabensynchronisierung",

+ 4 - 2
webview-ui/src/i18n/locales/en/cloud.json

@@ -6,9 +6,11 @@
 	"signIn": "Connect to Roo Code Cloud",
 	"connect": "Get started",
 	"cloudBenefitsTitle": "Try Roo Code Cloud",
+	"cloudBenefitProvider": "Access free and paid models that work great with Roo",
+	"cloudBenefitCloudAgents": "Give tasks to autonomous Cloud agents",
+	"cloudBenefitTriggers": "Get code reviews on Github, start tasks from Slack and more",
 	"cloudBenefitWalkaway": "Follow and control tasks from anywhere (including your phone)",
-	"cloudBenefitSharing": "Share tasks with others",
-	"cloudBenefitHistory": "Access your task history from anywhere",
+	"cloudBenefitHistory": "Access your task history from anywhere and share them with others",
 	"cloudBenefitMetrics": "Get a holistic view of your token consumption",
 	"visitCloudWebsite": "Visit Roo Code Cloud",
 	"taskSync": "Task sync",

+ 7 - 5
webview-ui/src/i18n/locales/es/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Cerrar sesión",
 	"testApiAuthentication": "Probar autenticación de API",
 	"signIn": "Conectar a Roo Code Cloud",
-	"connect": "Conectar ahora",
-	"cloudBenefitsTitle": "Conectar a Roo Code Cloud",
-	"cloudBenefitWalkaway": "Sigue y controla tareas desde cualquier lugar con Roomote Control",
-	"cloudBenefitSharing": "Comparte tareas con otros",
-	"cloudBenefitHistory": "Accede a tu historial de tareas",
+	"connect": "Empezar",
+	"cloudBenefitsTitle": "Prueba Roo Code Cloud",
+	"cloudBenefitProvider": "Accede a modelos gratuitos y de pago que funcionan genial con Roo",
+	"cloudBenefitCloudAgents": "Da tareas a agentes autónomos en la nube",
+	"cloudBenefitTriggers": "Obtén revisiones de código en Github, inicia tareas desde Slack y más",
+	"cloudBenefitWalkaway": "Sigue y controla tareas desde cualquier lugar (incluido tu teléfono)",
+	"cloudBenefitHistory": "Accede a tu historial de tareas desde cualquier lugar y compártelas con otros",
 	"cloudBenefitMetrics": "Obtén una visión holística de tu consumo de tokens",
 	"visitCloudWebsite": "Visitar Roo Code Cloud",
 	"taskSync": "Sincronización de tareas",

+ 7 - 5
webview-ui/src/i18n/locales/fr/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Déconnexion",
 	"testApiAuthentication": "Tester l'authentification API",
 	"signIn": "Se connecter à Roo Code Cloud",
-	"connect": "Se connecter maintenant",
-	"cloudBenefitsTitle": "Se connecter à Roo Code Cloud",
-	"cloudBenefitWalkaway": "Suivez et contrôlez les tâches depuis n'importe où avec Roomote Control",
-	"cloudBenefitSharing": "Partagez des tâches avec d'autres",
-	"cloudBenefitHistory": "Accédez à votre historique de tâches",
+	"connect": "Commencer",
+	"cloudBenefitsTitle": "Essayez Roo Code Cloud",
+	"cloudBenefitProvider": "Accédez à des modèles gratuits et payants qui fonctionnent parfaitement avec Roo",
+	"cloudBenefitCloudAgents": "Donnez des tâches à des agents Cloud autonomes",
+	"cloudBenefitTriggers": "Obtenez des revues de code sur Github, lancez des tâches depuis Slack et plus encore",
+	"cloudBenefitWalkaway": "Suivez et contrôlez les tâches de n'importe où (y compris votre téléphone)",
+	"cloudBenefitHistory": "Accédez à votre historique de tâches de n'importe où et partagez-les avec d'autres",
 	"cloudBenefitMetrics": "Obtenez une vue holistique de votre consommation de tokens",
 	"visitCloudWebsite": "Visiter Roo Code Cloud",
 	"taskSync": "Synchronisation des tâches",

+ 7 - 5
webview-ui/src/i18n/locales/hi/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "लॉग आउट",
 	"testApiAuthentication": "API प्रमाणीकरण का परीक्षण करें",
 	"signIn": "Roo Code Cloud से कनेक्ट करें",
-	"connect": "अभी कनेक्ट करें",
-	"cloudBenefitsTitle": "Roo Code Cloud से कनेक्ट करें",
-	"cloudBenefitWalkaway": "Roomote Control के साथ कहीं से भी कार्यों को फॉलो और नियंत्रित करें",
-	"cloudBenefitSharing": "दूसरों के साथ कार्य साझा करें",
-	"cloudBenefitHistory": "अपने कार्य इतिहास तक पहुंचें",
+	"connect": "शुरू करें",
+	"cloudBenefitsTitle": "Roo Code Cloud आज़माएं",
+	"cloudBenefitProvider": "मुफ़्त और सशुल्क मॉडल एक्सेस करें जो Roo के साथ बढ़िया काम करते हैं",
+	"cloudBenefitCloudAgents": "स्वायत्त क्लाउड एजेंटों को कार्य दें",
+	"cloudBenefitTriggers": "Github पर कोड समीक्षाएं प्राप्त करें, Slack से कार्य शुरू करें और बहुत कुछ",
+	"cloudBenefitWalkaway": "कहीं से भी कार्यों का पालन और नियंत्रण करें (अपने फोन सहित)",
+	"cloudBenefitHistory": "कहीं से भी अपने कार्य इतिहास तक पहुंचें और उन्हें दूसरों के साथ साझा करें",
 	"cloudBenefitMetrics": "अपने टोकन उपभोग का समग्र दृश्य प्राप्त करें",
 	"visitCloudWebsite": "Roo Code Cloud पर जाएं",
 	"taskSync": "कार्य सिंक",

+ 7 - 5
webview-ui/src/i18n/locales/id/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Keluar",
 	"testApiAuthentication": "Uji Autentikasi API",
 	"signIn": "Hubungkan ke Roo Code Cloud",
-	"connect": "Hubungkan Sekarang",
-	"cloudBenefitsTitle": "Hubungkan ke Roo Code Cloud",
-	"cloudBenefitWalkaway": "Ikuti dan kontrol tugas dari mana saja dengan Roomote Control",
-	"cloudBenefitSharing": "Bagikan tugas dengan orang lain",
-	"cloudBenefitHistory": "Akses riwayat tugas Anda",
+	"connect": "Mulai",
+	"cloudBenefitsTitle": "Coba Roo Code Cloud",
+	"cloudBenefitProvider": "Akses model gratis dan berbayar yang bekerja sangat baik dengan Roo",
+	"cloudBenefitCloudAgents": "Berikan tugas kepada agen Cloud otonom",
+	"cloudBenefitTriggers": "Dapatkan ulasan kode di Github, mulai tugas dari Slack, dan lainnya",
+	"cloudBenefitWalkaway": "Ikuti dan kontrol tugas dari mana saja (termasuk ponsel Anda)",
+	"cloudBenefitHistory": "Akses riwayat tugas Anda dari mana saja dan bagikan dengan orang lain",
 	"cloudBenefitMetrics": "Dapatkan tampilan holistik konsumsi token Anda",
 	"visitCloudWebsite": "Kunjungi Roo Code Cloud",
 	"taskSync": "Sinkronisasi tugas",

+ 7 - 5
webview-ui/src/i18n/locales/it/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Disconnetti",
 	"testApiAuthentication": "Verifica autenticazione API",
 	"signIn": "Connetti a Roo Code Cloud",
-	"connect": "Connetti ora",
-	"cloudBenefitsTitle": "Connetti a Roo Code Cloud",
-	"cloudBenefitWalkaway": "Segui e controlla le attività da qualsiasi luogo con Roomote Control",
-	"cloudBenefitSharing": "Condividi attività con altri",
-	"cloudBenefitHistory": "Accedi alla cronologia delle tue attività",
+	"connect": "Inizia",
+	"cloudBenefitsTitle": "Prova Roo Code Cloud",
+	"cloudBenefitProvider": "Accedi a modelli gratuiti e a pagamento che funzionano perfettamente con Roo",
+	"cloudBenefitCloudAgents": "Assegna attività ad agenti Cloud autonomi",
+	"cloudBenefitTriggers": "Ottieni revisioni del codice su Github, avvia attività da Slack e altro",
+	"cloudBenefitWalkaway": "Segui e controlla le attività da qualsiasi luogo (incluso il tuo telefono)",
+	"cloudBenefitHistory": "Accedi alla cronologia delle tue attività da qualsiasi luogo e condividile con altri",
 	"cloudBenefitMetrics": "Ottieni una visione olistica del tuo consumo di token",
 	"visitCloudWebsite": "Visita Roo Code Cloud",
 	"taskSync": "Sincronizzazione attività",

+ 7 - 5
webview-ui/src/i18n/locales/ja/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "ログアウト",
 	"testApiAuthentication": "API認証をテスト",
 	"signIn": "Roo Code Cloud に接続",
-	"connect": "今すぐ接続",
-	"cloudBenefitsTitle": "Roo Code Cloudに接続",
-	"cloudBenefitWalkaway": "Roomote Controlでどこからでもタスクをフォローし制御",
-	"cloudBenefitSharing": "他の人とタスクを共有",
-	"cloudBenefitHistory": "タスク履歴にアクセス",
+	"connect": "始める",
+	"cloudBenefitsTitle": "Roo Code Cloudを試す",
+	"cloudBenefitProvider": "Rooと相性の良い無料および有料モデルにアクセス",
+	"cloudBenefitCloudAgents": "自律型クラウドエージェントにタスクを依頼",
+	"cloudBenefitTriggers": "Githubでコードレビューを取得、Slackからタスクを開始など",
+	"cloudBenefitWalkaway": "どこからでも(スマートフォンを含む)タスクを追跡および制御",
+	"cloudBenefitHistory": "どこからでもタスク履歴にアクセスし、他の人と共有",
 	"cloudBenefitMetrics": "トークン消費の全体像を把握",
 	"visitCloudWebsite": "Roo Code Cloudを訪問",
 	"taskSync": "タスク同期",

+ 7 - 5
webview-ui/src/i18n/locales/ko/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "로그아웃",
 	"testApiAuthentication": "API 인증 테스트",
 	"signIn": "Roo Code Cloud에 연결",
-	"connect": "지금 연결",
-	"cloudBenefitsTitle": "Roo Code Cloud에 연결",
-	"cloudBenefitWalkaway": "Roomote Control로 어디서나 작업을 팔로우하고 제어하세요",
-	"cloudBenefitSharing": "다른 사람과 작업 공유",
-	"cloudBenefitHistory": "작업 기록에 액세스",
+	"connect": "시작하기",
+	"cloudBenefitsTitle": "Roo Code Cloud 체험하기",
+	"cloudBenefitProvider": "Roo와 잘 작동하는 무료 및 유료 모델에 액세스하세요",
+	"cloudBenefitCloudAgents": "자율 클라우드 에이전트에게 작업 부여",
+	"cloudBenefitTriggers": "GitHub에서 코드 리뷰 받기, Slack에서 작업 시작 등",
+	"cloudBenefitWalkaway": "어디서나(휴대전화 포함) 작업을 팔로우하고 제어하세요",
+	"cloudBenefitHistory": "어디서나 작업 기록에 액세스하고 다른 사람과 공유하세요",
 	"cloudBenefitMetrics": "토큰 소비에 대한 전체적인 보기 얻기",
 	"visitCloudWebsite": "Roo Code Cloud 방문",
 	"taskSync": "작업 동기화",

+ 7 - 5
webview-ui/src/i18n/locales/nl/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Uitloggen",
 	"testApiAuthentication": "API-authenticatie testen",
 	"signIn": "Verbind met Roo Code Cloud",
-	"connect": "Nu verbinden",
-	"cloudBenefitsTitle": "Verbind met Roo Code Cloud",
-	"cloudBenefitWalkaway": "Volg en beheer taken van overal met Roomote Control",
-	"cloudBenefitSharing": "Deel taken met anderen",
-	"cloudBenefitHistory": "Toegang tot je taakgeschiedenis",
+	"connect": "Aan de slag",
+	"cloudBenefitsTitle": "Probeer Roo Code Cloud",
+	"cloudBenefitProvider": "Toegang tot gratis en betaalde modellen die geweldig werken met Roo",
+	"cloudBenefitCloudAgents": "Geef taken aan autonome Cloud-agents",
+	"cloudBenefitTriggers": "Krijg code reviews op Github, start taken vanuit Slack en meer",
+	"cloudBenefitWalkaway": "Volg en beheer taken van overal (inclusief je telefoon)",
+	"cloudBenefitHistory": "Toegang tot je taakgeschiedenis van overal en deel ze met anderen",
 	"cloudBenefitMetrics": "Krijg een holistisch overzicht van je tokenverbruik",
 	"visitCloudWebsite": "Bezoek Roo Code Cloud",
 	"taskSync": "Taaksynchronisatie",

+ 7 - 5
webview-ui/src/i18n/locales/pl/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Wyloguj",
 	"testApiAuthentication": "Testuj uwierzytelnianie API",
 	"signIn": "Połącz z Roo Code Cloud",
-	"connect": "Połącz teraz",
-	"cloudBenefitsTitle": "Połącz z Roo Code Cloud",
-	"cloudBenefitWalkaway": "Śledź i kontroluj zadania z dowolnego miejsca za pomocą Roomote Control",
-	"cloudBenefitSharing": "Udostępniaj zadania innym",
-	"cloudBenefitHistory": "Uzyskaj dostęp do historii zadań",
+	"connect": "Zacznij",
+	"cloudBenefitsTitle": "Wypróbuj Roo Code Cloud",
+	"cloudBenefitProvider": "Uzyskaj dostęp do darmowych i płatnych modeli, które świetnie współpracują z Roo",
+	"cloudBenefitCloudAgents": "Zlecaj zadania autonomicznym agentom w chmurze",
+	"cloudBenefitTriggers": "Otrzymuj recenzje kodu na Githubie, uruchamiaj zadania ze Slacka i nie tylko",
+	"cloudBenefitWalkaway": "Śledź i kontroluj zadania z dowolnego miejsca (również z telefonu)",
+	"cloudBenefitHistory": "Uzyskaj dostęp do historii zadań z dowolnego miejsca i udostępniaj je innym",
 	"cloudBenefitMetrics": "Uzyskaj całościowy widok zużycia tokenów",
 	"visitCloudWebsite": "Odwiedź Roo Code Cloud",
 	"taskSync": "Synchronizacja zadań",

+ 7 - 5
webview-ui/src/i18n/locales/pt-BR/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Sair",
 	"testApiAuthentication": "Testar Autenticação de API",
 	"signIn": "Conectar ao Roo Code Cloud",
-	"connect": "Conectar Agora",
-	"cloudBenefitsTitle": "Conectar ao Roo Code Cloud",
-	"cloudBenefitWalkaway": "Acompanhe e controle tarefas de qualquer lugar com Roomote Control",
-	"cloudBenefitSharing": "Compartilhe tarefas com outros",
-	"cloudBenefitHistory": "Acesse seu histórico de tarefas",
+	"connect": "Começar",
+	"cloudBenefitsTitle": "Experimente o Roo Code Cloud",
+	"cloudBenefitProvider": "Acesse modelos gratuitos e pagos que funcionam muito bem com o Roo",
+	"cloudBenefitCloudAgents": "Dê tarefas a agentes autônomos na nuvem",
+	"cloudBenefitTriggers": "Obtenha revisões de código no Github, inicie tarefas do Slack e muito mais",
+	"cloudBenefitWalkaway": "Acompanhe e controle tarefas de qualquer lugar (incluindo seu telefone)",
+	"cloudBenefitHistory": "Acesse seu histórico de tarefas de qualquer lugar e compartilhe com outros",
 	"cloudBenefitMetrics": "Obtenha uma visão holística do seu consumo de tokens",
 	"visitCloudWebsite": "Visitar Roo Code Cloud",
 	"taskSync": "Sincronização de tarefas",

+ 7 - 5
webview-ui/src/i18n/locales/ru/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Выход",
 	"testApiAuthentication": "Проверить аутентификацию API",
 	"signIn": "Подключиться к Roo Code Cloud",
-	"connect": "Подключиться сейчас",
-	"cloudBenefitsTitle": "Подключиться к Roo Code Cloud",
-	"cloudBenefitWalkaway": "Отслеживайте и управляйте задачами откуда угодно с Roomote Control",
-	"cloudBenefitSharing": "Делитесь задачами с другими",
-	"cloudBenefitHistory": "Получите доступ к истории задач",
+	"connect": "Начать",
+	"cloudBenefitsTitle": "Попробуйте Roo Code Cloud",
+	"cloudBenefitProvider": "Доступ к бесплатным и платным моделям, которые отлично работают с Roo",
+	"cloudBenefitCloudAgents": "Поручайте задачи автономным облачным агентам",
+	"cloudBenefitTriggers": "Получайте код-ревью на Github, запускайте задачи из Slack и многое другое",
+	"cloudBenefitWalkaway": "Отслеживайте и управляйте задачами откуда угодно (включая телефон)",
+	"cloudBenefitHistory": "Доступ к истории задач откуда угодно и возможность делиться ими с другими",
 	"cloudBenefitMetrics": "Получите целостное представление о потреблении токенов",
 	"visitCloudWebsite": "Посетить Roo Code Cloud",
 	"taskSync": "Синхронизация задач",

+ 7 - 5
webview-ui/src/i18n/locales/tr/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Çıkış yap",
 	"testApiAuthentication": "API Kimlik Doğrulamayı Test Et",
 	"signIn": "Roo Code Cloud'a bağlan",
-	"connect": "Şimdi Bağlan",
-	"cloudBenefitsTitle": "Roo Code Cloud'a bağlan",
-	"cloudBenefitWalkaway": "Roomote Control ile görevleri her yerden takip et ve kontrol et",
-	"cloudBenefitSharing": "Görevleri başkalarıyla paylaş",
-	"cloudBenefitHistory": "Görev geçmişine eriş",
+	"connect": "Başlayın",
+	"cloudBenefitsTitle": "Roo Code Cloud'u Deneyin",
+	"cloudBenefitProvider": "Roo ile harika çalışan ücretsiz ve ücretli modellere erişin",
+	"cloudBenefitCloudAgents": "Otonom Bulut ajanlarına görevler verin",
+	"cloudBenefitTriggers": "Github'da kod incelemeleri alın, Slack'ten görevler başlatın ve daha fazlasını yapın",
+	"cloudBenefitWalkaway": "Görevleri her yerden (telefonunuz dahil) takip edin ve kontrol edin",
+	"cloudBenefitHistory": "Görev geçmişinize her yerden erişin ve başkalarıyla paylaşın",
 	"cloudBenefitMetrics": "Token tüketiminizin bütünsel görünümünü elde edin",
 	"visitCloudWebsite": "Roo Code Cloud'u ziyaret et",
 	"taskSync": "Görev senkronizasyonu",

+ 7 - 5
webview-ui/src/i18n/locales/vi/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "Đăng xuất",
 	"testApiAuthentication": "Kiểm tra xác thực API",
 	"signIn": "Kết nối với Roo Code Cloud",
-	"connect": "Kết nối ngay",
-	"cloudBenefitsTitle": "Kết nối với Roo Code Cloud",
-	"cloudBenefitWalkaway": "Theo dõi và điều khiển tác vụ từ bất kỳ đâu với Roomote Control",
-	"cloudBenefitSharing": "Chia sẻ tác vụ với người khác",
-	"cloudBenefitHistory": "Truy cập lịch sử tác vụ của bạn",
+	"connect": "Bắt đầu",
+	"cloudBenefitsTitle": "Dùng thử Roo Code Cloud",
+	"cloudBenefitProvider": "Truy cập các mô hình miễn phí và trả phí hoạt động tuyệt vời với Roo",
+	"cloudBenefitCloudAgents": "Giao nhiệm vụ cho các agent đám mây tự trị",
+	"cloudBenefitTriggers": "Nhận đánh giá mã trên Github, bắt đầu tác vụ từ Slack và hơn thế nữa",
+	"cloudBenefitWalkaway": "Theo dõi và kiểm soát các tác vụ từ mọi nơi (bao gồm cả điện thoại của bạn)",
+	"cloudBenefitHistory": "Truy cập lịch sử tác vụ của bạn từ mọi nơi và chia sẻ chúng với người khác",
 	"cloudBenefitMetrics": "Có cái nhìn toàn diện về mức tiêu thụ token của bạn",
 	"visitCloudWebsite": "Truy cập Roo Code Cloud",
 	"taskSync": "Đồng bộ tác vụ",

+ 7 - 5
webview-ui/src/i18n/locales/zh-CN/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "退出登录",
 	"testApiAuthentication": "测试 API 认证",
 	"signIn": "连接到 Roo Code Cloud",
-	"connect": "立即连接",
-	"cloudBenefitsTitle": "连接到 Roo Code Cloud",
-	"cloudBenefitWalkaway": "使用 Roomote Control 随时随地跟踪和控制任务",
-	"cloudBenefitSharing": "与他人共享任务",
-	"cloudBenefitHistory": "访问您的任务历史",
+	"connect": "开始使用",
+	"cloudBenefitsTitle": "试用 Roo Code Cloud",
+	"cloudBenefitProvider": "访问与 Roo 完美配合的免费和付费模型",
+	"cloudBenefitCloudAgents": "将任务分配给自主云代理",
+	"cloudBenefitTriggers": "在 GitHub 上获取代码审查,从 Slack 启动任务等等",
+	"cloudBenefitWalkaway": "随时随地(包括您的手机)跟踪和控制任务",
+	"cloudBenefitHistory": "随时随地访问您的任务历史记录并与他人共享",
 	"cloudBenefitMetrics": "获取您的令牌消耗的整体视图",
 	"visitCloudWebsite": "访问 Roo Code Cloud",
 	"taskSync": "任务同步",

+ 7 - 5
webview-ui/src/i18n/locales/zh-TW/cloud.json

@@ -4,11 +4,13 @@
 	"logOut": "登出",
 	"testApiAuthentication": "測試 API 認證",
 	"signIn": "連線至 Roo Code Cloud",
-	"connect": "立即連線",
-	"cloudBenefitsTitle": "連線至 Roo Code Cloud",
-	"cloudBenefitWalkaway": "使用 Roomote Control 隨時隨地追蹤和控制任務",
-	"cloudBenefitSharing": "與他人分享任務",
-	"cloudBenefitHistory": "存取您的任務歷史",
+	"connect": "開始使用",
+	"cloudBenefitsTitle": "試用 Roo Code Cloud",
+	"cloudBenefitProvider": "存取與 Roo 完美配合的免費和付費模型",
+	"cloudBenefitCloudAgents": "將任務分配給自主雲端代理",
+	"cloudBenefitTriggers": "在 Github 上獲取程式碼審查,從 Slack 啟動任務等等",
+	"cloudBenefitWalkaway": "隨時隨地(包括您的手機)追蹤和控制任務",
+	"cloudBenefitHistory": "隨時隨地存取您的任務歷史記錄並與他人分享",
 	"cloudBenefitMetrics": "獲得您的代幣消耗的整體視圖",
 	"visitCloudWebsite": "造訪 Roo Code Cloud",
 	"taskSync": "任務同步",