minitap-mobile-use 2.5.1__tar.gz → 2.5.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of minitap-mobile-use might be problematic. Click here for more details.

Files changed (100) hide show
  1. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/PKG-INFO +1 -1
  2. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/clients/ios_client.py +1 -1
  3. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/agent.py +20 -1
  4. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/examples/platform_minimal_example.py +1 -0
  5. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/servers/device_screen_api.py +25 -4
  6. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/servers/start_servers.py +2 -2
  7. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/pyproject.toml +1 -1
  8. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/LICENSE +0 -0
  9. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/README.md +0 -0
  10. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/__init__.py +0 -0
  11. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/contextor/contextor.py +0 -0
  12. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/cortex/cortex.md +0 -0
  13. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/cortex/cortex.py +0 -0
  14. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/cortex/types.py +0 -0
  15. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/executor/executor.md +0 -0
  16. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/executor/executor.py +0 -0
  17. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/executor/tool_node.py +0 -0
  18. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/executor/utils.py +0 -0
  19. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/hopper/hopper.md +0 -0
  20. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/hopper/hopper.py +0 -0
  21. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/orchestrator/human.md +0 -0
  22. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/orchestrator/orchestrator.md +0 -0
  23. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/orchestrator/orchestrator.py +0 -0
  24. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/orchestrator/types.py +0 -0
  25. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/outputter/human.md +0 -0
  26. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/outputter/outputter.py +0 -0
  27. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/outputter/test_outputter.py +0 -0
  28. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/planner/human.md +0 -0
  29. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/planner/planner.md +0 -0
  30. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/planner/planner.py +0 -0
  31. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/planner/types.py +0 -0
  32. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/planner/utils.py +0 -0
  33. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/agents/summarizer/summarizer.py +0 -0
  34. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/clients/device_hardware_client.py +0 -0
  35. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/clients/screen_api_client.py +0 -0
  36. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/config.py +0 -0
  37. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/constants.py +0 -0
  38. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/context.py +0 -0
  39. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/controllers/__init__.py +0 -0
  40. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/controllers/mobile_command_controller.py +0 -0
  41. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/controllers/platform_specific_commands_controller.py +0 -0
  42. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/graph/graph.py +0 -0
  43. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/graph/state.py +0 -0
  44. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/main.py +0 -0
  45. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/__init__.py +0 -0
  46. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/builders/__init__.py +0 -0
  47. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/builders/agent_config_builder.py +0 -0
  48. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/builders/index.py +0 -0
  49. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/builders/task_request_builder.py +0 -0
  50. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/constants.py +0 -0
  51. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/examples/README.md +0 -0
  52. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/examples/__init__.py +0 -0
  53. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/examples/platform_manual_task_example.py +0 -0
  54. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/examples/simple_photo_organizer.py +0 -0
  55. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/examples/smart_notification_assistant.py +0 -0
  56. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/services/platform.py +0 -0
  57. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/types/__init__.py +0 -0
  58. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/types/agent.py +0 -0
  59. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/types/exceptions.py +0 -0
  60. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/types/platform.py +0 -0
  61. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/types/task.py +0 -0
  62. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/sdk/utils.py +0 -0
  63. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/servers/config.py +0 -0
  64. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/servers/device_hardware_bridge.py +0 -0
  65. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/servers/stop_servers.py +0 -0
  66. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/servers/utils.py +0 -0
  67. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/services/accessibility.py +0 -0
  68. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/services/llm.py +0 -0
  69. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/index.py +0 -0
  70. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/back.py +0 -0
  71. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/clear_text.py +0 -0
  72. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/erase_one_char.py +0 -0
  73. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/glimpse_screen.py +0 -0
  74. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/input_text.py +0 -0
  75. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/launch_app.py +0 -0
  76. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/long_press_on.py +0 -0
  77. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/open_link.py +0 -0
  78. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/press_key.py +0 -0
  79. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/stop_app.py +0 -0
  80. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/swipe.py +0 -0
  81. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/tap.py +0 -0
  82. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/mobile/wait_for_animation_to_end.py +0 -0
  83. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/test_utils.py +0 -0
  84. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/tool_wrapper.py +0 -0
  85. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/types.py +0 -0
  86. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/tools/utils.py +0 -0
  87. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/cli_helpers.py +0 -0
  88. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/cli_selection.py +0 -0
  89. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/conversations.py +0 -0
  90. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/decorators.py +0 -0
  91. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/errors.py +0 -0
  92. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/file.py +0 -0
  93. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/logger.py +0 -0
  94. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/media.py +0 -0
  95. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/recorder.py +0 -0
  96. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/requests_utils.py +0 -0
  97. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/shell_utils.py +0 -0
  98. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/test_ui_hierarchy.py +0 -0
  99. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/time.py +0 -0
  100. {minitap_mobile_use-2.5.1 → minitap_mobile_use-2.5.3}/minitap/mobile_use/utils/ui_hierarchy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: minitap-mobile-use
