RPC (Remote Procedure Call)
In de officiële SDK worden recente nieuwe functies ondersteund via automatische codegeneratie op basis vanapi.schema.json. De Laravel-versie is op dezelfde manier geïmplementeerd, met de gegenereerde versies voor andere talen als referentie.
ServerRpc
De RPC-klasse die aan de Client is gekoppeld.Verbinding, modellen, tools en accounts
Metping() en connect() controleer je de verbinding en start je deze, en met registerExtensionLaunchProvider() registreer je een startprovider voor extensies. De modellijst, prijseenheden en de ingebouwde catalogus haal je op via models(), en de lijst met beschikbare tools via tools(). account() behandelt quota, authenticatiestatus, de lijst met ingelogde gebruikers en in- en uitloggen, terwijl accounts() tokens voor Microsoft Entra ID ophaalt.
MCP, connectors en secrets
mcp() biedt het weergeven, toevoegen, bijwerken en verwijderen van MCP-configuratie, inschakelen, detectie, zoeken in het register, en het plannen en toepassen van installaties. Met connectors() bekijk je connectorfuncties, accounts en de catalogus. Connectorbewerkingen aan de serverkant draaien vooral om het ophalen en bijwerken van lijsten per account. Met het experimentele secrets()->addFilterValues() registreer je dynamische secrets die door je host zijn gegenereerd bij het redactiefilter van de CLI. De CLI maskeert die waarden vervolgens in sessielogs en exports.
Skills, plugins, agents, instructions en extensions
Vanuit elke groep kun je verkennen, beschikbare paden ophalen, instellingen wijzigen en opnieuw laden.commands() biedt de lijst met ingebouwde commando’s en hooks() het verkennen van hooks vóór het starten van een sessie. Skills en plugins ondersteunen in- en uitschakelen en installatiebeheer, en via agents kun je ook informatie over ingebouwde agents ophalen. Extensions verkent, schakelt in en schakelt uit voor persistent opgeslagen extensies.
Catalogus en installatie
Metcatalog() zoek je kandidaten, selecteer je ze en haal je feeds op; via de API’s van skills, plugins en MCP controleer je installatieplannen, pas je ze toe, vraag je de status op of annuleer je ze. Plannen en toepassen zijn afzonderlijke bewerkingen. Zie de afzonderlijke onderdelen verderop voor concrete installatievoorbeelden.
Sessies, host en runtime-omgeving
sessions() behandelt het zoeken naar persistente sessies, het lezen van events, het controleren van de grootte, verwijderen en opschonen, en forken. Ook het aanmaken en laden van workspaces en bediening op afstand zijn beschikbaar. host() start de host, publiceert sessies, toont ze, trekt publicaties in, behandelt authenticatie, wijzigt het toelatingsbeleid voor sessies en ruimt op. Deze host-RPC’s vormen de basis van de high-level AHP (Agent Host Protocol)-host-API van de SDK. runtime() behandelt de levenscyclus van de runtime.
Git, omgevingen, sandbox en beleid
Viagit() haal je informatie op over branches, de werkdirectory en Git-remotes, en met gitHubRepository() en gitHubOwners() verken je GitHub-repository’s en eigenaren. environments() behandelt Mission Control-omgevingen, sandbox() en sandboxProxyCa() de sandboxondersteuning en de Proxy CA, contentExclusion() de validatie van uitsluitingsbeleid, en managedSettings() en userSettings() de instellingen. Gebruik settings() om afzonderlijke sleutels uit een instellingenbestand te verwijderen en waarden te maskeren voor weergave.
Lokale modellen, HTTP-inferentie en bestandssysteem
azureMl() biedt de catalogus, resolutie en download van lokale modellen, plus het controleren van de status, annuleren en verwijderen. llmInference() is een experimentele API die HTTP-verzoeken van de modellaag doorstuurt naar de client. sessionFs() registreert een filesystem-/SQLite-callbackprovider voor de sessie.
Kerberos-authenticatie (experimental)
Registreer een Kerberos-authenticatieprovider metkerberosAuth()->setProvider(). Stel mode in op fallback om de callback alleen te gebruiken wanneer het ophalen van native referenties mislukt, of op always om altijd de callback te gebruiken. scope is standaard connection. Stel deze in op runtime om ook runtime-brede achtergrondcommunicatie te dekken. Slechts één verbinding tegelijk kan zich registreren met de scope runtime. De registratie-RPC geeft geen waarde terug.
Interne en experimentele RPC’s
De volgende RPC’s zijn in de officiële SDK als intern gemarkeerd, maar Laravel stelt ze beschikbaar als@experimental. Ze kunnen in de toekomst wijzigen of verwijderd worden, en de aanroeperbeperkingen van de runtime blijven van toepassing. Gebruik ze om items in het agentregister aan te maken, op te sommen en te verwijderen, een authenticatie-URL in de browser te openen, verlopen grote tooluitvoer op te ruimen en waarschuwingen voor sandbox-padtoekenningen op te halen. Lijstresultaten bevatten geen verbindingsreferenties.
Basisvoorbeeld van een aanroep
Gebruiksvoorbeelden per functie
Hieronder staan representatieve aanroepvoorbeelden van de bovenstaande functies.Agent Plugin-catalogkandidaten
Als je incatalog.search om agent-plugin-discovery vraagt en plugin opgeeft in de te doorzoeken kinds, krijg je Agent Plugin-kandidaten. Om naast het standaardformaat application/vnd.github.copilot-plugin ook application/vnd.anthropic.claude-plugin+json en application/agent-plugin+json te ontvangen, vraag je naast agent-plugin-discovery ook agent-plugin-formats aan.
agent-plugin-confirmed-installation is een capability die teruggeeft of iets installeerbaar is en een plan ter beoordeling levert; ook deze vraag je samen met agent-plugin-discovery aan. Wordt deze toegestaan, dan bevatten kandidaten installability, met als waarde installable, install-data-unavailable, feature-disabled of not-installable-kind. installPlan is alleen aanwezig als installability gelijk is aan installable. Het plan is data ter controle; deze catalog-RPC voert nooit een installatie uit.
De sources van het plan bevatten in volgorde van voorkeur kandidaten van het type materialization, marketplace en repository. Bij een marketplace worden de naam en de repository vastgelegd, bij een directe repository de repository en een optioneel pad. In een plan met alleen materialization wordt pluginName weggelaten en is components leeg. Controleer de naam en wat er daadwerkelijk wordt geïnstalleerd in de review die plugins.planInstall() teruggeeft.
Voor een geselecteerde kandidaat kun je met plugins.planInstall() een gevalideerd plan zonder bijwerkingen maken. plugins.applyInstall() vraagt de gebruiker om expliciete bevestiging en past het plan toe als dat wordt toegestaan. Na het toepassen wordt de plugin in uitgeschakelde toestand geregistreerd.
De mcpServers in de review tonen de servernamen, de transport en, bij remote servers, de host zoals gedeclareerd in de gevalideerde bestanden. Dit is geen garantie voor veiligheid, dus laat de gebruiker de inhoud controleren voordat die expliciet bevestigt. De description van een geïnstalleerde plugin komt uit het manifest. verifiedSource geeft de GitHub-repository en een vaste commit aan en bestaat alleen bij directe installaties die aan een commit zijn vastgezet. iconUrl is externe, niet-vertrouwde content; stuur bij het ophalen geen authenticatiegegevens of GitHub-credentials mee. Credentials zelf worden nooit als weigeringsreden teruggegeven.
Bij network-failure in het installatieresultaat kun je CatalogNetworkFailureReason, de HTTP-statusCode, een optionele retryAfterSeconds en een veilig te tonen message bekijken.
catalog.planInstallFromReference(). De outcome->kind van het resultaat is plugin-install-planned, skill-install-planned of refused. Geef een pluginplan door aan plugins.applyInstall() en een skillplan aan skills.applyInstall().
contentExclusion
Vóór het aanmaken van een sessie kun je de JSON van het beleid voor contentuitsluiting valideren.policiesJson wordt als ongeparste JSON-string aan de CLI doorgegeven. Als het parsen van de JSON of de schemavalidatie mislukt, treedt er een RPC-fout van de CLI op (JsonRpcException).
Dit is een RPC met serverscope die het beleid zelf valideert. Om paden binnen de werkdirectory van een sessie te toetsen aan het daadwerkelijke uitsluitingsbeleid gebruik je contentExclusion()->checkPaths() met sessiescope.
managedSettings (experimental: beheerde instellingen)
Hiermee lees je beheerde instellingen, los je beleid op, haal je het schema op, valideer je, bekijk je een samengestelde preview en wis je de cache.settings (experimental: bewerkingen op instellingenbestanden)
Verwijder een specifieke sleutel uit een instellingenbestand en vervang geheime waarden voor weergave.removeRawKey() verwijdert sleutels ongewijzigd, ook sleutels die geen canoniek instellingenpad zijn, zoals sleutels die niet geladen konden worden. Als het bestand niet geparsed kan worden, overschrijft de CLI het niet en is status gelijk aan invalid. redactValueForDisplay() vervangt geheime waarden door placeholders op basis van de positie in de instellingenboom die basePath aangeeft, zodat je de waarde aan gebruikers kunt tonen of naar logs kunt schrijven.
Levenscyclus van runtime en host (experimental)
host.unpublishSession() trekt een application publication in van een draaiende host die je in eigendom hebt. Het intrekken van de publicatie verwijdert of stopt de oorspronkelijke sessiegeschiedenis, worktree en lopend werk niet. Als de sessie al niet meer gepubliceerd is, wordt unpublished gelijk aan false, en publicaties die geen application zijn, leveren een fout op.
host.dispose() ruimt een hostlistener op aan de hand van de opgegeven hostId.
host.setSessionCreationPolicy() schakelt in of uit of een draaiende host nieuwe sessies op afstand accepteert. De wijziging verbreekt bestaande clients niet en geldt alleen voor latere toelatingen.
Client::stop() na het verbreken van de sessies runtime.shutdown aan, vóór het sluiten van de JSON-RPC-verbinding en het proces. Er wordt maximaal 10 seconden gewacht tot de opschoning van de runtime voltooid is; bij een fout wordt de fout in de returnwaarde opgenomen en gaat de rest van het stopproces gewoon door. Bij verbindingen met een externe runtime, zoals via cli_url, wordt deze RPC niet aangeroepen, zodat een gedeelde runtime niet wordt beëindigd.
Als de CLI het bijbehorende verzoek niet kan identificeren en een JSON-RPC-fout met id: null retourneert, mislukken alle lopende verzoeken met een JsonRpcException. De exception bevat een diagnostisch bericht waaruit geciteerde waarden zijn verwijderd en waarvan de lengte is begrensd. De verbinding blijft open. Omdat de CLI het verzoek mogelijk al heeft verwerkt, moet je niet automatisch opnieuw proberen zonder te bevestigen dat dit veilig is. De SDK weigert uitgaande verzoeken die dieper dan 127 niveaus genest zijn, die de CLI niet kan lezen, al vóór het verzenden. Handlerantwoorden die te diep genest zijn, worden vervangen door een JSON-RPC-fout.
SessionRpc
De RPC-klasse die aan de Session is gekoppeld. Ook dingen die in eerdere SDK-versies niet mogelijk waren, zoals het gebruik van de planmodus, zijn nu beschikbaar.Model, modus, naam en plan
Metmodel() bekijk en wissel je het huidige model, en stel je reasoning effort, de Auto tier en toegestane modellen in. mode() behandelt de modus, name() de sessienaam en plan() het lezen en schrijven van de plantekst en de SQLite-todo’s.
Workspace, instructies en LSP
workspaces() biedt het weergeven, lezen, schrijven, verplaatsen en verwijderen van bestanden en directorybewerkingen. Met instructions() haal je instructies op, laad je ze opnieuw en verken je ze, en met lsp() initialiseer je de configuratie van de language server.
Autopilot-doel
autopilotObjective()->getState() retourneert de huidige status van het Autopilot-doel van de sessie als getypeerd object. Als er geen doel bestaat, is state null. Deze API verschilt van workspaces()->autopilotObjectiveExists(), dat controleert of er een doel in de workspace is opgeslagen.
Agents, Fleet en achtergrondtaken
Metagent() toon, selecteer en herlaad je agents, en met fleet() start je een Fleet. tasks() behandelt het registreren van achtergrondagents en taken in eigendom van de client, het ophalen en bijwerken van de voortgang, migreren, berichten versturen, annuleren en verwijderen.
MCP, plugins, extensions en workflow
mcp() behandelt het weergeven, starten, stoppen en herladen van servers, tools, prompts en resources, OAuth, sampling en het bijwerken van dynamische headers. plugins() en extensions() beheren de status binnen de sessie, en customizations() herlaadt aanpassingen. Met workflow() voer je workflows uit en vraag je ze op, en met diagnostics() en connectors() haal je diagnostische informatie en connectors op.
Tools, permissies, commando’s en UI
tools() en permissions() behandelen het beantwoorden van openstaande verzoeken die via events binnenkomen, en de instellingen daarvan. permissions()->clearResumeEscalation() heft in het geheugen de rechtenescalatie op die bij hervatten uit de geschiedenis is hersteld, en geeft een getypeerd succesresultaat terug. commands() biedt het weergeven en uitvoeren van commando’s en het beantwoorden van events, en ui() het beantwoorden van verzoeken zoals gebruikersinvoer, elicitation en goedkeuring van plannen. completions() haalt invoersuggesties op.
Accounts, authenticatie en providers
accounts() behandelt het opsommen van accounts/providers/ingelogde accounts via enumerate(), get() en set(), en interactief inloggen via begin(), advance() en cancel(). gitHubAuth() behandelt de authenticatiestatus en credentials van de sessie, provider() en providers() de modelendpoints en provideradapters, en connectors() de connectorverbindingen van de sessie.
Geschiedenis, wachtrij, logs en gebruik
history() biedt het comprimeren, afbreken, samenvatten voor overdracht en inkorten van het gesprek, en queue() het invoegen, verplaatsen, bewerken, verwijderen en direct versturen van openstaande items. Met log(), eventLog(), usage(), quota() en limitPrediction() werk je met logs, events, gebruik en limietinformatie. Met schedule() bekijk en stop je geplande prompts.
Levenscyclus, remote en hostintegratie
sendMessages() voert meerdere berichten in één beurt uit, en suspend() en shutdown() stoppen de sessie. interruptMainTurn() bestuurt de hoofdbeurt en cancelAllBackgroundAgents() de achtergrondagents afzonderlijk. remote() en visibility() behandelen publicatie op afstand en de deelstatus, sandbox() de sandbox van de sessie, managedSettings() beheerde instellingen met sessiescope, contentExclusion() padcontroles, metadata() metadata in eigendom van de client en canvas() de Canvas-integratie.
debug (experimental)
Metdebug()->collectLogs() verzamel je de eventlogs, proceslogs en shelllogs van een sessie in een .tgz-archief of een directory. Gevoelige informatie in de logs wordt standaard geredigeerd. Met additionalEntries voeg je extra bestanden of directory’s toe, en voor redaction kun je plain-text, events-jsonl of none opgeven. Met none wordt niets geredigeerd, dus let goed op wat je toevoegt.
DebugCollectLogsDestination::directory('/tmp/copilot-debug') schrijf je naar een stagingdirectory. Met include geef je afzonderlijk op welke logs en referentiepaden worden verzameld, en via entries en skippedEntries in het resultaat zie je wat er is verzameld. De paden van de bestemming en de extra entries zijn paden aan de kant van de CLI-server. In de standaardopzet, waarin de CLI via stdio wordt gestart, is dat dezelfde host als de app; maar als je via TCP verbinding maakt met een CLI-server op een andere host, geef dan paden op aan de serverkant en niet op de aanroepende machine.
contentExclusion (experimental)
Je kunt controleren of lokale absolute paden binnen de werkdirectory van de sessie onder het beleid voor contentuitsluiting vallen. Roep dit aan voordat je de inhoud van een bestand leest of bijvoegt.checkPaths() accepteert alleen absolute paden, en de paden moeten binnen de werkdirectory van de sessie liggen. checks worden in dezelfde volgorde als de invoer teruggegeven, en dubbele paden blijven behouden. Als een pad, bestandssysteem of beleidsevaluatie niet ondersteund wordt of niet beschikbaar is, krijg je available: false en een lege checks terug. In dat geval retourneert isExcluded() altijd true, dus behandel alle paden als uitgesloten. Ook bij available: true worden paden die niet in het resultaat voorkomen voor de zekerheid als uitgesloten beschouwd.
MCP Apps (experimental)
Via$session->rpc()->mcp()->apps() roep je de RPC’s voor MCP Apps aan. Bij listTools() en callTool() is de naam van de aanroepende MCP-server, originServerName, verplicht. Het resultaat van callTool() wordt teruggegeven als een MCP-resultaat in vrije vorm.
readResource() geeft resourcedata zoals HTML terug. De SDK rendert niets in een browser en manipuleert geen iframes; het weergeven van de opgehaalde inhoud is de verantwoordelijkheid van de aanroepende applicatie.
Gebruiksvoorbeelden per functie
Hieronder staan representatieve aanroepvoorbeelden van de bovenstaande functies.remote (experimental: ondersteuning voor sessies op afstand)
sandbox (experimental: sandboxbesturing)
requestId van het betreffende openstaande verzoek wanneer $request['sandboxPathGrant'] aanwezig is. Omdat deze RPC zelf op het permissieverzoek antwoordt, retourneer je bij succes PermissionDecision::noResult(), zodat er geen normaal antwoord wordt verstuurd.
metadata (experimental: sessie-informatie)
Session canvas
Canvas-RPC’s roep je aan via$session->rpc()->canvas(). list() geeft de lijst terug in
canvases van CanvasList, en listOpen() in openCanvases van
CanvasListOpenResult. open() retourneert OpenCanvasInstance, en
het aanroepen van een action retourneert CanvasActionInvokeResult. close()
heeft geen returnwaarde.
canvas.open / canvas.close /
canvas.action.invoke) wordt afgehandeld door canvasHandler in SessionConfig /
ResumeSessionConfig. Het renderen van de Canvas is de verantwoordelijkheid van de host-UI.
workflow
Ook de experimentele RPC-API’s voor workflows, connectors, diagnostiek en meer die in de Copilot CLI 1.0.89-reeks zijn toegevoegd, zijn viaSessionRpc beschikbaar. Deze variabele protocolpayloads geef je door als JSON-compatibele arrays, en de antwoorden komen ook als arrays terug. Bij elke aanroep wordt automatisch de huidige sessionId toegevoegd.
workflow() roept de low-level RPC aan die de CLI biedt. Een high-level API om, zoals in de Node.js SDK, PHP-closures als workflow te registreren en uit te voeren, is in deze synchronisatie niet toegevoegd. Deze nieuwe RPC-groepen zijn afhankelijk van de CLI-versie en experimenteel; gebruik ze daarom alleen met een CLI die ze ondersteunt.
SessionFS-callbacktypen
Er zijn callbacktypen (Request/Result) gedefinieerd voor bestandssysteembewerkingen met sessiescope. Dit zijn de request-/responsetypen die worden gebruikt wanneer de Copilot CLI een callback naar de client doet.SessionFsStatResult / SessionFsReaddirResult / SessionFsReaddirWithTypesResult hebben een optionele error (SessionFsError) die bij fouten wordt gebruikt.
SessionFs-handler
NaastsessionFs.readFile / readFileBytes / writeFile / writeFileBytes stuurt de Client ook de verzoeken appendFile, exists, stat, mkdir, readdir, readdirWithTypes, rm, rename, sqliteQuery, sqliteTransaction en sqliteExists door naar de provider van de Session. Mislukte bestandsbewerkingen worden teruggegeven als een error met ENOENT (ENOENT of errno 2) / UNKNOWN. exists retourneert bij een exceptie false, en stat geeft bij een fout nulwaarden plus een error terug. Bewerkingen die de provider niet ondersteunt, leveren een UNKNOWN-fout op (voor SQLite een JSON-RPC-fout). Excepties in sqliteQuery/sqliteExists worden JSON-RPC-fouten, en een mislukte sqliteTransaction wordt teruggegeven als error in het resultaat (met errorClass).
De interfaces aan de providerkant (SessionFsFilesystemProvider, SessionFsSqliteCapableProvider, SessionFsSqliteProvider, SessionFsSqliteTransactionProvider) zijn als afzonderlijke interfaces toegevoegd, zodat de bestaande SessionFsProvider (2 methodes) niet breekt.
SQLite-callbacktypen
Om SQLite-ondersteuning in te schakelen, geef je
SessionFsSetProviderCapabilities(sqlite: true) door aan capabilities van SessionFsSetProviderRequest.
sessionFs (of session_fs in config/copilot.php) opgeeft, verstuurt Client::start() sessionFs.setProvider precies één keer. De sessie heeft createSessionFsProvider nodig (zie SessionConfig).
De enum SessionFsSqliteQueryType (src/Enums/) geeft het soort query aan:
Exec: DDL/meerdere statements (geen resultaat)Query: SELECT (geeft rijen terug)Run: INSERT/UPDATE/DELETE (geeft rowsAffected terug)
src/Types/Rpc/.
Argumenten opgeven als array
Voor zowel argumenten als returnwaarden worden speciale klassen gebruikt, maar argumenten kun je ook als array opgeven.Testen
Mocken metCopilot::fake() werkt hier niet; mock daarom met Copilot::expects('client') of Copilot::expects('start').
Raadpleeg de GitHub-repository voor de meest actuele informatie.