Configuração, personalização, ajustes de plataforma e referências de API para Pi.

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")'