798de0be8f
Phase 0 abgeschlossen: - Hart-Deckel jetzt Default AN (Soft+5000), da der weiche Schnitt allein bei Weiterarbeit ueber die Grenze eine Fassade erzeugt (P0-Befund). GOV_HARD_CEILING=0 schaltet ihn aus. gov-ctl reicht Arg 2 nur bei Bedarf durch. - README: Empfehlung/Doku auf Default-an aktualisiert, Commit-Msg-Restpunkt notiert (--no-auto-commits als saubere Option). Phase 2 (Voice-Hook): beim Feuern (soft/hard) POSTet der Governor best-effort + gedrosselt (Default 300 s) eine Meldung an Lucys vorhandene Announce-Pipeline (POST :9001/api/voice/announce, source=governor, priority=normal). Lucy pollt, dedupliziert und spricht sie via lokales TTS -- KEIN Lucy-Code noetig. E2E bewiesen: Feuern -> ANNOUNCE status=200 -> Eintrag id 394 source=governor in der Queue. GOV_ANNOUNCE_URL="" schaltet es ab. announce-test.sh beigelegt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
55 lines
1.6 KiB
Bash
55 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
# gov-ctl.sh — Governor sauber starten/stoppen (Phase-0-Helfer).
|
|
# Nutzung:
|
|
# gov-ctl.sh start [SCHWELLE] # startet detached, Default-Schwelle 25000
|
|
# gov-ctl.sh stop
|
|
# gov-ctl.sh status
|
|
set -u
|
|
DIR="$HOME/governor-p0"
|
|
PIDF="$DIR/governor.pid"
|
|
LOG="$DIR/governor.log"
|
|
OUT="$DIR/governor.stdout"
|
|
|
|
start() {
|
|
stop
|
|
local thr="${1:-25000}"
|
|
cd "$DIR"
|
|
: > "$LOG"
|
|
# Voll detachen: eigene Session, alle FDs weg vom Aufrufer.
|
|
# Hart-Deckel nur setzen, wenn explizit uebergeben (Arg 2); sonst rechnet
|
|
# governor.py den Default (Soft + 5000). CPT-Default 3.5 (kalibriert 24.07.).
|
|
local hardenv=()
|
|
if [ -n "${2:-}" ]; then hardenv=(GOV_HARD_CEILING="$2"); fi
|
|
setsid env GOV_THRESHOLD="$thr" "${hardenv[@]}" \
|
|
GOV_CHARS_PER_TOKEN="${GOV_CHARS_PER_TOKEN:-3.5}" \
|
|
GOV_LOG="$LOG" GOV_PORT=8100 \
|
|
python3 "$DIR/governor.py" </dev/null >>"$OUT" 2>&1 &
|
|
echo $! > "$PIDF"
|
|
sleep 1.2
|
|
echo "started pid=$(cat "$PIDF") threshold=$thr hard=${2:-auto}"
|
|
ss -tlnp 2>/dev/null | grep ":8100" >/dev/null && echo "listening :8100 OK" || echo "WARN: not listening"
|
|
}
|
|
|
|
stop() {
|
|
pkill -f "$DIR/governor.py" 2>/dev/null || true
|
|
[ -f "$PIDF" ] && kill "$(cat "$PIDF")" 2>/dev/null || true
|
|
sleep 0.6
|
|
rm -f "$PIDF"
|
|
}
|
|
|
|
status() {
|
|
if pgrep -f "$DIR/governor.py" >/dev/null; then
|
|
echo "running pid=$(pgrep -f "$DIR/governor.py" | tr '\n' ' ')"
|
|
ss -tlnp 2>/dev/null | grep ":8100" || true
|
|
else
|
|
echo "not running"
|
|
fi
|
|
}
|
|
|
|
case "${1:-status}" in
|
|
start) shift; start "${1:-25000}" "${2:-}" ;;
|
|
stop) stop; echo stopped ;;
|
|
status) status ;;
|
|
*) echo "usage: gov-ctl.sh {start [soft] [hart]|stop|status}"; exit 2 ;;
|
|
esac
|