@vibeuniv/mcp-server 0.3.6 → 0.3.7

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 CHANGED
@@ -15,8 +15,9 @@ import { registerGenerateCurriculum } from "./tools/generate-curriculum.js";
15
15
  import { registerSubmitCurriculum } from "./tools/submit-curriculum.js";
16
16
  import { registerCreateCurriculum } from "./tools/create-curriculum.js";
17
17
  import { registerSubmitModule } from "./tools/submit-module.js";
18
+ import { registerGenerateModuleContent } from "./tools/generate-module-content.js";
18
19
  async function main() {
19
- console.error("[vibeuniv] Starting VibeUniv MCP Server v0.3.6...");
20
+ console.error("[vibeuniv] Starting VibeUniv MCP Server v0.3.7...");
20
21
  const config = loadConfig();
21
22
  const client = new VibeUnivClient(config.apiKey, config.apiUrl);
22
23
  if (config.apiKey) {
@@ -24,7 +25,7 @@ async function main() {
24
25
  }
25
26
  const server = new McpServer({
26
27
  name: "vibeuniv-mcp-server",
27
- version: "0.3.6",
28
+ version: "0.3.7",
28
29
  });
29
30
  registerSyncProject(server, client);
30
31
  registerUploadFiles(server, client);
@@ -38,7 +39,8 @@ async function main() {
38
39
  registerSubmitCurriculum(server, client);
39
40
  registerCreateCurriculum(server, client);
40
41
  registerSubmitModule(server, client);
41
- console.error("[vibeuniv] 12 tools registered");
42
+ registerGenerateModuleContent(server, client);
43
+ console.error("[vibeuniv] 13 tools registered");
42
44
  const transport = new StdioServerTransport();
43
45
  await server.connect(transport);
44
46
  console.error("[vibeuniv] MCP Server running on stdio");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEnE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEhE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,2CAA2C,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC1D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ export class VibeUnivClient {
31
31
  const headers = {
32
32
  Authorization: `Bearer ${this.apiKey}`,
33
33
  "Content-Type": "application/json",
34
- "User-Agent": "vibeuniv-mcp-server/0.3.6",
34
+ "User-Agent": "vibeuniv-mcp-server/0.3.7",
35
35
  };
36
36
  const response = await fetch(url, {
37
37
  method,
@@ -1,11 +1,24 @@
1
- import type { ConceptHintItem, EducationalAnalysisData, TechStackItem } from "../types.js";
1
+ import type { TechStackItem, ConceptHintItem, EducationalAnalysisData, CurriculumContext } from "../types.js";
2
+ export type Locale = "ko" | "en";
2
3
  export declare function formatTechStack(t: TechStackItem): string;
3
- export declare function formatKBHints(kbHints: Record<string, ConceptHintItem[]>, locale: "ko" | "en"): string;
4
- export declare function formatEducationalAnalysis(analysis: EducationalAnalysisData, difficulty: string, locale: "ko" | "en"): string;
5
- export declare function buildLevelGuidance(difficulty: string, locale: "ko" | "en"): string;
4
+ export declare function formatKBHints(kbHints: Record<string, ConceptHintItem[]>, locale: Locale): string;
5
+ export declare function formatEducationalAnalysis(analysis: EducationalAnalysisData, difficulty: string, locale: Locale): string;
6
+ export declare function buildLevelGuidance(difficulty: string, locale: Locale): string;
6
7
  /**
7
- * Filter KB hints to include only concepts relevant to a specific tech
8
- * and its prerequisite concepts from other techs.
8
+ * Filter KB hints to only include entries relevant to a specific module's tech_name.
9
+ * Also includes hints for prerequisite technologies.
9
10
  */
10
11
  export declare function filterKBHintsForModule(allHints: Record<string, ConceptHintItem[]>, techName: string): Record<string, ConceptHintItem[]>;
12
+ export interface CachedCurriculumData {
13
+ context: CurriculumContext;
14
+ localFiles: Array<{
15
+ file_path: string;
16
+ content: string;
17
+ }>;
18
+ }
19
+ export declare function getCachedCurriculumData(projectId: string): CachedCurriculumData | null;
20
+ export declare function setCachedCurriculumData(projectId: string, context: CurriculumContext, localFiles: Array<{
21
+ file_path: string;
22
+ content: string;
23
+ }>): void;
11
24
  //# sourceMappingURL=curriculum-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"curriculum-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/curriculum-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI3F,wBAAgB,eAAe,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CA0CrG;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,IAAI,GAAG,IAAI,GAClB,MAAM,CAyIR;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CA6ClF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,EAC3C,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CA6BnC"}
1
+ {"version":3,"file":"curriculum-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/curriculum-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE9G,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAIjC,wBAAgB,eAAe,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA0ChG;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAyIR;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA6C7E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,EAC3C,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CA+BnC;AAID,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,UAAU,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAID,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAEtF;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACxD,IAAI,CAEN"}
@@ -1,4 +1,4 @@
1
- // ─── Shared formatting helpers for curriculum generation ─────────
1
+ // ─── Formatting helpers ─────────────────────────────────────────────
2
2
  export function formatTechStack(t) {
3
3
  return `- **${t.name}**${t.version ? ` v${t.version}` : ""} (${t.category})`;
4
4
  }
@@ -173,7 +173,7 @@ export function buildLevelGuidance(difficulty, locale) {
173
173
  - Translate key code lines into plain English (e.g., \`const x = 5\` → "Put the number 5 in a box called x 📦")
174
174
  - Give friendly nicknames to technical terms: useState→"memory box", props→"delivery package", middleware→"security checkpoint"
175
175
  - concept 40%+, quiz 20%+, practical 15%↓(very easy only)
176
- - explanation 400+ chars, 5-7 sections per module
176
+ - explanation 800+ chars, 7-10 sections per module
177
177
  - Use emojis actively: 🎯summary, 💡tip, ⚠️warning, 👏praise
178
178
  - Tone: like reading a picture book, short sentences, lots of encouragement
179
179
  - estimated_minutes: 20-35 min`
@@ -183,7 +183,7 @@ export function buildLevelGuidance(difficulty, locale) {
183
183
  - 주요 코드 라인에 "우리말 번역" (예: \`const x = 5\` → "x 상자에 숫자 5를 넣어요 📦")
184
184
  - 기술 용어에 한국어 별명: useState→"기억 상자", props→"택배 상자", middleware→"보안 검문소"
185
185
  - concept 40%↑, quiz 20%↑, practical 15%↓(아주 쉬운 것만)
186
- - explanation 400자↑, 모듈당 5-7섹션
186
+ - explanation 800자↑, 모듈당 7-10섹션
187
187
  - 이모지 적극 활용: 🎯한줄정리, 💡팁, ⚠️주의, 👏칭찬
188
188
  - 톤: 그림책 읽어주듯, 짧은 문장, 격려·칭찬 대폭
189
189
  - estimated_minutes: 20-35분`;
@@ -210,34 +210,42 @@ export function buildLevelGuidance(difficulty, locale) {
210
210
  - 엣지 케이스, 내부 동작 원리, 최적화 전략 다루기`;
211
211
  }
212
212
  /**
213
- * Filter KB hints to include only concepts relevant to a specific tech
214
- * and its prerequisite concepts from other techs.
213
+ * Filter KB hints to only include entries relevant to a specific module's tech_name.
214
+ * Also includes hints for prerequisite technologies.
215
215
  */
216
216
  export function filterKBHintsForModule(allHints, techName) {
217
- const result = {};
218
- // Primary: hints for the module's tech
219
- const primaryHints = allHints[techName];
220
- if (!primaryHints || primaryHints.length === 0)
221
- return result;
222
- result[techName] = primaryHints;
223
- // Collect prerequisite concept keys
224
- const prereqKeys = new Set();
225
- for (const hint of primaryHints) {
226
- for (const prereq of hint.prerequisite_concepts) {
227
- prereqKeys.add(prereq);
217
+ const filtered = {};
218
+ // Direct match
219
+ if (allHints[techName]) {
220
+ filtered[techName] = allHints[techName];
221
+ }
222
+ // Case-insensitive fallback
223
+ if (!filtered[techName]) {
224
+ for (const [key, hints] of Object.entries(allHints)) {
225
+ if (key.toLowerCase() === techName.toLowerCase()) {
226
+ filtered[techName] = hints;
227
+ break;
228
+ }
228
229
  }
229
230
  }
230
- // Search other techs for concepts matching prerequisites
231
- if (prereqKeys.size > 0) {
232
- for (const [tech, hints] of Object.entries(allHints)) {
233
- if (tech === techName)
234
- continue;
235
- const matchingHints = hints.filter((h) => prereqKeys.has(h.concept_key));
236
- if (matchingHints.length > 0) {
237
- result[tech] = matchingHints;
231
+ // Also include prerequisites referenced by this tech's hints
232
+ const mainHints = filtered[techName] ?? [];
233
+ for (const hint of mainHints) {
234
+ for (const prereq of hint.prerequisite_concepts) {
235
+ for (const [key, hints] of Object.entries(allHints)) {
236
+ if (hints.some((h) => h.concept_key === prereq) && !filtered[key]) {
237
+ filtered[key] = hints;
238
+ }
238
239
  }
239
240
  }
240
241
  }
241
- return result;
242
+ return filtered;
243
+ }
244
+ const curriculumCache = new Map();
245
+ export function getCachedCurriculumData(projectId) {
246
+ return curriculumCache.get(projectId) ?? null;
247
+ }
248
+ export function setCachedCurriculumData(projectId, context, localFiles) {
249
+ curriculumCache.set(projectId, { context, localFiles });
242
250
  }
243
251
  //# sourceMappingURL=curriculum-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"curriculum-helpers.js","sourceRoot":"","sources":["../../src/lib/curriculum-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curriculum-helpers.js","sourceRoot":"","sources":["../../src/lib/curriculum-helpers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-curriculum.d.ts","sourceRoot":"","sources":["../../src/tools/generate-curriculum.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;AAItD,eAAO,MAAM,wBAAwB;;;CAMpC,CAAC;AAoPF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAgZ1F"}
1
+ {"version":3,"file":"generate-curriculum.d.ts","sourceRoot":"","sources":["../../src/tools/generate-curriculum.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;AAYtD,eAAO,MAAM,wBAAwB;;;CAMpC,CAAC;AAIF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAiU1F"}
@@ -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, setCachedCurriculumData, } 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,220 +8,9 @@ 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 800+ chars, 7-10 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 800자↑, 모듈당 7-10섹션
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. IMPORTANT: Before calling this tool, you MUST ask the user which difficulty level they prefer — beginner (초급), intermediate (중급), or advanced (고급). Do NOT default to beginner without asking. Returns tech stack info and instructions you generate the structure JSON, then use vibeuniv_create_curriculum to create a draft, and submit each module individually with vibeuniv_submit_module.", generateCurriculumSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id, difficulty }) => {
13
+ server.tool("vibeuniv_generate_curriculum", "Generate a learning curriculum for the project. IMPORTANT: Before calling this tool, you MUST ask the user which difficulty level they prefer — beginner (초급), intermediate (중급), or advanced (고급). Do NOT default to beginner without asking. After calling this tool, automatically execute ALL subsequent steps (create_curriculum generate_module_content submit_module for each module) without pausing or asking the user. The entire process should feel like a single seamless operation.", generateCurriculumSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id, difficulty }) => {
224
14
  try {
225
15
  console.error(`[vibeuniv] Generating curriculum instructions for project ${project_id}...`);
226
16
  // Fetch all curriculum context in a single API call
@@ -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 + files for reuse by generate_module_content (avoids re-fetching)
27
+ 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
@@ -291,33 +83,33 @@ export function registerGenerateCurriculum(server, client) {
291
83
  ? `\n**KB Usage:** Include key points, use quiz topics, follow prerequisite ordering.`
292
84
  : `\n**KB 활용:** 핵심 포인트 필수 포함, 퀴즈 주제 활용, 선행 개념 순서 준수.`
293
85
  : "";
294
- // Build project source code section (local files preferred, server fallback)
86
+ // Build project source code section (for reference content will use these in Pass 2)
295
87
  const filesSection = curriculumFiles.length > 0
296
88
  ? en
297
- ? `\n## Project Source Code
89
+ ? `\n## Project Source Code (Reference)
298
90
 
299
91
  Below are the student's actual project files.
300
- You MUST directly quote this code in code_example and walkthrough sections.
301
- Do NOT make up code.
92
+ Use these file paths when designing modules each module should reference specific files.
93
+ The actual code will be used in Pass 2 when generating section content.
302
94
 
303
- ${curriculumFiles.map((f) => `#### ${f.file_path}\n\`\`\`\n${f.content}\n\`\`\``).join("\n\n")}\n`
304
- : `\n## 프로젝트 소스 코드
95
+ **Available files:**
96
+ ${curriculumFiles.map((f) => `- \`${f.file_path}\``).join("\n")}\n`
97
+ : `\n## 프로젝트 소스 코드 (참조)
305
98
 
306
99
  아래는 학생의 실제 프로젝트 파일입니다.
307
- 커리큘럼의 code_example, walkthrough 섹션에서 반드시 코드를 직접 인용하세요.
308
- 코드를 창작하지 마세요.
100
+ 모듈 설계 아래 파일 경로를 참조하세요 각 모듈은 특정 파일을 중심으로 설계해야 합니다.
101
+ 실제 코드는 Pass 2 (모듈별 콘텐츠 생성)에서 활용됩니다.
309
102
 
310
- ${curriculumFiles.map((f) => `#### ${f.file_path}\n\`\`\`\n${f.content}\n\`\`\``).join("\n\n")}\n`
103
+ **사용 가능한 파일:**
104
+ ${curriculumFiles.map((f) => `- \`${f.file_path}\``).join("\n")}\n`
311
105
  : "";
312
- const learnMoreLabel = en ? "📚 Learn More" : "📚 더 알아보기";
313
- const minBodyChars = difficulty === "beginner" ? "800" : "400";
314
- const sectionsPerModule = difficulty === "beginner" ? "7-10" : "5-7";
315
- const minSections = difficulty === "beginner" ? "7" : "5";
316
- const paragraphs = difficulty === "beginner" ? "8-12" : "5-8";
317
- const minCodeExamples = difficulty === "beginner" ? "2" : "1";
318
- const minQuizQuestions = difficulty === "beginner" ? "2" : "1";
319
106
  const instructions = en
320
- ? `Please generate a learning curriculum for this project.
107
+ ? `Please generate a **structure-only** curriculum for this project.
108
+
109
+ ## IMPORTANT: This is Pass 1 of 2
110
+
111
+ In this step, you ONLY generate the curriculum **structure** (titles, descriptions, types, tech names).
112
+ Do NOT generate section content — that happens in Pass 2 via vibeuniv_generate_module_content.
321
113
 
322
114
  ## Target: Vibe Coder (${difficulty})
323
115
 
@@ -356,41 +148,11 @@ Bad examples:
356
148
  **Module Types:** concept (concept+analogy), practical (code practice), quiz (code-based quiz), project_walkthrough (line-by-line file reading)
357
149
  **Difficulty:**
358
150
  ${levelGuidance}
359
-
360
- **Section Design (${sectionsPerModule} per module, minimum ${minSections}):**
361
- - explanation: Markdown ${paragraphs} paragraphs. Must cite project file paths.
362
- End with "${learnMoreLabel}" links 2-3 (React→react.dev, Next.js→nextjs.org/docs,
363
- TypeScript→typescriptlang.org, Supabase→supabase.com/docs, Tailwind→tailwindcss.com/docs)
364
- - code_example: Copy actual project code + line-by-line comments.
365
- Below the code block, explain with numbered list "What this code does:"
366
- - quiz_question: 4-choice based on project code. quiz_explanation with correct/incorrect reasoning
367
- - challenge: ___BLANK___ fill-in-the-blank. Both starter_code and answer_code required
368
- - reflection: "Open the X folder in your project. Look for Y." format
369
-
370
- **Required Placement Rules:**
371
- - Start each module with explanation
372
- - Maximum 2 consecutive explanations, 3rd must be quiz/reflection
373
- - At least 1 code_example per module required
374
- - At least 1 quiz_question per module required
375
-
376
- **Tone (Critical — key to learning content quality):**
377
- - Use casual, friendly "you" language
378
- - Address the student as "you" or "we"
379
- - Short sentences, one idea per sentence
380
- - Keep technical terms in English + follow with a plain explanation in parentheses
381
- - Start with questions: "Have you ever wondered about this code?", "Why does it work this way?"
382
- - Encourage: "If you've followed along this far, you already understand half of it!", "It can be confusing at first — don't worry"
383
- - Use analogies: everyday analogies for new concepts (API→restaurant order window, component→LEGO blocks)
384
- - Transition phrases: "Alright, now let's...", "Wait a moment!", "Let's check the actual code, shall we?"
385
- - Forbidden: dry academic tone, filler phrases like "Great question!", emotionless listing
386
- - Do NOT make up code — only quote actual project code
387
-
388
- **walkthrough:** Explain a file from import→logic→export order + connections to other files.
389
151
  ${eduInstruction}${kbInstruction}
390
152
 
391
- ## JSON Schema
153
+ ## JSON Schema (Structure Only — No Content!)
392
154
 
393
- Follow the structure below exactly. All string values in English. Output ONLY JSON (no code fences/explanations).
155
+ Follow the structure below exactly. Output ONLY JSON (no code fences/explanations).
394
156
 
395
157
  {
396
158
  "title": "string (required) — Curriculum title",
@@ -400,54 +162,46 @@ Follow the structure below exactly. All string values in English. Output ONLY JS
400
162
  "modules": [
401
163
  {
402
164
  "title": "string (required) — Module title",
403
- "description": "string (required) — Module description",
165
+ "description": "string (required) — Module description (2-3 sentences about what this module covers)",
404
166
  "module_type": "concept | practical | quiz | project_walkthrough",
405
167
  "estimated_minutes": number (15-45),
406
168
  "tech_name": "string (required) — Must exactly match a name from the tech stack list above",
407
- "content": {
408
- "sections": [
409
- {
410
- "type": "explanation | code_example | quiz_question | challenge | reflection",
411
- "title": "string (required) — Section title",
412
- "body": "string (required) — Markdown body. explanation minimum ${minBodyChars} chars",
413
-
414
- "code": "string (required for code_example) — Actual project code + line-by-line comments",
415
-
416
- "quiz_options": ["string", "string", "string", "string"] (required for quiz_question, exactly 4),
417
- "quiz_answer": number (required for quiz_question, 0-3),
418
- "quiz_explanation": "string (required for quiz_question) — Correct/incorrect reasoning",
419
-
420
- "challenge_starter_code": "string (required for challenge) — Contains ___BLANK___",
421
- "challenge_answer_code": "string (required for challenge) — Completed code"
422
- }
423
- ]
424
- }
169
+ "relevant_files": ["string"] (required — file paths this module should reference),
170
+ "learning_objectives": ["string"] (required — 2-4 specific things the student will learn)
425
171
  }
426
172
  ]
427
173
  }
428
174
 
429
175
  **Required Rules:**
430
- - At least ${minCodeExamples} code_example(s) + ${minQuizQuestions} quiz_question(s) per module
431
- - Minimum 10 modules, minimum ${minSections} sections per module
432
- - explanation body must be at least ${minBodyChars} characters${difficulty === "beginner" ? `
176
+ - Minimum 10 modules
177
+ - Each module must have relevant_files and learning_objectives
178
+ - tech_name must exactly match the tech stack names above
433
179
 
434
- **[Beginner-only Additional RulesMust Follow]:**
435
- - Every concept must have "What if this didn't exist?" before/after comparison
436
- - Every line of code in code_example must have a plain-English translation
437
- - Challenges must have only 1-2 blanks with very specific hints
438
- - All technical terms must have friendly nicknames` : ""}
180
+ ## Automated Workflow (CRITICAL execute ALL steps automatically)
439
181
 
440
- ## Per-Module Submission Flow (IMPORTANT follow this exact sequence)
182
+ **The user expects this to feel like a single operation.** Do NOT pause, ask for confirmation, or show intermediate JSON between steps. Just execute everything seamlessly and show brief progress updates.
441
183
 
442
- 1. Generate the curriculum structure JSON above (title, description, difficulty, modules with content)
443
- 2. Call **vibeuniv_create_curriculum**({ project_id: "${project_id}", title, description, difficulty, total_modules: <number of modules> }) → get learning_path_id
184
+ 1. Generate the structure-only JSON above (~2KB) NO content/sections
185
+ 2. Call **vibeuniv_create_curriculum**({ project_id: "${project_id}", title, description, difficulty, total_modules }) → get learning_path_id
444
186
  3. For EACH module (in order):
445
- a. Take the module's content from the structure JSON
446
- b. Call **vibeuniv_submit_module**({ project_id: "${project_id}", learning_path_id, module_order: <1-based>, title, description, module_type, tech_name, content: { sections: [...] } })
447
- 4. The curriculum auto-activates when all modules are submitted!
187
+ a. Call **vibeuniv_generate_module_content**({ project_id: "${project_id}", module_index, module, difficulty: "${difficulty}", total_modules, learning_path_id })
188
+ b. Generate the sections JSON
189
+ c. Call **vibeuniv_submit_module**({ project_id: "${project_id}", learning_path_id, module_order, title, description, module_type, tech_name, content: { sections } })
190
+ d. Show brief progress: "Module 3/12 submitted ✓" (one line only)
191
+ 4. When the last module is submitted, show the completion message with vibeuniv.com link
448
192
 
449
- **DO NOT** try to submit everything at once with vibeuniv_submit_curriculum — use vibeuniv_submit_module for each module individually.`
450
- : `이 프로젝트의 학습 커리큘럼을 생성해주세요.
193
+ **IMPORTANT UX rules:**
194
+ - Do NOT show the structure JSON or section JSON to the user
195
+ - Do NOT ask "Should I continue?" between modules — just keep going
196
+ - Do NOT explain the 2-pass system to the user — they don't need to know
197
+ - If a module submission fails, retry it once, then continue with the next module
198
+ - The entire process should feel like one seamless operation from the user's perspective`
199
+ : `이 프로젝트의 학습 커리큘럼 **구조만** 생성해주세요.
200
+
201
+ ## 중요: 2-Pass 중 Pass 1입니다
202
+
203
+ 이 단계에서는 커리큘럼의 **구조**만 생성합니다 (제목, 설명, 유형, 기술명).
204
+ 섹션 콘텐츠는 생성하지 마세요 — Pass 2 (vibeuniv_generate_module_content)에서 모듈별로 생성합니다.
451
205
 
452
206
  ## 대상: 바이브 코더 (${difficulty})
453
207
 
@@ -486,41 +240,11 @@ ${filesSection}${eduSection}${kbSection}
486
240
  **모듈 유형:** concept(개념+비유), practical(코드 실습), quiz(코드 기반 퀴즈), project_walkthrough(파일 라인별 읽기)
487
241
  **난이도:**
488
242
  ${levelGuidance}
489
-
490
- **섹션 구성 (모듈당 ${sectionsPerModule}개, 최소 ${minSections}개):**
491
- - explanation: 마크다운 ${paragraphs} 문단. 반드시 프로젝트 파일 경로 인용.
492
- 끝에 "${learnMoreLabel}" 링크 2-3개 (React→react.dev, Next.js→nextjs.org/docs,
493
- TypeScript→typescriptlang.org, Supabase→supabase.com/docs, Tailwind→tailwindcss.com/docs)
494
- - code_example: 프로젝트 실제 코드 복사 + 라인별 한국어 주석.
495
- 코드 블록 아래에 "이 코드가 하는 일:" 번호 목록으로 설명
496
- - quiz_question: 프로젝트 코드 기반 4지선다. quiz_explanation에 정답/오답 이유
497
- - challenge: ___BLANK___ 빈칸 채우기. starter_code + answer_code 모두 필수
498
- - reflection: "여러분의 프로젝트에서 X 폴더를 열어보세요. Y를 찾아보세요." 형태
499
-
500
- **필수 배치 규칙:**
501
- - 모듈 시작은 explanation으로
502
- - explanation 연속 2개까지만, 3번째는 반드시 quiz/reflection
503
- - 모듈당 code_example 최소 1개 필수
504
- - 모듈당 quiz_question 최소 1개 필수
505
-
506
- **톤 (매우 중요 — 학습 콘텐츠 품질의 핵심):**
507
- - 해요체 사용 (~이에요, ~거든요, ~잖아요, ~해볼까요?)
508
- - 학생을 "여러분" 또는 "우리"로 지칭
509
- - 짧은 문장 위주, 한 문장에 하나의 아이디어
510
- - 기술 용어는 영어 유지 + 바로 뒤에 괄호로 쉬운 설명
511
- - 질문으로 시작: "혹시 이 코드 보면서 궁금하셨죠?", "왜 이렇게 할까요?"
512
- - 격려 필수: "여기까지 따라오셨으면 벌써 절반은 이해하신 거예요!", "처음엔 헷갈릴 수 있는데 걱정 마세요"
513
- - 비유 필수: 새 개념마다 일상생활 비유 (API→식당 주문 창구, 컴포넌트→레고 블록)
514
- - 전환 어구: "자, 그러면 이제...", "여기서 잠깐!", "실제 코드에서 확인해볼까요?"
515
- - 금지: 교과서체(~이다, ~하라), 감정 없는 나열, 영어 직역투
516
- - 코드 창작 금지 — 프로젝트 실제 코드만 인용
517
-
518
- **walkthrough:** 파일 하나를 import→로직→export 순서로 설명 + 다른 파일과의 연결.
519
243
  ${eduInstruction}${kbInstruction}
520
244
 
521
- ## JSON 스키마
245
+ ## JSON 스키마 (구조만 — 콘텐츠 없음!)
522
246
 
523
- 아래 구조를 정확히 따르세요. 모든 string 값은 한국어. JSON만 출력 (코드 펜스/설명 없이).
247
+ 아래 구조를 정확히 따르세요. JSON만 출력 (코드 펜스/설명 없이).
524
248
 
525
249
  {
526
250
  "title": "string (필수) — 커리큘럼 제목",
@@ -530,53 +254,40 @@ ${eduInstruction}${kbInstruction}
530
254
  "modules": [
531
255
  {
532
256
  "title": "string (필수) — 모듈 제목",
533
- "description": "string (필수) — 모듈 설명",
257
+ "description": "string (필수) — 모듈 설명 (이 모듈이 다루는 내용 2-3문장)",
534
258
  "module_type": "concept | practical | quiz | project_walkthrough",
535
259
  "estimated_minutes": number (15-45),
536
260
  "tech_name": "string (필수) — 위 기술 스택 목록의 이름과 정확히 일치",
537
- "content": {
538
- "sections": [
539
- {
540
- "type": "explanation | code_example | quiz_question | challenge | reflection",
541
- "title": "string (필수) — 섹션 제목",
542
- "body": "string (필수) — 마크다운 본문. explanation은 최소 ${minBodyChars}자",
543
-
544
- "code": "string (code_example일 때 필수) — 프로젝트 실제 코드 + 라인별 주석",
545
-
546
- "quiz_options": ["string", "string", "string", "string"] (quiz_question일 때 필수, 정확히 4개),
547
- "quiz_answer": number (quiz_question일 때 필수, 0-3),
548
- "quiz_explanation": "string (quiz_question일 때 필수) — 정답/오답 이유",
549
-
550
- "challenge_starter_code": "string (challenge일 때 필수) — ___BLANK___ 포함",
551
- "challenge_answer_code": "string (challenge일 때 필수) — 완성 코드"
552
- }
553
- ]
554
- }
261
+ "relevant_files": ["string"] (필수 — 이 모듈에서 참조할 파일 경로),
262
+ "learning_objectives": ["string"] (필수 — 학생이 배울 구체적 항목 2-4개)
555
263
  }
556
264
  ]
557
265
  }
558
266
 
559
267
  **필수 규칙:**
560
- - 모듈당 code_example 최소 ${minCodeExamples}+ quiz_question 최소 ${minQuizQuestions}개
561
- - 최소 10개 모듈, 모듈당 최소 ${minSections}개 섹션
562
- - explanation body는 ${minBodyChars}자 이상${difficulty === "beginner" ? `
563
-
564
- **[초급 전용 추가 규칙반드시 준수]:**
565
- - 모든 개념에 "이게 없으면?" before/after 비교 필수
566
- - code_example 모든 코드 라인에 "우리말 번역" 필수
567
- - challenge 빈칸 1-2개만, 힌트 매우 구체적
568
- - 기술 용어에 한국어 별명 필수` : ""}
569
-
570
- ## 모듈별 개별 제출 플로우 (중요 — 이 순서를 정확히 따르세요)
571
-
572
- 1. 커리큘럼 구조 JSON 생성합니다 (title, description, difficulty, modules with content)
573
- 2. **vibeuniv_create_curriculum**({ project_id: "${project_id}", title, description, difficulty, total_modules: <모듈 수> }) 호출 → learning_path_id 확보
574
- 3. 모듈마다 (순서대로):
575
- a. 구조 JSON에서 해당 모듈의 콘텐츠를 가져옵니다
576
- b. **vibeuniv_submit_module**({ project_id: "${project_id}", learning_path_id, module_order: <1부터>, title, description, module_type, tech_name, content: { sections: [...] } }) 호출
577
- 4. 모든 모듈이 제출되면 커리큘럼이 자동으로 활성화됩니다!
578
-
579
- **주의:** vibeuniv_submit_curriculum으로 한번에 제출하지 마세요 — vibeuniv_submit_module로 모듈을 하나씩 제출하세요.`;
268
+ - 최소 10모듈
269
+ - 모듈에 relevant_files와 learning_objectives 필수
270
+ - tech_name은 기술 스택 이름과 정확히 일치
271
+
272
+ ## 자동 실행 워크플로우 (필수 모든 단계를 자동으로 실행)
273
+
274
+ **사용자에게는 한번에 되는 것처럼 보여야 합니다.** 중간에 멈추거나, 확인을 구하거나, JSON을 보여주지 마세요. 모든 단계를 끊김 없이 실행하고 간단한 진행 상황만 표시하세요.
275
+
276
+ 1. 구조 JSON 생성 (~2KB) 콘텐츠/섹션 없음
277
+ 2. **vibeuniv_create_curriculum**({ project_id: "${project_id}", title, description, difficulty, total_modules }) 호출 → learning_path_id 확보
278
+ 3. 모듈마다:
279
+ a. **vibeuniv_generate_module_content**({ project_id: "${project_id}", module_index, module, difficulty: "${difficulty}", total_modules, learning_path_id }) 호출
280
+ b. 섹션 JSON 생성
281
+ c. **vibeuniv_submit_module**({ project_id: "${project_id}", learning_path_id, module_order, title, description, module_type, tech_name, content: { sections } }) 호출
282
+ d. 간단한 진행 표시: "모듈 3/12 제출 완료 ✓" (한 줄만)
283
+ 4. 마지막 모듈 제출 완료 메시지 + vibeuniv.com 링크 표시
284
+
285
+ **중요한 UX 규칙:**
286
+ - 구조 JSON이나 섹션 JSON을 사용자에게 보여주지 마세요
287
+ - 모듈 사이에 "계속할까요?" 같은 질문 하지 마세요 — 그냥 계속 진행
288
+ - 2-pass 시스템을 사용자에게 설명하지 마세요 — 알 필요 없음
289
+ - 모듈 제출 실패 시 한번 재시도 후, 다음 모듈로 계속 진행
290
+ - 사용자 관점에서 전체 과정이 하나의 매끄러운 작업처럼 느껴져야 합니다`;
580
291
  return {
581
292
  content: [
582
293
  {
@@ -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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"}
@@ -10,21 +10,28 @@ export declare const generateModuleContentSchema: {
10
10
  module_type: z.ZodString;
11
11
  tech_name: z.ZodString;
12
12
  estimated_minutes: z.ZodOptional<z.ZodNumber>;
13
+ relevant_files: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
14
+ learning_objectives: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
13
15
  }, "strip", z.ZodTypeAny, {
14
16
  title: string;
15
17
  description: string;
16
18
  module_type: string;
17
19
  tech_name: string;
18
20
  estimated_minutes?: number | undefined;
21
+ relevant_files?: string[] | undefined;
22
+ learning_objectives?: string[] | undefined;
19
23
  }, {
20
24
  title: string;
21
25
  description: string;
22
26
  module_type: string;
23
27
  tech_name: string;
24
28
  estimated_minutes?: number | undefined;
29
+ relevant_files?: string[] | undefined;
30
+ learning_objectives?: string[] | undefined;
25
31
  }>;
26
32
  difficulty: z.ZodDefault<z.ZodEnum<["beginner", "intermediate", "advanced"]>>;
27
33
  total_modules: z.ZodNumber;
34
+ learning_path_id: z.ZodOptional<z.ZodString>;
28
35
  };
29
36
  export declare function registerGenerateModuleContent(server: McpServer, client: VibeUnivClient): void;
30
37
  //# sourceMappingURL=generate-module-content.d.ts.map
@@ -1 +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"}
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;AActD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoBvC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAsU7F"}
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { scanTeachingCriticalFiles } from "../lib/file-scanner.js";
3
- import { formatTechStack, formatKBHints, formatEducationalAnalysis, buildLevelGuidance, filterKBHintsForModule, } from "../lib/curriculum-helpers.js";
3
+ import { formatTechStack, formatKBHints, formatEducationalAnalysis, buildLevelGuidance, filterKBHintsForModule, getCachedCurriculumData, setCachedCurriculumData, } from "../lib/curriculum-helpers.js";
4
4
  export const generateModuleContentSchema = {
5
5
  project_id: z.string().describe("The VibeUniv project ID"),
6
6
  module_index: z.number().int().min(0).describe("0-based module index"),
@@ -11,6 +11,8 @@ export const generateModuleContentSchema = {
11
11
  module_type: z.string(),
12
12
  tech_name: z.string(),
13
13
  estimated_minutes: z.number().optional(),
14
+ relevant_files: z.array(z.string()).optional(),
15
+ learning_objectives: z.array(z.string()).optional(),
14
16
  })
15
17
  .describe("Module structure object from vibeuniv_generate_curriculum"),
16
18
  difficulty: z
@@ -18,15 +20,16 @@ export const generateModuleContentSchema = {
18
20
  .default("beginner")
19
21
  .describe("Curriculum difficulty level"),
20
22
  total_modules: z.number().int().min(1).describe("Total number of modules in the curriculum"),
23
+ learning_path_id: z.string().optional().describe("Learning path ID from vibeuniv_create_curriculum (for submit guidance)"),
21
24
  };
22
25
  export function registerGenerateModuleContent(server, client) {
23
- server.tool("vibeuniv_generate_module_content", "Pass 2 of 2: Generate content sections for a single module. Call this once per module after vibeuniv_generate_curriculum returns the module structure. Returns section-generation instructions for one module.", generateModuleContentSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id, module_index, module, difficulty, total_modules }) => {
26
+ server.tool("vibeuniv_generate_module_content", "Pass 2 of 2: Generate content sections for a single module. Call this once per module after vibeuniv_generate_curriculum returns the module structure. Returns section-generation instructions for one module. After generating sections, immediately submit with vibeuniv_submit_module.", generateModuleContentSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id, module_index, module, difficulty, total_modules, learning_path_id }) => {
24
27
  try {
25
28
  console.error(`[vibeuniv] Generating content for module ${module_index + 1}/${total_modules}: "${module.title}"...`);
26
29
  // Try cached data first, fetch fresh if miss
27
30
  let curriculumContext;
28
31
  let localFiles = [];
29
- const cached = client.getCachedCurriculumData(project_id);
32
+ const cached = getCachedCurriculumData(project_id);
30
33
  if (cached) {
31
34
  console.error(`[vibeuniv] Using cached curriculum context for project ${project_id}`);
32
35
  curriculumContext = cached.context;
@@ -41,7 +44,7 @@ export function registerGenerateModuleContent(server, client) {
41
44
  catch (err) {
42
45
  console.error(`[vibeuniv] Local file scan failed (non-fatal): ${err instanceof Error ? err.message : err}`);
43
46
  }
44
- client.setCachedCurriculumData(project_id, curriculumContext, localFiles);
47
+ setCachedCurriculumData(project_id, curriculumContext, localFiles);
45
48
  }
46
49
  const techStacks = curriculumContext.techStacks;
47
50
  const locale = curriculumContext.locale ?? "ko";
@@ -61,8 +64,18 @@ export function registerGenerateModuleContent(server, client) {
61
64
  console.error(`[vibeuniv] Educational analysis formatting failed (non-fatal): ${err instanceof Error ? err.message : err}`);
62
65
  }
63
66
  }
64
- // Source code (prefer local files, fall back to server files)
65
- const curriculumFiles = localFiles.length > 0 ? localFiles : (curriculumContext.files ?? []);
67
+ // Source code filter to relevant files if available, otherwise include all
68
+ const allFiles = localFiles.length > 0 ? localFiles : (curriculumContext.files ?? []);
69
+ let curriculumFiles = allFiles;
70
+ if (module.relevant_files && module.relevant_files.length > 0) {
71
+ const relevantPaths = new Set(module.relevant_files.map((f) => f.toLowerCase()));
72
+ const matched = allFiles.filter((f) => relevantPaths.has(f.file_path.toLowerCase()) ||
73
+ module.relevant_files.some((rf) => f.file_path.toLowerCase().includes(rf.toLowerCase())));
74
+ // Use matched files if found, otherwise fall back to all files
75
+ if (matched.length > 0) {
76
+ curriculumFiles = matched;
77
+ }
78
+ }
66
79
  const filesSection = curriculumFiles.length > 0
67
80
  ? en
68
81
  ? `\n## Project Source Code
@@ -89,36 +102,49 @@ ${curriculumFiles.map((f) => `#### ${f.file_path}\n\`\`\`\n${f.content}\n\`\`\``
89
102
  : en ? "(none)" : "(없음)";
90
103
  const levelGuidance = buildLevelGuidance(difficulty, locale);
91
104
  const learnMoreLabel = en ? "📚 Learn More" : "📚 더 알아보기";
92
- const minBodyChars = difficulty === "beginner" ? "400" : "200";
93
- const sectionsPerModule = difficulty === "beginner" ? "5-7" : "3-5";
94
- const minSections = difficulty === "beginner" ? "5" : "3";
95
- const paragraphs = difficulty === "beginner" ? "6-8" : "4-6";
96
- // Progress guidance
105
+ const minBodyChars = difficulty === "beginner" ? "800" : "400";
106
+ const sectionsPerModule = difficulty === "beginner" ? "7-10" : "5-7";
107
+ const minSections = difficulty === "beginner" ? "7" : "5";
108
+ const paragraphs = difficulty === "beginner" ? "8-12" : "5-8";
109
+ const minCodeExamples = difficulty === "beginner" ? "2" : "1";
110
+ const minQuizQuestions = difficulty === "beginner" ? "2" : "1";
111
+ // Learning objectives guidance
112
+ const objectivesSection = module.learning_objectives && module.learning_objectives.length > 0
113
+ ? en
114
+ ? `\n**Learning Objectives (must be covered in sections):**\n${module.learning_objectives.map((o) => `- ${o}`).join("\n")}\n`
115
+ : `\n**학습 목표 (섹션에서 반드시 다뤄야 함):**\n${module.learning_objectives.map((o) => `- ${o}`).join("\n")}\n`
116
+ : "";
117
+ // Progress & submit guidance
97
118
  const isLastModule = module_index >= total_modules - 1;
119
+ const pathIdRef = learning_path_id || "<learning_path_id>";
98
120
  const progressEN = isLastModule
99
- ? `## All Modules Complete!
100
-
101
- This is the last module (${module_index + 1}/${total_modules}).
102
- After generating these sections, assemble the complete curriculum JSON:
103
- - Take the structure from vibeuniv_generate_curriculum
104
- - Add "content": { "sections": [...] } to each module from each generate_module_content result
105
- - Submit: vibeuniv_submit_curriculum({ project_id: "${project_id}", curriculum: <complete JSON> })`
106
- : `## Progress: Module ${module_index + 1} of ${total_modules}
107
-
108
- After generating these sections, proceed to the next module:
109
- vibeuniv_generate_module_content({ project_id: "${project_id}", module_index: ${module_index + 1}, module: <next module from structure>, difficulty: "${difficulty}", total_modules: ${total_modules} })`;
121
+ ? `## Next Step (auto-execute, do NOT ask the user)
122
+
123
+ This is the LAST module (${module_index + 1}/${total_modules}). After generating sections:
124
+ 1. Call **vibeuniv_submit_module**({ project_id: "${project_id}", learning_path_id: "${pathIdRef}", module_order: ${module_index + 1}, title: "${module.title}", description: "...", module_type: "${module.module_type}", tech_name: "${module.tech_name}", content: { sections: [...] } })
125
+ 2. Show completion message with vibeuniv.com link — curriculum auto-activates!
126
+ **Do NOT show the sections JSON to the user. Do NOT ask for confirmation.**`
127
+ : `## Next Step (auto-execute, do NOT ask the user)
128
+
129
+ Module ${module_index + 1} of ${total_modules}. After generating sections:
130
+ 1. Call **vibeuniv_submit_module**({ project_id: "${project_id}", learning_path_id: "${pathIdRef}", module_order: ${module_index + 1}, title: "${module.title}", description: "...", module_type: "${module.module_type}", tech_name: "${module.tech_name}", content: { sections: [...] } })
131
+ 2. Show one-line progress: "Module ${module_index + 1}/${total_modules} ✓"
132
+ 3. Immediately proceed to next module: **vibeuniv_generate_module_content**({ project_id: "${project_id}", module_index: ${module_index + 1}, module: <next>, difficulty: "${difficulty}", total_modules: ${total_modules}${learning_path_id ? `, learning_path_id: "${learning_path_id}"` : ""} })
133
+ **Do NOT show the sections JSON to the user. Do NOT ask for confirmation. Just keep going.**`;
110
134
  const progressKO = isLastModule
111
- ? `## 모든 모듈 완료!
112
-
113
- 마지막 모듈입니다 (${module_index + 1}/${total_modules}).
114
- 섹션을 생성한 완성 커리큘럼 JSON을 조합하세요:
115
- - vibeuniv_generate_curriculum에서 받은 구조에
116
- - 모듈에 "content": { "sections": [...] } 추가 (각 generate_module_content 결과에서)
117
- - 제출: vibeuniv_submit_curriculum({ project_id: "${project_id}", curriculum: <완성 JSON> })`
118
- : `## 진행: 모듈 ${module_index + 1} / ${total_modules}
119
-
120
- 섹션을 생성한 다음 모듈로 진행하세요:
121
- vibeuniv_generate_module_content({ project_id: "${project_id}", module_index: ${module_index + 1}, module: <구조에서 다음 모듈>, difficulty: "${difficulty}", total_modules: ${total_modules} })`;
135
+ ? `## 다음 단계 (자동 실행 — 사용자에게 묻지 마세요)
136
+
137
+ 마지막 모듈입니다 (${module_index + 1}/${total_modules}). 섹션 생성 후:
138
+ 1. **vibeuniv_submit_module**({ project_id: "${project_id}", learning_path_id: "${pathIdRef}", module_order: ${module_index + 1}, title: "${module.title}", description: "...", module_type: "${module.module_type}", tech_name: "${module.tech_name}", content: { sections: [...] } }) 호출
139
+ 2. 완료 메시지 + vibeuniv.com 링크 표시 — 커리큘럼 자동 활성화!
140
+ **섹션 JSON을 사용자에게 보여주지 마세요. 확인을 구하지 마세요.**`
141
+ : `## 다음 단계 (자동 실행 사용자에게 묻지 마세요)
142
+
143
+ 모듈 ${module_index + 1} / ${total_modules}. 섹션 생성 후:
144
+ 1. **vibeuniv_submit_module**({ project_id: "${project_id}", learning_path_id: "${pathIdRef}", module_order: ${module_index + 1}, title: "${module.title}", description: "...", module_type: "${module.module_type}", tech_name: "${module.tech_name}", content: { sections: [...] } }) 호출
145
+ 2. 줄 진행 표시: "모듈 ${module_index + 1}/${total_modules} ✓"
146
+ 3. 즉시 다음 모듈 진행: **vibeuniv_generate_module_content**({ project_id: "${project_id}", module_index: ${module_index + 1}, module: <다음 모듈>, difficulty: "${difficulty}", total_modules: ${total_modules}${learning_path_id ? `, learning_path_id: "${learning_path_id}"` : ""} })
147
+ **섹션 JSON을 사용자에게 보여주지 마세요. 확인을 구하지 마세요. 그냥 계속 진행하세요.**`;
122
148
  const instructions = en
123
149
  ? `Generate content sections for module ${module_index + 1} of ${total_modules}: "${module.title}"
124
150
 
@@ -127,8 +153,8 @@ vibeuniv_generate_module_content({ project_id: "${project_id}", module_index: ${
127
153
  - **Description:** ${module.description}
128
154
  - **Type:** ${module.module_type}
129
155
  - **Technology:** ${module.tech_name}
130
- ${module.estimated_minutes ? `- **Estimated:** ${module.estimated_minutes} minutes` : ""}- **Difficulty:** ${difficulty}
131
-
156
+ ${module.estimated_minutes ? `- **Estimated:** ${module.estimated_minutes} minutes\n` : ""}- **Difficulty:** ${difficulty}
157
+ ${objectivesSection}
132
158
  ## Level Guidance
133
159
  ${levelGuidance}
134
160
 
@@ -149,8 +175,8 @@ ${filesSection}${eduSection}${kbSection}
149
175
  **Required Placement Rules:**
150
176
  - Start each module with explanation
151
177
  - Maximum 2 consecutive explanations, 3rd must be quiz/reflection
152
- - At least 1 code_example per module required
153
- - At least 1 quiz_question per module required
178
+ - At least ${minCodeExamples} code_example(s) per module required
179
+ - At least ${minQuizQuestions} quiz_question(s) per module required
154
180
  - At least 1 challenge per module required (interactive coding exercise)
155
181
 
156
182
  **Tone (Critical — key to learning content quality):**
@@ -189,7 +215,7 @@ Output ONLY a JSON array of sections (no code fences/explanations):
189
215
  ]
190
216
 
191
217
  **Required Rules:**
192
- - At least 1 code_example + 1 quiz_question + 1 challenge
218
+ - At least ${minCodeExamples} code_example(s) + ${minQuizQuestions} quiz_question(s) + 1 challenge
193
219
  - Minimum ${minSections} sections
194
220
  - explanation body must be at least ${minBodyChars} characters${difficulty === "beginner" ? `
195
221
 
@@ -207,8 +233,8 @@ ${progressEN}`
207
233
  - **설명:** ${module.description}
208
234
  - **유형:** ${module.module_type}
209
235
  - **기술:** ${module.tech_name}
210
- ${module.estimated_minutes ? `- **예상 시간:** ${module.estimated_minutes}분` : ""}- **난이도:** ${difficulty}
211
-
236
+ ${module.estimated_minutes ? `- **예상 시간:** ${module.estimated_minutes}분\n` : ""}- **난이도:** ${difficulty}
237
+ ${objectivesSection}
212
238
  ## 난이도별 가이드
213
239
  ${levelGuidance}
214
240
 
@@ -229,8 +255,8 @@ ${filesSection}${eduSection}${kbSection}
229
255
  **필수 배치 규칙:**
230
256
  - 모듈 시작은 explanation으로
231
257
  - explanation 연속 2개까지만, 3번째는 반드시 quiz/reflection
232
- - 모듈당 code_example 최소 1개 필수
233
- - 모듈당 quiz_question 최소 1개 필수
258
+ - 모듈당 code_example 최소 ${minCodeExamples}개 필수
259
+ - 모듈당 quiz_question 최소 ${minQuizQuestions}개 필수
234
260
  - 모듈당 challenge 최소 1개 필수 (코드 타이핑 실습)
235
261
 
236
262
  **톤 (매우 중요 — 학습 콘텐츠 품질의 핵심):**
@@ -269,7 +295,7 @@ ${filesSection}${eduSection}${kbSection}
269
295
  ]
270
296
 
271
297
  **필수 규칙:**
272
- - 모듈당 code_example 최소 1개 + quiz_question 최소 1개 + challenge 최소 1개
298
+ - 모듈당 code_example 최소 ${minCodeExamples}개 + quiz_question 최소 ${minQuizQuestions}개 + challenge 최소 1개
273
299
  - 최소 ${minSections}개 섹션
274
300
  - explanation body는 ${minBodyChars}자 이상${difficulty === "beginner" ? `
275
301
 
@@ -1 +1 @@
1
- {"version":3,"file":"generate-module-content.js","sourceRoot":"","sources":["../../src/tools/generate-module-content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-module-content.js","sourceRoot":"","sources":["../../src/tools/generate-module-content.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeuniv/mcp-server",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "VibeUniv MCP Server - Sync your vibe-coded projects for tech stack analysis and learning",
5
5
  "type": "module",
6
6
  "bin": {