FN-8160: remove multi-tab session lock prompts

Allow planning interview sessions to resume across tabs without legacy lock affordances.

- Remove obsolete cross-tab session lock translations and generated resource keys.
- Cover direct resumption for milestone, slice, and mobile background sessions.

Files changed:
 .../MilestoneSliceInterviewModal.test.tsx          | 37 +++++++++++++
 .../components/__tests__/utility-mobile.test.tsx   | 60 ++++++++++++++++++++++
 packages/i18n/locales/en/app.json                  | 18 -------
 packages/i18n/locales/es/app.json                  | 57 +++++++++++---------
 packages/i18n/locales/fr/app.json                  | 57 +++++++++++---------
 packages/i18n/locales/ko/app.json                  | 57 +++++++++++---------
 packages/i18n/locales/zh-CN/app.json               | 57 +++++++++++---------
 packages/i18n/locales/zh-TW/app.json               | 57 +++++++++++---------
 packages/i18n/src/resources.d.ts                   | 51 +++++++++---------
 9 files changed, 290 insertions(+), 161 deletions(-)

Fusion-Task-Id: FN-8160
Fusion-Task-Lineage: 8bf80297-8394-4e63-b689-6ab56f9a5088
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
This commit is contained in:
gsxdsm
2026-07-16 17:47:54 -07:00
parent ca7a5a7106
commit d3544cfa99
9 changed files with 290 additions and 161 deletions

View File

