# TacForce Supervisor — Betrieb & Überwachung der Bots

Der Supervisor ist der Prozess-Wächter des Projekts: **er hält alle Bots am Laufen.**

## Was er tut

| Funktion | Details |
|---|---|
| **Autostart** | Windows-Aufgabe „TacForce Supervisor" startet ihn bei jedem Systemstart (1 min Verzögerung, läuft als SYSTEM). |
| **Selbstheilung** | Aufgabe „TacForce Supervisor Watchdog" prüft alle 5 min, ob er lebt — und startet ihn sonst nach. |
| **Auto-Neustart** | Stirbt ein Bot, wird er automatisch neu gestartet (Backoff 5s→15s→30s→60s→120s→300s; Reset nach 5 min Stabilität). |
| **E-Mail-Alarm** | Bei jedem Absturz geht eine Mail an `ALERT_MAIL_TO` (laravel-app/.env, aktuell arthurkotsch@kotsch.tech) — via `php artisan bot:alert` über Zoho (noreply@kotsch.tech). Max. 1 Mail/Prozess/10 min. |
| **Heartbeat** | Schreibt alle 30 s `last_heartbeat_at`/`last_pid` in die `bots`-Tabelle → Live-Status im Admin-Panel (`/admin/bots`) und auf der Website („Flotte"). Online = Heartbeat < 90 s. |
| **Keine Doppel-Instanzen** | Singleton-Guard + Orphan-Cleanup + Tree-Kill (Windows-venv-Launcher!). |

## Überwachte Prozesse (`supervisor/processes.json`)

1. **kotsch-tech** — „KOTSCH Assistant" (Python/discord.py) aus `bots/kotsch-tech/`. In der DB: Bot #2, `managed=external`.
2. **bot-worker** — TacForce Multi-Bot-Worker (Node). Startet alle DB-Bots mit `managed=worker` (aktuell keine aktiv — er idlet und pollt die Outbox).

**Wichtig:** `managed=external` heißt: der Bot-Worker überspringt diesen Bot (läuft als eigener Prozess) — sonst würde er doppelt auf Discord antworten.

## Bedienung

```
START-SUPERVISOR.bat                     manuell im Vordergrund (Strg+C beendet sauber)
schtasks /run  /tn "TacForce Supervisor" als Hintergrund-Dienst starten (wie beim Boot)
schtasks /end  /tn "TacForce Supervisor" stoppen (beendet auch alle Bots!)
```

Status ansehen: https://tacforce.pro/admin/bots · Logs: `supervisor/logs/` (`supervisor.log`, `kotsch-tech.log`, `bot-worker.log`, `*.lastcrash.txt`).

## Neuen Bot unter Aufsicht stellen

1. Bot-Code nach `bots/<name>/` legen (eigene `.env` dort).
2. Eintrag in `supervisor/processes.json` ergänzen (`name`, `cwd`, `command`, `args`, `enabled`, ggf. `botDbId`).
3. Bot im Admin-Panel registrieren; bei eigenem Prozess in der DB `managed='external'` setzen (tinker), damit der Worker ihn nicht doppelt startet.
4. Supervisor neu starten: `schtasks /end /tn "TacForce Supervisor" & schtasks /run /tn "TacForce Supervisor"`.

## Getestet (02.07.2026)

- ✅ Kill-Test: Prozessbaum getötet → Crash erkannt → **Alarm-Mail versendet** → Bot nach 5 s wieder online.
- ✅ Start über Aufgabenplanung (wie beim Boot), läuft als SYSTEM.
- ✅ Heartbeat in DB, Live-Status auf Website + Admin.
- ✅ Dienste Apache2.4/cloudflared/sshd: Autostart + Absturz-Wiederanlauf (`sc failure`) gesetzt.
