(message: WorkspaceChatMessage)
| 136 | }; |
| 137 | |
| 138 | const handleSessionMessage = (message: WorkspaceChatMessage) => { |
| 139 | if (isReplaying && isReplayBufferedSessionMessage(message)) { |
| 140 | if (!isReplayMessage(message)) { |
| 141 | // Preserve live ordering during replay buffering. Init events need the same isolation as |
| 142 | // stream events so reconnect replay cannot blank the row or drop lines due to reordering. |
| 143 | bufferedLiveSessionMessages.push(message); |
| 144 | return; |
| 145 | } |
| 146 | |
| 147 | // Track replayed deltas/init events so buffered live events from the same window do not |
| 148 | // double-apply after `caught-up`. |
| 149 | if (isReplayBufferedDeltaMessage(message)) { |
| 150 | noteReplayedDelta(message); |
| 151 | } else if (isReplayBufferedInitMessage(message)) { |
| 152 | noteReplayedInit(message); |
| 153 | } |
| 154 | } |
| 155 | |
| 156 | push(message); |
| 157 | }; |
| 158 | |
| 159 | const finishReplay = () => { |
| 160 | // Flush buffered live session messages after replay (`caught-up` already queued by replayHistory). |
nothing calls this directly
no test coverage detected