refactor: rename egress-proxy → egress everywhere
The manifest key is `egress:` now; finish the rename so the rest of the codebase matches. Files (Dockerfile.egress, claude_bottle/egress.py etc.), classes (Egress, EgressConfig, EgressRoute, EgressPlan, DockerEgress), constants (EGRESS_HOSTNAME, EGRESS_ROUTES, ...), container name prefix (claude-bottle-egress-*), docker network alias (egress), the introspection host (_egress.local), the MCP tool IDs (egress-block, list-egress-routes), and the preflight label all drop the `-proxy` suffix.
This commit is contained in:
@@ -3,8 +3,8 @@ act on them (approve / modify / reject). PRD 0013 v1.
|
||||
|
||||
Curses-based TUI; modify-then-approve shells out to $EDITOR. The
|
||||
approval handlers wire to the per-tool remediation engines:
|
||||
PRD 0014 (egress-proxy, retargeted from cred-proxy in PRD 0017
|
||||
chunk 3) writes routes.yaml + SIGHUPs egress-proxy; PRD 0015
|
||||
PRD 0014 (egress, retargeted from cred-proxy in PRD 0017
|
||||
chunk 3) writes routes.yaml + SIGHUPs egress; PRD 0015
|
||||
(pipelock) writes the allowlist + restarts pipelock; PRD 0016
|
||||
(capability) rebuilds the bottle Dockerfile.
|
||||
"""
|
||||
@@ -27,8 +27,8 @@ from ..backend.docker.capability_apply import (
|
||||
CapabilityApplyError,
|
||||
apply_capability_change,
|
||||
)
|
||||
from ..backend.docker.egress_proxy_apply import (
|
||||
EgressProxyApplyError,
|
||||
from ..backend.docker.egress_apply import (
|
||||
EgressApplyError,
|
||||
add_route,
|
||||
apply_routes_change,
|
||||
fetch_current_routes,
|
||||
@@ -51,7 +51,7 @@ from ..supervise import (
|
||||
STATUS_MODIFIED,
|
||||
STATUS_REJECTED,
|
||||
TOOL_CAPABILITY_BLOCK,
|
||||
TOOL_EGRESS_PROXY_BLOCK,
|
||||
TOOL_EGRESS_BLOCK,
|
||||
TOOL_PIPELOCK_BLOCK,
|
||||
archive_proposal,
|
||||
list_pending_proposals,
|
||||
@@ -65,7 +65,7 @@ from ._common import PROG
|
||||
# Errors any remediation engine may raise. Caught by the TUI key
|
||||
# handlers and surfaced in the status line so a failed apply keeps
|
||||
# the proposal pending rather than crashing curses.
|
||||
ApplyError = (EgressProxyApplyError, PipelockApplyError, CapabilityApplyError)
|
||||
ApplyError = (EgressApplyError, PipelockApplyError, CapabilityApplyError)
|
||||
|
||||
|
||||
# --- Discovery -------------------------------------------------------------
|
||||
@@ -104,10 +104,10 @@ def _discover_sidecar_slugs(name_prefix: str) -> list[str]:
|
||||
return sorted(out)
|
||||
|
||||
|
||||
def discover_egress_proxy_slugs() -> list[str]:
|
||||
"""Slugs of bottles with a running egress-proxy sidecar. Used by
|
||||
def discover_egress_slugs() -> list[str]:
|
||||
"""Slugs of bottles with a running egress sidecar. Used by
|
||||
the operator-initiated `routes edit` verb."""
|
||||
return _discover_sidecar_slugs("claude-bottle-egress-proxy-")
|
||||
return _discover_sidecar_slugs("claude-bottle-egress-")
|
||||
|
||||
|
||||
def discover_pipelock_slugs() -> list[str]:
|
||||
@@ -157,7 +157,7 @@ def approve(
|
||||
entry. If `final_file` is provided the status is `modified`;
|
||||
otherwise `approved`.
|
||||
|
||||
Raises EgressProxyApplyError if the egress-proxy-block apply
|
||||
Raises EgressApplyError if the egress-block apply
|
||||
fails (sidecar down, invalid routes content survived the
|
||||
operator's modify). On failure no response is written and no
|
||||
audit entry is appended — the proposal stays pending so the
|
||||
@@ -166,9 +166,9 @@ def approve(
|
||||
file_to_apply = final_file if final_file is not None else qp.proposal.proposed_file
|
||||
|
||||
diff_before, diff_after = "", ""
|
||||
if qp.proposal.tool == TOOL_EGRESS_PROXY_BLOCK:
|
||||
if qp.proposal.tool == TOOL_EGRESS_BLOCK:
|
||||
# The proposal is a single-route JSON; add_route fetches the
|
||||
# current routes from the running egress-proxy, merges the
|
||||
# current routes from the running egress, merges the
|
||||
# new route in, and applies the full merged file. The
|
||||
# audit log gets the BEFORE/AFTER of the full file so the
|
||||
# diff renders cleanly even though the agent only proposed
|
||||
@@ -225,16 +225,16 @@ def operator_edit_routes(slug: str, new_content: str) -> tuple[str, str]:
|
||||
apply_routes_change. Writes an audit entry tagged
|
||||
ACTION_OPERATOR_EDIT to distinguish from tool-call approvals.
|
||||
|
||||
Raises EgressProxyApplyError on failure."""
|
||||
Raises EgressApplyError on failure."""
|
||||
before, after = apply_routes_change(slug, new_content)
|
||||
write_audit_entry(AuditEntry(
|
||||
timestamp=datetime.now(timezone.utc).isoformat(),
|
||||
bottle_slug=slug,
|
||||
component="egress-proxy",
|
||||
component="egress",
|
||||
operator_action=ACTION_OPERATOR_EDIT,
|
||||
operator_notes="",
|
||||
justification="",
|
||||
diff=render_diff(before, after, label="egress-proxy"),
|
||||
diff=render_diff(before, after, label="egress"),
|
||||
))
|
||||
return before, after
|
||||
|
||||
@@ -254,8 +254,8 @@ def _apply_pipelock_url(slug: str, failed_url: str) -> tuple[str, str]:
|
||||
|
||||
Path-level enforcement was the open question this function's
|
||||
earlier docstring flagged; PRD 0017 answered it by putting
|
||||
egress-proxy in front of pipelock. The agent's
|
||||
`egress-proxy-block` tool now proposes routes.yaml changes that
|
||||
egress in front of pipelock. The agent's
|
||||
`egress-block` tool now proposes routes.yaml changes that
|
||||
can include a `path_allowlist`. Use that tool for path-level
|
||||
follow-ups; this one stays hostname-only because pipelock is
|
||||
still the last hostname gate before egress."""
|
||||
@@ -302,11 +302,11 @@ def _write_audit(
|
||||
diff_before: str,
|
||||
diff_after: str,
|
||||
) -> None:
|
||||
"""Audit log for egress-proxy / pipelock tools. capability-block
|
||||
"""Audit log for egress / pipelock tools. capability-block
|
||||
has no audit log (its changes are captured by the bottle's
|
||||
rebuild record + git history per PRD 0016).
|
||||
|
||||
For egress-proxy-block + pipelock-block approvals the (before,
|
||||
For egress-block + pipelock-block approvals the (before,
|
||||
after) come from the apply_*_change return — a real
|
||||
fetched-from-sidecar diff. For rejections both are empty strings
|
||||
and the audit diff renders as empty."""
|
||||
@@ -688,19 +688,19 @@ def _modify(stdscr: "curses._CursesWindow", qp: QueuedProposal) -> str | None:
|
||||
def _suffix_for_tool(tool: str) -> str:
|
||||
if tool == TOOL_CAPABILITY_BLOCK:
|
||||
return ".dockerfile"
|
||||
# egress-proxy-block / pipelock-block: JSON-ish + plain.
|
||||
# egress-block / pipelock-block: JSON-ish + plain.
|
||||
return ".txt"
|
||||
|
||||
|
||||
def _operator_edit_routes_flow(stdscr: "curses._CursesWindow") -> str:
|
||||
"""Operator-initiated routes.yaml edit. Discover running
|
||||
egress-proxy sidecars, pick one (single → use directly; multi →
|
||||
egress sidecars, pick one (single → use directly; multi →
|
||||
prompt), fetch the current routes, open in $EDITOR, apply on
|
||||
save. Returns a status-line message."""
|
||||
return _operator_edit_flow(
|
||||
stdscr,
|
||||
label="routes",
|
||||
discover=discover_egress_proxy_slugs,
|
||||
discover=discover_egress_slugs,
|
||||
fetch=fetch_current_routes,
|
||||
apply=operator_edit_routes,
|
||||
suffix=".yaml",
|
||||
|
||||
Reference in New Issue
Block a user