minitap-mobile-use 2.2.0__py3-none-any.whl → 2.3.0__py3-none-any.whl

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.

@@ -0,0 +1,178 @@
1
+ from unittest.mock import patch
2
+
3
+ from minitap.mobile_use.utils.ui_hierarchy import (
4
+ ElementBounds,
5
+ Point,
6
+ find_element_by_resource_id,
7
+ get_bounds_for_element,
8
+ get_element_text,
9
+ is_element_focused,
10
+ text_input_is_empty,
11
+ )
12
+
13
+
14
+ def test_text_input_is_empty():
15
+ assert text_input_is_empty(text=None, hint_text=None)
16
+ assert text_input_is_empty(text="", hint_text=None)
17
+ assert text_input_is_empty(text="", hint_text="")
18
+ assert text_input_is_empty(text="text", hint_text="text")
19
+
20
+ assert not text_input_is_empty(text="text", hint_text=None)
21
+ assert not text_input_is_empty(text="text", hint_text="")
22
+
23
+
24
+ def test_find_element_by_resource_id():
25
+ ui_hierarchy = [
26
+ {"resourceId": "com.example:id/button1", "text": "Button 1", "children": []},
27
+ {
28
+ "resourceId": "com.example:id/container",
29
+ "children": [
30
+ {
31
+ "resourceId": "com.example:id/nested_button",
32
+ "text": "Nested Button",
33
+ "children": [],
34
+ }
35
+ ],
36
+ },
37
+ ]
38
+
39
+ result = find_element_by_resource_id(ui_hierarchy, "com.example:id/button1")
40
+ assert result is not None
41
+ assert result["resourceId"] == "com.example:id/button1"
42
+ assert result["text"] == "Button 1"
43
+
44
+ result = find_element_by_resource_id(ui_hierarchy, "com.example:id/nested_button")
45
+ assert result is not None
46
+ assert result["resourceId"] == "com.example:id/nested_button"
47
+ assert result["text"] == "Nested Button"
48
+
49
+ result = find_element_by_resource_id(ui_hierarchy, "com.example:id/nonexistent")
50
+ assert result is None
51
+
52
+ result = find_element_by_resource_id([], "com.example:id/button1")
53
+ assert result is None
54
+
55
+
56
+ def test_find_element_by_resource_id_rich_hierarchy():
57
+ rich_hierarchy = [
58
+ {"attributes": {"resource-id": "com.example:id/button1"}, "children": []},
59
+ {
60
+ "attributes": {"resource-id": "com.example:id/container"},
61
+ "children": [
62
+ {"attributes": {"resource-id": "com.example:id/nested_button"}, "children": []}
63
+ ],
64
+ },
65
+ ]
66
+
67
+ result = find_element_by_resource_id(
68
+ rich_hierarchy, "com.example:id/button1", is_rich_hierarchy=True
69
+ )
70
+ assert result is not None
71
+ assert result["resource-id"] == "com.example:id/button1"
72
+
73
+ result = find_element_by_resource_id(
74
+ rich_hierarchy, "com.example:id/nested_button", is_rich_hierarchy=True
75
+ )
76
+ assert result is not None
77
+ assert result["resource-id"] == "com.example:id/nested_button"
78
+
79
+ result = find_element_by_resource_id(
80
+ rich_hierarchy, "com.example:id/nonexistent", is_rich_hierarchy=True
81
+ )
82
+ assert result is None
83
+
84
+
85
+ def test_is_element_focused():
86
+ focused_element = {"focused": "true"}
87
+ assert is_element_focused(focused_element)
88
+
89
+ non_focused_element = {"focused": "false"}
90
+ assert not is_element_focused(non_focused_element)
91
+
92
+ no_focused_element = {"text": "some text"}
93
+ assert not is_element_focused(no_focused_element)
94
+
95
+ none_focused_element = {"focused": None}
96
+ assert not is_element_focused(none_focused_element)
97
+
98
+
99
+ def test_get_element_text():
100
+ element = {"text": "Button Text", "hintText": "Hint Text"}
101
+ assert get_element_text(element) == "Button Text"
102
+ assert get_element_text(element, hint_text=False) == "Button Text"
103
+ assert get_element_text(element, hint_text=True) == "Hint Text"
104
+
105
+ element_no_text = {"hintText": "Hint Text"}
106
+ assert get_element_text(element_no_text) is None
107
+ assert get_element_text(element_no_text, hint_text=True) == "Hint Text"
108
+ element_no_hint = {"text": "Button Text"}
109
+ assert get_element_text(element_no_hint) == "Button Text"
110
+ assert get_element_text(element_no_hint, hint_text=True) is None
111
+
112
+ empty_element = {}
113
+ assert get_element_text(empty_element) is None
114
+ assert get_element_text(empty_element, hint_text=True) is None
115
+
116
+
117
+ def test_get_bounds_for_element():
118
+ element_with_bounds = {"bounds": {"x": 10, "y": 20, "width": 100, "height": 50}}
119
+ bounds = get_bounds_for_element(element_with_bounds)
120
+ assert bounds is not None
121
+ assert isinstance(bounds, ElementBounds)
122
+ assert bounds.x == 10
123
+ assert bounds.y == 20
124
+ assert bounds.width == 100
125
+ assert bounds.height == 50
126
+
127
+ element_no_bounds = {"text": "Button"}
128
+ bounds = get_bounds_for_element(element_no_bounds)
129
+ assert bounds is None
130
+
131
+ # Suppress logger output for the invalid bounds test case
132
+ with patch("minitap.mobile_use.utils.ui_hierarchy.logger.error"):
133
+ element_invalid_bounds = {
134
+ "bounds": {
135
+ "x": "invalid", # Should be int
136
+ "y": 20,
137
+ "width": 100,
138
+ "height": 50,
139
+ }
140
+ }
141
+ bounds = get_bounds_for_element(element_invalid_bounds)
142
+ assert bounds is None
143
+
144
+
145
+ def test_element_bounds():
146
+ bounds = ElementBounds(x=10, y=20, width=100, height=50)
147
+
148
+ center = bounds.get_center()
149
+ assert isinstance(center, Point)
150
+ assert center.x == 60
151
+ assert center.y == 45
152
+
153
+ center_point = bounds.get_relative_point(0.5, 0.5)
154
+ assert isinstance(center_point, Point)
155
+ assert center_point.x == 60
156
+ assert center_point.y == 45
157
+
158
+ top_left = bounds.get_relative_point(0.0, 0.0)
159
+ assert top_left.x == 10
160
+ assert top_left.y == 20
161
+
162
+ bottom_right = bounds.get_relative_point(1.0, 1.0)
163
+ assert bottom_right.x == 110
164
+ assert bottom_right.y == 70
165
+ custom_point = bounds.get_relative_point(0.95, 0.95)
166
+ assert custom_point.x == 105
167
+ assert custom_point.y == 67
168
+
169
+
170
+ if __name__ == "__main__":
171
+ test_text_input_is_empty()
172
+ test_find_element_by_resource_id()
173
+ test_find_element_by_resource_id_rich_hierarchy()
174
+ test_is_element_focused()
175
+ test_get_element_text()
176
+ test_get_bounds_for_element()
177
+ test_element_bounds()
178
+ print("All tests passed")
@@ -109,8 +109,8 @@ class ElementBounds(BaseModel):
109
109
  <------>
