algokit-mcp 1.0.2 → 1.0.4

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.
Files changed (102) hide show
  1. package/README.md +139 -17
  2. package/dist/api/boj-scraper.js +1 -1
  3. package/dist/api/boj-scraper.js.map +1 -1
  4. package/dist/api/programmers-scraper.d.ts +0 -5
  5. package/dist/api/programmers-scraper.d.ts.map +1 -1
  6. package/dist/api/programmers-scraper.js +59 -90
  7. package/dist/api/programmers-scraper.js.map +1 -1
  8. package/dist/index.js +38 -35
  9. package/dist/index.js.map +1 -1
  10. package/dist/tools/boj/analyze-code-submission-boj.d.ts +67 -0
  11. package/dist/tools/boj/analyze-code-submission-boj.d.ts.map +1 -0
  12. package/dist/tools/boj/analyze-code-submission-boj.js +91 -0
  13. package/dist/tools/boj/analyze-code-submission-boj.js.map +1 -0
  14. package/dist/tools/boj/analyze-problem-boj.d.ts +48 -0
  15. package/dist/tools/boj/analyze-problem-boj.d.ts.map +1 -0
  16. package/dist/tools/boj/analyze-problem-boj.js +52 -0
  17. package/dist/tools/boj/analyze-problem-boj.js.map +1 -0
  18. package/dist/tools/boj/fetch-problem-content-boj.d.ts +49 -0
  19. package/dist/tools/boj/fetch-problem-content-boj.d.ts.map +1 -0
  20. package/dist/tools/boj/fetch-problem-content-boj.js +95 -0
  21. package/dist/tools/boj/fetch-problem-content-boj.js.map +1 -0
  22. package/dist/tools/boj/generate-hint-boj.d.ts +42 -0
  23. package/dist/tools/boj/generate-hint-boj.d.ts.map +1 -0
  24. package/dist/tools/boj/generate-hint-boj.js +82 -0
  25. package/dist/tools/boj/generate-hint-boj.js.map +1 -0
  26. package/dist/tools/boj/generate-review-template-boj.d.ts +48 -0
  27. package/dist/tools/boj/generate-review-template-boj.d.ts.map +1 -0
  28. package/dist/tools/boj/generate-review-template-boj.js +52 -0
  29. package/dist/tools/boj/generate-review-template-boj.js.map +1 -0
  30. package/dist/tools/boj/get-problem-boj.d.ts +22 -0
  31. package/dist/tools/boj/get-problem-boj.d.ts.map +1 -0
  32. package/dist/tools/boj/get-problem-boj.js +89 -0
  33. package/dist/tools/boj/get-problem-boj.js.map +1 -0
  34. package/dist/tools/boj/search-problems-boj.d.ts +42 -0
  35. package/dist/tools/boj/search-problems-boj.d.ts.map +1 -0
  36. package/dist/tools/boj/search-problems-boj.js +143 -0
  37. package/dist/tools/boj/search-problems-boj.js.map +1 -0
  38. package/dist/tools/boj/search-tags-boj.d.ts +22 -0
  39. package/dist/tools/boj/search-tags-boj.d.ts.map +1 -0
  40. package/dist/tools/boj/search-tags-boj.js +70 -0
  41. package/dist/tools/boj/search-tags-boj.js.map +1 -0
  42. package/dist/tools/get-problem-boj.d.ts +22 -0
  43. package/dist/tools/get-problem-boj.d.ts.map +1 -0
  44. package/dist/tools/get-problem-boj.js +89 -0
  45. package/dist/tools/get-problem-boj.js.map +1 -0
  46. package/dist/tools/programmers/analyze-code-submission-programmers.d.ts +60 -0
  47. package/dist/tools/programmers/analyze-code-submission-programmers.d.ts.map +1 -0
  48. package/dist/tools/programmers/analyze-code-submission-programmers.js +85 -0
  49. package/dist/tools/programmers/analyze-code-submission-programmers.js.map +1 -0
  50. package/dist/tools/programmers/analyze-problem-programmers.d.ts +48 -0
  51. package/dist/tools/programmers/analyze-problem-programmers.d.ts.map +1 -0
  52. package/dist/tools/programmers/analyze-problem-programmers.js +53 -0
  53. package/dist/tools/programmers/analyze-problem-programmers.js.map +1 -0
  54. package/dist/tools/programmers/fetch-problem-content-programmers.d.ts +46 -0
  55. package/dist/tools/programmers/fetch-problem-content-programmers.d.ts.map +1 -0
  56. package/dist/tools/programmers/fetch-problem-content-programmers.js +76 -0
  57. package/dist/tools/programmers/fetch-problem-content-programmers.js.map +1 -0
  58. package/dist/tools/programmers/generate-hint-programmers.d.ts +42 -0
  59. package/dist/tools/programmers/generate-hint-programmers.d.ts.map +1 -0
  60. package/dist/tools/programmers/generate-hint-programmers.js +80 -0
  61. package/dist/tools/programmers/generate-hint-programmers.js.map +1 -0
  62. package/dist/tools/programmers/generate-review-template-programmers.d.ts +48 -0
  63. package/dist/tools/programmers/generate-review-template-programmers.d.ts.map +1 -0
  64. package/dist/tools/programmers/generate-review-template-programmers.js +53 -0
  65. package/dist/tools/programmers/generate-review-template-programmers.js.map +1 -0
  66. package/dist/tools/programmers/get-problem-programmers.d.ts +53 -0
  67. package/dist/tools/programmers/get-problem-programmers.d.ts.map +1 -0
  68. package/dist/tools/programmers/get-problem-programmers.js +163 -0
  69. package/dist/tools/programmers/get-problem-programmers.js.map +1 -0
  70. package/dist/tools/programmers/search-problems-programmers.d.ts +73 -0
  71. package/dist/tools/programmers/search-problems-programmers.d.ts.map +1 -0
  72. package/dist/tools/programmers/search-problems-programmers.js +173 -0
  73. package/dist/tools/programmers/search-problems-programmers.js.map +1 -0
  74. package/dist/tools/search-problems-boj.d.ts +42 -0
  75. package/dist/tools/search-problems-boj.d.ts.map +1 -0
  76. package/dist/tools/search-problems-boj.js +143 -0
  77. package/dist/tools/search-problems-boj.js.map +1 -0
  78. package/dist/tools/search-tags-boj.d.ts +22 -0
  79. package/dist/tools/search-tags-boj.d.ts.map +1 -0
  80. package/dist/tools/search-tags-boj.js +70 -0
  81. package/dist/tools/search-tags-boj.js.map +1 -0
  82. package/dist/utils/agent-skill-installer.d.ts +9 -0
  83. package/dist/utils/agent-skill-installer.d.ts.map +1 -0
  84. package/dist/utils/agent-skill-installer.js +94 -0
  85. package/dist/utils/agent-skill-installer.js.map +1 -0
  86. package/dist/utils/claudecode-skill-installer.d.ts +6 -0
  87. package/dist/utils/claudecode-skill-installer.d.ts.map +1 -0
  88. package/dist/utils/claudecode-skill-installer.js +70 -0
  89. package/dist/utils/claudecode-skill-installer.js.map +1 -0
  90. package/dist/utils/skill-installer.d.ts +6 -0
  91. package/dist/utils/skill-installer.d.ts.map +1 -0
  92. package/dist/utils/skill-installer.js +70 -0
  93. package/dist/utils/skill-installer.js.map +1 -0
  94. package/dist/utils/tier-converter.d.ts.map +1 -1
  95. package/dist/utils/tier-converter.js +3 -0
  96. package/dist/utils/tier-converter.js.map +1 -1
  97. package/package.json +3 -4
  98. package/skills/algo:code-review/SKILL.md +134 -0
  99. package/skills/algo:fetch/SKILL.md +102 -0
  100. package/skills/algo:hint/SKILL.md +111 -0
  101. package/skills/algo:review/SKILL.md +123 -0
  102. package/skills/algo:search/SKILL.md +122 -0
