-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
89 lines (80 loc) · 2.98 KB
/
Copy pathpyproject.toml
File metadata and controls
89 lines (80 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
[build-system]
requires = ["setuptools>=69"]
build-backend = "setuptools.build_meta"
[project]
name = "mobile-use"
version = "0.1.0"
description = "Direct mobile device control via Appium — iOS (XCUITest) and Android (UIAutomator2). The simplest harness to put an LLM agent on a real phone."
requires-python = ">=3.11"
license = {text = "MIT"}
authors = [{name = "jackulau"}]
keywords = ["appium", "ios", "android", "automation", "agent", "llm", "mobile"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Testing",
]
dependencies = [
"Appium-Python-Client>=5.3.1",
"selenium>=4.30",
"pillow>=10",
'pyobjc-framework-Vision>=10 ; sys_platform == "darwin"',
]
[project.optional-dependencies]
# Local-detector feature (native-faster perception). All import-guarded — the
# harness runs fine without these; they only enable the pixel-matching fast path
# and YOLO distillation.
detection = [
"opencv-python>=4.8", # multi-scale template element matching
"numpy>=1.24",
]
yolo = [
"ultralytics>=8.3", # yolov8n distillation of the self-labeled dataset
"opencv-python>=4.8",
"numpy>=1.24",
]
dev = [
"pytest>=8",
"pytest-xdist>=3.5", # fast local lane: pytest -n auto tests -q
"ruff>=0.4",
]
agent = [
"anthropic>=0.40", # default multimodal LLM for `mobile-use agent --task`
]
[project.urls]
Homepage = "https://github.com/jackulau/mobile_use"
Repository = "https://github.com/jackulau/mobile_use"
Issues = "https://github.com/jackulau/mobile_use/issues"
[project.scripts]
mobile-use = "mobile_use.cli:main"
iphone-harness = "iphone_harness.run:main"
android-harness = "android_harness.run:main"
[tool.setuptools.packages.find]
include = ["mobile_use*", "iphone_harness*", "android_harness*"]
[tool.pytest.ini_options]
pythonpath = ["."]
[tool.ruff]
target-version = "py311"
line-length = 120
extend-exclude = ["tests/_fixtures", "**/.venv", "**/build", "**/dist"]
[tool.ruff.lint]
select = ["E", "F", "I"]
ignore = [
"E402", # module-level import not at top — legitimate for lazy-import / cycle-breaking
"E501", # line length handled separately
"E701", # compact one-line if/return style is conventional here
"E702", # `x = ...; y = ...` style is conventional in cleanup blocks
"E741", # ambiguous variable names (l, I, O) — fine in math/loop bodies
"E731", # lambda assignment — fine for short callbacks
"F401", # unused import — many __init__.py re-exports rely on this
"F811", # redefined names — overload-style helpers in tests
"F841", # unused local — common in assignment-for-debugging
]
[tool.ruff.lint.per-file-ignores]
"tests/**" = ["E402", "F401", "F811", "F841"]
"**/__init__.py" = ["F401", "F403"]