* Write a StdoutMessage as a client event via POST /sessions/{id}/worker/events. * These events are visible to frontend clients via the SSE stream. * Injects a UUID if missing to ensure server-side idempotency on retry. * * stream_event messages are held in a 100ms delay buffer and accum
(message: StdoutMessage)
| 733 | * ordering is preserved. |
| 734 | */ |
| 735 | async writeEvent(message: StdoutMessage): Promise<void> { |
| 736 | if (message.type === 'stream_event') { |
| 737 | this.streamEventBuffer.push(message) |
| 738 | if (!this.streamEventTimer) { |
| 739 | this.streamEventTimer = setTimeout( |
| 740 | () => void this.flushStreamEventBuffer(), |
| 741 | STREAM_EVENT_FLUSH_INTERVAL_MS, |
| 742 | ) |
| 743 | } |
| 744 | return |
| 745 | } |
| 746 | await this.flushStreamEventBuffer() |
| 747 | if (message.type === 'assistant') { |
| 748 | clearStreamAccumulatorForMessage(this.streamTextAccumulator, message) |
| 749 | } |
| 750 | await this.eventUploader.enqueue(this.toClientEvent(message)) |
| 751 | } |
| 752 | |
| 753 | /** Wrap a StdoutMessage as a ClientEvent, injecting a UUID if missing. */ |
| 754 | private toClientEvent(message: StdoutMessage): ClientEvent { |
no test coverage detected