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>
Agents often passed UME UUIDs into getManagedNe and hit SQL without scope; aliases, richer hints, and scope error text reduce these dead ends.
Co-authored-by: Cursor <cursoragent@cursor.com>
Align MCP CLI calls with the API default so slow show commands are less likely to fail before the device responds.
Co-authored-by: Cursor <cursoragent@cursor.com>
Agents frequently passed group_by to the fixed aggregate tool; route those calls to raw aggregation and discourage list/exec retry loops.
Co-authored-by: Cursor <cursoragent@cursor.com>
Only expand adjacency for visited nodes, and rank objective=total with crossing 0.18 + clearance 0.08 (fallback to crossings when clearance is skipped).
Co-authored-by: Cursor <cursoragent@cursor.com>
Flatten nested toolbar boxes, add a resizable sidebar and selective off-map NE add, and make fullscreen floats/minimap follow canvas background.
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>
Trim public tools to 14, expose only kept layout actions/recipes, merge Fabric queries, drop createTopologyView/listTopologyViews, and align skill/docs with the live catalog.
Co-authored-by: Cursor <cursoragent@cursor.com>
Defer topology xyflow and WebCRT xterm until needed, calm idle polling, bake login earth brightness, and let AI alert rules scroll as one natural panel.
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>
Alembic stamp-without-upgrade left brownfield DBs missing the column; always apply a small topology schema safety net before bootstrap.
Co-authored-by: Cursor <cursoragent@cursor.com>
Coerce non-dict filter JSON so /tree no longer 500s, surface API failure details, and let users remove the UME World container for local resets.
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 the hidden system root built-in; speed tree bootstrap, unblock new-root UI, and soften query/Suspense refetch jank.
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>
World coords sit far outside the default viewport, so opening the flat map looked blank; also lower minZoom and stride-sample so the overview is visible without a truncate banner.
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>
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>