From 471c194a299c8584634cccb36c6a339c60e9e64a Mon Sep 17 00:00:00 2001 From: Roo Code Date: Sat, 17 Jan 2026 14:51:54 +0000 Subject: [PATCH] feat: add button to delete checkpoints only (fixes #10801) Add a new "Delete Checkpoints" button to task items in history view that allows users to delete only the checkpoints for a task while preserving the task history. This addresses user feedback about wanting to free up storage space used by shadow git repositories without losing task context. Changes: - Add deleteTaskCheckpointsWithId message type and handler - Create DeleteCheckpointsButton component with Shift+Click to skip confirm - Create DeleteCheckpointsDialog confirmation dialog - Update ui_messages.json to remove checkpoint_saved entries when deleted - Delete shadow git repository branches and checkpoint directories - Wire up handlers through TaskItem, TaskItemFooter, and HistoryView - Add translations for all 18 supported locales --- packages/types/src/vscode-extension-host.ts | 1 + src/core/webview/ClineProvider.ts | 68 +++++++++++++++++++ src/core/webview/webviewMessageHandler.ts | 3 + .../history/DeleteCheckpointsButton.tsx | 39 +++++++++++ .../history/DeleteCheckpointsDialog.tsx | 63 +++++++++++++++++ .../src/components/history/HistoryView.tsx | 12 ++++ .../src/components/history/TaskItem.tsx | 3 + .../src/components/history/TaskItemFooter.tsx | 13 +++- webview-ui/src/i18n/locales/ca/history.json | 3 + webview-ui/src/i18n/locales/de/history.json | 3 + webview-ui/src/i18n/locales/en/history.json | 3 + webview-ui/src/i18n/locales/es/history.json | 3 + webview-ui/src/i18n/locales/fr/history.json | 3 + webview-ui/src/i18n/locales/hi/history.json | 3 + webview-ui/src/i18n/locales/id/history.json | 3 + webview-ui/src/i18n/locales/it/history.json | 3 + webview-ui/src/i18n/locales/ja/history.json | 3 + webview-ui/src/i18n/locales/ko/history.json | 3 + webview-ui/src/i18n/locales/nl/history.json | 3 + webview-ui/src/i18n/locales/pl/history.json | 3 + .../src/i18n/locales/pt-BR/history.json | 3 + webview-ui/src/i18n/locales/ru/history.json | 3 + webview-ui/src/i18n/locales/tr/history.json | 3 + webview-ui/src/i18n/locales/vi/history.json | 3 + .../src/i18n/locales/zh-CN/history.json | 3 + .../src/i18n/locales/zh-TW/history.json | 3 + 26 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 webview-ui/src/components/history/DeleteCheckpointsButton.tsx create mode 100644 webview-ui/src/components/history/DeleteCheckpointsDialog.tsx diff --git a/packages/types/src/vscode-extension-host.ts b/packages/types/src/vscode-extension-host.ts index 86d8b2ddbbe..184dfabdc5e 100644 --- a/packages/types/src/vscode-extension-host.ts +++ b/packages/types/src/vscode-extension-host.ts @@ -385,6 +385,7 @@ export interface WebviewMessage { | "shareCurrentTask" | "showTaskWithId" | "deleteTaskWithId" + | "deleteTaskCheckpointsWithId" | "exportTaskWithId" | "importSettings" | "exportSettings" diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 33fa12ca78c..72a65be22b2 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1798,6 +1798,74 @@ export class ClineProvider } } + // this function deletes only the checkpoints for a task, but keeps the task history and messages + async deleteTaskCheckpointsWithId(id: string) { + try { + // get the task info + const { historyItem, taskDirPath } = await this.getTaskWithId(id) + + // Delete associated shadow repository or branch + const globalStorageDir = this.contextProxy.globalStorageUri.fsPath + const workspaceDir = historyItem.workspace || this.cwd + + try { + await ShadowCheckpointService.deleteTask({ taskId: id, globalStorageDir, workspaceDir }) + console.log(`[deleteTaskCheckpointsWithId${id}] deleted shadow repository/branch`) + } catch (error) { + console.error( + `[deleteTaskCheckpointsWithId${id}] failed to delete shadow repository or branch: ${error instanceof Error ? error.message : String(error)}`, + ) + } + + // Delete the checkpoints directory within the task folder + const checkpointsDir = path.join(taskDirPath, "checkpoints") + try { + const checkpointsDirExists = await fileExistsAtPath(checkpointsDir) + if (checkpointsDirExists) { + await fs.rm(checkpointsDir, { recursive: true, force: true }) + console.log(`[deleteTaskCheckpointsWithId${id}] removed checkpoints directory`) + } + } catch (error) { + console.error( + `[deleteTaskCheckpointsWithId${id}] failed to remove checkpoints directory: ${error instanceof Error ? error.message : String(error)}`, + ) + } + + // Update ui_messages.json to remove or mark checkpoint_saved entries as deleted + try { + const uiMessagesPath = path.join(taskDirPath, GlobalFileNames.uiMessages) + const uiMessagesExists = await fileExistsAtPath(uiMessagesPath) + if (uiMessagesExists) { + const uiMessages = JSON.parse(await fs.readFile(uiMessagesPath, "utf8")) as ClineMessage[] + // Filter out checkpoint_saved messages + const filteredMessages = uiMessages.filter( + (msg) => !(msg.type === "say" && msg.say === "checkpoint_saved"), + ) + await saveTaskMessages({ + messages: filteredMessages, + taskId: id, + globalStoragePath: globalStorageDir, + }) + console.log(`[deleteTaskCheckpointsWithId${id}] updated ui_messages.json`) + } + } catch (error) { + console.error( + `[deleteTaskCheckpointsWithId${id}] failed to update ui_messages.json: ${error instanceof Error ? error.message : String(error)}`, + ) + } + + // Update webview state to reflect changes + await this.postStateToWebview() + } catch (error) { + // If task is not found, just log the error + if (error instanceof Error && error.message === "Task not found") { + console.log(`[deleteTaskCheckpointsWithId${id}] task not found`) + return + } + throw error + } + } + async deleteTaskFromState(id: string) { const taskHistory = this.getGlobalState("taskHistory") ?? [] const updatedTaskHistory = taskHistory.filter((task) => task.id !== id) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index dbeb380d162..1ecae838e63 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -737,6 +737,9 @@ export const webviewMessageHandler = async ( case "deleteTaskWithId": provider.deleteTaskWithId(message.text!) break + case "deleteTaskCheckpointsWithId": + provider.deleteTaskCheckpointsWithId(message.text!) + break case "deleteMultipleTasksWithIds": { const ids = message.ids diff --git a/webview-ui/src/components/history/DeleteCheckpointsButton.tsx b/webview-ui/src/components/history/DeleteCheckpointsButton.tsx new file mode 100644 index 00000000000..893ae6d4136 --- /dev/null +++ b/webview-ui/src/components/history/DeleteCheckpointsButton.tsx @@ -0,0 +1,39 @@ +import { useCallback } from "react" + +import { Button, StandardTooltip } from "@/components/ui" +import { useAppTranslation } from "@/i18n/TranslationContext" +import { vscode } from "@/utils/vscode" + +type DeleteCheckpointsButtonProps = { + itemId: string + onDeleteCheckpoints?: (taskId: string) => void +} + +export const DeleteCheckpointsButton = ({ itemId, onDeleteCheckpoints }: DeleteCheckpointsButtonProps) => { + const { t } = useAppTranslation() + + const handleDeleteCheckpointsClick = useCallback( + (e: React.MouseEvent) => { + e.stopPropagation() + if (e.shiftKey) { + vscode.postMessage({ type: "deleteTaskCheckpointsWithId", text: itemId }) + } else if (onDeleteCheckpoints) { + onDeleteCheckpoints(itemId) + } + }, + [itemId, onDeleteCheckpoints], + ) + + return ( + + + + ) +} diff --git a/webview-ui/src/components/history/DeleteCheckpointsDialog.tsx b/webview-ui/src/components/history/DeleteCheckpointsDialog.tsx new file mode 100644 index 00000000000..a08bae5de79 --- /dev/null +++ b/webview-ui/src/components/history/DeleteCheckpointsDialog.tsx @@ -0,0 +1,63 @@ +import { useCallback, useEffect } from "react" +import { useKeyPress } from "react-use" +import { AlertDialogProps } from "@radix-ui/react-alert-dialog" + +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + Button, +} from "@/components/ui" +import { useAppTranslation } from "@/i18n/TranslationContext" + +import { vscode } from "@/utils/vscode" + +interface DeleteCheckpointsDialogProps extends AlertDialogProps { + taskId: string +} + +export const DeleteCheckpointsDialog = ({ taskId, ...props }: DeleteCheckpointsDialogProps) => { + const { t } = useAppTranslation() + const [isEnterPressed] = useKeyPress("Enter") + + const { onOpenChange } = props + + const onDeleteCheckpoints = useCallback(() => { + if (taskId) { + vscode.postMessage({ type: "deleteTaskCheckpointsWithId", text: taskId }) + onOpenChange?.(false) + } + }, [taskId, onOpenChange]) + + useEffect(() => { + if (taskId && isEnterPressed) { + onDeleteCheckpoints() + } + }, [taskId, isEnterPressed, onDeleteCheckpoints]) + + return ( + + onOpenChange?.(false)}> + + {t("history:deleteCheckpoints")} + {t("history:deleteCheckpointsMessage")} + + + + + + + + + + + + ) +} diff --git a/webview-ui/src/components/history/HistoryView.tsx b/webview-ui/src/components/history/HistoryView.tsx index d8ee4315938..346f958dce1 100644 --- a/webview-ui/src/components/history/HistoryView.tsx +++ b/webview-ui/src/components/history/HistoryView.tsx @@ -1,6 +1,7 @@ import React, { memo, useState } from "react" import { ArrowLeft } from "lucide-react" import { DeleteTaskDialog } from "./DeleteTaskDialog" +import { DeleteCheckpointsDialog } from "./DeleteCheckpointsDialog" import { BatchDeleteTaskDialog } from "./BatchDeleteTaskDialog" import { Virtuoso } from "react-virtuoso" @@ -42,6 +43,7 @@ const HistoryView = ({ onDone }: HistoryViewProps) => { const { t } = useAppTranslation() const [deleteTaskId, setDeleteTaskId] = useState(null) + const [deleteCheckpointsTaskId, setDeleteCheckpointsTaskId] = useState(null) const [isSelectionMode, setIsSelectionMode] = useState(false) const [selectedTaskIds, setSelectedTaskIds] = useState([]) const [showBatchDeleteDialog, setShowBatchDeleteDialog] = useState(false) @@ -249,6 +251,7 @@ const HistoryView = ({ onDone }: HistoryViewProps) => { isSelectionMode={isSelectionMode} isSelected={selectedTaskIds.includes(item.id)} onToggleSelection={toggleTaskSelection} + onDeleteCheckpoints={setDeleteCheckpointsTaskId} onDelete={setDeleteTaskId} className="m-2" /> @@ -278,6 +281,15 @@ const HistoryView = ({ onDone }: HistoryViewProps) => { !open && setDeleteTaskId(null)} open /> )} + {/* Delete checkpoints dialog */} + {deleteCheckpointsTaskId && ( + !open && setDeleteCheckpointsTaskId(null)} + open + /> + )} + {/* Batch delete dialog */} {showBatchDeleteDialog && ( void + onDeleteCheckpoints?: (taskId: string) => void onDelete?: (taskId: string) => void className?: string } @@ -29,6 +30,7 @@ const TaskItem = ({ isSelectionMode = false, isSelected = false, onToggleSelection, + onDeleteCheckpoints, onDelete, className, }: TaskItemProps) => { @@ -86,6 +88,7 @@ const TaskItem = ({ item={item} variant={variant} isSelectionMode={isSelectionMode} + onDeleteCheckpoints={onDeleteCheckpoints} onDelete={onDelete} /> diff --git a/webview-ui/src/components/history/TaskItemFooter.tsx b/webview-ui/src/components/history/TaskItemFooter.tsx index a79467758cc..b952e064b35 100644 --- a/webview-ui/src/components/history/TaskItemFooter.tsx +++ b/webview-ui/src/components/history/TaskItemFooter.tsx @@ -3,6 +3,7 @@ import type { HistoryItem } from "@roo-code/types" import { formatTimeAgo } from "@/utils/format" import { CopyButton } from "./CopyButton" import { ExportButton } from "./ExportButton" +import { DeleteCheckpointsButton } from "./DeleteCheckpointsButton" import { DeleteButton } from "./DeleteButton" import { StandardTooltip } from "../ui/standard-tooltip" @@ -10,10 +11,17 @@ export interface TaskItemFooterProps { item: HistoryItem variant: "compact" | "full" isSelectionMode?: boolean + onDeleteCheckpoints?: (taskId: string) => void onDelete?: (taskId: string) => void } -const TaskItemFooter: React.FC = ({ item, variant, isSelectionMode = false, onDelete }) => { +const TaskItemFooter: React.FC = ({ + item, + variant, + isSelectionMode = false, + onDeleteCheckpoints, + onDelete, +}) => { return (
@@ -35,6 +43,9 @@ const TaskItemFooter: React.FC = ({ item, variant, isSelect
{variant === "full" && } + {onDeleteCheckpoints && ( + + )} {onDelete && }
)} diff --git a/webview-ui/src/i18n/locales/ca/history.json b/webview-ui/src/i18n/locales/ca/history.json index 2edecbde047..f4b5a8684f4 100644 --- a/webview-ui/src/i18n/locales/ca/history.json +++ b/webview-ui/src/i18n/locales/ca/history.json @@ -15,6 +15,9 @@ "mostTokens": "Més tokens", "mostRelevant": "Més rellevants", "deleteTaskTitle": "Eliminar tasca (Maj + Clic per ometre confirmació)", + "deleteCheckpointsTitle": "Eliminar punts de control (Maj + Clic per ometre confirmació)", + "deleteCheckpoints": "Eliminar punts de control", + "deleteCheckpointsMessage": "Esteu segur que voleu eliminar tots els punts de control d'aquesta tasca? Això eliminarà la possibilitat de restaurar estats anteriors però mantindrà l'historial de la tasca.", "tokensLabel": "Tokens:", "cacheLabel": "Cau:", "apiCostLabel": "Cost d'API:", diff --git a/webview-ui/src/i18n/locales/de/history.json b/webview-ui/src/i18n/locales/de/history.json index 0ac423aff6b..7de82e5cd80 100644 --- a/webview-ui/src/i18n/locales/de/history.json +++ b/webview-ui/src/i18n/locales/de/history.json @@ -15,6 +15,9 @@ "mostTokens": "Meiste Tokens", "mostRelevant": "Relevanteste", "deleteTaskTitle": "Aufgabe löschen (Umschalt + Klick um Bestätigung zu überspringen)", + "deleteCheckpointsTitle": "Checkpoints löschen (Umschalt + Klick um Bestätigung zu überspringen)", + "deleteCheckpoints": "Checkpoints löschen", + "deleteCheckpointsMessage": "Bist du sicher, dass du alle Checkpoints für diese Aufgabe löschen möchtest? Dies entfernt die Möglichkeit, frühere Zustände wiederherzustellen, aber der Aufgabenverlauf bleibt erhalten.", "tokensLabel": "Tokens:", "cacheLabel": "Cache:", "apiCostLabel": "API-Kosten:", diff --git a/webview-ui/src/i18n/locales/en/history.json b/webview-ui/src/i18n/locales/en/history.json index 608be93140c..65a939f7e66 100644 --- a/webview-ui/src/i18n/locales/en/history.json +++ b/webview-ui/src/i18n/locales/en/history.json @@ -11,10 +11,13 @@ "mostTokens": "Most Tokens", "mostRelevant": "Most Relevant", "deleteTaskTitle": "Delete Task (Shift + Click to skip confirmation)", + "deleteCheckpointsTitle": "Delete Checkpoints (Shift + Click to skip confirmation)", "copyPrompt": "Copy Prompt", "exportTask": "Export Task", "deleteTask": "Delete Task", "deleteTaskMessage": "Are you sure you want to delete this task? This action cannot be undone.", + "deleteCheckpoints": "Delete Checkpoints", + "deleteCheckpointsMessage": "Are you sure you want to delete all checkpoints for this task? This will remove the ability to restore previous states but keep your task history.", "cancel": "Cancel", "delete": "Delete", "exitSelection": "Exit Selection", diff --git a/webview-ui/src/i18n/locales/es/history.json b/webview-ui/src/i18n/locales/es/history.json index 2d0c45d7507..ae8f0bb9971 100644 --- a/webview-ui/src/i18n/locales/es/history.json +++ b/webview-ui/src/i18n/locales/es/history.json @@ -15,6 +15,9 @@ "mostTokens": "Más tokens", "mostRelevant": "Más relevantes", "deleteTaskTitle": "Eliminar tarea (Shift + Clic para omitir confirmación)", + "deleteCheckpointsTitle": "Eliminar puntos de control (Shift + Clic para omitir confirmación)", + "deleteCheckpoints": "Eliminar puntos de control", + "deleteCheckpointsMessage": "¿Estás seguro de que quieres eliminar todos los puntos de control de esta tarea? Esto eliminará la posibilidad de restaurar estados anteriores pero mantendrá el historial de la tarea.", "tokensLabel": "Tokens:", "cacheLabel": "Caché:", "apiCostLabel": "Costo de API:", diff --git a/webview-ui/src/i18n/locales/fr/history.json b/webview-ui/src/i18n/locales/fr/history.json index a4448edea15..e7fa6c7c747 100644 --- a/webview-ui/src/i18n/locales/fr/history.json +++ b/webview-ui/src/i18n/locales/fr/history.json @@ -15,6 +15,9 @@ "mostTokens": "Plus de tokens", "mostRelevant": "Plus pertinentes", "deleteTaskTitle": "Supprimer la tâche (Maj + Clic pour ignorer la confirmation)", + "deleteCheckpointsTitle": "Supprimer les points de contrôle (Maj + Clic pour ignorer la confirmation)", + "deleteCheckpoints": "Supprimer les points de contrôle", + "deleteCheckpointsMessage": "Êtes-vous sûr de vouloir supprimer tous les points de contrôle de cette tâche ? Cela supprimera la possibilité de restaurer les états précédents mais conservera l'historique de la tâche.", "tokensLabel": "Tokens:", "cacheLabel": "Cache:", "apiCostLabel": "Coût API:", diff --git a/webview-ui/src/i18n/locales/hi/history.json b/webview-ui/src/i18n/locales/hi/history.json index 2a4b3369b33..157717886b4 100644 --- a/webview-ui/src/i18n/locales/hi/history.json +++ b/webview-ui/src/i18n/locales/hi/history.json @@ -11,6 +11,9 @@ "mostTokens": "सबसे अधिक टोकन", "mostRelevant": "सबसे प्रासंगिक", "deleteTaskTitle": "कार्य हटाएं (Shift + क्लिक पुष्टि छोड़ने के लिए)", + "deleteCheckpointsTitle": "चेकपॉइंट हटाएं (Shift + क्लिक पुष्टि छोड़ने के लिए)", + "deleteCheckpoints": "चेकपॉइंट हटाएं", + "deleteCheckpointsMessage": "क्या आप वाकई इस कार्य के सभी चेकपॉइंट हटाना चाहते हैं? इससे पिछली स्थितियों को पुनर्स्थापित करने की क्षमता समाप्त हो जाएगी लेकिन कार्य इतिहास बना रहेगा।", "copyPrompt": "प्रॉम्प्ट कॉपी करें", "exportTask": "कार्य निर्यात करें", "deleteTask": "कार्य हटाएं", diff --git a/webview-ui/src/i18n/locales/id/history.json b/webview-ui/src/i18n/locales/id/history.json index 4767b109945..78e7e48251a 100644 --- a/webview-ui/src/i18n/locales/id/history.json +++ b/webview-ui/src/i18n/locales/id/history.json @@ -15,6 +15,9 @@ "mostTokens": "Token Terbanyak", "mostRelevant": "Paling Relevan", "deleteTaskTitle": "Hapus Tugas (Shift + Klik untuk lewati konfirmasi)", + "deleteCheckpointsTitle": "Hapus Checkpoint (Shift + Klik untuk lewati konfirmasi)", + "deleteCheckpoints": "Hapus Checkpoint", + "deleteCheckpointsMessage": "Apakah Anda yakin ingin menghapus semua checkpoint untuk tugas ini? Ini akan menghapus kemampuan untuk memulihkan status sebelumnya tetapi tetap mempertahankan riwayat tugas.", "tokensLabel": "Token:", "cacheLabel": "Cache:", "apiCostLabel": "Biaya API:", diff --git a/webview-ui/src/i18n/locales/it/history.json b/webview-ui/src/i18n/locales/it/history.json index 9efe4b97c55..20a28fd4ebb 100644 --- a/webview-ui/src/i18n/locales/it/history.json +++ b/webview-ui/src/i18n/locales/it/history.json @@ -11,6 +11,9 @@ "mostTokens": "Più token", "mostRelevant": "Più rilevanti", "deleteTaskTitle": "Elimina attività (Shift + Clic per saltare conferma)", + "deleteCheckpointsTitle": "Elimina checkpoint (Shift + Clic per saltare conferma)", + "deleteCheckpoints": "Elimina checkpoint", + "deleteCheckpointsMessage": "Sei sicuro di voler eliminare tutti i checkpoint per questa attività? Questo rimuoverà la possibilità di ripristinare gli stati precedenti ma manterrà la cronologia dell'attività.", "copyPrompt": "Copia prompt", "exportTask": "Esporta attività", "deleteTask": "Elimina attività", diff --git a/webview-ui/src/i18n/locales/ja/history.json b/webview-ui/src/i18n/locales/ja/history.json index f414a3201c6..6258ed76e07 100644 --- a/webview-ui/src/i18n/locales/ja/history.json +++ b/webview-ui/src/i18n/locales/ja/history.json @@ -11,6 +11,9 @@ "mostTokens": "最多トークン", "mostRelevant": "最も関連性の高い", "deleteTaskTitle": "タスクを削除(Shift + クリックで確認をスキップ)", + "deleteCheckpointsTitle": "チェックポイントを削除(Shift + クリックで確認をスキップ)", + "deleteCheckpoints": "チェックポイントを削除", + "deleteCheckpointsMessage": "このタスクのすべてのチェックポイントを削除してもよろしいですか?これにより以前の状態を復元する機能が削除されますが、タスク履歴は保持されます。", "copyPrompt": "プロンプトをコピー", "exportTask": "タスクをエクスポート", "deleteTask": "タスクを削除", diff --git a/webview-ui/src/i18n/locales/ko/history.json b/webview-ui/src/i18n/locales/ko/history.json index 3947319e5f1..e8e5585ae84 100644 --- a/webview-ui/src/i18n/locales/ko/history.json +++ b/webview-ui/src/i18n/locales/ko/history.json @@ -11,6 +11,9 @@ "mostTokens": "토큰 많은순", "mostRelevant": "관련성 높은순", "deleteTaskTitle": "작업 삭제 (Shift + 클릭으로 확인 생략)", + "deleteCheckpointsTitle": "체크포인트 삭제 (Shift + 클릭으로 확인 생략)", + "deleteCheckpoints": "체크포인트 삭제", + "deleteCheckpointsMessage": "이 작업의 모든 체크포인트를 삭제하시겠습니까? 이전 상태를 복원하는 기능은 제거되지만 작업 기록은 유지됩니다.", "copyPrompt": "프롬프트 복사", "exportTask": "작업 내보내기", "deleteTask": "작업 삭제", diff --git a/webview-ui/src/i18n/locales/nl/history.json b/webview-ui/src/i18n/locales/nl/history.json index d99b64565e4..8d96d0fb9cf 100644 --- a/webview-ui/src/i18n/locales/nl/history.json +++ b/webview-ui/src/i18n/locales/nl/history.json @@ -11,6 +11,9 @@ "mostTokens": "Meeste tokens", "mostRelevant": "Meest relevant", "deleteTaskTitle": "Taak verwijderen (Shift + Klik om bevestiging over te slaan)", + "deleteCheckpointsTitle": "Checkpoints verwijderen (Shift + Klik om bevestiging over te slaan)", + "deleteCheckpoints": "Checkpoints verwijderen", + "deleteCheckpointsMessage": "Weet u zeker dat u alle checkpoints voor deze taak wilt verwijderen? Dit verwijdert de mogelijkheid om eerdere staten te herstellen, maar behoudt de taakgeschiedenis.", "copyPrompt": "Prompt kopiëren", "exportTask": "Taak exporteren", "deleteTask": "Taak verwijderen", diff --git a/webview-ui/src/i18n/locales/pl/history.json b/webview-ui/src/i18n/locales/pl/history.json index d7f8c0610ac..53dd9e63f1b 100644 --- a/webview-ui/src/i18n/locales/pl/history.json +++ b/webview-ui/src/i18n/locales/pl/history.json @@ -11,6 +11,9 @@ "mostTokens": "Najwięcej tokenów", "mostRelevant": "Najbardziej trafne", "deleteTaskTitle": "Usuń zadanie (Shift + Klik, aby pominąć potwierdzenie)", + "deleteCheckpointsTitle": "Usuń punkty kontrolne (Shift + Klik, aby pominąć potwierdzenie)", + "deleteCheckpoints": "Usuń punkty kontrolne", + "deleteCheckpointsMessage": "Czy na pewno chcesz usunąć wszystkie punkty kontrolne dla tego zadania? Spowoduje to usunięcie możliwości przywracania poprzednich stanów, ale zachowa historię zadania.", "copyPrompt": "Kopiuj prompt", "exportTask": "Eksportuj zadanie", "deleteTask": "Usuń zadanie", diff --git a/webview-ui/src/i18n/locales/pt-BR/history.json b/webview-ui/src/i18n/locales/pt-BR/history.json index c2fcdffe8d6..b07c1b9002a 100644 --- a/webview-ui/src/i18n/locales/pt-BR/history.json +++ b/webview-ui/src/i18n/locales/pt-BR/history.json @@ -11,6 +11,9 @@ "mostTokens": "Mais tokens", "mostRelevant": "Mais relevantes", "deleteTaskTitle": "Excluir tarefa (Shift + Clique para pular confirmação)", + "deleteCheckpointsTitle": "Excluir pontos de controle (Shift + Clique para pular confirmação)", + "deleteCheckpoints": "Excluir pontos de controle", + "deleteCheckpointsMessage": "Tem certeza de que deseja excluir todos os pontos de controle desta tarefa? Isso removerá a capacidade de restaurar estados anteriores, mas manterá o histórico da tarefa.", "copyPrompt": "Copiar prompt", "exportTask": "Exportar tarefa", "deleteTask": "Excluir tarefa", diff --git a/webview-ui/src/i18n/locales/ru/history.json b/webview-ui/src/i18n/locales/ru/history.json index 099f8d918f8..0f21b7afac0 100644 --- a/webview-ui/src/i18n/locales/ru/history.json +++ b/webview-ui/src/i18n/locales/ru/history.json @@ -11,6 +11,9 @@ "mostTokens": "Больше всего токенов", "mostRelevant": "Наиболее релевантные", "deleteTaskTitle": "Удалить задачу (Shift + клик для пропуска подтверждения)", + "deleteCheckpointsTitle": "Удалить контрольные точки (Shift + клик для пропуска подтверждения)", + "deleteCheckpoints": "Удалить контрольные точки", + "deleteCheckpointsMessage": "Вы уверены, что хотите удалить все контрольные точки для этой задачи? Это удалит возможность восстановления предыдущих состояний, но сохранит историю задачи.", "copyPrompt": "Скопировать запрос", "exportTask": "Экспортировать задачу", "deleteTask": "Удалить задачу", diff --git a/webview-ui/src/i18n/locales/tr/history.json b/webview-ui/src/i18n/locales/tr/history.json index 60ff183113d..adaea220491 100644 --- a/webview-ui/src/i18n/locales/tr/history.json +++ b/webview-ui/src/i18n/locales/tr/history.json @@ -11,6 +11,9 @@ "mostTokens": "En Çok Token", "mostRelevant": "En İlgili", "deleteTaskTitle": "Görevi Sil (Onayı atlamak için Shift + Tıkla)", + "deleteCheckpointsTitle": "Kontrol Noktalarını Sil (Onayı atlamak için Shift + Tıkla)", + "deleteCheckpoints": "Kontrol Noktalarını Sil", + "deleteCheckpointsMessage": "Bu görevin tüm kontrol noktalarını silmek istediğinizden emin misiniz? Bu, önceki durumları geri yükleme yeteneğini kaldıracak ancak görev geçmişini koruyacaktır.", "copyPrompt": "Promptu Kopyala", "exportTask": "Görevi Dışa Aktar", "deleteTask": "Görevi Sil", diff --git a/webview-ui/src/i18n/locales/vi/history.json b/webview-ui/src/i18n/locales/vi/history.json index cac72720334..86b72c26d67 100644 --- a/webview-ui/src/i18n/locales/vi/history.json +++ b/webview-ui/src/i18n/locales/vi/history.json @@ -11,6 +11,9 @@ "mostTokens": "Nhiều token nhất", "mostRelevant": "Liên quan nhất", "deleteTaskTitle": "Xóa nhiệm vụ (Shift + Click để bỏ qua xác nhận)", + "deleteCheckpointsTitle": "Xóa điểm kiểm tra (Shift + Click để bỏ qua xác nhận)", + "deleteCheckpoints": "Xóa điểm kiểm tra", + "deleteCheckpointsMessage": "Bạn có chắc chắn muốn xóa tất cả điểm kiểm tra cho nhiệm vụ này không? Điều này sẽ xóa khả năng khôi phục các trạng thái trước đó nhưng giữ lại lịch sử nhiệm vụ.", "copyPrompt": "Sao chép lời nhắc", "exportTask": "Xuất nhiệm vụ", "deleteTask": "Xóa nhiệm vụ", diff --git a/webview-ui/src/i18n/locales/zh-CN/history.json b/webview-ui/src/i18n/locales/zh-CN/history.json index b88eef3636e..5c81a25dcad 100644 --- a/webview-ui/src/i18n/locales/zh-CN/history.json +++ b/webview-ui/src/i18n/locales/zh-CN/history.json @@ -11,6 +11,9 @@ "mostTokens": "最多 Token", "mostRelevant": "最相关", "deleteTaskTitle": "删除任务(Shift + 点击跳过确认)", + "deleteCheckpointsTitle": "删除检查点(Shift + 点击跳过确认)", + "deleteCheckpoints": "删除检查点", + "deleteCheckpointsMessage": "您确定要删除此任务的所有检查点吗?这将移除恢复先前状态的功能,但会保留任务历史记录。", "copyPrompt": "复制提示词", "exportTask": "导出任务", "deleteTask": "删除任务", diff --git a/webview-ui/src/i18n/locales/zh-TW/history.json b/webview-ui/src/i18n/locales/zh-TW/history.json index f53bb6aec25..3aad9d877da 100644 --- a/webview-ui/src/i18n/locales/zh-TW/history.json +++ b/webview-ui/src/i18n/locales/zh-TW/history.json @@ -11,6 +11,9 @@ "mostTokens": "最多 Token", "mostRelevant": "最相關", "deleteTaskTitle": "刪除工作(按住 Shift 並點選可跳過確認)", + "deleteCheckpointsTitle": "刪除檢查點(按住 Shift 並點選可跳過確認)", + "deleteCheckpoints": "刪除檢查點", + "deleteCheckpointsMessage": "您確定要刪除此工作的所有檢查點嗎?這將移除還原先前狀態的功能,但會保留工作歷史記錄。", "copyPrompt": "複製提示詞", "exportTask": "匯出工作", "deleteTask": "刪除工作",