"""MacosContainerFreezer — snapshot a macOS container bottle. Apple Container removes containers when they stop, making stop-then-export impossible. Instead, commit_container execs into the running container and streams the root filesystem via tar. The bottle continues running after commit. """ from __future__ import annotations from .. import ActiveAgent from ..freeze import Freezer from .util import commit_container from ...log import info class MacosContainerFreezer(Freezer): """Freezes a macOS-container bottle via exec-tar + image rebuild.""" backend_name = "macos-container" def _freeze(self, agent: ActiveAgent) -> str: container = f"bot-bottle-{agent.slug}" image_tag = f"bot-bottle-committed-{agent.slug}:latest" commit_container(container, image_tag) return image_tag def _export_hint(self, slug: str, image_ref: str) -> None: info( f"to export for migration: " f"container image save {image_ref} -o {slug}.tar" )