diff --git a/src/core/webview/__tests__/ClineProvider.spec.ts b/src/core/webview/__tests__/ClineProvider.spec.ts index 0b128aeaec..8c60467b55 100644 --- a/src/core/webview/__tests__/ClineProvider.spec.ts +++ b/src/core/webview/__tests__/ClineProvider.spec.ts @@ -145,6 +145,7 @@ vi.mock("vscode", () => ({ }, window: { showInformationMessage: vi.fn(), + showWarningMessage: vi.fn(), showErrorMessage: vi.fn(), }, workspace: { @@ -1289,14 +1290,14 @@ describe("ClineProvider", () => { describe("editMessage", () => { beforeEach(async () => { - // Mock window.showInformationMessage - ;(vscode.window.showInformationMessage as any) = vi.fn() + // Mock window.showWarningMessage + ;(vscode.window.showWarningMessage as any) = vi.fn() await provider.resolveWebviewView(mockWebviewView) }) - test('handles "No, just edit this one" edit correctly', async () => { - // Mock user selecting "No, just edit this one" - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + test('handles "Proceed" edit correctly', async () => { + // Mock user selecting "Proceed" - need to use the localized string key + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") // Setup mock messages const mockMessages = [ @@ -1345,20 +1346,13 @@ describe("ClineProvider", () => { editedMessageContent: "Edited message content", }) - // Verify correct messages were kept - expect(mockCline.overwriteClineMessages).toHaveBeenCalledWith([ - mockMessages[0], - mockMessages[1], - mockMessages[4], - mockMessages[5], - ]) + // Verify correct messages were kept (only messages before the edited one) + expect(mockCline.overwriteClineMessages).toHaveBeenCalledWith([mockMessages[0], mockMessages[1]]) - // Verify correct API messages were kept + // Verify correct API messages were kept (only messages before the edited one) expect(mockCline.overwriteApiConversationHistory).toHaveBeenCalledWith([ mockApiHistory[0], mockApiHistory[1], - mockApiHistory[4], - mockApiHistory[5], ]) // Verify handleWebviewAskResponse was called with the edited content @@ -1368,103 +1362,6 @@ describe("ClineProvider", () => { undefined, ) }) - - test('handles "Yes" (edit and delete subsequent) correctly', async () => { - // Mock user selecting "Yes" - ;(vscode.window.showInformationMessage as any).mockResolvedValue( - "confirmation.edit_this_and_delete_subsequent", - ) - - // Setup mock messages - const mockMessages = [ - { ts: 1000, type: "say", say: "user_feedback" }, - { ts: 2000, type: "say", say: "text", value: 3000 }, // Message to edit - { ts: 3000, type: "say", say: "user_feedback" }, - { ts: 4000, type: "say", say: "user_feedback" }, - ] as ClineMessage[] - - const mockApiHistory = [ - { ts: 1000 }, - { ts: 2000 }, - { ts: 3000 }, - { ts: 4000 }, - ] as (Anthropic.MessageParam & { - ts?: number - })[] - - // Setup Cline instance with auto-mock from the top of the file - const mockCline = new Task(defaultTaskOptions) // Create a new mocked instance - mockCline.clineMessages = mockMessages - mockCline.apiConversationHistory = mockApiHistory - - // Explicitly mock the overwrite methods since they're not being called in the tests - mockCline.overwriteClineMessages = vi.fn() - mockCline.overwriteApiConversationHistory = vi.fn() - mockCline.handleWebviewAskResponse = vi.fn() - - await provider.addClineToStack(mockCline) - - // Mock getTaskWithId - ;(provider as any).getTaskWithId = vi.fn().mockResolvedValue({ - historyItem: { id: "test-task-id" }, - }) - - // Trigger message edit - // Get the message handler function that was registered with the webview - const messageHandler = (mockWebviewView.webview.onDidReceiveMessage as any).mock.calls[0][0] - - // Call the message handler with a submitEditedMessage message - await messageHandler({ - type: "submitEditedMessage", - value: 3000, - editedMessageContent: "Edited message content", - }) - - // Verify only messages before the edited message were kept - expect(mockCline.overwriteClineMessages).toHaveBeenCalledWith([mockMessages[0]]) - - // Verify only API messages before the edited message were kept - expect(mockCline.overwriteApiConversationHistory).toHaveBeenCalledWith([mockApiHistory[0]]) - - // Verify handleWebviewAskResponse was called with the edited content - expect(mockCline.handleWebviewAskResponse).toHaveBeenCalledWith( - "messageResponse", - "Edited message content", - undefined, - ) - }) - - test("handles Cancel correctly", async () => { - // Mock user selecting "Cancel" - ;(vscode.window.showInformationMessage as any).mockResolvedValue("Cancel") - - // Setup Cline instance with auto-mock from the top of the file - const mockCline = new Task(defaultTaskOptions) // Create a new mocked instance - mockCline.clineMessages = [{ ts: 1000 }, { ts: 2000 }] as ClineMessage[] - mockCline.apiConversationHistory = [{ ts: 1000 }, { ts: 2000 }] as (Anthropic.MessageParam & { - ts?: number - })[] - - // Explicitly mock the overwrite methods since they're not being called in the tests - mockCline.overwriteClineMessages = vi.fn() - mockCline.overwriteApiConversationHistory = vi.fn() - mockCline.handleWebviewAskResponse = vi.fn() - - await provider.addClineToStack(mockCline) - - // Trigger message edit - const messageHandler = (mockWebviewView.webview.onDidReceiveMessage as any).mock.calls[0][0] - await messageHandler({ - type: "submitEditedMessage", - value: 2000, - editedMessageContent: "Edited message content", - }) - - // Verify no messages were edited or deleted - expect(mockCline.overwriteClineMessages).not.toHaveBeenCalled() - expect(mockCline.overwriteApiConversationHistory).not.toHaveBeenCalled() - expect(mockCline.handleWebviewAskResponse).not.toHaveBeenCalled() - }) }) describe("getSystemPrompt", () => { @@ -2813,7 +2710,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles editing messages containing images", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") const mockMessages = [ { ts: 1000, type: "say", say: "user_feedback", text: "Original message" }, @@ -2858,7 +2755,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles editing messages with file attachments", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") const mockMessages = [ { ts: 1000, type: "say", say: "user_feedback", text: "Original message" }, @@ -2908,7 +2805,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles network timeout during edit submission", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.proceed") const mockCline = new Task(defaultTaskOptions) mockCline.clineMessages = [ @@ -2940,7 +2837,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles connection drops during edit operation", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") const mockCline = new Task(defaultTaskOptions) mockCline.clineMessages = [ @@ -2979,7 +2876,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles race conditions with simultaneous edits", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") const mockCline = new Task(defaultTaskOptions) mockCline.clineMessages = [ @@ -3043,7 +2940,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles authorization failures during edit", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") const mockCline = new Task(defaultTaskOptions) mockCline.clineMessages = [ @@ -3161,7 +3058,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles edit operations on deleted messages", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") const mockCline = new Task(defaultTaskOptions) mockCline.clineMessages = [ @@ -3187,7 +3084,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) // Should show confirmation dialog but not perform any operations - expect(vscode.window.showInformationMessage).toHaveBeenCalled() + expect(vscode.window.showWarningMessage).toHaveBeenCalled() expect(mockCline.overwriteClineMessages).not.toHaveBeenCalled() expect(mockCline.handleWebviewAskResponse).not.toHaveBeenCalled() }) @@ -3231,7 +3128,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("validates proper cleanup during failed edit operations", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") const mockCline = new Task(defaultTaskOptions) mockCline.clineMessages = [ @@ -3311,7 +3208,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles editing messages with large text content", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") // Create a large message (10KB of text) const largeText = "A".repeat(10000) @@ -3419,7 +3316,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { test("handles user cancellation gracefully", async () => { // Mock user canceling the operation - ;(vscode.window.showInformationMessage as any).mockResolvedValue(undefined) + ;(vscode.window.showWarningMessage as any).mockResolvedValue(undefined) const mockCline = new Task(defaultTaskOptions) mockCline.clineMessages = [ @@ -3485,7 +3382,7 @@ describe("ClineProvider - Comprehensive Edit/Delete Edge Cases", () => { }) test("handles messages with future timestamps", async () => { - ;(vscode.window.showInformationMessage as any).mockResolvedValue("confirmation.edit_just_this_message") + ;(vscode.window.showWarningMessage as any).mockResolvedValue("confirmation.proceed") const futureTimestamp = Date.now() + 100000 // Future timestamp const mockCline = new Task(defaultTaskOptions) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 08dbeabfc1..e1971db79e 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -193,32 +193,23 @@ export const webviewMessageHandler = async ( * Handles message editing operations with user confirmation */ const handleEditOperation = async (messageTs: number, editedContent: string): Promise => { - const options = [ - t("common:confirmation.edit_this_and_delete_subsequent"), - t("common:confirmation.edit_just_this_message"), - ] - - const answer = await vscode.window.showInformationMessage( - t("common:confirmation.edit_message"), + const answer = await vscode.window.showWarningMessage( + t("common:confirmation.edit_warning"), { modal: true }, - ...options, + t("common:confirmation.proceed"), ) - // Only proceed if user selected one of the options and we have a current cline - if (answer && options.includes(answer) && provider.getCurrentCline()) { + // Only proceed if user selected "Proceed" and we have a current cline + if (answer === t("common:confirmation.proceed") && provider.getCurrentCline()) { const currentCline = provider.getCurrentCline()! + + // Use findMessageIndices to find messages based on timestamp const { messageIndex, apiConversationHistoryIndex } = findMessageIndices(messageTs, currentCline) if (messageIndex !== -1) { try { - // Check which option the user selected - if (answer === options[0]) { - // Edit this message and delete subsequent - await removeMessagesThisAndSubsequent(currentCline, messageIndex, apiConversationHistoryIndex) - } else if (answer === options[1]) { - // Edit just this message - await removeMessagesJustThis(currentCline, messageIndex, apiConversationHistoryIndex) - } + // Edit this message and delete subsequent + await removeMessagesThisAndSubsequent(currentCline, messageIndex, apiConversationHistoryIndex) // Process the edited message as a regular user message // This will add it to the conversation and trigger an AI response diff --git a/src/i18n/locales/ca/common.json b/src/i18n/locales/ca/common.json index c3b5406e92..04938e3625 100644 --- a/src/i18n/locales/ca/common.json +++ b/src/i18n/locales/ca/common.json @@ -23,11 +23,10 @@ "delete_config_profile": "Estàs segur que vols eliminar aquest perfil de configuració?", "delete_custom_mode_with_rules": "Esteu segur que voleu suprimir aquest mode {scope}?\n\nAixò també suprimirà la carpeta de regles associada a:\n{rulesFolderPath}", "delete_message": "Què vols eliminar?", - "edit_message": "Eliminar tots els missatges després d'aquest?", + "edit_warning": "Editar aquest missatge eliminarà tots els missatges posteriors de la conversa. Vols continuar?", "delete_just_this_message": "Només aquest missatge", - "edit_just_this_message": "No, només editar aquest", "delete_this_and_subsequent": "Aquest i tots els missatges posteriors", - "edit_this_and_delete_subsequent": "Sí" + "proceed": "Continuar" }, "errors": { "invalid_data_uri": "Format d'URI de dades no vàlid", @@ -111,13 +110,11 @@ "answers": { "yes": "Sí", "no": "No", - "cancel": "Cancel·lar", "remove": "Eliminar", "keep": "Mantenir" }, "buttons": { "save": "Desar", - "cancel": "Cancel·lar", "edit": "Editar" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Suprimeix el mode personalitzat", "description": "Esteu segur que voleu suprimir aquest mode {{scope}}? Això també suprimirà la carpeta de regles associada a: {{rulesFolderPath}}", "descriptionNoRules": "Esteu segur que voleu suprimir aquest mode personalitzat?", - "cancel": "Cancel·la", "confirm": "Suprimeix" } } diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index afcb496c64..9fa27c89c6 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "Möchtest du dieses Konfigurationsprofil wirklich löschen?", "delete_custom_mode_with_rules": "Bist du sicher, dass du diesen {scope}-Modus löschen möchtest?\n\nDadurch wird auch der zugehörige Regelordner unter folgender Adresse gelöscht:\n{rulesFolderPath}", "delete_message": "Was möchtest du löschen?", - "edit_message": "Alle Nachrichten nach dieser löschen?", + "edit_warning": "Das Bearbeiten dieser Nachricht wird alle nachfolgenden Nachrichten in der Unterhaltung löschen. Möchtest du fortfahren?", "delete_just_this_message": "Nur diese Nachricht", - "edit_just_this_message": "Nein, nur diese bearbeiten", "delete_this_and_subsequent": "Diese und alle nachfolgenden Nachrichten", - "edit_this_and_delete_subsequent": "Ja" + "proceed": "Fortfahren" }, "errors": { "invalid_data_uri": "Ungültiges Daten-URI-Format", @@ -107,13 +106,11 @@ "answers": { "yes": "Ja", "no": "Nein", - "cancel": "Abbrechen", "remove": "Entfernen", "keep": "Behalten" }, "buttons": { "save": "Speichern", - "cancel": "Abbrechen", "edit": "Bearbeiten" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Benutzerdefinierten Modus löschen", "description": "Bist du sicher, dass du diesen {{scope}}-Modus löschen möchtest? Dadurch wird auch der zugehörige Regelordner unter {{rulesFolderPath}} gelöscht", "descriptionNoRules": "Bist du sicher, dass du diesen benutzerdefinierten Modus löschen möchtest?", - "cancel": "Abbrechen", "confirm": "Löschen" } } diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index 9d23152e29..f907a5745b 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "Are you sure you want to delete this configuration profile?", "delete_custom_mode_with_rules": "Are you sure you want to delete this {scope} mode?\n\nThis will also delete the associated rules folder at:\n{rulesFolderPath}", "delete_message": "What would you like to delete?", - "edit_message": "Delete all messages after this one?", + "edit_warning": "Editing this message will delete all subsequent messages in the conversation. Do you want to proceed?", "delete_just_this_message": "Just this message", - "edit_just_this_message": "No, just edit this one", "delete_this_and_subsequent": "This and all subsequent messages", - "edit_this_and_delete_subsequent": "Yes" + "proceed": "Proceed" }, "errors": { "invalid_data_uri": "Invalid data URI format", @@ -107,13 +106,11 @@ "answers": { "yes": "Yes", "no": "No", - "cancel": "Cancel", "remove": "Remove", "keep": "Keep" }, "buttons": { "save": "Save", - "cancel": "Cancel", "edit": "Edit" }, "tasks": { @@ -160,7 +157,6 @@ "title": "Delete Custom Mode", "description": "Are you sure you want to delete this {{scope}} mode? This will also delete the associated rules folder at: {{rulesFolderPath}}", "descriptionNoRules": "Are you sure you want to delete this custom mode?", - "cancel": "Cancel", "confirm": "Delete" } } diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index d2181113a8..68750e888f 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "¿Estás seguro de que deseas eliminar este perfil de configuración?", "delete_custom_mode_with_rules": "¿Estás seguro de que quieres eliminar este modo {scope}?\n\nEsto también eliminará la carpeta de reglas asociada en:\n{rulesFolderPath}", "delete_message": "¿Qué deseas eliminar?", - "edit_message": "¿Eliminar todos los mensajes posteriores a este?", + "edit_warning": "Editar este mensaje eliminará todos los mensajes posteriores en la conversación. ¿Deseas continuar?", "delete_just_this_message": "Solo este mensaje", - "edit_just_this_message": "No, solo editar este", "delete_this_and_subsequent": "Este y todos los mensajes posteriores", - "edit_this_and_delete_subsequent": "Sí" + "proceed": "Continuar" }, "errors": { "invalid_data_uri": "Formato de URI de datos no válido", @@ -107,13 +106,11 @@ "answers": { "yes": "Sí", "no": "No", - "cancel": "Cancelar", "remove": "Eliminar", "keep": "Mantener" }, "buttons": { "save": "Guardar", - "cancel": "Cancelar", "edit": "Editar" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Eliminar modo personalizado", "description": "¿Estás seguro de que quieres eliminar este modo {{scope}}? Esto también eliminará la carpeta de reglas asociada en: {{rulesFolderPath}}", "descriptionNoRules": "¿Estás seguro de que quieres eliminar este modo personalizado?", - "cancel": "Cancelar", "confirm": "Eliminar" } } diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index 72e0ff41ae..e985fe9468 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "Êtes-vous sûr de vouloir supprimer ce profil de configuration ?", "delete_custom_mode_with_rules": "Êtes-vous sûr de vouloir supprimer ce mode {scope} ?\n\nCela supprimera également le dossier de règles associé à l'adresse :\n{rulesFolderPath}", "delete_message": "Que souhaitez-vous supprimer ?", - "edit_message": "Supprimer tous les messages après celui-ci ?", + "edit_warning": "Modifier ce message supprimera tous les messages suivants dans la conversation. Voulez-vous continuer ?", "delete_just_this_message": "Uniquement ce message", - "edit_just_this_message": "Non, modifier uniquement celui-ci", "delete_this_and_subsequent": "Ce message et tous les messages suivants", - "edit_this_and_delete_subsequent": "Oui" + "proceed": "Continuer" }, "errors": { "invalid_data_uri": "Format d'URI de données invalide", @@ -107,13 +106,11 @@ "answers": { "yes": "Oui", "no": "Non", - "cancel": "Annuler", "remove": "Supprimer", "keep": "Conserver" }, "buttons": { "save": "Enregistrer", - "cancel": "Annuler", "edit": "Modifier" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Supprimer le mode personnalisé", "description": "Êtes-vous sûr de vouloir supprimer ce mode {{scope}} ? Cela supprimera également le dossier de règles associé à l'adresse : {{rulesFolderPath}}", "descriptionNoRules": "Êtes-vous sûr de vouloir supprimer ce mode personnalisé ?", - "cancel": "Annuler", "confirm": "Supprimer" } } diff --git a/src/i18n/locales/hi/common.json b/src/i18n/locales/hi/common.json index 5c1aec76a4..a16a22ece5 100644 --- a/src/i18n/locales/hi/common.json +++ b/src/i18n/locales/hi/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "क्या आप वाकई इस कॉन्फ़िगरेशन प्रोफ़ाइल को हटाना चाहते हैं?", "delete_custom_mode_with_rules": "क्या आप वाकई इस {scope} मोड को हटाना चाहते हैं?\n\nयह संबंधित नियम फ़ोल्डर को भी यहाँ हटा देगा:\n{rulesFolderPath}", "delete_message": "आप क्या हटाना चाहते हैं?", - "edit_message": "इसके बाद के सभी संदेशों को हटाएं?", + "edit_warning": "इस संदेश को संपादित करने से बातचीत के सभी बाद के संदेश हट जाएंगे। क्या आप जारी रखना चाहते हैं?", "delete_just_this_message": "सिर्फ यह संदेश", - "edit_just_this_message": "नहीं, केवल इसे संपादित करें", "delete_this_and_subsequent": "यह और सभी बाद के संदेश", - "edit_this_and_delete_subsequent": "हां" + "proceed": "जारी रखें" }, "errors": { "invalid_data_uri": "अमान्य डेटा URI फॉर्मेट", @@ -107,13 +106,11 @@ "answers": { "yes": "हां", "no": "नहीं", - "cancel": "रद्द करें", "remove": "हटाएं", "keep": "रखें" }, "buttons": { "save": "सहेजें", - "cancel": "रद्द करें", "edit": "संपादित करें" }, "tasks": { @@ -171,7 +168,6 @@ "title": "कस्टम मोड हटाएं", "description": "क्या आप वाकई इस {{scope}} मोड को हटाना चाहते हैं? यह संबंधित नियम फ़ोल्डर को भी {{rulesFolderPath}} पर हटा देगा", "descriptionNoRules": "क्या आप वाकई इस कस्टम मोड को हटाना चाहते हैं?", - "cancel": "रद्द करें", "confirm": "हटाएं" } } diff --git a/src/i18n/locales/id/common.json b/src/i18n/locales/id/common.json index 3f227c0046..d40bce9186 100644 --- a/src/i18n/locales/id/common.json +++ b/src/i18n/locales/id/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "Apakah kamu yakin ingin menghapus profil konfigurasi ini?", "delete_custom_mode_with_rules": "Anda yakin ingin menghapus mode {scope} ini?\n\nIni juga akan menghapus folder aturan terkait di:\n{rulesFolderPath}", "delete_message": "Apa yang ingin kamu hapus?", - "edit_message": "Hapus semua pesan setelah ini?", + "edit_warning": "Mengedit pesan ini akan menghapus semua pesan selanjutnya dalam percakapan. Apakah kamu ingin melanjutkan?", "delete_just_this_message": "Hanya pesan ini", - "edit_just_this_message": "Tidak, hanya edit yang ini", "delete_this_and_subsequent": "Ini dan semua pesan selanjutnya", - "edit_this_and_delete_subsequent": "Ya" + "proceed": "Lanjutkan" }, "errors": { "invalid_data_uri": "Format data URI tidak valid", @@ -107,13 +106,11 @@ "answers": { "yes": "Ya", "no": "Tidak", - "cancel": "Batal", "remove": "Hapus", "keep": "Simpan" }, "buttons": { "save": "Simpan", - "cancel": "Batal", "edit": "Edit" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Hapus Mode Kustom", "description": "Anda yakin ingin menghapus mode {{scope}} ini? Ini juga akan menghapus folder aturan terkait di: {{rulesFolderPath}}", "descriptionNoRules": "Anda yakin ingin menghapus mode kustom ini?", - "cancel": "Batal", "confirm": "Hapus" } } diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index a13f9b77da..a6782267ce 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "Sei sicuro di voler eliminare questo profilo di configurazione?", "delete_custom_mode_with_rules": "Sei sicuro di voler eliminare questa modalità {scope}?\n\nQuesto eliminerà anche la cartella delle regole associata in:\n{rulesFolderPath}", "delete_message": "Cosa desideri eliminare?", - "edit_message": "Eliminare tutti i messaggi dopo questo?", + "edit_warning": "Modificare questo messaggio eliminerà tutti i messaggi successivi nella conversazione. Vuoi continuare?", "delete_just_this_message": "Solo questo messaggio", - "edit_just_this_message": "No, modifica solo questo", "delete_this_and_subsequent": "Questo e tutti i messaggi successivi", - "edit_this_and_delete_subsequent": "Sì" + "proceed": "Continua" }, "errors": { "invalid_data_uri": "Formato URI dati non valido", @@ -107,13 +106,11 @@ "answers": { "yes": "Sì", "no": "No", - "cancel": "Annulla", "remove": "Rimuovi", "keep": "Mantieni" }, "buttons": { "save": "Salva", - "cancel": "Annulla", "edit": "Modifica" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Elimina Modalità Personalizzata", "description": "Sei sicuro di voler eliminare questa modalità {{scope}}? Questo eliminerà anche la cartella delle regole associata a: {{rulesFolderPath}}", "descriptionNoRules": "Sei sicuro di voler eliminare questa modalità personalizzata?", - "cancel": "Annulla", "confirm": "Elimina" } } diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index 0105ac4220..9722281d0c 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "この設定プロファイルを削除してもよろしいですか?", "delete_custom_mode_with_rules": "この{scope}モードを削除してもよろしいですか?\n\nこれにより、関連するルールフォルダも次の場所で削除されます:\n{rulesFolderPath}", "delete_message": "何を削除しますか?", - "edit_message": "これ以降のメッセージをすべて削除しますか?", + "edit_warning": "このメッセージを編集すると、会話内のすべての後続メッセージが削除されます。続行しますか?", "delete_just_this_message": "このメッセージのみ", - "edit_just_this_message": "いいえ、これだけを編集", "delete_this_and_subsequent": "これ以降のすべてのメッセージ", - "edit_this_and_delete_subsequent": "はい" + "proceed": "続行" }, "errors": { "invalid_data_uri": "データURIフォーマットが無効です", @@ -107,13 +106,11 @@ "answers": { "yes": "はい", "no": "いいえ", - "cancel": "キャンセル", "remove": "削除", "keep": "保持" }, "buttons": { "save": "保存", - "cancel": "キャンセル", "edit": "編集" }, "tasks": { @@ -171,7 +168,6 @@ "title": "カスタムモードの削除", "description": "この{{scope}}モードを削除してもよろしいですか?これにより、関連するルールフォルダーも{{rulesFolderPath}}で削除されます", "descriptionNoRules": "このカスタムモードを削除してもよろしいですか?", - "cancel": "キャンセル", "confirm": "削除" } } diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index 236bb22bdd..81c80154d0 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "이 구성 프로필을 삭제하시겠습니까?", "delete_custom_mode_with_rules": "이 {scope} 모드를 삭제하시겠습니까?\n\n이렇게 하면 연결된 규칙 폴더도 다음 위치에서 삭제됩니다:\n{rulesFolderPath}", "delete_message": "무엇을 삭제하시겠습니까?", - "edit_message": "이 메시지 이후의 모든 메시지를 삭제하시겠습니까?", + "edit_warning": "이 메시지를 편집하면 대화의 모든 후속 메시지가 삭제됩니다. 계속하시겠습니까?", "delete_just_this_message": "이 메시지만", - "edit_just_this_message": "아니요, 이것만 편집", "delete_this_and_subsequent": "이 메시지와 모든 후속 메시지", - "edit_this_and_delete_subsequent": "예" + "proceed": "계속" }, "errors": { "invalid_data_uri": "잘못된 데이터 URI 형식", @@ -107,13 +106,11 @@ "answers": { "yes": "예", "no": "아니오", - "cancel": "취소", "remove": "제거", "keep": "유지" }, "buttons": { "save": "저장", - "cancel": "취소", "edit": "편집" }, "tasks": { @@ -171,7 +168,6 @@ "title": "사용자 정의 모드 삭제", "description": "이 {{scope}} 모드를 삭제하시겠습니까? 이렇게 하면 {{rulesFolderPath}}의 관련 규칙 폴더도 삭제됩니다.", "descriptionNoRules": "이 사용자 정의 모드를 삭제하시겠습니까?", - "cancel": "취소", "confirm": "삭제" } } diff --git a/src/i18n/locales/nl/common.json b/src/i18n/locales/nl/common.json index 5e51c1e8a1..68ad31e728 100644 --- a/src/i18n/locales/nl/common.json +++ b/src/i18n/locales/nl/common.json @@ -21,9 +21,8 @@ "delete_message": "Wat wil je verwijderen?", "delete_just_this_message": "Alleen dit bericht", "delete_this_and_subsequent": "Dit en alle volgende berichten", - "edit_message": "Alle berichten na dit bericht verwijderen?", - "edit_just_this_message": "Nee, alleen dit bericht bewerken", - "edit_this_and_delete_subsequent": "Ja" + "edit_warning": "Het bewerken van dit bericht zal alle volgende berichten in het gesprek verwijderen. Wil je doorgaan?", + "proceed": "Doorgaan" }, "errors": { "invalid_data_uri": "Ongeldig data-URI-formaat", @@ -107,13 +106,11 @@ "answers": { "yes": "Ja", "no": "Nee", - "cancel": "Annuleren", "remove": "Verwijderen", "keep": "Behouden" }, "buttons": { "save": "Opslaan", - "cancel": "Annuleren", "edit": "Bewerken" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Aangepaste modus verwijderen", "description": "Weet je zeker dat je deze {{scope}}-modus wilt verwijderen? Dit zal ook de bijbehorende regelsmap op {{rulesFolderPath}} verwijderen", "descriptionNoRules": "Weet je zeker dat je deze aangepaste modus wilt verwijderen?", - "cancel": "Annuleren", "confirm": "Verwijderen" } } diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index 1e370ff49c..7dc510e71c 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -21,9 +21,8 @@ "delete_message": "Co chcesz usunąć?", "delete_just_this_message": "Tylko tę wiadomość", "delete_this_and_subsequent": "Tę i wszystkie kolejne wiadomości", - "edit_message": "Usunąć wszystkie wiadomości po tej?", - "edit_just_this_message": "Nie, tylko edytuj tę wiadomość", - "edit_this_and_delete_subsequent": "Tak" + "edit_warning": "Edytowanie tej wiadomości usunie wszystkie kolejne wiadomości w rozmowie. Czy chcesz kontynuować?", + "proceed": "Kontynuuj" }, "errors": { "invalid_data_uri": "Nieprawidłowy format URI danych", @@ -107,13 +106,11 @@ "answers": { "yes": "Tak", "no": "Nie", - "cancel": "Anuluj", "remove": "Usuń", "keep": "Zachowaj" }, "buttons": { "save": "Zapisz", - "cancel": "Anuluj", "edit": "Edytuj" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Usuń tryb niestandardowy", "description": "Czy na pewno chcesz usunąć ten tryb {{scope}}? Spowoduje to również usunięcie powiązanego folderu z regułami w {{rulesFolderPath}}", "descriptionNoRules": "Czy na pewno chcesz usunąć ten tryb niestandardowy?", - "cancel": "Anuluj", "confirm": "Usuń" } } diff --git a/src/i18n/locales/pt-BR/common.json b/src/i18n/locales/pt-BR/common.json index c36b853e78..7ee3b8a658 100644 --- a/src/i18n/locales/pt-BR/common.json +++ b/src/i18n/locales/pt-BR/common.json @@ -25,9 +25,8 @@ "delete_message": "O que você gostaria de excluir?", "delete_just_this_message": "Apenas esta mensagem", "delete_this_and_subsequent": "Esta e todas as mensagens subsequentes", - "edit_message": "Excluir todas as mensagens após esta?", - "edit_just_this_message": "Não, apenas editar esta", - "edit_this_and_delete_subsequent": "Sim" + "edit_warning": "Editar esta mensagem excluirá todas as mensagens subsequentes na conversa. Deseja continuar?", + "proceed": "Continuar" }, "errors": { "invalid_data_uri": "Formato de URI de dados inválido", @@ -111,13 +110,11 @@ "answers": { "yes": "Sim", "no": "Não", - "cancel": "Cancelar", "remove": "Remover", "keep": "Manter" }, "buttons": { "save": "Salvar", - "cancel": "Cancelar", "edit": "Editar" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Excluir Modo Personalizado", "description": "Tem certeza de que deseja excluir este modo {{scope}}? Isso também excluirá a pasta de regras associada em: {{rulesFolderPath}}", "descriptionNoRules": "Tem certeza de que deseja excluir este modo personalizado?", - "cancel": "Cancelar", "confirm": "Excluir" } } diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index fca0623f65..8e100bff9a 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -21,9 +21,8 @@ "delete_message": "Что вы хотите удалить?", "delete_just_this_message": "Только это сообщение", "delete_this_and_subsequent": "Это и все последующие сообщения", - "edit_message": "Удалить все сообщения после этого?", - "edit_just_this_message": "Нет, только редактировать это", - "edit_this_and_delete_subsequent": "Да" + "edit_warning": "Редактирование этого сообщения удалит все последующие сообщения в разговоре. Хотите продолжить?", + "proceed": "Продолжить" }, "errors": { "invalid_data_uri": "Неверный формат URI данных", @@ -107,13 +106,11 @@ "answers": { "yes": "Да", "no": "Нет", - "cancel": "Отмена", "remove": "Удалить", "keep": "Оставить" }, "buttons": { "save": "Сохранить", - "cancel": "Отмена", "edit": "Редактировать" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Удалить пользовательский режим", "description": "Вы уверены, что хотите удалить этот режим {{scope}}? Это также удалит связанную папку правил по адресу: {{rulesFolderPath}}", "descriptionNoRules": "Вы уверены, что хотите удалить этот пользовательский режим?", - "cancel": "Отмена", "confirm": "Удалить" } } diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index 5aff8c2483..df8212cf3c 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -21,9 +21,8 @@ "delete_message": "Neyi silmek istersiniz?", "delete_just_this_message": "Sadece bu mesajı", "delete_this_and_subsequent": "Bu ve sonraki tüm mesajları", - "edit_message": "Bu mesajdan sonraki tüm mesajlar silinsin mi?", - "edit_just_this_message": "Hayır, sadece bunu düzenle", - "edit_this_and_delete_subsequent": "Evet" + "edit_warning": "Bu mesajı düzenlemek konuşmadaki tüm sonraki mesajları silecektir. Devam etmek istiyor musunuz?", + "proceed": "Devam et" }, "errors": { "invalid_data_uri": "Geçersiz veri URI formatı", @@ -107,13 +106,11 @@ "answers": { "yes": "Evet", "no": "Hayır", - "cancel": "İptal", "remove": "Kaldır", "keep": "Koru" }, "buttons": { "save": "Kaydet", - "cancel": "İptal", "edit": "Düzenle" }, "tasks": { @@ -171,7 +168,6 @@ "title": "Özel Modu Sil", "description": "Bu {{scope}} modunu silmek istediğinizden emin misiniz? Bu, {{rulesFolderPath}} adresindeki ilişkili kurallar klasörünü de silecektir", "descriptionNoRules": "Bu özel modu silmek istediğinizden emin misiniz?", - "cancel": "İptal", "confirm": "Sil" } } diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index a106b21bf6..6710cd136d 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -21,9 +21,8 @@ "delete_message": "Bạn muốn xóa gì?", "delete_just_this_message": "Chỉ tin nhắn này", "delete_this_and_subsequent": "Tin nhắn này và tất cả tin nhắn tiếp theo", - "edit_message": "Xóa tất cả tin nhắn sau tin nhắn này?", - "edit_just_this_message": "Không, chỉ chỉnh sửa tin nhắn này", - "edit_this_and_delete_subsequent": "Có" + "edit_warning": "Chỉnh sửa tin nhắn này sẽ xóa tất cả tin nhắn tiếp theo trong cuộc trò chuyện. Bạn có muốn tiếp tục không?", + "proceed": "Tiếp tục" }, "errors": { "invalid_data_uri": "Định dạng URI dữ liệu không hợp lệ", @@ -107,13 +106,11 @@ "answers": { "yes": "Có", "no": "Không", - "cancel": "Hủy", "remove": "Xóa", "keep": "Giữ" }, "buttons": { "save": "Lưu", - "cancel": "Hủy", "edit": "Chỉnh sửa" }, "tasks": { @@ -178,7 +175,6 @@ "deleteConfirmation": "Chắc chắn xóa chế độ này?" }, "descriptionNoRules": "Bạn có chắc chắn muốn xóa chế độ tùy chỉnh này không?", - "cancel": "Hủy", "confirm": "Xóa" } } diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json index 6e730a106d..5a8fc51ef1 100644 --- a/src/i18n/locales/zh-CN/common.json +++ b/src/i18n/locales/zh-CN/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "您确定要删除此配置文件吗?", "delete_custom_mode_with_rules": "您确定要删除此 {scope} 模式吗?\n\n这也将删除位于以下位置的关联规则文件夹:\n{rulesFolderPath}", "delete_message": "您想删除什么?", - "edit_message": "删除此消息后的所有消息?", + "edit_warning": "编辑此消息将删除对话中的所有后续消息。您要继续吗?", "delete_just_this_message": "仅此消息", - "edit_just_this_message": "不,仅编辑此消息", "delete_this_and_subsequent": "此消息及所有后续消息", - "edit_this_and_delete_subsequent": "是" + "proceed": "继续" }, "errors": { "invalid_mcp_config": "项目MCP配置格式无效", @@ -112,13 +111,11 @@ "answers": { "yes": "是", "no": "否", - "cancel": "取消", "remove": "删除", "keep": "保留" }, "buttons": { "save": "保存", - "cancel": "取消", "edit": "编辑" }, "tasks": { @@ -176,7 +173,6 @@ "title": "删除自定义模式", "description": "您确定要删除此 {{scope}} 模式吗?这也将删除位于 {{rulesFolderPath}} 的关联规则文件夹", "descriptionNoRules": "您确定要删除此自定义模式吗?", - "cancel": "取消", "confirm": "删除" } } diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index 0a4ad22d17..2bfad5e00f 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -19,11 +19,10 @@ "delete_config_profile": "您確定要刪除此設定檔案嗎?", "delete_custom_mode_with_rules": "您確定要刪除此 {scope} 模式嗎?\n\n這也將刪除位於以下位置的關聯規則資料夾:\n{rulesFolderPath}", "delete_message": "您想刪除哪些內容?", - "edit_message": "刪除此訊息後的所有訊息?", + "edit_warning": "編輯此訊息將刪除對話中的所有後續訊息。您要繼續嗎?", "delete_just_this_message": "僅這則訊息", - "edit_just_this_message": "否,僅編輯此訊息", "delete_this_and_subsequent": "這則訊息及所有後續訊息", - "edit_this_and_delete_subsequent": "是" + "proceed": "繼續" }, "errors": { "invalid_data_uri": "資料 URI 格式無效", @@ -107,13 +106,11 @@ "answers": { "yes": "是", "no": "否", - "cancel": "取消", "remove": "刪除", "keep": "保留" }, "buttons": { "save": "儲存", - "cancel": "取消", "edit": "編輯" }, "tasks": { @@ -171,7 +168,6 @@ "title": "刪除自訂模式", "description": "您確定要刪除此 {{scope}} 模式嗎?這也將刪除位於 {{rulesFolderPath}} 的關聯規則資料夾", "descriptionNoRules": "您確定要刪除此自訂模式嗎?", - "cancel": "取消", "confirm": "刪除" } }