Key alerts now deliver only via the DSH hub; Modal Body no longer flex-shrinks the rules rows to empty.
Co-authored-by: Cursor <cursoragent@cursor.com>
Checkpoint before workbench facade redesign: list defaults, API key quota, toast portal, topology canvas editor toolbar with More menu, and trusted-proxy client IP for sessions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Track per-connection metadata on the hub and surface it in the UME key-alert UI so operators can see which Netx Ops clients are subscribed.
Co-authored-by: Cursor <cursoragent@cursor.com>
Canonical playbooks live under skills/; netx-mcp 0.3.0 exposes queryNmsAlarms et al. with nms_ne_id aliases.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drain leftover prompts before Netmiko send_command, and make stop/start tolerate orphan workers and locked log files.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fix bare Enter re-audits, Tab expansion lag, and history mid-line edits by preferring the xterm/device row at Enter and rejecting empty-prompt snapshots.
Co-authored-by: Cursor <cursoragent@cursor.com>
Audit every completed stdin line per flush, keep a list of audit_line hints from the router, restore prompt enrichment and stdout fallback, and record actual bytes when hints disagree with what was sent.
Co-authored-by: Cursor <cursoragent@cursor.com>
Only audit interactive commands from frontend audit_line with a CLI prompt prefix; skip prompt-sync Enter and device error echoes; join wrapped xterm rows for long commands.
Co-authored-by: Cursor <cursoragent@cursor.com>
xterm and keydown can both emit carriage return for one keypress; skip duplicate Enter frames on the client and collapse identical audits within 450ms on the server.
Co-authored-by: Cursor <cursoragent@cursor.com>
Do not reuse the previous command when the operator presses Enter on a blank prompt; validate prompt-only rows on both frontend and backend.
Co-authored-by: Cursor <cursoragent@cursor.com>
PTY stdout/stdin carry backspace and edit noise during typing; record only the final row the operator sees when pressing Enter.
Co-authored-by: Cursor <cursoragent@cursor.com>
ZTE tab redraws the input line via carriage return; parse the last prompt line from PTY stdout on Enter instead of stdin keystrokes. Also remove remaining ?? in AuditPage.
Co-authored-by: Cursor <cursoragent@cursor.com>
On Enter, send audit_line from the terminal row so tab completion and edits match what the operator executed; keep the device prompt prefix in audit logs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep one 401 audit per IP+path window, and hide historical unauthorized noise from the default business view.
Co-authored-by: Cursor <cursoragent@cursor.com>
Persist only business events and mutating/failed HTTP calls, and default the audit UI to a business view with an explicit HTTP filter.
Co-authored-by: Cursor <cursoragent@cursor.com>
Make session lifecycle and typed CLI lines searchable in audit_log with password redaction, and surface summaries plus device filters in the ops UI.
Co-authored-by: Cursor <cursoragent@cursor.com>
Bring full managed-NE create onto the canvas (keep placeholders), add single/multi connect test and multi discover links, split topology/managedNe dialogs into modules, and shorten redundant connectivity failure details.
Co-authored-by: Cursor <cursoragent@cursor.com>
ZTE post-login banners can line-wrap login-failure stats and were misclassified before the target prompt was recognized.
Co-authored-by: Cursor <cursoragent@cursor.com>
LLDP discover and config collect were timing out on --More--; send vendor paging-off after nested/bastion auth, and attach session-log tails so failures show where the CLI stuck.
Co-authored-by: Cursor <cursoragent@cursor.com>
Huawei NEs still tagged zte_zxros were getting show lldp neighbor brief and timing out; use display lldp neighbor and align UME inventory vendor before the jump.
Co-authored-by: Cursor <cursoragent@cursor.com>
Some hops only accept stelnet in system-view; make it a saved yes/no setting (default off) instead of auto-retry, and always ALTER the new column on API boot when Alembic skips legacy DDL.
Co-authored-by: Cursor <cursoragent@cursor.com>
Skip Huawei special_login_handler under interactive WebCRT, harden stelnet host-key auth, and echo hop/login progress into the terminal during connect.
Co-authored-by: Cursor <cursoragent@cursor.com>
Topology MCP adds pull/compact/bundle/suggest-hubs with a no-template skill path; API gains fabric level and NE collection policy; web list pages get paging and denser collect/network workflows.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reject non-interactive CLI work early across exec, LLDP, config sync, collection, traffic, and connect-test flows so tasks record a clear reason instead of launching a doomed session.
Co-authored-by: Cursor <cursoragent@cursor.com>
Mirror config-sync retry_failed so operators can re-collect hard failures and empty/stub LLDP results without re-running the full scope.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ensure startup safety-net adds a_ifname/z_ifname on brownfield DBs, and normalize ADD COLUMN IF NOT EXISTS for SQLite tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
execManagedNe can take ne_ids/ume_ne_ids/targets and POST /v1/managed-ne/exec-batch so many show commands run in parallel instead of serial one-NE MCP loops.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pass view kind into membership so metro maps are not capped at core=80, add region-scoped neighbor projection, and align UI/tests with one physical canvas per region.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve ports from EQ+PTP first, enrich from LLDP when compatible, miss only on valid LLDP evidence, and paint UME solid blue / LLDP dashed / missing red. Also localize new root maps as Root map in English.
Co-authored-by: Cursor <cursoragent@cursor.com>
Old installs hung the canvas on the top-level region; migrate those views under a system root map so tree load and create-root keep working.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep visited regions when panning, prefetch detail on search locate with a gold flashing target highlight, and shrink default NE icons so dense UME layouts stay readable.
Co-authored-by: Cursor <cursoragent@cursor.com>
Top-level folders are nav-only with a unique system root map; UI drops custom/extra L2 creates. Batched dock-to-Fabric apply avoids PG lock OOM so World NEs can render, with subtree region counts restored.
Co-authored-by: Cursor <cursoragent@cursor.com>
Seed a unique L2 World canvas under the UME World container, show the flat map only when nested regions have NEs, pack blocks without overlap, allow drag overrides on the world map while forbidding direct NE adds, and hide the world-map truncation banner.
Co-authored-by: Cursor <cursoragent@cursor.com>