learngraph 0.4.0 → 0.7.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.
Files changed (259) hide show
  1. package/dist/cjs/api/routes/analytics.js +288 -0
  2. package/dist/cjs/api/routes/analytics.js.map +1 -0
  3. package/dist/cjs/api/routes/assessments.js +269 -0
  4. package/dist/cjs/api/routes/assessments.js.map +1 -0
  5. package/dist/cjs/api/routes/curriculum.js +345 -0
  6. package/dist/cjs/api/routes/curriculum.js.map +1 -0
  7. package/dist/cjs/api/routes/edges.js +162 -0
  8. package/dist/cjs/api/routes/edges.js.map +1 -0
  9. package/dist/cjs/api/routes/explore.js +224 -0
  10. package/dist/cjs/api/routes/explore.js.map +1 -0
  11. package/dist/cjs/api/routes/learners.js +324 -0
  12. package/dist/cjs/api/routes/learners.js.map +1 -0
  13. package/dist/cjs/api/routes/me.js +404 -0
  14. package/dist/cjs/api/routes/me.js.map +1 -0
  15. package/dist/cjs/api/routes/skills.js +319 -0
  16. package/dist/cjs/api/routes/skills.js.map +1 -0
  17. package/dist/cjs/api/server.js +185 -0
  18. package/dist/cjs/api/server.js.map +1 -0
  19. package/dist/cjs/api/types.js +10 -0
  20. package/dist/cjs/api/types.js.map +1 -0
  21. package/dist/cjs/assessment/adaptive.js +390 -0
  22. package/dist/cjs/assessment/adaptive.js.map +1 -0
  23. package/dist/cjs/assessment/bkt.js +362 -0
  24. package/dist/cjs/assessment/bkt.js.map +1 -0
  25. package/dist/cjs/assessment/index.js +54 -0
  26. package/dist/cjs/assessment/index.js.map +1 -0
  27. package/dist/cjs/assessment/irt.js +420 -0
  28. package/dist/cjs/assessment/irt.js.map +1 -0
  29. package/dist/cjs/assessment/mastery-engine.js +411 -0
  30. package/dist/cjs/assessment/mastery-engine.js.map +1 -0
  31. package/dist/cjs/components/LearningPathView.js +320 -0
  32. package/dist/cjs/components/LearningPathView.js.map +1 -0
  33. package/dist/cjs/components/ProgressDashboard.js +308 -0
  34. package/dist/cjs/components/ProgressDashboard.js.map +1 -0
  35. package/dist/cjs/components/SkillCard.js +264 -0
  36. package/dist/cjs/components/SkillCard.js.map +1 -0
  37. package/dist/cjs/components/SkillExplorer.js +401 -0
  38. package/dist/cjs/components/SkillExplorer.js.map +1 -0
  39. package/dist/cjs/components/SkillGraph.js +435 -0
  40. package/dist/cjs/components/SkillGraph.js.map +1 -0
  41. package/dist/cjs/components/hooks.js +510 -0
  42. package/dist/cjs/components/hooks.js.map +1 -0
  43. package/dist/cjs/components/index.js +77 -0
  44. package/dist/cjs/components/index.js.map +1 -0
  45. package/dist/cjs/components/types.js +34 -0
  46. package/dist/cjs/components/types.js.map +1 -0
  47. package/dist/cjs/index.js +36 -2
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/llm/adapters/anthropic.js +91 -3
  50. package/dist/cjs/llm/adapters/anthropic.js.map +1 -1
  51. package/dist/cjs/llm/adapters/gemini.js +101 -8
  52. package/dist/cjs/llm/adapters/gemini.js.map +1 -1
  53. package/dist/cjs/llm/adapters/index.js +42 -1
  54. package/dist/cjs/llm/adapters/index.js.map +1 -1
  55. package/dist/cjs/llm/adapters/ollama.js +120 -3
  56. package/dist/cjs/llm/adapters/ollama.js.map +1 -1
  57. package/dist/cjs/llm/adapters/openai.js +108 -2
  58. package/dist/cjs/llm/adapters/openai.js.map +1 -1
  59. package/dist/cjs/mcp/cli.js +302 -0
  60. package/dist/cjs/mcp/cli.js.map +1 -0
  61. package/dist/cjs/mcp/index.js +79 -0
  62. package/dist/cjs/mcp/index.js.map +1 -0
  63. package/dist/cjs/mcp/prompts.js +425 -0
  64. package/dist/cjs/mcp/prompts.js.map +1 -0
  65. package/dist/cjs/mcp/resources.js +371 -0
  66. package/dist/cjs/mcp/resources.js.map +1 -0
  67. package/dist/cjs/mcp/server.js +410 -0
  68. package/dist/cjs/mcp/server.js.map +1 -0
  69. package/dist/cjs/mcp/tools.js +612 -0
  70. package/dist/cjs/mcp/tools.js.map +1 -0
  71. package/dist/cjs/mcp/types.js +10 -0
  72. package/dist/cjs/mcp/types.js.map +1 -0
  73. package/dist/cjs/query/index.js +23 -4
  74. package/dist/cjs/query/index.js.map +1 -1
  75. package/dist/cjs/query/path.js +313 -0
  76. package/dist/cjs/query/path.js.map +1 -0
  77. package/dist/cjs/query/spaced-repetition.js +298 -0
  78. package/dist/cjs/query/spaced-repetition.js.map +1 -0
  79. package/dist/cjs/query/zpd.js +216 -0
  80. package/dist/cjs/query/zpd.js.map +1 -0
  81. package/dist/cjs/types/assessment.js +46 -0
  82. package/dist/cjs/types/assessment.js.map +1 -0
  83. package/dist/cjs/types/bloom.js +12 -1
  84. package/dist/cjs/types/bloom.js.map +1 -1
  85. package/dist/cjs/types/index.js +7 -1
  86. package/dist/cjs/types/index.js.map +1 -1
  87. package/dist/esm/api/routes/analytics.js +285 -0
  88. package/dist/esm/api/routes/analytics.js.map +1 -0
  89. package/dist/esm/api/routes/assessments.js +266 -0
  90. package/dist/esm/api/routes/assessments.js.map +1 -0
  91. package/dist/esm/api/routes/curriculum.js +342 -0
  92. package/dist/esm/api/routes/curriculum.js.map +1 -0
  93. package/dist/esm/api/routes/edges.js +159 -0
  94. package/dist/esm/api/routes/edges.js.map +1 -0
  95. package/dist/esm/api/routes/explore.js +221 -0
  96. package/dist/esm/api/routes/explore.js.map +1 -0
  97. package/dist/esm/api/routes/learners.js +321 -0
  98. package/dist/esm/api/routes/learners.js.map +1 -0
  99. package/dist/esm/api/routes/me.js +401 -0
  100. package/dist/esm/api/routes/me.js.map +1 -0
  101. package/dist/esm/api/routes/skills.js +316 -0
  102. package/dist/esm/api/routes/skills.js.map +1 -0
  103. package/dist/esm/api/server.js +179 -0
  104. package/dist/esm/api/server.js.map +1 -0
  105. package/dist/esm/api/types.js +9 -0
  106. package/dist/esm/api/types.js.map +1 -0
  107. package/dist/esm/assessment/adaptive.js +384 -0
  108. package/dist/esm/assessment/adaptive.js.map +1 -0
  109. package/dist/esm/assessment/bkt.js +354 -0
  110. package/dist/esm/assessment/bkt.js.map +1 -0
  111. package/dist/esm/assessment/index.js +21 -0
  112. package/dist/esm/assessment/index.js.map +1 -0
  113. package/dist/esm/assessment/irt.js +406 -0
  114. package/dist/esm/assessment/irt.js.map +1 -0
  115. package/dist/esm/assessment/mastery-engine.js +406 -0
  116. package/dist/esm/assessment/mastery-engine.js.map +1 -0
  117. package/dist/esm/components/LearningPathView.js +316 -0
  118. package/dist/esm/components/LearningPathView.js.map +1 -0
  119. package/dist/esm/components/ProgressDashboard.js +304 -0
  120. package/dist/esm/components/ProgressDashboard.js.map +1 -0
  121. package/dist/esm/components/SkillCard.js +260 -0
  122. package/dist/esm/components/SkillCard.js.map +1 -0
  123. package/dist/esm/components/SkillExplorer.js +397 -0
  124. package/dist/esm/components/SkillExplorer.js.map +1 -0
  125. package/dist/esm/components/SkillGraph.js +398 -0
  126. package/dist/esm/components/SkillGraph.js.map +1 -0
  127. package/dist/esm/components/hooks.js +502 -0
  128. package/dist/esm/components/hooks.js.map +1 -0
  129. package/dist/esm/components/index.js +61 -0
  130. package/dist/esm/components/index.js.map +1 -0
  131. package/dist/esm/components/types.js +31 -0
  132. package/dist/esm/components/types.js.map +1 -0
  133. package/dist/esm/index.js +13 -1
  134. package/dist/esm/index.js.map +1 -1
  135. package/dist/esm/llm/adapters/anthropic.js +88 -2
  136. package/dist/esm/llm/adapters/anthropic.js.map +1 -1
  137. package/dist/esm/llm/adapters/gemini.js +98 -7
  138. package/dist/esm/llm/adapters/gemini.js.map +1 -1
  139. package/dist/esm/llm/adapters/index.js +15 -4
  140. package/dist/esm/llm/adapters/index.js.map +1 -1
  141. package/dist/esm/llm/adapters/ollama.js +117 -2
  142. package/dist/esm/llm/adapters/ollama.js.map +1 -1
  143. package/dist/esm/llm/adapters/openai.js +105 -1
  144. package/dist/esm/llm/adapters/openai.js.map +1 -1
  145. package/dist/esm/mcp/cli.js +267 -0
  146. package/dist/esm/mcp/cli.js.map +1 -0
  147. package/dist/esm/mcp/index.js +39 -0
  148. package/dist/esm/mcp/index.js.map +1 -0
  149. package/dist/esm/mcp/prompts.js +419 -0
  150. package/dist/esm/mcp/prompts.js.map +1 -0
  151. package/dist/esm/mcp/resources.js +359 -0
  152. package/dist/esm/mcp/resources.js.map +1 -0
  153. package/dist/esm/mcp/server.js +372 -0
  154. package/dist/esm/mcp/server.js.map +1 -0
  155. package/dist/esm/mcp/tools.js +598 -0
  156. package/dist/esm/mcp/tools.js.map +1 -0
  157. package/dist/esm/mcp/types.js +9 -0
  158. package/dist/esm/mcp/types.js.map +1 -0
  159. package/dist/esm/query/index.js +11 -5
  160. package/dist/esm/query/index.js.map +1 -1
  161. package/dist/esm/query/path.js +308 -0
  162. package/dist/esm/query/path.js.map +1 -0
  163. package/dist/esm/query/spaced-repetition.js +292 -0
  164. package/dist/esm/query/spaced-repetition.js.map +1 -0
  165. package/dist/esm/query/zpd.js +211 -0
  166. package/dist/esm/query/zpd.js.map +1 -0
  167. package/dist/esm/types/assessment.js +40 -0
  168. package/dist/esm/types/assessment.js.map +1 -0
  169. package/dist/esm/types/bloom.js +11 -0
  170. package/dist/esm/types/bloom.js.map +1 -1
  171. package/dist/esm/types/index.js +2 -1
  172. package/dist/esm/types/index.js.map +1 -1
  173. package/dist/types/api/routes/analytics.d.ts +14 -0
  174. package/dist/types/api/routes/analytics.d.ts.map +1 -0
  175. package/dist/types/api/routes/assessments.d.ts +14 -0
  176. package/dist/types/api/routes/assessments.d.ts.map +1 -0
  177. package/dist/types/api/routes/curriculum.d.ts +14 -0
  178. package/dist/types/api/routes/curriculum.d.ts.map +1 -0
  179. package/dist/types/api/routes/edges.d.ts +14 -0
  180. package/dist/types/api/routes/edges.d.ts.map +1 -0
  181. package/dist/types/api/routes/explore.d.ts +14 -0
  182. package/dist/types/api/routes/explore.d.ts.map +1 -0
  183. package/dist/types/api/routes/learners.d.ts +14 -0
  184. package/dist/types/api/routes/learners.d.ts.map +1 -0
  185. package/dist/types/api/routes/me.d.ts +14 -0
  186. package/dist/types/api/routes/me.d.ts.map +1 -0
  187. package/dist/types/api/routes/skills.d.ts +14 -0
  188. package/dist/types/api/routes/skills.d.ts.map +1 -0
  189. package/dist/types/api/server.d.ts +147 -0
  190. package/dist/types/api/server.d.ts.map +1 -0
  191. package/dist/types/api/types.d.ts +443 -0
  192. package/dist/types/api/types.d.ts.map +1 -0
  193. package/dist/types/assessment/adaptive.d.ts +155 -0
  194. package/dist/types/assessment/adaptive.d.ts.map +1 -0
  195. package/dist/types/assessment/bkt.d.ts +185 -0
  196. package/dist/types/assessment/bkt.d.ts.map +1 -0
  197. package/dist/types/assessment/index.d.ts +18 -0
  198. package/dist/types/assessment/index.d.ts.map +1 -0
  199. package/dist/types/assessment/irt.d.ts +159 -0
  200. package/dist/types/assessment/irt.d.ts.map +1 -0
  201. package/dist/types/assessment/mastery-engine.d.ts +178 -0
  202. package/dist/types/assessment/mastery-engine.d.ts.map +1 -0
  203. package/dist/types/components/LearningPathView.d.ts +40 -0
  204. package/dist/types/components/LearningPathView.d.ts.map +1 -0
  205. package/dist/types/components/ProgressDashboard.d.ts +49 -0
  206. package/dist/types/components/ProgressDashboard.d.ts.map +1 -0
  207. package/dist/types/components/SkillCard.d.ts +34 -0
  208. package/dist/types/components/SkillCard.d.ts.map +1 -0
  209. package/dist/types/components/SkillExplorer.d.ts +39 -0
  210. package/dist/types/components/SkillExplorer.d.ts.map +1 -0
  211. package/dist/types/components/SkillGraph.d.ts +38 -0
  212. package/dist/types/components/SkillGraph.d.ts.map +1 -0
  213. package/dist/types/components/hooks.d.ts +187 -0
  214. package/dist/types/components/hooks.d.ts.map +1 -0
  215. package/dist/types/components/index.d.ts +59 -0
  216. package/dist/types/components/index.d.ts.map +1 -0
  217. package/dist/types/components/types.d.ts +410 -0
  218. package/dist/types/components/types.d.ts.map +1 -0
  219. package/dist/types/index.d.ts +2 -1
  220. package/dist/types/index.d.ts.map +1 -1
  221. package/dist/types/llm/adapters/anthropic.d.ts +84 -1
  222. package/dist/types/llm/adapters/anthropic.d.ts.map +1 -1
  223. package/dist/types/llm/adapters/gemini.d.ts +93 -6
  224. package/dist/types/llm/adapters/gemini.d.ts.map +1 -1
  225. package/dist/types/llm/adapters/index.d.ts +13 -4
  226. package/dist/types/llm/adapters/index.d.ts.map +1 -1
  227. package/dist/types/llm/adapters/ollama.d.ts +126 -1
  228. package/dist/types/llm/adapters/ollama.d.ts.map +1 -1
  229. package/dist/types/llm/adapters/openai.d.ts +104 -1
  230. package/dist/types/llm/adapters/openai.d.ts.map +1 -1
  231. package/dist/types/mcp/cli.d.ts +15 -0
  232. package/dist/types/mcp/cli.d.ts.map +1 -0
  233. package/dist/types/mcp/index.d.ts +32 -0
  234. package/dist/types/mcp/index.d.ts.map +1 -0
  235. package/dist/types/mcp/prompts.d.ts +27 -0
  236. package/dist/types/mcp/prompts.d.ts.map +1 -0
  237. package/dist/types/mcp/resources.d.ts +59 -0
  238. package/dist/types/mcp/resources.d.ts.map +1 -0
  239. package/dist/types/mcp/server.d.ts +136 -0
  240. package/dist/types/mcp/server.d.ts.map +1 -0
  241. package/dist/types/mcp/tools.d.ts +344 -0
  242. package/dist/types/mcp/tools.d.ts.map +1 -0
  243. package/dist/types/mcp/types.d.ts +137 -0
  244. package/dist/types/mcp/types.d.ts.map +1 -0
  245. package/dist/types/query/index.d.ts +8 -0
  246. package/dist/types/query/index.d.ts.map +1 -1
  247. package/dist/types/query/path.d.ts +102 -0
  248. package/dist/types/query/path.d.ts.map +1 -0
  249. package/dist/types/query/spaced-repetition.d.ts +135 -0
  250. package/dist/types/query/spaced-repetition.d.ts.map +1 -0
  251. package/dist/types/query/zpd.d.ts +97 -0
  252. package/dist/types/query/zpd.d.ts.map +1 -0
  253. package/dist/types/types/assessment.d.ts +512 -0
  254. package/dist/types/types/assessment.d.ts.map +1 -0
  255. package/dist/types/types/bloom.d.ts +4 -0
  256. package/dist/types/types/bloom.d.ts.map +1 -1
  257. package/dist/types/types/index.d.ts +3 -1
  258. package/dist/types/types/index.d.ts.map +1 -1
  259. package/package.json +48 -3
