///|
pub async fn Gateway::start(self : Gateway) -> Unit {
  self.logger.info("Starting MoonGate gateway on \{self.host}:\{self.port}")
  self.control.initialize() catch {
    err => self.logger.error("Failed to initialize control token: \{err}")
  }
  self.config.load_settings_store() catch {
    err => self.logger.warn("Failed to load MoonGate settings: \{err}")
  }
  self.proxy.load_provider_store() catch {
    err => self.logger.warn("Failed to load MoonGate providers: \{err}")
  }
  self.proxy.load_proxy_store() catch {
    err => self.logger.warn("Failed to load MoonGate proxy settings: \{err}")
  }
  self.usage.load_model_pricing_store()
  ignore(
    self.usage.load_and_reconcile_persistent_store(
      self.usage.pricing_override_rows(),
    ),
  )
  self.auth.load_startup_credentials(self.logger)
  let server = @httpx.Server::new(self.host, self.port, reuse_addr=true)
  let bound_port = server.port()
  try {
    let status_path = write_moongate_suite_status(
      host=self.host,
      port=bound_port,
      model=self.model,
      status="running",
      ready=true,
    )
    self.logger.info("Wrote Moon suite status to \{status_path}")
  } catch {
    err => self.logger.warn("Failed to write Moon suite status: \{err}")
  }
  let router = @httpx.Router::new()
  let file_server = @httpx.FileServer::new("public")
  self.proxy.register_inference_routes(
    router,
    self.auth,
    self.usage,
    self.config,
    self.session,
    self.model,
    self.logger,
  )
  self.usage.register_status_routes(
    router,
    self.auth,
    self.proxy.provider_router,
    self.host,
    bound_port,
    self.runtime.uptime_seconds(self.started_at_ms),
  )
  self.config.register_routes(router, self.proxy, self.host, bound_port)
  self.runtime.register_routes(router)
  self.workspace.register_routes(
    router,
    self.config,
    self.logger,
    self.host,
    bound_port,
  )
  self.skills.register_routes(router)
  self.proxy.register_management_routes(
    router,
    self.auth,
    self.usage,
    self.host,
    bound_port,
    self.started_at_ms,
    self.runtime.uptime_seconds(self.started_at_ms),
    self.config.stream_check_config,
  )
  self.openclaw.register_routes(router)
  self.usage.register_routes(router, self.auth, self.proxy.provider_router)
  self.session.register_routes(
    router,
    moon_session_terminal_from_settings(self.config.app_settings),
  )
  self.auth.register_routes(router)
  self.register_suite_routes(router, bound_port)
  router.set_not_found_handler(file_server.handler())
  self.logger.info("Gateway started on \{self.host}:\{bound_port}")
  server.serve(
    moongate_security_handler(
      router.handler(),
      self.control,
      self.host,
      bound_port,
    ),
  )
}