diff --git a/build/output/README.txt b/build/output/README.txt new file mode 100644 index 0000000..f4e9c30 --- /dev/null +++ b/build/output/README.txt @@ -0,0 +1,50 @@ +Hermes Portable Rescue USB +=========================== +Multi-boot IT rescue toolkit — boot from ISO or use on a running Windows PC. + +🥾 BOOT MODE (Ventoy) + Restart PC -> F12/F2/ESC -> select USB -> pick ISO/hermes-rescue.iso + Boots Xubuntu with auto-launching hardware diagnostics + Hermes AI. + +🪟 WINDOWS PORTABLE MODE + Plug USB into any Windows PC, open windows-hermes/, double-click: + run-hermes.bat + + MENU: + 1) Hermes CLI — auto: online (opencode-go), falls back to local LLM + 2) Hermes CLI — force offline (pre-starts local llama.cpp) + 3) Web Dashboard + AI Chat — http://rescue.local:8080 / http://localhost:9090 + 4) Hardware Diagnostics — CPU, RAM, disks, GPU, BSOD, drivers + 5) Disk Tools — CrystalDiskInfo (SMART health check on Discrete) + 6) Windows MCP Server — UI Automation (click, type, screenshot) + 7) Exit + +📂 USB STRUCTURE + /ISO/ — Bootable ISO images (Ventoy) + /hermes/ — Config, scripts, auth, web dashboard + config.yaml — Online + offline providers (auto-fallback) + auth.json — Your opencode-go credentials + scripts/diagnose_windows.py — Windows-native hardware diagnostics + web/server.py — Hardware dashboard on :8080 + tools/disk-info/ — CrystalDiskInfo portable + /windows-hermes/ — Windows portable agent (embedded Python 3.13) + python/ — Embedded Python 3.13 + Hermes Agent 0.15.x + bin/ + wheels/ — 47 pre-downloaded Hermes Agent .whl files + wheels-windows-mcp/ — 95 pre-downloaded Windows-MCP .whl files + llama/ — llama-server.exe + CPU-optimized builds + ollama/ — Qwen2.5-Coder-1.5B GGUF model (1,117 MB) + run-hermes.bat — Main launcher (double-click) + start-llama-server.bat — Starts local LLM (auto-detects GPU) + start-windows-mcp.bat — Starts Windows-MCP UI Automation + start-hermes-dashboard.bat — Starts Hermes AI Chat on :9090 + /ventoy/ — Ventoy bootloader config + +🔑 NOTES + - Online mode: opencode-go (deepseek-v4-flash) — uses your credentials + - Offline mode: llama.cpp (Qwen2.5-Coder-1.5B Q4_K_M) — auto GPU detection, ~2 GB RAM + - All modes share the same memory/session data + - Diagnostics and dashboard work fully offline + - CrystalDiskInfo requires admin for SMART data on some systems + - Windows-MCP (UI Automation) requires admin for screenshots/clicking + - Hermes AI Chat at http://localhost:9090 (requires llama-server running) diff --git a/build/output/run-hermes.bat b/build/output/run-hermes.bat index 0061468..f00e719 100644 --- a/build/output/run-hermes.bat +++ b/build/output/run-hermes.bat @@ -8,6 +8,7 @@ set HERMES_HOME=%~dp0..\hermes set HERMES_ROOT=%~dp0..\hermes set HERMES_CONFIG=%HERMES_ROOT%\config.yaml set PYTHON=%~dp0python\python.exe +set HERMES_CLI=%~dp0python\Scripts\hermes.exe set PIP=%~dp0python\Scripts\pip.exe set WHEELS_DIR=%~dp0bin\wheels set MARKER=%~dp0\.installed @@ -90,7 +91,14 @@ echo [*] Starting Hermes CLI (online mode - opencode-go)... echo. call :ensure_mcp set HERMES_HOME=%~dp0..\hermes -"!PYTHON!" -m hermes_cli --config "!HERMES_CONFIG!" +if not exist "!HERMES_CLI!" ( + echo [ERROR] Hermes CLI not found at !HERMES_CLI! + echo Run this script again to install Hermes Agent first. + echo. + pause + goto menu +) +"!HERMES_CLI!" --config "!HERMES_CONFIG!" echo. pause goto menu @@ -125,9 +133,16 @@ goto wait_llm :skip_wait echo. echo [*] Starting Hermes CLI (offline mode - local LLM)... -set HERMES_HOME=%~dp0..\hermes\offline -if not exist "!HERMES_HOME!" mkdir "!HERMES_HOME!" -"!PYTHON!" -m hermes_cli --config "!HERMES_ROOT!\config.offline.yaml" +echo [*] Using single config.yaml with auto-fallback to lmstudio provider. +set HERMES_HOME=%~dp0..\hermes +if not exist "!HERMES_CLI!" ( + echo [ERROR] Hermes CLI not found at !HERMES_CLI! + echo Run this script again to install Hermes Agent first. + echo. + pause + goto menu +) +"!HERMES_CLI!" --config "!HERMES_CONFIG!" echo. pause goto menu diff --git a/build/output/run-hermes.ps1 b/build/output/run-hermes.ps1 index b262be7..25384d7 100644 --- a/build/output/run-hermes.ps1 +++ b/build/output/run-hermes.ps1 @@ -43,6 +43,13 @@ if (-not (Test-Path $Marker)) { Write-Host "[OK] Hermes Agent installed." -ForegroundColor Green } +# Check Hermes CLI installed +if (-not (Test-Path $HermesExe)) { + Write-Host "[ERROR] Hermes CLI not found at $HermesExe" -ForegroundColor Red + Write-Host "Run this script again to install Hermes Agent first." + exit 1 +} + # Auto-start Windows-MCP server $mcpHealth = "http://127.0.0.1:8000/mcp/health" try { @@ -69,7 +76,7 @@ try { # Launch Hermes Write-Host "" Write-Host "[*] Starting Hermes Agent..." -& $PythonExe -m hermes_cli --config $HermesConfig +& $HermesExe --config $HermesConfig Write-Host "" Write-Host "[*] Hermes exited." diff --git a/build/output/start-llama-server.bat b/build/output/start-llama-server.bat index f008a50..b1fb79a 100644 --- a/build/output/start-llama-server.bat +++ b/build/output/start-llama-server.bat @@ -22,9 +22,11 @@ cd /d "%~dp0" -set LLAMA_DIR=%~dp0bin\ollama +set LLAMA_DIR=%~dp0bin\llama -set MODEL=%LLAMA_DIR%\Llama-3.2-1B-Instruct-Q4_K_M.gguf +set OLLAMA_DIR=%~dp0bin\ollama + +set MODEL=%OLLAMA_DIR%\qwen2.5-coder-1.5b-q4_k_m.gguf set PORT=11434 @@ -172,7 +174,7 @@ if !GPU_FOUND! equ 1 ( echo [*] Starting llama-server with GPU acceleration (Vulkan)... - echo [*] Model: Llama-3.2-1B (Q4_K_M) + echo [*] Model: Qwen2.5-Coder-1.5B (Q4_K_M) echo [*] Server: http://127.0.0.1:!PORT!/v1 @@ -186,7 +188,7 @@ if !GPU_FOUND! equ 1 ( - "!LLAMA_DIR!\llama-server-vulkan.exe" ^ + "!LLAMA_DIR!\llama-server.exe" ^ --host 127.0.0.1 --port !PORT! ^ @@ -206,7 +208,7 @@ if !GPU_FOUND! equ 1 ( echo [*] No compatible GPU found. Starting CPU-only mode. - echo [*] Model: Llama-3.2-1B (Q4_K_M) + echo [*] Model: Qwen2.5-Coder-1.5B (Q4_K_M) echo [*] Server: http://127.0.0.1:!PORT!/v1 @@ -220,7 +222,7 @@ if !GPU_FOUND! equ 1 ( - "!LLAMA_DIR!\llama-server.exe" ^ + "!LLAMA_DIR!\cpu\llama-server-cpu.exe" ^ --host 127.0.0.1 --port !PORT! ^ @@ -241,4 +243,3 @@ echo. echo [*] Server exited with code !errorlevel! pause - diff --git a/build/output/start-windows-mcp.bat b/build/output/start-windows-mcp.bat index f0bb8dd..fd856b1 100644 --- a/build/output/start-windows-mcp.bat +++ b/build/output/start-windows-mcp.bat @@ -7,10 +7,8 @@ cd /d "%~dp0" set MCP_PORT=8000 set MCP_HOST=127.0.0.1 set WHEELS_DIR=%~dp0bin\wheels-windows-mcp -set PYTHON_MAIN=%~dp0python\python.exe -set PYTHON313=%~dp0python313\python.exe +set PYTHON=%~dp0python\python.exe set MARKER=%~dp0bin\.windows-mcp-installed -set PYTHON_CMD= echo. echo ============================================ @@ -33,57 +31,24 @@ echo. exit /b 0 ) -:: --- Find Python 3.13+ ------------------------------------------------------- -echo [*] Looking for Python 3.13+... - -:: Tier 1: Dedicated python313\ directory -if exist "!PYTHON313!" ( - "!PYTHON313!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul - if !errorlevel! equ 0 ( - echo [OK] Found dedicated Python 3.13: !PYTHON313! - set PYTHON_CMD=!PYTHON313! - goto install_and_run - ) +:: --- Check Python exists ----------------------------------------------------- +if not exist "!PYTHON!" ( + echo [ERROR] Embedded Python 3.13 not found at !PYTHON! + echo. + pause + exit /b 1 ) -:: Tier 2: Main portable Python (if 3.13+) -if exist "!PYTHON_MAIN!" ( - "!PYTHON_MAIN!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul - if !errorlevel! equ 0 ( - echo [OK] Found Python 3.13: !PYTHON_MAIN! - set PYTHON_CMD=!PYTHON_MAIN! - goto install_and_run - ) else ( - "!PYTHON_MAIN!" --version 2>nul - echo [INFO] Main Python version is not 3.13+ (need >=3.13 for windows-mcp) - ) +:: Verify it's 3.13+ +"!PYTHON!" --version 2>nul | findstr /r /c:"Python 3\.1[3-9]" >nul +if !errorlevel! neq 0 ( + echo [ERROR] Embedded Python is not 3.13+ (need >=3.13 for windows-mcp) + "!PYTHON!" --version + echo. + pause + exit /b 1 ) - -:: Tier 3: uv/uvx (handles its own Python) -where uvx >nul 2>&1 -if !errorlevel! equ 0 ( - echo [OK] Using uvx (auto-manages Python) - goto use_uvx -) -where uvx.exe >nul 2>&1 -if !errorlevel! equ 0 ( - echo [OK] Using uvx (auto-manages Python) - goto use_uvx -) - -:: No Python 3.13+ found -echo. -echo [ERROR] No Python 3.13+ found and uvx is not available. -echo. -echo To use Windows-MCP, you need one of: -echo A) Place Python 3.13 portable in: python313\ -echo (Download from https://www.python.org/downloads/) -echo B) Install uv and ensure it's in PATH: -echo winget install astral.uv -echo or: npm install -g uv -echo. -pause -exit /b 1 +echo [OK] Found Python 3.13: !PYTHON! :: --- Install from local wheels ----------------------------------------------- :install_and_run @@ -94,10 +59,10 @@ if not exist "!WHEELS_DIR!\windows_mcp-*-py3-none-any.whl" ( ) else ( if not exist "!MARKER!" ( echo [*] Installing Windows-MCP from local wheels... - "!PYTHON_CMD!" -m pip install --no-index --find-links "!WHEELS_DIR!" --quiet windows-mcp 2>&1 + "!PYTHON!" -m pip install --no-index --find-links "!WHEELS_DIR!" --quiet windows-mcp 2>&1 if errorlevel 1 ( echo [WARN] Offline install failed, trying online... - "!PYTHON_CMD!" -m pip install --quiet windows-mcp 2>&1 + "!PYTHON!" -m pip install --quiet windows-mcp 2>&1 ) if errorlevel 1 ( echo [ERROR] Failed to install windows-mcp. @@ -112,18 +77,6 @@ if not exist "!WHEELS_DIR!\windows_mcp-*-py3-none-any.whl" ( ) goto run_server -:: --- Use uvx ----------------------------------------------------------------- -:use_uvx -echo [*] Starting via uvx (auto-manages dependencies)... -echo. -echo [*] Press Ctrl+C to stop the server. -echo. -uvx windows-mcp serve --transport sse --host %MCP_HOST% --port %MCP_PORT% --exclude-tools PowerShell,Registry -echo. -echo [*] Server exited with code !errorlevel! -pause -exit /b 0 - :: --- Run server -------------------------------------------------------------- :run_server echo. @@ -140,7 +93,7 @@ echo. echo [*] Press Ctrl+C to stop the server. echo. -"!PYTHON_CMD!" -m windows_mcp serve --transport sse --host %MCP_HOST% --port %MCP_PORT% --exclude-tools PowerShell,Registry +"!PYTHON!" -m windows_mcp serve --transport sse --host %MCP_HOST% --port %MCP_PORT% --exclude-tools PowerShell,Registry echo. echo [*] Server exited with code !errorlevel!