Tasks could start from host content in 2.2.0, but there was still no post-create path to update a live workspace from the host. This change adds the next host-to-task step so repeated fix or review loops do not require recreating the task for every local change. Add task sync push across the CLI, Python SDK, and MCP server, reusing the existing safe archive import path from seeded task creation instead of introducing a second transfer stack. The implementation keeps sync separate from workspace_seed metadata, validates destinations under /workspace, and documents the current non-atomic recovery path as delete-and-recreate. Validation: - uv lock - UV_CACHE_DIR=.uv-cache uv run pytest --no-cov tests/test_cli.py tests/test_vm_manager.py tests/test_api.py tests/test_server.py tests/test_public_contract.py - UV_CACHE_DIR=.uv-cache make check - UV_CACHE_DIR=.uv-cache make dist-check - real guest-backed smoke: task create --source-path, task sync push, task exec to verify both files, task delete
88 lines
2.6 KiB
TOML
88 lines
2.6 KiB
TOML
[project]
|
|
name = "pyro-mcp"
|
|
version = "2.3.0"
|
|
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"]
|