- Upgrade OpenClaw primary model from deepseek-v4.1-flash to deepseek-v4.1-flash-1017 across all interactive agents, heartbeats, compaction, and cron jobs. - Configure hardened OpenRouter provider routing for 1017 (deepinfra, inference-net, parasail, cloudflare) with strict fp8/bf16 quantization and tool_choice verification. - Retain deepseek-v4.1-flash (0910), z-ai/glm-5.3-flash, and qwen3.8-flash in the automated fallback chain. - Update ADR 0002 with 1017 economics (30% price reduction on prompt/cache, +60% intelligence benchmark increase) and a 7-point provider qualification playbook. - Add operational scripts and tooling for session compaction, subagent vector deduplication, gateway preflight, and triage diagnostics in k8s/openclaw. - Update DuckDB backend engine, git-sync logic, and test suites. - Enhance Mila tracking UI components and add container build configuration. - Sync Terraform infrastructure state for Authentik.
67 lines
3.3 KiB
Bash
Executable File
67 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ==============================================================================
|
|
# setup-garmin-cron.sh
|
|
# Declaratively registers the Garmin Connect Nightly Sync in OpenClaw.
|
|
# Schedule: Daily at 03:30 Europe/Berlin (cron: 30 3 * * *)
|
|
# ==============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
NAMESPACE="${NAMESPACE:-openclaw}"
|
|
POD_NAME="${POD_NAME:-openclaw-0}"
|
|
CONTAINER_NAME="${CONTAINER_NAME:-openclaw}"
|
|
|
|
JOB_NAME="garmin-nightly-mirror"
|
|
CRON_SCHEDULE="30 3 * * *"
|
|
TIMEZONE="Europe/Berlin"
|
|
TELEGRAM_GROUP="-1004326921510"
|
|
TELEGRAM_TOPIC="20"
|
|
|
|
echo "=== Registering Garmin Connect Nightly Sync in OpenClaw ($POD_NAME) ==="
|
|
|
|
# 1. Check if job already exists
|
|
EXISTING_ID=$(kubectl exec -n "$NAMESPACE" "$POD_NAME" -c "$CONTAINER_NAME" -- openclaw cron list --json 2>/dev/null | python3 -c 'import sys, json; data=json.load(sys.stdin); print(next((j["id"] for j in data.get("jobs", []) if j.get("declarationKey") == "'"$JOB_NAME"'" or j.get("name") == "'"$JOB_NAME"'"), ""))' 2>/dev/null || true)
|
|
|
|
if [ -n "$EXISTING_ID" ]; then
|
|
echo "Found existing job with ID $EXISTING_ID. Removing for idempotent recreation..."
|
|
kubectl exec -n "$NAMESPACE" "$POD_NAME" -c "$CONTAINER_NAME" -- openclaw cron rm "$EXISTING_ID" || true
|
|
fi
|
|
|
|
# 2. Add the job
|
|
echo "Creating automation $JOB_NAME ($CRON_SCHEDULE @ $TIMEZONE)..."
|
|
|
|
MESSAGE=$(cat << 'EOF'
|
|
Führe den nächtlichen Garmin Connect Sync durch.
|
|
Vorgehen:
|
|
1. Führe den Garmin-Sync-Befehl aus:
|
|
uv run /home/node/mop-skills/mop-skills/skills/datastore/scripts/garmin_sync.py --days 2 --data-dir /home/node/.openclaw/wiki/main/data
|
|
2. Aktualisiere die gerenderten Markdown-Ansichten:
|
|
PYTHONPATH=/home/node/mop-skills/mop-skills/skills/datastore/scripts uv run /home/node/mop-skills/mop-skills/skills/datastore/scripts/render_views.py --data-dir /home/node/.openclaw/wiki/main/data --wiki-dir /home/node/.openclaw/wiki/main
|
|
3. Aktualisiere das persönliche Health & Nutrition Dashboard (moritz.html):
|
|
uv run /home/node/mop-skills/mop-skills/skills/datastore/scripts/update_moritz_website.py --data-dir /home/node/.openclaw/wiki/main/data
|
|
4. Git Commit & Push im Knowledge Wiki:
|
|
cd /home/node/.openclaw/wiki/main && git add data/garmin/ entities/nutrition-log/ public/ && git diff --staged --quiet || (git commit -m "chore(garmin): automated nightly mirror [skip ci]" && git push origin main)
|
|
5. Finale Antwort:
|
|
- Bei Erfolg: Gib exakt 'NO_REPLY' aus (intentional silence, kein Telegram-Spam in der Nacht).
|
|
- Nur bei Authentifizierungsfehlern: Informiere kurz via Telegram (Thema #Sport), dass ein Garmin-Re-Auth nötig ist, oder starte den Re-Auth-Flow.
|
|
EOF
|
|
)
|
|
|
|
kubectl exec -n "$NAMESPACE" "$POD_NAME" -c "$CONTAINER_NAME" -- openclaw cron add \
|
|
--name "$JOB_NAME" \
|
|
--declaration-key "$JOB_NAME" \
|
|
--description "Nächtlicher deterministischer Spiegel der Garmin Connect Daten (Aktivitäten, Daily Summary, Schlaf) in Git JSONL" \
|
|
--cron "$CRON_SCHEDULE" \
|
|
--tz "$TIMEZONE" \
|
|
--agent "fitness" \
|
|
--model "openrouter/deepseek/deepseek-v4.1-flash-1017" \
|
|
--session "isolated" \
|
|
--channel "telegram" \
|
|
--to "$TELEGRAM_GROUP" \
|
|
--thread-id "$TELEGRAM_TOPIC" \
|
|
--announce \
|
|
--message "$MESSAGE"
|
|
|
|
echo "=== Automation successfully registered! ==="
|
|
kubectl exec -n "$NAMESPACE" "$POD_NAME" -c "$CONTAINER_NAME" -- openclaw cron list | grep "$JOB_NAME" || true
|