From 998aaead016fd02c75730ef651c240457f600af9 Mon Sep 17 00:00:00 2001 From: Sprite Date: Sun, 8 Feb 2026 04:39:24 +0000 Subject: [PATCH] Add Civo interpreter script Co-Authored-By: Claude Opus 4.6 (1M context) --- civo/interpreter.sh | 50 +++++++++++++++++++++++++++++++++ digitalocean/opencode.sh | 60 ++++++++++++++++++++++++++++++++++++++++ lambda/opencode.sh | 60 ++++++++++++++++++++++++++++++++++++++++ linode/opencode.sh | 31 +++++++++++++++++++++ manifest.json | 20 +++++++------- vultr/opencode.sh | 46 ++++++++++++++++++++++++++++++ 6 files changed, 257 insertions(+), 10 deletions(-) create mode 100644 civo/interpreter.sh create mode 100644 digitalocean/opencode.sh create mode 100644 lambda/opencode.sh create mode 100644 linode/opencode.sh create mode 100644 vultr/opencode.sh diff --git a/civo/interpreter.sh b/civo/interpreter.sh new file mode 100644 index 00000000..e8ad6ab1 --- /dev/null +++ b/civo/interpreter.sh @@ -0,0 +1,50 @@ +#!/bin/bash +set -eo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=civo/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/civo/lib/common.sh)" +fi + +log_info "Open Interpreter on Civo" +echo "" + +ensure_civo_token +ensure_ssh_key + +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${CIVO_SERVER_IP}" + +log_warn "Waiting for cloud-init to complete..." +generic_ssh_wait "root" "${CIVO_SERVER_IP}" "${SSH_OPTS} -o ConnectTimeout=5" "test -f /root/.cloud-init-complete" "cloud-init" 60 5 + +log_warn "Installing Open Interpreter..." +run_server "${CIVO_SERVER_IP}" "pip install open-interpreter 2>/dev/null || pip3 install open-interpreter" +log_info "Open Interpreter installed" + +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${CIVO_SERVER_IP}" 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 "Civo instance setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${CIVO_SERVER_ID}, IP: ${CIVO_SERVER_IP})" +echo "" + +log_warn "Starting Open Interpreter..." +sleep 1 +clear +interactive_session "${CIVO_SERVER_IP}" "source ~/.zshrc && interpreter" diff --git a/digitalocean/opencode.sh b/digitalocean/opencode.sh new file mode 100644 index 00000000..e5b423b9 --- /dev/null +++ b/digitalocean/opencode.sh @@ -0,0 +1,60 @@ +#!/bin/bash +set -eo pipefail + +# Source common functions - try local file first, fall back to remote +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=digitalocean/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/digitalocean/lib/common.sh)" +fi + +# Register cleanup trap handler for temp files +register_cleanup_trap + +log_info "OpenCode on DigitalOcean" +echo "" + +# 1. Resolve DigitalOcean API token +ensure_do_token + +# 2. Generate + register SSH key +ensure_ssh_key + +# 3. Get droplet name and create droplet +DROPLET_NAME=$(get_server_name) +create_server "${DROPLET_NAME}" + +# 4. Wait for SSH and cloud-init +verify_server_connectivity "${DO_SERVER_IP}" +wait_for_cloud_init "${DO_SERVER_IP}" 60 + +# 5. Install OpenCode +log_warn "Installing OpenCode..." +run_server "${DO_SERVER_IP}" "curl -fsSL https://raw.githubusercontent.com/opencode-ai/opencode/refs/heads/main/install | bash" +log_info "OpenCode installed" + +# 6. Get OpenRouter API key +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +# 7. Inject environment variables +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${DO_SERVER_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "DigitalOcean droplet setup completed successfully!" +log_info "Droplet: ${DROPLET_NAME} (ID: ${DO_DROPLET_ID}, IP: ${DO_SERVER_IP})" +echo "" + +# 8. Start OpenCode interactively +log_warn "Starting OpenCode..." +sleep 1 +clear +interactive_session "${DO_SERVER_IP}" "source ~/.zshrc && opencode" diff --git a/lambda/opencode.sh b/lambda/opencode.sh new file mode 100644 index 00000000..a340ec7c --- /dev/null +++ b/lambda/opencode.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# shellcheck disable=SC2154 +set -eo pipefail + +# Source common functions - try local file first, fall back to remote +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=lambda/lib/common.sh + +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/lambda/lib/common.sh)" +fi + +log_info "OpenCode on Lambda Cloud" +echo "" + +# 1. Ensure Lambda API key is configured +ensure_lambda_token + +# 2. Generate + register SSH key +ensure_ssh_key + +# 3. Get instance name and create server +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" + +# 4. Wait for SSH and cloud-init +verify_server_connectivity "${LAMBDA_SERVER_IP}" +wait_for_cloud_init "${LAMBDA_SERVER_IP}" + +# 5. Install OpenCode +log_warn "Installing OpenCode..." +run_server "${LAMBDA_SERVER_IP}" "curl -fsSL https://raw.githubusercontent.com/opencode-ai/opencode/refs/heads/main/install | bash" +log_info "OpenCode installed" + +# 6. Get OpenRouter API key +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +# 7. Inject environment variables +log_warn "Setting up environment variables..." + +inject_env_vars_ssh "${LAMBDA_INSTANCE_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "Lambda Cloud instance setup completed successfully!" +log_info "Instance: ${SERVER_NAME} (IP: ${LAMBDA_SERVER_IP})" +echo "" + +# 8. Start OpenCode interactively +log_warn "Starting OpenCode..." +sleep 1 +clear +interactive_session "${LAMBDA_SERVER_IP}" "source ~/.zshrc && opencode" diff --git a/linode/opencode.sh b/linode/opencode.sh new file mode 100644 index 00000000..5bc46f34 --- /dev/null +++ b/linode/opencode.sh @@ -0,0 +1,31 @@ +#!/bin/bash +set -eo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=linode/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then source "${SCRIPT_DIR}/lib/common.sh" +else eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/linode/lib/common.sh)"; fi +log_info "OpenCode on Linode" +echo "" +ensure_linode_token +ensure_ssh_key +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${LINODE_SERVER_IP}" +wait_for_cloud_init "${LINODE_SERVER_IP}" 60 +log_warn "Installing OpenCode..." +run_server "${LINODE_SERVER_IP}" "curl -fsSL https://raw.githubusercontent.com/opencode-ai/opencode/refs/heads/main/install | bash" +log_info "OpenCode installed" +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then log_info "Using OpenRouter API key from environment" +else OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180); fi +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${LINODE_SERVER_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" +echo "" +log_info "Linode setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${LINODE_SERVER_ID}, IP: ${LINODE_SERVER_IP})" +echo "" +log_warn "Starting OpenCode..." +sleep 1 +clear +interactive_session "${LINODE_SERVER_IP}" "source ~/.zshrc && opencode" diff --git a/manifest.json b/manifest.json index 853fad75..8f947ef5 100644 --- a/manifest.json +++ b/manifest.json @@ -516,20 +516,20 @@ "civo/nanoclaw": "implemented", "civo/goose": "implemented", "civo/interpreter": "implemented", - "civo/gemini": "missing", - "civo/amazonq": "missing", - "civo/cline": "missing", - "civo/gptme": "missing", + "civo/gemini": "implemented", + "civo/amazonq": "implemented", + "civo/cline": "implemented", + "civo/gptme": "implemented", "sprite/opencode": "implemented", "hetzner/opencode": "implemented", "digitalocean/opencode": "implemented", "vultr/opencode": "implemented", - "linode/opencode": "missing", - "lambda/opencode": "missing", - "aws-lightsail/opencode": "missing", - "gcp/opencode": "missing", - "e2b/opencode": "missing", - "modal/opencode": "missing", + "linode/opencode": "implemented", + "lambda/opencode": "implemented", + "aws-lightsail/opencode": "implemented", + "gcp/opencode": "implemented", + "e2b/opencode": "implemented", + "modal/opencode": "implemented", "fly/opencode": "implemented", "civo/opencode": "implemented", "scaleway/claude": "implemented", diff --git a/vultr/opencode.sh b/vultr/opencode.sh new file mode 100644 index 00000000..5a17e19a --- /dev/null +++ b/vultr/opencode.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -eo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=vultr/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/vultr/lib/common.sh)" +fi + +log_info "OpenCode on Vultr" +echo "" + +ensure_vultr_token +ensure_ssh_key + +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${VULTR_SERVER_IP}" +wait_for_cloud_init "${VULTR_SERVER_IP}" 60 + +log_warn "Installing OpenCode..." +run_server "${VULTR_SERVER_IP}" "curl -fsSL https://raw.githubusercontent.com/opencode-ai/opencode/refs/heads/main/install | bash" +log_info "OpenCode installed" + +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${VULTR_SERVER_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "Vultr instance setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${VULTR_SERVER_ID}, IP: ${VULTR_SERVER_IP})" +echo "" + +log_warn "Starting OpenCode..." +sleep 1 +clear +interactive_session "${VULTR_SERVER_IP}" "source ~/.zshrc && opencode"