Goal
Create the Polyester conversation agency as a ClojureScript orchestrator over typed TTS, transcription, gaze, blink, prosodic, vocal/lipsync, and emotion-expression events.
Current state
Polyester root still inherits the TypeScript conversation service from Latticework. There is no src-cljs/latticework/conversation.cljs agency yet. LoomLarge discussions indicate the LiveKit path is the strongest current showpiece base, while older generic conversation scaffolding was removed or de-emphasized.
Relevant references:
Clojure-way direction
- CLJS owns turn state, speaking/listening/thinking/interrupted state, interruption policy, pending transcript handling, social-motion intent, and command generation.
- Other agencies expose typed command/event surfaces; conversation does not hold service instances or mutate Loom3 directly.
- Host/module adapters own backend connections, LiveKit rooms, browser APIs, and UI state.
- The first target should be one coherent LiveKit-first showpiece path, then adapters for AI Chat/French Quiz if the contract holds.
Acceptance criteria
- Existing
createConversationService imports remain compatible through an adapter or documented replacement path.
- Conversation state snapshots are serializable and can be emitted from worker or in-process CLJS.
- Interruption stops audio and visible speaking motion without stale mouth/gaze/prosody snippets.
- Speaking/listening/thinking/interrupted states emit coordinated commands for gaze, blink, prosodic, vocal/lipsync, and emotion expression.
- Current conversation tests pass, especially interruption orchestration.
- Add CLJS tests for turn lifecycle, final transcript handling, interruption, command ordering, and cleanup.
- Worker code has no browser API, backend client, LiveKit room, DOM, Loom3, or service-instance references.
Goal
Create the Polyester conversation agency as a ClojureScript orchestrator over typed TTS, transcription, gaze, blink, prosodic, vocal/lipsync, and emotion-expression events.
Current state
Polyester root still inherits the TypeScript conversation service from Latticework. There is no
src-cljs/latticework/conversation.cljsagency yet. LoomLarge discussions indicate the LiveKit path is the strongest current showpiece base, while older generic conversation scaffolding was removed or de-emphasized.Relevant references:
Clojure-way direction
Acceptance criteria
createConversationServiceimports remain compatible through an adapter or documented replacement path.