@vibeuniv/mcp-server 0.3.4 β†’ 0.3.5

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
@@ -12,10 +12,11 @@ import { registerAskTutor } from "./tools/ask-tutor.js";
12
12
  import { registerSubmitAnalysis } from "./tools/submit-analysis.js";
13
13
  import { registerSubmitTechStacks } from "./tools/submit-tech-stacks.js";
14
14
  import { registerGenerateCurriculum } from "./tools/generate-curriculum.js";
15
- import { registerGenerateModuleContent } from "./tools/generate-module-content.js";
16
15
  import { registerSubmitCurriculum } from "./tools/submit-curriculum.js";
16
+ import { registerCreateCurriculum } from "./tools/create-curriculum.js";
17
+ import { registerSubmitModule } from "./tools/submit-module.js";
17
18
  async function main() {
18
- console.error("[vibeuniv] Starting VibeUniv MCP Server v0.3.4...");
19
+ console.error("[vibeuniv] Starting VibeUniv MCP Server v0.3.5...");
19
20
  const config = loadConfig();
20
21
  const client = new VibeUnivClient(config.apiKey, config.apiUrl);
21
22
  if (config.apiKey) {
@@ -23,7 +24,7 @@ async function main() {
23
24
  }
24
25
  const server = new McpServer({
25
26
  name: "vibeuniv-mcp-server",
26
- version: "0.3.4",
27
+ version: "0.3.5",
27
28
  });
28
29
  registerSyncProject(server, client);
29
30
  registerUploadFiles(server, client);
@@ -34,9 +35,10 @@ async function main() {
34
35
  registerSubmitAnalysis(server, client);
35
36
  registerSubmitTechStacks(server, client);
36
37
  registerGenerateCurriculum(server, client);
37
- registerGenerateModuleContent(server, client);
38
38
  registerSubmitCurriculum(server, client);
39
- console.error("[vibeuniv] 11 tools registered");
39
+ registerCreateCurriculum(server, client);
40
+ registerSubmitModule(server, client);
41
+ console.error("[vibeuniv] 12 tools registered");
40
42
  const transport = new StdioServerTransport();
41
43
  await server.connect(transport);
42
44
  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,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,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,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC,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":";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,22 +1,9 @@
1
- import type { AnalysisResult, CreateProjectInput, CurriculumContext, CurriculumSubmitResult, EducationalAnalysisData, KnowledgeHintsResult, LearningPath, Locale, Project, ProjectDetail, ProjectFile, SessionLog, TechStackItem, TechStackSubmission, TechStackSubmitResult, TutorContext, TutorResponse } from "../types.js";
1
+ import type { AnalysisResult, CreateProjectInput, CurriculumContext, CurriculumStartResult, CurriculumSubmitResult, EducationalAnalysisData, KnowledgeHintsResult, LearningPath, Locale, ModuleSubmitResult, Project, ProjectDetail, ProjectFile, SessionLog, TechStackItem, TechStackSubmission, TechStackSubmitResult, TutorContext, TutorResponse } from "../types.js";
2
2
  export declare class VibeUnivClient {
3
3
  private apiKey;
4
4
  private baseUrl;
5
5
  private cachedLocale;
6
- private static CURRICULUM_CACHE_TTL;
7
- private _curriculumCache;
8
6
  constructor(apiKey: string, baseUrl: string);
9
- getCachedCurriculumData(projectId: string): {
10
- context: CurriculumContext;
11
- localFiles: Array<{
12
- file_path: string;
13
- content: string;
14
- }>;
15
- } | null;
16
- setCachedCurriculumData(projectId: string, context: CurriculumContext, localFiles: Array<{
17
- file_path: string;
18
- content: string;
19
- }>): void;
20
7
  getUserLocale(): Promise<Locale>;
21
8
  private request;
22
9
  createProject(data: CreateProjectInput): Promise<Project>;
@@ -35,5 +22,23 @@ export declare class VibeUnivClient {
35
22
  submitTechStacks(projectId: string, submission: TechStackSubmission): Promise<TechStackSubmitResult>;
36
23
  getTutorContext(projectId: string): Promise<TutorContext>;
37
24
  getCurriculumContext(projectId: string): Promise<CurriculumContext>;
25
+ createCurriculum(projectId: string, data: {
26
+ title: string;
27
+ description: string;
28
+ difficulty: string;
29
+ total_modules: number;
30
+ estimated_hours?: number;
31
+ }): Promise<CurriculumStartResult>;
32
+ submitModule(projectId: string, pathId: string, module: {
33
+ module_order: number;
34
+ title: string;
35
+ description: string;
36
+ module_type: string;
37
+ tech_name: string;
38
+ estimated_minutes?: number;
39
+ content: {
40
+ sections: unknown[];
41
+ };
42
+ }): Promise<ModuleSubmitResult>;
38
43
  }
39
44
  //# sourceMappingURL=api-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EAEd,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,EACZ,MAAM,EACN,OAAO,EACP,aAAa,EACb,WAAW,EACX,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACd,MAAM,aAAa,CAAC;AA2DrB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAuB;IAG3C,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAkB;IACrD,OAAO,CAAC,gBAAgB,CAInB;gBAEO,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK3C,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG;QAC1C,OAAO,EAAE,iBAAiB,CAAC;QAC3B,UAAU,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC3D,GAAG,IAAI;IAUR,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GACxD,IAAI;IAQD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;YAWxB,OAAO;IA2Cf,aAAa,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;YAoBnD,YAAY;IAyCpB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA2BzD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhE,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,CAAC;IAenB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAuC1D,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoBrE,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAYlF,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAsB5B,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAO3D,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CAAC,qBAAqB,CAAC;IAQ3B,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAOzD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAM1E"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -4,30 +4,10 @@ export class VibeUnivClient {
4
4
  apiKey;
5
5
  baseUrl;
6
6
  cachedLocale = null;
7
- // Curriculum context cache for 2-pass generation (TTL: 30 min)
8
- static CURRICULUM_CACHE_TTL = 30 * 60 * 1000;
9
- _curriculumCache = new Map();
10
7
  constructor(apiKey, baseUrl) {
11
8
  this.apiKey = apiKey;
12
9
  this.baseUrl = baseUrl.replace(/\/$/, "");
13
10
  }
14
- getCachedCurriculumData(projectId) {
15
- const entry = this._curriculumCache.get(projectId);
16
- if (!entry)
17
- return null;
18
- if (Date.now() - entry.timestamp > VibeUnivClient.CURRICULUM_CACHE_TTL) {
19
- this._curriculumCache.delete(projectId);
20
- return null;
21
- }
22
- return { context: entry.context, localFiles: entry.localFiles };
23
- }
24
- setCachedCurriculumData(projectId, context, localFiles) {
25
- this._curriculumCache.set(projectId, {
26
- context,
27
- localFiles,
28
- timestamp: Date.now(),
29
- });
30
- }
31
11
  async getUserLocale() {
32
12
  if (this.cachedLocale)
33
13
  return this.cachedLocale;
@@ -219,5 +199,22 @@ export class VibeUnivClient {
219
199
  async getCurriculumContext(projectId) {
220
200
  return this.request("GET", `/projects/${projectId}/curriculum-context`);
221
201
  }
202
+ async createCurriculum(projectId, data) {
203
+ const raw = await this.request("POST", `/projects/${projectId}/curriculum/start`, data);
204
+ return {
205
+ learningPathId: raw.learning_path_id,
206
+ status: raw.status,
207
+ };
208
+ }
209
+ async submitModule(projectId, pathId, module) {
210
+ const raw = await this.request("POST", `/projects/${projectId}/curriculum/${pathId}/modules`, module);
211
+ return {
212
+ moduleId: raw.module_id,
213
+ moduleOrder: raw.module_order,
214
+ submitted: raw.submitted,
215
+ total: raw.total,
216
+ status: raw.status,
217
+ };
218
+ }
222
219
  }
223
220
  //# sourceMappingURL=api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
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 createCurriculumSchema: {
5
+ project_id: z.ZodString;
6
+ title: z.ZodString;
7
+ description: z.ZodString;
8
+ difficulty: z.ZodEnum<["beginner", "intermediate", "advanced"]>;
9
+ total_modules: z.ZodNumber;
10
+ estimated_hours: z.ZodOptional<z.ZodNumber>;
11
+ };
12
+ export declare function registerCreateCurriculum(server: McpServer, client: VibeUnivClient): void;
13
+ //# sourceMappingURL=create-curriculum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-curriculum.d.ts","sourceRoot":"","sources":["../../src/tools/create-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;AAEtD,eAAO,MAAM,sBAAsB;;;;;;;CAiBlC,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAqExF"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ export const createCurriculumSchema = {
3
+ project_id: z.string().describe("The VibeUniv project ID"),
4
+ title: z.string().describe("Curriculum title"),
5
+ description: z.string().describe("Curriculum description"),
6
+ difficulty: z
7
+ .enum(["beginner", "intermediate", "advanced"])
8
+ .describe("Target difficulty level"),
9
+ total_modules: z
10
+ .number()
11
+ .int()
12
+ .min(1)
13
+ .max(50)
14
+ .describe("Total number of modules that will be submitted"),
15
+ estimated_hours: z
16
+ .number()
17
+ .optional()
18
+ .describe("Estimated total hours to complete the curriculum"),
19
+ };
20
+ export function registerCreateCurriculum(server, client) {
21
+ server.tool("vibeuniv_create_curriculum", "Create a draft learning curriculum (learning path) for the project. This creates the curriculum shell β€” then submit each module individually with vibeuniv_submit_module. The curriculum auto-activates when all modules are submitted.", createCurriculumSchema, { readOnlyHint: false, openWorldHint: true }, async ({ project_id, title, description, difficulty, total_modules, estimated_hours }) => {
22
+ try {
23
+ console.error(`[vibeuniv] Creating draft curriculum for project ${project_id}...`);
24
+ const result = await client.createCurriculum(project_id, {
25
+ title,
26
+ description,
27
+ difficulty,
28
+ total_modules,
29
+ estimated_hours,
30
+ });
31
+ const locale = await client.getUserLocale();
32
+ const en = locale === "en";
33
+ const message = en
34
+ ? [
35
+ `Draft curriculum created successfully!`,
36
+ ``,
37
+ `- Learning Path ID: ${result.learningPathId}`,
38
+ `- Status: ${result.status}`,
39
+ `- Total modules to submit: ${total_modules}`,
40
+ ``,
41
+ `Next steps:`,
42
+ `For each module, generate content with vibeuniv_generate_module_content, then submit immediately with vibeuniv_submit_module.`,
43
+ ``,
44
+ `The curriculum will auto-activate when all ${total_modules} modules are submitted.`,
45
+ ]
46
+ : [
47
+ `컀리큘럼 μ΄ˆμ•ˆμ΄ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€!`,
48
+ ``,
49
+ `- Learning Path ID: ${result.learningPathId}`,
50
+ `- μƒνƒœ: ${result.status}`,
51
+ `- μ œμΆœν•  λͺ¨λ“ˆ 수: ${total_modules}`,
52
+ ``,
53
+ `λ‹€μŒ 단계:`,
54
+ `각 λͺ¨λ“ˆλ§ˆλ‹€ vibeuniv_generate_module_content둜 μ½˜ν…μΈ λ₯Ό μƒμ„±ν•œ ν›„, μ¦‰μ‹œ vibeuniv_submit_module둜 μ œμΆœν•˜μ„Έμš”.`,
55
+ ``,
56
+ `${total_modules}개 λͺ¨λ“ˆμ΄ λͺ¨λ‘ 제좜되면 컀리큘럼이 μžλ™μœΌλ‘œ ν™œμ„±ν™”λ©λ‹ˆλ‹€.`,
57
+ ];
58
+ return {
59
+ content: [
60
+ {
61
+ type: "text",
62
+ text: message.join("\n"),
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof Error ? error.message : String(error);
69
+ return {
70
+ content: [
71
+ {
72
+ type: "text",
73
+ text: `Failed to create curriculum: ${message}`,
74
+ },
75
+ ],
76
+ isError: true,
77
+ };
78
+ }
79
+ });
80
+ }
81
+ //# sourceMappingURL=create-curriculum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-curriculum.js","sourceRoot":"","sources":["../../src/tools/create-curriculum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC1D,UAAU,EAAE,CAAC;SACV,IAAI,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;SAC9C,QAAQ,CAAC,yBAAyB,CAAC;IACtC,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;CAChE,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,MAAsB;IAChF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,yOAAyO,EACzO,sBAAsB,EACtB,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EAC5C,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,EAAE;QACvF,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,oDAAoD,UAAU,KAAK,CAAC,CAAC;YAEnF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE;gBACvD,KAAK;gBACL,WAAW;gBACX,UAAU;gBACV,aAAa;gBACb,eAAe;aAChB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;YAE3B,MAAM,OAAO,GAAG,EAAE;gBAChB,CAAC,CAAC;oBACE,wCAAwC;oBACxC,EAAE;oBACF,uBAAuB,MAAM,CAAC,cAAc,EAAE;oBAC9C,aAAa,MAAM,CAAC,MAAM,EAAE;oBAC5B,8BAA8B,aAAa,EAAE;oBAC7C,EAAE;oBACF,aAAa;oBACb,+HAA+H;oBAC/H,EAAE;oBACF,8CAA8C,aAAa,yBAAyB;iBACrF;gBACH,CAAC,CAAC;oBACE,mBAAmB;oBACnB,EAAE;oBACF,uBAAuB,MAAM,CAAC,cAAc,EAAE;oBAC9C,SAAS,MAAM,CAAC,MAAM,EAAE;oBACxB,eAAe,aAAa,EAAE;oBAC9B,EAAE;oBACF,QAAQ;oBACR,wFAAwF;oBACxF,EAAE;oBACF,GAAG,aAAa,kCAAkC;iBACnD,CAAC;YAEN,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;qBACzB;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gCAAgC,OAAO,EAAE;qBAChD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -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;AAUtD,eAAO,MAAM,wBAAwB;;;CAMpC,CAAC;AAIF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA6S1F"}
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,6 +1,5 @@
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";
4
3
  export const generateCurriculumSchema = {
5
4
  project_id: z.string().describe("The VibeUniv project ID"),
6
5
  difficulty: z
@@ -8,11 +7,222 @@ export const generateCurriculumSchema = {
8
7
  .default("beginner")
9
8
  .describe("Target difficulty level for the curriculum"),
10
9
  };
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
+ }
11
221
  // ─── Tool registration ──────────────────────────────────────────────
12
222
  export function registerGenerateCurriculum(server, client) {
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 }) => {
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 }) => {
14
224
  try {
15
- console.error(`[vibeuniv] Generating curriculum structure instructions for project ${project_id}...`);
225
+ console.error(`[vibeuniv] Generating curriculum instructions for project ${project_id}...`);
16
226
  // Fetch all curriculum context in a single API call
17
227
  const curriculumContext = await client.getCurriculumContext(project_id);
18
228
  // Read teaching-critical files from local disk (avoids server roundtrip for file decryption)
@@ -23,8 +233,6 @@ export function registerGenerateCurriculum(server, client) {
23
233
  catch (err) {
24
234
  console.error(`[vibeuniv] Local file scan failed (non-fatal): ${err instanceof Error ? err.message : err}`);
25
235
  }
26
- // Cache context + local files for Pass 2 (generate_module_content)
27
- client.setCachedCurriculumData(project_id, curriculumContext, localFiles);
28
236
  // Prefer local files; fall back to server files if local scan yields nothing
29
237
  const curriculumFiles = localFiles.length > 0
30
238
  ? localFiles
@@ -89,18 +297,27 @@ export function registerGenerateCurriculum(server, client) {
89
297
  ? `\n## Project Source Code
90
298
 
91
299
  Below are the student's actual project files.
92
- Use these to design modules around actual project features and files.
300
+ You MUST directly quote this code in code_example and walkthrough sections.
301
+ Do NOT make up code.
93
302
 
94
303
  ${curriculumFiles.map((f) => `#### ${f.file_path}\n\`\`\`\n${f.content}\n\`\`\``).join("\n\n")}\n`
95
304
  : `\n## ν”„λ‘œμ νŠΈ μ†ŒμŠ€ μ½”λ“œ
96
305
 
97
306
  μ•„λž˜λŠ” ν•™μƒμ˜ μ‹€μ œ ν”„λ‘œμ νŠΈ νŒŒμΌμž…λ‹ˆλ‹€.
98
- μ‹€μ œ ν”„λ‘œμ νŠΈ κΈ°λŠ₯/νŒŒμΌμ„ μ€‘μ‹¬μœΌλ‘œ λͺ¨λ“ˆμ„ μ„€κ³„ν•˜μ„Έμš”.
307
+ 컀리큘럼의 code_example, walkthrough μ„Ήμ…˜μ—μ„œ λ°˜λ“œμ‹œ 이 μ½”λ“œλ₯Ό 직접 μΈμš©ν•˜μ„Έμš”.
308
+ μ½”λ“œλ₯Ό μ°½μž‘ν•˜μ§€ λ§ˆμ„Έμš”.
99
309
 
100
310
  ${curriculumFiles.map((f) => `#### ${f.file_path}\n\`\`\`\n${f.content}\n\`\`\``).join("\n\n")}\n`
101
311
  : "";
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";
102
319
  const instructions = en
103
- ? `Please generate a learning curriculum STRUCTURE for this project.
320
+ ? `Please generate a learning curriculum for this project.
104
321
 
105
322
  ## Target: Vibe Coder (${difficulty})
106
323
 
@@ -139,11 +356,41 @@ Bad examples:
139
356
  **Module Types:** concept (concept+analogy), practical (code practice), quiz (code-based quiz), project_walkthrough (line-by-line file reading)
140
357
  **Difficulty:**
141
358
  ${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.
142
389
  ${eduInstruction}${kbInstruction}
143
390
 
144
- ## JSON Schema (Structure Only)
391
+ ## JSON Schema
145
392
 
146
- Output ONLY JSON (no code fences/explanations). Do NOT include "content" or "sections" β€” those will be generated per-module in the next step.
393
+ Follow the structure below exactly. All string values in English. Output ONLY JSON (no code fences/explanations).
147
394
 
148
395
  {
149
396
  "title": "string (required) β€” Curriculum title",
@@ -156,35 +403,51 @@ Output ONLY JSON (no code fences/explanations). Do NOT include "content" or "sec
156
403
  "description": "string (required) β€” Module description",
157
404
  "module_type": "concept | practical | quiz | project_walkthrough",
158
405
  "estimated_minutes": number (15-45),
159
- "tech_name": "string (required) β€” Must exactly match a name from the tech stack list above"
406
+ "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
+ }
160
425
  }
161
426
  ]
162
427
  }
163
428
 
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
- : `이 ν”„λ‘œμ νŠΈμ˜ ν•™μŠ΅ 컀리큘럼 ꡬ쑰λ₯Ό μƒμ„±ν•΄μ£Όμ„Έμš”.
429
+ **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" ? `
433
+
434
+ **[Beginner-only Additional Rules β€” Must 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` : ""}
439
+
440
+ ## Per-Module Submission Flow (IMPORTANT β€” follow this exact sequence)
441
+
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
444
+ 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!
448
+
449
+ **DO NOT** try to submit everything at once with vibeuniv_submit_curriculum β€” use vibeuniv_submit_module for each module individually.`
450
+ : `이 ν”„λ‘œμ νŠΈμ˜ ν•™μŠ΅ μ»€λ¦¬ν˜λŸΌμ„ μƒμ„±ν•΄μ£Όμ„Έμš”.
188
451
 
189
452
  ## λŒ€μƒ: λ°”μ΄λΈŒ 코더 (${difficulty})
190
453
 
@@ -223,11 +486,41 @@ ${filesSection}${eduSection}${kbSection}
223
486
  **λͺ¨λ“ˆ μœ ν˜•:** concept(κ°œλ…+λΉ„μœ ), practical(μ½”λ“œ μ‹€μŠ΅), quiz(μ½”λ“œ 기반 ν€΄μ¦ˆ), project_walkthrough(파일 라인별 읽기)
224
487
  **λ‚œμ΄λ„:**
225
488
  ${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 μˆœμ„œλ‘œ μ„€λͺ… + λ‹€λ₯Έ 파일과의 μ—°κ²°.
226
519
  ${eduInstruction}${kbInstruction}
227
520
 
228
- ## JSON μŠ€ν‚€λ§ˆ (ꡬ쑰만)
521
+ ## JSON μŠ€ν‚€λ§ˆ
229
522
 
230
- μ•„λž˜ ꡬ쑰λ₯Ό μ •ν™•νžˆ λ”°λ₯΄μ„Έμš”. JSON만 좜λ ₯ (μ½”λ“œ 펜슀/μ„€λͺ… 없이). "content"λ‚˜ "sections"λŠ” ν¬ν•¨ν•˜μ§€ λ§ˆμ„Έμš” β€” λ‹€μŒ λ‹¨κ³„μ—μ„œ λͺ¨λ“ˆλ³„λ‘œ μƒμ„±λ©λ‹ˆλ‹€.
523
+ μ•„λž˜ ꡬ쑰λ₯Ό μ •ν™•νžˆ λ”°λ₯΄μ„Έμš”. λͺ¨λ“  string 값은 ν•œκ΅­μ–΄. JSON만 좜λ ₯ (μ½”λ“œ 펜슀/μ„€λͺ… 없이).
231
524
 
232
525
  {
233
526
  "title": "string (ν•„μˆ˜) β€” 컀리큘럼 제λͺ©",
@@ -240,34 +533,50 @@ ${eduInstruction}${kbInstruction}
240
533
  "description": "string (ν•„μˆ˜) β€” λͺ¨λ“ˆ μ„€λͺ…",
241
534
  "module_type": "concept | practical | quiz | project_walkthrough",
242
535
  "estimated_minutes": number (15-45),
243
- "tech_name": "string (ν•„μˆ˜) β€” μœ„ 기술 μŠ€νƒ λͺ©λ‘μ˜ 이름과 μ •ν™•νžˆ 일치"
536
+ "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
+ }
244
555
  }
245
556
  ]
246
557
  }
247
558
 
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> })`;
559
+ **ν•„μˆ˜ κ·œμΉ™:**
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둜 λͺ¨λ“ˆμ„ ν•˜λ‚˜μ”© μ œμΆœν•˜μ„Έμš”.`;
271
580
  return {
272
581
  content: [
273
582
  {
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"submit-curriculum.d.ts","sourceRoot":"","sources":["../../src/tools/submit-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;AAEtD,eAAO,MAAM,sBAAsB;;;CAQlC,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAuGxF"}
1
+ {"version":3,"file":"submit-curriculum.d.ts","sourceRoot":"","sources":["../../src/tools/submit-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;AAEtD,eAAO,MAAM,sBAAsB;;;CAQlC,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAqGxF"}
@@ -67,24 +67,22 @@ export function registerSubmitCurriculum(server, client) {
67
67
  `--- Validation Guide ---`,
68
68
  `Server minimum requirements:`,
69
69
  `β€’ 10+ modules (aim for 10-15)`,
70
- `β€’ Beginner: 5+ sections/module, 400+ chars/explanation`,
71
- `β€’ Other: 3+ sections/module, 200+ chars/explanation`,
72
- `β€’ Each module needs at least 1 code_example + 1 quiz_question + 1 challenge`,
70
+ `β€’ Beginner: 7+ sections/module, 800+ chars/explanation, 2+ code_examples, 2+ quiz_questions`,
71
+ `β€’ Other: 5+ sections/module, 400+ chars/explanation, 1+ code_example, 1+ quiz_question`,
73
72
  `β€’ quiz_question needs exactly 4 options + quiz_explanation`,
74
73
  ``,
75
- `Fix the failing module/section and resubmit β€” no need to regenerate everything.`,
74
+ `TIP: Consider using vibeuniv_create_curriculum + vibeuniv_submit_module for per-module submission instead.`,
76
75
  ]
77
76
  : [
78
77
  ``,
79
78
  `--- 검증 κ°€μ΄λ“œ ---`,
80
79
  `μ„œλ²„ μ΅œμ†Œ μš”κ΅¬μ‚¬ν•­:`,
81
80
  `β€’ 10개 이상 λͺ¨λ“ˆ (10-15개 ꢌμž₯)`,
82
- `β€’ μ΄ˆκΈ‰: λͺ¨λ“ˆλ‹Ή 5κ°œβ†‘ μ„Ήμ…˜, explanation 400μžβ†‘`,
83
- `β€’ κ·Έ μ™Έ: λͺ¨λ“ˆλ‹Ή 3κ°œβ†‘ μ„Ήμ…˜, explanation 200μžβ†‘`,
84
- `β€’ λͺ¨λ“ˆλ‹Ή code_example 1κ°œβ†‘ + quiz_question 1κ°œβ†‘ + challenge 1κ°œβ†‘ ν•„μˆ˜`,
81
+ `β€’ μ΄ˆκΈ‰: λͺ¨λ“ˆλ‹Ή 7κ°œβ†‘ μ„Ήμ…˜, explanation 800μžβ†‘, code_example 2κ°œβ†‘, quiz_question 2κ°œβ†‘`,
82
+ `β€’ κ·Έ μ™Έ: λͺ¨λ“ˆλ‹Ή 5κ°œβ†‘ μ„Ήμ…˜, explanation 400μžβ†‘, code_example 1κ°œβ†‘, quiz_question 1κ°œβ†‘`,
85
83
  `β€’ quiz_question은 μ •ν™•νžˆ 4개 선택지 + quiz_explanation ν•„μˆ˜`,
86
84
  ``,
87
- `μ‹€νŒ¨ν•œ λͺ¨λ“ˆ/μ„Ήμ…˜λ§Œ μˆ˜μ •ν•΄μ„œ λ‹€μ‹œ μ œμΆœν•˜μ„Έμš” β€” 전체 μž¬μƒμ„± λΆˆν•„μš”.`,
85
+ `TIP: vibeuniv_create_curriculum + vibeuniv_submit_module둜 λͺ¨λ“ˆλ³„ κ°œλ³„ μ œμΆœμ„ μ‚¬μš©ν•΄λ³΄μ„Έμš”.`,
88
86
  ];
89
87
  return {
90
88
  content: [
@@ -1 +1 @@
1
- {"version":3,"file":"submit-curriculum.js","sourceRoot":"","sources":["../../src/tools/submit-curriculum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"submit-curriculum.js","sourceRoot":"","sources":["../../src/tools/submit-curriculum.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
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 submitModuleSchema: {
5
+ project_id: z.ZodString;
6
+ learning_path_id: z.ZodString;
7
+ module_order: z.ZodNumber;
8
+ title: z.ZodString;
9
+ description: z.ZodString;
10
+ module_type: z.ZodEnum<["concept", "practical", "quiz", "project_walkthrough"]>;
11
+ tech_name: z.ZodString;
12
+ estimated_minutes: z.ZodOptional<z.ZodNumber>;
13
+ content: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>;
14
+ };
15
+ export declare function registerSubmitModule(server: McpServer, client: VibeUnivClient): void;
16
+ //# sourceMappingURL=submit-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-module.d.ts","sourceRoot":"","sources":["../../src/tools/submit-module.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;AAEtD,eAAO,MAAM,kBAAkB;;;;;;;;;;CAsB9B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA4IpF"}
@@ -0,0 +1,152 @@
1
+ import { z } from "zod";
2
+ export const submitModuleSchema = {
3
+ project_id: z.string().describe("The VibeUniv project ID"),
4
+ learning_path_id: z.string().describe("The learning path ID from vibeuniv_create_curriculum"),
5
+ module_order: z
6
+ .number()
7
+ .int()
8
+ .min(1)
9
+ .describe("Module order (1-based)"),
10
+ title: z.string().describe("Module title"),
11
+ description: z.string().describe("Module description"),
12
+ module_type: z
13
+ .enum(["concept", "practical", "quiz", "project_walkthrough"])
14
+ .describe("Module type"),
15
+ tech_name: z.string().describe("Technology name (must match tech stack)"),
16
+ estimated_minutes: z
17
+ .number()
18
+ .optional()
19
+ .describe("Estimated minutes to complete"),
20
+ content: z
21
+ .object({})
22
+ .passthrough()
23
+ .describe("Module content with sections array"),
24
+ };
25
+ export function registerSubmitModule(server, client) {
26
+ server.tool("vibeuniv_submit_module", "Submit a single module to an existing draft curriculum. Call this immediately after generating each module's content. The curriculum auto-activates when all modules are submitted.", submitModuleSchema, { readOnlyHint: false, openWorldHint: true }, async ({ project_id, learning_path_id, module_order, title, description, module_type, tech_name, estimated_minutes, content }) => {
27
+ try {
28
+ console.error(`[vibeuniv] Submitting module ${module_order} for path ${learning_path_id}...`);
29
+ const result = await client.submitModule(project_id, learning_path_id, {
30
+ module_order,
31
+ title,
32
+ description,
33
+ module_type,
34
+ tech_name,
35
+ estimated_minutes,
36
+ content: content,
37
+ });
38
+ const locale = await client.getUserLocale();
39
+ const en = locale === "en";
40
+ const progressBar = `[${result.submitted}/${result.total}]`;
41
+ if (result.status === "active") {
42
+ // All modules submitted β€” curriculum complete!
43
+ const message = en
44
+ ? [
45
+ `${progressBar} All modules submitted! Curriculum is now ACTIVE! πŸŽ‰`,
46
+ ``,
47
+ `- Module "${title}" saved (ID: ${result.moduleId})`,
48
+ `- Curriculum status: active`,
49
+ ``,
50
+ `${"=".repeat(50)}`,
51
+ `πŸŽ“ Ready to learn!`,
52
+ `${"=".repeat(50)}`,
53
+ ``,
54
+ `Your personalized learning curriculum is ready.`,
55
+ `Start learning right away at the link below:`,
56
+ ``,
57
+ `πŸ‘‰ https://vibeuniv.com`,
58
+ ``,
59
+ `Start your project-based learning journey with an AI tutor!`,
60
+ ]
61
+ : [
62
+ `${progressBar} λͺ¨λ“  λͺ¨λ“ˆμ΄ μ œμΆœλ˜μ—ˆμŠ΅λ‹ˆλ‹€! 컀리큘럼이 ν™œμ„±ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€! πŸŽ‰`,
63
+ ``,
64
+ `- λͺ¨λ“ˆ "${title}" μ €μž₯ μ™„λ£Œ (ID: ${result.moduleId})`,
65
+ `- 컀리큘럼 μƒνƒœ: active`,
66
+ ``,
67
+ `${"=".repeat(50)}`,
68
+ `πŸŽ“ ν•™μŠ΅ μ€€λΉ„ μ™„λ£Œ!`,
69
+ `${"=".repeat(50)}`,
70
+ ``,
71
+ `맞좀 ν•™μŠ΅ 컀리큘럼이 μ€€λΉ„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.`,
72
+ `μ•„λž˜ λ§ν¬μ—μ„œ λ°”λ‘œ ν•™μŠ΅μ„ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€:`,
73
+ ``,
74
+ `πŸ‘‰ https://vibeuniv.com`,
75
+ ``,
76
+ `AI νŠœν„°μ™€ ν•¨κ»˜ ν”„λ‘œμ νŠΈ 기반 ν•™μŠ΅μ„ μ‹œμž‘ν•΄λ³΄μ„Έμš”!`,
77
+ ];
78
+ return {
79
+ content: [
80
+ {
81
+ type: "text",
82
+ text: message.join("\n"),
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ // Module submitted, more to go
88
+ const message = en
89
+ ? [
90
+ `${progressBar} Module ${module_order} submitted successfully!`,
91
+ ``,
92
+ `- Module "${title}" saved (ID: ${result.moduleId})`,
93
+ `- Progress: ${result.submitted} of ${result.total} modules submitted`,
94
+ ``,
95
+ `Continue with the next module.`,
96
+ ]
97
+ : [
98
+ `${progressBar} λͺ¨λ“ˆ ${module_order} 제좜 μ™„λ£Œ!`,
99
+ ``,
100
+ `- λͺ¨λ“ˆ "${title}" μ €μž₯ μ™„λ£Œ (ID: ${result.moduleId})`,
101
+ `- μ§„ν–‰λ₯ : ${result.submitted}/${result.total} λͺ¨λ“ˆ 제좜됨`,
102
+ ``,
103
+ `λ‹€μŒ λͺ¨λ“ˆμ„ 계속 μ§„ν–‰ν•˜μ„Έμš”.`,
104
+ ];
105
+ return {
106
+ content: [
107
+ {
108
+ type: "text",
109
+ text: message.join("\n"),
110
+ },
111
+ ],
112
+ };
113
+ }
114
+ catch (error) {
115
+ const message = error instanceof Error ? error.message : String(error);
116
+ const locale = await client.getUserLocale().catch(() => "ko");
117
+ const hint = locale === "en"
118
+ ? [
119
+ ``,
120
+ `--- Validation Guide ---`,
121
+ `Server minimum requirements per module:`,
122
+ `β€’ Beginner: 7+ sections, 800+ chars/explanation, 2+ code_examples, 2+ quiz_questions`,
123
+ `β€’ Other: 5+ sections, 400+ chars/explanation, 1+ code_example, 1+ quiz_question`,
124
+ `β€’ quiz_question needs exactly 4 options + quiz_explanation`,
125
+ `β€’ challenge needs challenge_starter_code + challenge_answer_code`,
126
+ ``,
127
+ `Fix the failing sections and resubmit this module β€” no need to regenerate everything.`,
128
+ ]
129
+ : [
130
+ ``,
131
+ `--- 검증 κ°€μ΄λ“œ ---`,
132
+ `λͺ¨λ“ˆλ³„ μ„œλ²„ μ΅œμ†Œ μš”κ΅¬μ‚¬ν•­:`,
133
+ `β€’ μ΄ˆκΈ‰: 7κ°œβ†‘ μ„Ήμ…˜, explanation 800μžβ†‘, code_example 2κ°œβ†‘, quiz_question 2κ°œβ†‘`,
134
+ `β€’ κ·Έ μ™Έ: 5κ°œβ†‘ μ„Ήμ…˜, explanation 400μžβ†‘, code_example 1κ°œβ†‘, quiz_question 1κ°œβ†‘`,
135
+ `β€’ quiz_question은 μ •ν™•νžˆ 4개 선택지 + quiz_explanation ν•„μˆ˜`,
136
+ `β€’ challengeλŠ” challenge_starter_code + challenge_answer_code ν•„μˆ˜`,
137
+ ``,
138
+ `μ‹€νŒ¨ν•œ μ„Ήμ…˜λ§Œ μˆ˜μ •ν•΄μ„œ 이 λͺ¨λ“ˆμ„ λ‹€μ‹œ μ œμΆœν•˜μ„Έμš” β€” 전체 μž¬μƒμ„± λΆˆν•„μš”.`,
139
+ ];
140
+ return {
141
+ content: [
142
+ {
143
+ type: "text",
144
+ text: `Failed to submit module: ${message}\n${hint.join("\n")}`,
145
+ },
146
+ ],
147
+ isError: true,
148
+ };
149
+ }
150
+ });
151
+ }
152
+ //# sourceMappingURL=submit-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-module.js","sourceRoot":"","sources":["../../src/tools/submit-module.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -72,6 +72,17 @@ export interface CurriculumSubmitResult {
72
72
  title: string;
73
73
  totalModules: number;
74
74
  }
75
+ export interface CurriculumStartResult {
76
+ learningPathId: string;
77
+ status: string;
78
+ }
79
+ export interface ModuleSubmitResult {
80
+ moduleId: string;
81
+ moduleOrder: number;
82
+ submitted: number;
83
+ total: number;
84
+ status: string;
85
+ }
75
86
  export interface ConceptHintItem {
76
87
  concept_key: string;
77
88
  concept_name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.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.4",
3
+ "version": "0.3.5",
4
4
  "description": "VibeUniv MCP Server - Sync your vibe-coded projects for tech stack analysis and learning",
5
5
  "type": "module",
6
6
  "bin": {