Adds a separate HTTP server (not the upstream API on :25590) for the
operator dashboard. Single-page UI with two panes:
* routes table — current pg-synced mappings, polled every 2s
* logs — SSE stream backed by a logrus hook + 500-entry ring buffer
Opt-in via AUTOMC_UI_BINDING (e.g. ":8082"); unset = no-op, behaves
exactly like upstream. Designed to live behind server-manager's
/infra/mc-router/* reverse-proxy.
Patch is internal/automc-only, same fork philosophy as the rest —
upstream files stay verbatim.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds opt-in extension package internal/automc/ that:
- Subscribes to Postgres notifications on a 'servers' table and pushes
route changes into server.Routes (no file I/O, no fsnotify).
- Provides a WakerFunc that POSTs to a configurable HTTP control plane
(server-manager) and polls until state=running.
When AUTOMC_DSN is unset, Wire() is a no-op and the binary behaves
exactly like upstream itzg/mc-router. Single patch site in main.go
(import + 4-line call) keeps upstream rebases trivial.
See docs/AUTOMC.md for env vars and the expected DB schema/trigger.