ARTEMIS is an autonomous multimodal Android agent and mobile UI automation platform engineered for physical devices and emulators. It combines state-of-the-art multimodal Vision-Language Models (VLMs) with hierarchical closed-loop planning, resilient self-healing, and deep Android subsystem integration. Key Features & Architectural Highlights: - Dual-Engine Orchestration: * Pro Engine: Multi-agent closed-loop (Planner -> Operator -> Validator/Failure Analyzer -> Summarizer) powered by LangGraph. * Flash Engine: Ultra-fast reactive loop for deterministic, low-latency UI execution (<35 steps). - Multimodal Perception & Grounding: * Hybrid visual screenshot grounding, real-time OCR extraction, and XML accessibility hierarchy parsing. * Dynamic-First, Coordinate-Fallback locating strategy for maximum resilience against UI drift. - Autonomous Self-Healing & Diagnostics: * Failure analyzer and safety net for popup dismissal, crash recovery, and auto-retry. * Diagnostic sub-agents for log analysis, video recording inspection, and object detection. - Unified CLI & Python SDK: * Rich CLI with commands: init, doctor, run, trace, batch, bench, server, and mcp. * Fluent Python SDK with Pydantic structured output models and package locking. - Multi-Provider LLM Architecture: * Support for Google Gemini, OpenAI, Anthropic Claude, Vertex AI, OpenRouter, xAI Grok, and local endpoints (Ollama/vLLM). * Centralized configuration in config/artemis.jsonc. - Native MCP & Observability: * Model Context Protocol (MCP) server endpoints for AI IDEs. * Full trace recording with before/after screenshots, action overlays, and execution replays. Change-Id: I430b93ee2b76b54cc5a3c6eeccd15d2cf29830a1
219 lines
4.9 KiB
TOML
219 lines
4.9 KiB
TOML
# Copyright 2026 Google LLC
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
[project]
|
|
name = "artemis"
|
|
version = "3.6.3"
|
|
description = "Artemis Android Agent"
|
|
|
|
authors = [
|
|
{ name = "somew1nd", email = "wfq559@outlook.com" },
|
|
]
|
|
|
|
requires-python = ">=3.12"
|
|
|
|
dependencies = [
|
|
# Orchestration & Framework
|
|
"langgraph>=1.0.2,<2.0.0",
|
|
"langchain>=1.0.0",
|
|
"langchain-core>=1.0.0",
|
|
"langchain-community>=0.4.1",
|
|
"langchain-mcp-adapters>=0.2.0",
|
|
"mcp>=1.26.0",
|
|
# LLM Providers & GenAI SDKs
|
|
"google-genai>=0.1.1",
|
|
"langchain-google-genai>=4.0.0",
|
|
"langchain-google-vertexai>=3.0.0",
|
|
"langchain-openai>=1.0.0",
|
|
# Configuration, Models & Validation
|
|
"pydantic>=2.7.0",
|
|
"pydantic-settings>=2.10.1",
|
|
"python-dotenv>=1.0.1",
|
|
"jinja2>=3.1.5",
|
|
"typing-extensions>=4.12.0",
|
|
# Android Automation & Device Subsystem
|
|
"adbutils>=2.12.0",
|
|
"uiautomator2>=3.5.0",
|
|
# CLI & Rich Terminal UI
|
|
"typer>=0.12.0",
|
|
"rich>=13.7.0",
|
|
"inquirer>=3.4.0",
|
|
"colorama>=0.4.6",
|
|
# Web, API & Networking
|
|
"fastapi>=0.111.0",
|
|
"uvicorn[standard]>=0.30.1",
|
|
"httpx>=0.28.1",
|
|
"requests>=2.31.0",
|
|
"websockets>=12.0",
|
|
"sseclient-py>=1.8.0",
|
|
# Image, Video & Multimodal Perception
|
|
"pillow>=10.0.0",
|
|
"opencv-python>=4.9.0.80",
|
|
"imageio-ffmpeg>=0.5.1",
|
|
"matplotlib>=3.8.0",
|
|
"numpy>=1.26.0",
|
|
"scipy>=1.13.0",
|
|
# System, Utilities & Telemetry
|
|
"psutil>=5.9.0",
|
|
"retry>=0.9.2",
|
|
"posthog>=3.5.0",
|
|
"uuid-utils>=0.9.0",
|
|
"jupyter-client>=8.6.0",
|
|
"ipykernel>=6.29.0",
|
|
"langchain-anthropic>=1.5.4",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"ruff>=0.15.2",
|
|
"pytest>=8.4.1",
|
|
"pytest-asyncio>=0.23.0",
|
|
"pytest-cov>=5.0.0",
|
|
"syrupy>=4.0.0",
|
|
"pyright>=1.1.389",
|
|
"pre-commit>=3.5.0",
|
|
]
|
|
|
|
[project.scripts]
|
|
artemis = "artemis.interfaces.cli.main:cli"
|
|
artemis-admin = "apps.admin_console.server:main"
|
|
|
|
|
|
[build-system]
|
|
requires = ["setuptools>=61.0", "Cython"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[tool.ruff]
|
|
# Exclude a variety of commonly ignored directories.
|
|
exclude = [
|
|
".bzr",
|
|
".direnv",
|
|
".eggs",
|
|
".git",
|
|
".git-rewrite",
|
|
".hg",
|
|
".ipynb_checkpoints",
|
|
".mypy_cache",
|
|
".nox",
|
|
".pants.d",
|
|
".pyenv",
|
|
".pytest_cache",
|
|
".pytype",
|
|
".ruff_cache",
|
|
".svn",
|
|
".tox",
|
|
".venv",
|
|
".vscode",
|
|
"__pypackages__",
|
|
"_build",
|
|
"buck-out",
|
|
"build",
|
|
"dist",
|
|
"node_modules",
|
|
"site-packages",
|
|
"venv",
|
|
]
|
|
|
|
# Same as Black.
|
|
line-length = 100
|
|
indent-width = 4
|
|
|
|
target-version = "py312"
|
|
|
|
[tool.ruff.lint]
|
|
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
|
|
# Also enable TID (flake8-tidy-imports) to enforce absolute imports
|
|
select = ["E", "F", "TID", "UP"]
|
|
ignore = ["E501"]
|
|
|
|
# Allow fix for all enabled rules (when `--fix`) is provided.
|
|
fixable = ["ALL"]
|
|
unfixable = []
|
|
|
|
# Allow unused variables when underscore-prefixed.
|
|
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
|
|
|
[tool.ruff.lint.flake8-tidy-imports]
|
|
# Ban relative imports
|
|
ban-relative-imports = "all"
|
|
|
|
[tool.ruff.format]
|
|
# Like Black, use double quotes for strings.
|
|
quote-style = "double"
|
|
|
|
# Like Black, indent with spaces, rather than tabs.
|
|
indent-style = "space"
|
|
|
|
# Like Black, respect magic trailing commas.
|
|
skip-magic-trailing-comma = false
|
|
|
|
# Like Black, automatically detect the appropriate line ending.
|
|
line-ending = "auto"
|
|
|
|
[tool.pytest.ini_options]
|
|
# Add project root and apps to Python path for clean absolute imports
|
|
pythonpath = [
|
|
".",
|
|
"apps",
|
|
"apps/admin_console",
|
|
]
|
|
|
|
|
|
# Specify test discovery patterns
|
|
testpaths = [
|
|
"tests"
|
|
]
|
|
python_files = [
|
|
"*.test.py",
|
|
"test_*.py",
|
|
"*_test.py"
|
|
]
|
|
python_functions = [
|
|
"test_*"
|
|
]
|
|
python_classes = [
|
|
"Test*"
|
|
]
|
|
# Add useful options
|
|
addopts = [
|
|
"-v", # verbose output
|
|
"--tb=short", # shorter traceback format
|
|
"--strict-markers", # strict marker checking
|
|
"--disable-warnings", # disable warnings for cleaner output
|
|
]
|
|
|
|
markers = [
|
|
"android: tests requiring Android device or emulator",
|
|
]
|
|
|
|
[tool.pylint.master]
|
|
ignore = [".venv", "build", "dist"]
|
|
recursive = "yes"
|
|
|
|
[tool.pylint.messages_control]
|
|
disable = [
|
|
"C0114", # missing-module-docstring
|
|
"R0801", # duplicate-code
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"ruff>=0.15.2",
|
|
"pytest>=8.4.1",
|
|
"pytest-asyncio>=1.2.0",
|
|
"pytest-cov>=5.0.0",
|
|
"pyright>=1.1.389",
|
|
"pre-commit>=3.5.0",
|
|
]
|