diff --git a/aws-lightsail/openclaw.sh b/aws-lightsail/openclaw.sh index f02695d4..628977bf 100755 --- a/aws-lightsail/openclaw.sh +++ b/aws-lightsail/openclaw.sh @@ -41,60 +41,19 @@ else fi # 7. Get model preference -echo "" -log_warn "Browse models at: https://openrouter.ai/models" -log_warn "Which model would you like to use?" -MODEL_ID=$(safe_read "Enter model ID [openrouter/auto]: ") || MODEL_ID="" -MODEL_ID="${MODEL_ID:-openrouter/auto}" +MODEL_ID=$(get_model_id_interactive "openrouter/auto" "Openclaw") || exit 1 # 8. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." - -ENV_TEMP=$(mktemp) -cat > "$ENV_TEMP" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export ANTHROPIC_API_KEY="${OPENROUTER_API_KEY}" -export ANTHROPIC_BASE_URL="https://openrouter.ai/api" -EOF - -upload_file "$LIGHTSAIL_SERVER_IP" "$ENV_TEMP" "/tmp/env_config" -run_server "$LIGHTSAIL_SERVER_IP" "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" -rm "$ENV_TEMP" +inject_env_vars_ssh "$LIGHTSAIL_SERVER_IP" upload_file run_server \ + "OPENROUTER_API_KEY=$OPENROUTER_API_KEY" \ + "ANTHROPIC_API_KEY=$OPENROUTER_API_KEY" \ + "ANTHROPIC_BASE_URL=https://openrouter.ai/api" # 9. Configure openclaw -log_warn "Configuring openclaw..." - -run_server "$LIGHTSAIL_SERVER_IP" "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" - -# Generate a random gateway token -GATEWAY_TOKEN=$(openssl rand -hex 16) - -OPENCLAW_CONFIG_TEMP=$(mktemp) -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { - "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" - }, - "gateway": { - "mode": "local", - "auth": { - "token": "${GATEWAY_TOKEN}" - } - }, - "agents": { - "defaults": { - "model": { - "primary": "openrouter/${MODEL_ID}" - } - } - } -} -EOF - -upload_file "$LIGHTSAIL_SERVER_IP" "$OPENCLAW_CONFIG_TEMP" "/home/ubuntu/.openclaw/openclaw.json" -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + "upload_file $LIGHTSAIL_SERVER_IP" \ + "run_server $LIGHTSAIL_SERVER_IP" echo "" log_info "Lightsail instance setup completed successfully!" diff --git a/digitalocean/openclaw.sh b/digitalocean/openclaw.sh index e4584793..c5206900 100755 --- a/digitalocean/openclaw.sh +++ b/digitalocean/openclaw.sh @@ -50,37 +50,9 @@ inject_env_vars_ssh "$DO_SERVER_IP" upload_file run_server \ "ANTHROPIC_BASE_URL=https://openrouter.ai/api" # 9. Configure openclaw -log_warn "Configuring openclaw..." - -run_server "$DO_SERVER_IP" "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" - -GATEWAY_TOKEN=$(openssl rand -hex 16) - -OPENCLAW_CONFIG_TEMP=$(mktemp) -chmod 600 "$OPENCLAW_CONFIG_TEMP" -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { - "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" - }, - "gateway": { - "mode": "local", - "auth": { - "token": "${GATEWAY_TOKEN}" - } - }, - "agents": { - "defaults": { - "model": { - "primary": "openrouter/${MODEL_ID}" - } - } - } -} -EOF - -upload_file "$DO_SERVER_IP" "$OPENCLAW_CONFIG_TEMP" "/root/.openclaw/openclaw.json" -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + "upload_file $DO_SERVER_IP" \ + "run_server $DO_SERVER_IP" echo "" log_info "DigitalOcean droplet setup completed successfully!" diff --git a/e2b/openclaw.sh b/e2b/openclaw.sh index 86f3a145..4ca9a149 100755 --- a/e2b/openclaw.sh +++ b/e2b/openclaw.sh @@ -38,11 +38,7 @@ else fi # 6. Get model preference -echo "" -log_warn "Browse models at: https://openrouter.ai/models" -log_warn "Which model would you like to use?" -MODEL_ID=$(safe_read "Enter model ID [openrouter/auto]: ") || MODEL_ID="" -MODEL_ID="${MODEL_ID:-openrouter/auto}" +MODEL_ID=$(get_model_id_interactive "openrouter/auto" "Openclaw") || exit 1 # 7. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." @@ -61,37 +57,9 @@ run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" rm "$ENV_TEMP" # 8. Configure openclaw -log_warn "Configuring openclaw..." - -run_server "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" - -# Generate a random gateway token -GATEWAY_TOKEN=$(openssl rand -hex 16) - -OPENCLAW_CONFIG_TEMP=$(mktemp) -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { - "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" - }, - "gateway": { - "mode": "local", - "auth": { - "token": "${GATEWAY_TOKEN}" - } - }, - "agents": { - "defaults": { - "model": { - "primary": "openrouter/${MODEL_ID}" - } - } - } -} -EOF - -upload_file "$OPENCLAW_CONFIG_TEMP" ~/.openclaw/openclaw.json -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + upload_file \ + run_server echo "" log_info "E2B sandbox setup completed successfully!" diff --git a/gcp/openclaw.sh b/gcp/openclaw.sh index 52ee5a48..d70738df 100755 --- a/gcp/openclaw.sh +++ b/gcp/openclaw.sh @@ -41,60 +41,19 @@ else fi # 7. Get model preference -echo "" -log_warn "Browse models at: https://openrouter.ai/models" -log_warn "Which model would you like to use?" -MODEL_ID=$(safe_read "Enter model ID [openrouter/auto]: ") || MODEL_ID="" -MODEL_ID="${MODEL_ID:-openrouter/auto}" +MODEL_ID=$(get_model_id_interactive "openrouter/auto" "Openclaw") || exit 1 # 8. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." - -ENV_TEMP=$(mktemp) -cat > "$ENV_TEMP" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export ANTHROPIC_API_KEY="${OPENROUTER_API_KEY}" -export ANTHROPIC_BASE_URL="https://openrouter.ai/api" -EOF - -upload_file "$GCP_SERVER_IP" "$ENV_TEMP" "/tmp/env_config" -run_server "$GCP_SERVER_IP" "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" -rm "$ENV_TEMP" +inject_env_vars_ssh "$GCP_SERVER_IP" upload_file run_server \ + "OPENROUTER_API_KEY=$OPENROUTER_API_KEY" \ + "ANTHROPIC_API_KEY=$OPENROUTER_API_KEY" \ + "ANTHROPIC_BASE_URL=https://openrouter.ai/api" # 9. Configure openclaw -log_warn "Configuring openclaw..." - -run_server "$GCP_SERVER_IP" "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" - -# Generate a random gateway token -GATEWAY_TOKEN=$(openssl rand -hex 16) - -OPENCLAW_CONFIG_TEMP=$(mktemp) -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { - "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" - }, - "gateway": { - "mode": "local", - "auth": { - "token": "${GATEWAY_TOKEN}" - } - }, - "agents": { - "defaults": { - "model": { - "primary": "openrouter/${MODEL_ID}" - } - } - } -} -EOF - -upload_file "$GCP_SERVER_IP" "$OPENCLAW_CONFIG_TEMP" "$HOME/.openclaw/openclaw.json" -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + "upload_file $GCP_SERVER_IP" \ + "run_server $GCP_SERVER_IP" echo "" log_info "GCP instance setup completed successfully!" diff --git a/hetzner/openclaw.sh b/hetzner/openclaw.sh index 732efa0b..0774bd5a 100755 --- a/hetzner/openclaw.sh +++ b/hetzner/openclaw.sh @@ -50,38 +50,9 @@ inject_env_vars_ssh "$HETZNER_SERVER_IP" upload_file run_server \ "ANTHROPIC_BASE_URL=https://openrouter.ai/api" # 9. Configure openclaw -log_warn "Configuring openclaw..." - -run_server "$HETZNER_SERVER_IP" "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" - -# Generate a random gateway token -GATEWAY_TOKEN=$(openssl rand -hex 16) - -OPENCLAW_CONFIG_TEMP=$(mktemp) -chmod 600 "$OPENCLAW_CONFIG_TEMP" -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { - "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" - }, - "gateway": { - "mode": "local", - "auth": { - "token": "${GATEWAY_TOKEN}" - } - }, - "agents": { - "defaults": { - "model": { - "primary": "openrouter/${MODEL_ID}" - } - } - } -} -EOF - -upload_file "$HETZNER_SERVER_IP" "$OPENCLAW_CONFIG_TEMP" "/root/.openclaw/openclaw.json" -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + "upload_file $HETZNER_SERVER_IP" \ + "run_server $HETZNER_SERVER_IP" echo "" log_info "Hetzner server setup completed successfully!" diff --git a/lambda/openclaw.sh b/lambda/openclaw.sh index 154346da..7bc0f568 100755 --- a/lambda/openclaw.sh +++ b/lambda/openclaw.sh @@ -41,60 +41,19 @@ else fi # 7. Get model preference -echo "" -log_warn "Browse models at: https://openrouter.ai/models" -log_warn "Which model would you like to use?" -MODEL_ID=$(safe_read "Enter model ID [openrouter/auto]: ") || MODEL_ID="" -MODEL_ID="${MODEL_ID:-openrouter/auto}" +MODEL_ID=$(get_model_id_interactive "openrouter/auto" "Openclaw") || exit 1 # 8. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." - -ENV_TEMP=$(mktemp) -cat > "$ENV_TEMP" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export ANTHROPIC_API_KEY="${OPENROUTER_API_KEY}" -export ANTHROPIC_BASE_URL="https://openrouter.ai/api" -EOF - -upload_file "$LAMBDA_SERVER_IP" "$ENV_TEMP" "/tmp/env_config" -run_server "$LAMBDA_SERVER_IP" "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" -rm "$ENV_TEMP" +inject_env_vars_ssh "$LAMBDA_SERVER_IP" upload_file run_server \ + "OPENROUTER_API_KEY=$OPENROUTER_API_KEY" \ + "ANTHROPIC_API_KEY=$OPENROUTER_API_KEY" \ + "ANTHROPIC_BASE_URL=https://openrouter.ai/api" # 9. Configure openclaw -log_warn "Configuring openclaw..." - -run_server "$LAMBDA_SERVER_IP" "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" - -# Generate a random gateway token -GATEWAY_TOKEN=$(openssl rand -hex 16) - -OPENCLAW_CONFIG_TEMP=$(mktemp) -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { - "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" - }, - "gateway": { - "mode": "local", - "auth": { - "token": "${GATEWAY_TOKEN}" - } - }, - "agents": { - "defaults": { - "model": { - "primary": "openrouter/${MODEL_ID}" - } - } - } -} -EOF - -upload_file "$LAMBDA_SERVER_IP" "$OPENCLAW_CONFIG_TEMP" "/home/ubuntu/.openclaw/openclaw.json" -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + "upload_file $LAMBDA_SERVER_IP" \ + "run_server $LAMBDA_SERVER_IP" echo "" log_info "Lambda Cloud instance setup completed successfully!" diff --git a/linode/openclaw.sh b/linode/openclaw.sh index 1b93442c..1544285c 100755 --- a/linode/openclaw.sh +++ b/linode/openclaw.sh @@ -24,20 +24,9 @@ inject_env_vars_ssh "$LINODE_SERVER_IP" upload_file run_server \ "OPENROUTER_API_KEY=$OPENROUTER_API_KEY" \ "ANTHROPIC_API_KEY=$OPENROUTER_API_KEY" \ "ANTHROPIC_BASE_URL=https://openrouter.ai/api" -log_warn "Configuring openclaw..." -run_server "$LINODE_SERVER_IP" "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" -GATEWAY_TOKEN=$(openssl rand -hex 16) -OPENCLAW_CONFIG_TEMP=$(mktemp) -chmod 600 "$OPENCLAW_CONFIG_TEMP" -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" }, - "gateway": { "mode": "local", "auth": { "token": "${GATEWAY_TOKEN}" } }, - "agents": { "defaults": { "model": { "primary": "openrouter/${MODEL_ID}" } } } -} -EOF -upload_file "$LINODE_SERVER_IP" "$OPENCLAW_CONFIG_TEMP" "/root/.openclaw/openclaw.json" -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + "upload_file $LINODE_SERVER_IP" \ + "run_server $LINODE_SERVER_IP" echo "" log_info "Linode setup completed successfully!" log_info "Server: $SERVER_NAME (ID: $LINODE_SERVER_ID, IP: $LINODE_SERVER_IP)" diff --git a/modal/openclaw.sh b/modal/openclaw.sh index bbf516b0..03400196 100755 --- a/modal/openclaw.sh +++ b/modal/openclaw.sh @@ -44,11 +44,7 @@ else fi # 6. Get model preference -echo "" -log_warn "Browse models at: https://openrouter.ai/models" -log_warn "Which model would you like to use?" -MODEL_ID=$(safe_read "Enter model ID [openrouter/auto]: ") || MODEL_ID="" -MODEL_ID="${MODEL_ID:-openrouter/auto}" +MODEL_ID=$(get_model_id_interactive "openrouter/auto" "Openclaw") || exit 1 # 7. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." @@ -67,37 +63,9 @@ run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" rm "$ENV_TEMP" # 8. Configure openclaw -log_warn "Configuring openclaw..." - -run_server "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" - -# Generate a random gateway token -GATEWAY_TOKEN=$(openssl rand -hex 16) - -OPENCLAW_CONFIG_TEMP=$(mktemp) -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { - "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" - }, - "gateway": { - "mode": "local", - "auth": { - "token": "${GATEWAY_TOKEN}" - } - }, - "agents": { - "defaults": { - "model": { - "primary": "openrouter/${MODEL_ID}" - } - } - } -} -EOF - -upload_file "$OPENCLAW_CONFIG_TEMP" ~/.openclaw/openclaw.json -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + upload_file \ + run_server echo "" log_info "Modal sandbox setup completed successfully!" diff --git a/shared/common.sh b/shared/common.sh index f6185f43..e4c0c085 100644 --- a/shared/common.sh +++ b/shared/common.sh @@ -1055,6 +1055,74 @@ EOF ${run_callback} "touch ~/.claude/CLAUDE.md" } +# ============================================================ +# OpenClaw configuration setup +# ============================================================ + +# Setup OpenClaw configuration files (openclaw.json) +# This consolidates the config setup pattern used by all openclaw.sh scripts +# Usage: setup_openclaw_config OPENROUTER_KEY MODEL_ID UPLOAD_CALLBACK RUN_CALLBACK +# +# Arguments: +# OPENROUTER_KEY - OpenRouter API key to inject into config +# MODEL_ID - Model ID to use (e.g., "openrouter/auto", "anthropic/claude-3.5-sonnet") +# UPLOAD_CALLBACK - Function to upload files: func(local_path, remote_path) +# RUN_CALLBACK - Function to run commands: func(command) +# +# Example (SSH-based clouds): +# setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ +# "upload_file $SERVER_IP" \ +# "run_server $SERVER_IP" +# +# Example (Sprite): +# setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ +# "upload_file_sprite $SPRITE_NAME" \ +# "run_sprite $SPRITE_NAME" +setup_openclaw_config() { + local openrouter_key="${1}" + local model_id="${2}" + local upload_callback="${3}" + local run_callback="${4}" + + log_warn "Configuring openclaw..." + + # Create ~/.openclaw directory + ${run_callback} "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" + + # Generate a random gateway token + local gateway_token + gateway_token=$(openssl rand -hex 16) + + # Create openclaw.json config + local config_temp + config_temp=$(mktemp) + chmod 600 "${config_temp}" + track_temp_file "${config_temp}" + + cat > "${config_temp}" << EOF +{ + "env": { + "OPENROUTER_API_KEY": "${openrouter_key}" + }, + "gateway": { + "mode": "local", + "auth": { + "token": "${gateway_token}" + } + }, + "agents": { + "defaults": { + "model": { + "primary": "openrouter/${model_id}" + } + } + } +} +EOF + + ${upload_callback} "${config_temp}" "/root/.openclaw/openclaw.json" +} + # ============================================================ # SSH key registration helpers # ============================================================ diff --git a/sprite/openclaw.sh b/sprite/openclaw.sh index a4eb3d1c..3be3131f 100755 --- a/sprite/openclaw.sh +++ b/sprite/openclaw.sh @@ -42,41 +42,9 @@ inject_env_vars_sprite "$SPRITE_NAME" \ "ANTHROPIC_BASE_URL=https://openrouter.ai/api" # Setup openclaw to bypass initial settings -log_warn "Configuring openclaw..." - -# Remove old config and create fresh -run_sprite "$SPRITE_NAME" "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" - -# Generate a random gateway token -GATEWAY_TOKEN=$(openssl rand -hex 16) - -# Create config file locally first, then upload -OPENCLAW_CONFIG_TEMP=$(mktemp) -chmod 600 "$OPENCLAW_CONFIG_TEMP" -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { - "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" - }, - "gateway": { - "mode": "local", - "auth": { - "token": "${GATEWAY_TOKEN}" - } - }, - "agents": { - "defaults": { - "model": { - "primary": "openrouter/${MODEL_ID}" - } - } - } -} -EOF - -# Upload config file securely -sprite exec -s "$SPRITE_NAME" -file "$OPENCLAW_CONFIG_TEMP:/tmp/openclaw_config.json" -- bash -c "mv /tmp/openclaw_config.json ~/.openclaw/openclaw.json" -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + "upload_file_sprite $SPRITE_NAME" \ + "run_sprite $SPRITE_NAME" echo "" log_info "✅ Sprite setup completed successfully!" diff --git a/vultr/openclaw.sh b/vultr/openclaw.sh index e5d977c8..81f84f1b 100755 --- a/vultr/openclaw.sh +++ b/vultr/openclaw.sh @@ -39,21 +39,9 @@ inject_env_vars_ssh "$VULTR_SERVER_IP" upload_file run_server \ "ANTHROPIC_API_KEY=$OPENROUTER_API_KEY" \ "ANTHROPIC_BASE_URL=https://openrouter.ai/api" -log_warn "Configuring openclaw..." -run_server "$VULTR_SERVER_IP" "rm -rf ~/.openclaw && mkdir -p ~/.openclaw" -GATEWAY_TOKEN=$(openssl rand -hex 16) - -OPENCLAW_CONFIG_TEMP=$(mktemp) -chmod 600 "$OPENCLAW_CONFIG_TEMP" -cat > "$OPENCLAW_CONFIG_TEMP" << EOF -{ - "env": { "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" }, - "gateway": { "mode": "local", "auth": { "token": "${GATEWAY_TOKEN}" } }, - "agents": { "defaults": { "model": { "primary": "openrouter/${MODEL_ID}" } } } -} -EOF -upload_file "$VULTR_SERVER_IP" "$OPENCLAW_CONFIG_TEMP" "/root/.openclaw/openclaw.json" -rm "$OPENCLAW_CONFIG_TEMP" +setup_openclaw_config "$OPENROUTER_API_KEY" "$MODEL_ID" \ + "upload_file $VULTR_SERVER_IP" \ + "run_server $VULTR_SERVER_IP" echo "" log_info "Vultr instance setup completed successfully!"