diff --git a/modal/aider.sh b/modal/aider.sh index f2883ed6..19c65fb2 100755 --- a/modal/aider.sh +++ b/modal/aider.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -52,17 +53,8 @@ MODEL_ID="${MODEL_ID:-openrouter/auto}" # 7. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." - -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -cat > "${ENV_TEMP}" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -EOF - -upload_file "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" echo "" log_info "Modal sandbox setup completed successfully!" diff --git a/modal/amazonq.sh b/modal/amazonq.sh index 26822d49..c0db12da 100755 --- a/modal/amazonq.sh +++ b/modal/amazonq.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -45,19 +46,10 @@ fi # 6. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." - -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -cat > "${ENV_TEMP}" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_BASE_URL="https://openrouter.ai/api/v1" -EOF - -upload_file "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_BASE_URL=https://openrouter.ai/api/v1" echo "" log_info "Modal sandbox setup completed successfully!" diff --git a/modal/claude.sh b/modal/claude.sh index 907215fe..c1943337 100755 --- a/modal/claude.sh +++ b/modal/claude.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -48,22 +49,13 @@ fi # 6. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." - -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -cat > "${ENV_TEMP}" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export ANTHROPIC_BASE_URL="https://openrouter.ai/api" -export ANTHROPIC_AUTH_TOKEN="${OPENROUTER_API_KEY}" -export ANTHROPIC_API_KEY="" -export CLAUDE_CODE_SKIP_ONBOARDING="1" -export CLAUDE_CODE_ENABLE_TELEMETRY="0" -EOF - -upload_file "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "ANTHROPIC_BASE_URL=https://openrouter.ai/api" \ + "ANTHROPIC_AUTH_TOKEN=${OPENROUTER_API_KEY}" \ + "ANTHROPIC_API_KEY=" \ + "CLAUDE_CODE_SKIP_ONBOARDING=1" \ + "CLAUDE_CODE_ENABLE_TELEMETRY=0" # 7. Configure Claude Code settings setup_claude_code_config "${OPENROUTER_API_KEY}" \ diff --git a/modal/cline.sh b/modal/cline.sh index 3314bcb4..9984a4ec 100755 --- a/modal/cline.sh +++ b/modal/cline.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -46,18 +47,10 @@ fi # 6. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -cat > "${ENV_TEMP}" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_BASE_URL="https://openrouter.ai/api/v1" -EOF - -upload_file "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_BASE_URL=https://openrouter.ai/api/v1" echo "" log_info "Modal sandbox setup completed successfully!" diff --git a/modal/codex.sh b/modal/codex.sh index 7e2d7c53..0b4f0ec1 100755 --- a/modal/codex.sh +++ b/modal/codex.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -46,18 +47,10 @@ fi # 6. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -cat > "${ENV_TEMP}" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_BASE_URL="https://openrouter.ai/api/v1" -EOF - -upload_file "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_BASE_URL=https://openrouter.ai/api/v1" echo "" log_info "Modal sandbox setup completed successfully!" diff --git a/modal/gemini.sh b/modal/gemini.sh index a5a7e471..0b770c5d 100755 --- a/modal/gemini.sh +++ b/modal/gemini.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -46,19 +47,11 @@ fi # 6. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -cat > "${ENV_TEMP}" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export GEMINI_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_BASE_URL="https://openrouter.ai/api/v1" -EOF - -upload_file "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "GEMINI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_BASE_URL=https://openrouter.ai/api/v1" echo "" log_info "Modal sandbox setup completed successfully!" diff --git a/modal/goose.sh b/modal/goose.sh index 242f042b..d4428f1d 100755 --- a/modal/goose.sh +++ b/modal/goose.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -46,17 +47,9 @@ fi # 6. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -cat > "${ENV_TEMP}" << EOF - -# [spawn:env] -export GOOSE_PROVIDER=openrouter -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -EOF - -upload_file "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "GOOSE_PROVIDER=openrouter" \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" echo "" log_info "Modal sandbox setup completed successfully!" diff --git a/modal/interpreter.sh b/modal/interpreter.sh index b203626e..8f358b25 100755 --- a/modal/interpreter.sh +++ b/modal/interpreter.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -46,18 +47,10 @@ fi # 6. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -cat > "${ENV_TEMP}" << EOF - -# [spawn:env] -export OPENROUTER_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_API_KEY="${OPENROUTER_API_KEY}" -export OPENAI_BASE_URL="https://openrouter.ai/api/v1" -EOF - -upload_file "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_BASE_URL=https://openrouter.ai/api/v1" echo "" log_info "Modal sandbox setup completed successfully!" diff --git a/modal/nanoclaw.sh b/modal/nanoclaw.sh index b2c64366..58960117 100755 --- a/modal/nanoclaw.sh +++ b/modal/nanoclaw.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -49,23 +50,16 @@ fi # 6. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}" "${DOTENV_TEMP}"' EXIT -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 "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "ANTHROPIC_API_KEY=${OPENROUTER_API_KEY}" \ + "ANTHROPIC_BASE_URL=https://openrouter.ai/api" # 7. Create nanoclaw .env file log_warn "Configuring nanoclaw..." DOTENV_TEMP=$(mktemp) +trap 'rm -f "${DOTENV_TEMP}"' EXIT cat > "${DOTENV_TEMP}" << EOF ANTHROPIC_API_KEY=${OPENROUTER_API_KEY} EOF diff --git a/modal/openclaw.sh b/modal/openclaw.sh index 6651bce1..a5f70706 100755 --- a/modal/openclaw.sh +++ b/modal/openclaw.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 set -eo pipefail # Source common functions - try local file first, fall back to remote @@ -49,18 +50,10 @@ MODEL_ID=$(get_model_id_interactive "openrouter/auto" "Openclaw") || exit 1 # 7. Inject environment variables into ~/.zshrc log_warn "Setting up environment variables..." -ENV_TEMP=$(mktemp) -trap 'rm -f "${ENV_TEMP}"' EXIT -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 "${ENV_TEMP}" "/tmp/env_config" -run_server "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "ANTHROPIC_API_KEY=${OPENROUTER_API_KEY}" \ + "ANTHROPIC_BASE_URL=https://openrouter.ai/api" # 8. Configure openclaw setup_openclaw_config "${OPENROUTER_API_KEY}" "${MODEL_ID}" \ diff --git a/shared/common.sh b/shared/common.sh index 7caa1a81..07e8a4bf 100644 --- a/shared/common.sh +++ b/shared/common.sh @@ -1,4 +1,5 @@ #!/bin/bash +# shellcheck disable=SC2154 # Shared bash functions used across all spawn scripts # Provider-agnostic utilities for logging, input, OAuth, etc. # @@ -629,6 +630,31 @@ inject_env_vars_ssh() { # Note: temp file will be cleaned up by trap handler } +# Inject environment variables for providers without SSH (modal, e2b, sprite) +# For providers where upload_file and run_server don't take server_ip as first arg +# Usage: inject_env_vars_local upload_file run_server KEY1=VAL1 KEY2=VAL2 ... +# Example: inject_env_vars_local upload_file run_server \ +# "OPENROUTER_API_KEY=$OPENROUTER_API_KEY" \ +# "ANTHROPIC_BASE_URL=https://openrouter.ai/api" +inject_env_vars_local() { + local upload_func="${1}" + local run_func="${2}" + shift 2 + + local env_temp + env_temp=$(mktemp) + chmod 600 "${env_temp}" + track_temp_file "${env_temp}" + + generate_env_config "$@" > "${env_temp}" + + # Upload and append to .zshrc + "${upload_func}" "${env_temp}" "/tmp/env_config" + "${run_func}" "cat /tmp/env_config >> ~/.zshrc && rm /tmp/env_config" + + # Note: temp file will be cleaned up by trap handler +} + # ============================================================ # Resource cleanup trap handlers # ============================================================