Skip to main content
a2a-php-sdk — cover

Izabrani projekti

a2a-php-sdk

Klijentski i serverski SDK za protokol A2A 1.0.0 u PHP 8.4 — svih 11 operacija preko JSON-RPC, REST i gRPC, strimovanje preko SSE i gRPC, provereno zvaničnim A2A TCK-om.

  • PHP 8.4
  • A2A 1.0.0
  • JSON-RPC
  • HTTP+JSON / REST
  • gRPC (OpenSwoole)
  • SSE
  • Protocol Buffers
  • Symfony HttpClient
  • PHPStan level 8
  • Docker

Problem

A2A (Agent2Agent) je otvoreni protokol, sada projekat Linux Foundation-a, preko kog agenti napravljeni na različitim framework-ovima pozivaju jedni druge. Verzija 1.0.0 objavljena je 12. marta 2026. Zvanični SDK-ovi postoje za Python, JavaScript, Java, Go, .NET i Rust — za PHP ne. PHP implementacije na Packagist-u, zaključno sa septembrom 2026, podržavaju protokol 0.3.0.

Zato Symfony i čisti PHP backend-ovi ne mogu ni da objave agenta u A2A ekosistem, ni da odatle pozovu tuđeg, bez ručnog pisanja formata razmene.

Šta je to

  • Klijent i server u jednom paketu, PHP 8.4+, bez zavisnosti od Laravel/Illuminate.
  • Klase poruka su generisane iz zvaničnog a2a.proto v1.0.0. CI ih ponovo generiše i poredi bajt po bajt, a SHA-256 proto fajla je zapisan u repozitorijumu.
  • Svih 11 operacija — sendMessage, sendStreamingMessage, getTask, listTasks, cancelTask, subscribeToTask, četiri operacije sa podešavanjima push obaveštenja i getExtendedAgentCard — preko JSON-RPC, HTTP+JSON/REST i gRPC, kroz iste tipizirane metode klijenta.
  • Strimovanje preko SSE i gRPC ide kroz jedan servis zadataka i jednu validaciju.
$client = new Client(
    new HttpTransport(HttpClient::create(), $endpoint, jsonRpc: true),
    new CallOptions(timeoutSeconds: 30, headers: ['Authorization' => 'Bearer '.$token]),
);
$response = $client->sendMessage($request);
foreach ($client->sendStreamingMessage($request) as $event) {
    $consumer->accept($event);
}

Serverska strana

Agent je jedan interfejs, Executor, koji vraća ažuriranja statusa i artefakata zadatka. SDK sam kreira zadatak, beleži poruku korisnika, postavlja WORKING, čuva istoriju i strim događaje i isporučuje webhook-ove.

  • Fajl skladište radi sa zaključavanjem i atomskom zamenom. Zapisi nose identitet pozivaoca i tenant, pa je zadatak vidljiv samo onome ko ga je kreirao.
  • Dugi zadaci idu kroz returnImmediately i worker-e koji pozivaju Processor::workOnce().
  • Webhook-ovi se isporučuju po principu at least once, samo preko HTTPS-a i na eksplicitno dozvoljene hostove; adrese privatnih mreža su podrazumevano blokirane.
  • Nativni gRPC server radi na OpenSwoole 26.2+ i isključen je dok se ne uključi.

Bezbedna podešavanja

  • Otkrivanje Agent Card-a ograničava veličinu odgovora i blokira adrese privatnih mreža. Endpoint se ne bira automatski iz nepouzdane kartice.
  • Pozivi klijenta se ne ponavljaju automatski: ponavljanje sendMessage() može dvaput da izvrši posao, pa politiku ponavljanja određuje aplikacija.
  • TLS je podrazumevano uključen za gRPC klijent. Testovi pokrivaju TLS i mTLS na sva tri binding-a, uključujući nepouzdan CA, pogrešno ime servera i nedostajući klijentski sertifikat.

Kompatibilnost — tačnim brojevima

make tck gradi zvanični a2a-tck 1.0.0 iz fiksiranih izvora i pokreće ga na sva tri transporta. Neizmenjen skup daje 244 passed, 3 failed, 18 skipped.

Sva tri pada su jedan zahtev, CORE-SEND-003, na svakom transportu. On kaže da nepodržan tip podataka MUST da vrati ContentTypeNotSupportedError, ali u definiciji zahteva unutar TCK-a očekivana greška nije navedena, pa se ispravan odgovor računa kao pad. SDK vraća upravo zahtevanu grešku: -32005 za JSON-RPC, HTTP 415 za REST, INVALID_ARGUMENT sa CONTENT_TYPE_NOT_SUPPORTED za gRPC. Defekt je prijavljen u zvaničnom repozitorijumu — a2a-tck#202; sa ispravkom iz PR #203 rezultat je 247 passed, 18 skipped.

CI propušta tačno ta tri dokumentovana pada i pada na svakom novom. Ovo nije tvrdnja o punoj TCK sertifikaciji.

Izdavanje

  • CI na svaki pull request, push i tag: instalacija po lock fajlu i provera ranjivosti, unit i mrežni testovi, PHPStan level 8, PSR-12, provera ponovnog generisanja protokola i instalacija ZIP arhive u čist projekat bez gRPC ekstenzija.
  • Objavljen kao v1.0.0 na Packagist-u pod Apache-2.0: composer require vbcherepanov/a2a-php-sdk.
  • Uvršten u zvaničnu listu A2A community SDK-ova (prihvaćeno 7. oktobra 2026).
  • Symfony aplikacije dobijaju rute, worker-e, Doctrine skladište i Messenger kroz prateći a2a-symfony-bundle.

Pouke

  • Skup testova kompatibilnosti je takođe softver. Analiza uzroka pada pokazala je defekt u testu, a ne u SDK-u, i pravi potez je bio prijaviti ga zvaničnom repozitorijumu, a ne prilagođavati SDK pogrešnoj proveri.
  • Generisanje tipova iz zvaničnog proto fajla i provera ponovnog generisanja u CI uklanjaju čitavu klasu razilaženja između specifikacije i ručno pisanih klasa.