/ cli / pyproject.toml
pyproject.toml
  1  # Copyright 2026 Alibaba Group Holding Ltd.
  2  #
  3  # Licensed under the Apache License, Version 2.0 (the "License");
  4  # you may not use this file except in compliance with the License.
  5  # You may obtain a copy of the License at
  6  #
  7  #     http://www.apache.org/licenses/LICENSE-2.0
  8  #
  9  # Unless required by applicable law or agreed to in writing, software
 10  # distributed under the License is distributed on an "AS IS" BASIS,
 11  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12  # See the License for the specific language governing permissions and
 13  # limitations under the License.
 14  
 15  [build-system]
 16  requires = ["hatchling", "hatch-vcs"]
 17  build-backend = "hatchling.build"
 18  
 19  [project]
 20  name = "opensandbox-cli"
 21  dynamic = ["version"]
 22  description = "OpenSandbox CLI - Command-line interface for managing sandboxes"
 23  authors = [
 24      { name = "OpenSandbox Team", email = "ninan.nn@alibaba-inc.com" }
 25  ]
 26  license = { file = "LICENSE" }
 27  readme = "README.md"
 28  requires-python = ">=3.10"
 29  keywords = ["sandbox", "cli", "opensandbox"]
 30  classifiers = [
 31      "Development Status :: 3 - Alpha",
 32      "Intended Audience :: Developers",
 33      "License :: OSI Approved :: Apache Software License",
 34      "Operating System :: OS Independent",
 35      "Programming Language :: Python :: 3",
 36      "Programming Language :: Python :: 3 :: Only",
 37      "Programming Language :: Python :: 3.10",
 38      "Programming Language :: Python :: 3.11",
 39      "Programming Language :: Python :: 3.12",
 40      "Programming Language :: Python :: 3.13",
 41      "Topic :: Software Development :: Libraries",
 42      "Typing :: Typed",
 43  ]
 44  dependencies = [
 45      "opensandbox>=0.1.7,<0.2.0",
 46      "click>=8.1.0,<9.0",
 47      "rich>=13.0.0,<14.0",
 48      "pyyaml>=6.0,<7.0",
 49      "tomli>=2.0.0; python_version < '3.11'",
 50  ]
 51  
 52  [project.urls]
 53  Homepage = "https://open-sandbox.ai"
 54  Repository = "https://github.com/alibaba/OpenSandbox"
 55  Documentation = "https://open-sandbox.ai"
 56  Issues = "https://github.com/alibaba/OpenSandbox/issues"
 57  
 58  [project.scripts]
 59  opensandbox = "opensandbox_cli.main:cli"
 60  osb = "opensandbox_cli.main:cli"
 61  
 62  [tool.hatch.version]
 63  source = "vcs"
 64  
 65  [tool.hatch.version.raw-options]
 66  root = ".."
 67  tag_regex = "^cli/v(?P<version>\\d+\\.\\d+\\.\\d+(?:[\\.\\w\\+\\-]*)?)$"
 68  git_describe_command = 'git describe --dirty --tags --long --match "cli/v*"'
 69  fallback_version = "0.1.0"
 70  
 71  [tool.hatch.build]
 72  include = [
 73      "LICENSE",
 74      "src/**/py.typed",
 75      "src/opensandbox_cli",
 76      "src/opensandbox_cli/skills/**",
 77  ]
 78  
 79  [tool.hatch.build.targets.wheel]
 80  packages = ["src/opensandbox_cli"]
 81  
 82  [dependency-groups]
 83  dev = [
 84      "pytest>=7.0.0",
 85      "pytest-cov>=4.0.0",
 86      "ruff>=0.14.8",
 87      "pyright>=1.1.0",
 88  ]
 89  
 90  [tool.ruff]
 91  target-version = "py310"
 92  line-length = 88
 93  
 94  [tool.ruff.lint]
 95  select = [
 96      "E",  # pycodestyle errors
 97      "W",  # pycodestyle warnings
 98      "F",  # pyflakes
 99      "I",  # isort
100      "B",  # flake8-bugbear
101      "C4", # flake8-comprehensions
102      "UP", # pyupgrade
103  ]
104  ignore = [
105      "E501", # line too long, handled by formatter
106      "B008", # do not perform function calls in argument defaults
107      "C901", # too complex
108  ]
109  
110  [tool.ruff.lint.per-file-ignores]
111  "__init__.py" = ["F401"]
112  
113  [tool.pyright]
114  typeCheckingMode = "standard"
115  pythonVersion = "3.10"
116  pythonPlatform = "All"
117  include = ["src"]
118  exclude = [
119      "**/node_modules",
120      "**/__pycache__",
121  ]
122  reportMissingImports = true
123  reportMissingTypeStubs = false
124  
125  [tool.pytest.ini_options]
126  minversion = "6.0"
127  addopts = "-ra -q --strict-markers --strict-config"
128  testpaths = ["tests"]
129  python_files = ["test_*.py", "*_test.py"]
130  
131  [tool.coverage.run]
132  source = ["src"]
133  branch = true
134  
135  [tool.uv.sources]
136  opensandbox = { path = "../sdks/sandbox/python", editable = true }