Improve reconnect status feedback (#2931)

* fix(app): debounce reconnect status toast

Keep reconnect transport immediate while delaying the visible status toast so brief outages stay quiet. Scope the toast to the active retained panel, keep its copy and status dot consistent across locales, and add a manual real relay deployment journey that verifies streaming recovery without user action.

* fix(app): isolate manual relay deployment check

Keep the deployment journey out of the provider-wide real test project so it runs only when its local relay prerequisites are explicitly requested. Also keep the relay teardown active when packaged daemon startup or later cleanup fails.

* fix(app): preserve reconnect toast across tabs

Keep reconnect presentation timing at the host level so switching between retained panels does not restart the debounce or flash the toast. Add a browser regression covering a visible outage across retained tab switches.

* fix(app): anchor reconnect debounce to host status

Record host connection status transitions independently of mounted agent panels and preserve the outage start across reconnecting states. Use that host-level timestamp when a visible agent panel appears, with runtime coverage for the transition lifecycle.

* fix(app): reset reconnect toast state per outage

* test(app): build relay journey prerequisites
This commit is contained in:
Mohamed Boudra
2026-08-06 13:45:34 +02:00
committed by GitHub
parent e99eb7de3d
commit c1f7ed3198
24 changed files with 725 additions and 25 deletions
+1 -1
View File
@@ -205,7 +205,7 @@ export const ar: TranslationResources = {
states: {
notFound: "لم يتم العثور على Agent",
failedToLoad: "فشل تحميل الوكيل",
reconnecting: "جارٍ إعادة الاتصال...",
reconnecting: "جارٍ إعادة الاتصال",
timelineSyncFailed: "تعذر تحديث سجل الوكيل. جارٍ إعادة المحاولة…",
archivingTitle: "وكيل الارشيف...",
archivingSubtitle: "الرجاء الانتظار بينما نقوم بأرشفة هذا الوكيل.",
+1 -1
View File
@@ -203,7 +203,7 @@ export const en = {
states: {
notFound: "Agent not found",
failedToLoad: "Failed to load agent",
reconnecting: "Reconnecting...",
reconnecting: "Reconnecting",
timelineSyncFailed: "Couldn't refresh agent history. Retrying…",
archivingTitle: "Archiving agent...",
archivingSubtitle: "Please wait while we archive this agent.",
+1 -1
View File
@@ -205,7 +205,7 @@ export const es: TranslationResources = {
states: {
notFound: "Agentno encontrado",
failedToLoad: "No se pudo cargar el agente",
reconnecting: "Reconectando...",
reconnecting: "Reconectando",
timelineSyncFailed: "No se pudo actualizar el historial del agente. Reintentando…",
archivingTitle: "Agente de archivo...",
archivingSubtitle: "Espere mientras archivamos este agente.",
+1 -1
View File
@@ -207,7 +207,7 @@ export const fr: TranslationResources = {
states: {
notFound: "Agentintrouvable",
failedToLoad: "Échec du chargement de l'agent",
reconnecting: "Reconnexion...",
reconnecting: "Reconnexion",
timelineSyncFailed: "Impossible d’actualiser l’historique de l’agent. Nouvelle tentative…",
archivingTitle: "Agent d'archivage...",
archivingSubtitle: "Veuillez patienter pendant que nous archivons cet agent.",
+1 -1
View File
@@ -205,7 +205,7 @@ export const ja: TranslationResources = {
states: {
notFound: "エージェントが見つかりません",
failedToLoad: "エージェントの読み込みに失敗しました",
reconnecting: "再接続中...",
reconnecting: "再接続中",
timelineSyncFailed: "エージェントの履歴を更新できませんでした。再試行しています…",
archivingTitle: "エージェントをアーカイブ中...",
archivingSubtitle: "このエージェントをアーカイブするまでお待ちください。",
+1 -1
View File
@@ -205,7 +205,7 @@ export const ko: TranslationResources = {
states: {
notFound: "에이전트를 찾을 수 없습니다",
failedToLoad: "에이전트를 불러오지 못했습니다",
reconnecting: "다시 연결하는 중...",
reconnecting: "다시 연결하는 중",
timelineSyncFailed: "에이전트 기록을 새로고침할 수 없습니다. 재시도 중…",
archivingTitle: "에이전트 보관 중...",
archivingSubtitle: "이 에이전트를 보관하는 동안 잠시 기다려 주세요.",
+1 -1
View File
@@ -205,7 +205,7 @@ export const ptBR: TranslationResources = {
states: {
notFound: "Agente não encontrado",
failedToLoad: "Falha ao carregar agente",
reconnecting: "Reconectando...",
reconnecting: "Reconectando",
timelineSyncFailed: "Não foi possível atualizar o histórico do agente. Tentando novamente…",
archivingTitle: "Arquivando agente...",
archivingSubtitle: "Aguarde enquanto arquivamos este agente.",
+1 -1
View File
@@ -205,7 +205,7 @@ export const ru: TranslationResources = {
states: {
notFound: "Agent не найден",
failedToLoad: "Не удалось загрузить агент",
reconnecting: "Повторное подключение...",
reconnecting: "Повторное подключение",
timelineSyncFailed: "Не удалось обновить историю агента. Повторная попытка…",
archivingTitle: "Архивный агент...",
archivingSubtitle: "Пожалуйста, подождите, пока мы архивируем этого агента.",
+1 -1
View File
@@ -205,7 +205,7 @@ export const zhCN: TranslationResources = {
states: {
notFound: "未找到 Agent",
failedToLoad: "加载 Agent 失败",
reconnecting: "正在重连...",
reconnecting: "正在重连",
timelineSyncFailed: "无法刷新代理历史记录。正在重试…",
archivingTitle: "正在归档 Agent...",
archivingSubtitle: "请稍候,我们正在归档这个 Agent。",