From 384e496a1bdcec405d4f4f3d8dbb58cb6490f80c Mon Sep 17 00:00:00 2001 From: claude Date: Mon, 8 Jun 2026 17:41:16 +0000 Subject: [PATCH] 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. --- bot_bottle/backend/__init__.py | 7 ++++- bot_bottle/backend/docker/backend.py | 32 ++++++++++++++++++++-- bot_bottle/backend/smolmachines/backend.py | 30 ++++++++++++++++++-- 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/bot_bottle/backend/__init__.py b/bot_bottle/backend/__init__.py index 23fd9cc..e6cd7a8 100644 --- a/bot_bottle/backend/__init__.py +++ b/bot_bottle/backend/__init__.py @@ -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, diff --git a/bot_bottle/backend/docker/backend.py b/bot_bottle/backend/docker/backend.py index 580593a..63160bf 100644 --- a/bot_bottle/backend/docker/backend.py +++ b/bot_bottle/backend/docker/backend.py @@ -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]: diff --git a/bot_bottle/backend/smolmachines/backend.py b/bot_bottle/backend/smolmachines/backend.py index 7ea6ef4..222a318 100644 --- a/bot_bottle/backend/smolmachines/backend.py +++ b/bot_bottle/backend/smolmachines/backend.py @@ -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(