feat: add install.sh — interactive setup for beginners with emoji feedback + README overhaul
This commit is contained in:
@@ -5,33 +5,57 @@
|
|||||||
|
|
||||||
Stellt einen nativen Chatclient für das Hermes Agent Gateway bereit — mit Echtzeit-Nachrichten via WebSocket/DDP und REST-API für ausgehende Antworten.
|
Stellt einen nativen Chatclient für das Hermes Agent Gateway bereit — mit Echtzeit-Nachrichten via WebSocket/DDP und REST-API für ausgehende Antworten.
|
||||||
|
|
||||||
## Features
|
---
|
||||||
|
|
||||||
- **Echtzeit-Streaming**: WebSocket/DDP für sofortige eingehende Nachrichten
|
## Schnellstart (für Neulinge)
|
||||||
- **Präsenz-Status**: Grüner Online-Indikator im Rocket.Chat
|
|
||||||
- **Markdown-Support**: Fett, kursiv, Inline-Code, Code-Blöcke, Links
|
|
||||||
- **Interaktive Buttons**: Ja/Nein, Bestätigen/Abbrechen, Mehrfachauswahl
|
|
||||||
- **Raum-Unterstützung**: Kanäle, private Gruppen, Direktnachrichten
|
|
||||||
- **Allowlist**: Steuerung, wer den Bot nutzen darf
|
|
||||||
|
|
||||||
## Installation
|
### 1. Voraussetzungen
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# In dein Hermes Agent Verzeichnis wechseln
|
sudo apt update && sudo apt install -y curl git python3 bash
|
||||||
cd ~/.hermes/hermes-agent
|
|
||||||
|
|
||||||
# Plugin-Verzeichnis anlegen
|
|
||||||
mkdir -p plugins/platforms/rocketchat
|
|
||||||
|
|
||||||
# Diese drei Dateien hineinkopieren:
|
|
||||||
cp plugin.yaml plugins/platforms/rocketchat/
|
|
||||||
cp __init__.py plugins/platforms/rocketchat/
|
|
||||||
cp adapter.py plugins/platforms/rocketchat/
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Konfiguration
|
### 2. Plugin herunterladen
|
||||||
|
|
||||||
### Über Umgebungsvariablen
|
```bash
|
||||||
|
cd /tmp
|
||||||
|
git clone https://gitea.thomander.de/andreas/Hermes_rocket.chat_Plugin.git
|
||||||
|
cd Hermes_rocket.chat_Plugin
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Installation starten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Das Script führt dich Schritt für Schritt durch:
|
||||||
|
- 🔵 Prüfe Voraussetzungen (curl, git, python3)
|
||||||
|
- 🔵 Erstelle Plugin-Verzeichnis
|
||||||
|
- 🔵 Kopiere alle Dateien
|
||||||
|
- 🔵 Frage deine Rocket.Chat-Daten ab
|
||||||
|
- 🔵 Teste die Verbindung
|
||||||
|
- 🔵 Schreibe Konfiguration in `~/.hermes/.env`
|
||||||
|
|
||||||
|
Am Ende ist das Plugin einsatzbereit — einfach `hermes gateway start`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Manuelle Installation (Experten)
|
||||||
|
|
||||||
|
Wer das Setup lieber von Hand macht:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Plugin-Verzeichnis anlegen
|
||||||
|
mkdir -p ~/.hermes/hermes-agent/plugins/platforms/rocketchat
|
||||||
|
|
||||||
|
# Dateien hineinkopieren
|
||||||
|
cp plugin.yaml ~/.hermes/hermes-agent/plugins/platforms/rocketchat/
|
||||||
|
cp __init__.py ~/.hermes/hermes-agent/plugins/platforms/rocketchat/
|
||||||
|
cp adapter.py ~/.hermes/hermes-agent/plugins/platforms/rocketchat/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Konfiguration über Umgebungsvariablen
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export ROCKETCHAT_BASE_URL="https://rocketchat.example.com"
|
export ROCKETCHAT_BASE_URL="https://rocketchat.example.com"
|
||||||
@@ -42,7 +66,7 @@ export ROCKETCHAT_ALLOWED_USERS="andreas,max" # optional
|
|||||||
export ROCKETCHAT_ALLOW_ALL_USERS="false" # default
|
export ROCKETCHAT_ALLOW_ALL_USERS="false" # default
|
||||||
```
|
```
|
||||||
|
|
||||||
### Über `config.yaml`
|
### Konfiguration über `config.yaml`
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
plugins:
|
plugins:
|
||||||
@@ -52,14 +76,49 @@ plugins:
|
|||||||
base_url: "https://rocketchat.example.com"
|
base_url: "https://rocketchat.example.com"
|
||||||
user: "bernd"
|
user: "bernd"
|
||||||
password: "dein-passwort"
|
password: "dein-passwort"
|
||||||
room_id: "J3jvMyrKTMzKvKHSh" # optional
|
room_id: "J3jvMyrKTMzKvKHSh"
|
||||||
allowed_users: ["andreas", "max"] # optional
|
allowed_users: ["andreas", "max"]
|
||||||
allow_all_users: false # default
|
allow_all_users: false
|
||||||
```
|
```
|
||||||
|
|
||||||
## Abhängigkeiten
|
---
|
||||||
|
|
||||||
Keine externen Pakete erforderlich — nutzt ausschließlich Python-Standardbibliothek (`urllib`, `socket`, `ssl`, `threading`).
|
## Features
|
||||||
|
|
||||||
|
| Feature | Beschreibung |
|
||||||
|
|---------|-------------|
|
||||||
|
| 🚀 Echtzeit-Streaming | DDP/WebSocket für sofortige eingehende Nachrichten |
|
||||||
|
| 🟢 Präsenz | Grüner Online-Status im Rocket.Chat |
|
||||||
|
| ✍️ Markdown | Fett, kursiv, `Code`, Blöcke, Links |
|
||||||
|
| 🔘 Interaktive Buttons | Ja/Nein, Bestätigen/Abbrechen, Mehrfachauswahl |
|
||||||
|
| 📢 Räume | Kanäle, private Gruppen, Direktnachrichten |
|
||||||
|
| 🔒 Allowlist | Steuerung, wer den Bot nutzen darf |
|
||||||
|
| 📦 Zero-Dependency | Nur Python-Standardbibliothek |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Was ist im Paket?
|
||||||
|
|
||||||
|
```
|
||||||
|
Hermes_rocket.chat_Plugin/
|
||||||
|
├── install.sh ← Interaktives Setup für neue Benutzer
|
||||||
|
├── README.md ← Diese Datei
|
||||||
|
├── COMMUNITY_POST.md ← Fertige Vorlage für Foren/Reddit
|
||||||
|
├── plugin.yaml ← Plugin-Metadaten
|
||||||
|
├── __init__.py ← Plugin-Einstieg, Button-Templates
|
||||||
|
├── adapter.py ← DDP/WebSocket + REST Adapter
|
||||||
|
└── LICENSE ← Unlicense (Public Domain)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hilfe & Support
|
||||||
|
|
||||||
|
- **Hermes Agent Docs**: https://hermes-agent.nousresearch.com/
|
||||||
|
- **Rocket.Chat**: https://www.rocket.chat/
|
||||||
|
- **Dieses Repo**: https://gitea.thomander.de/andreas/Hermes_rocket.chat_Plugin
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Lizenz
|
## Lizenz
|
||||||
|
|
||||||
|
|||||||
Executable
+186
@@ -0,0 +1,186 @@
|
|||||||
|
/usr/bin/env bash
|
||||||
|
# install.sh
|
||||||
|
# Rocket.Chat Plugin für Hermes Agent — Interaktives Setup
|
||||||
|
# Voraussetzungen: bash, curl, git, python3
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PLUGIN_NAME="rocketchat"
|
||||||
|
HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"
|
||||||
|
PLUGIN_DEST="$HERMES_HOME/hermes-agent/plugins/platforms/$PLUGIN_NAME"
|
||||||
|
|
||||||
|
ECHO_OK() { echo -e " ✅ $1"; }
|
||||||
|
ECHO_ERR() { echo -e " ❌ $1"; }
|
||||||
|
ECHO_INFO() { echo -e " ℹ️ $1"; }
|
||||||
|
ECHO_STEP() { echo -e "\n🔵 $1"; }
|
||||||
|
ECHO_WARN() { echo -e " ⚠️ $1"; }
|
||||||
|
|
||||||
|
# ── Schritt 1: Prerequisites ──
|
||||||
|
ECHO_STEP "1/7 Prüfe Voraussetzungen"
|
||||||
|
|
||||||
|
MISSING=""
|
||||||
|
for cmd in curl git python3; do
|
||||||
|
if command -v "$cmd" &>/dev/null; then
|
||||||
|
ECHO_OK "$cmd installiert"
|
||||||
|
else
|
||||||
|
ECHO_ERR "$cmd fehlt"
|
||||||
|
MISSING="$MISSING $cmd"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -n "$MISSING" ]]; then
|
||||||
|
ECHO_WARN "Folgende Pakete müssen nachinstalliert werden:"
|
||||||
|
echo " sudo apt update && sudo apt install -y$MISSING"
|
||||||
|
read -rp " Pakete jetzt installieren? [j/N] " ans
|
||||||
|
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
||||||
|
sudo apt update && sudo apt install -y $MISSING
|
||||||
|
else
|
||||||
|
echo "Abbruch. Bitte installiere:$MISSING"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── Schritt 2: Zielverzeichnis anlegen ──
|
||||||
|
ECHO_STEP "2/7 Erstelle Plugin-Verzeichnis"
|
||||||
|
|
||||||
|
if [[ -d "$PLUGIN_DEST" ]]; then
|
||||||
|
ECHO_WARN "Verzeichnis existiert bereits: $PLUGIN_DEST"
|
||||||
|
read -rp " Überschreiben? [j/N] " ans
|
||||||
|
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
||||||
|
rm -rf "$PLUGIN_DEST"
|
||||||
|
else
|
||||||
|
echo "Abbruch."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$PLUGIN_DEST"
|
||||||
|
ECHO_OK "Verzeichnis angelegt: $PLUGIN_DEST"
|
||||||
|
|
||||||
|
# ── Schritt 3: Dateien kopieren ──
|
||||||
|
ECHO_STEP "3/7 Kopiere Plugin-Dateien"
|
||||||
|
|
||||||
|
for f in plugin.yaml __init__.py adapter.py; do
|
||||||
|
if [[ -f "$SCRIPT_DIR/$f" ]]; then
|
||||||
|
cp "$SCRIPT_DIR/$f" "$PLUGIN_DEST/"
|
||||||
|
ECHO_OK "$f kopiert"
|
||||||
|
else
|
||||||
|
ECHO_ERR "$f nicht im aktuellen Verzeichnis gefunden"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# ── Schritt 4: Konfiguration erfragen ──
|
||||||
|
ECHO_STEP "4/7 Konfiguration"
|
||||||
|
|
||||||
|
read -rp " Rocket.Chat Basis-URL (z.B. https://chat.example.com): " RC_URL
|
||||||
|
[[ -z "$RC_URL" ]] && { ECHO_ERR "URL darf nicht leer sein"; exit 1; }
|
||||||
|
|
||||||
|
read -rp " Rocket.Chat Benutzername: " RC_USER
|
||||||
|
[[ -z "$RC_USER" ]] && { ECHO_ERR "Benutzername darf nicht leer sein"; exit 1; }
|
||||||
|
|
||||||
|
read -rsp " Rocket.Chat Passwort: " RC_PASS
|
||||||
|
echo
|
||||||
|
[[ -z "$RC_PASS" ]] && { ECHO_ERR "Passwort darf nicht leer sein"; exit 1; }
|
||||||
|
|
||||||
|
read -rp " Standard-Raumname (z.B. #ki-assistent) [optional]: " RC_ROOM
|
||||||
|
|
||||||
|
# ── Schritt 5: Verbindungstest ──
|
||||||
|
ECHO_STEP "5/7 Teste Verbindung zu Rocket.Chat"
|
||||||
|
|
||||||
|
LOGIN_RESP=$(curl -s -H "Content-Type: application/json" \
|
||||||
|
-d "{\"user\":\"$RC_USER\",\"password\":\"$RC_PASS\"}" \
|
||||||
|
"${RC_URL%/}/api/v1/login" 2>/dev/null) || true
|
||||||
|
|
||||||
|
if [[ -z "$LOGIN_RESP" ]] || ! echo "$LOGIN_RESP" | grep -q '"status":"success"'; then
|
||||||
|
ECHO_ERR "Login fehlgeschlagen"
|
||||||
|
echo " URL : $RC_URL"
|
||||||
|
echo " User: $RC_USER"
|
||||||
|
read -rp " Parameter bearbeiten? [j/N] " ans
|
||||||
|
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
||||||
|
exec "$0" # Neustart
|
||||||
|
fi
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
AUTH_TOKEN=$(echo "$LOGIN_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['data']['authToken'])")
|
||||||
|
USER_ID=$(echo "$LOGIN_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['data']['userId'])")
|
||||||
|
|
||||||
|
ECHO_OK "Login erfolgreich (UserID: $USER_ID)"
|
||||||
|
|
||||||
|
# Raum auflösen, wenn angegeben
|
||||||
|
ROOM_ID=""
|
||||||
|
if [[ -n "$RC_ROOM" ]]; then
|
||||||
|
ROOM_QUERY="${RC_ROOM/#\#}"
|
||||||
|
ROOM_RESP=$(curl -s -H "X-Auth-Token: $AUTH_TOKEN" -H "X-User-Id: $USER_ID" \
|
||||||
|
"${RC_URL%/}/api/v1/rooms.info?roomName=$ROOM_QUERY" 2>/dev/null) || true
|
||||||
|
|
||||||
|
if echo "$ROOM_RESP" | grep -q '"success":true'; then
|
||||||
|
ROOM_ID=$(echo "$ROOM_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['room']['_id'])")
|
||||||
|
ECHO_OK "Raum gefunden: #$ROOM_QUERY (RoomID: $ROOM_ID)"
|
||||||
|
else
|
||||||
|
ECHO_WARN "Raum '#$ROOM_QUERY' nicht gefunden — überspringe"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── Schritt 6: Env-Variablen setzen ──
|
||||||
|
ECHO_STEP "6/7 Schreibe Konfiguration"
|
||||||
|
|
||||||
|
ENV_FILE="$HERMES_HOME/.env"
|
||||||
|
mkdir -p "$HERMES_HOME"
|
||||||
|
touch "$ENV_FILE"
|
||||||
|
|
||||||
|
# Alte Einträge entfernen
|
||||||
|
sed -i '/^ROCKETCHAT_/d' "$ENV_FILE" 2>/dev/null || true
|
||||||
|
|
||||||
|
{
|
||||||
|
echo ""
|
||||||
|
echo "# Rocket.Chat Plugin — generiert von install.sh am $(date +%Y-%m-%d)"
|
||||||
|
echo "export ROCKETCHAT_BASE_URL=\"$RC_URL\""
|
||||||
|
echo "export ROCKETCHAT_USER=\"$RC_USER\""
|
||||||
|
echo "export ROCKETCHAT_PASSWORD=\"$RC_PASS\""
|
||||||
|
[[ -n "$ROOM_ID" ]] && echo "export ROCKETCHAT_ROOM_ID=\"$ROOM_ID\""
|
||||||
|
echo "export ROCKETCHAT_ALLOW_ALL_USERS=\"false\""
|
||||||
|
} >> "$ENV_FILE"
|
||||||
|
|
||||||
|
ECHO_OK "~/.hermes/.env aktualisiert"
|
||||||
|
|
||||||
|
# Optional: config.yaml Eintrag anzeigen
|
||||||
|
ECHO_INFO "Falls du config.yaml bevorzugst, füge Folgendes hinzu:"
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
plugins:
|
||||||
|
platforms:
|
||||||
|
rocketchat:
|
||||||
|
enabled: true
|
||||||
|
base_url: "$RC_URL"
|
||||||
|
user: "$RC_USER"
|
||||||
|
password: "$RC_PASS"
|
||||||
|
room_id: "${ROOM_ID:-optional}"
|
||||||
|
allowed_users: []
|
||||||
|
allow_all_users: false
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# ── Schritt 7: Hermes Gateway Neustart ──
|
||||||
|
ECHO_STEP "7/7 Hermes Gateway Neustart"
|
||||||
|
|
||||||
|
if command -v hermes &>/dev/null; then
|
||||||
|
# Versuche Gateway sauber neu zu starten
|
||||||
|
hermes gateway stop 2>/dev/null || true
|
||||||
|
sleep 1
|
||||||
|
ECHO_OK "Hermes Gateway gestoppt"
|
||||||
|
echo ""
|
||||||
|
echo " Starte neu mit:"
|
||||||
|
echo " hermes gateway start"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
ECHO_WARN "'hermes' Befehl nicht im PATH gefunden"
|
||||||
|
echo " Bitte starte Hermes Gateway manuell:"
|
||||||
|
echo " hermes gateway start"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ECHO_STEP "✨ Fertig!"
|
||||||
|
ECHO_OK "Plugin installiert unter: $PLUGIN_DEST"
|
||||||
|
ECHO_INFO "Env-Variablen geladen in: $ENV_FILE"
|
||||||
|
ECHO_INFO "Rocket.Chat Plugin ist bereit."
|
||||||
Reference in New Issue
Block a user