( event: LocalQueryEvent, deps: ApplyLocalQueryEventDeps, )
| 76 | } |
| 77 | |
| 78 | export function applyLocalQueryEvent( |
| 79 | event: LocalQueryEvent, |
| 80 | deps: ApplyLocalQueryEventDeps, |
| 81 | ): void { |
| 82 | const { |
| 83 | setMessages, |
| 84 | setConversationId, |
| 85 | createConversationId = randomUUID, |
| 86 | setResponseLength, |
| 87 | setStreamMode, |
| 88 | setStreamingToolUses, |
| 89 | setStreamingThinking, |
| 90 | onStreamingText, |
| 91 | removeTranscriptMessage, |
| 92 | onApiMetrics, |
| 93 | setContextBlocked, |
| 94 | onCompactBoundary, |
| 95 | isFullscreen, |
| 96 | streamAdapter = defaultStreamAdapter, |
| 97 | } = deps |
| 98 | |
| 99 | streamAdapter.handleMessageFromStream( |
| 100 | event, |
| 101 | newMessage => { |
| 102 | if (streamAdapter.isCompactBoundaryMessage(newMessage)) { |
| 103 | onCompactBoundary?.() |
| 104 | if (isFullscreen) { |
| 105 | setMessages(old => [ |
| 106 | ...streamAdapter.getMessagesAfterCompactBoundary(old, { |
| 107 | includeSnipped: true, |
| 108 | }), |
| 109 | newMessage, |
| 110 | ]) |
| 111 | } else { |
| 112 | setMessages(() => [newMessage]) |
| 113 | } |
| 114 | setConversationId(createConversationId()) |
| 115 | setContextBlocked?.(false) |
| 116 | } else if ( |
| 117 | newMessage.type === 'progress' && |
| 118 | isEphemeralToolProgress(newMessage.data.type) |
| 119 | ) { |
| 120 | setMessages(oldMessages => { |
| 121 | const last = oldMessages.at(-1) |
| 122 | if ( |
| 123 | last?.type === 'progress' && |
| 124 | last.parentToolUseID === newMessage.parentToolUseID && |
| 125 | last.data.type === newMessage.data.type |
| 126 | ) { |
| 127 | const copy = oldMessages.slice() |
| 128 | copy[copy.length - 1] = newMessage |
| 129 | return copy |
| 130 | } |
| 131 | return [...oldMessages, newMessage] |
| 132 | }) |
| 133 | } else { |
| 134 | setMessages(oldMessages => [...oldMessages, newMessage]) |
| 135 | } |
no test coverage detected