110
110
  """
111
111
  return Point(
112
- x=int((self.x + self.width) * x_percent),
113
- y=int((self.y + self.height) * y_percent),
112
+ x=int(self.x + self.width * x_percent),
113
+ y=int(self.y + self.height * y_percent),
114
114
  )
115
115
 
116
116
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: minitap-mobile-use
3
- Version: 2.2.0
3
+ Version: 2.3.0
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
@@ -56,7 +56,7 @@ Description-Content-Type: text/markdown
56
56
 
57
57
  <div align="center">
58
58
 
59
- ![mobile-use in Action](./doc/linkedin-demo-with-text.gif)
59
+ ![mobile-use in Action](./doc/banner-v2.png)
60
60
 
61
61
  </div>
62
62
 
@@ -83,7 +83,7 @@ Mobile-use is a powerful, open-source AI agent that controls your Android or IOS
83
83
  ## ✨ Features
84
84
 
85
85
  - 🗣️ **Natural Language Control**: Interact with your phone using your native language.
86
- - 📱 **UI-Aware Automation**: Intelligently navigates through app interfaces.
86
+ - 📱 **UI-Aware Automation**: Intelligently navigates through app interfaces (note: currently has limited effectiveness with games as they don't provide accessibility tree data).
87
87
  - 📊 **Data Scraping**: Extract information from any app and structure it into your desired format (e.g., JSON) using a natural language description.
88
88
  - 🔧 **Extensible & Customizable**: Easily configure different LLMs to power the agents that power mobile-use.
89
89
 
@@ -152,7 +152,7 @@ Then run in your terminal:
152
152
 
153
153
  ```bash
154
154
  chmod +x mobile-use.sh
155
- ./mobile-use.sh \
155
+ bash ./mobile-use.sh \
156
156
  "Open Gmail, find first 3 unread emails, and list their sender and subject line" \
157
157
  --output-description "A JSON list of objects, each with 'sender' and 'subject' keys"
158
158
  ```
@@ -1,12 +1,12 @@
1
1
  minitap/mobile_use/__init__.py,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
2
- minitap/mobile_use/agents/contextor/contextor.py,sha256=d7c98771a9173281c1660a2ee965149d4f70ecf7005cf75fa89eb1e9a9f2b660,1673
3
- minitap/mobile_use/agents/cortex/cortex.md,sha256=dcf42ec3081d21d1652b601b00276f6f876806855f4337e0c23d99f20a32b88f,5594
4
- minitap/mobile_use/agents/cortex/cortex.py,sha256=91d672cb6c6b3eb95ab335ec6031d2479446a8d2af087c65f0bd0300799547bb,4909
2
+ minitap/mobile_use/agents/contextor/contextor.py,sha256=17f285db6fb21ab414ce7197fff62ca54a94c6359f570e9100a02578f559c714,1704
3
+ minitap/mobile_use/agents/cortex/cortex.md,sha256=6457d09b31e2e36db7a2921a8455e33fa47b6c748a86b6bf0490de95ef5dab08,9878
4
+ minitap/mobile_use/agents/cortex/cortex.py,sha256=de4fa731ab41090529e19e8868cee97c994cecd45e71f140cccf67dc7fefce7d,4858
5
5
  minitap/mobile_use/agents/cortex/types.py,sha256=c33f2277752644d2185d84add03a493adaa530096d046d73366ab9121d99b946,361
6
- minitap/mobile_use/agents/executor/executor.md,sha256=800003af904d346ab0a6b8a205c0332930161a8c997ede584097a40e8f1ac478,2806
6
+ minitap/mobile_use/agents/executor/executor.md,sha256=1a813a0b8fcb402c14ce505f3c070aca275599e39d845c4cce151a46f606e879,3124
7
7
  minitap/mobile_use/agents/executor/executor.py,sha256=e740b76c9d2dfa832afbca60ac533f691963ae068c64dd97a96b2c58c80c925d,2850
8
8
  minitap/mobile_use/agents/executor/tool_node.py,sha256=2ad729ede393882460ae3d180ac1c0e1ab1688f40b2017220aad1b059f6485c5,3900
9
- minitap/mobile_use/agents/executor/utils.py,sha256=1a387d30047d3be05b5e550433866abe4388222b3f95d1360847870155ef8f12,368
9
+ minitap/mobile_use/agents/executor/utils.py,sha256=74cf2287053cd4fc763835870e5ae029ca36f6cd0ca7d50678ad05d52ab265b7,368
10
10
  minitap/mobile_use/agents/hopper/hopper.md,sha256=2e9333ece8f6b76401ac2cce98ca06a025faa5dba6bacbbc344793ddf42292d0,362
11
11
  minitap/mobile_use/agents/hopper/hopper.py,sha256=1c015cc911f225c9cb26415e0852d5905ded8e715fb928ad2595143870a781e3,1324
12
12
  minitap/mobile_use/agents/orchestrator/human.md,sha256=6559026aa921b7ad7dddcf3dfcd5d9930252edd6484d60ea92ff6ca97ed028fc,229
@@ -15,7 +15,7 @@ minitap/mobile_use/agents/orchestrator/orchestrator.py,sha256=83524eefe8fc1d9639
15
15
  minitap/mobile_use/agents/orchestrator/types.py,sha256=f53dfdc99e8d50888ac1cde5f7f90ba5c87837a8eee8dd8efa31f2640394433c,335
16
16
  minitap/mobile_use/agents/outputter/human.md,sha256=6b9b45c640b163554524b1aec4cd97134c628eeb8557a32e23c8f966d32f642e,771
17
17
  minitap/mobile_use/agents/outputter/outputter.py,sha256=0539cd1bfa307c6e24136488a0481128da17c37f20128e63388b5c4aea5aae50,2750
18
- minitap/mobile_use/agents/outputter/test_outputter.py,sha256=4c52988f8f29159657707a0e11500610f3987cac6390b17edec23f09ddfcc0ff,3334
18
+ minitap/mobile_use/agents/outputter/test_outputter.py,sha256=907b517c486f82a384a364e0bd202c00e8e8082c138461f6eead0e25c2779ba9,5538
19
19
  minitap/mobile_use/agents/planner/human.md,sha256=cb37be2af568918e60238eaa785837178a3ba8f8112de86850d9a62914c18314,222
20
20
  minitap/mobile_use/agents/planner/planner.md,sha256=dc13218df28b38fd2139803c9d013f0ba50899b2ae58545a3b8f3d2fd2aad734,3333
21
21
  minitap/mobile_use/agents/planner/planner.py,sha256=cb7fa02cf5ae9e6f95646afc1c41642e5f9e58113dc17d51839f5236a33e67b7,2722
@@ -35,7 +35,7 @@ minitap/mobile_use/graph/graph.py,sha256=c7b412e725b096eca8f212d704c3faf91d77eea
35
35
  minitap/mobile_use/graph/state.py,sha256=cfe67d15833efa18b28a86293bc5c713ff8c777778b0552bb6e25fa7070534aa,3371
36
36
  minitap/mobile_use/main.py,sha256=7ac4dc592e3ce72bff602d67ba2f25b9b5e45e07a316e548d7c8e73735abf43d,3725
37
37
  minitap/mobile_use/sdk/__init__.py,sha256=4e5555c0597242b9523827194a2500b9c6d7e5c04b1ccd2056c9b1f4d42a31cd,318
38
- minitap/mobile_use/sdk/agent.py,sha256=0d598bc0fab7e4429654e38379d730a021243a0953ad8efcca721b382938be7a,20871
38
+ minitap/mobile_use/sdk/agent.py,sha256=1993dfb3b1db7c65ff5d9545090a56c5cd11b2b92092b7cdeba52cb020a4ff44,21384
39
39
  minitap/mobile_use/sdk/builders/__init__.py,sha256=d6c96d39b80900a114698ef205ab5061a541f33bfa99c456d9345e5adb8ff6ff,424
40
40
  minitap/mobile_use/sdk/builders/agent_config_builder.py,sha256=c63f452350822daab86d29c44a333909b623fc7ff7bcbf74e5f9104b24630bf5,7582
41
41
  minitap/mobile_use/sdk/builders/index.py,sha256=64336ac3b3dea4673a48e95b8c5ac4196ecd5d2196380377d102593d0a1dc138,442
@@ -47,36 +47,37 @@ minitap/mobile_use/sdk/examples/simple_photo_organizer.py,sha256=8ad1cebb5281e36
47
47
  minitap/mobile_use/sdk/examples/smart_notification_assistant.py,sha256=1d00658dc30c7bce5ef68369f982cd2d1932f53e2e2da6ded70cea13dc669c72,6362
48
48
  minitap/mobile_use/sdk/types/__init__.py,sha256=5dd148d83bf6261ac8ac60c994e2496b5bf535591d0835807d5fe394fd85a954,1014
49
49
  minitap/mobile_use/sdk/types/agent.py,sha256=390d5c642b3480f4a2203ddd28ec115c785f2576bec81e82e4db3c129399c020,2260
50
- minitap/mobile_use/sdk/types/exceptions.py,sha256=56ac3f749730740951448b1b0f200be21331dc0800916a87587b21e7850120a5,2288
50
+ minitap/mobile_use/sdk/types/exceptions.py,sha256=bc710e6c1a3c8886c4358fd6d2fedd61edc8e70ef1bbde35e6e52c0eda73a7e0,3651
51
51
  minitap/mobile_use/sdk/types/task.py,sha256=74743a398b63af62383528d5906824ae8aaba1e1885c75414b347623d7931f12,5837
52
52
  minitap/mobile_use/sdk/utils.py,sha256=647f1f4a463c3029c3b0eb3c33f7dd778d5f5fd9d293224f5474595a60e1de6f,967
53
53
  minitap/mobile_use/servers/config.py,sha256=8a4a6bce23e2093d047a91e135e2f88627f76ac12177d071f25a3ca739b3afeb,575
54
- minitap/mobile_use/servers/device_hardware_bridge.py,sha256=80b93fe1bd8ea9100ac198a83f0aea2c40565a11e810acff9785bbd3f3b31f37,7174
54
+ minitap/mobile_use/servers/device_hardware_bridge.py,sha256=52839ea009bb303a695a2af1ef8e7bbb6d90788229f3160dffebc8098923f6cb,7180
55
55
  minitap/mobile_use/servers/device_screen_api.py,sha256=63bf866f17cde4ab97631b710080866b8427225d3857b2351ab83db38a9c5107,5064
56
56
  minitap/mobile_use/servers/start_servers.py,sha256=1e86dc0fcbdf6e6570ae68c7097145e754f3c3448ca813d415b3e5ebb74db828,5037
57
57
  minitap/mobile_use/servers/stop_servers.py,sha256=9a3dc2eafb3c13e420248b1844694c80112be32f0d336f54ecc1015cb6f27be9,7127
58
- minitap/mobile_use/servers/utils.py,sha256=db5d26153a169ab141556337db3693adc1bf8522943316656bdeb05dbf95465b,394
58
+ minitap/mobile_use/servers/utils.py,sha256=f3cc85da39f8d60cb840001be418562de7db95462370db9b79e96d884abe5c17,294
59
59
  minitap/mobile_use/services/accessibility.py,sha256=42bcbe81b427ee6f6e82bcfe420fc40630db950bda354e3e433c2dda2e159628,3404
60
60
  minitap/mobile_use/services/llm.py,sha256=3706edcb2132709c5cb931fac86ea31908a209347b341ec7b0f1cfbb27959c66,4260
61
- minitap/mobile_use/tools/index.py,sha256=b380fa7b756108ca3dd1f81fbe397233f742ddcecaaefa2844c2e67ced7093be,2695
61
+ minitap/mobile_use/tools/index.py,sha256=dbf9cfac4f319718c6f50b19d86a7d3aef0886caeb60db17c34ff4f18e640dc3,2692
62
62
  minitap/mobile_use/tools/mobile/back.py,sha256=cf1053b22c4fbeb1c219578563d6d857425dcdff08af690149c6e52a0e29c195,1792
63
- minitap/mobile_use/tools/mobile/clear_text.py,sha256=28e9af14cbb62be3a8221e7b1e7645e9bc22f40202d84c6047874809137cd927,9316
64
- minitap/mobile_use/tools/mobile/copy_text_from.py,sha256=723d7563e19d05060da0071aedfb620ce36bfb90931fcb815ab8d01be7ed9dd5,2716
63
+ minitap/mobile_use/tools/mobile/clear_text.py,sha256=32de8458e0eb34a10ab239d4925120794e78b24118069a65c08fc9f8daf6b63a,10803
64
+ minitap/mobile_use/tools/mobile/copy_text_from.py,sha256=e58f2812fd2baeec91038eabb817d322fbecc6e9b079b4da725bc6c79ca9b02c,2718
65
65
  minitap/mobile_use/tools/mobile/erase_one_char.py,sha256=e8c0a519a235271fa1cb785fe711e63e9ca14f4d33a61fbb39af04ec9bf18211,1960
66
66
  minitap/mobile_use/tools/mobile/find_packages.py,sha256=78f3051f40307ba75655fbffe6fe3fc3954f158eb8ceb0d270cb81a5e807d81d,2554
67
- minitap/mobile_use/tools/mobile/input_text.py,sha256=6a0b48ac79ad908fd6229a63fe17f7c5f26fb0e7466632700efd5db40393bda5,3199
67
+ minitap/mobile_use/tools/mobile/glimpse_screen.py,sha256=cd41702461f6a0aa5cd3f166af5395bb15e2305edfe60908da134595a35c10bf,2426
68
+ minitap/mobile_use/tools/mobile/input_text.py,sha256=e2d36bcdcc7f07e4d81e6d86a18740d703087e1865e1e1a2fcaa90a0061feed6,6367
68
69
  minitap/mobile_use/tools/mobile/launch_app.py,sha256=e1879333c0eae92b22ec3c147edd26dfe41252bf8049e5954a0b72d5a8b8f650,2027
69
70
  minitap/mobile_use/tools/mobile/long_press_on.py,sha256=b59bf885a10e7468069e5523eb7d23bfa6d41efc7d0521f7622e4dd2260fe879,2194
70
71
  minitap/mobile_use/tools/mobile/open_link.py,sha256=ad363f83b254a8e3e5969b4d8b90ef4e1fc4eceacc9c976e02a3e110e80ad23f,1875
71
- minitap/mobile_use/tools/mobile/paste_text.py,sha256=dc126297f174cdcdfc6f6d148fdb6a96ecb7813926e441ce0631e963b196b448,2101
72
+ minitap/mobile_use/tools/mobile/paste_text.py,sha256=76a21937395730bd2a6cba9aa0f4aa96463cd320bac8281517c878a9096748d3,3038
72
73
  minitap/mobile_use/tools/mobile/press_key.py,sha256=a22d416279c33f2e843aaf28e4466a7eeae59aa690312c8866b62a3f84b57d5b,1939
73
74
  minitap/mobile_use/tools/mobile/stop_app.py,sha256=8fc1cf5682232d670270a7e909f365a795150643eac5310f042d792b79e7c0c0,2062
74
75
  minitap/mobile_use/tools/mobile/swipe.py,sha256=23c31022bef827afbfe90c7f6a7d195e5bef57eb3972cd32b0d2aa054b4c6d26,5754
75
- minitap/mobile_use/tools/mobile/take_screenshot.py,sha256=8762be82e0fb55549f1271a8e4c7b25040f906d21ed19f52121a616e70eb9bb0,2271
76
76
  minitap/mobile_use/tools/mobile/tap.py,sha256=d7a3de2ddb78b051b22d7886553d75bab13562abfc8562957c15fb16dd484a0a,2297
77
77
  minitap/mobile_use/tools/mobile/wait_for_animation_to_end.py,sha256=967d0df11dfb073dde6308761e9795e02c93ee2b0cbe17caf6edbe4a8beea28a,2493
78
+ minitap/mobile_use/tools/test_utils.py,sha256=efd16bd82030d782b7fa0227ed211a2a8ad616a1819252edbb64c58c340adb63,13241
78
79
  minitap/mobile_use/tools/tool_wrapper.py,sha256=f0f27beaae25a1bcfd9b72bf994de84b2e5fba9e242d8ad18a8d1a97cd7619e4,454
79
- minitap/mobile_use/tools/utils.py,sha256=bf6924e3d9e5338c2e04d88fd0ad9ed03a0c02058b62373025fa4b3a805712ae,2694
80
+ minitap/mobile_use/tools/utils.py,sha256=d056e5baf268e19e9463bf0c1e923ed81eb0f699ed071d904a3585fb16924a7d,6717
80
81
  minitap/mobile_use/utils/cli_helpers.py,sha256=1c53b6ea6cd2ba861302b182944c6a3a31dac27e316bca2c65cd6a3ca3256e81,1720
81
82
  minitap/mobile_use/utils/cli_selection.py,sha256=62e949bf075e984b5d23b4a9880ff2bccf8f9e0f7ccb48120030a6a82075352b,4788
82
83
  minitap/mobile_use/utils/conversations.py,sha256=8f1d924300ec3f6f7c71510c21e3011b75caca5b1fff06fdaccb377c3cde24ec,914
@@ -88,9 +89,10 @@ minitap/mobile_use/utils/media.py,sha256=29fa7f009a0f2bd60de2a9eba4a90e6eecc91cc
88
89
  minitap/mobile_use/utils/recorder.py,sha256=f90c511a182553684fc4c51195dec6859c7867b83b66bd56dd13f0cdcab2b3ae,1724
89
90
  minitap/mobile_use/utils/requests_utils.py,sha256=5c3a2e2aff7c521cd6a43b74c084e2244e1ff55065a5b722e6e251c6419861fd,1168
90
91
  minitap/mobile_use/utils/shell_utils.py,sha256=b35ae7f863379adb86c9ba0f9b3b9d4954118d12aef1ffed0bc260b32d73d857,650
92
+ minitap/mobile_use/utils/test_ui_hierarchy.py,sha256=96c1549c05b4f7254a22d57dbd40aea860756f1e0b9d8cc24319383643448422,5911
91
93
  minitap/mobile_use/utils/time.py,sha256=41bfaabb3751de11443ccb4a3f1f53d5ebacc7744c72e32695fdcc3d23f17d49,160
92
- minitap/mobile_use/utils/ui_hierarchy.py,sha256=b52acd081ac18169dab94b7187c6ffed4db72d4e4b7f56aeca9ef5b81166c4e0,3630
93
- minitap_mobile_use-2.2.0.dist-info/WHEEL,sha256=ab6157bc637547491fb4567cd7ddf26b04d63382916ca16c29a5c8e94c9c9ef7,79
94
- minitap_mobile_use-2.2.0.dist-info/entry_points.txt,sha256=663a29cfd551a4eaa0f27335f0bd7e4a732a4e39c76b68ef5c8dc444d4a285fa,60
95
- minitap_mobile_use-2.2.0.dist-info/METADATA,sha256=b0076a10119155863d990ff779bb901857df8b74c1321d6fef45ac6a16029db8,11825
96
- minitap_mobile_use-2.2.0.dist-info/RECORD,,
94
+ minitap/mobile_use/utils/ui_hierarchy.py,sha256=69bff27bcb29087ebab4946f52c72d833414bd7e8819d3610beb61cc39c9023d,3626
95
+ minitap_mobile_use-2.3.0.dist-info/WHEEL,sha256=ab6157bc637547491fb4567cd7ddf26b04d63382916ca16c29a5c8e94c9c9ef7,79
96
+ minitap_mobile_use-2.3.0.dist-info/entry_points.txt,sha256=663a29cfd551a4eaa0f27335f0bd7e4a732a4e39c76b68ef5c8dc444d4a285fa,60
97
+ minitap_mobile_use-2.3.0.dist-info/METADATA,sha256=0fc22ec4cc7d885577bf44a33f469ce7229b43045a8fa8be45fdfd54495e6be9,11917
98
+ minitap_mobile_use-2.3.0.dist-info/RECORD,,