#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || (cd "$(dirname "$0")/.." && pwd))"
ENV_LOCAL="${HARNESS_ENV_LOCAL:-${REPO_ROOT}/env.local}"
USER_FILE="${HARNESS_USER_BACKEND_FILE:-${HOME}/.config/claude-harness/impl-backend.env}"
KEY="HARNESS_IMPL_BACKEND"
DEFAULT="claude"
is_valid_backend() {
case "$1" in
claude | codex | cursor) return 0 ;;
*) return 1 ;;
esac
}
flag_backend=""
role=""
while [ "$#" -gt 0 ]; do
case "$1" in
--backend)
flag_backend="${2:-}"
shift 2
;;
--role)
role="${2:-}"
shift 2
;;
--default)
DEFAULT="${2:-}"
if ! is_valid_backend "${DEFAULT}"; then
echo "[resolve-impl-backend] 不正な --default 値: '${DEFAULT}'(claude|codex|cursor のいずれかを指定)" >&2
exit 2
fi
shift 2
;;
*)
echo "[resolve-impl-backend] 不明な引数: $1" >&2
exit 2
;;
esac
done
if [ -n "${flag_backend}" ]; then
if is_valid_backend "${flag_backend}"; then
echo "${flag_backend}"
exit 0
fi
echo "[resolve-impl-backend] 不正な --backend 値: '${flag_backend}'(claude|codex|cursor のいずれかを指定)" >&2
exit 2
fi
if [ -n "${HARNESS_IMPL_BACKEND:-}" ]; then
if is_valid_backend "${HARNESS_IMPL_BACKEND}"; then
echo "${HARNESS_IMPL_BACKEND}"
exit 0
fi
echo "[resolve-impl-backend] 警告: 環境変数 ${KEY}='${HARNESS_IMPL_BACKEND}' が不正です。'claude' にフォールバックします。" >&2
echo "claude"
exit 0
fi
if [ -f "${ENV_LOCAL}" ]; then
file_line="$(grep -E "^export ${KEY}=" "${ENV_LOCAL}" 2>/dev/null | tail -1 || true)"
if [ -n "${file_line}" ]; then
file_value="${file_line#export "${KEY}"=}"
if is_valid_backend "${file_value}"; then
echo "${file_value}"
exit 0
fi
echo "[resolve-impl-backend] 警告: ${ENV_LOCAL} の ${KEY}='${file_value}' が不正です。'claude' にフォールバックします。" >&2
echo "claude"
exit 0
fi
fi
if [ -f "${USER_FILE}" ]; then
user_line="$(grep -E "^export ${KEY}=" "${USER_FILE}" 2>/dev/null | tail -1 || true)"
if [ -n "${user_line}" ]; then
user_value="${user_line#export "${KEY}"=}"
if is_valid_backend "${user_value}"; then
echo "${user_value}"
exit 0
fi
echo "[resolve-impl-backend] 警告: ${USER_FILE} の ${KEY}='${user_value}' が不正です。'claude' にフォールバックします。" >&2
echo "claude"
exit 0
fi
fi
echo "${DEFAULT}"