@@ -931,6 +931,43 @@ describe("MilestoneSliceInterviewModal", () => {
});
});
/*
FNXC:PlanningMultiTab 2026-07-16-17:35:
A legacy persisted lock holder must never gate either milestone or slice interview resumption.
The multi-tab contract opens the shared session directly without a Take Control affordance.
*/
it.each([
["milestone", "MS-001", "Test Milestone", "milestone_interview"],
["slice", "SL-001", "Test Slice", "slice_interview"],
] as const)("resumes a legacy other-tab-owned %s session without a lock affordance", async (targetType, targetId, targetTitle, type) => {
mockFetchAiSession.mockResolvedValue({
...mockSessionAwaitingInput,
type,
lockedByTab: "tab-other",
lockedAt: new Date().toISOString(),
});
mockAcquireSessionLock.mockResolvedValue({ acquired: false, currentHolder: "tab-other" });
render(
<MilestoneSliceInterviewModal
isOpen={true}
onClose={vi.fn()}
onApplied={vi.fn()}
targetType={targetType}
targetId={targetId}
targetTitle={targetTitle}
projectId="test-project"
resumeSessionId="session-resume-123"
/>,
);
expect(await screen.findByText("What is the target scope?")).toBeDefined();
expect(screen.queryByRole("button", { name: /take control/i })).toBeNull();
expect(screen.queryByText(/active in another tab|live heartbeat/i)).toBeNull();
expect(mockAcquireSessionLock).not.toHaveBeenCalled();
expect(mockForceAcquireSessionLock).not.toHaveBeenCalled();
});
it("reconnects to stream for generating session when resumeSessionId is provided", async () => {
mockFetchAiSession.mockResolvedValue(mockSessionGenerating);

View File

@@ -120,6 +120,66 @@ describe("Utility component mobile adaptations", () => {
expect(screen.getByText("Break down API tasks")).toBeTruthy();
});
/*
FNXC:PlanningMultiTab 2026-07-16-17:35:
Background task rows open directly on mobile for every session state, even when a legacy
session payload reports another tab as its prior lock holder. No confirm gate or lock banner
may be reintroduced because interviews are intentionally multi-tab.
*/
it("opens legacy other-tab-owned sessions directly without a lock affordance", () => {
const onOpenSession = vi.fn();
const sessions = [
{
id: "sess-generating-other-tab",
type: "planning",
status: "generating",
title: "Generating plan",
projectId: "proj-1",
updatedAt: new Date().toISOString(),
lockedByTab: "tab-other",
},
{
id: "sess-awaiting-other-tab",
type: "mission_interview",
status: "awaiting_input",
title: "Awaiting mission input",
projectId: "proj-1",
updatedAt: new Date().toISOString(),
lockedByTab: "tab-other",
},
{
id: "sess-failed-other-tab",
type: "slice_interview",
status: "error",
title: "Failed slice interview",
projectId: "proj-1",
updatedAt: new Date().toISOString(),
lockedByTab: "tab-other",
},
] as unknown as AiSessionSummary[];
render(
<BackgroundTasksIndicator
sessions={sessions}
generating={1}
needsInput={1}
onOpenSession={onOpenSession}
onDismissSession={vi.fn()}
/>,
);
for (const session of sessions) {
fireEvent.click(screen.getByRole("button", { name: /AI 3/i }));
fireEvent.click(screen.getByText(session.title));
}
expect(onOpenSession).toHaveBeenNthCalledWith(1, sessions[0]);
expect(onOpenSession).toHaveBeenNthCalledWith(2, sessions[1]);
expect(onOpenSession).toHaveBeenNthCalledWith(3, sessions[2]);
expect(screen.queryByRole("button", { name: /take control/i })).toBeNull();
expect(screen.queryByText(/active in another tab|live heartbeat/i)).toBeNull();
});
it("returns null for BackgroundTasksIndicator with no sessions", () => {
const { container } = render(
<BackgroundTasksIndicator

View File

@@ -1177,8 +1177,6 @@
"retrying": "Retrying…"
},
"backgroundTasks": {
"confirmMessage": "This session is active in another tab. Open anyway?",
"confirmTitle": "Open Active Session",
"dismissButton": "Dismiss",
"pillLabel_one": "AI {{count}}",
"pillLabel_other": "AI {{count}}",
@@ -1188,7 +1186,6 @@
"pillTitleWithInput_other": "{{count}} background AI task ({{needsInput}} needs input)",
"popoverHeader": "Background Tasks",
"status": {
"activeElsewhere": "active in another tab",
"failed": "Failed",
"generating": "generating...",
"needsInput": "needs input"
@@ -3203,7 +3200,6 @@
"refinedScope": "Refined Scope",
"refineScope": "Refine {{label}} scope with AI",
"sendToBackground": "Send to background",
"sessionActiveAnotherTab": "Session is active in another tab.",
"showThinking": "Show thinking",
"startInterview": "Start Interview",
"targetLabel": {
@@ -3848,9 +3844,6 @@
"selectGoal": "Select an active goal",
"selectMissionToView": "Select a mission to view details",
"sendToBackground": "Send to background",
"sessionActiveAnother": "Session is active in another tab.",
"sessionActiveHeartbeat": "This session is active in another tab (live heartbeat)",
"sessionActiveTab": "This session is active in another tab",
"showDetails": "Show details",
"showMetadata": "Show metadata",
"showThinking": "Show thinking",
@@ -3896,8 +3889,6 @@
"tabActivity_one": "Activity ({{count}})",
"tabActivity_other": "Activity ({{count}})",
"tabStructure": "Structure",
"takeControl": "Take Control",
"takingControl": "Taking control...",
"targetBranch": "Target branch",
"targetBranchPlaceholder": "e.g. main",
"taskIdPlaceholder": "Task ID (e.g., FN-001)",
@@ -4649,8 +4640,6 @@
"remove": "Remove",
"retryFailed": "Retry failed. Please try again.",
"retrying": "Retrying...",
"sessionActiveOtherTab": "This session is active in another tab",
"sessionActiveOtherTabLive": "This session is active in another tab (live heartbeat)",
"sessionFailed": "Session failed while contacting the AI.",
"sessionFailed2": "Session failed",
"showArchived": "Show archived",
@@ -4673,8 +4662,6 @@
"subtaskTitle": "Title",
"suggestedDependencies": "Suggested Dependencies",
"suggestedSize": "Suggested Size",
"takeControl": "Take Control",
"takingControl": "Taking control...",
"thinkingElapsed": "Thinking… ({{seconds}}s)",
"title": "Planning Mode",
"tryAnExample": "Try an example:",
@@ -7327,14 +7314,9 @@
"reviewSubtasksHint": "Edit titles, descriptions, sizes, and dependencies before creating all tasks at once.",
"sendToBackgroundAriaLabel": "Send to background",
"sendToBackgroundTitle": "Send to background",
"sessionActiveAnotherTab": "Session is active in another tab.",
"sessionActiveAnotherTabLive": "This session is active in another tab (live heartbeat)",
"sessionActiveAnotherTabTakeover": "This session is active in another tab",
"showThinking": "Show thinking",
"sizeLabel": "Size",
"startingBreakdown": "Starting subtask breakdown...",
"takeControl": "Take Control",
"takingControl": "Taking control...",
"titleLabel": "Title",
"untitled": "Untitled",
"waitingForThinking": "Waiting for AI progress updates..."

View File

@@ -1167,8 +1167,6 @@
"retrying": "Reintentando…"
},
"backgroundTasks": {
"confirmMessage": "Esta sesión está activa en otra pestaña. ¿Abrir de todos modos?",
"confirmTitle": "Abrir sesión activa",
"dismissButton": "Descartar",
"pillLabel_one": "",
"pillLabel_other": "",
@@ -1178,7 +1176,6 @@
"pillTitleWithInput_other": "",
"popoverHeader": "Tareas de fondo",
"status": {
"activeElsewhere": "activo en otra pestaña",
"failed": "Fallido",
"generating": "generando...",
"needsInput": "necesita entrada"
@@ -3193,7 +3190,6 @@
"refinedScope": "Alcance refinado",
"refineScope": "Refinar el alcance {{label}} con IA",
"sendToBackground": "Enviar al fondo",
"sessionActiveAnotherTab": "La sesión está activa en otra pestaña.",
"showThinking": "Mostrar pensamiento",
"startInterview": "Iniciar entrevista",
"targetLabel": {
@@ -3838,9 +3834,6 @@
"selectGoal": "",
"selectMissionToView": "Selecciona una misión para ver los detalles",
"sendToBackground": "Enviar al fondo",
"sessionActiveAnother": "La sesión está activa en otra pestaña.",
"sessionActiveHeartbeat": "Esta sesión está activa en otra pestaña (pulso en vivo)",
"sessionActiveTab": "Esta sesión está activa en otra pestaña",
"showDetails": "Mostrar detalles",
"showMetadata": "Mostrar metadatos",
"showThinking": "Mostrar pensamiento",
@@ -3886,8 +3879,6 @@
"tabActivity_one": "",
"tabActivity_other": "",
"tabStructure": "Estructura",
"takeControl": "Tomar control",
"takingControl": "Tomando control...",
"targetBranch": "Rama de destino",
"targetBranchPlaceholder": "p. ej. main",
"taskIdPlaceholder": "ID de tarea (p. ej., FN-001)",
@@ -4638,8 +4629,6 @@
"remove": "Eliminar",
"retryFailed": "El reintento falló. Por favor, inténtalo de nuevo.",
"retrying": "Reintentando...",
"sessionActiveOtherTab": "Esta sesión está activa en otra pestaña",
"sessionActiveOtherTabLive": "Esta sesión está activa en otra pestaña (heartbeat activo)",
"sessionFailed": "La sesión falló al contactar la IA.",
"sessionFailed2": "Sesión fallida",
"showArchived": "Mostrar archivadas",
@@ -4662,8 +4651,6 @@
"subtaskTitle": "Título",
"suggestedDependencies": "Dependencias sugeridas",
"suggestedSize": "Tamaño sugerido",
"takeControl": "Tomar el control",
"takingControl": "Tomando el control...",
"thinkingElapsed": "Pensando… ({{seconds}} s)",
"title": "Modo de planificación",
"tryAnExample": "Prueba un ejemplo:",
@@ -4673,7 +4660,8 @@
"untitledSession": "Sesión sin título",
"usingDefault": "Usar predeterminado",
"whatToBuild": "¿Qué quieres construir?",
"whatToBuildPlaceholder": "p. ej., Crear un sistema de autenticación con inicio de sesión, registro y restablecimiento de contraseña..."
"whatToBuildPlaceholder": "p. ej., Crear un sistema de autenticación con inicio de sesión, registro y restablecimiento de contraseña...",
"agentClarification": ""
},
"plugins": {
"addItem": "Agregar elemento",
@@ -5909,7 +5897,11 @@
"autoTranslateImportedIssuesHelp": "",
"translationTargetLanguage": "",
"translationTargetLanguageHelp": "",
"followDashboardLanguage": ""
"followDashboardLanguage": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6354,7 +6346,10 @@
"ntfyEnabledHint": "",
"webhookEnabledHint": "",
"webhookUrlHint": "",
"webhookFormatHint": ""
"webhookFormatHint": "",
"agentClarification": "",
"agentClarificationEnable": "",
"agentClarificationHint": ""
},
"plugins": {
"fusionPlugins": "",
@@ -6645,7 +6640,21 @@
"maxConcurrentTasksHint": "",
"maxConcurrentVerifications": "",
"maxConcurrentVerificationsHint": "",
"pollIntervalMsHint": ""
"pollIntervalMsHint": "",
"executorToolFailureRetryCount": "",
"executorToolFailureRetryCountHelp": "",
"executorToolFailureRetryBackoffMs": "",
"executorToolFailureRetryBackoffMsHelp": "",
"executorToolFailureThreshold": "",
"executorToolFailureThresholdHelp": "",
"executorModelEscalationEnabled": "",
"executorModelEscalationEnabledHelp": "",
"executorEscalationProvider": "",
"executorEscalationProviderHelp": "",
"executorEscalationModelId": "",
"executorEscalationModelIdHelp": "",
"executorEscalationNodeId": "",
"executorEscalationNodeIdHelp": ""
},
"title": "Configuración",
"worktrees": {
@@ -6706,7 +6715,8 @@
"showWorktreeGroupingHelp": "",
"copyFilesHelp": "",
"namingStyleNotApplicableWhenRecycling": "",
"howToNameFreshWorktreeDirectories": ""
"howToNameFreshWorktreeDirectories": "",
"recycleNotApplicableWithTaskIdNaming": ""
},
"fileBrowser": {
"currentDirectory": "",
@@ -7294,14 +7304,9 @@
"reviewSubtasksHint": "Edita títulos, descripciones, tamaños y dependencias antes de crear todas las tareas a la vez.",
"sendToBackgroundAriaLabel": "Enviar a segundo plano",
"sendToBackgroundTitle": "Enviar a segundo plano",
"sessionActiveAnotherTab": "La sesión está activa en otra pestaña.",
"sessionActiveAnotherTabLive": "Esta sesión está activa en otra pestaña (latido en directo)",
"sessionActiveAnotherTabTakeover": "Esta sesión está activa en otra pestaña",
"showThinking": "Mostrar razonamiento",
"sizeLabel": "Tamaño",
"startingBreakdown": "",
"takeControl": "Tomar el control",
"takingControl": "Tomando el control...",
"titleLabel": "Título",
"untitled": "Sin título",
"waitingForThinking": ""
@@ -8481,7 +8486,11 @@
"updateFailedWithMessage": "",
"updateNow": "",
"updateSuccess": "",
"updating": ""
"updating": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"usage": {
"configureAuthHint": "Configure la autenticación en Configuración para ver datos de uso.",

View File

@@ -1167,8 +1167,6 @@
"retrying": "Nouvelle tentative…"
},
"backgroundTasks": {
"confirmMessage": "Cette session est active dans un autre onglet. Ouvrir quand même ?",
"confirmTitle": "Ouvrir une session active",
"dismissButton": "Rejeter",
"pillLabel_one": "",
"pillLabel_other": "",
@@ -1178,7 +1176,6 @@
"pillTitleWithInput_other": "",
"popoverHeader": "Tâches de fond",
"status": {
"activeElsewhere": "actif dans un autre onglet",
"failed": "Échec",
"generating": "génération...",
"needsInput": "nécessite une entrée"
@@ -3193,7 +3190,6 @@
"refinedScope": "Portée affinée",
"refineScope": "Affiner la portée {{label}} avec l'IA",
"sendToBackground": "Envoyer en arrière-plan",
"sessionActiveAnotherTab": "La session est active dans un autre onglet.",
"showThinking": "Afficher la réflexion",
"startInterview": "Commencer l'entrevue",
"targetLabel": {
@@ -3838,9 +3834,6 @@
"selectGoal": "",
"selectMissionToView": "Sélectionnez une mission pour voir les détails",
"sendToBackground": "Envoyer en arrière-plan",
"sessionActiveAnother": "La session est active dans un autre onglet.",
"sessionActiveHeartbeat": "Cette session est active dans un autre onglet (pulsation en direct)",
"sessionActiveTab": "Cette session est active dans un autre onglet",
"showDetails": "Afficher les détails",
"showMetadata": "Afficher les métadonnées",
"showThinking": "Afficher la réflexion",
@@ -3886,8 +3879,6 @@
"tabActivity_one": "",
"tabActivity_other": "",
"tabStructure": "Structure",
"takeControl": "Prendre le contrôle",
"takingControl": "Prise de contrôle en cours...",
"targetBranch": "Branche cible",
"targetBranchPlaceholder": "p. ex. main",
"taskIdPlaceholder": "ID de tâche (p. ex. FN-001)",
@@ -4638,8 +4629,6 @@
"remove": "Supprimer",
"retryFailed": "Nouvelle tentative échouée. Veuillez réessayer.",
"retrying": "Nouvelle tentative…",
"sessionActiveOtherTab": "Cette session est active dans un autre onglet",
"sessionActiveOtherTabLive": "Cette session est active dans un autre onglet (signal de vie actif)",
"sessionFailed": "La session a échoué lors de la connexion à l'IA.",
"sessionFailed2": "Échec de la session",
"showArchived": "Afficher les archivées",
@@ -4662,8 +4651,6 @@
"subtaskTitle": "Titre",
"suggestedDependencies": "Dépendances suggérées",
"suggestedSize": "Taille suggérée",
"takeControl": "Prendre le contrôle",
"takingControl": "Prise de contrôle…",
"thinkingElapsed": "Réflexion… ({{seconds}} s)",
"title": "Mode planification",
"tryAnExample": "Essayez un exemple :",
@@ -4673,7 +4660,8 @@
"untitledSession": "Session sans titre",
"usingDefault": "Modèle par défaut",
"whatToBuild": "Que voulez-vous construire ?",
"whatToBuildPlaceholder": "ex : Construire un système d'authentification avec connexion, inscription et réinitialisation du mot de passe…"
"whatToBuildPlaceholder": "ex : Construire un système d'authentification avec connexion, inscription et réinitialisation du mot de passe…",
"agentClarification": ""
},
"plugins": {
"addItem": "Ajouter un élément",
@@ -5909,7 +5897,11 @@
"autoTranslateImportedIssuesHelp": "",
"translationTargetLanguage": "",
"translationTargetLanguageHelp": "",
"followDashboardLanguage": ""
"followDashboardLanguage": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6354,7 +6346,10 @@
"ntfyEnabledHint": "",
"webhookEnabledHint": "",
"webhookUrlHint": "",
"webhookFormatHint": ""
"webhookFormatHint": "",
"agentClarification": "",
"agentClarificationEnable": "",
"agentClarificationHint": ""
},
"plugins": {
"fusionPlugins": "",
@@ -6645,7 +6640,21 @@
"maxConcurrentTasksHint": "",
"maxConcurrentVerifications": "",
"maxConcurrentVerificationsHint": "",
"pollIntervalMsHint": ""
"pollIntervalMsHint": "",
"executorToolFailureRetryCount": "",
"executorToolFailureRetryCountHelp": "",
"executorToolFailureRetryBackoffMs": "",
"executorToolFailureRetryBackoffMsHelp": "",
"executorToolFailureThreshold": "",
"executorToolFailureThresholdHelp": "",
"executorModelEscalationEnabled": "",
"executorModelEscalationEnabledHelp": "",
"executorEscalationProvider": "",
"executorEscalationProviderHelp": "",
"executorEscalationModelId": "",
"executorEscalationModelIdHelp": "",
"executorEscalationNodeId": "",
"executorEscalationNodeIdHelp": ""
},
"title": "Paramètres",
"worktrees": {
@@ -6706,7 +6715,8 @@
"showWorktreeGroupingHelp": "",
"copyFilesHelp": "",
"namingStyleNotApplicableWhenRecycling": "",
"howToNameFreshWorktreeDirectories": ""
"howToNameFreshWorktreeDirectories": "",
"recycleNotApplicableWithTaskIdNaming": ""
},
"fileBrowser": {
"currentDirectory": "",
@@ -7294,14 +7304,9 @@
"reviewSubtasksHint": "Modifiez les titres, descriptions, tailles et dépendances avant de créer toutes les tâches d'un coup.",
"sendToBackgroundAriaLabel": "Envoyer en arrière-plan",
"sendToBackgroundTitle": "Envoyer en arrière-plan",
"sessionActiveAnotherTab": "La session est active dans un autre onglet.",
"sessionActiveAnotherTabLive": "Cette session est active dans un autre onglet (signal de présence actif)",
"sessionActiveAnotherTabTakeover": "Cette session est active dans un autre onglet",
"showThinking": "Afficher la réflexion",
"sizeLabel": "Taille",
"startingBreakdown": "",
"takeControl": "Prendre le contrôle",
"takingControl": "Prise de contrôle...",
"titleLabel": "Titre",
"untitled": "Sans titre",
"waitingForThinking": ""
@@ -8481,7 +8486,11 @@
"updateFailedWithMessage": "",
"updateNow": "",
"updateSuccess": "",
"updating": ""
"updating": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"usage": {
"configureAuthHint": "Configurez l'authentification dans les paramètres pour voir les données d'utilisation.",

View File

@@ -1167,8 +1167,6 @@
"retrying": "재시도 중…"
},
"backgroundTasks": {
"confirmMessage": "이 세션은 다른 탭에서 활성화되어 있습니다. 그래도 여시겠습니까?",
"confirmTitle": "활성 세션 열기",
"dismissButton": "닫기",
"pillLabel_one": "",
"pillLabel_other": "",
@@ -1178,7 +1176,6 @@
"pillTitleWithInput_other": "",
"popoverHeader": "백그라운드 작업",
"status": {
"activeElsewhere": "다른 탭에서 활성화됨",
"failed": "실패",
"generating": "생성 중...",
"needsInput": "입력 필요"
@@ -3193,7 +3190,6 @@
"refinedScope": "정제된 범위",
"refineScope": "AI로 {{label}} 범위 정제",
"sendToBackground": "백그라운드로 보내기",
"sessionActiveAnotherTab": "다른 탭에서 세션이 활성화되어 있습니다.",
"showThinking": "생각 표시",
"startInterview": "인터뷰 시작",
"targetLabel": {
@@ -3838,9 +3834,6 @@
"selectGoal": "",
"selectMissionToView": "세부 정보를 보려면 미션을 선택하세요",
"sendToBackground": "백그라운드로 보내기",
"sessionActiveAnother": "세션이 다른 탭에서 활성화되어 있습니다.",
"sessionActiveHeartbeat": "이 세션은 다른 탭에서 활성화되어 있습니다 (실시간 하트비트)",
"sessionActiveTab": "이 세션은 다른 탭에서 활성화되어 있습니다",
"showDetails": "세부 정보 표시",
"showMetadata": "메타데이터 표시",
"showThinking": "사고 과정 표시",
@@ -3886,8 +3879,6 @@
"tabActivity_one": "",
"tabActivity_other": "",
"tabStructure": "구조",
"takeControl": "제어권 가져오기",
"takingControl": "제어권 가져오는 중...",
"targetBranch": "대상 브랜치",
"targetBranchPlaceholder": "예: main",
"taskIdPlaceholder": "작업 ID (예: FN-001)",
@@ -4638,8 +4629,6 @@
"remove": "제거",
"retryFailed": "재시도 실패. 다시 시도해 주세요.",
"retrying": "재시도 중...",
"sessionActiveOtherTab": "이 세션은 다른 탭에서 활성화되어 있습니다",
"sessionActiveOtherTabLive": "이 세션은 다른 탭에서 활성화되어 있습니다 (실시간 하트비트)",
"sessionFailed": "AI 연결 중 세션이 실패했습니다.",
"sessionFailed2": "세션 실패",
"showArchived": "보관 항목 표시",
@@ -4662,8 +4651,6 @@
"subtaskTitle": "제목",
"suggestedDependencies": "제안된 의존성",
"suggestedSize": "제안된 크기",
"takeControl": "제어권 가져오기",
"takingControl": "제어권 가져오는 중...",
"thinkingElapsed": "사고 중… ({{seconds}}초)",
"title": "계획 모드",
"tryAnExample": "예시를 시도해 보세요:",
@@ -4673,7 +4660,8 @@
"untitledSession": "제목 없는 세션",
"usingDefault": "기본값 사용",
"whatToBuild": "무엇을 만들고 싶으신가요?",
"whatToBuildPlaceholder": "예: 로그인, 회원가입, 비밀번호 재설정이 포함된 사용자 인증 시스템 구축..."
"whatToBuildPlaceholder": "예: 로그인, 회원가입, 비밀번호 재설정이 포함된 사용자 인증 시스템 구축...",
"agentClarification": ""
},
"plugins": {
"addItem": "항목 추가",
@@ -5909,7 +5897,11 @@
"autoTranslateImportedIssuesHelp": "",
"translationTargetLanguage": "",
"translationTargetLanguageHelp": "",
"followDashboardLanguage": ""
"followDashboardLanguage": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6354,7 +6346,10 @@
"ntfyEnabledHint": "",
"webhookEnabledHint": "",
"webhookUrlHint": "",
"webhookFormatHint": ""
"webhookFormatHint": "",
"agentClarification": "",
"agentClarificationEnable": "",
"agentClarificationHint": ""
},
"plugins": {
"fusionPlugins": "",
@@ -6645,7 +6640,21 @@
"maxConcurrentTasksHint": "",
"maxConcurrentVerifications": "",
"maxConcurrentVerificationsHint": "",
"pollIntervalMsHint": ""
"pollIntervalMsHint": "",
"executorToolFailureRetryCount": "",
"executorToolFailureRetryCountHelp": "",
"executorToolFailureRetryBackoffMs": "",
"executorToolFailureRetryBackoffMsHelp": "",
"executorToolFailureThreshold": "",
"executorToolFailureThresholdHelp": "",
"executorModelEscalationEnabled": "",
"executorModelEscalationEnabledHelp": "",
"executorEscalationProvider": "",
"executorEscalationProviderHelp": "",
"executorEscalationModelId": "",
"executorEscalationModelIdHelp": "",
"executorEscalationNodeId": "",
"executorEscalationNodeIdHelp": ""
},
"title": "설정",
"worktrees": {
@@ -6706,7 +6715,8 @@
"showWorktreeGroupingHelp": "",
"copyFilesHelp": "",
"namingStyleNotApplicableWhenRecycling": "",
"howToNameFreshWorktreeDirectories": ""
"howToNameFreshWorktreeDirectories": "",
"recycleNotApplicableWithTaskIdNaming": ""
},
"fileBrowser": {
"currentDirectory": "",
@@ -7294,14 +7304,9 @@
"reviewSubtasksHint": "모든 작업을 한 번에 생성하기 전에 제목, 설명, 크기, 의존성을 편집하세요.",
"sendToBackgroundAriaLabel": "백그라운드로 보내기",
"sendToBackgroundTitle": "백그라운드로 보내기",
"sessionActiveAnotherTab": "다른 탭에서 세션이 활성 상태입니다.",
"sessionActiveAnotherTabLive": "이 세션은 다른 탭에서 활성 상태입니다 (실시간 하트비트)",
"sessionActiveAnotherTabTakeover": "이 세션은 다른 탭에서 활성 상태입니다",
"showThinking": "사고 과정 보기",
"sizeLabel": "크기",
"startingBreakdown": "",
"takeControl": "제어 가져오기",
"takingControl": "제어 가져오는 중...",
"titleLabel": "제목",
"untitled": "제목 없음",
"waitingForThinking": ""
@@ -8481,7 +8486,11 @@
"updateFailedWithMessage": "",
"updateNow": "",
"updateSuccess": "",
"updating": ""
"updating": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"usage": {
"configureAuthHint": "사용량 데이터를 보려면 설정에서 인증을 구성하세요.",

View File

@@ -1167,8 +1167,6 @@
"retrying": "重试中…"
},
"backgroundTasks": {
"confirmMessage": "此会话在另一个标签页中处于活跃状态。仍然打开?",
"confirmTitle": "打开活跃会话",
"dismissButton": "关闭",
"pillLabel_one": "",
"pillLabel_other": "",
@@ -1178,7 +1176,6 @@
"pillTitleWithInput_other": "",
"popoverHeader": "后台任务",
"status": {
"activeElsewhere": "在另一个标签页中活跃",
"failed": "失败",
"generating": "生成中...",
"needsInput": "需要输入"
@@ -3193,7 +3190,6 @@
"refinedScope": "精炼范围",
"refineScope": "用AI精炼{{label}}范围",
"sendToBackground": "发送到后台",
"sessionActiveAnotherTab": "会话在另一个标签页中处于活跃状态。",
"showThinking": "显示思考",
"startInterview": "开始面试",
"targetLabel": {
@@ -3838,9 +3834,6 @@
"selectGoal": "",
"selectMissionToView": "选择一个任务以查看详情",
"sendToBackground": "发送到后台",
"sessionActiveAnother": "会话在另一个标签页中处于活跃状态。",
"sessionActiveHeartbeat": "此会话在另一个标签页中处于活跃状态(实时心跳)",
"sessionActiveTab": "此会话在另一个标签页中处于活跃状态",
"showDetails": "显示详情",
"showMetadata": "显示元数据",
"showThinking": "显示思考",
@@ -3886,8 +3879,6 @@
"tabActivity_one": "",
"tabActivity_other": "",
"tabStructure": "结构",
"takeControl": "接管",
"takingControl": "正在接管...",
"targetBranch": "目标分支",
"targetBranchPlaceholder": "例如 main",
"taskIdPlaceholder": "任务 ID(例如 FN-001)",
@@ -4638,8 +4629,6 @@
"remove": "移除",
"retryFailed": "重试失败,请再试一次。",
"retrying": "重试中…",
"sessionActiveOtherTab": "此会话在另一个标签页中处于活动状态",
"sessionActiveOtherTabLive": "此会话在另一个标签页中处于活动状态(实时心跳)",
"sessionFailed": "联系 AI 时会话失败。",
"sessionFailed2": "会话失败",
"showArchived": "显示已归档",
@@ -4662,8 +4651,6 @@
"subtaskTitle": "标题",
"suggestedDependencies": "建议依赖项",
"suggestedSize": "建议规模",
"takeControl": "接管控制",
"takingControl": "正在接管控制…",
"thinkingElapsed": "思考中…({{seconds}} 秒)",
"title": "规划模式",
"tryAnExample": "试试示例:",
@@ -4673,7 +4660,8 @@
"untitledSession": "无标题会话",
"usingDefault": "使用默认",
"whatToBuild": "您想构建什么?",
"whatToBuildPlaceholder": "例如,构建一个包含登录、注册和密码重置的用户认证系统..."
"whatToBuildPlaceholder": "例如,构建一个包含登录、注册和密码重置的用户认证系统...",
"agentClarification": ""
},
"plugins": {
"addItem": "添加项目",
@@ -5909,7 +5897,11 @@
"autoTranslateImportedIssuesHelp": "",
"translationTargetLanguage": "",
"translationTargetLanguageHelp": "",
"followDashboardLanguage": ""
"followDashboardLanguage": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6354,7 +6346,10 @@
"ntfyEnabledHint": "",
"webhookEnabledHint": "",
"webhookUrlHint": "",
"webhookFormatHint": ""
"webhookFormatHint": "",
"agentClarification": "",
"agentClarificationEnable": "",
"agentClarificationHint": ""
},
"plugins": {
"fusionPlugins": "",
@@ -6645,7 +6640,21 @@
"maxConcurrentTasksHint": "",
"maxConcurrentVerifications": "",
"maxConcurrentVerificationsHint": "",
"pollIntervalMsHint": ""
"pollIntervalMsHint": "",
"executorToolFailureRetryCount": "",
"executorToolFailureRetryCountHelp": "",
"executorToolFailureRetryBackoffMs": "",
"executorToolFailureRetryBackoffMsHelp": "",
"executorToolFailureThreshold": "",
"executorToolFailureThresholdHelp": "",
"executorModelEscalationEnabled": "",
"executorModelEscalationEnabledHelp": "",
"executorEscalationProvider": "",
"executorEscalationProviderHelp": "",
"executorEscalationModelId": "",
"executorEscalationModelIdHelp": "",
"executorEscalationNodeId": "",
"executorEscalationNodeIdHelp": ""
},
"title": "设置",
"worktrees": {
@@ -6706,7 +6715,8 @@
"showWorktreeGroupingHelp": "",
"copyFilesHelp": "",
"namingStyleNotApplicableWhenRecycling": "",
"howToNameFreshWorktreeDirectories": ""
"howToNameFreshWorktreeDirectories": "",
"recycleNotApplicableWithTaskIdNaming": ""
},
"fileBrowser": {
"currentDirectory": "",
@@ -7294,14 +7304,9 @@
"reviewSubtasksHint": "在一次性创建所有任务之前,编辑标题、描述、大小和依赖关系。",
"sendToBackgroundAriaLabel": "发送到后台",
"sendToBackgroundTitle": "发送到后台",
"sessionActiveAnotherTab": "会话正在另一个标签页中运行。",
"sessionActiveAnotherTabLive": "此会话正在另一个标签页中运行(实时心跳)",
"sessionActiveAnotherTabTakeover": "此会话正在另一个标签页中运行",
"showThinking": "显示思考过程",
"sizeLabel": "规模",
"startingBreakdown": "",
"takeControl": "接管控制",
"takingControl": "正在接管控制...",
"titleLabel": "标题",
"untitled": "无标题",
"waitingForThinking": ""
@@ -8481,7 +8486,11 @@
"updateFailedWithMessage": "",
"updateNow": "",
"updateSuccess": "",
"updating": ""
"updating": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"usage": {
"configureAuthHint": "在设置中配置身份验证以查看使用数据。",

View File

@@ -1167,8 +1167,6 @@
"retrying": "重試中…"
},
"backgroundTasks": {
"confirmMessage": "此工作階段在另一個標籤頁中處於活躍狀態。仍然開啟?",
"confirmTitle": "開啟活躍工作階段",
"dismissButton": "關閉",
"pillLabel_one": "",
"pillLabel_other": "",
@@ -1178,7 +1176,6 @@
"pillTitleWithInput_other": "",
"popoverHeader": "背景任務",
"status": {
"activeElsewhere": "在另一個標籤頁中活躍",
"failed": "失敗",
"generating": "生成中...",
"needsInput": "需要輸入"
@@ -3193,7 +3190,6 @@
"refinedScope": "精煉範圍",
"refineScope": "用AI精煉{{label}}範圍",
"sendToBackground": "傳送到背景",
"sessionActiveAnotherTab": "工作階段在另一個標籤頁中處於活躍狀態。",
"showThinking": "顯示思考",
"startInterview": "開始面試",
"targetLabel": {
@@ -3838,9 +3834,6 @@
"selectGoal": "",
"selectMissionToView": "選擇一個任務以查看詳情",
"sendToBackground": "傳送到背景",
"sessionActiveAnother": "工作階段在另一個分頁中處於活躍狀態。",
"sessionActiveHeartbeat": "此工作階段在另一個分頁中處於活躍狀態(即時心跳)",
"sessionActiveTab": "此工作階段在另一個分頁中處於活躍狀態",
"showDetails": "顯示詳情",
"showMetadata": "顯示中繼資料",
"showThinking": "顯示思考",
@@ -3886,8 +3879,6 @@
"tabActivity_one": "",
"tabActivity_other": "",
"tabStructure": "結構",
"takeControl": "接管",
"takingControl": "正在接管...",
"targetBranch": "目標分支",
"targetBranchPlaceholder": "例如 main",
"taskIdPlaceholder": "任務 ID(例如 FN-001)",
@@ -4638,8 +4629,6 @@
"remove": "移除",
"retryFailed": "重試失敗,請再試一次。",
"retrying": "重試中…",
"sessionActiveOtherTab": "此工作階段在另一個分頁中處於活動狀態",
"sessionActiveOtherTabLive": "此工作階段在另一個分頁中處於活動狀態(即時心跳)",
"sessionFailed": "聯絡 AI 時工作階段失敗。",
"sessionFailed2": "工作階段失敗",
"showArchived": "顯示已封存",
@@ -4662,8 +4651,6 @@
"subtaskTitle": "標題",
"suggestedDependencies": "建議依賴項目",
"suggestedSize": "建議規模",
"takeControl": "接管控制",
"takingControl": "正在接管控制…",
"thinkingElapsed": "思考中…({{seconds}} 秒)",
"title": "規劃模式",
"tryAnExample": "試試範例:",
@@ -4673,7 +4660,8 @@
"untitledSession": "未命名工作階段",
"usingDefault": "使用預設",
"whatToBuild": "您想建構什麼?",
"whatToBuildPlaceholder": "例如,建構一個包含登入、註冊和密碼重設的使用者驗證系統..."
"whatToBuildPlaceholder": "例如,建構一個包含登入、註冊和密碼重設的使用者驗證系統...",
"agentClarification": ""
},
"plugins": {
"addItem": "新增項目",
@@ -5909,7 +5897,11 @@
"autoTranslateImportedIssuesHelp": "",
"translationTargetLanguage": "",
"translationTargetLanguageHelp": "",
"followDashboardLanguage": ""
"followDashboardLanguage": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"globalGeneral": {
"andShowsUpdateNoticesInTheCLIAnd": "",
@@ -6354,7 +6346,10 @@
"ntfyEnabledHint": "",
"webhookEnabledHint": "",
"webhookUrlHint": "",
"webhookFormatHint": ""
"webhookFormatHint": "",
"agentClarification": "",
"agentClarificationEnable": "",
"agentClarificationHint": ""
},
"plugins": {
"fusionPlugins": "",
@@ -6645,7 +6640,21 @@
"maxConcurrentTasksHint": "",
"maxConcurrentVerifications": "",
"maxConcurrentVerificationsHint": "",
"pollIntervalMsHint": ""
"pollIntervalMsHint": "",
"executorToolFailureRetryCount": "",
"executorToolFailureRetryCountHelp": "",
"executorToolFailureRetryBackoffMs": "",
"executorToolFailureRetryBackoffMsHelp": "",
"executorToolFailureThreshold": "",
"executorToolFailureThresholdHelp": "",
"executorModelEscalationEnabled": "",
"executorModelEscalationEnabledHelp": "",
"executorEscalationProvider": "",
"executorEscalationProviderHelp": "",
"executorEscalationModelId": "",
"executorEscalationModelIdHelp": "",
"executorEscalationNodeId": "",
"executorEscalationNodeIdHelp": ""
},
"title": "設定",
"worktrees": {
@@ -6706,7 +6715,8 @@
"showWorktreeGroupingHelp": "",
"copyFilesHelp": "",
"namingStyleNotApplicableWhenRecycling": "",
"howToNameFreshWorktreeDirectories": ""
"howToNameFreshWorktreeDirectories": "",
"recycleNotApplicableWithTaskIdNaming": ""
},
"fileBrowser": {
"currentDirectory": "",
@@ -7294,14 +7304,9 @@
"reviewSubtasksHint": "在一次性建立所有任務之前,編輯標題、描述、大小和相依關係。",
"sendToBackgroundAriaLabel": "傳送至背景",
"sendToBackgroundTitle": "傳送至背景",
"sessionActiveAnotherTab": "工作階段正在另一個索引標籤中執行。",
"sessionActiveAnotherTabLive": "此工作階段正在另一個索引標籤中執行(即時心跳)",
"sessionActiveAnotherTabTakeover": "此工作階段正在另一個索引標籤中執行",
"showThinking": "顯示思考過程",
"sizeLabel": "規模",
"startingBreakdown": "",
"takeControl": "接管控制",
"takingControl": "正在接管控制...",
"titleLabel": "標題",
"untitled": "無標題",
"waitingForThinking": ""
@@ -8481,7 +8486,11 @@
"updateFailedWithMessage": "",
"updateNow": "",
"updateSuccess": "",
"updating": ""
"updating": "",
"restartFailed": "",
"restartNow": "",
"restartUnavailable": "",
"restarting": ""
},
"usage": {
"configureAuthHint": "在設定中設定身份驗證以查看使用數據。",

View File

@@ -1169,8 +1169,6 @@ export default interface Resources {
"retrying": "Retrying…"
},
"backgroundTasks": {
"confirmMessage": "This session is active in another tab. Open anyway?",
"confirmTitle": "Open Active Session",
"dismissButton": "Dismiss",
"pillLabel_one": "AI {{count}}",
"pillLabel_other": "AI {{count}}",
@@ -1180,7 +1178,6 @@ export default interface Resources {
"pillTitle_other": "{{count}} background AI task",
"popoverHeader": "Background Tasks",
"status": {
"activeElsewhere": "active in another tab",
"failed": "Failed",
"generating": "generating...",
"needsInput": "needs input"
@@ -3205,7 +3202,6 @@ export default interface Resources {
"refineScope": "Refine {{label}} scope with AI",
"refinedScope": "Refined Scope",
"sendToBackground": "Send to background",
"sessionActiveAnotherTab": "Session is active in another tab.",
"showThinking": "Show thinking",
"startInterview": "Start Interview",
"targetLabel": {
@@ -3850,9 +3846,6 @@ export default interface Resources {
"selectGoal": "Select an active goal",
"selectMissionToView": "Select a mission to view details",
"sendToBackground": "Send to background",
"sessionActiveAnother": "Session is active in another tab.",
"sessionActiveHeartbeat": "This session is active in another tab (live heartbeat)",
"sessionActiveTab": "This session is active in another tab",
"showDetails": "Show details",
"showMetadata": "Show metadata",
"showThinking": "Show thinking",
@@ -3898,8 +3891,6 @@ export default interface Resources {
"tabActivity_one": "Activity ({{count}})",
"tabActivity_other": "Activity ({{count}})",
"tabStructure": "Structure",
"takeControl": "Take Control",
"takingControl": "Taking control...",
"targetBranch": "Target branch",
"targetBranchPlaceholder": "e.g. main",
"taskIdPlaceholder": "Task ID (e.g., FN-001)",
@@ -4558,6 +4549,7 @@ export default interface Resources {
"additionalComments": "Additional comments (optional)",
"additionalCommentsPlaceholder": "Add any extra context or direction...",
"advancedSettings": "Advanced planning settings",
"agentClarification": "Allow agent clarification questions",
"aiThinking": "AI is thinking...",
"archiveSession": "Archive session",
"backToSessions": "Back to sessions",
@@ -4584,7 +4576,6 @@ export default interface Resources {
"deleteSession": "Delete session",
"dependencies": "Dependencies",
"dependencyCycle": "Dependencies contain a cycle. Remove circular references before creating tasks.",
"agentClarification": "Allow agent clarification questions",
"depthBlurb": "Plan size sets default interview depth. Questions lets you override with an exact count.",
"depthLarge": "Large",
"depthMedium": "Medium",
@@ -4651,8 +4642,6 @@ export default interface Resources {
"remove": "Remove",
"retryFailed": "Retry failed. Please try again.",
"retrying": "Retrying...",
"sessionActiveOtherTab": "This session is active in another tab",
"sessionActiveOtherTabLive": "This session is active in another tab (live heartbeat)",
"sessionFailed": "Session failed while contacting the AI.",
"sessionFailed2": "Session failed",
"showArchived": "Show archived",
@@ -4675,8 +4664,6 @@ export default interface Resources {
"subtaskTitle": "Title",
"suggestedDependencies": "Suggested Dependencies",
"suggestedSize": "Suggested Size",
"takeControl": "Take Control",
"takingControl": "Taking control...",
"thinkingElapsed": "Thinking… ({{seconds}}s)",
"title": "Planning Mode",
"tryAnExample": "Try an example:",
@@ -5897,6 +5884,10 @@ export default interface Resources {
"recentVerbatimRoomMessages": "Recent verbatim room messages",
"requireChangelogUpdateExistingChangelog": "Require changelog update (existing changelog)",
"requireChangesetChangesetMd": "Require changeset (.changeset/*.md)",
"restartFailed": "Restart could not be scheduled. Try restarting Fusion manually.",
"restartNow": "Restart Fusion",
"restartUnavailable": "Needs a supervising parent — restart Fusion manually without --no-supervise.",
"restarting": "Restarting… Your connection will close shortly.",
"roomCompactionFetchLimit": "Room compaction fetch limit",
"roomSummaryMaxCharacters": "Room summary max characters",
"searchTheTrackingRepoForLikelyDuplicatesBefore": " Search the tracking repo for likely duplicates before opening a new issue ",
@@ -6337,10 +6328,10 @@ export default interface Resources {
},
"notifications": {
"accessTokenOptional": "Access token (optional)",
"advanced": "Advanced",
"agentClarification": "Agent clarification",
"agentClarificationEnable": "Allow the planner to ask questions",
"agentClarificationHint": "Default: disabled. When enabled, planner questions pause planning and notify your mailbox.",
"advanced": "Advanced",
"allFailuresLegacy": "All failures (legacy)",
"baseURLForDeepLinksInNotificationsWhen": " Base URL for deep links in notifications. When set, clicking a notification opens the dashboard directly to the task. No default — unset. ",
"customNtfyServerURLOptional": "Custom ntfy server URL (optional)",
@@ -6650,6 +6641,20 @@ export default interface Resources {
"enableAutomaticTaskArchiving": " Enable automatic task archiving ",
"enablePlanStalenessEnforcement": " Enable plan staleness enforcement ",
"escalateHighFanOutBlockersOnlyAfterThey": "Escalate high fan-out blockers only after they remain in in-progress or in-review for this many hours (age source: columnMovedAt, fallback updatedAt). Default: 2 hours.",
"executorEscalationModelId": "Escalation model ID",
"executorEscalationModelIdHelp": "Alternate model ID. No default — unset; requires an escalation provider.",
"executorEscalationNodeId": "Escalation node ID",
"executorEscalationNodeIdHelp": "Optional configured node; a node target re-enters scheduler routing. No default — unset.",
"executorEscalationProvider": "Escalation provider",
"executorEscalationProviderHelp": "Provider for the alternate model. No default — unset; requires an alternate model ID.",
"executorModelEscalationEnabled": "Escalate after tool-failure retries",
"executorModelEscalationEnabledHelp": "After same-model retries are exhausted, try one configured alternate model or node. Default: disabled.",
"executorToolFailureRetryBackoffMs": "Tool-failure retry backoff (ms)",
"executorToolFailureRetryBackoffMsHelp": "Unref'd wait before retrying. Default: 2000.",
"executorToolFailureRetryCount": "Executor tool-failure retries",
"executorToolFailureRetryCountHelp": "Same-model retries after consecutive tool-call failures. Set 0 to disable. Default: 2.",
"executorToolFailureThreshold": "Consecutive tool failures",
"executorToolFailureThresholdHelp": "Terminal tool errors required before retrying. Default: 3.",
"fullAgentLog": "Full agent log",
"globalMaxConcurrent": "Global Max Concurrent",
"heartbeatScopeDiscipline": "Heartbeat Scope Discipline",
@@ -6728,7 +6733,7 @@ export default interface Resources {
"failAndPauseTheTaskDefault": "Fail and pause the task (default)",
"fallBackToFusionsNativeWorktreeBackend": "Fall back to Fusion's native worktree backend",
"forWorktreeCreateSyncPruneAndRemoveOperations": " for worktree create, sync, prune, and remove operations and follows worktrunk&apos;s directory layout. ",
"howToNameFreshWorktreeDirectories": "How to name fresh worktree directories. Only applies when recycling is off. Default: random.",
"howToNameFreshWorktreeDirectories": "How to name fresh worktree directories. Only applies when recycling is off. \"Task ID\" also pins each task to its own worktree directory for its whole lifecycle (mutually exclusive with recycling). Default: random.",
"inAdditionToTheRemoteRebaseAboveAlso": " In addition to the remote rebase above, also rebase the task branch onto the local default-branch HEAD (rootDir). This catches sibling tasks that merged locally but haven't been pushed yet — without it, two concurrent tasks where one deletes code can have the other silently re-introduce it via the fallback strategy. Enabled by default; only disable if it causes issues with your workflow. ",
"installTheWorktrunkBinaryBelowToEnableThis": "Install the worktrunk binary below to enable this integration.",
"installWorktrunk": "Install worktrunk binary",
@@ -6736,8 +6741,8 @@ export default interface Resources {
"keepsProgressMovingBySwitchingToFusionApos": " keeps progress moving by switching to Fusion&apos;s built-in worktree backend. ",
"limitsTotalGitWorktreesIncludingInReviewTasks": "Limits total git worktrees including in-review tasks. Default: 4.",
"maxWorktrees": "Max Worktrees",
"namingStyleNotApplicableWhenRecycling": "Naming style is not applicable when recycling worktrees — pooled worktrees retain their existing names",
"offByDefaultOptInWhenEnabledCompleted": "Off by default (opt-in). When enabled, completed task worktrees are returned to an idle pool instead of being deleted, preserving build caches for faster startup",
"namingStyleNotApplicableWhenRecycling": "Naming style is not applicable when recycling worktrees — pooled worktrees retain their existing names. \"Task ID\" is unavailable here because task-pinned worktrees are mutually exclusive with recycling; turn off Recycle worktrees to use it.",
"offByDefaultOptInWhenEnabledCompleted": "Off by default (opt-in). When enabled, completed task worktrees are returned to an idle pool instead of being deleted, preserving build caches for faster startup. Mutually exclusive with Task ID worktree naming.",
"openApprovals": "Open Approvals",
"optionalLeaveBlankToAutoResolveFusionWill": "Optional. Leave blank to auto-resolve; Fusion will offer to install on first use.",
"optionalSupports": " Optional. Supports ",
@@ -6745,6 +6750,7 @@ export default interface Resources {
"randomNamesEGSwiftFalcon": "Random names (e.g., swift-falcon)",
"rebaseFromRemoteBeforeMerge": " Rebase from remote before merge ",
"rebaseRemote": "Rebase Remote",
"recycleNotApplicableWithTaskIdNaming": "Not available with Task ID worktree naming — that mode pins each task to its own worktree directory, which is mutually exclusive with the recycle pool. Switch naming to Random or Task title to enable recycling.",
"recycleWorktrees": " Recycle worktrees ",
"selectWorktreesDir": "Select worktrees directory",
"shellCommandToRunInEachNewWorktree": "Shell command to run in each new worktree after creation. No default — unset.",
@@ -7310,14 +7316,9 @@ export default interface Resources {
"reviewSubtasksHint": "Edit titles, descriptions, sizes, and dependencies before creating all tasks at once.",
"sendToBackgroundAriaLabel": "Send to background",
"sendToBackgroundTitle": "Send to background",
"sessionActiveAnotherTab": "Session is active in another tab.",
"sessionActiveAnotherTabLive": "This session is active in another tab (live heartbeat)",
"sessionActiveAnotherTabTakeover": "This session is active in another tab",
"showThinking": "Show thinking",
"sizeLabel": "Size",
"startingBreakdown": "Starting subtask breakdown...",
"takeControl": "Take Control",
"takingControl": "Taking control...",
"titleLabel": "Title",
"untitled": "Untitled",
"waitingForThinking": "Waiting for AI progress updates..."
@@ -8536,6 +8537,10 @@ export default interface Resources {
"learnMore": "Learn more",
"message": "Update available: v{{latestVersion}} (current: v{{currentVersion}}). Run fn update for an installed CLI, or pull this source checkout.",
"releaseNotes": "Release notes",
"restartFailed": "Restart could not be scheduled. Try restarting Fusion manually.",
"restartNow": "Restart Fusion",
"restartUnavailable": "Needs a supervising parent — restart Fusion manually without --no-supervise.",
"restarting": "Restarting… Your connection will close shortly.",
"updateFailed": "Update failed",
"updateFailedWithMessage": "Update failed: {{message}}",
"updateNow": "Update now",