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

Chế độ dòng sự kiện JSON

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

Các sự kiện truyền qua wire sử dụng JsonAgentSessionEvent. Kiểu này khớp với AgentSessionEvent ngoại trừ việc các bản cập nhật tin nhắn dạng streaming bỏ qua snapshot 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 để ghép văn bản đang streaming, phần suy nghĩ hoặc đối số gọi công cụ nếu cần. message_end chứa thông điệp cuối cùng có tính quyết định.

Ví dụ

pi --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'