From b74c6b2f56797e059847228974164298f483c6a6 Mon Sep 17 00:00:00 2001
From: John Doe <johndoe@example.com>
Date: Fri, 5 Jun 2026 00:14:00 +0200
Subject: [PATCH 6/6] add startup wait loop and voice command overview to
 start-local.sh

---
 start-local.sh | 148 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 147 insertions(+), 1 deletion(-)

diff --git a/start-local.sh b/start-local.sh
index e582b6f..c8782ee 100755
--- a/start-local.sh
+++ b/start-local.sh
@@ -25,4 +25,150 @@ if [ -n "$GREETING" ]; then
 fi
 
 PVA_CACHE="$BASE/local/.cache/pva" PVA_PIPER="$BASE/venv/bin/piper" PVA_PIPER_VOICES="$BASE/local/piper-voices" \
-PATH="$BASE/usr/local/sbin:$PATH" LD_PRELOAD="" java -Djna.library.path="$NATIVE_PATH" -Djava.library.path="$NATIVE_PATH" -Dpva.home=./local -cp "$CP:." server.PVA "startserver" >> local/.var/log/pva.log 2>> local/.var/log/pva.log
+PATH="$BASE/usr/local/sbin:$PATH" LD_PRELOAD="" java -Djna.library.path="$NATIVE_PATH" -Djava.library.path="$NATIVE_PATH" -Dpva.home=./local -cp "$CP:." server.PVA "startserver" >> local/.var/log/pva.log 2>> local/.var/log/pva.log &
+JAVA_PID=$!
+echo "PVA starting (PID $JAVA_PID)... waiting for model load."
+
+while true; do
+	if grep -q "keyword found" local/.var/log/pva.log 2>/dev/null; then
+		echo ""
+		echo "=== PVA is fully running and listening for wake word! ==="
+		echo ""
+		echo "Available voice commands (ActionCode -> Speech phrase):"
+		echo "  System:"
+		echo "    EXIT                       -> \"beende dich\", \"schalte dich aus/ab\""
+		echo "    AUTOEXIT                   -> \"automatisch runterfahren\""
+		echo "    RECOMPILE                  -> \"kompiliere dich neu/selbst\""
+		echo "    RECOMPILEWITHERRORREPORT   -> \"kompiliere dich ... mit fehlermeldung\""
+		echo "    HELP                       -> \"hilfe zu ...\""
+		echo "    REPEATLASTCOMMAND          -> \"nochmal\""
+		echo "    REPEATLASTOUTPUT           -> \"sag das nochmal\""
+		echo "    SWAPNAME                   -> \"benenne dich in um\", \"dein neuer name ist/lautet\""
+		echo "    SWAPALTERNATIVES           -> \"benutze ...\""
+		echo "    AUTHORIZE                  -> \"...autorisierung...code...\""
+		echo "    LASTERROR                  -> \"was war der letzte fehler/fehlermeldung\""
+		echo "    RECREATECACHE              -> \"erstelle/erneuere cache\""
+		echo "    ABORTMETACACHE             -> \"stoppe metadata/metacache\""
+		echo "    MAKEMETACACHE              -> \"erzeuge metadata\""
+		echo "    OPENSOURCECODE             -> \"öffne deinen sourcecode/quellcode\""
+		echo "    OPENCONFIG                 -> \"öffne deine config\""
+		echo "    SHUTUP                     -> \"halt die klappe\""
+		echo "    TALKTOME                   -> \"du darfst wieder\""
+		echo ""
+		echo "  Info:"
+		echo "    REPORTTIME                 -> \"wie spät ist es\", \"sag mir die uhrzeit\""
+		echo "    REPORTLOAD                 -> \"wie hoch ist die last/load\""
+		echo "    HEALTHREPORT               -> \"wie geht es dir\", \"wie gehts dir\""
+		echo ""
+		echo "  Weather:"
+		echo "    CURRENTWEATHERNOW          -> \"wie ist das wetter\""
+		echo "    CURRENTWEATHERNEXT         -> \"wie wird das wetter\""
+		echo "    CURRENTWEATHERTOMORROW     -> \"wie wird das wetter morgen\""
+		echo ""
+		echo "  Apps:"
+		echo "    OPENAPP                    -> \"öffne ...\""
+		echo "    STARTAPP                   -> \"start ...\""
+		echo "    STOPAPP                    -> \"beende/stoppe ...\""
+		echo "    MAKESCREENSHOT             -> \"mache/mach screenshot\""
+		echo "    LOCKSCREEN                 -> \"bildschirm sperren\""
+		echo "    UNLOCKSCREEN               -> \"entsperre bildschirm\", \"bildschirm entsperren\""
+		echo ""
+		echo "  Audio:"
+		echo "    PLAYAUDIO                  -> \"ich möchte hören\""
+		echo "    PLAYMUSIC                  -> \"spiele/spiel musik\""
+		echo "    ADDTITLE                   -> \"füge lieder/titel hinzu\""
+		echo "    LISTENTO                   -> \"was ist da zu hören\", \"was hörst du gerade\""
+		echo "    DECVOLUME                  -> \"mach leiser\", \"viel musik leiser\""
+		echo "    INCVOLUME                  -> \"mach lauter\", \"viel musik lauter\""
+		echo "    DECVOLUMESMALL             -> \"musik leiser\""
+		echo "    INCVOLUMESMALL             -> \"musik lauter\""
+		echo "    AUDIOPAUSE                 -> \"pausiere musik\", \"musik pause\""
+		echo "    AUDIOTOGGLE                -> \"ton an/aus\""
+		echo "    AUDIONEXTTRACK             -> \"nächster titel/stück/lied\", \"ein lied weiter\""
+		echo "    AUDIOPREVTRACK             -> \"letzter titel/stück/lied\", \"ein lied zurück\""
+		echo "    AUDIONTRACKSFORWARDS       -> \"lieder weiter\""
+		echo "    AUDIONTRACKSBACKWARDS      -> \"lieder zurück\""
+		echo "    AUDIOSKIPFORWARD           -> \"springe vor\""
+		echo "    AUDIOSKIPFORWARDN          -> \"springe <sekunden> vor\""
+		echo "    AUDIOSKIPBACKWARD          -> \"springe zurück\""
+		echo "    AUDIOSKIPBACKWARDN         -> \"springe <sekunden> zurück\""
+		echo ""
+		echo "  Video:"
+		echo "    PLAYVIDEO                  -> \"ich möchte sehen\""
+		echo "    VIDEOPLAYBACKPLAY          -> \"video start/weiter\", \"wiedergabe starten\""
+		echo "    VIDEOPLAYBACKSTOP          -> \"video stop\", \"wiedergabe stop\""
+		echo "    VIDEOPLAYBACKPAUSE         -> \"pausiere video\", \"video pause\""
+		echo "    VIDEOPLAYBACKTOGGLE        -> \"video fortsetzen\", \"wiedergabe fortsetzen\""
+		echo "    VIDEONEXTTRACK             -> \"nächstes video\", \"ein video weiter\""
+		echo "    VIDEOLASTTRACK             -> \"letztes video\", \"ein video zurück\""
+		echo "    VIDEONTRACKSFORWARDS       -> \"videos weiter\""
+		echo "    VIDEONTRACKSBACKWARDS      -> \"videos zurück\""
+		echo "    VIDEOPLAYBACKFULLSCREENON  -> \"video fullscreen/vollbild\""
+		echo "    VIDEOPLAYBACKFULLSCREENOFF -> \"video fullscreen/vollbild aus\""
+		echo ""
+		echo "  Phone:"
+		echo "    MAKEPHONECALL              -> \"rufe <name> an\", \"anrufen\", \"ich möchte sprechen/reden\""
+		echo "    SEARCH4PHONENUMBER         -> \"suche telefon von ...\""
+		echo ""
+		echo "  Email:"
+		echo "    COMPOSEEMAIL               -> \"schreibe email/e-mail\""
+		echo "    SEARCH4EMAIL               -> \"suche email von ...\""
+		echo ""
+		echo "  Search:"
+		echo "    WEBSEARCH                  -> \"suche web ...\""
+		echo "    PICSEARCH                  -> \"such bild ...\""
+		echo "    DOCSEARCH                  -> \"suche dokument/pdf/text ...\""
+		echo "    DOCREAD                    -> \"lies dokument/pdf/text\""
+		echo ""
+		echo "  AI/LLM:"
+		echo "    AI_STOP                    -> \"hör auf zu labern\", \"stop\""
+		echo "    AI_SUMMARIZE               -> (via Plugin, Texte zusammenfassen)"
+		echo "    AI_VISION_ANALYZE          -> \"was ist auf dem bild zu sehen\""
+		echo "    AICLEARHISTORY             -> \"neues gespräch\""
+		echo "    AISWAP                     -> \"künstliche intelligenz wechsel zu ...\""
+		echo "    AISWAPMODEL                -> \"sprachmodell wechseln zu ...\""
+		echo "    AIIDENTIFYMODEL            -> \"welches sprachmodell benutzt du\""
+		echo "    AIIDENTIFYCAM              -> \"was halte ich in die kamera\", \"was/wen siehst du\""
+		echo "    AIIDENTIFYIMAGE            -> \"was ist auf dem bild zu sehen\""
+		echo "    CHATGPTSWAP                -> \"wechsel zu ...\""
+		echo "    AI_SAY / AI_ANSWERE        -> (Sprachmodus-Fragen)"
+		echo ""
+		echo "  Timer:"
+		echo "    MAKE_TIMER                 -> \"erinnere mich um <zeit> an ...\""
+		echo "    MAKE_TIMERRELATIVE         -> \"erinnere mich in <zeit> an ...\""
+		echo "    TIMER_CANCEL               -> \"vergiss den termin\""
+		echo "    TIMER_LIST                 -> \"meine termine\", \"was steht an\""
+		echo "    TIMER_CLEAR_ALL            -> \"alle termine löschen\""
+		echo ""
+		echo "  Speech:"
+		echo "    SPEAK / ASYNCSPEAK         -> (interne Text-zu-Sprache Befehle)"
+		echo "    STOPSPEECH                 -> (Sprachausgabe stoppen)"
+		echo "    PLAYSOUND / STOPSOUND      -> (Töne abspielen/stoppen)"
+		echo ""
+		echo "  Misc:"
+		echo "    WIKI_SEARCH                -> \"such/suche wikipedia nach ...\""
+		echo "    MOOD_QUERY                 -> (Stimmungsabfrage)"
+		echo "    SILENCEDISKWARNING         -> \"schalte disk warnung aus\""
+		echo "    RECALLSEARCH               -> \"suche im gedächtnis\", \"gedächtnis\""
+		echo "    RECALLERASE                -> \"lösche gedächtnis datei\""
+		echo "    GETFIREFOXHISTORY          -> \"welche webseiten habe ich besucht\""
+		echo "    EXEC:<command>             -> \"schalte auf kopfhörer/lautsprecher\" u.a."
+		echo "    CLUSTERRESTARTCLIENT      -> \"neustart klient/client ...\""
+		echo "    MATRIX_LISTROOMS           -> \"liste matrix räume auf\""
+		echo "    NETFLIXHOME                -> \"netflix home\", \"netflix ...\""
+		echo "    WATCHDOG_START             -> \"watchdog/überwachung aktivieren/ein\""
+		echo "    WATCHDOG_STOP              -> \"watchdog/überwachung deaktivieren/aus\""
+		echo "    SERVERWATCH_CHECK/STATUS   -> (Serverüberwachung, via Konfig)"
+		echo ""
+		echo "=== Tailing logfile (Ctrl+C to stop) ==="
+		tail -f local/.var/log/pva.log
+		break
+	fi
+	if ! kill -0 $JAVA_PID 2>/dev/null; then
+		echo ""
+		echo "ERROR: PVA process died. Check local/.var/log/pva.log"
+		break
+	fi
+	sleep 1
+done
+wait $JAVA_PID 2>/dev/null
-- 
2.47.3

