mirror of
https://github.com/stablyai/orca.git
synced 2026-09-21 16:02:20 +00:00
fix(macos): say what a terminal-service restart actually does
The Manage Sessions restart confirmation still described the product as it was before agents resumed themselves: it promised panes showing "Process exited" that the user reopens by hand, and mentioned legacy-protocol sessions nobody outside the daemon code can act on. Open terminals and agents come back on their own now, so the old copy made a routine remedy sound like data loss. It also called the thing a "daemon". The same restart is about to be offered from a user-facing fix dialog, so both surfaces now say "terminal service", and the confirm button is just "Restart". The new body adds the one fact the old one never stated: terminals on remote hosts are not affected. Translations of the two changed strings are dropped so the five non-English locales fall back to English rather than keep showing copy that is now wrong.
This commit is contained in:
@@ -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(<DaemonActionDialog api={pendingRestartApi()} />)
|
||||
|
||||
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(<DaemonActionDialog api={pendingRestartApi()} />)
|
||||
|
||||
expect(screen.queryByText(/Process exited/)).toBeNull()
|
||||
expect(screen.queryByText(/Legacy-protocol sessions/)).toBeNull()
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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…'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -5284,8 +5284,6 @@
|
||||
"01af244097": "キャンセル",
|
||||
"28c8e53176": "これにより、すべてのワークスペースで実行中のすべてのターミナルペインが強制終了されます。これらのセッションで保存されていない作業内容は失われます。デーモン自体は実行を継続し、新規ターミナルをすぐに開くことができます。これを元に戻すことはできません。",
|
||||
"1bbea41a77": "すべてのターミナルセッションを強制終了しますか?",
|
||||
"01d6b7c64e": "実行中のすべてのターミナルペインを強制終了し、デーモンプロセスを再起動します。ペインには「プロセスが終了しました」と表示され、すぐに再度開くことができます。以前のアプリバージョンのレガシープロトコルセッションは保持されます。これを元に戻すことはできません。",
|
||||
"922548bc66": "ターミナルデーモンを再起動しますか?",
|
||||
"2b4efdc162": "セッションを強制終了できませんでした。",
|
||||
"d18f3005c2": "{{value0}} セッション{{value1}} は終了を拒否しました。",
|
||||
"baad8cd651": "実行中のセッションはありません。",
|
||||
|
||||
@@ -5289,8 +5289,6 @@
|
||||
"01af244097": "취소",
|
||||
"28c8e53176": "그러면 모든 워크스페이스에서 실행 중인 모든 terminals 패널이 강제 종료됩니다. 해당 세션에서 저장하지 않은 작업은 모두 손실됩니다. 데몬 자체는 계속 실행되며 새 terminals을 즉시 열 수 있습니다. 이 작업은 취소할 수 없습니다.",
|
||||
"1bbea41a77": "모든 terminal 세션을 종료하시겠습니까?",
|
||||
"01d6b7c64e": "실행 중인 모든 terminal 패널을 종료하고 데몬 프로세스를 다시 시작합니다. 패널에는 \"프로세스 종료됨\"이 표시되며 즉시 다시 열 수 있습니다. 이전 앱 버전의 레거시 프로토콜 세션은 보존됩니다. 이 작업은 취소할 수 없습니다.",
|
||||
"922548bc66": "terminal 데몬을 다시 시작하시겠습니까?",
|
||||
"2b4efdc162": "세션을 종료할 수 없습니다.",
|
||||
"d18f3005c2": "세션 {{value0}}개{{value1}}이(가) 종료를 거부했습니다.",
|
||||
"baad8cd651": "실행 중인 세션이 없습니다.",
|
||||
|
||||
@@ -5332,8 +5332,6 @@
|
||||
"01af244097": "取消",
|
||||
"28c8e53176": "这会强制退出所有工作区中每个正在运行的终端窗格。这些会话中所有未保存的工作都会丢失。守护进程本身保持运行,并且可以立即打开新终端。这无法撤销。",
|
||||
"1bbea41a77": "终止所有终端会话?",
|
||||
"01d6b7c64e": "终止每个正在运行的终端窗格并重新启动守护进程。窗格显示“进程已退出”并且可以立即重新打开。先前应用程序版本的旧协议会话将被保留。这无法撤销。",
|
||||
"922548bc66": "重新启动终端守护进程?",
|
||||
"2b4efdc162": "无法终止会话。",
|
||||
"d18f3005c2": "{{value0}} 会话{{value1}} 拒绝退出。",
|
||||
"baad8cd651": "没有正在运行的会话。",
|
||||
|
||||
Reference in New Issue
Block a user