Files
iris_x_hermes/docs/diagrams/architecture.mmd
T
ARIA 7a6d922d12
CI / Kotlin tests (android host + desktop) (push) Successful in 8m5s
CI / Gateway plugin tests (push) Successful in 9m47s
Add QR pairing (terminal QR, in-app scanner, iris://pair deep link)
2026-08-22 22:43:13 +02:00

54 lines
2.0 KiB
Plaintext

%% Iris x Hermes — architecture (mermaid)
%% Render with any mermaid viewer (e.g. https://mermaid.live or `mmdc`).
flowchart TB
subgraph HOST["User's machine (home server / PC)"]
subgraph GW["hermes gateway (ONE process)"]
AGENT["Agent core<br/>(run_agent.py)"]
SESS["Sessions<br/>(SQLite + FTS5)"]
CRON["Cron scheduler"]
subgraph PLUGIN["android PLATFORM PLUGIN"]
ADAPTER["AndroidAdapter<br/>(BasePlatformAdapter)"]
OUTBOX["Outbox (SQLite)<br/>+ sync cursor"]
PUSH["push.py<br/>FcmBackend / NtfyBackend"]
MEDIA["media.py<br/>cache + chunk stream"]
PAIR["pairing.py<br/>token + device registry"]
SEARCH["search.py<br/>FTS5 bridge"]
end
WSS["WebSocket SERVER<br/>(websockets) ws://host:8790/ws"]
end
AGENT -->|legacy stream callbacks| ADAPTER
CRON -->|deliver=iris:chat:thread| ADAPTER
ADAPTER <--> WSS
ADAPTER <--> OUTBOX
ADAPTER <--> PUSH
ADAPTER <--> MEDIA
ADAPTER <--> PAIR
ADAPTER <--> SEARCH
ADAPTER <--> SESS
end
subgraph CLOUD["Cloud relays"]
FCM["Google FCM"]
NTFY["ntfy (self-host / ntfy.sh)"]
end
subgraph DEVICES["Clients"]
PHONE["ANDROID APP<br/>(Kotlin / Compose)<br/>WS client + ExoPlayer + FCM"]
DESKTOP["DESKTOP APP<br/>(Compose Multiplatform)<br/>WS client + tray + desktop player"]
end
WSS <-->|WSS JSON + binary media| PHONE
WSS <-->|WSS JSON + binary media| DESKTOP
PUSH -->|FCM HTTP v1| FCM
PUSH -->|ntfy publish| NTFY
FCM -->|wake (data msg)| PHONE
NTFY -->|subscribe| PHONE
classDef host fill:#eef,stroke:#333;
classDef plugin fill:#efe,stroke:#333;
classDef device fill:#fee,stroke:#333;
classDef cloud fill:#ffe,stroke:#333;
class GW,AGENT,SESS,CRON,OUTBOX,PUSH,MEDIA,PAIR,SEARCH,WSS host;
class ADAPTER plugin;
class PHONE,DESKTOP device;
class FCM,NTFY cloud;