Ctrl K
ComunidadGuías…

scripts/run_youtube_sync.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash
# YouTube 播放清單自動同步腳本
# 每日執行:抓新影片 → 生成知識卡 → 更新語意索引

set -euo pipefail

# Use HOME-relative default instead of hardcoded /root/
OPENCLAW_HOME="${OPENCLAW_HOME:-$HOME/.openclaw}"
WORKSPACE="${OPENCLAW_WORKSPACE:-$OPENCLAW_HOME/workspace}"
# skill 目錄由腳本自身位置推導——不要拿資料路徑去推程式路徑(那是 VPS 的擺法)
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
LOG_FILE="${XKB_YOUTUBE_LOG:-/tmp/xkb-youtube-sync.log}"

# Add user-local bin to PATH (yt-dlp is often installed there)
export PATH="$PATH:$HOME/.local/bin"

# Credentials/configuration are injected by the caller (process environment or
# XKB_ENV_FILE); this wrapper never reads private host paths.

echo "[$(date '+%Y-%m-%d %H:%M')] YouTube sync start" >> "$LOG_FILE"

cd "$SKILL_DIR"

# 1. 抓新影片並生成知識卡
python3 scripts/fetch_youtube_playlist.py 2>&1 | tee -a "$LOG_FILE"

# 2. 更新語意索引(增量)
VECTOR_INDEX="$WORKSPACE/memory/bookmarks/vector_index.json"
if [[ -f "$VECTOR_INDEX" ]]; then
    EMBEDDING_ARGS=(--incremental)
    if [[ -n "${XKB_ENV_FILE:-}" ]]; then
        EMBEDDING_ARGS+=(--env-file "$XKB_ENV_FILE")
    fi
    EMBEDDING_PROVIDER=gemini EMBEDDING_MODEL=gemini-embedding-2-preview \
        python3 scripts/build_vector_index.py "${EMBEDDING_ARGS[@]}" 2>&1 | tee -a "$LOG_FILE"
fi

echo "[$(date '+%Y-%m-%d %H:%M')] YouTube sync done" >> "$LOG_FILE"