* Handle messages from WebSocket
(
message:
| SDKMessage
| SDKControlRequest
| SDKControlResponse
| SDKControlCancelRequest,
)
| 144 | * Handle messages from WebSocket |
| 145 | */ |
| 146 | private handleMessage( |
| 147 | message: |
| 148 | | SDKMessage |
| 149 | | SDKControlRequest |
| 150 | | SDKControlResponse |
| 151 | | SDKControlCancelRequest, |
| 152 | ): void { |
| 153 | // Handle control requests (permission prompts from CCR) |
| 154 | if (message.type === 'control_request') { |
| 155 | this.handleControlRequest(message) |
| 156 | return |
| 157 | } |
| 158 | |
| 159 | // Handle control cancel requests (server cancelling a pending permission prompt) |
| 160 | if (message.type === 'control_cancel_request') { |
| 161 | const { request_id } = message |
| 162 | const pendingRequest = this.pendingPermissionRequests.get(request_id) |
| 163 | logForDebugging( |
| 164 | `[RemoteSessionManager] Permission request cancelled: ${request_id}`, |
| 165 | ) |
| 166 | this.pendingPermissionRequests.delete(request_id) |
| 167 | this.callbacks.onPermissionCancelled?.( |
| 168 | request_id, |
| 169 | pendingRequest?.tool_use_id, |
| 170 | ) |
| 171 | return |
| 172 | } |
| 173 | |
| 174 | // Handle control responses (acknowledgments) |
| 175 | if (message.type === 'control_response') { |
| 176 | logForDebugging('[RemoteSessionManager] Received control response') |
| 177 | return |
| 178 | } |
| 179 | |
| 180 | // Forward SDK messages to callback (type guard ensures proper narrowing) |
| 181 | if (isSDKMessage(message)) { |
| 182 | this.callbacks.onMessage(message) |
| 183 | } |
| 184 | } |
| 185 | |
| 186 | /** |
| 187 | * Handle control requests from CCR (e.g., permission requests) |
no test coverage detected