Replace hardcoded endpoint URLs with centralized address resolver:
- Add src/shared/services/addresses.ts for port-based endpoint resolution
- Convert all service settings from direct endpoints to useExternal* flags
- Migrate legacy endpoint fields (chatterboxEndpoint, piperEndpoint, etc.)
- Add external URL overrides for all services (Redis, LlamaCpp, ImageGen)
Add speech/TTS improvements:
- Add MessageReplayButton for replaying individual messages
- Track speakingMessageId to highlight message being spoken
- Add TTS timeout handling and improved error responses
- Add voice:get-tts-endpoint IPC for resolved endpoint access
Add browser-based spellchecker:
- New BrowserSpellChecker service using bundled dictionary data
- Add bundle-spellcheck-data.js script for dictionary bundling
- Support custom words and configurable confidence threshold
Fix OSAudioPlayer stability:
- Handle stale process events after stop()
- Catch ESRCH errors when killing already-exited processes
Update tests for agentIds[] array, setConversationAgents, and new settings structure.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>