Files
brain-template/scripts/brain-notify.sh
Tetardtek 878886cd51 feat: brain-template v2.0 — BSI-v3 complet + tiers documentés
- README reécrit : tiers free/pro/full + modèle clé API + multi-instance
- Sync agents/ (57 agents, kernel-isolation validated)
- Sync scripts/ BSI-v3 (file-lock, preflight, human-gate, brain-status)
- KERNEL.md v0.7.0 — zones + délégation + rendering + isolation
- brain-compose.yml v0.7.0 — rendering mode + kerneluser
- workflows/ — template + brain-engine exemple
- locks/.gitkeep + claims/.gitkeep
- helloWorld : RAG boot tier full only (bsi-rag retiré du template)
2026-03-16 23:26:38 +01:00

90 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# brain-notify.sh — Canal Telegram du SUPERVISOR
# Usage: brain-notify.sh "MESSAGE" [urgent|update|info] [supervisor|monitoring]
#
# Niveaux :
# urgent → 🔴 notification sonore — interruption humaine
# update → ✅ notification silencieuse — info non bloquante
# info → 💬 notification silencieuse — log passif
#
# Canaux :
# supervisor → groupe SUPERVISOR (défaut pour urgent)
# monitoring → channel Monitoring (défaut pour update/info)
# (si omis) → supervisor pour urgent, monitoring pour update/info
#
# Token lu depuis MYSECRETS — jamais hardcodé.
set -euo pipefail
MYSECRETS="${BRAIN_ROOT:-$HOME/Dev/Brain}/MYSECRETS"
if [[ ! -f "$MYSECRETS" ]]; then
echo "[brain-notify] ERREUR : MYSECRETS introuvable à $MYSECRETS" >&2
exit 1
fi
TOKEN=$(grep '^BRAIN_TELEGRAM_TOKEN=' "$MYSECRETS" | cut -d= -f2-)
CHAT_ID_SUPERVISOR=$(grep '^BRAIN_TELEGRAM_CHAT_ID_SUPERVISOR=' "$MYSECRETS" | cut -d= -f2- || true)
CHAT_ID_MONITORING=$(grep '^BRAIN_TELEGRAM_CHAT_ID_MONITORING=' "$MYSECRETS" | cut -d= -f2- || true)
# Fallback : ancienne clé unique si les nouvelles ne sont pas encore définies
if [[ -z "$CHAT_ID_SUPERVISOR" && -z "$CHAT_ID_MONITORING" ]]; then
FALLBACK=$(grep '^BRAIN_TELEGRAM_CHAT_ID=' "$MYSECRETS" | cut -d= -f2- || true)
CHAT_ID_SUPERVISOR="$FALLBACK"
CHAT_ID_MONITORING="$FALLBACK"
fi
if [[ -z "$TOKEN" ]]; then
echo "[brain-notify] ERREUR : BRAIN_TELEGRAM_TOKEN vide dans MYSECRETS" >&2
exit 1
fi
MESSAGE=$(printf '%b' "${1:-}")
LEVEL="${2:-info}"
CHANNEL="${3:-}"
if [[ -z "$MESSAGE" ]]; then
echo "[brain-notify] ERREUR : message vide" >&2
exit 1
fi
# Niveau → préfixe + silence
case "$LEVEL" in
urgent) PREFIX="🔴 *BRAIN ESCALADE*" ; SILENT=false ;;
update) PREFIX="✅ *BRAIN UPDATE*" ; SILENT=true ;;
info) PREFIX="💬 *BRAIN*" ; SILENT=true ;;
*) PREFIX="💬 *BRAIN*" ; SILENT=true ;;
esac
# Canal par défaut selon le niveau si non spécifié
if [[ -z "$CHANNEL" ]]; then
[[ "$LEVEL" == "urgent" ]] && CHANNEL="supervisor" || CHANNEL="monitoring"
fi
# Sélection du chat_id
case "$CHANNEL" in
supervisor) CHAT_ID="$CHAT_ID_SUPERVISOR" ;;
monitoring) CHAT_ID="$CHAT_ID_MONITORING" ;;
*) CHAT_ID="$CHAT_ID_SUPERVISOR" ;;
esac
if [[ -z "$CHAT_ID" ]]; then
echo "[brain-notify] ERREUR : chat_id manquant pour canal '$CHANNEL' dans MYSECRETS" >&2
exit 1
fi
FULL_MESSAGE="${PREFIX}
${MESSAGE}
_$(date '+%Y-%m-%d %H:%M')_"
DISABLE_NOTIFICATION=$( [[ "$SILENT" == "true" ]] && echo "true" || echo "false" )
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="$CHAT_ID" \
--data-urlencode "text=$FULL_MESSAGE" \
-d parse_mode="Markdown" \
-d disable_notification="$DISABLE_NOTIFICATION" \
> /dev/null
echo "[brain-notify] [$LEVEL$CHANNEL] envoyé"