Saltar al contenido principal

Referencia del protocolo

Este documento proporciona una referencia completa de los metodos y eventos de streaming del protocolo ACP (Agent Client Protocol) expuestos por el servidor iac-code.

Vision general del ciclo de vida

Una sesion ACP tipica sigue este flujo:

initialize → new_session → prompt (loop) → close_session
↑ │
└── load_session / resume ──────┘
  1. initialize — Handshake. Negocia la version del protocolo y descubre las capacidades del servidor.
  2. session/new — Crea una sesion nueva con un runtime de agente independiente.
  3. session/prompt — Envia entrada del usuario; recibe eventos en streaming hasta una respuesta final.
  4. session/close — Libera la sesion y sus recursos.

Las sesiones tambien pueden cargarse desde el historial (session/load) o reanudarse (session/resume) en lugar de crear nuevas.


Metodos

initialize

Handshake del protocolo. Debe ser la primera llamada en cada conexion.

Parametros de solicitud

CampoTipoRequeridoDescripcion
protocolVersionintegerSiVersion del protocolo solicitada (actualmente 1)
clientInfoobjectNoNombre y version del cliente
clientCapabilitiesobjectNoCapacidades que soporta el cliente

Campos de respuesta

CampoTipoDescripcion
protocolVersionintegerVersion del protocolo negociada
agentCapabilitiesobjectCapacidades del servidor (ver abajo)
agentInfoobjectNombre y version del servidor
authMethodsarrayMetodos de autenticacion disponibles (vacio si se usan credenciales integradas)

Capacidades del agente

CapacidadValorSignificado
loadSessiontrueSoporta restaurar sesiones desde el historial
promptCapabilities.embeddedContexttrueAcepta contenido de recursos incrustados en prompts
promptCapabilities.imagefalseEntrada de imagen no soportada (degrada a marcador de texto)
promptCapabilities.audiofalseEntrada de audio no soportada (degrada a marcador de texto)
sessionCapabilities.list{}Soporta listar sesiones
sessionCapabilities.close{}Soporta cerrar sesiones

session/new

Crea una nueva sesion con un runtime de agente independiente, registro de herramientas y contexto LLM.

Parametros de solicitud

CampoTipoRequeridoDescripcion
cwdstringSiRuta absoluta al directorio de trabajo
mcpServersobjectNoConfiguracion de servidores MCP (aceptada pero aun no funcional)

Campos de respuesta

CampoTipoDescripcion
sessionIdstringIdentificador unico de sesion para llamadas posteriores
modesobjectModos disponibles y modo actual
modelsobjectModelos disponibles y modelo actual
Nota

Cada sesion crea un AgentLoop independiente. Multiples sesiones pueden ejecutarse de forma concurrente, pero cada una consume una conexion LLM.


session/load

Carga una sesion previamente persistida desde disco, restaurando su historial de mensajes.

Parametros de solicitud

CampoTipoRequeridoDescripcion
cwdstringSiRuta del directorio de trabajo
sessionIdstringSiID de la sesion a cargar

Campos de respuesta

CampoTipoDescripcion
modelsobjectModelos disponibles y estado del modelo actual
modesobjectModos disponibles y estado del modo actual
Nota

Cargar una sesion lee el historial desde ~/.iac-code/sessions/, repara automaticamente los mensajes interrumpidos e inyecta el historial en un nuevo AgentLoop.


session/fork

Bifurca una sesion existente para crear una rama independiente con el mismo historial.

Parametros de solicitud

CampoTipoRequeridoDescripcion
cwdstringSiRuta del directorio de trabajo
sessionIdstringSiID de la sesion a bifurcar

Campos de respuesta

CampoTipoDescripcion
sessionIdstringNuevo ID de sesion para la rama bifurcada
modelsobjectModelos disponibles y estado del modelo actual
modesobjectModos disponibles y estado del modo actual

session/resume

Reanuda o reconecta a una sesion existente. Carga automaticamente el historial si es necesario.

Parametros de solicitud

CampoTipoRequeridoDescripcion
cwdstringSiRuta del directorio de trabajo
sessionIdstringSiID de la sesion a reanudar

Campos de respuesta

CampoTipoDescripcion
modelsobjectModelos disponibles y estado del modelo actual (opcional)
modesobjectModos disponibles y estado del modo actual (opcional)
Nota

A diferencia de session/new, la respuesta no incluye un campo sessionId ya que el cliente ya conoce el ID de sesion de la solicitud.


session/prompt

Envia entrada del usuario y activa respuestas de streaming del agente.

Parametros de solicitud

CampoTipoRequeridoDescripcion
sessionIdstringSiID de la sesion objetivo
promptarraySiArray de bloques de contenido (ver Tipos de bloque de contenido abajo)

Tipos de bloque de contenido

TipoDescripcion
TextContentBlockEntrada de texto plano del usuario
EmbeddedResourceContentBlockContenido de archivo incrustado en linea
ResourceContentBlockReferencia de enlace a recurso
ImageContentBlockImagen (degrada a marcador de texto [image: mime/type])
AudioContentBlockAudio (degrada a marcador de texto [audio: mime/type])

