feat: Kith voice sidecar + backend TTS wiring for Kaori#1
Merged
Conversation
Adds kith-voice/ Bun service that bridges Kith's PipecatRuntime to browser WebSocket clients for streaming ElevenLabs TTS. The backend dm.js route now fires a POST to the Kith voice service after emitting a bot message, keyed by the x-kith-session header from the web client. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lockfile was missing transitive deps (https-proxy-agent, agent-base, debug, ms), causing `npm ci` to fail in CI. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mechanical auto-fixes from `biome check --write --unsafe`: - Prefix unused params/vars with underscore - Convert string concatenation to template literals - Apply formatting (trailing commas, quotes, semicolons) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Convert assignment expressions in arrow callbacks to block bodies and re-format to satisfy biome check. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
wbaxterh
marked this pull request as ready for review
April 23, 2026 23:26
…orms - Voice tuning: stability 0.55, style 0.45, speed 1.05 for smoother output - Expanded slang dict with gen-z terms, laugh tags, extended vowel cleanup - Added cleanForTTS text transform (strips markdown, collapses punctuation) - Added OpenRouter/kaori-ai-response.js fallback when kaori-bot on :3001 unavailable - Added Kith session debug logging Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove Kith debug console.log from dm.js - Switch kith-voice deps from absolute file: paths to @kithjs/* npm packages - Rename imports from @kith/ to @kithjs/ - Make Python sidecar paths configurable via env vars for production - Update .env.example with new voice ID and optional path overrides Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
kith-voice/— a Bun sidecar service that bridges Kith's PipecatRuntime (ElevenLabs TTS) to browser WebSocket clients for streaming audioroutes/dm.jsto fire-and-forget POST bot responses to the Kith voice service when the client sends anx-kith-sessionheaderKITH_VOICE_URLto.env.exampleArchitecture
Test plan
cd kith-voice && bun dev) with validELEVENLABS_API_KEYin.envKITH_VOICE_URL=http://localhost:3040in Backend.envx-kith-sessionheader — verify Backend logs[Bot] Kith voice requestand kith-voice logs[kith] speaktts_audio_chunkevents with base64 audio to the connected browserruntime.bargeIn()and stops TTS/healthendpoint returns session count🤖 Generated with Claude Code