a981003a45
Drop the parallel fields passed through prepare() → _resolve_plan and read everything from agent_provision instead. The provider plugin now declares its own guest_home (so the backend stops hardcoding "/home/node") and the wrapper that builds the provision plan accepts instance_name and prompt_file, which providers store on the plan. DockerBottlePlan and SmolmachinesBottlePlan expose container_name / machine_name, image / agent_image, dockerfile_path / agent_dockerfile_path, and prompt_file as properties that delegate to agent_provision so existing call sites keep working unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
"""Prepare step for the Docker bottle backend.
|
|
|
|
`resolve_plan` does all host-side resolution (image and container
|
|
names, prompt-file, proxy plan, runtime detection) and returns a
|
|
frozen DockerBottlePlan. No Docker resources are created; the only
|
|
side effects are scratch files under `stage_dir` and a probe of
|
|
`docker info`. Cross-backend host-side validation has already run
|
|
via the base class's `prepare` template before this is called.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from . import util as docker_mod
|
|
from .bottle_plan import DockerBottlePlan
|
|
from .. import BottleSpec
|
|
from ...env import ResolvedEnv
|
|
from ...agent_provider import AgentProvisionPlan
|
|
from ...egress import EgressPlan
|
|
from ...supervise import SupervisePlan
|
|
from ...git_gate import GitGatePlan
|
|
|
|
def preflight():
|
|
docker_mod.require_docker()
|
|
|
|
def build_guest_env(resolved_env: ResolvedEnv):
|
|
# resolved = resolve_env(spec.manifest, spec.agent_name)
|
|
# forwarded_env: dict[str, str] = dict(resolved.forwarded)
|
|
return dict(resolved_env.literals)
|
|
|
|
|
|
def resolve_plan(
|
|
spec: BottleSpec,
|
|
slug: str,
|
|
resolved_env: ResolvedEnv,
|
|
agent_provision_plan: AgentProvisionPlan,
|
|
egress_plan: EgressPlan,
|
|
supervise_plan: SupervisePlan,
|
|
git_gate_plan: GitGatePlan,
|
|
stage_dir: Path,
|
|
) -> DockerBottlePlan:
|
|
"""Resolve Docker-specific names and write scratch files. Trusts
|
|
that the agent and its skills/git-gate keys are present —
|
|
validation already ran in the base class."""
|
|
|
|
# ==== docker specific setup ====
|
|
use_runsc = docker_mod.runsc_available()
|
|
|
|
return DockerBottlePlan(
|
|
spec=spec,
|
|
stage_dir=stage_dir,
|
|
slug=slug,
|
|
forwarded_env=dict(resolved_env.forwarded),
|
|
git_gate_plan=git_gate_plan,
|
|
egress_plan=egress_plan,
|
|
supervise_plan=supervise_plan,
|
|
use_runsc=use_runsc,
|
|
agent_provision=agent_provision_plan,
|
|
# workspace_plan=workspace_plan,
|
|
)
|
|
|
|
|