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"
}