Replace the light section border and help-control colors so the bottom slice block no longer shows a white hairline.
Co-authored-by: Cursor <cursoragent@cursor.com>
Align the default canvas background, region list, and canvas name styles with the dark ops shell, and migrate the old light canvas default.
Co-authored-by: Cursor <cursoragent@cursor.com>
Workbench styling pulled fonts.googleapis.com which often stalls ~5s on blocked networks; switch to local system font stacks.
Co-authored-by: Cursor <cursoragent@cursor.com>
Lazy-load module routes, restyle remaining light cards/modals/sidebars, and let canvas background be tuned from the display menu.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sample Windows CPU via Processor Utility so values match Task Manager, and expose host metrics on /v1/metrics/json for the workbench poll.
Co-authored-by: Cursor <cursoragent@cursor.com>
Accept generic/linux on update, expose them in the device-type meta list, and auto-pick zte_zxros when vendor changes from a placeholder type.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop falling back to stale labels and pass hidePorts into link aggregation so only ×N remains for bundles.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default logical bundles for parallel links with optional physical expand and clearer NE-named ports; capture selection on context menu so copy/paste works again.
Co-authored-by: Cursor <cursoragent@cursor.com>
onlyRenderVisibleElements leaves nodes unmeasured; fitView now uses includeHiddenNodes so declared sizes still drive the viewport.
Co-authored-by: Cursor <cursoragent@cursor.com>
Predetermined handle coords used the 160px node box edges while DOM handles sit on the icon center, leaving a floating gap.
Co-authored-by: Cursor <cursoragent@cursor.com>
Managed NEs reuse stored credentials; unmanaged/LLDP placeholders get an IP and SSH/Telnet form. Selected links now show a clear highlight, and login page flare tweaks are included.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move the globe beside the form, drop the orbit ring, and soften a blue atmospheric limb that fades into space.
Co-authored-by: Cursor <cursoragent@cursor.com>
Filter add/layout/remove keeps MCP payloads small; tokens default MCP scopes and edit them in a modal with a compact help tip.
Co-authored-by: Cursor <cursoragent@cursor.com>
Splits canvas/Fabric tools into netx-topology-mcp, documents install and a companion Cursor skill, lets API keys grant ne:write explicitly, and adds optional topology live sync so operators can watch agent drawing without constant polling.
Co-authored-by: Cursor <cursoragent@cursor.com>
Refresh typography, soft topology grid backdrop, and motion while keeping the force-change flow on the same shell.
Co-authored-by: Cursor <cursoragent@cursor.com>
Paginate LLDP job items, surface port-traffic raw logs with a 300s default, harden topology discover/edit/zoom/fullscreen, and join mid-token CLI wraps before TextFSM.
Co-authored-by: Cursor <cursoragent@cursor.com>
Match ZXROS Scope/Holdtime columns, disable Netmiko cmd_verify on show commands, and do not SSH LLDP when vendor/device_type cannot be resolved.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use custom cli_templates plus community ntc-templates for LLDP and port traffic across ZTE/Huawei/Cisco/H3C/Juniper/Nokia, drop regex parsers, and surface Admin/Phy/Prot on port discover. Also batch-add topology NEs and tighten workbench branding.
Co-authored-by: Cursor <cursoragent@cursor.com>
Bastion hop success notices mention authentication failure count and were misread as target_auth_rejected.
Co-authored-by: Cursor <cursoragent@cursor.com>
Optional DDL used bare try/except, which left the migration txn aborted so alembic_version never stamped and config-sync APIs failed. Run best-effort statements inside SAVEPOINTs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Brownfield tables still require task_id while ORM only wrote device_id; mirror both columns on write and relax the leftover constraint.
Co-authored-by: Cursor <cursoragent@cursor.com>
Modular split left discover_ports referencing settings without importing it, which raised NameError on pull-ports.
Co-authored-by: Cursor <cursoragent@cursor.com>
Global app-main button styles were painting white pills on sort headers; override them to small muted labels that match the panel.
Co-authored-by: Cursor <cursoragent@cursor.com>
New-session path filled wsUrl after mount, remounting the terminal and dropping the connect wait WS. Mint tickets from sessionId only and ignore late wsUrl changes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reconnect and tab restore clear wsUrl; the pane still gated on wsUrl so Telnet stayed on authenticating with an empty terminal. Mount/render from sessionId instead.
Co-authored-by: Cursor <cursoragent@cursor.com>
Telnet should authenticate interactively in the terminal; only managed/quick-connect SSH without a saved password opens the credential dialog.
Co-authored-by: Cursor <cursoragent@cursor.com>
Mint a fresh ws_ticket on every terminal mount, soft-retry transient WS drops without killing the PTY, auto-reattach on tab focus, and persist open sessions across leaving /webcrt.
Co-authored-by: Cursor <cursoragent@cursor.com>
API /metrics and /health/ready now read a worker heartbeat when collectors are split out; WebCRT blocking I/O uses a dedicated executor so session pumps do not starve the default pool.
Co-authored-by: Cursor <cursoragent@cursor.com>