Campos de respuesta

CampoTipoDescripcion
stopReasonstringPor que se completo el prompt (ver Razones de parada)
usageobjectUso de tokens: inputTokens, outputTokens, totalTokens

Razones de parada

ValorSignificado
end_turnEl modelo completo normalmente
max_turn_requestsAlcanzo el limite maximo del bucle de llamadas a herramientas
max_tokensAlcanzo el limite de tokens de salida
cancelledEl cliente cancelo el prompt
refusalEl modelo se nego a responder
Nota

Durante la ejecucion, el servidor envia notificaciones session/update con eventos de streaming antes de devolver la respuesta final.


session/cancel

Cancela una tarea de prompt en ejecucion.

Parametros de solicitud

CampoTipoRequeridoDescripcion
sessionIdstringSiSesion con el prompt en ejecucion

Comportamiento

  • Deja de consumir eventos del flujo
  • Las herramientas en ejecucion no se terminan forzosamente, pero sus resultados se descartan
  • La llamada prompt pendiente devuelve con stopReason: "cancelled"

session/close

Cierra una sesion y libera sus recursos.

Parametros de solicitud

CampoTipoRequeridoDescripcion
sessionIdstringSiSesion a cerrar

Comportamiento

  • La sesion se elimina de la memoria
  • El historial persistido permanece en disco
  • Las llamadas prompt posteriores a esta sesion devuelven un error

sessions/list

Lista todas las sesiones persistidas para un directorio de trabajo dado.

Parametros de solicitud

CampoTipoRequeridoDescripcion
cwdstringSiDirectorio de trabajo para delimitar el listado

Campos de respuesta

CampoTipoDescripcion
sessionsarrayLista de objetos de sesion con sessionId y metadatos

config/set

Establece dinamicamente una opcion de configuracion para una sesion.

Parametros de solicitud

CampoTipoRequeridoDescripcion
sessionIdstringSiSesion objetivo
configIdstringSiClave de configuracion a establecer
valueanySiNuevo valor

Eventos de streaming

Durante la ejecucion de session/prompt, el servidor envia notificaciones session/update que contienen datos de eventos de streaming.

Formato del evento

Cada notificacion session/update lleva un objeto de actualizacion con un tipo especifico:

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

Mapeo de tipos de evento

Evento internoTipo de actualizacion ACPDescripcion
TextDeltaEventAgentMessageChunkSalida incremental de texto del agente
ThinkingDeltaEventAgentThoughtChunkContenido de razonamiento/pensamiento del modelo
ToolUseStartEventToolCallStartComienza la invocacion de herramienta
ToolResultEventToolCallProgressResultado de herramienta (completado o fallido)
CompactionEventAgentMessageChunkNotificacion de compactacion de contexto
ErrorEventAgentMessageChunkInformacion de error

Ciclo de vida de llamada a herramienta

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

Mapeo de tipo de herramienta

HerramientaACP ToolKind
read_file, list_filesread
glob, grepsearch
write_file, edit_fileedit
bash, agentexecute
web_fetchfetch
Otrasother

Solicitudes de permisos

Antes de ejecutar herramientas de alto riesgo, iac-code envia un callback request_permission al cliente.

Categorias de permisos de herramientas

CategoriaHerramientasAuto-permitidas
Solo lecturaread_file, list_files, glob, grep, web_fetchSi
Escriturawrite_file, edit_fileNo — requiere aprobacion
Ejecucionbash, agentNo — requiere aprobacion

Evento request_permission

El servidor envia un callback request_permission con:

CampoTipoDescripcion
optionsarrayOpciones de permisos disponibles
sessionIdstringSesion que solicita el permiso
toolCallobjectDetalles de la llamada a herramienta (titulo, tipo, entrada)

Opciones de permisos

ID de opcionSignificado
allow_oncePermitir esta invocacion especifica
allow_alwaysPermitir todas las futuras llamadas de esta herramienta en esta sesion
reject_onceDenegar esta invocacion especifica
reject_alwaysDenegar todas las futuras llamadas de esta herramienta en esta sesion

Formato de respuesta

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

O para denegar:

{
"outcome": "denied"
}
Respuesta del clienteComportamiento de la herramienta
AllowedOutcomeLa herramienta se ejecuta normalmente
DeniedOutcomeLa herramienta se omite; el modelo recibe un error "Permission denied."

Manejo de errores

Formato de RequestError

Los errores siguen el formato de error JSON-RPC 2.0:

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

Codigos de error comunes

CodigoNombreDescripcion
-32700Error de analisisJSON invalido
-32600Solicitud invalidaJSON-RPC malformado
-32601Metodo no encontradoMetodo desconocido
-32602Parametros invalidosParametros faltantes o invalidos (por ejemplo, ID de sesion desconocido)
-32603Error internoFallo del lado del servidor