say: add Jeffrey PVC voice provider + browsable utterance cache
New provider: `say:jeffrey hello` hits the backend with Jeffrey's
Professional Voice Clone (ElevenLabs voice dYNGZ848Oo6DtNBoeqgh, same
one used in the LACMA 2026 grant video). `say:jeffrey:scream` routes
to the screaming voice settings.
Cache layout changes (all still under art.aesthetic.computer/tts-cache/):
- Jeffrey utterances land in their own subfolder
`tts-cache/jeffrey/<sha256>.mp3` so they're easy to list and audit.
- Every cached object now carries the original text + provider + voice
+ timestamp as S3 user metadata, so browsing a HeadObject response
tells you exactly what was said and when. Values are ASCII-trimmed
and newline-stripped to satisfy S3 header rules.
Frontend (say.mjs):
- `jeffrey` added as a colon option (alongside google/openai/eleven)
- Provider indicator now renders in magenta when jeffrey is active
- Help line updated; README call-out documents the cache structure
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>