@vibeuniv/mcp-server 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -10,8 +10,11 @@ import { registerGetLearning } from "./tools/get-learning.js";
10
10
  import { registerLogSession } from "./tools/log-session.js";
11
11
  import { registerAskTutor } from "./tools/ask-tutor.js";
12
12
  import { registerSubmitAnalysis } from "./tools/submit-analysis.js";
13
+ import { registerSubmitTechStacks } from "./tools/submit-tech-stacks.js";
14
+ import { registerGenerateCurriculum } from "./tools/generate-curriculum.js";
15
+ import { registerSubmitCurriculum } from "./tools/submit-curriculum.js";
13
16
  async function main() {
14
- console.error("[vibeuniv] Starting VibeUniv MCP Server v0.2.0...");
17
+ console.error("[vibeuniv] Starting VibeUniv MCP Server v0.3.0...");
15
18
  const config = loadConfig();
16
19
  const client = new VibeUnivClient(config.apiKey, config.apiUrl);
17
20
  if (config.apiKey) {
@@ -19,7 +22,7 @@ async function main() {
19
22
  }
20
23
  const server = new McpServer({
21
24
  name: "vibeuniv-mcp-server",
22
- version: "0.2.0",
25
+ version: "0.3.0",
23
26
  });
24
27
  registerSyncProject(server, client);
25
28
  registerUploadFiles(server, client);
@@ -28,7 +31,10 @@ async function main() {
28
31
  registerLogSession(server, client);
29
32
  registerAskTutor(server, client);
30
33
  registerSubmitAnalysis(server, client);
31
- console.error("[vibeuniv] 7 tools registered");
34
+ registerSubmitTechStacks(server, client);
35
+ registerGenerateCurriculum(server, client);
36
+ registerSubmitCurriculum(server, client);
37
+ console.error("[vibeuniv] 10 tools registered");
32
38
  const transport = new StdioServerTransport();
33
39
  await server.connect(transport);
34
40
  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;AAEpE,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;IAEvC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAE/C,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;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,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,4 +1,4 @@
1
- import type { AnalysisResult, CreateProjectInput, LearningPath, Project, ProjectFile, SessionLog, TutorResponse } from "../types.js";
1
+ import type { AnalysisResult, CreateProjectInput, CurriculumContext, CurriculumSubmitResult, EducationalAnalysisData, KnowledgeHintsResult, LearningPath, 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;
@@ -12,5 +12,13 @@ export declare class VibeUnivClient {
12
12
  logSession(projectId: string, data: SessionLog): Promise<string>;
13
13
  askTutor(projectId: string, question: string, conversationId?: string): Promise<TutorResponse>;
14
14
  submitEducationalAnalysis(projectId: string, analysisData: Record<string, unknown>): Promise<void>;
15
+ getTechStacks(projectId: string): Promise<TechStackItem[]>;
16
+ getKnowledgeHints(techNames: string[]): Promise<KnowledgeHintsResult>;
17
+ getEducationalAnalysis(projectId: string): Promise<EducationalAnalysisData | null>;
18
+ submitCurriculum(projectId: string, curriculum: Record<string, unknown>): Promise<CurriculumSubmitResult>;
19
+ getProjectDetail(projectId: string): Promise<ProjectDetail>;
20
+ submitTechStacks(projectId: string, submission: TechStackSubmission): Promise<TechStackSubmitResult>;
21
+ getTutorContext(projectId: string): Promise<TutorContext>;
22
+ getCurriculumContext(projectId: string): Promise<CurriculumContext>;
15
23
  }
16
24
  //# 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,EACd,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,WAAW,EACX,UAAU,EACV,aAAa,EACd,MAAM,aAAa,CAAC;AA2DrB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;YAK7B,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;IAwCpB,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;CAOzG"}
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,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;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;YAK7B,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"}
@@ -18,7 +18,7 @@ export class VibeUnivClient {
18
18
  const headers = {
19
19
  Authorization: `Bearer ${this.apiKey}`,
20
20
  "Content-Type": "application/json",
21
- "User-Agent": "vibeuniv-mcp-server/0.2.0",
21
+ "User-Agent": "vibeuniv-mcp-server/0.3.0",
22
22
  };
23
23
  const response = await fetch(url, {
24
24
  method,
@@ -76,6 +76,7 @@ export class VibeUnivClient {
76
76
  category: t.category,
77
77
  version: t.version ?? undefined,
78
78
  confidence: t.confidence_score,
79
+ importance: t.importance,
79
80
  })),
80
81
  startedAt: raw.started_at ?? undefined,
81
82
  completedAt: raw.completed_at ?? undefined,
@@ -130,5 +131,60 @@ export class VibeUnivClient {
130
131
  async submitEducationalAnalysis(projectId, analysisData) {
131
132
  await this.request("POST", `/projects/${projectId}/educational-analysis`, { analysis_data: analysisData });
132
133
  }
134
+ async getTechStacks(projectId) {
135
+ const raw = await this.request("GET", `/projects/${projectId}/stack`);
136
+ const items = [];
137
+ for (const cat of raw.categories) {
138
+ for (const tech of cat.technologies) {
139
+ items.push({
140
+ name: tech.technology_name,
141
+ category: cat.category,
142
+ version: tech.version ?? undefined,
143
+ confidence: tech.confidence_score,
144
+ importance: tech.importance,
145
+ });
146
+ }
147
+ }
148
+ return items;
149
+ }
150
+ async getKnowledgeHints(techNames) {
151
+ const techsParam = encodeURIComponent(techNames.join(","));
152
+ const raw = await this.request("GET", `/knowledge?techs=${techsParam}`);
153
+ return {
154
+ techs: raw.techs,
155
+ availableCount: raw.available_count,
156
+ requestedCount: raw.requested_count,
157
+ };
158
+ }
159
+ async getEducationalAnalysis(projectId) {
160
+ try {
161
+ return await this.request("GET", `/projects/${projectId}/educational-analysis`);
162
+ }
163
+ catch (err) {
164
+ console.error(`[vibeuniv] Educational analysis fetch failed (non-fatal): ${err instanceof Error ? err.message : err}`);
165
+ return null;
166
+ }
167
+ }
168
+ async submitCurriculum(projectId, curriculum) {
169
+ const raw = await this.request("POST", `/projects/${projectId}/curriculum`, { curriculum });
170
+ return {
171
+ learningPathId: raw.learning_path_id,
172
+ title: raw.title,
173
+ totalModules: raw.total_modules,
174
+ };
175
+ }
176
+ // ─── Local-First Methods (Phase A) ──────────────────────────────
177
+ async getProjectDetail(projectId) {
178
+ return this.request("GET", `/projects/${projectId}/detail`);
179
+ }
180
+ async submitTechStacks(projectId, submission) {
181
+ return this.request("POST", `/projects/${projectId}/tech-stacks`, submission);
182
+ }
183
+ async getTutorContext(projectId) {
184
+ return this.request("GET", `/projects/${projectId}/tutor-context`);
185
+ }
186
+ async getCurriculumContext(projectId) {
187
+ return this.request("GET", `/projects/${projectId}/curriculum-context`);
188
+ }
133
189
  }
134
190
  //# sourceMappingURL=api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAWA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAwD7B,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IACf,OAAO,CAAS;IAExB,YAAY,MAAc,EAAE,OAAe;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc;QAEd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,sCAAsC;gBACpC,sDAAsD;gBACtD,0DAA0D;gBAC1D,uDAAuD,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAErC,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;YACtC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,2BAA2B;SAC1C,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;QAEvD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,YAAY,GAChB,IAAI,CAAC,KAAK,IAAI,kCAAkC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAwB;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAU,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,KAAoB;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,SAAS,EAAE,CAAC,CAAC,IAAI;YACjB,SAAS,EAAE,CAAC,CAAC,YAAY;YACzB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,YAAY,EAAE,CAAC,CAAC,MAAM;SACvB,CAAC,CAAC,CAAC;QACJ,MAAM,IAAI,CAAC,OAAO,CAAO,MAAM,EAAE,aAAa,SAAS,QAAQ,EAAE;YAC/D,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAC5B,MAAM,EACN,aAAa,SAAS,UAAU,CACjC,CAAC;QAEF,MAAM,MAAM,GAAmB;YAC7B,EAAE,EAAE,GAAG,CAAC,MAAM;YACd,SAAS;YACT,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,SAAiB,EACjB,KAAa;QAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;YAEtE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAC5B,KAAK,EACL,aAAa,SAAS,YAAY,KAAK,EAAE,CAC1C,CAAC;YAEF,MAAM,MAAM,GAAmB;gBAC7B,EAAE,EAAE,GAAG,CAAC,MAAM;gBACd,SAAS;gBACT,MAAM,EAAE,GAAG,CAAC,MAAkC;gBAC9C,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;gBAC5C,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACrC,IAAI,EAAE,CAAC,CAAC,eAAe;oBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,SAAS;oBAC/B,UAAU,EAAE,CAAC,CAAC,gBAAgB;iBAC/B,CAAC,CAAC;gBACH,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;gBACtC,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;gBAC1C,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtD,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,KAAK,CACX,+CAA+C,CAAC,GAAG,CAAC,IAAI,iBAAiB,GAAG,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAC5B,KAAK,EACL,aAAa,SAAS,WAAW,CAClC,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS;YACT,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;YACzC,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;gBAChC,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;gBACtB,KAAK,EAAE,CAAC,CAAC,YAAY;gBACrB,gBAAgB,EAAE,CAAC,CAAC,iBAAiB,IAAI,SAAS;gBAClD,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,IAAgB;QAClD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAC5B,MAAM,EACN,aAAa,SAAS,WAAW,EACjC;YACE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,YAAY;SACjC,CACF,CAAC;QACF,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,SAAiB,EACjB,QAAgB,EAChB,cAAuB;QAEvB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAC5B,MAAM,EACN,aAAa,SAAS,QAAQ,EAC9B;YACE,QAAQ;YACR,eAAe,EAAE,cAAc;SAChC,CACF,CAAC;QACF,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,cAAc,EAAE,GAAG,CAAC,eAAe;SACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,SAAiB,EAAE,YAAqC;QACtF,MAAM,IAAI,CAAC,OAAO,CAChB,MAAM,EACN,aAAa,SAAS,uBAAuB,EAC7C,EAAE,aAAa,EAAE,YAAY,EAAE,CAChC,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import { VibeUnivClient } from "../lib/api-client.js";
4
4
  export declare const analyzeSchema: {
5
5
  project_id: z.ZodString;
6
+ force: z.ZodDefault<z.ZodBoolean>;
6
7
  };
7
8
  export declare function registerAnalyze(server: McpServer, client: VibeUnivClient): void;
8
9
  //# sourceMappingURL=analyze.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/tools/analyze.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,aAAa;;CAEzB,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAgE/E"}
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/tools/analyze.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,aAAa;;;CAMzB,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAmH/E"}
@@ -1,46 +1,96 @@
1
1
  import { z } from "zod";
2
2
  export const analyzeSchema = {
3
3
  project_id: z.string().describe("The VibeUniv project ID to analyze"),
4
+ force: z
5
+ .boolean()
6
+ .default(false)
7
+ .describe("Force re-analysis even if existing tech stacks exist"),
4
8
  };
5
9
  export function registerAnalyze(server, client) {
6
- server.tool("vibeuniv_analyze", "Trigger AI analysis of the project's tech stack and get results", analyzeSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id }) => {
10
+ server.tool("vibeuniv_analyze", "Trigger AI analysis of the project's tech stack and get results", analyzeSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id, force }) => {
7
11
  try {
8
- console.error(`[vibeuniv] Triggering analysis for project ${project_id}...`);
9
- const result = await client.triggerAnalysis(project_id);
10
- if (result.status === "failed") {
11
- return {
12
- content: [
13
- {
14
- type: "text",
15
- text: "Analysis failed. Please try again or check that files have been uploaded.",
16
- },
17
- ],
18
- isError: true,
19
- };
20
- }
21
- let output = `Analysis completed for project ${project_id}\n`;
22
- output += `Analysis ID: ${result.id}\n\n`;
23
- if (result.summary) {
24
- output += `Summary:\n${result.summary}\n\n`;
25
- }
26
- if (result.techStack && result.techStack.length > 0) {
27
- output += "Detected Tech Stack:\n";
12
+ console.error(`[vibeuniv] Fetching project detail for ${project_id}...`);
13
+ const detail = await client.getProjectDetail(project_id);
14
+ // If existing analysis exists and force is not set, return existing results
15
+ if (detail.existingTechStacks.length > 0 && !force) {
16
+ let output = `Project "${detail.name}" already has ${detail.existingTechStacks.length} detected technologies:\n\n`;
28
17
  const grouped = new Map();
29
- for (const item of result.techStack) {
18
+ for (const item of detail.existingTechStacks) {
30
19
  const existing = grouped.get(item.category) || [];
31
20
  existing.push(item);
32
21
  grouped.set(item.category, existing);
33
22
  }
34
23
  for (const [category, items] of grouped) {
35
- output += `\n [${category}]\n`;
24
+ output += ` [${category}]\n`;
36
25
  for (const item of items) {
37
26
  const version = item.version ? ` v${item.version}` : "";
38
27
  const confidence = Math.round(item.confidence * 100);
39
28
  output += ` - ${item.name}${version} (${confidence}% confidence)\n`;
40
29
  }
30
+ output += "\n";
31
+ }
32
+ output += "To re-analyze, call vibeuniv_analyze with force: true.\n";
33
+ output += "Next step: Use vibeuniv_generate_curriculum to create a learning curriculum.";
34
+ return {
35
+ content: [{ type: "text", text: output }],
36
+ };
37
+ }
38
+ // No files uploaded
39
+ if (detail.files.length === 0) {
40
+ return {
41
+ content: [
42
+ {
43
+ type: "text",
44
+ text: `Project "${detail.name}" has no files uploaded. Upload files first using vibeuniv_upload_files.`,
45
+ },
46
+ ],
47
+ isError: true,
48
+ };
49
+ }
50
+ // Build analysis instructions for local AI
51
+ let output = `## Tech Stack Analysis Request\n\n`;
52
+ output += `Analyze the following project files and identify all technologies used.\n\n`;
53
+ // Include existing tech stacks as reference (for re-analysis)
54
+ if (detail.existingTechStacks.length > 0) {
55
+ output += `### Previous Analysis (for reference)\n\n`;
56
+ output += `The project was previously analyzed and the following technologies were detected. Use this as a starting point but verify and update based on the actual file contents:\n\n`;
57
+ for (const tech of detail.existingTechStacks) {
58
+ output += `- ${tech.name} (${tech.category}, confidence: ${Math.round(tech.confidence * 100)}%)\n`;
59
+ }
60
+ output += `\n`;
61
+ }
62
+ // File contents
63
+ output += `### Project Files\n\n`;
64
+ for (const file of detail.files) {
65
+ output += `#### ${file.file_path}\n\`\`\`\n${file.content}\n\`\`\`\n\n`;
66
+ }
67
+ // If there are more files than returned
68
+ if (detail.allFileList && detail.allFileList.length > detail.files.length) {
69
+ output += `### Additional Files (content not included, ${detail.allFileList.length - detail.files.length} more)\n\n`;
70
+ for (const f of detail.allFileList.slice(detail.files.length)) {
71
+ output += `- ${f.file_path}\n`;
41
72
  }
42
- output += "\nNext step: Use vibeuniv_get_learning to get personalized learning recommendations.";
73
+ output += `\n`;
43
74
  }
75
+ // Analysis instructions
76
+ output += `### Analysis Instructions\n\n`;
77
+ output += `For each technology detected, provide:\n`;
78
+ output += `- **name**: Technology name (e.g., "Next.js", "React", "TypeScript")\n`;
79
+ output += `- **category**: One of: framework, language, database, auth, deploy, styling, testing, build_tool, library, other\n`;
80
+ output += `- **version**: Version string if detectable (e.g., "15.1.0"), omit if unknown\n`;
81
+ output += `- **confidence**: 0.0 to 1.0 — how confident you are\n`;
82
+ output += `- **importance**: One of: core (essential to the project), supporting (actively used), dev_dependency (development only)\n`;
83
+ output += `- **description**: One sentence describing how this tech is used in the project\n\n`;
84
+ output += `Also provide an **architecture_summary** — a 2-3 sentence description of the overall project architecture.\n\n`;
85
+ output += `### Submit Results\n\n`;
86
+ output += `After completing the analysis, submit the results using:\n\n`;
87
+ output += `vibeuniv_submit_tech_stacks({\n`;
88
+ output += ` project_id: "${project_id}",\n`;
89
+ output += ` analysis: {\n`;
90
+ output += ` technologies: [ { name, category, version, confidence, importance, description }, ... ],\n`;
91
+ output += ` architecture_summary: "..."\n`;
92
+ output += ` }\n`;
93
+ output += `})\n`;
44
94
  return {
45
95
  content: [{ type: "text", text: output }],
46
96
  };
@@ -48,7 +98,7 @@ export function registerAnalyze(server, client) {
48
98
  catch (error) {
49
99
  const message = error instanceof Error ? error.message : String(error);
50
100
  return {
51
- content: [{ type: "text", text: `Failed to analyze project: ${message}` }],
101
+ content: [{ type: "text", text: `Failed to fetch project detail: ${message}` }],
52
102
  isError: true,
53
103
  };
54
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/tools/analyze.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/tools/analyze.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ask-tutor.d.ts","sourceRoot":"","sources":["../../src/tools/ask-tutor.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,cAAc;;;CAG1B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA0BhF"}
1
+ {"version":3,"file":"ask-tutor.d.ts","sourceRoot":"","sources":["../../src/tools/ask-tutor.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,cAAc;;;CAG1B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAgFhF"}
@@ -6,10 +6,57 @@ export const askTutorSchema = {
6
6
  export function registerAskTutor(server, client) {
7
7
  server.tool("vibeuniv_ask_tutor", "Ask the AI tutor a question about your project's tech stack with full project context", askTutorSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id, question }) => {
8
8
  try {
9
- console.error(`[vibeuniv] Asking tutor for project ${project_id}...`);
10
- const result = await client.askTutor(project_id, question);
11
- let output = result.answer;
12
- output += `\n\n(conversation_id: ${result.conversationId})`;
9
+ console.error(`[vibeuniv] Fetching tutor context for project ${project_id}...`);
10
+ const context = await client.getTutorContext(project_id);
11
+ // Build tutor instructions for local AI
12
+ let output = `## AI Tutor — Answer the student's question below\n\n`;
13
+ // Tutor persona instructions (extracted from lib/prompts/tutor-chat.ts)
14
+ output += `### Your Role\n\n`;
15
+ output += `You are a friendly, patient AI tutor helping a "vibe coder" understand their own project.\n`;
16
+ output += `A vibe coder is someone who built a working application using AI coding tools (like Claude Code, Cursor, Bolt, etc.) `;
17
+ output += `but wants to deeply understand the technologies they used.\n\n`;
18
+ output += `### Teaching Style\n\n`;
19
+ output += `1. **Always reference the student's actual project code.** Point to specific lines or patterns in their files.\n`;
20
+ output += `2. **Explain simply.** Avoid jargon. When you must use a technical term, immediately explain it in plain language.\n`;
21
+ output += `3. **Be encouraging.** The student already built something that works — build on their confidence.\n`;
22
+ output += `4. **Keep responses focused.** Aim for ~500 words max.\n`;
23
+ output += `5. **Walk through code line-by-line when asked.**\n`;
24
+ output += `6. **Use analogies.** Connect programming concepts to everyday experiences.\n`;
25
+ output += `7. **Be honest about complexity.** If something is complex, say so but break it down.\n\n`;
26
+ output += `### Rules\n\n`;
27
+ output += `- NEVER make up code that isn't in the student's project. Only reference actual files shown below.\n`;
28
+ output += `- If asked about something outside the project files, clearly state you're giving general advice.\n`;
29
+ output += `- If you don't know something, say so honestly.\n`;
30
+ output += `- Do NOT repeat the student's question back to them.\n`;
31
+ output += `- Do NOT start with "Great question!" or similar filler phrases.\n`;
32
+ output += `- Keep code snippets short and relevant.\n\n`;
33
+ // Tech stacks section
34
+ if (context.techStacks.length > 0) {
35
+ output += `### Student's Project Technologies\n\n`;
36
+ for (const t of context.techStacks) {
37
+ const desc = t.description ? ` — ${t.description}` : "";
38
+ output += `- ${t.technology_name} (${t.category})${desc}\n`;
39
+ }
40
+ output += `\n`;
41
+ }
42
+ // Project files section
43
+ if (context.files.length > 0) {
44
+ output += `### Student's Project Files\n\n`;
45
+ for (const f of context.files) {
46
+ output += `#### ${f.file_name}\n\`\`\`\n${f.content}\n\`\`\`\n\n`;
47
+ }
48
+ }
49
+ // Learning context section
50
+ if (context.learningContext) {
51
+ output += `### Current Learning Context\n\n`;
52
+ output += `The student is currently working through:\n`;
53
+ output += `- **Learning Path:** ${context.learningContext.path_title}\n`;
54
+ output += `- **Current Module:** ${context.learningContext.current_module}\n\n`;
55
+ output += `Relate your answers to their current module topic when relevant.\n\n`;
56
+ }
57
+ // User question
58
+ output += `### Student's Question\n\n`;
59
+ output += question;
13
60
  return {
14
61
  content: [{ type: "text", text: output }],
15
62
  };
@@ -17,7 +64,7 @@ export function registerAskTutor(server, client) {
17
64
  catch (error) {
18
65
  const message = error instanceof Error ? error.message : String(error);
19
66
  return {
20
- content: [{ type: "text", text: `Failed to get tutor response: ${message}` }],
67
+ content: [{ type: "text", text: `Failed to get tutor context: ${message}` }],
21
68
  isError: true,
22
69
  };
23
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ask-tutor.js","sourceRoot":"","sources":["../../src/tools/ask-tutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC1D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;CAC9F,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAsB;IACxE,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,uFAAuF,EACvF,cAAc,EACd,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAC3C,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,uCAAuC,UAAU,KAAK,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAE3D,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,MAAM,IAAI,yBAAyB,MAAM,CAAC,cAAc,GAAG,CAAC;YAE5D,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACnD,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,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iCAAiC,OAAO,EAAE,EAAE,CAAC;gBACtF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ask-tutor.js","sourceRoot":"","sources":["../../src/tools/ask-tutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC1D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;CAC9F,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAsB;IACxE,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,uFAAuF,EACvF,cAAc,EACd,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAC3C,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,iDAAiD,UAAU,KAAK,CAAC,CAAC;YAChF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAEzD,wCAAwC;YACxC,IAAI,MAAM,GAAG,uDAAuD,CAAC;YAErE,wEAAwE;YACxE,MAAM,IAAI,mBAAmB,CAAC;YAC9B,MAAM,IAAI,6FAA6F,CAAC;YACxG,MAAM,IAAI,uHAAuH,CAAC;YAClI,MAAM,IAAI,gEAAgE,CAAC;YAE3E,MAAM,IAAI,wBAAwB,CAAC;YACnC,MAAM,IAAI,kHAAkH,CAAC;YAC7H,MAAM,IAAI,sHAAsH,CAAC;YACjI,MAAM,IAAI,sGAAsG,CAAC;YACjH,MAAM,IAAI,0DAA0D,CAAC;YACrE,MAAM,IAAI,qDAAqD,CAAC;YAChE,MAAM,IAAI,+EAA+E,CAAC;YAC1F,MAAM,IAAI,2FAA2F,CAAC;YAEtG,MAAM,IAAI,eAAe,CAAC;YAC1B,MAAM,IAAI,sGAAsG,CAAC;YACjH,MAAM,IAAI,qGAAqG,CAAC;YAChH,MAAM,IAAI,mDAAmD,CAAC;YAC9D,MAAM,IAAI,wDAAwD,CAAC;YACnE,MAAM,IAAI,oEAAoE,CAAC;YAC/E,MAAM,IAAI,8CAA8C,CAAC;YAEzD,sBAAsB;YACtB,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,wCAAwC,CAAC;gBACnD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;oBACnC,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxD,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC;gBAC9D,CAAC;gBACD,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;YAED,wBAAwB;YACxB,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,iCAAiC,CAAC;gBAC5C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,IAAI,QAAQ,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,OAAO,cAAc,CAAC;gBACpE,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC5B,MAAM,IAAI,kCAAkC,CAAC;gBAC7C,MAAM,IAAI,6CAA6C,CAAC;gBACxD,MAAM,IAAI,wBAAwB,OAAO,CAAC,eAAe,CAAC,UAAU,IAAI,CAAC;gBACzE,MAAM,IAAI,yBAAyB,OAAO,CAAC,eAAe,CAAC,cAAc,MAAM,CAAC;gBAChF,MAAM,IAAI,sEAAsE,CAAC;YACnF,CAAC;YAED,gBAAgB;YAChB,MAAM,IAAI,4BAA4B,CAAC;YACvC,MAAM,IAAI,QAAQ,CAAC;YAEnB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACnD,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,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gCAAgC,OAAO,EAAE,EAAE,CAAC;gBACrF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
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 generateCurriculumSchema: {
5
+ project_id: z.ZodString;
6
+ difficulty: z.ZodDefault<z.ZodEnum<["beginner", "intermediate", "advanced"]>>;
7
+ };
8
+ export declare function registerGenerateCurriculum(server: McpServer, client: VibeUnivClient): void;
9
+ //# sourceMappingURL=generate-curriculum.d.ts.map
@@ -0,0 +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;AAGtD,eAAO,MAAM,wBAAwB;;;CAMpC,CAAC;AAmKF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAkP1F"}
@@ -0,0 +1,363 @@
1
+ import { z } from "zod";
2
+ export const generateCurriculumSchema = {
3
+ project_id: z.string().describe("The VibeUniv project ID"),
4
+ difficulty: z
5
+ .enum(["beginner", "intermediate", "advanced"])
6
+ .default("beginner")
7
+ .describe("Target difficulty level for the curriculum"),
8
+ };
9
+ // ─── Formatting helpers ─────────────────────────────────────────────
10
+ function formatTechStack(t) {
11
+ return `- **${t.name}**${t.version ? ` v${t.version}` : ""} (${t.category})`;
12
+ }
13
+ function formatKBHints(kbHints) {
14
+ const sections = [];
15
+ for (const [techName, hints] of Object.entries(kbHints)) {
16
+ if (hints.length === 0)
17
+ continue;
18
+ const conceptLines = hints.map((h) => `#### ${h.concept_name} (\`${h.concept_key}\`)
19
+ - **핵심 포인트:**
20
+ ${h.key_points.map((p) => ` - ${p}`).join("\n")}
21
+ - **좋은 퀴즈 주제:** ${h.common_quiz_topics.join(", ")}
22
+ - **선행 개념:** ${h.prerequisite_concepts.length > 0 ? h.prerequisite_concepts.join(", ") : "(없음)"}`).join("\n\n");
23
+ sections.push(`### ${techName} 핵심 개념 가이드\n\n${conceptLines}`);
24
+ }
25
+ return sections.length > 0
26
+ ? `## 교육 핵심 포인트 (Knowledge Base)
27
+
28
+ 아래는 각 기술의 **핵심 교육 포인트**입니다.
29
+ 커리큘럼에 반드시 이 포인트들을 포함하고, 퀴즈 주제를 참고하세요.
30
+ 선행 개념 순서에 맞게 모듈을 배치하세요.
31
+
32
+ ${sections.join("\n\n")}`
33
+ : "";
34
+ }
35
+ function formatEducationalAnalysis(analysis, difficulty) {
36
+ const sections = [];
37
+ // Project Overview
38
+ const ov = analysis.project_overview;
39
+ sections.push(`### 프로젝트 개요 (AI 분석 결과)
40
+ - **앱 설명:** ${ov.one_liner}
41
+ - **앱 유형:** ${ov.app_type}
42
+ - **대상 사용자:** ${ov.target_users}
43
+ - **핵심 기능:** ${ov.core_features.join(", ")}`);
44
+ // User Flows
45
+ if (analysis.user_flows.length > 0) {
46
+ const flowLines = analysis.user_flows.map((f) => {
47
+ const steps = f.steps
48
+ .map((s) => ` - ${s.description} (\`${s.file}\`:${s.line_range})`)
49
+ .join("\n");
50
+ return `- **${f.name}** (난이도: ${f.difficulty})\n 트리거: ${f.trigger}\n${steps}`;
51
+ });
52
+ sections.push(`### 사용자 흐름 (User Flows)\n\n각 흐름을 커리큘럼에서 다뤄야 합니다:\n\n${flowLines.join("\n\n")}`);
53
+ }
54
+ // File Difficulty Map
55
+ if (analysis.file_analysis.length > 0) {
56
+ const fileLines = analysis.file_analysis
57
+ .sort((a, b) => a.complexity - b.complexity)
58
+ .map((f) => `- \`${f.path}\` — ${f.role} (복잡도: ${f.complexity}/5, ${f.difficulty})`);
59
+ sections.push(`### 파일 난이도 맵\n\n쉬운 파일부터 어려운 파일 순서로 정렬했습니다. 모듈 순서를 결정할 때 참고하세요:\n\n${fileLines.join("\n")}`);
60
+ }
61
+ // Learning Priorities
62
+ const priorities = analysis.learning_priorities;
63
+ const lp = difficulty === "beginner"
64
+ ? priorities.beginner
65
+ : difficulty === "intermediate"
66
+ ? priorities.intermediate
67
+ : priorities.advanced;
68
+ const priorityLines = [
69
+ `- **시작:** ${lp.start_with.join(", ")}`,
70
+ `- **집중:** ${lp.focus_on.join(", ")}`,
71
+ ];
72
+ if ("skip_for_now" in lp) {
73
+ priorityLines.push(`- **나중에:** ${lp.skip_for_now.join(", ")}`);
74
+ }
75
+ if ("deep_dive" in lp) {
76
+ priorityLines.push(`- **심화:** ${lp.deep_dive.join(", ")}`);
77
+ }
78
+ if ("challenge_topics" in lp) {
79
+ priorityLines.push(`- **도전:** ${lp.challenge_topics.join(", ")}`);
80
+ }
81
+ sections.push(`### ${difficulty} 난이도 학습 우선순위\n\n${priorityLines.join("\n")}`);
82
+ // Repeated Patterns
83
+ if (analysis.repeated_patterns.length > 0) {
84
+ const patternLines = analysis.repeated_patterns.map((p) => `- **${p.name}**: ${p.description} (${p.occurrences.length}회 발견) — 교육 가치: ${p.teaching_value}`);
85
+ sections.push(`### 반복 패턴\n\n프로젝트에서 반복적으로 사용되는 패턴입니다. 이 패턴들을 커리큘럼에 포함하면 학습 효과가 높아집니다:\n\n${patternLines.join("\n")}`);
86
+ }
87
+ // Code Quality
88
+ const cq = analysis.code_quality;
89
+ if (cq.good_practices.length > 0 || cq.improvement_areas.length > 0) {
90
+ const lines = [];
91
+ if (cq.good_practices.length > 0) {
92
+ lines.push("**좋은 사례 (교육 포인트):**");
93
+ for (const gp of cq.good_practices) {
94
+ lines.push(`- ${gp.description} → 관련 개념: ${gp.concept}`);
95
+ }
96
+ }
97
+ if (cq.improvement_areas.length > 0) {
98
+ lines.push("\n**개선 기회 (학습 기회):**");
99
+ for (const ia of cq.improvement_areas) {
100
+ lines.push(`- [${ia.severity}] ${ia.description} → 교육: ${ia.teaching_opportunity}`);
101
+ }
102
+ }
103
+ sections.push(`### 코드 품질 관찰\n\n${lines.join("\n")}`);
104
+ }
105
+ // Tech Stack Metaphors (beginner only)
106
+ if (difficulty === "beginner" && ov.tech_stack_metaphors.length > 0) {
107
+ const metaphorLines = ov.tech_stack_metaphors.map((m) => `- **${m.tech_name}** → ${m.metaphor}`);
108
+ sections.push(`### 기술 스택 비유 (초보자용)\n\n이 비유들을 커리큘럼에서 적극 활용하세요:\n\n${metaphorLines.join("\n")}`);
109
+ }
110
+ return `## 프로젝트 교육 분석 (Educational Analysis)
111
+
112
+ 아래는 AI가 프로젝트를 분석한 교육용 메타데이터입니다.
113
+ 이 정보를 활용해 더 구체적이고 맞춤화된 커리큘럼을 만드세요.
114
+
115
+ ${sections.join("\n\n")}`;
116
+ }
117
+ function buildLevelGuidance(difficulty) {
118
+ if (difficulty === "beginner") {
119
+ return `- "X가 뭔가요?"부터 시작 — 기술이 왜 존재하는지, 없으면 어떤 문제가 생기는지부터 설명
120
+ - 전문 용어를 쓸 때는 반드시 바로 뒤에 쉬운 말로 풀어서 설명 (예: "미들웨어(middleware)란, 요청이 들어올 때마다 자동으로 실행되는 '검문소' 같은 코드예요")
121
+ - 일상생활 비유를 적극 활용 (예: "컴포넌트는 레고 블록", "API는 식당 주문 창구", "데이터베이스는 엑셀 스프레드시트")
122
+ - concept과 quiz 모듈을 많이, practical은 아주 쉬운 것만
123
+ - 한 번에 하나의 개념만 — 여러 개념을 한꺼번에 설명하지 않기`;
124
+ }
125
+ if (difficulty === "intermediate") {
126
+ return `- 기본 프로그래밍 지식은 안다고 가정
127
+ - "어떻게"와 "왜"에 집중 — 단순 사용법이 아니라 동작 원리와 설계 이유
128
+ - practical과 project_walkthrough 모듈 비중 높이기
129
+ - 일반적인 패턴, 베스트 프랙티스, 흔한 실수 다루기`;
130
+ }
131
+ return `- 탄탄한 프로그래밍 지식 전제
132
+ - 고급 패턴, 성능 최적화, 아키텍처 설계에 집중
133
+ - practical과 project_walkthrough 비중 극대화
134
+ - 엣지 케이스, 내부 동작 원리, 최적화 전략 다루기`;
135
+ }
136
+ // ─── Tool registration ──────────────────────────────────────────────
137
+ export function registerGenerateCurriculum(server, client) {
138
+ server.tool("vibeuniv_generate_curriculum", "Generate a learning curriculum for the project. Returns tech stack info and a JSON schema — you create the curriculum JSON, then submit it with vibeuniv_submit_curriculum.", generateCurriculumSchema, { readOnlyHint: true, openWorldHint: true }, async ({ project_id, difficulty }) => {
139
+ try {
140
+ console.error(`[vibeuniv] Generating curriculum instructions for project ${project_id}...`);
141
+ // Fetch all curriculum context in a single API call
142
+ const curriculumContext = await client.getCurriculumContext(project_id);
143
+ const techStacks = curriculumContext.techStacks;
144
+ if (techStacks.length === 0) {
145
+ return {
146
+ content: [
147
+ {
148
+ type: "text",
149
+ text: `No tech stacks found for project ${project_id}. Run vibeuniv_analyze first to analyze the project.`,
150
+ },
151
+ ],
152
+ isError: true,
153
+ };
154
+ }
155
+ const kbResult = Object.keys(curriculumContext.knowledgeHints).length > 0
156
+ ? { techs: curriculumContext.knowledgeHints }
157
+ : null;
158
+ const educationalAnalysis = curriculumContext.educationalAnalysis;
159
+ // Separate core vs supporting stacks for priority guidance
160
+ const coreStacks = techStacks.filter((t) => t.importance === "core");
161
+ const supportingStacks = techStacks.filter((t) => t.importance !== "core");
162
+ const coreList = coreStacks.map(formatTechStack).join("\n");
163
+ const supportingList = supportingStacks.length > 0
164
+ ? supportingStacks.map(formatTechStack).join("\n")
165
+ : "(없음)";
166
+ const levelGuidance = buildLevelGuidance(difficulty);
167
+ // Build KB hints section
168
+ const kbSection = kbResult && Object.keys(kbResult.techs).length > 0
169
+ ? `\n${formatKBHints(kbResult.techs)}\n`
170
+ : "";
171
+ // Build educational analysis section (with defensive try/catch for LLM-generated data)
172
+ let eduSection = "";
173
+ let hasEduAnalysis = false;
174
+ if (educationalAnalysis) {
175
+ try {
176
+ eduSection = `\n${formatEducationalAnalysis(educationalAnalysis, difficulty)}\n`;
177
+ hasEduAnalysis = true;
178
+ }
179
+ catch (err) {
180
+ console.error(`[vibeuniv] Educational analysis formatting failed (non-fatal): ${err instanceof Error ? err.message : err}`);
181
+ }
182
+ }
183
+ // Build educational analysis instruction
184
+ const eduInstruction = hasEduAnalysis
185
+ ? `
186
+ ### 10. 교육 분석 데이터 활용
187
+ - **프로젝트 개요**의 핵심 기능과 앱 유형을 커리큘럼 소개에 반영
188
+ - **사용자 흐름(User Flows)** 을 project_walkthrough 모듈의 기반으로 활용
189
+ - **파일 난이도 맵**을 참고해 모듈 순서와 예상 시간을 설정
190
+ - **학습 우선순위**에 따라 모듈 배치를 최적화
191
+ - **반복 패턴**을 별도 모듈이나 퀴즈로 다뤄 학습 효과 극대화
192
+ - **코드 품질 관찰**의 좋은 사례를 교육 포인트로, 개선 기회를 챌린지로 활용
193
+ - 초보자 난이도일 경우 **기술 스택 비유**를 explanation 섹션에 적극 활용`
194
+ : "";
195
+ // Build KB instruction
196
+ const kbInstruction = kbResult && Object.keys(kbResult.techs).length > 0
197
+ ? `
198
+ ### ${educationalAnalysis ? "11" : "10"}. Knowledge Base 활용
199
+ - **핵심 포인트**를 반드시 커리큘럼에 포함 — 빠뜨리지 마세요
200
+ - **퀴즈 주제**를 quiz_question 섹션의 주제로 활용
201
+ - **선행 개념** 순서에 맞게 모듈을 배치 (선행 개념이 먼저 나와야 함)`
202
+ : "";
203
+ const instructions = `이 프로젝트의 학습 커리큘럼을 생성해주세요. 아래 지시를 꼼꼼히 따라주세요.
204
+
205
+ ## 학생 프로필
206
+
207
+ 이 커리큘럼은 **"바이브 코더(Vibe Coder)"** 를 위한 것입니다.
208
+ 바이브 코더란, AI 코딩 도구(Claude Code, Cursor, Bolt 등)로 동작하는 앱을 이미 만든 사람입니다.
209
+ 코드가 돌아가게는 했지만, **왜 이렇게 작동하는지** 이해하고 싶어하는 사람이에요.
210
+
211
+ - **난이도:** ${difficulty}
212
+ - **학습 스타일:** 이미 완성된 프로젝트 기반으로 학습 (추상적 이론 X)
213
+ - **목표:** 자기 프로젝트의 기술 스택을 이해해서, 혼자서도 디버깅하고 기능을 추가할 수 있게 되는 것
214
+
215
+ ## 감지된 기술 스택
216
+
217
+ ### 핵심 기술 (Core) — 반드시 다뤄야 함
218
+ ${coreList}
219
+
220
+ ### 보조 기술 (Supporting) — 선택적으로 다루기
221
+ ${supportingList}
222
+ ${eduSection}${kbSection}
223
+ ## 사전 준비: 프로젝트 파일 분석
224
+
225
+ **중요:** 커리큘럼 생성 전에 반드시 이 프로젝트의 소스 코드를 읽어주세요.
226
+ 특히 다음 파일들을 확인하세요:
227
+ - 진입점 파일 (예: index.ts, app.tsx, main.py, layout.tsx 등)
228
+ - 설정 파일 (예: package.json, tsconfig.json, next.config.ts 등)
229
+ - 핵심 비즈니스 로직 파일 (가장 많이 수정된 파일들)
230
+ - API 라우트, 데이터베이스 접근 코드
231
+
232
+ 이 파일들의 실제 코드를 커리큘럼에 직접 인용해야 합니다.
233
+
234
+ ## 커리큘럼 설계 원칙
235
+
236
+ ### 1. 모듈 순서 — 의존성 기반
237
+ - **가장 중요한 핵심 기술부터** 시작 (core framework → language → supporting tools)
238
+ - **선행 지식 → 후행 지식** 순서 (예: JavaScript 기초 → React → Next.js)
239
+ - 각 기술당 3-7개 모듈 (중요도와 복잡도에 따라 조절)
240
+
241
+ ### 2. 모듈 유형 믹스
242
+ - \`concept\` — 핵심 개념을 비유와 예시로 설명
243
+ - \`practical\` — 학생의 실제 코드를 수정하는 실습
244
+ - \`quiz\` — 학생의 실제 코드 기반 퀴즈로 이해도 확인
245
+ - \`project_walkthrough\` — 학생의 실제 파일을 위에서 아래로 한 줄씩 읽어보기
246
+
247
+ ### 3. 난이도별 접근법
248
+ ${levelGuidance}
249
+
250
+ ### 4. 각 모듈의 섹션 구성 (5-8개)
251
+ 섹션 유형과 순서 배치 규칙:
252
+ - \`explanation\` — 마크다운으로 개념 설명. **반드시 학생의 실제 파일 경로와 코드를 인용**
253
+ - \`code_example\` — 학생의 프로젝트에서 **실제 코드를 복사**해서 한국어 주석으로 설명
254
+ - \`quiz_question\` — 학생의 실제 코드 기반 4지선다 퀴즈
255
+ - \`challenge\` — 학생의 실제 프로젝트에서 수정해볼 수 있는 구체적 과제
256
+ - \`reflection\` — "생각해보기" (1-3문장, 학생이 스스로 고민해보도록)
257
+
258
+ **배치 규칙:** explanation이나 code_example 1-2개 후에 반드시 quiz_question 또는 reflection을 배치.
259
+ explanation만 연속 3개 이상 나오면 안 됩니다.
260
+
261
+ ### 5. 콘텐츠 작성 톤
262
+ - **모든 콘텐츠는 한국어** (기술 용어는 영어 유지하되 괄호 안에 한국어 설명 병기)
263
+ - **짧은 문장**, **짧은 문단** — 한 단락에 3문장 이하
264
+ - **글머리 기호** 적극 사용 — 장문 대신 핵심만
265
+ - **질문으로 시작** — "왜 이렇게 할까요?", "이 코드 없이도 동작할까요?"
266
+ - **마이크로러닝 느낌** — 각 섹션이 짧은 카드처럼, 강의처럼 느껴지면 안 됨
267
+
268
+ ### 6. 코드 인용 규칙
269
+ - explanation: "여러분의 \`middleware.ts\` 파일 5번째 줄을 보면..." 형태로 구체적 파일 + 라인 참조
270
+ - code_example: 학생 프로젝트의 **실제 코드를 그대로** 복사하고, 각 줄에 한국어 주석 추가
271
+ 예시:
272
+ \`\`\`
273
+ // app/layout.tsx에서 가져온 코드
274
+ export default function RootLayout({ children }) { // 모든 페이지를 감싸는 최상위 레이아웃
275
+ return <html lang="ko"> // 한국어 페이지라는 것을 브라우저에 알려줌
276
+ \`\`\`
277
+ - quiz_question: "여러분의 \`app/page.tsx\`에서 \`export default\`를 쓰는 이유는?"처럼 학생 코드 기반
278
+ - challenge: 수정할 파일, 추가할 내용, 기대 결과를 구체적으로 명시
279
+ - **코드를 창작하지 마세요** — 반드시 프로젝트에 실재하는 코드를 인용
280
+
281
+ ### 7. 퀴즈 규칙
282
+ - 선택지 정확히 4개, 정답은 0-indexed
283
+ - \`quiz_explanation\`에 정답 이유 + 오답 이유를 2-4문장으로 설명
284
+ - 학생의 실제 코드와 연결된 퀴즈 출제 (추상적 이론 퀴즈 X)
285
+
286
+ ### 8. 챌린지 규칙
287
+ - 어떤 파일을 수정할지, 무엇을 추가/변경할지, 결과가 어떻게 바뀌는지 구체적으로
288
+ - \`challenge_starter_code\`: TODO 주석이 있는 뼈대 코드
289
+ - \`challenge_answer_code\`: 완성된 정답 코드
290
+
291
+ ### 9. project_walkthrough 규칙
292
+ - 학생의 실제 파일 하나를 위에서 아래로 읽기
293
+ - import 구문 → 핵심 로직 → export 순서로 설명
294
+ - 이 파일이 프로젝트의 다른 파일들과 어떻게 연결되는지 설명
295
+ ${eduInstruction}${kbInstruction}
296
+
297
+ ## JSON 스키마
298
+
299
+ 아래 스키마에 맞는 JSON을 생성하세요.
300
+
301
+ {
302
+ "title": "string (학습 경로 제목, 한국어)",
303
+ "description": "string (2-3문장, 이 커리큘럼을 마치면 무엇을 할 수 있는지)",
304
+ "difficulty": "${difficulty}",
305
+ "estimated_hours": number,
306
+ "modules": [
307
+ {
308
+ "title": "string (모듈 제목, 한국어)",
309
+ "description": "string (1-2문장 모듈 설명, 한국어)",
310
+ "module_type": "concept | practical | quiz | project_walkthrough",
311
+ "estimated_minutes": number (15-45),
312
+ "tech_name": "string (위 기술 스택 목록의 정확한 이름)",
313
+ "content": {
314
+ "sections": [
315
+ {
316
+ "type": "explanation | code_example | quiz_question | challenge | reflection",
317
+ "title": "string (섹션 제목, 한국어)",
318
+ "body": "string (마크다운 콘텐츠, 한국어)",
319
+ "code": "string (code_example일 때만, 학생의 실제 코드 + 한국어 주석)",
320
+ "quiz_options": ["string", "string", "string", "string"] (quiz_question일 때만),
321
+ "quiz_answer": number (0-3, quiz_question일 때만),
322
+ "quiz_explanation": "string (정답/오답 이유, quiz_question일 때만)",
323
+ "challenge_starter_code": "string (TODO 포함 뼈대, challenge일 때만)",
324
+ "challenge_answer_code": "string (완성 정답, challenge일 때만)"
325
+ }
326
+ ]
327
+ }
328
+ }
329
+ ]
330
+ }
331
+
332
+ ## 중요
333
+
334
+ - JSON만 출력하세요. 코드 펜스(\`\`\`), 설명문, 앞뒤 텍스트 없이 순수 JSON만.
335
+ - \`tech_name\`은 위 기술 스택 목록의 이름과 **정확히 일치**해야 합니다.
336
+ - 각 모듈당 **5-8개 섹션** 필수.
337
+
338
+ 생성 완료 후 아래 도구로 제출:
339
+ vibeuniv_submit_curriculum({ project_id: "${project_id}", curriculum: <생성된 JSON> })`;
340
+ return {
341
+ content: [
342
+ {
343
+ type: "text",
344
+ text: instructions,
345
+ },
346
+ ],
347
+ };
348
+ }
349
+ catch (error) {
350
+ const message = error instanceof Error ? error.message : String(error);
351
+ return {
352
+ content: [
353
+ {
354
+ type: "text",
355
+ text: `Failed to generate curriculum instructions: ${message}`,
356
+ },
357
+ ],
358
+ isError: true,
359
+ };
360
+ }
361
+ });
362
+ }
363
+ //# sourceMappingURL=generate-curriculum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-curriculum.js","sourceRoot":"","sources":["../../src/tools/generate-curriculum.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
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 submitCurriculumSchema: {
5
+ project_id: z.ZodString;
6
+ curriculum: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>;
7
+ };
8
+ export declare function registerSubmitCurriculum(server: McpServer, client: VibeUnivClient): void;
9
+ //# sourceMappingURL=submit-curriculum.d.ts.map
@@ -0,0 +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,CAoCxF"}
@@ -0,0 +1,37 @@
1
+ import { z } from "zod";
2
+ export const submitCurriculumSchema = {
3
+ project_id: z.string().describe("The VibeUniv project ID"),
4
+ curriculum: z
5
+ .object({})
6
+ .passthrough()
7
+ .describe("Curriculum JSON containing title, description, difficulty, estimated_hours, and modules array with content sections"),
8
+ };
9
+ export function registerSubmitCurriculum(server, client) {
10
+ server.tool("vibeuniv_submit_curriculum", "Submit a generated learning curriculum for the project. The curriculum should follow the JSON schema from vibeuniv_generate_curriculum.", submitCurriculumSchema, { readOnlyHint: false, openWorldHint: true }, async ({ project_id, curriculum }) => {
11
+ try {
12
+ console.error(`[vibeuniv] Submitting curriculum for project ${project_id}...`);
13
+ const result = await client.submitCurriculum(project_id, curriculum);
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: `Curriculum submitted successfully!\n\n- Learning Path ID: ${result.learningPathId}\n- Title: ${result.title}\n- Total Modules: ${result.totalModules}\n\nThe user can now access the learning path at https://vibeuniv.com to start learning.`,
19
+ },
20
+ ],
21
+ };
22
+ }
23
+ catch (error) {
24
+ const message = error instanceof Error ? error.message : String(error);
25
+ return {
26
+ content: [
27
+ {
28
+ type: "text",
29
+ text: `Failed to submit curriculum: ${message}`,
30
+ },
31
+ ],
32
+ isError: true,
33
+ };
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=submit-curriculum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-curriculum.js","sourceRoot":"","sources":["../../src/tools/submit-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,UAAU,EAAE,CAAC;SACV,MAAM,CAAC,EAAE,CAAC;SACV,WAAW,EAAE;SACb,QAAQ,CACP,qHAAqH,CACtH;CACJ,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,MAAsB;IAChF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,yIAAyI,EACzI,sBAAsB,EACtB,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EAC5C,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,gDAAgD,UAAU,KAAK,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,UAAU,EACV,UAAqC,CACtC,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6DAA6D,MAAM,CAAC,cAAc,cAAc,MAAM,CAAC,KAAK,sBAAsB,MAAM,CAAC,YAAY,0FAA0F;qBACtP;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"}
@@ -0,0 +1,9 @@
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 submitTechStacksSchema: {
5
+ project_id: z.ZodString;
6
+ analysis: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>;
7
+ };
8
+ export declare function registerSubmitTechStacks(server: McpServer, client: VibeUnivClient): void;
9
+ //# sourceMappingURL=submit-tech-stacks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-tech-stacks.d.ts","sourceRoot":"","sources":["../../src/tools/submit-tech-stacks.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;AAGtD,eAAO,MAAM,sBAAsB;;;CAQlC,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAqDxF"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ export const submitTechStacksSchema = {
3
+ project_id: z.string().describe("The VibeUniv project ID"),
4
+ analysis: z
5
+ .object({})
6
+ .passthrough()
7
+ .describe("Analysis result containing technologies array and optional architecture_summary"),
8
+ };
9
+ export function registerSubmitTechStacks(server, client) {
10
+ server.tool("vibeuniv_submit_tech_stacks", "Submit tech stack analysis results for a project. Use after vibeuniv_analyze returns file contents for local analysis.", submitTechStacksSchema, { readOnlyHint: false, openWorldHint: true }, async ({ project_id, analysis }) => {
11
+ try {
12
+ console.error(`[vibeuniv] Submitting tech stacks for project ${project_id}...`);
13
+ const submission = analysis;
14
+ // Basic client-side validation
15
+ if (!submission.technologies ||
16
+ !Array.isArray(submission.technologies) ||
17
+ submission.technologies.length === 0) {
18
+ return {
19
+ content: [
20
+ {
21
+ type: "text",
22
+ text: "Invalid submission: technologies array is required and must have at least 1 entry.",
23
+ },
24
+ ],
25
+ isError: true,
26
+ };
27
+ }
28
+ const result = await client.submitTechStacks(project_id, submission);
29
+ let output = `Tech stack analysis submitted successfully!\n\n`;
30
+ output += `- Technologies saved: ${result.savedCount}\n`;
31
+ output += `- Project status: ${result.projectStatus}\n\n`;
32
+ output += `Next step: Use vibeuniv_generate_curriculum to create a learning curriculum.`;
33
+ return {
34
+ content: [{ type: "text", text: output }],
35
+ };
36
+ }
37
+ catch (error) {
38
+ const message = error instanceof Error ? error.message : String(error);
39
+ return {
40
+ content: [
41
+ {
42
+ type: "text",
43
+ text: `Failed to submit tech stacks: ${message}`,
44
+ },
45
+ ],
46
+ isError: true,
47
+ };
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=submit-tech-stacks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-tech-stacks.js","sourceRoot":"","sources":["../../src/tools/submit-tech-stacks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC1D,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC,EAAE,CAAC;SACV,WAAW,EAAE;SACb,QAAQ,CACP,iFAAiF,CAClF;CACJ,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,MAAsB;IAChF,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,wHAAwH,EACxH,sBAAsB,EACtB,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EAC5C,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,iDAAiD,UAAU,KAAK,CAAC,CAAC;YAEhF,MAAM,UAAU,GAAG,QAA0C,CAAC;YAE9D,+BAA+B;YAC/B,IACE,CAAC,UAAU,CAAC,YAAY;gBACxB,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;gBACvC,UAAU,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EACpC,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,oFAAoF;yBAC3F;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAErE,IAAI,MAAM,GAAG,iDAAiD,CAAC;YAC/D,MAAM,IAAI,yBAAyB,MAAM,CAAC,UAAU,IAAI,CAAC;YACzD,MAAM,IAAI,qBAAqB,MAAM,CAAC,aAAa,MAAM,CAAC;YAC1D,MAAM,IAAI,8EAA8E,CAAC;YAEzF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACnD,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,iCAAiC,OAAO,EAAE;qBACjD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
package/dist/types.d.ts CHANGED
@@ -32,6 +32,7 @@ export interface TechStackItem {
32
32
  category: string;
33
33
  version?: string;
34
34
  confidence: number;
35
+ importance: string;
35
36
  }
36
37
  export interface LearningPath {
37
38
  id: string;
@@ -66,4 +67,141 @@ export interface ApiResponse<T> {
66
67
  data?: T;
67
68
  error?: string;
68
69
  }
70
+ export interface CurriculumSubmitResult {
71
+ learningPathId: string;
72
+ title: string;
73
+ totalModules: number;
74
+ }
75
+ export interface ConceptHintItem {
76
+ concept_key: string;
77
+ concept_name: string;
78
+ key_points: string[];
79
+ common_quiz_topics: string[];
80
+ prerequisite_concepts: string[];
81
+ tags: string[];
82
+ }
83
+ export interface KnowledgeHintsResult {
84
+ techs: Record<string, ConceptHintItem[]>;
85
+ availableCount: number;
86
+ requestedCount: number;
87
+ }
88
+ export interface ProjectDetail {
89
+ id: string;
90
+ name: string;
91
+ status: string;
92
+ files: Array<{
93
+ file_name: string;
94
+ file_path: string;
95
+ content: string;
96
+ }>;
97
+ allFileList?: Array<{
98
+ file_name: string;
99
+ file_path: string;
100
+ }>;
101
+ existingTechStacks: TechStackItem[];
102
+ }
103
+ export interface TechStackSubmission {
104
+ technologies: Array<{
105
+ name: string;
106
+ category: string;
107
+ version?: string;
108
+ confidence: number;
109
+ importance: string;
110
+ description?: string;
111
+ }>;
112
+ architecture_summary?: string;
113
+ }
114
+ export interface TechStackSubmitResult {
115
+ savedCount: number;
116
+ projectStatus: string;
117
+ }
118
+ export interface TutorContext {
119
+ techStacks: Array<{
120
+ technology_name: string;
121
+ category: string;
122
+ description: string | null;
123
+ }>;
124
+ files: Array<{
125
+ file_name: string;
126
+ content: string;
127
+ }>;
128
+ learningContext?: {
129
+ path_title: string;
130
+ current_module: string;
131
+ };
132
+ }
133
+ export interface CurriculumContext {
134
+ techStacks: TechStackItem[];
135
+ knowledgeHints: Record<string, ConceptHintItem[]>;
136
+ educationalAnalysis: EducationalAnalysisData | null;
137
+ }
138
+ export interface EducationalAnalysisData {
139
+ project_overview: {
140
+ one_liner: string;
141
+ app_type: string;
142
+ target_users: string;
143
+ core_features: string[];
144
+ tech_stack_metaphors: Array<{
145
+ tech_name: string;
146
+ metaphor: string;
147
+ }>;
148
+ };
149
+ user_flows: Array<{
150
+ name: string;
151
+ trigger: string;
152
+ difficulty: string;
153
+ steps: Array<{
154
+ description: string;
155
+ file: string;
156
+ line_range: string;
157
+ }>;
158
+ }>;
159
+ file_analysis: Array<{
160
+ path: string;
161
+ role: string;
162
+ complexity: number;
163
+ difficulty: string;
164
+ key_concepts: string[];
165
+ prerequisites: string[];
166
+ gotchas: string[];
167
+ teaching_notes: string;
168
+ }>;
169
+ learning_priorities: {
170
+ beginner: {
171
+ start_with: string[];
172
+ focus_on: string[];
173
+ skip_for_now: string[];
174
+ };
175
+ intermediate: {
176
+ start_with: string[];
177
+ focus_on: string[];
178
+ deep_dive: string[];
179
+ };
180
+ advanced: {
181
+ start_with: string[];
182
+ focus_on: string[];
183
+ challenge_topics: string[];
184
+ };
185
+ };
186
+ repeated_patterns: Array<{
187
+ name: string;
188
+ description: string;
189
+ occurrences: Array<{
190
+ file: string;
191
+ line_range: string;
192
+ }>;
193
+ teaching_value: string;
194
+ }>;
195
+ code_quality: {
196
+ good_practices: Array<{
197
+ description: string;
198
+ concept: string;
199
+ }>;
200
+ improvement_areas: Array<{
201
+ description: string;
202
+ severity: string;
203
+ teaching_opportunity: string;
204
+ }>;
205
+ };
206
+ }
69
207
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
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.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "VibeUniv MCP Server - Sync your vibe-coded projects for tech stack analysis and learning",
5
5
  "type": "module",
6
6
  "bin": {