feat: release 2.2.0 with PC-only tests and execution reliability fixes
Unify task scheduling and queue state, fix Android input and observation recovery, preserve screenshot paths, and match final review criteria accurately. Add collapsible copyable results and publish the complete 2.1.0 upgrade notes. Validation: 3189 backend tests, 326 frontend tests, 24 client tests, production build and quality gates.
This commit is contained in:
1 parent
fac4ccb760
commit
be6e8c2abd
79 files changed
+2263
-277
No files matched your search
@@ -44,6 +44,17 @@ def _escape_for_adb_text(s: str) -> str:
|
||||
)
|
||||
|
||||
|
||||
async def clear_focused_input(ui_client: Any) -> bool:
|
||||
"""Clear the whole editable value once; a lost reply must not replay writes."""
|
||||
clear = getattr(ui_client, "clear_text", None)
|
||||
if not callable(clear):
|
||||
return False
|
||||
result = await asyncio.to_thread(clear)
|
||||
if asyncio.iscoroutine(result):
|
||||
result = await result
|
||||
return result is True
|
||||
|
||||
|
||||
class AndroidInputIME:
|
||||
"""Handles text input, unicode typing, and key combination injection."""
|
||||
|
||||
@@ -55,15 +66,11 @@ class AndroidInputIME:
|
||||
"""Types text using adb input text, UIAutomator, or broadcast IME."""
|
||||
try:
|
||||
if clear_existing:
|
||||
# Safe & robust clearing: Move to End -> Shift+Home selection -> Delete -> Fallback backspaces
|
||||
clear_cmd = (
|
||||
"input keyevent 123 && "
|
||||
"input keyevent --meta 1 122 && "
|
||||
"input keyevent 67 && "
|
||||
"input keyevent 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67"
|
||||
)
|
||||
await asyncio.to_thread(self.device.shell, clear_cmd)
|
||||
else:
|
||||
if not await clear_focused_input(self.ui_client):
|
||||
return False
|
||||
if not text:
|
||||
return True
|
||||
if not clear_existing:
|
||||
# Append mode: move cursor to the end of existing text
|
||||
await asyncio.to_thread(
|
||||
self.device.shell,
|
||||
|
||||
Reference in new issue
Block a user