3
- Version: 2.5.1
3
+ Version: 2.5.3
4
4
  Summary: AI-powered multi-agent system that automates real Android and iOS devices through low-level control using LangGraph.
5
5
  Author: Pierre-Louis Favreau, Jean-Pierre Lo, Nicolas Dehandschoewercker
6
6
  License: MIT License
@@ -14,7 +14,7 @@ def get_ios_devices() -> tuple[bool, list[str], str]:
14
14
  - list[str]: A list of iOS device UDIDs.
15
15
  - str: An error message if any.
16
16
  """
17
- if platform.system() != "Linux":
17
+ if platform.system() != "Darwin":
18
18
  return False, [], "xcrun is only available on macOS."
19
19
 
20
20
  try:
@@ -409,6 +409,21 @@ class Agent:
409
409
  self._finalize_tracing(task=task, context=context)
410
410
  return output
411
411
 
412
+ def is_healthy(self):
413
+ """
414
+ Check if the agent is healthy by verifying the streaming connection status.
415
+ Uses the configured Screen API base URL instead of hardcoding localhost.
416
+ """
417
+ try:
418
+ response = self._screen_api_client.get_with_retry("/streaming-status", timeout=2)
419
+ if response.status_code == 200:
420
+ data = response.json()
421
+ is_connected = data.get("is_streaming_connected", False)
422
+ return is_connected
423
+ return False
424
+ except Exception:
425
+ return False
426
+
412
427
  def clean(self, force: bool = False):
413
428
  if not self._initialized and not force:
414
429
  return
@@ -535,7 +550,11 @@ class Agent:
535
550
 
536
551
  def _run_servers(self, device_id: str, platform: DevicePlatform) -> bool:
537
552
  if self._is_default_hw_bridge:
538
- bridge_instance = start_device_hardware_bridge(device_id=device_id, platform=platform)
553
+ bridge_instance = start_device_hardware_bridge(
554
+ device_id=device_id,
555
+ platform=platform,
556
+ adb_host=self._config.servers.adb_host,
557
+ )
539
558
  if not bridge_instance:
540
559
  logger.warning("Failed to start Device Hardware Bridge.")
541
560
  return False
@@ -36,6 +36,7 @@ async def main() -> None:
36
36
  request=PlatformTaskRequest(
37
37
  task="your-task-name",
38
38
  profile="your-profile-name",
39
+ api_key="<api-key>", # or set MINITAP_API_KEY env variable
39
40
  )
40
41
  )
41
42
  print(result)
@@ -8,21 +8,24 @@ import requests
8
8
  import uvicorn
9
9
  from fastapi import FastAPI, HTTPException
10
10
  from fastapi.responses import JSONResponse
11
+ from sseclient import SSEClient
12
+
11
13
  from minitap.mobile_use.servers.config import server_settings
12
14
  from minitap.mobile_use.servers.utils import is_port_in_use
13
- from sseclient import SSEClient
14
15
 
15
16
  DEVICE_HARDWARE_BRIDGE_BASE_URL = server_settings.DEVICE_HARDWARE_BRIDGE_BASE_URL
16
17
  DEVICE_HARDWARE_BRIDGE_API_URL = f"{DEVICE_HARDWARE_BRIDGE_BASE_URL}/api"
17
18
 
18
19
  _latest_screen_data = None
20
+ _is_streaming_connected = False
21
+
19
22
  _data_lock = threading.Lock()
20
23
  _stream_thread = None
21
24
  _stop_event = threading.Event()
22
25
 
23
26
 
24
27
  def _stream_worker():
25
- global _latest_screen_data
28
+ global _latest_screen_data, _is_streaming_connected
26
29
  sse_url = f"{DEVICE_HARDWARE_BRIDGE_API_URL}/device-screen/sse"
27
30
  headers = {"Accept": "text/event-stream"}
28
31
 
@@ -31,6 +34,8 @@ def _stream_worker():
31
34
  with requests.get(sse_url, stream=True, headers=headers) as response:
32
35
  response.raise_for_status()
33
36
  print("--- Stream connected, listening for events... ---")
37
+ with _data_lock:
38
+ _is_streaming_connected = True
34
39
  event_source = (chunk for chunk in response.iter_content())
35
40
  client = SSEClient(event_source)
36
41
  for event in client.events():
@@ -59,10 +64,12 @@ def _stream_worker():
59
64
  "platform": platform,
60
65
  }
61
66
 
62
- except requests.exceptions.RequestException as e:
67
+ except Exception as e:
63
68
  print(f"Connection error in stream worker: {e}. Retrying in 2 seconds...")
64
69
  with _data_lock:
70
+ _is_streaming_connected = False
65
71
  _latest_screen_data = None
72
+
66
73
  time.sleep(2)
67
74
 
68
75
 
@@ -76,9 +83,11 @@ def start_stream():
76
83
 
77
84
 
78
85
  def stop_stream():
79
- global _stream_thread
86
+ global _stream_thread, _is_streaming_connected
80
87
  if _stream_thread and _stream_thread.is_alive():
81
88
  _stop_event.set()
89
+ with _data_lock:
90
+ _is_streaming_connected = False
82
91
  _stream_thread.join(timeout=2)
83
92
  print("--- Background screen streaming stopped ---")
84
93
 
@@ -135,6 +144,18 @@ async def health_check():
135
144
  raise HTTPException(status_code=503, detail=f"Maestro Studio not available: {e}")
136
145
 
137
146
 
147
+ @app.get("/streaming-status")
148
+ async def streaming_status():
149
+ """Check if the SSE streaming connection is active."""
150
+ with _data_lock:
151
+ return JSONResponse(
152
+ content={
153
+ "is_streaming_connected": _is_streaming_connected,
154
+ "has_screen_data": _latest_screen_data is not None,
155
+ }
156
+ )
157
+
158
+
138
159
  def start():
139
160
  if not is_port_in_use(server_settings.DEVICE_SCREEN_API_PORT):
140
161
  uvicorn.run(app, host="0.0.0.0", port=server_settings.DEVICE_SCREEN_API_PORT)
@@ -60,7 +60,7 @@ def _start_device_screen_api_process() -> multiprocessing.Process | None:
60
60
 
61
61
 
62
62
  def start_device_hardware_bridge(
63
- device_id: str, platform: DevicePlatform
63
+ device_id: str, platform: DevicePlatform, adb_host: str | None = None
64
64
  ) -> DeviceHardwareBridge | None:
65
65
  logger.info("Starting Device Hardware Bridge...")
66
66
 
@@ -68,7 +68,7 @@ def start_device_hardware_bridge(
68
68
  bridge = DeviceHardwareBridge(
69
69
  device_id=device_id,
70
70
  platform=platform,
71
- adb_host=server_settings.ADB_HOST,
71
+ adb_host=adb_host or server_settings.ADB_HOST,
72
72
  )
73
73
  success = bridge.start()
74
74
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "minitap-mobile-use"
3
- version = "2.5.1"
3
+ version = "2.5.3"
4
4
  description = "AI-powered multi-agent system that automates real Android and iOS devices through low-level control using LangGraph."
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }