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,319 @@
1
+ "use strict";
2
+ /**
3
+ * Skill routes
4
+ *
5
+ * CRUD operations and graph traversal for skills.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createSkillRoutes = createSkillRoutes;
11
+ const hono_1 = require("hono");
12
+ const server_js_1 = require("../server.js");
13
+ const index_js_1 = require("../../types/index.js");
14
+ /**
15
+ * Create skill routes
16
+ */
17
+ function createSkillRoutes(ctx) {
18
+ const app = new hono_1.Hono();
19
+ // ─────────────────────────────────────────────────────────────────────────
20
+ // List Skills
21
+ // ─────────────────────────────────────────────────────────────────────────
22
+ app.get('/', async (c) => {
23
+ try {
24
+ const page = Number(c.req.query('page')) || 1;
25
+ const pageSize = Number(c.req.query('pageSize')) || 50;
26
+ const search = c.req.query('search');
27
+ const bloomLevel = c.req.query('bloomLevel');
28
+ const sortBy = c.req.query('sortBy');
29
+ const sortOrder = c.req.query('sortOrder');
30
+ // Get tags as array
31
+ const tagsParam = c.req.query('tags');
32
+ const tags = tagsParam ? tagsParam.split(',') : undefined;
33
+ const skills = await ctx.storage.findSkills({});
34
+ // Apply filters
35
+ let filtered = skills;
36
+ if (search) {
37
+ const searchLower = search.toLowerCase();
38
+ filtered = filtered.filter((s) => s.name.toLowerCase().includes(searchLower) ||
39
+ s.description.toLowerCase().includes(searchLower));
40
+ }
41
+ if (bloomLevel) {
42
+ filtered = filtered.filter((s) => s.bloomLevel === bloomLevel);
43
+ }
44
+ if (tags && tags.length > 0) {
45
+ filtered = filtered.filter((s) => tags.some((tag) => s.tags.includes(tag)));
46
+ }
47
+ // Sort
48
+ if (sortBy) {
49
+ filtered.sort((a, b) => {
50
+ const order = sortOrder === 'desc' ? -1 : 1;
51
+ switch (sortBy) {
52
+ case 'name':
53
+ return order * a.name.localeCompare(b.name);
54
+ case 'difficulty':
55
+ return order * (a.difficulty - b.difficulty);
56
+ case 'createdAt':
57
+ return order * (new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
58
+ case 'updatedAt':
59
+ return order * (new Date(a.updatedAt).getTime() - new Date(b.updatedAt).getTime());
60
+ default:
61
+ return 0;
62
+ }
63
+ });
64
+ }
65
+ // Paginate
66
+ const start = (page - 1) * pageSize;
67
+ const paginated = filtered.slice(start, start + pageSize);
68
+ return c.json((0, server_js_1.success)(paginated, {
69
+ total: filtered.length,
70
+ page,
71
+ pageSize,
72
+ hasMore: start + paginated.length < filtered.length,
73
+ }));
74
+ }
75
+ catch (err) {
76
+ console.error('List skills error:', err);
77
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.INTERNAL_ERROR, 'Failed to list skills'), 500);
78
+ }
79
+ });
80
+ // ─────────────────────────────────────────────────────────────────────────
81
+ // Get Skill by ID
82
+ // ─────────────────────────────────────────────────────────────────────────
83
+ app.get('/:id', async (c) => {
84
+ try {
85
+ const idParam = c.req.param('id');
86
+ const skillId = (0, index_js_1.createSkillId)(idParam);
87
+ const skill = await ctx.storage.getSkill(skillId);
88
+ if (!skill) {
89
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.NOT_FOUND, `Skill not found: ${idParam}`), 404);
90
+ }
91
+ // Check for expansions
92
+ const expand = c.req.query('expand')?.split(',') || [];
93
+ const result = { ...skill };
94
+ if (expand.includes('prerequisites')) {
95
+ const edges = await ctx.storage.findPrerequisites({ targetId: skillId });
96
+ result.prerequisites = await Promise.all(edges.map(async (e) => {
97
+ const prereq = await ctx.storage.getSkill(e.sourceId);
98
+ return {
99
+ id: e.sourceId,
100
+ name: prereq?.name || 'Unknown',
101
+ strength: e.strength,
102
+ };
103
+ }));
104
+ }
105
+ if (expand.includes('dependents')) {
106
+ const edges = await ctx.storage.findPrerequisites({ sourceId: skillId });
107
+ result.dependents = await Promise.all(edges.map(async (e) => {
108
+ const dep = await ctx.storage.getSkill(e.targetId);
109
+ return {
110
+ id: e.targetId,
111
+ name: dep?.name || 'Unknown',
112
+ strength: e.strength,
113
+ };
114
+ }));
115
+ }
116
+ return c.json((0, server_js_1.success)(result));
117
+ }
118
+ catch (err) {
119
+ console.error('Get skill error:', err);
120
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.INTERNAL_ERROR, 'Failed to get skill'), 500);
121
+ }
122
+ });
123
+ // ─────────────────────────────────────────────────────────────────────────
124
+ // Create Skill
125
+ // ─────────────────────────────────────────────────────────────────────────
126
+ app.post('/', async (c) => {
127
+ try {
128
+ const body = await c.req.json();
129
+ if (!body.name || !body.description || !body.bloomLevel) {
130
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.VALIDATION_ERROR, 'name, description, and bloomLevel are required'), 400);
131
+ }
132
+ const skill = await ctx.storage.createSkill({
133
+ name: body.name,
134
+ description: body.description,
135
+ bloomLevel: body.bloomLevel,
136
+ difficulty: body.difficulty ?? 0.5,
137
+ isThresholdConcept: body.isThresholdConcept ?? false,
138
+ masteryThreshold: body.masteryThreshold ?? 0.8,
139
+ estimatedMinutes: body.estimatedMinutes ?? 30,
140
+ tags: body.tags ?? [],
141
+ metadata: body.metadata ?? {},
142
+ });
143
+ return c.json((0, server_js_1.success)(skill), 201);
144
+ }
145
+ catch (err) {
146
+ console.error('Create skill error:', err);
147
+ if (err instanceof Error && err.message.includes('already exists')) {
148
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.CONFLICT, err.message), 409);
149
+ }
150
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.INTERNAL_ERROR, 'Failed to create skill'), 500);
151
+ }
152
+ });
153
+ // ─────────────────────────────────────────────────────────────────────────
154
+ // Update Skill
155
+ // ─────────────────────────────────────────────────────────────────────────
156
+ app.put('/:id', async (c) => {
157
+ try {
158
+ const idParam = c.req.param('id');
159
+ const skillId = (0, index_js_1.createSkillId)(idParam);
160
+ const body = await c.req.json();
161
+ const existing = await ctx.storage.getSkill(skillId);
162
+ if (!existing) {
163
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.NOT_FOUND, `Skill not found: ${idParam}`), 404);
164
+ }
165
+ const updated = await ctx.storage.updateSkill(skillId, body);
166
+ return c.json((0, server_js_1.success)(updated));
167
+ }
168
+ catch (err) {
169
+ console.error('Update skill error:', err);
170
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.INTERNAL_ERROR, 'Failed to update skill'), 500);
171
+ }
172
+ });
173
+ app.patch('/:id', async (c) => {
174
+ try {
175
+ const idParam = c.req.param('id');
176
+ const skillId = (0, index_js_1.createSkillId)(idParam);
177
+ const body = await c.req.json();
178
+ const existing = await ctx.storage.getSkill(skillId);
179
+ if (!existing) {
180
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.NOT_FOUND, `Skill not found: ${idParam}`), 404);
181
+ }
182
+ const updated = await ctx.storage.updateSkill(skillId, body);
183
+ return c.json((0, server_js_1.success)(updated));
184
+ }
185
+ catch (err) {
186
+ console.error('Update skill error:', err);
187
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.INTERNAL_ERROR, 'Failed to update skill'), 500);
188
+ }
189
+ });
190
+ // ─────────────────────────────────────────────────────────────────────────
191
+ // Delete Skill
192
+ // ─────────────────────────────────────────────────────────────────────────
193
+ app.delete('/:id', async (c) => {
194
+ try {
195
+ const idParam = c.req.param('id');
196
+ const skillId = (0, index_js_1.createSkillId)(idParam);
197
+ const existing = await ctx.storage.getSkill(skillId);
198
+ if (!existing) {
199
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.NOT_FOUND, `Skill not found: ${idParam}`), 404);
200
+ }
201
+ await ctx.storage.deleteSkill(skillId);
202
+ return c.json((0, server_js_1.success)({ deleted: true }));
203
+ }
204
+ catch (err) {
205
+ console.error('Delete skill error:', err);
206
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.INTERNAL_ERROR, 'Failed to delete skill'), 500);
207
+ }
208
+ });
209
+ // ─────────────────────────────────────────────────────────────────────────
210
+ // Get All Prerequisites (Recursive)
211
+ // ─────────────────────────────────────────────────────────────────────────
212
+ app.get('/:id/prerequisites', async (c) => {
213
+ try {
214
+ const idParam = c.req.param('id');
215
+ const skillId = (0, index_js_1.createSkillId)(idParam);
216
+ const maxDepth = Number(c.req.query('depth')) || 10;
217
+ const skill = await ctx.storage.getSkill(skillId);
218
+ if (!skill) {
219
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.NOT_FOUND, `Skill not found: ${idParam}`), 404);
220
+ }
221
+ // BFS to get all prerequisites
222
+ const prerequisites = [];
223
+ const visited = new Set();
224
+ const queue = [{ skillId, depth: 0 }];
225
+ while (queue.length > 0) {
226
+ const current = queue.shift();
227
+ if (current.depth >= maxDepth)
228
+ continue;
229
+ const edges = await ctx.storage.findPrerequisites({ targetId: current.skillId });
230
+ for (const edge of edges) {
231
+ const sourceIdStr = String(edge.sourceId);
232
+ if (!visited.has(sourceIdStr)) {
233
+ visited.add(sourceIdStr);
234
+ const prereqSkill = await ctx.storage.getSkill(edge.sourceId);
235
+ if (prereqSkill) {
236
+ prerequisites.push({
237
+ id: edge.sourceId,
238
+ name: prereqSkill.name,
239
+ bloomLevel: prereqSkill.bloomLevel,
240
+ strength: edge.strength,
241
+ depth: current.depth + 1,
242
+ });
243
+ queue.push({ skillId: edge.sourceId, depth: current.depth + 1 });
244
+ }
245
+ }
246
+ }
247
+ }
248
+ // Sort by depth
249
+ prerequisites.sort((a, b) => a.depth - b.depth);
250
+ const response = {
251
+ skillId,
252
+ skillName: skill.name,
253
+ prerequisites,
254
+ depth: maxDepth,
255
+ };
256
+ return c.json((0, server_js_1.success)(response));
257
+ }
258
+ catch (err) {
259
+ console.error('Get prerequisites error:', err);
260
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.INTERNAL_ERROR, 'Failed to get prerequisites'), 500);
261
+ }
262
+ });
263
+ // ─────────────────────────────────────────────────────────────────────────
264
+ // Get All Dependents (Recursive)
265
+ // ─────────────────────────────────────────────────────────────────────────
266
+ app.get('/:id/dependents', async (c) => {
267
+ try {
268
+ const idParam = c.req.param('id');
269
+ const skillId = (0, index_js_1.createSkillId)(idParam);
270
+ const maxDepth = Number(c.req.query('depth')) || 10;
271
+ const skill = await ctx.storage.getSkill(skillId);
272
+ if (!skill) {
273
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.NOT_FOUND, `Skill not found: ${idParam}`), 404);
274
+ }
275
+ // BFS to get all dependents
276
+ const dependents = [];
277
+ const visited = new Set();
278
+ const queue = [{ skillId, depth: 0 }];
279
+ while (queue.length > 0) {
280
+ const current = queue.shift();
281
+ if (current.depth >= maxDepth)
282
+ continue;
283
+ const edges = await ctx.storage.findPrerequisites({ sourceId: current.skillId });
284
+ for (const edge of edges) {
285
+ const targetIdStr = String(edge.targetId);
286
+ if (!visited.has(targetIdStr)) {
287
+ visited.add(targetIdStr);
288
+ const depSkill = await ctx.storage.getSkill(edge.targetId);
289
+ if (depSkill) {
290
+ dependents.push({
291
+ id: edge.targetId,
292
+ name: depSkill.name,
293
+ bloomLevel: depSkill.bloomLevel,
294
+ strength: edge.strength,
295
+ depth: current.depth + 1,
296
+ });
297
+ queue.push({ skillId: edge.targetId, depth: current.depth + 1 });
298
+ }
299
+ }
300
+ }
301
+ }
302
+ // Sort by depth
303
+ dependents.sort((a, b) => a.depth - b.depth);
304
+ const response = {
305
+ skillId,
306
+ skillName: skill.name,
307
+ dependents,
308
+ depth: maxDepth,
309
+ };
310
+ return c.json((0, server_js_1.success)(response));
311
+ }
312
+ catch (err) {
313
+ console.error('Get dependents error:', err);
314
+ return c.json((0, server_js_1.error)(server_js_1.ErrorCodes.INTERNAL_ERROR, 'Failed to get dependents'), 500);
315
+ }
316
+ });
317
+ return app;
318
+ }
319
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../../src/api/routes/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ /**
3
+ * LearnGraph REST API Server
4
+ *
5
+ * Hono-based REST API for skill graphs, learners, and assessments.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ErrorCodes = void 0;
11
+ exports.success = success;
12
+ exports.error = error;
13
+ exports.createApiServer = createApiServer;
14
+ const hono_1 = require("hono");
15
+ const cors_1 = require("hono/cors");
16
+ const logger_1 = require("hono/logger");
17
+ const pretty_json_1 = require("hono/pretty-json");
18
+ const timing_1 = require("hono/timing");
19
+ const skills_js_1 = require("./routes/skills.js");
20
+ const edges_js_1 = require("./routes/edges.js");
21
+ const learners_js_1 = require("./routes/learners.js");
22
+ const me_js_1 = require("./routes/me.js");
23
+ const explore_js_1 = require("./routes/explore.js");
24
+ const assessments_js_1 = require("./routes/assessments.js");
25
+ const analytics_js_1 = require("./routes/analytics.js");
26
+ const curriculum_js_1 = require("./routes/curriculum.js");
27
+ // ─────────────────────────────────────────────────────────────────────────────
28
+ // Response Helpers
29
+ // ─────────────────────────────────────────────────────────────────────────────
30
+ /**
31
+ * Create success response
32
+ */
33
+ function success(data, meta) {
34
+ const response = {
35
+ success: true,
36
+ data,
37
+ };
38
+ if (meta) {
39
+ response.meta = meta;
40
+ }
41
+ return response;
42
+ }
43
+ /**
44
+ * Create error response
45
+ */
46
+ function error(code, message, details) {
47
+ const errorObj = {
48
+ code,
49
+ message,
50
+ };
51
+ if (details) {
52
+ errorObj.details = details;
53
+ }
54
+ return {
55
+ success: false,
56
+ error: errorObj,
57
+ };
58
+ }
59
+ /**
60
+ * Common error codes
61
+ */
62
+ exports.ErrorCodes = {
63
+ NOT_FOUND: 'NOT_FOUND',
64
+ BAD_REQUEST: 'BAD_REQUEST',
65
+ UNAUTHORIZED: 'UNAUTHORIZED',
66
+ FORBIDDEN: 'FORBIDDEN',
67
+ CONFLICT: 'CONFLICT',
68
+ INTERNAL_ERROR: 'INTERNAL_ERROR',
69
+ VALIDATION_ERROR: 'VALIDATION_ERROR',
70
+ };
71
+ // ─────────────────────────────────────────────────────────────────────────────
72
+ // Server Factory
73
+ // ─────────────────────────────────────────────────────────────────────────────
74
+ /**
75
+ * Create the LearnGraph API server
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { createApiServer } from 'learngraph/api';
80
+ * import { MemoryStorage } from 'learngraph/storage';
81
+ *
82
+ * const storage = new MemoryStorage();
83
+ * await storage.connect({ backend: 'memory' });
84
+ *
85
+ * const app = createApiServer({ storage });
86
+ *
87
+ * // Start with Bun
88
+ * export default app;
89
+ *
90
+ * // Or with Node.js
91
+ * import { serve } from '@hono/node-server';
92
+ * serve({ fetch: app.fetch, port: 3000 });
93
+ * ```
94
+ */
95
+ function createApiServer(config) {
96
+ const app = new hono_1.Hono();
97
+ const basePath = config.basePath ?? '/api';
98
+ const ctx = {
99
+ storage: config.storage,
100
+ };
101
+ if (config.getCurrentUserId) {
102
+ ctx.getCurrentUserId = config.getCurrentUserId;
103
+ }
104
+ // ─────────────────────────────────────────────────────────────────────────
105
+ // Middleware
106
+ // ─────────────────────────────────────────────────────────────────────────
107
+ // CORS
108
+ if (config.cors !== false) {
109
+ app.use('*', (0, cors_1.cors)({
110
+ origin: config.corsOrigins ?? '*',
111
+ allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
112
+ allowHeaders: ['Content-Type', 'Authorization'],
113
+ }));
114
+ }
115
+ // Logging
116
+ if (config.logging !== false) {
117
+ app.use('*', (0, logger_1.logger)());
118
+ }
119
+ // Timing headers
120
+ if (config.timing !== false) {
121
+ app.use('*', (0, timing_1.timing)());
122
+ }
123
+ // Pretty JSON (dev mode)
124
+ if (config.prettyJson) {
125
+ app.use('*', (0, pretty_json_1.prettyJSON)());
126
+ }
127
+ // Custom auth middleware
128
+ if (config.authMiddleware) {
129
+ app.use('*', config.authMiddleware);
130
+ }
131
+ // ─────────────────────────────────────────────────────────────────────────
132
+ // Health Check
133
+ // ─────────────────────────────────────────────────────────────────────────
134
+ app.get('/health', (c) => c.json({
135
+ status: 'healthy',
136
+ timestamp: new Date().toISOString(),
137
+ version: '0.5.0',
138
+ }));
139
+ // ─────────────────────────────────────────────────────────────────────────
140
+ // Mount Routes
141
+ // ─────────────────────────────────────────────────────────────────────────
142
+ const api = new hono_1.Hono();
143
+ // Skills CRUD + Graph Traversal
144
+ api.route('/skills', (0, skills_js_1.createSkillRoutes)(ctx));
145
+ // Edges CRUD
146
+ api.route('/edges', (0, edges_js_1.createEdgeRoutes)(ctx));
147
+ // Learners CRUD + Mastery
148
+ api.route('/learners', (0, learners_js_1.createLearnerRoutes)(ctx));
149
+ // Student self-service (/me)
150
+ api.route('/me', (0, me_js_1.createMeRoutes)(ctx));
151
+ // Public skill exploration
152
+ api.route('/explore', (0, explore_js_1.createExploreRoutes)(ctx));
153
+ // Assessments & Sessions
154
+ api.route('/assessments', (0, assessments_js_1.createAssessmentRoutes)(ctx));
155
+ api.route('/questions', (0, assessments_js_1.createAssessmentRoutes)(ctx)); // Alias
156
+ // Curriculum management
157
+ api.route('/curriculum', (0, curriculum_js_1.createCurriculumRoutes)(ctx));
158
+ // Analytics
159
+ api.route('/analytics', (0, analytics_js_1.createAnalyticsRoutes)(ctx));
160
+ // Mount API routes at base path
161
+ app.route(basePath, api);
162
+ // ─────────────────────────────────────────────────────────────────────────
163
+ // Error Handling
164
+ // ─────────────────────────────────────────────────────────────────────────
165
+ app.onError((err, c) => {
166
+ console.error('API Error:', err);
167
+ // Handle known error types
168
+ if (err.message.includes('not found')) {
169
+ return c.json(error(exports.ErrorCodes.NOT_FOUND, err.message), 404);
170
+ }
171
+ if (err.message.includes('already exists')) {
172
+ return c.json(error(exports.ErrorCodes.CONFLICT, err.message), 409);
173
+ }
174
+ if (err.message.includes('validation') || err.message.includes('invalid')) {
175
+ return c.json(error(exports.ErrorCodes.VALIDATION_ERROR, err.message), 400);
176
+ }
177
+ // Generic internal error
178
+ return c.json(error(exports.ErrorCodes.INTERNAL_ERROR, 'An unexpected error occurred'), 500);
179
+ });
180
+ app.notFound((c) => {
181
+ return c.json(error(exports.ErrorCodes.NOT_FOUND, `Route not found: ${c.req.path}`), 404);
182
+ });
183
+ return app;
184
+ }
185
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/api/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * REST API Types
4
+ *
5
+ * Type definitions for the LearnGraph REST API.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}