"""Run the internal web UI: ``python -m webui``.""" from __future__ import annotations import logging import os import uvicorn from webui.deployment_boundary import assess_bind_host logger = logging.getLogger("webui") def _validate_bind_host(host: str) -> None: assessment = assess_bind_host(host) if assessment.disposition == "refuse": logger.error("webui bind refused: %s", assessment.message) raise SystemExit(1) if assessment.disposition == "warn": logger.warning("webui bind warning: %s", assessment.message) def main() -> None: host = os.environ.get("WEBUI_HOST", "127.0.0.1") port = int(os.environ.get("WEBUI_PORT", "8765")) # Validate bind host before importing the full app stack so refuse paths # fail closed quickly (tests and operators must not hang on create_app). _validate_bind_host(host) from webui.app import create_app uvicorn.run(create_app(), host=host, port=port, log_level="info") if __name__ == "__main__": main()