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 86d8b2ddbb..184dfabdc5 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 33fa12ca78..72a65be22b 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 dbeb380d16..1ecae838e6 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 0000000000..893ae6d413 --- /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 0000000000..a08bae5de7 --- /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 d8ee431593..346f958dce 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 a79467758c..b952e064b3 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 2edecbde04..f4b5a8684f 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 0ac423aff6..7de82e5cd8 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 608be93140..65a939f7e6 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 2d0c45d750..ae8f0bb997 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 a4448edea1..e7fa6c7c74 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 2a4b3369b3..157717886b 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 4767b10994..78e7e48251 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 9efe4b97c5..20a28fd4eb 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 f414a3201c..6258ed76e0 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 3947319e5f..e8e5585ae8 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 d99b64565e..8d96d0fb9c 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 d7f8c0610a..53dd9e63f1 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 c2fcdffe8d..b07c1b9002 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 099f8d918f..0f21b7afac 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 60ff183113..adaea22049 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 cac7272033..86b72c26d6 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 b88eef3636..5c81a25dca 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 f53bb6aec2..3aad9d877d 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": "刪除工作",