From b990bd17925d314055ca79ed47eb83cc90acfcb9 Mon Sep 17 00:00:00 2001
From: MacRimi
Date: Mon, 1 Dec 2025 01:04:31 +0100
Subject: [PATCH] Update AppImage
---
AppImage/app/api/gpu/nvidia/install/route.ts | 68 ---
AppImage/components/hardware.tsx | 101 ++---
AppImage/components/hybrid-script-monitor.tsx | 428 ------------------
AppImage/components/script-terminal-modal.tsx | 162 +++++++
AppImage/scripts/flask_script_runner.py | 58 ++-
AppImage/scripts/flask_terminal_routes.py | 163 +++++++
6 files changed, 396 insertions(+), 584 deletions(-)
delete mode 100644 AppImage/app/api/gpu/nvidia/install/route.ts
delete mode 100644 AppImage/components/hybrid-script-monitor.tsx
create mode 100644 AppImage/components/script-terminal-modal.tsx
diff --git a/AppImage/app/api/gpu/nvidia/install/route.ts b/AppImage/app/api/gpu/nvidia/install/route.ts
deleted file mode 100644
index 1a66946..0000000
--- a/AppImage/app/api/gpu/nvidia/install/route.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { NextResponse } from "next/server"
-
-export async function POST(request: Request) {
- try {
- const requestUrl = new URL(request.url)
- const API_PORT = "8008"
-
- // Check if request comes through proxy (standard HTTP/HTTPS ports)
- const isProxied = requestUrl.port === "" || requestUrl.port === "80" || requestUrl.port === "443"
-
- let flaskUrl: string
-
- if (isProxied) {
- // Behind proxy - use same host but different path
- flaskUrl = `${requestUrl.protocol}//${requestUrl.host}/api/scripts/execute`
- } else {
- // Direct access - use Flask port
- flaskUrl = `${requestUrl.protocol}//${requestUrl.hostname}:${API_PORT}/api/scripts/execute`
- }
-
- console.log("[v0] Starting NVIDIA driver installation")
- console.log("[v0] Request URL:", requestUrl.href)
- console.log("[v0] Flask URL:", flaskUrl)
-
- const response = await fetch(flaskUrl, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- script_relative_path: "gpu_tpu/nvidia_installer.sh",
- params: {
- EXECUTION_MODE: "web",
- WEB_LOG: "/tmp/nvidia_web_install.log",
- },
- }),
- })
-
- if (!response.ok) {
- const errorText = await response.text()
- console.error("[v0] Flask API error:", response.status, errorText)
- throw new Error(`Flask API error: ${response.statusText}`)
- }
-
- const data = await response.json()
-
- if (!data.success) {
- throw new Error(data.error || "Failed to start installation")
- }
-
- console.log("[v0] NVIDIA installation started, session_id:", data.session_id)
-
- return NextResponse.json({
- success: true,
- session_id: data.session_id,
- message: "NVIDIA installation started",
- })
- } catch (error: any) {
- console.error("[v0] NVIDIA installation error:", error)
- return NextResponse.json(
- {
- success: false,
- error: error.message || "Failed to start NVIDIA driver installation. Please try manually.",
- },
- { status: 500 },
- )
- }
-}
diff --git a/AppImage/components/hardware.tsx b/AppImage/components/hardware.tsx
index 44d8495..5c99d68 100644
--- a/AppImage/components/hardware.tsx
+++ b/AppImage/components/hardware.tsx
@@ -30,7 +30,7 @@ import {
fetcher as swrFetcher,
} from "../types/hardware"
import { fetchApi } from "@/lib/api-config"
-import { HybridScriptMonitor } from "./hybrid-script-monitor"
+import { ScriptTerminalModal } from "./script-terminal-modal"
const parseLsblkSize = (sizeStr: string | undefined): number => {
if (!sizeStr) return 0
@@ -239,7 +239,7 @@ export default function Hardware() {
const [selectedDisk, setSelectedDisk] = useState(null)
const [selectedNetwork, setSelectedNetwork] = useState(null)
const [selectedUPS, setSelectedUPS] = useState(null)
- const [nvidiaSessionId, setNvidiaSessionId] = useState(null)
+ const [showNvidiaInstaller, setShowNvidiaInstaller] = useState(false)
const [installingNvidiaDriver, setInstallingNvidiaDriver] = useState(false)
const fetcher = async (url: string) => {
@@ -257,39 +257,9 @@ export default function Hardware() {
revalidateOnFocus: false,
})
- const handleInstallNvidiaDriver = async () => {
- console.log("[v0] NVIDIA installation button clicked")
-
- try {
- const payload = {
- script_name: "nvidia_installer",
- script_relative_path: "gpu_tpu/nvidia_installer.sh",
- params: {
- EXECUTION_MODE: "web",
- WEB_LOG: "/tmp/nvidia_web_install.log",
- },
- }
-
- console.log("[v0] Calling Flask to execute script:", payload)
-
- const data = await fetchApi("/api/scripts/execute", {
- method: "POST",
- body: JSON.stringify(payload),
- })
-
- console.log("[v0] Flask response:", data)
-
- if (data.success && data.session_id) {
- console.log("[v0] Installation started with session ID:", data.session_id)
- setNvidiaSessionId(data.session_id)
- } else {
- console.error("[v0] Installation failed:", data.error)
- alert(`Failed to install NVIDIA drivers: ${data.error}`)
- }
- } catch (error) {
- console.error("[v0] Exception during installation:", error)
- alert("Failed to start NVIDIA driver installation. Check console for details.")
- }
+ const handleInstallNvidiaDriver = () => {
+ console.log("[v0] Opening NVIDIA installer terminal")
+ setShowNvidiaInstaller(true)
}
useEffect(() => {
@@ -1130,18 +1100,11 @@ export default function Hardware() {
{getMonitoringToolRecommendation(selectedGPU.vendor)}
{selectedGPU.vendor.toLowerCase().includes("nvidia") && (
-