Files
telegram-bot-workers/docs/plans/2026-02-05-remove-server-recommendation.md
kappa 7d43db3054 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 <noreply@anthropic.com>
2026-02-05 18:25:36 +09:00

14 KiB

서버 추천 기능 제거 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 제거

// 제거할 라인 (줄 9)
import { hasServerSession, processServerConsultation } from './agents/server-agent';

Step 2: 서버 상담 세션 체크 블록 제거

줄 211-250의 서버 세션 체크 블록 전체 삭제:

// 이 전체 블록 삭제 (줄 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<void>) | 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

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 <noreply@anthropic.com>"

Task 2: message-handler.ts - 서버 신청 관련 코드 정리

Files:

  • Modify: src/routes/handlers/message-handler.ts:117-218

Step 1: "신청" 처리에서 서버 세션 의존 코드 제거

줄 117-218의 서버 신청 확인 처리 블록 전체 삭제 (서버 관리는 manage_server 도구로 직접 처리):

// 이 전체 블록 삭제 (줄 117-218)
// 7. 서버 신청 확인 처리 (텍스트 기반) - Queue 기반
if (text.trim() === '신청') {
  if (orderSessionData) {
    // ... 전체 블록
  }
}

Step 2: orderSessionKey 변수 및 Promise.all에서 제거

// 변경 전 (줄 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

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 <noreply@anthropic.com>"

Task 3: server-agent.ts 파일 삭제

Files:

  • Delete: src/agents/server-agent.ts

Step 1: 파일 삭제

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

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 <noreply@anthropic.com>"

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 값 제거

// 변경 전 (줄 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 제거

// 삭제할 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

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 <noreply@anthropic.com>"

Task 5: types.ts - 서버 세션 관련 타입 제거

Files:

  • Modify: src/types.ts

Step 1: ServerSession 관련 타입 제거

삭제할 타입들:

  • ServerSessionStatus (줄 248-253)
  • ServerSession (줄 256-293)

Step 2: ManageServerArgs에서 추천 관련 필드 제거

// 변경 전 (줄 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

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 <noreply@anthropic.com>"

Task 6: constants/index.ts - SERVER_CONSULTATION_STATUS 제거

Files:

  • Modify: src/constants/index.ts

Step 1: SERVER_CONSULTATION_STATUS 상수 제거

// 삭제 (줄 157-162)
export const SERVER_CONSULTATION_STATUS = {
  GATHERING: 'gathering',
  RECOMMENDING: 'recommending',
  SELECTING: 'selecting',
  COMPLETED: 'completed',
} as const;

Step 2: 타입 export 제거

// 삭제 (줄 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

git add src/constants/index.ts
git commit -m "refactor: remove SERVER_CONSULTATION_STATUS from constants

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"

Task 7: commands.ts - /server 명령어 응답 수정

Files:

  • Modify: src/commands.ts:268-274

Step 1: "서버 추천" 안내 문구 제거

// 변경 전 (줄 268-274)
if (servers.length === 0) {
  return `🖥️ <b>내 서버</b>

보유한 서버가 없습니다.

"서버 추천" 또는 "서버 신청"으로 시작하세요!`;
}

// 변경 후
if (servers.length === 0) {
  return `🖥️ <b>내 서버</b>

보유한 서버가 없습니다.`;
}

Step 2: 타입체크

Run: cd /Users/kaffa/Projects/bots/telegram-bot-workers && npm run typecheck Expected: PASS

Step 3: Commit

git add src/commands.ts
git commit -m "refactor: update /server command to remove recommendation guide

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"

Task 8: D1 마이그레이션 - server_sessions 테이블 DROP

Files:

  • Create: migrations/006_drop_server_sessions.sql
  • Modify: schema.sql (server_sessions 정의 제거)

Step 1: 마이그레이션 파일 생성

-- 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 제거

-- 삭제할 부분 (줄 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

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 <noreply@anthropic.com>"

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: 최종 커밋 (선택)

git add -A
git commit -m "chore: final cleanup after server recommendation removal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"

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)