Zum Hauptinhalt springen

Protokollreferenz

Dieses Dokument bietet eine vollstaendige Referenz fuer die ACP-Methoden (Agent Client Protocol) und Streaming-Ereignisse, die vom iac-code-Server bereitgestellt werden.

Lebenszyklus-Uebersicht

Eine typische ACP-Sitzung folgt diesem Ablauf:

initialize → new_session → prompt (loop) → close_session
↑ │
└── load_session / resume ──────┘
  1. initialize -- Handshake. Protokollversion aushandeln und Serverfaehigkeiten ermitteln.
  2. session/new -- Eine neue Sitzung mit einer unabhaengigen Agenten-Laufzeitumgebung erstellen.
  3. session/prompt -- Benutzereingabe senden; Streaming-Ereignisse bis zur endgueltigen Antwort empfangen.
  4. session/close -- Die Sitzung und ihre Ressourcen freigeben.

Sitzungen koennen auch aus dem Verlauf geladen (session/load) oder fortgesetzt (session/resume) werden, anstatt neue zu erstellen.


Methoden

initialize

Protokoll-Handshake. Muss der erste Aufruf bei jeder Verbindung sein.

Anfrageparameter

FeldTypErforderlichBeschreibung
protocolVersionintegerJaAngeforderte Protokollversion (derzeit 1)
clientInfoobjectNeinClientname und -version
clientCapabilitiesobjectNeinVom Client unterstuetzte Faehigkeiten

Antwortfelder

FeldTypBeschreibung
protocolVersionintegerAusgehandelte Protokollversion
agentCapabilitiesobjectServerfaehigkeiten (siehe unten)
agentInfoobjectServername und -version
authMethodsarrayVerfuegbare Authentifizierungsmethoden (leer bei Verwendung eingebauter Anmeldedaten)

Agentenfaehigkeiten

FaehigkeitWertBedeutung
loadSessiontrueUnterstuetzt das Wiederherstellen von Sitzungen aus dem Verlauf
promptCapabilities.embeddedContexttrueAkzeptiert eingebettete Ressourceninhalte in Eingaben
promptCapabilities.imagefalseBildeingabe nicht unterstuetzt (wird zu Textmarker degradiert)
promptCapabilities.audiofalseAudioeingabe nicht unterstuetzt (wird zu Textmarker degradiert)
sessionCapabilities.list{}Unterstuetzt das Auflisten von Sitzungen
sessionCapabilities.close{}Unterstuetzt das Schliessen von Sitzungen

session/new

Erstellen Sie eine neue Sitzung mit einer unabhaengigen Agenten-Laufzeitumgebung, Tool-Registry und LLM-Kontext.

Anfrageparameter

FeldTypErforderlichBeschreibung
cwdstringJaAbsoluter Pfad zum Arbeitsverzeichnis
mcpServersobjectNeinMCP-Serverkonfiguration (akzeptiert, aber noch nicht funktional)

Antwortfelder

FeldTypBeschreibung
sessionIdstringEindeutiger Sitzungsbezeichner fuer nachfolgende Aufrufe
modesobjectVerfuegbare Modi und aktueller Modus
modelsobjectVerfuegbare Modelle und aktuelles Modell
Hinweis

Jede Sitzung erstellt eine unabhaengige AgentLoop. Mehrere Sitzungen koennen gleichzeitig laufen, aber jede verbraucht eine LLM-Verbindung.


session/load

Laden Sie eine zuvor gespeicherte Sitzung von der Festplatte und stellen Sie ihren Nachrichtenverlauf wieder her.

Anfrageparameter

FeldTypErforderlichBeschreibung
cwdstringJaPfad zum Arbeitsverzeichnis
sessionIdstringJaID der zu ladenden Sitzung

Antwortfelder

FeldTypBeschreibung
modelsobjectVerfuegbare Modelle und aktueller Modellzustand
modesobjectVerfuegbare Modi und aktueller Moduszustand
Hinweis

Das Laden einer Sitzung liest den Verlauf aus ~/.iac-code/sessions/, repariert automatisch unterbrochene Nachrichten und injiziert den Verlauf in eine neue AgentLoop.


