diff --git a/src/renderer/src/components/shared/useDaemonActions.test.tsx b/src/renderer/src/components/shared/useDaemonActions.test.tsx
index 6c9e00b8f73..792238662bb 100644
--- a/src/renderer/src/components/shared/useDaemonActions.test.tsx
+++ b/src/renderer/src/components/shared/useDaemonActions.test.tsx
@@ -1,6 +1,6 @@
// @vitest-environment happy-dom
-import { act, renderHook } from '@testing-library/react'
-import { beforeEach, describe, expect, it, vi } from 'vitest'
+import { act, cleanup, render, renderHook, screen } from '@testing-library/react'
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
const { runCleanupMock, snapshotMock, toastErrorMock, toastInfoMock, toastSuccessMock } =
vi.hoisted(() => ({
@@ -30,7 +30,7 @@ vi.mock('@/i18n/i18n', () => ({
}))
import type { KillAllTerminalSurfacesSummary } from './kill-all-terminal-surfaces'
-import { useDaemonActions } from './useDaemonActions'
+import { DaemonActionDialog, useDaemonActions, type DaemonActionsApi } from './useDaemonActions'
function rejectedSummary(): KillAllTerminalSurfacesSummary {
return {
@@ -150,3 +150,42 @@ describe('useDaemonActions kill-all cleanup', () => {
expect(toastInfoMock).not.toHaveBeenCalled()
})
})
+
+describe('DaemonActionDialog restart copy', () => {
+ function pendingRestartApi(): DaemonActionsApi {
+ return {
+ pending: 'restart',
+ setPending: vi.fn(),
+ busyKind: null,
+ isBusy: false,
+ runRestart: vi.fn(async () => {}),
+ runKillAll: vi.fn(async () => {}),
+ runConfirmed: vi.fn()
+ }
+ }
+
+ afterEach(() => {
+ cleanup()
+ })
+
+ // The old copy promised panes showing "Process exited" that the user reopens by hand; agents
+ // resume themselves now, so it described a product that no longer exists.
+ it('names the terminal service and states only what actually happens', () => {
+ render()
+
+ expect(screen.getByText('Restart the terminal service?')).toBeTruthy()
+ expect(
+ screen.getByText(
+ 'Open terminals and agents will restart. Terminals on remote hosts are not affected.'
+ )
+ ).toBeTruthy()
+ expect(screen.getByRole('button', { name: 'Restart' })).toBeTruthy()
+ })
+
+ it('no longer promises reopenable "Process exited" panes', () => {
+ render()
+
+ expect(screen.queryByText(/Process exited/)).toBeNull()
+ expect(screen.queryByText(/Legacy-protocol sessions/)).toBeNull()
+ })
+})
diff --git a/src/renderer/src/components/shared/useDaemonActions.tsx b/src/renderer/src/components/shared/useDaemonActions.tsx
index 93c4477cf66..b9ad6f64143 100644
--- a/src/renderer/src/components/shared/useDaemonActions.tsx
+++ b/src/renderer/src/components/shared/useDaemonActions.tsx
@@ -235,17 +235,17 @@ function getCopy(kind: DaemonActionKind): DaemonActionCopy {
return {
title: translate(
'auto.components.shared.useDaemonActions.922548bc66',
- 'Restart the terminal daemon?'
+ 'Restart the terminal service?'
),
description: (
<>
{translate(
'auto.components.shared.useDaemonActions.01d6b7c64e',
- 'Kills every running terminal pane and restarts the daemon process. Panes show "Process exited" and can be reopened immediately. Legacy-protocol sessions from a previous app version are preserved. This can\'t be undone.'
+ 'Open terminals and agents will restart. Terminals on remote hosts are not affected.'
)}
>
),
- confirmLabel: 'Restart daemon',
+ confirmLabel: 'Restart',
busyLabel: 'Restarting…'
}
}
diff --git a/src/renderer/src/i18n/locales/en.json b/src/renderer/src/i18n/locales/en.json
index baff45af62d..a0523466c6d 100644
--- a/src/renderer/src/i18n/locales/en.json
+++ b/src/renderer/src/i18n/locales/en.json
@@ -6382,8 +6382,8 @@
"01af244097": "Cancel",
"28c8e53176": "This force-quits every running terminal pane across all workspaces. Any unsaved work in those sessions is lost. The daemon itself keeps running, and new terminals can be opened immediately. This can't be undone.",
"1bbea41a77": "Kill all terminal sessions?",
- "01d6b7c64e": "Kills every running terminal pane and restarts the daemon process. Panes show \"Process exited\" and can be reopened immediately. Legacy-protocol sessions from a previous app version are preserved. This can't be undone.",
- "922548bc66": "Restart the terminal daemon?",
+ "01d6b7c64e": "Open terminals and agents will restart. Terminals on remote hosts are not affected.",
+ "922548bc66": "Restart the terminal service?",
"2b4efdc162": "Couldn’t kill sessions.",
"d18f3005c2": "{{value0}} session{{value1}} refused to exit.",
"baad8cd651": "No sessions running.",
diff --git a/src/renderer/src/i18n/locales/es.json b/src/renderer/src/i18n/locales/es.json
index cfccde75280..95206aa48c6 100644
--- a/src/renderer/src/i18n/locales/es.json
+++ b/src/renderer/src/i18n/locales/es.json
@@ -5284,8 +5284,6 @@
"01af244097": "Cancelar",
"28c8e53176": "Esto fuerza el cierre de todos los paneles de terminal en ejecución en todos los espacios de trabajo. Cualquier trabajo sin guardar en esas sesiones se perderá. El servicio sigue ejecutándose y se pueden abrir nuevos terminales inmediatamente. Esto no se puede deshacer.",
"1bbea41a77": "¿Terminar todas las sesiones de terminal?",
- "01d6b7c64e": "Termina todos los paneles de terminal en ejecución y reinicia el proceso del servicio. Los paneles muestran \"Process exited\" y se pueden volver a abrir inmediatamente. Se conservan las sesiones de protocolo heredado de una versión anterior de la app. Esto no se puede deshacer.",
- "922548bc66": "¿Reiniciar el servicio del terminal?",
"2b4efdc162": "No se pudieron finalizar las sesiones.",
"d18f3005c2": "{{value0}} sesión{{value1}} se negó a salir.",
"baad8cd651": "No hay sesiones en ejecución.",
diff --git a/src/renderer/src/i18n/locales/fr.json b/src/renderer/src/i18n/locales/fr.json
index 44094298d85..571773befe1 100644
--- a/src/renderer/src/i18n/locales/fr.json
+++ b/src/renderer/src/i18n/locales/fr.json
@@ -6018,8 +6018,6 @@
"01af244097": "Annuler",
"28c8e53176": "Force l'arrêt de tous les volets de terminal en cours d'exécution dans tous les espaces de travail. Tout travail non enregistré de ces sessions est perdu. Le daemon continue de tourner et de nouveaux terminaux peuvent être ouverts immédiatement. Irréversible.",
"1bbea41a77": "Forcer l'arrêt de toutes les sessions de terminal ?",
- "01d6b7c64e": "Tue tous les volets de terminal en cours d'exécution et redémarre le processus daemon. Les volets affichent \"Process exited\" et peuvent être rouverts immédiatement. Les sessions au protocole hérité d'une version précédente de l'application sont préservées. Irréversible.",
- "922548bc66": "Redémarrer le daemon de terminal ?",
"2b4efdc162": "Impossible de tuer les sessions.",
"d18f3005c2": "Fermeture refusée pour {{value0}} session{{value1}}.",
"baad8cd651": "Aucune session en cours.",
diff --git a/src/renderer/src/i18n/locales/ja.json b/src/renderer/src/i18n/locales/ja.json
index 0a3b2ee6c86..8668e8d787a 100644
--- a/src/renderer/src/i18n/locales/ja.json
+++ b/src/renderer/src/i18n/locales/ja.json
@@ -5284,8 +5284,6 @@
"01af244097": "キャンセル",
"28c8e53176": "これにより、すべてのワークスペースで実行中のすべてのターミナルペインが強制終了されます。これらのセッションで保存されていない作業内容は失われます。デーモン自体は実行を継続し、新規ターミナルをすぐに開くことができます。これを元に戻すことはできません。",
"1bbea41a77": "すべてのターミナルセッションを強制終了しますか?",
- "01d6b7c64e": "実行中のすべてのターミナルペインを強制終了し、デーモンプロセスを再起動します。ペインには「プロセスが終了しました」と表示され、すぐに再度開くことができます。以前のアプリバージョンのレガシープロトコルセッションは保持されます。これを元に戻すことはできません。",
- "922548bc66": "ターミナルデーモンを再起動しますか?",
"2b4efdc162": "セッションを強制終了できませんでした。",
"d18f3005c2": "{{value0}} セッション{{value1}} は終了を拒否しました。",
"baad8cd651": "実行中のセッションはありません。",
diff --git a/src/renderer/src/i18n/locales/ko.json b/src/renderer/src/i18n/locales/ko.json
index 91aa9d8d74b..f638b0eb88f 100644
--- a/src/renderer/src/i18n/locales/ko.json
+++ b/src/renderer/src/i18n/locales/ko.json
@@ -5289,8 +5289,6 @@
"01af244097": "취소",
"28c8e53176": "그러면 모든 워크스페이스에서 실행 중인 모든 terminals 패널이 강제 종료됩니다. 해당 세션에서 저장하지 않은 작업은 모두 손실됩니다. 데몬 자체는 계속 실행되며 새 terminals을 즉시 열 수 있습니다. 이 작업은 취소할 수 없습니다.",
"1bbea41a77": "모든 terminal 세션을 종료하시겠습니까?",
- "01d6b7c64e": "실행 중인 모든 terminal 패널을 종료하고 데몬 프로세스를 다시 시작합니다. 패널에는 \"프로세스 종료됨\"이 표시되며 즉시 다시 열 수 있습니다. 이전 앱 버전의 레거시 프로토콜 세션은 보존됩니다. 이 작업은 취소할 수 없습니다.",
- "922548bc66": "terminal 데몬을 다시 시작하시겠습니까?",
"2b4efdc162": "세션을 종료할 수 없습니다.",
"d18f3005c2": "세션 {{value0}}개{{value1}}이(가) 종료를 거부했습니다.",
"baad8cd651": "실행 중인 세션이 없습니다.",
diff --git a/src/renderer/src/i18n/locales/zh.json b/src/renderer/src/i18n/locales/zh.json
index f460f007b2c..52be6ef625f 100644
--- a/src/renderer/src/i18n/locales/zh.json
+++ b/src/renderer/src/i18n/locales/zh.json
@@ -5332,8 +5332,6 @@
"01af244097": "取消",
"28c8e53176": "这会强制退出所有工作区中每个正在运行的终端窗格。这些会话中所有未保存的工作都会丢失。守护进程本身保持运行,并且可以立即打开新终端。这无法撤销。",
"1bbea41a77": "终止所有终端会话?",
- "01d6b7c64e": "终止每个正在运行的终端窗格并重新启动守护进程。窗格显示“进程已退出”并且可以立即重新打开。先前应用程序版本的旧协议会话将被保留。这无法撤销。",
- "922548bc66": "重新启动终端守护进程?",
"2b4efdc162": "无法终止会话。",
"d18f3005c2": "{{value0}} 会话{{value1}} 拒绝退出。",
"baad8cd651": "没有正在运行的会话。",