#!/usr/bin/env bash set -euo pipefail LOCAL_BASE_URL="${LOCAL_BASE_URL:-http://127.0.0.1:20128}" CLOUD_BASE_URL="${CLOUD_BASE_URL:-https://omniroute.com/v1}" MODEL="${MODEL:-kr/claude-sonnet-4.5}" STREAM_MODE="${STREAM_MODE:-false}" MAX_RETRIES="${MAX_RETRIES:-6}" RETRY_DELAY_SECONDS="${RETRY_DELAY_SECONDS:-3}" TIMEOUT_SECONDS="${TIMEOUT_SECONDS:-45}" LOCAL_KEYS_URL="${LOCAL_BASE_URL%/}/api/keys" LOCAL_SYNC_URL="${LOCAL_BASE_URL%/}/api/sync/cloud" CLOUD_CHAT_URL="${CLOUD_BASE_URL%/}/chat/completions" echo "[1/5] Creating local API key" KEY_NAME="cloud-e2e-$(date +%s)" CREATE_RESP="$(curl -sS -m "${TIMEOUT_SECONDS}" -X POST "${LOCAL_KEYS_URL}" \ -H 'Content-Type: application/json' \ --data "{\"name\":\"${KEY_NAME}\"}")" API_KEY="$(echo "${CREATE_RESP}" | jq -r '.key // empty')" if [[ -z "${API_KEY}" || "${API_KEY}" == "null" ]]; then echo "FAIL: could not create local API key" echo "Response: ${CREATE_RESP}" exit 1 fi echo " Key created: ${API_KEY:0:12}...${API_KEY: -6}" echo "[2/5] Enabling cloud mode" ENABLE_CODE="$(curl -sS -m "${TIMEOUT_SECONDS}" -o /tmp/cloud_enable_e2e.json -w '%{http_code}' \ -X POST "${LOCAL_SYNC_URL}" \ -H 'Content-Type: application/json' \ --data '{"action":"enable"}' || true)" echo " enable status: ${ENABLE_CODE}" cat /tmp/cloud_enable_e2e.json; echo if [[ ! "${ENABLE_CODE}" =~ ^2 ]]; then echo "FAIL: cloud enable failed" exit 1 fi echo "[3/5] Running explicit sync" SYNC_CODE="$(curl -sS -m "${TIMEOUT_SECONDS}" -o /tmp/cloud_sync_e2e.json -w '%{http_code}' \ -X POST "${LOCAL_SYNC_URL}" \ -H 'Content-Type: application/json' \ --data '{"action":"sync"}' || true)" echo " sync status: ${SYNC_CODE}" cat /tmp/cloud_sync_e2e.json; echo if [[ ! "${SYNC_CODE}" =~ ^2 ]]; then echo "FAIL: cloud sync failed" exit 1 fi build_payload() { local stream_flag="$1" cat <