JSON Mode flux d'événements
pi --mode json "Your prompt"Affiche tous les événements de session sous forme de lignes JSON à stdout. Utile pour intégrer pi dans d'autres outils ou interfaces utilisateur personnalisées.
Types d'événements
Les événements filaires utilisent JsonAgentSessionEvent. Cela correspond
AgentSessionEvent
sauf que les mises à jour des messages en streaming omettent les instantanés cumulés:
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 émet l'intégralité des files d'attente de pilotage et de suivi en attente à chaque fois qu'elles changent. compaction_start et compaction_end couvrent à la fois le compactage manuel et automatique.
D'autres événements de base proviennent 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 };Types de messages
Messages de base de packages/ai/src/types.ts:
UserMessage(ligne 134)AssistantMessage(ligne 140)ToolResultMessage(ligne 152)
Messages étendus de packages/coding-agent/src/core/messages.ts:
BashExecutionMessage(ligne 29)CustomMessage(ligne 46)BranchSummaryMessage(ligne 55)CompactionSummaryMessage(ligne 62)
Format de sortie
Chaque ligne est un objet JSON. La première ligne est l'en-tête de la session:
{"type":"session","version":3,"id":"uuid","timestamp":"...","cwd":"/path"}Suivi des événements au fur et à mesure qu'ils se produisent:
{"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":[...]}Les enregistrements message_update sont uniquement delta. Ils omettent à la fois le champ cumulatif message et
assistantMessageEvent.partial pour conserver la taille du flux linéaire. Utilisez contentIndex et delta
pour assembler du texte en direct, des réflexions ou des arguments d'appel d'outils si nécessaire. message_end contient
le message final faisant autorité.
Exemple
pi --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'