@vibeuniv/mcp-server 0.3.2 → 0.3.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.
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +13 -0
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +20 -0
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/curriculum-helpers.d.ts +11 -0
- package/dist/lib/curriculum-helpers.d.ts.map +1 -0
- package/dist/lib/curriculum-helpers.js +243 -0
- package/dist/lib/curriculum-helpers.js.map +1 -0
- package/dist/tools/generate-curriculum.d.ts.map +1 -1
- package/dist/tools/generate-curriculum.js +61 -350
- package/dist/tools/generate-curriculum.js.map +1 -1
- package/dist/tools/generate-module-content.d.ts +30 -0
- package/dist/tools/generate-module-content.d.ts.map +1 -0
- package/dist/tools/generate-module-content.js +306 -0
- package/dist/tools/generate-module-content.js.map +1 -0
- package/dist/tools/submit-curriculum.js +2 -2
- package/dist/tools/submit-curriculum.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { scanTeachingCriticalFiles } from "../lib/file-scanner.js";
|
|
3
|
+
import { formatTechStack, formatKBHints, formatEducationalAnalysis, buildLevelGuidance, } from "../lib/curriculum-helpers.js";
|
|
3
4
|
export const generateCurriculumSchema = {
|
|
4
5
|
project_id: z.string().describe("The VibeUniv project ID"),
|
|
5
6
|
difficulty: z
|
|
@@ -7,222 +8,11 @@ export const generateCurriculumSchema = {
|
|
|
7
8
|
.default("beginner")
|
|
8
9
|
.describe("Target difficulty level for the curriculum"),
|
|
9
10
|
};
|
|
10
|
-
// ─── Formatting helpers ─────────────────────────────────────────────
|
|
11
|
-
function formatTechStack(t) {
|
|
12
|
-
return `- **${t.name}**${t.version ? ` v${t.version}` : ""} (${t.category})`;
|
|
13
|
-
}
|
|
14
|
-
function formatKBHints(kbHints, locale) {
|
|
15
|
-
const sections = [];
|
|
16
|
-
for (const [techName, hints] of Object.entries(kbHints)) {
|
|
17
|
-
if (hints.length === 0)
|
|
18
|
-
continue;
|
|
19
|
-
const conceptLines = locale === "en"
|
|
20
|
-
? hints.map((h) => `#### ${h.concept_name} (\`${h.concept_key}\`)
|
|
21
|
-
- **Key Points:**
|
|
22
|
-
${h.key_points.map((p) => ` - ${p}`).join("\n")}
|
|
23
|
-
- **Good Quiz Topics:** ${h.common_quiz_topics.join(", ")}
|
|
24
|
-
- **Prerequisites:** ${h.prerequisite_concepts.length > 0 ? h.prerequisite_concepts.join(", ") : "(none)"}`).join("\n\n")
|
|
25
|
-
: hints.map((h) => `#### ${h.concept_name} (\`${h.concept_key}\`)
|
|
26
|
-
- **핵심 포인트:**
|
|
27
|
-
${h.key_points.map((p) => ` - ${p}`).join("\n")}
|
|
28
|
-
- **좋은 퀴즈 주제:** ${h.common_quiz_topics.join(", ")}
|
|
29
|
-
- **선행 개념:** ${h.prerequisite_concepts.length > 0 ? h.prerequisite_concepts.join(", ") : "(없음)"}`).join("\n\n");
|
|
30
|
-
const heading = locale === "en"
|
|
31
|
-
? `### ${techName} Core Concept Guide`
|
|
32
|
-
: `### ${techName} 핵심 개념 가이드`;
|
|
33
|
-
sections.push(`${heading}\n\n${conceptLines}`);
|
|
34
|
-
}
|
|
35
|
-
if (sections.length === 0)
|
|
36
|
-
return "";
|
|
37
|
-
const header = locale === "en"
|
|
38
|
-
? `## Educational Key Points (Knowledge Base)
|
|
39
|
-
|
|
40
|
-
Below are **core educational key points** for each technology.
|
|
41
|
-
Include these points in the curriculum, reference quiz topics, and follow prerequisite ordering.`
|
|
42
|
-
: `## 교육 핵심 포인트 (Knowledge Base)
|
|
43
|
-
|
|
44
|
-
아래는 각 기술의 **핵심 교육 포인트**입니다.
|
|
45
|
-
커리큘럼에 반드시 이 포인트들을 포함하고, 퀴즈 주제를 참고하세요.
|
|
46
|
-
선행 개념 순서에 맞게 모듈을 배치하세요.`;
|
|
47
|
-
return `${header}\n\n${sections.join("\n\n")}`;
|
|
48
|
-
}
|
|
49
|
-
function formatEducationalAnalysis(analysis, difficulty, locale) {
|
|
50
|
-
const sections = [];
|
|
51
|
-
const en = locale === "en";
|
|
52
|
-
// Project Overview
|
|
53
|
-
const ov = analysis.project_overview;
|
|
54
|
-
sections.push(en
|
|
55
|
-
? `### Project Overview (AI Analysis)
|
|
56
|
-
- **App Description:** ${ov.one_liner}
|
|
57
|
-
- **App Type:** ${ov.app_type}
|
|
58
|
-
- **Target Users:** ${ov.target_users}
|
|
59
|
-
- **Core Features:** ${ov.core_features.join(", ")}`
|
|
60
|
-
: `### 프로젝트 개요 (AI 분석 결과)
|
|
61
|
-
- **앱 설명:** ${ov.one_liner}
|
|
62
|
-
- **앱 유형:** ${ov.app_type}
|
|
63
|
-
- **대상 사용자:** ${ov.target_users}
|
|
64
|
-
- **핵심 기능:** ${ov.core_features.join(", ")}`);
|
|
65
|
-
// User Flows
|
|
66
|
-
if (analysis.user_flows.length > 0) {
|
|
67
|
-
const flowLines = analysis.user_flows.map((f) => {
|
|
68
|
-
const steps = f.steps
|
|
69
|
-
.map((s) => ` - ${s.description} (\`${s.file}\`:${s.line_range})`)
|
|
70
|
-
.join("\n");
|
|
71
|
-
return en
|
|
72
|
-
? `- **${f.name}** (difficulty: ${f.difficulty})\n Trigger: ${f.trigger}\n${steps}`
|
|
73
|
-
: `- **${f.name}** (난이도: ${f.difficulty})\n 트리거: ${f.trigger}\n${steps}`;
|
|
74
|
-
});
|
|
75
|
-
sections.push(en
|
|
76
|
-
? `### User Flows\n\nEach flow should be covered in the curriculum:\n\n${flowLines.join("\n\n")}`
|
|
77
|
-
: `### 사용자 흐름 (User Flows)\n\n각 흐름을 커리큘럼에서 다뤄야 합니다:\n\n${flowLines.join("\n\n")}`);
|
|
78
|
-
}
|
|
79
|
-
// File Difficulty Map
|
|
80
|
-
if (analysis.file_analysis.length > 0) {
|
|
81
|
-
const fileLines = analysis.file_analysis
|
|
82
|
-
.sort((a, b) => a.complexity - b.complexity)
|
|
83
|
-
.map((f) => en
|
|
84
|
-
? `- \`${f.path}\` — ${f.role} (complexity: ${f.complexity}/5, ${f.difficulty})`
|
|
85
|
-
: `- \`${f.path}\` — ${f.role} (복잡도: ${f.complexity}/5, ${f.difficulty})`);
|
|
86
|
-
sections.push(en
|
|
87
|
-
? `### File Difficulty Map\n\nSorted from easiest to hardest. Use this to determine module order:\n\n${fileLines.join("\n")}`
|
|
88
|
-
: `### 파일 난이도 맵\n\n쉬운 파일부터 어려운 파일 순서로 정렬했습니다. 모듈 순서를 결정할 때 참고하세요:\n\n${fileLines.join("\n")}`);
|
|
89
|
-
}
|
|
90
|
-
// Learning Priorities
|
|
91
|
-
const priorities = analysis.learning_priorities;
|
|
92
|
-
const lp = difficulty === "beginner"
|
|
93
|
-
? priorities.beginner
|
|
94
|
-
: difficulty === "intermediate"
|
|
95
|
-
? priorities.intermediate
|
|
96
|
-
: priorities.advanced;
|
|
97
|
-
const priorityLines = en
|
|
98
|
-
? [
|
|
99
|
-
`- **Start with:** ${lp.start_with.join(", ")}`,
|
|
100
|
-
`- **Focus on:** ${lp.focus_on.join(", ")}`,
|
|
101
|
-
]
|
|
102
|
-
: [
|
|
103
|
-
`- **시작:** ${lp.start_with.join(", ")}`,
|
|
104
|
-
`- **집중:** ${lp.focus_on.join(", ")}`,
|
|
105
|
-
];
|
|
106
|
-
if ("skip_for_now" in lp) {
|
|
107
|
-
priorityLines.push(en
|
|
108
|
-
? `- **Skip for now:** ${lp.skip_for_now.join(", ")}`
|
|
109
|
-
: `- **나중에:** ${lp.skip_for_now.join(", ")}`);
|
|
110
|
-
}
|
|
111
|
-
if ("deep_dive" in lp) {
|
|
112
|
-
priorityLines.push(en
|
|
113
|
-
? `- **Deep dive:** ${lp.deep_dive.join(", ")}`
|
|
114
|
-
: `- **심화:** ${lp.deep_dive.join(", ")}`);
|
|
115
|
-
}
|
|
116
|
-
if ("challenge_topics" in lp) {
|
|
117
|
-
priorityLines.push(en
|
|
118
|
-
? `- **Challenge:** ${lp.challenge_topics.join(", ")}`
|
|
119
|
-
: `- **도전:** ${lp.challenge_topics.join(", ")}`);
|
|
120
|
-
}
|
|
121
|
-
sections.push(en
|
|
122
|
-
? `### ${difficulty} Level Learning Priorities\n\n${priorityLines.join("\n")}`
|
|
123
|
-
: `### ${difficulty} 난이도 학습 우선순위\n\n${priorityLines.join("\n")}`);
|
|
124
|
-
// Repeated Patterns
|
|
125
|
-
if (analysis.repeated_patterns.length > 0) {
|
|
126
|
-
const patternLines = analysis.repeated_patterns.map((p) => en
|
|
127
|
-
? `- **${p.name}**: ${p.description} (found ${p.occurrences.length} times) — teaching value: ${p.teaching_value}`
|
|
128
|
-
: `- **${p.name}**: ${p.description} (${p.occurrences.length}회 발견) — 교육 가치: ${p.teaching_value}`);
|
|
129
|
-
sections.push(en
|
|
130
|
-
? `### Repeated Patterns\n\nThese patterns are used repeatedly in the project. Including them in the curriculum enhances learning:\n\n${patternLines.join("\n")}`
|
|
131
|
-
: `### 반복 패턴\n\n프로젝트에서 반복적으로 사용되는 패턴입니다. 이 패턴들을 커리큘럼에 포함하면 학습 효과가 높아집니다:\n\n${patternLines.join("\n")}`);
|
|
132
|
-
}
|
|
133
|
-
// Code Quality
|
|
134
|
-
const cq = analysis.code_quality;
|
|
135
|
-
if (cq.good_practices.length > 0 || cq.improvement_areas.length > 0) {
|
|
136
|
-
const lines = [];
|
|
137
|
-
if (cq.good_practices.length > 0) {
|
|
138
|
-
lines.push(en ? "**Good Practices (Teaching Points):**" : "**좋은 사례 (교육 포인트):**");
|
|
139
|
-
for (const gp of cq.good_practices) {
|
|
140
|
-
lines.push(en
|
|
141
|
-
? `- ${gp.description} → Related concept: ${gp.concept}`
|
|
142
|
-
: `- ${gp.description} → 관련 개념: ${gp.concept}`);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
if (cq.improvement_areas.length > 0) {
|
|
146
|
-
lines.push(en ? "\n**Improvement Opportunities (Learning Opportunities):**" : "\n**개선 기회 (학습 기회):**");
|
|
147
|
-
for (const ia of cq.improvement_areas) {
|
|
148
|
-
lines.push(en
|
|
149
|
-
? `- [${ia.severity}] ${ia.description} → Teaching: ${ia.teaching_opportunity}`
|
|
150
|
-
: `- [${ia.severity}] ${ia.description} → 교육: ${ia.teaching_opportunity}`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
sections.push(en
|
|
154
|
-
? `### Code Quality Observations\n\n${lines.join("\n")}`
|
|
155
|
-
: `### 코드 품질 관찰\n\n${lines.join("\n")}`);
|
|
156
|
-
}
|
|
157
|
-
// Tech Stack Metaphors (beginner only)
|
|
158
|
-
if (difficulty === "beginner" && ov.tech_stack_metaphors.length > 0) {
|
|
159
|
-
const metaphorLines = ov.tech_stack_metaphors.map((m) => `- **${m.tech_name}** → ${m.metaphor}`);
|
|
160
|
-
sections.push(en
|
|
161
|
-
? `### Tech Stack Metaphors (Beginner)\n\nUse these metaphors actively in the curriculum:\n\n${metaphorLines.join("\n")}`
|
|
162
|
-
: `### 기술 스택 비유 (초보자용)\n\n이 비유들을 커리큘럼에서 적극 활용하세요:\n\n${metaphorLines.join("\n")}`);
|
|
163
|
-
}
|
|
164
|
-
const header = en
|
|
165
|
-
? `## Project Educational Analysis
|
|
166
|
-
|
|
167
|
-
Below is AI-analyzed educational metadata for the project.
|
|
168
|
-
Use this information to create a more specific and personalized curriculum.`
|
|
169
|
-
: `## 프로젝트 교육 분석 (Educational Analysis)
|
|
170
|
-
|
|
171
|
-
아래는 AI가 프로젝트를 분석한 교육용 메타데이터입니다.
|
|
172
|
-
이 정보를 활용해 더 구체적이고 맞춤화된 커리큘럼을 만드세요.`;
|
|
173
|
-
return `${header}\n\n${sections.join("\n\n")}`;
|
|
174
|
-
}
|
|
175
|
-
function buildLevelGuidance(difficulty, locale) {
|
|
176
|
-
const en = locale === "en";
|
|
177
|
-
if (difficulty === "beginner") {
|
|
178
|
-
return en
|
|
179
|
-
? `**[Core Principle] Explain as if to a 5-6 year old. Assume they know nothing.**
|
|
180
|
-
- 3-step concept breakdown: ①Analogy (food/LEGO/school/play) → ②One-sentence definition → ③Code connection
|
|
181
|
-
- "What if this didn't exist?" before/after comparison (e.g., "No middleware? → Anyone can access secret pages 😱")
|
|
182
|
-
- Translate key code lines into plain English (e.g., \`const x = 5\` → "Put the number 5 in a box called x 📦")
|
|
183
|
-
- Give friendly nicknames to technical terms: useState→"memory box", props→"delivery package", middleware→"security checkpoint"
|
|
184
|
-
- concept 40%+, quiz 20%+, practical 15%↓(very easy only)
|
|
185
|
-
- explanation 400+ chars, 5-7 sections per module
|
|
186
|
-
- Use emojis actively: 🎯summary, 💡tip, ⚠️warning, 👏praise
|
|
187
|
-
- Tone: like reading a picture book, short sentences, lots of encouragement
|
|
188
|
-
- estimated_minutes: 20-35 min`
|
|
189
|
-
: `**[대원칙] 5~6세 아이에게 설명하듯. 아무것도 모른다고 가정.**
|
|
190
|
-
- 개념 3단계 쪼개기: ①비유(음식/레고/학교/놀이) → ②한 문장 정의 → ③코드 연결
|
|
191
|
-
- "이게 없으면?" before/after 비교 (예: "미들웨어 없으면? → 아무나 비밀 페이지 접근 😱")
|
|
192
|
-
- 주요 코드 라인에 "우리말 번역" (예: \`const x = 5\` → "x 상자에 숫자 5를 넣어요 📦")
|
|
193
|
-
- 기술 용어에 한국어 별명: useState→"기억 상자", props→"택배 상자", middleware→"보안 검문소"
|
|
194
|
-
- concept 40%↑, quiz 20%↑, practical 15%↓(아주 쉬운 것만)
|
|
195
|
-
- explanation 400자↑, 모듈당 5-7섹션
|
|
196
|
-
- 이모지 적극 활용: 🎯한줄정리, 💡팁, ⚠️주의, 👏칭찬
|
|
197
|
-
- 톤: 그림책 읽어주듯, 짧은 문장, 격려·칭찬 대폭
|
|
198
|
-
- estimated_minutes: 20-35분`;
|
|
199
|
-
}
|
|
200
|
-
if (difficulty === "intermediate") {
|
|
201
|
-
return en
|
|
202
|
-
? `- Assume basic programming knowledge
|
|
203
|
-
- Focus on "how" and "why" — not just usage but how things work and design decisions
|
|
204
|
-
- Increase practical and project_walkthrough module ratio
|
|
205
|
-
- Cover common patterns, best practices, common mistakes`
|
|
206
|
-
: `- 기본 프로그래밍 지식은 안다고 가정
|
|
207
|
-
- "어떻게"와 "왜"에 집중 — 단순 사용법이 아니라 동작 원리와 설계 이유
|
|
208
|
-
- practical과 project_walkthrough 모듈 비중 높이기
|
|
209
|
-
- 일반적인 패턴, 베스트 프랙티스, 흔한 실수 다루기`;
|
|
210
|
-
}
|
|
211
|
-
return en
|
|
212
|
-
? `- Assume solid programming knowledge
|
|
213
|
-
- Focus on advanced patterns, performance optimization, architecture design
|
|
214
|
-
- Maximize practical and project_walkthrough ratio
|
|
215
|
-
- Cover edge cases, internals, optimization strategies`
|
|
216
|
-
: `- 탄탄한 프로그래밍 지식 전제
|
|
217
|
-
- 고급 패턴, 성능 최적화, 아키텍처 설계에 집중
|
|
218
|
-
- practical과 project_walkthrough 비중 극대화
|
|
219
|
-
- 엣지 케이스, 내부 동작 원리, 최적화 전략 다루기`;
|
|
220
|
-
}
|
|
221
11
|
// ─── Tool registration ──────────────────────────────────────────────
|
|
222
12
|
export function registerGenerateCurriculum(server, client) {
|
|
223
|
-
server.tool("vibeuniv_generate_curriculum", "Generate a learning curriculum for the project.
|
|
13
|
+
server.tool("vibeuniv_generate_curriculum", "Pass 1 of 2: Generate a learning curriculum STRUCTURE for the project. Returns instructions to create module structure (without content sections). After generating the structure, call vibeuniv_generate_module_content for each module to generate content. IMPORTANT: Before calling, ask the user their preferred difficulty — beginner (초급), intermediate (중급), or advanced (고급).", generateCurriculumSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id, difficulty }) => {
|
|
224
14
|
try {
|
|
225
|
-
console.error(`[vibeuniv] Generating curriculum instructions for project ${project_id}...`);
|
|
15
|
+
console.error(`[vibeuniv] Generating curriculum structure instructions for project ${project_id}...`);
|
|
226
16
|
// Fetch all curriculum context in a single API call
|
|
227
17
|
const curriculumContext = await client.getCurriculumContext(project_id);
|
|
228
18
|
// Read teaching-critical files from local disk (avoids server roundtrip for file decryption)
|
|
@@ -233,6 +23,8 @@ export function registerGenerateCurriculum(server, client) {
|
|
|
233
23
|
catch (err) {
|
|
234
24
|
console.error(`[vibeuniv] Local file scan failed (non-fatal): ${err instanceof Error ? err.message : err}`);
|
|
235
25
|
}
|
|
26
|
+
// Cache context + local files for Pass 2 (generate_module_content)
|
|
27
|
+
client.setCachedCurriculumData(project_id, curriculumContext, localFiles);
|
|
236
28
|
// Prefer local files; fall back to server files if local scan yields nothing
|
|
237
29
|
const curriculumFiles = localFiles.length > 0
|
|
238
30
|
? localFiles
|
|
@@ -297,25 +89,18 @@ export function registerGenerateCurriculum(server, client) {
|
|
|
297
89
|
? `\n## Project Source Code
|
|
298
90
|
|
|
299
91
|
Below are the student's actual project files.
|
|
300
|
-
|
|
301
|
-
Do NOT make up code.
|
|
92
|
+
Use these to design modules around actual project features and files.
|
|
302
93
|
|
|
303
94
|
${curriculumFiles.map((f) => `#### ${f.file_path}\n\`\`\`\n${f.content}\n\`\`\``).join("\n\n")}\n`
|
|
304
95
|
: `\n## 프로젝트 소스 코드
|
|
305
96
|
|
|
306
97
|
아래는 학생의 실제 프로젝트 파일입니다.
|
|
307
|
-
|
|
308
|
-
코드를 창작하지 마세요.
|
|
98
|
+
실제 프로젝트 기능/파일을 중심으로 모듈을 설계하세요.
|
|
309
99
|
|
|
310
100
|
${curriculumFiles.map((f) => `#### ${f.file_path}\n\`\`\`\n${f.content}\n\`\`\``).join("\n\n")}\n`
|
|
311
101
|
: "";
|
|
312
|
-
const learnMoreLabel = en ? "📚 Learn More" : "📚 더 알아보기";
|
|
313
|
-
const minBodyChars = difficulty === "beginner" ? "400" : "200";
|
|
314
|
-
const sectionsPerModule = difficulty === "beginner" ? "5-7" : "3-5";
|
|
315
|
-
const minSections = difficulty === "beginner" ? "5" : "3";
|
|
316
|
-
const paragraphs = difficulty === "beginner" ? "6-8" : "4-6";
|
|
317
102
|
const instructions = en
|
|
318
|
-
? `Please generate a learning curriculum for this project.
|
|
103
|
+
? `Please generate a learning curriculum STRUCTURE for this project.
|
|
319
104
|
|
|
320
105
|
## Target: Vibe Coder (${difficulty})
|
|
321
106
|
|
|
@@ -354,41 +139,11 @@ Bad examples:
|
|
|
354
139
|
**Module Types:** concept (concept+analogy), practical (code practice), quiz (code-based quiz), project_walkthrough (line-by-line file reading)
|
|
355
140
|
**Difficulty:**
|
|
356
141
|
${levelGuidance}
|
|
357
|
-
|
|
358
|
-
**Section Design (${sectionsPerModule} per module, minimum ${minSections}):**
|
|
359
|
-
- explanation: Markdown ${paragraphs} paragraphs. Must cite project file paths.
|
|
360
|
-
End with "${learnMoreLabel}" links 2-3 (React→react.dev, Next.js→nextjs.org/docs,
|
|
361
|
-
TypeScript→typescriptlang.org, Supabase→supabase.com/docs, Tailwind→tailwindcss.com/docs)
|
|
362
|
-
- code_example: Copy actual project code + line-by-line comments.
|
|
363
|
-
Below the code block, explain with numbered list "What this code does:"
|
|
364
|
-
- quiz_question: 4-choice based on project code. quiz_explanation with correct/incorrect reasoning
|
|
365
|
-
- challenge: ___BLANK___ fill-in-the-blank. Both starter_code and answer_code required
|
|
366
|
-
- reflection: "Open the X folder in your project. Look for Y." format
|
|
367
|
-
|
|
368
|
-
**Required Placement Rules:**
|
|
369
|
-
- Start each module with explanation
|
|
370
|
-
- Maximum 2 consecutive explanations, 3rd must be quiz/reflection
|
|
371
|
-
- At least 1 code_example per module required
|
|
372
|
-
- At least 1 quiz_question per module required
|
|
373
|
-
|
|
374
|
-
**Tone (Critical — key to learning content quality):**
|
|
375
|
-
- Use casual, friendly "you" language
|
|
376
|
-
- Address the student as "you" or "we"
|
|
377
|
-
- Short sentences, one idea per sentence
|
|
378
|
-
- Keep technical terms in English + follow with a plain explanation in parentheses
|
|
379
|
-
- Start with questions: "Have you ever wondered about this code?", "Why does it work this way?"
|
|
380
|
-
- Encourage: "If you've followed along this far, you already understand half of it!", "It can be confusing at first — don't worry"
|
|
381
|
-
- Use analogies: everyday analogies for new concepts (API→restaurant order window, component→LEGO blocks)
|
|
382
|
-
- Transition phrases: "Alright, now let's...", "Wait a moment!", "Let's check the actual code, shall we?"
|
|
383
|
-
- Forbidden: dry academic tone, filler phrases like "Great question!", emotionless listing
|
|
384
|
-
- Do NOT make up code — only quote actual project code
|
|
385
|
-
|
|
386
|
-
**walkthrough:** Explain a file from import→logic→export order + connections to other files.
|
|
387
142
|
${eduInstruction}${kbInstruction}
|
|
388
143
|
|
|
389
|
-
## JSON Schema
|
|
144
|
+
## JSON Schema (Structure Only)
|
|
390
145
|
|
|
391
|
-
|
|
146
|
+
Output ONLY JSON (no code fences/explanations). Do NOT include "content" or "sections" — those will be generated per-module in the next step.
|
|
392
147
|
|
|
393
148
|
{
|
|
394
149
|
"title": "string (required) — Curriculum title",
|
|
@@ -401,42 +156,35 @@ Follow the structure below exactly. All string values in English. Output ONLY JS
|
|
|
401
156
|
"description": "string (required) — Module description",
|
|
402
157
|
"module_type": "concept | practical | quiz | project_walkthrough",
|
|
403
158
|
"estimated_minutes": number (15-45),
|
|
404
|
-
"tech_name": "string (required) — Must exactly match a name from the tech stack list above"
|
|
405
|
-
"content": {
|
|
406
|
-
"sections": [
|
|
407
|
-
{
|
|
408
|
-
"type": "explanation | code_example | quiz_question | challenge | reflection",
|
|
409
|
-
"title": "string (required) — Section title",
|
|
410
|
-
"body": "string (required) — Markdown body. explanation minimum ${minBodyChars} chars",
|
|
411
|
-
|
|
412
|
-
"code": "string (required for code_example) — Actual project code + line-by-line comments",
|
|
413
|
-
|
|
414
|
-
"quiz_options": ["string", "string", "string", "string"] (required for quiz_question, exactly 4),
|
|
415
|
-
"quiz_answer": number (required for quiz_question, 0-3),
|
|
416
|
-
"quiz_explanation": "string (required for quiz_question) — Correct/incorrect reasoning",
|
|
417
|
-
|
|
418
|
-
"challenge_starter_code": "string (required for challenge) — Contains ___BLANK___",
|
|
419
|
-
"challenge_answer_code": "string (required for challenge) — Completed code"
|
|
420
|
-
}
|
|
421
|
-
]
|
|
422
|
-
}
|
|
159
|
+
"tech_name": "string (required) — Must exactly match a name from the tech stack list above"
|
|
423
160
|
}
|
|
424
161
|
]
|
|
425
162
|
}
|
|
426
163
|
|
|
427
|
-
**Required
|
|
428
|
-
-
|
|
429
|
-
-
|
|
430
|
-
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
164
|
+
**Required:**
|
|
165
|
+
- Minimum 10 modules (aim for 10-15)
|
|
166
|
+
- Core technologies: at least 2 modules each
|
|
167
|
+
- Supporting technologies: at least 1 module each
|
|
168
|
+
- Do NOT include "content" or "sections"
|
|
169
|
+
|
|
170
|
+
## Next Steps (2-Pass Orchestration)
|
|
171
|
+
|
|
172
|
+
After generating the structure JSON above:
|
|
173
|
+
1. For each module (index 0 to N-1), call:
|
|
174
|
+
vibeuniv_generate_module_content({
|
|
175
|
+
project_id: "${project_id}",
|
|
176
|
+
module_index: <0-based index>,
|
|
177
|
+
module: <module object from the structure>,
|
|
178
|
+
difficulty: "${difficulty}",
|
|
179
|
+
total_modules: <total module count>
|
|
180
|
+
})
|
|
181
|
+
2. Each call returns instructions to generate that module's content sections
|
|
182
|
+
3. Generate the sections JSON array for each module
|
|
183
|
+
4. After ALL modules have content, assemble the final curriculum:
|
|
184
|
+
- Take the structure JSON from step above
|
|
185
|
+
- Add "content": { "sections": <generated sections array> } to each module
|
|
186
|
+
5. Submit: vibeuniv_submit_curriculum({ project_id: "${project_id}", curriculum: <complete JSON> })`
|
|
187
|
+
: `이 프로젝트의 학습 커리큘럼 구조를 생성해주세요.
|
|
440
188
|
|
|
441
189
|
## 대상: 바이브 코더 (${difficulty})
|
|
442
190
|
|
|
@@ -475,41 +223,11 @@ ${filesSection}${eduSection}${kbSection}
|
|
|
475
223
|
**모듈 유형:** concept(개념+비유), practical(코드 실습), quiz(코드 기반 퀴즈), project_walkthrough(파일 라인별 읽기)
|
|
476
224
|
**난이도:**
|
|
477
225
|
${levelGuidance}
|
|
478
|
-
|
|
479
|
-
**섹션 구성 (모듈당 ${sectionsPerModule}개, 최소 ${minSections}개):**
|
|
480
|
-
- explanation: 마크다운 ${paragraphs} 문단. 반드시 프로젝트 파일 경로 인용.
|
|
481
|
-
끝에 "${learnMoreLabel}" 링크 2-3개 (React→react.dev, Next.js→nextjs.org/docs,
|
|
482
|
-
TypeScript→typescriptlang.org, Supabase→supabase.com/docs, Tailwind→tailwindcss.com/docs)
|
|
483
|
-
- code_example: 프로젝트 실제 코드 복사 + 라인별 한국어 주석.
|
|
484
|
-
코드 블록 아래에 "이 코드가 하는 일:" 번호 목록으로 설명
|
|
485
|
-
- quiz_question: 프로젝트 코드 기반 4지선다. quiz_explanation에 정답/오답 이유
|
|
486
|
-
- challenge: ___BLANK___ 빈칸 채우기. starter_code + answer_code 모두 필수
|
|
487
|
-
- reflection: "여러분의 프로젝트에서 X 폴더를 열어보세요. Y를 찾아보세요." 형태
|
|
488
|
-
|
|
489
|
-
**필수 배치 규칙:**
|
|
490
|
-
- 모듈 시작은 explanation으로
|
|
491
|
-
- explanation 연속 2개까지만, 3번째는 반드시 quiz/reflection
|
|
492
|
-
- 모듈당 code_example 최소 1개 필수
|
|
493
|
-
- 모듈당 quiz_question 최소 1개 필수
|
|
494
|
-
|
|
495
|
-
**톤 (매우 중요 — 학습 콘텐츠 품질의 핵심):**
|
|
496
|
-
- 해요체 사용 (~이에요, ~거든요, ~잖아요, ~해볼까요?)
|
|
497
|
-
- 학생을 "여러분" 또는 "우리"로 지칭
|
|
498
|
-
- 짧은 문장 위주, 한 문장에 하나의 아이디어
|
|
499
|
-
- 기술 용어는 영어 유지 + 바로 뒤에 괄호로 쉬운 설명
|
|
500
|
-
- 질문으로 시작: "혹시 이 코드 보면서 궁금하셨죠?", "왜 이렇게 할까요?"
|
|
501
|
-
- 격려 필수: "여기까지 따라오셨으면 벌써 절반은 이해하신 거예요!", "처음엔 헷갈릴 수 있는데 걱정 마세요"
|
|
502
|
-
- 비유 필수: 새 개념마다 일상생활 비유 (API→식당 주문 창구, 컴포넌트→레고 블록)
|
|
503
|
-
- 전환 어구: "자, 그러면 이제...", "여기서 잠깐!", "실제 코드에서 확인해볼까요?"
|
|
504
|
-
- 금지: 교과서체(~이다, ~하라), 감정 없는 나열, 영어 직역투
|
|
505
|
-
- 코드 창작 금지 — 프로젝트 실제 코드만 인용
|
|
506
|
-
|
|
507
|
-
**walkthrough:** 파일 하나를 import→로직→export 순서로 설명 + 다른 파일과의 연결.
|
|
508
226
|
${eduInstruction}${kbInstruction}
|
|
509
227
|
|
|
510
|
-
## JSON 스키마
|
|
228
|
+
## JSON 스키마 (구조만)
|
|
511
229
|
|
|
512
|
-
아래 구조를 정확히 따르세요.
|
|
230
|
+
아래 구조를 정확히 따르세요. JSON만 출력 (코드 펜스/설명 없이). "content"나 "sections"는 포함하지 마세요 — 다음 단계에서 모듈별로 생성됩니다.
|
|
513
231
|
|
|
514
232
|
{
|
|
515
233
|
"title": "string (필수) — 커리큘럼 제목",
|
|
@@ -522,41 +240,34 @@ ${eduInstruction}${kbInstruction}
|
|
|
522
240
|
"description": "string (필수) — 모듈 설명",
|
|
523
241
|
"module_type": "concept | practical | quiz | project_walkthrough",
|
|
524
242
|
"estimated_minutes": number (15-45),
|
|
525
|
-
"tech_name": "string (필수) — 위 기술 스택 목록의 이름과 정확히 일치"
|
|
526
|
-
"content": {
|
|
527
|
-
"sections": [
|
|
528
|
-
{
|
|
529
|
-
"type": "explanation | code_example | quiz_question | challenge | reflection",
|
|
530
|
-
"title": "string (필수) — 섹션 제목",
|
|
531
|
-
"body": "string (필수) — 마크다운 본문. explanation은 최소 ${minBodyChars}자",
|
|
532
|
-
|
|
533
|
-
"code": "string (code_example일 때 필수) — 프로젝트 실제 코드 + 라인별 주석",
|
|
534
|
-
|
|
535
|
-
"quiz_options": ["string", "string", "string", "string"] (quiz_question일 때 필수, 정확히 4개),
|
|
536
|
-
"quiz_answer": number (quiz_question일 때 필수, 0-3),
|
|
537
|
-
"quiz_explanation": "string (quiz_question일 때 필수) — 정답/오답 이유",
|
|
538
|
-
|
|
539
|
-
"challenge_starter_code": "string (challenge일 때 필수) — ___BLANK___ 포함",
|
|
540
|
-
"challenge_answer_code": "string (challenge일 때 필수) — 완성 코드"
|
|
541
|
-
}
|
|
542
|
-
]
|
|
543
|
-
}
|
|
243
|
+
"tech_name": "string (필수) — 위 기술 스택 목록의 이름과 정확히 일치"
|
|
544
244
|
}
|
|
545
245
|
]
|
|
546
246
|
}
|
|
547
247
|
|
|
548
|
-
|
|
549
|
-
-
|
|
550
|
-
-
|
|
551
|
-
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
248
|
+
**필수:**
|
|
249
|
+
- 최소 10개 모듈 (10-15개 권장)
|
|
250
|
+
- Core 기술: 각 최소 2개 모듈
|
|
251
|
+
- Supporting 기술: 각 최소 1개 모듈
|
|
252
|
+
- "content"나 "sections" 포함 금지
|
|
253
|
+
|
|
254
|
+
## 다음 단계 (2-Pass 오케스트레이션)
|
|
255
|
+
|
|
256
|
+
위 구조 JSON을 생성한 후:
|
|
257
|
+
1. 각 모듈(인덱스 0부터 N-1)에 대해 호출:
|
|
258
|
+
vibeuniv_generate_module_content({
|
|
259
|
+
project_id: "${project_id}",
|
|
260
|
+
module_index: <0부터 시작하는 인덱스>,
|
|
261
|
+
module: <구조에서 해당 모듈 객체>,
|
|
262
|
+
difficulty: "${difficulty}",
|
|
263
|
+
total_modules: <전체 모듈 수>
|
|
264
|
+
})
|
|
265
|
+
2. 각 호출은 해당 모듈의 콘텐츠 섹션 생성 지시문을 반환합니다
|
|
266
|
+
3. 각 모듈의 섹션 JSON 배열을 생성하세요
|
|
267
|
+
4. 모든 모듈의 콘텐츠가 완성되면 최종 커리큘럼을 조합:
|
|
268
|
+
- 위에서 생성한 구조 JSON을 가져와
|
|
269
|
+
- 각 모듈에 "content": { "sections": <생성된 섹션 배열> } 추가
|
|
270
|
+
5. 제출: vibeuniv_submit_curriculum({ project_id: "${project_id}", curriculum: <완성 JSON> })`;
|
|
560
271
|
return {
|
|
561
272
|
content: [
|
|
562
273
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-curriculum.js","sourceRoot":"","sources":["../../src/tools/generate-curriculum.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate-curriculum.js","sourceRoot":"","sources":["../../src/tools/generate-curriculum.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { VibeUnivClient } from "../lib/api-client.js";
|
|
4
|
+
export declare const generateModuleContentSchema: {
|
|
5
|
+
project_id: z.ZodString;
|
|
6
|
+
module_index: z.ZodNumber;
|
|
7
|
+
module: z.ZodObject<{
|
|
8
|
+
title: z.ZodString;
|
|
9
|
+
description: z.ZodString;
|
|
10
|
+
module_type: z.ZodString;
|
|
11
|
+
tech_name: z.ZodString;
|
|
12
|
+
estimated_minutes: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
title: string;
|
|
15
|
+
description: string;
|
|
16
|
+
module_type: string;
|
|
17
|
+
tech_name: string;
|
|
18
|
+
estimated_minutes?: number | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
title: string;
|
|
21
|
+
description: string;
|
|
22
|
+
module_type: string;
|
|
23
|
+
tech_name: string;
|
|
24
|
+
estimated_minutes?: number | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
difficulty: z.ZodDefault<z.ZodEnum<["beginner", "intermediate", "advanced"]>>;
|
|
27
|
+
total_modules: z.ZodNumber;
|
|
28
|
+
};
|
|
29
|
+
export declare function registerGenerateModuleContent(server: McpServer, client: VibeUnivClient): void;
|
|
30
|
+
//# sourceMappingURL=generate-module-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-module-content.d.ts","sourceRoot":"","sources":["../../src/tools/generate-module-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAWtD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;CAiBvC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA2S7F"}
|