refactor: complete P0-P1 improvements
Constants migration: - server-agent.ts: SERVER_CONSULTATION_STATUS, LANGUAGE_CODE - troubleshoot-agent.ts: TROUBLESHOOT_STATUS - notification.ts: NOTIFICATION_TYPE API improvements: - search-tool.ts: Zod schema validation for Brave/Context7 APIs - api-helper.ts: Centralized API call utility with retry/timeout Testing: - kv-cache.test.ts: 38 test cases for cache abstraction Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,7 @@ import type { Env, ServerSession, BandwidthInfo, RecommendResponse } from './typ
|
||||
import { createLogger } from './utils/logger';
|
||||
import { executeSearchWeb, executeLookupDocs } from './tools/search-tool';
|
||||
import { formatTrafficInfo } from './utils/formatters';
|
||||
import { SERVER_CONSULTATION_STATUS, LANGUAGE_CODE } from './constants';
|
||||
|
||||
const logger = createLogger('server-agent');
|
||||
|
||||
@@ -683,7 +684,7 @@ export async function processServerConsultation(
|
||||
// 새 세션 생성하고 시작 메시지 반환
|
||||
const newSession: ServerSession = {
|
||||
telegramUserId: session.telegramUserId,
|
||||
status: 'gathering',
|
||||
status: SERVER_CONSULTATION_STATUS.GATHERING,
|
||||
collectedInfo: {},
|
||||
messages: [],
|
||||
createdAt: Date.now(),
|
||||
@@ -699,10 +700,10 @@ export async function processServerConsultation(
|
||||
status: session.status,
|
||||
hasLastRecommendation: !!session.lastRecommendation,
|
||||
recommendationCount: session.lastRecommendation?.recommendations?.length || 0,
|
||||
willProcessSelection: session.status === 'selecting' && !!session.lastRecommendation
|
||||
willProcessSelection: session.status === SERVER_CONSULTATION_STATUS.SELECTING && !!session.lastRecommendation
|
||||
});
|
||||
|
||||
if (session.status === 'selecting' && session.lastRecommendation) {
|
||||
if (session.status === SERVER_CONSULTATION_STATUS.SELECTING && session.lastRecommendation) {
|
||||
// 상담과 무관한 키워드 감지 (selecting 상태에서만)
|
||||
// 명확히 다른 기능 요청인 경우 세션 종료하고 일반 처리로 전환
|
||||
const unrelatedPatterns = /기억|날씨|계산|검색|도메인|입금|충전|잔액|시간|문서/;
|
||||
@@ -812,7 +813,7 @@ export async function processServerConsultation(
|
||||
}
|
||||
|
||||
// Mark session as recommending
|
||||
session.status = 'recommending';
|
||||
session.status = SERVER_CONSULTATION_STATUS.RECOMMENDING;
|
||||
await saveServerSession(env.DB, session.telegramUserId, session);
|
||||
|
||||
// 1. Call recommendation API (추천 먼저 받기)
|
||||
@@ -877,7 +878,7 @@ export async function processServerConsultation(
|
||||
use_case: session.collectedInfo.useCase || '웹 서비스',
|
||||
region_preference: finalRegionPreference,
|
||||
budget_limit: session.collectedInfo.budgetLimit,
|
||||
lang: 'ko',
|
||||
lang: LANGUAGE_CODE.KOREAN,
|
||||
},
|
||||
env
|
||||
);
|
||||
@@ -927,14 +928,14 @@ export async function processServerConsultation(
|
||||
use_case: session.collectedInfo.useCase || '웹 서비스',
|
||||
region_preference: session.collectedInfo.regionPreference,
|
||||
budget_limit: session.collectedInfo.budgetLimit,
|
||||
lang: 'ko',
|
||||
lang: LANGUAGE_CODE.KOREAN,
|
||||
},
|
||||
env,
|
||||
session.telegramUserId
|
||||
);
|
||||
|
||||
// Mark session as selecting (사용자 선택 대기)
|
||||
session.status = 'selecting';
|
||||
session.status = SERVER_CONSULTATION_STATUS.SELECTING;
|
||||
await saveServerSession(env.DB, session.telegramUserId, session);
|
||||
|
||||
// 4. 추천 결과 + AI 검토 코멘트 (검토 코멘트는 마지막에)
|
||||
@@ -942,14 +943,14 @@ export async function processServerConsultation(
|
||||
return `${formattedRecommendation}\n\n💬 ${reviewResult.message}\n\n💡 원하는 서버 번호를 선택해주세요 (예: 1번)`;
|
||||
} else {
|
||||
// 추천 결과 없음 - 세션 삭제
|
||||
session.status = 'completed';
|
||||
session.status = SERVER_CONSULTATION_STATUS.COMPLETED;
|
||||
await deleteServerSession(env.DB, session.telegramUserId);
|
||||
|
||||
return `${aiResult.message}\n\n조건에 맞는 서버를 찾지 못했습니다.`;
|
||||
}
|
||||
} else {
|
||||
// Continue gathering information
|
||||
session.status = 'gathering';
|
||||
session.status = SERVER_CONSULTATION_STATUS.GATHERING;
|
||||
await saveServerSession(env.DB, session.telegramUserId, session);
|
||||
|
||||
return aiResult.message;
|
||||
|
||||
Reference in New Issue
Block a user