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.


Sitzungsbackups

ACP-Sitzungen verwenden dasselbe v2-Sitzungsbackup-Verhalten wie interaktive und headless-Laeufe. Wenn IAC_CODE_CONFIG_BACKUP_DIR gesetzt ist, zeichnet ein normaler Prompt-Abschluss ein nicht blockierendes normal_turn_end-Backup auf; wenn dieses Backup fehlschlaegt, wird der Fehler als warning protokolliert und in .backup-state.json erfasst, waehrend die finale Antwort ohne zugesichertes warning-Feld abgeschlossen wird. Der Pipeline-Modus hat eigene kritische Backup-Gates.


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)
mcpCapabilities.httptrueAkzeptiert HTTP-/Streamable-MCP-Server bei der Sitzungserstellung
mcpCapabilities.ssetrueAkzeptiert SSE-MCP-Server bei der Sitzungserstellung
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
mcpServersarrayNeinMCP-Serverkonfigurationsarray, das in die Sitzungsruntime injiziert wird; HTTP- (streamable) und SSE-Server werden fuer die Sitzung verbunden

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)
_meta.usageobjectToken-Nutzung unter dem _meta-Objekt der Antwort: input_tokens, output_tokens, total_tokens

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

session/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

session/set_config_option

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

MCP-Status und Warnungen

ACP stellt den MCP runtime state im Wire-Pfad session/update.params.update._meta.iac_code bereit:

MetadatenschluesselACP-Update-TypBeschreibung
mcpStatussession_info_updateAktueller MCP server state, gesendet nach dem Erstellen der Sitzung und wenn sich MCP auth, connection oder capability state aendert.
mcpWarningagent_message_chunkEine Start- oder Konfigurationswarnung mit kurzem benutzer sichtbaren Warntext.

mcpStatus enthaelt servers und warnings. Server-Eintraege enthalten serverName, state, authState, toolsCount, resourcesCount und promptsCount. authState-Werte enthalten configured, needs-auth und not-configured.

Haeufige server states sind connected, failed, pending, needs-auth, pending-approval und disabled.

Grosse status frames koennen truncated, truncationReason mit Wert acp-frame-size-limit, serversOmittedCount, warningsOmittedCount oder capability-list omission counts wie toolsOmittedCount enthalten.

Tool-Eintraege unter servers[].tools[] enthalten publicName, originalServerName, originalToolName und optional annotations. MCP annotations koennen Hints wie readOnlyHint und destructiveHint tragen.

Permission audit operation records koennen isReadOnly und isDestructive enthalten, wenn MCP annotations read-only oder destructive hints liefern.

mcpWarning-Eintraege enthalten serverName, code, message, severity, source und optional sourcePath oder scope. Haeufige warning codes sind duplicate_config, invalid_name, invalid_config, missing_env, pending_approval, needs_auth, connection_failed, command_conflict, skill_read_failed, skill_truncated, alias_conflict sowie dynamische capability warnings wie <capability>_failed.

Tool-Aufruf-Lebenszyklus

ToolCallStart (status=in_progress)

├── ToolCallProgress (status=in_progress, Eingabezusammenfassung / sichere Prompt-Eingabe)

├── 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
Nur-Lese-Cloud-APIAls nur lesend eingestufte aliyun_api-AktionenJa
Schreibenwrite_file, edit_fileNein -- erfordert Genehmigung
Ausfuehrenbash, agentNein -- erfordert Genehmigung
Cloud-Schreib-APINicht nur lesende aliyun_api-AufrufeNein -- erfordert Genehmigung pro API

request_permission-Ereignis

Der Server sendet einen request_permission-Callback mit:

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

Bei MCP permission prompts verwendet der ACP ToolCallUpdate im title das oeffentliche Operation-Label; der Inhalt traegt eine redigierte Eingabezusammenfassung. Ueber das ACP _meta extensibility field enthaelt das Objekt toolCall._meta.iac_code.permission permissionId, toolName, toolUseId, scope, inputSummary und, wenn verfuegbar, publicName, originalServerName, originalToolName, isReadOnly und isDestructive. inputSummary beschreibt Form und Redaction-Metadaten, nicht rohe sensitive Eingaben.

Berechtigungsoptionen

Options-IDBedeutung
allow_onceDiesen spezifischen Aufruf erlauben
allow_alwaysAlle zukuenftigen Aufrufe dieses Tools in dieser Sitzung erlauben, wenn das Tool blanket allow unterstuetzt; fuer bash und aliyun_api standardmaessig nicht angeboten
allow_rule:<rules>Zukuenftige Aufrufe erlauben, die den vorgeschlagenen Regeln in dieser Sitzung entsprechen
deny_rule:<rules>Zukuenftige Aufrufe verweigern, die den vorgeschlagenen Regeln in dieser Sitzung entsprechen
reject_onceDiesen spezifischen Aufruf verweigern
reject_alwaysAlle zukuenftigen Aufrufe dieses Tools in dieser Sitzung verweigern

Fuer aliyun_api werden Nur-Lese-Aktionen automatisch erlaubt. Nicht nur lesende RPC- und ROA-Aktionen koennen eine exakte Regel wie aliyun_api(ros:CreateStack) oder aliyun_api(cs:CreateCluster) anbieten. Wildcard-Allow-Regeln genehmigen nicht nur lesende Aufrufe weiterhin nicht.

Antwortformat

{
"outcome": "selected",
"optionId": "allow_once"
}

Oder zum Verweigern:

{
"outcome": "cancelled"
}
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