diff --git a/agent-node/Dockerfile b/agent-node/Dockerfile index 9b147d6..cdddab1 100644 --- a/agent-node/Dockerfile +++ b/agent-node/Dockerfile @@ -5,27 +5,13 @@ ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 -# Install system dependencies for psutil, playwright, and networking tools +# Install system dependencies for psutil and networking tools RUN apt-get update && apt-get install -y \ build-essential \ curl \ iperf3 \ net-tools \ iputils-ping \ - libgudev-1.0-0 \ - libnotify4 \ - libnss3 \ - libxss1 \ - libasound2 \ - libatk-bridge2.0-0 \ - libgtk-3-0 \ - libxcomposite1 \ - libxdamage1 \ - libxrandr2 \ - libgbm1 \ - libpango-1.0-0 \ - libcairo2 \ - libxkbcommon0 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app @@ -34,9 +20,6 @@ COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -# Install Playwright browsers -RUN playwright install chromium - # Copy the rest of the node code COPY . . diff --git a/agent-node/bootstrap_installer.py b/agent-node/bootstrap_installer.py index befebc3..8d6f464 100644 --- a/agent-node/bootstrap_installer.py +++ b/agent-node/bootstrap_installer.py @@ -128,21 +128,6 @@ _print(f"Warning: Failed to bootstrap pip: {e}. If dependencies fail, please install python3-pip manually.") install_req_file = req_file - tmp_req_path = None - if skip_browsers: - try: - with open(req_file, 'r') as f: - lines = f.readlines() - # Reuse the already imported tempfile - with tempfile.NamedTemporaryFile(mode='w', suffix='_req.txt', delete=False) as tmp_req: - for line in lines: - if 'playwright' not in line.lower(): - tmp_req.write(line) - tmp_req_path = tmp_req.name - install_req_file = tmp_req_path - _print("Filtered 'playwright' from dependencies as requested.") - except Exception as e: - _print(f"Warning: Failed to filter requirements.txt: {e}") _print("Installing Python dependencies (resilient mode) ...") try: @@ -159,27 +144,6 @@ subprocess.check_call(args_user, cwd=install_dir) _print("Dependencies installed successfully.") - - # Cleanup temp file if created - if tmp_req_path and os.path.exists(tmp_req_path): - os.remove(tmp_req_path) - - # New: Auto-install playwright browsers if the package is present - if skip_browsers: - _print("Skipping Playwright browser installation as requested.") - return - - try: - import playwright - _print("Playwright detected. Installing chromium browser...") - # We add --with-deps but check for root first - cmd = [sys.executable, "-m", "playwright", "install", "chromium"] - subprocess.run(cmd, check=True) - _print("Playwright browsers installed.") - except ImportError: - pass # No playwright needed - except Exception as e: - _print(f"Warning: Failed to install Playwright browsers: {e}") except Exception as e: _print(f"ERROR: Failed to install dependencies: {e}") diff --git a/agent-node/requirements.txt b/agent-node/requirements.txt index 0376e24..19169db 100644 --- a/agent-node/requirements.txt +++ b/agent-node/requirements.txt @@ -1,7 +1,6 @@ grpcio grpcio-tools PyJWT==2.8.0 -playwright>=1.47.0 watchdog>=3.0.0 PyYAML==6.0.1 psutil>=5.8.0 diff --git a/ai-hub/native_hub.log b/ai-hub/native_hub.log index e1c1eb1..17142b4 100644 --- a/ai-hub/native_hub.log +++ b/ai-hub/native_hub.log @@ -944,3 +944,140 @@ No nodes currently connected. ================================================== + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + +ERROR:app.core.orchestration.scheduler:[Scheduler] Zombie Sweeper iteration failed: (sqlite3.OperationalError) no such column: agent_instances.total_runs +[SQL: SELECT agent_instances.id AS agent_instances_id, agent_instances.template_id AS agent_instances_template_id, agent_instances.session_id AS agent_instances_session_id, agent_instances.mesh_node_id AS agent_instances_mesh_node_id, agent_instances.status AS agent_instances_status, agent_instances.current_workspace_jail AS agent_instances_current_workspace_jail, agent_instances.last_heartbeat AS agent_instances_last_heartbeat, agent_instances.total_runs AS agent_instances_total_runs, agent_instances.successful_runs AS agent_instances_successful_runs, agent_instances.total_tokens_accumulated AS agent_instances_total_tokens_accumulated, agent_instances.total_input_tokens AS agent_instances_total_input_tokens, agent_instances.total_output_tokens AS agent_instances_total_output_tokens, agent_instances.total_running_time_seconds AS agent_instances_total_running_time_seconds, agent_instances.tool_call_counts AS agent_instances_tool_call_counts +FROM agent_instances +WHERE agent_instances.status = ? AND agent_instances.last_heartbeat < ?] +[parameters: ('active', '2026-03-24 05:09:40.295121')] +(Background on this error at: https://sqlalche.me/e/20/e3q8) + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + +ERROR:app.core.orchestration.scheduler:[Scheduler] Zombie Sweeper iteration failed: (sqlite3.OperationalError) no such column: agent_instances.total_runs +[SQL: SELECT agent_instances.id AS agent_instances_id, agent_instances.template_id AS agent_instances_template_id, agent_instances.session_id AS agent_instances_session_id, agent_instances.mesh_node_id AS agent_instances_mesh_node_id, agent_instances.status AS agent_instances_status, agent_instances.current_workspace_jail AS agent_instances_current_workspace_jail, agent_instances.last_heartbeat AS agent_instances_last_heartbeat, agent_instances.total_runs AS agent_instances_total_runs, agent_instances.successful_runs AS agent_instances_successful_runs, agent_instances.total_tokens_accumulated AS agent_instances_total_tokens_accumulated, agent_instances.total_input_tokens AS agent_instances_total_input_tokens, agent_instances.total_output_tokens AS agent_instances_total_output_tokens, agent_instances.total_running_time_seconds AS agent_instances_total_running_time_seconds, agent_instances.tool_call_counts AS agent_instances_tool_call_counts +FROM agent_instances +WHERE agent_instances.status = ? AND agent_instances.last_heartbeat < ?] +[parameters: ('active', '2026-03-24 05:10:40.308718')] +(Background on this error at: https://sqlalche.me/e/20/e3q8) + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + +ERROR:app.core.orchestration.scheduler:[Scheduler] Zombie Sweeper iteration failed: (sqlite3.OperationalError) no such column: agent_instances.total_runs +[SQL: SELECT agent_instances.id AS agent_instances_id, agent_instances.template_id AS agent_instances_template_id, agent_instances.session_id AS agent_instances_session_id, agent_instances.mesh_node_id AS agent_instances_mesh_node_id, agent_instances.status AS agent_instances_status, agent_instances.current_workspace_jail AS agent_instances_current_workspace_jail, agent_instances.last_heartbeat AS agent_instances_last_heartbeat, agent_instances.total_runs AS agent_instances_total_runs, agent_instances.successful_runs AS agent_instances_successful_runs, agent_instances.total_tokens_accumulated AS agent_instances_total_tokens_accumulated, agent_instances.total_input_tokens AS agent_instances_total_input_tokens, agent_instances.total_output_tokens AS agent_instances_total_output_tokens, agent_instances.total_running_time_seconds AS agent_instances_total_running_time_seconds, agent_instances.tool_call_counts AS agent_instances_tool_call_counts +FROM agent_instances +WHERE agent_instances.status = ? AND agent_instances.last_heartbeat < ?] +[parameters: ('active', '2026-03-24 05:11:40.320828')] +(Background on this error at: https://sqlalche.me/e/20/e3q8) + +================================================== +📡 CORTEX MESH DASHBOARD | 0 Nodes Online +-------------------------------------------------- + No nodes currently connected. +================================================== + diff --git a/frontend/src/features/nodes/pages/NodesPage.js b/frontend/src/features/nodes/pages/NodesPage.js index 1f69024..dd122dc 100644 --- a/frontend/src/features/nodes/pages/NodesPage.js +++ b/frontend/src/features/nodes/pages/NodesPage.js @@ -705,36 +705,55 @@
{isAdmin && ( -
-
- +
+
+

Direct Download

+
+ + + + Linux (AMD64) + + + + Linux (ARM64) + +
-
+
- - - curl -sSL '{window.location.origin}/api/v1/nodes/provision/{node.node_id}?token={node.invite_token}' | python3 + + + curl -sSL '{window.location.origin}/api/v1/nodes/provision/sh/{node.node_id}?token={node.invite_token}' | bash + + -
-

Best for terminal-only servers. Installs agent as a persistent service.

+

Installs self-contained Cortex Agent daemon with no dependencies required (Linux Native).

)}