From 618baddd90d31e3333443c95428660bf46f82747 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Mon, 4 May 2026 17:17:43 +0100 Subject: [PATCH 1/2] Remove Roo Code Cloud welcome CTAs --- webview-ui/src/components/chat/ChatView.tsx | 33 ------- .../chat/__tests__/ChatView.spec.tsx | 37 ++++---- .../welcome/WelcomeViewProvider.tsx | 16 +--- .../__tests__/WelcomeViewProvider.spec.tsx | 85 ++++++------------- webview-ui/src/i18n/locales/ca/cloud.json | 3 +- webview-ui/src/i18n/locales/ca/welcome.json | 2 +- webview-ui/src/i18n/locales/de/cloud.json | 3 +- webview-ui/src/i18n/locales/de/welcome.json | 2 +- webview-ui/src/i18n/locales/en/cloud.json | 3 +- webview-ui/src/i18n/locales/en/welcome.json | 2 +- webview-ui/src/i18n/locales/es/cloud.json | 3 +- webview-ui/src/i18n/locales/es/welcome.json | 2 +- webview-ui/src/i18n/locales/fr/cloud.json | 3 +- webview-ui/src/i18n/locales/fr/welcome.json | 2 +- webview-ui/src/i18n/locales/hi/cloud.json | 3 +- webview-ui/src/i18n/locales/hi/welcome.json | 2 +- webview-ui/src/i18n/locales/id/cloud.json | 3 +- webview-ui/src/i18n/locales/id/welcome.json | 2 +- webview-ui/src/i18n/locales/it/cloud.json | 3 +- webview-ui/src/i18n/locales/it/welcome.json | 2 +- webview-ui/src/i18n/locales/ja/cloud.json | 3 +- webview-ui/src/i18n/locales/ja/welcome.json | 2 +- webview-ui/src/i18n/locales/ko/cloud.json | 3 +- webview-ui/src/i18n/locales/ko/welcome.json | 2 +- webview-ui/src/i18n/locales/nl/cloud.json | 3 +- webview-ui/src/i18n/locales/nl/welcome.json | 2 +- webview-ui/src/i18n/locales/pl/cloud.json | 3 +- webview-ui/src/i18n/locales/pl/welcome.json | 2 +- webview-ui/src/i18n/locales/pt-BR/cloud.json | 3 +- .../src/i18n/locales/pt-BR/welcome.json | 2 +- webview-ui/src/i18n/locales/ru/cloud.json | 3 +- webview-ui/src/i18n/locales/ru/welcome.json | 2 +- webview-ui/src/i18n/locales/tr/cloud.json | 3 +- webview-ui/src/i18n/locales/tr/welcome.json | 2 +- webview-ui/src/i18n/locales/vi/cloud.json | 3 +- webview-ui/src/i18n/locales/vi/welcome.json | 2 +- webview-ui/src/i18n/locales/zh-CN/cloud.json | 3 +- .../src/i18n/locales/zh-CN/welcome.json | 2 +- webview-ui/src/i18n/locales/zh-TW/cloud.json | 3 +- .../src/i18n/locales/zh-TW/welcome.json | 2 +- 40 files changed, 77 insertions(+), 184 deletions(-) diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index 7008dbe590d..8c61ff3ebf7 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -2,10 +2,8 @@ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo import { useDeepCompareEffect, useEvent } from "react-use" import { Virtuoso, type VirtuosoHandle } from "react-virtuoso" import removeMd from "remove-markdown" -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react" import useSound from "use-sound" import { LRUCache } from "lru-cache" -import { Trans } from "react-i18next" import { useDebounceEffect } from "@src/utils/useDebounceEffect" import { appendImages } from "@src/utils/imageUtils" @@ -31,7 +29,6 @@ import { useSelectedModel } from "@src/components/ui/hooks/useSelectedModel" import RooHero from "@src/components/welcome/RooHero" import RooTips from "@src/components/welcome/RooTips" import { StandardTooltip, Button } from "@src/components/ui" -import { CloudUpsellDialog } from "@src/components/cloud/CloudUpsellDialog" import TelemetryBanner from "../common/TelemetryBanner" import VersionIndicator from "../common/VersionIndicator" @@ -46,10 +43,7 @@ import { CheckpointWarning } from "./CheckpointWarning" import { QueuedMessages } from "./QueuedMessages" import { WorktreeSelector } from "./WorktreeSelector" import FileChangesPanel from "./FileChangesPanel" -import DismissibleUpsell from "../common/DismissibleUpsell" -import { useCloudUpsell } from "@src/hooks/useCloudUpsell" import { useScrollLifecycle } from "@src/hooks/useScrollLifecycle" -import { Cloud } from "lucide-react" export interface ChatViewProps { isHidden: boolean @@ -90,7 +84,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction { inputValueRef.current = inputValue @@ -1639,22 +1623,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction 0 && } - {/* Logged out users should see a one-time upsell, but not for brand new users */} - {!cloudIsAuthenticated && taskHistory.length >= 6 && ( - } - onClick={() => openUpsell()} - dismissOnClick={false} - className="bg-none mt-6 border-border rounded-xl p-3 !text-base"> - , - }} - /> - - )} )} @@ -1825,7 +1793,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction - ) } diff --git a/webview-ui/src/components/chat/__tests__/ChatView.spec.tsx b/webview-ui/src/components/chat/__tests__/ChatView.spec.tsx index 63e71c9bd1d..a00ebd98e5f 100644 --- a/webview-ui/src/components/chat/__tests__/ChatView.spec.tsx +++ b/webview-ui/src/components/chat/__tests__/ChatView.spec.tsx @@ -98,13 +98,6 @@ vi.mock("../Announcement", () => ({ }, })) -// Mock DismissibleUpsell component -vi.mock("@/components/common/DismissibleUpsell", () => ({ - default: function MockDismissibleUpsell({ children }: { children: React.ReactNode }) { - return
{children}
- }, -})) - // Mock QueuedMessages component vi.mock("../QueuedMessages", () => ({ QueuedMessages: function MockQueuedMessages({ @@ -670,10 +663,10 @@ describe("ChatView - Version Indicator Tests", () => { }) }) -describe("ChatView - DismissibleUpsell Display Tests", () => { +describe("ChatView - Cloud upsell display tests", () => { beforeEach(() => vi.clearAllMocks()) - it("does not show DismissibleUpsell when user is authenticated to Cloud", () => { + it("does not show Cloud upsell when user is authenticated to Cloud", () => { const { queryByTestId } = renderChatView() // Hydrate state with user authenticated to cloud @@ -688,11 +681,11 @@ describe("ChatView - DismissibleUpsell Display Tests", () => { clineMessages: [], // No active task }) - // Should not show DismissibleUpsell when authenticated + // Should not show Cloud upsell when authenticated expect(queryByTestId("dismissible-upsell")).not.toBeInTheDocument() }) - it("does not show DismissibleUpsell when user has only run 3 tasks in their history", () => { + it("does not show Cloud upsell when user has only run 3 tasks in their history", () => { const { queryByTestId } = renderChatView() // Hydrate state with user not authenticated but only 3 tasks @@ -706,12 +699,12 @@ describe("ChatView - DismissibleUpsell Display Tests", () => { clineMessages: [], // No active task }) - // Should not show DismissibleUpsell with less than 4 tasks + // Should not show Cloud upsell with less than 4 tasks expect(queryByTestId("dismissible-upsell")).not.toBeInTheDocument() }) - it("shows DismissibleUpsell when user is not authenticated and has run 6 or more tasks", async () => { - const { getByTestId } = renderChatView() + it("does not show Cloud upsell when user is not authenticated and has run 6 or more tasks", async () => { + const { queryByTestId } = renderChatView() // Hydrate state with user not authenticated and 4 tasks mockPostMessage({ @@ -728,13 +721,13 @@ describe("ChatView - DismissibleUpsell Display Tests", () => { clineMessages: [], // No active task }) - // Wait for component to render and show DismissibleUpsell + // The Cloud upsell CTA has been removed from the home screen. await waitFor(() => { - expect(getByTestId("dismissible-upsell")).toBeInTheDocument() + expect(queryByTestId("dismissible-upsell")).not.toBeInTheDocument() }) }) - it("does not show DismissibleUpsell when there is an active task (regardless of auth status)", async () => { + it("does not show Cloud upsell when there is an active task (regardless of auth status)", async () => { const { queryByTestId } = renderChatView() // Hydrate state with active task @@ -758,7 +751,7 @@ describe("ChatView - DismissibleUpsell Display Tests", () => { // Wait for component to render with active task await waitFor(() => { - // Should not show DismissibleUpsell during active task + // Should not show Cloud upsell during active task expect(queryByTestId("dismissible-upsell")).not.toBeInTheDocument() // Should not show RooTips either since the entire welcome screen is hidden during active tasks expect(queryByTestId("roo-tips")).not.toBeInTheDocument() @@ -767,7 +760,7 @@ describe("ChatView - DismissibleUpsell Display Tests", () => { }) }) - it("shows RooTips when user is authenticated (instead of DismissibleUpsell)", () => { + it("shows RooTips when user is authenticated", () => { const { queryByTestId, getByTestId } = renderChatView() // Hydrate state with user authenticated to cloud @@ -782,12 +775,12 @@ describe("ChatView - DismissibleUpsell Display Tests", () => { clineMessages: [], // No active task }) - // Should not show DismissibleUpsell but should show RooTips + // Should not show Cloud upsell but should show RooTips expect(queryByTestId("dismissible-upsell")).not.toBeInTheDocument() expect(getByTestId("roo-tips")).toBeInTheDocument() }) - it("shows RooTips when user has fewer than 6 tasks (instead of DismissibleUpsell)", () => { + it("shows RooTips when user has fewer than 6 tasks", () => { const { queryByTestId, getByTestId } = renderChatView() // Hydrate state with user not authenticated but fewer than 4 tasks @@ -801,7 +794,7 @@ describe("ChatView - DismissibleUpsell Display Tests", () => { clineMessages: [], // No active task }) - // Should not show DismissibleUpsell but should show RooTips + // Should not show Cloud upsell but should show RooTips expect(queryByTestId("dismissible-upsell")).not.toBeInTheDocument() expect(getByTestId("roo-tips")).toBeInTheDocument() }) diff --git a/webview-ui/src/components/welcome/WelcomeViewProvider.tsx b/webview-ui/src/components/welcome/WelcomeViewProvider.tsx index 43546b64242..b428f9f97a0 100644 --- a/webview-ui/src/components/welcome/WelcomeViewProvider.tsx +++ b/webview-ui/src/components/welcome/WelcomeViewProvider.tsx @@ -91,11 +91,8 @@ const WelcomeViewProvider = () => { ) const handleGetStarted = useCallback(() => { - // Landing screen - always trigger auth with Roo if (selectedProvider === null) { - setAuthOrigin("landing") - vscode.postMessage({ type: "rooCloudSignIn", useProviderSignup: true }) - setAuthInProgress(true) + setSelectedProvider("roo") } // Provider Selection screen else if (selectedProvider === "roo") { @@ -129,11 +126,6 @@ const WelcomeViewProvider = () => { } }, [selectedProvider, cloudIsAuthenticated, apiConfiguration, currentApiConfigName]) - const handleNoAccount = useCallback(() => { - // Navigate to Provider Selection, defaulting to Roo option - setSelectedProvider("roo") - }, []) - const handleBackToLanding = useCallback(() => { // Return to the landing screen setSelectedProvider(null) @@ -299,18 +291,12 @@ const WelcomeViewProvider = () => {

-

- -

