From 61fcecd02140f7456505087f40774844735a32b3 Mon Sep 17 00:00:00 2001 From: Sanju Sivalingam Date: Tue, 17 Feb 2026 18:17:48 +0530 Subject: [PATCH] fix(android): add screenHash to screen responses, handle goal_failed Co-Authored-By: Claude Opus 4.6 --- .../com/thisux/droidclaw/connection/CommandRouter.kt | 10 ++++++++++ .../main/java/com/thisux/droidclaw/model/Protocol.kt | 1 + 2 files changed, 11 insertions(+) diff --git a/android/app/src/main/java/com/thisux/droidclaw/connection/CommandRouter.kt b/android/app/src/main/java/com/thisux/droidclaw/connection/CommandRouter.kt index b19bc4a..80b855c 100644 --- a/android/app/src/main/java/com/thisux/droidclaw/connection/CommandRouter.kt +++ b/android/app/src/main/java/com/thisux/droidclaw/connection/CommandRouter.kt @@ -4,6 +4,7 @@ import android.util.Base64 import android.util.Log import com.thisux.droidclaw.accessibility.DroidClawAccessibilityService import com.thisux.droidclaw.accessibility.GestureExecutor +import com.thisux.droidclaw.accessibility.ScreenTreeBuilder import com.thisux.droidclaw.capture.ScreenCaptureManager import com.thisux.droidclaw.model.AgentStep import com.thisux.droidclaw.model.GoalStatus @@ -65,6 +66,10 @@ class CommandRouter( currentGoalStatus.value = if (msg.success == true) GoalStatus.Completed else GoalStatus.Failed Log.i(TAG, "Goal completed: success=${msg.success}, steps=${msg.stepsUsed}") } + "goal_failed" -> { + currentGoalStatus.value = GoalStatus.Failed + Log.i(TAG, "Goal failed: ${msg.message}") + } else -> Log.w(TAG, "Unknown message type: ${msg.type}") } @@ -86,9 +91,14 @@ class CommandRouter( } } + val screenHash = if (elements.isNotEmpty()) { + ScreenTreeBuilder.computeScreenHash(elements) + } else null + val response = ScreenResponse( requestId = requestId, elements = elements, + screenHash = screenHash, screenshot = screenshot, packageName = packageName ) diff --git a/android/app/src/main/java/com/thisux/droidclaw/model/Protocol.kt b/android/app/src/main/java/com/thisux/droidclaw/model/Protocol.kt index 8d1d4f8..53a2422 100644 --- a/android/app/src/main/java/com/thisux/droidclaw/model/Protocol.kt +++ b/android/app/src/main/java/com/thisux/droidclaw/model/Protocol.kt @@ -23,6 +23,7 @@ data class ScreenResponse( val type: String = "screen", val requestId: String, val elements: List, + val screenHash: String? = null, val screenshot: String? = null, val packageName: String? = null )