fix: thread slug + resolved_env from prepare to each backend's _resolve_plan

BottleBackend.prepare computed slug and resolved_env but never passed
them to _resolve_plan. The concrete docker/smolmachines _resolve_plan
methods still had the old (spec, *, stage_dir) signature too, so
prepare's kwargs blew up with "unexpected keyword argument
'instance_name'" the moment cli.py start was invoked.

Update the abstract _resolve_plan signature and both backend
implementations to accept the full kwarg set prepare passes, and
forward to resolve_plan.resolve_plan() with everything.
This commit is contained in:
2026-06-08 17:41:16 +00:00
committed by didericis
parent b38c6110f2
commit 384e496a1b
3 changed files with 64 additions and 5 deletions
+6 -1
View File
@@ -323,6 +323,8 @@ class BottleBackend(ABC, Generic[PlanT, CleanupT]):
return self._resolve_plan(
spec,
slug=slug,
resolved_env=resolved_env,
instance_name=instance_name, # FIXME: move to agent provision plan
agent_image=agent_image, # FIXME: move to agent provision plan
prompt_file=prompt_file, # FIXME: move to agent provision plan
@@ -331,7 +333,7 @@ class BottleBackend(ABC, Generic[PlanT, CleanupT]):
egress_plan=egress_plan,
supervise_plan=supervise_plan,
git_gate_plan=git_gate_plan,
stage_dir=stage_dir
stage_dir=stage_dir,
)
def _build_guest_env(self, resolved_env: ResolvedEnv) -> dict[str, str]:
@@ -395,6 +397,9 @@ class BottleBackend(ABC, Generic[PlanT, CleanupT]):
@abstractmethod
def _resolve_plan(self,
spec: BottleSpec,
*,
slug: str,
resolved_env: ResolvedEnv,
instance_name: str,
agent_image: str,
prompt_file: Path,
+30 -2
View File
@@ -48,8 +48,36 @@ class DockerBottleBackend(BottleBackend["DockerBottlePlan", "DockerBottleCleanup
launch."""
return shutil.which("docker") is not None
def _resolve_plan(self, spec: BottleSpec, *, stage_dir: Path) -> DockerBottlePlan:
return _resolve_plan.resolve_plan(spec, stage_dir=stage_dir)
def _resolve_plan(
self,
spec: BottleSpec,
*,
slug: str,
resolved_env,
instance_name: str,
agent_image: str,
prompt_file: Path,
agent_provision_plan,
agent_dockerfile_path: str,
egress_plan,
git_gate_plan,
supervise_plan,
stage_dir: Path,
) -> DockerBottlePlan:
return _resolve_plan.resolve_plan(
spec,
slug=slug,
resolved_env=resolved_env,
instance_name=instance_name,
agent_image=agent_image,
agent_dockerfile_path=agent_dockerfile_path,
prompt_file=prompt_file,
agent_provision_plan=agent_provision_plan,
egress_plan=egress_plan,
supervise_plan=supervise_plan,
git_gate_plan=git_gate_plan,
stage_dir=stage_dir,
)
@contextmanager
def launch(self, plan: DockerBottlePlan) -> Generator[DockerBottle, None, None]:
+28 -2
View File
@@ -42,9 +42,35 @@ class SmolmachinesBottleBackend(
return _smolvm.is_available()
def _resolve_plan(
self, spec: BottleSpec, *, stage_dir: Path
self,
spec: BottleSpec,
*,
slug: str,
resolved_env,
instance_name: str,
agent_image: str,
prompt_file: Path,
agent_provision_plan,
agent_dockerfile_path: str,
egress_plan,
git_gate_plan,
supervise_plan,
stage_dir: Path,
) -> SmolmachinesBottlePlan:
return _resolve_plan.resolve_plan(spec, stage_dir=stage_dir)
return _resolve_plan.resolve_plan(
spec,
slug=slug,
resolved_env=resolved_env,
instance_name=instance_name,
agent_image=agent_image,
agent_dockerfile_path=agent_dockerfile_path,
prompt_file=prompt_file,
agent_provision_plan=agent_provision_plan,
egress_plan=egress_plan,
supervise_plan=supervise_plan,
git_gate_plan=git_gate_plan,
stage_dir=stage_dir,
)
@contextmanager
def launch(