- - {t("welcome:landing.noAccount")} -
diff --git a/webview-ui/src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx b/webview-ui/src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx index b3fd7ec1f95..29f8ade809f 100644 --- a/webview-ui/src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx +++ b/webview-ui/src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx @@ -128,67 +128,34 @@ describe("WelcomeViewProvider", () => { // Should show introduction expect(screen.getByTestId("trans-welcome:landing.introduction")).toBeInTheDocument() - // Should show account mention - expect(screen.getByTestId("trans-welcome:landing.accountMention")).toBeInTheDocument() - // Should show "Get Started" button expect(screen.getByTestId("button-primary")).toBeInTheDocument() - // Should show "no account" link - const noAccountLink = screen - .getAllByTestId("vscode-link") - .find((link) => link.textContent?.includes("welcome:landing.noAccount")) - expect(noAccountLink).toBeInTheDocument() - }) - - it("triggers auth when 'Get Started' is clicked on landing", () => { - renderWelcomeViewProvider() - - const getStartedButton = screen.getByTestId("button-primary") - fireEvent.click(getStartedButton) - - expect(vscode.postMessage).toHaveBeenCalledWith({ - type: "rooCloudSignIn", - useProviderSignup: true, - }) + // Should not show Cloud account CTA copy + expect(screen.queryByTestId("trans-welcome:landing.accountMention")).not.toBeInTheDocument() }) - it("shows auth in progress after clicking 'Get Started' on landing", () => { + it("navigates to provider selection when 'Get Started' is clicked on landing", () => { renderWelcomeViewProvider() const getStartedButton = screen.getByTestId("button-primary") fireEvent.click(getStartedButton) - // Should show progress ring - expect(screen.getByTestId("progress-ring")).toBeInTheDocument() - - // Should show waiting heading - expect(screen.getByText(/welcome:waitingForCloud.heading/)).toBeInTheDocument() - }) - - it("navigates to provider selection when 'no account' is clicked", () => { - renderWelcomeViewProvider() - - // Click the "no account" link - const noAccountLink = screen - .getAllByTestId("vscode-link") - .find((link) => link.textContent?.includes("welcome:landing.noAccount")) - fireEvent.click(noAccountLink!) - - // Should now show provider selection screen with radio buttons expect(screen.getByTestId("radio-group")).toBeInTheDocument() expect(screen.getByTestId("radio-roo")).toBeInTheDocument() expect(screen.getByTestId("radio-custom")).toBeInTheDocument() expect(screen.getByTestId("trans-welcome:providerSignup.chooseProvider")).toBeInTheDocument() + expect(vscode.postMessage).not.toHaveBeenCalledWith({ + type: "rooCloudSignIn", + useProviderSignup: true, + }) }) }) describe("Provider Selection Screen", () => { const navigateToProviderSelection = () => { - const noAccountLink = screen - .getAllByTestId("vscode-link") - .find((link) => link.textContent?.includes("welcome:landing.noAccount")) - fireEvent.click(noAccountLink!) + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) } it("shows radio buttons for Roo and Custom providers", () => { @@ -275,11 +242,18 @@ describe("WelcomeViewProvider", () => { }) describe("Auth In Progress State", () => { + const startProviderAuth = () => { + const landingGetStartedButton = screen.getByTestId("button-primary") + fireEvent.click(landingGetStartedButton) + + const providerGetStartedButton = screen.getByTestId("button-primary") + fireEvent.click(providerGetStartedButton) + } + it("shows waiting state with progress ring", () => { renderWelcomeViewProvider() - const getStartedButton = screen.getByTestId("button-primary") - fireEvent.click(getStartedButton) + startProviderAuth() // Should show progress ring expect(screen.getByTestId("progress-ring")).toBeInTheDocument() @@ -294,31 +268,24 @@ describe("WelcomeViewProvider", () => { it("shows Go Back button in waiting state", () => { renderWelcomeViewProvider() - const getStartedButton = screen.getByTestId("button-primary") - fireEvent.click(getStartedButton) + startProviderAuth() // Should show secondary button (Go Back) expect(screen.getByTestId("button-secondary")).toBeInTheDocument() expect(screen.getByText(/welcome:waitingForCloud.goBack/)).toBeInTheDocument() }) - it("returns to landing screen when Go Back is clicked (auth from landing)", () => { + it("returns to provider selection when Go Back is clicked", () => { renderWelcomeViewProvider() - // Start auth from landing - const getStartedButton = screen.getByTestId("button-primary") - fireEvent.click(getStartedButton) - - // Verify we're in auth progress - expect(screen.getByTestId("progress-ring")).toBeInTheDocument() + startProviderAuth() // Click Go Back const goBackButton = screen.getByTestId("button-secondary") fireEvent.click(goBackButton) - // Should be back on landing screen - expect(screen.getByText(/welcome:landing.greeting/)).toBeInTheDocument() - expect(screen.getByTestId("trans-welcome:landing.introduction")).toBeInTheDocument() + // Should be back on provider selection screen + expect(screen.getByTestId("radio-group")).toBeInTheDocument() expect(screen.queryByTestId("progress-ring")).not.toBeInTheDocument() }) @@ -326,10 +293,8 @@ describe("WelcomeViewProvider", () => { renderWelcomeViewProvider({ cloudIsAuthenticated: false }) // Navigate to provider selection - const noAccountLink = screen - .getAllByTestId("vscode-link") - .find((link) => link.textContent?.includes("welcome:landing.noAccount")) - fireEvent.click(noAccountLink!) + const landingGetStartedButton = screen.getByTestId("button-primary") + fireEvent.click(landingGetStartedButton) // Start auth from provider selection (Roo is selected by default) const getStartedButton = screen.getByTestId("button-primary") diff --git a/webview-ui/src/i18n/locales/ca/cloud.json b/webview-ui/src/i18n/locales/ca/cloud.json index 8516407fcae..3189f828773 100644 --- a/webview-ui/src/i18n/locales/ca/cloud.json +++ b/webview-ui/src/i18n/locales/ca/cloud.json @@ -27,7 +27,6 @@ "switchAccount": "Canviar Compte de Roo Code Cloud", "upsell": { "autoApprovePowerUser": "Donant-li una mica d'independència a Roo? Controla'l des de qualsevol lloc amb Roo Code Cloud. Més informació.", - "longRunningTask": "Això pot trigar una estona. Continua des de qualsevol lloc amb Cloud.", - "taskList": "T'agrada Roo? Fes una ullada a Roo Code Cloud: segueix i controla les teves tasques des de qualsevol lloc, executa agents autònoms al núvol, obtén estadístiques d'ús i més. Aprèn-ne més." + "longRunningTask": "Això pot trigar una estona. Continua des de qualsevol lloc amb Cloud." } } diff --git a/webview-ui/src/i18n/locales/ca/welcome.json b/webview-ui/src/i18n/locales/ca/welcome.json index 23a15796b30..2fa29db729d 100644 --- a/webview-ui/src/i18n/locales/ca/welcome.json +++ b/webview-ui/src/i18n/locales/ca/welcome.json @@ -16,7 +16,7 @@ "greeting": "Benvingut a Roo Code!", "introduction": "Amb una gamma de Modes integrats i ampliables, Roo Code et permet planificar, arquitectar, codificar, depurar i augmentar la teva productivitat com mai abans.", "accountMention": "Per començar, crea el teu compte Roo Code Cloud. Obtén models potents, control web, analítica, suport i molt més.", - "getStarted": "Crea compte Roo", + "getStarted": "Comença", "noAccount": "o utilitza sense compte" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/de/cloud.json b/webview-ui/src/i18n/locales/de/cloud.json index b4c5244194d..dbb6218868c 100644 --- a/webview-ui/src/i18n/locales/de/cloud.json +++ b/webview-ui/src/i18n/locales/de/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "Roo Code Cloud URL", "upsell": { "autoApprovePowerUser": "Roo etwas Unabhängigkeit geben? Kontrolliere es von überall mit Roo Code Cloud. Mehr erfahren.", - "longRunningTask": "Das könnte eine Weile dauern. Mit Cloud von überall weitermachen.", - "taskList": "Gefällt dir Roo? Schau dir Roo Code Cloud an: Verfolge und steuere deine Aufgaben von überall, führe autonome Cloud-Agenten aus, erhalte Nutzungsstatistiken und mehr. Erfahre mehr." + "longRunningTask": "Das könnte eine Weile dauern. Mit Cloud von überall weitermachen." } } diff --git a/webview-ui/src/i18n/locales/de/welcome.json b/webview-ui/src/i18n/locales/de/welcome.json index aa1e4a5bb39..aa83b0c9686 100644 --- a/webview-ui/src/i18n/locales/de/welcome.json +++ b/webview-ui/src/i18n/locales/de/welcome.json @@ -16,7 +16,7 @@ "greeting": "Willkommen bei Roo Code!", "introduction": "Mit einer Reihe von integrierten und erweiterbaren Modi ermöglicht dir Roo Code, zu planen, zu architektieren, zu coden, zu debuggen und deine Produktivität wie nie zuvor zu steigern.", "accountMention": "Um zu beginnen, erstelle dein Roo Code Cloud Konto. Erhalte leistungsstarke Modelle, Webkontrolle, Analysen, Support und mehr.", - "getStarted": "Roo-Konto erstellen", + "getStarted": "Loslegen", "noAccount": "oder ohne Konto verwenden" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/en/cloud.json b/webview-ui/src/i18n/locales/en/cloud.json index 8842c5ef450..6fa31704792 100644 --- a/webview-ui/src/i18n/locales/en/cloud.json +++ b/webview-ui/src/i18n/locales/en/cloud.json @@ -27,7 +27,6 @@ "createTeamAccount": "Create Team Account", "upsell": { "autoApprovePowerUser": "Giving Roo some independence? Control it from anywhere with Roo Code Cloud. Learn more.", - "longRunningTask": "This might take a while. Continue from anywhere with Cloud.", - "taskList": "Enjoying Roo? Check out Roo Code Cloud: follow and control your tasks from anywhere, run autonomous Cloud agents, get usage stats and more. Learn more." + "longRunningTask": "This might take a while. Continue from anywhere with Cloud." } } diff --git a/webview-ui/src/i18n/locales/en/welcome.json b/webview-ui/src/i18n/locales/en/welcome.json index 2fec3e2c121..91753869e0d 100644 --- a/webview-ui/src/i18n/locales/en/welcome.json +++ b/webview-ui/src/i18n/locales/en/welcome.json @@ -16,7 +16,7 @@ "greeting": "Welcome to Roo Code!", "introduction": "With a range of built-in and extensible Modes, Roo Code lets you plan, architect, code, debug and boost your productivity like never before.", "accountMention": "To get started, create your Roo Code Cloud account. Get powerful models, web control, analytics, support and more.", - "getStarted": "Create Roo Account", + "getStarted": "Get Started", "noAccount": "or use without an account" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/es/cloud.json b/webview-ui/src/i18n/locales/es/cloud.json index a736a285dfc..4b944c76d64 100644 --- a/webview-ui/src/i18n/locales/es/cloud.json +++ b/webview-ui/src/i18n/locales/es/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "URL de Roo Code Cloud", "upsell": { "autoApprovePowerUser": "¿Dándole a Roo un poco de independencia? Contrólalo desde cualquier lugar con Roo Code Cloud. Saber más.", - "longRunningTask": "Esto podría tardar un poco. Continúa desde cualquier lugar con la Nube.", - "taskList": "¿Disfrutando de Roo? Echa un vistazo a Roo Code Cloud: sigue y controla tus tareas desde cualquier lugar, ejecuta agentes de la Nube autónomos, obtén estadísticas de uso y más. Aprende más." + "longRunningTask": "Esto podría tardar un poco. Continúa desde cualquier lugar con la Nube." } } diff --git a/webview-ui/src/i18n/locales/es/welcome.json b/webview-ui/src/i18n/locales/es/welcome.json index 259cb7c3e79..69e0f01e8e0 100644 --- a/webview-ui/src/i18n/locales/es/welcome.json +++ b/webview-ui/src/i18n/locales/es/welcome.json @@ -16,7 +16,7 @@ "greeting": "¡Bienvenido a Roo Code!", "introduction": "Con una variedad de Modos integrados y extensibles, Roo Code te permite planificar, arquitectar, codificar, depurar y aumentar tu productividad como nunca antes.", "accountMention": "Para comenzar, crea tu cuenta de Roo Code Cloud. Obtén modelos potentes, control web, análisis, soporte y más.", - "getStarted": "Crear cuenta de Roo", + "getStarted": "Comenzar", "noAccount": "o usar sin cuenta" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/fr/cloud.json b/webview-ui/src/i18n/locales/fr/cloud.json index db6d77e4500..1ca71e20ee3 100644 --- a/webview-ui/src/i18n/locales/fr/cloud.json +++ b/webview-ui/src/i18n/locales/fr/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "URL de Roo Code Cloud", "upsell": { "autoApprovePowerUser": "Donner à Roo un peu d'indépendance ? Contrôlez-le de n'importe où avec Roo Code Cloud. En savoir plus.", - "longRunningTask": "Cela peut prendre un certain temps. Continuez de n'importe où avec le Cloud.", - "taskList": "Vous appréciez Roo ? Découvrez Roo Code Cloud : suivez et contrôlez vos tâches de n'importe où, exécutez des agents Cloud autonomes, obtenez des statistiques d'utilisation et plus encore. En savoir plus." + "longRunningTask": "Cela peut prendre un certain temps. Continuez de n'importe où avec le Cloud." } } diff --git a/webview-ui/src/i18n/locales/fr/welcome.json b/webview-ui/src/i18n/locales/fr/welcome.json index f69d21a5658..94c153d0411 100644 --- a/webview-ui/src/i18n/locales/fr/welcome.json +++ b/webview-ui/src/i18n/locales/fr/welcome.json @@ -16,7 +16,7 @@ "greeting": "Bienvenue sur Roo Code !", "introduction": "Avec une gamme de Modes intégrés et extensibles, Roo Code te permet de planifier, architecturer, coder, déboguer et augmenter ta productivité comme jamais auparavant.", "accountMention": "Pour commencer, crée ton compte Roo Code Cloud. Obtiens des modèles puissants, le contrôle web, les analyses, le support et bien plus encore.", - "getStarted": "Créer un compte Roo", + "getStarted": "Commencer", "noAccount": "ou utiliser sans compte" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/hi/cloud.json b/webview-ui/src/i18n/locales/hi/cloud.json index 372336ab468..4bef19d34a2 100644 --- a/webview-ui/src/i18n/locales/hi/cloud.json +++ b/webview-ui/src/i18n/locales/hi/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "Roo Code Cloud URL", "upsell": { "autoApprovePowerUser": "रू को थोड़ी स्वतंत्रता दे रहे हैं? रू कोड क्लाउड के साथ इसे कहीं से भी नियंत्रित करें। और जानें।", - "longRunningTask": "इसमें थोड़ा समय लग सकता है। क्लाउड के साथ कहीं से भी जारी रखें।", - "taskList": "रू का आनंद ले रहे हैं? रू कोड क्लाउड देखें: कहीं से भी अपने कार्यों का पालन और नियंत्रण करें, स्वायत्त क्लाउड एजेंट चलाएं, उपयोग के आंकड़े प्राप्त करें और बहुत कुछ। और जानें।" + "longRunningTask": "इसमें थोड़ा समय लग सकता है। क्लाउड के साथ कहीं से भी जारी रखें।" } } diff --git a/webview-ui/src/i18n/locales/hi/welcome.json b/webview-ui/src/i18n/locales/hi/welcome.json index 851a0ae19cb..5f23378a575 100644 --- a/webview-ui/src/i18n/locales/hi/welcome.json +++ b/webview-ui/src/i18n/locales/hi/welcome.json @@ -16,7 +16,7 @@ "greeting": "Roo Code में आपका स्वागत है!", "introduction": "अंतर्निहित और विस्तारित मोड्स की एक श्रृंखला के साथ, Roo Code आपको पहले कभी न देखे गए तरीके से योजना बनाने, आर्किटेक्ट करने, कोड करने, डीबग करने और अपनी उत्पादकता बढ़ाने की अनुमति देता है।", "accountMention": "शुरुआत करने के लिए, अपना Roo Code Cloud खाता बनाएं। शक्तिशाली मॉडल, वेब नियंत्रण, विश्लेषण, समर्थन और अधिक प्राप्त करें।", - "getStarted": "Roo खाता बनाएं", + "getStarted": "शुरू करें", "noAccount": "या बिना खाते के उपयोग करें" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/id/cloud.json b/webview-ui/src/i18n/locales/id/cloud.json index e12c918f410..6c7dd53b68c 100644 --- a/webview-ui/src/i18n/locales/id/cloud.json +++ b/webview-ui/src/i18n/locales/id/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "URL Roo Code Cloud", "upsell": { "autoApprovePowerUser": "Memberi Roo sedikit kebebasan? Kendalikan dari mana saja dengan Roo Code Cloud. Pelajari lebih lanjut.", - "longRunningTask": "Ini mungkin akan memakan waktu cukup lama. Lanjutkan dari mana saja dengan Cloud.", - "taskList": "Menikmati Roo? Coba Roo Code Cloud: ikuti dan kendalikan tugas Anda dari mana saja, jalankan agen Cloud otonom, dapatkan statistik penggunaan, dan lainnya. Pelajari lebih lanjut." + "longRunningTask": "Ini mungkin akan memakan waktu cukup lama. Lanjutkan dari mana saja dengan Cloud." } } diff --git a/webview-ui/src/i18n/locales/id/welcome.json b/webview-ui/src/i18n/locales/id/welcome.json index baaf07b1c71..59f0c63c737 100644 --- a/webview-ui/src/i18n/locales/id/welcome.json +++ b/webview-ui/src/i18n/locales/id/welcome.json @@ -16,7 +16,7 @@ "greeting": "Selamat datang di Roo Code!", "introduction": "Dengan berbagai Mode bawaan dan dapat diperluas, Roo Code memungkinkan Anda merencanakan, merancang, coding, debug, dan meningkatkan produktivitas seperti yang belum pernah terjadi sebelumnya.", "accountMention": "Untuk memulai, buat akun Roo Code Cloud Anda. Dapatkan model yang kuat, kontrol web, analitik, dukungan, dan banyak lagi.", - "getStarted": "Buat Akun Roo", + "getStarted": "Mulai", "noAccount": "atau gunakan tanpa akun" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/it/cloud.json b/webview-ui/src/i18n/locales/it/cloud.json index 2d242504ad9..7b5a03d1fa9 100644 --- a/webview-ui/src/i18n/locales/it/cloud.json +++ b/webview-ui/src/i18n/locales/it/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "URL di Roo Code Cloud", "upsell": { "autoApprovePowerUser": "Vuoi dare un po' di indipendenza a Roo? Controllalo da qualsiasi luogo con Roo Code Cloud. Scopri di più.", - "longRunningTask": "Potrebbe volerci un po' di tempo. Continua da qualsiasi luogo con il Cloud.", - "taskList": "Ti piace Roo? Dai un'occhiata a Roo Code Cloud: segui e controlla le tue attività da qualsiasi luogo, esegui agenti Cloud autonomi, ottieni statistiche di utilizzo e altro ancora. Scopri di più." + "longRunningTask": "Potrebbe volerci un po' di tempo. Continua da qualsiasi luogo con il Cloud." } } diff --git a/webview-ui/src/i18n/locales/it/welcome.json b/webview-ui/src/i18n/locales/it/welcome.json index fbc6fb3e36d..4488f62436c 100644 --- a/webview-ui/src/i18n/locales/it/welcome.json +++ b/webview-ui/src/i18n/locales/it/welcome.json @@ -16,7 +16,7 @@ "greeting": "Benvenuto in Roo Code!", "introduction": "Con una gamma di Modalità integrate ed estensibili, Roo Code ti permette di pianificare, architettare, codificare, debuggare e aumentare la tua produttività come mai prima d'ora.", "accountMention": "Per iniziare, crea il tuo account Roo Code Cloud. Ottieni modelli potenti, controllo web, analitiche, supporto e altro ancora.", - "getStarted": "Crea account Roo", + "getStarted": "Inizia", "noAccount": "o usa senza account" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/ja/cloud.json b/webview-ui/src/i18n/locales/ja/cloud.json index 167651c96c0..8b50fa16d8e 100644 --- a/webview-ui/src/i18n/locales/ja/cloud.json +++ b/webview-ui/src/i18n/locales/ja/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "Roo Code Cloud URL", "upsell": { "autoApprovePowerUser": "Rooに少し独立性を与えませんか?Roo Code Cloudでどこからでもコントロールできます。詳細。", - "longRunningTask": "これには時間がかかるかもしれません。Cloudを使えばどこからでも続けられます。", - "taskList": "Rooを楽しんでいますか?Roo Code Cloudをチェックしてください:どこからでもタスクを追跡および制御し、自律型クラウドエージェントを実行し、使用状況の統計を取得します。詳細。" + "longRunningTask": "これには時間がかかるかもしれません。Cloudを使えばどこからでも続けられます。" } } diff --git a/webview-ui/src/i18n/locales/ja/welcome.json b/webview-ui/src/i18n/locales/ja/welcome.json index ee24c89af2e..d1e18bdcf49 100644 --- a/webview-ui/src/i18n/locales/ja/welcome.json +++ b/webview-ui/src/i18n/locales/ja/welcome.json @@ -16,7 +16,7 @@ "greeting": "Roo Codeへようこそ!", "introduction": "組み込みおよび拡張可能なモードを備えたRoo Codeは、計画、アーキテクチャ設計、コーディング、デバッグ、そして今までにない生産性向上を可能にします。", "accountMention": "始めるには、Roo Code Cloudアカウントを作成してください。強力なモデル、ウェブコントロール、分析、サポート、その他をご利用いただけます。", - "getStarted": "Rooアカウントを作成", + "getStarted": "開始する", "noAccount": "またはアカウントなしで使用" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/ko/cloud.json b/webview-ui/src/i18n/locales/ko/cloud.json index c0731e3bf4e..bbecfd075d5 100644 --- a/webview-ui/src/i18n/locales/ko/cloud.json +++ b/webview-ui/src/i18n/locales/ko/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "Roo Code Cloud URL", "upsell": { "autoApprovePowerUser": "Roo에게 약간의 독립성을 부여하시겠습니까? Roo Code Cloud로 어디서든 제어하세요. 더 알아보기.", - "longRunningTask": "시간이 좀 걸릴 수 있습니다. Cloud로 어디서든 계속하세요.", - "taskList": "Roo를 즐기고 계신가요? Roo Code Cloud를 확인해보세요: 어디서든 작업을 추적하고 제어하며, 자율적인 클라우드 에이전트를 실행하고, 사용 통계를 얻는 등 다양한 기능을 제공합니다. 더 알아보기." + "longRunningTask": "시간이 좀 걸릴 수 있습니다. Cloud로 어디서든 계속하세요." } } diff --git a/webview-ui/src/i18n/locales/ko/welcome.json b/webview-ui/src/i18n/locales/ko/welcome.json index 998acdb75f5..c6d788d5f26 100644 --- a/webview-ui/src/i18n/locales/ko/welcome.json +++ b/webview-ui/src/i18n/locales/ko/welcome.json @@ -16,7 +16,7 @@ "greeting": "Roo Code에 오신 것을 환영합니다!", "introduction": "내장 및 확장 가능한 다양한 모드를 통해 Roo Code는 계획, 아키텍처 설계, 코딩, 디버깅 및 전례 없는 생산성 향상을 가능하게 합니다.", "accountMention": "시작하려면 Roo Code Cloud 계정을 만드세요. 강력한 모델, 웹 제어, 분석, 지원 등을 얻으세요.", - "getStarted": "Roo 계정 만들기", + "getStarted": "시작하기", "noAccount": "또는 계정 없이 사용하기" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/nl/cloud.json b/webview-ui/src/i18n/locales/nl/cloud.json index 4f58f689e25..8500fae3480 100644 --- a/webview-ui/src/i18n/locales/nl/cloud.json +++ b/webview-ui/src/i18n/locales/nl/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "Roo Code Cloud URL", "upsell": { "autoApprovePowerUser": "Roo wat onafhankelijkheid geven? Bedien het overal met Roo Code Cloud. Meer informatie.", - "longRunningTask": "Dit kan even duren. Ga overal verder met de Cloud.", - "taskList": "Geniet je van Roo? Bekijk Roo Code Cloud: volg en beheer je taken overal, voer autonome Cloud-agents uit, krijg gebruiksstatistieken en meer. Meer informatie." + "longRunningTask": "Dit kan even duren. Ga overal verder met de Cloud." } } diff --git a/webview-ui/src/i18n/locales/nl/welcome.json b/webview-ui/src/i18n/locales/nl/welcome.json index 22508d62868..9e2f8c58168 100644 --- a/webview-ui/src/i18n/locales/nl/welcome.json +++ b/webview-ui/src/i18n/locales/nl/welcome.json @@ -16,7 +16,7 @@ "greeting": "Welkom bij Roo Code!", "introduction": "Met een reeks ingebouwde en uitbreidbare Modi laat Roo Code je plannen, ontwerpen, coderen, debuggen en je productiviteit verhogen als nooit tevoren.", "accountMention": "Maak je Roo Code Cloud-account aan om te beginnen. Krijg krachtige modellen, webcontrole, analyses, ondersteuning en meer.", - "getStarted": "Roo-account aanmaken", + "getStarted": "Aan de slag", "noAccount": "of gebruik zonder account" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/pl/cloud.json b/webview-ui/src/i18n/locales/pl/cloud.json index 4e4a578658d..1c96c6453ae 100644 --- a/webview-ui/src/i18n/locales/pl/cloud.json +++ b/webview-ui/src/i18n/locales/pl/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "URL Roo Code Cloud", "upsell": { "autoApprovePowerUser": "Dać Roo trochę niezależności? Kontroluj go z dowolnego miejsca dzięki Roo Code Cloud. Dowiedz się więcej.", - "longRunningTask": "To może chwilę potrwać. Kontynuuj z dowolnego miejsca dzięki Chmurze.", - "taskList": "Podoba ci się Roo? Sprawdź Roo Code Cloud: śledź i kontroluj swoje zadania z dowolnego miejsca, uruchamiaj autonomiczne agenty w chmurze, uzyskuj statystyki użytkowania i wiele więcej. Dowiedz się więcej." + "longRunningTask": "To może chwilę potrwać. Kontynuuj z dowolnego miejsca dzięki Chmurze." } } diff --git a/webview-ui/src/i18n/locales/pl/welcome.json b/webview-ui/src/i18n/locales/pl/welcome.json index 3949a78e265..293beded479 100644 --- a/webview-ui/src/i18n/locales/pl/welcome.json +++ b/webview-ui/src/i18n/locales/pl/welcome.json @@ -16,7 +16,7 @@ "greeting": "Witaj w Roo Code!", "introduction": "Dzięki szerokiej gamie wbudowanych i rozszerzalnych Trybów, Roo Code pozwala planować, projektować architekturę, kodować, debugować i zwiększać produktywność jak nigdy dotąd.", "accountMention": "Aby rozpocząć, utwórz konto Roo Code Cloud. Otrzymaj potężne modele, kontrolę internetową, analizę, wsparcie i wiele więcej.", - "getStarted": "Utwórz konto Roo", + "getStarted": "Rozpocznij", "noAccount": "lub używaj bez konta" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/pt-BR/cloud.json b/webview-ui/src/i18n/locales/pt-BR/cloud.json index d360d1d95cd..66c2bceb166 100644 --- a/webview-ui/src/i18n/locales/pt-BR/cloud.json +++ b/webview-ui/src/i18n/locales/pt-BR/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "URL do Roo Code Cloud ", "upsell": { "autoApprovePowerUser": "Dando um pouco de independência ao Roo? Controle-o de qualquer lugar com o Roo Code Cloud. Saiba mais.", - "longRunningTask": "Isso pode levar um tempo. Continue de qualquer lugar com a Nuvem.", - "taskList": "Gostando do Roo? Confira o Roo Code Cloud: acompanhe e controle suas tarefas de qualquer lugar, execute agentes de nuvem autônomos, obtenha estatísticas de uso e muito mais. Saiba mais." + "longRunningTask": "Isso pode levar um tempo. Continue de qualquer lugar com a Nuvem." } } diff --git a/webview-ui/src/i18n/locales/pt-BR/welcome.json b/webview-ui/src/i18n/locales/pt-BR/welcome.json index 563cd0f6a39..892dbd40ffb 100644 --- a/webview-ui/src/i18n/locales/pt-BR/welcome.json +++ b/webview-ui/src/i18n/locales/pt-BR/welcome.json @@ -16,7 +16,7 @@ "greeting": "Bem-vindo ao Roo Code!", "introduction": "Com uma variedade de Modos integrados e extensíveis, o Roo Code permite que você planeje, arquitete, codifique, depure e aumente sua produtividade como nunca antes.", "accountMention": "Para começar, crie sua conta Roo Code Cloud. Obtenha modelos poderosos, controle na web, análises, suporte e muito mais.", - "getStarted": "Criar conta Roo", + "getStarted": "Começar", "noAccount": "ou usar sem conta" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/ru/cloud.json b/webview-ui/src/i18n/locales/ru/cloud.json index c9913068821..68b99659fb1 100644 --- a/webview-ui/src/i18n/locales/ru/cloud.json +++ b/webview-ui/src/i18n/locales/ru/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "URL Roo Code Cloud", "upsell": { "autoApprovePowerUser": "Предоставить Roo немного независимости? Управляйте им из любого места с помощью Roo Code Cloud. Узнать больше.", - "longRunningTask": "Это может занять некоторое время. Продолжайте из любого места с помощью Облака.", - "taskList": "Нравится Roo? Посмотрите Roo Code Cloud: отслеживайте и контролируйте свои задачи из любого места, запускайте автономных облачных агентов, получайте статистику использования и многое другое. Узнать больше." + "longRunningTask": "Это может занять некоторое время. Продолжайте из любого места с помощью Облака." } } diff --git a/webview-ui/src/i18n/locales/ru/welcome.json b/webview-ui/src/i18n/locales/ru/welcome.json index af938e309b7..8757aa6a270 100644 --- a/webview-ui/src/i18n/locales/ru/welcome.json +++ b/webview-ui/src/i18n/locales/ru/welcome.json @@ -16,7 +16,7 @@ "greeting": "Добро пожаловать в Roo Code!", "introduction": "С набором встроенных и расширяемых Режимов, Roo Code позволяет вам планировать, проектировать, писать код, отлаживать и повышать продуктивность как никогда раньше.", "accountMention": "Для начала создайте свой аккаунт Roo Code Cloud. Получите мощные модели, веб-управление, аналитику, поддержку и многое другое.", - "getStarted": "Создать аккаунт Roo", + "getStarted": "Начать", "noAccount": "или использовать без аккаунта" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/tr/cloud.json b/webview-ui/src/i18n/locales/tr/cloud.json index ef10866d7bd..75d0f2949df 100644 --- a/webview-ui/src/i18n/locales/tr/cloud.json +++ b/webview-ui/src/i18n/locales/tr/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "Roo Code Cloud URL'si", "upsell": { "autoApprovePowerUser": "Roo'ya biraz bağımsızlık mı veriyorsunuz? Roo Code Cloud ile onu her yerden kontrol edin. Daha fazla bilgi edinin.", - "longRunningTask": "Bu biraz zaman alabilir. Bulut ile her yerden devam edin.", - "taskList": "Roo'dan memnun musunuz? Roo Code Cloud'a göz atın: görevlerinizi her yerden takip edin ve kontrol edin, otonom Bulut ajanlarını çalıştırın, kullanım istatistikleri alın ve daha fazlasını yapın. Daha fazla bilgi edinin." + "longRunningTask": "Bu biraz zaman alabilir. Bulut ile her yerden devam edin." } } diff --git a/webview-ui/src/i18n/locales/tr/welcome.json b/webview-ui/src/i18n/locales/tr/welcome.json index 5415021b967..6323ce638f2 100644 --- a/webview-ui/src/i18n/locales/tr/welcome.json +++ b/webview-ui/src/i18n/locales/tr/welcome.json @@ -16,7 +16,7 @@ "greeting": "Roo Code'a Hoş Geldin!", "introduction": "Yerleşik ve genişletilebilir Modlar yelpazesiyle Roo Code, daha önce hiç olmadığı gibi planlama, mimari tasarım, kodlama, hata ayıklama ve üretkenliğini artırmanı sağlar.", "accountMention": "Başlamak için Roo Code Cloud hesabını oluştur. Güçlü modeller, web kontrolü, analizler, destek ve daha fazlasını al.", - "getStarted": "Roo Hesabı Oluştur", + "getStarted": "Başla", "noAccount": "veya hesap olmadan kullan" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/vi/cloud.json b/webview-ui/src/i18n/locales/vi/cloud.json index f978ffb217a..698dfb1ab0d 100644 --- a/webview-ui/src/i18n/locales/vi/cloud.json +++ b/webview-ui/src/i18n/locales/vi/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "URL Roo Code Cloud", "upsell": { "autoApprovePowerUser": "Trao cho Roo một chút độc lập? Kiểm soát nó từ mọi nơi với Roo Code Cloud. Tìm hiểu thêm.", - "longRunningTask": "Việc này có thể mất một lúc. Tiếp tục từ mọi nơi với Cloud.", - "taskList": "Bạn có thích Roo không? Hãy xem Roo Code Cloud: theo dõi và kiểm soát các tác vụ của bạn từ mọi nơi, chạy các agent đám mây tự trị, nhận số liệu thống kê sử dụng và hơn thế nữa. Tìm hiểu thêm." + "longRunningTask": "Việc này có thể mất một lúc. Tiếp tục từ mọi nơi với Cloud." } } diff --git a/webview-ui/src/i18n/locales/vi/welcome.json b/webview-ui/src/i18n/locales/vi/welcome.json index 0a0d7af2d36..386ecd0d1e6 100644 --- a/webview-ui/src/i18n/locales/vi/welcome.json +++ b/webview-ui/src/i18n/locales/vi/welcome.json @@ -16,7 +16,7 @@ "greeting": "Chào mừng đến với Roo Code!", "introduction": "Với nhiều Chế độ tích hợp và có thể mở rộng, Roo Code cho phép bạn lập kế hoạch, thiết kế kiến trúc, viết mã, gỡ lỗi và tăng năng suất như chưa từng có trước đây.", "accountMention": "Để bắt đầu, hãy tạo tài khoản Roo Code Cloud của bạn. Nhận các mô hình mạnh mẽ, kiểm soát web, phân tích, hỗ trợ và hơn thế nữa.", - "getStarted": "Tạo tài khoản Roo", + "getStarted": "Bắt đầu", "noAccount": "hoặc sử dụng mà không có tài khoản" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/zh-CN/cloud.json b/webview-ui/src/i18n/locales/zh-CN/cloud.json index 560218c56f4..f875359c2ac 100644 --- a/webview-ui/src/i18n/locales/zh-CN/cloud.json +++ b/webview-ui/src/i18n/locales/zh-CN/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "Roo Code Cloud URL", "upsell": { "autoApprovePowerUser": "给 Roo 一些独立性?使用 Roo Code Cloud 从任何地方控制它。 了解更多。", - "longRunningTask": "这可能需要一段时间。使用 Cloud 从任何地方继续。", - "taskList": "喜欢Roo吗?快来看看Roo Code Cloud:随时随地关注和控制您的任务,运行自主云代理,获取使用统计数据等等。 了解更多。" + "longRunningTask": "这可能需要一段时间。使用 Cloud 从任何地方继续。" } } diff --git a/webview-ui/src/i18n/locales/zh-CN/welcome.json b/webview-ui/src/i18n/locales/zh-CN/welcome.json index 04bd6b4498b..df6fe968128 100644 --- a/webview-ui/src/i18n/locales/zh-CN/welcome.json +++ b/webview-ui/src/i18n/locales/zh-CN/welcome.json @@ -16,7 +16,7 @@ "greeting": "欢迎使用 Roo Code!", "introduction": "通过一系列内置和可扩展的模式,Roo Code 让你能够以前所未有的方式进行规划、架构设计、编码、调试并提升工作效率。", "accountMention": "开始使用,创建你的 Roo Code Cloud 账户。获得强大模型、网络控制、分析、支持等。", - "getStarted": "创建 Roo 账户", + "getStarted": "开始使用", "noAccount": "或不使用账户" }, "providerSignup": { diff --git a/webview-ui/src/i18n/locales/zh-TW/cloud.json b/webview-ui/src/i18n/locales/zh-TW/cloud.json index 032c18ed915..aaab4800c08 100644 --- a/webview-ui/src/i18n/locales/zh-TW/cloud.json +++ b/webview-ui/src/i18n/locales/zh-TW/cloud.json @@ -27,7 +27,6 @@ "cloudUrlPillLabel": "Roo Code Cloud URL", "upsell": { "autoApprovePowerUser": "給 Roo 一點獨立性?使用 Roo Code Cloud 隨時隨地掌控工作進度。了解更多。", - "longRunningTask": "這可能需要一些時間。使用雲端隨時隨地繼續。", - "taskList": "喜歡 Roo 嗎?快來看看 Roo Code Cloud:隨時隨地追蹤和控制您的任務,執行自主雲端代理,取得使用統計資料等等。了解更多。" + "longRunningTask": "這可能需要一些時間。使用雲端隨時隨地繼續。" } } diff --git a/webview-ui/src/i18n/locales/zh-TW/welcome.json b/webview-ui/src/i18n/locales/zh-TW/welcome.json index 3b117935b61..099ce965b54 100644 --- a/webview-ui/src/i18n/locales/zh-TW/welcome.json +++ b/webview-ui/src/i18n/locales/zh-TW/welcome.json @@ -16,7 +16,7 @@ "greeting": "歡迎使用 Roo Code!", "introduction": "Roo Code 提供一系列內建和可擴充的模式,讓您以前所未有的方式規劃專案、設計架構、編寫程式碼、除錯並提升工作效率。", "accountMention": "開始使用,請建立您的 Roo Code Cloud 帳戶。取得強大的模型、網路控制、分析、支援等功能。", - "getStarted": "建立 Roo 帳戶", + "getStarted": "開始使用", "noAccount": "或不使用帳戶" }, "providerSignup": { From 42ad48448c614956ff0f87bb51ad5293a063bf7d Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Mon, 4 May 2026 20:28:47 +0100 Subject: [PATCH 2/2] Remove remaining Cloud CTA surfaces --- CODE_OF_CONDUCT.md | 2 +- PRIVACY.md | 2 +- apps/web-roo-code/src/app/terms/terms.md | 2 +- .../src/components/chromes/footer.tsx | 6 +- apps/web-roo-code/src/lib/constants.ts | 2 +- locales/ca/CODE_OF_CONDUCT.md | 2 +- locales/de/CODE_OF_CONDUCT.md | 2 +- locales/es/CODE_OF_CONDUCT.md | 2 +- locales/fr/CODE_OF_CONDUCT.md | 2 +- locales/hi/CODE_OF_CONDUCT.md | 2 +- locales/id/CODE_OF_CONDUCT.md | 2 +- locales/it/CODE_OF_CONDUCT.md | 2 +- locales/ja/CODE_OF_CONDUCT.md | 2 +- locales/ko/CODE_OF_CONDUCT.md | 2 +- locales/nl/CODE_OF_CONDUCT.md | 2 +- locales/pl/CODE_OF_CONDUCT.md | 2 +- locales/pt-BR/CODE_OF_CONDUCT.md | 2 +- locales/ru/CODE_OF_CONDUCT.md | 2 +- locales/tr/CODE_OF_CONDUCT.md | 2 +- locales/vi/CODE_OF_CONDUCT.md | 2 +- locales/zh-CN/CODE_OF_CONDUCT.md | 2 +- locales/zh-TW/CODE_OF_CONDUCT.md | 2 +- packages/evals/src/cli/utils.ts | 2 +- src/core/webview/ClineProvider.ts | 15 ++ .../__tests__/diagnosticsHandler.spec.ts | 2 +- src/core/webview/diagnosticsHandler.ts | 4 +- src/package.json | 4 +- .../__tests__/ShadowCheckpointService.spec.ts | 12 +- webview-ui/src/App.tsx | 14 +- webview-ui/src/__tests__/App.spec.tsx | 32 +++ webview-ui/src/components/chat/ChatRow.tsx | 3 +- webview-ui/src/components/chat/TaskHeader.tsx | 46 +--- .../chat/__tests__/TaskHeader.spec.tsx | 216 +----------------- .../src/components/settings/providers/Roo.tsx | 13 +- webview-ui/src/i18n/locales/ca/cloud.json | 6 +- webview-ui/src/i18n/locales/ca/settings.json | 3 +- webview-ui/src/i18n/locales/de/cloud.json | 6 +- webview-ui/src/i18n/locales/de/settings.json | 3 +- webview-ui/src/i18n/locales/en/cloud.json | 6 +- webview-ui/src/i18n/locales/en/settings.json | 3 +- webview-ui/src/i18n/locales/es/cloud.json | 6 +- webview-ui/src/i18n/locales/es/settings.json | 3 +- webview-ui/src/i18n/locales/fr/cloud.json | 6 +- webview-ui/src/i18n/locales/fr/settings.json | 3 +- webview-ui/src/i18n/locales/hi/cloud.json | 6 +- webview-ui/src/i18n/locales/hi/settings.json | 3 +- webview-ui/src/i18n/locales/id/cloud.json | 6 +- webview-ui/src/i18n/locales/id/settings.json | 3 +- webview-ui/src/i18n/locales/it/cloud.json | 6 +- webview-ui/src/i18n/locales/it/settings.json | 3 +- webview-ui/src/i18n/locales/ja/cloud.json | 6 +- webview-ui/src/i18n/locales/ja/settings.json | 3 +- webview-ui/src/i18n/locales/ko/cloud.json | 6 +- webview-ui/src/i18n/locales/ko/settings.json | 3 +- webview-ui/src/i18n/locales/nl/cloud.json | 6 +- webview-ui/src/i18n/locales/nl/settings.json | 3 +- webview-ui/src/i18n/locales/pl/cloud.json | 6 +- webview-ui/src/i18n/locales/pl/settings.json | 3 +- webview-ui/src/i18n/locales/pt-BR/cloud.json | 6 +- .../src/i18n/locales/pt-BR/settings.json | 3 +- webview-ui/src/i18n/locales/ru/cloud.json | 6 +- webview-ui/src/i18n/locales/ru/settings.json | 3 +- webview-ui/src/i18n/locales/tr/cloud.json | 6 +- webview-ui/src/i18n/locales/tr/settings.json | 3 +- webview-ui/src/i18n/locales/vi/cloud.json | 6 +- webview-ui/src/i18n/locales/vi/settings.json | 3 +- webview-ui/src/i18n/locales/zh-CN/cloud.json | 6 +- .../src/i18n/locales/zh-CN/settings.json | 3 +- webview-ui/src/i18n/locales/zh-TW/cloud.json | 6 +- .../src/i18n/locales/zh-TW/settings.json | 3 +- 70 files changed, 137 insertions(+), 436 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 328bb5c1b2e..9dce1a12fd8 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -68,7 +68,7 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at support@roocode.com. All complaints +reported by contacting the project team at https://github.com/RooCodeInc/Roo-Code/security/advisories/new. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. diff --git a/PRIVACY.md b/PRIVACY.md index 02e8e151034..ebe24c227a6 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -31,7 +31,7 @@ We take reasonable measures to secure your data, but no system is 100% secure. I ### **Contact Us** -For any privacy-related questions, reach out to us at support@roocode.com. +For privacy-related security concerns, use GitHub Security Advisories at https://github.com/RooCodeInc/Roo-Code/security/advisories/new. For other privacy-related questions, open a GitHub Discussion at https://github.com/RooCodeInc/Roo-Code/discussions. --- diff --git a/apps/web-roo-code/src/app/terms/terms.md b/apps/web-roo-code/src/app/terms/terms.md index d61b96ef3d0..778be03eb74 100644 --- a/apps/web-roo-code/src/app/terms/terms.md +++ b/apps/web-roo-code/src/app/terms/terms.md @@ -185,7 +185,7 @@ The parties to this Agreement are independent, and no agency, partnership franch ### 14.2 Notices -Except as otherwise set forth in this Agreement, all notices to a party shall be in writing and sent to, for Roo Code: [support@roocode.com](mailto:support@roocode.com), and for User the applicable address or email address associated with User's account (which addresses may be updated by such party from time to time by written notice). Notice shall be deemed to have been duly given when received, if personally delivered; when receipt is electronically confirmed, if transmitted by email; the day after it is sent, if sent for next day delivery by recognized overnight delivery service; and upon receipt, if sent by certified or registered mail, return receipt requested. Any notices to User may be sent by email to the email address associated with User's account or may be posted in the Software, and any such notices shall be effective when delivered in accordance with the foregoing. User hereby consents to receiving notices and communications from Roo Code electronically. +Except as otherwise set forth in this Agreement, all notices to a party shall be in writing and sent to, for Roo Code: the GitHub Issues page at [https://github.com/RooCodeInc/Roo-Code/issues](https://github.com/RooCodeInc/Roo-Code/issues), and for User the applicable address or email address associated with User's account (which addresses may be updated by such party from time to time by written notice). Notice shall be deemed to have been duly given when received, if personally delivered; when receipt is electronically confirmed, if transmitted by email; the day after it is sent, if sent for next day delivery by recognized overnight delivery service; and upon receipt, if sent by certified or registered mail, return receipt requested. Any notices to User may be sent by email to the email address associated with User's account or may be posted in the Software, and any such notices shall be effective when delivered in accordance with the foregoing. User hereby consents to receiving notices and communications from Roo Code electronically. ### 14.3 Assignment diff --git a/apps/web-roo-code/src/components/chromes/footer.tsx b/apps/web-roo-code/src/components/chromes/footer.tsx index 69d68e46f8d..3b3c4d8a921 100644 --- a/apps/web-roo-code/src/components/chromes/footer.tsx +++ b/apps/web-roo-code/src/components/chromes/footer.tsx @@ -137,9 +137,11 @@ export function Footer() {
  • - Contact + Report an Issue
  • diff --git a/apps/web-roo-code/src/lib/constants.ts b/apps/web-roo-code/src/lib/constants.ts index 9ce9e07deec..99afcc9f055 100644 --- a/apps/web-roo-code/src/lib/constants.ts +++ b/apps/web-roo-code/src/lib/constants.ts @@ -30,7 +30,7 @@ export const EXTERNAL_LINKS = { CLOUD_APP_SIGNUP_HOME: "https://app.roocode.com/sign-up?redirect_url=/cloud-agents/setup", CLOUD_APP_SIGNUP_PRO: "https://app.roocode.com/sign-up?redirect_url=/cloud-agents/setup", CLOUD_APP_TEAM_TRIAL: "https://app.roocode.com/checkout/team", - SUPPORT: "mailto:support@roocode.com", + SUPPORT: "https://github.com/RooCodeInc/Roo-Code/issues/new/choose", } export const INTERNAL_LINKS = { diff --git a/locales/ca/CODE_OF_CONDUCT.md b/locales/ca/CODE_OF_CONDUCT.md index 05033ff04ac..2eb6c662186 100644 --- a/locales/ca/CODE_OF_CONDUCT.md +++ b/locales/ca/CODE_OF_CONDUCT.md @@ -68,7 +68,7 @@ definida i clarificada addicionalment pels mantenidors del projecte. ## Aplicació Els casos de comportament abusiu, assetjador o altrament inacceptable poden ser -reportats contactant amb l'equip del projecte a support@roocode.com. Totes les queixes +reportats contactant amb l'equip del projecte a https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Totes les queixes seran revisades i investigades i resultaran en una resposta que es consideri necessària i adequada a les circumstàncies. L'equip del projecte està obligat a mantenir la confidencialitat respecte al reportador d'un incident. diff --git a/locales/de/CODE_OF_CONDUCT.md b/locales/de/CODE_OF_CONDUCT.md index 84bbe9630c0..631f486424e 100644 --- a/locales/de/CODE_OF_CONDUCT.md +++ b/locales/de/CODE_OF_CONDUCT.md @@ -67,7 +67,7 @@ von den Projektbetreuern weiter definiert und geklärt werden. ## Durchsetzung Fälle von missbräuchlichem, belästigendem oder anderweitig inakzeptablem Verhalten können -dem Projektteam unter support@roocode.com gemeldet werden. Alle +dem Projektteam unter https://github.com/RooCodeInc/Roo-Code/security/advisories/new gemeldet werden. Alle Beschwerden werden überprüft und untersucht und führen zu einer Reaktion, die als notwendig und angemessen für die Umstände erachtet wird. Das Projektteam ist verpflichtet, die Vertraulichkeit in Bezug auf den Melder eines Vorfalls zu wahren. diff --git a/locales/es/CODE_OF_CONDUCT.md b/locales/es/CODE_OF_CONDUCT.md index 149fbdb779f..e2393ae0d0c 100644 --- a/locales/es/CODE_OF_CONDUCT.md +++ b/locales/es/CODE_OF_CONDUCT.md @@ -67,7 +67,7 @@ definida y aclarada aún más por los mantenedores del proyecto. ## Aplicación Los casos de comportamiento abusivo, acosador o de otro modo inaceptable pueden ser -reportados contactando al equipo del proyecto en support@roocode.com. Todas las quejas +reportados contactando al equipo del proyecto en https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Todas las quejas serán revisadas e investigadas y resultarán en una respuesta que se considera necesaria y apropiada a las circunstancias. El equipo del proyecto está obligado a mantener la confidencialidad con respecto al informante de un incidente. diff --git a/locales/fr/CODE_OF_CONDUCT.md b/locales/fr/CODE_OF_CONDUCT.md index 04df05a4817..0803ae31361 100644 --- a/locales/fr/CODE_OF_CONDUCT.md +++ b/locales/fr/CODE_OF_CONDUCT.md @@ -68,7 +68,7 @@ La représentation d'un projet peut être définie et clarifiée davantage par l ## Application Les cas de comportement abusif, harcelant ou autrement inacceptable peuvent être -signalés en contactant l'équipe du projet à support@roocode.com. Toutes les plaintes +signalés en contactant l'équipe du projet à https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Toutes les plaintes seront examinées et étudiées et donneront lieu à une réponse qui est jugée nécessaire et appropriée aux circonstances. L'équipe du projet est obligée de maintenir la confidentialité concernant la personne qui signale un incident. diff --git a/locales/hi/CODE_OF_CONDUCT.md b/locales/hi/CODE_OF_CONDUCT.md index 8c44070adf0..2e73ddf21bb 100644 --- a/locales/hi/CODE_OF_CONDUCT.md +++ b/locales/hi/CODE_OF_CONDUCT.md @@ -66,7 +66,7 @@ ## प्रवर्तन दुर्व्यवहार, उत्पीड़न, या अन्यथा अस्वीकार्य व्यवहार के उदाहरणों की -रिपोर्ट support@roocode.com पर प्रोजेक्ट टीम से संपर्क करके की जा सकती है। सभी शिकायतें +रिपोर्ट https://github.com/RooCodeInc/Roo-Code/security/advisories/new पर प्रोजेक्ट टीम से संपर्क करके की जा सकती है। सभी शिकायतें समीक्षा की जाएंगी और जांच की जाएगी और इसके परिणामस्वरूप एक प्रतिक्रिया होगी जो परिस्थितियों के अनुसार आवश्यक और उचित मानी जाती है। प्रोजेक्ट टीम एक घटना के रिपोर्टर के संबंध में गोपनीयता बनाए रखने के लिए बाध्य है। diff --git a/locales/id/CODE_OF_CONDUCT.md b/locales/id/CODE_OF_CONDUCT.md index 27c616628ce..317c11be312 100644 --- a/locales/id/CODE_OF_CONDUCT.md +++ b/locales/id/CODE_OF_CONDUCT.md @@ -47,7 +47,7 @@ Kode Etik ini berlaku baik di dalam ruang proyek maupun di ruang publik ketika s ## Penegakan -Contoh perilaku kasar, melecehkan, atau perilaku lain yang tidak dapat diterima dapat dilaporkan dengan menghubungi tim proyek di support@roocode.com. Semua keluhan akan ditinjau dan diselidiki dan akan menghasilkan respons yang dianggap perlu dan sesuai dengan keadaan. Tim proyek wajib menjaga kerahasiaan sehubungan dengan pelapor insiden. Detail lebih lanjut tentang kebijakan penegakan spesifik dapat diposting secara terpisah. +Contoh perilaku kasar, melecehkan, atau perilaku lain yang tidak dapat diterima dapat dilaporkan dengan menghubungi tim proyek di https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Semua keluhan akan ditinjau dan diselidiki dan akan menghasilkan respons yang dianggap perlu dan sesuai dengan keadaan. Tim proyek wajib menjaga kerahasiaan sehubungan dengan pelapor insiden. Detail lebih lanjut tentang kebijakan penegakan spesifik dapat diposting secara terpisah. Maintainer proyek yang tidak mengikuti atau menegakkan Kode Etik dengan itikad baik dapat menghadapi dampak sementara atau permanen sebagaimana ditentukan oleh anggota lain dari kepemimpinan proyek. diff --git a/locales/it/CODE_OF_CONDUCT.md b/locales/it/CODE_OF_CONDUCT.md index 42adbffaaa0..04f5ddd3d6c 100644 --- a/locales/it/CODE_OF_CONDUCT.md +++ b/locales/it/CODE_OF_CONDUCT.md @@ -68,7 +68,7 @@ ulteriormente definita e chiarita dai manutentori del progetto. ## Applicazione Casi di comportamento abusivo, molesto o altrimenti inaccettabile possono essere -segnalati contattando il team del progetto all'indirizzo support@roocode.com. Tutti i reclami +segnalati contattando il team del progetto all'indirizzo https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Tutti i reclami saranno esaminati e indagati e risulteranno in una risposta che è ritenuta necessaria e appropriata alle circostanze. Il team del progetto è obbligato a mantenere la riservatezza nei confronti di chi segnala un incidente. diff --git a/locales/ja/CODE_OF_CONDUCT.md b/locales/ja/CODE_OF_CONDUCT.md index 08290123b91..64d10148262 100644 --- a/locales/ja/CODE_OF_CONDUCT.md +++ b/locales/ja/CODE_OF_CONDUCT.md @@ -69,7 +69,7 @@ ## 施行 虐待的、嫌がらせ、またはその他容認できない行動の事例は、 -support@roocode.com でプロジェクトチームに連絡することで報告することができます。 +https://github.com/RooCodeInc/Roo-Code/security/advisories/new でプロジェクトチームに連絡することで報告することができます。 すべての苦情は審査・調査され、状況に応じて必要かつ適切と 判断される対応がとられます。プロジェクトチームは インシデント報告者に関する守秘義務を守る義務があります。 diff --git a/locales/ko/CODE_OF_CONDUCT.md b/locales/ko/CODE_OF_CONDUCT.md index 87a481c064c..f7e35121d33 100644 --- a/locales/ko/CODE_OF_CONDUCT.md +++ b/locales/ko/CODE_OF_CONDUCT.md @@ -62,7 +62,7 @@ ## 시행 학대, 괴롭힘 또는 기타 용납할 수 없는 행동의 사례는 -support@roocode.com으로 프로젝트 팀에 연락하여 보고할 수 있습니다. 모든 불만 사항은 +https://github.com/RooCodeInc/Roo-Code/security/advisories/new으로 프로젝트 팀에 연락하여 보고할 수 있습니다. 모든 불만 사항은 검토되고 조사되며 상황에 필요하고 적절하다고 판단되는 대응으로 이어질 것입니다. 프로젝트 팀은 사건의 보고자와 관련하여 기밀을 유지할 의무가 있습니다. 특정 시행 정책의 추가 세부 사항은 별도로 게시될 수 있습니다. diff --git a/locales/nl/CODE_OF_CONDUCT.md b/locales/nl/CODE_OF_CONDUCT.md index 82a2e48ddd7..9de569bf743 100644 --- a/locales/nl/CODE_OF_CONDUCT.md +++ b/locales/nl/CODE_OF_CONDUCT.md @@ -47,7 +47,7 @@ Deze Gedragscode is van toepassing binnen projectruimtes en in openbare ruimtes ## Handhaving -Voorvallen van beledigend, intimiderend of anderszins onacceptabel gedrag kunnen worden gemeld door contact op te nemen met het projectteam via support@roocode.com. Alle klachten zullen worden beoordeeld en onderzocht en zullen resulteren in een reactie die passend wordt geacht voor de omstandigheden. Het projectteam is verplicht vertrouwelijkheid te bewaren met betrekking tot de melder van het incident. Verdere details over specifiek handhavingsbeleid kunnen afzonderlijk worden gepubliceerd. +Voorvallen van beledigend, intimiderend of anderszins onacceptabel gedrag kunnen worden gemeld door contact op te nemen met het projectteam via https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Alle klachten zullen worden beoordeeld en onderzocht en zullen resulteren in een reactie die passend wordt geacht voor de omstandigheden. Het projectteam is verplicht vertrouwelijkheid te bewaren met betrekking tot de melder van het incident. Verdere details over specifiek handhavingsbeleid kunnen afzonderlijk worden gepubliceerd. Projectbeheerders die de Gedragscode niet te goeder trouw volgen of handhaven, kunnen tijdelijke of permanente gevolgen ondervinden zoals bepaald door andere leden van het leiderschap van het project. diff --git a/locales/pl/CODE_OF_CONDUCT.md b/locales/pl/CODE_OF_CONDUCT.md index 70d0eb8648b..58849b361d3 100644 --- a/locales/pl/CODE_OF_CONDUCT.md +++ b/locales/pl/CODE_OF_CONDUCT.md @@ -68,7 +68,7 @@ dalej definiowana i wyjaśniana przez opiekunów projektu. ## Egzekwowanie Przypadki obraźliwego, nękającego lub w inny sposób niedopuszczalnego zachowania mogą być -zgłaszane poprzez kontakt z zespołem projektu pod adresem support@roocode.com. Wszystkie skargi +zgłaszane poprzez kontakt z zespołem projektu pod adresem https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Wszystkie skargi zostaną przejrzane i zbadane, co zaowocuje odpowiedzią, która zostanie uznana za niezbędną i odpowiednią do okoliczności. Zespół projektu jest zobowiązany do zachowania poufności w odniesieniu do zgłaszającego incydent. diff --git a/locales/pt-BR/CODE_OF_CONDUCT.md b/locales/pt-BR/CODE_OF_CONDUCT.md index 1f33fb01527..3ba40fb09a5 100644 --- a/locales/pt-BR/CODE_OF_CONDUCT.md +++ b/locales/pt-BR/CODE_OF_CONDUCT.md @@ -68,7 +68,7 @@ definida e esclarecida posteriormente pelos mantenedores do projeto. ## Aplicação Instâncias de comportamento abusivo, de assédio ou de outra forma inaceitável podem ser -relatadas entrando em contato com a equipe do projeto em support@roocode.com. Todas as reclamações +relatadas entrando em contato com a equipe do projeto em https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Todas as reclamações serão revisadas e investigadas e resultarão em uma resposta que é considerada necessária e apropriada às circunstâncias. A equipe do projeto é obrigada a manter confidencialidade em relação ao relator de um incidente. diff --git a/locales/ru/CODE_OF_CONDUCT.md b/locales/ru/CODE_OF_CONDUCT.md index 3063aa70601..b14ec025257 100644 --- a/locales/ru/CODE_OF_CONDUCT.md +++ b/locales/ru/CODE_OF_CONDUCT.md @@ -62,7 +62,7 @@ ## Правоприменение О случаях оскорбительного, притесняющего или иного неприемлемого поведения можно -сообщить, связавшись с командой проекта по адресу support@roocode.com. Все жалобы +сообщить, связавшись с командой проекта по адресу https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Все жалобы будут рассмотрены и расследованы, что приведет к ответу, который будет считаться необходимым и соответствующим обстоятельствам. Команда проекта обязана сохранять конфиденциальность в отношении лица, сообщившего об инциденте. diff --git a/locales/tr/CODE_OF_CONDUCT.md b/locales/tr/CODE_OF_CONDUCT.md index 1e995d9cc48..9fcc83b6e6b 100644 --- a/locales/tr/CODE_OF_CONDUCT.md +++ b/locales/tr/CODE_OF_CONDUCT.md @@ -64,7 +64,7 @@ tanımlanabilir ve netleştirilebilir. ## Uygulama Taciz edici veya başka türlü kabul edilemez davranış örnekleri, -support@roocode.com adresinden proje ekibiyle iletişime geçilerek bildirilebilir. Tüm şikayetler +https://github.com/RooCodeInc/Roo-Code/security/advisories/new adresinden proje ekibiyle iletişime geçilerek bildirilebilir. Tüm şikayetler incelenecek ve araştırılacak ve koşullara göre gerekli ve uygun görülen bir yanıtla sonuçlanacaktır. Proje ekibi, bir olayı bildiren kişiye ilişkin gizliliği korumakla yükümlüdür. diff --git a/locales/vi/CODE_OF_CONDUCT.md b/locales/vi/CODE_OF_CONDUCT.md index 04c8a40e807..9f4db336b3b 100644 --- a/locales/vi/CODE_OF_CONDUCT.md +++ b/locales/vi/CODE_OF_CONDUCT.md @@ -68,7 +68,7 @@ tại một sự kiện trực tuyến hoặc ngoại tuyến. Đại diện c ## Thực Thi Các trường hợp hành vi lạm dụng, quấy rối, hoặc không thể chấp nhận khác có thể được -báo cáo bằng cách liên hệ với nhóm dự án tại support@roocode.com. Tất cả khiếu nại +báo cáo bằng cách liên hệ với nhóm dự án tại https://github.com/RooCodeInc/Roo-Code/security/advisories/new. Tất cả khiếu nại sẽ được xem xét và điều tra và sẽ dẫn đến phản hồi được cho là cần thiết và phù hợp với hoàn cảnh. Nhóm dự án có nghĩa vụ duy trì tính bảo mật đối với người báo cáo về một sự cố. diff --git a/locales/zh-CN/CODE_OF_CONDUCT.md b/locales/zh-CN/CODE_OF_CONDUCT.md index 573874c2aa3..88ec4075feb 100644 --- a/locales/zh-CN/CODE_OF_CONDUCT.md +++ b/locales/zh-CN/CODE_OF_CONDUCT.md @@ -63,7 +63,7 @@ ## 执行 -可能通过联系项目团队(support@roocode.com) +可能通过联系项目团队(https://github.com/RooCodeInc/Roo-Code/security/advisories/new) 来报告辱骂、骚扰或其他不可接受的行为的情况。所有 投诉将被审查和调查,并将导致被认为 必要且适合情况的回应。项目团队有 diff --git a/locales/zh-TW/CODE_OF_CONDUCT.md b/locales/zh-TW/CODE_OF_CONDUCT.md index 30f79a875b5..e337c82f77e 100644 --- a/locales/zh-TW/CODE_OF_CONDUCT.md +++ b/locales/zh-TW/CODE_OF_CONDUCT.md @@ -47,7 +47,7 @@ ## 執行 -如發生辱罵、騷擾或其他不可接受的行為,請透過 support@roocode.com 聯絡專案團隊回報。所有申訴都將被審查和調查,並做出必要且合適的回應。專案團隊有義務為事件回報者保密。具體執行政策的更多細節可能另行公佈。 +如發生辱罵、騷擾或其他不可接受的行為,請透過 https://github.com/RooCodeInc/Roo-Code/security/advisories/new 聯絡專案團隊回報。所有申訴都將被審查和調查,並做出必要且合適的回應。專案團隊有義務為事件回報者保密。具體執行政策的更多細節可能另行公佈。 未遵守或未切實執行本行為準則的專案維護者,可能會面臨由專案領導團隊其他成員所決定的暫時或永久處分。 diff --git a/packages/evals/src/cli/utils.ts b/packages/evals/src/cli/utils.ts index 5f2db9f9bd9..af036775fed 100644 --- a/packages/evals/src/cli/utils.ts +++ b/packages/evals/src/cli/utils.ts @@ -25,7 +25,7 @@ export const isDockerContainer = () => { export const resetEvalsRepo = async ({ run, cwd }: { run: Run; cwd: string }) => { await execa({ cwd })`git config user.name "Roo Code"` - await execa({ cwd })`git config user.email "support@roocode.com"` + await execa({ cwd })`git config user.email "noreply@example.com"` await execa({ cwd })`git checkout -f` await execa({ cwd })`git clean -fd` await execa({ cwd })`git checkout -b runs/${run.id}-${crypto.randomUUID().slice(0, 8)} main` diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 1106d340050..09eff71df61 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1968,6 +1968,11 @@ export class ClineProvider async postStateToWebview() { const state = await this.getStateToPostToWebview() + await vscode.commands.executeCommand( + "setContext", + "roo-cline.cloudIsAuthenticated", + state.cloudIsAuthenticated === true, + ) this.clineMessagesSeq++ state.clineMessagesSeq = this.clineMessagesSeq this.postMessageToWebview({ type: "state", state }) @@ -1989,6 +1994,11 @@ export class ClineProvider */ async postStateToWebviewWithoutTaskHistory(): Promise { const state = await this.getStateToPostToWebview() + await vscode.commands.executeCommand( + "setContext", + "roo-cline.cloudIsAuthenticated", + state.cloudIsAuthenticated === true, + ) this.clineMessagesSeq++ state.clineMessagesSeq = this.clineMessagesSeq const { taskHistory: _omit, ...rest } = state @@ -2013,6 +2023,11 @@ export class ClineProvider */ async postStateToWebviewWithoutClineMessages(): Promise { const state = await this.getStateToPostToWebview() + await vscode.commands.executeCommand( + "setContext", + "roo-cline.cloudIsAuthenticated", + state.cloudIsAuthenticated === true, + ) const { clineMessages: _omitMessages, taskHistory: _omitHistory, ...rest } = state this.postMessageToWebview({ type: "state", state: rest }) diff --git a/src/core/webview/__tests__/diagnosticsHandler.spec.ts b/src/core/webview/__tests__/diagnosticsHandler.spec.ts index 27593b56bf0..c5b16ced549 100644 --- a/src/core/webview/__tests__/diagnosticsHandler.spec.ts +++ b/src/core/webview/__tests__/diagnosticsHandler.spec.ts @@ -85,7 +85,7 @@ describe("generateErrorDiagnostics", () => { // taskId.slice(0, 8) = "test-tas" from "test-task-id" expect(String(writtenPath)).toContain("roo-diagnostics-test-tas") expect(String(writtenContent)).toContain( - "// Please share this file with Roo Code Support (support@roocode.com) to diagnose the issue faster", + "// If you open a GitHub issue, you can attach this file to help diagnose the issue faster.", ) expect(String(writtenContent)).toContain('"error":') expect(String(writtenContent)).toContain('"history":') diff --git a/src/core/webview/diagnosticsHandler.ts b/src/core/webview/diagnosticsHandler.ts index 212ddbc5dee..7bb869ca074 100644 --- a/src/core/webview/diagnosticsHandler.ts +++ b/src/core/webview/diagnosticsHandler.ts @@ -65,8 +65,8 @@ export async function generateErrorDiagnostics(params: GenerateDiagnosticsParams // Prepend human-readable guidance comments before the JSON payload const headerComment = - "// Please share this file with Roo Code Support (support@roocode.com) to diagnose the issue faster\n" + - "// Just make sure you're OK sharing the contents of the conversation below.\n\n" + "// If you open a GitHub issue, you can attach this file to help diagnose the issue faster.\n" + + "// Only share it if you're OK sharing the contents of the conversation below.\n\n" const jsonContent = JSON.stringify(diagnostics, null, 2) const fullContent = headerComment + jsonContent diff --git a/src/package.json b/src/package.json index cb3b93d1602..64b00632d19 100644 --- a/src/package.json +++ b/src/package.json @@ -226,7 +226,7 @@ { "command": "roo-cline.cloudButtonClicked", "group": "navigation@3", - "when": "view == roo-cline.SidebarProvider" + "when": "view == roo-cline.SidebarProvider && roo-cline.cloudIsAuthenticated" }, { "command": "roo-cline.marketplaceButtonClicked", @@ -258,7 +258,7 @@ { "command": "roo-cline.cloudButtonClicked", "group": "navigation@3", - "when": "activeWebviewPanelId == roo-cline.TabPanelProvider" + "when": "activeWebviewPanelId == roo-cline.TabPanelProvider && roo-cline.cloudIsAuthenticated" }, { "command": "roo-cline.marketplaceButtonClicked", diff --git a/src/services/checkpoints/__tests__/ShadowCheckpointService.spec.ts b/src/services/checkpoints/__tests__/ShadowCheckpointService.spec.ts index 5bc43d54ce9..df22bfb0fa0 100644 --- a/src/services/checkpoints/__tests__/ShadowCheckpointService.spec.ts +++ b/src/services/checkpoints/__tests__/ShadowCheckpointService.spec.ts @@ -17,7 +17,7 @@ const tmpDir = path.join(os.tmpdir(), "CheckpointService") const initWorkspaceRepo = async ({ workspaceDir, userName = "Roo Code", - userEmail = "support@roocode.com", + userEmail = "noreply@example.com", testFileName = "test.txt", textFileContent = "Hello, world!", }: { @@ -389,7 +389,7 @@ describe.each([[RepoPerTaskCheckpointService, "RepoPerTaskCheckpointService"]])( const mainGit = simpleGit(workspaceDir) await mainGit.init() await mainGit.addConfig("user.name", "Roo Code") - await mainGit.addConfig("user.email", "support@roocode.com") + await mainGit.addConfig("user.email", "noreply@example.com") // Create a nested repo inside the workspace. const nestedRepoPath = path.join(workspaceDir, "nested-project") @@ -397,7 +397,7 @@ describe.each([[RepoPerTaskCheckpointService, "RepoPerTaskCheckpointService"]])( const nestedGit = simpleGit(nestedRepoPath) await nestedGit.init() await nestedGit.addConfig("user.name", "Roo Code") - await nestedGit.addConfig("user.email", "support@roocode.com") + await nestedGit.addConfig("user.email", "noreply@example.com") // Add a file to the nested repo. const nestedFile = path.join(nestedRepoPath, "nested-file.txt") @@ -459,7 +459,7 @@ describe.each([[RepoPerTaskCheckpointService, "RepoPerTaskCheckpointService"]])( const mainGit = simpleGit(workspaceDir) await mainGit.init() await mainGit.addConfig("user.name", "Roo Code") - await mainGit.addConfig("user.email", "support@roocode.com") + await mainGit.addConfig("user.email", "noreply@example.com") // Create a test file in the main workspace. const mainFile = path.join(workspaceDir, "main-file.txt") @@ -975,7 +975,7 @@ describe("worktree path comparison", () => { const mainGit = simpleGit(workspaceDir) await mainGit.init() await mainGit.addConfig("user.name", "Roo Code") - await mainGit.addConfig("user.email", "support@roocode.com") + await mainGit.addConfig("user.email", "noreply@example.com") await fs.writeFile(path.join(workspaceDir, "main.txt"), "main content") await mainGit.add("main.txt") @@ -1010,7 +1010,7 @@ describe("worktree path comparison", () => { const mainGit = simpleGit(workspaceDir) await mainGit.init() await mainGit.addConfig("user.name", "Roo Code") - await mainGit.addConfig("user.email", "support@roocode.com") + await mainGit.addConfig("user.email", "noreply@example.com") await fs.writeFile(path.join(workspaceDir, "main.txt"), "main content") await mainGit.add("main.txt") diff --git a/webview-ui/src/App.tsx b/webview-ui/src/App.tsx index cccb0422ca8..b5819ea93d6 100644 --- a/webview-ui/src/App.tsx +++ b/webview-ui/src/App.tsx @@ -93,6 +93,10 @@ const App = () => { const switchTab = useCallback( (newTab: Tab) => { + if (newTab === "cloud" && !cloudIsAuthenticated && mdmCompliant !== false) { + return + } + // 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 !== "cloud") { @@ -110,7 +114,7 @@ const App = () => { setTab(newTab) } }, - [mdmCompliant], + [cloudIsAuthenticated, mdmCompliant], ) const [currentSection, setCurrentSection] = useState(undefined) @@ -177,6 +181,12 @@ const App = () => { } }, [shouldShowAnnouncement, tab]) + useEffect(() => { + if (tab === "cloud" && !cloudIsAuthenticated && mdmCompliant !== false) { + setTab("chat") + } + }, [cloudIsAuthenticated, mdmCompliant, tab]) + useEffect(() => { if (didHydrateState) { telemetryClient.updateTelemetryState(telemetrySetting, telemetryKey, machineId) @@ -237,7 +247,7 @@ const App = () => { targetTab={currentMarketplaceTab as "mcp" | "mode" | undefined} /> )} - {tab === "cloud" && ( + {tab === "cloud" && (cloudIsAuthenticated || mdmCompliant === false) && ( { expect(chatView.getAttribute("data-hidden")).toBe("false") expect(screen.queryByTestId("marketplace-view")).not.toBeInTheDocument() }) + + it("ignores cloud navigation when unauthenticated", async () => { + render() + + act(() => { + triggerMessage("cloudButtonClicked") + }) + + expect(screen.queryByTestId("cloud-view")).not.toBeInTheDocument() + expect(screen.getByTestId("chat-view").getAttribute("data-hidden")).toBe("false") + }) + + it("switches to cloud view when authenticated", async () => { + mockUseExtensionState.mockReturnValue({ + didHydrateState: true, + showWelcome: false, + shouldShowAnnouncement: false, + experiments: {}, + language: "en", + telemetrySetting: "enabled", + cloudIsAuthenticated: true, + }) + + render() + + act(() => { + triggerMessage("cloudButtonClicked") + }) + + expect(await screen.findByTestId("cloud-view")).toBeInTheDocument() + expect(screen.getByTestId("chat-view").getAttribute("data-hidden")).toBe("true") + }) }) diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index 33c9acb2df2..1544b1d451e 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -1117,8 +1117,7 @@ export const ChatRowContent = ({ } else { // Non-HTTP-status-code error message - store full text as errorDetails body = t("chat:apiRequest.errorMessage.unknown") - docsURL = - "mailto:support@roocode.com?subject=Unknown API Error&body=[Please include full error details]" + docsURL = "https://github.com/RooCodeInc/Roo-Code/issues/new/choose" } } diff --git a/webview-ui/src/components/chat/TaskHeader.tsx b/webview-ui/src/components/chat/TaskHeader.tsx index 52833ed335d..8479f90906b 100644 --- a/webview-ui/src/components/chat/TaskHeader.tsx +++ b/webview-ui/src/components/chat/TaskHeader.tsx @@ -1,15 +1,11 @@ -import { memo, useEffect, useRef, useState, useMemo } from "react" +import { memo, useRef, useState, useMemo } from "react" import { useTranslation } from "react-i18next" -import { useCloudUpsell } from "@src/hooks/useCloudUpsell" -import { CloudUpsellDialog } from "@src/components/cloud/CloudUpsellDialog" -import DismissibleUpsell from "@src/components/common/DismissibleUpsell" import { ChevronUp, ChevronDown, HardDriveDownload, HardDriveUpload, FoldVertical, ArrowLeft } from "lucide-react" import prettyBytes from "pretty-bytes" import type { ClineMessage } from "@roo-code/types" import { getModelMaxOutputTokens } from "@roo/api" -import { findLastIndex } from "@roo/array" import { formatLargeNumber } from "@src/utils/format" import { cn } from "@src/lib/utils" @@ -60,37 +56,9 @@ const TaskHeader = ({ todos, }: TaskHeaderProps) => { const { t } = useTranslation() - const { apiConfiguration, currentTaskItem, clineMessages } = useExtensionState() + const { apiConfiguration, currentTaskItem } = useExtensionState() const { id: modelId, info: model } = useSelectedModel(apiConfiguration) const [isTaskExpanded, setIsTaskExpanded] = useState(false) - const [showLongRunningTaskMessage, setShowLongRunningTaskMessage] = useState(false) - const { isOpen, openUpsell, closeUpsell, handleConnect } = useCloudUpsell({ - autoOpenOnAuth: false, - }) - - // Check if the task is complete by looking at the last relevant message (skipping resume messages) - const isTaskComplete = - clineMessages && clineMessages.length > 0 - ? (() => { - const lastRelevantIndex = findLastIndex( - clineMessages, - (m) => !(m.ask === "resume_task" || m.ask === "resume_completed_task"), - ) - return lastRelevantIndex !== -1 - ? clineMessages[lastRelevantIndex]?.ask === "completion_result" - : false - })() - : false - - useEffect(() => { - const timer = setTimeout(() => { - if (currentTaskItem && !isTaskComplete) { - setShowLongRunningTaskMessage(true) - } - }, 120_000) // Show upsell after 2 minutes - - return () => clearTimeout(timer) - }, [currentTaskItem, isTaskComplete]) const textContainerRef = useRef(null) const textRef = useRef(null) @@ -144,15 +112,6 @@ const TaskHeader = ({
)} - {showLongRunningTaskMessage && !isTaskComplete && ( - openUpsell()} - dismissOnClick={false} - variant="banner"> - {t("cloud:upsell.longRunningTask")} - - )}
}
- ) } diff --git a/webview-ui/src/components/chat/__tests__/TaskHeader.spec.tsx b/webview-ui/src/components/chat/__tests__/TaskHeader.spec.tsx index c4ebe06973a..fca87fc64c6 100644 --- a/webview-ui/src/components/chat/__tests__/TaskHeader.spec.tsx +++ b/webview-ui/src/components/chat/__tests__/TaskHeader.spec.tsx @@ -36,7 +36,7 @@ vi.mock("@vscode/webview-ui-toolkit/react", () => ({ })) // Create a variable to hold the mock state -let mockExtensionState: { +const mockExtensionState: { apiConfiguration: ProviderSettings currentTaskItem: { id: string } | null clineMessages: any[] @@ -55,42 +55,6 @@ vi.mock("@src/context/ExtensionStateContext", () => ({ useExtensionState: () => mockExtensionState, })) -// Mock the useCloudUpsell hook -vi.mock("@src/hooks/useCloudUpsell", () => ({ - useCloudUpsell: () => ({ - isOpen: false, - openUpsell: vi.fn(), - closeUpsell: vi.fn(), - handleConnect: vi.fn(), - }), -})) - -// Mock DismissibleUpsell component -vi.mock("@src/components/common/DismissibleUpsell", () => ({ - default: ({ children, ...props }: any) => ( -
- {children} -
- ), -})) - -// Mock CloudUpsellDialog component -vi.mock("@src/components/cloud/CloudUpsellDialog", () => ({ - CloudUpsellDialog: () => null, -})) - -// Mock findLastIndex from @roo/array -vi.mock("@roo/array", () => ({ - findLastIndex: (array: any[], predicate: (item: any) => boolean) => { - for (let i = array.length - 1; i >= 0; i--) { - if (predicate(array[i])) { - return i - } - } - return -1 - }, -})) - // Create a variable to hold the mock model info for useSelectedModel let mockModelInfo: { contextWindow: number; maxTokens: number } | undefined = undefined @@ -203,184 +167,6 @@ describe("TaskHeader", () => { expect(handleCondenseContext).not.toHaveBeenCalled() }) - describe("DismissibleUpsell behavior", () => { - beforeEach(() => { - vi.useFakeTimers() - // Reset the mock state before each test - mockExtensionState = { - apiConfiguration: { - apiProvider: "anthropic", - apiKey: "test-api-key", - apiModelId: "claude-3-opus-20240229", - } as ProviderSettings, - currentTaskItem: { id: "test-task-id" }, - clineMessages: [], - } - }) - - afterEach(() => { - vi.useRealTimers() - }) - - it("should show DismissibleUpsell after 2 minutes when task is not complete", async () => { - renderTaskHeader() - - // Initially, the upsell should not be visible - expect(screen.queryByTestId("dismissible-upsell")).not.toBeInTheDocument() - - // Fast-forward time by 2 minutes to match component timeout - await vi.advanceTimersByTimeAsync(120_000) - - // The upsell should now be visible - expect(screen.getByTestId("dismissible-upsell")).toBeInTheDocument() - expect(screen.getByText("cloud:upsell.longRunningTask")).toBeInTheDocument() - }) - - it("should not show DismissibleUpsell when task is complete", async () => { - // Set up mock state with a completion_result message - mockExtensionState = { - ...mockExtensionState, - clineMessages: [ - { - type: "ask", - ask: "completion_result", - ts: Date.now(), - text: "Task completed!", - }, - ], - } - - renderTaskHeader() - - // Fast-forward time by more than 2 minutes - await vi.advanceTimersByTimeAsync(130_000) - - // The upsell should not appear - expect(screen.queryByTestId("dismissible-upsell")).not.toBeInTheDocument() - }) - - it("should not show DismissibleUpsell when currentTaskItem is null", async () => { - // Update the mock state to have null currentTaskItem - mockExtensionState = { - ...mockExtensionState, - currentTaskItem: null, - } - - renderTaskHeader() - - // Fast-forward time by more than 2 minutes - await vi.advanceTimersByTimeAsync(130_000) - - // The upsell should not appear - expect(screen.queryByTestId("dismissible-upsell")).not.toBeInTheDocument() - }) - - it("should not show DismissibleUpsell when task has completion_result in clineMessages", async () => { - // Set up mock state with a completion_result message from the start - mockExtensionState = { - ...mockExtensionState, - clineMessages: [ - { - type: "say", - say: "text", - ts: Date.now() - 1000, - text: "Working on task...", - }, - { - type: "ask", - ask: "completion_result", - ts: Date.now(), - text: "Task completed!", - }, - ], - } - - renderTaskHeader() - - // Fast-forward time by more than 2 minutes - await vi.advanceTimersByTimeAsync(130_000) - - // The upsell should not appear because the task is complete - expect(screen.queryByTestId("dismissible-upsell")).not.toBeInTheDocument() - }) - - it("should not show DismissibleUpsell when task has completion_result followed by resume messages", async () => { - // Set up mock state with a completion_result message followed by resume messages - mockExtensionState = { - ...mockExtensionState, - clineMessages: [ - { - type: "say", - say: "text", - ts: Date.now() - 3000, - text: "Working on task...", - }, - { - type: "ask", - ask: "completion_result", - ts: Date.now() - 2000, - text: "Task completed!", - }, - { - type: "ask", - ask: "resume_completed_task", - ts: Date.now() - 1000, - text: "Resume completed task?", - }, - { - type: "ask", - ask: "resume_task", - ts: Date.now(), - text: "Resume task?", - }, - ], - } - - renderTaskHeader() - - // Fast-forward time by more than 2 minutes - await vi.advanceTimersByTimeAsync(130_000) - - // The upsell should not appear because the last relevant message (skipping resume messages) is completion_result - expect(screen.queryByTestId("dismissible-upsell")).not.toBeInTheDocument() - }) - - it("should show DismissibleUpsell when task has non-completion message followed by resume messages", async () => { - // Set up mock state with a non-completion message followed by resume messages - mockExtensionState = { - ...mockExtensionState, - clineMessages: [ - { - type: "say", - say: "text", - ts: Date.now() - 3000, - text: "Working on task...", - }, - { - type: "ask", - ask: "tool", - ts: Date.now() - 2000, - text: "Need permission to use tool", - }, - { - type: "ask", - ask: "resume_task", - ts: Date.now() - 1000, - text: "Resume task?", - }, - ], - } - - renderTaskHeader() - - // Fast-forward time by 2 minutes to trigger the upsell - await vi.advanceTimersByTimeAsync(120_000) - - // The upsell should appear because the last relevant message (skipping resume messages) is not completion_result - expect(screen.getByTestId("dismissible-upsell")).toBeInTheDocument() - }) - }) - describe("Back to parent task button", () => { beforeEach(() => { mockPostMessage.mockClear() diff --git a/webview-ui/src/components/settings/providers/Roo.tsx b/webview-ui/src/components/settings/providers/Roo.tsx index b272d8b2f2e..5264ace040f 100644 --- a/webview-ui/src/components/settings/providers/Roo.tsx +++ b/webview-ui/src/components/settings/providers/Roo.tsx @@ -6,8 +6,6 @@ import { } from "@roo-code/types" import { useAppTranslation } from "@src/i18n/TranslationContext" -import { vscode } from "@src/utils/vscode" -import { Button } from "@src/components/ui" import { ModelPicker } from "../ModelPicker" @@ -34,21 +32,12 @@ export const Roo = ({ return ( <> - {cloudIsAuthenticated ? ( + {cloudIsAuthenticated && (
{t("settings:providers.roo.authenticatedMessage")}
- ) : ( -
- -
)} Més informació.", - "longRunningTask": "Això pot trigar una estona. Continua des de qualsevol lloc amb Cloud." - } + "switchAccount": "Canviar Compte de Roo Code Cloud" } diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 9d4be59b285..6301e85da54 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -469,8 +469,7 @@ "warning": "Nota: Roo Code utilitza prompts complexos i funciona millor amb models Claude. Els models menys capaços poden no funcionar com s'espera." }, "roo": { - "authenticatedMessage": "Autenticat de forma segura a través del teu compte de Roo Code Cloud.", - "connectButton": "Connecta amb Roo Code Cloud" + "authenticatedMessage": "Autenticat de forma segura a través del teu compte de Roo Code Cloud." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/de/cloud.json b/webview-ui/src/i18n/locales/de/cloud.json index dbb6218868c..ec777e61212 100644 --- a/webview-ui/src/i18n/locales/de/cloud.json +++ b/webview-ui/src/i18n/locales/de/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Persönliches Konto", "switchAccount": "Roo Code Cloud Konto wechseln", "createTeamAccount": "Team-Konto erstellen", - "cloudUrlPillLabel": "Roo Code Cloud URL", - "upsell": { - "autoApprovePowerUser": "Roo etwas Unabhängigkeit geben? Kontrolliere es von überall mit Roo Code Cloud. Mehr erfahren.", - "longRunningTask": "Das könnte eine Weile dauern. Mit Cloud von überall weitermachen." - } + "cloudUrlPillLabel": "Roo Code Cloud URL" } diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 6cb1ebc3773..8c2d18d7237 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -469,8 +469,7 @@ "warning": "Hinweis: Roo Code verwendet komplexe Prompts und funktioniert am besten mit Claude-Modellen. Weniger leistungsfähige Modelle funktionieren möglicherweise nicht wie erwartet." }, "roo": { - "authenticatedMessage": "Sicher authentifiziert über dein Roo Code Cloud-Konto.", - "connectButton": "Mit Roo Code Cloud verbinden" + "authenticatedMessage": "Sicher authentifiziert über dein Roo Code Cloud-Konto." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/en/cloud.json b/webview-ui/src/i18n/locales/en/cloud.json index 6fa31704792..314a0fe82c0 100644 --- a/webview-ui/src/i18n/locales/en/cloud.json +++ b/webview-ui/src/i18n/locales/en/cloud.json @@ -24,9 +24,5 @@ "startOver": "Start over", "personalAccount": "Personal Account", "switchAccount": "Switch Roo Code Cloud Account", - "createTeamAccount": "Create Team Account", - "upsell": { - "autoApprovePowerUser": "Giving Roo some independence? Control it from anywhere with Roo Code Cloud. Learn more.", - "longRunningTask": "This might take a while. Continue from anywhere with Cloud." - } + "createTeamAccount": "Create Team Account" } diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 8ec42367f14..2234a81e9ec 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -532,8 +532,7 @@ "warning": "Note: Roo Code uses complex prompts and works best with Claude models. Less capable models may not work as expected." }, "roo": { - "authenticatedMessage": "Securely authenticated through your Roo Code Cloud account.", - "connectButton": "Connect to Roo Code Cloud" + "authenticatedMessage": "Securely authenticated through your Roo Code Cloud account." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/es/cloud.json b/webview-ui/src/i18n/locales/es/cloud.json index 4b944c76d64..c94881ebb00 100644 --- a/webview-ui/src/i18n/locales/es/cloud.json +++ b/webview-ui/src/i18n/locales/es/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Cuenta Personal", "switchAccount": "Cambiar Cuenta de Roo Code Cloud", "createTeamAccount": "Crear Cuenta de Equipo", - "cloudUrlPillLabel": "URL de Roo Code Cloud", - "upsell": { - "autoApprovePowerUser": "¿Dándole a Roo un poco de independencia? Contrólalo desde cualquier lugar con Roo Code Cloud. Saber más.", - "longRunningTask": "Esto podría tardar un poco. Continúa desde cualquier lugar con la Nube." - } + "cloudUrlPillLabel": "URL de Roo Code Cloud" } diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index a26b789de4f..28180624ec1 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -469,8 +469,7 @@ "warning": "Nota: Roo Code utiliza prompts complejos y funciona mejor con modelos Claude. Los modelos menos capaces pueden no funcionar como se espera." }, "roo": { - "authenticatedMessage": "Autenticado de forma segura a través de tu cuenta de Roo Code Cloud.", - "connectButton": "Conectar a Roo Code Cloud" + "authenticatedMessage": "Autenticado de forma segura a través de tu cuenta de Roo Code Cloud." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/fr/cloud.json b/webview-ui/src/i18n/locales/fr/cloud.json index 1ca71e20ee3..92646e08e40 100644 --- a/webview-ui/src/i18n/locales/fr/cloud.json +++ b/webview-ui/src/i18n/locales/fr/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Compte Personnel", "switchAccount": "Changer de Compte Roo Code Cloud", "createTeamAccount": "Créer un Compte d'Équipe", - "cloudUrlPillLabel": "URL de Roo Code Cloud", - "upsell": { - "autoApprovePowerUser": "Donner à Roo un peu d'indépendance ? Contrôlez-le de n'importe où avec Roo Code Cloud. En savoir plus.", - "longRunningTask": "Cela peut prendre un certain temps. Continuez de n'importe où avec le Cloud." - } + "cloudUrlPillLabel": "URL de Roo Code Cloud" } diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index b8e4da391fe..20e85f547af 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -469,8 +469,7 @@ "warning": "Remarque : Roo Code utilise des prompts complexes et fonctionne mieux avec les modèles Claude. Les modèles moins performants peuvent ne pas fonctionner comme prévu." }, "roo": { - "authenticatedMessage": "Authentifié de manière sécurisée via ton compte Roo Code Cloud.", - "connectButton": "Se connecter à Roo Code Cloud" + "authenticatedMessage": "Authentifié de manière sécurisée via ton compte Roo Code Cloud." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/hi/cloud.json b/webview-ui/src/i18n/locales/hi/cloud.json index 4bef19d34a2..c4193dff37f 100644 --- a/webview-ui/src/i18n/locales/hi/cloud.json +++ b/webview-ui/src/i18n/locales/hi/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "व्यक्तिगत खाता", "switchAccount": "Roo Code Cloud खाता बदलें", "createTeamAccount": "टीम खाता बनाएं", - "cloudUrlPillLabel": "Roo Code Cloud URL", - "upsell": { - "autoApprovePowerUser": "रू को थोड़ी स्वतंत्रता दे रहे हैं? रू कोड क्लाउड के साथ इसे कहीं से भी नियंत्रित करें। और जानें।", - "longRunningTask": "इसमें थोड़ा समय लग सकता है। क्लाउड के साथ कहीं से भी जारी रखें।" - } + "cloudUrlPillLabel": "Roo Code Cloud URL" } diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 6c602e6441a..1bd32fda620 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -469,8 +469,7 @@ "warning": "नोट: Roo Code जटिल प्रॉम्प्ट्स का उपयोग करता है और Claude मॉडल के साथ सबसे अच्छा काम करता है। कम क्षमता वाले मॉडल अपेक्षित रूप से काम नहीं कर सकते हैं।" }, "roo": { - "authenticatedMessage": "आपके Roo Code Cloud खाते के माध्यम से सुरक्षित रूप से प्रमाणित।", - "connectButton": "Roo Code Cloud से कनेक्ट करें" + "authenticatedMessage": "आपके Roo Code Cloud खाते के माध्यम से सुरक्षित रूप से प्रमाणित।" }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/id/cloud.json b/webview-ui/src/i18n/locales/id/cloud.json index 6c7dd53b68c..9338b3ff73d 100644 --- a/webview-ui/src/i18n/locales/id/cloud.json +++ b/webview-ui/src/i18n/locales/id/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Akun Pribadi", "switchAccount": "Ganti Akun Roo Code Cloud", "createTeamAccount": "Buat Akun Tim", - "cloudUrlPillLabel": "URL Roo Code Cloud", - "upsell": { - "autoApprovePowerUser": "Memberi Roo sedikit kebebasan? Kendalikan dari mana saja dengan Roo Code Cloud. Pelajari lebih lanjut.", - "longRunningTask": "Ini mungkin akan memakan waktu cukup lama. Lanjutkan dari mana saja dengan Cloud." - } + "cloudUrlPillLabel": "URL Roo Code Cloud" } diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index bc12a0da481..0743f4d5cbb 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -469,8 +469,7 @@ "warning": "Catatan: Roo Code menggunakan prompt kompleks dan bekerja terbaik dengan model Claude. Model yang kurang mampu mungkin tidak bekerja seperti yang diharapkan." }, "roo": { - "authenticatedMessage": "Terautentikasi dengan aman melalui akun Roo Code Cloud Anda.", - "connectButton": "Hubungkan ke Roo Code Cloud" + "authenticatedMessage": "Terautentikasi dengan aman melalui akun Roo Code Cloud Anda." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/it/cloud.json b/webview-ui/src/i18n/locales/it/cloud.json index 7b5a03d1fa9..1442f4901cb 100644 --- a/webview-ui/src/i18n/locales/it/cloud.json +++ b/webview-ui/src/i18n/locales/it/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Account Personale", "switchAccount": "Cambia Account Roo Code Cloud", "createTeamAccount": "Crea Account del Team", - "cloudUrlPillLabel": "URL di Roo Code Cloud", - "upsell": { - "autoApprovePowerUser": "Vuoi dare un po' di indipendenza a Roo? Controllalo da qualsiasi luogo con Roo Code Cloud. Scopri di più.", - "longRunningTask": "Potrebbe volerci un po' di tempo. Continua da qualsiasi luogo con il Cloud." - } + "cloudUrlPillLabel": "URL di Roo Code Cloud" } diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 877032cda90..44b396cf350 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -469,8 +469,7 @@ "warning": "Nota: Roo Code utiliza prompt complessi e funziona meglio con i modelli Claude. I modelli con capacità inferiori potrebbero non funzionare come previsto." }, "roo": { - "authenticatedMessage": "Autenticato in modo sicuro tramite il tuo account Roo Code Cloud.", - "connectButton": "Connetti a Roo Code Cloud" + "authenticatedMessage": "Autenticato in modo sicuro tramite il tuo account Roo Code Cloud." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/ja/cloud.json b/webview-ui/src/i18n/locales/ja/cloud.json index 8b50fa16d8e..c69ac81045d 100644 --- a/webview-ui/src/i18n/locales/ja/cloud.json +++ b/webview-ui/src/i18n/locales/ja/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "個人アカウント", "switchAccount": "Roo Code Cloud アカウントを切り替え", "createTeamAccount": "チームアカウントを作成", - "cloudUrlPillLabel": "Roo Code Cloud URL", - "upsell": { - "autoApprovePowerUser": "Rooに少し独立性を与えませんか?Roo Code Cloudでどこからでもコントロールできます。詳細。", - "longRunningTask": "これには時間がかかるかもしれません。Cloudを使えばどこからでも続けられます。" - } + "cloudUrlPillLabel": "Roo Code Cloud URL" } diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 7f31d349393..d5af7518ce7 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -469,8 +469,7 @@ "warning": "注意:Roo Codeは複雑なプロンプトを使用し、Claudeモデルで最適に動作します。能力の低いモデルは期待通りに動作しない場合があります。" }, "roo": { - "authenticatedMessage": "Roo Code Cloudアカウントを通じて安全に認証されています。", - "connectButton": "Roo Code Cloudに接続" + "authenticatedMessage": "Roo Code Cloudアカウントを通じて安全に認証されています。" }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/ko/cloud.json b/webview-ui/src/i18n/locales/ko/cloud.json index bbecfd075d5..1ad8c7f57f4 100644 --- a/webview-ui/src/i18n/locales/ko/cloud.json +++ b/webview-ui/src/i18n/locales/ko/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "개인 계정", "switchAccount": "Roo Code Cloud 계정 전환", "createTeamAccount": "팀 계정 만들기", - "cloudUrlPillLabel": "Roo Code Cloud URL", - "upsell": { - "autoApprovePowerUser": "Roo에게 약간의 독립성을 부여하시겠습니까? Roo Code Cloud로 어디서든 제어하세요. 더 알아보기.", - "longRunningTask": "시간이 좀 걸릴 수 있습니다. Cloud로 어디서든 계속하세요." - } + "cloudUrlPillLabel": "Roo Code Cloud URL" } diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 707719609c4..aaeb7b60e29 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -469,8 +469,7 @@ "warning": "참고: Roo Code는 복잡한 프롬프트를 사용하며 Claude 모델에서 가장 잘 작동합니다. 덜 강력한 모델은 예상대로 작동하지 않을 수 있습니다." }, "roo": { - "authenticatedMessage": "Roo Code Cloud 계정을 통해 안전하게 인증되었습니다.", - "connectButton": "Roo Code Cloud에 연결" + "authenticatedMessage": "Roo Code Cloud 계정을 통해 안전하게 인증되었습니다." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/nl/cloud.json b/webview-ui/src/i18n/locales/nl/cloud.json index 8500fae3480..20a0ea631de 100644 --- a/webview-ui/src/i18n/locales/nl/cloud.json +++ b/webview-ui/src/i18n/locales/nl/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Persoonlijk Account", "switchAccount": "Wissel van Roo Code Cloud Account", "createTeamAccount": "Teamaccount aanmaken", - "cloudUrlPillLabel": "Roo Code Cloud URL", - "upsell": { - "autoApprovePowerUser": "Roo wat onafhankelijkheid geven? Bedien het overal met Roo Code Cloud. Meer informatie.", - "longRunningTask": "Dit kan even duren. Ga overal verder met de Cloud." - } + "cloudUrlPillLabel": "Roo Code Cloud URL" } diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index e54277ade4e..53507d50f97 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -469,8 +469,7 @@ "warning": "Let op: Roo Code gebruikt complexe prompts en werkt het beste met Claude-modellen. Minder krachtige modellen werken mogelijk niet zoals verwacht." }, "roo": { - "authenticatedMessage": "Veilig geauthenticeerd via je Roo Code Cloud-account.", - "connectButton": "Verbinden met Roo Code Cloud" + "authenticatedMessage": "Veilig geauthenticeerd via je Roo Code Cloud-account." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/pl/cloud.json b/webview-ui/src/i18n/locales/pl/cloud.json index 1c96c6453ae..fd55a88a60d 100644 --- a/webview-ui/src/i18n/locales/pl/cloud.json +++ b/webview-ui/src/i18n/locales/pl/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Konto Osobiste", "switchAccount": "Przełącz Konto Roo Code Cloud", "createTeamAccount": "Utwórz Konto Zespołu", - "cloudUrlPillLabel": "URL Roo Code Cloud", - "upsell": { - "autoApprovePowerUser": "Dać Roo trochę niezależności? Kontroluj go z dowolnego miejsca dzięki Roo Code Cloud. Dowiedz się więcej.", - "longRunningTask": "To może chwilę potrwać. Kontynuuj z dowolnego miejsca dzięki Chmurze." - } + "cloudUrlPillLabel": "URL Roo Code Cloud" } diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 92d2604acb7..e185407afb2 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -469,8 +469,7 @@ "warning": "Uwaga: Roo Code używa złożonych podpowiedzi i działa najlepiej z modelami Claude. Modele o niższych możliwościach mogą nie działać zgodnie z oczekiwaniami." }, "roo": { - "authenticatedMessage": "Bezpiecznie uwierzytelniony przez twoje konto Roo Code Cloud.", - "connectButton": "Połącz z Roo Code Cloud" + "authenticatedMessage": "Bezpiecznie uwierzytelniony przez twoje konto Roo Code Cloud." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/pt-BR/cloud.json b/webview-ui/src/i18n/locales/pt-BR/cloud.json index 66c2bceb166..14b7b37c8a9 100644 --- a/webview-ui/src/i18n/locales/pt-BR/cloud.json +++ b/webview-ui/src/i18n/locales/pt-BR/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Conta Pessoal", "switchAccount": "Alternar Conta do Roo Code Cloud", "createTeamAccount": "Criar Conta de Equipe", - "cloudUrlPillLabel": "URL do Roo Code Cloud ", - "upsell": { - "autoApprovePowerUser": "Dando um pouco de independência ao Roo? Controle-o de qualquer lugar com o Roo Code Cloud. Saiba mais.", - "longRunningTask": "Isso pode levar um tempo. Continue de qualquer lugar com a Nuvem." - } + "cloudUrlPillLabel": "URL do Roo Code Cloud " } diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index cba3599d3cb..2524320e61b 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -469,8 +469,7 @@ "warning": "Nota: O Roo Code usa prompts complexos e funciona melhor com modelos Claude. Modelos menos capazes podem não funcionar como esperado." }, "roo": { - "authenticatedMessage": "Autenticado com segurança através da sua conta Roo Code Cloud.", - "connectButton": "Conectar ao Roo Code Cloud" + "authenticatedMessage": "Autenticado com segurança através da sua conta Roo Code Cloud." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/ru/cloud.json b/webview-ui/src/i18n/locales/ru/cloud.json index 68b99659fb1..83eb7ed06a7 100644 --- a/webview-ui/src/i18n/locales/ru/cloud.json +++ b/webview-ui/src/i18n/locales/ru/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Личный аккаунт", "switchAccount": "Переключить аккаунт Roo Code Cloud", "createTeamAccount": "Создать командный аккаунт", - "cloudUrlPillLabel": "URL Roo Code Cloud", - "upsell": { - "autoApprovePowerUser": "Предоставить Roo немного независимости? Управляйте им из любого места с помощью Roo Code Cloud. Узнать больше.", - "longRunningTask": "Это может занять некоторое время. Продолжайте из любого места с помощью Облака." - } + "cloudUrlPillLabel": "URL Roo Code Cloud" } diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 524b8a25281..f50612ed295 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -469,8 +469,7 @@ "warning": "Примечание: Roo Code использует сложные подсказки и лучше всего работает с моделями Claude. Менее мощные модели могут работать некорректно." }, "roo": { - "authenticatedMessage": "Безопасно аутентифицирован через твой аккаунт Roo Code Cloud.", - "connectButton": "Подключиться к Roo Code Cloud" + "authenticatedMessage": "Безопасно аутентифицирован через твой аккаунт Roo Code Cloud." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/tr/cloud.json b/webview-ui/src/i18n/locales/tr/cloud.json index 75d0f2949df..f65b0320bee 100644 --- a/webview-ui/src/i18n/locales/tr/cloud.json +++ b/webview-ui/src/i18n/locales/tr/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Kişisel Hesap", "switchAccount": "Roo Code Cloud Hesabını Değiştir", "createTeamAccount": "Takım Hesabı Oluştur", - "cloudUrlPillLabel": "Roo Code Cloud URL'si", - "upsell": { - "autoApprovePowerUser": "Roo'ya biraz bağımsızlık mı veriyorsunuz? Roo Code Cloud ile onu her yerden kontrol edin. Daha fazla bilgi edinin.", - "longRunningTask": "Bu biraz zaman alabilir. Bulut ile her yerden devam edin." - } + "cloudUrlPillLabel": "Roo Code Cloud URL'si" } diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 42ba46f85e1..2efe23d8d77 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -469,8 +469,7 @@ "warning": "Not: Roo Code karmaşık istemler kullanır ve Claude modelleriyle en iyi şekilde çalışır. Daha az yetenekli modeller beklendiği gibi çalışmayabilir." }, "roo": { - "authenticatedMessage": "Roo Code Cloud hesabın üzerinden güvenli bir şekilde kimlik doğrulandı.", - "connectButton": "Roo Code Cloud'a Bağlan" + "authenticatedMessage": "Roo Code Cloud hesabın üzerinden güvenli bir şekilde kimlik doğrulandı." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/vi/cloud.json b/webview-ui/src/i18n/locales/vi/cloud.json index 698dfb1ab0d..dd9ceaa473b 100644 --- a/webview-ui/src/i18n/locales/vi/cloud.json +++ b/webview-ui/src/i18n/locales/vi/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "Tài Khoản Cá Nhân", "switchAccount": "Chuyển Tài Khoản Roo Code Cloud", "createTeamAccount": "Tạo Tài Khoản Nhóm", - "cloudUrlPillLabel": "URL Roo Code Cloud", - "upsell": { - "autoApprovePowerUser": "Trao cho Roo một chút độc lập? Kiểm soát nó từ mọi nơi với Roo Code Cloud. Tìm hiểu thêm.", - "longRunningTask": "Việc này có thể mất một lúc. Tiếp tục từ mọi nơi với Cloud." - } + "cloudUrlPillLabel": "URL Roo Code Cloud" } diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 11259a45e35..ea4be1b8244 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -469,8 +469,7 @@ "warning": "Lưu ý: Roo Code sử dụng các lời nhắc phức tạp và hoạt động tốt nhất với các mô hình Claude. Các mô hình kém mạnh hơn có thể không hoạt động như mong đợi." }, "roo": { - "authenticatedMessage": "Đã xác thực an toàn thông qua tài khoản Roo Code Cloud của bạn.", - "connectButton": "Kết nối với Roo Code Cloud" + "authenticatedMessage": "Đã xác thực an toàn thông qua tài khoản Roo Code Cloud của bạn." }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/zh-CN/cloud.json b/webview-ui/src/i18n/locales/zh-CN/cloud.json index f875359c2ac..39f2bbe05f1 100644 --- a/webview-ui/src/i18n/locales/zh-CN/cloud.json +++ b/webview-ui/src/i18n/locales/zh-CN/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "个人账户", "switchAccount": "切换 Roo Code Cloud 账户", "createTeamAccount": "创建团队账户", - "cloudUrlPillLabel": "Roo Code Cloud URL", - "upsell": { - "autoApprovePowerUser": "给 Roo 一些独立性?使用 Roo Code Cloud 从任何地方控制它。 了解更多。", - "longRunningTask": "这可能需要一段时间。使用 Cloud 从任何地方继续。" - } + "cloudUrlPillLabel": "Roo Code Cloud URL" } diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 80ca437ce77..11f0f3626a0 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -469,8 +469,7 @@ "warning": "注意:Roo Code 使用复杂的提示,与 Claude 模型配合最佳。功能较弱的模型可能无法按预期工作。" }, "roo": { - "authenticatedMessage": "已通过 Roo Code Cloud 账户安全认证。", - "connectButton": "连接到 Roo Code Cloud" + "authenticatedMessage": "已通过 Roo Code Cloud 账户安全认证。" }, "openRouter": { "providerRouting": { diff --git a/webview-ui/src/i18n/locales/zh-TW/cloud.json b/webview-ui/src/i18n/locales/zh-TW/cloud.json index aaab4800c08..dd08b84befa 100644 --- a/webview-ui/src/i18n/locales/zh-TW/cloud.json +++ b/webview-ui/src/i18n/locales/zh-TW/cloud.json @@ -24,9 +24,5 @@ "personalAccount": "個人帳戶", "switchAccount": "切換 Roo Code Cloud 帳戶", "createTeamAccount": "建立團隊帳戶", - "cloudUrlPillLabel": "Roo Code Cloud URL", - "upsell": { - "autoApprovePowerUser": "給 Roo 一點獨立性?使用 Roo Code Cloud 隨時隨地掌控工作進度。了解更多。", - "longRunningTask": "這可能需要一些時間。使用雲端隨時隨地繼續。" - } + "cloudUrlPillLabel": "Roo Code Cloud URL" } diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 37c14c8e1bb..b997ba219bf 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -479,8 +479,7 @@ "warning": "注意:Roo Code 使用複雜提示詞,與 Claude 模型搭配最佳。功能較弱的模型可能無法正常運作。" }, "roo": { - "authenticatedMessage": "已透過 Roo Code Cloud 帳戶安全認證。", - "connectButton": "連線到 Roo Code Cloud" + "authenticatedMessage": "已透過 Roo Code Cloud 帳戶安全認證。" }, "openRouter": { "providerRouting": {