diff --git a/cc-remote.sh b/cc-remote.sh index b5d59c6..c97a41d 100755 --- a/cc-remote.sh +++ b/cc-remote.sh @@ -16,6 +16,8 @@ set -euo pipefail # ./cc-remote.sh --print (sadece env'leri göster) # ────────────────────────────────────────────── +# Çağrıldığı dizini kaydet +ORIG_DIR="$PWD" SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" # ── .env'yi yükle (API key için) ── @@ -39,7 +41,26 @@ if [[ -z "$GATEWAY_URL" ]]; then fi ANTHROPIC_ENDPOINT="${ANTHROPIC_BASE_URL:-${GATEWAY_URL}/anthropic}" -ANTHROPIC_KEY="${ANTHROPIC_API_KEY:-${OPENAI_KEY:-}}" + +# ── Print mode ── +print_env() { + echo "┌─ optoant Remote → Claude Code Environment" + echo "│ ANTHROPIC_BASE_URL=${ANTHROPIC_ENDPOINT}" + echo "│ ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-${OPENAI_KEY:-}:0:20}... (masked)" + echo "│ Gateway: ${GATEWAY_URL}/health" + echo "└─" +} + +case "${1:-}" in + --print|-p) + print_env + exit 0 + ;; + --help|-h) + sed -n '2,17p' "$0" + exit 0 + ;; +esac # ── Gateway health check ── echo "🔍 Gateway kontrol ediliyor: ${GATEWAY_URL}/health" @@ -49,25 +70,70 @@ else echo "⚠️ Gateway'e ulaşılamadı, yine de bağlanmayı deneyeceğim" fi -# ── Print mode ── -case "${1:-}" in - --print|-p) - echo "" - echo "┌─ optoant Remote → Claude Code Environment" - echo "│ ANTHROPIC_BASE_URL=${ANTHROPIC_ENDPOINT}" - echo "│ ANTHROPIC_API_KEY=${ANTHROPIC_KEY:0:20}... (masked)" - echo "│ Gateway: ${GATEWAY_URL}/health" - echo "└─" - exit 0 - ;; -esac +print_env # ── Claude Code'u başlat ── echo "┌─ Claude Code başlatılıyor (remote gateway)..." echo "│ Gateway: ${ANTHROPIC_ENDPOINT}" +echo "│ Not: Streaming desteklenmiyor. ~/.claude/settings.json'a" +echo '│ "stream": false eklendi.' +echo "│ Çıkmak için: exit veya Ctrl+C" echo "└─" echo "" -ANTHROPIC_BASE_URL="${ANTHROPIC_ENDPOINT}" \ -ANTHROPIC_API_KEY="${ANTHROPIC_KEY}" \ -claude "$@" +if [[ $EUID -eq 0 ]]; then + # ── Root: non-root kullanıcı oluştur, su ile başlat ── + CLAUD_USER="optoant-claude" + if ! id "$CLAUD_USER" &>/dev/null; then + echo "👤 Non-root kullanıcı oluşturuluyor: $CLAUD_USER" + useradd -m -s /bin/bash "$CLAUD_USER" + if [[ -d /root/.claude ]]; then + cp -r /root/.claude "/home/${CLAUD_USER}/" + chown -R "${CLAUD_USER}:${CLAUD_USER}" "/home/${CLAUD_USER}/.claude" + fi + fi + + CLAUD_HOME="/home/${CLAUD_USER}" + CLAUD_PROJECT="${CLAUD_HOME}/opantoantro" + if [[ ! -d "${CLAUD_PROJECT}" ]]; then + echo "📁 Proje kopyalanıyor: ${CLAUD_PROJECT}" + cp -r /root/opantoantro "${CLAUD_PROJECT}" + chown -R "${CLAUD_USER}:${CLAUD_USER}" "${CLAUD_PROJECT}" + fi + + CLAUD_BIN="/usr/local/bin/claude" + if [[ ! -x "$CLAUD_BIN" ]]; then + SRC=$(find /root/.nvm -name "claude" -o -name "claude.exe" -type f 2>/dev/null | head -1) + if [[ -z "$SRC" ]]; then + echo "❌ claude binary bulunamadı. Önce: npm install -g @anthropic-ai/claude-code" + exit 1 + fi + cp "$SRC" "$CLAUD_BIN" + chmod 755 "$CLAUD_BIN" + echo "📦 Claude Code kopyalandı: ${CLAUD_BIN}" + fi + + CLAUD_RUNNER="/tmp/cc-remote-run-${CLAUD_USER}.sh" + cat > "$CLAUD_RUNNER" <<- WRAPPER +#!/usr/bin/env bash +cd "${ORIG_DIR}" 2>/dev/null || cd "${CLAUD_PROJECT}" +export ANTHROPIC_BASE_URL="${ANTHROPIC_ENDPOINT}" +export ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-${OPENAI_KEY:-}}" +exec "${CLAUD_BIN}" --settings '{"stream": false}' "\$@" +WRAPPER + chmod +x "$CLAUD_RUNNER" + + SAFE_ARGS="" + for arg in "$@"; do + SAFE_ARGS="${SAFE_ARGS} $(printf '%q' "$arg")" + done + + su - "${CLAUD_USER}" -c "${CLAUD_RUNNER}${SAFE_ARGS}" + rm -f "$CLAUD_RUNNER" +else + # ── Non-root: doğrudan başlat ── + cd "$ORIG_DIR" + ANTHROPIC_BASE_URL="${ANTHROPIC_ENDPOINT}" \ + ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-${OPENAI_KEY:-}}" \ + claude --settings '{"stream": false}' "$@" +fi diff --git a/data/app.db b/data/app.db index b727aea..3d9b341 100644 Binary files a/data/app.db and b/data/app.db differ