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.protov1.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 igetExtendedAgentCard— 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
returnImmediatelyi worker-e koji pozivajuProcessor::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.