From 086bc76c8d8821359976ae7541fffa67adc5ce63 Mon Sep 17 00:00:00 2001 From: A <258483684+la14-1@users.noreply.github.com> Date: Mon, 9 Feb 2026 19:45:51 -0800 Subject: [PATCH] feat: Add kilocode scripts for e2b, modal, fly, civo, scaleway, daytona (#113) Agent: gap-filler Co-authored-by: B <6723574+louisgv@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) --- civo/kilocode.sh | 50 ++++++++++++++++++++++++++++++++++ daytona/kilocode.sh | 58 +++++++++++++++++++++++++++++++++++++++ e2b/kilocode.sh | 58 +++++++++++++++++++++++++++++++++++++++ fly/kilocode.sh | 56 ++++++++++++++++++++++++++++++++++++++ manifest.json | 12 ++++----- modal/kilocode.sh | 64 ++++++++++++++++++++++++++++++++++++++++++++ scaleway/kilocode.sh | 49 +++++++++++++++++++++++++++++++++ 7 files changed, 341 insertions(+), 6 deletions(-) create mode 100644 civo/kilocode.sh create mode 100644 daytona/kilocode.sh create mode 100644 e2b/kilocode.sh create mode 100644 fly/kilocode.sh create mode 100644 modal/kilocode.sh create mode 100644 scaleway/kilocode.sh diff --git a/civo/kilocode.sh b/civo/kilocode.sh new file mode 100644 index 00000000..d19db1db --- /dev/null +++ b/civo/kilocode.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 "Kilo Code 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 Kilo Code..." +run_server "${CIVO_SERVER_IP}" "npm install -g @kilocode/cli" +log_info "Kilo Code 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}" \ + "KILO_PROVIDER_TYPE=openrouter" \ + "KILO_OPEN_ROUTER_API_KEY=${OPENROUTER_API_KEY}" + +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 Kilo Code..." +sleep 1 +clear +interactive_session "${CIVO_SERVER_IP}" "source ~/.zshrc && kilocode" diff --git a/daytona/kilocode.sh b/daytona/kilocode.sh new file mode 100644 index 00000000..aa54405c --- /dev/null +++ b/daytona/kilocode.sh @@ -0,0 +1,58 @@ +#!/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=daytona/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/daytona/lib/common.sh)" +fi + +log_info "Kilo Code on Daytona" +echo "" + +# 1. Ensure Daytona CLI and API token +ensure_daytona_cli +ensure_daytona_token + +# 2. Get sandbox name and create sandbox +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" + +# 3. Wait for base tools +wait_for_cloud_init + +# 4. Install Kilo Code +log_warn "Installing Kilo Code..." +run_server "npm install -g @kilocode/cli" +log_info "Kilo Code installed" + +# 5. 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 + +# 6. Inject environment variables into ~/.zshrc +log_warn "Setting up environment variables..." + +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "KILO_PROVIDER_TYPE=openrouter" \ + "KILO_OPEN_ROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "Daytona sandbox setup completed successfully!" +log_info "Sandbox: ${SERVER_NAME} (ID: ${DAYTONA_SANDBOX_ID})" +echo "" + +# 7. Start Kilo Code interactively +log_warn "Starting Kilo Code..." +sleep 1 +clear +interactive_session "source ~/.zshrc && kilocode" diff --git a/e2b/kilocode.sh b/e2b/kilocode.sh new file mode 100644 index 00000000..dff594a0 --- /dev/null +++ b/e2b/kilocode.sh @@ -0,0 +1,58 @@ +#!/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=e2b/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/e2b/lib/common.sh)" +fi + +log_info "Kilo Code on E2B" +echo "" + +# 1. Ensure E2B CLI and API token +ensure_e2b_cli +ensure_e2b_token + +# 2. Get sandbox name and create sandbox +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" + +# 3. Wait for base tools +wait_for_cloud_init + +# 4. Install Kilo Code +log_warn "Installing Kilo Code..." +run_server "npm install -g @kilocode/cli" +log_info "Kilo Code installed" + +# 5. 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 + +# 6. Inject environment variables into ~/.zshrc +log_warn "Setting up environment variables..." + +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "KILO_PROVIDER_TYPE=openrouter" \ + "KILO_OPEN_ROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "E2B sandbox setup completed successfully!" +log_info "Sandbox: ${SERVER_NAME} (ID: ${E2B_SANDBOX_ID})" +echo "" + +# 7. Start Kilo Code interactively +log_warn "Starting Kilo Code..." +sleep 1 +clear +interactive_session "source ~/.zshrc && kilocode" diff --git a/fly/kilocode.sh b/fly/kilocode.sh new file mode 100644 index 00000000..7d724634 --- /dev/null +++ b/fly/kilocode.sh @@ -0,0 +1,56 @@ +#!/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)" +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/fly/lib/common.sh)" +fi + +log_info "Kilo Code on Fly.io" +echo "" + +# 1. Ensure flyctl CLI and API token +ensure_fly_cli +ensure_fly_token + +# 2. Get app name and create machine +SERVER_NAME=$(get_server_name) +create_server "$SERVER_NAME" + +# 3. Install base tools +wait_for_cloud_init + +# 4. Install Kilo Code +log_warn "Installing Kilo Code..." +run_server "npm install -g @kilocode/cli" +log_info "Kilo Code installed" + +# 5. 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 + +# 6. Inject environment variables into ~/.bashrc and ~/.zshrc +log_warn "Setting up environment variables..." + +inject_env_vars_fly \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "KILO_PROVIDER_TYPE=openrouter" \ + "KILO_OPEN_ROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "Fly.io machine setup completed successfully!" +log_info "App: $SERVER_NAME (Machine ID: $FLY_MACHINE_ID)" +echo "" + +# 7. Start Kilo Code interactively +log_warn "Starting Kilo Code..." +sleep 1 +clear +interactive_session "source ~/.bashrc && kilocode" diff --git a/manifest.json b/manifest.json index e1698a37..20119a74 100644 --- a/manifest.json +++ b/manifest.json @@ -826,12 +826,12 @@ "lambda/kilocode": "missing", "aws-lightsail/kilocode": "missing", "gcp/kilocode": "missing", - "e2b/kilocode": "missing", - "modal/kilocode": "missing", - "fly/kilocode": "missing", - "civo/kilocode": "missing", - "scaleway/kilocode": "missing", - "daytona/kilocode": "missing", + "e2b/kilocode": "implemented", + "modal/kilocode": "implemented", + "fly/kilocode": "implemented", + "civo/kilocode": "implemented", + "scaleway/kilocode": "implemented", + "daytona/kilocode": "implemented", "runpod/kilocode": "missing", "upcloud/kilocode": "missing", "binarylane/kilocode": "missing", diff --git a/modal/kilocode.sh b/modal/kilocode.sh new file mode 100644 index 00000000..44272c4a --- /dev/null +++ b/modal/kilocode.sh @@ -0,0 +1,64 @@ +#!/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=modal/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/modal/lib/common.sh)" +fi + +log_info "Kilo Code on Modal" +echo "" + +# 1. Ensure Modal CLI +ensure_modal_cli + +# 2. Get sandbox name and create sandbox +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" || { + log_error "Failed to create Modal sandbox" + exit 1 +} +if [[ -z "${MODAL_SANDBOX_ID}" ]]; then + log_error "MODAL_SANDBOX_ID not set after create_server" + exit 1 +fi + +# 3. Wait for base tools +wait_for_cloud_init + +# 4. Install Kilo Code +log_warn "Installing Kilo Code..." +run_server "npm install -g @kilocode/cli" +log_info "Kilo Code installed" + +# 5. 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 + +# 6. Inject environment variables into ~/.zshrc +log_warn "Setting up environment variables..." + +inject_env_vars_local upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "KILO_PROVIDER_TYPE=openrouter" \ + "KILO_OPEN_ROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "Modal sandbox setup completed successfully!" +log_info "Sandbox: ${SERVER_NAME} (ID: ${MODAL_SANDBOX_ID})" +echo "" + +# 7. Start Kilo Code interactively +log_warn "Starting Kilo Code..." +sleep 1 +clear +interactive_session "source ~/.zshrc && kilocode" diff --git a/scaleway/kilocode.sh b/scaleway/kilocode.sh new file mode 100644 index 00000000..3c506ad1 --- /dev/null +++ b/scaleway/kilocode.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# shellcheck disable=SC2154 +set -eo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=scaleway/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/scaleway/lib/common.sh)" +fi + +log_info "Kilo Code on Scaleway" +echo "" + +ensure_scaleway_token +ensure_ssh_key + +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${SCALEWAY_SERVER_IP}" +install_base_packages "${SCALEWAY_SERVER_IP}" + +log_warn "Installing Kilo Code..." +run_server "${SCALEWAY_SERVER_IP}" "npm install -g @kilocode/cli" +log_info "Kilo Code 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 "${SCALEWAY_SERVER_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "KILO_PROVIDER_TYPE=openrouter" \ + "KILO_OPEN_ROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "Scaleway instance setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${SCALEWAY_SERVER_ID}, IP: ${SCALEWAY_SERVER_IP})" +echo "" + +log_warn "Starting Kilo Code..." +sleep 1 +clear +interactive_session "${SCALEWAY_SERVER_IP}" "source ~/.zshrc && kilocode"