Fix the default one-shot install path so empty bundled profile directories no longer win over OCI-backed environment pulls or leave broken cached symlinks behind. Treat cached installs as valid only when the manifest and boot artifacts are all present, repair invalid installs on the next pull, and add human-mode phase markers for env pull and run without changing JSON output. Align the Python lifecycle example and public docs with the current exec_vm/vm_exec auto-clean semantics, and validate the slice with focused pytest coverage, make check, make dist-check, and a real default-path pull/inspect/run smoke.
88 lines
2.6 KiB
TOML
88 lines
2.6 KiB
TOML
[project]
|
|
name = "pyro-mcp"
|
|
version = "2.0.1"
|
|
description = "Curated Linux environments for ephemeral Firecracker-backed VM execution."
|
|
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"]
|