Skip to content

Text Intervention: track request, mood change, free instruction #48

@zeevenn

Description

@zeevenn

Parent

#39 — PRD: AI Radio — Host-driven Channel experience with chat timeline

What to build

Wire the text input bar on the Radio Screen to the Intervention flow. When the user submits text, it is classified, appended to the chat timeline, and handed to the Programme Manager to regenerate the Programme.

Intervention classification: the Host Service already accepts an Intervention with a kind field. Classification can be done client-side with a lightweight heuristic, or by asking Claude as part of generateProgramme. For v1, pass the raw text as kind: 'free-instruction' — the Host interprets it. Track Requests and Mood Changes are handled by the Host's prompt logic without needing a separate client-side classifier.

Flow:

  1. User types and submits text in the input bar
  2. { type: 'user-turn', text, timestamp } appended to Chat Timeline immediately — input clears
  3. A loading indicator appears in the chat (e.g. "Host is preparing the next set...")
  4. programmeManager.handleIntervention({ kind: 'free-instruction', text }) is called
  5. When the Host responds, { type: 'host-turn', text: acknowledgement, timestamp } is appended (the acknowledgement text comes from the Host's Claude response)
  6. Current Track finishes, new Programme begins

The mic button remains a stub in this slice (wired in #50).

Acceptance criteria

  • Submitting text appends a user-turn message to the timeline immediately
  • A loading/pending state is visible in the chat while the Host generates the new Programme
  • A host-turn acknowledgement message appears after the Host responds
  • The new Programme (with the Intervention honoured) begins after the current Track finishes
  • The text input clears after submission and is re-enabled after the Host responds
  • Requesting a specific track by name results in that Track appearing in the new Programme

Blocked by

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentReady for an AI agent to implement

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions