From c411271168fafb2ead7c1a5a018bea970b887d78 Mon Sep 17 00:00:00 2001 From: jdilla1277 Date: Fri, 19 Sep 2025 12:36:23 -0400 Subject: [PATCH 1/5] Updating the privacy policy to allow us to send onboarding and occasional marketing emails. --- apps/web-roo-code/src/app/privacy/page.tsx | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/web-roo-code/src/app/privacy/page.tsx b/apps/web-roo-code/src/app/privacy/page.tsx index bb132651f7..3ae0209dd0 100644 --- a/apps/web-roo-code/src/app/privacy/page.tsx +++ b/apps/web-roo-code/src/app/privacy/page.tsx @@ -86,8 +86,8 @@ export default function Privacy() { Your source code does not transit Roo Code servers unless you explicitly choose Roo Code as a model provider (proxy mode). {" "} - When Roo Code Cloud is your model provider, your code briefly transits Roo Code servers only to - forward it to the upstream model, is not stored, and is deleted immediately after + When Roo Code Cloud is your model provider, your code briefly transits Roo Code servers only + to forward it to the upstream model, is not stored, and is deleted immediately after forwarding. Otherwise, your code is sent directly—via client‑to‑provider TLS—to the model you select. Roo Code never stores, inspects, or trains on your code. @@ -184,6 +184,13 @@ export default function Privacy() {
  • Send product updates and roadmap communications (opt‑out available)
  • +
  • + Send onboarding, educational, and promotional communications. We may use + your account information (such as your name and email address) to send you onboarding + messages, product tutorials, feature announcements, newsletters, and other marketing + communications. You can opt out of non‑transactional emails at any time (see “Your Choices” + below). +
  • 3. Where Your Data Goes (And Doesn't)

    @@ -277,6 +284,12 @@ export default function Privacy() { Delete your Cloud account at any time from{" "} Security Settings inside Roo Code Cloud. +
  • + Marketing communications: You can unsubscribe from marketing and + promotional emails by clicking the unsubscribe link in those emails or by updating your + email preferences in your account settings. Transactional or service‑related emails (such as + password resets, billing notices, or security alerts) will continue even if you opt out. +
  • 6. Security Practices

    From e3a96ff94cde30f86c7619d3be897584bcbc3810 Mon Sep 17 00:00:00 2001 From: jdilla1277 Date: Fri, 19 Sep 2025 16:02:54 -0400 Subject: [PATCH 2/5] docs: Clarified unsubscribe behavior and updated the Last Updated date --- apps/web-roo-code/src/app/privacy/page.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web-roo-code/src/app/privacy/page.tsx b/apps/web-roo-code/src/app/privacy/page.tsx index 3ae0209dd0..8f4c3ad778 100644 --- a/apps/web-roo-code/src/app/privacy/page.tsx +++ b/apps/web-roo-code/src/app/privacy/page.tsx @@ -286,9 +286,9 @@ export default function Privacy() {
  • Marketing communications: You can unsubscribe from marketing and - promotional emails by clicking the unsubscribe link in those emails or by updating your - email preferences in your account settings. Transactional or service‑related emails (such as - password resets, billing notices, or security alerts) will continue even if you opt out. + promotional emails by clicking the unsubscribe link in those emails. Transactional or + service‑related emails (such as password resets, billing notices, or security alerts) will + continue even if you opt out.
  • From d34aad4bd6269c2aae7fcd01534a1e9493f0075a Mon Sep 17 00:00:00 2001 From: jdilla1277 Date: Fri, 19 Sep 2025 16:05:00 -0400 Subject: [PATCH 3/5] docs: update Last Updated date in Privacy Policy page --- apps/web-roo-code/src/app/privacy/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web-roo-code/src/app/privacy/page.tsx b/apps/web-roo-code/src/app/privacy/page.tsx index 8f4c3ad778..6b17c4ff8d 100644 --- a/apps/web-roo-code/src/app/privacy/page.tsx +++ b/apps/web-roo-code/src/app/privacy/page.tsx @@ -46,7 +46,7 @@ export default function Privacy() {

    Roo Code Cloud Privacy Policy

    -

    Last Updated: August 20, 2025

    +

    Last Updated: September 19, 2025

    This Privacy Policy explains how Roo Code, Inc. ("Roo Code," "we," From db84a0755703c82f002c32e89eda3255d355687a Mon Sep 17 00:00:00 2001 From: jdilla1277 Date: Fri, 19 Sep 2025 19:40:58 -0400 Subject: [PATCH 4/5] feat: Add Code Supernova stealth model promotion and pro trial buttons - Adds new UI message promoting stealth model Code Supernova - Adds pro trial buttons to the provider page when Roo Code Cloud is selected - Adds pro trial buttons to the Cloud page - Updates internationalization files across all supported languages --- src/core/webview/webviewMessageHandler.ts | 5 +++ src/shared/WebviewMessage.ts | 1 + webview-ui/src/components/chat/ChatView.tsx | 36 +++++++++++-------- webview-ui/src/components/cloud/CloudView.tsx | 21 +++++++++-- .../src/components/history/HistoryPreview.tsx | 10 ++++-- .../history/__tests__/HistoryPreview.spec.tsx | 26 ++++++++++++++ .../src/components/history/useTaskSearch.ts | 6 ++++ .../src/components/settings/ApiOptions.tsx | 8 +++++ 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 | 7 ++-- 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 +- 44 files changed, 183 insertions(+), 93 deletions(-) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index accb66f6e9..543d80fc30 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -3035,5 +3035,10 @@ export const webviewMessageHandler = async ( }) break } + case "openSettings": { + // Execute the settings command to open the settings panel + await vscode.commands.executeCommand(getCommand("settingsButtonClicked")) + break + } } } diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts index 93d0b9bc45..8ee282dfb3 100644 --- a/src/shared/WebviewMessage.ts +++ b/src/shared/WebviewMessage.ts @@ -225,6 +225,7 @@ export interface WebviewMessage { | "editQueuedMessage" | "dismissUpsell" | "getDismissedUpsells" + | "openSettings" text?: string editedMessageContent?: string tab?: "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "cloud" diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index d358c68f1c..5f92fc78eb 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -57,7 +57,6 @@ import { CheckpointWarning } from "./CheckpointWarning" import { QueuedMessages } from "./QueuedMessages" import DismissibleUpsell from "../common/DismissibleUpsell" import { useCloudUpsell } from "@src/hooks/useCloudUpsell" -import { Cloud } from "lucide-react" export interface ChatViewProps { isHidden: boolean @@ -131,7 +130,8 @@ const ChatViewComponent: React.ForwardRefRenderFunction 0 // Initialize expanded state based on the persisted setting (default to expanded if undefined) const [isExpanded, setIsExpanded] = useState( @@ -212,7 +212,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction {/* Moved Task Bar Header Here */} - {tasks.length !== 0 && ( + {hasTaskHistory && (

    - {tasks.length < 10 && ( + {recentTasks.length < 10 && ( {t("history:recentTasks")} )} } - onClick={() => openUpsell()} + upsellId="taskListSupernova" dismissOnClick={false} className="bg-vscode-editor-background p-4 !text-base"> - , - }} - /> +
    + , + providersLink: ( + vscode.postMessage({ type: "openSettings" })} + /> + ), + }} + /> +
    )}
    {/* Show the task history preview if expanded and tasks exist */} - {taskHistory.length > 0 && isExpanded && } + {hasTaskHistory && isExpanded && }
    )} diff --git a/webview-ui/src/components/cloud/CloudView.tsx b/webview-ui/src/components/cloud/CloudView.tsx index 78dfba7494..32dd534553 100644 --- a/webview-ui/src/components/cloud/CloudView.tsx +++ b/webview-ui/src/components/cloud/CloudView.tsx @@ -136,6 +136,10 @@ export const CloudView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }: Cl vscode.postMessage({ type: "openExternal", url: cloudUrl }) } + const handleStartFreeTrial = () => { + vscode.postMessage({ type: "openExternal", url: "https://app.roocode.com/billing" }) + } + const handleOpenCloudUrl = () => { if (cloudApiUrl) { vscode.postMessage({ type: "openExternal", url: cloudApiUrl }) @@ -272,9 +276,20 @@ export const CloudView = ({ userInfo, isAuthenticated, cloudApiUrl, onDone }: Cl
    {renderCloudBenefitsContent(t)}
    {!authInProgress && ( - - {t("cloud:connect")} - + <> + + {t("cloud:startFreeTrial")} + + + {t("cloud:connect")} + + )} {/* Manual entry section */} diff --git a/webview-ui/src/components/history/HistoryPreview.tsx b/webview-ui/src/components/history/HistoryPreview.tsx index 753b4b84e7..dc973c69b2 100644 --- a/webview-ui/src/components/history/HistoryPreview.tsx +++ b/webview-ui/src/components/history/HistoryPreview.tsx @@ -7,18 +7,22 @@ import { useTaskSearch } from "./useTaskSearch" import TaskItem from "./TaskItem" const HistoryPreview = () => { - const { tasks } = useTaskSearch() + const { tasks, recentTasks } = useTaskSearch() const { t } = useAppTranslation() const handleViewAllHistory = () => { vscode.postMessage({ type: "switchTab", tab: "history" }) } + const previewSource = tasks.length > 0 ? tasks : recentTasks + const previewTasks = previewSource.slice(0, 3) + const hasAnyTasks = recentTasks.length > 0 + return (
    - {tasks.length !== 0 && ( + {hasAnyTasks && ( <> - {tasks.slice(0, 3).map((item) => ( + {previewTasks.map((item) => ( ))}