Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
152 lines (146 loc) · 6.67 KB
/
Copy pathpyproject.toml
File metadata and controls
152 lines (146 loc) · 6.67 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# `pip install AutoCua` — one wheel per OS/arch holding the AutoCua package
# and the Rust extension prebuilt, so no Rust is needed on the user's machine:
# the one crate in AutoCua/ (the web agent, the Android agent and the coder),
# which maturin builds. Built with maturin:
#
# pip install maturin
# maturin build --release -o dist # -> dist/autocua-*.whl
#
# note/pypi-release.md has the per-machine commands. A checkout keeps working
# exactly as before (python main.py, the setup scripts, cargo building the
# agents on first import).
[build-system]
requires = ["maturin>=1.15,<2"]
build-backend = "maturin"
[project]
name = "AutoCua"
version = "0.2.0"
description = "AutoCua: an AI agent that operates your computer, shell, browser and iPhone"
readme = "README.md"
requires-python = ">=3.10"
license = "MIT"
license-files = ["LICENSE", "THIRD_PARTY_NOTICES.md", "THIRD_PARTY_LICENSES.txt"]
authors = [{ name = "Ashish Yadav" }]
keywords = ["agent", "automation", "computer-use", "browser-agent", "llm", "ios"]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Operating System :: MacOS",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Rust",
]
# Everything main.py needs on either platform, terminal and UI alike. The
# markers pick the OS; the floors are the versions the Windows list pinned.
dependencies = [
"requests>=2.34.2",
"python-dotenv>=1.2.4",
"Pillow>=12.3.0",
"openai>=2.17.0",
"anthropic>=0.83.0",
"groq>=1.0.0",
"google-genai>=1.64.0",
"flask>=3.1.3",
"werkzeug>=3.1.9",
"pywebview>=6.1",
"python-telegram-bot>=21.6",
"pyautogui>=0.9.54; sys_platform == 'darwin' or sys_platform == 'win32'",
# macOS computer use
"pyobjc-core>=11; sys_platform == 'darwin'",
"pyobjc-framework-Cocoa>=11; sys_platform == 'darwin'",
"pyobjc-framework-Quartz>=11; sys_platform == 'darwin'",
"pyobjc-framework-ApplicationServices>=11; sys_platform == 'darwin'",
"pyobjc-framework-Vision>=11; sys_platform == 'darwin'",
"pyobjc-framework-WebKit>=11; sys_platform == 'darwin'",
"pynput>=1.7; sys_platform == 'darwin'",
# Each run's recording is encoded with OpenCV on macOS and with
# imageio-ffmpeg on Linux and Windows: OpenCV's Linux wheels cannot write
# H.264, and its Windows wheels only at a fixed ~900 MB a minute
# (utils/run_recorder.py). imageio-ffmpeg's ffmpeg then compresses it on
# every OS (utils/video_compress.py).
"opencv-python>=4.9; sys_platform == 'darwin'",
"imageio-ffmpeg>=0.5",
# Linux computer use — OCR fusion (PP-OCRv6 via onnxruntime, see
# AutoCua/linux/tree/ocr.py); AT-SPI itself comes from the distro's
# python3-gi, which pip cannot supply (requirements_linux.txt explains).
"onnxruntime>=1.20; sys_platform == 'linux'",
# Windows computer use
"pywinauto>=0.6.9; sys_platform == 'win32'",
"pywin32>=311; sys_platform == 'win32'",
"comtypes>=1.4; sys_platform == 'win32'",
"interception-python>=1.13; sys_platform == 'win32'",
"keyboard>=0.13.5; sys_platform == 'win32'",
"psutil>=5.9; sys_platform == 'win32'",
"pyperclip>=1.8; sys_platform == 'win32'",
"numpy>=1.26; sys_platform == 'win32' or sys_platform == 'linux'",
"PySide6>=6.6; sys_platform == 'win32'",
"winrt-runtime>=3.2; sys_platform == 'win32'",
"winrt-Windows.Foundation>=3.2; sys_platform == 'win32'",
"winrt-Windows.Foundation.Collections>=3.2; sys_platform == 'win32'",
"winrt-Windows.Media.Ocr>=3.2; sys_platform == 'win32'",
"winrt-Windows.Globalization>=3.2; sys_platform == 'win32'",
"winrt-Windows.Graphics.Imaging>=3.2; sys_platform == 'win32'",
"winrt-Windows.Storage.Streams>=3.2; sys_platform == 'win32'",
]
[project.optional-dependencies]
# Paired iPhone/iPad (the simulator path needs only Xcode).
ios = ["pymobiledevice3>=10; sys_platform == 'darwin'"]
[project.urls]
Homepage = "https://github.com/ComputerUseAgent/AutoCua"
Source = "https://github.com/ComputerUseAgent/AutoCua"
[tool.maturin]
# The one crate lives inside the package (AutoCua/Cargo.toml: the web agent,
# the Android agent and the coder) and is imported as AutoCua.agent_native;
# python-source = "." makes ./AutoCua the package.
manifest-path = "AutoCua/Cargo.toml"
module-name = "AutoCua.agent_native"
python-source = "."
exclude = [
# wheel-only: the crate sources stay in the sdist so it can build, but a
# wheel ships the compiled extension — no Cargo.toml in it means the
# loader never tries cargo.
{ path = "AutoCua/*.rs", format = "wheel" },
{ path = "AutoCua/web/**/*.rs", format = "wheel" },
{ path = "AutoCua/android/**/*.rs", format = "wheel" },
{ path = "AutoCua/coder/**/*.rs", format = "wheel" },
{ path = "AutoCua/Cargo.toml", format = "wheel" },
{ path = "AutoCua/Cargo.lock", format = "wheel" },
# never shipped
"AutoCua/target/**",
"AutoCua/web/scratchpad/**",
"AutoCua/android/scratchpad/**",
"AutoCua/coder/scratchpad/**",
# the licence-file generator (AutoCua/utils/third_party_licenses.py): a
# maintainer's tool that reads the cargo registry, not part of the app
{ path = "AutoCua/utils/third_party_licenses.py", format = "wheel" },
# rust.py's staging copy of the extension (agent_native.pyd.new), which
# only a crash leaves behind — and which .gitignore does not cover; the
# second line is for the per-agent ones from before the crates became one
"AutoCua/agent_native.*.new",
"AutoCua/*/agent_native.*.new",
"AutoCua/mac/scratchpad/**",
"AutoCua/windows/scratchpad/**",
"AutoCua/ios/scratchpad/**",
"AutoCua/linux/scratchpad/**",
# the PP-OCRv6 models ocr_models.py downloads on the first Linux scan
"AutoCua/linux/tree/models/**",
# legacy in-package secret locations (keys now live in AutoCua_data/)
"AutoCua/api_key/**",
"AutoCua/agent_conversation/*.json",
"AutoCua/agent_conversation/chat_*/**",
"AutoCua/web/HANDOFF.md",
"AutoCua/Structure.md",
"AutoCua/**/test.py",
"AutoCua/**/old_element.py",
"AutoCua/**/__pycache__/**",
"AutoCua/ios_connector/WebDriverAgent/**",
"AutoCua/ios_connector/paired_devices.json",
# the Chromium desktop shell's npm install: Electron itself, ~300 MB and
# built per OS (a checkout runs `npm install` in AutoCua/desktop; a pip
# install fetches it into a per-user cache, AutoCua/utils/electron.py)
"AutoCua/desktop/node_modules/**",
# the UI's npm install (React, Vite, TypeScript: `npm ci` in AutoCua/ui builds
# ui/index.js, which is committed and ships; pip users need none of this)
"AutoCua/ui/node_modules/**",
]