Drop the sidebar title/collapse chrome and align devices, alarms, configs, collect, and sync pages to the shared list layout.
Co-authored-by: Cursor <cursoragent@cursor.com>
Persist board/panel layouts server-side, open each board outside the network shell so workbench reloads do not refresh walls, and fix mapped-baseline chart overlay plus fullscreen fit.
Co-authored-by: Cursor <cursoragent@cursor.com>
Split the ops wall to its own route with fullscreen charts, persist collect errors as device events, and polish wall legend layout.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default auto-layout-after-discover to off (persisted), skip fitView unless layout ran, and dismiss the display details panel on outside click or Esc.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use SVG sidebar icons and ASCII separators, tighten chrome, add connect-mode hint, and drop the redundant status bar.
Co-authored-by: Cursor <cursoragent@cursor.com>
Group tools with display, drop the redundant locate button, clear find query after Enter, and restore corrupted edit/delete/collapse glyphs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Report unmatched/stub neighbors and matched links, move result lists into detail dialogs, deep-link edges to port traffic, and add fuzzy type-ahead canvas/palette NE search.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add tool modes, layouts, and per-edge/default style overrides with a cleaner toolbar and context menus.
Co-authored-by: Cursor <cursoragent@cursor.com>
Set uPlot data before toggling baseline series, keep previous compare data while refetching, and resize after legend layout changes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Compare by interface target_id with optional mapped baseline (same window or time-shifted), keep chart samples on target_row_id, and unify UI wording to interface.
Co-authored-by: Cursor <cursoragent@cursor.com>
Extend port discovery/sampling beyond ZTE, harden IOSv session prep, and avoid send_command_timing so Building configuration does not truncate config sync.
Co-authored-by: Cursor <cursoragent@cursor.com>
Avoid window.open(url, namedWindow) reloads that wiped WebCRT sessions; reclaim named windows without navigating when already open.
Co-authored-by: Cursor <cursoragent@cursor.com>
Config/NE/topology links now focus the webcrt window instead of replacing network routes; formatSystemTime treats naive API timestamps as UTC.
Co-authored-by: Cursor <cursoragent@cursor.com>
Per-NE failures stay in fail_count for retry; completed cycles no longer fail the whole run. Configurations page can download txt/zip snapshots.
Co-authored-by: Cursor <cursoragent@cursor.com>
Disable auto-sync by default, enforce single-flight cycles with crash requeue, delay new scheduled runs after restart, and make the network sidebar collapsible.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the top selection bar with a context menu, tighten map/palette cards and fullscreen controls, and tint the router asset by vendor (ZTE keeps default blue).
Co-authored-by: Cursor <cursoragent@cursor.com>
These raw fetch/navigation paths skipped Authorization after login was required, same class of bug as topology discover stream.
Co-authored-by: Cursor <cursoragent@cursor.com>
The SSE discover endpoint used raw fetch without Authorization, so login sessions got unauthorized after auth was enabled.
Co-authored-by: Cursor <cursoragent@cursor.com>
Nested stelnet/telnet captures hop TTY width at start; Netmiko's default 511 cols made mid-line edit redraws wrap and garble in ~80-col WebCRT.
Co-authored-by: Cursor <cursoragent@cursor.com>
Gate netx Web/API/WebCRT with JWT and per-user API tokens, bootstrap an admin with forced password change, and expose users/audit/API-key management under a System section. MCP can reuse data/auth/mcp_token without extra env for local labs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use raw Telnet reads for ANSI backspace, drop local erase so Tab/completion stays in sync, and make WebSocket attach exclusive so StrictMode remounts cannot drop the first echo.
Co-authored-by: Cursor <cursoragent@cursor.com>
Capture Netmiko session_log for login replay, open NE terminals in a fresh tab, tidy the device list UI with reconnect/log/clear/copy, and paint a live prompt after attach so the first keystrokes behave normally.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drain and nudge the device prompt after Netmiko login, replay bootstrap stdout when the WebSocket attaches, and surface connect errors in the terminal pane.
Co-authored-by: Cursor <cursoragent@cursor.com>
Uvicorn had no WebSocket implementation without the websockets package, causing browser websocket_error. Also bypass flaky Vite WS proxy by targeting :8890 in local UI.
Co-authored-by: Cursor <cursoragent@cursor.com>
Allow brief WebSocket re-attach after React StrictMode cleanup, ensure terminal pane has layout height, and show connect status in xterm.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sync UME inventory into managed NE with source-aware dedupe and cleanup, add one-click account updates for selected or tagged NEs, and expose the new managed NE actions in the web UI while keeping bulk bastion flows compatible with optional target passwords.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reorganize the UME page with collapsible CLI, sync status, and AI alert panels; embed CLI connect config in the main view; move task cards under token status; add tags column to managed NE list; and fix hop/proxy form alignment plus consistent section spacing.
Co-authored-by: Cursor <cursoragent@cursor.com>