mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-07 08:26:51 +00:00
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
This commit is contained in:
parent
6608ed618a
commit
471c194a29
26 changed files with 255 additions and 1 deletions
|
|
@ -385,6 +385,7 @@ export interface WebviewMessage {
|
|||
| "shareCurrentTask"
|
||||
| "showTaskWithId"
|
||||
| "deleteTaskWithId"
|
||||
| "deleteTaskCheckpointsWithId"
|
||||
| "exportTaskWithId"
|
||||
| "importSettings"
|
||||
| "exportSettings"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<StandardTooltip content={t("history:deleteCheckpointsTitle")}>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
data-testid="delete-checkpoints-button"
|
||||
onClick={handleDeleteCheckpointsClick}
|
||||
className="opacity-70">
|
||||
<span className="codicon codicon-discard size-4 align-middle text-vscode-descriptionForeground" />
|
||||
</Button>
|
||||
</StandardTooltip>
|
||||
)
|
||||
}
|
||||
|
|
@ -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 (
|
||||
<AlertDialog {...props}>
|
||||
<AlertDialogContent onEscapeKeyDown={() => onOpenChange?.(false)}>
|
||||
<AlertDialogHeader>
|
||||
<AlertDialogTitle>{t("history:deleteCheckpoints")}</AlertDialogTitle>
|
||||
<AlertDialogDescription>{t("history:deleteCheckpointsMessage")}</AlertDialogDescription>
|
||||
</AlertDialogHeader>
|
||||
<AlertDialogFooter>
|
||||
<AlertDialogCancel asChild>
|
||||
<Button variant="secondary">{t("history:cancel")}</Button>
|
||||
</AlertDialogCancel>
|
||||
<AlertDialogAction asChild>
|
||||
<Button variant="destructive" onClick={onDeleteCheckpoints}>
|
||||
{t("history:deleteCheckpointsConfirm")}
|
||||
</Button>
|
||||
</AlertDialogAction>
|
||||
</AlertDialogFooter>
|
||||
</AlertDialogContent>
|
||||
</AlertDialog>
|
||||
)
|
||||
}
|
||||
|
|
@ -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<string | null>(null)
|
||||
const [deleteCheckpointsTaskId, setDeleteCheckpointsTaskId] = useState<string | null>(null)
|
||||
const [isSelectionMode, setIsSelectionMode] = useState(false)
|
||||
const [selectedTaskIds, setSelectedTaskIds] = useState<string[]>([])
|
||||
const [showBatchDeleteDialog, setShowBatchDeleteDialog] = useState<boolean>(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) => {
|
|||
<DeleteTaskDialog taskId={deleteTaskId} onOpenChange={(open) => !open && setDeleteTaskId(null)} open />
|
||||
)}
|
||||
|
||||
{/* Delete checkpoints dialog */}
|
||||
{deleteCheckpointsTaskId && (
|
||||
<DeleteCheckpointsDialog
|
||||
taskId={deleteCheckpointsTaskId}
|
||||
onOpenChange={(open) => !open && setDeleteCheckpointsTaskId(null)}
|
||||
open
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Batch delete dialog */}
|
||||
{showBatchDeleteDialog && (
|
||||
<BatchDeleteTaskDialog
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ interface TaskItemProps {
|
|||
isSelectionMode?: boolean
|
||||
isSelected?: boolean
|
||||
onToggleSelection?: (taskId: string, isSelected: boolean) => 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}
|
||||
/>
|
||||
|
||||
|
|
|
|||
|
|
@ -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<TaskItemFooterProps> = ({ item, variant, isSelectionMode = false, onDelete }) => {
|
||||
const TaskItemFooter: React.FC<TaskItemFooterProps> = ({
|
||||
item,
|
||||
variant,
|
||||
isSelectionMode = false,
|
||||
onDeleteCheckpoints,
|
||||
onDelete,
|
||||
}) => {
|
||||
return (
|
||||
<div className="text-xs text-vscode-descriptionForeground flex justify-between items-center">
|
||||
<div className="flex gap-1 items-center text-vscode-descriptionForeground/60">
|
||||
|
|
@ -35,6 +43,9 @@ const TaskItemFooter: React.FC<TaskItemFooterProps> = ({ item, variant, isSelect
|
|||
<div className="flex flex-row gap-0 -mx-2 items-center text-vscode-descriptionForeground/60 hover:text-vscode-descriptionForeground">
|
||||
<CopyButton itemTask={item.task} />
|
||||
{variant === "full" && <ExportButton itemId={item.id} />}
|
||||
{onDeleteCheckpoints && (
|
||||
<DeleteCheckpointsButton itemId={item.id} onDeleteCheckpoints={onDeleteCheckpoints} />
|
||||
)}
|
||||
{onDelete && <DeleteButton itemId={item.id} onDelete={onDelete} />}
|
||||
</div>
|
||||
)}
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/ca/history.json
generated
3
webview-ui/src/i18n/locales/ca/history.json
generated
|
|
@ -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:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/de/history.json
generated
3
webview-ui/src/i18n/locales/de/history.json
generated
|
|
@ -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:",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/es/history.json
generated
3
webview-ui/src/i18n/locales/es/history.json
generated
|
|
@ -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:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/fr/history.json
generated
3
webview-ui/src/i18n/locales/fr/history.json
generated
|
|
@ -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:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/hi/history.json
generated
3
webview-ui/src/i18n/locales/hi/history.json
generated
|
|
@ -11,6 +11,9 @@
|
|||
"mostTokens": "सबसे अधिक टोकन",
|
||||
"mostRelevant": "सबसे प्रासंगिक",
|
||||
"deleteTaskTitle": "कार्य हटाएं (Shift + क्लिक पुष्टि छोड़ने के लिए)",
|
||||
"deleteCheckpointsTitle": "चेकपॉइंट हटाएं (Shift + क्लिक पुष्टि छोड़ने के लिए)",
|
||||
"deleteCheckpoints": "चेकपॉइंट हटाएं",
|
||||
"deleteCheckpointsMessage": "क्या आप वाकई इस कार्य के सभी चेकपॉइंट हटाना चाहते हैं? इससे पिछली स्थितियों को पुनर्स्थापित करने की क्षमता समाप्त हो जाएगी लेकिन कार्य इतिहास बना रहेगा।",
|
||||
"copyPrompt": "प्रॉम्प्ट कॉपी करें",
|
||||
"exportTask": "कार्य निर्यात करें",
|
||||
"deleteTask": "कार्य हटाएं",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/id/history.json
generated
3
webview-ui/src/i18n/locales/id/history.json
generated
|
|
@ -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:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/it/history.json
generated
3
webview-ui/src/i18n/locales/it/history.json
generated
|
|
@ -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à",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/ja/history.json
generated
3
webview-ui/src/i18n/locales/ja/history.json
generated
|
|
@ -11,6 +11,9 @@
|
|||
"mostTokens": "最多トークン",
|
||||
"mostRelevant": "最も関連性の高い",
|
||||
"deleteTaskTitle": "タスクを削除(Shift + クリックで確認をスキップ)",
|
||||
"deleteCheckpointsTitle": "チェックポイントを削除(Shift + クリックで確認をスキップ)",
|
||||
"deleteCheckpoints": "チェックポイントを削除",
|
||||
"deleteCheckpointsMessage": "このタスクのすべてのチェックポイントを削除してもよろしいですか?これにより以前の状態を復元する機能が削除されますが、タスク履歴は保持されます。",
|
||||
"copyPrompt": "プロンプトをコピー",
|
||||
"exportTask": "タスクをエクスポート",
|
||||
"deleteTask": "タスクを削除",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/ko/history.json
generated
3
webview-ui/src/i18n/locales/ko/history.json
generated
|
|
@ -11,6 +11,9 @@
|
|||
"mostTokens": "토큰 많은순",
|
||||
"mostRelevant": "관련성 높은순",
|
||||
"deleteTaskTitle": "작업 삭제 (Shift + 클릭으로 확인 생략)",
|
||||
"deleteCheckpointsTitle": "체크포인트 삭제 (Shift + 클릭으로 확인 생략)",
|
||||
"deleteCheckpoints": "체크포인트 삭제",
|
||||
"deleteCheckpointsMessage": "이 작업의 모든 체크포인트를 삭제하시겠습니까? 이전 상태를 복원하는 기능은 제거되지만 작업 기록은 유지됩니다.",
|
||||
"copyPrompt": "프롬프트 복사",
|
||||
"exportTask": "작업 내보내기",
|
||||
"deleteTask": "작업 삭제",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/nl/history.json
generated
3
webview-ui/src/i18n/locales/nl/history.json
generated
|
|
@ -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",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/pl/history.json
generated
3
webview-ui/src/i18n/locales/pl/history.json
generated
|
|
@ -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",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/pt-BR/history.json
generated
3
webview-ui/src/i18n/locales/pt-BR/history.json
generated
|
|
@ -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",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/ru/history.json
generated
3
webview-ui/src/i18n/locales/ru/history.json
generated
|
|
@ -11,6 +11,9 @@
|
|||
"mostTokens": "Больше всего токенов",
|
||||
"mostRelevant": "Наиболее релевантные",
|
||||
"deleteTaskTitle": "Удалить задачу (Shift + клик для пропуска подтверждения)",
|
||||
"deleteCheckpointsTitle": "Удалить контрольные точки (Shift + клик для пропуска подтверждения)",
|
||||
"deleteCheckpoints": "Удалить контрольные точки",
|
||||
"deleteCheckpointsMessage": "Вы уверены, что хотите удалить все контрольные точки для этой задачи? Это удалит возможность восстановления предыдущих состояний, но сохранит историю задачи.",
|
||||
"copyPrompt": "Скопировать запрос",
|
||||
"exportTask": "Экспортировать задачу",
|
||||
"deleteTask": "Удалить задачу",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/tr/history.json
generated
3
webview-ui/src/i18n/locales/tr/history.json
generated
|
|
@ -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",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/vi/history.json
generated
3
webview-ui/src/i18n/locales/vi/history.json
generated
|
|
@ -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ụ",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/zh-CN/history.json
generated
3
webview-ui/src/i18n/locales/zh-CN/history.json
generated
|
|
@ -11,6 +11,9 @@
|
|||
"mostTokens": "最多 Token",
|
||||
"mostRelevant": "最相关",
|
||||
"deleteTaskTitle": "删除任务(Shift + 点击跳过确认)",
|
||||
"deleteCheckpointsTitle": "删除检查点(Shift + 点击跳过确认)",
|
||||
"deleteCheckpoints": "删除检查点",
|
||||
"deleteCheckpointsMessage": "您确定要删除此任务的所有检查点吗?这将移除恢复先前状态的功能,但会保留任务历史记录。",
|
||||
"copyPrompt": "复制提示词",
|
||||
"exportTask": "导出任务",
|
||||
"deleteTask": "删除任务",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/zh-TW/history.json
generated
3
webview-ui/src/i18n/locales/zh-TW/history.json
generated
|
|
@ -11,6 +11,9 @@
|
|||
"mostTokens": "最多 Token",
|
||||
"mostRelevant": "最相關",
|
||||
"deleteTaskTitle": "刪除工作(按住 Shift 並點選可跳過確認)",
|
||||
"deleteCheckpointsTitle": "刪除檢查點(按住 Shift 並點選可跳過確認)",
|
||||
"deleteCheckpoints": "刪除檢查點",
|
||||
"deleteCheckpointsMessage": "您確定要刪除此工作的所有檢查點嗎?這將移除還原先前狀態的功能,但會保留工作歷史記錄。",
|
||||
"copyPrompt": "複製提示詞",
|
||||
"exportTask": "匯出工作",
|
||||
"deleteTask": "刪除工作",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue