Aller au contenu principal

Référence du protocole

Ce document fournit une référence complète des méthodes ACP (Agent Client Protocol) et des événements de streaming exposés par le serveur iac-code.

Aperçu du cycle de vie

Une session ACP typique suit ce flux :

initialize → new_session → prompt (loop) → close_session
↑ │
└── load_session / resume ──────┘
  1. initialize -- Poignée de main. Négocier la version du protocole et découvrir les capacités du serveur.
  2. session/new -- Créer une nouvelle session avec un runtime d'agent indépendant.
  3. session/prompt -- Envoyer l'entrée utilisateur ; recevoir des événements en streaming jusqu'à une réponse finale.
  4. session/close -- Libérer la session et ses ressources.

Les sessions peuvent également être chargées depuis l'historique (session/load) ou reprises (session/resume) au lieu d'en créer de nouvelles.


Méthodes

initialize

Poignée de main du protocole. Doit être le premier appel sur chaque connexion.

Paramètres de requête

ChampTypeRequisDescription
protocolVersionintegerOuiVersion du protocole demandée (actuellement 1)
clientInfoobjectNonNom et version du client
clientCapabilitiesobjectNonCapacités prises en charge par le client

Champs de réponse

ChampTypeDescription
protocolVersionintegerVersion du protocole négociée
agentCapabilitiesobjectCapacités du serveur (voir ci-dessous)
agentInfoobjectNom et version du serveur
authMethodsarrayMéthodes d'authentification disponibles (vide si utilisation des identifiants intégrés)

Capacités de l'agent

CapacitéValeurSignification
loadSessiontruePrend en charge la restauration de sessions depuis l'historique
promptCapabilities.embeddedContexttrueAccepte le contenu de ressources embarquées dans les requêtes
promptCapabilities.imagefalseEntrée image non prise en charge (dégradée en marqueur texte)
promptCapabilities.audiofalseEntrée audio non prise en charge (dégradée en marqueur texte)
sessionCapabilities.list{}Prend en charge le listage des sessions
sessionCapabilities.close{}Prend en charge la fermeture des sessions

session/new

Créer une nouvelle session avec un runtime d'agent indépendant, un registre d'outils et un contexte LLM.

Paramètres de requête

ChampTypeRequisDescription
cwdstringOuiChemin absolu vers le répertoire de travail
mcpServersobjectNonConfiguration du serveur MCP (acceptée mais pas encore fonctionnelle)

Champs de réponse

ChampTypeDescription
sessionIdstringIdentifiant de session unique pour les appels suivants
modesobjectModes disponibles et mode actuel
modelsobjectModèles disponibles et modèle actuel
Remarque

Chaque session crée un AgentLoop indépendant. Plusieurs sessions peuvent s'exécuter simultanément mais chacune consomme une connexion LLM.


session/load

Charger une session précédemment persistée depuis le disque, en restaurant son historique de messages.

Paramètres de requête

ChampTypeRequisDescription
cwdstringOuiChemin du répertoire de travail
sessionIdstringOuiIdentifiant de la session à charger

Champs de réponse

ChampTypeDescription
modelsobjectModèles disponibles et état du modèle actuel
modesobjectModes disponibles et état du mode actuel
Remarque

Le chargement d'une session lit l'historique depuis ~/.iac-code/sessions/, répare automatiquement les messages interrompus et injecte l'historique dans un nouvel AgentLoop.


session/fork

Dupliquer une session existante pour créer une branche indépendante avec le même historique.

Paramètres de requête

ChampTypeRequisDescription
cwdstringOuiChemin du répertoire de travail
sessionIdstringOuiIdentifiant de la session à dupliquer

Champs de réponse

ChampTypeDescription
sessionIdstringNouvel identifiant de session pour la branche dupliquée
modelsobjectModèles disponibles et état du modèle actuel
modesobjectModes disponibles et état du mode actuel

session/resume

Reprendre ou se reconnecter à une session existante. Charge automatiquement l'historique si nécessaire.

Paramètres de requête

ChampTypeRequisDescription
cwdstringOuiChemin du répertoire de travail
sessionIdstringOuiIdentifiant de la session à reprendre

Champs de réponse

ChampTypeDescription
modelsobjectModèles disponibles et état du modèle actuel (optionnel)
modesobjectModes disponibles et état du mode actuel (optionnel)
Remarque

Contrairement à session/new, la réponse n'inclut pas de champ sessionId puisque le client connaît déjà l'identifiant de session depuis la requête.


session/prompt

Envoyer l'entrée utilisateur et déclencher les réponses de l'agent en streaming.

Paramètres de requête

ChampTypeRequisDescription
sessionIdstringOuiIdentifiant de la session cible
promptarrayOuiTableau de blocs de contenu (voir Types de blocs de contenu ci-dessous)

Types de blocs de contenu

TypeDescription
TextContentBlockEntrée texte brut de l'utilisateur
EmbeddedResourceContentBlockContenu de fichier embarqué en ligne
ResourceContentBlockRéférence de lien vers une ressource
ImageContentBlockImage (dégradée en marqueur texte [image: mime/type])
AudioContentBlockAudio (dégradé en marqueur texte [audio: mime/type])

Champs de réponse

ChampTypeDescription
stopReasonstringRaison de la fin de la requête (voir Raisons d'arrêt)
usageobjectUtilisation des tokens : inputTokens, outputTokens, totalTokens

Raisons d'arrêt

ValeurSignification
end_turnLe modèle a terminé normalement
max_turn_requestsLimite maximale de la boucle d'appels d'outils atteinte
max_tokensLimite de tokens en sortie atteinte
cancelledLe client a annulé la requête
refusalLe modèle a refusé de répondre
Remarque

Pendant l'exécution, le serveur envoie des notifications session/update avec des événements en streaming avant de retourner la réponse finale.


session/cancel

Annuler une tâche de requête en cours d'exécution.

Paramètres de requête

ChampTypeRequisDescription
sessionIdstringOuiSession avec la requête en cours d'exécution

Comportement

  • Arrête la consommation des événements du flux
  • Les outils en cours d'exécution ne sont pas terminés de force, mais les résultats sont ignorés
  • L'appel prompt en attente retourne avec stopReason: "cancelled"

session/close

Fermer une session et libérer ses ressources.

Paramètres de requête

ChampTypeRequisDescription
sessionIdstringOuiSession à fermer

Comportement

  • La session est supprimée de la mémoire
  • L'historique persisté reste sur le disque
  • Les appels prompt suivants à cette session retournent une erreur

sessions/list

Lister toutes les sessions persistées pour un répertoire de travail donné.

Paramètres de requête

ChampTypeRequisDescription
cwdstringOuiRépertoire de travail pour limiter la portée du listage

Champs de réponse

ChampTypeDescription
sessionsarrayListe d'objets session avec sessionId et métadonnées

config/set

Définir dynamiquement une option de configuration pour une session.

Paramètres de requête

ChampTypeRequisDescription
sessionIdstringOuiSession cible
configIdstringOuiClé de configuration à définir
valueanyOuiNouvelle valeur

Événements de streaming

Pendant l'exécution de session/prompt, le serveur envoie des notifications session/update contenant des données d'événements en streaming.

Format des événements

Chaque notification session/update contient un objet de mise à jour avec un type spécifique :

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

Correspondance des types d'événements

Événement interneType de mise à jour ACPDescription
TextDeltaEventAgentMessageChunkSortie texte incrémentale de l'agent
ThinkingDeltaEventAgentThoughtChunkContenu de raisonnement/réflexion du modèle
ToolUseStartEventToolCallStartDébut de l'invocation d'un outil
ToolResultEventToolCallProgressRésultat de l'outil (terminé ou échoué)
CompactionEventAgentMessageChunkNotification de compaction du contexte
ErrorEventAgentMessageChunkInformations d'erreur

Cycle de vie des appels d'outils

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

Correspondance des types d'outils

OutilToolKind ACP
read_file, list_filesread
glob, grepsearch
write_file, edit_fileedit
bash, agentexecute
web_fetchfetch
Autresother

Demandes de permission

Avant d'exécuter des outils à haut risque, iac-code envoie un callback request_permission au client.

Catégories de permissions des outils

CatégorieOutilsAuto-approuvé
Lecture seuleread_file, list_files, glob, grep, web_fetchOui
Écriturewrite_file, edit_fileNon -- nécessite une approbation
Exécutionbash, agentNon -- nécessite une approbation

Événement request_permission

Le serveur envoie un callback request_permission avec :

ChampTypeDescription
optionsarrayChoix de permission disponibles
sessionIdstringSession demandant la permission
toolCallobjectDétails de l'appel d'outil (titre, type, entrée)

Options de permission

Identifiant d'optionSignification
allow_onceAutoriser cette invocation spécifique
allow_alwaysAutoriser tous les appels futurs de cet outil dans cette session
reject_onceRefuser cette invocation spécifique
reject_alwaysRefuser tous les appels futurs de cet outil dans cette session

Format de réponse

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

Ou pour refuser :

{
"outcome": "denied"
}
Réponse du clientComportement de l'outil
AllowedOutcomeL'outil s'exécute normalement
DeniedOutcomeL'outil est ignoré ; le modèle reçoit une erreur "Permission denied."

Gestion des erreurs

Format RequestError

Les erreurs suivent le format d'erreur JSON-RPC 2.0 :

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

Codes d'erreur courants

CodeNomDescription
-32700Erreur d'analyseJSON invalide
-32600Requête invalideJSON-RPC malformé
-32601Méthode introuvableMéthode inconnue
-32602Paramètres invalidesParamètres manquants ou invalides (ex. : identifiant de session inconnu)
-32603Erreur interneDéfaillance côté serveur