From 42b48c03471dbc898b6b60a82a3d7ed55c62c1c9 Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sat, 28 Jun 2025 10:22:57 +0200 Subject: [PATCH 01/10] "feat: Add translations for generate commit message command" --- packages/types/src/vscode.ts | 2 + src/activate/registerCommands.ts | 2 + src/integrations/git/generateCommitMessage.ts | 98 +++++++++++++++++++ src/package.json | 13 +++ src/package.nls.ca.json | 1 + src/package.nls.de.json | 1 + src/package.nls.es.json | 1 + src/package.nls.fr.json | 1 + src/package.nls.hi.json | 1 + src/package.nls.id.json | 1 + src/package.nls.it.json | 1 + src/package.nls.ja.json | 1 + src/package.nls.json | 1 + src/package.nls.ko.json | 1 + src/package.nls.nl.json | 1 + src/package.nls.pl.json | 1 + src/package.nls.pt-BR.json | 1 + src/package.nls.ru.json | 1 + src/package.nls.tr.json | 1 + src/package.nls.vi.json | 1 + src/package.nls.zh-CN.json | 1 + src/package.nls.zh-TW.json | 1 + 22 files changed, 133 insertions(+) create mode 100644 src/integrations/git/generateCommitMessage.ts diff --git a/packages/types/src/vscode.ts b/packages/types/src/vscode.ts index 00f6bbbcba..7858f93c84 100644 --- a/packages/types/src/vscode.ts +++ b/packages/types/src/vscode.ts @@ -53,6 +53,8 @@ export const commandIds = [ "focusInput", "acceptInput", "focusPanel", + + "git.generateCommitMessage", ] as const export type CommandId = (typeof commandIds)[number] diff --git a/src/activate/registerCommands.ts b/src/activate/registerCommands.ts index 8e84981d8a..5a3584ace7 100644 --- a/src/activate/registerCommands.ts +++ b/src/activate/registerCommands.ts @@ -14,6 +14,7 @@ import { registerHumanRelayCallback, unregisterHumanRelayCallback, handleHumanRe import { handleNewTask } from "./handleTask" import { CodeIndexManager } from "../services/code-index/manager" import { importSettingsWithFeedback } from "../core/config/importExport" +import { generateCommitMessage } from "../integrations/git/generateCommitMessage" import { t } from "../i18n" /** @@ -217,6 +218,7 @@ const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOpt visibleProvider.postMessageToWebview({ type: "acceptInput" }) }, + "git.generateCommitMessage": () => generateCommitMessage(context), }) export const openClineInNewTab = async ({ context, outputChannel }: Omit) => { diff --git a/src/integrations/git/generateCommitMessage.ts b/src/integrations/git/generateCommitMessage.ts new file mode 100644 index 0000000000..ea63aec127 --- /dev/null +++ b/src/integrations/git/generateCommitMessage.ts @@ -0,0 +1,98 @@ +import * as vscode from "vscode" +import * as path from "path" +import * as fs from "fs/promises" +import { buildApiHandler } from "../../api" +import { simpleGit, SimpleGit } from "simple-git" +import { ContextProxy } from "../../core/config/ContextProxy" +import { Anthropic } from "@anthropic-ai/sdk" + +async function getGitApi(): Promise { + const extension = vscode.extensions.getExtension("vscode.git") + if (!extension) { + vscode.window.showErrorMessage("Git extension not found.") + return + } + await extension.activate() + return extension.exports.getAPI(1) +} + +async function getChanges(git: SimpleGit, repoPath: string): Promise { + const trackedFilesDiff = await git.diff() + const status = await git.status() + const untrackedFiles = status.not_added + + let untrackedFilesContent = "" + for (const file of untrackedFiles) { + const filePath = path.join(repoPath, file) + try { + const content = await fs.readFile(filePath, "utf-8") + untrackedFilesContent += `\n--- a/${file}\n+++ b/${file}\n${content}` + } catch (e) { + console.error(`Could not read untracked file ${file}`, e) + } + } + + return `${trackedFilesDiff}\n${untrackedFilesContent}`.trim() +} + +function createPrompt(diff: string): string { + return `Create a git commit message from the following diff:\n${diff}` +} + +export async function generateCommitMessage(context: vscode.ExtensionContext) { + const gitApi = await getGitApi() + if (!gitApi) { + return + } + + if (gitApi.repositories.length === 0) { + vscode.window.showErrorMessage("No Git repository found.") + return + } + + const repoPath = gitApi.repositories[0].rootUri.fsPath + const git = simpleGit(repoPath) + const diff = await getChanges(git, repoPath) + + if (!diff) { + vscode.window.showInformationMessage("No changes found.") + return + } + + const contextProxy = await ContextProxy.getInstance(context) + const providerSettings = contextProxy.getProviderSettings() + if (!providerSettings) { + vscode.window.showErrorMessage("AI provider not configured.") + return + } + const provider = buildApiHandler(providerSettings) + const modelName = provider.getModel().id + const prompt = createPrompt(diff) + const messages: Anthropic.Messages.MessageParam[] = [ + { + role: "user", + content: prompt, + }, + ] + + await vscode.window.withProgress( + { + location: vscode.ProgressLocation.Notification, + title: `Generating commit message with ${modelName}...`, + cancellable: false, + }, + async () => { + const stream = provider.createMessage("", messages, { taskId: "generate-commit" }) + + let commitMessage = "" + for await (const chunk of stream) { + if (chunk.type === "text") { + commitMessage += chunk.text + } + } + + const finalMessage = commitMessage.replace(/```/g, "").trim() + gitApi.repositories[0].inputBox.value = finalMessage + }, + ) +} diff --git a/src/package.json b/src/package.json index 71085517db..c6f9b0b4df 100644 --- a/src/package.json +++ b/src/package.json @@ -169,6 +169,12 @@ "command": "roo-cline.acceptInput", "title": "%command.acceptInput.title%", "category": "%configuration.title%" + }, + { + "command": "roo-cline.git.generateCommitMessage", + "title": "%command.git.generateCommitMessage.title%", + "category": "Roo Code", + "icon": "$(sparkle)" } ], "menus": { @@ -280,6 +286,13 @@ "group": "navigation@6", "when": "activeWebviewPanelId == roo-cline.TabPanelProvider" } + ], + "scm/title": [ + { + "command": "roo-cline.git.generateCommitMessage", + "group": "navigation", + "when": "scmProvider == git" + } ] }, "submenus": [ diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index f20f269e20..514bea052d 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Corregir Aquesta Ordre", "command.terminal.explainCommand.title": "Explicar Aquesta Ordre", "command.acceptInput.title": "Acceptar Entrada/Suggeriment", + "command.git.generateCommitMessage.title": "Genera el missatge de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index 781b310668..50f8bdb54d 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Diesen Befehl Reparieren", "command.terminal.explainCommand.title": "Diesen Befehl Erklären", "command.acceptInput.title": "Eingabe/Vorschlag Akzeptieren", + "command.git.generateCommitMessage.title": "Commit-Nachricht generieren", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index 4938f5ea64..6178225271 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Corregir Este Comando", "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceptar Entrada/Sugerencia", + "command.git.generateCommitMessage.title": "Generar mensaje de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index ada2502e4f..cf67fd6ceb 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Corriger cette Commande", "command.terminal.explainCommand.title": "Expliquer cette Commande", "command.acceptInput.title": "Accepter l'Entrée/Suggestion", + "command.git.generateCommitMessage.title": "Générer le message de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index f06e21cf06..38ffa25a83 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "यह कमांड ठीक करें", "command.terminal.explainCommand.title": "यह कमांड समझाएं", "command.acceptInput.title": "इनपुट/सुझाव स्वीकारें", + "command.git.generateCommitMessage.title": "कमिट संदेश उत्पन्न करें", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index c7461aab6b..103821dce8 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -14,6 +14,7 @@ "command.settings.title": "Pengaturan", "command.documentation.title": "Dokumentasi", "command.openInNewTab.title": "Buka di Tab Baru", + "command.git.generateCommitMessage.title": "Hasilkan Pesan Komit", "command.explainCode.title": "Jelaskan Kode", "command.fixCode.title": "Perbaiki Kode", "command.improveCode.title": "Tingkatkan Kode", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index cc63935e60..5862235532 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Correggi Questo Comando", "command.terminal.explainCommand.title": "Spiega Questo Comando", "command.acceptInput.title": "Accetta Input/Suggerimento", + "command.git.generateCommitMessage.title": "Genera Messaggio di Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index 7e601d3c78..a638b4a576 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -14,6 +14,7 @@ "command.settings.title": "設定", "command.documentation.title": "ドキュメント", "command.openInNewTab.title": "新しいタブで開く", + "command.git.generateCommitMessage.title": "コミットメッセージを生成", "command.explainCode.title": "コードの説明", "command.fixCode.title": "コードの修正", "command.improveCode.title": "コードの改善", diff --git a/src/package.nls.json b/src/package.nls.json index b6880b8bfe..abf5df47f0 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -25,6 +25,7 @@ "command.terminal.fixCommand.title": "Fix This Command", "command.terminal.explainCommand.title": "Explain This Command", "command.acceptInput.title": "Accept Input/Suggestion", + "command.git.generateCommitMessage.title": "Generate Commit Message", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Commands that can be auto-executed when 'Always approve execute operations' is enabled", "settings.vsCodeLmModelSelector.description": "Settings for VSCode Language Model API", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index e305da4c4c..1fefc3b44e 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "이 명령어 수정", "command.terminal.explainCommand.title": "이 명령어 설명", "command.acceptInput.title": "입력/제안 수락", + "command.git.generateCommitMessage.title": "커밋 메시지 생성", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 3cd1880941..2550ecae01 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -14,6 +14,7 @@ "command.settings.title": "Instellingen", "command.documentation.title": "Documentatie", "command.openInNewTab.title": "Openen in Nieuw Tabblad", + "command.git.generateCommitMessage.title": "Commitbericht genereren", "command.explainCode.title": "Leg Code Uit", "command.fixCode.title": "Repareer Code", "command.improveCode.title": "Verbeter Code", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index 275c404d06..d01a0946f5 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Napraw tę Komendę", "command.terminal.explainCommand.title": "Wyjaśnij tę Komendę", "command.acceptInput.title": "Akceptuj Wprowadzanie/Sugestię", + "command.git.generateCommitMessage.title": "Generuj komunikat commita", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index 057f255c44..79f3c10a4c 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Corrigir Este Comando", "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceitar Entrada/Sugestão", + "command.git.generateCommitMessage.title": "Gerar Mensagem de Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index 02a5bcf93d..2beb31fea4 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -14,6 +14,7 @@ "command.settings.title": "Настройки", "command.documentation.title": "Документация", "command.openInNewTab.title": "Открыть в новой вкладке", + "command.git.generateCommitMessage.title": "Создать сообщение коммита", "command.explainCode.title": "Объяснить код", "command.fixCode.title": "Исправить код", "command.improveCode.title": "Улучшить код", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index dda6e9e8d1..28270bd68a 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Bu Komutu Düzelt", "command.terminal.explainCommand.title": "Bu Komutu Açıkla", "command.acceptInput.title": "Girişi/Öneriyi Kabul Et", + "command.git.generateCommitMessage.title": "Commit Mesajı Oluştur", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index 985465acb7..c075552305 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Sửa Lệnh Này", "command.terminal.explainCommand.title": "Giải Thích Lệnh Này", "command.acceptInput.title": "Chấp Nhận Đầu Vào/Gợi Ý", + "command.git.generateCommitMessage.title": "Tạo tin nhắn Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 25d4e15c0a..59c6f28614 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "修复此命令", "command.terminal.explainCommand.title": "解释此命令", "command.acceptInput.title": "接受输入/建议", + "command.git.generateCommitMessage.title": "生成提交消息", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index 918b4bff33..23e4fa8059 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "修復此命令", "command.terminal.explainCommand.title": "解釋此命令", "command.acceptInput.title": "接受輸入/建議", + "command.git.generateCommitMessage.title": "產生提交訊息", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", "views.terminalMenu.label": "Roo Code", From 138101ce2975f2ca0cb3eaf5eaffd73fd764139f Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sat, 28 Jun 2025 10:48:55 +0200 Subject: [PATCH 02/10] feat: Add translation to generation prompt --- src/integrations/git/generateCommitMessage.ts | 3 ++- src/package.nls.ca.json | 1 + src/package.nls.de.json | 1 + src/package.nls.es.json | 1 + src/package.nls.fr.json | 1 + src/package.nls.hi.json | 1 + src/package.nls.id.json | 1 + src/package.nls.it.json | 1 + src/package.nls.ja.json | 1 + src/package.nls.json | 1 + src/package.nls.ko.json | 1 + src/package.nls.nl.json | 1 + src/package.nls.pl.json | 1 + src/package.nls.pt-BR.json | 1 + src/package.nls.ru.json | 1 + src/package.nls.tr.json | 1 + src/package.nls.vi.json | 1 + src/package.nls.zh-CN.json | 1 + src/package.nls.zh-TW.json | 1 + 19 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/integrations/git/generateCommitMessage.ts b/src/integrations/git/generateCommitMessage.ts index ea63aec127..512ab782fe 100644 --- a/src/integrations/git/generateCommitMessage.ts +++ b/src/integrations/git/generateCommitMessage.ts @@ -2,6 +2,7 @@ import * as vscode from "vscode" import * as path from "path" import * as fs from "fs/promises" import { buildApiHandler } from "../../api" +import { t } from "../../i18n" import { simpleGit, SimpleGit } from "simple-git" import { ContextProxy } from "../../core/config/ContextProxy" import { Anthropic } from "@anthropic-ai/sdk" @@ -78,7 +79,7 @@ export async function generateCommitMessage(context: vscode.ExtensionContext) { await vscode.window.withProgress( { location: vscode.ProgressLocation.Notification, - title: `Generating commit message with ${modelName}...`, + title: t("command.git.generatingCommitMessage", { modelName }), cancellable: false, }, async () => { diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 514bea052d..9e07d76ee9 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Corregir Aquesta Ordre", "command.terminal.explainCommand.title": "Explicar Aquesta Ordre", "command.acceptInput.title": "Acceptar Entrada/Suggeriment", + "command.git.generatingCommitMessage": "S'està generant el missatge de commit amb {0}...", "command.git.generateCommitMessage.title": "Genera el missatge de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index 50f8bdb54d..bf47b12a08 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Diesen Befehl Reparieren", "command.terminal.explainCommand.title": "Diesen Befehl Erklären", "command.acceptInput.title": "Eingabe/Vorschlag Akzeptieren", + "command.git.generatingCommitMessage": "Commit-Nachricht wird mit {0} generiert...", "command.git.generateCommitMessage.title": "Commit-Nachricht generieren", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index 6178225271..210c8f77c6 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Corregir Este Comando", "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceptar Entrada/Sugerencia", + "command.git.generatingCommitMessage": "Generando mensaje de commit con {0}...", "command.git.generateCommitMessage.title": "Generar mensaje de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index cf67fd6ceb..fa66057e17 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Corriger cette Commande", "command.terminal.explainCommand.title": "Expliquer cette Commande", "command.acceptInput.title": "Accepter l'Entrée/Suggestion", + "command.git.generatingCommitMessage": "Génération du message de commit avec {0}...", "command.git.generateCommitMessage.title": "Générer le message de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index 38ffa25a83..d65f42e23e 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "यह कमांड ठीक करें", "command.terminal.explainCommand.title": "यह कमांड समझाएं", "command.acceptInput.title": "इनपुट/सुझाव स्वीकारें", + "command.git.generatingCommitMessage": "{0} के साथ कमिट संदेश बनाया जा रहा है...", "command.git.generateCommitMessage.title": "कमिट संदेश उत्पन्न करें", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index 103821dce8..3abe35e4ae 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -14,6 +14,7 @@ "command.settings.title": "Pengaturan", "command.documentation.title": "Dokumentasi", "command.openInNewTab.title": "Buka di Tab Baru", + "command.git.generatingCommitMessage": "Menghasilkan pesan komit dengan {0}...", "command.git.generateCommitMessage.title": "Hasilkan Pesan Komit", "command.explainCode.title": "Jelaskan Kode", "command.fixCode.title": "Perbaiki Kode", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index 5862235532..e095bdf33a 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Correggi Questo Comando", "command.terminal.explainCommand.title": "Spiega Questo Comando", "command.acceptInput.title": "Accetta Input/Suggerimento", + "command.git.generatingCommitMessage": "Generazione del messaggio di commit con {0}...", "command.git.generateCommitMessage.title": "Genera Messaggio di Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index a638b4a576..b4788a1c16 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -14,6 +14,7 @@ "command.settings.title": "設定", "command.documentation.title": "ドキュメント", "command.openInNewTab.title": "新しいタブで開く", + "command.git.generatingCommitMessage": "{0}でコミットメッセージを生成しています...", "command.git.generateCommitMessage.title": "コミットメッセージを生成", "command.explainCode.title": "コードの説明", "command.fixCode.title": "コードの修正", diff --git a/src/package.nls.json b/src/package.nls.json index abf5df47f0..5a73f56a49 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -25,6 +25,7 @@ "command.terminal.fixCommand.title": "Fix This Command", "command.terminal.explainCommand.title": "Explain This Command", "command.acceptInput.title": "Accept Input/Suggestion", + "command.git.generatingCommitMessage": "Generating commit message with {0}...", "command.git.generateCommitMessage.title": "Generate Commit Message", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Commands that can be auto-executed when 'Always approve execute operations' is enabled", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index 1fefc3b44e..f7d19992fe 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "이 명령어 수정", "command.terminal.explainCommand.title": "이 명령어 설명", "command.acceptInput.title": "입력/제안 수락", + "command.git.generatingCommitMessage": "{0}으로 커밋 메시지를 생성하는 중...", "command.git.generateCommitMessage.title": "커밋 메시지 생성", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 2550ecae01..79fc9cb171 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -14,6 +14,7 @@ "command.settings.title": "Instellingen", "command.documentation.title": "Documentatie", "command.openInNewTab.title": "Openen in Nieuw Tabblad", + "command.git.generatingCommitMessage": "Commitbericht genereren met {0}...", "command.git.generateCommitMessage.title": "Commitbericht genereren", "command.explainCode.title": "Leg Code Uit", "command.fixCode.title": "Repareer Code", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index d01a0946f5..f7970b2893 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Napraw tę Komendę", "command.terminal.explainCommand.title": "Wyjaśnij tę Komendę", "command.acceptInput.title": "Akceptuj Wprowadzanie/Sugestię", + "command.git.generatingCommitMessage": "Generowanie wiadomości commita za pomocą {0}...", "command.git.generateCommitMessage.title": "Generuj komunikat commita", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index 79f3c10a4c..c4610c8221 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Corrigir Este Comando", "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceitar Entrada/Sugestão", + "command.git.generatingCommitMessage": "Gerando mensagem de commit com {0}...", "command.git.generateCommitMessage.title": "Gerar Mensagem de Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index 2beb31fea4..204902d7e6 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -14,6 +14,7 @@ "command.settings.title": "Настройки", "command.documentation.title": "Документация", "command.openInNewTab.title": "Открыть в новой вкладке", + "command.git.generatingCommitMessage": "Создание сообщения коммита с помощью {0}...", "command.git.generateCommitMessage.title": "Создать сообщение коммита", "command.explainCode.title": "Объяснить код", "command.fixCode.title": "Исправить код", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index 28270bd68a..b5a7b8649d 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Bu Komutu Düzelt", "command.terminal.explainCommand.title": "Bu Komutu Açıkla", "command.acceptInput.title": "Girişi/Öneriyi Kabul Et", + "command.git.generatingCommitMessage": "{0} ile commit mesajı oluşturuluyor...", "command.git.generateCommitMessage.title": "Commit Mesajı Oluştur", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index c075552305..272a39c974 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "Sửa Lệnh Này", "command.terminal.explainCommand.title": "Giải Thích Lệnh Này", "command.acceptInput.title": "Chấp Nhận Đầu Vào/Gợi Ý", + "command.git.generatingCommitMessage": "Đang tạo tin nhắn commit với {0}...", "command.git.generateCommitMessage.title": "Tạo tin nhắn Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 59c6f28614..7e84bbe8a2 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "修复此命令", "command.terminal.explainCommand.title": "解释此命令", "command.acceptInput.title": "接受输入/建议", + "command.git.generatingCommitMessage": "正在使用 {0} 生成提交消息...", "command.git.generateCommitMessage.title": "生成提交消息", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index 23e4fa8059..e5ef96963f 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -14,6 +14,7 @@ "command.terminal.fixCommand.title": "修復此命令", "command.terminal.explainCommand.title": "解釋此命令", "command.acceptInput.title": "接受輸入/建議", + "command.git.generatingCommitMessage": "正在使用 {0} 產生提交訊息...", "command.git.generateCommitMessage.title": "產生提交訊息", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", From c112c8549689fbb1506a1b70c75036c2c82500da Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sat, 28 Jun 2025 11:14:45 +0200 Subject: [PATCH 03/10] fix(i18n): Refactor dynamic translation for commit message Moves the "Generating commit message" notification from VS Code's static NLS to the dynamic i18next infrastructure, ensuring it gets properly translated. - Simplifies the translation key to `git.generatingCommitMessage`. - Fixes the i18n setup script to resolve the correct locales path. - Stabilizes the `t()` helper to prevent race conditions with language changes. - Removes the now-obsolete key from all `package.nls.*.json` files to clean up the codebase. --- src/i18n/locales/de/common.json | 3 +++ src/i18n/locales/en/common.json | 3 +++ src/i18n/locales/es/common.json | 3 +++ src/i18n/locales/fr/common.json | 3 +++ src/i18n/locales/it/common.json | 3 +++ src/i18n/locales/ja/common.json | 3 +++ src/i18n/locales/ko/common.json | 3 +++ src/i18n/locales/nl/common.json | 3 +++ src/i18n/locales/pl/common.json | 3 +++ src/i18n/locales/pt-BR/common.json | 3 +++ src/i18n/locales/ru/common.json | 3 +++ src/i18n/locales/tr/common.json | 3 +++ src/i18n/locales/vi/common.json | 3 +++ src/i18n/locales/zh-CN/common.json | 3 +++ src/i18n/locales/zh-TW/common.json | 3 +++ src/integrations/git/generateCommitMessage.ts | 2 +- src/package.nls.ca.json | 1 - src/package.nls.de.json | 1 - src/package.nls.es.json | 1 - src/package.nls.fr.json | 1 - src/package.nls.hi.json | 1 - src/package.nls.id.json | 1 - src/package.nls.it.json | 1 - src/package.nls.ja.json | 1 - src/package.nls.json | 1 - src/package.nls.ko.json | 1 - src/package.nls.nl.json | 1 - src/package.nls.pl.json | 1 - src/package.nls.pt-BR.json | 1 - src/package.nls.ru.json | 1 - src/package.nls.tr.json | 1 - src/package.nls.vi.json | 1 - src/package.nls.zh-CN.json | 1 - src/package.nls.zh-TW.json | 1 - 34 files changed, 46 insertions(+), 19 deletions(-) diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index 48e34db479..2018101b81 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -22,6 +22,9 @@ "just_this_message": "Nur diese Nachricht", "this_and_subsequent": "Diese und alle nachfolgenden Nachrichten" }, + "git": { + "generatingCommitMessage": "Commit-Nachricht mit {{modelName}} wird generiert..." + }, "errors": { "invalid_data_uri": "Ungültiges Daten-URI-Format", "error_copying_image": "Fehler beim Kopieren des Bildes: {{errorMessage}}", diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index 855a69c23b..90341c4111 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -22,6 +22,9 @@ "just_this_message": "Just this message", "this_and_subsequent": "This and all subsequent messages" }, + "git": { + "generatingCommitMessage": "Generating commit message with {{modelName}}..." + }, "errors": { "invalid_data_uri": "Invalid data URI format", "error_copying_image": "Error copying image: {{errorMessage}}", diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index 0de842ee44..734b651457 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -22,6 +22,9 @@ "just_this_message": "Solo este mensaje", "this_and_subsequent": "Este y todos los mensajes posteriores" }, + "git": { + "generatingCommitMessage": "Generando mensaje de commit con {{modelName}}..." + }, "errors": { "invalid_data_uri": "Formato de URI de datos no válido", "error_copying_image": "Error copiando la imagen: {{errorMessage}}", diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index 2fcef289f4..5d412fd74e 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -22,6 +22,9 @@ "just_this_message": "Uniquement ce message", "this_and_subsequent": "Ce message et tous les messages suivants" }, + "git": { + "generatingCommitMessage": "Génération du message de commit avec {{modelName}}..." + }, "errors": { "invalid_data_uri": "Format d'URI de données invalide", "error_copying_image": "Erreur lors de la copie de l'image : {{errorMessage}}", diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index d34a14d840..7f830c3a5f 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -22,6 +22,9 @@ "just_this_message": "Solo questo messaggio", "this_and_subsequent": "Questo e tutti i messaggi successivi" }, + "git": { + "generatingCommitMessage": "Generazione del messaggio di commit con {{modelName}}..." + }, "errors": { "invalid_data_uri": "Formato URI dati non valido", "error_copying_image": "Errore durante la copia dell'immagine: {{errorMessage}}", diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index 0e6afe18cf..4bb727d08b 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -22,6 +22,9 @@ "just_this_message": "このメッセージのみ", "this_and_subsequent": "これ以降のすべてのメッセージ" }, + "git": { + "generatingCommitMessage": "{{modelName}}でコミットメッセージを生成しています..." + }, "errors": { "invalid_data_uri": "データURIフォーマットが無効です", "error_copying_image": "画像のコピー中にエラーが発生しました:{{errorMessage}}", diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index affba735ab..566d9878b2 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -22,6 +22,9 @@ "just_this_message": "이 메시지만", "this_and_subsequent": "이 메시지와 모든 후속 메시지" }, + "git": { + "generatingCommitMessage": "{{modelName}}(으)로 커밋 메시지 생성 중..." + }, "errors": { "invalid_data_uri": "잘못된 데이터 URI 형식", "error_copying_image": "이미지 복사 중 오류 발생: {{errorMessage}}", diff --git a/src/i18n/locales/nl/common.json b/src/i18n/locales/nl/common.json index b0748a5aa6..c3efdfe734 100644 --- a/src/i18n/locales/nl/common.json +++ b/src/i18n/locales/nl/common.json @@ -22,6 +22,9 @@ "just_this_message": "Alleen dit bericht", "this_and_subsequent": "Dit en alle volgende berichten" }, + "git": { + "generatingCommitMessage": "Commitbericht genereren met {{modelName}}..." + }, "errors": { "invalid_data_uri": "Ongeldig data-URI-formaat", "error_copying_image": "Fout bij kopiëren van afbeelding: {{errorMessage}}", diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index b8cd29976f..53fb6196dd 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -22,6 +22,9 @@ "just_this_message": "Tylko tę wiadomość", "this_and_subsequent": "Tę i wszystkie kolejne wiadomości" }, + "git": { + "generatingCommitMessage": "Generowanie wiadomości commit z {{modelName}}..." + }, "errors": { "invalid_data_uri": "Nieprawidłowy format URI danych", "error_copying_image": "Błąd kopiowania obrazu: {{errorMessage}}", diff --git a/src/i18n/locales/pt-BR/common.json b/src/i18n/locales/pt-BR/common.json index 25779949d2..fa0775d8d5 100644 --- a/src/i18n/locales/pt-BR/common.json +++ b/src/i18n/locales/pt-BR/common.json @@ -26,6 +26,9 @@ "just_this_message": "Apenas esta mensagem", "this_and_subsequent": "Esta e todas as mensagens subsequentes" }, + "git": { + "generatingCommitMessage": "Gerando mensagem de commit com {{modelName}}..." + }, "errors": { "invalid_data_uri": "Formato de URI de dados inválido", "error_copying_image": "Erro ao copiar imagem: {{errorMessage}}", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index 006b7af222..5bbe425b4b 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -22,6 +22,9 @@ "just_this_message": "Только это сообщение", "this_and_subsequent": "Это и все последующие сообщения" }, + "git": { + "generatingCommitMessage": "Генерация сообщения коммита с помощью {{modelName}}..." + }, "errors": { "invalid_data_uri": "Неверный формат URI данных", "error_copying_image": "Ошибка копирования изображения: {{errorMessage}}", diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index 87635c61ef..6d4c334a8c 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -22,6 +22,9 @@ "just_this_message": "Sadece bu mesajı", "this_and_subsequent": "Bu ve sonraki tüm mesajları" }, + "git": { + "generatingCommitMessage": "{{modelName}} ile commit mesajı oluşturuluyor..." + }, "errors": { "invalid_data_uri": "Geçersiz veri URI formatı", "error_copying_image": "Resim kopyalanırken hata oluştu: {{errorMessage}}", diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index 7321b3e8a6..73aa2a46b6 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -22,6 +22,9 @@ "just_this_message": "Chỉ tin nhắn này", "this_and_subsequent": "Tin nhắn này và tất cả tin nhắn tiếp theo" }, + "git": { + "generatingCommitMessage": "Đang tạo thông điệp commit với {{modelName}}..." + }, "errors": { "invalid_data_uri": "Định dạng URI dữ liệu không hợp lệ", "error_copying_image": "Lỗi khi sao chép hình ảnh: {{errorMessage}}", diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json index 9ebdd04b95..ea8bb7626f 100644 --- a/src/i18n/locales/zh-CN/common.json +++ b/src/i18n/locales/zh-CN/common.json @@ -22,6 +22,9 @@ "just_this_message": "仅此消息", "this_and_subsequent": "此消息及所有后续消息" }, + "git": { + "generatingCommitMessage": "正在使用 {{modelName}} 生成提交消息..." + }, "errors": { "invalid_mcp_config": "项目MCP配置格式无效", "invalid_mcp_settings_format": "MCP设置JSON格式无效。请确保您的设置遵循正确的JSON格式。", diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index a63e87f61a..a2391c40dc 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -22,6 +22,9 @@ "just_this_message": "僅這則訊息", "this_and_subsequent": "這則訊息及所有後續訊息" }, + "git": { + "generatingCommitMessage": "正在使用 {{modelName}} 產生提交訊息..." + }, "errors": { "invalid_data_uri": "資料 URI 格式無效", "error_copying_image": "複製圖片時發生錯誤:{{errorMessage}}", diff --git a/src/integrations/git/generateCommitMessage.ts b/src/integrations/git/generateCommitMessage.ts index 512ab782fe..0ddef9459f 100644 --- a/src/integrations/git/generateCommitMessage.ts +++ b/src/integrations/git/generateCommitMessage.ts @@ -79,7 +79,7 @@ export async function generateCommitMessage(context: vscode.ExtensionContext) { await vscode.window.withProgress( { location: vscode.ProgressLocation.Notification, - title: t("command.git.generatingCommitMessage", { modelName }), + title: t("common:git.generatingCommitMessage", { modelName }), cancellable: false, }, async () => { diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 9e07d76ee9..514bea052d 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Corregir Aquesta Ordre", "command.terminal.explainCommand.title": "Explicar Aquesta Ordre", "command.acceptInput.title": "Acceptar Entrada/Suggeriment", - "command.git.generatingCommitMessage": "S'està generant el missatge de commit amb {0}...", "command.git.generateCommitMessage.title": "Genera el missatge de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index bf47b12a08..50f8bdb54d 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Diesen Befehl Reparieren", "command.terminal.explainCommand.title": "Diesen Befehl Erklären", "command.acceptInput.title": "Eingabe/Vorschlag Akzeptieren", - "command.git.generatingCommitMessage": "Commit-Nachricht wird mit {0} generiert...", "command.git.generateCommitMessage.title": "Commit-Nachricht generieren", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index 210c8f77c6..6178225271 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Corregir Este Comando", "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceptar Entrada/Sugerencia", - "command.git.generatingCommitMessage": "Generando mensaje de commit con {0}...", "command.git.generateCommitMessage.title": "Generar mensaje de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index fa66057e17..cf67fd6ceb 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Corriger cette Commande", "command.terminal.explainCommand.title": "Expliquer cette Commande", "command.acceptInput.title": "Accepter l'Entrée/Suggestion", - "command.git.generatingCommitMessage": "Génération du message de commit avec {0}...", "command.git.generateCommitMessage.title": "Générer le message de commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index d65f42e23e..38ffa25a83 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "यह कमांड ठीक करें", "command.terminal.explainCommand.title": "यह कमांड समझाएं", "command.acceptInput.title": "इनपुट/सुझाव स्वीकारें", - "command.git.generatingCommitMessage": "{0} के साथ कमिट संदेश बनाया जा रहा है...", "command.git.generateCommitMessage.title": "कमिट संदेश उत्पन्न करें", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index 3abe35e4ae..103821dce8 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -14,7 +14,6 @@ "command.settings.title": "Pengaturan", "command.documentation.title": "Dokumentasi", "command.openInNewTab.title": "Buka di Tab Baru", - "command.git.generatingCommitMessage": "Menghasilkan pesan komit dengan {0}...", "command.git.generateCommitMessage.title": "Hasilkan Pesan Komit", "command.explainCode.title": "Jelaskan Kode", "command.fixCode.title": "Perbaiki Kode", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index e095bdf33a..5862235532 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Correggi Questo Comando", "command.terminal.explainCommand.title": "Spiega Questo Comando", "command.acceptInput.title": "Accetta Input/Suggerimento", - "command.git.generatingCommitMessage": "Generazione del messaggio di commit con {0}...", "command.git.generateCommitMessage.title": "Genera Messaggio di Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index b4788a1c16..a638b4a576 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -14,7 +14,6 @@ "command.settings.title": "設定", "command.documentation.title": "ドキュメント", "command.openInNewTab.title": "新しいタブで開く", - "command.git.generatingCommitMessage": "{0}でコミットメッセージを生成しています...", "command.git.generateCommitMessage.title": "コミットメッセージを生成", "command.explainCode.title": "コードの説明", "command.fixCode.title": "コードの修正", diff --git a/src/package.nls.json b/src/package.nls.json index 5a73f56a49..abf5df47f0 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -25,7 +25,6 @@ "command.terminal.fixCommand.title": "Fix This Command", "command.terminal.explainCommand.title": "Explain This Command", "command.acceptInput.title": "Accept Input/Suggestion", - "command.git.generatingCommitMessage": "Generating commit message with {0}...", "command.git.generateCommitMessage.title": "Generate Commit Message", "configuration.title": "Roo Code", "commands.allowedCommands.description": "Commands that can be auto-executed when 'Always approve execute operations' is enabled", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index f7d19992fe..1fefc3b44e 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "이 명령어 수정", "command.terminal.explainCommand.title": "이 명령어 설명", "command.acceptInput.title": "입력/제안 수락", - "command.git.generatingCommitMessage": "{0}으로 커밋 메시지를 생성하는 중...", "command.git.generateCommitMessage.title": "커밋 메시지 생성", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 79fc9cb171..2550ecae01 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -14,7 +14,6 @@ "command.settings.title": "Instellingen", "command.documentation.title": "Documentatie", "command.openInNewTab.title": "Openen in Nieuw Tabblad", - "command.git.generatingCommitMessage": "Commitbericht genereren met {0}...", "command.git.generateCommitMessage.title": "Commitbericht genereren", "command.explainCode.title": "Leg Code Uit", "command.fixCode.title": "Repareer Code", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index f7970b2893..d01a0946f5 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Napraw tę Komendę", "command.terminal.explainCommand.title": "Wyjaśnij tę Komendę", "command.acceptInput.title": "Akceptuj Wprowadzanie/Sugestię", - "command.git.generatingCommitMessage": "Generowanie wiadomości commita za pomocą {0}...", "command.git.generateCommitMessage.title": "Generuj komunikat commita", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index c4610c8221..79f3c10a4c 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Corrigir Este Comando", "command.terminal.explainCommand.title": "Explicar Este Comando", "command.acceptInput.title": "Aceitar Entrada/Sugestão", - "command.git.generatingCommitMessage": "Gerando mensagem de commit com {0}...", "command.git.generateCommitMessage.title": "Gerar Mensagem de Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index 204902d7e6..2beb31fea4 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -14,7 +14,6 @@ "command.settings.title": "Настройки", "command.documentation.title": "Документация", "command.openInNewTab.title": "Открыть в новой вкладке", - "command.git.generatingCommitMessage": "Создание сообщения коммита с помощью {0}...", "command.git.generateCommitMessage.title": "Создать сообщение коммита", "command.explainCode.title": "Объяснить код", "command.fixCode.title": "Исправить код", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index b5a7b8649d..28270bd68a 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Bu Komutu Düzelt", "command.terminal.explainCommand.title": "Bu Komutu Açıkla", "command.acceptInput.title": "Girişi/Öneriyi Kabul Et", - "command.git.generatingCommitMessage": "{0} ile commit mesajı oluşturuluyor...", "command.git.generateCommitMessage.title": "Commit Mesajı Oluştur", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index 272a39c974..c075552305 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "Sửa Lệnh Này", "command.terminal.explainCommand.title": "Giải Thích Lệnh Này", "command.acceptInput.title": "Chấp Nhận Đầu Vào/Gợi Ý", - "command.git.generatingCommitMessage": "Đang tạo tin nhắn commit với {0}...", "command.git.generateCommitMessage.title": "Tạo tin nhắn Commit", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 7e84bbe8a2..59c6f28614 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "修复此命令", "command.terminal.explainCommand.title": "解释此命令", "command.acceptInput.title": "接受输入/建议", - "command.git.generatingCommitMessage": "正在使用 {0} 生成提交消息...", "command.git.generateCommitMessage.title": "生成提交消息", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index e5ef96963f..23e4fa8059 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -14,7 +14,6 @@ "command.terminal.fixCommand.title": "修復此命令", "command.terminal.explainCommand.title": "解釋此命令", "command.acceptInput.title": "接受輸入/建議", - "command.git.generatingCommitMessage": "正在使用 {0} 產生提交訊息...", "command.git.generateCommitMessage.title": "產生提交訊息", "views.activitybar.title": "Roo Code", "views.contextMenu.label": "Roo Code", From 045f213ee5b5d7341012efd09864865632df1834 Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sat, 28 Jun 2025 12:12:48 +0200 Subject: [PATCH 04/10] feat(i18n): Add new language settings translations Adds translations for pluginLanguage and commitLanguage to the settings panel for all supported languages. This ensures that the language selection options in the settings view are properly localized, improving the user experience for non-English speakers. --- packages/types/src/global-settings.ts | 1 + src/core/webview/ClineProvider.ts | 3 ++ src/core/webview/webviewMessageHandler.ts | 5 ++++ src/integrations/git/generateCommitMessage.ts | 10 ++++--- src/shared/ExtensionMessage.ts | 1 + src/shared/WebviewMessage.ts | 1 + .../components/settings/LanguageSettings.tsx | 30 +++++++++++++++++-- .../src/components/settings/SettingsView.tsx | 8 ++++- .../src/context/ExtensionStateContext.tsx | 4 +++ webview-ui/src/i18n/locales/ca/settings.json | 2 ++ webview-ui/src/i18n/locales/de/settings.json | 2 ++ webview-ui/src/i18n/locales/en/settings.json | 2 ++ webview-ui/src/i18n/locales/es/settings.json | 2 ++ webview-ui/src/i18n/locales/fr/settings.json | 2 ++ webview-ui/src/i18n/locales/hi/settings.json | 2 ++ webview-ui/src/i18n/locales/id/settings.json | 2 ++ webview-ui/src/i18n/locales/it/settings.json | 2 ++ webview-ui/src/i18n/locales/ja/settings.json | 2 ++ webview-ui/src/i18n/locales/ko/settings.json | 2 ++ webview-ui/src/i18n/locales/nl/settings.json | 2 ++ webview-ui/src/i18n/locales/pl/settings.json | 2 ++ .../src/i18n/locales/pt-BR/settings.json | 2 ++ webview-ui/src/i18n/locales/ru/settings.json | 2 ++ webview-ui/src/i18n/locales/tr/settings.json | 2 ++ webview-ui/src/i18n/locales/vi/settings.json | 2 ++ .../src/i18n/locales/zh-CN/settings.json | 2 ++ .../src/i18n/locales/zh-TW/settings.json | 2 ++ 27 files changed, 92 insertions(+), 7 deletions(-) diff --git a/packages/types/src/global-settings.ts b/packages/types/src/global-settings.ts index e713cafa4c..5e37eb6e55 100644 --- a/packages/types/src/global-settings.ts +++ b/packages/types/src/global-settings.ts @@ -90,6 +90,7 @@ export const globalSettingsSchema = z.object({ codebaseIndexConfig: codebaseIndexConfigSchema.optional(), language: languagesSchema.optional(), + commitLanguage: languagesSchema.optional(), telemetrySetting: telemetrySettingsSchema.optional(), diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 51cb9a275b..76223a2765 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1398,6 +1398,7 @@ export class ClineProvider telemetrySetting, showRooIgnoredFiles, language, + commitLanguage, maxReadFileLine, terminalCompressProgressBar, historyPreviewCollapsed, @@ -1496,6 +1497,7 @@ export class ClineProvider machineId, showRooIgnoredFiles: showRooIgnoredFiles ?? true, language: language ?? formatLanguage(vscode.env.language), + commitLanguage: commitLanguage ?? formatLanguage(vscode.env.language), renderContext: this.renderContext, maxReadFileLine: maxReadFileLine ?? -1, maxConcurrentFileReads: maxConcurrentFileReads ?? 5, @@ -1632,6 +1634,7 @@ export class ClineProvider terminalCompressProgressBar: stateValues.terminalCompressProgressBar ?? true, mode: stateValues.mode ?? defaultModeSlug, language: stateValues.language ?? formatLanguage(vscode.env.language), + commitLanguage: stateValues.commitLanguage ?? formatLanguage(vscode.env.language), mcpEnabled: stateValues.mcpEnabled ?? true, enableMcpServerCreation: stateValues.enableMcpServerCreation ?? true, alwaysApproveResubmit: stateValues.alwaysApproveResubmit ?? false, diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index cac94aa0ce..1a468fff7f 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -1109,6 +1109,11 @@ export const webviewMessageHandler = async ( await updateGlobalState("language", message.text as Language) await provider.postStateToWebview() break + case "commitLanguage": + changeLanguage(message.text ?? "en") + await updateGlobalState("commitLanguage", message.text as Language) + await provider.postStateToWebview() + break case "showRooIgnoredFiles": await updateGlobalState("showRooIgnoredFiles", message.bool ?? true) await provider.postStateToWebview() diff --git a/src/integrations/git/generateCommitMessage.ts b/src/integrations/git/generateCommitMessage.ts index 0ddef9459f..f0f08ed50e 100644 --- a/src/integrations/git/generateCommitMessage.ts +++ b/src/integrations/git/generateCommitMessage.ts @@ -36,8 +36,8 @@ async function getChanges(git: SimpleGit, repoPath: string): Promise { return `${trackedFilesDiff}\n${untrackedFilesContent}`.trim() } -function createPrompt(diff: string): string { - return `Create a git commit message from the following diff:\n${diff}` +function createPrompt(diff: string, language: string): string { + return `Create a git commit message in ${language} from the following diff:\n${diff}.Remember to print only commit messages text without any extra markdown or content that would require special tools to display. Adhere to best git commit message practices. Remmber to use ${language} in this commit message.` } export async function generateCommitMessage(context: vscode.ExtensionContext) { @@ -68,7 +68,9 @@ export async function generateCommitMessage(context: vscode.ExtensionContext) { } const provider = buildApiHandler(providerSettings) const modelName = provider.getModel().id - const prompt = createPrompt(diff) + const settings = contextProxy.getGlobalSettings() + const commitLanguage = settings.commitLanguage || settings.language || "en" + const prompt = createPrompt(diff, commitLanguage) const messages: Anthropic.Messages.MessageParam[] = [ { role: "user", @@ -92,7 +94,7 @@ export async function generateCommitMessage(context: vscode.ExtensionContext) { } } - const finalMessage = commitMessage.replace(/```/g, "").trim() + const finalMessage = commitMessage.trim() gitApi.repositories[0].inputBox.value = finalMessage }, ) diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 73ebf59d4c..e0f5246519 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -203,6 +203,7 @@ export type ExtensionState = Pick< | "fuzzyMatchThreshold" // | "experiments" // Optional in GlobalSettings, required here. | "language" + | "commitLanguage" // | "telemetrySetting" // Optional in GlobalSettings, required here. // | "mcpEnabled" // Optional in GlobalSettings, required here. // | "enableMcpServerCreation" // Optional in GlobalSettings, required here. diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts index 7efc97e8c7..42b9f61e2b 100644 --- a/src/shared/WebviewMessage.ts +++ b/src/shared/WebviewMessage.ts @@ -144,6 +144,7 @@ export interface WebviewMessage { | "browserConnectionResult" | "remoteBrowserEnabled" | "language" + | "commitLanguage" | "maxReadFileLine" | "maxConcurrentFileReads" | "searchFiles" diff --git a/webview-ui/src/components/settings/LanguageSettings.tsx b/webview-ui/src/components/settings/LanguageSettings.tsx index 5745d78b9b..7245a92bb1 100644 --- a/webview-ui/src/components/settings/LanguageSettings.tsx +++ b/webview-ui/src/components/settings/LanguageSettings.tsx @@ -15,10 +15,17 @@ import { Section } from "./Section" type LanguageSettingsProps = HTMLAttributes & { language: string - setCachedStateField: SetCachedStateField<"language"> + commitLanguage: string + setCachedStateField: SetCachedStateField<"language" | "commitLanguage"> } -export const LanguageSettings = ({ language, setCachedStateField, className, ...props }: LanguageSettingsProps) => { +export const LanguageSettings = ({ + language, + commitLanguage, + setCachedStateField, + className, + ...props +}: LanguageSettingsProps) => { const { t } = useAppTranslation() return ( @@ -31,6 +38,7 @@ export const LanguageSettings = ({ language, setCachedStateField, className, ...
+
{t("settings:sections.pluginLanguage")}
+
{t("settings:sections.commitLanguage")}
+
) diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 8712b81cf2..b980222428 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -125,6 +125,7 @@ const SettingsView = forwardRef(({ onDone, t allowedCommands, allowedMaxRequests, language, + commitLanguage, alwaysAllowBrowser, alwaysAllowExecute, alwaysAllowMcp, @@ -261,6 +262,7 @@ const SettingsView = forwardRef(({ onDone, t const handleSubmit = () => { if (isSettingValid) { vscode.postMessage({ type: "language", text: language }) + vscode.postMessage({ type: "commitLanguage", text: commitLanguage }) vscode.postMessage({ type: "alwaysAllowReadOnly", bool: alwaysAllowReadOnly }) vscode.postMessage({ type: "alwaysAllowReadOnlyOutsideWorkspace", @@ -694,7 +696,11 @@ const SettingsView = forwardRef(({ onDone, t {/* Language Section */} {activeTab === "language" && ( - + )} {/* About Section */} diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx index c87ccdb6e9..9d2ada0332 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -8,6 +8,7 @@ import { type ExperimentId, type OrganizationAllowList, ORGANIZATION_ALLOW_ALL, + type Language, } from "@roo-code/types" import { ExtensionMessage, ExtensionState, MarketplaceInstalledMetadata } from "@roo/ExtensionMessage" @@ -48,6 +49,7 @@ export interface ExtensionStateContextType extends ExtensionState { marketplaceInstalledMetadata?: MarketplaceInstalledMetadata profileThresholds: Record setProfileThresholds: (value: Record) => void + setCommitLanguage: (value: Language) => void setApiConfiguration: (config: ProviderSettings) => void setCustomInstructions: (value?: string) => void setAlwaysAllowReadOnly: (value: boolean) => void @@ -164,6 +166,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode enableCheckpoints: true, fuzzyMatchThreshold: 1.0, language: "en", // Default language code + commitLanguage: "en", writeDelayMs: 1000, browserViewportSize: "900x600", screenshotQuality: 75, @@ -356,6 +359,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode setState((prevState) => ({ ...prevState, experiments: { ...prevState.experiments, [id]: enabled } })), setApiConfiguration, setCustomInstructions: (value) => setState((prevState) => ({ ...prevState, customInstructions: value })), + setCommitLanguage: (value) => setState((prevState) => ({ ...prevState, commitLanguage: value })), setAlwaysAllowReadOnly: (value) => setState((prevState) => ({ ...prevState, alwaysAllowReadOnly: value })), setAlwaysAllowReadOnlyOutsideWorkspace: (value) => setState((prevState) => ({ ...prevState, alwaysAllowReadOnlyOutsideWorkspace: value })), diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index b3906fb50e..0bfd681bb4 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -31,6 +31,8 @@ "prompts": "Indicacions", "experimental": "Experimental", "language": "Idioma", + "pluginLanguage": "Idioma del connector", + "commitLanguage": "Idioma del commit", "about": "Sobre Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index ad78931d81..77ae230257 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -31,6 +31,8 @@ "prompts": "Eingabeaufforderungen", "experimental": "Experimentell", "language": "Sprache", + "pluginLanguage": "Plugin-Sprache", + "commitLanguage": "Commit-Sprache", "about": "Über Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 9083d4a204..c96ba1e386 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -31,6 +31,8 @@ "prompts": "Prompts", "experimental": "Experimental", "language": "Language", + "pluginLanguage": "Plugin Language", + "commitLanguage": "Commit Language", "about": "About Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index c83237d4f3..75e1517f01 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -31,6 +31,8 @@ "prompts": "Indicaciones", "experimental": "Experimental", "language": "Idioma", + "pluginLanguage": "Idioma del Plugin", + "commitLanguage": "Idioma del Commit", "about": "Acerca de Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 681d95be98..ee4be9c7c4 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -31,6 +31,8 @@ "prompts": "Invites", "experimental": "Expérimental", "language": "Langue", + "pluginLanguage": "Langue du Plugin", + "commitLanguage": "Langue du Commit", "about": "À propos de Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 9d8bef3711..e14af241c2 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -31,6 +31,8 @@ "prompts": "प्रॉम्प्ट्स", "experimental": "प्रायोगिक", "language": "भाषा", + "pluginLanguage": "प्लगइन भाषा", + "commitLanguage": "कमिट भाषा", "about": "परिचय" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index c5e3abf45c..2f62a6258c 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -31,6 +31,8 @@ "prompts": "Prompt", "experimental": "Eksperimental", "language": "Bahasa", + "pluginLanguage": "Bahasa Plugin", + "commitLanguage": "Bahasa Komit", "about": "Tentang Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index fefdcd2ca2..f389fc79b6 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -31,6 +31,8 @@ "prompts": "Prompt", "experimental": "Sperimentale", "language": "Lingua", + "pluginLanguage": "Lingua del plugin", + "commitLanguage": "Lingua del commit", "about": "Informazioni su Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index f5d198a8d4..0028f0f0cd 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -31,6 +31,8 @@ "prompts": "プロンプト", "experimental": "実験的", "language": "言語", + "pluginLanguage": "プラグインの言語", + "commitLanguage": "コミットの言語", "about": "Roo Codeについて" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 5476b044bf..7104d2226d 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -31,6 +31,8 @@ "prompts": "프롬프트", "experimental": "실험적", "language": "언어", + "pluginLanguage": "플러그인 언어", + "commitLanguage": "커밋 언어", "about": "Roo Code 정보" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 88a66c0d5f..7b199f4d3b 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -31,6 +31,8 @@ "prompts": "Prompts", "experimental": "Experimenteel", "language": "Taal", + "pluginLanguage": "Plug-in taal", + "commitLanguage": "Commit-taal", "about": "Over Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 4a446f7095..e153353e43 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -31,6 +31,8 @@ "prompts": "Podpowiedzi", "experimental": "Eksperymentalne", "language": "Język", + "pluginLanguage": "Język rozszerzenia", + "commitLanguage": "Język commita git", "about": "O Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index b4ae11c2ac..7d51829de7 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -31,6 +31,8 @@ "prompts": "Prompts", "experimental": "Experimental", "language": "Idioma", + "pluginLanguage": "Idioma do Plugin", + "commitLanguage": "Idioma do Commit", "about": "Sobre" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 79c13741da..f1d0df1c9d 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -31,6 +31,8 @@ "prompts": "Промпты", "experimental": "Экспериментальное", "language": "Язык", + "pluginLanguage": "Язык плагина", + "commitLanguage": "Язык коммита", "about": "О Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index e6335c6dad..27b21325ee 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -31,6 +31,8 @@ "prompts": "Promptlar", "experimental": "Deneysel", "language": "Dil", + "pluginLanguage": "Eklenti Dili", + "commitLanguage": "Commit Dili", "about": "Roo Code Hakkında" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index f860292e02..31629ab347 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -31,6 +31,8 @@ "prompts": "Lời nhắc", "experimental": "Thử nghiệm", "language": "Ngôn ngữ", + "pluginLanguage": "Ngôn ngữ plugin", + "commitLanguage": "Ngôn ngữ commit", "about": "Giới thiệu" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index f2e80cee7f..305b79ebc8 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -31,6 +31,8 @@ "prompts": "提示词", "experimental": "实验性", "language": "语言", + "pluginLanguage": "插件语言", + "commitLanguage": "提交语言", "about": "关于 Roo Code" }, "prompts": { diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 874fbe7a37..220864a003 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -31,6 +31,8 @@ "prompts": "提示詞", "experimental": "實驗性", "language": "語言", + "pluginLanguage": "外掛語言", + "commitLanguage": "提交語言", "about": "關於 Roo Code" }, "prompts": { From ee4623ebba195d16ee3e709ce4eee9dacd320717 Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sat, 28 Jun 2025 12:15:20 +0200 Subject: [PATCH 05/10] feat: Add missing translations --- src/i18n/locales/ca/common.json | 3 +++ src/i18n/locales/hi/common.json | 3 +++ src/i18n/locales/id/common.json | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/i18n/locales/ca/common.json b/src/i18n/locales/ca/common.json index eb90a77179..0fc5ad6fad 100644 --- a/src/i18n/locales/ca/common.json +++ b/src/i18n/locales/ca/common.json @@ -26,6 +26,9 @@ "just_this_message": "Només aquest missatge", "this_and_subsequent": "Aquest i tots els missatges posteriors" }, + "git": { + "generatingCommitMessage": "Generant missatge de commit amb {{modelName}}..." + }, "errors": { "invalid_data_uri": "Format d'URI de dades no vàlid", "error_copying_image": "Error copiant la imatge: {{errorMessage}}", diff --git a/src/i18n/locales/hi/common.json b/src/i18n/locales/hi/common.json index b799cc03b7..faa2d8fca1 100644 --- a/src/i18n/locales/hi/common.json +++ b/src/i18n/locales/hi/common.json @@ -22,6 +22,9 @@ "just_this_message": "सिर्फ यह संदेश", "this_and_subsequent": "यह और सभी बाद के संदेश" }, + "git": { + "generatingCommitMessage": "{{modelName}} के साथ कमिट संदेश उत्पन्न हो रहा है..." + }, "errors": { "invalid_data_uri": "अमान्य डेटा URI फॉर्मेट", "error_copying_image": "छवि कॉपी करने में त्रुटि: {{errorMessage}}", diff --git a/src/i18n/locales/id/common.json b/src/i18n/locales/id/common.json index 9ddd5ca2de..fc2070bca4 100644 --- a/src/i18n/locales/id/common.json +++ b/src/i18n/locales/id/common.json @@ -22,6 +22,9 @@ "just_this_message": "Hanya pesan ini", "this_and_subsequent": "Ini dan semua pesan selanjutnya" }, + "git": { + "generatingCommitMessage": "Membuat pesan komit dengan {{modelName}}..." + }, "errors": { "invalid_data_uri": "Format data URI tidak valid", "error_copying_image": "Error menyalin gambar: {{errorMessage}}", From c8c5646f0ad9815ce8a80d0142f1e33bac9a4436 Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sat, 28 Jun 2025 12:22:16 +0200 Subject: [PATCH 06/10] feat(git): Add tests for generateCommitMessage Adds a comprehensive suite of unit tests for the `generateCommitMessage` function. The tests cover the following scenarios: - Git extension not found - No Git repository found - No changes in the repository - AI provider not configured - Successful commit message generation for tracked files - Successful commit message generation for untracked files - Handling of errors when reading untracked files This ensures the stability and correctness of the commit message generation feature. --- .../__tests__/generateCommitMessage.spec.ts | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 src/integrations/git/__tests__/generateCommitMessage.spec.ts diff --git a/src/integrations/git/__tests__/generateCommitMessage.spec.ts b/src/integrations/git/__tests__/generateCommitMessage.spec.ts new file mode 100644 index 0000000000..56f16685b7 --- /dev/null +++ b/src/integrations/git/__tests__/generateCommitMessage.spec.ts @@ -0,0 +1,176 @@ +import * as vscode from "vscode" +import { simpleGit, SimpleGit } from "simple-git" +import { generateCommitMessage } from "../generateCommitMessage" +import { ContextProxy } from "../../../core/config/ContextProxy" +import { buildApiHandler } from "../../../api" +import * as fs from "fs/promises" +import { t } from "../../../i18n" + +vi.mock("vscode", () => ({ + extensions: { + getExtension: vi.fn(), + }, + window: { + showErrorMessage: vi.fn(), + showInformationMessage: vi.fn(), + withProgress: vi.fn((options, task) => task()), + }, + ProgressLocation: { + Notification: 15, + }, + workspace: { + workspaceFolders: [ + { + uri: { + fsPath: "/test/repo", + }, + }, + ], + }, +})) + +vi.mock("simple-git") +vi.mock("../../../core/config/ContextProxy") +vi.mock("../../../api") +vi.mock("fs/promises") +vi.mock("../../../i18n") + +describe("generateCommitMessage", () => { + let context: vscode.ExtensionContext + let mockGit: any + + beforeEach(() => { + vi.clearAllMocks() + + context = { + globalState: { + get: vi.fn(), + update: vi.fn(), + }, + } as any + + mockGit = { + diff: vi.fn(), + status: vi.fn().mockResolvedValue({ not_added: [] }), + } as any + + vi.mocked(simpleGit).mockReturnValue(mockGit) + + const mockGitExtension = { + activate: vi.fn().mockResolvedValue(undefined), + exports: { + getAPI: vi.fn().mockReturnValue({ + repositories: [ + { + rootUri: { fsPath: "/test/repo" }, + inputBox: { value: "" }, + }, + ], + }), + }, + } + vi.mocked(vscode.extensions.getExtension).mockReturnValue(mockGitExtension as any) + + vi.mocked(ContextProxy.getInstance).mockResolvedValue({ + getProviderSettings: vi.fn().mockReturnValue({ provider: "test-provider" }), + getGlobalSettings: vi.fn().mockReturnValue({ language: "en", commitLanguage: "en" }), + } as any) + + const mockProvider = { + getModel: vi.fn().mockReturnValue({ id: "test-model" }), + createMessage: vi.fn().mockImplementation(async function* () { + yield { type: "text", text: "feat: Test commit" } + }), + } + vi.mocked(buildApiHandler).mockReturnValue(mockProvider as any) + vi.mocked(t).mockImplementation((key) => key) + }) + + test("should show error if git extension is not found", async () => { + vi.mocked(vscode.extensions.getExtension).mockReturnValue(undefined) + await generateCommitMessage(context) + expect(vscode.window.showErrorMessage).toHaveBeenCalledWith("Git extension not found.") + }) + + test("should show error if no git repository is found", async () => { + const mockGitExtension = { + activate: vi.fn().mockResolvedValue(undefined), + exports: { + getAPI: vi.fn().mockReturnValue({ repositories: [] }), + }, + } + vi.mocked(vscode.extensions.getExtension).mockReturnValue(mockGitExtension as any) + + await generateCommitMessage(context) + + expect(vscode.window.showErrorMessage).toHaveBeenCalledWith("No Git repository found.") + }) + + test("should show info if no changes are found", async () => { + mockGit.diff.mockResolvedValue("") + mockGit.status.mockResolvedValue({ not_added: [] }) + + await generateCommitMessage(context) + + expect(vscode.window.showInformationMessage).toHaveBeenCalledWith("No changes found.") + }) + + test("should show error if AI provider is not configured", async () => { + vi.mocked(ContextProxy.getInstance).mockResolvedValue({ + getProviderSettings: vi.fn().mockReturnValue(null), + } as any) + + mockGit.diff.mockResolvedValue("diff --git a/file.txt b/file.txt") + await generateCommitMessage(context) + + expect(vscode.window.showErrorMessage).toHaveBeenCalledWith("AI provider not configured.") + }) + + test("should generate commit message for tracked files", async () => { + const diff = "diff --git a/file.txt b/file.txt\n--- a/file.txt\n+++ b/file.txt\n@@ -1 +1 @@\n-old\n+new" + mockGit.diff.mockResolvedValue(diff) + + await generateCommitMessage(context) + + const api = vscode.extensions.getExtension("vscode.git")?.exports.getAPI(1) + expect(api.repositories[0].inputBox.value).toBe("feat: Test commit") + }) + + test("should generate commit message for untracked files", async () => { + mockGit.diff.mockResolvedValue("") + mockGit.status.mockResolvedValue({ not_added: ["new_file.txt"] }) + vi.mocked(fs.readFile).mockResolvedValue("new content") + + await generateCommitMessage(context) + + const api = vscode.extensions.getExtension("vscode.git")?.exports.getAPI(1) + expect(api.repositories[0].inputBox.value).toBe("feat: Test commit") + }) + + test("should generate commit message for both tracked and untracked files", async () => { + const diff = "diff --git a/file.txt b/file.txt\n--- a/file.txt\n+++ b/file.txt\n@@ -1 +1 @@\n-old\n+new" + mockGit.diff.mockResolvedValue(diff) + mockGit.status.mockResolvedValue({ not_added: ["new_file.txt"] }) + vi.mocked(fs.readFile).mockResolvedValue("new content") + + await generateCommitMessage(context) + + const api = vscode.extensions.getExtension("vscode.git")?.exports.getAPI(1) + expect(api.repositories[0].inputBox.value).toBe("feat: Test commit") + }) + + test("should handle error when reading untracked file", async () => { + mockGit.diff.mockResolvedValue("") + mockGit.status.mockResolvedValue({ not_added: ["new_file.txt"] }) + vi.mocked(fs.readFile).mockRejectedValue(new Error("File not found")) + const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => {}) + + await generateCommitMessage(context) + + expect(consoleErrorSpy).toHaveBeenCalledWith("Could not read untracked file new_file.txt", expect.any(Error)) + expect(vscode.window.showInformationMessage).toHaveBeenCalledWith("No changes found.") + const api = vscode.extensions.getExtension("vscode.git")?.exports.getAPI(1) + expect(api.repositories[0].inputBox.value).toBe("") + consoleErrorSpy.mockRestore() + }) +}) From 69aa82d9c36e94adb3fc077214151c2dee9bfa22 Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sat, 28 Jun 2025 20:10:00 +0200 Subject: [PATCH 07/10] feat: Add AI-powered commit messages This commit introduces a new experimental feature that uses AI to generate commit messages based on the staged change --- packages/types/src/experiment.ts | 3 +- packages/types/src/vscode.ts | 1 - src/core/webview/webviewMessageHandler.ts | 13 ++++++ src/extension.ts | 22 +++++++++ src/package.json | 21 ++++++++- src/shared/__tests__/experiments.spec.ts | 3 ++ src/shared/experiments.ts | 2 + .../components/settings/LanguageSettings.tsx | 44 ++++++++++-------- .../src/components/settings/SettingsView.tsx | 1 + .../__tests__/ExtensionStateContext.spec.tsx | 45 ++++++++++++++++--- webview-ui/src/i18n/locales/ca/settings.json | 4 ++ webview-ui/src/i18n/locales/de/settings.json | 4 ++ webview-ui/src/i18n/locales/en/settings.json | 8 ++++ webview-ui/src/i18n/locales/es/settings.json | 4 ++ webview-ui/src/i18n/locales/fr/settings.json | 4 ++ webview-ui/src/i18n/locales/hi/settings.json | 4 ++ webview-ui/src/i18n/locales/id/settings.json | 4 ++ webview-ui/src/i18n/locales/it/settings.json | 4 ++ webview-ui/src/i18n/locales/ja/settings.json | 4 ++ webview-ui/src/i18n/locales/ko/settings.json | 4 ++ webview-ui/src/i18n/locales/nl/settings.json | 4 ++ webview-ui/src/i18n/locales/pl/settings.json | 4 ++ .../src/i18n/locales/pt-BR/settings.json | 4 ++ webview-ui/src/i18n/locales/ru/settings.json | 4 ++ webview-ui/src/i18n/locales/tr/settings.json | 4 ++ webview-ui/src/i18n/locales/vi/settings.json | 4 ++ .../src/i18n/locales/zh-CN/settings.json | 4 ++ .../src/i18n/locales/zh-TW/settings.json | 4 ++ 28 files changed, 205 insertions(+), 26 deletions(-) diff --git a/packages/types/src/experiment.ts b/packages/types/src/experiment.ts index 10384db8ed..6526ea07be 100644 --- a/packages/types/src/experiment.ts +++ b/packages/types/src/experiment.ts @@ -6,7 +6,7 @@ import type { Keys, Equals, AssertEqual } from "./type-fu.js" * ExperimentId */ -export const experimentIds = ["powerSteering", "multiFileApplyDiff"] as const +export const experimentIds = ["powerSteering", "multiFileApplyDiff", "aiCommitMessages"] as const export const experimentIdsSchema = z.enum(experimentIds) @@ -19,6 +19,7 @@ export type ExperimentId = z.infer export const experimentsSchema = z.object({ powerSteering: z.boolean().optional(), multiFileApplyDiff: z.boolean().optional(), + aiCommitMessages: z.boolean().optional(), }) export type Experiments = z.infer diff --git a/packages/types/src/vscode.ts b/packages/types/src/vscode.ts index 7858f93c84..b57213c5a2 100644 --- a/packages/types/src/vscode.ts +++ b/packages/types/src/vscode.ts @@ -53,7 +53,6 @@ export const commandIds = [ "focusInput", "acceptInput", "focusPanel", - "git.generateCommitMessage", ] as const diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 1a468fff7f..ad63736e8a 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -1428,6 +1428,19 @@ export const webviewMessageHandler = async ( await updateGlobalState("experiments", updatedExperiments) + // Also update workspace settings to trigger the context update. + await vscode.workspace + .getConfiguration(Package.name) + .update("experiments", updatedExperiments, vscode.ConfigurationTarget.Global) + + if (message.values.aiCommitMessages !== undefined) { + await vscode.commands.executeCommand( + "setContext", + "roo-cline.aiCommitMessagesEnabled", + message.values.aiCommitMessages, + ) + } + await provider.postStateToWebview() break } diff --git a/src/extension.ts b/src/extension.ts index 9e3daad662..1692fee1c9 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -99,6 +99,28 @@ export async function activate(context: vscode.ExtensionContext) { const contextProxy = await ContextProxy.getInstance(context) const codeIndexManager = CodeIndexManager.getInstance(context) + const setAiCommitMessagesContext = () => { + const config = vscode.workspace.getConfiguration(Package.name) + const experiments = config.get("experiments", {}) as { aiCommitMessages?: boolean } + vscode.commands.executeCommand( + "setContext", + "roo-cline.aiCommitMessagesEnabled", + !!experiments.aiCommitMessages, + ) + } + + // Set the initial context + setAiCommitMessagesContext() + + // Update the context when the configuration changes + context.subscriptions.push( + vscode.workspace.onDidChangeConfiguration((e) => { + if (e.affectsConfiguration(`${Package.name}.experiments`)) { + setAiCommitMessagesContext() + } + }), + ) + try { await codeIndexManager?.initialize(contextProxy) } catch (error) { diff --git a/src/package.json b/src/package.json index c6f9b0b4df..0b47aefb15 100644 --- a/src/package.json +++ b/src/package.json @@ -178,6 +178,12 @@ } ], "menus": { + "commandPalette": [ + { + "command": "roo-cline.git.generateCommitMessage", + "when": "roo-cline.aiCommitMessagesEnabled" + } + ], "editor/context": [ { "submenu": "roo-cline.contextMenu", @@ -291,7 +297,7 @@ { "command": "roo-cline.git.generateCommitMessage", "group": "navigation", - "when": "scmProvider == git" + "when": "scmProvider == git && roo-cline.aiCommitMessagesEnabled" } ] }, @@ -346,6 +352,19 @@ "type": "boolean", "default": true, "description": "%settings.enableCodeActions.description%" + }, + "roo-cline.experiments": { + "type": "object", + "default": { + "aiCommitMessages": false + }, + "properties": { + "aiCommitMessages": { + "type": "boolean", + "default": false, + "description": "Enable AI-powered commit messages" + } + } } } } diff --git a/src/shared/__tests__/experiments.spec.ts b/src/shared/__tests__/experiments.spec.ts index 4a8f06d62a..27e714d0fd 100644 --- a/src/shared/__tests__/experiments.spec.ts +++ b/src/shared/__tests__/experiments.spec.ts @@ -28,6 +28,7 @@ describe("experiments", () => { const experiments: Record = { powerSteering: false, multiFileApplyDiff: false, + aiCommitMessages: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.POWER_STEERING)).toBe(false) }) @@ -36,6 +37,7 @@ describe("experiments", () => { const experiments: Record = { powerSteering: true, multiFileApplyDiff: false, + aiCommitMessages: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.POWER_STEERING)).toBe(true) }) @@ -44,6 +46,7 @@ describe("experiments", () => { const experiments: Record = { powerSteering: false, multiFileApplyDiff: false, + aiCommitMessages: false, } expect(Experiments.isEnabled(experiments, EXPERIMENT_IDS.POWER_STEERING)).toBe(false) }) diff --git a/src/shared/experiments.ts b/src/shared/experiments.ts index 1edadf654f..a525a59edd 100644 --- a/src/shared/experiments.ts +++ b/src/shared/experiments.ts @@ -3,6 +3,7 @@ import type { AssertEqual, Equals, Keys, Values, ExperimentId, Experiments } fro export const EXPERIMENT_IDS = { MULTI_FILE_APPLY_DIFF: "multiFileApplyDiff", POWER_STEERING: "powerSteering", + AI_COMMIT_MESSAGES: "aiCommitMessages", } as const satisfies Record type _AssertExperimentIds = AssertEqual>> @@ -16,6 +17,7 @@ interface ExperimentConfig { export const experimentConfigsMap: Record = { MULTI_FILE_APPLY_DIFF: { enabled: false }, POWER_STEERING: { enabled: false }, + AI_COMMIT_MESSAGES: { enabled: false }, } export const experimentDefault = Object.fromEntries( diff --git a/webview-ui/src/components/settings/LanguageSettings.tsx b/webview-ui/src/components/settings/LanguageSettings.tsx index 7245a92bb1..7de796dfb0 100644 --- a/webview-ui/src/components/settings/LanguageSettings.tsx +++ b/webview-ui/src/components/settings/LanguageSettings.tsx @@ -17,12 +17,14 @@ type LanguageSettingsProps = HTMLAttributes & { language: string commitLanguage: string setCachedStateField: SetCachedStateField<"language" | "commitLanguage"> + aiCommitMessagesEnabled?: boolean } export const LanguageSettings = ({ language, commitLanguage, setCachedStateField, + aiCommitMessagesEnabled, className, ...props }: LanguageSettingsProps) => { @@ -54,24 +56,30 @@ export const LanguageSettings = ({ -
{t("settings:sections.commitLanguage")}
- + {aiCommitMessagesEnabled && ( + <> +
+ {t("settings:sections.commitLanguage")} +
+ + + )} ) diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index b980222428..7b9f7a50bb 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -700,6 +700,7 @@ const SettingsView = forwardRef(({ onDone, t language={language || "en"} commitLanguage={commitLanguage || "en"} setCachedStateField={setCachedStateField} + aiCommitMessagesEnabled={experiments?.aiCommitMessages} /> )} diff --git a/webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx b/webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx index 1e5867d3fc..d52d7219d8 100644 --- a/webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx +++ b/webview-ui/src/context/__tests__/ExtensionStateContext.spec.tsx @@ -208,7 +208,42 @@ describe("mergeExtensionState", () => { cloudIsAuthenticated: false, sharingEnabled: false, profileThresholds: {}, - hasOpenedModeSelector: false, // Add the new required property + hasOpenedModeSelector: false, + language: "en", + commitLanguage: "en", + soundVolume: 0.5, + ttsEnabled: false, + ttsSpeed: 1.0, + diffEnabled: false, + fuzzyMatchThreshold: 1.0, + browserViewportSize: "900x600", + screenshotQuality: 75, + terminalOutputLineLimit: 500, + terminalShellIntegrationTimeout: 4000, + currentApiConfigName: "default", + listApiConfigMeta: [], + customSupportPrompts: {}, + enhancementApiConfigId: "", + condensingApiConfigId: "", + customCondensingPrompt: "", + autoApprovalEnabled: false, + cwd: "", + browserToolEnabled: true, + pinnedApiConfigs: {}, + terminalZshOhMy: false, + maxConcurrentFileReads: 5, + terminalZshP10k: false, + terminalZdotdir: false, + terminalCompressProgressBar: true, + historyPreviewCollapsed: false, + codebaseIndexConfig: { + codebaseIndexEnabled: false, + codebaseIndexQdrantUrl: "http://localhost:6333", + codebaseIndexEmbedderProvider: "openai", + codebaseIndexEmbedderBaseUrl: "", + codebaseIndexEmbedderModelId: "", + }, + codebaseIndexModels: { ollama: {}, openai: {} }, } const prevState: ExtensionState = { @@ -226,15 +261,14 @@ describe("mergeExtensionState", () => { disableCompletionCommand: false, concurrentFileReads: true, multiFileApplyDiff: true, + aiCommitMessages: false, } as Record, } const result = mergeExtensionState(prevState, newState) - expect(result.apiConfiguration).toEqual({ - modelMaxThinkingTokens: 456, - modelTemperature: 0.3, - }) + // The entire apiConfiguration object should be replaced, not merged + expect(result.apiConfiguration).toEqual(newState.apiConfiguration) expect(result.experiments).toEqual({ powerSteering: true, @@ -242,6 +276,7 @@ describe("mergeExtensionState", () => { disableCompletionCommand: false, concurrentFileReads: true, multiFileApplyDiff: true, + aiCommitMessages: false, }) }) }) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 0bfd681bb4..8985c93f2a 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -521,6 +521,10 @@ "name": "Utilitzar mode \"direcció assistida\" experimental", "description": "Quan està activat, Roo recordarà al model els detalls de la seva definició de mode actual amb més freqüència. Això portarà a una adherència més forta a les definicions de rol i instruccions personalitzades, però utilitzarà més tokens per missatge." }, + "AI_COMMIT_MESSAGES": { + "name": "Activa els missatges de commit assistits per IA", + "description": "Quan estigui activat, Roo utilitzarà la IA per generar missatges de commit basats en els canvis de la branca actual." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Utilitzar eina diff de blocs múltiples experimental", "description": "Quan està activat, Roo utilitzarà l'eina diff de blocs múltiples. Això intentarà actualitzar múltiples blocs de codi a l'arxiu en una sola petició." diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 77ae230257..74a2b6a779 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -521,6 +521,10 @@ "name": "Experimentellen \"Servolenkung\"-Modus verwenden", "description": "Wenn aktiviert, wird Roo das Modell häufiger an die Details seiner aktuellen Modusdefinition erinnern. Dies führt zu einer stärkeren Einhaltung von Rollendefinitionen und benutzerdefinierten Anweisungen, verwendet aber mehr Tokens pro Nachricht." }, + "AI_COMMIT_MESSAGES": { + "name": "KI-gestützte Commit-Nachrichten aktivieren", + "description": "Wenn aktiviert, verwendet Roo KI, um Commit-Nachrichten basierend auf den Änderungen im aktuellen Branch zu generieren." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Experimentelles Multi-Block-Diff-Werkzeug verwenden", "description": "Wenn aktiviert, verwendet Roo das Multi-Block-Diff-Werkzeug. Dies versucht, mehrere Codeblöcke in der Datei in einer Anfrage zu aktualisieren." diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index c96ba1e386..1be014f2d8 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -521,6 +521,14 @@ "name": "Use experimental \"power steering\" mode", "description": "When enabled, Roo will remind the model about the details of its current mode definition more frequently. This will lead to stronger adherence to role definitions and custom instructions, but will use more tokens per message." }, + "AI_COMMIT_MESSAGES": { + "name": "Enable AI-powered commit messages", + "description": "When enabled, Roo will use AI to generate commit messages based on the changes in the current branch." + }, + "AI_COMMIT_MESSAGES": { + "name": "Enable AI-powered commit messages", + "description": "When enabled, Roo will use AI to generate commit messages based on the changes in the current branch." + }, "CONCURRENT_FILE_READS": { "name": "Enable concurrent file reads", "description": "When enabled, Roo can read multiple files in a single request. When disabled, Roo must read files one at a time. Disabling this can help when working with less capable models or when you want more control over file access." diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 75e1517f01..dc9db91356 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -521,6 +521,10 @@ "name": "Usar modo experimental de \"dirección asistida\"", "description": "Cuando está habilitado, Roo recordará al modelo los detalles de su definición de modo actual con más frecuencia. Esto llevará a una mayor adherencia a las definiciones de roles e instrucciones personalizadas, pero usará más tokens por mensaje." }, + "AI_COMMIT_MESSAGES": { + "name": "Habilitar mensajes de commit asistidos por IA", + "description": "Cuando esté habilitado, Roo usará IA para generar mensajes de commit basados en los cambios en la rama actual." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Usar herramienta experimental de diff de bloques múltiples", "description": "Cuando está habilitado, Roo usará la herramienta de diff de bloques múltiples. Esto intentará actualizar múltiples bloques de código en el archivo en una sola solicitud." diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index ee4be9c7c4..6b3a30424c 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -521,6 +521,10 @@ "name": "Utiliser le mode \"direction assistée\" expérimental", "description": "Lorsqu'il est activé, Roo rappellera plus fréquemment au modèle les détails de sa définition de mode actuelle. Cela conduira à une adhérence plus forte aux définitions de rôles et aux instructions personnalisées, mais utilisera plus de tokens par message." }, + "AI_COMMIT_MESSAGES": { + "name": "Activer les messages de commit assistés par l'IA", + "description": "Lorsque cette option est activée, Roo utilisera l'IA pour générer des messages de commit basés sur les modifications de la branche actuelle." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Utiliser l'outil diff multi-blocs expérimental", "description": "Lorsqu'il est activé, Roo utilisera l'outil diff multi-blocs. Cela tentera de mettre à jour plusieurs blocs de code dans le fichier en une seule requête." diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index e14af241c2..a09f189880 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -521,6 +521,10 @@ "name": "प्रायोगिक \"पावर स्टीयरिंग\" मोड का उपयोग करें", "description": "जब सक्षम किया जाता है, तो Roo मॉडल को उसके वर्तमान मोड परिभाषा के विवरण के बारे में अधिक बार याद दिलाएगा। इससे भूमिका परिभाषाओं और कस्टम निर्देशों के प्रति अधिक मजबूत अनुपालन होगा, लेकिन प्रति संदेश अधिक token का उपयोग होगा।" }, + "AI_COMMIT_MESSAGES": { + "name": "AI-संचालित कमिट संदेश सक्षम करें", + "description": "जब सक्षम किया जाता है, तो Roo वर्तमान शाखा में परिवर्तनों के आधार पर कमिट संदेश उत्पन्न करने के लिए AI का उपयोग करेगा।" + }, "MULTI_SEARCH_AND_REPLACE": { "name": "प्रायोगिक मल्टी ब्लॉक diff उपकरण का उपयोग करें", "description": "जब सक्षम किया जाता है, तो Roo मल्टी ब्लॉक diff उपकरण का उपयोग करेगा। यह एक अनुरोध में फ़ाइल में कई कोड ब्लॉक अपडेट करने का प्रयास करेगा।" diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 2f62a6258c..d6fd053a12 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -546,6 +546,10 @@ "name": "Gunakan mode \"power steering\" eksperimental", "description": "Ketika diaktifkan, Roo akan mengingatkan model tentang detail definisi mode saat ini lebih sering. Ini akan menghasilkan kepatuhan yang lebih kuat terhadap definisi peran dan instruksi kustom, tetapi akan menggunakan lebih banyak token per pesan." }, + "AI_COMMIT_MESSAGES": { + "name": "Aktifkan pesan commit bertenaga AI", + "description": "Ketika diaktifkan, Roo akan menggunakan AI untuk menghasilkan pesan commit berdasarkan perubahan di cabang saat ini." + }, "AUTOCOMPLETE": { "name": "Gunakan fitur \"autocomplete\" eksperimental", "description": "Ketika diaktifkan, Roo akan memberikan saran kode inline saat kamu mengetik. Memerlukan Roo Code API Provider." diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index f389fc79b6..dd8c77cb22 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -521,6 +521,10 @@ "name": "Usa modalità \"servosterzo\" sperimentale", "description": "Quando abilitato, Roo ricorderà al modello i dettagli della sua definizione di modalità corrente più frequentemente. Questo porterà a una maggiore aderenza alle definizioni dei ruoli e alle istruzioni personalizzate, ma utilizzerà più token per messaggio." }, + "AI_COMMIT_MESSAGES": { + "name": "Abilita messaggi di commit potenziati dall'IA", + "description": "Quando abilitato, Roo utilizzerà l'IA per generare messaggi di commit basati sulle modifiche nel ramo corrente." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Usa strumento diff multi-blocco sperimentale", "description": "Quando abilitato, Roo utilizzerà lo strumento diff multi-blocco. Questo tenterà di aggiornare più blocchi di codice nel file in una singola richiesta." diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 0028f0f0cd..4b30b36c6e 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -521,6 +521,10 @@ "name": "実験的な「パワーステアリング」モードを使用する", "description": "有効にすると、Rooはより頻繁にモデルに現在のモード定義の詳細を思い出させます。これにより、役割定義とカスタム指示へのより強い遵守が実現しますが、メッセージごとにより多くのtokenを使用します。" }, + "AI_COMMIT_MESSAGES": { + "name": "AIによるコミットメッセージを有効にする", + "description": "有効にすると、Rooは現在のブランチの変更に基づいてコミットメッセージを生成するためにAIを使用します。" + }, "MULTI_SEARCH_AND_REPLACE": { "name": "実験的なマルチブロックdiffツールを使用する", "description": "有効にすると、Rooはマルチブロックdiffツールを使用します。これにより、1つのリクエストでファイル内の複数のコードブロックを更新しようとします。" diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 7104d2226d..0f6a814f4b 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -521,6 +521,10 @@ "name": "실험적 \"파워 스티어링\" 모드 사용", "description": "활성화하면 Roo가 현재 모드 정의의 세부 정보를 모델에 더 자주 상기시킵니다. 이로 인해 역할 정의 및 사용자 지정 지침에 대한 준수가 강화되지만 메시지당 더 많은 token이 사용됩니다." }, + "AI_COMMIT_MESSAGES": { + "name": "AI 기반 커밋 메시지 활성화", + "description": "활성화하면 Roo가 현재 브랜치의 변경 사항을 기반으로 커밋 메시지를 생성하기 위해 AI를 사용합니다." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "실험적 다중 블록 diff 도구 사용", "description": "활성화하면 Roo가 다중 블록 diff 도구를 사용합니다. 이것은 하나의 요청에서 파일의 여러 코드 블록을 업데이트하려고 시도합니다." diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 7b199f4d3b..43a215a6ed 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -521,6 +521,10 @@ "name": "Experimentele 'power steering'-modus gebruiken", "description": "Indien ingeschakeld, herinnert Roo het model vaker aan de details van de huidige modusdefinitie. Dit leidt tot sterkere naleving van roldefinities en aangepaste instructies, maar gebruikt meer tokens per bericht." }, + "AI_COMMIT_MESSAGES": { + "name": "AI-ondersteunde commit-berichten inschakelen", + "description": "Indien ingeschakeld, zal Roo AI gebruiken om commit-berichten te genereren op basis van de wijzigingen in de huidige branch." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Experimentele multi-block diff-tool gebruiken", "description": "Indien ingeschakeld, gebruikt Roo de multi-block diff-tool. Hiermee wordt geprobeerd meerdere codeblokken in het bestand in één verzoek bij te werken." diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index e153353e43..3bf43d2c8b 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -521,6 +521,10 @@ "name": "Użyj eksperymentalnego trybu \"wspomagania kierownicy\"", "description": "Po włączeniu, Roo będzie częściej przypominać modelowi o szczegółach jego bieżącej definicji trybu. Doprowadzi to do silniejszego przestrzegania definicji ról i niestandardowych instrukcji, ale będzie używać więcej tokenów na wiadomość." }, + "AI_COMMIT_MESSAGES": { + "name": "Włącz komunikaty commitów wspomagane przez AI", + "description": "Gdy włączone, Roo będzie używać AI do generowania komunikatów commitów na podstawie zmian w bieżącym branchu." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Użyj eksperymentalnego narzędzia diff wieloblokowego", "description": "Po włączeniu, Roo użyje narzędzia diff wieloblokowego. Spróbuje to zaktualizować wiele bloków kodu w pliku w jednym żądaniu." diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 7d51829de7..89d0115285 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -521,6 +521,10 @@ "name": "Usar modo \"direção assistida\" experimental", "description": "Quando ativado, o Roo lembrará o modelo sobre os detalhes da sua definição de modo atual com mais frequência. Isso levará a uma adesão mais forte às definições de função e instruções personalizadas, mas usará mais tokens por mensagem." }, + "AI_COMMIT_MESSAGES": { + "name": "Ativar mensagens de commit com IA", + "description": "Quando ativado, o Roo usará IA para gerar mensagens de commit com base nas alterações no branch atual." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Usar ferramenta diff de múltiplos blocos experimental", "description": "Quando ativado, o Roo usará a ferramenta diff de múltiplos blocos. Isso tentará atualizar vários blocos de código no arquivo em uma única solicitação." diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index f1d0df1c9d..67ceb275e7 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -521,6 +521,10 @@ "name": "Использовать экспериментальный режим \"power steering\"", "description": "Если включено, Roo будет чаще напоминать модели детали текущего режима. Это приведёт к более строгому следованию ролям и инструкциям, но увеличит расход токенов." }, + "AI_COMMIT_MESSAGES": { + "name": "Включить коммиты с помощью ИИ", + "description": "Если включено, Roo будет использовать ИИ для генерации сообщений коммитов на основе изменений в текущей ветке." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Использовать экспериментальный мультиблочный инструмент диффа", "description": "Если включено, Roo будет использовать мультиблочный инструмент диффа, пытаясь обновить несколько блоков кода за один запрос." diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 27b21325ee..aa2d1123f3 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -521,6 +521,10 @@ "name": "Deneysel \"güç direksiyon\" modunu kullan", "description": "Etkinleştirildiğinde, Roo modele geçerli mod tanımının ayrıntılarını daha sık hatırlatacaktır. Bu, rol tanımlarına ve özel talimatlara daha güçlü uyum sağlayacak, ancak mesaj başına daha fazla token kullanacaktır." }, + "AI_COMMIT_MESSAGES": { + "name": "Yapay Zeka Destekli Commit Mesajlarını Etkinleştir", + "description": "Etkinleştirildiğinde, Roo mevcut daldaki değişikliklere göre commit mesajları oluşturmak için yapay zekayı kullanacaktır." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Deneysel çoklu blok diff aracını kullan", "description": "Etkinleştirildiğinde, Roo çoklu blok diff aracını kullanacaktır. Bu, tek bir istekte dosyadaki birden fazla kod bloğunu güncellemeye çalışacaktır." diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 31629ab347..89cd99d283 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -521,6 +521,10 @@ "name": "Sử dụng chế độ \"power steering\" thử nghiệm", "description": "Khi được bật, Roo sẽ nhắc nhở mô hình về chi tiết định nghĩa chế độ hiện tại thường xuyên hơn. Điều này sẽ dẫn đến việc tuân thủ chặt chẽ hơn các định nghĩa vai trò và hướng dẫn tùy chỉnh, nhưng sẽ sử dụng nhiều token hơn cho mỗi tin nhắn." }, + "AI_COMMIT_MESSAGES": { + "name": "Bật tin nhắn commit được hỗ trợ bởi AI", + "description": "Khi được bật, Roo sẽ sử dụng AI để tạo tin nhắn commit dựa trên các thay đổi trong nhánh hiện tại." + }, "MULTI_SEARCH_AND_REPLACE": { "name": "Sử dụng công cụ diff đa khối thử nghiệm", "description": "Khi được bật, Roo sẽ sử dụng công cụ diff đa khối. Điều này sẽ cố gắng cập nhật nhiều khối mã trong tệp trong một yêu cầu." diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 305b79ebc8..1869572614 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -521,6 +521,10 @@ "name": "启用增强导向模式", "description": "开启后,Roo 将更频繁地向模型推送当前模式定义的详细信息,从而强化对角色设定和自定义指令的遵循力度。注意:此模式会提升每条消息的 token 消耗量。" }, + "AI_COMMIT_MESSAGES": { + "name": "启用 AI 辅助的提交信息", + "description": "启用后,Roo 将使用 AI 根据当前分支中的更改生成提交信息。" + }, "MULTI_SEARCH_AND_REPLACE": { "name": "允许批量搜索和替换", "description": "启用后,Roo 将尝试在一个请求中进行批量搜索和替换。" diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 220864a003..e084544ed4 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -521,6 +521,10 @@ "name": "使用實驗性「動力輔助」模式", "description": "啟用後,Roo 將更頻繁地提醒模型目前模式的詳細設定。這能讓模型更嚴格遵守角色定義和自訂指令,但每則訊息會使用更多 token。" }, + "AI_COMMIT_MESSAGES": { + "name": "啟用 AI 輔助的提交訊息", + "description": "啟用後,Roo 將使用 AI 根據目前分支中的變更產生提交訊息。" + }, "MULTI_SEARCH_AND_REPLACE": { "name": "使用實驗性多區塊差異比對工具", "description": "啟用後,Roo 將使用多區塊差異比對工具,嘗試在單一請求中更新檔案內的多個程式碼區塊。" From 2d0355a7bfb4aef505c18ae6fbe117422dc1ceaa Mon Sep 17 00:00:00 2001 From: zapp88 Date: Sat, 28 Jun 2025 22:35:43 +0200 Subject: [PATCH 08/10] Update src/integrations/git/generateCommitMessage.ts Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> --- src/integrations/git/generateCommitMessage.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/integrations/git/generateCommitMessage.ts b/src/integrations/git/generateCommitMessage.ts index f0f08ed50e..701af11ff1 100644 --- a/src/integrations/git/generateCommitMessage.ts +++ b/src/integrations/git/generateCommitMessage.ts @@ -37,7 +37,7 @@ async function getChanges(git: SimpleGit, repoPath: string): Promise { } function createPrompt(diff: string, language: string): string { - return `Create a git commit message in ${language} from the following diff:\n${diff}.Remember to print only commit messages text without any extra markdown or content that would require special tools to display. Adhere to best git commit message practices. Remmber to use ${language} in this commit message.` + return `Create a git commit message in ${language} from the following diff:\n${diff}.Remember to print only commit messages text without any extra markdown or content that would require special tools to display. Adhere to best git commit message practices. Remember to use ${language} in this commit message.` } export async function generateCommitMessage(context: vscode.ExtensionContext) { From e942e2633f8d033ab6d93f8bd57176686e069f3c Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sat, 28 Jun 2025 22:56:21 +0200 Subject: [PATCH 09/10] fix(i18n): Remove duplicate key in settings localization --- webview-ui/src/i18n/locales/en/settings.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 1be014f2d8..e2b1624e1b 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -525,10 +525,6 @@ "name": "Enable AI-powered commit messages", "description": "When enabled, Roo will use AI to generate commit messages based on the changes in the current branch." }, - "AI_COMMIT_MESSAGES": { - "name": "Enable AI-powered commit messages", - "description": "When enabled, Roo will use AI to generate commit messages based on the changes in the current branch." - }, "CONCURRENT_FILE_READS": { "name": "Enable concurrent file reads", "description": "When enabled, Roo can read multiple files in a single request. When disabled, Roo must read files one at a time. Disabling this can help when working with less capable models or when you want more control over file access." From 78c4046d1395f0d4cdc6f931261e14bb6b2c0c0b Mon Sep 17 00:00:00 2001 From: Jakub Maciej Date: Sun, 29 Jun 2025 17:41:13 +0200 Subject: [PATCH 10/10] feat(settings): Integrate commit language control into AI commit messages experimental feature The commit language setting has been refactored and moved from the general language settings section. It is now managed by a new dedicated component, . This component is conditionally rendered within the section, specifically when the experimental feature is active. This change ensures that the commit language option is logically grouped with the AI commit message functionality it directly supports, improving the clarity and organization of settings. Additionally, minor styling adjustments were applied to the component for improved layout. --- .../settings/CommitLanguageSettings.tsx | 54 +++++++++++++++++++ .../settings/ExperimentalFeature.tsx | 4 +- .../settings/ExperimentalSettings.tsx | 28 +++++++++- .../components/settings/LanguageSettings.tsx | 37 +------------ .../src/components/settings/SettingsView.tsx | 9 ++-- 5 files changed, 90 insertions(+), 42 deletions(-) create mode 100644 webview-ui/src/components/settings/CommitLanguageSettings.tsx diff --git a/webview-ui/src/components/settings/CommitLanguageSettings.tsx b/webview-ui/src/components/settings/CommitLanguageSettings.tsx new file mode 100644 index 0000000000..c2342b41e8 --- /dev/null +++ b/webview-ui/src/components/settings/CommitLanguageSettings.tsx @@ -0,0 +1,54 @@ +import { HTMLAttributes } from "react" +import type { Language } from "@roo-code/types" +import { LANGUAGES } from "@roo/language" +import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "@src/components/ui" +import { cn } from "@src/lib/utils" +import { useAppTranslation } from "@/i18n/TranslationContext" +import { SetCachedStateField } from "./types" + +type CommitLanguageSettingsProps = HTMLAttributes & { + commitLanguage: string + setCachedStateField: SetCachedStateField<"commitLanguage"> + aiCommitMessagesEnabled?: boolean // Dodano prop +} + +export const CommitLanguageSettings = ({ + commitLanguage, + setCachedStateField, + aiCommitMessagesEnabled, // Dodano do destrukturyzacji + className, + ...props +}: CommitLanguageSettingsProps) => { + const { t } = useAppTranslation() + + return ( + <> + {aiCommitMessagesEnabled && ( // Warunkowe renderowanie z wcięciem i paskiem +
+
+ {t("settings:sections.commitLanguage")} +
+ +
+ )} + + ) +} diff --git a/webview-ui/src/components/settings/ExperimentalFeature.tsx b/webview-ui/src/components/settings/ExperimentalFeature.tsx index a96a00a426..0f9cd2f0a0 100644 --- a/webview-ui/src/components/settings/ExperimentalFeature.tsx +++ b/webview-ui/src/components/settings/ExperimentalFeature.tsx @@ -16,7 +16,9 @@ export const ExperimentalFeature = ({ enabled, onChange, experimentKey }: Experi const descriptionKey = experimentKey ? `settings:experimental.${experimentKey}.description` : "" return ( -
+
+ {" "} + {/* Dodano flex-col i gap-2 */}
onChange(e.target.checked)}> {t(nameKey)} diff --git a/webview-ui/src/components/settings/ExperimentalSettings.tsx b/webview-ui/src/components/settings/ExperimentalSettings.tsx index 79d8afefb2..6379c6df52 100644 --- a/webview-ui/src/components/settings/ExperimentalSettings.tsx +++ b/webview-ui/src/components/settings/ExperimentalSettings.tsx @@ -1,7 +1,7 @@ import { HTMLAttributes } from "react" import { FlaskConical } from "lucide-react" -import type { Experiments, CodebaseIndexConfig, CodebaseIndexModels, ProviderSettings } from "@roo-code/types" +import type { Experiments, CodebaseIndexConfig, CodebaseIndexModels, ProviderSettings, Language } from "@roo-code/types" import { EXPERIMENT_IDS, experimentConfigsMap } from "@roo/experiments" @@ -14,17 +14,19 @@ import { SectionHeader } from "./SectionHeader" import { Section } from "./Section" import { ExperimentalFeature } from "./ExperimentalFeature" import { CodeIndexSettings } from "./CodeIndexSettings" +import { CommitLanguageSettings } from "./CommitLanguageSettings" type ExperimentalSettingsProps = HTMLAttributes & { experiments: Experiments setExperimentEnabled: SetExperimentEnabled - setCachedStateField: SetCachedStateField<"codebaseIndexConfig"> + setCachedStateField: SetCachedStateField<"codebaseIndexConfig" | "commitLanguage"> // Combined the types // CodeIndexSettings props codebaseIndexModels: CodebaseIndexModels | undefined codebaseIndexConfig: CodebaseIndexConfig | undefined apiConfiguration: ProviderSettings setApiConfigurationField: (field: K, value: ProviderSettings[K]) => void areSettingsCommitted: boolean + commitLanguage: Language } export const ExperimentalSettings = ({ @@ -36,6 +38,7 @@ export const ExperimentalSettings = ({ apiConfiguration, setApiConfigurationField, areSettingsCommitted, + commitLanguage, className, ...props }: ExperimentalSettingsProps) => { @@ -65,6 +68,27 @@ export const ExperimentalSettings = ({ } /> ) + } else if (config[0] === "AI_COMMIT_MESSAGES") { + // Dodano warunek dla AI_COMMIT_MESSAGES + return ( + <> + + setExperimentEnabled(EXPERIMENT_IDS.AI_COMMIT_MESSAGES, enabled) + } + /> + + } + aiCommitMessagesEnabled={experiments?.aiCommitMessages} // Przekazujemy prop + /> + + ) } return ( & { language: string - commitLanguage: string - setCachedStateField: SetCachedStateField<"language" | "commitLanguage"> - aiCommitMessagesEnabled?: boolean + setCachedStateField: SetCachedStateField<"language"> } -export const LanguageSettings = ({ - language, - commitLanguage, - setCachedStateField, - aiCommitMessagesEnabled, - className, - ...props -}: LanguageSettingsProps) => { +export const LanguageSettings = ({ language, setCachedStateField, className, ...props }: LanguageSettingsProps) => { const { t } = useAppTranslation() return ( @@ -56,30 +47,6 @@ export const LanguageSettings = ({ - {aiCommitMessagesEnabled && ( - <> -
- {t("settings:sections.commitLanguage")} -
- - - )}
) diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 7b9f7a50bb..f18060efc9 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -685,12 +685,15 @@ const SettingsView = forwardRef(({ onDone, t + } codebaseIndexModels={codebaseIndexModels} codebaseIndexConfig={codebaseIndexConfig} apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} areSettingsCommitted={!isChangeDetected} + commitLanguage={commitLanguage || "en"} /> )} @@ -698,9 +701,7 @@ const SettingsView = forwardRef(({ onDone, t {activeTab === "language" && ( } /> )}