Skip to content

[agency] Create CLJS conversation orchestrator over typed agency events #14

Description

@meekmachine

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions