JSON Modo de transmissão de eventos
pi --mode json "Your prompt"Gera todos os eventos de sessão como linhas JSON para stdout. Útil para integrar pi em outras ferramentas ou UIs personalizadas.
Tipos de eventos
Os eventos de transmissão usam JsonAgentSessionEvent. Combina
AgentSessionEvent
exceto que as atualizações de mensagens de streaming omitem os instantâneos cumulativos:
type WithoutPartial<T> = T extends { partial: unknown } ? Omit<T, "partial"> : T;
type JsonAgentSessionEvent =
| Exclude<AgentSessionEvent, { type: "message_update" }>
| {
type: "message_update";
assistantMessageEvent: WithoutPartial<AssistantMessageEvent>;
};queue_update emite todas as filas de orientação e acompanhamento pendentes sempre que elas mudam. compaction_start e compaction_end abrangem compactação manual e automática.
Outros eventos de base vêm de
AgentEvent:
type AgentEvent =
// Agent lifecycle
| { type: "agent_start" }
| { type: "agent_end"; messages: AgentMessage[] }
// Turn lifecycle
| { type: "turn_start" }
| { type: "turn_end"; message: AgentMessage; toolResults: ToolResultMessage[] }
// Message lifecycle
| { type: "message_start"; message: AgentMessage }
| { type: "message_update"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent }
| { type: "message_end"; message: AgentMessage }
// Tool execution
| { type: "tool_execution_start"; toolCallId: string; toolName: string; args: any }
| { type: "tool_execution_update"; toolCallId: string; toolName: string; args: any; partialResult: any }
| { type: "tool_execution_end"; toolCallId: string; toolName: string; result: any; isError: boolean };Tipos de mensagens
Mensagens básicas de packages/ai/src/types.ts:
UserMessage(linha 134)AssistantMessage(linha 140)ToolResultMessage(linha 152)
Mensagens estendidas de packages/coding-agent/src/core/messages.ts:
BashExecutionMessage(linha 29)CustomMessage(linha 46)BranchSummaryMessage(linha 55)CompactionSummaryMessage(linha 62)
Formato de saída
Cada linha é um objeto JSON. A primeira linha é o cabeçalho da sessão:
{"type":"session","version":3,"id":"uuid","timestamp":"...","cwd":"/path"}Seguido por eventos à medida que ocorrem:
{"type":"agent_start"}
{"type":"turn_start"}
{"type":"message_start","message":{"role":"assistant","content":[],...}}
{"type":"message_update","assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":"Hello"}}
{"type":"message_end","message":{...}}
{"type":"turn_end","message":{...},"toolResults":[]}
{"type":"agent_end","messages":[...]}message_update registros são apenas delta. Eles omitem o campo cumulativo message e
assistantMessageEvent.partial para manter o tamanho do fluxo linear. Use contentIndex e delta
para montar argumentos de texto ativo, pensamento ou chamada de ferramenta, se necessário. message_end contém
a mensagem oficial final.
Exemplo
pi --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'