Skip to main content
a2a-symfony-bundle — cover

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 imenovani Client servisi, 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 returnImmediately idu u pravi asinhroni transport, a sinhroni transporti se za njih odbijaju. a2a:work je zadužen za oporavak i ponovnu isporuku webhook-ova.
  • Opciono — nativni gRPC preko a2a:grpc:serve na 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-postgres radi sa PostgreSQL 18 u privremenim kontejnerima: ponovno povezivanje, izolacija pristupa, konfliktna ažuriranja, rollback, duplirani ID-jevi i oporavak zakupa.
  • make test-symfony ponavlja 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.