import { startTransition, useDeferredValue, useEffect, useEffectEvent, useReducer, useState } from "react"; const API_BASE = import.meta.env.VITE_API_BASE || ""; async function request(path, options = {}) { const response = await fetch(`${API_BASE}${path}`, { headers: { "Content-Type": "application/json", ...(options.headers || {}) }, ...options }); const data = await response.json().catch(() => ({})); if (!response.ok) { throw new Error(data.message || data.reason || "Request failed"); } return data; } function asRecord(value) { return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {}; } function asArray(value) { return Array.isArray(value) ? value : []; } function asNumber(value, fallback = 0) { const parsed = Number(value); return Number.isFinite(parsed) ? parsed : fallback; } function asText(value, fallback = "") { if (value === null || value === undefined) return fallback; if (typeof value === "string") return value; if (typeof value === "number" || typeof value === "boolean") return String(value); if (asRecord(value)) { for (const key of ["summary", "message", "reason", "workflow", "mode", "status", "name", "id"]) { const nested = value[key]; if (typeof nested === "string" || typeof nested === "number" || typeof nested === "boolean") return String(nested); } try { return JSON.stringify(value); } catch { return fallback; } } return fallback; } function formatPercent(value) { return `${asNumber(value).toFixed(1)}%`; } function formatNumber(value, digits = 0) { return asNumber(value).toFixed(digits); } function severityClass(score) { const n = asNumber(score); if (n >= 85) return "danger"; if (n >= 60) return "warning"; return ""; } function terminalReducer(state, action) { switch (action.type) { case "append": return [...state, `[${new Date().toLocaleTimeString("zh-CN", { hour12: false })}] ${action.line}`].slice(-120); case "clear": return []; default: return state; } } export default function App() { const [overview, setOverview] = useState(null); const [health, setHealth] = useState(null); const [selectedSessionId, setSelectedSessionId] = useState(""); const [terminalLines, dispatchTerminal] = useReducer(terminalReducer, ["[aluer] nebula console booted"]); const [streamState, setStreamState] = useState("connecting"); const [lastHandshake, setLastHandshake] = useState(null); const [auditFilter, setAuditFilter] = useState(""); const [commandInput, setCommandInput] = useState(""); const [autoRefresh, setAutoRefresh] = useState(true); const [refreshInterval, setRefreshInterval] = useState(6); const [showHealth, setShowHealth] = useState(false); const [sshForm, setSshForm] = useState({ alias: "", host: "", port: "22", username: "", password: "", privateKeyPath: "" }); const deferredAuditFilter = useDeferredValue(auditFilter); const addLine = (line) => dispatchTerminal({ type: "append", line }); const refreshOverview = useEffectEvent(async (reason = "manual") => { try { const data = asRecord(await request("/api/console/overview")); startTransition(() => setOverview(data)); if (reason !== "stream") addLine(`overview refreshed (${reason})`); } catch (error) { addLine(`refresh failed: ${error.message}`); } }); const refreshHealth = useEffectEvent(async () => { try { const data = asRecord(await request("/api/health")); startTransition(() => setHealth(data)); } catch { // health endpoint may not be deployed yet } }); useEffect(() => { refreshOverview("boot"); refreshHealth(); }, [refreshOverview, refreshHealth]); useEffect(() => { if (!autoRefresh) return; const id = setInterval(() => { refreshOverview("poll"); refreshHealth(); }, refreshInterval * 1000); return () => clearInterval(id); }, [autoRefresh, refreshInterval, refreshOverview, refreshHealth]); useEffect(() => { if (typeof window === "undefined" || typeof window.EventSource !== "function") { setStreamState("degraded"); return; } const eventSource = new EventSource(`${API_BASE}/api/console/stream/overview`); eventSource.addEventListener("overview", (event) => { try { const data = asRecord(JSON.parse(event.data)); startTransition(() => setOverview(data)); setStreamState("live"); } catch { setStreamState("degraded"); } }); eventSource.onerror = () => setStreamState("degraded"); return () => eventSource.close(); }, []); useEffect(() => { const sessions = asArray(overview?.ssh?.sessions); if (!sessions.length) { setSelectedSessionId(""); return; } if (!selectedSessionId || !sessions.some((s) => asText(s?.sessionId) === selectedSessionId)) { setSelectedSessionId(asText(sessions[0]?.sessionId)); } }, [overview, selectedSessionId]); const safeOverview = asRecord(overview); const safeHealth = asRecord(health); const server = asRecord(safeOverview.server); const metrics = asRecord(server.metrics); const defense = asRecord(safeOverview.defense); const shield = asRecord(defense.shield); const sovereign = asRecord(defense.sovereign); const network = asRecord(defense.network); const ssh = asRecord(safeOverview.ssh); const kernel = asRecord(safeOverview.kernel); const modules = asArray(safeOverview.modules); const audit = asRecord(safeOverview.audit); const sessions = asArray(ssh.sessions); const engineHandshake = asRecord(ssh.engineHandshake); const selectedSession = sessions.find((s) => asText(s?.sessionId) === selectedSessionId); const healthComponents = asRecord(safeHealth.components); const healthSystem = asRecord(safeHealth.system); const mergedAuditItems = [ ...asArray(audit.events).map((e) => ({ id: `${asText(e?.category, "event")}-${asText(e?.action, "action")}-${asText(e?.timestamp, Date.now())}`, title: `${asText(e?.category, "EVENT")} / ${asText(e?.action, "ACTION")}`, details: `${asText(e?.player, "system")} | ${asText(e?.details, "")}`, score: asText(e?.category).includes("ALERT") ? 90 : 45 })), ...asArray(audit.networkIncidents).map((inc, i) => ({ id: `${asText(inc?.type, "incident")}-${asText(inc?.ip, "unknown")}-${i}`, title: `${asText(inc?.type, "incident")} / ${asText(inc?.ip, "unknown")}`, details: asText(inc?.details || inc?.summary, "network anomaly"), score: asNumber(inc?.riskScore, 70) })), ...asArray(audit.shieldTransitions).map((t, i) => ({ id: `${asText(t?.mode, "shield")}-${asText(t?.timestamp, Date.now())}-${i}`, title: `SHIELD / ${asText(t?.mode, "TRANSITION")}`, details: `${asText(t?.reason, "policy update")} | risk ${asText(t?.riskScore, 80)}`, score: asNumber(t?.riskScore, 80) })) ]; const auditQuery = deferredAuditFilter.trim().toLowerCase(); const auditItems = !auditQuery ? mergedAuditItems.slice(0, 24) : mergedAuditItems.filter((item) => `${item.title} ${item.details}`.toLowerCase().includes(auditQuery)).slice(0, 24); async function handleShield(mode) { try { const result = await request("/api/console/shield/engage", { method: "POST", body: JSON.stringify({ mode, reason: `react-console-${mode.toLowerCase()}` }) }); addLine(`shield engaged: ${asText(result.mode, "unknown")}`); if (asText(result.deterrenceMessage)) addLine(result.deterrenceMessage); refreshOverview("shield"); } catch (error) { addLine(`shield error: ${error.message}`); } } async function handleQuickAction(action) { try { const result = await request("/api/console/quick-action", { method: "POST", body: JSON.stringify({ action, reason: `react-console-${action}` }) }); addLine(`quick action ok: ${action}`); if (asText(result.mode)) addLine(`mode ${asText(result.mode)}`); refreshOverview(action); } catch (error) { addLine(`quick action failed: ${error.message}`); } } async function connectSsh(event) { event.preventDefault(); try { const handshakeResponse = await request("/api/console/ssh/handshake", { method: "POST", body: JSON.stringify({ host: sshForm.host, port: Number(sshForm.port || 22), username: sshForm.username, purpose: "react-console-connect" }) }); const handshake = asRecord(handshakeResponse.handshake); setLastHandshake(handshake); addLine(`handshake ${handshake.approved ? "approved" : "denied"} | mode=${asText(handshake.shieldMode, "unknown")} heat=${asNumber(handshake.kernelHeat)} risk=${asNumber(handshake.riskScore)}`); addLine(asText(handshake.message, "handshake completed")); if (!handshake.approved) return; const payload = { ...sshForm, port: Number(sshForm.port || 22), handshakeToken: handshake.token }; const result = await request("/api/console/ssh/connect", { method: "POST", body: JSON.stringify(payload) }); const session = asRecord(result.session); addLine(`ssh connected: ${asText(session.alias, "remote-session")}`); setSelectedSessionId(asText(session.sessionId)); setSshForm((c) => ({ ...c, password: "" })); refreshOverview("ssh-connect"); } catch (error) { addLine(`ssh connect failed: ${error.message}`); } } async function executeSsh(event) { event.preventDefault(); if (!selectedSessionId || !commandInput.trim()) { addLine("select a session and enter a command first"); return; } const command = commandInput.trim(); setCommandInput(""); addLine(`${selectedSession?.alias || "session"} $ ${command}`); try { const result = await request("/api/console/ssh/execute", { method: "POST", body: JSON.stringify({ sessionId: selectedSessionId, command }) }); const sshResult = asRecord(result.result); if (sshResult.flagged) addLine(`guard: ${asText(sshResult.guardType, "unknown")} severity=${asNumber(sshResult.guardSeverity)}`); if (asText(sshResult.stdout)) addLine(sshResult.stdout); if (asText(sshResult.stderr)) addLine(`stderr: ${asText(sshResult.stderr)}`); addLine(`exit=${asNumber(sshResult.exitStatus)} in ${asNumber(sshResult.durationMs)}ms`); } catch (error) { addLine(`ssh execute failed: ${error.message}`); } } async function disconnectSsh(sessionId) { try { await request(`/api/console/ssh/${sessionId}`, { method: "DELETE" }); addLine(`ssh disconnected: ${asText(sessionId).slice(0, 8)}`); refreshOverview("ssh-disconnect"); } catch (error) { addLine(`disconnect failed: ${error.message}`); } } return (

MIRAGE SHIELD

{asText(shield.currentMode, "OBSERVE")}

{asText(shield.deterrenceMessage, "Deterrence message pending.")}

{["FORTIFY", "MIRAGE", "SHELTER", "RECOVERY"].map((mode) => ( ))}
{/* Performance Sparklines */}

PERFORMANCE TREND

实时性能走势

{server.processRunning ? "online" : "offline"}

MODULE CONSTELLATION

互联能力矩阵

nodes {sessions.length + 1}
{modules.map((mod) => (
{asText(mod?.id, "module")}

{asText(mod?.name, "Unnamed Module")}

{asText(mod?.summary, "No summary available.")}

{asText(mod?.status, "UNKNOWN")} signal {asNumber(mod?.signal)}
))}

NODE FABRIC

本地核心与远程节点

{server.processRunning ? "local-online" : "local-degraded"}
local / {asText(server.serviceName, "minecraft")}

{asText(server.workingDir, "/opt/minecraft")}

RCON {server.rconConnected ? "online" : "offline"} Players {asNumber(metrics.onlinePlayers)} Conn {asNumber(metrics.connections)}
{sessions.map((session) => (
setSelectedSessionId(asText(session?.sessionId))}> {asText(session?.alias, "remote-session")}

{asText(session?.username, "user")}@{asText(session?.host, "host")}:{asText(session?.port, 22)}

{asText(session?.fingerprint, "no fingerprint")}
))}

REMOTE SSH WORKBENCH

远程控制台

{selectedSession?.alias || "no session"}
Sovereign Handshake {lastHandshake ? `${lastHandshake.approved ? "approved" : "denied"} | ${asText(lastHandshake.shieldMode, "unknown")} | heat ${asNumber(lastHandshake.kernelHeat)} | risk ${asNumber(lastHandshake.riskScore)}` : `required=${engineHandshake.required ? "yes" : "no"} | ttl ${asNumber(engineHandshake.ttlSeconds)}s`}
setSshForm((c) => ({ ...c, alias: e.target.value }))} /> setSshForm((c) => ({ ...c, host: e.target.value }))} /> setSshForm((c) => ({ ...c, port: e.target.value }))} /> setSshForm((c) => ({ ...c, username: e.target.value }))} /> setSshForm((c) => ({ ...c, password: e.target.value }))} /> setSshForm((c) => ({ ...c, privateKeyPath: e.target.value }))} />
setCommandInput(e.target.value)} />
{terminalLines.join("\n")}

THREAT TRACE

高风险来源与威慑

critical {asNumber(network.criticalRiskIPs)}
{(asArray(shield.topOffenders).length ? asArray(shield.topOffenders) : asArray(network.topRiskIPs)).slice(0, 10).map((offender, i) => (
{asText(offender?.ip, "unknown")}

{asText(offender?.riskLevel, "risk")} | score {asNumber(offender?.riskScore)}

{asText(offender?.summary || offender?.reason, "suspicious pressure source")}

))}

AUDIT STREAM

审计与网络事件

setAuditFilter(e.target.value)} />
{auditItems.map((item) => (
{item.title}

{item.details}

))}
); } function MetricCard({ label, value, accent }) { return (
{asText(label)} {asText(value, "0")}
); } function ProgressMeter({ label, value }) { const normalized = Math.max(0, Math.min(100, Number(value) || 0)); return (
{label}{normalized}
); } function InfoPill({ label, value }) { return (
{asText(label)}{asText(value, "-")}
); } function SparkBar({ label, value, max, accent }) { const pct = Math.min(100, Math.max(0, (Number(value) || 0) / (max || 1) * 100)); const level = pct > 80 ? "danger" : pct > 60 ? "warning" : ""; return (
{label} {asText(value, "0")}
); }