59 lines
1.9 KiB
Bash
59 lines
1.9 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# SessionStart hook for /watch — one-line status so users know what's wired up.
|
||
|
|
# Silent on ready state to avoid spam. Points at the installer when something
|
||
|
|
# is missing.
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
CONFIG_FILE="$HOME/.config/watch/.env"
|
||
|
|
|
||
|
|
# Warn if the secrets file has loose permissions.
|
||
|
|
if [[ -f "$CONFIG_FILE" ]]; then
|
||
|
|
perms=$(stat -c '%a' "$CONFIG_FILE" 2>/dev/null || stat -f '%Lp' "$CONFIG_FILE" 2>/dev/null || echo "")
|
||
|
|
if [[ -n "$perms" && "$perms" != "600" && "$perms" != "400" ]]; then
|
||
|
|
echo "/watch: WARNING — $CONFIG_FILE has permissions $perms (should be 600)."
|
||
|
|
echo " Fix: chmod 600 $CONFIG_FILE"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Load API keys from the config file without exporting them.
|
||
|
|
read_key() {
|
||
|
|
local name="$1"
|
||
|
|
if [[ -n "${!name:-}" ]]; then
|
||
|
|
echo "${!name}"
|
||
|
|
return
|
||
|
|
fi
|
||
|
|
if [[ -f "$CONFIG_FILE" ]]; then
|
||
|
|
awk -F= -v k="$name" '
|
||
|
|
/^[[:space:]]*#/ { next }
|
||
|
|
$1 == k {
|
||
|
|
sub(/^[[:space:]]*/, "", $2); sub(/[[:space:]]*$/, "", $2);
|
||
|
|
gsub(/^["'\'']|["'\'']$/, "", $2);
|
||
|
|
print $2; exit
|
||
|
|
}
|
||
|
|
' "$CONFIG_FILE"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
HAS_FFMPEG=""
|
||
|
|
HAS_YTDLP=""
|
||
|
|
command -v ffmpeg >/dev/null 2>&1 && HAS_FFMPEG="yes"
|
||
|
|
command -v yt-dlp >/dev/null 2>&1 && HAS_YTDLP="yes"
|
||
|
|
|
||
|
|
HAS_GROQ="$(read_key GROQ_API_KEY)"
|
||
|
|
HAS_OPENAI="$(read_key OPENAI_API_KEY)"
|
||
|
|
SETUP_COMPLETE="$(read_key SETUP_COMPLETE)"
|
||
|
|
|
||
|
|
# Fully configured → silent (Claude can surface status on demand via --check).
|
||
|
|
if [[ "$SETUP_COMPLETE" == "true" && -n "$HAS_FFMPEG" && -n "$HAS_YTDLP" ]]; then
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
# First-run / partially-configured → one-line hint.
|
||
|
|
if [[ -z "$HAS_FFMPEG" || -z "$HAS_YTDLP" ]]; then
|
||
|
|
echo "/watch: needs ffmpeg + yt-dlp. Run \`python3 \$CLAUDE_PLUGIN_ROOT/scripts/setup.py\` once to install and scaffold config."
|
||
|
|
elif [[ -z "$HAS_GROQ" && -z "$HAS_OPENAI" ]]; then
|
||
|
|
echo "/watch: ready for videos with native captions. Add GROQ_API_KEY (preferred) or OPENAI_API_KEY to ~/.config/watch/.env to unlock Whisper fallback."
|
||
|
|
else
|
||
|
|
echo "/watch: ready."
|
||
|
|
fi
|