Add tools/macstudio/smoke_e2e.py exercising the full voice-bridge loop
(/health/ready, /tts, /voice/ws hello+stream+intent+TTS, /tts/cache/stats)
without requiring the ESP32 firmware. Three modes (tts/ws/full); generates
a French PCM16 16 kHz fixture via `say -v Thomas` + afconvert when needed;
saves received WAVs and a structured JSON report under /tmp.
Wires `make smoke-voice` and documents the smoke test under
tools/macstudio/README.md (prereqs, exit codes 0/1/2, typical latencies).
Local run hit /tts cache miss + WS round-trip in ~3 s with cache hit on
the second pass; cache delta logging confirmed.
voice-bridge: clamp steps to [F5_STEPS_MIN=1, F5_STEPS_MAX=32] and reject text > TTS_TEXT_MAX_CHARS=2000 to prevent DoS via steps=999999. All env-overridable. Default --voice-bridge-url in generate_npc_pool.py: 192.168.0.150 (ghost IP, never routed) -> 100.116.92.12 (studio Tailscale, only path that actually works from dev/Tower/KXKM-AI). Network section added to README with topology probe results.
LiteLLM proxy config (6 aliases), voice-bridge FastAPI scaffold, requirements, README with deploy + health checks. Files mirror what's deployed to studio under ~/litellm-config and ~/voice-bridge.