minitap-mobile-use 2.4.0__tar.gz → 2.5.0__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.
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/PKG-INFO +1 -1
- minitap_mobile_use-2.5.0/minitap/mobile_use/sdk/examples/platform_manual_task_example.py +65 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/services/platform.py +85 -22
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/types/__init__.py +2 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/types/platform.py +5 -3
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/types/task.py +21 -3
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/pyproject.toml +1 -1
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/LICENSE +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/README.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/__init__.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/contextor/contextor.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/cortex/cortex.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/cortex/cortex.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/cortex/types.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/executor/executor.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/executor/executor.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/executor/tool_node.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/executor/utils.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/hopper/hopper.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/hopper/hopper.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/orchestrator/human.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/orchestrator/orchestrator.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/orchestrator/orchestrator.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/orchestrator/types.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/outputter/human.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/outputter/outputter.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/outputter/test_outputter.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/human.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/planner.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/planner.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/types.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/utils.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/summarizer/summarizer.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/clients/device_hardware_client.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/clients/ios_client.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/clients/screen_api_client.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/config.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/constants.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/context.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/controllers/__init__.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/controllers/mobile_command_controller.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/controllers/platform_specific_commands_controller.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/graph/graph.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/graph/state.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/main.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/__init__.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/agent.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/builders/__init__.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/builders/agent_config_builder.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/builders/index.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/builders/task_request_builder.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/constants.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/examples/README.md +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/examples/__init__.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/examples/platform_minimal_example.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/examples/simple_photo_organizer.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/examples/smart_notification_assistant.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/types/agent.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/types/exceptions.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/utils.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/servers/config.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/servers/device_hardware_bridge.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/servers/device_screen_api.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/servers/start_servers.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/servers/stop_servers.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/servers/utils.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/services/accessibility.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/services/llm.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/index.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/back.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/clear_text.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/erase_one_char.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/glimpse_screen.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/input_text.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/launch_app.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/long_press_on.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/open_link.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/press_key.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/stop_app.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/swipe.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/tap.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/wait_for_animation_to_end.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/test_utils.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/tool_wrapper.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/types.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/utils.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/cli_helpers.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/cli_selection.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/conversations.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/decorators.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/errors.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/file.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/logger.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/media.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/recorder.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/requests_utils.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/shell_utils.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/test_ui_hierarchy.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/time.py +0 -0
- {minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/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.
|
|
3
|
+
Version: 2.5.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
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Platform Usage - Manual Task Creation Example
|
|
3
|
+
|
|
4
|
+
This example demonstrates how to use the mobile-use SDK with manual task creation:
|
|
5
|
+
- Agent with minitap_api_key
|
|
6
|
+
- PlatformTaskRequest with ManualTaskConfig instead of task_id
|
|
7
|
+
- Task configuration provided directly in code (goal, output_description)
|
|
8
|
+
- No need to pre-create task in platform UI
|
|
9
|
+
|
|
10
|
+
Platform Model:
|
|
11
|
+
- API key provides authentication and agent configuration
|
|
12
|
+
- ManualTaskConfig creates task on-the-fly with:
|
|
13
|
+
- max_steps: 400 (fixed)
|
|
14
|
+
- enable_remote_tracing: True (fixed)
|
|
15
|
+
- profile: "default" (fixed)
|
|
16
|
+
- goal: provided by you
|
|
17
|
+
- output_description: provided by you (optional)
|
|
18
|
+
|
|
19
|
+
Run:
|
|
20
|
+
- python src/mobile_use/sdk/examples/platform_manual_task_example.py
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import asyncio
|
|
24
|
+
|
|
25
|
+
from minitap.mobile_use.sdk import Agent
|
|
26
|
+
from minitap.mobile_use.sdk.types import ManualTaskConfig, PlatformTaskRequest
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
async def main() -> None:
|
|
30
|
+
"""
|
|
31
|
+
Main execution function demonstrating manual task creation pattern.
|
|
32
|
+
|
|
33
|
+
Visit https://platform.minitap.ai to get your API key.
|
|
34
|
+
Set MINITAP_API_KEY and MINITAP_API_BASE_URL environment variables.
|
|
35
|
+
"""
|
|
36
|
+
agent = Agent()
|
|
37
|
+
agent.init()
|
|
38
|
+
|
|
39
|
+
# Example 1: Simple manual task
|
|
40
|
+
result = await agent.run_task(
|
|
41
|
+
request=PlatformTaskRequest(
|
|
42
|
+
task=ManualTaskConfig(
|
|
43
|
+
goal="Open the settings app and tell me the battery level",
|
|
44
|
+
),
|
|
45
|
+
profile="default", # Optional, defaults to "default"
|
|
46
|
+
)
|
|
47
|
+
)
|
|
48
|
+
print("Result 1:", result)
|
|
49
|
+
|
|
50
|
+
# Example 2: Manual task with output description
|
|
51
|
+
result = await agent.run_task(
|
|
52
|
+
request=PlatformTaskRequest(
|
|
53
|
+
task=ManualTaskConfig(
|
|
54
|
+
goal="Find the first 3 unread emails in Gmail",
|
|
55
|
+
output_description="A JSON array with sender and subject for each email",
|
|
56
|
+
),
|
|
57
|
+
)
|
|
58
|
+
)
|
|
59
|
+
print("Result 2:", result)
|
|
60
|
+
|
|
61
|
+
agent.clean()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
if __name__ == "__main__":
|
|
65
|
+
asyncio.run(main())
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/services/platform.py
RENAMED
|
@@ -23,6 +23,7 @@ from minitap.mobile_use.sdk.types.platform import (
|
|
|
23
23
|
)
|
|
24
24
|
from minitap.mobile_use.sdk.types.task import (
|
|
25
25
|
AgentProfile,
|
|
26
|
+
ManualTaskConfig,
|
|
26
27
|
PlatformTaskInfo,
|
|
27
28
|
PlatformTaskRequest,
|
|
28
29
|
TaskRequest,
|
|
@@ -59,28 +60,61 @@ class PlatformService:
|
|
|
59
60
|
|
|
60
61
|
async def create_task_run(self, request: PlatformTaskRequest) -> PlatformTaskInfo:
|
|
61
62
|
try:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
63
|
+
# Check if task is a string (fetch from platform) or ManualTaskConfig (create manually)
|
|
64
|
+
if isinstance(request.task, str):
|
|
65
|
+
# Fetch task from platform
|
|
66
|
+
logger.info(f"Getting task: {request.task}")
|
|
67
|
+
response = await self._client.get(url=f"v1/tasks/{request.task}")
|
|
68
|
+
response.raise_for_status()
|
|
69
|
+
task_data = response.json()
|
|
70
|
+
task = TaskResponse(**task_data)
|
|
71
|
+
|
|
72
|
+
profile, agent_profile = await self._get_profile(
|
|
73
|
+
profile_name=request.profile or DEFAULT_PROFILE,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
task_request = TaskRequest(
|
|
77
|
+
# Remote configuration
|
|
78
|
+
max_steps=task.options.max_steps,
|
|
79
|
+
goal=task.input_prompt,
|
|
80
|
+
output_description=task.output_description,
|
|
81
|
+
enable_remote_tracing=task.options.enable_tracing,
|
|
82
|
+
profile=profile.name,
|
|
83
|
+
# Local configuration
|
|
84
|
+
record_trace=request.record_trace,
|
|
85
|
+
trace_path=request.trace_path,
|
|
86
|
+
llm_output_path=request.llm_output_path,
|
|
87
|
+
thoughts_output_path=request.thoughts_output_path,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
task_run = await self._create_task_run(task=task, profile=profile)
|
|
91
|
+
else:
|
|
92
|
+
# Create task manually from ManualTaskConfig
|
|
93
|
+
logger.info(f"Creating manual task with goal: {request.task.goal}")
|
|
94
|
+
|
|
95
|
+
profile, agent_profile = await self._get_profile(
|
|
96
|
+
profile_name=request.profile or DEFAULT_PROFILE,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
task_request = TaskRequest(
|
|
100
|
+
# Manual configuration
|
|
101
|
+
max_steps=400,
|
|
102
|
+
goal=request.task.goal,
|
|
103
|
+
output_description=request.task.output_description,
|
|
104
|
+
enable_remote_tracing=True,
|
|
105
|
+
profile=DEFAULT_PROFILE,
|
|
106
|
+
# Local configuration
|
|
107
|
+
record_trace=request.record_trace,
|
|
108
|
+
trace_path=request.trace_path,
|
|
109
|
+
llm_output_path=request.llm_output_path,
|
|
110
|
+
thoughts_output_path=request.thoughts_output_path,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
task_run = await self._create_manual_task_run(
|
|
114
|
+
manual_config=request.task,
|
|
115
|
+
profile=profile,
|
|
116
|
+
)
|
|
117
|
+
|
|
84
118
|
return PlatformTaskInfo(
|
|
85
119
|
task_request=task_request,
|
|
86
120
|
llm_profile=agent_profile,
|
|
@@ -226,6 +260,35 @@ class PlatformService:
|
|
|
226
260
|
except httpx.HTTPStatusError as e:
|
|
227
261
|
raise PlatformServiceError(message=f"Failed to create task run: {e}")
|
|
228
262
|
|
|
263
|
+
async def _create_manual_task_run(
|
|
264
|
+
self,
|
|
265
|
+
manual_config: ManualTaskConfig,
|
|
266
|
+
profile: LLMProfileResponse,
|
|
267
|
+
) -> TaskRunResponse:
|
|
268
|
+
"""
|
|
269
|
+
Create an orphan task run from a manual task configuration.
|
|
270
|
+
This creates a task run without a pre-existing task using the /orphan endpoint.
|
|
271
|
+
"""
|
|
272
|
+
try:
|
|
273
|
+
logger.info(f"Creating orphan task run with goal: {manual_config.goal}")
|
|
274
|
+
|
|
275
|
+
# Create an orphan task run directly
|
|
276
|
+
orphan_payload = {
|
|
277
|
+
"inputPrompt": manual_config.goal,
|
|
278
|
+
"outputDescription": manual_config.output_description,
|
|
279
|
+
"llmProfileId": profile.id,
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
response = await self._client.post(url="v1/task-runs/orphan", json=orphan_payload)
|
|
283
|
+
response.raise_for_status()
|
|
284
|
+
task_run_data = response.json()
|
|
285
|
+
return TaskRunResponse(**task_run_data)
|
|
286
|
+
|
|
287
|
+
except ValidationError as e:
|
|
288
|
+
raise PlatformServiceError(message=f"API response validation error: {e}")
|
|
289
|
+
except httpx.HTTPStatusError as e:
|
|
290
|
+
raise PlatformServiceError(message=f"Failed to create orphan task run: {e}")
|
|
291
|
+
|
|
229
292
|
async def _get_profile(self, profile_name: str) -> tuple[LLMProfileResponse, AgentProfile]:
|
|
230
293
|
try:
|
|
231
294
|
logger.info(f"Getting agent profile: {profile_name}")
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/types/__init__.py
RENAMED
|
@@ -19,6 +19,7 @@ from minitap.mobile_use.sdk.types.exceptions import (
|
|
|
19
19
|
)
|
|
20
20
|
from minitap.mobile_use.sdk.types.task import (
|
|
21
21
|
AgentProfile,
|
|
22
|
+
ManualTaskConfig,
|
|
22
23
|
PlatformTaskRequest,
|
|
23
24
|
Task,
|
|
24
25
|
TaskRequest,
|
|
@@ -33,6 +34,7 @@ __all__ = [
|
|
|
33
34
|
"AgentProfile",
|
|
34
35
|
"ServerConfig",
|
|
35
36
|
"TaskRequest",
|
|
37
|
+
"ManualTaskConfig",
|
|
36
38
|
"PlatformTaskRequest",
|
|
37
39
|
"TaskResult",
|
|
38
40
|
"TaskRequestCommon",
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/types/platform.py
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
from datetime import datetime
|
|
1
2
|
from typing import Annotated, Any, Literal
|
|
3
|
+
|
|
2
4
|
from pydantic import BaseModel, ConfigDict, Field, PlainSerializer
|
|
3
5
|
from pydantic.v1.utils import to_lower_camel
|
|
4
|
-
from datetime import datetime
|
|
5
|
-
|
|
6
6
|
|
|
7
7
|
TaskRunStatus = Literal["pending", "running", "completed", "failed", "cancelled"]
|
|
8
8
|
|
|
@@ -77,7 +77,9 @@ class TaskRunResponse(BaseApiModel):
|
|
|
77
77
|
"""Response model for a single task run."""
|
|
78
78
|
|
|
79
79
|
id: str = Field(..., description="Unique identifier for the task run")
|
|
80
|
-
task: TaskResponse = Field(
|
|
80
|
+
task: TaskResponse | None = Field(
|
|
81
|
+
..., description="ID of the task this run is for or None if manually created"
|
|
82
|
+
)
|
|
81
83
|
llm_profile: LLMProfileResponse = Field(..., description="LLM profile ID used for this run")
|
|
82
84
|
status: TaskRunStatus = Field(..., description="Current status of the task run")
|
|
83
85
|
input_prompt: str = Field(..., description="Input prompt for this task run")
|
|
@@ -105,18 +105,32 @@ class TaskRequest[TOutput](TaskRequestCommon):
|
|
|
105
105
|
enable_remote_tracing: bool = False
|
|
106
106
|
|
|
107
107
|
|
|
108
|
+
class ManualTaskConfig(BaseModel):
|
|
109
|
+
"""
|
|
110
|
+
Configuration for manually creating a task without fetching from the platform.
|
|
111
|
+
|
|
112
|
+
Attributes:
|
|
113
|
+
goal: Natural language description of the goal to achieve
|
|
114
|
+
output_description: Optional natural language description of expected output format
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
goal: str
|
|
118
|
+
output_description: str | None = None
|
|
119
|
+
|
|
120
|
+
|
|
108
121
|
class PlatformTaskRequest[TOutput](TaskRequestBase):
|
|
109
122
|
"""
|
|
110
123
|
Minitap-specific task request for SDK usage via the gateway platform.
|
|
111
124
|
|
|
112
125
|
Attributes:
|
|
113
|
-
task:
|
|
126
|
+
task: Either a task name to fetch from the platform, or a
|
|
127
|
+
ManualTaskConfig to create manually
|
|
114
128
|
profile: Optional profile name specified by the user on the platform
|
|
115
129
|
api_key: Optional API key to authenticate with the platform
|
|
116
130
|
(overrides MINITAP_API_KEY env variable)
|
|
117
131
|
"""
|
|
118
132
|
|
|
119
|
-
task: str
|
|
133
|
+
task: str | ManualTaskConfig
|
|
120
134
|
profile: str | None = None
|
|
121
135
|
api_key: str | None = None
|
|
122
136
|
|
|
@@ -214,7 +228,11 @@ class Task(BaseModel):
|
|
|
214
228
|
|
|
215
229
|
def get_name(self) -> str:
|
|
216
230
|
if isinstance(self.request, PlatformTaskRequest):
|
|
217
|
-
|
|
231
|
+
if isinstance(self.request.task, str):
|
|
232
|
+
return self.request.task
|
|
233
|
+
else:
|
|
234
|
+
# ManualTaskConfig - use first 50 chars of goal
|
|
235
|
+
return f"Manual: {self.request.task.goal[:50]}"
|
|
218
236
|
return self.request.task_name or self.id
|
|
219
237
|
|
|
220
238
|
async def set_status(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "minitap-mobile-use"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.5.0"
|
|
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" }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/cortex/cortex.md
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/cortex/cortex.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/cortex/types.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/executor/executor.md
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/executor/executor.py
RENAMED
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/executor/utils.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/hopper/hopper.md
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/hopper/hopper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/outputter/human.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/human.md
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/planner.md
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/planner.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/types.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/agents/planner/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/clients/ios_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/controllers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/builders/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/builders/index.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/examples/README.md
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/examples/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/sdk/types/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/servers/start_servers.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/servers/stop_servers.py
RENAMED
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/services/accessibility.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/back.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/clear_text.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/input_text.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/launch_app.py
RENAMED
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/open_link.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/press_key.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/stop_app.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/swipe.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/mobile/tap.py
RENAMED
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/test_utils.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/tools/tool_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/cli_helpers.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/cli_selection.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/conversations.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/decorators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/requests_utils.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/shell_utils.py
RENAMED
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/test_ui_hierarchy.py
RENAMED
|
File without changes
|
|
File without changes
|
{minitap_mobile_use-2.4.0 → minitap_mobile_use-2.5.0}/minitap/mobile_use/utils/ui_hierarchy.py
RENAMED
|
File without changes
|