229 lines
5.9 KiB
Bash
Executable File
229 lines
5.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
echo "=== HX-KI Homepage Setup (Falkenstein) ==="
|
||
|
||
########################################
|
||
# 0. PARAMETER
|
||
########################################
|
||
|
||
# Falls dein Next.js-Projekt woanders liegt: HIER anpassen.
|
||
WEB_ROOT="/opt/hx-ki/web/nextjs"
|
||
|
||
WORKSPACE="/opt/hx-ki/workspaces/homepage"
|
||
AGENT_DIR="/opt/hx-ki/agents"
|
||
API_DIR="$WEB_ROOT/app/api/homepage"
|
||
|
||
echo "WEB_ROOT: $WEB_ROOT"
|
||
echo "WORKSPACE: $WORKSPACE"
|
||
echo "AGENT_DIR: $AGENT_DIR"
|
||
echo "API_DIR: $API_DIR"
|
||
echo
|
||
|
||
########################################
|
||
# 1. VERZEICHNISSE ANLEGEN
|
||
########################################
|
||
|
||
mkdir -p "$WORKSPACE"
|
||
mkdir -p "$AGENT_DIR"
|
||
mkdir -p "$API_DIR"
|
||
|
||
echo "✔ Verzeichnisse angelegt."
|
||
|
||
|
||
########################################
|
||
# 2. BASIS-HOMEPAGE.JSON ANLEGEN (FALLS NICHT VORHANDEN)
|
||
########################################
|
||
|
||
HOMEPAGE_JSON="$WORKSPACE/homepage.json"
|
||
|
||
if [[ ! -f "$HOMEPAGE_JSON" ]]; then
|
||
cat > "$HOMEPAGE_JSON" <<EOF
|
||
{
|
||
"hero_title": "HX-KI – Cognitive Clarity",
|
||
"hero_sub": "Vom Chaos zur Klarheit. Falkenstein liefert nur aus dem Workspace.",
|
||
"sections": [
|
||
{
|
||
"title": "Status",
|
||
"text": "Die Homepage wird jetzt aus /opt/hx-ki/workspaces/homepage/homepage.json versorgt."
|
||
},
|
||
{
|
||
"title": "Architektur",
|
||
"text": "Falkenstein greift NICHT auf Gehirn oder Motor zu. Nur Workspace."
|
||
}
|
||
]
|
||
}
|
||
EOF
|
||
echo "✔ Default homepage.json erstellt: $HOMEPAGE_JSON"
|
||
else
|
||
echo "✔ homepage.json existiert bereits – wird NICHT überschrieben."
|
||
fi
|
||
|
||
|
||
########################################
|
||
# 3. JSON-AGENT ANLEGEN (ERZEUGT/ÜBERSCHREIBT HOMEPAGE.JSON)
|
||
########################################
|
||
|
||
AGENT_SCRIPT="$AGENT_DIR/json_homepage_agent.py"
|
||
|
||
cat > "$AGENT_SCRIPT" <<'EOF'
|
||
#!/usr/bin/env python3
|
||
import json
|
||
import os
|
||
|
||
WORKSPACE = "/opt/hx-ki/workspaces/homepage"
|
||
FILE = os.path.join(WORKSPACE, "homepage.json")
|
||
|
||
os.makedirs(WORKSPACE, exist_ok=True)
|
||
|
||
content = {
|
||
"hero_title": "HX-KI – Dynamischer JSON-Agent",
|
||
"hero_sub": "Content kommt aus dem Workspace auf Falkenstein – kein Zugriff auf Gehirn oder Motor.",
|
||
"sections": [
|
||
{
|
||
"title": "Agent-Status",
|
||
"text": "Dieser JSON-Agent kann von Events, Cron, KI oder Mautic getriggert werden."
|
||
},
|
||
{
|
||
"title": "Architektur-Sicherheit",
|
||
"text": "Falkenstein liest nur den Workspace. Nürnberg & Helsinki bleiben intern."
|
||
}
|
||
]
|
||
}
|
||
|
||
with open(FILE, "w") as f:
|
||
json.dump(content, f, indent=2)
|
||
|
||
print(f"✔ homepage.json durch json_homepage_agent.py erzeugt/aktualisiert: {FILE}")
|
||
EOF
|
||
|
||
chmod +x "$AGENT_SCRIPT"
|
||
echo "✔ JSON-Agent angelegt: $AGENT_SCRIPT"
|
||
|
||
|
||
########################################
|
||
# 4. SELBSTHEILUNG FÜR HOMEPAGE.JSON
|
||
########################################
|
||
|
||
REPAIR_SCRIPT="$WORKSPACE/repair_homepage_json.sh"
|
||
|
||
cat > "$REPAIR_SCRIPT" <<'EOF'
|
||
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
FILE="/opt/hx-ki/workspaces/homepage/homepage.json"
|
||
|
||
echo "=== Repair homepage.json ==="
|
||
|
||
if [[ ! -f "$FILE" ]]; then
|
||
echo "✘ homepage.json fehlt – wird neu erstellt."
|
||
cat > "$FILE" <<EOF2
|
||
{
|
||
"hero_title": "HX-KI – Repair Mode",
|
||
"hero_sub": "homepage.json war weg und wurde automatisch neu erstellt.",
|
||
"sections": [
|
||
{
|
||
"title": "Hinweis",
|
||
"text": "Dies ist ein Fallback-Content aus repair_homepage_json.sh."
|
||
}
|
||
]
|
||
}
|
||
EOF2
|
||
echo "✔ homepage.json neu angelegt."
|
||
exit 0
|
||
fi
|
||
|
||
# JSON grob prüfen (ohne jq, über Python)
|
||
python3 - <<PYEOF
|
||
import json, sys
|
||
try:
|
||
json.load(open("$FILE", "r"))
|
||
except Exception as e:
|
||
sys.exit(1)
|
||
PYEOF
|
||
|
||
if [[ $? -eq 0 ]]; then
|
||
echo "✔ homepage.json ist gültiges JSON."
|
||
else
|
||
echo "✘ homepage.json ist defekt – wird repariert."
|
||
cat > "$FILE" <<EOF3
|
||
{
|
||
"hero_title": "HX-KI – Repair Mode",
|
||
"hero_sub": "homepage.json war defekt und wurde automatisch repariert.",
|
||
"sections": [
|
||
{
|
||
"title": "Hinweis",
|
||
"text": "Der vorherige Inhalt war ungültig. Dies ist ein Fallback."
|
||
}
|
||
]
|
||
}
|
||
EOF3
|
||
echo "✔ homepage.json repariert."
|
||
fi
|
||
EOF
|
||
|
||
chmod +x "$REPAIR_SCRIPT"
|
||
echo "✔ Repair-Skript angelegt: $REPAIR_SCRIPT"
|
||
|
||
|
||
########################################
|
||
# 5. CRONJOB FÜR SELBSTHEILUNG (ALLE 5 MINUTEN)
|
||
########################################
|
||
|
||
CRON_LINE="*/5 * * * * $REPAIR_SCRIPT >/dev/null 2>&1"
|
||
|
||
# Cron nur hinzufügen, wenn noch nicht vorhanden
|
||
( crontab -l 2>/dev/null | grep -v "$REPAIR_SCRIPT" || true; echo "$CRON_LINE" ) | crontab -
|
||
|
||
echo "✔ Cronjob für Repair installiert (alle 5 Minuten)."
|
||
|
||
|
||
########################################
|
||
# 6. NEXT.JS API-ROUTE FÜR /api/homepage
|
||
########################################
|
||
|
||
ROUTE_FILE="$API_DIR/route.ts"
|
||
|
||
cat > "$ROUTE_FILE" <<'EOF'
|
||
import { NextResponse } from "next/server";
|
||
import fs from "fs";
|
||
|
||
export async function GET() {
|
||
const path = "/opt/hx-ki/workspaces/homepage/homepage.json";
|
||
|
||
try {
|
||
const raw = fs.readFileSync(path, "utf-8");
|
||
const data = JSON.parse(raw);
|
||
return NextResponse.json(data);
|
||
} catch (err) {
|
||
console.error("Error reading homepage.json:", err);
|
||
return NextResponse.json(
|
||
{
|
||
error: "Homepage content not available",
|
||
details: "Check /opt/hx-ki/workspaces/homepage/homepage.json on Falkenstein."
|
||
},
|
||
{ status: 500 }
|
||
);
|
||
}
|
||
}
|
||
EOF
|
||
|
||
echo "✔ Next.js API-Route erstellt: $ROUTE_FILE"
|
||
|
||
|
||
########################################
|
||
# 7. ERSTEN LAUF DES JSON-AGENTEN AUSFÜHREN
|
||
########################################
|
||
|
||
echo "=== Erster Lauf des JSON-Agents ==="
|
||
"$AGENT_SCRIPT" || echo "Warnung: JSON-Agent konnte nicht ausgeführt werden."
|
||
|
||
echo
|
||
echo "=== Fertig. Schritte als Nächstes: ==="
|
||
echo "1) Stelle sicher, dass WEB_ROOT korrekt ist (aktuell: $WEB_ROOT)."
|
||
echo "2) Baue/Starte dein hxki-web / Next.js-Container neu."
|
||
echo "3) Rufe im Browser /api/homepage auf – dort sollte JSON kommen."
|
||
echo "4) Binde in app/page.tsx o.ä. fetch('https://DEINE-DOMAIN/api/homepage') ein."
|
||
echo
|
||
echo "=== HX-KI Homepage Setup (Falkenstein) – COMPLETE ==="
|