Description
サブエージェント(子セッション)が実行されると、子セッションの全出力(テキスト、ツール呼び出し)が親セッションのメッセージ一覧にリアルタイムで表示されてしまう。セッションを切り替えて戻ると正しい折りたたみ表示(SubtaskPartView)に戻る。
Steps to Reproduce
- 親セッションでサブエージェント(Task ツール)を呼び出す操作を行う
- サブエージェントが実行を開始し、子セッションが作成される
- 親セッションの画面を表示したまま待つ
Expected Behavior
親セッションの画面にはコンパクトな進行カード(SubtaskPartView)のみが表示され、子セッションの個々のメッセージやパートは表示されない。
Actual Behavior
子セッションの message.updated、message.part.updated、message.removed の SSE イベントが親セッションのメッセージ一覧に反映され、子セッションの全出力がリアルタイムで表示される。セッションを切り替えて戻ると getMessages API で正しいメッセージリストが再取得され、表示が正常に戻る。
根本原因
useMessages.ts の handleMessageEvent コールバックが SSE イベントをセッション ID でフィルタリングしていない。OpenCode サーバーの SSE ストリームは全セッション(親+子)のイベントを送信するため、子セッションのイベントが親セッションのローカル状態に混入する。
Environment
- OS: macOS
- VS Code version: 1.96+
- OpenCodeGUI version: 0.4.0
Description
サブエージェント(子セッション)が実行されると、子セッションの全出力(テキスト、ツール呼び出し)が親セッションのメッセージ一覧にリアルタイムで表示されてしまう。セッションを切り替えて戻ると正しい折りたたみ表示(
SubtaskPartView)に戻る。Steps to Reproduce
Expected Behavior
親セッションの画面にはコンパクトな進行カード(
SubtaskPartView)のみが表示され、子セッションの個々のメッセージやパートは表示されない。Actual Behavior
子セッションの
message.updated、message.part.updated、message.removedの SSE イベントが親セッションのメッセージ一覧に反映され、子セッションの全出力がリアルタイムで表示される。セッションを切り替えて戻るとgetMessagesAPI で正しいメッセージリストが再取得され、表示が正常に戻る。根本原因
useMessages.tsのhandleMessageEventコールバックが SSE イベントをセッション ID でフィルタリングしていない。OpenCode サーバーの SSE ストリームは全セッション(親+子)のイベントを送信するため、子セッションのイベントが親セッションのローカル状態に混入する。Environment