From cbd743a5c9e2777755c5bc126416b3168de07862 Mon Sep 17 00:00:00 2001 From: Hy4ri Date: Sat, 20 Jun 2026 12:50:09 +0300 Subject: [PATCH] feat(#125): pre-fill clarification input and route response via clarify.respond --- .../m57/hermescontrol/ui/chat/ChatScreen.kt | 2 +- .../hermescontrol/ui/chat/ChatViewModel.kt | 27 ++++++++++++++++++- .../ui/chat/ChatViewModelTest.kt | 16 +++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatScreen.kt index b98fff6c..becb2f82 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatScreen.kt @@ -790,7 +790,7 @@ private fun ClarifyDialog( onOptionSelected: (String) -> Unit, onDismiss: () -> Unit, ) { - var typedText by rememberSaveable { mutableStateOf("") } + var typedText by rememberSaveable(clarify) { mutableStateOf(clarify.text) } AlertDialog( onDismissRequest = onDismiss, diff --git a/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatViewModel.kt b/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatViewModel.kt index 73c4f5e5..aaecaf56 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatViewModel.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/chat/ChatViewModel.kt @@ -886,8 +886,33 @@ class ChatViewModel( } fun respondToClarify(option: String) { + val sessionId = _uiState.value.currentSessionId ?: return _uiState.update { it.copy(clarifyRequest = null) } - sendMessage(option) + + val userMessage = + ChatMessage( + role = MessageRole.USER, + content = option, + ) + + _uiState.update { state -> + state.copy( + messages = state.messages + userMessage, + isAgentTyping = true, + ) + } + + viewModelScope.launch(Dispatchers.IO) { + dao.upsert(userMessage.toEntity(sessionId)) + } + + viewModelScope.launch(Dispatchers.IO) { + wsClient.send( + method = WsMethods.CLARIFY_RESPOND, + params = mapOf("session_id" to sessionId, "response" to option), + onSent = { id -> trackRequest(id, WsMethods.CLARIFY_RESPOND) }, + ) + } } fun clearError() { diff --git a/app/src/test/java/com/m57/hermescontrol/ui/chat/ChatViewModelTest.kt b/app/src/test/java/com/m57/hermescontrol/ui/chat/ChatViewModelTest.kt index 75d1906d..3b2112e2 100644 --- a/app/src/test/java/com/m57/hermescontrol/ui/chat/ChatViewModelTest.kt +++ b/app/src/test/java/com/m57/hermescontrol/ui/chat/ChatViewModelTest.kt @@ -321,6 +321,14 @@ class ChatViewModelTest { assertEquals("Session created", state.messages[0].content) assertEquals("Yes", state.messages[1].content) assertEquals(MessageRole.USER, state.messages[1].role) + + verify { + HermesWsClient.send( + method = WsMethods.CLARIFY_RESPOND, + params = mapOf("session_id" to "session-123", "response" to "Yes"), + onSent = any(), + ) + } } @Test @@ -362,6 +370,14 @@ class ChatViewModelTest { assertEquals("Session created", state.messages[0].content) assertEquals("This is my custom response text", state.messages[1].content) assertEquals(MessageRole.USER, state.messages[1].role) + + verify { + HermesWsClient.send( + method = WsMethods.CLARIFY_RESPOND, + params = mapOf("session_id" to "session-123", "response" to "This is my custom response text"), + onSent = any(), + ) + } } @Test