Izabrani projekti
a2a-symfony-bundle
A2A 1.0.0 agenti u Symfony-ju — rute, bezbednosni sloj aplikacije, Doctrine skladište, Messenger worker-i i opcioni gRPC, nad a2a-php-sdk.
- PHP 8.4
- Symfony 7.4 / 8
- A2A 1.0.0
- Doctrine DBAL
- Symfony Messenger
- Symfony Security
- gRPC (OpenSwoole)
- Prometheus
- PostgreSQL 18
Problem
a2a-php-sdk daje PHP-u sam protokol. Symfony aplikaciji oko njega i dalje treba povezivanje: rute, servisi, autentifikacija kroz sopstveni bezbednosni sloj, skladište zadataka zajedničko za više procesa i pozadinski worker-i. Ručno sklapanje serverskih komponenti SDK-a u svakom projektu je upravo mesto gde nastaju greške.
Šta bundle dodaje
- Jedan import ruta otvara JSON-RPC (
/a2a/rpc), REST (/a2a), strimovanje preko SSE i otkrivanje na/.well-known/agent-card.json. - Agent je jedan Symfony servis koji implementira
Executor. Spoljni agenti se ubacuju kao imenovaniClientservisi, svaki sa sopstvenim TLS-om, rokovima i zaglavljima. - Autentifikacija preko mape Bearer tokena ili postojećeg Symfony
AccessTokenHandlerInterface. Zadaci su razgraničeni po identitetu pozivaoca i tenant-u, isto za HTTP i gRPC. - Skladište — fajlovi na deljenom volumenu ili Doctrine DBAL. Tabelu eksplicitno kreira
a2a:storage:init, šema se nikada ne menja tokom zahteva. - Messenger: zadaci sa
returnImmediatelyidu u pravi asinhroni transport, a sinhroni transporti se za njih odbijaju.a2a:workje zadužen za oporavak i ponovnu isporuku webhook-ova. - Opciono — nativni gRPC preko
a2a:grpc:servena OpenSwoole, JSON logovi i trajni Prometheus brojači i histogrami kašnjenja.
a2a:
executor: App\Agent\MyExecutor
card_file: '%kernel.project_dir%/config/agent-card.json'
public_url: '%env(A2A_PUBLIC_URL)%'
storage:
driver: doctrine
connection: doctrine.dbal.default_connection
clients:
peer:
endpoint: '%env(A2A_PEER_ENDPOINT)%'
binding: jsonrpc
Provereno na stvarnoj infrastrukturi
make test-postgresradi sa PostgreSQL 18 u privremenim kontejnerima: ponovno povezivanje, izolacija pristupa, konfliktna ažuriranja, rollback, duplirani ID-jevi i oporavak zakupa.make test-symfonyponavlja testove i kompilaciju kontejnera na Symfony 7.4 i 8.0; lock fajl pokriva 8.1.- Stvarni pozivi sa TLS i mTLS i strimovanje kroz imenovane klijente; sertifikati se generišu unutar test kontejnera.
- Spakovani ZIP se instalira u čist projekat i izvršava otkrivanje i JSON-RPC zadatak bez gRPC ekstenzija.
- PHPStan level 8 i PSR-12. CI bundle-a proverava Symfony integraciju; usklađenost sa protokolom potvrđuje zvanični TCK u SDK-u.
Izdavanje
Objavljen na Packagist-u pod Apache-2.0, trenutna verzija v1.0.2: composer require vbcherepanov/a2a-symfony-bundle. Flex recept je prihvaćen u zvanični symfony/recipes-contrib (2026-09-16): registruje bundle, uvozi rute i dodaje zakomentarisani primer konfiguracije. Uvoz ruta radi i pre podešavanja A2A, pa se nova aplikacija podiže u dev i prod okruženju.
Odluke
- Kreiranje šeme je komanda, a ne sporedni efekat. HTTP zahtev koji tiho migrira produkcionu tabelu je scenario havarije, a ne pogodnost.
- Identitet dolazi samo iz autentifikatora. Isti ugovor identiteta i tenant-a važi za HTTP i gRPC, pa zadatak kreiran preko jednog transporta nije vidljiv tuđem klijentu preko drugog.