mirror of
https://github.com/netbirdio/dashboard.git
synced 2026-09-23 00:30:43 -07:00
* Pick a private-capable proxy cluster when bootstrapping the agent network The connect-provider wizard bootstraps the account's agent network endpoint from a proxy cluster it auto-picks off /reverse-proxies/domains, taking the first validated free domain. That list includes clusters that cannot host the endpoint: the endpoint is a private service, reachable only from connected peers and authorised by their tunnel identity, which needs a cluster with at least one connected embedded proxy — the same supports_private flag the Reverse Proxy modal gates NetBird-Only Access on. Management refuses a bootstrap onto a cluster reporting it false, so the wizard could propose a pick the API rejects, and the endpoint it assigns is immutable. Filter the candidates on supports_private before auto-picking, and give the "nothing to pick" callout a second message for the case where clusters exist but none of them has an embedded proxy — a different problem from having no proxy at all, and a different fix. Only an explicit false disqualifies a cluster: a management build that predates the flag reports nothing at all, and dropping every cluster there would block setup on a backend that would have accepted it. Callout takes an optional data-testid so a spec can assert on the state it announces rather than on its copy. * Derive the bootstrap cluster instead of holding it in state Nothing picks the bootstrap cluster: there is no selector, so the state could only ever mirror the first usable entry of the domains list, with an effect writing it back on arrival and a render pass to show it. Derive it from that list instead, which drops the state, the effect and the two resets that kept them in sync. * Declare the e2e proxy private so a bootstrap cluster exists The connect-provider wizard now offers only clusters whose proxies report the private capability, because the agent network endpoint is a private service and management refuses to bootstrap it anywhere else. The e2e environment's reverse-proxy ran with NB_PROXY_PRIVATE at its default of false, so with that filter in place no cluster qualified: the wizard showed the no-cluster callout, Continue stayed disabled, and every spec that walks through the wizard failed on the Models tab it could no longer reach — agentgateway, Kimi and the refused-save spec. Declare the capability on the primary proxy. The no-ports proxy stays centralised, so the pick also has to skip past a cluster that does not qualify, which is the case the wizard filter exists for. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sa3DsBDP3VciAi4PPG17L6 * Send the no-cluster callout to the agent network Clusters section The callout told users to connect a proxy under Reverse Proxy, the generic services page. Agent Network has its own Clusters tab under Configuration, which is where a user setting up the agent network expects to manage the clusters it runs on, so both messages link there instead. The tab and the callout gate on the same permission (services read), so every role that sees the callout can follow the link. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sa3DsBDP3VciAi4PPG17L6 * Say private capabilities, not embedded proxy, in the no-cluster callout The requirement is a cluster with private capabilities, which is what the supports_private flag reports. Tying the message to an embedded proxy named one way of getting there as if it were the requirement itself, and pointed users at the wrong fix. The callout now states the requirement and where to connect such a cluster. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sa3DsBDP3VciAi4PPG17L6 --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>