Wire @copilotkit/voice into a langgraph-python /demos/voice route via a
dedicated runtime (/api/copilotkit-voice) that mounts
TranscriptionServiceOpenAI. The mic button auto-appears in the CopilotChat
composer because the runtime advertises audioFileTranscriptionEnabled=true.
- Per-demo runtime route /api/copilotkit-voice with transcriptionService
- Demo page at /demos/voice with <CopilotChat /> + Play-sample button
- SampleAudioButton fetches /demo-audio/sample.wav and POSTs the
single-route transcribe envelope to the runtime URL, then writes the
transcribed text into the chat textarea via the native setter +
synthetic input event so React state stays in sync
- Manifest, registry, constraints, docs-links wired; shell bundles regenerated
- QA checklist (qa/voice.md) + Playwright E2E spec (tests/e2e/voice.spec.ts)
- public/demo-audio/ placeholder committed; sample.wav to be added by user
- Allowlist shell-docs / shell-dojo demo-content.json in the binary-size
pre-commit hook (they are bundled fixtures, already over 1 MB on main)