Cấu hình, tùy chỉnh, thiết lập nền tảng và tham chiếu API cho Pi.

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_startcompaction_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 contentIndexdelta để 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")'