Implement the 2.8.0 workspace milestone with named snapshots and full-sandbox reset across the CLI, Python SDK, and MCP server. Persist the immutable baseline plus named snapshot archives under each workspace, add workspace reset metadata, and make reset recreate the sandbox while clearing command history, shells, and services without changing the workspace identity or diff baseline. Refresh the 2.8.0 docs, roadmap, and Python example around reset-over-repair, then validate with uv lock, UV_CACHE_DIR=.uv-cache make check, UV_CACHE_DIR=.uv-cache make dist-check, and a real guest-backed create/snapshot/reset/diff smoke test outside the sandbox.
88 lines
2.7 KiB
TOML
88 lines
2.7 KiB
TOML
[project]
|
|
name = "pyro-mcp"
|
|
version = "2.8.0"
|
|
description = "Ephemeral Firecracker sandboxes with curated environments, persistent workspaces, and MCP tools."
|
|
readme = "README.md"
|
|
license = { file = "LICENSE" }
|
|
authors = [
|
|
{ name = "Thales Maciel", email = "thales@thalesmaciel.com" }
|
|
]
|
|
requires-python = ">=3.12"
|
|
classifiers = [
|
|
"Development Status :: 5 - Production/Stable",
|
|
"Environment :: Console",
|
|
"Intended Audience :: Developers",
|
|
"License :: OSI Approved :: MIT License",
|
|
"Operating System :: POSIX :: Linux",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: Software Development :: Testing",
|
|
"Topic :: System :: Systems Administration",
|
|
]
|
|
dependencies = [
|
|
"mcp>=1.26.0",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://git.thaloco.com/thaloco/pyro-mcp"
|
|
Repository = "https://git.thaloco.com/thaloco/pyro-mcp"
|
|
Issues = "https://git.thaloco.com/thaloco/pyro-mcp/issues"
|
|
PyPI = "https://pypi.org/project/pyro-mcp/"
|
|
|
|
[project.scripts]
|
|
pyro = "pyro_mcp.cli:main"
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/pyro_mcp"]
|
|
|
|
[tool.hatch.build.targets.wheel.force-include]
|
|
"src/pyro_mcp/runtime_bundle/NOTICE" = "pyro_mcp/runtime_bundle/NOTICE"
|
|
"src/pyro_mcp/runtime_bundle/linux-x86_64/bin/firecracker" = "pyro_mcp/runtime_bundle/linux-x86_64/bin/firecracker"
|
|
"src/pyro_mcp/runtime_bundle/linux-x86_64/bin/jailer" = "pyro_mcp/runtime_bundle/linux-x86_64/bin/jailer"
|
|
"src/pyro_mcp/runtime_bundle/linux-x86_64/guest/pyro_guest_agent.py" = "pyro_mcp/runtime_bundle/linux-x86_64/guest/pyro_guest_agent.py"
|
|
"src/pyro_mcp/runtime_bundle/linux-x86_64/manifest.json" = "pyro_mcp/runtime_bundle/linux-x86_64/manifest.json"
|
|
|
|
[tool.hatch.build.targets.sdist]
|
|
include = [
|
|
"docs/**",
|
|
"src/pyro_mcp/**/*.py",
|
|
"src/pyro_mcp/runtime_bundle/NOTICE",
|
|
"src/pyro_mcp/runtime_bundle/linux-x86_64/bin/firecracker",
|
|
"src/pyro_mcp/runtime_bundle/linux-x86_64/bin/jailer",
|
|
"src/pyro_mcp/runtime_bundle/linux-x86_64/guest/pyro_guest_agent.py",
|
|
"src/pyro_mcp/runtime_bundle/linux-x86_64/manifest.json",
|
|
"README.md",
|
|
"LICENSE",
|
|
"AGENTS.md",
|
|
"pyproject.toml",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"mypy>=1.19.1",
|
|
"pre-commit>=4.5.1",
|
|
"pytest>=9.0.2",
|
|
"pytest-cov>=7.0.0",
|
|
"ruff>=0.15.4",
|
|
]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
addopts = "--cov=pyro_mcp --cov-report=term-missing --cov-fail-under=90"
|
|
|
|
[tool.ruff]
|
|
target-version = "py312"
|
|
line-length = 100
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "B"]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.12"
|
|
strict = true
|
|
warn_unused_configs = true
|
|
files = ["src", "tests", "examples"]
|