feat: add Home Assistant integration (REST tools + WebSocket gateway)

- Add ha_list_entities, ha_get_state, ha_call_service tools via REST API
- Add WebSocket gateway adapter for real-time state_changed event monitoring
- Support domain/entity filtering, cooldown, and auto-reconnect with backoff
- Use REST API for outbound notifications to avoid WS race condition
- Gate tool availability on HASS_TOKEN env var
- Add 82 unit tests covering real logic (filtering, payload building, event pipeline)
This commit is contained in:
0xbyt4
2026-02-28 13:32:48 +03:00
parent de5a88bd97
commit c36b256de5
10 changed files with 1708 additions and 5 deletions

7
uv.lock generated
View File

@@ -1034,6 +1034,9 @@ dev = [
{ name = "pytest" },
{ name = "pytest-asyncio" },
]
homeassistant = [
{ name = "aiohttp" },
]
honcho = [
{ name = "honcho-ai" },
]
@@ -1060,6 +1063,7 @@ tts-premium = [
[package.metadata]
requires-dist = [
{ name = "aiohttp", marker = "extra == 'homeassistant'", specifier = ">=3.9.0" },
{ name = "aiohttp", marker = "extra == 'messaging'", specifier = ">=3.9.0" },
{ name = "croniter", marker = "extra == 'cron'" },
{ name = "discord-py", marker = "extra == 'messaging'", specifier = ">=2.0" },
@@ -1071,6 +1075,7 @@ requires-dist = [
{ name = "hermes-agent", extras = ["cli"], marker = "extra == 'all'" },
{ name = "hermes-agent", extras = ["cron"], marker = "extra == 'all'" },
{ name = "hermes-agent", extras = ["dev"], marker = "extra == 'all'" },
{ name = "hermes-agent", extras = ["homeassistant"], marker = "extra == 'all'" },
{ name = "hermes-agent", extras = ["honcho"], marker = "extra == 'all'" },
{ name = "hermes-agent", extras = ["messaging"], marker = "extra == 'all'" },
{ name = "hermes-agent", extras = ["modal"], marker = "extra == 'all'" },
@@ -1103,7 +1108,7 @@ requires-dist = [
{ name = "tenacity" },
{ name = "typer" },
]
provides-extras = ["modal", "dev", "messaging", "cron", "slack", "cli", "tts-premium", "pty", "honcho", "all"]
provides-extras = ["modal", "dev", "messaging", "cron", "slack", "cli", "tts-premium", "pty", "honcho", "homeassistant", "all"]
[[package]]
name = "hf-xet"