# 서버 추천 기능 제거 Implementation Plan > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. **Goal:** 서버 추천/상담 기능을 제거하고, 서버 관리 기능(목록, 시작/중지, 삭제 등)만 유지 **Architecture:** 진입점(openai-service.ts, message-handler.ts)에서 상담 세션 분기 제거 → server-agent.ts 삭제 → server-tool.ts에서 추천 관련 action 제거 → types.ts 정리 → constants 정리 → DB 마이그레이션 **Tech Stack:** TypeScript, Cloudflare Workers, D1 SQLite --- ## Task 1: openai-service.ts - 서버 상담 세션 분기 제거 **Files:** - Modify: `src/openai-service.ts:9` (import), `src/openai-service.ts:211-250` (session check) **Step 1: import 제거** ```typescript // 제거할 라인 (줄 9) import { hasServerSession, processServerConsultation } from './agents/server-agent'; ``` **Step 2: 서버 상담 세션 체크 블록 제거** 줄 211-250의 서버 세션 체크 블록 전체 삭제: ```typescript // 이 전체 블록 삭제 (줄 211-250 근처) // Check if server consultation session is active if (telegramUserId && env.DB) { try { const hasSession = await hasServerSession(env.DB, telegramUserId); if (hasSession) { logger.info('Active server session detected, routing to consultation', { userId: telegramUserId }); // Create callback for intermediate messages let sendIntermediateMessage: ((message: string) => Promise) | undefined; if (chatIdStr) { sendIntermediateMessage = async (message: string) => { logger.info('Sending intermediate message', { chatId: chatIdStr, messagePreview: message.substring(0, 50) }); await sendMessage(env.BOT_TOKEN, parseInt(chatIdStr), message); logger.info('Intermediate message sent successfully', { chatId: chatIdStr }); }; } const result = await processServerConsultation( env.DB, telegramUserId, userMessage, env, { sendIntermediateMessage } ); // PASSTHROUGH: 무관한 메시지는 일반 처리로 전환 if (result !== '__PASSTHROUGH__') { return result; } // Continue to normal flow below } } catch (error) { logger.error('Session check failed, continuing with normal flow', error as Error, { telegramUserId }); // Continue with normal flow if session check fails } // ... (troubleshoot, domain, deposit, ddos 세션 체크는 유지) ``` **Step 3: 타입체크** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck` Expected: 서버 세션 관련 에러들 발생 (다음 태스크에서 해결) **Step 4: Commit** ```bash git add src/openai-service.ts git commit -m "refactor: remove server consultation session routing from openai-service Co-Authored-By: Claude Opus 4.5 " ``` --- ## Task 2: message-handler.ts - 서버 신청 관련 코드 정리 **Files:** - Modify: `src/routes/handlers/message-handler.ts:117-218` **Step 1: "신청" 처리에서 서버 세션 의존 코드 제거** 줄 117-218의 서버 신청 확인 처리 블록 전체 삭제 (서버 관리는 manage_server 도구로 직접 처리): ```typescript // 이 전체 블록 삭제 (줄 117-218) // 7. 서버 신청 확인 처리 (텍스트 기반) - Queue 기반 if (text.trim() === '신청') { if (orderSessionData) { // ... 전체 블록 } } ``` **Step 2: orderSessionKey 변수 및 Promise.all에서 제거** ```typescript // 변경 전 (줄 60-66) const deleteSessionKey = `delete_confirm:${telegramUserId}`; const orderSessionKey = `server_order_confirm:${telegramUserId}`; const [deleteSessionData, orderSessionData] = await Promise.all([ env.SESSION_KV.get(deleteSessionKey), env.SESSION_KV.get(orderSessionKey), ]); // 변경 후 const deleteSessionKey = `delete_confirm:${telegramUserId}`; const deleteSessionData = await env.SESSION_KV.get(deleteSessionKey); ``` **Step 3: 타입체크** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck` Expected: PASS 또는 server-agent 관련 에러 **Step 4: Commit** ```bash git add src/routes/handlers/message-handler.ts git commit -m "refactor: remove server order confirmation from message-handler Co-Authored-By: Claude Opus 4.5 " ``` --- ## Task 3: server-agent.ts 파일 삭제 **Files:** - Delete: `src/agents/server-agent.ts` **Step 1: 파일 삭제** ```bash rm src/agents/server-agent.ts ``` **Step 2: 타입체크** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck` Expected: server-tool.ts에서 import 에러 발생 (다음 태스크에서 해결) **Step 3: Commit** ```bash git add -A git commit -m "refactor: delete server-agent.ts (905 lines) Remove server recommendation consultation system: - 30-year expert AI persona - Session-based information gathering - Brave Search / Context7 tool integration - Automatic spec inference Co-Authored-By: Claude Opus 4.5 " ``` --- ## Task 4: server-tool.ts - 추천 관련 action 제거 **Files:** - Modify: `src/tools/server-tool.ts` **Step 1: 추천 관련 함수 제거** 다음 함수들 삭제: - `getRecommendationData()` (줄 332-374) - `formatRecommendations()` (줄 378-431) - `estimateCdnCacheHitRate()` (줄 42-66) - `CDN_CACHE_HIT_RATES` 상수 (줄 24-31) **Step 2: manageServerTool 정의에서 추천 관련 enum 값 제거** ```typescript // 변경 전 (줄 96-99) action: { type: 'string', enum: ['recommend', 'order', 'list', 'info', 'delete', 'images', 'start', 'stop', 'reboot', 'start_consultation', 'continue_consultation', 'cancel_consultation', 'rename'], description: '...', } // 변경 후 action: { type: 'string', enum: ['order', 'list', 'info', 'delete', 'images', 'start', 'stop', 'reboot', 'rename'], description: 'start: 서버 시작, stop: 서버 중지, reboot: 서버 재시작, delete: 서버 삭제, list: 내 서버 목록, info: 서버 상세, order: 서버 주문, rename: 이름 변경, images: OS 이미지 목록', } ``` **Step 3: 추천 관련 파라미터 제거** manageServerTool.function.parameters.properties에서 제거: - `tech_stack` - `expected_users` - `use_case` - `traffic_pattern` - `region_preference` - `budget_limit` - `lang` - `message` **Step 4: executeServerAction에서 추천 관련 case 제거** 삭제할 case들: - `case 'start_consultation':` (줄 665-678) - `case 'continue_consultation':` (줄 680-697) - `case 'cancel_consultation':` (줄 699-717) - `case 'recommend':` (줄 719-825) **Step 5: executeServerAction에서 server-agent import 제거** ```typescript // 삭제할 dynamic import (case 'continue_consultation' 내부) const { processServerConsultation } = await import('../agents/server-agent'); // 삭제할 dynamic import (case 'cancel_consultation' 내부) const { ServerSessionManager } = await import('../utils/session-manager'); const { getSessionConfig } = await import('../constants/agent-config'); ``` **Step 6: 타입체크** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck` Expected: PASS **Step 7: Commit** ```bash git add src/tools/server-tool.ts git commit -m "refactor: remove recommendation actions from server-tool Removed: - start_consultation, continue_consultation, cancel_consultation, recommend actions - getRecommendationData(), formatRecommendations() - CDN cache hit rate estimation - Recommendation-related parameters (tech_stack, expected_users, etc.) Retained: - order, list, info, delete, images, start, stop, reboot, rename actions Co-Authored-By: Claude Opus 4.5 " ``` --- ## Task 5: types.ts - 서버 세션 관련 타입 제거 **Files:** - Modify: `src/types.ts` **Step 1: ServerSession 관련 타입 제거** 삭제할 타입들: - `ServerSessionStatus` (줄 248-253) - `ServerSession` (줄 256-293) **Step 2: ManageServerArgs에서 추천 관련 필드 제거** ```typescript // 변경 전 (줄 212-239) export interface ManageServerArgs { action: | "recommend" | "order" | "start" | "stop" | "delete" | "list" | "info" | "images" | "start_consultation" | "continue_consultation" | "cancel_consultation"; tech_stack?: string[]; expected_users?: number; use_case?: string; traffic_pattern?: string; region_preference?: string[]; budget_limit?: number; lang?: string; // ... 나머지 } // 변경 후 export interface ManageServerArgs { action: | "order" | "start" | "stop" | "delete" | "list" | "info" | "images" | "reboot" | "rename"; server_id?: string; region_code?: string; label?: string; pricing_id?: number; order_id?: number; new_label?: string; image?: string; } ``` **Step 3: 타입체크** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck` Expected: PASS **Step 4: Commit** ```bash git add src/types.ts git commit -m "refactor: remove ServerSession types from types.ts Removed: - ServerSessionStatus type - ServerSession interface - Recommendation-related fields from ManageServerArgs Co-Authored-By: Claude Opus 4.5 " ``` --- ## Task 6: constants/index.ts - SERVER_CONSULTATION_STATUS 제거 **Files:** - Modify: `src/constants/index.ts` **Step 1: SERVER_CONSULTATION_STATUS 상수 제거** ```typescript // 삭제 (줄 157-162) export const SERVER_CONSULTATION_STATUS = { GATHERING: 'gathering', RECOMMENDING: 'recommending', SELECTING: 'selecting', COMPLETED: 'completed', } as const; ``` **Step 2: 타입 export 제거** ```typescript // 삭제 (줄 220) export type ServerConsultationStatus = typeof SERVER_CONSULTATION_STATUS[keyof typeof SERVER_CONSULTATION_STATUS]; ``` **Step 3: 타입체크** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck` Expected: PASS **Step 4: Commit** ```bash git add src/constants/index.ts git commit -m "refactor: remove SERVER_CONSULTATION_STATUS from constants Co-Authored-By: Claude Opus 4.5 " ``` --- ## Task 7: commands.ts - /server 명령어 응답 수정 **Files:** - Modify: `src/commands.ts:268-274` **Step 1: "서버 추천" 안내 문구 제거** ```typescript // 변경 전 (줄 268-274) if (servers.length === 0) { return `🖥️ 내 서버 보유한 서버가 없습니다. "서버 추천" 또는 "서버 신청"으로 시작하세요!`; } // 변경 후 if (servers.length === 0) { return `🖥️ 내 서버 보유한 서버가 없습니다.`; } ``` **Step 2: 타입체크** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck` Expected: PASS **Step 3: Commit** ```bash git add src/commands.ts git commit -m "refactor: update /server command to remove recommendation guide Co-Authored-By: Claude Opus 4.5 " ``` --- ## Task 8: D1 마이그레이션 - server_sessions 테이블 DROP **Files:** - Create: `migrations/006_drop_server_sessions.sql` - Modify: `schema.sql` (server_sessions 정의 제거) **Step 1: 마이그레이션 파일 생성** ```sql -- migrations/006_drop_server_sessions.sql -- Drop server consultation sessions table -- This table was used for server recommendation consultation feature which is now removed DROP TABLE IF EXISTS server_sessions; DROP INDEX IF EXISTS idx_server_sessions_expires; ``` **Step 2: schema.sql에서 server_sessions 제거** ```sql -- 삭제할 부분 (줄 89-99) -- 서버 상담 세션 테이블 CREATE TABLE IF NOT EXISTS server_sessions ( user_id TEXT PRIMARY KEY, status TEXT NOT NULL CHECK(status IN ('gathering', 'recommending', 'selecting', 'ordering', 'completed')), collected_info TEXT, last_recommendation TEXT, messages TEXT, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL, expires_at INTEGER NOT NULL ); -- 인덱스도 삭제 (줄 156) CREATE INDEX IF NOT EXISTS idx_server_sessions_expires ON server_sessions(expires_at); ``` **Step 3: 로컬 마이그레이션 테스트** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && wrangler d1 execute telegram-conversations --local --file=migrations/006_drop_server_sessions.sql` Expected: 성공 **Step 4: Commit** ```bash git add migrations/006_drop_server_sessions.sql schema.sql git commit -m "refactor: drop server_sessions table Add migration to remove server consultation sessions table. Update schema.sql to remove table definition. Co-Authored-By: Claude Opus 4.5 " ``` --- ## Task 9: 최종 검증 **Step 1: 타입체크** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck` Expected: PASS (에러 0개) **Step 2: 빌드** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run build` Expected: PASS **Step 3: 테스트** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm test` Expected: PASS (또는 서버 추천 관련 테스트만 실패) **Step 4: 로컬 서버 테스트** Run: `cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run dev` 테스트 항목: 1. `/server` 명령어 - 서버 목록 표시 확인 2. "서버 추천해줘" 입력 - 상담 시작 안 됨 확인 (일반 AI 응답) 3. 서버 시작/중지/삭제 (기존 서버 있는 경우) **Step 5: 최종 커밋 (선택)** ```bash git add -A git commit -m "chore: final cleanup after server recommendation removal Co-Authored-By: Claude Opus 4.5 " ``` --- ## Summary | Task | 파일 | 변경 내용 | |------|------|----------| | 1 | openai-service.ts | 서버 세션 import 및 라우팅 제거 | | 2 | message-handler.ts | "신청" 처리 블록 제거 | | 3 | server-agent.ts | 파일 삭제 (905줄) | | 4 | server-tool.ts | 추천 action 4개 + 헬퍼 함수 제거 | | 5 | types.ts | ServerSession 타입 제거 | | 6 | constants/index.ts | SERVER_CONSULTATION_STATUS 제거 | | 7 | commands.ts | /server 안내 문구 수정 | | 8 | schema.sql + migration | server_sessions 테이블 DROP | | 9 | - | 최종 검증 | **예상 제거 라인:** ~1,200줄 **유지 기능:** 서버 관리 (list, info, start, stop, reboot, delete, rename, order, images)