From 57865fd4a304f60ea5b9f3a4db3aaa6d950c3e90 Mon Sep 17 00:00:00 2001 From: Steven Enamakel <31011319+senamakel@users.noreply.github.com> Date: Mon, 1 Jun 2026 21:11:09 -0700 Subject: [PATCH] feat(mascot): sync Rive mascot with new poses, viseme codes & mood detection (#3173) --- app/src/features/human/HumanPage.tsx | 9 +- app/src/features/human/Mascot/Ghosty.tsx | 95 +++++++++ app/src/features/human/Mascot/RiveMascot.tsx | 71 +++++-- app/src/features/human/useHumanMascot.test.ts | 97 +++++++-- app/src/features/human/useHumanMascot.ts | 200 ++++++++++++------ app/src/pages/ios/MascotScreen.tsx | 4 +- tiny_mascot.riv | Bin 9187 -> 130535 bytes 7 files changed, 371 insertions(+), 105 deletions(-) diff --git a/app/src/features/human/HumanPage.tsx b/app/src/features/human/HumanPage.tsx index 53955bfc8..490576f98 100644 --- a/app/src/features/human/HumanPage.tsx +++ b/app/src/features/human/HumanPage.tsx @@ -28,7 +28,7 @@ const HumanPage = () => { window.localStorage.setItem(SPEAK_REPLIES_KEY, speakReplies ? '1' : '0'); }, [speakReplies]); - const { face } = useHumanMascot({ speakReplies }); + const { face, visemeCode } = useHumanMascot({ speakReplies }); const mascotColor = useAppSelector(selectMascotColor); const customPrimary = useAppSelector(selectCustomPrimaryColor); const customSecondary = useAppSelector(selectCustomSecondaryColor); @@ -58,7 +58,12 @@ const HumanPage = () => { {customMascotGifUrl ? ( ) : ( - + )} diff --git a/app/src/features/human/Mascot/Ghosty.tsx b/app/src/features/human/Mascot/Ghosty.tsx index bf02a1784..b92296534 100644 --- a/app/src/features/human/Mascot/Ghosty.tsx +++ b/app/src/features/human/Mascot/Ghosty.tsx @@ -22,6 +22,16 @@ import { visemePath, VISEMES, type VisemeShape } from './visemes'; * - `proud` — task fully completed after meaningful tool/subagent work. * - `cautious` — gentle warning; less severe than `concerned`. * + * Activity poses — driven by what the agent is actively doing: + * - `celebrating` — success animation after meaningful work. + * - `writing` — agent is editing/creating files. + * - `reading` — agent is browsing or reading content. + * - `recording` — agent is capturing screen or recording. + * - `waving` — greeting or hello gesture. + * - `dancing` — celebratory/playful animation. + * - `drinking_coffee` — agent is processing / long-running task. + * - `drinking_boba` — relaxed variant of processing. + * * `normal` is the legacy alias for `idle` and stays accepted for backwards * compatibility with older callers. */ @@ -37,6 +47,14 @@ export type MascotFace = | 'curious' | 'proud' | 'cautious' + | 'celebrating' + | 'writing' + | 'reading' + | 'recording' + | 'waving' + | 'dancing' + | 'drinking_coffee' + | 'drinking_boba' | 'normal'; export interface GhostyProps { @@ -162,6 +180,70 @@ const FACE_PRESETS: Record, FacePreset> = { showBrows: true, blushOpacity: 0.65, }, + celebrating: { + eyeScaleY: 0.4, + eyeScaleX: 1.15, + browTilt: -8, + browDy: -8, + showBrows: false, + blushOpacity: 1, + }, + writing: { + eyeScaleY: 0.75, + eyeScaleX: 1, + browTilt: -2, + browDy: -1, + showBrows: false, + blushOpacity: 0.7, + }, + reading: { + eyeScaleY: 0.85, + eyeScaleX: 1.05, + browTilt: -6, + browDy: -4, + showBrows: true, + blushOpacity: 0.75, + }, + recording: { + eyeScaleY: 1, + eyeScaleX: 1, + browTilt: 0, + browDy: 0, + showBrows: false, + blushOpacity: 0.9, + }, + waving: { + eyeScaleY: 0.5, + eyeScaleX: 1.1, + browTilt: -6, + browDy: -6, + showBrows: false, + blushOpacity: 1, + }, + dancing: { + eyeScaleY: 0.4, + eyeScaleX: 1.15, + browTilt: -8, + browDy: -8, + showBrows: false, + blushOpacity: 1, + }, + drinking_coffee: { + eyeScaleY: 0.6, + eyeScaleX: 1, + browTilt: 0, + browDy: 0, + showBrows: false, + blushOpacity: 0.8, + }, + drinking_boba: { + eyeScaleY: 0.55, + eyeScaleX: 1.05, + browTilt: 0, + browDy: 0, + showBrows: false, + blushOpacity: 0.85, + }, }; function presetFor(face: MascotFace): FacePreset { @@ -375,6 +457,19 @@ function restMouthPath(face: MascotFace): string { case 'cautious': // Slight downward turn — concern lite. return 'M482,600 Q520,568 558,600 Q520,585 482,600 Z'; + case 'celebrating': + case 'dancing': + return 'M460,565 Q520,635 580,565 Q520,605 460,565 Z'; + case 'waving': + return 'M460,565 Q520,635 580,565 Q520,605 460,565 Z'; + case 'writing': + case 'reading': + return 'M488,585 Q520,595 552,585 Q520,592 488,585 Z'; + case 'recording': + return 'M495,580 Q520,600 545,580 Q520,615 495,580 Z'; + case 'drinking_coffee': + case 'drinking_boba': + return 'M500,578 Q520,598 540,578 Q520,610 500,578 Z'; default: return visemePath(VISEMES.REST); } diff --git a/app/src/features/human/Mascot/RiveMascot.tsx b/app/src/features/human/Mascot/RiveMascot.tsx index fb264cbb5..c16895385 100644 --- a/app/src/features/human/Mascot/RiveMascot.tsx +++ b/app/src/features/human/Mascot/RiveMascot.tsx @@ -4,42 +4,72 @@ import { useRive, useViewModel, useViewModelInstance, - useViewModelInstanceBoolean, useViewModelInstanceColor, useViewModelInstanceString, } from '@rive-app/react-webgl2'; import { type FC, useEffect } from 'react'; import type { MascotFace } from './Ghosty'; -import type { VisemeId } from './visemes'; export interface RiveMascotProps { face?: MascotFace; size?: number | string; primaryColor?: number; secondaryColor?: number; - viseme?: VisemeId; + /** Raw Oculus 15-set viseme code (e.g. 'sil', 'PP', 'aa') sent directly to + * the Rive state machine's `mouthVisemeCode` input. When omitted, defaults + * to 'sil' (mouth closed). */ + visemeCode?: string; } -const SPEAKING_FACES: ReadonlySet = new Set(['speaking', 'happy']); - +/** + * Maps every MascotFace to the closest Rive pose animation. The Rive asset + * supports: idle, thinking, celebration, bookreading, coffeedrink, writing, + * bobbateadrink, recording, hand_wave, dancing. + */ const FACE_TO_POSE: Record = { idle: 'idle', normal: 'idle', - sleep: 'sleeping', + sleep: 'idle', listening: 'idle', thinking: 'thinking', confused: 'thinking', speaking: 'idle', happy: 'idle', - concerned: 'idle', - // New emotional states — map to the nearest available Rive pose until - // dedicated animations are added to the .riv asset. - curious: 'thinking', - proud: 'idle', - cautious: 'idle', + concerned: 'thinking', + curious: 'bookreading', + proud: 'celebration', + cautious: 'thinking', + celebrating: 'celebration', + writing: 'writing', + reading: 'bookreading', + recording: 'recording', + waving: 'hand_wave', + dancing: 'dancing', + drinking_coffee: 'coffeedrink', + drinking_boba: 'bobbateadrink', }; +/** + * ElevenLabs / Oculus 15-set → Rive asset's `visme_codes` vocabulary. + * The Rive file uses `ih`/`oh`/`ou` for vowels instead of `E`/`O`/`U`. + * Codes already in the Rive vocabulary pass through unchanged. + */ +const OCULUS_TO_RIVE_VISEME: Record = { + E: 'ih', + I: 'ih', + O: 'oh', + U: 'ou', + e: 'ih', + i: 'ih', + o: 'oh', + u: 'ou', +}; + +function toRiveVisemeCode(oculusCode: string): string { + return OCULUS_TO_RIVE_VISEME[oculusCode] ?? oculusCode; +} + const RIVE_LAYOUT = new Layout({ fit: Fit.Contain }); export const RiveMascot: FC = ({ @@ -47,7 +77,7 @@ export const RiveMascot: FC = ({ size = '100%', primaryColor, secondaryColor, - viseme = 'REST', + visemeCode = 'sil', }) => { const { rive, RiveComponent } = useRive({ src: '/tiny_mascot.riv', @@ -58,20 +88,21 @@ export const RiveMascot: FC = ({ const viewModel = useViewModel(rive, { useDefault: true }); const vmInstance = useViewModelInstance(viewModel, { useDefault: true, rive }); - const { setValue: setMouthOpen } = useViewModelInstanceBoolean('mouthOpen', vmInstance); const { setValue: setPose } = useViewModelInstanceString('pose', vmInstance); - const { setValue: setViseme } = useViewModelInstanceString('viseme', vmInstance); + const { setValue: setMouthVisemeCode } = useViewModelInstanceString( + 'mouthVisemeCode', + vmInstance + ); const { setValue: setPrimaryColor } = useViewModelInstanceColor('primaryColor', vmInstance); const { setValue: setSecondaryColor } = useViewModelInstanceColor('secondaryColor', vmInstance); useEffect(() => { - setMouthOpen(SPEAKING_FACES.has(face!)); - setPose(FACE_TO_POSE[face!] ?? 'idle'); - }, [face, setMouthOpen, setPose]); + setPose(FACE_TO_POSE[face] ?? 'idle'); + }, [face, setPose]); useEffect(() => { - setViseme(viseme); - }, [viseme, setViseme]); + setMouthVisemeCode(toRiveVisemeCode(visemeCode)); + }, [visemeCode, setMouthVisemeCode]); useEffect(() => { if (primaryColor !== undefined) setPrimaryColor(primaryColor); diff --git a/app/src/features/human/useHumanMascot.test.ts b/app/src/features/human/useHumanMascot.test.ts index c07270e8d..e577dc981 100644 --- a/app/src/features/human/useHumanMascot.test.ts +++ b/app/src/features/human/useHumanMascot.test.ts @@ -7,6 +7,7 @@ import { ACK_FACE_HOLD_MS, pickConversationAckFace, pickViseme, + pickVisemeCode, TTS_MAX_PLAYBACK_MS, useHumanMascot, } from './useHumanMascot'; @@ -139,6 +140,54 @@ describe('pickViseme', () => { }); }); +describe('pickVisemeCode', () => { + it('maps vowels to Oculus 15-set codes', () => { + expect(pickVisemeCode('a')).toBe('aa'); + expect(pickVisemeCode('e')).toBe('E'); + expect(pickVisemeCode('i')).toBe('I'); + expect(pickVisemeCode('o')).toBe('O'); + expect(pickVisemeCode('u')).toBe('U'); + }); + + it('maps labials to PP', () => { + expect(pickVisemeCode('m')).toBe('PP'); + expect(pickVisemeCode('b')).toBe('PP'); + expect(pickVisemeCode('p')).toBe('PP'); + }); + + it('maps fricatives to FF', () => { + expect(pickVisemeCode('f')).toBe('FF'); + expect(pickVisemeCode('v')).toBe('FF'); + }); + + it('maps sibilants to SS', () => { + expect(pickVisemeCode('s')).toBe('SS'); + expect(pickVisemeCode('z')).toBe('SS'); + }); + + it('maps other consonants to their Oculus codes', () => { + expect(pickVisemeCode('n')).toBe('nn'); + expect(pickVisemeCode('t')).toBe('DD'); + expect(pickVisemeCode('k')).toBe('kk'); + expect(pickVisemeCode('r')).toBe('RR'); + }); + + it('uses the trailing letter of multi-char deltas', () => { + expect(pickVisemeCode('hello')).toBe('O'); + expect(pickVisemeCode('world')).toBe('DD'); + }); + + it('ignores punctuation when picking the trailing letter', () => { + expect(pickVisemeCode('Hi!')).toBe('I'); + }); + + it('falls back to E for unmapped consonants and empty input', () => { + expect(pickVisemeCode('x')).toBe('E'); + expect(pickVisemeCode('')).toBe('E'); + expect(pickVisemeCode('...')).toBe('E'); + }); +}); + describe('pickConversationAckFace', () => { it('prefers explicit reaction emoji from chat_done', () => { expect(pickConversationAckFace({ full_response: 'Done', reaction_emoji: '✅' })).toBe('happy'); @@ -257,24 +306,46 @@ describe('useHumanMascot state machine', () => { expect(result.current.face).toBe('thinking'); }); - it('moves to confused on tool_call', () => { + it('maps tool_call to activity face when tool has a visual association', () => { const { result } = renderHook(() => useHumanMascot()); act(() => { capturedListeners?.onInferenceStart?.(fakeEvent({})); capturedListeners?.onToolCall?.( - fakeEvent({ tool_name: 'search', skill_id: 's', args: {}, round: 1 }) + fakeEvent({ tool_name: 'file_write', skill_id: 's', args: {}, round: 1 }) ); }); - expect(result.current.face).toBe('confused'); + expect(result.current.face).toBe('writing'); }); - it('moves to confused on iteration_start beyond round 1', () => { + it('falls back to thinking on tool_call for unmapped tools', () => { + const { result } = renderHook(() => useHumanMascot()); + act(() => { + capturedListeners?.onInferenceStart?.(fakeEvent({})); + capturedListeners?.onToolCall?.( + fakeEvent({ tool_name: 'custom_tool', skill_id: 's', args: {}, round: 1 }) + ); + }); + expect(result.current.face).toBe('thinking'); + }); + + it('maps reading tools to reading face', () => { + const { result } = renderHook(() => useHumanMascot()); + act(() => { + capturedListeners?.onInferenceStart?.(fakeEvent({})); + capturedListeners?.onToolCall?.( + fakeEvent({ tool_name: 'web_search', skill_id: 's', args: {}, round: 1 }) + ); + }); + expect(result.current.face).toBe('reading'); + }); + + it('moves to drinking_coffee on iteration_start beyond round 1', () => { const { result } = renderHook(() => useHumanMascot()); act(() => { capturedListeners?.onInferenceStart?.(fakeEvent({})); capturedListeners?.onIterationStart?.(fakeEvent({ round: 2, message: '' })); }); - expect(result.current.face).toBe('confused'); + expect(result.current.face).toBe('drinking_coffee'); }); it('does not flip to confused on iteration_start round 1', () => { @@ -309,7 +380,7 @@ describe('useHumanMascot state machine', () => { act(() => { capturedListeners?.onDone?.( fakeEvent({ - full_response: 'hello', + full_response: 'sure thing', rounds_used: 1, total_input_tokens: 1, total_output_tokens: 1, @@ -418,7 +489,7 @@ describe('useHumanMascot state machine', () => { expect(result.current.face).toBe('thinking'); }); - it('promotes to proud on chat_done when a tool succeeded in the same turn', () => { + it('promotes to celebrating on chat_done when a tool succeeded in the same turn', () => { const { result } = renderHook(() => useHumanMascot({ speakReplies: false })); act(() => { capturedListeners?.onInferenceStart?.(fakeEvent({})); @@ -435,7 +506,7 @@ describe('useHumanMascot state machine', () => { }) ); }); - expect(result.current.face).toBe('proud'); + expect(result.current.face).toBe('celebrating'); act(() => { vi.advanceTimersByTime(ACK_FACE_HOLD_MS + 1); }); @@ -459,7 +530,7 @@ describe('useHumanMascot state machine', () => { expect(result.current.face).toBe('happy'); }); - it('promotes to proud on chat_done when a subagent succeeded in the same turn', () => { + it('promotes to celebrating on chat_done when a subagent succeeded in the same turn', () => { const { result } = renderHook(() => useHumanMascot({ speakReplies: false })); act(() => { capturedListeners?.onInferenceStart?.(fakeEvent({})); @@ -482,7 +553,7 @@ describe('useHumanMascot state machine', () => { }) ); }); - expect(result.current.face).toBe('proud'); + expect(result.current.face).toBe('celebrating'); }); it('shows concerned when a subagent fails', () => { @@ -503,7 +574,7 @@ describe('useHumanMascot state machine', () => { it('resets work tracking on each new turn', () => { const { result } = renderHook(() => useHumanMascot({ speakReplies: false })); - // Turn 1: tool succeeded → proud + // Turn 1: tool succeeded → celebrating act(() => { capturedListeners?.onInferenceStart?.(fakeEvent({})); capturedListeners?.onToolResult?.( @@ -519,7 +590,7 @@ describe('useHumanMascot state machine', () => { }) ); }); - expect(result.current.face).toBe('proud'); + expect(result.current.face).toBe('celebrating'); act(() => { vi.advanceTimersByTime(ACK_FACE_HOLD_MS + 1); }); @@ -621,7 +692,7 @@ describe('useHumanMascot TTS playback', () => { const { result } = renderHook(() => useHumanMascot({ speakReplies: true })); await act(async () => { - capturedListeners?.onDone?.(fakeDone('hello')); + capturedListeners?.onDone?.(fakeDone('sure thing')); // Let synthesizeSpeech and playBase64Audio resolve. await Promise.resolve(); await Promise.resolve(); diff --git a/app/src/features/human/useHumanMascot.ts b/app/src/features/human/useHumanMascot.ts index 851469ea6..693b3a2d6 100644 --- a/app/src/features/human/useHumanMascot.ts +++ b/app/src/features/human/useHumanMascot.ts @@ -89,9 +89,67 @@ export function pickViseme(delta: string): VisemeShape { } } +/** + * Pick a raw Oculus viseme code from a text delta character. Used to drive + * `mouthVisemeCode` on the Rive state machine during pseudo-lipsync (no TTS). + * Returns Oculus 15-set codes; `RiveMascot` translates vowels (`E`→`ih`, + * `O`→`oh`, `U`→`ou`) to the Rive asset's vocabulary at render time. + */ +export function pickVisemeCode(delta: string): string { + const ch = delta + .replace(/[^a-zA-Z]/g, '') + .slice(-1) + .toLowerCase(); + switch (ch) { + case 'a': + return 'aa'; + case 'e': + return 'E'; + case 'i': + case 'y': + return 'I'; + case 'o': + return 'O'; + case 'u': + case 'w': + return 'U'; + case 'm': + case 'b': + case 'p': + return 'PP'; + case 'f': + case 'v': + return 'FF'; + case 's': + case 'z': + return 'SS'; + case 'n': + case 'l': + return 'nn'; + case 't': + case 'd': + return 'DD'; + case 'k': + case 'g': + return 'kk'; + case 'r': + return 'RR'; + default: + return 'E'; + } +} + type ConversationAckFace = Extract< MascotFace, - 'happy' | 'confused' | 'concerned' | 'curious' | 'proud' | 'cautious' + | 'happy' + | 'confused' + | 'concerned' + | 'curious' + | 'proud' + | 'cautious' + | 'celebrating' + | 'dancing' + | 'waving' >; type ConversationAckEvent = { full_response?: string | null; reaction_emoji?: string | null }; @@ -99,9 +157,11 @@ const HAPPY_REACTION_EMOJIS = new Set(['✅', '🎉', '🙌', '😊', '😄', ' const PROUD_REACTION_EMOJIS = new Set(['⭐', '🌟', '🏆', '🎯', '💯', '🚀', '✨', '🥇']); const CURIOUS_REACTION_EMOJIS = new Set(['🔍', '💭', '🧐', '🤓', '👀']); const CONFUSED_REACTION_EMOJIS = new Set(['🤔', '❓', '❔']); -// ⚠️ is cautious (heads-up), ❌/🚨 are concerned (failure). const CAUTIOUS_REACTION_EMOJIS = new Set(['⚠️', '⚠', '💡', '⚡']); const CONCERNED_REACTION_EMOJIS = new Set(['🚨', '❌', '😕', '😟']); +const CELEBRATING_REACTION_EMOJIS = new Set(['🥳', '🍾', '🎊', '🎈', '🪅']); +const DANCING_REACTION_EMOJIS = new Set(['💃', '🕺', '🎵', '🎶', '🎸']); +const WAVING_REACTION_EMOJIS = new Set(['👋', '🤝', '🫡']); const CONCERNED_TEXT_RE = /\b(sorry|apolog(?:y|ize|ise)|failed|failure|error|cannot|can't|unable|blocked|problem)\b/i; @@ -114,6 +174,10 @@ const CURIOUS_TEXT_RE = /\b(interesting|fascinating|curious(ly)?|let me (check|look|investigate)|i('ll)? (look|check) into|actually|turns? out)\b/i; const CAUTIOUS_TEXT_RE = /\b(be careful|warning|caution|heads? up|please note|make sure|important(ly)?|note that|worth (noting|mentioning))\b/i; +const CELEBRATING_TEXT_RE = + /\b(congrat(ulations|s)?|well done|bravo|hooray|woohoo|amazing|fantastic|incredible|awesome work)\b/i; +const GREETING_TEXT_RE = + /^(hello|hey|hi there|good (morning|afternoon|evening)|welcome back|greetings|howdy)[!.,]?(?:\s|$)/i; /** * Map conversation-level meaning into the short acknowledgement face that @@ -123,6 +187,9 @@ const CAUTIOUS_TEXT_RE = export function pickConversationAckFace(event: ConversationAckEvent): ConversationAckFace | null { const reaction = event.reaction_emoji?.trim(); if (reaction) { + if (CELEBRATING_REACTION_EMOJIS.has(reaction)) return 'celebrating'; + if (DANCING_REACTION_EMOJIS.has(reaction)) return 'dancing'; + if (WAVING_REACTION_EMOJIS.has(reaction)) return 'waving'; if (PROUD_REACTION_EMOJIS.has(reaction)) return 'proud'; if (HAPPY_REACTION_EMOJIS.has(reaction)) return 'happy'; if (CURIOUS_REACTION_EMOJIS.has(reaction)) return 'curious'; @@ -133,18 +200,53 @@ export function pickConversationAckFace(event: ConversationAckEvent): Conversati const text = event.full_response?.trim() ?? ''; if (!text) return null; - // Priority: concerned > cautious > proud > confused > curious > happy. - // Concerned and cautious share some vocabulary; check concerned first so - // outright failures don't get softened to a heads-up. if (CONCERNED_TEXT_RE.test(text)) return 'concerned'; if (CAUTIOUS_TEXT_RE.test(text)) return 'cautious'; + if (CELEBRATING_TEXT_RE.test(text)) return 'celebrating'; if (PROUD_TEXT_RE.test(text)) return 'proud'; if (CONFUSED_TEXT_RE.test(text)) return 'confused'; if (CURIOUS_TEXT_RE.test(text)) return 'curious'; + if (GREETING_TEXT_RE.test(text)) return 'waving'; if (HAPPY_TEXT_RE.test(text)) return 'happy'; return null; } +/** + * Map a tool name to an activity pose. Returns null when the tool doesn't + * have a strong visual association — the caller falls back to a generic face. + */ +function toolToActivityFace(toolName: string): MascotFace | null { + const name = toolName.toLowerCase(); + + if ( + name.includes('file_write') || + name.includes('edit_file') || + name.includes('apply_patch') || + name.includes('create_file') || + name.includes('write') + ) { + return 'writing'; + } + + if ( + name.includes('browser') || + name.includes('web_search') || + name.includes('web_fetch') || + name.includes('read_file') || + name.includes('search') || + name.includes('grep') || + name.includes('find') + ) { + return 'reading'; + } + + if (name.includes('screen') || name.includes('screenshot') || name.includes('capture')) { + return 'recording'; + } + + return null; +} + export interface UseHumanMascotOptions { /** When true, post-stream replies are sent to ElevenLabs and the mouth * follows the returned viseme timeline while the audio plays. */ @@ -157,6 +259,8 @@ export interface UseHumanMascotOptions { export interface UseHumanMascotResult { face: MascotFace; viseme: VisemeShape; + /** Raw Oculus 15-set viseme code for Rive's `mouthVisemeCode` input. */ + visemeCode: string; } /** @@ -165,7 +269,8 @@ export interface UseHumanMascotResult { * Mapping (kept in one place so the visual model stays coherent): * * - `inference_start` → `thinking` - * - `iteration_start` round > 1 or `tool_call` → `confused` (heavy reasoning) + * - `iteration_start` round > 1 or `tool_call` → activity pose based on tool + * name (writing/reading/recording) or `confused` as fallback * - `tool_result success=false` → `concerned` (held briefly) * - `text_delta` → `speaking`, pseudo-lipsync from the trailing letter * - `chat_done` (no TTS) → message-aware ack face (held briefly), then `idle` @@ -184,31 +289,22 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas const listeningRef = useRef(listening); listeningRef.current = listening; - // Effective mascot voice id: resolves the manual override, the - // locale-default toggle, and the build-time fallback into a single - // string (see `selectEffectiveMascotVoiceId`). Mirrored into a ref so - // the inner `startTtsPlayback` closure always reads the latest value - // without having to re-create the callback on every re-render. const effectiveMascotVoiceId = useSelector(selectEffectiveMascotVoiceId); const mascotVoiceIdRef = useRef(effectiveMascotVoiceId); mascotVoiceIdRef.current = effectiveMascotVoiceId; const [face, setFace] = useState('idle'); const targetRef = useRef(VISEMES.REST); + const visemeCodeRef = useRef('sil'); const lastDeltaAtRef = useRef(0); const ackTimerRef = useRef(null); - // Track meaningful work performed in the current turn so onDone can - // distinguish a proud completion from a routine happy acknowledgement. const toolSucceededRef = useRef(false); const subagentSucceededRef = useRef(false); - // TTS playback state — non-null while audio is mid-flight. const playbackRef = useRef(null); const visemeFramesRef = useRef<{ viseme: string; start_ms: number; end_ms: number }[]>([]); const visemeCursorRef = useRef(0); - // Monotonic counter — only the latest startTtsPlayback's callbacks may - // mutate idle state; older invocations bail out. const playbackSeqRef = useRef(0); const [, force] = useState(0); @@ -239,22 +335,26 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas setFace('thinking'); }, onIterationStart: e => { - // Subsequent iterations mean the agent is grinding through tool rounds. if (e.round > 1) { clearAckTimer(); - mascotLog('voice-session transition → confused (iteration round=%d)', e.round); - setFace('confused'); + mascotLog('voice-session transition → drinking_coffee (iteration round=%d)', e.round); + setFace('drinking_coffee'); } }, - onToolCall: () => { + onToolCall: e => { clearAckTimer(); - mascotLog('voice-session transition → confused (tool_call)'); - setFace('confused'); + const activityFace = toolToActivityFace(e.tool_name); + if (activityFace) { + mascotLog('voice-session transition → %s (tool_call %s)', activityFace, e.tool_name); + setFace(activityFace); + } else { + mascotLog('voice-session transition → thinking (tool_call %s)', e.tool_name); + setFace('thinking'); + } }, onToolResult: e => { if (!e.success) { mascotLog('voice-session transition → concerned (tool_result failed)'); - // Don't fully derail — let the next inference step take over. setFace('concerned'); } else { toolSucceededRef.current = true; @@ -274,7 +374,6 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas } }, onTextDelta: e => { - // Pseudo-lipsync only kicks in if no real audio is playing. if (listeningRef.current) { mascotLog('voice-session text_delta suppressed — listening is active'); return; @@ -283,6 +382,7 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas clearAckTimer(); setFace('speaking'); targetRef.current = pickViseme(e.delta); + visemeCodeRef.current = pickVisemeCode(e.delta); lastDeltaAtRef.current = window.performance.now(); }, onDone: e => { @@ -290,14 +390,11 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas mascotLog('voice-session onDone suppressed — listening is active'); return; } - // Upgrade to `proud` when the turn involved real tool/subagent work. - // A happy/null text cue paired with actual execution is a completion — - // that reads as proud, not a routine acknowledgement. const didMeaningfulWork = toolSucceededRef.current || subagentSucceededRef.current; const explicitAck = pickConversationAckFace(e); const ackFace: ConversationAckFace = (explicitAck === 'happy' || explicitAck === null) && didMeaningfulWork - ? 'proud' + ? 'celebrating' : (explicitAck ?? 'happy'); toolSucceededRef.current = false; subagentSucceededRef.current = false; @@ -308,24 +405,18 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas didMeaningfulWork ); if (!speakRef.current || !e.full_response?.trim()) { - // Soft acknowledgement beat instead of snapping back to idle. holdThenIdle(ackFace); return; } - // Fire-and-forget — startTtsPlayback owns its cleanup via finally. void startTtsPlayback(e.full_response, ackFace).catch(() => {}); }, onError: () => { mascotLog('voice-session transition → concerned (chat_error), cancelling in-flight TTS'); - // Bump seq to invalidate any in-flight startTtsPlayback awaiters. playbackSeqRef.current++; const orphan = playbackRef.current; playbackRef.current = null; if (orphan) { orphan.stop(); - // We're early-returning instead of awaiting `orphan.ended`, so the - // stop()-sentinel rejection has no handler — attach one explicitly - // or it surfaces as an unhandledrejection in Sentry (#1472). orphan.ended.catch(swallowAudioStop); } visemeFramesRef.current = []; @@ -335,7 +426,6 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas return () => { unsub(); clearAckTimer(); - // Same — invalidate in-flight callbacks before tearing down. playbackSeqRef.current++; const orphan = playbackRef.current; playbackRef.current = null; @@ -357,8 +447,6 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas ? 'user started recording while TTS was playing (interrupted)' : 'mic activated, no TTS to cancel' ); - // Treat mic-hot as an explicit interruption: stale synthesis/playback - // callbacks must not switch the mascot back to speaking after we listen. playbackSeqRef.current++; const orphan = playbackRef.current; playbackRef.current = null; @@ -369,6 +457,7 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas visemeFramesRef.current = []; visemeCursorRef.current = 0; targetRef.current = VISEMES.REST; + visemeCodeRef.current = 'sil'; lastDeltaAtRef.current = 0; setFace('idle'); }, [listening]); @@ -377,8 +466,6 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas text: string, ackFace: ConversationAckFace = 'happy' ): Promise { - // Cancel any in-flight playback so its handle.ended callback can't reset - // state belonging to the new run. const prev = playbackRef.current; playbackRef.current = null; if (prev) { @@ -396,13 +483,8 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas setFace('thinking'); let tts; try { - // Always pass the effective voice id — the selector already - // resolves manual override / locale default / build-time - // fallback to a single string, so `synthesizeSpeech` doesn't - // need its own fallback branch here. tts = await synthesizeSpeech(text, { voiceId: mascotVoiceIdRef.current }); } catch (err) { - // Voice path unavailable — degrade cleanly to text-only behavior. if (isStillCurrent()) degraded = true; throw err; } @@ -410,26 +492,16 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas let frames: VisemeFrame[] = tts.visemes ?? []; let source: 'visemes' | 'alignment' | 'procedural' = 'visemes'; if (frames.length > 0 && !framesProduceMotion(frames)) { - // Backend shipped frames but every code maps to REST — usually means - // the codes are in a vocabulary `oculusVisemeToShape` doesn't know. - // Drop them and let the alignment / procedural path take over so the - // mouth doesn't sit on the rest-smile path for the whole clip. mascotLog('tts visemes produced no motion — dropping and falling through'); frames = []; } if (frames.length === 0 && tts.alignment && tts.alignment.length > 0) { - // Backend didn't ship viseme cues — derive a coarse track from char timings - // so the mouth still animates in sync with the audio. frames = visemesFromAlignment(tts.alignment); source = 'alignment'; mascotLog('tts derived %d viseme frames from alignment', frames.length); } else if (frames.length > 0) { mascotLog('tts got %d viseme frames from backend', frames.length); } - // Start audio first — `playBase64Audio` calls `audio.play()` directly so - // the user-gesture chain that authorized speech stays intact. If we - // awaited anything else between the user click and play(), CEF would - // reject playback under its autoplay policy. const ttsOptions: PlaybackOptions = { maxDurationMs: TTS_MAX_PLAYBACK_MS }; const handle = await playBase64Audio( tts.audio_base64, @@ -442,12 +514,6 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas return; } if (frames.length === 0) { - // Last-resort fallback: backend shipped neither viseme cues nor - // alignment (e.g. the new public `tts-v1` model on the hosted - // backend). Use whatever duration the decoder has reported so far — - // `proceduralVisemes` falls back to a text-length estimate when the - // metadata hasn't loaded yet, so we don't await it on the critical - // path (waiting opens a window where audio plays under a static face). const dur = handle.durationMs(); frames = proceduralVisemes(text, dur); source = 'procedural'; @@ -465,8 +531,6 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas try { await handle.ended; } catch (err) { - // Stop sentinel is expected when a newer turn cancels playback — - // rethrow anything else so real decoder errors aren't masked. swallowAudioStop(err); } } catch (err) { @@ -476,6 +540,7 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas if (isStillCurrent()) { playbackRef.current = null; visemeFramesRef.current = []; + visemeCodeRef.current = 'sil'; if (degraded) { holdThenIdle('concerned'); } else { @@ -485,9 +550,6 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas } } - // RAF loop while we're speaking. TTS playback always sets face to - // 'speaking' before awaiting the audio, so this also covers the audio-driven - // viseme path. useEffect(() => { if (face !== 'speaking') return; let raf = 0; @@ -500,6 +562,7 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas }, [face]); let viseme: VisemeShape = VISEMES.REST; + let visemeCode = 'sil'; const playback = playbackRef.current; if (playback) { const ms = playback.currentMs(); @@ -511,17 +574,18 @@ export function useHumanMascot(options: UseHumanMascotOptions = {}): UseHumanMas ); visemeCursorRef.current = cursor; viseme = frame ? oculusVisemeToShape(frame.viseme) : VISEMES.REST; + visemeCode = frame ? frame.viseme : 'sil'; } } else if (face === 'speaking') { const since = window.performance.now() - lastDeltaAtRef.current; const decay = Math.max(0, Math.min(1, since / VISEME_DECAY_MS)); viseme = lerpViseme(targetRef.current, VISEMES.REST, decay); + visemeCode = decay > 0.5 ? 'sil' : visemeCodeRef.current; } - // `listening` is an external override so callers wiring dictation state - // can reflect mic-on without racing the chat event subscription. const effectiveFace: MascotFace = listening ? 'listening' : face; const effectiveViseme: VisemeShape = listening ? VISEMES.REST : viseme; + const effectiveVisemeCode: string = listening ? 'sil' : visemeCode; - return { face: effectiveFace, viseme: effectiveViseme }; + return { face: effectiveFace, viseme: effectiveViseme, visemeCode: effectiveVisemeCode }; } diff --git a/app/src/pages/ios/MascotScreen.tsx b/app/src/pages/ios/MascotScreen.tsx index 627d493a1..987643ef7 100644 --- a/app/src/pages/ios/MascotScreen.tsx +++ b/app/src/pages/ios/MascotScreen.tsx @@ -205,7 +205,7 @@ export const MascotScreen: FC = () => { // without a stale closure over the pttActive state variable. const pttActiveRef = useRef(false); - const { face } = useHumanMascot({ listening: pttActive }); + const { face, visemeCode } = useHumanMascot({ listening: pttActive }); // Derive label from stored profile. const pairedLabel = (() => { @@ -431,7 +431,7 @@ export const MascotScreen: FC = () => { {/* Mascot canvas */}
- +
diff --git a/tiny_mascot.riv b/tiny_mascot.riv index 5e259e66fce062962df4b6b389e5b568638efad0..8818a1fab845dad3665cfdd36d8ad17d0bba809d 100644 GIT binary patch literal 130535 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 delta 5156 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