session/fork

Verzweigen Sie eine bestehende Sitzung, um einen unabhaengigen Zweig mit demselben Verlauf zu erstellen.

Anfrageparameter

FeldTypErforderlichBeschreibung
cwdstringJaPfad zum Arbeitsverzeichnis
sessionIdstringJaID der zu verzweigenden Sitzung

Antwortfelder

FeldTypBeschreibung
sessionIdstringNeue Sitzungs-ID fuer den verzweigten Zweig
modelsobjectVerfuegbare Modelle und aktueller Modellzustand
modesobjectVerfuegbare Modi und aktueller Moduszustand

session/resume

Setzen Sie eine bestehende Sitzung fort oder verbinden Sie sich erneut. Der Verlauf wird bei Bedarf automatisch geladen.

Anfrageparameter

FeldTypErforderlichBeschreibung
cwdstringJaPfad zum Arbeitsverzeichnis
sessionIdstringJaID der fortzusetzenden Sitzung

Antwortfelder

FeldTypBeschreibung
modelsobjectVerfuegbare Modelle und aktueller Modellzustand (optional)
modesobjectVerfuegbare Modi und aktueller Moduszustand (optional)
Hinweis

Im Gegensatz zu session/new enthaelt die Antwort kein sessionId-Feld, da der Client die Sitzungs-ID bereits aus der Anfrage kennt.


session/prompt

Senden Sie Benutzereingaben und loesen Sie Streaming-Agentenantworten aus.

Anfrageparameter

FeldTypErforderlichBeschreibung
sessionIdstringJaZiel-Sitzungs-ID
promptarrayJaArray von Inhaltsbloecken (siehe Inhaltsblocktypen unten)

Inhaltsblocktypen

TypBeschreibung
TextContentBlockKlartext-Benutzereingabe
EmbeddedResourceContentBlockInline eingebetteter Dateiinhalt
ResourceContentBlockRessourcen-Link-Referenz
ImageContentBlockBild (wird zu [image: mime/type]-Textmarker degradiert)
AudioContentBlockAudio (wird zu [audio: mime/type]-Textmarker degradiert)

Antwortfelder

FeldTypBeschreibung
stopReasonstringWarum die Eingabe abgeschlossen wurde (siehe Abschlussgruende)
usageobjectToken-Nutzung: inputTokens, outputTokens, totalTokens

Abschlussgruende

WertBedeutung
end_turnModell hat normal abgeschlossen
max_turn_requestsMaximale Tool-Aufruf-Schleifengrenze erreicht
max_tokensAusgabe-Token-Limit erreicht
cancelledClient hat die Eingabe abgebrochen
refusalModell hat die Antwort verweigert
Hinweis

Waehrend der Ausfuehrung sendet der Server session/update-Benachrichtigungen mit Streaming-Ereignissen, bevor er die endgueltige Antwort zurueckgibt.


session/cancel

Brechen Sie eine laufende Eingabeaufgabe ab.

Anfrageparameter

FeldTypErforderlichBeschreibung
sessionIdstringJaSitzung mit der laufenden Eingabe

Verhalten

  • Stoppt den Verbrauch von Stream-Ereignissen
  • Laufende Tools werden nicht zwangsweise beendet, aber Ergebnisse werden verworfen
  • Der ausstehende prompt-Aufruf gibt mit stopReason: "cancelled" zurueck

session/close

Schliessen Sie eine Sitzung und geben Sie ihre Ressourcen frei.

Anfrageparameter

FeldTypErforderlichBeschreibung
sessionIdstringJaZu schliessende Sitzung

Verhalten

  • Sitzung wird aus dem Speicher entfernt
  • Gespeicherter Verlauf bleibt auf der Festplatte
  • Nachfolgende prompt-Aufrufe an diese Sitzung geben einen Fehler zurueck

sessions/list

Listen Sie alle gespeicherten Sitzungen fuer ein gegebenes Arbeitsverzeichnis auf.

Anfrageparameter

FeldTypErforderlichBeschreibung
cwdstringJaArbeitsverzeichnis zur Eingrenzung der Auflistung

Antwortfelder

