Pi 구성, 확장, 플랫폼 설정 및 API 참조.

JSON 이벤트 스트림 모드

pi --mode json "Your prompt"

모든 세션 이벤트를 JSON 라인에서 stdout 라인으로 출력합니다. pi를 다른 도구나 사용자 정의 UI에 통합하는 데 유용합니다.

이벤트 유형

와이어 이벤트는 JsonAgentSessionEvent를 사용합니다. 일치합니다 AgentSessionEvent 단, 스트리밍 메시지 업데이트에서는 누적 스냅샷이 생략됩니다.

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 변경될 때마다 보류 중인 전체 조정 및 후속 조치 대기열을 내보냅니다. compaction_startcompaction_end는 수동 및 자동 압축을 모두 다룹니다.

다른 기본 이벤트는 다음에서 제공됩니다. 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 };

메시지 유형

packages/ai/src/types.ts의 기본 메시지:

  • UserMessage (134행)
  • AssistantMessage (140행)
  • ToolResultMessage (152행)

packages/coding-agent/src/core/messages.ts의 확장 메시지:

  • BashExecutionMessage (29행)
  • CustomMessage (46행)
  • BranchSummaryMessage (55번째 줄)
  • CompactionSummaryMessage (62행)

출력 형식

각 줄은 JSON 객체입니다. 첫 번째 줄은 세션 헤더입니다.

{"type":"session","version":3,"id":"uuid","timestamp":"...","cwd":"/path"}

다음과 같은 이벤트가 발생합니다.

{"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 레코드는 델타 전용입니다. 누적 message 필드와 assistantMessageEvent.partial 스트림 크기를 선형으로 유지합니다. contentIndexdelta 사용 필요한 경우 실시간 텍스트, 사고 또는 도구 호출 인수를 조합합니다. message_end 포함 최종 권위 있는 메시지.

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