JSON Mode Aliran Acara
pi --mode json "Your prompt"Menghasilkan semua acara sesi sebagai baris JSON ke stdout. Berguna untuk mengintegrasikan pi ke alat lain atau UI khusus.
Jenis Acara
Acara kawat menggunakan JsonAgentSessionEvent. Itu cocok
AgentSessionEvent
kecuali pembaruan pesan streaming menghilangkan snapshot kumulatif:
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 memancarkan kemudi penuh yang tertunda dan antrean tindak lanjut setiap kali berubah. compaction_start dan compaction_end mencakup pemadatan manual dan otomatis.
Acara dasar lainnya berasal
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 };Jenis Pesan
Pesan dasar dari packages/ai/src/types.ts:
UserMessage(baris 134)AssistantMessage(baris 140)ToolResultMessage(baris 152)
Pesan tambahan dari packages/coding-agent/src/core/messages.ts:
BashExecutionMessage(baris 29)CustomMessage(baris 46)BranchSummaryMessage(baris 55)CompactionSummaryMessage(baris 62)
Format Keluaran
Setiap baris adalah objek JSON. Baris pertama adalah header sesi:
{"type":"session","version":3,"id":"uuid","timestamp":"...","cwd":"/path"}Diikuti oleh peristiwa-peristiwa yang terjadi:
{"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 catatan hanya untuk delta. Mereka menghilangkan bidang kumulatif message dan
assistantMessageEvent.partial untuk menjaga ukuran aliran tetap linier. Gunakan contentIndex dan delta
untuk menyusun teks langsung, pemikiran, atau argumen panggilan alat jika diperlukan. message_end berisi
pesan otoritatif terakhir.
Contoh
pi --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'