diff --git a/docs/web-ui/dashboard.md b/docs/web-ui/dashboard.md index d73131d9..9ce7fe58 100644 --- a/docs/web-ui/dashboard.md +++ b/docs/web-ui/dashboard.md @@ -214,7 +214,7 @@ title). Its own esbuild bundle (`matrix-accounts.js`); no SSE — it reads `/api/state` once for the agent picker and otherwise works off two purpose-built endpoints. -An agent picker (populated from `state.agents`) drives a list of that +An agent picker (populated from `state.containers`, the live roster) drives a list of that agent's configured accounts — name, homeserver, and a token-status dot — read from `GET /api/matrix-accounts?agent=` → `{ accounts: [ { name, homeserver, token_present } ] }`. The status diff --git a/frontend/packages/dashboard/src/matrix-accounts.js b/frontend/packages/dashboard/src/matrix-accounts.js index a71a2dd9..e180b12d 100644 --- a/frontend/packages/dashboard/src/matrix-accounts.js +++ b/frontend/packages/dashboard/src/matrix-accounts.js @@ -31,7 +31,10 @@ async function loadState() { if (!resp.ok) return; const s = await resp.json(); renderServerWarnings(s.server_warnings); - agents = (s.agents || []) + // `/api/state` exposes the live roster under `containers` (each entry an + // object carrying `.name`); there is no top-level `agents` field, so the + // picker stays compatible with both string + object shapes defensively. + agents = (s.containers || []) .map((a) => (typeof a === 'string' ? a : a && a.name)) .filter(Boolean) .sort();