@@ -0,0 +1,598 @@
1
+ /**
2
+ * MCP Tool Definitions
3
+ *
4
+ * Tool implementations for LearnGraph MCP server.
5
+ * These tools enable Claude to interact with knowledge graphs.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { z } from 'zod';
10
+ import { createSkillId, BLOOM_LEVELS } from '../types/index.js';
11
+ // ─────────────────────────────────────────────────────────────────────────────
12
+ // Tool Schemas
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ export const ListSkillsSchema = z.object({
15
+ limit: z.number().optional().default(50).describe('Maximum number of skills to return'),
16
+ offset: z.number().optional().default(0).describe('Number of skills to skip'),
17
+ bloomLevel: z.enum(['remember', 'understand', 'apply', 'analyze', 'evaluate', 'create']).optional().describe('Filter by Bloom\'s Taxonomy level'),
18
+ tag: z.string().optional().describe('Filter by tag'),
19
+ });
20
+ export const GetSkillSchema = z.object({
21
+ skillId: z.string().describe('The unique skill ID'),
22
+ });
23
+ export const CreateSkillSchema = z.object({
24
+ name: z.string().describe('Name of the skill'),
25
+ description: z.string().optional().describe('Description of what the skill covers'),
26
+ bloomLevel: z.enum(['remember', 'understand', 'apply', 'analyze', 'evaluate', 'create']).describe('Bloom\'s Taxonomy level'),
27
+ estimatedMinutes: z.number().optional().default(30).describe('Estimated time to learn in minutes'),
28
+ tags: z.array(z.string()).optional().default([]).describe('Tags for categorization'),
29
+ });
30
+ export const SearchSkillsSchema = z.object({
31
+ query: z.string().describe('Search query for skill names and descriptions'),
32
+ limit: z.number().optional().default(20).describe('Maximum results to return'),
33
+ });
34
+ export const GetPrerequisitesSchema = z.object({
35
+ skillId: z.string().describe('The skill ID to get prerequisites for'),
36
+ depth: z.number().optional().default(1).describe('How many levels of prerequisites to fetch'),
37
+ });
38
+ export const GetDependentsSchema = z.object({
39
+ skillId: z.string().describe('The skill ID to get dependents for'),
40
+ depth: z.number().optional().default(1).describe('How many levels of dependents to fetch'),
41
+ });
42
+ export const GetLearningPathSchema = z.object({
43
+ targetSkillId: z.string().describe('The target skill to learn'),
44
+ masteredSkillIds: z.array(z.string()).optional().default([]).describe('Skills already mastered'),
45
+ });
46
+ export const GetZpdSkillsSchema = z.object({
47
+ masteredSkillIds: z.array(z.string()).describe('Skills the learner has already mastered'),
48
+ limit: z.number().optional().default(10).describe('Maximum skills to return'),
49
+ });
50
+ export const CreatePrerequisiteSchema = z.object({
51
+ sourceSkillId: z.string().describe('The prerequisite skill ID'),
52
+ targetSkillId: z.string().describe('The skill that requires the prerequisite'),
53
+ strength: z.number().min(0).max(1).optional().default(0.8).describe('Strength of the relationship (0-1)'),
54
+ type: z.enum(['hard', 'soft', 'recommended']).optional().default('hard').describe('Type of prerequisite relationship'),
55
+ });
56
+ export const GetGraphStatsSchema = z.object({});
57
+ export const ValidateCurriculumSchema = z.object({
58
+ checkCycles: z.boolean().optional().default(true).describe('Check for circular dependencies'),
59
+ checkOrphans: z.boolean().optional().default(true).describe('Check for disconnected skills'),
60
+ });
61
+ // ─────────────────────────────────────────────────────────────────────────────
62
+ // Tool Implementations
63
+ // ─────────────────────────────────────────────────────────────────────────────
64
+ /**
65
+ * Create a success result
66
+ */
67
+ function successResult(data) {
68
+ return {
69
+ content: [{
70
+ type: 'text',
71
+ text: JSON.stringify(data, null, 2),
72
+ }],
73
+ };
74
+ }
75
+ /**
76
+ * Create an error result
77
+ */
78
+ function errorResult(message) {
79
+ return {
80
+ content: [{
81
+ type: 'text',
82
+ text: JSON.stringify({ error: message }),
83
+ }],
84
+ isError: true,
85
+ };
86
+ }
87
+ /**
88
+ * List skills in the graph
89
+ */
90
+ export async function listSkills(storage, params) {
91
+ try {
92
+ // Build query with filters
93
+ const filters = [];
94
+ if (params.bloomLevel) {
95
+ filters.push({ field: 'bloomLevel', operator: 'eq', value: params.bloomLevel });
96
+ }
97
+ if (params.tag) {
98
+ filters.push({ field: 'tags', operator: 'contains', value: params.tag });
99
+ }
100
+ const query = filters.length > 0 ? { filters } : {};
101
+ const skills = await storage.findSkills(query);
102
+ const paginated = skills.slice(params.offset, params.offset + params.limit);
103
+ return successResult({
104
+ skills: paginated.map((s) => ({
105
+ id: s.id,
106
+ name: s.name,
107
+ bloomLevel: s.bloomLevel,
108
+ estimatedMinutes: s.estimatedMinutes,
109
+ tags: s.tags,
110
+ })),
111
+ total: skills.length,
112
+ offset: params.offset,
113
+ limit: params.limit,
114
+ });
115
+ }
116
+ catch (err) {
117
+ return errorResult(`Failed to list skills: ${err instanceof Error ? err.message : 'Unknown error'}`);
118
+ }
119
+ }
120
+ /**
121
+ * Get a single skill by ID
122
+ */
123
+ export async function getSkill(storage, params) {
124
+ try {
125
+ const skill = await storage.getSkill(createSkillId(params.skillId));
126
+ if (!skill) {
127
+ return errorResult(`Skill not found: ${params.skillId}`);
128
+ }
129
+ const prerequisites = await storage.getPrerequisitesOf(skill.id);
130
+ const dependents = await storage.getDependentsOf(skill.id);
131
+ return successResult({
132
+ ...skill,
133
+ prerequisites: prerequisites.map((p) => ({ id: p.id, name: p.name })),
134
+ dependents: dependents.map((d) => ({ id: d.id, name: d.name })),
135
+ });
136
+ }
137
+ catch (err) {
138
+ return errorResult(`Failed to get skill: ${err instanceof Error ? err.message : 'Unknown error'}`);
139
+ }
140
+ }
141
+ /**
142
+ * Create a new skill
143
+ */
144
+ export async function createSkill(storage, params) {
145
+ try {
146
+ const skill = await storage.createSkill({
147
+ name: params.name,
148
+ bloomLevel: params.bloomLevel,
149
+ description: params.description ?? '',
150
+ estimatedMinutes: params.estimatedMinutes,
151
+ tags: params.tags,
152
+ difficulty: 0.5, // Default to intermediate difficulty
153
+ isThresholdConcept: false,
154
+ masteryThreshold: 0.8,
155
+ metadata: {},
156
+ });
157
+ return successResult({
158
+ message: `Created skill: ${skill.name}`,
159
+ skill: {
160
+ id: skill.id,
161
+ name: skill.name,
162
+ bloomLevel: skill.bloomLevel,
163
+ estimatedMinutes: skill.estimatedMinutes,
164
+ tags: skill.tags,
165
+ },
166
+ });
167
+ }
168
+ catch (err) {
169
+ return errorResult(`Failed to create skill: ${err instanceof Error ? err.message : 'Unknown error'}`);
170
+ }
171
+ }
172
+ /**
173
+ * Search skills by name/description
174
+ */
175
+ export async function searchSkills(storage, params) {
176
+ try {
177
+ const allSkills = await storage.findSkills({});
178
+ const query = params.query.toLowerCase();
179
+ const matched = allSkills
180
+ .map((skill) => {
181
+ const nameMatch = skill.name.toLowerCase().includes(query);
182
+ const descMatch = skill.description?.toLowerCase().includes(query) ?? false;
183
+ const tagMatch = skill.tags.some((t) => t.toLowerCase().includes(query));
184
+ let score = 0;
185
+ if (nameMatch)
186
+ score += 3;
187
+ if (descMatch)
188
+ score += 2;
189
+ if (tagMatch)
190
+ score += 1;
191
+ return { skill, score };
192
+ })
193
+ .filter(({ score }) => score > 0)
194
+ .sort((a, b) => b.score - a.score)
195
+ .slice(0, params.limit);
196
+ const result = {
197
+ skills: matched.map(({ skill, score }) => ({
198
+ id: String(skill.id),
199
+ name: skill.name,
200
+ description: skill.description,
201
+ bloomLevel: skill.bloomLevel,
202
+ tags: skill.tags,
203
+ matchScore: score,
204
+ })),
205
+ totalCount: matched.length,
206
+ };
207
+ return successResult(result);
208
+ }
209
+ catch (err) {
210
+ return errorResult(`Failed to search skills: ${err instanceof Error ? err.message : 'Unknown error'}`);
211
+ }
212
+ }
213
+ /**
214
+ * Get prerequisites for a skill
215
+ */
216
+ export async function getPrerequisites(storage, params) {
217
+ try {
218
+ const skillId = createSkillId(params.skillId);
219
+ const skill = await storage.getSkill(skillId);
220
+ if (!skill) {
221
+ return errorResult(`Skill not found: ${params.skillId}`);
222
+ }
223
+ const prerequisites = await storage.getPrerequisitesOf(skillId);
224
+ // For depth > 1, recursively get prerequisites
225
+ const allPrereqs = new Map();
226
+ const visited = new Set();
227
+ async function collectPrereqs(skills, currentDepth) {
228
+ if (currentDepth >= params.depth)
229
+ return;
230
+ for (const s of skills) {
231
+ const id = String(s.id);
232
+ if (visited.has(id))
233
+ continue;
234
+ visited.add(id);
235
+ allPrereqs.set(id, s);
236
+ if (currentDepth + 1 < params.depth) {
237
+ const nested = await storage.getPrerequisitesOf(s.id);
238
+ await collectPrereqs(nested, currentDepth + 1);
239
+ }
240
+ }
241
+ }
242
+ await collectPrereqs(prerequisites, 0);
243
+ return successResult({
244
+ skillId: params.skillId,
245
+ skillName: skill.name,
246
+ prerequisites: Array.from(allPrereqs.values()).map((p) => ({
247
+ id: p.id,
248
+ name: p.name,
249
+ bloomLevel: p.bloomLevel,
250
+ estimatedMinutes: p.estimatedMinutes,
251
+ })),
252
+ depth: params.depth,
253
+ });
254
+ }
255
+ catch (err) {
256
+ return errorResult(`Failed to get prerequisites: ${err instanceof Error ? err.message : 'Unknown error'}`);
257
+ }
258
+ }
259
+ /**
260
+ * Get dependents for a skill
261
+ */
262
+ export async function getDependents(storage, params) {
263
+ try {
264
+ const skillId = createSkillId(params.skillId);
265
+ const skill = await storage.getSkill(skillId);
266
+ if (!skill) {
267
+ return errorResult(`Skill not found: ${params.skillId}`);
268
+ }
269
+ const dependents = await storage.getDependentsOf(skillId);
270
+ return successResult({
271
+ skillId: params.skillId,
272
+ skillName: skill.name,
273
+ dependents: dependents.map((d) => ({
274
+ id: d.id,
275
+ name: d.name,
276
+ bloomLevel: d.bloomLevel,
277
+ estimatedMinutes: d.estimatedMinutes,
278
+ })),
279
+ });
280
+ }
281
+ catch (err) {
282
+ return errorResult(`Failed to get dependents: ${err instanceof Error ? err.message : 'Unknown error'}`);
283
+ }
284
+ }
285
+ /**
286
+ * Get learning path to a target skill
287
+ */
288
+ export async function getLearningPath(storage, params) {
289
+ try {
290
+ const targetId = createSkillId(params.targetSkillId);
291
+ const target = await storage.getSkill(targetId);
292
+ if (!target) {
293
+ return errorResult(`Target skill not found: ${params.targetSkillId}`);
294
+ }
295
+ const masteredSet = new Set(params.masteredSkillIds);
296
+ // Collect all prerequisites recursively
297
+ const path = [];
298
+ const visited = new Set();
299
+ async function collectPath(skillId) {
300
+ const id = String(skillId);
301
+ if (visited.has(id) || masteredSet.has(id))
302
+ return;
303
+ visited.add(id);
304
+ const prerequisites = await storage.getPrerequisitesOf(skillId);
305
+ for (const prereq of prerequisites) {
306
+ await collectPath(prereq.id);
307
+ }
308
+ const skill = await storage.getSkill(skillId);
309
+ if (skill && !masteredSet.has(id)) {
310
+ path.push(skill);
311
+ }
312
+ }
313
+ await collectPath(targetId);
314
+ const result = {
315
+ path: path.map((s, index) => ({
316
+ skillId: String(s.id),
317
+ skillName: s.name,
318
+ bloomLevel: s.bloomLevel,
319
+ estimatedMinutes: s.estimatedMinutes,
320
+ isPrerequisite: index < path.length - 1,
321
+ })),
322
+ totalEstimatedMinutes: path.reduce((sum, s) => sum + s.estimatedMinutes, 0),
323
+ totalSkills: path.length,
324
+ };
325
+ return successResult(result);
326
+ }
327
+ catch (err) {
328
+ return errorResult(`Failed to get learning path: ${err instanceof Error ? err.message : 'Unknown error'}`);
329
+ }
330
+ }
331
+ /**
332
+ * Get skills in the Zone of Proximal Development
333
+ */
334
+ export async function getZpdSkills(storage, params) {
335
+ try {
336
+ const masteredSet = new Set(params.masteredSkillIds);
337
+ const allSkills = await storage.findSkills({});
338
+ const readyToLearn = [];
339
+ const almostReady = [];
340
+ for (const skill of allSkills) {
341
+ const id = String(skill.id);
342
+ if (masteredSet.has(id))
343
+ continue;
344
+ const prerequisites = await storage.getPrerequisitesOf(skill.id);
345
+ const missingPrereqs = prerequisites.filter((p) => !masteredSet.has(String(p.id)));
346
+ if (missingPrereqs.length === 0) {
347
+ // All prerequisites mastered - ready to learn
348
+ readyToLearn.push({
349
+ skillId: id,
350
+ skillName: skill.name,
351
+ bloomLevel: skill.bloomLevel,
352
+ readinessScore: 1.0,
353
+ missingPrerequisites: [],
354
+ });
355
+ }
356
+ else if (missingPrereqs.length <= 2) {
357
+ // Almost ready - just needs 1-2 more prerequisites
358
+ almostReady.push({
359
+ skillId: id,
360
+ skillName: skill.name,
361
+ prerequisitesNeeded: missingPrereqs.length,
362
+ });
363
+ }
364
+ }
365
+ // Sort by readiness and limit
366
+ const result = {
367
+ readyToLearn: readyToLearn.slice(0, params.limit),
368
+ almostReady: almostReady.slice(0, params.limit),
369
+ };
370
+ return successResult(result);
371
+ }
372
+ catch (err) {
373
+ return errorResult(`Failed to get ZPD skills: ${err instanceof Error ? err.message : 'Unknown error'}`);
374
+ }
375
+ }
376
+ /**
377
+ * Create a prerequisite relationship
378
+ */
379
+ export async function createPrerequisite(storage, params) {
380
+ try {
381
+ const sourceId = createSkillId(params.sourceSkillId);
382
+ const targetId = createSkillId(params.targetSkillId);
383
+ // Check both skills exist
384
+ const source = await storage.getSkill(sourceId);
385
+ const target = await storage.getSkill(targetId);
386
+ if (!source) {
387
+ return errorResult(`Source skill not found: ${params.sourceSkillId}`);
388
+ }
389
+ if (!target) {
390
+ return errorResult(`Target skill not found: ${params.targetSkillId}`);
391
+ }
392
+ const edge = await storage.createPrerequisite({
393
+ sourceId,
394
+ targetId,
395
+ strength: params.strength,
396
+ type: params.type,
397
+ metadata: {},
398
+ });
399
+ return successResult({
400
+ message: `Created prerequisite: ${source.name} → ${target.name}`,
401
+ edge: {
402
+ id: edge.id,
403
+ sourceId: String(edge.sourceId),
404
+ targetId: String(edge.targetId),
405
+ strength: edge.strength,
406
+ type: edge.type,
407
+ },
408
+ });
409
+ }
410
+ catch (err) {
411
+ return errorResult(`Failed to create prerequisite: ${err instanceof Error ? err.message : 'Unknown error'}`);
412
+ }
413
+ }
414
+ /**
415
+ * Get graph statistics
416
+ */
417
+ export async function getGraphStats(storage, _params) {
418
+ try {
419
+ const skills = await storage.findSkills({});
420
+ const edges = await storage.findPrerequisites({});
421
+ // Calculate statistics
422
+ const bloomDistribution = {};
423
+ for (const level of BLOOM_LEVELS) {
424
+ bloomDistribution[level] = 0;
425
+ }
426
+ const inDegree = new Map();
427
+ const outDegree = new Map();
428
+ for (const skill of skills) {
429
+ const level = skill.bloomLevel;
430
+ if (level in bloomDistribution) {
431
+ bloomDistribution[level] = (bloomDistribution[level] ?? 0) + 1;
432
+ }
433
+ inDegree.set(String(skill.id), 0);
434
+ outDegree.set(String(skill.id), 0);
435
+ }
436
+ for (const edge of edges) {
437
+ const sourceStr = String(edge.sourceId);
438
+ const targetStr = String(edge.targetId);
439
+ outDegree.set(sourceStr, (outDegree.get(sourceStr) || 0) + 1);
440
+ inDegree.set(targetStr, (inDegree.get(targetStr) || 0) + 1);
441
+ }
442
+ const rootSkills = Array.from(inDegree.entries()).filter(([_, deg]) => deg === 0).length;
443
+ const leafSkills = Array.from(outDegree.entries()).filter(([_, deg]) => deg === 0).length;
444
+ const result = {
445
+ totalSkills: skills.length,
446
+ totalEdges: edges.length,
447
+ averagePrerequisites: skills.length > 0 ? edges.length / skills.length : 0,
448
+ maxDepth: 0, // Would require graph traversal to calculate
449
+ rootSkills,
450
+ leafSkills,
451
+ bloomDistribution,
452
+ };
453
+ return successResult(result);
454
+ }
455
+ catch (err) {
456
+ return errorResult(`Failed to get graph stats: ${err instanceof Error ? err.message : 'Unknown error'}`);
457
+ }
458
+ }
459
+ /**
460
+ * Validate curriculum structure
461
+ */
462
+ export async function validateCurriculum(storage, params) {
463
+ try {
464
+ const issues = [];
465
+ const skills = await storage.findSkills({});
466
+ const edges = await storage.findPrerequisites({});
467
+ // Check for orphaned skills (no incoming or outgoing edges)
468
+ if (params.checkOrphans) {
469
+ const connectedSkills = new Set();
470
+ for (const edge of edges) {
471
+ connectedSkills.add(String(edge.sourceId));
472
+ connectedSkills.add(String(edge.targetId));
473
+ }
474
+ const orphans = skills.filter((s) => !connectedSkills.has(String(s.id)));
475
+ if (orphans.length > 0) {
476
+ issues.push({
477
+ type: 'orphan',
478
+ message: `Found ${orphans.length} disconnected skill(s)`,
479
+ skillIds: orphans.map((s) => String(s.id)),
480
+ });
481
+ }
482
+ }
483
+ // Check for cycles (simplified DFS-based check)
484
+ if (params.checkCycles) {
485
+ const adjacency = new Map();
486
+ for (const edge of edges) {
487
+ const source = String(edge.sourceId);
488
+ const target = String(edge.targetId);
489
+ if (!adjacency.has(source)) {
490
+ adjacency.set(source, []);
491
+ }
492
+ adjacency.get(source).push(target);
493
+ }
494
+ const visited = new Set();
495
+ const recursionStack = new Set();
496
+ function hasCycle(node) {
497
+ visited.add(node);
498
+ recursionStack.add(node);
499
+ for (const neighbor of adjacency.get(node) || []) {
500
+ if (!visited.has(neighbor)) {
501
+ if (hasCycle(neighbor))
502
+ return true;
503
+ }
504
+ else if (recursionStack.has(neighbor)) {
505
+ return true;
506
+ }
507
+ }
508
+ recursionStack.delete(node);
509
+ return false;
510
+ }
511
+ for (const skill of skills) {
512
+ const id = String(skill.id);
513
+ if (!visited.has(id)) {
514
+ if (hasCycle(id)) {
515
+ issues.push({
516
+ type: 'cycle',
517
+ message: 'Circular dependency detected in prerequisite graph',
518
+ });
519
+ break;
520
+ }
521
+ }
522
+ }
523
+ }
524
+ return successResult({
525
+ valid: issues.length === 0,
526
+ issueCount: issues.length,
527
+ issues,
528
+ summary: {
529
+ totalSkills: skills.length,
530
+ totalEdges: edges.length,
531
+ },
532
+ });
533
+ }
534
+ catch (err) {
535
+ return errorResult(`Failed to validate curriculum: ${err instanceof Error ? err.message : 'Unknown error'}`);
536
+ }
537
+ }
538
+ /**
539
+ * Export all tool definitions for MCP registration
540
+ */
541
+ export const TOOL_DEFINITIONS = {
542
+ list_skills: {
543
+ description: 'List all skills in the knowledge graph with optional filtering by Bloom\'s Taxonomy level or tags.',
544
+ inputSchema: ListSkillsSchema,
545
+ handler: listSkills,
546
+ },
547
+ get_skill: {
548
+ description: 'Get detailed information about a specific skill including its prerequisites and dependents.',
549
+ inputSchema: GetSkillSchema,
550
+ handler: getSkill,
551
+ },
552
+ create_skill: {
553
+ description: 'Create a new skill in the knowledge graph with name, Bloom\'s level, and optional metadata.',
554
+ inputSchema: CreateSkillSchema,
555
+ handler: createSkill,
556
+ },
557
+ search_skills: {
558
+ description: 'Search for skills by name, description, or tags using fuzzy matching.',
559
+ inputSchema: SearchSkillsSchema,
560
+ handler: searchSkills,
561
+ },
562
+ get_prerequisites: {
563
+ description: 'Get all prerequisite skills for a given skill, optionally traversing multiple levels deep.',
564
+ inputSchema: GetPrerequisitesSchema,
565
+ handler: getPrerequisites,
566
+ },
567
+ get_dependents: {
568
+ description: 'Get all skills that depend on a given skill as a prerequisite.',
569
+ inputSchema: GetDependentsSchema,
570
+ handler: getDependents,
571
+ },
572
+ get_learning_path: {
573
+ description: 'Generate an optimal learning path to a target skill, considering already mastered skills.',
574
+ inputSchema: GetLearningPathSchema,
575
+ handler: getLearningPath,
576
+ },
577
+ get_zpd_skills: {
578
+ description: 'Get skills in the learner\'s Zone of Proximal Development - skills they\'re ready to learn based on mastered prerequisites.',
579
+ inputSchema: GetZpdSkillsSchema,
580
+ handler: getZpdSkills,
581
+ },
582
+ create_prerequisite: {
583
+ description: 'Create a prerequisite relationship between two skills (source skill is required before target skill).',
584
+ inputSchema: CreatePrerequisiteSchema,
585
+ handler: createPrerequisite,
586
+ },
587
+ get_graph_stats: {
588
+ description: 'Get statistics about the knowledge graph including skill counts, edge counts, and Bloom\'s Taxonomy distribution.',
589
+ inputSchema: GetGraphStatsSchema,
590
+ handler: getGraphStats,
591
+ },
592
+ validate_curriculum: {
593
+ description: 'Validate the curriculum structure checking for cycles and orphaned skills.',
594
+ inputSchema: ValidateCurriculumSchema,
595
+ handler: validateCurriculum,
596
+ },
597
+ };
598
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Server Type Definitions
3
+ *
4
+ * Types for the LearnGraph MCP server integration.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -1,11 +1,17 @@
1
1
  /**
2
2
  * Query and traversal engines
3
3
  *
4
+ * This module provides intelligent query engines for:
5
+ * - Zone of Proximal Development (ZPD) calculation
6
+ * - Learning path generation
7
+ * - Spaced repetition scheduling
8
+ *
4
9
  * @packageDocumentation
5
10
  */
6
- export {};
7
- // Query engines will be implemented in Phase 6
8
- // export { ZPDCalculator } from './zpd.js';
9
- // export { PathGenerator } from './path.js';
10
- // export { SkillQueryBuilder } from './builder.js';
11
+ // ZPD Calculator
12
+ export { ZPDCalculator, createZPDCalculator, ZPD_DEFAULTS, } from './zpd.js';
13
+ // Learning Path Generator
14
+ export { PathGenerator, createPathGenerator, PATH_DEFAULTS, } from './path.js';
15
+ // Spaced Repetition Scheduler
16
+ export { SpacedRepetitionScheduler, createSpacedRepetitionScheduler, calculateSM2, REVIEW_DEFAULTS, SM2_CONSTANTS, } from './spaced-repetition.js';
11
17
  //# sourceMappingURL=index.js.map