[build-system] requires = ["setuptools>=68.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "openspace" version = "2.0.0" description = "OpenSpace" readme = "README.md" requires-python = ">=3.12" license = {text = "MIT"} authors = [ {name = "OpenSpace Team@HKUDS"} ] dependencies = [ "litellm>=1.70.0,<1.82.7", # pinned to avoid PYSEC-2026-2 supply-chain compromise (1.82.7/1.82.8 were malicious) "python-dotenv>=1.0.0", "openai>=1.0.0", "jsonschema>=4.25.0", "bashlex>=0.18", "mcp>=1.0.0", "anthropic>=0.71.0", "pillow>=12.0.0", "numpy>=1.24.0", "colorama>=0.4.6", "flask>=3.1.0", "pyautogui>=0.9.54", "pydantic>=2.12.0", "aiohttp>=3.10.0", "requests>=2.32.0", "websockets>=13.0", ] [project.optional-dependencies] macos = [ "pyobjc-core>=12.0", "pyobjc-framework-cocoa>=12.0", "pyobjc-framework-quartz>=12.0", "atomacos>=3.2.0", ] linux = [ "python-xlib>=0.33", "pyatspi>=2.38.0", "numpy>=1.24.0", ] windows = [ "pywinauto>=0.6.8", "pywin32>=306", "PyGetWindow>=0.0.9", ] dev = [ "pytest>=7.0.0", "pytest-asyncio>=0.21.0", "black>=23.0.0", "flake8>=6.0.0", "mypy>=1.0.0", ] communication = [ "lark-oapi>=1.4.20", ] all = [ "openspace[macos]; sys_platform == 'darwin'", "openspace[linux]; sys_platform == 'linux'", "openspace[windows]; sys_platform == 'win32'", "openspace[communication,dev]", ] [project.urls] Repository = "https://github.com/HKUDS/OpenSpace" "Bug Tracker" = "https://github.com/HKUDS/OpenSpace/issues" [project.scripts] openspace = "openspace.entrypoints.cli.main:run_main" openspace-server = "openspace.local_server.main:main" openspace-mcp = "openspace.entrypoints.mcp.server:run_mcp_server" openspace-cloud-auth = "openspace.cloud.cli.auth:main" openspace-download-skill = "openspace.cloud.cli.download_skill:main" openspace-upload-skill = "openspace.cloud.cli.upload_skill:main" openspace-dashboard = "openspace.entrypoints.dashboard.server:main" openspace-gateway = "openspace.entrypoints.gateway.server:run_main" [tool.setuptools] packages = {find = {where = ["."], include = ["openspace*"]}} [tool.setuptools.package-data] openspace = [ ".env.example", "config/*.json", "config/*.json.example", "config/README.md", "communication/bridges/whatsapp/*", "local_server/config.json", "local_server/README.md", "local_server/requirements.txt", "local_server/run.sh", "host_skills/README.md", "host_skills/*/.skill_id", "host_skills/*/SKILL.md", "protocol/schema/*.json", "skills/*/.skill_id", "skills/*/SKILL.md", "packaged/tui/**/*", "packaged/dashboard/**/*", ] [tool.setuptools.exclude-package-data] openspace = [ "packaged/tui/**/__tests__/*", "packaged/tui/**/*.test.*", "packaged/tui/**/*.spec.*", "packaged/tui/node_modules/@types/node/test.d.ts", "packaged/dashboard/**/__tests__/*", "packaged/dashboard/**/*.test.*", "packaged/dashboard/**/*.spec.*", ] [tool.pytest.ini_options] testpaths = ["tests"] markers = [ "playwright: requires the Playwright Python package and a launchable Chromium browser; must fail instead of skipping when configured as a CI gate", ] norecursedirs = [ ".git", ".pytest_cache", "__pycache__", "build", "dist", "logs", "node_modules", "openspace.egg-info", ]