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>
Live TopoNodes use MD=...;ME=<uuid> / SBN=<uuid> without nodeId; extract those uuids as stable PKs and parent refs so reconcile drops old name:hash rows.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default topology read timeout to 0 (no deadline) and extend stale-running reap to 24h so long TopoNodes/TopologicalLinks pulls are not killed mid-stream.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resume still skips the wait and runs immediately; after that job writes ended_at, the following cycle waits a full interval from that completion (ignoring stale_running cleanup rows).
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop clearing the wake event at sleep entry, keep force-sync skip until consumed, and make pause loops wait on the resume event so UI start kicks topology immediately.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire topology_auto_sync into resume/pause force-sync hints, ignore stale_running cleanup rows when computing the interval clock, and wait a full interval instead of pulling topology on every cold start.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use savepoint upserts with payload dedupe, finalize jobs on a fresh sibling session, serialize concurrent topology syncs, and reap stale running rows so the scheduler does not keep spawning orphans.
Co-authored-by: Cursor <cursoragent@cursor.com>
Phase-1 docks both topology APIs without writing Fabric; expose a 24h topology_auto_sync task and domain=topology manual sync for later LLDP alignment.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop infinite reconnect loops when ZTE returns HTML 500 for a dead stream id and surface re-establish in the UI.
Co-authored-by: Cursor <cursoragent@cursor.com>
Restore sql_text and alarm-apply imports, slim WSS handshake headers to accessToken only, and treat 404/503 handshakes as lost subscriptions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Restore sqlalchemy.func and runtime helpers so alarms_current upsert and pause/resume no longer raise NameError 500s.
Co-authored-by: Cursor <cursoragent@cursor.com>
Restore ume_verify_tls=false so onsite UME login works without a .env override; production should set NETX_UME_VERIFY_TLS=true or pin a CA.
Co-authored-by: Cursor <cursoragent@cursor.com>
Point .env.example at NETX_UME_VERIFY_TLS=false for self-signed UME and surface the same hint on certificate verify login failures.
Co-authored-by: Cursor <cursoragent@cursor.com>
Project-neighbors supports dry_run for local dirty canvas; Save flushes adds. Connect mode uses drag-from side anchors with smoothstep elbows instead of click-click.
Co-authored-by: Cursor <cursoragent@cursor.com>
Queue fabric edge deletes until Save with undo-safe pending state; hard-delete topology/LLDP placeholders from the canvas; purge fully orphaned fabric nodes after inventory detach, with a periodic reconcile GC.
Co-authored-by: Cursor <cursoragent@cursor.com>
Toolbar and pane context menu create placeholders that follow the same setup path as LLDP in NE management and WebCRT.
Co-authored-by: Cursor <cursoragent@cursor.com>
Claim the existing placeholder in place and promote source to webcrt instead of prompting for password-only auth.
Co-authored-by: Cursor <cursoragent@cursor.com>
Align collection tasks with LLDP/config-sync chrome, and refresh active-task overview when jobs change.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop header netx-api/oclaw pills, restore UME/OClaw runtime rows in ops tasks, and raise node/edge label contrast on the dark canvas.
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>
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>
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>
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>
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>
Default start_netx.ps1/sh now set NETX_RUN_INLINE_SCHEDULERS=false and launch netx_api.worker; stop scripts tear the worker down with the API.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep inline schedulers as the start_netx.ps1 default while bounding UME raw_json and pruning old NE collection dirs on startup.
Co-authored-by: Cursor <cursoragent@cursor.com>