What's Changed
🎙️ Assist Conversation Agent (#27, #28)
Hermes can now be selected as a conversation agent in Home Assistant Assist pipelines. The flow is: HA Voice wakes/listens → STT → Assist sends text to Hermes → Hermes responds → TTS speaks the response.
- Added
Platform.CONVERSATIONandHermesConversationAgentimplementingConversationEntity.async_process() - Text is forwarded to Hermes via WebSocket (
assist_query/assist_responsemessage types) - Graceful error handling with speech fallbacks when Hermes is unavailable
🔌 WebSocket Reader Keep-Alive (#27)
The HA integration now maintains a persistent background reader task that continuously drains messages from the Hermes WebSocket, keeping the aiohttp heartbeat alive.
voice_settingscommands now returnsent: trueimmediately instead of being queued- Auto-reconnect on disconnect
- Reader task is properly cancelled during shutdown
📦 Other fixes
- #26: Fixed add-on Hermes home and cache paths for Docker environment
- Documentation: Added WebSocket message type reference for Assist pipeline and troubleshooting entry for timeouts
- Code review: Addressed Kimi K2 findings
Protocol Notes
The conversation pathway uses two new WebSocket message types:
- Outgoing:
{"type": "assist_query", "text": "...", "conversation_id": "...", "language": "..."} - Incoming:
{"type": "assist_response", "text": "...", "conversation_id": "...", "speech": {...}}