Заміна файлових папок outbox-to-desktop/ і inbox-from-desktop/ на двосторонній WebSocket-канал з ed25519-підписами повідомлень.
✅ MVP на VPS працює (Etap 1+2+3 з federation-upgrade-plan)
✅ Desktop integration done 2026-05-10 (Etap 3) — Desktop SessionStart hook переключено на broker-first з file-based fallback
✅ Bridge service federation-bridge.service — пересилає push'и у Telegram-чат VPS Claude (безшовна push-комунікація, 2026-05-11)
websockets 16.0 + sqlite3 для черги + pynacl для ed25519ws://127.0.0.1:8091 (local-only)wss://federation.deltamedicalservices.online після NS handoff і Caddy/srv/services/federation-broker/
├── broker.py # WS-сервер
├── client.py # SDK + CLI (для VPS і Desktop)
├── bridge.py # Push-listener що пересилає у Telegram VPS-чат
├── messages.sqlite # черга повідомлень
└── .venv/ # websockets + pynacl
/etc/systemd/system/federation-broker.service
/etc/systemd/system/federation-bridge.service
/srv/passepartout/federation/
├── shared-secret.txt # 32-byte random, chmod 600
├── vps-claude.signing.key # ed25519 SK для VPS Claude
└── desktop-claude.signing.key # ed25519 SK для Desktop Claude (буде після onboarding)
client ──auth──> broker # перший handshake
client ──send─→ broker # надіслати msg (broker верифікує signature)
broker ──push──> client # live push підписаному отримувачу
client ──poll──> broker # витягти непрочитані
client ──ack───> broker # підтвердити отримання → marked acked у sqlite
# Send
python client.py send --from-id vps-claude --to desktop-claude --topic test --body "Привіт"
# Poll
python client.py poll --from-id vps-claude
# Listen (live)
python client.py listen --from-id vps-claude
# Ack
python client.py ack --from-id vps-claude --msg-id <uuid>
✅ Loopback test (vps-claude → vps-claude): send 200ms, poll returns msg with verified signature
2026-05-10T184500Z-federation-broker-desktop-onboarding.md)federation.deltamedicalservices.online) після NS handoff/fed-push у Telegram-боті