diff --git a/webview-ui/src/components/chat/ChatTextArea.tsx b/webview-ui/src/components/chat/ChatTextArea.tsx index c7813372fa79..0b8c89388c9e 100644 --- a/webview-ui/src/components/chat/ChatTextArea.tsx +++ b/webview-ui/src/components/chat/ChatTextArea.tsx @@ -979,7 +979,7 @@ export const ChatTextArea = forwardRef( "flex-col-reverse", "min-h-0", "overflow-hidden", - "rounded", + "rounded-lg", )}>
( isEditMode ? "pr-20" : "pr-9", "z-10", "forced-color-adjust-none", - "rounded", + "rounded-lg", )} style={{ color: "transparent", diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index 929fa9427aa0..924fcb8ab44d 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -44,7 +44,6 @@ import { CloudUpsellDialog } from "@src/components/cloud/CloudUpsellDialog" import TelemetryBanner from "../common/TelemetryBanner" import VersionIndicator from "../common/VersionIndicator" -import { useTaskSearch } from "../history/useTaskSearch" import HistoryPreview from "../history/HistoryPreview" import Announcement from "./Announcement" import BrowserSessionRow from "./BrowserSessionRow" @@ -118,7 +117,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction { - const newState = !isExpanded - setIsExpanded(newState) - // Send message to extension to persist the new collapsed state - vscode.postMessage({ type: "setHistoryPreviewCollapsed", bool: !newState }) - }, [isExpanded]) - // Leaving this less safe version here since if the first message is not a // task, then the extension is in a bad state and needs to be debugged (see // Cline.abort). @@ -1810,53 +1794,35 @@ const ChatViewComponent: React.ForwardRefRenderFunction ) : ( -
- {/* Moved Task Bar Header Here */} - {tasks.length !== 0 && ( -
-
- {tasks.length < 10 && ( - {t("history:recentTasks")} - )} - -
-
- )} -
0 ? "mt-0" : ""} px-3.5 min-[370px]:px-10 pt-5 transition-all duration-300`}> - {/* Version indicator in top-right corner - only on welcome screen */} +
+
setShowAnnouncementModal(true)} className="absolute top-2 right-3 z-10" /> - - - -
- {cloudIsAuthenticated || taskHistory.length < 4 ? ( - - ) : ( - <> - } - onClick={() => openUpsell()} - dismissOnClick={false} - className="bg-vscode-editor-background p-4 !text-base"> - , - }} - /> - - - )} +
+ + {/* Show RooTips when authenticated or when user is new */} + {(cloudIsAuthenticated || taskHistory.length < 4) && } + {/* Everyone should see their task history if any */} + {taskHistory.length > 0 && }
- {/* Show the task history preview if expanded and tasks exist */} - {taskHistory.length > 0 && isExpanded && } + {/* Logged out users should see a one-time upsell, but not for brand new users */} + {!cloudIsAuthenticated && taskHistory.length >= 4 && ( + } + onClick={() => openUpsell()} + dismissOnClick={false} + className="!bg-vscode-editor-background mt-6 border-border rounded-xl pl-4 pr-3 py-3 !text-base"> + , + }} + /> + + )}
)} diff --git a/webview-ui/src/components/chat/TaskHeader.tsx b/webview-ui/src/components/chat/TaskHeader.tsx index aef0bc5eee93..71a4fbba8285 100644 --- a/webview-ui/src/components/chat/TaskHeader.tsx +++ b/webview-ui/src/components/chat/TaskHeader.tsx @@ -112,10 +112,10 @@ const TaskHeader = ({ )}
{ @@ -163,7 +163,9 @@ const TaskHeader = ({
{!isTaskExpanded && contextWindow > 0 && ( -
e.stopPropagation()}> +
e.stopPropagation()}> diff --git a/webview-ui/src/components/history/HistoryPreview.tsx b/webview-ui/src/components/history/HistoryPreview.tsx index 753b4b84e7c6..8c0ce0ad87c7 100644 --- a/webview-ui/src/components/history/HistoryPreview.tsx +++ b/webview-ui/src/components/history/HistoryPreview.tsx @@ -15,18 +15,21 @@ const HistoryPreview = () => { } return ( -
+
+
+

{t("history:recentTasks")}

+ +
{tasks.length !== 0 && ( <> {tasks.slice(0, 3).map((item) => ( ))} - )}
diff --git a/webview-ui/src/components/history/TaskItem.tsx b/webview-ui/src/components/history/TaskItem.tsx index d661d999300d..949306fa2abd 100644 --- a/webview-ui/src/components/history/TaskItem.tsx +++ b/webview-ui/src/components/history/TaskItem.tsx @@ -47,7 +47,7 @@ const TaskItem = ({ key={item.id} data-testid={`task-item-${item.id}`} className={cn( - "cursor-pointer group bg-vscode-editor-background rounded relative overflow-hidden border border-transparent hover:bg-vscode-list-hoverBackground transition-colors", + "cursor-pointer group bg-vscode-editor-background rounded-xl relative overflow-hidden border border-transparent hover:bg-vscode-editor-foreground/10 transition-colors", className, )} onClick={handleClick}> @@ -70,7 +70,7 @@ const TaskItem = ({
= ({ item, variant, isSelectionMode = false, onDelete }) => { return (
-
+
{/* Datetime with time-ago format */} {formatTimeAgo(item.ts)} @@ -32,7 +32,7 @@ const TaskItemFooter: React.FC = ({ item, variant, isSelect {/* Action Buttons for non-compact view */} {!isSelectionMode && ( -
+
{variant === "full" && } {onDelete && } diff --git a/webview-ui/src/components/history/__tests__/HistoryPreview.spec.tsx b/webview-ui/src/components/history/__tests__/HistoryPreview.spec.tsx index 20e7fcbdf3c9..a75721c28cab 100644 --- a/webview-ui/src/components/history/__tests__/HistoryPreview.spec.tsx +++ b/webview-ui/src/components/history/__tests__/HistoryPreview.spec.tsx @@ -100,7 +100,7 @@ describe("HistoryPreview", () => { const { container } = render() // Should render the container but no task items - expect(container.firstChild).toHaveClass("flex", "flex-col", "gap-3") + expect(container.firstChild).toHaveClass("flex", "flex-col", "gap-1") expect(screen.queryByTestId(/task-item-/)).not.toBeInTheDocument() }) @@ -226,6 +226,6 @@ describe("HistoryPreview", () => { const { container } = render() - expect(container.firstChild).toHaveClass("flex", "flex-col", "gap-3") + expect(container.firstChild).toHaveClass("flex", "flex-col", "gap-1") }) }) diff --git a/webview-ui/src/components/history/__tests__/TaskItem.spec.tsx b/webview-ui/src/components/history/__tests__/TaskItem.spec.tsx index 6995d5840c08..1bcc983c6eed 100644 --- a/webview-ui/src/components/history/__tests__/TaskItem.spec.tsx +++ b/webview-ui/src/components/history/__tests__/TaskItem.spec.tsx @@ -107,6 +107,6 @@ describe("TaskItem", () => { ) const taskItem = screen.getByTestId("task-item-1") - expect(taskItem).toHaveClass("hover:bg-vscode-list-hoverBackground") + expect(taskItem).toHaveClass("hover:bg-vscode-editor-foreground/10") }) }) diff --git a/webview-ui/src/components/welcome/RooHero.tsx b/webview-ui/src/components/welcome/RooHero.tsx index 3d25ea87b559..fe8a0f9da1f9 100644 --- a/webview-ui/src/components/welcome/RooHero.tsx +++ b/webview-ui/src/components/welcome/RooHero.tsx @@ -7,7 +7,7 @@ const RooHero = () => { }) return ( -
+
{ maskRepeat: "no-repeat", maskSize: "contain", }} - className="mx-auto"> - Roo logo + className="mx-auto hover:animate-bounce"> + Roo logo
) diff --git a/webview-ui/src/components/welcome/RooTips.tsx b/webview-ui/src/components/welcome/RooTips.tsx index c0d6682d5670..273a2df1e90e 100644 --- a/webview-ui/src/components/welcome/RooTips.tsx +++ b/webview-ui/src/components/welcome/RooTips.tsx @@ -3,19 +3,20 @@ import { useTranslation } from "react-i18next" import { Trans } from "react-i18next" import { buildDocLink } from "@src/utils/docLinks" +import { ReplaceAll, Users } from "lucide-react" const tips = [ { - icon: "codicon-account", + icon: , href: buildDocLink("basic-usage/using-modes", "tips"), titleKey: "rooTips.customizableModes.title", descriptionKey: "rooTips.customizableModes.description", }, { - icon: "codicon-list-tree", - href: buildDocLink("features/boomerang-tasks", "tips"), - titleKey: "rooTips.boomerangTasks.title", - descriptionKey: "rooTips.boomerangTasks.description", + icon: , + href: buildDocLink("getting-started/connecting-api-provider", "tips"), + titleKey: "rooTips.modelAgnostic.title", + descriptionKey: "rooTips.modelAgnostic.description", }, ] @@ -23,27 +24,16 @@ const RooTips = () => { const { t } = useTranslation("chat") return ( -
-

- - the docs - - ), - }} - /> +

+

+

-
+
{tips.map((tip) => ( -
- +
+ {tip.icon} - + {t(tip.titleKey)} : {t(tip.descriptionKey)} @@ -51,6 +41,19 @@ const RooTips = () => {
))}
+

+ + ), + }} + /> +

) } diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 16ea62c44390..c97be9fb4cc9 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Modes personalitzables", "description": "Personalitats especialitzades amb comportaments propis i models assignats" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Selecciona el mode d'interacció", @@ -429,5 +433,6 @@ "problems": "Problemes", "terminal": "Terminal", "url": "Enganxa la URL per obtenir-ne el contingut" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index a3f14d12549b..7154abf3c513 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Anpassbare Modi", "description": "Spezialisierte Personas mit eigenem Verhalten und zugewiesenen Modellen" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Interaktionsmodus auswählen", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo möchte einen Slash-Befehl ausführen", "didRun": "Roo hat einen Slash-Befehl ausgeführt" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 6f47f040c67b..fd14f7d34dd4 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -96,24 +96,17 @@ "placeholder": "Edit your message..." }, "scrollToBottom": "Scroll to bottom of chat", - "about": "Generate, refactor, and debug code with AI assistance. Check out our documentation to learn more.", + "about": "Roo Code is a whole AI dev team in your editor.", + "docs": "Check our docs to learn more.", "onboarding": "Your task list in this workspace is empty.", "rooTips": { - "boomerangTasks": { - "title": "Task Orchestration", - "description": "Split tasks into smaller, manageable parts" - }, - "stickyModels": { - "title": "Sticky Models", - "description": "Each mode remembers your last used model" - }, - "tools": { - "title": "Tools", - "description": "Allow the AI to solve problems by browsing the web, running commands, and more" - }, "customizableModes": { - "title": "Customizable Modes", - "description": "Specialized personas with their own behaviors and assigned models" + "title": "Customizable modes", + "description": "Specialized personas that stay on-task and deliver." + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Select mode for interaction", diff --git a/webview-ui/src/i18n/locales/en/history.json b/webview-ui/src/i18n/locales/en/history.json index 8d004331709f..608be93140ca 100644 --- a/webview-ui/src/i18n/locales/en/history.json +++ b/webview-ui/src/i18n/locales/en/history.json @@ -41,5 +41,5 @@ "mostTokens": "Most Tokens", "mostRelevant": "Most Relevant" }, - "viewAllHistory": "View all tasks" + "viewAllHistory": "View all" } diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index e6084b371399..79cd7701d2b3 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Modos personalizables", "description": "Personalidades especializadas con sus propios comportamientos y modelos asignados" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Seleccionar modo de interacción", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo quiere ejecutar un comando slash", "didRun": "Roo ejecutó un comando slash" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 38d63358ca98..94c1df8b9465 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Modes personnalisables", "description": "Des personas spécialisés avec leurs propres comportements et modèles assignés" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Sélectionner le mode d'interaction", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo veut exécuter une commande slash", "didRun": "Roo a exécuté une commande slash" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 9bc4b4619766..966c99285f4b 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "अनुकूलन योग्य मोड", "description": "विशिष्ट प्रोफाइल अपने व्यवहार और निर्धारित मॉडल के साथ" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "इंटरैक्शन मोड चुनें", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo एक स्लैश कमांड चलाना चाहता है", "didRun": "Roo ने एक स्लैश कमांड चलाया" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index b61b47b3d884..4f5fc0486056 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -117,6 +117,10 @@ "customizableModes": { "title": "Mode yang Dapat Disesuaikan", "description": "Persona khusus dengan perilaku dan model yang ditugaskan sendiri" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Pilih mode untuk interaksi", @@ -435,5 +439,6 @@ "slashCommand": { "wantsToRun": "Roo ingin menjalankan perintah slash", "didRun": "Roo telah menjalankan perintah slash" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index 082c489e9313..e21e2e25cb98 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Modalità personalizzabili", "description": "Personalità specializzate con comportamenti propri e modelli assegnati" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Seleziona modalità di interazione", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo vuole eseguire un comando slash", "didRun": "Roo ha eseguito un comando slash" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 531afc067e4d..7eab0b42dcf8 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "カスタマイズ可能なモード", "description": "独自の動作と割り当てられたモデルを持つ専門的なペルソナ" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "対話モードを選択", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Rooはスラッシュコマンドを実行したい", "didRun": "Rooはスラッシュコマンドを実行しました" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index 9f7818bc4757..cba8b8b761b0 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "사용자 정의 모드", "description": "고유한 동작과 할당된 모델을 가진 전문 페르소나" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "상호작용 모드 선택", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo가 슬래시 명령어를 실행하려고 합니다", "didRun": "Roo가 슬래시 명령어를 실행했습니다" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index 97380d370af0..da6d39d10e4a 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Aanpasbare modi", "description": "Gespecialiseerde persona's met hun eigen gedrag en toegewezen modellen" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Selecteer modus voor interactie", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo wil een slash commando uitvoeren", "didRun": "Roo heeft een slash commando uitgevoerd" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index 414262eaa7cf..a3c34de1ab44 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Konfigurowalne tryby", "description": "Wyspecjalizowane persona z własnymi zachowaniami i przypisanymi modelami" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Wybierz tryb interakcji", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo chce uruchomić komendę slash", "didRun": "Roo uruchomił komendę slash" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index 0baa415bc7d3..a6368da4f350 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Modos personalizáveis", "description": "Personas especializadas com comportamentos próprios e modelos atribuídos" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Selecionar modo de interação", @@ -429,5 +433,6 @@ "slashCommand": { "wantsToRun": "Roo quer executar um comando slash", "didRun": "Roo executou um comando slash" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index 10cca124d355..f5c4721a1815 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -102,6 +102,10 @@ "customizableModes": { "title": "Настраиваемые режимы", "description": "Специализированные персонажи с собственным поведением и назначенными моделями" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "onboarding": "Ваш список задач в этом рабочем пространстве пуст. Начните с ввода задачи ниже. Не знаете, с чего начать? Подробнее о возможностях Roo читайте в документации.", @@ -430,5 +434,6 @@ "slashCommand": { "wantsToRun": "Roo хочет выполнить слеш-команду", "didRun": "Roo выполнил слеш-команду" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 9b92b937a799..851e91161206 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Özelleştirilebilir Modlar", "description": "Kendi davranışları ve atanmış modelleri ile özelleştirilmiş kişilikler" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Etkileşim modunu seçin", @@ -430,5 +434,6 @@ "slashCommand": { "wantsToRun": "Roo bir slash komutu çalıştırmak istiyor", "didRun": "Roo bir slash komutu çalıştırdı" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index 39cb1cf01663..b9b11bc6b9ae 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "Chế độ tùy chỉnh", "description": "Các nhân vật chuyên biệt với hành vi riêng và mô hình được chỉ định" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "Chọn chế độ tương tác", @@ -430,5 +434,6 @@ "slashCommand": { "wantsToRun": "Roo muốn chạy lệnh slash", "didRun": "Roo đã chạy lệnh slash" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index ef87b819ea99..0944f4d07dd1 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -103,6 +103,10 @@ "customizableModes": { "title": "自定义模式", "description": "具有专属行为和指定模型的特定角色" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "选择交互模式", @@ -430,5 +434,6 @@ "slashCommand": { "wantsToRun": "Roo 想要运行斜杠命令", "didRun": "Roo 运行了斜杠命令" - } + }, + "docs": "Check our docs to learn more." } diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index 985859bec418..bba3ace2507a 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -114,6 +114,10 @@ "customizableModes": { "title": "可自訂模式", "description": "具有專屬行為和指定模型的特定角色" + }, + "modelAgnostic": { + "title": "Bring your own model", + "description": "Use your own provider key or even run local inference — no markup, lock-in, no restrictions" } }, "selectMode": "選擇互動模式", @@ -430,5 +434,6 @@ "slashCommand": { "wantsToRun": "Roo 想要執行斜線指令", "didRun": "Roo 執行了斜線指令" - } + }, + "docs": "Check our docs to learn more." }