Vissza az eszközökhöz

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.

3 perc olvasás

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, a CHANGE_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_KEY a relay saját aláíró kulcsa, amit a NIP-11 dokumentumban hirdet meg, a RELAY_OWNER_PUBKEY pedig a tulajdonos 64 karakteres hex nostr kulcsa.
  • A RELAY_URL maga 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_IMAGE ne a :main taget kövesse, hanem egy kiadási tagot vagy digestet.
  • Nyilvános VPS-en a BUZZ_COMPOSE_TLS=true egy 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.

Címkék
  • nostr
  • öntárhely
  • együttműködés
  • ügynök
  • Compose