#!/bin/bash # nxCode AI Gateway - Continue 확장 설정 스크립트 # 사용법: curl -fsSL https://gate.nexol.co.kr/install-continue.sh | NXCODE_USER=username bash set -e # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' echo -e "${BLUE}=== Continue 확장 설정 ===${NC}" echo "" # 사용자 정보 확인 if [ -z "$NXCODE_USER" ]; then read -p "GitLab 사용자명을 입력하세요: " NXCODE_USER fi if [ -z "$NXCODE_USER" ]; then echo -e "${RED}오류: NXCODE_USER가 필요합니다.${NC}" exit 1 fi NXCODE_HOST=${NXCODE_HOST:-$(hostname)} echo -e "${GREEN}사용자: ${NXCODE_USER}${NC}" echo -e "${GREEN}호스트: ${NXCODE_HOST}${NC}" echo "" # OS 감지 및 설정 디렉토리 결정 OS="unknown" CONFIG_DIR="" if [[ "$OSTYPE" == "linux-gnu"* ]]; then OS="linux" CONFIG_DIR="$HOME/.continue" elif [[ "$OSTYPE" == "darwin"* ]]; then OS="macos" CONFIG_DIR="$HOME/.continue" elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "win32" ]]; then OS="windows" CONFIG_DIR="$USERPROFILE/.continue" fi echo -e "${BLUE}OS 감지: ${OS}${NC}" echo -e "${BLUE}설정 디렉토리: ${CONFIG_DIR}${NC}" echo "" # Continue 확장 설치 확인 echo -e "${YELLOW}Continue 확장이 VS Code에 설치되어 있는지 확인하세요.${NC}" echo "" echo "설치 방법:" echo " 1. VS Code 열기" echo " 2. Extensions (Ctrl+Shift+X)" echo " 3. 'Continue' 검색" echo " 4. 'Continue - Codestral, Claude, and more' 설치" echo "" read -p "Continue 확장이 설치되어 있습니까? [y/N]: " CONTINUE_INSTALLED if [[ ! "$CONTINUE_INSTALLED" =~ ^[Yy]$ ]]; then echo -e "${YELLOW}Continue 확장을 먼저 설치한 후 다시 실행하세요.${NC}" exit 0 fi # 설정 디렉토리 생성 mkdir -p "$CONFIG_DIR" # API 키 입력 요청 echo "" echo -e "${YELLOW}API 키가 필요합니다.${NC}" echo "관리자(roycho@nexol.co.kr)에게 API 키를 요청하세요." echo "또는 https://gate.nexol.co.kr/ui 에서 키를 생성하세요." echo "" read -p "API 키를 입력하세요 (sk-로 시작): " API_KEY if [ -z "$API_KEY" ]; then echo -e "${RED}API 키가 필요합니다.${NC}" exit 1 fi # config.json 생성 CONFIG_FILE="$CONFIG_DIR/config.json" echo -e "${BLUE}설정 파일 생성: ${CONFIG_FILE}${NC}" # 기존 설정 백업 if [ -f "$CONFIG_FILE" ]; then BACKUP_FILE="${CONFIG_FILE}.backup.$(date +%Y%m%d%H%M%S)" cp "$CONFIG_FILE" "$BACKUP_FILE" echo -e "${YELLOW}기존 설정 백업: ${BACKUP_FILE}${NC}" fi cat > "$CONFIG_FILE" << EOF { "models": [ { "title": "Claude Sonnet 4.5 (nxCode)", "provider": "openai", "model": "claude-sonnet-4-5", "apiBase": "https://gate.nexol.co.kr/api/v1", "apiKey": "$API_KEY", "requestOptions": { "headers": { "X-NxCode-User": "$NXCODE_USER", "X-NxCode-Host": "$NXCODE_HOST" } } }, { "title": "Claude Opus 4.5 (nxCode)", "provider": "openai", "model": "claude-opus-4-5", "apiBase": "https://gate.nexol.co.kr/api/v1", "apiKey": "$API_KEY", "requestOptions": { "headers": { "X-NxCode-User": "$NXCODE_USER", "X-NxCode-Host": "$NXCODE_HOST" } } }, { "title": "Claude Sonnet 4 (nxCode)", "provider": "openai", "model": "claude-sonnet-4", "apiBase": "https://gate.nexol.co.kr/api/v1", "apiKey": "$API_KEY", "requestOptions": { "headers": { "X-NxCode-User": "$NXCODE_USER", "X-NxCode-Host": "$NXCODE_HOST" } } }, { "title": "Claude Opus 4 (nxCode)", "provider": "openai", "model": "claude-opus-4", "apiBase": "https://gate.nexol.co.kr/api/v1", "apiKey": "$API_KEY", "requestOptions": { "headers": { "X-NxCode-User": "$NXCODE_USER", "X-NxCode-Host": "$NXCODE_HOST" } } } ], "tabAutocompleteModel": { "title": "Claude Sonnet 4 (Autocomplete)", "provider": "openai", "model": "claude-sonnet-4", "apiBase": "https://gate.nexol.co.kr/api/v1", "apiKey": "$API_KEY", "requestOptions": { "headers": { "X-NxCode-User": "$NXCODE_USER", "X-NxCode-Host": "$NXCODE_HOST" } } }, "embeddingsProvider": { "provider": "transformers.js" }, "customCommands": [ { "name": "test", "prompt": "Write unit tests for the selected code using the project's testing framework." }, { "name": "explain", "prompt": "Explain the selected code in detail, including its purpose and how it works." } ], "allowAnonymousTelemetry": false, "docs": [] } EOF echo -e "${GREEN}설정 파일이 생성되었습니다.${NC}" # 연결 테스트 echo "" echo -e "${BLUE}=== 연결 테스트 ===${NC}" echo "" echo "Gateway 연결 테스트 중..." RESPONSE=$(curl -sf -X POST "https://gate.nexol.co.kr/api/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $API_KEY" \ -H "X-NxCode-User: $NXCODE_USER" \ -H "X-NxCode-Host: $NXCODE_HOST" \ -d '{ "model": "claude-sonnet-4", "messages": [{"role": "user", "content": "hi"}], "max_tokens": 10 }' 2>&1) || true if echo "$RESPONSE" | grep -q '"choices"'; then echo -e "${GREEN}API 연결: 성공${NC}" elif echo "$RESPONSE" | grep -q '"error"'; then ERROR_MSG=$(echo "$RESPONSE" | grep -o '"message":"[^"]*"' | head -1) echo -e "${YELLOW}API 연결: 실패 - $ERROR_MSG${NC}" echo -e "${YELLOW}관리자에게 화이트리스트 등록을 요청하세요.${NC}" else echo -e "${YELLOW}API 연결: 응답 확인 필요${NC}" fi echo "" echo -e "${GREEN}=== Continue 설정 완료 ===${NC}" echo "" echo "사용 방법:" echo " 1. VS Code 재시작" echo " 2. Continue 사이드바 열기 (Ctrl+Shift+L)" echo " 3. 모델 선택: Claude Sonnet 4.5 (nxCode)" echo "" echo "사용 가능한 모델:" echo " - Claude Sonnet 4.5 (nxCode) - 최신, 추천" echo " - Claude Opus 4.5 (nxCode) - 최고 성능" echo " - Claude Sonnet 4 (nxCode)" echo " - Claude Opus 4 (nxCode)" echo "" echo "문제가 있으면 관리자에게 문의하세요: roycho@nexol.co.kr"