diff --git a/.dockerignore b/.dockerignore index 7ac17eb6..e3952e45 100644 --- a/.dockerignore +++ b/.dockerignore @@ -32,7 +32,7 @@ build/ assets/ *.Dockerfile *.dockerignore -minitap.ps1 -minitap.sh +mobile-use.ps1 +mobile-use.sh llm-config.override.jsonc docker-compose.yml diff --git a/.env.example b/.env.example index 6101938a..6fb735dc 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ -LLM_PROVIDER="openai" # openai, google, openrouter, xai -LLM_MODEL="o3" # o3, gemini-2.5-pro.. Any model supported by the provider - -OPENAI_API_KEY="..." GOOGLE_API_KEY="..." -XAI_API_KEY="..." -OPEN_ROUTER_API_KEY="..." \ No newline at end of file +OPENAI_API_KEY='...' # At least the openai api key is required +XAI_API_KEY='...' +OPEN_ROUTER_API_KEY='..' + +EVENTS_OUTPUT_PATH="..." +RESULTS_OUTPUT_PATH="..." diff --git a/.gitignore b/.gitignore index ebff6ff3..6471d650 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ .env __pycache__ -**/minitap.egg-info +**/mobile-use.egg-info .vscode/settings.json .venv/ diff --git a/Dockerfile b/Dockerfile index 4536e446..fe86bd2f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,11 +44,11 @@ RUN apt-get update && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Use non-root user -RUN useradd -m -s /bin/bash --create-home minitap && \ - chown -R minitap:minitap /opt/ && \ - mkdir -p /home/minitap/.android && \ - chown -R minitap:minitap /home/minitap/.android -USER minitap +RUN useradd -m -s /bin/bash --create-home mobile-use && \ + chown -R mobile-use:mobile-use /opt/ && \ + mkdir -p /home/mobile-use/.android && \ + chown -R mobile-use:mobile-use /home/mobile-use/.android +USER mobile-use # Download & install Maestro RUN mkdir -p /opt/maestro && \ @@ -66,5 +66,5 @@ COPY --from=builder --chown=python:python /python /python COPY --from=builder --chown=app:app /app /app ENV PATH="/app/.venv/bin:$PATH" -COPY --chown=minitap:minitap docker-entrypoint.sh /app/docker-entrypoint.sh +COPY --chown=mobile-use:mobile-use docker-entrypoint.sh /app/docker-entrypoint.sh ENTRYPOINT ["/app/docker-entrypoint.sh"] diff --git a/README.md b/README.md index e3330fef..7cfa2d86 100644 --- a/README.md +++ b/README.md @@ -57,8 +57,7 @@ Then run in your terminal: 1. For Linux/macOS: ```bash -# At some point, Maestro will ask you `Maestro CLI would like to collect anonymous usage data to improve the product.`. It's up to you whether you accept (i.e enter 'Y') or not (i.e. enter 'n'). -minitap.sh \ +mobile-use.sh \ "Open Gmail, find first 3 unread emails, and list their sender and subject line" \ --output-description "A JSON list of objects, each with 'sender' and 'subject' keys" ``` @@ -66,12 +65,15 @@ minitap.sh \ 2. For Windows (inside a Powershell terminal): ```powershell -# At some point, Maestro will ask you `Maestro CLI would like to collect anonymous usage data to improve the product.`. It's up to you whether you accept (i.e enter 'Y') or not (i.e. enter 'n'). -powershell.exe -ExecutionPolicy Bypass -File minitap.ps1 ` +powershell.exe -ExecutionPolicy Bypass -File mobile-use.ps1 ` "Open Gmail, find first 3 unread emails, and list their sender and subject line" ` --output-description "A JSON list of objects, each with 'sender' and 'subject' keys" ``` +> [!IMPORTANT] +> At some point, Maestro will ask you `Maestro CLI would like to collect anonymous usage data to improve the product.` +> It's up to you whether you accept (i.e enter 'Y') or not (i.e. enter 'n'). + > [!NOTE] > If using your own device, make sure to accept the ADB-related connection requests that will pop up on your device. > Similarly, Maestro will need to install its APK on your device, which will also require you to accept the installation request. @@ -156,7 +158,7 @@ To run mobile-use, simply pass your command as an argument. **Example 1: Basic Command** ```bash -python ./src/minitap/main.py "Go to settings and tell me my current battery level" +python ./src/mobile_use/main.py "Go to settings and tell me my current battery level" ``` **Example 2: Data Scraping** @@ -164,7 +166,7 @@ python ./src/minitap/main.py "Go to settings and tell me my current battery leve Extract specific information and get it back in a structured format. For instance, to get a list of your unread emails: ```bash -python ./src/minitap/main.py \ +python ./src/mobile_use/main.py \ "Open Gmail, find all unread emails, and list their sender and subject line" \ --output-description "A JSON list of objects, each with 'sender' and 'subject' keys" ``` diff --git a/assets/maestro/Dockerfile b/assets/maestro/Dockerfile index 9b1f5939..17447a6b 100644 --- a/assets/maestro/Dockerfile +++ b/assets/maestro/Dockerfile @@ -8,11 +8,11 @@ RUN apt-get update && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Use non-root user -RUN useradd -m -s /bin/bash --create-home minitap && \ - chown -R minitap:minitap /opt/ && \ - mkdir -p /home/minitap/.android && \ - chown -R minitap:minitap /home/minitap/.android -USER minitap +RUN useradd -m -s /bin/bash --create-home mobile-use && \ + chown -R mobile-use:mobile-use /opt/ && \ + mkdir -p /home/mobile-use/.android && \ + chown -R mobile-use:mobile-use /home/mobile-use/.android +USER mobile-use # Download & install Maestro RUN mkdir -p /opt/maestro && \ @@ -21,5 +21,5 @@ RUN mkdir -p /opt/maestro && \ rm /tmp/${MAESTRO_VERSION} ENV PATH="/opt/maestro/bin:${PATH}" -COPY --chown=minitap:minitap docker-entrypoint.sh /docker-entrypoint.sh +COPY --chown=mobile-use:mobile-use docker-entrypoint.sh /docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index fe0aac1f..93039367 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: mobile-use-full-ip: container_name: mobile-use-full - user: "minitap:minitap" + user: "mobile-use:mobile-use" restart: no build: context: . @@ -10,15 +10,15 @@ services: - .env environment: ADB_CONNECT_ADDR: "${ADB_CONNECT_ADDR}" - RESULTS_OUTPUT_PATH: "/home/minitap/results.txt" - EVENTS_OUTPUT_PATH: "/home/minitap/events.json" + RESULTS_OUTPUT_PATH: "/home/mobile-use/results.txt" + EVENTS_OUTPUT_PATH: "/home/mobile-use/events.json" volumes: - - mobile-use-adb-keys:/home/minitap/.android + - mobile-use-adb-keys:/home/mobile-use/.android - ./llm-config.override.jsonc:/app/llm-config.override.jsonc mobile-use-ip: container_name: mobile-use - user: "minitap:minitap" + user: "mobile-use:mobile-use" restart: no build: context: . @@ -29,12 +29,12 @@ services: ADB_CONNECT_ADDR: "${ADB_CONNECT_ADDR}" DEVICE_HARDWARE_BRIDGE_BASE_URL: "http://maestro:9999" DEVICE_SCREEN_API_BASE_URL: "http://screen-api:9998" - RESULTS_OUTPUT_PATH: "/home/minitap/results.txt" - EVENTS_OUTPUT_PATH: "/home/minitap/events.json" + RESULTS_OUTPUT_PATH: "/home/mobile-use/results.txt" + EVENTS_OUTPUT_PATH: "/home/mobile-use/events.json" MOBILE_USE_HEALTH_RETRIES: "150" MOBILE_USE_HEALTH_DELAY: "2" volumes: - - mobile-use-adb-keys:/home/minitap/.android + - mobile-use-adb-keys:/home/mobile-use/.android - ./llm-config.override.jsonc:/app/llm-config.override.jsonc depends_on: - maestro @@ -42,7 +42,7 @@ services: maestro: container_name: maestro - user: "minitap:minitap" + user: "mobile-use:mobile-use" restart: unless-stopped build: context: ./assets/maestro @@ -50,25 +50,25 @@ services: environment: ADB_CONNECT_ADDR: "${ADB_CONNECT_ADDR}" volumes: - - maestro-adb-keys:/home/minitap/.android + - maestro-adb-keys:/home/mobile-use/.android ports: - "9999:9999" screen-api: container_name: screen-api - user: "minitap:minitap" + user: "mobile-use:mobile-use" restart: unless-stopped build: context: . dockerfile: slim.Dockerfile - entrypoint: ["python", "/app/src/minitap/servers/start_servers.py"] + entrypoint: ["python", "/app/src/mobile_use/servers/start_servers.py"] command: ["--only", "screen_api"] environment: DEVICE_HARDWARE_BRIDGE_BASE_URL: "http://maestro:9999" DEVICE_SCREEN_API_PORT: "9998" depends_on: - maestro - + volumes: mobile-use-adb-keys: maestro-adb-keys: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 836ae0f1..8becc2f2 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -21,4 +21,4 @@ while true; do sleep 2 done -minitap "$@" +mobile-use "$@" diff --git a/llm-config.defaults.jsonc b/llm-config.defaults.jsonc index f6db19f2..2bc0f312 100644 --- a/llm-config.defaults.jsonc +++ b/llm-config.defaults.jsonc @@ -3,11 +3,11 @@ "default": { "planner": { "provider": "openai", - "model": "gpt-5-mini" + "model": "gpt-5-nano" }, "orchestrator": { "provider": "openai", - "model": "gpt-5-mini" + "model": "gpt-5-nano" }, "cortex": { "provider": "openai", @@ -15,27 +15,27 @@ }, "executor": { "provider": "openai", - "model": "gpt-5" + "model": "gpt-5-nano" } }, // This is the config we recommend. // To use it, copy it to llm.override.jsonc, following llm.override.template.jsonc. "recommended": { "planner": { - "provider": "google", - "model": "gemini-2.5-pro" + "provider": "openrouter", + "model": "meta-llama/llama-4-scout" }, "orchestrator": { - "provider": "google", - "model": "gemini-2.5-pro" + "provider": "openrouter", + "model": "meta-llama/llama-4-scout" }, "cortex": { - "provider": "openai", - "model": "gpt-5" + "provider": "google", + "model": "gemini-2.5-pro" }, "executor": { "provider": "openai", - "model": "gpt-5" + "model": "gpt-5-nano" } } } diff --git a/minitap.ps1 b/mobile-use.ps1 similarity index 100% rename from minitap.ps1 rename to mobile-use.ps1 diff --git a/minitap.sh b/mobile-use.sh old mode 100755 new mode 100644 similarity index 100% rename from minitap.sh rename to mobile-use.sh diff --git a/pyproject.toml b/pyproject.toml index 74e1a02b..f37b4335 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "minitap" +name = "mobile-use" version = "0.0.1" description = "AI-powered multi-agent system that automates real Android and iOS devices through low-level control using LangGraph." readme = "README.md" @@ -42,11 +42,11 @@ dev = [ ] [project.scripts] -minitap = "minitap.main:cli" +mobile-use = "mobile_use.main:cli" [project.urls] "Homepage" = "https://minitap.ai/" -"Source" = "https://github.com/minitap-ai/minitap" +"Source" = "https://github.com/minitap-ai/mobile-use" [build-system] requires = ["uv_build>=0.7.20,<0.8.0"] diff --git a/requirements.txt b/requirements.txt index a7260c78..87664567 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ # This file was autogenerated by uv via the following command: # uv pip compile pyproject.toml -o requirements.txt adbutils==2.9.3 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) annotated-types==0.7.0 # via pydantic ansicon==1.89.0 @@ -36,7 +36,7 @@ click==8.2.1 # uvicorn colorama==0.4.6 # via - # minitap (pyproject.toml) + # mobile-use (pyproject.toml) # click # tqdm # uvicorn @@ -53,7 +53,7 @@ editor==1.6.6 email-validator==2.2.0 # via fastapi fastapi==0.111.0 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) fastapi-cli==0.0.8 # via fastapi filetype==1.2.0 @@ -102,10 +102,10 @@ idna==3.10 # httpx # requests inquirer==3.4.0 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) jinja2==3.1.6 # via - # minitap (pyproject.toml) + # mobile-use (pyproject.toml) # fastapi jinxed==1.3.0 # via blessed @@ -120,12 +120,12 @@ jsonschema==4.24.0 jsonschema-specifications==2025.4.1 # via jsonschema langchain==0.3.26 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) langchain-cerebras==0.5.0 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) langchain-core==0.3.66 # via - # minitap (pyproject.toml) + # mobile-use (pyproject.toml) # langchain # langchain-cerebras # langchain-google-genai @@ -136,17 +136,17 @@ langchain-core==0.3.66 # langgraph-checkpoint # langgraph-prebuilt langchain-google-genai==2.1.5 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) langchain-mcp-adapters==0.1.7 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) langchain-openai==0.3.27 # via - # minitap (pyproject.toml) + # mobile-use (pyproject.toml) # langchain-cerebras langchain-text-splitters==0.3.8 # via langchain langgraph==0.5.0 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) langgraph-checkpoint==2.1.0 # via # langgraph @@ -195,7 +195,7 @@ protobuf==6.31.1 # grpcio-status # proto-plus psutil==7.0.0 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) pyasn1==0.6.1 # via # pyasn1-modules @@ -217,13 +217,13 @@ pydantic-core==2.33.2 # via pydantic pydantic-settings==2.10.1 # via - # minitap (pyproject.toml) + # mobile-use (pyproject.toml) # mcp pygments==2.19.2 # via rich python-dotenv==1.1.1 # via - # minitap (pyproject.toml) + # mobile-use (pyproject.toml) # pydantic-settings # uvicorn python-multipart==0.0.20 @@ -280,7 +280,7 @@ sqlalchemy==2.0.41 sse-starlette==2.3.6 # via mcp sseclient-py==1.8.0 - # via minitap (pyproject.toml) + # via mobile-use (pyproject.toml) starlette==0.37.2 # via # fastapi @@ -293,7 +293,7 @@ tqdm==4.67.1 # via openai typer==0.16.0 # via - # minitap (pyproject.toml) + # mobile-use (pyproject.toml) # fastapi-cli typing-extensions==4.14.0 # via @@ -318,7 +318,7 @@ urllib3==2.5.0 # via requests uvicorn==0.30.1 # via - # minitap (pyproject.toml) + # mobile-use (pyproject.toml) # fastapi # fastapi-cli # mcp diff --git a/slim.Dockerfile b/slim.Dockerfile index 19f3fca4..dfd77da0 100644 --- a/slim.Dockerfile +++ b/slim.Dockerfile @@ -37,10 +37,10 @@ RUN apt-get update && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Use non-root user -RUN useradd -m -s /bin/bash --create-home minitap && \ - mkdir -p /home/minitap/.android && \ - chown -R minitap:minitap /home/minitap/.android -USER minitap +RUN useradd -m -s /bin/bash --create-home mobile-use && \ + mkdir -p /home/mobile-use/.android && \ + chown -R mobile-use:mobile-use /home/mobile-use/.android +USER mobile-use WORKDIR /app @@ -51,5 +51,5 @@ COPY --from=builder --chown=python:python /python /python COPY --from=builder --chown=app:app /app /app ENV PATH="/app/.venv/bin:$PATH" -COPY --chown=minitap:minitap docker-entrypoint.sh /app/docker-entrypoint.sh +COPY --chown=mobile-use:mobile-use docker-entrypoint.sh /app/docker-entrypoint.sh ENTRYPOINT ["/app/docker-entrypoint.sh"] diff --git a/src/minitap/tools/index.py b/src/minitap/tools/index.py deleted file mode 100644 index 79f50730..00000000 --- a/src/minitap/tools/index.py +++ /dev/null @@ -1,50 +0,0 @@ -from minitap.tools.mobile.back import back_wrapper -from minitap.tools.mobile.copy_text_from import copy_text_from_wrapper -from minitap.tools.mobile.erase_text import erase_text_wrapper -from minitap.tools.mobile.input_text import input_text_wrapper -from minitap.tools.mobile.launch_app import launch_app_wrapper -from minitap.tools.mobile.list_packages import list_packages_wrapper -from minitap.tools.mobile.long_press_on import long_press_on_wrapper -from minitap.tools.mobile.open_link import open_link_wrapper -from minitap.tools.mobile.paste_text import paste_text_wrapper -from minitap.tools.mobile.press_key import press_key_wrapper - -# from minitap.tools.mobile.run_flow import run_flow_wrapper -from minitap.tools.mobile.stop_app import stop_app_wrapper -from minitap.tools.mobile.swipe import swipe_wrapper -from minitap.tools.mobile.take_screenshot import take_screenshot_wrapper -from minitap.tools.mobile.tap import tap_wrapper -from minitap.tools.mobile.wait_for_animation_to_end import wait_for_animation_to_end_wrapper -from minitap.tools.tool_wrapper import ToolWrapper - -EXECUTOR_WRAPPERS_TOOLS = [ - back_wrapper, - open_link_wrapper, - tap_wrapper, - long_press_on_wrapper, - swipe_wrapper, - take_screenshot_wrapper, - # run_flow_wrapper, # To decomment when subflow is implemented - copy_text_from_wrapper, - input_text_wrapper, - list_packages_wrapper, - launch_app_wrapper, - stop_app_wrapper, - paste_text_wrapper, - erase_text_wrapper, - press_key_wrapper, - wait_for_animation_to_end_wrapper, -] - - -def get_tools_from_wrappers(wrappers: list[ToolWrapper]): - """Get the tools from the wrappers.""" - return [wrapper.tool_fn for wrapper in wrappers] - - -def get_tool_wrapper_from_name(name: str) -> ToolWrapper | None: - """Get the tool wrapper from the name.""" - for wrapper in EXECUTOR_WRAPPERS_TOOLS: - if wrapper.tool_fn.__name__ == name: - return wrapper - return None diff --git a/src/minitap/__init__.py b/src/mobile_use/__init__.py similarity index 100% rename from src/minitap/__init__.py rename to src/mobile_use/__init__.py diff --git a/src/minitap/agents/contextor/contextor.py b/src/mobile_use/agents/contextor/contextor.py similarity index 68% rename from src/minitap/agents/contextor/contextor.py rename to src/mobile_use/agents/contextor/contextor.py index e45c1ff9..b31a5089 100644 --- a/src/minitap/agents/contextor/contextor.py +++ b/src/mobile_use/agents/contextor/contextor.py @@ -1,12 +1,12 @@ -from minitap.agents.executor.utils import is_last_tool_message_take_screenshot -from minitap.controllers.mobile_command_controller import get_screen_data -from minitap.controllers.platform_specific_commands_controller import ( +from mobile_use.agents.executor.utils import is_last_tool_message_take_screenshot +from mobile_use.controllers.mobile_command_controller import get_screen_data +from mobile_use.controllers.platform_specific_commands_controller import ( get_device_date, get_focused_app_info, ) -from minitap.graph.state import State -from minitap.utils.decorators import wrap_with_callbacks -from minitap.utils.logger import get_logger +from mobile_use.graph.state import State +from mobile_use.utils.decorators import wrap_with_callbacks +from mobile_use.utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/minitap/agents/cortex/cortex.md b/src/mobile_use/agents/cortex/cortex.md similarity index 100% rename from src/minitap/agents/cortex/cortex.md rename to src/mobile_use/agents/cortex/cortex.md diff --git a/src/minitap/agents/cortex/cortex.py b/src/mobile_use/agents/cortex/cortex.py similarity index 87% rename from src/minitap/agents/cortex/cortex.py rename to src/mobile_use/agents/cortex/cortex.py index e62c48ef..7fcdcec8 100644 --- a/src/minitap/agents/cortex/cortex.py +++ b/src/mobile_use/agents/cortex/cortex.py @@ -10,16 +10,15 @@ ToolMessage, ) from langgraph.graph.message import REMOVE_ALL_MESSAGES - -from minitap.agents.cortex.types import CortexOutput -from minitap.agents.planner.utils import get_current_subgoal -from minitap.config import LLM -from minitap.context import get_device_context -from minitap.graph.state import State -from minitap.services.llm import get_llm, with_fallback -from minitap.utils.conversations import get_screenshot_message_for_llm -from minitap.utils.decorators import wrap_with_callbacks -from minitap.utils.logger import get_logger +from mobile_use.agents.cortex.types import CortexOutput +from mobile_use.agents.planner.utils import get_current_subgoal +from mobile_use.config import LLM +from mobile_use.context import get_device_context +from mobile_use.graph.state import State +from mobile_use.services.llm import get_llm, with_fallback +from mobile_use.utils.conversations import get_screenshot_message_for_llm +from mobile_use.utils.decorators import wrap_with_callbacks +from mobile_use.utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/minitap/agents/cortex/types.py b/src/mobile_use/agents/cortex/types.py similarity index 100% rename from src/minitap/agents/cortex/types.py rename to src/mobile_use/agents/cortex/types.py diff --git a/src/minitap/agents/executor/executor.md b/src/mobile_use/agents/executor/executor.md similarity index 100% rename from src/minitap/agents/executor/executor.md rename to src/mobile_use/agents/executor/executor.md diff --git a/src/minitap/agents/executor/executor.py b/src/mobile_use/agents/executor/executor.py similarity index 86% rename from src/minitap/agents/executor/executor.py rename to src/mobile_use/agents/executor/executor.py index 55c8078d..ce052785 100644 --- a/src/minitap/agents/executor/executor.py +++ b/src/mobile_use/agents/executor/executor.py @@ -1,14 +1,14 @@ from pathlib import Path + from jinja2 import Template from langchain_core.messages import HumanMessage, SystemMessage - from langchain_core.messages.ai import AIMessage -from minitap.context import get_device_context -from minitap.graph.state import State -from minitap.services.llm import get_llm -from minitap.tools.index import EXECUTOR_WRAPPERS_TOOLS, get_tools_from_wrappers -from minitap.utils.decorators import wrap_with_callbacks -from minitap.utils.logger import get_logger +from mobile_use.context import get_device_context +from mobile_use.graph.state import State +from mobile_use.services.llm import get_llm +from mobile_use.tools.index import EXECUTOR_WRAPPERS_TOOLS, get_tools_from_wrappers +from mobile_use.utils.decorators import wrap_with_callbacks +from mobile_use.utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/minitap/agents/executor/executor_context_cleaner.py b/src/mobile_use/agents/executor/executor_context_cleaner.py similarity index 85% rename from src/minitap/agents/executor/executor_context_cleaner.py rename to src/mobile_use/agents/executor/executor_context_cleaner.py index 02933b5b..af84a634 100644 --- a/src/minitap/agents/executor/executor_context_cleaner.py +++ b/src/mobile_use/agents/executor/executor_context_cleaner.py @@ -1,7 +1,7 @@ from langchain_core.messages.ai import AIMessage -from minitap.graph.state import State -from minitap.utils.decorators import wrap_with_callbacks -from minitap.utils.logger import get_logger +from mobile_use.graph.state import State +from mobile_use.utils.decorators import wrap_with_callbacks +from mobile_use.utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/minitap/agents/executor/utils.py b/src/mobile_use/agents/executor/utils.py similarity index 83% rename from src/minitap/agents/executor/utils.py rename to src/mobile_use/agents/executor/utils.py index 2d6a206d..a99b2dae 100644 --- a/src/minitap/agents/executor/utils.py +++ b/src/mobile_use/agents/executor/utils.py @@ -1,6 +1,5 @@ from langchain_core.messages import BaseMessage - -from minitap.utils.conversations import is_tool_message +from mobile_use.utils.conversations import is_tool_message def is_last_tool_message_take_screenshot(messages: list[BaseMessage]) -> bool: diff --git a/src/minitap/agents/history_cleanup.py b/src/mobile_use/agents/history_cleanup.py similarity index 88% rename from src/minitap/agents/history_cleanup.py rename to src/mobile_use/agents/history_cleanup.py index 021b6e74..9f6d1477 100644 --- a/src/minitap/agents/history_cleanup.py +++ b/src/mobile_use/agents/history_cleanup.py @@ -1,12 +1,11 @@ from langchain_core.messages import ( ToolMessage, ) - -from minitap.constants import ( +from mobile_use.constants import ( EXPIRED_TOOL_MESSAGE, SCREENSHOT_LIFETIME, ) -from minitap.graph.state import State +from mobile_use.graph.state import State def history_cleanup(state: State): diff --git a/src/minitap/agents/hopper/hopper.md b/src/mobile_use/agents/hopper/hopper.md similarity index 100% rename from src/minitap/agents/hopper/hopper.md rename to src/mobile_use/agents/hopper/hopper.md diff --git a/src/minitap/agents/hopper/hopper.py b/src/mobile_use/agents/hopper/hopper.py similarity index 94% rename from src/minitap/agents/hopper/hopper.py rename to src/mobile_use/agents/hopper/hopper.py index 64877c4b..1e6afe88 100644 --- a/src/minitap/agents/hopper/hopper.py +++ b/src/mobile_use/agents/hopper/hopper.py @@ -3,11 +3,10 @@ from jinja2 import Template from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage +from mobile_use.config import LLM +from mobile_use.services.llm import get_llm from pydantic import BaseModel, Field -from minitap.config import LLM -from minitap.services.llm import get_llm - class HopperOutput(BaseModel): step: str = Field( diff --git a/src/minitap/agents/orchestrator/orchestrator.md b/src/mobile_use/agents/orchestrator/orchestrator.md similarity index 100% rename from src/minitap/agents/orchestrator/orchestrator.md rename to src/mobile_use/agents/orchestrator/orchestrator.md diff --git a/src/minitap/agents/orchestrator/orchestrator.py b/src/mobile_use/agents/orchestrator/orchestrator.py similarity index 86% rename from src/minitap/agents/orchestrator/orchestrator.py rename to src/mobile_use/agents/orchestrator/orchestrator.py index b2d208fe..f305c353 100644 --- a/src/minitap/agents/orchestrator/orchestrator.py +++ b/src/mobile_use/agents/orchestrator/orchestrator.py @@ -3,8 +3,8 @@ from jinja2 import Template from langchain_core.messages import SystemMessage -from minitap.agents.orchestrator.types import OrchestratorOutput, OrchestratorStatus -from minitap.agents.planner.utils import ( +from mobile_use.agents.orchestrator.types import OrchestratorOutput, OrchestratorStatus +from mobile_use.agents.planner.utils import ( all_completed, complete_current_subgoal, fail_current_subgoal, @@ -12,11 +12,11 @@ nothing_started, start_next_subgoal, ) -from minitap.context import get_device_context -from minitap.graph.state import State -from minitap.services.llm import get_llm -from minitap.utils.decorators import wrap_with_callbacks -from minitap.utils.logger import get_logger +from mobile_use.context import get_device_context +from mobile_use.graph.state import State +from mobile_use.services.llm import get_llm +from mobile_use.utils.decorators import wrap_with_callbacks +from mobile_use.utils.logger import get_logger logger = get_logger(__name__) @@ -54,7 +54,7 @@ async def orchestrator_node(state: State): SystemMessage(content=system_message), ] - llm = get_llm(agent_node="orchestrator", temperature=0.4) + llm = get_llm(agent_node="orchestrator", temperature=1) llm = llm.with_structured_output(OrchestratorOutput) response: OrchestratorOutput = await llm.ainvoke(messages) # type: ignore diff --git a/src/minitap/agents/orchestrator/types.py b/src/mobile_use/agents/orchestrator/types.py similarity index 100% rename from src/minitap/agents/orchestrator/types.py rename to src/mobile_use/agents/orchestrator/types.py diff --git a/src/minitap/agents/outputter/outputter.jinja b/src/mobile_use/agents/outputter/outputter.jinja similarity index 100% rename from src/minitap/agents/outputter/outputter.jinja rename to src/mobile_use/agents/outputter/outputter.jinja diff --git a/src/minitap/agents/outputter/outputter.py b/src/mobile_use/agents/outputter/outputter.py similarity index 90% rename from src/minitap/agents/outputter/outputter.py rename to src/mobile_use/agents/outputter/outputter.py index 7ad5ec2a..817e4e80 100644 --- a/src/minitap/agents/outputter/outputter.py +++ b/src/mobile_use/agents/outputter/outputter.py @@ -4,14 +4,13 @@ from jinja2 import Template from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage +from mobile_use.config import LLM, OutputConfig +from mobile_use.graph.state import State +from mobile_use.services.llm import get_llm +from mobile_use.utils.conversations import is_ai_message +from mobile_use.utils.logger import get_logger from pydantic import BaseModel -from minitap.config import LLM, OutputConfig -from minitap.graph.state import State -from minitap.services.llm import get_llm -from minitap.utils.conversations import is_ai_message -from minitap.utils.logger import get_logger - logger = get_logger(__name__) diff --git a/src/minitap/agents/outputter/test_outputter.py b/src/mobile_use/agents/outputter/test_outputter.py similarity index 94% rename from src/minitap/agents/outputter/test_outputter.py rename to src/mobile_use/agents/outputter/test_outputter.py index 7be9f27b..a343f8dd 100644 --- a/src/minitap/agents/outputter/test_outputter.py +++ b/src/mobile_use/agents/outputter/test_outputter.py @@ -1,9 +1,8 @@ +from mobile_use.agents.outputter.outputter import outputter +from mobile_use.config import OutputConfig +from mobile_use.utils.logger import get_logger from pydantic import BaseModel -from minitap.agents.outputter.outputter import outputter -from minitap.config import OutputConfig -from minitap.utils.logger import get_logger - logger = get_logger(__name__) diff --git a/src/minitap/agents/planner/planner.md b/src/mobile_use/agents/planner/planner.md similarity index 100% rename from src/minitap/agents/planner/planner.md rename to src/mobile_use/agents/planner/planner.md diff --git a/src/minitap/agents/planner/planner.py b/src/mobile_use/agents/planner/planner.py similarity index 79% rename from src/minitap/agents/planner/planner.py rename to src/mobile_use/agents/planner/planner.py index 95c13327..46cf3ceb 100644 --- a/src/minitap/agents/planner/planner.py +++ b/src/mobile_use/agents/planner/planner.py @@ -2,14 +2,13 @@ from jinja2 import Template from langchain_core.messages import SystemMessage - -from minitap.agents.planner.types import PlannerOutput, Subgoal, SubgoalStatus -from minitap.agents.planner.utils import one_of_them_is_failure -from minitap.context import get_device_context -from minitap.graph.state import State -from minitap.services.llm import get_llm -from minitap.utils.decorators import wrap_with_callbacks -from minitap.utils.logger import get_logger +from mobile_use.agents.planner.types import PlannerOutput, Subgoal, SubgoalStatus +from mobile_use.agents.planner.utils import one_of_them_is_failure +from mobile_use.context import get_device_context +from mobile_use.graph.state import State +from mobile_use.services.llm import get_llm +from mobile_use.utils.decorators import wrap_with_callbacks +from mobile_use.utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/minitap/agents/planner/types.py b/src/mobile_use/agents/planner/types.py similarity index 100% rename from src/minitap/agents/planner/types.py rename to src/mobile_use/agents/planner/types.py diff --git a/src/minitap/agents/planner/utils.py b/src/mobile_use/agents/planner/utils.py similarity index 95% rename from src/minitap/agents/planner/utils.py rename to src/mobile_use/agents/planner/utils.py index 4f29e676..9501477e 100644 --- a/src/minitap/agents/planner/utils.py +++ b/src/mobile_use/agents/planner/utils.py @@ -1,4 +1,4 @@ -from minitap.agents.planner.types import Subgoal, SubgoalStatus +from mobile_use.agents.planner.types import Subgoal, SubgoalStatus def get_current_subgoal(subgoals: list[Subgoal]) -> Subgoal | None: diff --git a/src/minitap/agents/reasoner/reasoner.md b/src/mobile_use/agents/reasoner/reasoner.md similarity index 100% rename from src/minitap/agents/reasoner/reasoner.md rename to src/mobile_use/agents/reasoner/reasoner.md diff --git a/src/minitap/agents/reasoner/reasoner.py b/src/mobile_use/agents/reasoner/reasoner.py similarity index 76% rename from src/minitap/agents/reasoner/reasoner.py rename to src/mobile_use/agents/reasoner/reasoner.py index 66cfa380..3151b507 100644 --- a/src/minitap/agents/reasoner/reasoner.py +++ b/src/mobile_use/agents/reasoner/reasoner.py @@ -1,4 +1,4 @@ -from minitap.graph.state import State +from mobile_use.graph.state import State # based on the visualizer output, it creates a perfect user message for the executor. diff --git a/src/minitap/agents/summarizer/summarizer.py b/src/mobile_use/agents/summarizer/summarizer.py similarity index 86% rename from src/minitap/agents/summarizer/summarizer.py rename to src/mobile_use/agents/summarizer/summarizer.py index 6e60c0aa..a35f8493 100644 --- a/src/minitap/agents/summarizer/summarizer.py +++ b/src/mobile_use/agents/summarizer/summarizer.py @@ -3,9 +3,8 @@ RemoveMessage, ToolMessage, ) - -from minitap.constants import MAX_MESSAGES_IN_HISTORY -from minitap.graph.state import State +from mobile_use.constants import MAX_MESSAGES_IN_HISTORY +from mobile_use.graph.state import State def summarizer_node(state: State): diff --git a/src/minitap/clients/adb_client.py b/src/mobile_use/clients/adb_client.py similarity index 100% rename from src/minitap/clients/adb_client.py rename to src/mobile_use/clients/adb_client.py diff --git a/src/minitap/clients/device_hardware_client.py b/src/mobile_use/clients/device_hardware_client.py similarity index 89% rename from src/minitap/clients/device_hardware_client.py rename to src/mobile_use/clients/device_hardware_client.py index 9feb2dd8..ed89117a 100644 --- a/src/minitap/clients/device_hardware_client.py +++ b/src/mobile_use/clients/device_hardware_client.py @@ -1,6 +1,6 @@ from urllib.parse import urljoin -from minitap.utils.requests_utils import get_session_with_curl_logging +from mobile_use.utils.requests_utils import get_session_with_curl_logging class DeviceHardwareClient: diff --git a/src/minitap/clients/ios_client.py b/src/mobile_use/clients/ios_client.py similarity index 95% rename from src/minitap/clients/ios_client.py rename to src/mobile_use/clients/ios_client.py index c7a8400a..4eeb69a5 100644 --- a/src/minitap/clients/ios_client.py +++ b/src/mobile_use/clients/ios_client.py @@ -1,7 +1,7 @@ import json import platform -from minitap.utils.shell_utils import run_shell_command_on_host +from mobile_use.utils.shell_utils import run_shell_command_on_host def get_ios_devices() -> tuple[bool, list[str], str]: diff --git a/src/minitap/clients/screen_api_client.py b/src/mobile_use/clients/screen_api_client.py similarity index 93% rename from src/minitap/clients/screen_api_client.py rename to src/mobile_use/clients/screen_api_client.py index 6f517d04..899eb697 100644 --- a/src/minitap/clients/screen_api_client.py +++ b/src/mobile_use/clients/screen_api_client.py @@ -3,9 +3,8 @@ from urllib.parse import urljoin import requests - -from minitap.utils.logger import get_logger -from minitap.utils.requests_utils import get_session_with_curl_logging +from mobile_use.utils.logger import get_logger +from mobile_use.utils.requests_utils import get_session_with_curl_logging logger = get_logger(__name__) diff --git a/src/minitap/config.py b/src/mobile_use/config.py similarity index 98% rename from src/minitap/config.py rename to src/mobile_use/config.py index 347b30ca..acdb4d57 100644 --- a/src/minitap/config.py +++ b/src/mobile_use/config.py @@ -4,12 +4,11 @@ from typing import Annotated, Any, Literal, Optional, Union, cast from dotenv import load_dotenv +from mobile_use.utils.file import load_jsonc +from mobile_use.utils.logger import get_logger from pydantic import BaseModel, Field, SecretStr, ValidationError, model_validator from pydantic_settings import BaseSettings -from minitap.utils.file import load_jsonc -from minitap.utils.logger import get_logger - ### Environment Variables load_dotenv(verbose=True) diff --git a/src/minitap/constants.py b/src/mobile_use/constants.py similarity index 100% rename from src/minitap/constants.py rename to src/mobile_use/constants.py diff --git a/src/minitap/context.py b/src/mobile_use/context.py similarity index 100% rename from src/minitap/context.py rename to src/mobile_use/context.py diff --git a/src/minitap/controllers/__init__.py b/src/mobile_use/controllers/__init__.py similarity index 100% rename from src/minitap/controllers/__init__.py rename to src/mobile_use/controllers/__init__.py diff --git a/src/minitap/controllers/mobile_command_controller.py b/src/mobile_use/controllers/mobile_command_controller.py similarity index 96% rename from src/minitap/controllers/mobile_command_controller.py rename to src/mobile_use/controllers/mobile_command_controller.py index 4ebd7de2..dd57d89b 100644 --- a/src/minitap/controllers/mobile_command_controller.py +++ b/src/mobile_use/controllers/mobile_command_controller.py @@ -2,15 +2,14 @@ from typing import Literal, Optional, Union import yaml +from mobile_use.clients.device_hardware_client import get_client as get_device_hardware_client +from mobile_use.clients.screen_api_client import get_client as get_screen_api_client +from mobile_use.config import settings +from mobile_use.utils.errors import ControllerErrors +from mobile_use.utils.logger import get_logger from pydantic import BaseModel, ConfigDict, Field from requests import JSONDecodeError -from minitap.clients.device_hardware_client import get_client as get_device_hardware_client -from minitap.clients.screen_api_client import get_client as get_screen_api_client -from minitap.config import settings -from minitap.utils.errors import ControllerErrors -from minitap.utils.logger import get_logger - screen_api = get_screen_api_client(settings.DEVICE_SCREEN_API_BASE_URL) device_hardware_api = get_device_hardware_client(settings.DEVICE_HARDWARE_BRIDGE_BASE_URL) logger = get_logger(__name__) diff --git a/src/minitap/controllers/platform_specific_commands_controller.py b/src/mobile_use/controllers/platform_specific_commands_controller.py similarity index 91% rename from src/minitap/controllers/platform_specific_commands_controller.py rename to src/mobile_use/controllers/platform_specific_commands_controller.py index d41d200e..29532067 100644 --- a/src/minitap/controllers/platform_specific_commands_controller.py +++ b/src/mobile_use/controllers/platform_specific_commands_controller.py @@ -2,10 +2,9 @@ from typing import Optional from adbutils import AdbDevice - -from minitap.clients.adb_client import adb -from minitap.context import get_device_context -from minitap.utils.shell_utils import run_shell_command_on_host +from mobile_use.clients.adb_client import adb +from mobile_use.context import get_device_context +from mobile_use.utils.shell_utils import run_shell_command_on_host def get_adb_device() -> AdbDevice: diff --git a/src/minitap/graph/graph.py b/src/mobile_use/graph/graph.py similarity index 83% rename from src/minitap/graph/graph.py rename to src/mobile_use/graph/graph.py index de4c7578..1175caf0 100644 --- a/src/minitap/graph/graph.py +++ b/src/mobile_use/graph/graph.py @@ -7,18 +7,21 @@ from langgraph.graph import StateGraph from langgraph.graph.state import CompiledStateGraph from langgraph.prebuilt import ToolNode - -from minitap.agents.contextor.contextor import contextor_node -from minitap.agents.cortex.cortex import cortex_node -from minitap.agents.executor.executor import executor_node -from minitap.agents.executor.executor_context_cleaner import executor_context_cleaner_node -from minitap.agents.orchestrator.orchestrator import orchestrator_node -from minitap.agents.planner.planner import planner_node -from minitap.agents.planner.utils import all_completed, get_current_subgoal, one_of_them_is_failure -from minitap.agents.summarizer.summarizer import summarizer_node -from minitap.graph.state import State -from minitap.tools.index import EXECUTOR_WRAPPERS_TOOLS, get_tools_from_wrappers -from minitap.utils.logger import get_logger +from mobile_use.agents.contextor.contextor import contextor_node +from mobile_use.agents.cortex.cortex import cortex_node +from mobile_use.agents.executor.executor import executor_node +from mobile_use.agents.executor.executor_context_cleaner import executor_context_cleaner_node +from mobile_use.agents.orchestrator.orchestrator import orchestrator_node +from mobile_use.agents.planner.planner import planner_node +from mobile_use.agents.planner.utils import ( + all_completed, + get_current_subgoal, + one_of_them_is_failure, +) +from mobile_use.agents.summarizer.summarizer import summarizer_node +from mobile_use.graph.state import State +from mobile_use.tools.index import EXECUTOR_WRAPPERS_TOOLS, get_tools_from_wrappers +from mobile_use.utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/minitap/graph/state.py b/src/mobile_use/graph/state.py similarity index 90% rename from src/minitap/graph/state.py rename to src/mobile_use/graph/state.py index 9cbe5e49..4fae8858 100644 --- a/src/minitap/graph/state.py +++ b/src/mobile_use/graph/state.py @@ -3,13 +3,12 @@ from langchain_core.messages import AIMessage, AnyMessage from langgraph.graph import add_messages from langgraph.prebuilt.chat_agent_executor import AgentStatePydantic +from mobile_use.agents.planner.types import Subgoal +from mobile_use.context import is_execution_setup_set +from mobile_use.utils.logger import get_logger +from mobile_use.utils.recorder import record_interaction from typing_extensions import Annotated, Optional -from minitap.agents.planner.types import Subgoal -from minitap.context import is_execution_setup_set -from minitap.utils.logger import get_logger -from minitap.utils.recorder import record_interaction - logger = get_logger(__name__) diff --git a/src/minitap/llm_config_context.py b/src/mobile_use/llm_config_context.py similarity index 89% rename from src/minitap/llm_config_context.py rename to src/mobile_use/llm_config_context.py index feb9870d..3936fd87 100644 --- a/src/minitap/llm_config_context.py +++ b/src/mobile_use/llm_config_context.py @@ -7,10 +7,9 @@ from contextvars import ContextVar from typing import Optional +from mobile_use.config import LLMConfig from pydantic import BaseModel -from minitap.config import LLMConfig - class LLMConfigContext(BaseModel): llm_config: LLMConfig @@ -28,7 +27,7 @@ def set_llm_config_context(llm_config_context: LLMConfigContext) -> None: def get_llm_config_context() -> LLMConfigContext: context = llm_config_context_var.get() if context is None: - from minitap.config import get_default_llm_config + from mobile_use.config import get_default_llm_config default_config = get_default_llm_config() context = LLMConfigContext(llm_config=default_config) diff --git a/src/minitap/main.py b/src/mobile_use/main.py similarity index 91% rename from src/minitap/main.py rename to src/mobile_use/main.py index 5494af21..8baa7f08 100644 --- a/src/minitap/main.py +++ b/src/mobile_use/main.py @@ -12,40 +12,40 @@ from rich.console import Console from typing_extensions import Annotated -from minitap.agents.outputter.outputter import outputter -from minitap.config import ( +from mobile_use.agents.outputter.outputter import outputter +from mobile_use.config import ( OutputConfig, initialize_llm_config, prepare_output_files, record_events, settings, ) -from minitap.constants import ( +from mobile_use.constants import ( RECURSION_LIMIT, ) -from minitap.context import DeviceContext, set_execution_setup -from minitap.controllers.mobile_command_controller import ScreenDataResponse, get_screen_data -from minitap.controllers.platform_specific_commands_controller import get_first_device_id -from minitap.graph.graph import get_graph -from minitap.graph.state import State -from minitap.llm_config_context import LLMConfigContext, set_llm_config_context -from minitap.servers.config import server_settings -from minitap.servers.device_hardware_bridge import BridgeStatus -from minitap.servers.start_servers import ( +from mobile_use.context import DeviceContext, set_execution_setup +from mobile_use.controllers.mobile_command_controller import ScreenDataResponse, get_screen_data +from mobile_use.controllers.platform_specific_commands_controller import get_first_device_id +from mobile_use.graph.graph import get_graph +from mobile_use.graph.state import State +from mobile_use.llm_config_context import LLMConfigContext, set_llm_config_context +from mobile_use.servers.config import server_settings +from mobile_use.servers.device_hardware_bridge import BridgeStatus +from mobile_use.servers.start_servers import ( start_device_hardware_bridge, start_device_screen_api, ) -from minitap.servers.stop_servers import stop_servers -from minitap.utils.cli_helpers import display_device_status -from minitap.utils.logger import get_logger -from minitap.utils.media import ( +from mobile_use.servers.stop_servers import stop_servers +from mobile_use.utils.cli_helpers import display_device_status +from mobile_use.utils.logger import get_logger +from mobile_use.utils.media import ( create_gif_from_trace_folder, create_steps_json_from_trace_folder, remove_images_from_trace_folder, remove_steps_json_from_trace_folder, ) -from minitap.utils.recorder import log_agent_thoughts -from minitap.utils.time import convert_timestamp_to_str +from mobile_use.utils.recorder import log_agent_thoughts +from mobile_use.utils.time import convert_timestamp_to_str app = typer.Typer(add_completion=False, pretty_exceptions_enable=False) logger = get_logger(__name__) @@ -60,11 +60,11 @@ def print_ai_response_to_stderr(graph_result: State): def check_device_screen_api_health_with_retry_logic( base_url: Optional[str] = None, - max_consecutive_failures: int = 3, + max_consecutive_failures: int = 5, delay_seconds: int = 1, ) -> bool: """ - Check Device Screen API health with 3-strike failure detection and automatic server restart. + Check Device Screen API health with 5-strike failure detection and automatic server restart. Returns True if healthy, False if failed after all retries. """ import requests @@ -170,7 +170,7 @@ def run_servers() -> tuple[str | None, bool]: if not check_device_screen_api_health_with_retry_logic( base_url=settings.DEVICE_SCREEN_API_BASE_URL, - max_consecutive_failures=int(os.getenv("MOBILE_USE_HEALTH_RETRIES", 3)), + max_consecutive_failures=int(os.getenv("MOBILE_USE_HEALTH_RETRIES", 5)), delay_seconds=int(os.getenv("MOBILE_USE_HEALTH_DELAY", 1)), ): logger.error("Device Screen API health check failed after retries. Stopping...") @@ -373,7 +373,7 @@ def main( ] = None, ): """ - Run the Minitap agent to automate tasks on a mobile device. + Run the Mobile-use agent to automate tasks on a mobile device. """ console = Console() display_device_status(console) diff --git a/src/minitap/servers/config.py b/src/mobile_use/servers/config.py similarity index 75% rename from src/minitap/servers/config.py rename to src/mobile_use/servers/config.py index ecae8c24..2cf237b7 100644 --- a/src/minitap/servers/config.py +++ b/src/mobile_use/servers/config.py @@ -1,9 +1,8 @@ from dotenv import load_dotenv +from mobile_use.servers.device_hardware_bridge import DEVICE_HARDWARE_BRIDGE_PORT +from mobile_use.utils.logger import get_logger from pydantic_settings import BaseSettings -from minitap.servers.device_hardware_bridge import DEVICE_HARDWARE_BRIDGE_PORT -from minitap.utils.logger import get_logger - load_dotenv(verbose=True) logger = get_logger(__name__) diff --git a/src/minitap/servers/device_hardware_bridge.py b/src/mobile_use/servers/device_hardware_bridge.py similarity index 99% rename from src/minitap/servers/device_hardware_bridge.py rename to src/mobile_use/servers/device_hardware_bridge.py index ab33dda8..2facfdd6 100644 --- a/src/minitap/servers/device_hardware_bridge.py +++ b/src/mobile_use/servers/device_hardware_bridge.py @@ -7,8 +7,7 @@ from typing import Optional import requests - -from minitap.servers.utils import is_port_in_use +from mobile_use.servers.utils import is_port_in_use MAESTRO_STUDIO_PORT = 9999 DEVICE_HARDWARE_BRIDGE_PORT = MAESTRO_STUDIO_PORT diff --git a/src/minitap/servers/device_screen_api.py b/src/mobile_use/servers/device_screen_api.py similarity index 97% rename from src/minitap/servers/device_screen_api.py rename to src/mobile_use/servers/device_screen_api.py index 6e371d7c..fcc0bf96 100644 --- a/src/minitap/servers/device_screen_api.py +++ b/src/mobile_use/servers/device_screen_api.py @@ -8,11 +8,10 @@ import uvicorn from fastapi import FastAPI, HTTPException from fastapi.responses import JSONResponse +from mobile_use.servers.config import server_settings +from mobile_use.servers.utils import is_port_in_use from sseclient import SSEClient -from minitap.servers.config import server_settings -from minitap.servers.utils import is_port_in_use - DEVICE_HARDWARE_BRIDGE_BASE_URL = server_settings.DEVICE_HARDWARE_BRIDGE_BASE_URL DEVICE_HARDWARE_BRIDGE_API_URL = f"{DEVICE_HARDWARE_BRIDGE_BASE_URL}/api" diff --git a/src/minitap/servers/start_servers.py b/src/mobile_use/servers/start_servers.py similarity index 92% rename from src/minitap/servers/start_servers.py rename to src/mobile_use/servers/start_servers.py index e1f4d3ab..1fb2482c 100644 --- a/src/minitap/servers/start_servers.py +++ b/src/mobile_use/servers/start_servers.py @@ -1,19 +1,18 @@ import multiprocessing +import os import signal import sys import time from enum import Enum -import os from typing import Annotated, Optional import requests import typer - -from minitap.servers.config import server_settings -from minitap.servers.device_hardware_bridge import DeviceHardwareBridge -from minitap.servers.device_screen_api import start as _start_device_screen_api -from minitap.servers.stop_servers import stop_servers -from minitap.utils.logger import get_server_logger +from mobile_use.servers.config import server_settings +from mobile_use.servers.device_hardware_bridge import DeviceHardwareBridge +from mobile_use.servers.device_screen_api import start as _start_device_screen_api +from mobile_use.servers.stop_servers import stop_servers +from mobile_use.utils.logger import get_server_logger logger = get_server_logger() diff --git a/src/minitap/servers/stop_servers.py b/src/mobile_use/servers/stop_servers.py similarity index 97% rename from src/minitap/servers/stop_servers.py rename to src/mobile_use/servers/stop_servers.py index e99f3c3e..d1671519 100644 --- a/src/minitap/servers/stop_servers.py +++ b/src/mobile_use/servers/stop_servers.py @@ -4,10 +4,9 @@ import psutil import requests - -from minitap.utils.logger import get_server_logger -from minitap.servers.config import server_settings -from minitap.servers.device_hardware_bridge import DEVICE_HARDWARE_BRIDGE_PORT +from mobile_use.servers.config import server_settings +from mobile_use.servers.device_hardware_bridge import DEVICE_HARDWARE_BRIDGE_PORT +from mobile_use.utils.logger import get_server_logger logger = get_server_logger() diff --git a/src/minitap/servers/utils.py b/src/mobile_use/servers/utils.py similarity index 100% rename from src/minitap/servers/utils.py rename to src/mobile_use/servers/utils.py diff --git a/src/minitap/services/accessibility.py b/src/mobile_use/services/accessibility.py similarity index 100% rename from src/minitap/services/accessibility.py rename to src/mobile_use/services/accessibility.py diff --git a/src/minitap/services/llm.py b/src/mobile_use/services/llm.py similarity index 96% rename from src/minitap/services/llm.py rename to src/mobile_use/services/llm.py index 6514be94..a61604a9 100644 --- a/src/minitap/services/llm.py +++ b/src/mobile_use/services/llm.py @@ -3,9 +3,8 @@ from langchain_google_genai import ChatGoogleGenerativeAI from langchain_openai import ChatOpenAI - -from minitap.config import LLM, AgentNode, settings -from minitap.llm_config_context import get_llm_config_context +from mobile_use.config import LLM, AgentNode, settings +from mobile_use.llm_config_context import get_llm_config_context logger = logging.getLogger(__name__) diff --git a/src/mobile_use/tools/index.py b/src/mobile_use/tools/index.py new file mode 100644 index 00000000..7e9bd640 --- /dev/null +++ b/src/mobile_use/tools/index.py @@ -0,0 +1,50 @@ +from mobile_use.tools.mobile.back import back_wrapper +from mobile_use.tools.mobile.copy_text_from import copy_text_from_wrapper +from mobile_use.tools.mobile.erase_text import erase_text_wrapper +from mobile_use.tools.mobile.input_text import input_text_wrapper +from mobile_use.tools.mobile.launch_app import launch_app_wrapper +from mobile_use.tools.mobile.list_packages import list_packages_wrapper +from mobile_use.tools.mobile.long_press_on import long_press_on_wrapper +from mobile_use.tools.mobile.open_link import open_link_wrapper +from mobile_use.tools.mobile.paste_text import paste_text_wrapper +from mobile_use.tools.mobile.press_key import press_key_wrapper + +# from mobile_use.tools.mobile.run_flow import run_flow_wrapper +from mobile_use.tools.mobile.stop_app import stop_app_wrapper +from mobile_use.tools.mobile.swipe import swipe_wrapper +from mobile_use.tools.mobile.take_screenshot import take_screenshot_wrapper +from mobile_use.tools.mobile.tap import tap_wrapper +from mobile_use.tools.mobile.wait_for_animation_to_end import wait_for_animation_to_end_wrapper +from mobile_use.tools.tool_wrapper import ToolWrapper + +EXECUTOR_WRAPPERS_TOOLS = [ + back_wrapper, + open_link_wrapper, + tap_wrapper, + long_press_on_wrapper, + swipe_wrapper, + take_screenshot_wrapper, + # run_flow_wrapper, # To decomment when subflow is implemented + copy_text_from_wrapper, + input_text_wrapper, + list_packages_wrapper, + launch_app_wrapper, + stop_app_wrapper, + paste_text_wrapper, + erase_text_wrapper, + press_key_wrapper, + wait_for_animation_to_end_wrapper, +] + + +def get_tools_from_wrappers(wrappers: list[ToolWrapper]): + """Get the tools from the wrappers.""" + return [wrapper.tool_fn for wrapper in wrappers] + + +def get_tool_wrapper_from_name(name: str) -> ToolWrapper | None: + """Get the tool wrapper from the name.""" + for wrapper in EXECUTOR_WRAPPERS_TOOLS: + if wrapper.tool_fn.__name__ == name: + return wrapper + return None diff --git a/src/minitap/tools/mobile/back.py b/src/mobile_use/tools/mobile/back.py similarity index 89% rename from src/minitap/tools/mobile/back.py rename to src/mobile_use/tools/mobile/back.py index af7ddbd7..6d52efa5 100644 --- a/src/minitap/tools/mobile/back.py +++ b/src/mobile_use/tools/mobile/back.py @@ -1,13 +1,13 @@ from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command +from mobile_use.controllers.mobile_command_controller import back as back_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import back as back_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def back( diff --git a/src/minitap/tools/mobile/copy_text_from.py b/src/mobile_use/tools/mobile/copy_text_from.py similarity index 90% rename from src/minitap/tools/mobile/copy_text_from.py rename to src/mobile_use/tools/mobile/copy_text_from.py index aa1e2007..061aa9d0 100644 --- a/src/minitap/tools/mobile/copy_text_from.py +++ b/src/mobile_use/tools/mobile/copy_text_from.py @@ -1,16 +1,16 @@ +from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing import Optional -from pydantic import Field -from typing_extensions import Annotated - -from minitap.controllers.mobile_command_controller import SelectorRequest -from minitap.controllers.mobile_command_controller import ( +from mobile_use.controllers.mobile_command_controller import SelectorRequest +from mobile_use.controllers.mobile_command_controller import ( copy_text_from as copy_text_from_controller, ) -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper +from pydantic import Field +from typing_extensions import Annotated @tool diff --git a/src/minitap/tools/mobile/erase_text.py b/src/mobile_use/tools/mobile/erase_text.py similarity index 90% rename from src/minitap/tools/mobile/erase_text.py rename to src/mobile_use/tools/mobile/erase_text.py index 759af9a8..6aaea720 100644 --- a/src/minitap/tools/mobile/erase_text.py +++ b/src/mobile_use/tools/mobile/erase_text.py @@ -1,13 +1,13 @@ +from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing import Optional +from mobile_use.controllers.mobile_command_controller import erase_text as erase_text_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import erase_text as erase_text_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def erase_text( diff --git a/src/minitap/tools/mobile/input_text.py b/src/mobile_use/tools/mobile/input_text.py similarity index 91% rename from src/minitap/tools/mobile/input_text.py rename to src/mobile_use/tools/mobile/input_text.py index 3b9d8d3f..92ce3ea6 100644 --- a/src/minitap/tools/mobile/input_text.py +++ b/src/mobile_use/tools/mobile/input_text.py @@ -1,13 +1,13 @@ +from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing import Optional +from mobile_use.controllers.mobile_command_controller import input_text as input_text_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import input_text as input_text_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def input_text( diff --git a/src/minitap/tools/mobile/launch_app.py b/src/mobile_use/tools/mobile/launch_app.py similarity index 89% rename from src/minitap/tools/mobile/launch_app.py rename to src/mobile_use/tools/mobile/launch_app.py index 69e0d973..76b414d7 100644 --- a/src/minitap/tools/mobile/launch_app.py +++ b/src/mobile_use/tools/mobile/launch_app.py @@ -1,13 +1,13 @@ +from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing import Optional +from mobile_use.controllers.mobile_command_controller import launch_app as launch_app_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import launch_app as launch_app_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def launch_app( diff --git a/src/minitap/tools/mobile/list_packages.py b/src/mobile_use/tools/mobile/list_packages.py similarity index 88% rename from src/minitap/tools/mobile/list_packages.py rename to src/mobile_use/tools/mobile/list_packages.py index 08a9b9ad..ada0b6a5 100644 --- a/src/minitap/tools/mobile/list_packages.py +++ b/src/mobile_use/tools/mobile/list_packages.py @@ -1,17 +1,17 @@ from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.prebuilt import InjectedState from langgraph.types import Command -from typing_extensions import Annotated - -from minitap.agents.hopper.hopper import HopperOutput, hopper -from minitap.controllers.platform_specific_commands_controller import ( +from mobile_use.agents.hopper.hopper import HopperOutput, hopper +from mobile_use.controllers.platform_specific_commands_controller import ( list_packages as list_packages_command, ) -from minitap.graph.state import State -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper +from mobile_use.graph.state import State +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper +from typing_extensions import Annotated @tool diff --git a/src/minitap/tools/mobile/long_press_on.py b/src/mobile_use/tools/mobile/long_press_on.py similarity index 85% rename from src/minitap/tools/mobile/long_press_on.py rename to src/mobile_use/tools/mobile/long_press_on.py index 482eb1ce..9b53cc6e 100644 --- a/src/minitap/tools/mobile/long_press_on.py +++ b/src/mobile_use/tools/mobile/long_press_on.py @@ -4,12 +4,13 @@ from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command +from mobile_use.controllers.mobile_command_controller import SelectorRequest +from mobile_use.controllers.mobile_command_controller import ( + long_press_on as long_press_on_controller, +) +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import SelectorRequest -from minitap.controllers.mobile_command_controller import long_press_on as long_press_on_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def long_press_on( diff --git a/src/minitap/tools/mobile/open_link.py b/src/mobile_use/tools/mobile/open_link.py similarity index 89% rename from src/minitap/tools/mobile/open_link.py rename to src/mobile_use/tools/mobile/open_link.py index e35abf7d..4fdcb762 100644 --- a/src/minitap/tools/mobile/open_link.py +++ b/src/mobile_use/tools/mobile/open_link.py @@ -1,13 +1,13 @@ +from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing import Optional +from mobile_use.controllers.mobile_command_controller import open_link as open_link_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import open_link as open_link_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def open_link( diff --git a/src/minitap/tools/mobile/paste_text.py b/src/mobile_use/tools/mobile/paste_text.py similarity index 90% rename from src/minitap/tools/mobile/paste_text.py rename to src/mobile_use/tools/mobile/paste_text.py index e32c7421..50811080 100644 --- a/src/minitap/tools/mobile/paste_text.py +++ b/src/mobile_use/tools/mobile/paste_text.py @@ -1,13 +1,13 @@ +from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing import Optional +from mobile_use.controllers.mobile_command_controller import paste_text as paste_text_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import paste_text as paste_text_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def paste_text( diff --git a/src/minitap/tools/mobile/press_key.py b/src/mobile_use/tools/mobile/press_key.py similarity index 85% rename from src/minitap/tools/mobile/press_key.py rename to src/mobile_use/tools/mobile/press_key.py index ce80f7f4..990e3557 100644 --- a/src/minitap/tools/mobile/press_key.py +++ b/src/mobile_use/tools/mobile/press_key.py @@ -1,14 +1,14 @@ +from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing import Optional +from mobile_use.controllers.mobile_command_controller import Key +from mobile_use.controllers.mobile_command_controller import press_key as press_key_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import Key -from minitap.controllers.mobile_command_controller import press_key as press_key_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def press_key( diff --git a/src/minitap/tools/mobile/run_flow.py b/src/mobile_use/tools/mobile/run_flow.py similarity index 87% rename from src/minitap/tools/mobile/run_flow.py rename to src/mobile_use/tools/mobile/run_flow.py index ddc624cf..7a4e5f2b 100644 --- a/src/minitap/tools/mobile/run_flow.py +++ b/src/mobile_use/tools/mobile/run_flow.py @@ -2,11 +2,10 @@ from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command +from mobile_use.controllers.mobile_command_controller import run_flow as run_flow_controller +from mobile_use.tools.tool_wrapper import ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import run_flow as run_flow_controller -from minitap.tools.tool_wrapper import ToolWrapper - @tool def run_flow( diff --git a/src/minitap/tools/mobile/stop_app.py b/src/mobile_use/tools/mobile/stop_app.py similarity index 90% rename from src/minitap/tools/mobile/stop_app.py rename to src/mobile_use/tools/mobile/stop_app.py index e7700875..93d7ce8b 100644 --- a/src/minitap/tools/mobile/stop_app.py +++ b/src/mobile_use/tools/mobile/stop_app.py @@ -4,11 +4,10 @@ from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command +from mobile_use.controllers.mobile_command_controller import stop_app as stop_app_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import stop_app as stop_app_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def stop_app( diff --git a/src/minitap/tools/mobile/swipe.py b/src/mobile_use/tools/mobile/swipe.py similarity index 84% rename from src/minitap/tools/mobile/swipe.py rename to src/mobile_use/tools/mobile/swipe.py index bfa73719..6c228fe7 100644 --- a/src/minitap/tools/mobile/swipe.py +++ b/src/mobile_use/tools/mobile/swipe.py @@ -4,12 +4,11 @@ from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command +from mobile_use.controllers.mobile_command_controller import SwipeRequest +from mobile_use.controllers.mobile_command_controller import swipe as swipe_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import SwipeRequest -from minitap.controllers.mobile_command_controller import swipe as swipe_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def swipe( diff --git a/src/minitap/tools/mobile/take_screenshot.py b/src/mobile_use/tools/mobile/take_screenshot.py similarity index 89% rename from src/minitap/tools/mobile/take_screenshot.py rename to src/mobile_use/tools/mobile/take_screenshot.py index 83a97ee1..09eb5dc8 100644 --- a/src/minitap/tools/mobile/take_screenshot.py +++ b/src/mobile_use/tools/mobile/take_screenshot.py @@ -1,15 +1,15 @@ +from typing import Optional + from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing import Optional -from typing_extensions import Annotated - -from minitap.controllers.mobile_command_controller import ( +from mobile_use.controllers.mobile_command_controller import ( take_screenshot as take_screenshot_controller, ) -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper -from minitap.utils.media import compress_base64_jpeg +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper +from mobile_use.utils.media import compress_base64_jpeg +from typing_extensions import Annotated @tool diff --git a/src/minitap/tools/mobile/tap.py b/src/mobile_use/tools/mobile/tap.py similarity index 88% rename from src/minitap/tools/mobile/tap.py rename to src/mobile_use/tools/mobile/tap.py index c2f6a5da..752fe604 100644 --- a/src/minitap/tools/mobile/tap.py +++ b/src/mobile_use/tools/mobile/tap.py @@ -4,12 +4,11 @@ from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command +from mobile_use.controllers.mobile_command_controller import SelectorRequest +from mobile_use.controllers.mobile_command_controller import tap as tap_controller +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper from typing_extensions import Annotated -from minitap.controllers.mobile_command_controller import SelectorRequest -from minitap.controllers.mobile_command_controller import tap as tap_controller -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper - @tool def tap( diff --git a/src/minitap/tools/mobile/wait_for_animation_to_end.py b/src/mobile_use/tools/mobile/wait_for_animation_to_end.py similarity index 90% rename from src/minitap/tools/mobile/wait_for_animation_to_end.py rename to src/mobile_use/tools/mobile/wait_for_animation_to_end.py index b732e392..300b322d 100644 --- a/src/minitap/tools/mobile/wait_for_animation_to_end.py +++ b/src/mobile_use/tools/mobile/wait_for_animation_to_end.py @@ -4,13 +4,12 @@ from langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.types import Command -from typing_extensions import Annotated - -from minitap.controllers.mobile_command_controller import WaitTimeout -from minitap.controllers.mobile_command_controller import ( +from mobile_use.controllers.mobile_command_controller import WaitTimeout +from mobile_use.controllers.mobile_command_controller import ( wait_for_animation_to_end as wait_for_animation_to_end_controller, ) -from minitap.tools.tool_wrapper import ExecutorMetadata, ToolWrapper +from mobile_use.tools.tool_wrapper import ExecutorMetadata, ToolWrapper +from typing_extensions import Annotated @tool diff --git a/src/minitap/tools/tool_wrapper.py b/src/mobile_use/tools/tool_wrapper.py similarity index 100% rename from src/minitap/tools/tool_wrapper.py rename to src/mobile_use/tools/tool_wrapper.py diff --git a/src/minitap/utils/cli_helpers.py b/src/mobile_use/utils/cli_helpers.py similarity index 93% rename from src/minitap/utils/cli_helpers.py rename to src/mobile_use/utils/cli_helpers.py index 73401e06..3e19b717 100644 --- a/src/minitap/utils/cli_helpers.py +++ b/src/mobile_use/utils/cli_helpers.py @@ -1,10 +1,9 @@ import sys +from mobile_use.clients.adb_client import adb +from mobile_use.clients.ios_client import get_ios_devices from rich.console import Console -from minitap.clients.adb_client import adb -from minitap.clients.ios_client import get_ios_devices - def display_device_status(console: Console): """Checks for connected devices and displays the status.""" diff --git a/src/minitap/utils/cli_selection.py b/src/mobile_use/utils/cli_selection.py similarity index 100% rename from src/minitap/utils/cli_selection.py rename to src/mobile_use/utils/cli_selection.py diff --git a/src/minitap/utils/conversations.py b/src/mobile_use/utils/conversations.py similarity index 95% rename from src/minitap/utils/conversations.py rename to src/mobile_use/utils/conversations.py index 6338aa7e..7400c411 100644 --- a/src/minitap/utils/conversations.py +++ b/src/mobile_use/utils/conversations.py @@ -1,8 +1,7 @@ from typing import TypeGuard from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, ToolMessage - -from minitap.constants import FAST_NON_UI_TOOLS +from mobile_use.constants import FAST_NON_UI_TOOLS def is_fast_nonui_tool(tool_message: ToolMessage) -> bool: diff --git a/src/minitap/utils/decorators.py b/src/mobile_use/utils/decorators.py similarity index 100% rename from src/minitap/utils/decorators.py rename to src/mobile_use/utils/decorators.py diff --git a/src/minitap/utils/errors.py b/src/mobile_use/utils/errors.py similarity index 100% rename from src/minitap/utils/errors.py rename to src/mobile_use/utils/errors.py diff --git a/src/minitap/utils/file.py b/src/mobile_use/utils/file.py similarity index 100% rename from src/minitap/utils/file.py rename to src/mobile_use/utils/file.py diff --git a/src/minitap/utils/logger.py b/src/mobile_use/utils/logger.py similarity index 96% rename from src/minitap/utils/logger.py rename to src/mobile_use/utils/logger.py index 6fec62e9..e046ccb7 100644 --- a/src/minitap/utils/logger.py +++ b/src/mobile_use/utils/logger.py @@ -18,7 +18,7 @@ class LogLevel(Enum): CRITICAL = ("CRITICAL", Fore.RED + Style.BRIGHT, "💥") -class MinitapLogger: +class MobileUseLogger: def __init__( self, name: str, @@ -28,7 +28,7 @@ def __init__( enable_file_logging: bool = True, ): """ - Initialize the Minitap logger. + Initialize the MobileUse logger. Args: name: Logger name (usually __name__) @@ -122,7 +122,7 @@ def get_logger( console_level: str = "INFO", file_level: str = "DEBUG", enable_file_logging: bool = False, -) -> MinitapLogger: +) -> MobileUseLogger: """ Get or create a logger instance. @@ -134,10 +134,10 @@ def get_logger( enable_file_logging: Whether to enable file logging Returns: - MinitapLogger instance + MobileUseLogger instance """ if name not in _loggers: - _loggers[name] = MinitapLogger( + _loggers[name] = MobileUseLogger( name=name, log_file=log_file, console_level=console_level, @@ -176,7 +176,7 @@ def log_header(message: str, logger_name: str = "mobile-use"): get_logger(logger_name).header(message) -def get_server_logger() -> MinitapLogger: +def get_server_logger() -> MobileUseLogger: return get_logger( name="mobile-use.servers", console_level="INFO", diff --git a/src/minitap/utils/media.py b/src/mobile_use/utils/media.py similarity index 100% rename from src/minitap/utils/media.py rename to src/mobile_use/utils/media.py diff --git a/src/minitap/utils/recorder.py b/src/mobile_use/utils/recorder.py similarity index 86% rename from src/minitap/utils/recorder.py rename to src/mobile_use/utils/recorder.py index 2d615b65..b0f6c542 100644 --- a/src/minitap/utils/recorder.py +++ b/src/mobile_use/utils/recorder.py @@ -3,12 +3,11 @@ from pathlib import Path from langchain_core.messages import BaseMessage - -from minitap.config import record_events -from minitap.context import get_execution_setup -from minitap.controllers.mobile_command_controller import take_screenshot -from minitap.utils.logger import get_logger -from minitap.utils.media import compress_base64_jpeg +from mobile_use.config import record_events +from mobile_use.context import get_execution_setup +from mobile_use.controllers.mobile_command_controller import take_screenshot +from mobile_use.utils.logger import get_logger +from mobile_use.utils.media import compress_base64_jpeg logger = get_logger(__name__) diff --git a/src/minitap/utils/requests_utils.py b/src/mobile_use/utils/requests_utils.py similarity index 95% rename from src/minitap/utils/requests_utils.py rename to src/mobile_use/utils/requests_utils.py index 23abc23c..03c06a5f 100644 --- a/src/minitap/utils/requests_utils.py +++ b/src/mobile_use/utils/requests_utils.py @@ -1,6 +1,5 @@ import requests - -from minitap.utils.logger import get_logger +from mobile_use.utils.logger import get_logger logger = get_logger(__name__) diff --git a/src/minitap/utils/shell_utils.py b/src/mobile_use/utils/shell_utils.py similarity index 100% rename from src/minitap/utils/shell_utils.py rename to src/mobile_use/utils/shell_utils.py diff --git a/src/minitap/utils/time.py b/src/mobile_use/utils/time.py similarity index 100% rename from src/minitap/utils/time.py rename to src/mobile_use/utils/time.py diff --git a/uv.lock b/uv.lock index 89f643cc..93f4ebf3 100644 --- a/uv.lock +++ b/uv.lock @@ -1172,7 +1172,7 @@ wheels = [ ] [[package]] -name = "minitap" +name = "mobile-use" version = "0.0.1" source = { editable = "." } dependencies = [