JSON Chế độ phát trực tiếp sự kiện
pi --mode json "Your prompt"Xuất tất cả các sự kiện phiên dưới dạng dòng JSON thành stdout. Hữu ích cho việc tích hợp pi vào các công cụ khác hoặc giao diện người dùng tùy chỉnh.
Các loại sự kiện
Sự kiện dây sử dụng JsonAgentSessionEvent. Nó phù hợp
AgentSessionEvent
ngoại trừ việc cập nhật tin nhắn trực tuyến bỏ qua ảnh chụp nhanh tích lũy:
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 phát ra toàn bộ hàng đợi chỉ đạo và theo dõi đang chờ xử lý bất cứ khi nào chúng thay đổi. compaction_start và compaction_end bao gồm cả việc nén thủ công và tự động.
Các sự kiện cơ bản khác đến từ
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 };Các loại tin nhắn
Tin nhắn cơ bản từ packages/ai/src/types.ts:
UserMessage(dòng 134)AssistantMessage(dòng 140)ToolResultMessage(dòng 152)
Tin nhắn mở rộng từ packages/coding-agent/src/core/messages.ts:
BashExecutionMessage(dòng 29)CustomMessage(dòng 46)BranchSummaryMessage(dòng 55)CompactionSummaryMessage(dòng 62)
Định dạng đầu ra
Mỗi dòng là một đối tượng JSON. Dòng đầu tiên là tiêu đề phiên:
{"type":"session","version":3,"id":"uuid","timestamp":"...","cwd":"/path"}Tiếp theo là các sự kiện khi chúng xảy ra:
{"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 bản ghi chỉ ở dạng delta. Họ bỏ qua cả trường message tích lũy và
assistantMessageEvent.partial để giữ kích thước luồng tuyến tính. Sử dụng contentIndex và delta
để tập hợp các đối số văn bản trực tiếp, suy nghĩ hoặc lệnh gọi công cụ nếu cần. message_end chứa
thông điệp có thẩm quyền cuối cùng.
Ví dụ
pi --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'