spawn/hyperstack/nanoclaw.sh
A 7d2a2543da
feat: Add hyperstack/nanoclaw script (#184)
Agent: gap-filler-nanoclaw

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 08:03:09 -08:00

75 lines
2.3 KiB
Bash

#!/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=hyperstack/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/hyperstack/lib/common.sh)"
fi
log_info "NanoClaw on Hyperstack"
echo ""
# 1. Resolve Hyperstack API key
ensure_hyperstack_api_key
# 2. Generate + register SSH key
ensure_ssh_key
# 3. Get VM name and environment
VM_NAME=$(get_vm_name)
ENVIRONMENT=$(get_environment_name)
# 4. Create VM
create_vm "${VM_NAME}" "${ENVIRONMENT}"
# 5. Wait for SSH connectivity
verify_server_connectivity "${HYPERSTACK_VM_IP}"
# 6. Install Node.js deps and clone nanoclaw
log_warn "Installing tsx..."
run_server "${HYPERSTACK_VM_IP}" "source ~/.bashrc && bun install -g tsx"
log_warn "Cloning and building nanoclaw..."
run_server "${HYPERSTACK_VM_IP}" "git clone https://github.com/gavrielc/nanoclaw.git ~/nanoclaw && cd ~/nanoclaw && npm install && npm run build"
log_info "NanoClaw installed"
# 7. 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
log_warn "Setting up environment variables..."
inject_env_vars_ssh "${HYPERSTACK_VM_IP}" upload_file run_server \
"OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \
"ANTHROPIC_API_KEY=${OPENROUTER_API_KEY}" \
"ANTHROPIC_BASE_URL=https://openrouter.ai/api"
# 8. Create nanoclaw .env file
log_warn "Configuring nanoclaw..."
DOTENV_TEMP=$(mktemp)
trap 'rm -f "${DOTENV_TEMP}"' EXIT
chmod 600 "${DOTENV_TEMP}"
cat > "${DOTENV_TEMP}" << EOF
ANTHROPIC_API_KEY=${OPENROUTER_API_KEY}
EOF
upload_file "${HYPERSTACK_VM_IP}" "${DOTENV_TEMP}" "/root/nanoclaw/.env"
echo ""
log_info "Hyperstack VM setup completed successfully!"
log_info "VM: ${VM_NAME} (ID: ${HYPERSTACK_VM_ID}, IP: ${HYPERSTACK_VM_IP})"
echo ""
# 9. Start nanoclaw
log_warn "Starting nanoclaw..."
log_warn "You will need to scan a WhatsApp QR code to authenticate."
echo ""
interactive_session "${HYPERSTACK_VM_IP}" "cd ~/nanoclaw && source ~/.zshrc && npm run dev"