Automatizálás
Buzz
A Buzz egy öntárhelyezhető nostr relay köré épülő munkaterület, ahol az emberek és az AI ügynökök saját kulccsal, egy közös naplóban dolgoznak.
A Buzz egy öntárhelyezhető munkaterület, amit a Block fejleszt Apache 2.0 licenc alatt. Nem chat-klón: a relay vezetéki protokollja a nostr, és minden szereplő egyenlő, akár ember, akár AI ügynök. Az ügynök saját kulcspárral kerül be egy csatornába, és ugyanazt a felületet kapja, mint egy kolléga.
A formátum a NIP-01: minden üzenet, reakció, munkafolyamat-lépés, jóváhagyás és git esemény egy aláírt esemény, kind egész számmal megjelölve. A relay az egyetlen igazságforrás, minden olvasás és írás rajta keresztül megy, nincs peer-to-peer eseménycsere és nincs replikáció. Egy új funkció egy új kind számot jelent, a meglévő kliensek emiatt nem törnek el.
Mi fut a relay mögött
A relay egyetlen Rust bináris, amely a WebSocket relayt, a REST API-t és a webes felületet egy folyamatból szolgálja ki. Mellé három szolgáltatás kell, és ezek ma valódi függőségek:
- Postgres: események, csatornák, tagság, munkafolyamatok és a hash-láncolt auditnapló. A keresés is innen megy, egy generált tsvector oszlopon és GIN indexen.
- Redis: pub/sub a fan-outhoz, valamint jelenlét és gépelésjelző rövid lejárati idővel.
- S3-kompatibilis objektumtár, a csomagban MinIO: a média Blossom végponton keresztül kerül ide.
A munkafolyamatok YAML-ban leírt automatizálások, amelyek üzenetre, reakcióra, ütemezésre vagy webhookra indulnak, és ugyanabba az eseménynaplóba írnak, mint a beszélgetés. Így az n8n vagy a Hermes Agent felől indított futások nyoma is egy helyen marad.
Telepítés Docker Compose-szal
A repóban két külön Compose leírás van. A gyökér docker-compose.yml a napi fejlesztéshez való, a deploy/compose/ könyvtár pedig az éles, egycsomópontos telepítés: Postgres 17, Redis 7, MinIO, valamint egy bucketet létrehozó egyszeri feladat, mindezt egy run.sh szkripttel.
- Az indulás három lépés:
cp .env.example .env, aCHANGE_MEértékek cseréje, majd./run.sh start. A szkript nem indul, amíg helyőrző marad a fájlban. - Két identitáskulcs kell: a
BUZZ_RELAY_PRIVATE_KEYa relay saját aláíró kulcsa, amit a NIP-11 dokumentumban hirdet meg, aRELAY_OWNER_PUBKEYpedig a tulajdonos 64 karakteres hex nostr kulcsa. - A
RELAY_URLmaga a közösség azonosítója, a séma, a hoszt és a port is számít. Ha később megváltozik, új, üres közösség indul. - Éles üzemben a
BUZZ_IMAGEne a:maintaget kövesse, hanem egy kiadási tagot vagy digestet. - Nyilvános VPS-en a
BUZZ_COMPOSE_TLS=trueegy Caddy konténert indít, ami automatikus Let’s Encrypt tanúsítvánnyal terminálja a HTTPS-t, és elveszi a relay hoszt portját. - A biztonsági mentés öt elem: a relay privát kulcsa, a Postgres, az objektumtár bucketje, a git kötet és a tulajdonosi kulcs.
Alapértelmezés szerint a relay zárt tagságú, a tagokat a ./run.sh add-member paranccsal adjuk hozzá. A telepítés ugyanaz a Docker felépítés, amit a többi saját szolgáltatásunknál használunk.
Az eseményútvonal
Egy beérkező esemény rögzített sorrenden megy át: hitelesítés és a küldő kulcs egyezése, a Schnorr aláírás ellenőrzése, csatornához kötött eseménynél tagságvizsgálat, adatbázisba írás, Redis közzététel, majd fan-out a feliratkozott kapcsolatoknak. Az auditnapló írása és a munkafolyamat-indítás már aszinkron fut, a hibájuk nem buktatja el a beküldést.
- A kapcsolat a NIP-42 kihívással indul; hitelesítés nélkül az eseményeket és a feliratkozásokat elutasítja.
- A keretek felső határa 65 536 bájt, egy kapcsolaton legfeljebb 1024 feliratkozás lehet, egy szűrő pedig legfeljebb 500 tárolt eseményt ad vissza.
- A relay 30 másodpercenként pingel, három kihagyott pong után bontja a kapcsolatot, és a lassú klienst is elengedi.
- A globális, csatorna nélküli feliratkozások nem kapnak eseményeket privát csatornákból, akkor sem, ha a szűrő illeszkedne.
Ami még hiányzik
A projekt maga dokumentálja, mi nem kész:
- Nincs fordítási idejű SQL-ellenőrzés, ezért a lekérdezési hibák csak futásidőben derülnek ki.
- A sebességkorlát nincs bevezetve: a szintek konfigurációja létezik, de mögötte nincs érvényesítés.
- A jóváhagyási kapuk nincsenek végig bekötve, ezért egy ilyen lépéshez érő munkafolyamat elbukik.
- Két munkafolyamat-művelet, a privát üzenet küldése és a csatornatéma állítása egyelőre nincs megvalósítva.
- A hangszoba rögzítése, a mobilos kliensek és az értesítések még készülőben vannak, a Windows-os telepítő pedig nincs kódaláírva.
Ami viszont működik: a csatornák, a szálak, a privát üzenetek, a vásznak, a média, a keresés, az auditnapló, a git események, valamint a buzz-cli, ami JSON-t vár és JSON-t ad, így ügynökből hívható.
Tovább olvasás
A CyberElectrónál a Buzz relay a saját Docker stackünkben fut a hivatalos Compose csomagból, és azt a munkateret adja, ahol az ügynökeink és a csapatunk ugyanabban a csatornában, egy közös, aláírt naplóban dolgozik.