Performance: event-driven stdout pump (no polling thread per socket, no 200ms
coalescing stall), keystrokes written immediately, blocking SSH reads, bounded
deque queue with batch drain, incremental UTF-8 decode, buffered session log,
non-blocking session teardown, shorter login/settle waits, xterm WebGL renderer
and idle-time direct writes. Zero-latency fake device: echo p50 11ms -> 2.3ms,
command RTT 219ms -> 20ms, bulk output 2.1 -> 8.3 MB/s.
Audit: track the device's own input row server-side (webcrt_cmd_audit) and
resolve each Enter from the echoed line feed, so Tab, backspace, cursor-key
edits, history recall, paste, Ctrl-C and pagers record what actually ran.
Password lines are redacted; pending Enters are flushed on close.
Hop: stop closing the hop session when the target prints the same prompt as the
hop (system-view); recognise the Huawei "closed by the remote host" message.
Generic NEs that show a network prompt now get the network key map.
Adds bench_webcrt.py, fake_ssh_device.py and e2e_webcrt_input_scenarios.py.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
0.4.5 venv pointed at the build machine user profile; other PCs failed to start API.
Bundle stdlib under python/runtime, repair pyvenv.cfg, and health-check before start.
Co-authored-by: Cursor <cursoragent@cursor.com>
Choose bundled or external PostgreSQL in the Setup wizard with connection
validation; optional NETX_CREDENTIAL_SECRET_KEY; single desktop shortcut;
faster uninstall and tray startup for offline Windows packages.
Co-authored-by: Cursor <cursoragent@cursor.com>
Chinese packaging scripts without BOM were misread as ANSI and failed at first-run.
Document that bundled Python 3.13+ needs Server 2016+ / Win10+.
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>
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>
Measure public and authed read latency under worker load and classify Windows ephemeral-port exhaustion separately from server failures.
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>
Use /usr/local/nodejs/node-v24.16.0-linux-x64 for web dev by default; add --api-only to start API without Node on the host.
Co-authored-by: Cursor <cursoragent@cursor.com>
Change Linux default web port to 8505, add NODE_CMD/NPM_CMD support with version check, and declare Node 20.19+ in web/package.json engines.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove venv requirement, default PYTHON_CMD to /usr/local/python_env_new/bin/python3, and fix web startup without bash -lc. Add .gitattributes to keep shell scripts LF.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add bash scripts to start/stop netx API (8890) and Vite web (8055) with PID/log files under scripts/.run.
Co-authored-by: Cursor <cursoragent@cursor.com>
Install frontend npm dependencies automatically in start_netx so fresh machines can bring up the 5173 Vite UI without separate manual npm install.
Co-authored-by: Cursor <cursoragent@cursor.com>
Start the web dev server for -WithWeb even without -Background so 5173 is available in the common foreground run path.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the DO-block role upsert with explicit role existence check plus CREATE/ALTER statements, preventing PowerShell/psql quoting issues on some Windows setups.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use escaped $$ delimiters inside the SQL block so PowerShell does not treat them as interpolation and break init_pg on first-run setup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use ${...} interpolation in init_pg output to avoid InvalidVariableReferenceWithDrive when rendering user:password@host:port.
Co-authored-by: Cursor <cursoragent@cursor.com>
Provide a Windows init script to create/repair the netx role and database with a connection check, and document the step in README so new machines avoid initial auth failures.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add a from-scratch setup section covering Python, Node/npm, PostgreSQL, and startup commands, and update the startup script to always create/use .venv instead of falling back to system Python.
Co-authored-by: Cursor <cursoragent@cursor.com>
Exclude scripts/.run runtime logs and pid files from version control and remove previously tracked artifacts from the repository index.
Co-authored-by: Cursor <cursoragent@cursor.com>
Set up netx as a standalone git-managed project with isolated Python dependencies, alarm ingestion/query APIs, oclaw bridge integration, and ops-focused UI enhancements including history and raw field access.
Co-authored-by: Cursor <cursoragent@cursor.com>