algokit-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -0
- package/dist/api/boj-scraper.d.ts +68 -0
- package/dist/api/boj-scraper.d.ts.map +1 -0
- package/dist/api/boj-scraper.js +197 -0
- package/dist/api/boj-scraper.js.map +1 -0
- package/dist/api/programmers-scraper.d.ts +70 -0
- package/dist/api/programmers-scraper.d.ts.map +1 -0
- package/dist/api/programmers-scraper.js +303 -0
- package/dist/api/programmers-scraper.js.map +1 -0
- package/dist/api/solvedac-client.d.ts +67 -0
- package/dist/api/solvedac-client.d.ts.map +1 -0
- package/dist/api/solvedac-client.js +220 -0
- package/dist/api/solvedac-client.js.map +1 -0
- package/dist/api/types.d.ts +125 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +110 -0
- package/dist/api/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +594 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/hint-guide.d.ts +73 -0
- package/dist/prompts/hint-guide.d.ts.map +1 -0
- package/dist/prompts/hint-guide.js +174 -0
- package/dist/prompts/hint-guide.js.map +1 -0
- package/dist/prompts/programmers-hint-guide.d.ts +38 -0
- package/dist/prompts/programmers-hint-guide.d.ts.map +1 -0
- package/dist/prompts/programmers-hint-guide.js +134 -0
- package/dist/prompts/programmers-hint-guide.js.map +1 -0
- package/dist/services/code-analyzer.d.ts +46 -0
- package/dist/services/code-analyzer.d.ts.map +1 -0
- package/dist/services/code-analyzer.js +177 -0
- package/dist/services/code-analyzer.js.map +1 -0
- package/dist/services/hint-generator.d.ts +60 -0
- package/dist/services/hint-generator.d.ts.map +1 -0
- package/dist/services/hint-generator.js +222 -0
- package/dist/services/hint-generator.js.map +1 -0
- package/dist/services/problem-analyzer.d.ts +38 -0
- package/dist/services/problem-analyzer.d.ts.map +1 -0
- package/dist/services/problem-analyzer.js +114 -0
- package/dist/services/problem-analyzer.js.map +1 -0
- package/dist/services/programmers-problem-analyzer.d.ts +26 -0
- package/dist/services/programmers-problem-analyzer.d.ts.map +1 -0
- package/dist/services/programmers-problem-analyzer.js +64 -0
- package/dist/services/programmers-problem-analyzer.js.map +1 -0
- package/dist/services/programmers-review-template-generator.d.ts +27 -0
- package/dist/services/programmers-review-template-generator.d.ts.map +1 -0
- package/dist/services/programmers-review-template-generator.js +153 -0
- package/dist/services/programmers-review-template-generator.js.map +1 -0
- package/dist/services/review-generator.d.ts +51 -0
- package/dist/services/review-generator.d.ts.map +1 -0
- package/dist/services/review-generator.js +149 -0
- package/dist/services/review-generator.js.map +1 -0
- package/dist/services/review-template-generator.d.ts +27 -0
- package/dist/services/review-template-generator.d.ts.map +1 -0
- package/dist/services/review-template-generator.js +163 -0
- package/dist/services/review-template-generator.js.map +1 -0
- package/dist/templates/review-guideline.md +89 -0
- package/dist/tools/analyze-code-submission-boj.d.ts +67 -0
- package/dist/tools/analyze-code-submission-boj.d.ts.map +1 -0
- package/dist/tools/analyze-code-submission-boj.js +89 -0
- package/dist/tools/analyze-code-submission-boj.js.map +1 -0
- package/dist/tools/analyze-code-submission-programmers.d.ts +60 -0
- package/dist/tools/analyze-code-submission-programmers.d.ts.map +1 -0
- package/dist/tools/analyze-code-submission-programmers.js +83 -0
- package/dist/tools/analyze-code-submission-programmers.js.map +1 -0
- package/dist/tools/analyze-code-submission.d.ts +67 -0
- package/dist/tools/analyze-code-submission.d.ts.map +1 -0
- package/dist/tools/analyze-code-submission.js +89 -0
- package/dist/tools/analyze-code-submission.js.map +1 -0
- package/dist/tools/analyze-problem-boj.d.ts +48 -0
- package/dist/tools/analyze-problem-boj.d.ts.map +1 -0
- package/dist/tools/analyze-problem-boj.js +52 -0
- package/dist/tools/analyze-problem-boj.js.map +1 -0
- package/dist/tools/analyze-problem-programmers.d.ts +48 -0
- package/dist/tools/analyze-problem-programmers.d.ts.map +1 -0
- package/dist/tools/analyze-problem-programmers.js +53 -0
- package/dist/tools/analyze-problem-programmers.js.map +1 -0
- package/dist/tools/analyze-problem.d.ts +48 -0
- package/dist/tools/analyze-problem.d.ts.map +1 -0
- package/dist/tools/analyze-problem.js +52 -0
- package/dist/tools/analyze-problem.js.map +1 -0
- package/dist/tools/create-review.d.ts +47 -0
- package/dist/tools/create-review.d.ts.map +1 -0
- package/dist/tools/create-review.js +122 -0
- package/dist/tools/create-review.js.map +1 -0
- package/dist/tools/fetch-problem-content-boj.d.ts +49 -0
- package/dist/tools/fetch-problem-content-boj.d.ts.map +1 -0
- package/dist/tools/fetch-problem-content-boj.js +93 -0
- package/dist/tools/fetch-problem-content-boj.js.map +1 -0
- package/dist/tools/fetch-problem-content-programmers.d.ts +46 -0
- package/dist/tools/fetch-problem-content-programmers.d.ts.map +1 -0
- package/dist/tools/fetch-problem-content-programmers.js +74 -0
- package/dist/tools/fetch-problem-content-programmers.js.map +1 -0
- package/dist/tools/fetch-problem-content.d.ts +49 -0
- package/dist/tools/fetch-problem-content.d.ts.map +1 -0
- package/dist/tools/fetch-problem-content.js +93 -0
- package/dist/tools/fetch-problem-content.js.map +1 -0
- package/dist/tools/generate-hint-boj.d.ts +42 -0
- package/dist/tools/generate-hint-boj.d.ts.map +1 -0
- package/dist/tools/generate-hint-boj.js +80 -0
- package/dist/tools/generate-hint-boj.js.map +1 -0
- package/dist/tools/generate-hint-programmers.d.ts +42 -0
- package/dist/tools/generate-hint-programmers.d.ts.map +1 -0
- package/dist/tools/generate-hint-programmers.js +78 -0
- package/dist/tools/generate-hint-programmers.js.map +1 -0
- package/dist/tools/generate-hint.d.ts +42 -0
- package/dist/tools/generate-hint.d.ts.map +1 -0
- package/dist/tools/generate-hint.js +80 -0
- package/dist/tools/generate-hint.js.map +1 -0
- package/dist/tools/generate-review-template-boj.d.ts +48 -0
- package/dist/tools/generate-review-template-boj.d.ts.map +1 -0
- package/dist/tools/generate-review-template-boj.js +52 -0
- package/dist/tools/generate-review-template-boj.js.map +1 -0
- package/dist/tools/generate-review-template-programmers.d.ts +48 -0
- package/dist/tools/generate-review-template-programmers.d.ts.map +1 -0
- package/dist/tools/generate-review-template-programmers.js +53 -0
- package/dist/tools/generate-review-template-programmers.js.map +1 -0
- package/dist/tools/generate-review-template.d.ts +48 -0
- package/dist/tools/generate-review-template.d.ts.map +1 -0
- package/dist/tools/generate-review-template.js +52 -0
- package/dist/tools/generate-review-template.js.map +1 -0
- package/dist/tools/get-hint.d.ts +41 -0
- package/dist/tools/get-hint.d.ts.map +1 -0
- package/dist/tools/get-hint.js +108 -0
- package/dist/tools/get-hint.js.map +1 -0
- package/dist/tools/get-problem.d.ts +22 -0
- package/dist/tools/get-problem.d.ts.map +1 -0
- package/dist/tools/get-problem.js +89 -0
- package/dist/tools/get-problem.js.map +1 -0
- package/dist/tools/get-programmers-problem.d.ts +53 -0
- package/dist/tools/get-programmers-problem.d.ts.map +1 -0
- package/dist/tools/get-programmers-problem.js +161 -0
- package/dist/tools/get-programmers-problem.js.map +1 -0
- package/dist/tools/search-problems.d.ts +42 -0
- package/dist/tools/search-problems.d.ts.map +1 -0
- package/dist/tools/search-problems.js +123 -0
- package/dist/tools/search-problems.js.map +1 -0
- package/dist/tools/search-programmers-problems.d.ts +73 -0
- package/dist/tools/search-programmers-problems.d.ts.map +1 -0
- package/dist/tools/search-programmers-problems.js +171 -0
- package/dist/tools/search-programmers-problems.js.map +1 -0
- package/dist/tools/search-tags.d.ts +22 -0
- package/dist/tools/search-tags.d.ts.map +1 -0
- package/dist/tools/search-tags.js +70 -0
- package/dist/tools/search-tags.js.map +1 -0
- package/dist/types/analysis.d.ts +211 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +11 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/problem-content.d.ts +110 -0
- package/dist/types/problem-content.d.ts.map +1 -0
- package/dist/types/problem-content.js +7 -0
- package/dist/types/problem-content.js.map +1 -0
- package/dist/types/programmers.d.ts +72 -0
- package/dist/types/programmers.d.ts.map +1 -0
- package/dist/types/programmers.js +5 -0
- package/dist/types/programmers.js.map +1 -0
- package/dist/utils/browser-pool.d.ts +93 -0
- package/dist/utils/browser-pool.d.ts.map +1 -0
- package/dist/utils/browser-pool.js +193 -0
- package/dist/utils/browser-pool.js.map +1 -0
- package/dist/utils/cache-stats.d.ts +60 -0
- package/dist/utils/cache-stats.d.ts.map +1 -0
- package/dist/utils/cache-stats.js +78 -0
- package/dist/utils/cache-stats.js.map +1 -0
- package/dist/utils/cache.d.ts +72 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +99 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/html-parser.d.ts +57 -0
- package/dist/utils/html-parser.d.ts.map +1 -0
- package/dist/utils/html-parser.js +383 -0
- package/dist/utils/html-parser.js.map +1 -0
- package/dist/utils/lru-cache.d.ts +124 -0
- package/dist/utils/lru-cache.d.ts.map +1 -0
- package/dist/utils/lru-cache.js +259 -0
- package/dist/utils/lru-cache.js.map +1 -0
- package/dist/utils/programmers-converter.d.ts +15 -0
- package/dist/utils/programmers-converter.d.ts.map +1 -0
- package/dist/utils/programmers-converter.js +41 -0
- package/dist/utils/programmers-converter.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +145 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +244 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/tier-converter.d.ts +108 -0
- package/dist/utils/tier-converter.d.ts.map +1 -0
- package/dist/utils/tier-converter.js +198 -0
- package/dist/utils/tier-converter.js.map +1 -0
- package/dist/utils/url-parser.d.ts +25 -0
- package/dist/utils/url-parser.d.ts.map +1 -0
- package/dist/utils/url-parser.js +45 -0
- package/dist/utils/url-parser.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_problem ๋๊ตฌ
|
|
3
|
+
*
|
|
4
|
+
* ํน์ BOJ ๋ฌธ์ ์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { SolvedAcClient } from '../api/solvedac-client.js';
|
|
8
|
+
import { ProblemNotFoundError } from '../api/types.js';
|
|
9
|
+
import { getTierBadge, levelToTier } from '../utils/tier-converter.js';
|
|
10
|
+
/**
|
|
11
|
+
* ์
๋ ฅ ์คํค๋ง
|
|
12
|
+
*/
|
|
13
|
+
export const GetProblemInputSchema = z.object({
|
|
14
|
+
problem_id: z.number().int().positive().describe('BOJ ๋ฌธ์ ๋ฒํธ (์์ ์ ์)'),
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* ํ๊ธ ํ๊ทธ๋ช
์ถ์ถ (์ฐ์ ์์: ํ๊ธ > ์์ด > ํค)
|
|
18
|
+
*/
|
|
19
|
+
function getKoreanTagName(tag) {
|
|
20
|
+
const korean = tag.displayNames.find(dn => dn.language === 'ko');
|
|
21
|
+
if (korean)
|
|
22
|
+
return korean.name;
|
|
23
|
+
const english = tag.displayNames.find(dn => dn.language === 'en');
|
|
24
|
+
if (english)
|
|
25
|
+
return english.name;
|
|
26
|
+
return tag.key;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* ๋ฌธ์ ์์ธ ์ ๋ณด๋ฅผ ๋งํฌ๋ค์ด์ผ๋ก ํฌ๋งทํ
|
|
30
|
+
*/
|
|
31
|
+
function formatProblemDetail(problem) {
|
|
32
|
+
const tierBadge = getTierBadge(problem.level);
|
|
33
|
+
const tierName = levelToTier(problem.level);
|
|
34
|
+
const bojLink = `https://www.acmicpc.net/problem/${problem.problemId}`;
|
|
35
|
+
let result = `# [${problem.problemId}] ${problem.titleKo}\n\n`;
|
|
36
|
+
// ๊ธฐ๋ณธ ์ ๋ณด
|
|
37
|
+
result += `## ๐ ๊ธฐ๋ณธ ์ ๋ณด\n\n`;
|
|
38
|
+
result += `- **๋ฌธ์ ๋ฒํธ**: ${problem.problemId}\n`;
|
|
39
|
+
result += `- **์ ๋ชฉ**: ${problem.titleKo}\n`;
|
|
40
|
+
result += `- **๋์ด๋**: ${tierBadge} (๋ ๋ฒจ ${problem.level})\n`;
|
|
41
|
+
result += `- **๋งํฌ**: [BOJ ${problem.problemId}](${bojLink})\n\n`;
|
|
42
|
+
// ํ๊ทธ
|
|
43
|
+
if (problem.tags.length > 0) {
|
|
44
|
+
result += `## ๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํ๊ทธ\n\n`;
|
|
45
|
+
const tagList = problem.tags.map(tag => {
|
|
46
|
+
const koreanName = getKoreanTagName(tag);
|
|
47
|
+
return `- **${koreanName}** (\`${tag.key}\`)`;
|
|
48
|
+
}).join('\n');
|
|
49
|
+
result += `${tagList}\n\n`;
|
|
50
|
+
}
|
|
51
|
+
// ํต๊ณ
|
|
52
|
+
result += `## ๐ ํต๊ณ\n\n`;
|
|
53
|
+
result += `- **ํด๊ฒฐํ ์ฌ์ฉ์**: ${problem.acceptedUserCount.toLocaleString()}๋ช
\n`;
|
|
54
|
+
result += `- **ํ๊ท ์๋ ํ์**: ${problem.averageTries.toFixed(1)}ํ\n`;
|
|
55
|
+
// ํ์ด ๊ฐ๋ฅ ์ฌ๋ถ
|
|
56
|
+
if (problem.isSolvable !== undefined) {
|
|
57
|
+
result += `- **ํ์ด ๊ฐ๋ฅ**: ${problem.isSolvable ? 'โ
์' : 'โ ์๋์ค'}\n`;
|
|
58
|
+
}
|
|
59
|
+
if (problem.isPartial !== undefined) {
|
|
60
|
+
result += `- **๋ถ๋ถ ์ ์**: ${problem.isPartial ? 'โ
์์' : 'โ ์์'}\n`;
|
|
61
|
+
}
|
|
62
|
+
result += `\n---\n`;
|
|
63
|
+
result += `๐ก **ํ**: ์ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด BOJ์์ ๋ฌธ์ ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.\n`;
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* ๋ฌธ์ ์์ธ ์กฐํ ๋๊ตฌ ํธ๋ค๋ฌ
|
|
68
|
+
*/
|
|
69
|
+
export async function getProblem(input) {
|
|
70
|
+
const client = new SolvedAcClient();
|
|
71
|
+
try {
|
|
72
|
+
// API ํธ์ถ
|
|
73
|
+
const problem = await client.getProblem(input.problem_id);
|
|
74
|
+
// ๊ฒฐ๊ณผ ํฌ๋งทํ
|
|
75
|
+
return formatProblemDetail(problem);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
// ์๋ฌ ์ฒ๋ฆฌ
|
|
79
|
+
if (error instanceof ProblemNotFoundError) {
|
|
80
|
+
throw new Error(`๋ฌธ์ ${input.problem_id}๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ฒํธ๋ฅผ ํ์ธํด์ฃผ์ธ์.\n` +
|
|
81
|
+
`BOJ ๋งํฌ: https://www.acmicpc.net/problem/${input.problem_id}`);
|
|
82
|
+
}
|
|
83
|
+
if (error instanceof Error) {
|
|
84
|
+
throw new Error(`๋ฌธ์ ์กฐํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: ${error.message}`);
|
|
85
|
+
}
|
|
86
|
+
throw new Error('๋ฌธ์ ์กฐํ ์ค ์ ์ ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=get-problem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-problem.js","sourceRoot":"","sources":["../../src/tools/get-problem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_programmers_problem MCP ๋๊ตฌ
|
|
3
|
+
*
|
|
4
|
+
* Phase 7 - Task 7.5: ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ์์ธ ์กฐํ MCP ๋๊ตฌ ๊ตฌํ
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* ์
๋ ฅ ์คํค๋ง (URL ๋๋ ์ซ์ ๋ชจ๋ ์ง์)
|
|
9
|
+
*/
|
|
10
|
+
export declare const GetProgrammersProblemInputSchema: z.ZodObject<{
|
|
11
|
+
problem_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
problem_id: string | number;
|
|
14
|
+
}, {
|
|
15
|
+
problem_id: string | number;
|
|
16
|
+
}>;
|
|
17
|
+
export type GetProgrammersProblemInput = z.infer<typeof GetProgrammersProblemInputSchema>;
|
|
18
|
+
/**
|
|
19
|
+
* MCP TextContent ํ์
|
|
20
|
+
*/
|
|
21
|
+
interface TextContent {
|
|
22
|
+
type: 'text';
|
|
23
|
+
text: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* get_programmers_problem ๋๊ตฌ ํธ๋ค๋ฌ
|
|
27
|
+
*
|
|
28
|
+
* @param args - ์
๋ ฅ ์ธ์ (problem_id)
|
|
29
|
+
* @returns ProgrammersProblemDetail ๋งํฌ๋ค์ด ๋ฌธ์์ด
|
|
30
|
+
* @throws {Error} ๊ฒ์ฆ ์คํจ, ์คํฌ๋ํ ์คํจ, ํ์ฑ ์คํจ ์
|
|
31
|
+
*/
|
|
32
|
+
export declare function handleGetProgrammersProblem(args: unknown): Promise<TextContent>;
|
|
33
|
+
/**
|
|
34
|
+
* ํ
์คํธ์ฉ ๋ณ์นญ (backward compatibility)
|
|
35
|
+
*/
|
|
36
|
+
export declare const getProgrammersProblem: typeof handleGetProgrammersProblem;
|
|
37
|
+
/**
|
|
38
|
+
* MCP ๋๊ตฌ ์ ์
|
|
39
|
+
*/
|
|
40
|
+
export declare function getProgrammersProblemTool(): {
|
|
41
|
+
name: string;
|
|
42
|
+
description: string;
|
|
43
|
+
inputSchema: z.ZodObject<{
|
|
44
|
+
problem_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
problem_id: string | number;
|
|
47
|
+
}, {
|
|
48
|
+
problem_id: string | number;
|
|
49
|
+
}>;
|
|
50
|
+
handler: typeof handleGetProgrammersProblem;
|
|
51
|
+
};
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=get-programmers-problem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-programmers-problem.d.ts","sourceRoot":"","sources":["../../src/tools/get-programmers-problem.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;;;;EAG3C,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F;;GAEG;AACH,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAsDrF;AAoED;;GAEG;AACH,eAAO,MAAM,qBAAqB,oCAA8B,CAAC;AAEjE;;GAEG;AACH,wBAAgB,yBAAyB;;;;;;;;;;;EA0BxC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_programmers_problem MCP ๋๊ตฌ
|
|
3
|
+
*
|
|
4
|
+
* Phase 7 - Task 7.5: ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ์์ธ ์กฐํ MCP ๋๊ตฌ ๊ตฌํ
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { ProgrammersScraper, ProgrammersScrapeError } from '../api/programmers-scraper.js';
|
|
8
|
+
import { parseProgrammersUrl } from '../utils/url-parser.js';
|
|
9
|
+
/**
|
|
10
|
+
* ์
๋ ฅ ์คํค๋ง (URL ๋๋ ์ซ์ ๋ชจ๋ ์ง์)
|
|
11
|
+
*/
|
|
12
|
+
export const GetProgrammersProblemInputSchema = z.object({
|
|
13
|
+
problem_id: z.union([z.string(), z.number()])
|
|
14
|
+
.describe('๋ฌธ์ ID ๋๋ ํ๋ก๊ทธ๋๋จธ์ค URL. ์: 42748 ๋๋ https://school.programmers.co.kr/learn/courses/30/lessons/42748'),
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* get_programmers_problem ๋๊ตฌ ํธ๋ค๋ฌ
|
|
18
|
+
*
|
|
19
|
+
* @param args - ์
๋ ฅ ์ธ์ (problem_id)
|
|
20
|
+
* @returns ProgrammersProblemDetail ๋งํฌ๋ค์ด ๋ฌธ์์ด
|
|
21
|
+
* @throws {Error} ๊ฒ์ฆ ์คํจ, ์คํฌ๋ํ ์คํจ, ํ์ฑ ์คํจ ์
|
|
22
|
+
*/
|
|
23
|
+
export async function handleGetProgrammersProblem(args) {
|
|
24
|
+
try {
|
|
25
|
+
// 1. ์
๋ ฅ ๊ฒ์ฆ
|
|
26
|
+
const { problem_id } = GetProgrammersProblemInputSchema.parse(args);
|
|
27
|
+
// 2. URL ํ์ฑ (URL ๋๋ ์ซ์ ๋ชจ๋ ์ง์)
|
|
28
|
+
const problemId = parseProgrammersUrl(problem_id);
|
|
29
|
+
if (!problemId) {
|
|
30
|
+
throw new Error(`์ ํจํ์ง ์์ ๋ฌธ์ ID ๋๋ URL: ${problem_id}`);
|
|
31
|
+
}
|
|
32
|
+
// 3. ํ๋ก๊ทธ๋๋จธ์ค ์คํฌ๋ํ
|
|
33
|
+
const scraper = new ProgrammersScraper();
|
|
34
|
+
const detail = await scraper.getProblem(problemId);
|
|
35
|
+
// 4. ๋งํฌ๋ค์ด ํฌ๋งทํ
|
|
36
|
+
const markdown = formatProblemAsMarkdown(detail);
|
|
37
|
+
return {
|
|
38
|
+
type: 'text',
|
|
39
|
+
text: markdown,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
// Zod ๊ฒ์ฆ ์๋ฌ
|
|
44
|
+
if (error instanceof z.ZodError) {
|
|
45
|
+
throw new Error(`์
๋ ฅ ๊ฒ์ฆ ์คํจ: ${error.issues[0].message}`);
|
|
46
|
+
}
|
|
47
|
+
// ํ๋ก๊ทธ๋๋จธ์ค ์คํฌ๋ํ ์๋ฌ
|
|
48
|
+
if (error instanceof ProgrammersScrapeError) {
|
|
49
|
+
const problemId = args.problem_id;
|
|
50
|
+
if (error.code === 'NAVIGATION_ERROR') {
|
|
51
|
+
throw new Error(`๋ฌธ์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: ${problemId}๋ฒ`);
|
|
52
|
+
}
|
|
53
|
+
if (error.code === 'TIMEOUT') {
|
|
54
|
+
throw new Error(`๋ฌธ์ ํ์ด์ง ์์ฒญ์ด ํ์์์๋์์ต๋๋ค: ${problemId}๋ฒ`);
|
|
55
|
+
}
|
|
56
|
+
if (error.code === 'PARSE_ERROR') {
|
|
57
|
+
throw new Error(`๋ฌธ์ ํ์ด์ง ์๋ต์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค: ${error.message}`);
|
|
58
|
+
}
|
|
59
|
+
if (error.code === 'SELECTOR_NOT_FOUND') {
|
|
60
|
+
throw new Error(`HTML ํ์ฑ ์คํจ (ํ์ ์์ ์์): ${error.message}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// ๊ธฐํ ์๋ฌ
|
|
64
|
+
if (error instanceof Error) {
|
|
65
|
+
throw new Error(`ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ์กฐํ ์คํจ: ${error.message}`);
|
|
66
|
+
}
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* ๋ฌธ์ ๋ฅผ ๋งํฌ๋ค์ด์ผ๋ก ํฌ๋งทํ
|
|
72
|
+
*/
|
|
73
|
+
function formatProblemAsMarkdown(problem) {
|
|
74
|
+
const lines = [];
|
|
75
|
+
// ํค๋
|
|
76
|
+
lines.push(`# ${problem.title}\n`);
|
|
77
|
+
lines.push(`**๋ ๋ฒจ**: ${formatLevel(problem.level)} | **์นดํ
๊ณ ๋ฆฌ**: ${problem.category}\n`);
|
|
78
|
+
lines.push(`**๋ฌธ์ ID**: ${problem.problemId}\n`);
|
|
79
|
+
lines.push(`**URL**: https://school.programmers.co.kr/learn/courses/30/lessons/${problem.problemId}\n`);
|
|
80
|
+
lines.push('---\n');
|
|
81
|
+
// ๋ฌธ์ ์ค๋ช
|
|
82
|
+
lines.push('## ๋ฌธ์ ์ค๋ช
\n');
|
|
83
|
+
lines.push(problem.description);
|
|
84
|
+
lines.push('\n');
|
|
85
|
+
// ์ ํ์ฌํญ
|
|
86
|
+
if (problem.constraints.length > 0) {
|
|
87
|
+
lines.push('## ์ ํ์ฌํญ\n');
|
|
88
|
+
problem.constraints.forEach((c) => {
|
|
89
|
+
lines.push(`- ${c}`);
|
|
90
|
+
});
|
|
91
|
+
lines.push('\n');
|
|
92
|
+
}
|
|
93
|
+
// ์
์ถ๋ ฅ ์์
|
|
94
|
+
if (problem.examples.length > 0) {
|
|
95
|
+
lines.push('## ์
์ถ๋ ฅ ์\n');
|
|
96
|
+
lines.push('| ์
๋ ฅ | ์ถ๋ ฅ |');
|
|
97
|
+
lines.push('|------|------|');
|
|
98
|
+
problem.examples.forEach((ex) => {
|
|
99
|
+
lines.push(`| ${ex.input} | ${ex.output} |`);
|
|
100
|
+
});
|
|
101
|
+
lines.push('\n');
|
|
102
|
+
}
|
|
103
|
+
// ์๋ด
|
|
104
|
+
lines.push('---');
|
|
105
|
+
lines.push('');
|
|
106
|
+
lines.push('๐ก **๋ค์ ๋จ๊ณ**:');
|
|
107
|
+
lines.push('- ๋ฌธ์ ๋ถ์: `analyze_programmers_problem` (๊ตฌํ ์์ )');
|
|
108
|
+
lines.push('- ์ฝ๋ ์ ์ถ ๋ถ์: `analyze_code_submission` (BOJ๋ง ์ง์)');
|
|
109
|
+
lines.push('');
|
|
110
|
+
lines.push('โ ๏ธ **์ฐธ๊ณ **: ํ๋ก๊ทธ๋๋จธ์ค ์ฌ์ดํธ์์ ์ง์ ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํฉ๋๋ค.');
|
|
111
|
+
return lines.join('\n');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* ๋ ๋ฒจ ํฌ๋งทํ
|
|
115
|
+
*/
|
|
116
|
+
function formatLevel(level) {
|
|
117
|
+
const levelEmoji = {
|
|
118
|
+
0: '๐ข Lv. 0 (์
๋ฌธ)',
|
|
119
|
+
1: '๐ข Lv. 1',
|
|
120
|
+
2: '๐ก Lv. 2',
|
|
121
|
+
3: '๐ Lv. 3',
|
|
122
|
+
4: '๐ด Lv. 4',
|
|
123
|
+
5: '๐ด Lv. 5',
|
|
124
|
+
};
|
|
125
|
+
return levelEmoji[level] || `Lv. ${level}`;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* ํ
์คํธ์ฉ ๋ณ์นญ (backward compatibility)
|
|
129
|
+
*/
|
|
130
|
+
export const getProgrammersProblem = handleGetProgrammersProblem;
|
|
131
|
+
/**
|
|
132
|
+
* MCP ๋๊ตฌ ์ ์
|
|
133
|
+
*/
|
|
134
|
+
export function getProgrammersProblemTool() {
|
|
135
|
+
return {
|
|
136
|
+
name: 'get_programmers_problem',
|
|
137
|
+
description: `ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ์์ธ ์ ๋ณด ์กฐํ (์น ์คํฌ๋ํ).
|
|
138
|
+
|
|
139
|
+
ํ๋ก๊ทธ๋๋จธ์ค ํ์ด์ง์์ ๋ฌธ์ ์ ๋ชฉ, ์ค๋ช
, ์ ํ์ฌํญ, ์
์ถ๋ ฅ ์์ ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
|
|
140
|
+
|
|
141
|
+
์๋ต ๊ตฌ์กฐ: problemId, title, level, category, description, constraints, examples, tags
|
|
142
|
+
|
|
143
|
+
**์ฌ์ฉ ์๋๋ฆฌ์ค**:
|
|
144
|
+
- ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ํ์ด ์ ๋ฌธ์ ๋ณธ๋ฌธ ํ์ธ
|
|
145
|
+
- ๋ฌธ์ ๋ณต์ต ์ ๋ฌธ์ ๋ด์ฉ ์ฐธ์กฐ
|
|
146
|
+
- ์ฝ๋ ๋ถ์ ์ ๋ฌธ์ ์๊ตฌ์ฌํญ ๋น๊ต
|
|
147
|
+
|
|
148
|
+
**์ ํ์ฌํญ**:
|
|
149
|
+
- ์คํฌ๋ํ ๋์: https://school.programmers.co.kr/learn/courses/30/lessons/{problem_id}
|
|
150
|
+
- ํ์์์: 10์ด
|
|
151
|
+
- ์ฌ์๋: ์ต๋ 2ํ
|
|
152
|
+
- Rate Limiting: ์ด๋น 1ํ
|
|
153
|
+
|
|
154
|
+
**์ฐธ๊ณ **:
|
|
155
|
+
- BOJ์ ๋ค๋ฅด๊ฒ ํ๋ก๊ทธ๋๋จธ์ค๋ fetch + cheerio ์ฌ์ฉ (SSR ํ์ด์ง)
|
|
156
|
+
- ํ๋ก๊ทธ๋๋จธ์ค๋ ํ๊ทธ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก tags ํ๋๋ ๋น ๋ฐฐ์ด`,
|
|
157
|
+
inputSchema: GetProgrammersProblemInputSchema,
|
|
158
|
+
handler: handleGetProgrammersProblem,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=get-programmers-problem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-programmers-problem.js","sourceRoot":"","sources":["../../src/tools/get-programmers-problem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* search_problems ๋๊ตฌ
|
|
3
|
+
*
|
|
4
|
+
* BOJ ๋ฌธ์ ๋ฅผ ํฐ์ด, ํ๊ทธ, ํค์๋๋ก ๊ฒ์ํฉ๋๋ค.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* ์
๋ ฅ ์คํค๋ง
|
|
9
|
+
*
|
|
10
|
+
* level_min/level_max๋ ์ซ์(1-30) ๋๋ ํฐ์ด ๋ฌธ์์ด(์: "์ค๋ฒ 3", "Gold I") ๋ชจ๋ ์ง์
|
|
11
|
+
*/
|
|
12
|
+
export declare const SearchProblemsInputSchema: z.ZodObject<{
|
|
13
|
+
query: z.ZodOptional<z.ZodString>;
|
|
14
|
+
level_min: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodEffects<z.ZodString, number, string>]>>;
|
|
15
|
+
level_max: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodEffects<z.ZodString, number, string>]>>;
|
|
16
|
+
tags: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
|
|
17
|
+
sort: z.ZodOptional<z.ZodEnum<["level", "id", "average_try"]>>;
|
|
18
|
+
direction: z.ZodOptional<z.ZodEnum<["asc", "desc"]>>;
|
|
19
|
+
page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
page: number;
|
|
22
|
+
tags?: string | string[] | undefined;
|
|
23
|
+
sort?: "level" | "id" | "average_try" | undefined;
|
|
24
|
+
query?: string | undefined;
|
|
25
|
+
direction?: "asc" | "desc" | undefined;
|
|
26
|
+
level_min?: number | undefined;
|
|
27
|
+
level_max?: number | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
tags?: string | string[] | undefined;
|
|
30
|
+
sort?: "level" | "id" | "average_try" | undefined;
|
|
31
|
+
query?: string | undefined;
|
|
32
|
+
direction?: "asc" | "desc" | undefined;
|
|
33
|
+
page?: number | undefined;
|
|
34
|
+
level_min?: string | number | undefined;
|
|
35
|
+
level_max?: string | number | undefined;
|
|
36
|
+
}>;
|
|
37
|
+
export type SearchProblemsInput = z.infer<typeof SearchProblemsInputSchema>;
|
|
38
|
+
/**
|
|
39
|
+
* ๋ฌธ์ ๊ฒ์ ๋๊ตฌ ํธ๋ค๋ฌ
|
|
40
|
+
*/
|
|
41
|
+
export declare function searchProblems(input: SearchProblemsInput): Promise<string>;
|
|
42
|
+
//# sourceMappingURL=search-problems.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-problems.d.ts","sourceRoot":"","sources":["../../src/tools/search-problems.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;EA2CpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAiD5E;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiChF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* search_problems ๋๊ตฌ
|
|
3
|
+
*
|
|
4
|
+
* BOJ ๋ฌธ์ ๋ฅผ ํฐ์ด, ํ๊ทธ, ํค์๋๋ก ๊ฒ์ํฉ๋๋ค.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { SolvedAcClient } from '../api/solvedac-client.js';
|
|
8
|
+
import { getTierBadge, parseTierString } from '../utils/tier-converter.js';
|
|
9
|
+
/**
|
|
10
|
+
* ์
๋ ฅ ์คํค๋ง
|
|
11
|
+
*
|
|
12
|
+
* level_min/level_max๋ ์ซ์(1-30) ๋๋ ํฐ์ด ๋ฌธ์์ด(์: "์ค๋ฒ 3", "Gold I") ๋ชจ๋ ์ง์
|
|
13
|
+
*/
|
|
14
|
+
export const SearchProblemsInputSchema = z.object({
|
|
15
|
+
query: z.string().optional().describe('๊ฒ์ ํค์๋ (์ ๋ชฉ, ๋ฒํธ, ํ๊ทธ ๋ฑ)'),
|
|
16
|
+
level_min: z
|
|
17
|
+
.union([
|
|
18
|
+
z.number().int().min(1).max(30),
|
|
19
|
+
z.string().transform((val, ctx) => {
|
|
20
|
+
try {
|
|
21
|
+
return parseTierString(val);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
ctx.addIssue({
|
|
25
|
+
code: z.ZodIssueCode.custom,
|
|
26
|
+
message: error instanceof Error ? error.message : 'ํฐ์ด ํ์ฑ ์คํจ',
|
|
27
|
+
});
|
|
28
|
+
return z.NEVER;
|
|
29
|
+
}
|
|
30
|
+
}),
|
|
31
|
+
])
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('์ต์ ๋์ด๋ (์ซ์ 1-30 ๋๋ "์ค๋ฒ 3", "Gold I" ํ์)'),
|
|
34
|
+
level_max: z
|
|
35
|
+
.union([
|
|
36
|
+
z.number().int().min(1).max(30),
|
|
37
|
+
z.string().transform((val, ctx) => {
|
|
38
|
+
try {
|
|
39
|
+
return parseTierString(val);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
ctx.addIssue({
|
|
43
|
+
code: z.ZodIssueCode.custom,
|
|
44
|
+
message: error instanceof Error ? error.message : 'ํฐ์ด ํ์ฑ ์คํจ',
|
|
45
|
+
});
|
|
46
|
+
return z.NEVER;
|
|
47
|
+
}
|
|
48
|
+
}),
|
|
49
|
+
])
|
|
50
|
+
.optional()
|
|
51
|
+
.describe('์ต๋ ๋์ด๋ (์ซ์ 1-30 ๋๋ "์ค๋ฒ 3", "Gold I" ํ์)'),
|
|
52
|
+
tags: z
|
|
53
|
+
.union([z.string(), z.array(z.string())])
|
|
54
|
+
.optional()
|
|
55
|
+
.describe('์๊ณ ๋ฆฌ์ฆ ํ๊ทธ (์: "dp" ๋๋ ["dp", "greedy", "bfs"])'),
|
|
56
|
+
sort: z.enum(['level', 'id', 'average_try']).optional().describe('์ ๋ ฌ ๊ธฐ์ค'),
|
|
57
|
+
direction: z.enum(['asc', 'desc']).optional().describe('์ ๋ ฌ ๋ฐฉํฅ'),
|
|
58
|
+
page: z.number().int().min(1).optional().default(1).describe('ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ: 1)'),
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* ํ๊ธ ํ๊ทธ๋ช
์ถ์ถ
|
|
62
|
+
*/
|
|
63
|
+
function getKoreanTagName(tag) {
|
|
64
|
+
const korean = tag.displayNames.find(dn => dn.language === 'ko');
|
|
65
|
+
return korean?.name || tag.key;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* ๋ฌธ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋งํฌ๋ค์ด ํ
์ด๋ธ๋ก ํฌ๋งทํ
|
|
69
|
+
*/
|
|
70
|
+
function formatSearchResults(items, count, page) {
|
|
71
|
+
if (items.length === 0) {
|
|
72
|
+
return '๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.';
|
|
73
|
+
}
|
|
74
|
+
let result = `# ๋ฌธ์ ๊ฒ์ ๊ฒฐ๊ณผ\n\n`;
|
|
75
|
+
result += `**์ด ${count}๊ฐ ๋ฌธ์ ** (${page}ํ์ด์ง)\n\n`;
|
|
76
|
+
result += `| ๋ฒํธ | ์ ๋ชฉ | ๋์ด๋ | ํ๊ทธ | ํด๊ฒฐ์ ์ | ํ๊ท ์๋ |\n`;
|
|
77
|
+
result += `|------|------|--------|------|-----------|----------|\n`;
|
|
78
|
+
for (const problem of items) {
|
|
79
|
+
const tierBadge = getTierBadge(problem.level);
|
|
80
|
+
const tags = problem.tags.slice(0, 3).map(getKoreanTagName).join(', ');
|
|
81
|
+
const tagsDisplay = problem.tags.length > 3 ? `${tags}...` : tags;
|
|
82
|
+
const bojLink = `https://www.acmicpc.net/problem/${problem.problemId}`;
|
|
83
|
+
result += `| [${problem.problemId}](${bojLink}) | ${problem.titleKo} | ${tierBadge} | ${tagsDisplay} | ${problem.acceptedUserCount.toLocaleString()}๋ช
| ${problem.averageTries.toFixed(1)}ํ |\n`;
|
|
84
|
+
}
|
|
85
|
+
result += `\n---\n`;
|
|
86
|
+
result += `๐ก **ํ**: ๋ฌธ์ ๋ฒํธ๋ฅผ ํด๋ฆญํ๋ฉด BOJ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.\n`;
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* ๋ฌธ์ ๊ฒ์ ๋๊ตฌ ํธ๋ค๋ฌ
|
|
91
|
+
*/
|
|
92
|
+
export async function searchProblems(input) {
|
|
93
|
+
// ์
๋ ฅ ๊ฒ์ฆ
|
|
94
|
+
if (input.level_min !== undefined && input.level_max !== undefined) {
|
|
95
|
+
if (input.level_min > input.level_max) {
|
|
96
|
+
throw new Error('level_min์ level_max๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const client = new SolvedAcClient();
|
|
100
|
+
try {
|
|
101
|
+
// API ํธ์ถ
|
|
102
|
+
const params = {
|
|
103
|
+
query: input.query,
|
|
104
|
+
level_min: input.level_min,
|
|
105
|
+
level_max: input.level_max,
|
|
106
|
+
tags: input.tags,
|
|
107
|
+
sort: input.sort,
|
|
108
|
+
direction: input.direction,
|
|
109
|
+
page: input.page,
|
|
110
|
+
};
|
|
111
|
+
const result = await client.searchProblems(params);
|
|
112
|
+
// ๊ฒฐ๊ณผ ํฌ๋งทํ
|
|
113
|
+
return formatSearchResults(result.items, result.count, input.page);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
// ์๋ฌ ๋ฉ์์ง ํฌ๋งทํ
|
|
117
|
+
if (error instanceof Error) {
|
|
118
|
+
throw new Error(`๋ฌธ์ ๊ฒ์ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: ${error.message}`);
|
|
119
|
+
}
|
|
120
|
+
throw new Error('๋ฌธ์ ๊ฒ์ ์ค ์ ์ ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=search-problems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-problems.js","sourceRoot":"","sources":["../../src/tools/search-problems.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAe,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAExF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC9D,SAAS,EAAE,CAAC;SACT,KAAK,CAAC;QACL,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAChC,IAAI,CAAC;gBACH,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,QAAQ,CAAC;oBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;iBAC7D,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,KAAK,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;KACH,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,SAAS,EAAE,CAAC;SACT,KAAK,CAAC;QACL,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAChC,IAAI,CAAC;gBACH,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,QAAQ,CAAC;oBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;iBAC7D,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,KAAK,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;KACH,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SACxC,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAC/E,CAAC,CAAC;AAIH;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAA6E;IACrG,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IACjE,OAAO,MAAM,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,KAOE,EACF,KAAa,EACb,IAAY;IAEZ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,MAAM,GAAG,gBAAgB,CAAC;IAC9B,MAAM,IAAI,OAAO,KAAK,WAAW,IAAI,UAAU,CAAC;IAChD,MAAM,IAAI,0CAA0C,CAAC;IACrD,MAAM,IAAI,0DAA0D,CAAC;IAErE,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,MAAM,OAAO,GAAG,mCAAmC,OAAO,CAAC,SAAS,EAAE,CAAC;QAEvE,MAAM,IAAI,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO,OAAO,OAAO,CAAC,OAAO,MAAM,SAAS,MAAM,WAAW,MAAM,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACnM,CAAC;IAED,MAAM,IAAI,SAAS,CAAC;IACpB,MAAM,IAAI,yCAAyC,CAAC;IAEpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAC7D,QAAQ;IACR,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnE,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;IAEpC,IAAI,CAAC;QACH,SAAS;QACT,MAAM,MAAM,GAAiB;YAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEnD,SAAS;QACT,OAAO,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa;QACb,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* search_programmers_problems MCP ๋๊ตฌ
|
|
3
|
+
*
|
|
4
|
+
* Phase 7 - Task 7.5: ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๊ฒ์ MCP ๋๊ตฌ
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* ์
๋ ฅ ์คํค๋ง
|
|
9
|
+
*/
|
|
10
|
+
export declare const SearchProgrammersProblemsInputSchema: z.ZodObject<{
|
|
11
|
+
levels: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
|
|
12
|
+
order: z.ZodOptional<z.ZodEnum<["recent", "accuracy", "popular"]>>;
|
|
13
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
15
|
+
query: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
query?: string | undefined;
|
|
18
|
+
page?: number | undefined;
|
|
19
|
+
levels?: number[] | undefined;
|
|
20
|
+
order?: "recent" | "accuracy" | "popular" | undefined;
|
|
21
|
+
limit?: number | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
query?: string | undefined;
|
|
24
|
+
page?: number | undefined;
|
|
25
|
+
levels?: number[] | undefined;
|
|
26
|
+
order?: "recent" | "accuracy" | "popular" | undefined;
|
|
27
|
+
limit?: number | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
export type SearchProgrammersProblemsInput = z.infer<typeof SearchProgrammersProblemsInputSchema>;
|
|
30
|
+
/**
|
|
31
|
+
* MCP TextContent ํ์
|
|
32
|
+
*/
|
|
33
|
+
interface TextContent {
|
|
34
|
+
type: 'text';
|
|
35
|
+
text: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๊ฒ์ ๋๊ตฌ ํธ๋ค๋ฌ
|
|
39
|
+
*
|
|
40
|
+
* @param args - ์
๋ ฅ ์ธ์
|
|
41
|
+
* @returns ๋ฌธ์ ๋ชฉ๋ก (๋งํฌ๋ค์ด ํ
์ด๋ธ ํ์)
|
|
42
|
+
* @throws {Error} ๊ฒ์ฆ ์คํจ ๋๋ ์คํฌ๋ํ ์คํจ ์
|
|
43
|
+
*/
|
|
44
|
+
export declare function searchProgrammersProblems(args: unknown): Promise<TextContent>;
|
|
45
|
+
/**
|
|
46
|
+
* MCP ๋๊ตฌ ์ ์
|
|
47
|
+
*/
|
|
48
|
+
export declare function searchProgrammersProblemsTool(): {
|
|
49
|
+
name: string;
|
|
50
|
+
description: string;
|
|
51
|
+
inputSchema: z.ZodObject<{
|
|
52
|
+
levels: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
|
|
53
|
+
order: z.ZodOptional<z.ZodEnum<["recent", "accuracy", "popular"]>>;
|
|
54
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
55
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
56
|
+
query: z.ZodOptional<z.ZodString>;
|
|
57
|
+
}, "strip", z.ZodTypeAny, {
|
|
58
|
+
query?: string | undefined;
|
|
59
|
+
page?: number | undefined;
|
|
60
|
+
levels?: number[] | undefined;
|
|
61
|
+
order?: "recent" | "accuracy" | "popular" | undefined;
|
|
62
|
+
limit?: number | undefined;
|
|
63
|
+
}, {
|
|
64
|
+
query?: string | undefined;
|
|
65
|
+
page?: number | undefined;
|
|
66
|
+
levels?: number[] | undefined;
|
|
67
|
+
order?: "recent" | "accuracy" | "popular" | undefined;
|
|
68
|
+
limit?: number | undefined;
|
|
69
|
+
}>;
|
|
70
|
+
handler: typeof searchProgrammersProblems;
|
|
71
|
+
};
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=search-programmers-problems.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-programmers-problems.d.ts","sourceRoot":"","sources":["../../src/tools/search-programmers-problems.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;EAW/C,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAElG;;GAEG;AACH,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA8CnF;AA0FD;;GAEG;AACH,wBAAgB,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;EA0B5C"}
|