89058fbaec
test / integration-docker (pull_request) Successful in 24s
lint / lint (push) Failing after 1m0s
test / unit (pull_request) Successful in 2m3s
test / integration-firecracker (pull_request) Successful in 4m48s
test / coverage (pull_request) Successful in 20s
test / publish-infra (pull_request) Has been skipped
tracker-policy-pr / check-pr (pull_request) Failing after 11m36s
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
"""Plan type for the Firecracker backend."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from pathlib import Path
|
|
|
|
from ...agent_provider import PromptMode
|
|
from .. import BottlePlan
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class FirecrackerBottlePlan(BottlePlan):
|
|
slug: str
|
|
forwarded_env: dict[str, str] = field(repr=False)
|
|
# Stamped by launch once the gateway is up and its ports are
|
|
# published on the host-side TAP IP (empty at prepare time).
|
|
agent_proxy_url: str = ""
|
|
agent_git_gate_url: str = ""
|
|
agent_supervise_url: str = ""
|
|
# Per-bottle identity token the agent presents on every attributed request
|
|
# (egress proxy credentials, git-gate/supervise headers); set by launch
|
|
# from the orchestrator registration. Empty pre-registration.
|
|
identity_token: str = ""
|
|
# Applied to every agent SSH exec and mirrored into /run inside the VM so
|
|
# the host can recover it after the infra VM restarts.
|
|
env_var_secret: str = ""
|
|
|
|
@property
|
|
def container_name(self) -> str:
|
|
"""Instance name, reused for the gateway container + VM run dir.
|
|
Matches the `bot-bottle-<slug>` convention the other backends
|
|
use so cleanup/enumerate discovery-by-prefix keeps working."""
|
|
return self.agent_provision.instance_name
|
|
|
|
@property
|
|
def image(self) -> str:
|
|
return self.agent_provision.image
|
|
|
|
@property
|
|
def dockerfile_path(self) -> str:
|
|
return self.agent_provision.dockerfile
|
|
|
|
@property
|
|
def prompt_file(self) -> Path:
|
|
return self.agent_provision.prompt_file
|
|
|
|
@property
|
|
def agent_command(self) -> str:
|
|
return self.agent_provision.command
|
|
|
|
@property
|
|
def agent_prompt_mode(self) -> PromptMode:
|
|
return self.agent_provision.prompt_mode
|
|
|
|
@property
|
|
def agent_provider_template(self) -> str:
|
|
return self.agent_provision.template
|
|
|
|
@property
|
|
def git_gate_insteadof_host(self) -> str:
|
|
if self.agent_git_gate_url.startswith("http://"):
|
|
return self.agent_git_gate_url.removeprefix("http://").rstrip("/")
|
|
return super().git_gate_insteadof_host
|
|
|
|
@property
|
|
def git_gate_insteadof_scheme(self) -> str:
|
|
if self.agent_git_gate_url.startswith("http://"):
|
|
return "http"
|
|
return super().git_gate_insteadof_scheme
|