From 80fe47b5320cdcd5932d52b03508b22cbfc0ac3c Mon Sep 17 00:00:00 2001 From: Roo Code Date: Fri, 17 Oct 2025 18:22:55 +0000 Subject: [PATCH 1/3] feat: add PR Creator mode and PR workflow improvements - Add PR Creator built-in mode for generating professional PR descriptions - Add offer_pr message after task completion (except in PR Creator mode) - Add pr_reviewer_upsell message after PR Creator completes - Add translations for new UI elements - Update message types to support new features --- packages/types/src/message.ts | 2 ++ packages/types/src/mode.ts | 12 +++++++ src/core/tools/attemptCompletionTool.ts | 8 +++++ webview-ui/src/components/chat/ChatRow.tsx | 41 +++++++++++++++++++++- webview-ui/src/i18n/locales/en/chat.json | 11 +++++- 5 files changed, 72 insertions(+), 2 deletions(-) diff --git a/packages/types/src/message.ts b/packages/types/src/message.ts index 77c055c6e152..8321d5d27d67 100644 --- a/packages/types/src/message.ts +++ b/packages/types/src/message.ts @@ -166,6 +166,8 @@ export const clineSays = [ "condense_context_error", "codebase_search_result", "user_edit_todos", + "offer_pr", + "pr_reviewer_upsell", ] as const export const clineSaySchema = z.enum(clineSays) diff --git a/packages/types/src/mode.ts b/packages/types/src/mode.ts index 88dcbb957471..d665e1ab1813 100644 --- a/packages/types/src/mode.ts +++ b/packages/types/src/mode.ts @@ -192,4 +192,16 @@ export const DEFAULT_MODES: readonly ModeConfig[] = [ customInstructions: "Your role is to coordinate complex workflows by delegating tasks to specialized modes. As an orchestrator, you should:\n\n1. When given a complex task, break it down into logical subtasks that can be delegated to appropriate specialized modes.\n\n2. For each subtask, use the `new_task` tool to delegate. Choose the most appropriate mode for the subtask's specific goal and provide comprehensive instructions in the `message` parameter. These instructions must include:\n * All necessary context from the parent task or previous subtasks required to complete the work.\n * A clearly defined scope, specifying exactly what the subtask should accomplish.\n * An explicit statement that the subtask should *only* perform the work outlined in these instructions and not deviate.\n * An instruction for the subtask to signal completion by using the `attempt_completion` tool, providing a concise yet thorough summary of the outcome in the `result` parameter, keeping in mind that this summary will be the source of truth used to keep track of what was completed on this project.\n * A statement that these specific instructions supersede any conflicting general instructions the subtask's mode might have.\n\n3. Track and manage the progress of all subtasks. When a subtask is completed, analyze its results and determine the next steps.\n\n4. Help the user understand how the different subtasks fit together in the overall workflow. Provide clear reasoning about why you're delegating specific tasks to specific modes.\n\n5. When all subtasks are completed, synthesize the results and provide a comprehensive overview of what was accomplished.\n\n6. Ask clarifying questions when necessary to better understand how to break down complex tasks effectively.\n\n7. Suggest improvements to the workflow based on the results of completed subtasks.\n\nUse subtasks to maintain clarity. If a request significantly shifts focus or requires a different expertise (mode), consider creating a subtask rather than overloading the current one.", }, + { + slug: "pr-creator", + name: "📝 PR Creator", + roleDefinition: + "You are Roo, a pull request documentation specialist focused on creating comprehensive, well-structured PR descriptions that follow conventional commit standards and best practices.", + whenToUse: + "Use this mode when you need to create a pull request. Analyzes git changes, commit history, and test coverage to generate professional PR descriptions with proper commit prefixes.", + description: "Create professional pull request descriptions", + groups: ["read", "command"], + customInstructions: + "Your workflow:\n\n1. Analyze the current branch and changes:\n - Run 'git branch --show-current' to get current branch\n - Run 'git diff origin/main...HEAD' to see all changes\n - Run 'git log origin/main..HEAD --oneline' to see commits\n\n2. Determine the commit type prefix by analyzing changes:\n - feat: New features or capabilities\n - fix: Bug fixes\n - ux: User experience improvements\n - docs: Documentation changes\n - chore: Maintenance tasks\n - refactor: Code restructuring\n - test: Test additions or updates\n - perf: Performance improvements\n - style: Code style/formatting changes\n\n3. Create a comprehensive PR description with:\n - Clear title with conventional commit prefix\n - Summary of changes (what & why)\n - Key modifications organized by category\n - Test coverage summary (new tests, modified tests, coverage %)\n - Breaking changes section (if applicable)\n - Related issues/tickets\n\n4. Execute PR creation:\n - Use: gh pr create --repo OWNER/REPO --head --base main --title \": \" --body \"\"\n - Always target 'main' as base branch\n - Ensure title follows conventional commits format\n\n5. After successful PR creation:\n - Report the PR URL\n - Summarize what was included\n - Use attempt_completion to finish\n\nStay focused on PR creation - do not switch modes or perform other tasks.", + }, ] as const diff --git a/src/core/tools/attemptCompletionTool.ts b/src/core/tools/attemptCompletionTool.ts index 5074d7f4e808..3709bb1a87d8 100644 --- a/src/core/tools/attemptCompletionTool.ts +++ b/src/core/tools/attemptCompletionTool.ts @@ -107,6 +107,14 @@ export async function attemptCompletionTool( return } + // Send offer_pr message if not in PR Creator mode + if (cline.mode !== "pr-creator") { + await cline.say("offer_pr", "", undefined, false) + } else { + // In PR Creator mode, send PR Reviewer upsell after completion + await cline.say("pr_reviewer_upsell", "", undefined, false) + } + // We already sent completion_result says, an // empty string asks relinquishes control over // button and field. diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index b0b87e7a2ddd..b7521f836832 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -59,6 +59,7 @@ import { FolderTree, TerminalSquare, MessageCircle, + GitPullRequest, } from "lucide-react" import { cn } from "@/lib/utils" @@ -130,8 +131,13 @@ export const ChatRowContent = ({ }: ChatRowContentProps) => { const { t } = useTranslation() - const { mcpServers, alwaysAllowMcp, currentCheckpoint, mode, apiConfiguration } = useExtensionState() + const { mcpServers, alwaysAllowMcp, currentCheckpoint, mode, apiConfiguration, cloudApiUrl } = useExtensionState() const { info: model } = useSelectedModel(apiConfiguration) + + // Function to switch modes + const switchToMode = useCallback((modeSlug: string) => { + vscode.postMessage({ type: "mode", text: modeSlug }) + }, []) const [isEditing, setIsEditing] = useState(false) const [editedContent, setEditedContent] = useState("") const [editMode, setEditMode] = useState(mode || "code") @@ -1254,6 +1260,39 @@ export const ChatRowContent = ({ return case "user_edit_todos": return {}} /> + case "offer_pr": + return ( + <> +
+ + {t("chat:offerPr.title")} +
+
+ {t("chat:offerPr.description")} + +
+ + ) + case "pr_reviewer_upsell": + return ( +
+ {t("chat:prReviewerUpsell.message")}{" "} + +
+ ) case "tool" as any: // Handle say tool messages const sayTool = safeJsonParse(message.text) diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 1db0b04d1759..2be637636e5c 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -402,8 +402,17 @@ "cloudAgents": { "create": "Create", "title": "Cloud Agents", - "description": "You haven’t created any Cloud Agents yet.", + "description": "You haven't created any Cloud Agents yet.", "createFirst": "Create your first", "clickToRun": "Click to run {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } From eac9f8fee99cbbea83be23983493b78db92d7b69 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Fri, 17 Oct 2025 18:32:13 +0000 Subject: [PATCH 2/3] fix: use taskMode getter and remove React hooks from switch statement --- src/core/tools/attemptCompletionTool.ts | 2 +- webview-ui/src/components/chat/ChatRow.tsx | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/tools/attemptCompletionTool.ts b/src/core/tools/attemptCompletionTool.ts index 3709bb1a87d8..481b4e1b5aec 100644 --- a/src/core/tools/attemptCompletionTool.ts +++ b/src/core/tools/attemptCompletionTool.ts @@ -108,7 +108,7 @@ export async function attemptCompletionTool( } // Send offer_pr message if not in PR Creator mode - if (cline.mode !== "pr-creator") { + if (cline.taskMode !== "pr-creator") { await cline.say("offer_pr", "", undefined, false) } else { // In PR Creator mode, send PR Reviewer upsell after completion diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index b7521f836832..24bb3ced4a1e 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -131,7 +131,8 @@ export const ChatRowContent = ({ }: ChatRowContentProps) => { const { t } = useTranslation() - const { mcpServers, alwaysAllowMcp, currentCheckpoint, mode, apiConfiguration, cloudApiUrl } = useExtensionState() + const { mcpServers, alwaysAllowMcp, currentCheckpoint, mode, apiConfiguration, cloudApiUrl, cloudIsAuthenticated } = + useExtensionState() const { info: model } = useSelectedModel(apiConfiguration) // Function to switch modes @@ -1278,6 +1279,10 @@ export const ChatRowContent = ({ ) case "pr_reviewer_upsell": + // Only show if user is authenticated to Cloud + if (!cloudIsAuthenticated) { + return null + } return (
{t("chat:prReviewerUpsell.message")}{" "} From ec272b65aebbb30e18a099a3ea285ef6150471f9 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Fri, 17 Oct 2025 18:43:12 +0000 Subject: [PATCH 3/3] feat: add PR Creator translations to all locales --- webview-ui/src/i18n/locales/ca/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/de/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/es/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/fr/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/hi/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/id/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/it/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/ja/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/ko/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/nl/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/pl/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/pt-BR/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/ru/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/tr/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/vi/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/zh-CN/chat.json | 9 +++++++++ webview-ui/src/i18n/locales/zh-TW/chat.json | 9 +++++++++ 17 files changed, 153 insertions(+) diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 007af669d379..4a496a817219 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -411,5 +411,14 @@ "description": "Encara no has creat cap Agent al núvol.", "createFirst": "Crea el teu primer", "clickToRun": "Fes clic per executar {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index 6fa4e08ba5f7..9e2eddc9d129 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -411,5 +411,14 @@ "description": "Du hast noch keine Cloud-Agenten erstellt.", "createFirst": "Erstelle deinen ersten", "clickToRun": "Klicke, um {{name}} auszuführen" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index 92b56fe124bf..9c56da6c7749 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -411,5 +411,14 @@ "description": "Aún no has creado ningún Agente en la nube.", "createFirst": "Crea tu primero", "clickToRun": "Haz clic para ejecutar {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 949ff0b3d253..fcfec1a50f95 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -411,5 +411,14 @@ "description": "Tu n'as pas encore créé d'Agents Cloud.", "createFirst": "Crée ton premier", "clickToRun": "Clique pour exécuter {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 47cd22806b5c..07f95b37d824 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -411,5 +411,14 @@ "description": "आपने अभी तक कोई क्लाउड एजेंट नहीं बनाया है।", "createFirst": "अपना पहला बनाएं", "clickToRun": "{{name}} चलाने के लिए क्लिक करें" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index 55b3cbf6094b..33ebf26f9cc6 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -417,5 +417,14 @@ "description": "Anda belum membuat Agen Cloud apa pun.", "createFirst": "Buat yang pertama", "clickToRun": "Klik untuk menjalankan {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index d546daae10ca..3ae377d9b215 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -411,5 +411,14 @@ "description": "Non hai ancora creato alcun Agente Cloud.", "createFirst": "Crea il tuo primo", "clickToRun": "Clicca per eseguire {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index b2a45f469a36..c1db58b42fb5 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -411,5 +411,14 @@ "description": "まだクラウドエージェントを作成していません。", "createFirst": "最初に作成する", "clickToRun": "クリックして{{name}}を実行" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index cbfc52e865ea..15cad1d1a552 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -411,5 +411,14 @@ "description": "아직 클라우드 에이전트를 만들지 않았습니다.", "createFirst": "첫 번째 만들기", "clickToRun": "클릭하여 {{name}} 실행" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index ca6ebfb673fd..b81feabcbdc0 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -411,5 +411,14 @@ "description": "Je hebt nog geen Cloud Agents aangemaakt.", "createFirst": "Maak je eerste aan", "clickToRun": "Klik om {{name}} uit te voeren" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index 6762ef3fdcaf..04e7b9ffd5c1 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -411,5 +411,14 @@ "description": "Nie utworzyłeś jeszcze żadnych Agentów w chmurze.", "createFirst": "Utwórz swojego pierwszego", "clickToRun": "Kliknij, aby uruchomić {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index bede3e3df497..001af520dba3 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -411,5 +411,14 @@ "description": "Você ainda não criou nenhum Agente da Nuvem.", "createFirst": "Crie o seu primeiro", "clickToRun": "Clique para executar {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index 48768a506030..576f1a4f9083 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -413,5 +413,14 @@ "description": "Вы еще не создали ни одного облачного агента.", "createFirst": "Создайте своего первого", "clickToRun": "Нажмите, чтобы запустить {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 2b44001b0fa8..e22ee2aa2f5b 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -412,5 +412,14 @@ "description": "Henüz herhangi bir Bulut Aracısı oluşturmadınız.", "createFirst": "İlkini oluştur", "clickToRun": "{{name}}'i çalıştırmak için tıklayın" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index e692fdb8a536..1f38305b6bc9 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -412,5 +412,14 @@ "description": "Bạn chưa tạo Agents trên Cloud nào.", "createFirst": "Tạo agent đầu tiên của bạn", "clickToRun": "Nhấp để chạy {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index 9cc758fad613..a34b4d9e1a0d 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -412,5 +412,14 @@ "description": "您还没有创建任何云代理。", "createFirst": "创建您的第一个", "clickToRun": "点击运行 {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } } diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index cd1614f99566..33ee3a98da3b 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -412,5 +412,14 @@ "description": "您尚未建立任何雲端代理程式。", "createFirst": "建立您的第一個", "clickToRun": "點擊以執行 {{name}}" + }, + "offerPr": { + "title": "Create Pull Request", + "description": "Would you like to create a pull request for these changes?", + "switchToPrCreator": "Switch to PR Creator" + }, + "prReviewerUpsell": { + "message": "Get Roo to review this in the Cloud", + "createLink": "Create a PR Reviewer Agent" } }