diff --git a/docs/web-ui.md b/docs/web-ui.md index 6c88f02a..c05e089f 100644 --- a/docs/web-ui.md +++ b/docs/web-ui.md @@ -823,13 +823,7 @@ through. Three flex columns (#394 redesign): agent has a forge account; any `hyperhive.dashboardLinks` extras (`kind = External`). A `↑ dashboard` link is prepended by the JS so the host dashboard is one click away. `GET /api/agent/{name}/links` - is the single source of truth. Each `NavLink.kind` resolves - differently in the frontend: `Container` → same-origin path - (the agent page is itself container-local); `Forge` → - `http://:3000`; `External` → already absolute. - All anchors are built via `el()` — agent-declared icon / - label / url strings never reach `innerHTML` (XSS-safe by - construction). + is the single source of truth. - Row 2 (`.agent-state-row`): alive badge + state badge + model chip + ctx badge + cost badge + last-turn chip + cancel button. - Alive badge: `● alive` (green) / `⊘ rate limited` (red) / @@ -877,26 +871,11 @@ header `

` stays short (#589 phase A). and scrolls behind the fixed header + footer. - `#status` overlay: empty when online; shows the login form / OAuth URL when `status` is `needs_login_*`. The OAuth code input is - `type="password"` with a `👁 reveal` toggle that flips it back to - `text` on press so the operator can sanity-check the paste before - submit — avoids accidental on-screen token exposure to - shoulder-surfers or screenshots. `autocomplete="one-time-code"` - is the semantic value for OAuth codes (per WHATWG): browsers may - silently ignore `autocomplete="off"` on `type="password"`, but - `one-time-code` is honoured and suppresses the "save password - for this site?" prompt that would otherwise fire on submit. + `type="password"` with a `👁 reveal` toggle (#568 — avoids + accidental on-screen token exposure; `autocomplete="one-time-code"` + for password-manager suppression). - Terminal-wrap: live event tail (sticky-bottom auto-scroll + - `↓ N new` pill when not at bottom). The pill is **anchored in - `.agent-main`**, not in `log.parentElement = .terminal-wrap`: - `.terminal-wrap` applies `backdrop-filter: blur` for the frost - effect, which creates a CSS stacking context — anchoring the - pill inside that context would trap its `z-index` below the - fixed composer in the root stacking context, and it'd never - float. `.agent-main` has no backdrop-filter (no stacking-context - creators), so the pill's `z-index` reaches the root and properly - composites above the composer. Geometry is unchanged — - `.agent-main` and `.terminal-wrap` both `inset: 0` fill the same - area. + `↓ N new` pill when not at bottom). **Fixed-overlay footer** (`