[project] name = "llm-sandbox" version = "0.3.13" description = "LLM Sandbox is a lightweight and portable sandbox environment designed to run large language model (LLM) generated code in a safe and isolated mode." authors = [{ name = "Duy Huynh", email = "vndee.huynh@gmail.com" }] readme = "README.md" keywords = ['python'] requires-python = ">=3.10,<4.0" classifiers = [ "Intended Audience :: Developers", "Programming Language :: Python", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = ["pydantic>=2.11.5"] [project.urls] Homepage = "https://vndee.github.io/llm-sandbox/" Repository = "https://github.com/vndee/llm-sandbox" Documentation = "https://vndee.github.io/llm-sandbox/" DOI = "https://doi.org/10.5281/zenodo.21760525" [project.scripts] llm-sandbox-mcp = "llm_sandbox.mcp_server.server:main" [project.optional-dependencies] docker = ["docker>=7.1.0"] k8s = ["kubernetes>=32.0.1"] podman = ["docker>=7.1.0", "podman>=5.4.0.1"] mcp-docker = ["docker>=7.1.0", "mcp>=1.28.1,<3"] mcp-podman = ["docker>=7.1.0", "mcp>=1.28.1,<3", "podman>=5.4.0.1"] mcp-k8s = ["kubernetes>=32.0.1", "mcp>=1.28.1,<3"] [dependency-groups] native-tests = ["pytest>=7.2.0", "pytest-cov>=4.0.0", "hatchling>=1.27,<2"] dev = [ "hatchling>=1.27,<2", "pytest>=7.2.0", # CVE-2026-112940: security floor for the pre-commit/tox transitive dependency. "filelock>=4.2.1; python_version >= '3.11'", # Patched filelock requires Python 3.11; these tools are not needed by the 3.10 test job. "pre-commit>=2.20.0; python_version >= '3.11'", "tox-uv>=1.11.3; python_version >= '3.11'", "deptry>=0.23.0", "mypy>=0.991", "pytest-cov>=4.0.0", "ruff>=0.11.11", "mkdocs>=1.4.2", "mkdocs-material>=8.5.10", "mkdocstrings[python]>=0.26.1", "langchain>=0.3.25", "podman>=5.4.0.1", "kubernetes>=32.0.1", "docker>=7.1.0", "langgraph>=0.4.7", "langchain-openai>=0.3.18", "langchain-core>=0.3.61", "mkdocs-minify-plugin>=0.8.0", "mkdocs-git-revision-date-localized-plugin>=1.4.6", "mcp>=1.28.1,<3", ] [build-system] requires = ["hatchling>=1.27,<2"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["llm_sandbox"] exclude = ["/llm_sandbox/bin/*.exe", "/llm_sandbox/bin/THIRD_PARTY_NOTICES.txt"] [tool.hatch.build.targets.wheel.hooks.custom] path = "hatch_build.py" [tool.hatch.build.targets.sdist] exclude = ["/llm_sandbox/bin/*.exe", "/llm_sandbox/bin/THIRD_PARTY_NOTICES.txt", "/native/windows-mxc/target"] [tool.mypy] files = ["llm_sandbox"] ignore_missing_imports = true disallow_untyped_defs = true no_implicit_optional = true check_untyped_defs = true warn_return_any = true warn_unused_ignores = true show_error_codes = true [tool.pytest.ini_options] testpaths = ["tests"] markers = [ "integration: marks tests that require external services like Docker", ] [tool.ruff] target-version = "py311" line-length = 120 fix = true # Results include byte-for-byte source snapshots with recorded SHA-256 hashes. # Keep direct Ruff invocations from rewriting those archived evidence files too. extend-exclude = ["benchmarks/results"] force-exclude = true [tool.ruff.lint] select = ["ALL"] ignore = [ "FBT001", "FBT002", "A003", "ANN401", "COM812", "COM819", "C901", "D100", "D203", "D213", "D300", "E111", "E114", "E117", "ISC001", "ISC002", "Q000", "Q001", "Q002", "Q003", "W191", "S108", "PLR0913", ] fixable = ["ALL"] unfixable = [] [tool.ruff.lint.per-file-ignores] "tests/*" = ["S101", "SLF001", "PLR2004", "PT019", "ARG002", "ANN201"] [tool.ruff.format] preview = true quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" [tool.coverage.report] skip_empty = true [tool.coverage.run] branch = true source = ["llm_sandbox"] [tool.deptry] ignore = ["DEP004"] # The agent SDK examples each import a third-party framework (openai-agents, # crewai, ag2, ...) that is intentionally not a project dependency: they are # illustrations, installed ad hoc by whoever runs one. Declaring all of them # would also be unresolvable, since several pin conflicting langchain versions. # extend_exclude, not exclude: the latter replaces deptry's defaults, which # already skip tests/ and .venv. # Archived analysis/plot scripts document an experiment, not package dependencies. extend_exclude = ["examples/agent_sdks", "benchmarks/results"]