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.
- minitap/mobile_use/agents/contextor/contextor.py +4 -2
- minitap/mobile_use/agents/cortex/cortex.md +71 -25
- minitap/mobile_use/agents/cortex/cortex.py +0 -1
- minitap/mobile_use/agents/executor/executor.md +6 -4
- minitap/mobile_use/agents/executor/utils.py +2 -1
- minitap/mobile_use/agents/outputter/test_outputter.py +104 -42
- minitap/mobile_use/sdk/agent.py +16 -6
- minitap/mobile_use/sdk/types/exceptions.py +30 -0
- minitap/mobile_use/servers/device_hardware_bridge.py +2 -1
- minitap/mobile_use/servers/utils.py +6 -9
- minitap/mobile_use/tools/index.py +2 -2
- minitap/mobile_use/tools/mobile/clear_text.py +73 -25
- minitap/mobile_use/tools/mobile/copy_text_from.py +7 -5
- minitap/mobile_use/tools/mobile/{take_screenshot.py → glimpse_screen.py} +15 -11
- minitap/mobile_use/tools/mobile/input_text.py +94 -13
- minitap/mobile_use/tools/mobile/paste_text.py +34 -8
- minitap/mobile_use/tools/test_utils.py +351 -0
- minitap/mobile_use/tools/utils.py +147 -40
- minitap/mobile_use/utils/test_ui_hierarchy.py +178 -0
- minitap/mobile_use/utils/ui_hierarchy.py +2 -2
- {minitap_mobile_use-2.2.0.dist-info → minitap_mobile_use-2.3.0.dist-info}/METADATA +4 -4
- {minitap_mobile_use-2.2.0.dist-info → minitap_mobile_use-2.3.0.dist-info}/RECORD +24 -22
- {minitap_mobile_use-2.2.0.dist-info → minitap_mobile_use-2.3.0.dist-info}/WHEEL +0 -0
- {minitap_mobile_use-2.2.0.dist-info → minitap_mobile_use-2.3.0.dist-info}/entry_points.txt +0 -0
|
@@ -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(
|
|
113
|
-
y=int(
|
|
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.
|
|
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
|
-

|
|
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=
|
|
3
|
-
minitap/mobile_use/agents/cortex/cortex.md,sha256=
|
|
4
|
-
minitap/mobile_use/agents/cortex/cortex.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
64
|
-
minitap/mobile_use/tools/mobile/copy_text_from.py,sha256=
|
|
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/
|
|
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=
|
|
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=
|
|
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=
|
|
93
|
-
minitap_mobile_use-2.
|
|
94
|
-
minitap_mobile_use-2.
|
|
95
|
-
minitap_mobile_use-2.
|
|
96
|
-
minitap_mobile_use-2.
|
|
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,,
|
|
File without changes
|
|
File without changes
|