FeldTypBeschreibung
sessionsarrayListe von Sitzungsobjekten mit sessionId und Metadaten

config/set

Setzen Sie dynamisch eine Konfigurationsoption fuer eine Sitzung.

Anfrageparameter

FeldTypErforderlichBeschreibung
sessionIdstringJaZielsitzung
configIdstringJaZu setzender Konfigurationsschluessel
valueanyJaNeuer Wert

Streaming-Ereignisse

Waehrend der Ausfuehrung von session/prompt sendet der Server session/update-Benachrichtigungen mit Streaming-Ereignisdaten.

Ereignisformat

Jede session/update-Benachrichtigung traegt ein Update-Objekt mit einem bestimmten Typ:

{
"jsonrpc": "2.0",
"method": "session/update",
"params": {
"sessionId": "abc123",
"update": { "type": "agent_message_chunk", "text": "..." }
}
}

Ereignistyp-Zuordnung

Internes EreignisACP-Update-TypBeschreibung
TextDeltaEventAgentMessageChunkInkrementelle Agenten-Textausgabe
ThinkingDeltaEventAgentThoughtChunkModell-Denk-/Ueberlegungsinhalt
ToolUseStartEventToolCallStartTool-Aufruf beginnt
ToolResultEventToolCallProgressTool-Ergebnis (abgeschlossen oder fehlgeschlagen)
CompactionEventAgentMessageChunkKontextkomprimierungsbenachrichtigung
ErrorEventAgentMessageChunkFehlerinformation

Tool-Aufruf-Lebenszyklus

ToolCallStart (status=in_progress)

├── ToolCallProgress (status=in_progress, raw_input=tool input)

├── ToolCallProgress (status=completed, raw_output=result) ← success

└── ToolCallProgress (status=failed, raw_output=error) ← failure

Tool-Art-Zuordnung

ToolACP ToolKind
read_file, list_filesread
glob, grepsearch
write_file, edit_fileedit
bash, agentexecute
web_fetchfetch
Sonstigeother

Berechtigungsanfragen

Vor der Ausfuehrung risikoreicher Tools sendet iac-code einen request_permission-Callback an den Client.

Tool-Berechtigungskategorien

KategorieToolsAutomatisch erlaubt
Nur-Leseread_file, list_files, glob, grep, web_fetchJa
Schreibenwrite_file, edit_fileNein -- erfordert Genehmigung
Ausfuehrenbash, agentNein -- erfordert Genehmigung

request_permission-Ereignis

Der Server sendet einen request_permission-Callback mit:

FeldTypBeschreibung
optionsarrayVerfuegbare Berechtigungsoptionen
sessionIdstringSitzung, die Berechtigung anfordert
toolCallobjectTool-Aufruf-Details (Titel, Art, Eingabe)

Berechtigungsoptionen

Options-IDBedeutung
allow_onceDiesen spezifischen Aufruf erlauben
allow_alwaysAlle zukuenftigen Aufrufe dieses Tools in dieser Sitzung erlauben
reject_onceDiesen spezifischen Aufruf verweigern
reject_alwaysAlle zukuenftigen Aufrufe dieses Tools in dieser Sitzung verweigern

Antwortformat

{
"outcome": "allowed",
"option_id": "allow_once"
}

Oder zum Verweigern:

{
"outcome": "denied"
}
Client-AntwortTool-Verhalten
AllowedOutcomeTool wird normal ausgefuehrt
DeniedOutcomeTool wird uebersprungen; Modell erhaelt Fehlermeldung "Permission denied."

Fehlerbehandlung

RequestError-Format

Fehler folgen dem JSON-RPC 2.0-Fehlerformat:

{
"jsonrpc": "2.0",
"id": 3,
"error": {
"code": -32602,
"message": "Invalid params",
"data": {"session_id": "Session not found"}
}
}

Haeufige Fehlercodes

CodeNameBeschreibung
-32700Parse errorUngueltiges JSON
-32600Invalid requestFehlerhaftes JSON-RPC
-32601Method not foundUnbekannte Methode
-32602Invalid paramsFehlende oder ungueltige Parameter (z.B. unbekannte Sitzungs-ID)
-32603Internal errorServerseitiger Fehler