minitap-mobile-use 2.1.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 +72 -26
- minitap/mobile_use/agents/cortex/cortex.py +1 -2
- minitap/mobile_use/agents/executor/executor.md +6 -4
- minitap/mobile_use/agents/executor/executor.py +3 -1
- minitap/mobile_use/agents/executor/utils.py +2 -1
- minitap/mobile_use/agents/outputter/test_outputter.py +104 -42
- minitap/mobile_use/agents/planner/planner.md +1 -1
- minitap/mobile_use/agents/planner/planner.py +4 -2
- minitap/mobile_use/config.py +16 -1
- minitap/mobile_use/controllers/mobile_command_controller.py +4 -4
- minitap/mobile_use/main.py +2 -2
- minitap/mobile_use/sdk/agent.py +17 -8
- minitap/mobile_use/sdk/builders/agent_config_builder.py +2 -2
- minitap/mobile_use/sdk/types/exceptions.py +30 -0
- minitap/mobile_use/sdk/utils.py +3 -2
- minitap/mobile_use/servers/device_hardware_bridge.py +2 -1
- minitap/mobile_use/servers/utils.py +6 -9
- minitap/mobile_use/services/llm.py +23 -6
- minitap/mobile_use/tools/index.py +21 -15
- 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/mobile/swipe.py +107 -9
- minitap/mobile_use/tools/test_utils.py +351 -0
- minitap/mobile_use/tools/tool_wrapper.py +5 -0
- minitap/mobile_use/tools/utils.py +147 -40
- minitap/mobile_use/utils/recorder.py +2 -9
- minitap/mobile_use/utils/test_ui_hierarchy.py +178 -0
- minitap/mobile_use/utils/ui_hierarchy.py +2 -2
- {minitap_mobile_use-2.1.0.dist-info → minitap_mobile_use-2.3.0.dist-info}/METADATA +28 -8
- {minitap_mobile_use-2.1.0.dist-info → minitap_mobile_use-2.3.0.dist-info}/RECORD +36 -34
- {minitap_mobile_use-2.1.0.dist-info → minitap_mobile_use-2.3.0.dist-info}/WHEEL +0 -0
- {minitap_mobile_use-2.1.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
|
|
@@ -24,11 +24,11 @@ License: MIT License
|
|
|
24
24
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
25
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
26
|
SOFTWARE.
|
|
27
|
-
Requires-Dist: langgraph
|
|
27
|
+
Requires-Dist: langgraph>=0.6.6
|
|
28
28
|
Requires-Dist: adbutils==2.9.3
|
|
29
|
-
Requires-Dist: langchain-google-genai
|
|
30
|
-
Requires-Dist: langchain
|
|
31
|
-
Requires-Dist: langchain-core
|
|
29
|
+
Requires-Dist: langchain-google-genai>=2.1.10
|
|
30
|
+
Requires-Dist: langchain>=0.3.27
|
|
31
|
+
Requires-Dist: langchain-core>=0.3.75
|
|
32
32
|
Requires-Dist: jinja2==3.1.6
|
|
33
33
|
Requires-Dist: python-dotenv==1.1.1
|
|
34
34
|
Requires-Dist: pydantic-settings==2.10.1
|
|
@@ -42,6 +42,7 @@ Requires-Dist: fastapi==0.111.0
|
|
|
42
42
|
Requires-Dist: uvicorn[standard]==0.30.1
|
|
43
43
|
Requires-Dist: colorama>=0.4.6
|
|
44
44
|
Requires-Dist: psutil>=5.9.0
|
|
45
|
+
Requires-Dist: langchain-google-vertexai>=2.0.28
|
|
45
46
|
Requires-Dist: ruff==0.5.3 ; extra == 'dev'
|
|
46
47
|
Requires-Dist: pytest==8.4.1 ; extra == 'dev'
|
|
47
48
|
Requires-Dist: pytest-cov==5.0.0 ; extra == 'dev'
|
|
@@ -55,7 +56,7 @@ Description-Content-Type: text/markdown
|
|
|
55
56
|
|
|
56
57
|
<div align="center">
|
|
57
58
|
|
|
58
|
-

|
|
59
60
|
|
|
60
61
|
</div>
|
|
61
62
|
|
|
@@ -69,6 +70,10 @@ Description-Content-Type: text/markdown
|
|
|
69
70
|
<a href="https://x.com/minitap_ai?t=iRWtI497UhRGLeCKYQekig&s=09"><b>Twitter / X</b></a>
|
|
70
71
|
</p>
|
|
71
72
|
|
|
73
|
+
[](https://pypi.org/project/minitap-mobile-use/)
|
|
74
|
+
[](https://www.python.org/downloads/)
|
|
75
|
+
[](https://github.com/minitap-ai/mobile-use/blob/main/LICENSE)
|
|
76
|
+
|
|
72
77
|
</div>
|
|
73
78
|
|
|
74
79
|
Mobile-use is a powerful, open-source AI agent that controls your Android or IOS device using natural language. It understands your commands and interacts with the UI to perform tasks, from sending messages to navigating complex apps.
|
|
@@ -78,7 +83,7 @@ Mobile-use is a powerful, open-source AI agent that controls your Android or IOS
|
|
|
78
83
|
## ✨ Features
|
|
79
84
|
|
|
80
85
|
- 🗣️ **Natural Language Control**: Interact with your phone using your native language.
|
|
81
|
-
- 📱 **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).
|
|
82
87
|
- 📊 **Data Scraping**: Extract information from any app and structure it into your desired format (e.g., JSON) using a natural language description.
|
|
83
88
|
- 🔧 **Extensible & Customizable**: Easily configure different LLMs to power the agents that power mobile-use.
|
|
84
89
|
|
|
@@ -107,11 +112,26 @@ Ready to automate your mobile experience? Follow these steps to get mobile-use u
|
|
|
107
112
|
|
|
108
113
|
2. **(Optional) Customize LLM Configuration:**
|
|
109
114
|
To use different models or providers, create your own LLM configuration file.
|
|
115
|
+
|
|
110
116
|
```bash
|
|
111
117
|
cp llm-config.override.template.jsonc llm-config.override.jsonc
|
|
112
118
|
```
|
|
119
|
+
|
|
113
120
|
Then, edit `llm-config.override.jsonc` to fit your needs.
|
|
114
121
|
|
|
122
|
+
You can also use local LLMs or any other openai-api compatible providers :
|
|
123
|
+
|
|
124
|
+
1. Set `OPENAI_BASE_URL` and `OPENAI_API_KEY` in your `.env`
|
|
125
|
+
2. In your `llm-config.override.jsonc`, set `openai` as the provider for the agent nodes you want, and choose a model supported by your provider.
|
|
126
|
+
|
|
127
|
+
> [!NOTE]
|
|
128
|
+
> If you want to use Google Vertex AI, you must either:
|
|
129
|
+
>
|
|
130
|
+
> - Have credentials configured for your environment (gcloud, workload identity, etc…)
|
|
131
|
+
> - Store the path to a service account JSON file as the GOOGLE_APPLICATION_CREDENTIALS environment variable
|
|
132
|
+
>
|
|
133
|
+
> More information: - [Credential types](https://cloud.google.com/docs/authentication/application-default-credentials#GAC) - [google.auth API reference](https://googleapis.dev/python/google-auth/latest/reference/google.auth.html#module-google.auth)
|
|
134
|
+
|
|
115
135
|
### Quick Launch (Docker)
|
|
116
136
|
|
|
117
137
|
> [!NOTE]
|
|
@@ -132,7 +152,7 @@ Then run in your terminal:
|
|
|
132
152
|
|
|
133
153
|
```bash
|
|
134
154
|
chmod +x mobile-use.sh
|
|
135
|
-
./mobile-use.sh \
|
|
155
|
+
bash ./mobile-use.sh \
|
|
136
156
|
"Open Gmail, find first 3 unread emails, and list their sender and subject line" \
|
|
137
157
|
--output-description "A JSON list of objects, each with 'sender' and 'subject' keys"
|
|
138
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=
|
|
7
|
-
minitap/mobile_use/agents/executor/executor.py,sha256=
|
|
6
|
+
minitap/mobile_use/agents/executor/executor.md,sha256=1a813a0b8fcb402c14ce505f3c070aca275599e39d845c4cce151a46f606e879,3124
|
|
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,29 +15,29 @@ 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
|
-
minitap/mobile_use/agents/planner/planner.md,sha256=
|
|
21
|
-
minitap/mobile_use/agents/planner/planner.py,sha256=
|
|
20
|
+
minitap/mobile_use/agents/planner/planner.md,sha256=dc13218df28b38fd2139803c9d013f0ba50899b2ae58545a3b8f3d2fd2aad734,3333
|
|
21
|
+
minitap/mobile_use/agents/planner/planner.py,sha256=cb7fa02cf5ae9e6f95646afc1c41642e5f9e58113dc17d51839f5236a33e67b7,2722
|
|
22
22
|
minitap/mobile_use/agents/planner/types.py,sha256=da551df70ae4ae574670bd8d79c4da1a82be88c24216034d6841a83d85c0c43c,1392
|
|
23
23
|
minitap/mobile_use/agents/planner/utils.py,sha256=11731d0382bf88ef77b38aaf75873486f293343cdd048372c57e626c652b4a22,1839
|
|
24
24
|
minitap/mobile_use/agents/summarizer/summarizer.py,sha256=3e1e92f9259c040487992636786f972dffe0a38d309a8c3758c9ff1aeff2f62c,1070
|
|
25
25
|
minitap/mobile_use/clients/device_hardware_client.py,sha256=9593380a7a3df32f02aa22717678c25e91367df26b1743abde9e57aec5dc2474,857
|
|
26
26
|
minitap/mobile_use/clients/ios_client.py,sha256=332bf47ac01bbd5bf6178a59eea7c7a30fed944f30907caea5388178f312d36b,1452
|
|
27
27
|
minitap/mobile_use/clients/screen_api_client.py,sha256=3615dc65d25c38b4d8dc5512f9adb3bcf69dca7a0298a472a6812f604a275c47,2019
|
|
28
|
-
minitap/mobile_use/config.py,sha256=
|
|
28
|
+
minitap/mobile_use/config.py,sha256=9a2435a69c4453275439555d6af721a0c38bf7ca7ef1916598011c54c198c812,9931
|
|
29
29
|
minitap/mobile_use/constants.py,sha256=3acd9d6ade5bc772e902b3473f3ba12ddd04e7306963ca2bae49d1132d89ba46,95
|
|
30
30
|
minitap/mobile_use/context.py,sha256=fa4e43fb580db86c2ed707b1464d8363ead57332b40ea5688e0731ad57a40558,1747
|
|
31
31
|
minitap/mobile_use/controllers/__init__.py,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
|
|
32
|
-
minitap/mobile_use/controllers/mobile_command_controller.py,sha256=
|
|
32
|
+
minitap/mobile_use/controllers/mobile_command_controller.py,sha256=eb5f31cc6f2a711cbe3908f2561e841abe2214805475f77eeed3bc45731baddc,12217
|
|
33
33
|
minitap/mobile_use/controllers/platform_specific_commands_controller.py,sha256=8b4fc30108c242da41fd998751dbfd5e6a69e2957a2dbbe5d6fc43d6b55f727e,2705
|
|
34
34
|
minitap/mobile_use/graph/graph.py,sha256=c7b412e725b096eca8f212d704c3faf91d77eea4131f1fae7af1ee39bc57cdae,4269
|
|
35
35
|
minitap/mobile_use/graph/state.py,sha256=cfe67d15833efa18b28a86293bc5c713ff8c777778b0552bb6e25fa7070534aa,3371
|
|
36
|
-
minitap/mobile_use/main.py,sha256=
|
|
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
|
-
minitap/mobile_use/sdk/builders/agent_config_builder.py,sha256=
|
|
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
|
|
42
42
|
minitap/mobile_use/sdk/builders/task_request_builder.py,sha256=9e6cf7afb68af986d6a81487179bb79d28f63047a068725d92996dbcbe753376,6857
|
|
43
43
|
minitap/mobile_use/sdk/constants.py,sha256=436ba0700c6cf37ac0c9e3995a5f5a0d54ca87af72686eb9667a2c6a96e30f68,292
|
|
@@ -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
|
-
minitap/mobile_use/sdk/utils.py,sha256=
|
|
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
|
-
minitap/mobile_use/services/llm.py,sha256=
|
|
61
|
-
minitap/mobile_use/tools/index.py,sha256=
|
|
60
|
+
minitap/mobile_use/services/llm.py,sha256=3706edcb2132709c5cb931fac86ea31908a209347b341ec7b0f1cfbb27959c66,4260
|
|
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
|
-
minitap/mobile_use/tools/mobile/swipe.py,sha256=
|
|
75
|
-
minitap/mobile_use/tools/mobile/take_screenshot.py,sha256=8762be82e0fb55549f1271a8e4c7b25040f906d21ed19f52121a616e70eb9bb0,2271
|
|
75
|
+
minitap/mobile_use/tools/mobile/swipe.py,sha256=23c31022bef827afbfe90c7f6a7d195e5bef57eb3972cd32b0d2aa054b4c6d26,5754
|
|
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/
|
|
79
|
-
minitap/mobile_use/tools/
|
|
78
|
+
minitap/mobile_use/tools/test_utils.py,sha256=efd16bd82030d782b7fa0227ed211a2a8ad616a1819252edbb64c58c340adb63,13241
|
|
79
|
+
minitap/mobile_use/tools/tool_wrapper.py,sha256=f0f27beaae25a1bcfd9b72bf994de84b2e5fba9e242d8ad18a8d1a97cd7619e4,454
|
|
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
|
|
@@ -85,12 +86,13 @@ minitap/mobile_use/utils/errors.py,sha256=6c5566484cff48ce1eb168c3cbe93d6e536545
|
|
|
85
86
|
minitap/mobile_use/utils/file.py,sha256=1ca968613452a273b23e4f58460ab39f87255b02cdb6fb8ca04f4e628b346070,315
|
|
86
87
|
minitap/mobile_use/utils/logger.py,sha256=011fe08c39b111997ec685b9f0b378761607e35ac049234b5e86c2b58f29bbe3,5633
|
|
87
88
|
minitap/mobile_use/utils/media.py,sha256=29fa7f009a0f2bd60de2a9eba4a90e6eecc91cc67c2736b753506d48ab2bf5eb,2228
|
|
88
|
-
minitap/mobile_use/utils/recorder.py,sha256=
|
|
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
|