Configuration, personnalisation, paramètres de plateforme et références API pour Pi.

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