[project] name = "openacm" version = "0.4.7" description = "OpenACM - Open Automated Computer Manager" requires-python = ">=3.12" dependencies = [ # Core LLM "litellm>=1.84.0", "pydantic>=2.0", "pydantic-settings>=2.14.2", "pyyaml>=6.0", # Web "fastapi>=0.115", "python-multipart>=0.0.31", "uvicorn[standard]>=0.30", "websockets>=13.0", # Channels "discord.py>=2.4", "python-telegram-bot>=21.0", "httpx>=0.27", # Storage "aiosqlite>=0.20", # Tools "ddgs>=7.0", "psutil>=6.0", # Google Services "google-api-python-client>=2.130", "google-auth-oauthlib>=1.2", "google-auth-httplib2>=0.2", # Utils "rich>=13.0", "structlog>=24.0", "python-dotenv>=1.2.2", # Multimodal & Crypto "mss>=9.0", "Pillow>=12.3.0", "cryptography>=50.0.0", "pypdf>=6.16.1", "markitdown[docx,xlsx,pptx,audio-transcription]>=0.1", "chonkie[sentence]>=1.0", "docling>=2.94.0", "instructor>=1.0", # Tier-1 Agentic powers "chromadb>=1.5.9", "sentence-transformers>=3.3", "playwright>=1.49", "jupyter-client>=8.6", "ipykernel>=6.29", # PTY support "pywinpty>=2.0; sys_platform == 'win32'", # MCP "mcp>=1.28.1,<2", # Excel export "openpyxl>=3.1", ] [project.optional-dependencies] dev = [ "pytest>=9.0.3", "pytest-asyncio>=0.24", "pytest-mock>=3.14", "ruff>=0.8", ] voice = [ "sounddevice>=0.5", "faster-whisper>=1.0", "numpy>=1.26", "pyttsx3>=2.90", ] [project.scripts] openacm = "openacm.__main__:main" openacm-cli = "openacm.core.interactive_repl:main" openacm-setup = "openacm.cli.setup_wizard:main" openacm-manage = "openacm.cli.manage:main" [build-system] requires = ["setuptools>=68.0", "wheel"] build-backend = "setuptools.build_meta" [tool.uv] # Floors for transitive dependencies with known security advisories. constraint-dependencies = [ "accelerate>=1.15.0", "aiohttp>=3.14.3", "anyio>=4.14.2", "click>=8.3.3", "docling-core>=2.74.1", "httplib2>=0.32.0", "idna>=3.15", "pyasn1>=0.6.4", "pygments>=2.20.0", "pyjwt>=2.13.0", "setuptools>=83.0.0", "soupsieve>=2.9.0", "starlette>=1.3.1", "torch>=2.13.0", "tornado>=6.5.8", "transformers>=5.10.0", "urllib3>=2.7.0", ] [tool.setuptools.packages.find] where = ["src"] [tool.ruff] line-length = 100 target-version = "py312" [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = "-v --tb=short"