diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index fd3d480014a6..fdb18daf0b1e 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -16,6 +16,12 @@ import { findMatchingResourceOrTemplate } from "@src/utils/mcp" import { vscode } from "@src/utils/vscode" import { removeLeadingNonAlphanumeric } from "@src/utils/removeLeadingNonAlphanumeric" import { getLanguageFromPath } from "@src/utils/getLanguageFromPath" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@src/components/ui/dropdown-menu" import { ToolUseBlock, ToolUseBlockHeader } from "../common/ToolUseBlock" import UpdateTodoListToolBlock from "./UpdateTodoListToolBlock" @@ -1002,29 +1008,63 @@ export const ChatRowContent = ({ return ( <> -
-
- {icon} - {title} -
-
0 ? 1 : 0 }}> - ${Number(cost || 0)?.toFixed(4)} -
-
+ + +
e.preventDefault()}> +
+ {icon} + {title} +
+
+
0 ? 1 : 0, + }}> + ${Number(cost || 0)?.toFixed(4)} +
+
{ + e.stopPropagation() + vscode.postMessage({ type: "deleteMessage", value: message.ts }) + }} + title={t("chat:deleteMessageAndSubsequent")}> + +
+
+
+
+ + vscode.postMessage({ type: "deleteMessage", value: message.ts })} + className="flex items-center gap-2" + disabled={isApiRequestInProgress}> + + + {t( + "chat:deleteMessageAndSubsequent", + "Delete message and subsequent nodes", + )} + + + +
{(((cost === null || cost === undefined) && apiRequestFailedMessage) || apiReqStreamingFailedMessage) && ( -
- - {t("chat:text.rooSaid")} -
-
- - {message.images && message.images.length > 0 && ( -
- {message.images.map((image, index) => ( - - ))} + + +
e.preventDefault()}> +
+
+ + {t("chat:text.rooSaid")} +
+
{ + e.stopPropagation() + vscode.postMessage({ type: "deleteMessage", value: message.ts }) + }} + title={t("chat:deleteMessageAndSubsequent")}> + +
- )} -
-
+
+ + {message.images && message.images.length > 0 && ( +
+ {message.images.map((image, index) => ( + + ))} +
+ )} +
+
+ + + vscode.postMessage({ type: "deleteMessage", value: message.ts })} + className="flex items-center gap-2" + disabled={isStreaming}> + + + {t("chat:deleteMessageAndSubsequent", "Delete message and subsequent nodes")} + + + + ) case "user_feedback": return ( @@ -1162,15 +1229,42 @@ export const ChatRowContent = ({ return case "completion_result": return ( - <> -
- {icon} - {title} -
-
- -
- + + +
e.preventDefault()}> +
+
+ {icon} + {title} +
+
{ + e.stopPropagation() + vscode.postMessage({ type: "deleteMessage", value: message.ts }) + }} + title={t("chat:deleteMessageAndSubsequent")}> + +
+
+
+ +
+
+
+ + vscode.postMessage({ type: "deleteMessage", value: message.ts })} + className="flex items-center gap-2" + disabled={isStreaming}> + + + {t("chat:deleteMessageAndSubsequent", "Delete message and subsequent nodes")} + + + +
) case "shell_integration_warning": return diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 16ea62c44390..07fe107564c9 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -429,5 +429,6 @@ "problems": "Problemes", "terminal": "Terminal", "url": "Enganxa la URL per obtenir-ne el contingut" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index a3f14d12549b..dd263b04fc20 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo möchte einen Slash-Befehl ausführen", "didRun": "Roo hat einen Slash-Befehl ausgeführt" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 6f47f040c67b..a64d0fd8e26f 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -246,6 +246,7 @@ "feedback": { "youSaid": "You said" }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes", "mcp": { "wantsToUseTool": "Roo wants to use a tool on the {{serverName}} MCP server", "wantsToAccessResource": "Roo wants to access a resource on the {{serverName}} MCP server" diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index e6084b371399..f6a4fa34a627 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo quiere ejecutar un comando slash", "didRun": "Roo ejecutó un comando slash" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 38d63358ca98..b99c2378d63b 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo veut exécuter une commande slash", "didRun": "Roo a exécuté une commande slash" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 9bc4b4619766..287ab9cea3c3 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo एक स्लैश कमांड चलाना चाहता है", "didRun": "Roo ने एक स्लैश कमांड चलाया" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index b61b47b3d884..76e056743ff1 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -435,5 +435,6 @@ "slashCommand": { "wantsToRun": "Roo ingin menjalankan perintah slash", "didRun": "Roo telah menjalankan perintah slash" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index 082c489e9313..93e00afa52c6 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo vuole eseguire un comando slash", "didRun": "Roo ha eseguito un comando slash" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 531afc067e4d..c1772ffd5a9a 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Rooはスラッシュコマンドを実行したい", "didRun": "Rooはスラッシュコマンドを実行しました" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index 9f7818bc4757..7a95c547ebe2 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo가 슬래시 명령어를 실행하려고 합니다", "didRun": "Roo가 슬래시 명령어를 실행했습니다" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index 97380d370af0..228661530cb8 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo wil een slash commando uitvoeren", "didRun": "Roo heeft een slash commando uitgevoerd" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index 414262eaa7cf..fa393bb08348 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo chce uruchomić komendę slash", "didRun": "Roo uruchomił komendę slash" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index 0baa415bc7d3..d6cc17a899bd 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -429,5 +429,6 @@ "slashCommand": { "wantsToRun": "Roo quer executar um comando slash", "didRun": "Roo executou um comando slash" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index 10cca124d355..146a0cfc2276 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -430,5 +430,6 @@ "slashCommand": { "wantsToRun": "Roo хочет выполнить слеш-команду", "didRun": "Roo выполнил слеш-команду" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 9b92b937a799..837c3974673b 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -430,5 +430,6 @@ "slashCommand": { "wantsToRun": "Roo bir slash komutu çalıştırmak istiyor", "didRun": "Roo bir slash komutu çalıştırdı" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index 39cb1cf01663..b0178f4bba4b 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -430,5 +430,6 @@ "slashCommand": { "wantsToRun": "Roo muốn chạy lệnh slash", "didRun": "Roo đã chạy lệnh slash" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index ef87b819ea99..af21dbb7072a 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -430,5 +430,6 @@ "slashCommand": { "wantsToRun": "Roo 想要运行斜杠命令", "didRun": "Roo 运行了斜杠命令" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" } diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index 985859bec418..15fbc916b29e 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -430,5 +430,6 @@ "slashCommand": { "wantsToRun": "Roo 想要執行斜線指令", "didRun": "Roo 執行了斜線指令" - } + }, + "deleteMessageAndSubsequent": "Delete message and subsequent nodes" }