The voice route's OpenAI client previously fell through to OPENAI_BASE_URL,
which docker-compose.local.yml sets to http://aimock:4010/v1. Aimock has a
catchall transcription fixture that returns "What is the weather in Tokyo?"
for every audio file, so the mic button always produced that phrase no
matter what the user actually said.
Pin baseURL to real OpenAI (overridable via OPENAI_TRANSCRIPTION_BASE_URL).
The sample-audio button stays as synchronous text injection — that's the
documented design, and what the e2e + d5 probe rely on.
Also:
- Tidy the sample button label ("Try a sample question" -> "Try a sample
audio") so the affordance matches what it does.
- Realign tests/e2e/voice.spec.ts with the shipped component (the
voice-sample-audio container testid and Sample: "..." caption it asserted
on never existed on HEAD) and add cold-start timeout headroom for the
mic-button render and the agent-flow test.
- Add "env": ".env" to langgraph.json so langgraph_cli dev picks up
OPENAI_API_KEY locally. Docker/Railway paths inject env vars directly so
this is a no-op there.
The showcase framework directories better reflect their role as
integration examples rather than distributable packages.
Renames showcase/packages/ -> showcase/integrations/ and updates
the test docker-compose file reference accordingly.