#!/usr/bin/env bash set -euo pipefail readonly RED='\033[0;31m' readonly GREEN='\033[0;32m' readonly YELLOW='\033[1;33m' readonly BLUE='\033[0;34m' readonly NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $*"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } log_step() { echo -e "${BLUE}[STEP]${NC} $*"; } SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WSL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" AUTOMATION_DIR="$(cd "$WSL_DIR/.." && pwd)" PROJECT_ROOT="$(cd "$AUTOMATION_DIR/.." && pwd)" RUNTIME_DIR="$AUTOMATION_DIR/wsl_runtime" DOCKER_ENV_FILE="$WSL_DIR/.env" RUNNER_ENV_FILE="$AUTOMATION_DIR/wsl.local.env" PROJECT_LINK="$HOME/ableton-mcp-ai" generate_secret() { openssl rand -hex "${1:-16}" 2>/dev/null || python3 - <<'PY' import secrets print(secrets.token_hex(16)) PY } ensure_dirs() { log_step "Creating runtime directories" mkdir -p \ "$RUNTIME_DIR/logs" \ "$RUNTIME_DIR/pids" \ "$RUNTIME_DIR/data" \ "$AUTOMATION_DIR/reports" \ "$AUTOMATION_DIR/runs" \ "$AUTOMATION_DIR/tasks" \ "$AUTOMATION_DIR/workflows" \ "$WSL_DIR/initdb" } ensure_symlink() { if [[ ! -L "$PROJECT_LINK" ]]; then ln -sfn "$PROJECT_ROOT" "$PROJECT_LINK" fi log_info "Project link: $PROJECT_LINK" } write_docker_env() { if [[ -f "$DOCKER_ENV_FILE" ]]; then log_info "Docker env already exists: $DOCKER_ENV_FILE" return fi log_step "Generating docker env" cat > "$DOCKER_ENV_FILE" < "$RUNNER_ENV_FILE" <