From d666e28955ff05b240d89196963c2b130e3c9afe Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Tue, 2 Dec 2025 02:45:57 +0800 Subject: [PATCH] faet(stage-ui,stage-web,stage-tamagotchi): ingest and process messages & contexts from sevrer channel --- apps/stage-tamagotchi/src/renderer/App.vue | 9 +- apps/stage-web/src/App.vue | 9 +- .../src/types/websocket/events.ts | 29 +++ packages/stage-ui/src/stores/chat.test.ts | 121 ++++++++++ packages/stage-ui/src/stores/chat.ts | 216 ++++++++++++++++-- .../src/stores/mods/api/channel-server.ts | 67 +++++- .../src/stores/plugins/chat-context-bridge.ts | 55 +++++ 7 files changed, 477 insertions(+), 29 deletions(-) create mode 100644 packages/stage-ui/src/stores/chat.test.ts create mode 100644 packages/stage-ui/src/stores/plugins/chat-context-bridge.ts diff --git a/apps/stage-tamagotchi/src/renderer/App.vue b/apps/stage-tamagotchi/src/renderer/App.vue index 609722eb0..d0763aad2 100644 --- a/apps/stage-tamagotchi/src/renderer/App.vue +++ b/apps/stage-tamagotchi/src/renderer/App.vue @@ -2,10 +2,11 @@ import { defineInvoke, defineInvokeHandler } from '@moeru/eventa' import { useDisplayModelsStore } from '@proj-airi/stage-ui/stores/display-models' import { useOnboardingStore } from '@proj-airi/stage-ui/stores/onboarding' +import { installChatContextBridge } from '@proj-airi/stage-ui/stores/plugins/chat-context-bridge' import { useSettings } from '@proj-airi/stage-ui/stores/settings' import { useTheme } from '@proj-airi/ui' import { storeToRefs } from 'pinia' -import { onMounted, watch } from 'vue' +import { onMounted, onUnmounted, watch } from 'vue' import { useI18n } from 'vue-i18n' import { RouterView, useRoute, useRouter } from 'vue-router' @@ -21,6 +22,7 @@ const { language, themeColorsHue, themeColorsHueDynamic } = storeToRefs(settings const onboardingStore = useOnboardingStore() const router = useRouter() const route = useRoute() +let disposeChatBridge: (() => void) | undefined watch(language, () => { i18n.locale.value = language.value @@ -38,6 +40,9 @@ onMounted(async () => { await displayModelsStore.loadDisplayModelsFromIndexedDB() await settingsStore.initializeStageModel() + const bridge = installChatContextBridge() + disposeChatBridge = bridge.dispose + const context = useElectronEventaContext() const startTrackingCursorPoint = defineInvoke(context.value, electronStartTrackMousePosition) await startTrackingCursorPoint() @@ -53,6 +58,8 @@ watch(themeColorsHue, () => { watch(themeColorsHueDynamic, () => { document.documentElement.classList.toggle('dynamic-hue', themeColorsHueDynamic.value) }, { immediate: true }) + +onUnmounted(() => disposeChatBridge?.())