dee0121e8d
prd-number-check / require-numbered-prds (pull_request) Successful in 13s
tracker-policy-pr / check-pr (pull_request) Successful in 7s
test / image-input-builds (pull_request) Successful in 41s
test / unit (pull_request) Successful in 51s
test / integration-docker (pull_request) Successful in 58s
test / coverage (pull_request) Successful in 41s
test / image-input-builds (push) Successful in 48s
test / unit (push) Successful in 56s
lint / lint (push) Successful in 1m2s
Update Quality Badges / update-badges (push) Successful in 1m4s
test / integration-docker (push) Failing after 2m53s
test / coverage (push) Has been skipped
On a Firecracker gateway cold boot, reconcile every live agent VM against the fresh gateway: push the new mitmproxy CA into each agent's trust store, re-provision git-gate repos/creds from the persisted upstreams snapshot, and restore egress tokens. Per-bottle failures are logged and skipped so one unreachable VM does not block the rest. New modules / changes: - backend/firecracker/reconcile.py: attach_bottled_agents_to_gateway, _push_ca, _reprovision_git_gate, _guest_ip_from_config - git_gate/provision.py: write upstreams.json after key provisioning so the bring-up reconcile can reconstruct the upstream table without the manifest - backend/firecracker/infra.py: call attach_bottled_agents_to_gateway in the cold-boot branch of ensure_running() - backend/base.py: no-op default on BottleBackend - backend/firecracker/consolidated_launch.py: remove superseded _reprovision_running_bottles / _guest_ip_from_config - orchestrator: OrchestratorCore.update_agent_secret + POST /bottles/<id>/secret + client.update_agent_secret (single-secret in-place update, the reusable primitive from the 2026-07-26 hotfix) - tests: 15 new tests in test_firecracker_reconcile.py; updated test_firecracker_infra.py cold-boot cases; stale FC reprovision tests removed from test_backend_secret_reprovision.py Closes #516.
51 lines
1.6 KiB
TOML
51 lines
1.6 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "bot-bottle"
|
|
version = "0.1.0"
|
|
description = "Self-hosted sandbox for running AI coding agents with egress controls"
|
|
readme = "README.md"
|
|
requires-python = ">=3.11"
|
|
license = { text = "Apache-2.0" }
|
|
authors = [{ name = "didericis" }]
|
|
keywords = ["ai", "agents", "sandbox", "security", "egress"]
|
|
classifiers = [
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3 :: Only",
|
|
"Operating System :: POSIX :: Linux",
|
|
"Operating System :: MacOS",
|
|
]
|
|
# The package itself has no runtime pip dependencies (stdlib-only); the
|
|
# only language runtime is the Python interpreter. Keep this empty.
|
|
dependencies = []
|
|
|
|
[project.urls]
|
|
Homepage = "https://gitea.dideric.is/didericis/bot-bottle"
|
|
Source = "https://gitea.dideric.is/didericis/bot-bottle"
|
|
|
|
[project.scripts]
|
|
bot-bottle = "bot_bottle.cli:main"
|
|
|
|
[tool.setuptools.packages.find]
|
|
include = ["bot_bottle*"]
|
|
|
|
# Non-Python assets the runtime reads from inside the package (container
|
|
# build contexts, entrypoints, netpool defaults). Keep in sync with the
|
|
# files shipped under bot_bottle/; test_pyproject.py asserts they exist.
|
|
[tool.setuptools.package-data]
|
|
bot_bottle = [
|
|
"gateway/egress/entrypoint.sh",
|
|
"contrib/claude/Dockerfile",
|
|
"contrib/claude/package.json",
|
|
"contrib/claude/package-lock.json",
|
|
"contrib/codex/Dockerfile",
|
|
"contrib/codex/codex-package_SHA256SUMS",
|
|
"contrib/pi/Dockerfile",
|
|
"contrib/pi/package.json",
|
|
"contrib/pi/package-lock.json",
|
|
"backend/firecracker/netpool.defaults.env",
|
|
"backend/macos_container/nested-containers-init.sh",
|
|
]
|