From 457075d0aa937649476374f9a5876db55904dc08 Mon Sep 17 00:00:00 2001 From: Asish Kumar <87874775+officialasishkumar@users.noreply.github.com> Date: Tue, 19 May 2026 16:38:55 +0530 Subject: [PATCH] fix(stage-tamagotchi): keep chat sync alive across stage routes (#1821) --- apps/stage-tamagotchi/src/renderer/App.vue | 8 ++ .../src/renderer/pages/chat.vue | 14 ---- .../src/renderer/pages/index.vue | 2 - .../stores/chat-sync-lifecycle.test.ts | 78 +++++++++++++++++++ .../renderer/stores/chat-sync-lifecycle.ts | 46 +++++++++++ 5 files changed, 132 insertions(+), 16 deletions(-) create mode 100644 apps/stage-tamagotchi/src/renderer/stores/chat-sync-lifecycle.test.ts create mode 100644 apps/stage-tamagotchi/src/renderer/stores/chat-sync-lifecycle.ts diff --git a/apps/stage-tamagotchi/src/renderer/App.vue b/apps/stage-tamagotchi/src/renderer/App.vue index cc51f7841..b5bd7a054 100644 --- a/apps/stage-tamagotchi/src/renderer/App.vue +++ b/apps/stage-tamagotchi/src/renderer/App.vue @@ -51,6 +51,7 @@ import { import { initializeElectronAuthCallbackBridge } from './bridges/electron-auth-callback' import { initializeStageThreeRuntimeTraceBridge } from './bridges/stage-three-runtime-trace' import { useLanguage } from './composables/use-language' +import { createChatSyncWindowLifecycle } from './stores/chat-sync-lifecycle' import { useTamagotchiMcpToolsStore } from './stores/mcp-tools' import { useTamagotchiPluginToolsStore } from './stores/plugin-tools' import { useServerChannelSettingsStore } from './stores/settings/server-channel' @@ -96,6 +97,7 @@ const getMainLocale = useElectronEventaInvoke(i18nGetLocale) const setLocale = useElectronEventaInvoke(i18nSetLocale) const getGodotStageStatus = useElectronEventaInvoke(electronGodotStageGetStatus) const syncArtistryConfig = useElectronEventaInvoke(artistrySyncConfig) +const chatSyncLifecycle = createChatSyncWindowLifecycle(route.path) const isChatWindowRoute = () => route.path === '/chat' const isGodotStageRoute = () => route.path === '/' || route.path.startsWith('/settings') const isWidgetsWindowRoute = () => route.path === '/widgets' @@ -196,6 +198,8 @@ context.value.on(electronGodotStageStatusChanged, (event) => { }) onMounted(async () => { + chatSyncLifecycle.initialize() + // NOTICE: Issue #1658 // When Electron restarts, renderer localStorage may not be flushed to disk. // The store's onMounted hook falls back to navigator.language, which triggers @@ -256,6 +260,10 @@ onMounted(async () => { inferencePreload.triggerPreload() }) +onUnmounted(() => { + chatSyncLifecycle.dispose() +}) + watch(themeColorsHue, () => { document.documentElement.style.setProperty('--chromatic-hue', themeColorsHue.value.toString()) }, { immediate: true }) diff --git a/apps/stage-tamagotchi/src/renderer/pages/chat.vue b/apps/stage-tamagotchi/src/renderer/pages/chat.vue index 294e0b34e..fdc032ca7 100644 --- a/apps/stage-tamagotchi/src/renderer/pages/chat.vue +++ b/apps/stage-tamagotchi/src/renderer/pages/chat.vue @@ -1,20 +1,6 @@