From bc9baa4e3eaf618e7dee8328ab6bef1b4b374e18 Mon Sep 17 00:00:00 2001 From: RainbowBird Date: Sat, 6 Jun 2026 00:53:34 +0800 Subject: [PATCH] fix(stage): cover manual TTS stop across layouts Add the stop-speaking control to the mobile shared input layout and the Electron Tamagotchi chat input so Web/shared, mobile, and Electron all expose the same manual TTS interruption path. Signed-off-by: RainbowBird Commit-Message-Assisted-by: Codex --- .../renderer/components/InteractiveArea.vue | 20 +++++++++++++++++++ .../Layouts/MobileInteractiveArea.vue | 15 ++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/apps/stage-tamagotchi/src/renderer/components/InteractiveArea.vue b/apps/stage-tamagotchi/src/renderer/components/InteractiveArea.vue index 0271cf118..620e4d9d6 100644 --- a/apps/stage-tamagotchi/src/renderer/components/InteractiveArea.vue +++ b/apps/stage-tamagotchi/src/renderer/components/InteractiveArea.vue @@ -3,6 +3,7 @@ import type { ChatToolCallRendererRegistry } from '@proj-airi/stage-ui/component import type { ChatHistoryItem } from '@proj-airi/stage-ui/types/chat' import { errorMessageFrom } from '@moeru/std' +import { useStopSpeakingButton } from '@proj-airi/stage-layouts/composables/useStopSpeakingButton' import { ChatHistory, JournalPreviewModal } from '@proj-airi/stage-ui/components' import { useBackgroundStore } from '@proj-airi/stage-ui/stores/background' import { useChatOrchestratorStore } from '@proj-airi/stage-ui/stores/chat' @@ -56,6 +57,7 @@ const sendModeLabels = computed>(() => ({ 'ctrl-enter': t('stage.send-mode.ctrl-enter'), 'double-enter': t('stage.send-mode.double-enter'), })) +const { showStopSpeakingButton, stopSpeakingFromChat } = useStopSpeakingButton() const latestImageEntries = computed(() => { if (!activeCardId.value) @@ -322,6 +324,24 @@ async function handleRetryMessage(index: number) { + +