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_start 및 compaction_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 스트림 크기를 선형으로 유지합니다. contentIndex 및 delta 사용
필요한 경우 실시간 텍스트, 사고 또는 도구 호출 인수를 조합합니다. message_end 포함
최종 권위 있는 메시지.
예
pi --mode json "List files" 2>/dev/null | jq -c 'select(.type == "message_end")'