Make persistent workspaces capable of running long-lived background processes instead of forcing everything through one-shot exec calls. Add workspace service start/list/status/logs/stop across the CLI, Python SDK, and MCP server, with multiple named services per workspace, typed readiness probes (file, tcp, http, and command), and aggregate service counts on workspace status. Keep service state and logs outside /workspace so diff and export semantics stay workspace-scoped, and extend the guest agent plus backends to persist service records and logs across separate calls. Update the 2.7.0 docs, examples, changelog, and roadmap milestone to reflect the shipped surface. Validation: uv lock; UV_CACHE_DIR=.uv-cache make check; UV_CACHE_DIR=.uv-cache make dist-check; real guest-backed Firecracker smoke for workspace create, two service starts, list/status/logs, diff unaffected, stop, and delete. |
||
|---|---|---|
| .. | ||
| linux-x86_64 | ||
| NOTICE | ||
| README.md | ||
runtime_sources
Source-of-truth inputs for make runtime-bundle.
Current state:
build/runtime_sources/contains the real materialized runtime inputs used to build the packaged bundle.- the checked-in tracked files under
runtime_sources/linux-x86_64/are build recipes and lock metadata, not the materialized binaries/images. guest/pyro_guest_agent.pyis the guest agent source artifact that is installed into each built rootfs.- real source materialization now writes into
build/runtime_sources/, not back into the tracked placeholder files. - the packaged runtime images under
src/pyro_mcp/runtime_bundle/are stored via Git LFS, so contributor clones needgit lfs installand LFS-enabled checkout.
Materialization workflow:
make runtime-fetch-binariesmake runtime-build-kernel-realmake runtime-build-rootfs-realmake runtime-bundle
Official environment publication workflow:
make runtime-materializeDOCKERHUB_USERNAME=... DOCKERHUB_TOKEN=... make runtime-publish-official-environments-oci- if your uplink is slow, tune publishing with
PYRO_OCI_UPLOAD_TIMEOUT_SECONDS,PYRO_OCI_UPLOAD_CHUNK_SIZE_BYTES, andPYRO_OCI_REQUEST_TIMEOUT_SECONDS
Official end-user pulls are anonymous; registry credentials are only required for publishing.
Build requirements for the real path:
docker- outbound network access to the pinned upstream release hosts and Debian snapshot mirrors
- enough disk for a kernel build plus 2G ext4 images per source profile
Kernel build note:
- the kernel builder now defaults to conservative parallelism to avoid compiler crashes on memory-constrained hosts
- if you still need to force a lower setting, use
PYRO_KERNEL_BUILD_JOBS=1 make runtime-build-kernel-realorPYRO_KERNEL_BUILD_JOBS=1 make runtime-materialize
Current status:
- Firecracker and Jailer are materialized from pinned official release artifacts.
- The kernel and rootfs images are built from pinned inputs into
build/runtime_sources/. - The guest agent is installed into each rootfs and used for vsock exec plus workspace archive imports.
runtime.lock.jsonnow advertises real guest capabilities.
Safety rule:
- The build pipeline should never emit
vm_boot=true,guest_exec=true, orguest_network=truewhile any source artifact is still a shim or placeholder.