agent.message イベントの前にアシスタント出力のチャンクを受信できます。Session の作成時に有効化します。
エンドポイント
パスは変わりません。| API | 増分の動作 |
|---|---|
GET /api/v1/cloud/sessions/{session_id}/events/stream | ライブ Session SSE ストリーム |
GET /api/v1/cloud/sessions/{session_id}/threads/{thread_id}/stream | thread に限定したライブ SSE ストリーム |
GET /api/v1/cloud/sessions/{session_id}/events | 過去の Session イベントのリプレイ |
GET /api/v1/cloud/sessions/{session_id}/threads/{thread_id}/events | thread に限定した過去イベントのリプレイ |
incremental_streaming_enabled が false または省略されている場合、これらの API は元の動作を維持し、増分イベントを非表示にします。
イベントモデル
公開イベントは qodercli/Anthropic の raw stream イベントと整合します。CAW はmessage_start や content_block_start などの raw stream イベントタイプを発行します。CAS は type に agent. プレフィックスを付け、id、session_id、session_thread_id、turn_id、message_id、parent_tool_use_id、processed_at などの CAS メタデータを追加して、それらを公開します。
トップレベルの増分イベントタイプ:
agent.content_block_delta.delta.type 内にネストされます。これらはトップレベルのイベントタイプではありません。
現在の実装では、agent.content_block_start.content_block.type は次のいずれかになります。
content_block.type | 意味 |
|---|---|
thinking | 初期状態で空の thinking を持つ thinking ブロック |
text | 初期状態で空の text を持つ text ブロック |
tool_use | id、name、初期状態で空の input を持つ tool-use ブロック |
delta.type | 意味 |
|---|---|
text_delta | テキスト出力のチャンク |
thinking_delta | モデル/プロバイダーが出力する場合の thinking チャンク |
signature_delta | 利用可能な場合の thinking ブロックの署名チャンク |
input_json_delta | ツール入力 JSON のチャンク。製品レベルの tool_input_delta 概念はこのワイヤー形を partial_json とともに使用します |
tool_output_delta | 将来のツール出力ストリーミング向けに予約されています。現在の実装ではこの delta を発行しません。ツール結果は引き続き完全な agent.tool_result イベントとして返されます |
agent.message は増分シーケンスの後に引き続き返され、正規の最終結果のままです。同じ text ブロックでは、text_delta.text を順に連結すると、最終的な agent.message.content[index].text と一致するはずです。プロバイダーがストリームチャンクから最後のサフィックスを省略する場合、CAW は agent.content_block_stop の前に、残りのサフィックスを最終的な text_delta として発行します。
クイック検証
前提条件:QODER_PATに有効な PATAGENT_IDに既存の Agent IDENVIRONMENT_IDに既存の Environment ID- ローカルに
jqがインストールされていること
無効化した場合の対照確認
incremental_streaming_enabled を付けずに、または false に設定して、別の Session を作成します。レスポンスには次が含まれるはずです。
user.message を送信した後、ストリームと履歴には agent.message や session.status_idle などの完全イベントが含まれますが、上記の増分イベントタイプは含まれません。
パーサーのチェックリスト
- SSE の
event:と JSON のdata.typeを公開イベントタイプとして扱う。 delta.typeがtext_deltaのイベントについて、agent.content_block_delta.delta.textを連結してテキストを再構築する。delta.typeがthinking_deltaのイベントについて、agent.content_block_delta.delta.thinkingを連結して thinking を再構築する。完全な互換用agent.thinkingイベントが後で届くこともある。- ツール入力の増分については、
delta.type == "input_json_delta"を確認してdelta.partial_jsonを連結する。トップレベルのtool_input_deltaイベントは期待しないこと。 tool_output_deltaはまだ発行されない。ツール実行結果は完全なagent.tool_resultイベントとして返される。- 複数の content block を区別するために
indexを追跡する。 - agent 生成イベントでは
processed_atを任意として扱う。 - 同じ接続で複数ターンをサポートするクライアントの場合、
session.status_idleの後もリッスンを続ける。 - ネットワーク切断後は
Last-Event-IDを付けて再接続する。