@@ -0,0 +1,42 @@
1
+ /**
2
+ * generate_hint_programmers MCP 도구
3
+ *
4
+ * 프로그래머스 문제 힌트 가이드 생성 (SRP: 힌트만)
5
+ */
6
+ import { z } from 'zod';
7
+ import type { ProgrammersProblemAnalyzer } from '../../services/programmers-problem-analyzer.js';
8
+ /**
9
+ * 입력 스키마
10
+ */
11
+ export declare const GenerateHintProgrammersInputSchema: z.ZodObject<{
12
+ problem_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ problem_id: string | number;
15
+ }, {
16
+ problem_id: string | number;
17
+ }>;
18
+ export type GenerateHintProgrammersInput = z.infer<typeof GenerateHintProgrammersInputSchema>;
19
+ /**
20
+ * MCP TextContent 타입
21
+ */
22
+ interface TextContent {
23
+ type: 'text';
24
+ text: string;
25
+ }
26
+ /**
27
+ * generate_hint_programmers 도구 핸들러
28
+ */
29
+ export declare function generateHintProgrammersTool(analyzer: ProgrammersProblemAnalyzer): {
30
+ name: string;
31
+ description: string;
32
+ inputSchema: z.ZodObject<{
33
+ problem_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ problem_id: string | number;
36
+ }, {
37
+ problem_id: string | number;
38
+ }>;
39
+ handler: (input: GenerateHintProgrammersInput) => Promise<TextContent>;
40
+ };
41
+ export {};
42
+ //# sourceMappingURL=generate-hint-programmers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-hint-programmers.d.ts","sourceRoot":"","sources":["../../../src/tools/programmers/generate-hint-programmers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAIjG;;GAEG;AACH,eAAO,MAAM,kCAAkC;;;;;;EAG7C,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F;;GAEG;AACH,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,0BAA0B;;;;;;;;;;qBAkCrD,4BAA4B,KAAG,OAAO,CAAC,WAAW,CAAC;EA8B7E"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * generate_hint_programmers MCP 도구
3
+ *
4
+ * 프로그래머스 문제 힌트 가이드 생성 (SRP: 힌트만)
5
+ */
6
+ import { z } from 'zod';
7
+ import { ProgrammersScrapeError } from '../../api/programmers-scraper.js';
8
+ import { parseProgrammersUrl } from '../../utils/url-parser.js';
9
+ /**
10
+ * 입력 스키마
11
+ */
12
+ export const GenerateHintProgrammersInputSchema = z.object({
13
+ problem_id: z.union([z.string(), z.number()])
14
+ .describe('프로그래머스 문제 ID 또는 URL'),
15
+ });
16
+ /**
17
+ * generate_hint_programmers 도구 핸들러
18
+ */
19
+ export function generateHintProgrammersTool(analyzer) {
20
+ return {
21
+ name: 'generate_hint_programmers',
22
+ description: `프로그래머스 문제 힌트 생성. 3단계 가이드 프롬프트 제공.
23
+
24
+ 🎯 **핵심: 한 번에 1개 레벨 힌트만 제공. 1,2,3 단계를 동시에 제시하지 마세요.**
25
+
26
+ 📋 응답에 포함된 정보:
27
+ - hint_levels[0]: Level 1 - 문제 분석 (처음 시도)
28
+ - hint_levels[1]: Level 2 - 핵심 아이디어 (부분 구현)
29
+ - hint_levels[2]: Level 3 - 상세 풀이 (거의 완성)
30
+
31
+ 🤖 **사용자 상황 판단 → 적절한 1개 레벨만 제시**:
32
+
33
+ 1️⃣ Level 1 제시 (처음/막힐 때):
34
+ "사용자가 코드 없거나 어디서부터 시작해야 할지 모를 때"
35
+ → hint_levels[0].prompt로 문제 접근법 제시
36
+
37
+ 2️⃣ Level 2 제시 (다시 요청하거나 부분 구현 언급):
38
+ "사용자가 '더 필요해', '더 자세히' 요청하거나, 이미 코드를 시작했다고 언급"
39
+ → hint_levels[1].prompt로 핵심 로직 제시
40
+
41
+ 3️⃣ Level 3 제시 (상세 풀이 명시 요청):
42
+ "사용자가 '정답', '풀이', '코드' 등 최종 답변 요청"
43
+ → hint_levels[2].prompt로 상세 구현 가이드 제시
44
+
45
+ 📖 **[권장] 어려운 문제는 본문 먼저 확인**:
46
+ - 난이도 높은 문제(Lv. 3 이상)는 메타데이터만으로 부족할 수 있음
47
+ - fetch_problem_content_programmers로 실제 문제 본문 확인 후 힌트 생성 권장
48
+
49
+ **정답 정책**: 힌트만 기본 제공. 사용자가 "정답", "풀이", "코드" 명시 요청 시만 전체 풀이 제공.
50
+
51
+ ⚠️ 플랫폼 판별: 문제 번호만 입력된 경우 대화 맥락에서 플랫폼을 파악하거나, 맥락이 없으면 반드시 BOJ/프로그래머스 중 어느 플랫폼인지 사용자에게 확인 후 호출하세요.`,
52
+ inputSchema: GenerateHintProgrammersInputSchema,
53
+ handler: async (input) => {
54
+ try {
55
+ const { problem_id } = GenerateHintProgrammersInputSchema.parse(input);
56
+ const parsedId = parseProgrammersUrl(problem_id);
57
+ if (!parsedId) {
58
+ throw new Error(`유효하지 않은 프로그래머스 문제 ID 또는 URL: ${problem_id}`);
59
+ }
60
+ const result = await analyzer.analyze(parsedId, false);
61
+ return {
62
+ type: 'text',
63
+ text: JSON.stringify(result, null, 2),
64
+ };
65
+ }
66
+ catch (error) {
67
+ if (error instanceof z.ZodError) {
68
+ throw new Error(`입력 검증 실패: ${error.issues[0].message}`);
69
+ }
70
+ if (error instanceof ProgrammersScrapeError) {
71
+ if (error.code === 'NAVIGATION_ERROR') {
72
+ throw new Error(`문제를 찾을 수 없습니다: ${input.problem_id}`);
73
+ }
74
+ }
75
+ throw error;
76
+ }
77
+ },
78
+ };
79
+ }
80
+ //# sourceMappingURL=generate-hint-programmers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-hint-programmers.js","sourceRoot":"","sources":["../../../src/tools/programmers/generate-hint-programmers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC1C,QAAQ,CAAC,qBAAqB,CAAC;CACnC,CAAC,CAAC;AAYH;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAAoC;IAC9E,OAAO;QACL,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGA6BgF;QAC7F,WAAW,EAAE,kCAAkC;QAC/C,OAAO,EAAE,KAAK,EAAE,KAAmC,EAAwB,EAAE;YAC3E,IAAI,CAAC;gBACH,MAAM,EAAE,UAAU,EAAE,GAAG,kCAAkC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAEvE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;gBAChE,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAEvD,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACtC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBAED,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;oBAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;wBACtC,MAAM,IAAI,KAAK,CAAC,kBAAmB,KAAsC,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC1F,CAAC;gBACH,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * generate_review_template_programmers MCP 도구
3
+ *
4
+ * 프로그래머스 복습 템플릿 및 가이드 제공
5
+ */
6
+ import { z } from 'zod';
7
+ import type { ProgrammersReviewTemplateGenerator } from '../../services/programmers-review-template-generator.js';
8
+ /**
9
+ * 입력 스키마
10
+ */
11
+ export declare const GenerateReviewTemplateProgrammersInputSchema: z.ZodObject<{
12
+ problem_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
13
+ user_notes: z.ZodOptional<z.ZodString>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ problem_id: string | number;
16
+ user_notes?: string | undefined;
17
+ }, {
18
+ problem_id: string | number;
19
+ user_notes?: string | undefined;
20
+ }>;
21
+ export type GenerateReviewTemplateProgrammersInput = z.infer<typeof GenerateReviewTemplateProgrammersInputSchema>;
22
+ /**
23
+ * MCP TextContent 타입
24
+ */
25
+ interface TextContent {
26
+ type: 'text';
27
+ text: string;
28
+ }
29
+ /**
30
+ * generate_review_template_programmers 도구 핸들러
31
+ */
32
+ export declare function generateReviewTemplateProgrammersTool(generator: ProgrammersReviewTemplateGenerator): {
33
+ name: string;
34
+ description: string;
35
+ inputSchema: z.ZodObject<{
36
+ problem_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
37
+ user_notes: z.ZodOptional<z.ZodString>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ problem_id: string | number;
40
+ user_notes?: string | undefined;
41
+ }, {
42
+ problem_id: string | number;
43
+ user_notes?: string | undefined;
44
+ }>;
45
+ handler: (input: GenerateReviewTemplateProgrammersInput) => Promise<TextContent>;
46
+ };
47
+ export {};
48
+ //# sourceMappingURL=generate-review-template-programmers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-review-template-programmers.d.ts","sourceRoot":"","sources":["../../../src/tools/programmers/generate-review-template-programmers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,yDAAyD,CAAC;AAIlH;;GAEG;AACH,eAAO,MAAM,4CAA4C;;;;;;;;;EAKvD,CAAC;AAEH,MAAM,MAAM,sCAAsC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4CAA4C,CAAC,CAAC;AAElH;;GAEG;AACH,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,SAAS,EAAE,kCAAkC;;;;;;;;;;;;;qBAKxE,sCAAsC,KAAG,OAAO,CAAC,WAAW,CAAC;EA8BvF"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * generate_review_template_programmers MCP 도구
3
+ *
4
+ * 프로그래머스 복습 템플릿 및 가이드 제공
5
+ */
6
+ import { z } from 'zod';
7
+ import { ProgrammersScrapeError } from '../../api/programmers-scraper.js';
8
+ import { parseProgrammersUrl } from '../../utils/url-parser.js';
9
+ /**
10
+ * 입력 스키마
11
+ */
12
+ export const GenerateReviewTemplateProgrammersInputSchema = z.object({
13
+ problem_id: z.union([z.string(), z.number()])
14
+ .describe('프로그래머스 문제 ID 또는 URL'),
15
+ user_notes: z.string().optional()
16
+ .describe('사용자가 미리 작성한 메모 (선택)'),
17
+ });
18
+ /**
19
+ * generate_review_template_programmers 도구 핸들러
20
+ */
21
+ export function generateReviewTemplateProgrammersTool(generator) {
22
+ return {
23
+ name: 'generate_review_template_programmers',
24
+ description: '프로그래머스 문제에 대한 복기용 가이드를 제공합니다. 마크다운 템플릿, 문제 분석, 작성 프롬프트를 포함합니다.\n\n⚠️ 플랫폼 판별: 문제 번호만 입력된 경우 대화 맥락에서 플랫폼을 파악하거나, 맥락이 없으면 반드시 BOJ/프로그래머스 중 어느 플랫폼인지 사용자에게 확인 후 호출하세요.',
25
+ inputSchema: GenerateReviewTemplateProgrammersInputSchema,
26
+ handler: async (input) => {
27
+ try {
28
+ const { problem_id, user_notes } = GenerateReviewTemplateProgrammersInputSchema.parse(input);
29
+ const parsedId = parseProgrammersUrl(problem_id);
30
+ if (!parsedId) {
31
+ throw new Error(`유효하지 않은 프로그래머스 문제 ID 또는 URL: ${problem_id}`);
32
+ }
33
+ const template = await generator.generate(parsedId, user_notes);
34
+ return {
35
+ type: 'text',
36
+ text: JSON.stringify(template, null, 2),
37
+ };
38
+ }
39
+ catch (error) {
40
+ if (error instanceof z.ZodError) {
41
+ throw new Error(`입력 검증 실패: ${error.issues[0].message}`);
42
+ }
43
+ if (error instanceof ProgrammersScrapeError) {
44
+ if (error.code === 'NAVIGATION_ERROR') {
45
+ throw new Error(`문제를 찾을 수 없습니다: ${input.problem_id}`);
46
+ }
47
+ }
48
+ throw error;
49
+ }
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=generate-review-template-programmers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-review-template-programmers.js","sourceRoot":"","sources":["../../../src/tools/programmers/generate-review-template-programmers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,4CAA4C,GAAG,CAAC,CAAC,MAAM,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC1C,QAAQ,CAAC,qBAAqB,CAAC;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC9B,QAAQ,CAAC,qBAAqB,CAAC;CACnC,CAAC,CAAC;AAYH;;GAEG;AACH,MAAM,UAAU,qCAAqC,CAAC,SAA6C;IACjG,OAAO;QACL,IAAI,EAAE,sCAAsC;QAC5C,WAAW,EAAE,oKAAoK;QACjL,WAAW,EAAE,4CAA4C;QACzD,OAAO,EAAE,KAAK,EAAE,KAA6C,EAAwB,EAAE;YACrF,IAAI,CAAC;gBACH,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,4CAA4C,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAE7F,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;gBAChE,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAEhE,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;iBACxC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBAED,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;oBAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;wBACtC,MAAM,IAAI,KAAK,CAAC,kBAAmB,KAAgD,CAAC,UAAU,EAAE,CAAC,CAAC;oBACpG,CAAC;gBACH,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * get_problem_programmers 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_problem_programmers 도구 핸들러
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-problem-programmers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-problem-programmers.d.ts","sourceRoot":"","sources":["../../../src/tools/programmers/get-problem-programmers.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;;;;;;;;;;;EA4BxC"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * get_problem_programmers 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_problem_programmers 도구 핸들러
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_problem_programmers',
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
+
158
+ ⚠️ 플랫폼 판별: 문제 번호만 입력된 경우 대화 맥락에서 플랫폼을 파악하거나, 맥락이 없으면 반드시 BOJ/프로그래머스 중 어느 플랫폼인지 사용자에게 확인 후 호출하세요.`,
159
+ inputSchema: GetProgrammersProblemInputSchema,
160
+ handler: handleGetProgrammersProblem,
161
+ };
162
+ }
163
+ //# sourceMappingURL=get-problem-programmers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-problem-programmers.js","sourceRoot":"","sources":["../../../src/tools/programmers/get-problem-programmers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * search_problems_programmers 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-problems-programmers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-problems-programmers.d.ts","sourceRoot":"","sources":["../../../src/tools/programmers/search-problems-programmers.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;;;;;;;;;;;;;;;;;;;;;;;EA4B5C"}