Spaces:
Running
Running
fix: use default value expansion for environment variables to prevent unbound variable errors in start.sh
Browse files
start.sh
CHANGED
|
@@ -118,7 +118,7 @@ chmod 700 /home/node/.openclaw
|
|
| 118 |
chmod 700 /home/node/.openclaw/credentials
|
| 119 |
|
| 120 |
# ββ Validate HF token (if provided) ββ
|
| 121 |
-
if [ -n "$HF_TOKEN" ]; then
|
| 122 |
echo "π Validating HF token..."
|
| 123 |
HF_AUTH_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $HF_TOKEN" https://huggingface.co/api/repos/create --max-time 10 2>/dev/null || echo "000")
|
| 124 |
if [ "$HF_AUTH_STATUS" = "401" ]; then
|
|
@@ -261,7 +261,7 @@ if [ "$BROWSER_SHOULD_ENABLE" = "true" ]; then
|
|
| 261 |
fi
|
| 262 |
|
| 263 |
# Control UI origin (allow HF Space URL for web UI access)
|
| 264 |
-
if [ -n "$SPACE_HOST" ]; then
|
| 265 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.allowedOrigins = [\"https://${SPACE_HOST}\"]")
|
| 266 |
fi
|
| 267 |
|
|
@@ -269,35 +269,35 @@ fi
|
|
| 269 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.dangerouslyDisableDeviceAuth = true")
|
| 270 |
|
| 271 |
# Password auth (optional β simpler alternative to token for casual users)
|
| 272 |
-
if [ -n "$OPENCLAW_PASSWORD" ]; then
|
| 273 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.auth.mode = \"password\" | .gateway.auth.password = \"$OPENCLAW_PASSWORD\"")
|
| 274 |
fi
|
| 275 |
|
| 276 |
# Trusted proxies (optional β fixes "Proxy headers detected from untrusted address" on HF Spaces)
|
| 277 |
# Set TRUSTED_PROXIES as comma-separated IPs/CIDRs, e.g. "10.20.31.87,10.20.26.157"
|
| 278 |
# Loopback proxies stay trusted by default so the local dashboard reverse proxy works correctly.
|
| 279 |
-
if [ -n "$TRUSTED_PROXIES" ]; then
|
| 280 |
PROXIES_JSON=$(echo "$TRUSTED_PROXIES" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
|
| 281 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.trustedProxies += $PROXIES_JSON | .gateway.trustedProxies |= unique")
|
| 282 |
fi
|
| 283 |
|
| 284 |
# Allowed origins (optional β lock down Control UI to specific URLs)
|
| 285 |
# Set ALLOWED_ORIGINS as comma-separated URLs, e.g. "https://your-space.hf.space"
|
| 286 |
-
if [ -n "$ALLOWED_ORIGINS" ]; then
|
| 287 |
ORIGINS_JSON=$(echo "$ALLOWED_ORIGINS" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
|
| 288 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.allowedOrigins = $ORIGINS_JSON")
|
| 289 |
fi
|
| 290 |
|
| 291 |
# Telegram (supports multiple user IDs, comma-separated)
|
| 292 |
-
if [ -n "$TELEGRAM_BOT_TOKEN" ]; then
|
| 293 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq '.plugins.entries.telegram = {"enabled": true}')
|
| 294 |
export TELEGRAM_BOT_TOKEN="$TELEGRAM_BOT_TOKEN"
|
| 295 |
|
| 296 |
-
if [ -n "$TELEGRAM_USER_IDS" ]; then
|
| 297 |
# Convert comma-separated IDs to JSON array
|
| 298 |
IDS_JSON=$(echo "$TELEGRAM_USER_IDS" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
|
| 299 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".channels.telegram = {\"dmPolicy\": \"allowlist\", \"allowFrom\": $IDS_JSON}")
|
| 300 |
-
elif [ -n "$TELEGRAM_USER_ID" ]; then
|
| 301 |
# Single user (backward compatible)
|
| 302 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".channels.telegram = {\"dmPolicy\": \"allowlist\", \"allowFrom\": [\"$TELEGRAM_USER_ID\"]}")
|
| 303 |
fi
|
|
@@ -324,7 +324,7 @@ echo " β π Configuration Summary β"
|
|
| 324 |
echo " ββββββββββββββββββββββββββββββββββββββββββββ€"
|
| 325 |
printf " β %-40s β\n" "OpenClaw: $OPENCLAW_DISPLAY_VERSION"
|
| 326 |
printf " β %-40s β\n" "Model: $LLM_MODEL"
|
| 327 |
-
if [ -n "$TELEGRAM_BOT_TOKEN" ]; then
|
| 328 |
printf " β %-40s β\n" "Telegram: β
enabled"
|
| 329 |
else
|
| 330 |
printf " β %-40s β\n" "Telegram: β not configured"
|
|
@@ -344,12 +344,12 @@ printf " β %-40s β\n" "Backup: β
${BACKUP_DATASET:-huggingclaw-backup} (
|
|
| 344 |
else
|
| 345 |
printf " β %-40s β\n" "Backup: β not configured"
|
| 346 |
fi
|
| 347 |
-
if [ -n "$OPENCLAW_PASSWORD" ]; then
|
| 348 |
printf " β %-40s β\n" "Auth: π password"
|
| 349 |
else
|
| 350 |
printf " β %-40s β\n" "Auth: π token"
|
| 351 |
fi
|
| 352 |
-
if [ -n "$SPACE_HOST" ]; then
|
| 353 |
printf " β %-40s β\n" "Control UI: https://${SPACE_HOST}/app"
|
| 354 |
printf " β %-40s β\n" "Dashboard: https://${SPACE_HOST}"
|
| 355 |
fi
|
|
@@ -358,14 +358,14 @@ if [ -n "${HF_TOKEN:-}" ]; then
|
|
| 358 |
SYNC_STATUS="β
every ${SYNC_INTERVAL:-180}s"
|
| 359 |
fi
|
| 360 |
printf " β %-40s β\n" "Auto-sync: $SYNC_STATUS"
|
| 361 |
-
if [ -n "$WEBHOOK_URL" ]; then
|
| 362 |
printf " β %-40s β\n" "Webhooks: β
enabled"
|
| 363 |
fi
|
| 364 |
echo " ββββββββββββββββββββββββββββββββββββββββββββ"
|
| 365 |
echo ""
|
| 366 |
|
| 367 |
# ββ Trigger Webhook on Restart ββ
|
| 368 |
-
if [ -n "$WEBHOOK_URL" ]; then
|
| 369 |
echo "π Sending restart webhook..."
|
| 370 |
curl -s -X POST "$WEBHOOK_URL" \
|
| 371 |
-H "Content-Type: application/json" \
|
|
|
|
| 118 |
chmod 700 /home/node/.openclaw/credentials
|
| 119 |
|
| 120 |
# ββ Validate HF token (if provided) ββ
|
| 121 |
+
if [ -n "${HF_TOKEN:-}" ]; then
|
| 122 |
echo "π Validating HF token..."
|
| 123 |
HF_AUTH_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $HF_TOKEN" https://huggingface.co/api/repos/create --max-time 10 2>/dev/null || echo "000")
|
| 124 |
if [ "$HF_AUTH_STATUS" = "401" ]; then
|
|
|
|
| 261 |
fi
|
| 262 |
|
| 263 |
# Control UI origin (allow HF Space URL for web UI access)
|
| 264 |
+
if [ -n "${SPACE_HOST:-}" ]; then
|
| 265 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.allowedOrigins = [\"https://${SPACE_HOST}\"]")
|
| 266 |
fi
|
| 267 |
|
|
|
|
| 269 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.dangerouslyDisableDeviceAuth = true")
|
| 270 |
|
| 271 |
# Password auth (optional β simpler alternative to token for casual users)
|
| 272 |
+
if [ -n "${OPENCLAW_PASSWORD:-}" ]; then
|
| 273 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.auth.mode = \"password\" | .gateway.auth.password = \"$OPENCLAW_PASSWORD\"")
|
| 274 |
fi
|
| 275 |
|
| 276 |
# Trusted proxies (optional β fixes "Proxy headers detected from untrusted address" on HF Spaces)
|
| 277 |
# Set TRUSTED_PROXIES as comma-separated IPs/CIDRs, e.g. "10.20.31.87,10.20.26.157"
|
| 278 |
# Loopback proxies stay trusted by default so the local dashboard reverse proxy works correctly.
|
| 279 |
+
if [ -n "${TRUSTED_PROXIES:-}" ]; then
|
| 280 |
PROXIES_JSON=$(echo "$TRUSTED_PROXIES" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
|
| 281 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.trustedProxies += $PROXIES_JSON | .gateway.trustedProxies |= unique")
|
| 282 |
fi
|
| 283 |
|
| 284 |
# Allowed origins (optional β lock down Control UI to specific URLs)
|
| 285 |
# Set ALLOWED_ORIGINS as comma-separated URLs, e.g. "https://your-space.hf.space"
|
| 286 |
+
if [ -n "${ALLOWED_ORIGINS:-}" ]; then
|
| 287 |
ORIGINS_JSON=$(echo "$ALLOWED_ORIGINS" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
|
| 288 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.allowedOrigins = $ORIGINS_JSON")
|
| 289 |
fi
|
| 290 |
|
| 291 |
# Telegram (supports multiple user IDs, comma-separated)
|
| 292 |
+
if [ -n "${TELEGRAM_BOT_TOKEN:-}" ]; then
|
| 293 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq '.plugins.entries.telegram = {"enabled": true}')
|
| 294 |
export TELEGRAM_BOT_TOKEN="$TELEGRAM_BOT_TOKEN"
|
| 295 |
|
| 296 |
+
if [ -n "${TELEGRAM_USER_IDS:-}" ]; then
|
| 297 |
# Convert comma-separated IDs to JSON array
|
| 298 |
IDS_JSON=$(echo "$TELEGRAM_USER_IDS" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
|
| 299 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".channels.telegram = {\"dmPolicy\": \"allowlist\", \"allowFrom\": $IDS_JSON}")
|
| 300 |
+
elif [ -n "${TELEGRAM_USER_ID:-}" ]; then
|
| 301 |
# Single user (backward compatible)
|
| 302 |
CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".channels.telegram = {\"dmPolicy\": \"allowlist\", \"allowFrom\": [\"$TELEGRAM_USER_ID\"]}")
|
| 303 |
fi
|
|
|
|
| 324 |
echo " ββββββββββββββββββββββββββββββββββββββββββββ€"
|
| 325 |
printf " β %-40s β\n" "OpenClaw: $OPENCLAW_DISPLAY_VERSION"
|
| 326 |
printf " β %-40s β\n" "Model: $LLM_MODEL"
|
| 327 |
+
if [ -n "${TELEGRAM_BOT_TOKEN:-}" ]; then
|
| 328 |
printf " β %-40s β\n" "Telegram: β
enabled"
|
| 329 |
else
|
| 330 |
printf " β %-40s β\n" "Telegram: β not configured"
|
|
|
|
| 344 |
else
|
| 345 |
printf " β %-40s β\n" "Backup: β not configured"
|
| 346 |
fi
|
| 347 |
+
if [ -n "${OPENCLAW_PASSWORD:-}" ]; then
|
| 348 |
printf " β %-40s β\n" "Auth: π password"
|
| 349 |
else
|
| 350 |
printf " β %-40s β\n" "Auth: π token"
|
| 351 |
fi
|
| 352 |
+
if [ -n "${SPACE_HOST:-}" ]; then
|
| 353 |
printf " β %-40s β\n" "Control UI: https://${SPACE_HOST}/app"
|
| 354 |
printf " β %-40s β\n" "Dashboard: https://${SPACE_HOST}"
|
| 355 |
fi
|
|
|
|
| 358 |
SYNC_STATUS="β
every ${SYNC_INTERVAL:-180}s"
|
| 359 |
fi
|
| 360 |
printf " β %-40s β\n" "Auto-sync: $SYNC_STATUS"
|
| 361 |
+
if [ -n "${WEBHOOK_URL:-}" ]; then
|
| 362 |
printf " β %-40s β\n" "Webhooks: β
enabled"
|
| 363 |
fi
|
| 364 |
echo " ββββββββββββββββββββββββββββββββββββββββββββ"
|
| 365 |
echo ""
|
| 366 |
|
| 367 |
# ββ Trigger Webhook on Restart ββ
|
| 368 |
+
if [ -n "${WEBHOOK_URL:-}" ]; then
|
| 369 |
echo "π Sending restart webhook..."
|
| 370 |
curl -s -X POST "$WEBHOOK_URL" \
|
| 371 |
-H "Content-Type: application/json" \
|