Pular para o conteudo principal

Referencia do protocolo

Este documento fornece uma referencia completa dos metodos e eventos de streaming do ACP (Agent Client Protocol) expostos pelo servidor iac-code.

Visao geral do ciclo de vida

Uma sessao ACP tipica segue este fluxo:

initialize → new_session → prompt (loop) → close_session
↑ │
└── load_session / resume ──────┘
  1. initialize — Handshake. Negocia a versao do protocolo e descobre as capacidades do servidor.
  2. session/new — Cria uma nova sessao com um runtime de agente independente.
  3. session/prompt — Envia entrada do utilizador; recebe eventos de streaming ate uma resposta final.
  4. session/close — Libera a sessao e seus recursos.

As sessoes tambem podem ser carregadas do historico (session/load) ou retomadas (session/resume) em vez de criar novas.


Metodos

initialize

Handshake do protocolo. Deve ser a primeira chamada em cada conexao.

Parametros da requisicao

CampoTipoObrigatorioDescricao
protocolVersionintegerSimVersao do protocolo solicitada (atualmente 1)
clientInfoobjectNaoNome e versao do cliente
clientCapabilitiesobjectNaoCapacidades suportadas pelo cliente

Campos da resposta

CampoTipoDescricao
protocolVersionintegerVersao do protocolo negociada
agentCapabilitiesobjectCapacidades do servidor (veja abaixo)
agentInfoobjectNome e versao do servidor
authMethodsarrayMetodos de autenticacao disponiveis (vazio se usar credenciais integradas)

Capacidades do agente

CapacidadeValorSignificado
loadSessiontrueSuporta restauracao de sessoes a partir do historico
promptCapabilities.embeddedContexttrueAceita conteudo de recurso incorporado em prompts
promptCapabilities.imagefalseEntrada de imagem nao suportada (degrada para marcador de texto)
promptCapabilities.audiofalseEntrada de audio nao suportada (degrada para marcador de texto)
sessionCapabilities.list{}Suporta listagem de sessoes
sessionCapabilities.close{}Suporta fechamento de sessoes

session/new

Cria uma nova sessao com um runtime de agente independente, registro de ferramentas e contexto de LLM.

Parametros da requisicao

CampoTipoObrigatorioDescricao
cwdstringSimCaminho absoluto para o diretorio de trabalho
mcpServersobjectNaoConfiguracao de servidor MCP (aceito mas ainda nao funcional)

Campos da resposta

CampoTipoDescricao
sessionIdstringIdentificador unico da sessao para chamadas subsequentes
modesobjectModos disponiveis e modo atual
modelsobjectModelos disponiveis e modelo atual
Nota

Cada sessao cria um AgentLoop independente. Multiplas sessoes podem ser executadas simultaneamente, mas cada uma consome uma conexao LLM.


session/load

Carrega uma sessao previamente persistida do disco, restaurando seu historico de mensagens.

Parametros da requisicao

CampoTipoObrigatorioDescricao
cwdstringSimCaminho do diretorio de trabalho
sessionIdstringSimID da sessao a carregar

Campos da resposta

CampoTipoDescricao
modelsobjectModelos disponiveis e estado do modelo atual
modesobjectModos disponiveis e estado do modo atual
Nota

Carregar uma sessao le o historico de ~/.iac-code/sessions/, repara automaticamente mensagens interrompidas e injeta o historico num novo AgentLoop.


session/fork

Bifurca uma sessao existente para criar uma ramificacao independente com o mesmo historico.

Parametros da requisicao

CampoTipoObrigatorioDescricao
cwdstringSimCaminho do diretorio de trabalho
sessionIdstringSimID da sessao a bifurcar

Campos da resposta

CampoTipoDescricao
sessionIdstringNovo ID de sessao para a ramificacao bifurcada
modelsobjectModelos disponiveis e estado do modelo atual
modesobjectModos disponiveis e estado do modo atual

session/resume

Retoma ou reconecta a uma sessao existente. Carrega automaticamente o historico se necessario.

Parametros da requisicao

CampoTipoObrigatorioDescricao
cwdstringSimCaminho do diretorio de trabalho
sessionIdstringSimID da sessao a retomar

Campos da resposta

CampoTipoDescricao
modelsobjectModelos disponiveis e estado do modelo atual (opcional)
modesobjectModos disponiveis e estado do modo atual (opcional)
Nota

Ao contrario de session/new, a resposta nao inclui um campo sessionId pois o cliente ja conhece o ID da sessao a partir da requisicao.


session/prompt

Envia entrada do utilizador e aciona respostas do agente em streaming.

Parametros da requisicao

CampoTipoObrigatorioDescricao
sessionIdstringSimID da sessao alvo
promptarraySimArray de blocos de conteudo (veja Tipos de blocos de conteudo abaixo)

Tipos de blocos de conteudo

TipoDescricao
TextContentBlockEntrada de texto simples do utilizador
EmbeddedResourceContentBlockConteudo de arquivo incorporado inline
ResourceContentBlockReferencia de link de recurso
ImageContentBlockImagem (degrada para marcador de texto [image: mime/type])
AudioContentBlockAudio (degrada para marcador de texto [audio: mime/type])

Campos da resposta

CampoTipoDescricao
stopReasonstringPor que o prompt foi concluido (veja Motivos de parada)
usageobjectUso de tokens: inputTokens, outputTokens, totalTokens

Motivos de parada

ValorSignificado
end_turnModelo concluiu normalmente
max_turn_requestsAtingiu o limite maximo de loop de chamadas de ferramentas
max_tokensLimite de tokens de saida atingido
cancelledCliente cancelou o prompt
refusalModelo recusou responder
Nota

Durante a execucao, o servidor envia notificacoes session/update com eventos de streaming antes de retornar a resposta final.


session/cancel

Cancela uma tarefa de prompt em execucao.

Parametros da requisicao

CampoTipoObrigatorioDescricao
sessionIdstringSimSessao com o prompt em execucao

Comportamento

  • Para de consumir eventos do stream
  • Ferramentas em execucao nao sao terminadas forcosamente, mas os resultados sao descartados
  • A chamada prompt pendente retorna com stopReason: "cancelled"

session/close

Fecha uma sessao e libera seus recursos.

Parametros da requisicao

CampoTipoObrigatorioDescricao
sessionIdstringSimSessao a fechar

Comportamento

  • Sessao removida da memoria
  • O historico persistido permanece no disco
  • Chamadas prompt subsequentes a esta sessao retornam um erro

sessions/list

Lista todas as sessoes persistidas para um determinado diretorio de trabalho.

Parametros da requisicao

CampoTipoObrigatorioDescricao
cwdstringSimDiretorio de trabalho para delimitar a listagem

Campos da resposta

CampoTipoDescricao
sessionsarrayLista de objetos de sessao com sessionId e metadados

config/set

Define dinamicamente uma opcao de configuracao para uma sessao.

Parametros da requisicao

CampoTipoObrigatorioDescricao
sessionIdstringSimSessao alvo
configIdstringSimChave de configuracao a definir
valueanySimNovo valor

Eventos de streaming

Durante a execucao de session/prompt, o servidor envia notificacoes session/update contendo dados de eventos de streaming.

Formato do evento

Cada notificacao session/update carrega um objeto de atualizacao com um tipo especifico:

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

Mapeamento de tipos de evento

Evento internoTipo de atualizacao ACPDescricao
TextDeltaEventAgentMessageChunkSaida de texto incremental do agente
ThinkingDeltaEventAgentThoughtChunkConteudo de raciocinio/pensamento do modelo
ToolUseStartEventToolCallStartInicio da invocacao de ferramenta
ToolResultEventToolCallProgressResultado da ferramenta (concluido ou falhou)
CompactionEventAgentMessageChunkNotificacao de compactacao de contexto
ErrorEventAgentMessageChunkInformacao de erro

Ciclo de vida da chamada de ferramenta

ToolCallStart (status=in_progress)

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

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

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

Mapeamento de tipo de ferramenta

FerramentaACP ToolKind
read_file, list_filesread
glob, grepsearch
write_file, edit_fileedit
bash, agentexecute
web_fetchfetch
Outrosother

Solicitacoes de permissao

Antes de executar ferramentas de alto risco, o iac-code envia um callback request_permission ao cliente.

Categorias de permissao de ferramentas

CategoriaFerramentasAuto-aprovada
Somente leituraread_file, list_files, glob, grep, web_fetchSim
Escritawrite_file, edit_fileNao — requer aprovacao
Execucaobash, agentNao — requer aprovacao

Evento request_permission

O servidor envia um callback request_permission com:

CampoTipoDescricao
optionsarrayOpcoes de permissao disponiveis
sessionIdstringSessao solicitando permissao
toolCallobjectDetalhes da chamada de ferramenta (titulo, tipo, entrada)

Opcoes de permissao

ID da opcaoSignificado
allow_oncePermitir esta invocacao especifica
allow_alwaysPermitir todas as futuras chamadas desta ferramenta nesta sessao
reject_onceNegar esta invocacao especifica
reject_alwaysNegar todas as futuras chamadas desta ferramenta nesta sessao

Formato de resposta

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

Ou para negar:

{
"outcome": "denied"
}
Resposta do clienteComportamento da ferramenta
AllowedOutcomeFerramenta executa normalmente
DeniedOutcomeFerramenta ignorada; modelo recebe erro "Permission denied."

Tratamento de erros

Formato RequestError

Os erros seguem o formato de erro JSON-RPC 2.0:

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

Codigos de erro comuns

CodigoNomeDescricao
-32700Erro de analiseJSON invalido
-32600Requisicao invalidaJSON-RPC malformado
-32601Metodo nao encontradoMetodo desconhecido
-32602Parametros invalidosParametros ausentes ou invalidos (ex.: ID de sessao desconhecido)
-32603Erro internoFalha no lado do servidor