Naar hoofdinhoud gaan

AHP Host

Met het Agent Host Protocol (AHP) kun je een listener starten die door de Copilot-runtime wordt beheerd en remote clients accepteren via WebSocket of Mission Control van GitHub. Een AHP-host is eigendom van de bijbehorende Client-verbinding. Als je de listener stopt met Client::stop() of met dispose() van de host, worden de sessions die de host gebruikte niet verwijderd.

Een host starten

Geef ten minste een van localServer of githubEnvironment mee. Daarnaast is een authenticatiemodus vereist. Wil je anonieme toegang toestaan, dan moet je expliciet none meegeven.
localServer: [] gebruikt een loopback-adres en een vrije poort. githubEnvironment vereist github-authenticatie. Behandel de token die de host teruggeeft als een verbindingsgeheim. workspace is de werkmap die de AHP-host gebruikt. De Copilot-runtime zoekt dit pad op aan de kant van de host waar de runtime draait, dus het kan afwijken van het pad binnen je Laravel-applicatie. Laat je het weg, dan neemt de SDK workspace niet op in de RPC-aanroep en behoudt de runtime zijn bestaande gedrag.

Authenticatiemodi

  • AhpHostAuthentication::github() authenticeert met een GitHub-account. Je kunt dit combineren met githubEnvironment.
  • AhpHostAuthentication::none() schakelt authenticatie expliciet uit.
  • AhpHostAuthentication::custom() valideert admission tokens met je eigen applicatielogica. Hiervoor zijn een stabiele eigenaarsidentiteit en een validatie-callback vereist.
De callback voor aangepaste authenticatie ontvangt een HostValidateAuthenticationRequest met de ontsleutelde admission token, en een CancellationToken die annulering signaleert. Geef bij succes de identiteit en een expiresAt in de toekomst in RFC3339-formaat terug. Om de token te weigeren, geef je null terug. De identiteit moet exact overeenkomen met requireIdentity.
De admission token is een andere credential dan de GitHub-token of provider-token die voor inferentie wordt gebruikt. Sla deze niet op in logs of in de session-config. Het signaal van de callback wordt geannuleerd wanneer de host host.authenticationCancelled ontvangt of wordt afgesloten. Roept de callback externe services aan, registreer dan afbreekafhandeling met onCancellationRequested().

Beleid voor het aanmaken van sessions

allowCreatingNewSessions stelt het initiële beleid in voor remote clients die nieuwe sessions aanmaken. Laat je dit weg, dan wordt het remote aanmaken van sessions geweigerd. Het beleid geldt niet voor sessions die door de eigenaar-applicatie zijn aangemaakt, gepubliceerde sessions of bestaande verbindingen. Wil je het beleid wijzigen terwijl de host draait, roep dan setSessionCreationPolicy() van de host aan. Het nieuwe beleid geldt voor verzoeken die binnenkomen nadat de wijziging is bevestigd. Verzoeken tot aanmaken die al zijn geaccepteerd, kunnen worden voltooid. Verbonden clients worden niet losgekoppeld.
Gebruik je RPC rechtstreeks, roep dan $client->rpc()->host()->setSessionCreationPolicy() aan en geef een HostSetSessionCreationPolicyRequest mee met de hostId en de nieuwe instelling.

Sessions in eigendom van de applicatie

Geef de callbacks createSession en resumeSession mee om verzoeken van de AHP-host door te geven aan de Client van je applicatie. Elke callback ontvangt een HostMaterializeSessionRequest met de door de runtime geverifieerde HostSessionAuthentication en de door de host aangeleverde config, plus een CancellationToken voor coöperatieve annulering. Geef een session terug die met dezelfde Client is aangemaakt of hervat.
onSessionReleased ontvangt de session waarvan de deelname is beëindigd. De SDK verbreekt de verbinding van de session niet en vernietigt deze ook niet. HostMaterializeSessionRequest::$authentication is een door de host geverifieerde, vertrouwde identiteit en geen clientinvoer. Voer eventuele benodigde tenant- of gebruikersautorisatie toch zelf uit binnen de callback.

Session-catalogus en afsluiten

Het ongedaan maken van de publicatie verwijdert de session uit de AHP-catalogus. Dit verwijdert geen lokale geschiedenis en stopt geen lopend werk. dispose() stopt de listener, maar verwijdert geen gerelateerde sessions.

Gerelateerde documentatie

Laatst gewijzigd op 26 oktober 2026