learngraph 0.5.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 (235) 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 +35 -1
  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/types/assessment.js +46 -0
  74. package/dist/cjs/types/assessment.js.map +1 -0
  75. package/dist/cjs/types/bloom.js +12 -1
  76. package/dist/cjs/types/bloom.js.map +1 -1
  77. package/dist/cjs/types/index.js +7 -1
  78. package/dist/cjs/types/index.js.map +1 -1
  79. package/dist/esm/api/routes/analytics.js +285 -0
  80. package/dist/esm/api/routes/analytics.js.map +1 -0
  81. package/dist/esm/api/routes/assessments.js +266 -0
  82. package/dist/esm/api/routes/assessments.js.map +1 -0
  83. package/dist/esm/api/routes/curriculum.js +342 -0
  84. package/dist/esm/api/routes/curriculum.js.map +1 -0
  85. package/dist/esm/api/routes/edges.js +159 -0
  86. package/dist/esm/api/routes/edges.js.map +1 -0
  87. package/dist/esm/api/routes/explore.js +221 -0
  88. package/dist/esm/api/routes/explore.js.map +1 -0
  89. package/dist/esm/api/routes/learners.js +321 -0
  90. package/dist/esm/api/routes/learners.js.map +1 -0
  91. package/dist/esm/api/routes/me.js +401 -0
  92. package/dist/esm/api/routes/me.js.map +1 -0
  93. package/dist/esm/api/routes/skills.js +316 -0
  94. package/dist/esm/api/routes/skills.js.map +1 -0
  95. package/dist/esm/api/server.js +179 -0
  96. package/dist/esm/api/server.js.map +1 -0
  97. package/dist/esm/api/types.js +9 -0
  98. package/dist/esm/api/types.js.map +1 -0
  99. package/dist/esm/assessment/adaptive.js +384 -0
  100. package/dist/esm/assessment/adaptive.js.map +1 -0
  101. package/dist/esm/assessment/bkt.js +354 -0
  102. package/dist/esm/assessment/bkt.js.map +1 -0
  103. package/dist/esm/assessment/index.js +21 -0
  104. package/dist/esm/assessment/index.js.map +1 -0
  105. package/dist/esm/assessment/irt.js +406 -0
  106. package/dist/esm/assessment/irt.js.map +1 -0
  107. package/dist/esm/assessment/mastery-engine.js +406 -0
  108. package/dist/esm/assessment/mastery-engine.js.map +1 -0
  109. package/dist/esm/components/LearningPathView.js +316 -0
  110. package/dist/esm/components/LearningPathView.js.map +1 -0
  111. package/dist/esm/components/ProgressDashboard.js +304 -0
  112. package/dist/esm/components/ProgressDashboard.js.map +1 -0
  113. package/dist/esm/components/SkillCard.js +260 -0
  114. package/dist/esm/components/SkillCard.js.map +1 -0
  115. package/dist/esm/components/SkillExplorer.js +397 -0
  116. package/dist/esm/components/SkillExplorer.js.map +1 -0
  117. package/dist/esm/components/SkillGraph.js +398 -0
  118. package/dist/esm/components/SkillGraph.js.map +1 -0
  119. package/dist/esm/components/hooks.js +502 -0
  120. package/dist/esm/components/hooks.js.map +1 -0
  121. package/dist/esm/components/index.js +61 -0
  122. package/dist/esm/components/index.js.map +1 -0
  123. package/dist/esm/components/types.js +31 -0
  124. package/dist/esm/components/types.js.map +1 -0
  125. package/dist/esm/index.js +12 -0
  126. package/dist/esm/index.js.map +1 -1
  127. package/dist/esm/llm/adapters/anthropic.js +88 -2
  128. package/dist/esm/llm/adapters/anthropic.js.map +1 -1
  129. package/dist/esm/llm/adapters/gemini.js +98 -7
  130. package/dist/esm/llm/adapters/gemini.js.map +1 -1
  131. package/dist/esm/llm/adapters/index.js +15 -4
  132. package/dist/esm/llm/adapters/index.js.map +1 -1
  133. package/dist/esm/llm/adapters/ollama.js +117 -2
  134. package/dist/esm/llm/adapters/ollama.js.map +1 -1
  135. package/dist/esm/llm/adapters/openai.js +105 -1
  136. package/dist/esm/llm/adapters/openai.js.map +1 -1
  137. package/dist/esm/mcp/cli.js +267 -0
  138. package/dist/esm/mcp/cli.js.map +1 -0
  139. package/dist/esm/mcp/index.js +39 -0
  140. package/dist/esm/mcp/index.js.map +1 -0
  141. package/dist/esm/mcp/prompts.js +419 -0
  142. package/dist/esm/mcp/prompts.js.map +1 -0
  143. package/dist/esm/mcp/resources.js +359 -0
  144. package/dist/esm/mcp/resources.js.map +1 -0
  145. package/dist/esm/mcp/server.js +372 -0
  146. package/dist/esm/mcp/server.js.map +1 -0
  147. package/dist/esm/mcp/tools.js +598 -0
  148. package/dist/esm/mcp/tools.js.map +1 -0
  149. package/dist/esm/mcp/types.js +9 -0
  150. package/dist/esm/mcp/types.js.map +1 -0
  151. package/dist/esm/types/assessment.js +40 -0
  152. package/dist/esm/types/assessment.js.map +1 -0
  153. package/dist/esm/types/bloom.js +11 -0
  154. package/dist/esm/types/bloom.js.map +1 -1
  155. package/dist/esm/types/index.js +2 -1
  156. package/dist/esm/types/index.js.map +1 -1
  157. package/dist/types/api/routes/analytics.d.ts +14 -0
  158. package/dist/types/api/routes/analytics.d.ts.map +1 -0
  159. package/dist/types/api/routes/assessments.d.ts +14 -0
  160. package/dist/types/api/routes/assessments.d.ts.map +1 -0
  161. package/dist/types/api/routes/curriculum.d.ts +14 -0
  162. package/dist/types/api/routes/curriculum.d.ts.map +1 -0
  163. package/dist/types/api/routes/edges.d.ts +14 -0
  164. package/dist/types/api/routes/edges.d.ts.map +1 -0
  165. package/dist/types/api/routes/explore.d.ts +14 -0
  166. package/dist/types/api/routes/explore.d.ts.map +1 -0
  167. package/dist/types/api/routes/learners.d.ts +14 -0
  168. package/dist/types/api/routes/learners.d.ts.map +1 -0
  169. package/dist/types/api/routes/me.d.ts +14 -0
  170. package/dist/types/api/routes/me.d.ts.map +1 -0
  171. package/dist/types/api/routes/skills.d.ts +14 -0
  172. package/dist/types/api/routes/skills.d.ts.map +1 -0
  173. package/dist/types/api/server.d.ts +147 -0
  174. package/dist/types/api/server.d.ts.map +1 -0
  175. package/dist/types/api/types.d.ts +443 -0
  176. package/dist/types/api/types.d.ts.map +1 -0
  177. package/dist/types/assessment/adaptive.d.ts +155 -0
  178. package/dist/types/assessment/adaptive.d.ts.map +1 -0
  179. package/dist/types/assessment/bkt.d.ts +185 -0
  180. package/dist/types/assessment/bkt.d.ts.map +1 -0
  181. package/dist/types/assessment/index.d.ts +18 -0
  182. package/dist/types/assessment/index.d.ts.map +1 -0
  183. package/dist/types/assessment/irt.d.ts +159 -0
  184. package/dist/types/assessment/irt.d.ts.map +1 -0
  185. package/dist/types/assessment/mastery-engine.d.ts +178 -0
  186. package/dist/types/assessment/mastery-engine.d.ts.map +1 -0
  187. package/dist/types/components/LearningPathView.d.ts +40 -0
  188. package/dist/types/components/LearningPathView.d.ts.map +1 -0
  189. package/dist/types/components/ProgressDashboard.d.ts +49 -0
  190. package/dist/types/components/ProgressDashboard.d.ts.map +1 -0
  191. package/dist/types/components/SkillCard.d.ts +34 -0
  192. package/dist/types/components/SkillCard.d.ts.map +1 -0
  193. package/dist/types/components/SkillExplorer.d.ts +39 -0
  194. package/dist/types/components/SkillExplorer.d.ts.map +1 -0
  195. package/dist/types/components/SkillGraph.d.ts +38 -0
  196. package/dist/types/components/SkillGraph.d.ts.map +1 -0
  197. package/dist/types/components/hooks.d.ts +187 -0
  198. package/dist/types/components/hooks.d.ts.map +1 -0
  199. package/dist/types/components/index.d.ts +59 -0
  200. package/dist/types/components/index.d.ts.map +1 -0
  201. package/dist/types/components/types.d.ts +410 -0
  202. package/dist/types/components/types.d.ts.map +1 -0
  203. package/dist/types/index.d.ts +1 -0
  204. package/dist/types/index.d.ts.map +1 -1
  205. package/dist/types/llm/adapters/anthropic.d.ts +84 -1
  206. package/dist/types/llm/adapters/anthropic.d.ts.map +1 -1
  207. package/dist/types/llm/adapters/gemini.d.ts +93 -6
  208. package/dist/types/llm/adapters/gemini.d.ts.map +1 -1
  209. package/dist/types/llm/adapters/index.d.ts +13 -4
  210. package/dist/types/llm/adapters/index.d.ts.map +1 -1
  211. package/dist/types/llm/adapters/ollama.d.ts +126 -1
  212. package/dist/types/llm/adapters/ollama.d.ts.map +1 -1
  213. package/dist/types/llm/adapters/openai.d.ts +104 -1
  214. package/dist/types/llm/adapters/openai.d.ts.map +1 -1
  215. package/dist/types/mcp/cli.d.ts +15 -0
  216. package/dist/types/mcp/cli.d.ts.map +1 -0
  217. package/dist/types/mcp/index.d.ts +32 -0
  218. package/dist/types/mcp/index.d.ts.map +1 -0
  219. package/dist/types/mcp/prompts.d.ts +27 -0
  220. package/dist/types/mcp/prompts.d.ts.map +1 -0
  221. package/dist/types/mcp/resources.d.ts +59 -0
  222. package/dist/types/mcp/resources.d.ts.map +1 -0
  223. package/dist/types/mcp/server.d.ts +136 -0
  224. package/dist/types/mcp/server.d.ts.map +1 -0
  225. package/dist/types/mcp/tools.d.ts +344 -0
  226. package/dist/types/mcp/tools.d.ts.map +1 -0
  227. package/dist/types/mcp/types.d.ts +137 -0
  228. package/dist/types/mcp/types.d.ts.map +1 -0
  229. package/dist/types/types/assessment.d.ts +512 -0
  230. package/dist/types/types/assessment.d.ts.map +1 -0
  231. package/dist/types/types/bloom.d.ts +4 -0
  232. package/dist/types/types/bloom.d.ts.map +1 -1
  233. package/dist/types/types/index.d.ts +3 -1
  234. package/dist/types/types/index.d.ts.map +1 -1
  235. package/package.json +48 -3
@@ -0,0 +1,512 @@
1
+ /**
2
+ * Assessment Types
3
+ *
4
+ * Comprehensive type definitions for the assessment framework including:
5
+ * - Question types (multiple choice, free response, etc.)
6
+ * - Assessment structures
7
+ * - Item Response Theory (IRT) parameters
8
+ * - Bayesian Knowledge Tracing (BKT) parameters
9
+ * - Evidence of learning
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import type { SkillId } from './skill.js';
14
+ import type { BloomLevel } from './bloom.js';
15
+ /**
16
+ * Unique identifier for a question/item
17
+ */
18
+ export type QuestionId = string & {
19
+ readonly __brand: 'QuestionId';
20
+ };
21
+ /**
22
+ * Create a typed QuestionId from a string
23
+ */
24
+ export declare function createQuestionId(id: string): QuestionId;
25
+ /**
26
+ * Supported question formats
27
+ */
28
+ export type QuestionType = 'multiple-choice' | 'multiple-select' | 'true-false' | 'free-response' | 'numeric' | 'ordering' | 'matching' | 'fill-blank' | 'code' | 'diagram';
29
+ /**
30
+ * Answer option for choice-based questions
31
+ */
32
+ export interface AnswerOption {
33
+ /** Unique identifier for this option */
34
+ id: string;
35
+ /** Display text for the option */
36
+ text: string;
37
+ /** Whether this is a correct answer */
38
+ isCorrect: boolean;
39
+ /** Explanation for why this option is correct/incorrect (shown after response) */
40
+ explanation?: string;
41
+ /** Partial credit weight (0-1) for partially correct answers */
42
+ partialCredit?: number;
43
+ }
44
+ /**
45
+ * Matching pair for matching questions
46
+ */
47
+ export interface MatchingPair {
48
+ /** Left side item */
49
+ prompt: string;
50
+ /** Right side item (correct match) */
51
+ response: string;
52
+ /** Optional ID for the pair */
53
+ id?: string;
54
+ }
55
+ /**
56
+ * Question/Item definition
57
+ */
58
+ export interface Question {
59
+ /** Unique identifier */
60
+ id: QuestionId;
61
+ /** Question type */
62
+ type: QuestionType;
63
+ /** Question prompt/stem */
64
+ prompt: string;
65
+ /** Skill(s) this question assesses */
66
+ skillIds: SkillId[];
67
+ /** Bloom's taxonomy level */
68
+ bloomLevel: BloomLevel;
69
+ /** Answer options (for choice-based questions) */
70
+ options?: AnswerOption[];
71
+ /** Correct answer for non-choice questions */
72
+ correctAnswer?: string | number | string[];
73
+ /** Matching pairs (for matching questions) */
74
+ matchingPairs?: MatchingPair[];
75
+ /** Tolerance for numeric answers (e.g., 0.01 for 1% tolerance) */
76
+ numericTolerance?: number;
77
+ /** Hint text (optional scaffolding) */
78
+ hint?: string;
79
+ /** Detailed explanation shown after response */
80
+ explanation?: string;
81
+ /** Tags for categorization */
82
+ tags: string[];
83
+ /** Additional metadata */
84
+ metadata: Record<string, unknown>;
85
+ /** IRT parameters (if calibrated) */
86
+ irtParams?: IRTParameters;
87
+ /** Estimated time to answer (minutes) */
88
+ estimatedMinutes?: number;
89
+ /** Creation timestamp */
90
+ createdAt: string;
91
+ /** Last update timestamp */
92
+ updatedAt: string;
93
+ }
94
+ /**
95
+ * Input for creating a new question
96
+ */
97
+ export type QuestionInput = Omit<Question, 'id' | 'createdAt' | 'updatedAt'>;
98
+ /**
99
+ * Unique identifier for an assessment
100
+ */
101
+ export type AssessmentId = string & {
102
+ readonly __brand: 'AssessmentId';
103
+ };
104
+ /**
105
+ * Create a typed AssessmentId from a string
106
+ */
107
+ export declare function createAssessmentId(id: string): AssessmentId;
108
+ /**
109
+ * Assessment type/purpose
110
+ */
111
+ export type AssessmentType = 'diagnostic' | 'formative' | 'summative' | 'practice' | 'placement' | 'review';
112
+ /**
113
+ * Question selection strategy for adaptive assessments
114
+ */
115
+ export type SelectionStrategy = 'sequential' | 'random' | 'adaptive-irt' | 'adaptive-mastery' | 'zpd-focused';
116
+ /**
117
+ * Termination criterion for adaptive assessments
118
+ */
119
+ export interface TerminationCriteria {
120
+ /** Maximum number of questions */
121
+ maxQuestions?: number;
122
+ /** Minimum number of questions before early termination */
123
+ minQuestions?: number;
124
+ /** Target precision (standard error) for ability estimate */
125
+ targetPrecision?: number;
126
+ /** Maximum time in minutes */
127
+ maxTimeMinutes?: number;
128
+ /** Mastery threshold to achieve */
129
+ masteryThreshold?: number;
130
+ }
131
+ /**
132
+ * Assessment configuration
133
+ */
134
+ export interface Assessment {
135
+ /** Unique identifier */
136
+ id: AssessmentId;
137
+ /** Assessment name */
138
+ name: string;
139
+ /** Assessment description */
140
+ description?: string;
141
+ /** Assessment type/purpose */
142
+ type: AssessmentType;
143
+ /** Skills being assessed */
144
+ skillIds: SkillId[];
145
+ /** Question pool */
146
+ questions: QuestionId[];
147
+ /** Question selection strategy */
148
+ selectionStrategy: SelectionStrategy;
149
+ /** Termination criteria */
150
+ terminationCriteria: TerminationCriteria;
151
+ /** Whether to show feedback after each question */
152
+ immediateFeedback: boolean;
153
+ /** Whether to allow review/changing answers */
154
+ allowReview: boolean;
155
+ /** Time limit in minutes (null for untimed) */
156
+ timeLimitMinutes: number | null;
157
+ /** Shuffle question order */
158
+ shuffleQuestions: boolean;
159
+ /** Shuffle answer options */
160
+ shuffleOptions: boolean;
161
+ /** Passing score (0-1) */
162
+ passingScore?: number;
163
+ /** Tags for categorization */
164
+ tags: string[];
165
+ /** Additional metadata */
166
+ metadata: Record<string, unknown>;
167
+ /** Creation timestamp */
168
+ createdAt: string;
169
+ /** Last update timestamp */
170
+ updatedAt: string;
171
+ }
172
+ /**
173
+ * Input for creating a new assessment
174
+ */
175
+ export type AssessmentInput = Omit<Assessment, 'id' | 'createdAt' | 'updatedAt'>;
176
+ /**
177
+ * Unique identifier for a response
178
+ */
179
+ export type ResponseId = string & {
180
+ readonly __brand: 'ResponseId';
181
+ };
182
+ /**
183
+ * Create a typed ResponseId from a string
184
+ */
185
+ export declare function createResponseId(id: string): ResponseId;
186
+ /**
187
+ * Learner's response to a question
188
+ */
189
+ export interface LearnerResponse {
190
+ /** Unique identifier */
191
+ id: ResponseId;
192
+ /** Question being answered */
193
+ questionId: QuestionId;
194
+ /** Assessment context (if part of an assessment) */
195
+ assessmentId?: AssessmentId;
196
+ /** Learner's answer */
197
+ answer: string | number | string[] | null;
198
+ /** Whether the response was correct */
199
+ isCorrect: boolean;
200
+ /** Partial credit score (0-1) */
201
+ score: number;
202
+ /** Response time in milliseconds */
203
+ responseTimeMs: number;
204
+ /** Number of attempts on this question in this session */
205
+ attemptNumber: number;
206
+ /** Whether a hint was used */
207
+ usedHint: boolean;
208
+ /** Confidence rating if provided by learner (1-5) */
209
+ confidence?: number;
210
+ /** Timestamp of response */
211
+ timestamp: string;
212
+ /** Session identifier */
213
+ sessionId?: string;
214
+ }
215
+ /**
216
+ * Assessment session (learner taking an assessment)
217
+ */
218
+ export interface AssessmentSession {
219
+ /** Session identifier */
220
+ id: string;
221
+ /** Assessment being taken */
222
+ assessmentId: AssessmentId;
223
+ /** Learner identifier */
224
+ learnerId: string;
225
+ /** Session status */
226
+ status: 'in-progress' | 'completed' | 'abandoned' | 'timed-out';
227
+ /** Questions presented in order */
228
+ questionsPresented: QuestionId[];
229
+ /** All responses in order */
230
+ responses: LearnerResponse[];
231
+ /** Current ability estimate (IRT theta) */
232
+ abilityEstimate?: number;
233
+ /** Standard error of ability estimate */
234
+ abilityStandardError?: number;
235
+ /** Mastery estimates per skill */
236
+ masteryEstimates: Map<SkillId, number>;
237
+ /** Start timestamp */
238
+ startedAt: string;
239
+ /** Completion timestamp */
240
+ completedAt?: string;
241
+ /** Total time spent (milliseconds) */
242
+ totalTimeMs: number;
243
+ /** Final score (0-1) */
244
+ finalScore?: number;
245
+ /** Whether passed */
246
+ passed?: boolean;
247
+ }
248
+ /**
249
+ * IRT model type
250
+ */
251
+ export type IRTModel = '1PL' | '2PL' | '3PL';
252
+ /**
253
+ * IRT item parameters
254
+ */
255
+ export interface IRTParameters {
256
+ /** Item difficulty (b parameter, typically -3 to +3) */
257
+ difficulty: number;
258
+ /** Item discrimination (a parameter, typically 0.5 to 2.5) */
259
+ discrimination?: number;
260
+ /** Pseudo-guessing parameter (c parameter, 0 to 0.5) */
261
+ guessing?: number;
262
+ /** Model used for calibration */
263
+ model: IRTModel;
264
+ /** Standard error of parameter estimates */
265
+ standardErrors?: {
266
+ difficulty?: number;
267
+ discrimination?: number;
268
+ guessing?: number;
269
+ };
270
+ }
271
+ /**
272
+ * IRT ability estimate for a learner
273
+ */
274
+ export interface IRTAbilityEstimate {
275
+ /** Ability estimate (theta, typically -3 to +3) */
276
+ theta: number;
277
+ /** Standard error of estimate */
278
+ standardError: number;
279
+ /** Number of items used in estimation */
280
+ itemCount: number;
281
+ /** Estimation method used */
282
+ method: 'MLE' | 'EAP' | 'MAP';
283
+ /** Confidence interval (95%) */
284
+ confidenceInterval: {
285
+ lower: number;
286
+ upper: number;
287
+ };
288
+ }
289
+ /**
290
+ * IRT configuration options
291
+ */
292
+ export interface IRTConfig {
293
+ /** IRT model to use */
294
+ model?: IRTModel;
295
+ /** Prior distribution for ability (for Bayesian methods) */
296
+ abilityPrior?: {
297
+ mean: number;
298
+ sd: number;
299
+ };
300
+ /** Maximum iterations for estimation */
301
+ maxIterations?: number;
302
+ /** Convergence threshold */
303
+ convergenceThreshold?: number;
304
+ }
305
+ /**
306
+ * BKT parameters for a skill
307
+ */
308
+ export interface BKTParameters {
309
+ /** Prior probability of mastery (P(L₀)) */
310
+ pInit: number;
311
+ /** Probability of learning per opportunity (P(T)) */
312
+ pLearn: number;
313
+ /** Probability of slip (wrong despite mastery) (P(S)) */
314
+ pSlip: number;
315
+ /** Probability of guess (correct despite no mastery) (P(G)) */
316
+ pGuess: number;
317
+ }
318
+ /**
319
+ * Default BKT parameters (empirically derived)
320
+ */
321
+ export declare const BKT_DEFAULTS: BKTParameters;
322
+ /**
323
+ * BKT state for a skill
324
+ */
325
+ export interface BKTState {
326
+ /** Skill being tracked */
327
+ skillId: SkillId;
328
+ /** Current mastery probability P(Lₙ) */
329
+ pMastery: number;
330
+ /** Number of observations */
331
+ observations: number;
332
+ /** History of responses (for debugging/analysis) */
333
+ history?: boolean[];
334
+ }
335
+ /**
336
+ * BKT configuration options
337
+ */
338
+ export interface BKTConfig {
339
+ /** Mastery threshold for declaring skill "learned" */
340
+ masteryThreshold?: number;
341
+ /** Whether to use individualized parameters */
342
+ individualizedParams?: boolean;
343
+ /** Whether to track response history */
344
+ trackHistory?: boolean;
345
+ }
346
+ /**
347
+ * Evidence source type
348
+ */
349
+ export type EvidenceSource = 'assessment' | 'practice' | 'observation' | 'self-report' | 'project' | 'portfolio' | 'peer-review' | 'automated';
350
+ /**
351
+ * Evidence of learning
352
+ */
353
+ export interface LearningEvidence {
354
+ /** Evidence identifier */
355
+ id: string;
356
+ /** Skill demonstrated */
357
+ skillId: SkillId;
358
+ /** Evidence source */
359
+ source: EvidenceSource;
360
+ /** Demonstrated mastery level (0-1) */
361
+ masteryLevel: number;
362
+ /** Bloom's level demonstrated */
363
+ bloomLevel: BloomLevel;
364
+ /** Confidence in this evidence (0-1) */
365
+ confidence: number;
366
+ /** Timestamp of evidence */
367
+ timestamp: string;
368
+ /** Description of evidence */
369
+ description?: string;
370
+ /** Link to artifact (if applicable) */
371
+ artifactUrl?: string;
372
+ /** Related responses (if from assessment) */
373
+ responseIds?: ResponseId[];
374
+ /** Evaluator (for observation/peer evidence) */
375
+ evaluator?: string;
376
+ /** Additional metadata */
377
+ metadata: Record<string, unknown>;
378
+ }
379
+ /**
380
+ * Aggregated evidence summary for a skill
381
+ */
382
+ export interface EvidenceSummary {
383
+ /** Skill being summarized */
384
+ skillId: SkillId;
385
+ /** Number of evidence items */
386
+ evidenceCount: number;
387
+ /** Weighted average mastery */
388
+ averageMastery: number;
389
+ /** Most recent evidence */
390
+ latestEvidence: LearningEvidence;
391
+ /** Evidence by source type */
392
+ bySource: Partial<Record<EvidenceSource, number>>;
393
+ /** Trend direction */
394
+ trend: 'improving' | 'stable' | 'declining';
395
+ /** Confidence in the summary */
396
+ confidence: number;
397
+ }
398
+ /**
399
+ * Item selection result from adaptive algorithm
400
+ */
401
+ export interface ItemSelection {
402
+ /** Selected question ID */
403
+ questionId: QuestionId;
404
+ /** Information value of the selected item */
405
+ information: number;
406
+ /** Reason for selection */
407
+ reason: string;
408
+ /** Alternative candidates considered */
409
+ alternatives?: QuestionId[];
410
+ }
411
+ /**
412
+ * Adaptive assessment state
413
+ */
414
+ export interface AdaptiveState {
415
+ /** Current ability estimate */
416
+ abilityEstimate: number;
417
+ /** Standard error */
418
+ standardError: number;
419
+ /** Items already administered */
420
+ administeredItems: QuestionId[];
421
+ /** Current content coverage */
422
+ contentCoverage: Map<SkillId, number>;
423
+ /** Termination status */
424
+ shouldTerminate: boolean;
425
+ /** Reason for termination (if applicable) */
426
+ terminationReason?: string;
427
+ }
428
+ /**
429
+ * Adaptive algorithm configuration
430
+ */
431
+ export interface AdaptiveConfig {
432
+ /** Item selection method */
433
+ selectionMethod: 'MFI' | 'KL' | 'EBI' | 'MEPV';
434
+ /** Content balancing constraints */
435
+ contentBalancing?: {
436
+ skillId: SkillId;
437
+ minItems?: number;
438
+ maxItems?: number;
439
+ }[];
440
+ /** Exposure control (0-1) */
441
+ maxExposureRate?: number;
442
+ /** Item overlap control for retests */
443
+ preventOverlap?: boolean;
444
+ }
445
+ /**
446
+ * Detailed assessment results
447
+ */
448
+ export interface AssessmentResult {
449
+ /** Session that produced this result */
450
+ sessionId: string;
451
+ /** Assessment taken */
452
+ assessmentId: AssessmentId;
453
+ /** Final score (0-1) */
454
+ score: number;
455
+ /** Whether passed */
456
+ passed: boolean;
457
+ /** Ability estimate (IRT) */
458
+ abilityEstimate?: IRTAbilityEstimate;
459
+ /** Mastery per skill */
460
+ masteryBySkill: Map<SkillId, number>;
461
+ /** Performance by Bloom's level */
462
+ performanceByBloom: Record<BloomLevel, {
463
+ correct: number;
464
+ total: number;
465
+ percentage: number;
466
+ }>;
467
+ /** Strengths identified */
468
+ strengths: SkillId[];
469
+ /** Areas for improvement */
470
+ areasForImprovement: SkillId[];
471
+ /** Recommended next skills */
472
+ recommendedSkills: SkillId[];
473
+ /** Summary statistics */
474
+ stats: {
475
+ totalQuestions: number;
476
+ correctAnswers: number;
477
+ averageResponseTime: number;
478
+ totalTimeMinutes: number;
479
+ hintsUsed: number;
480
+ };
481
+ }
482
+ /**
483
+ * Difficulty adjustment based on response
484
+ */
485
+ export interface DifficultyAdjustment {
486
+ /** Current difficulty level (0-1) */
487
+ currentDifficulty: number;
488
+ /** Recommended adjustment (-1 to +1) */
489
+ adjustment: number;
490
+ /** New recommended difficulty */
491
+ newDifficulty: number;
492
+ /** Reason for adjustment */
493
+ reason: string;
494
+ }
495
+ /**
496
+ * Validation result for assessment
497
+ */
498
+ export interface AssessmentValidation {
499
+ /** Whether the assessment is valid */
500
+ isValid: boolean;
501
+ /** Validation errors */
502
+ errors: string[];
503
+ /** Validation warnings */
504
+ warnings: string[];
505
+ /** Coverage analysis */
506
+ coverage: {
507
+ skillsCovered: number;
508
+ skillsMissing: SkillId[];
509
+ bloomLevelsCovered: BloomLevel[];
510
+ };
511
+ }
512
+ //# sourceMappingURL=assessment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assessment.d.ts","sourceRoot":"","sources":["../../../src/types/assessment.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@
7
7
  * @see https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/
8
8
  */
9
9
  export type BloomLevel = 'remember' | 'understand' | 'apply' | 'analyze' | 'evaluate' | 'create';
10
+ /**
11
+ * All Bloom's levels as an ordered array
12
+ */
13
+ export declare const BLOOM_LEVELS: readonly BloomLevel[];
10
14
  /**
11
15
  * Numeric mapping for Bloom's levels (1-6 scale)
12
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"bloom.d.ts","sourceRoot":"","sources":["../../../src/types/bloom.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,YAAY,GACZ,OAAO,GACP,SAAS,GACT,UAAU,GACV,QAAQ,CAAC;AAEb;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAO/C,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CA8GpD,CAAC;AAEX;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA4BhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAEnF"}
1
+ {"version":3,"file":"bloom.d.ts","sourceRoot":"","sources":["../../../src/types/bloom.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,YAAY,GACZ,OAAO,GACP,SAAS,GACT,UAAU,GACV,QAAQ,CAAC;AAEb;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAOpC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAO/C,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CA8GpD,CAAC;AAEX;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA4BhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAEnF"}
@@ -4,7 +4,7 @@
4
4
  * @packageDocumentation
5
5
  */
6
6
  export type { BloomLevel } from './bloom.js';
7
- export { BLOOM_LEVEL_ORDER, BLOOM_VERBS, detectBloomLevel, compareBloomLevels, meetsBloomThreshold, } from './bloom.js';
7
+ export { BLOOM_LEVELS, BLOOM_LEVEL_ORDER, BLOOM_VERBS, detectBloomLevel, compareBloomLevels, meetsBloomThreshold, } from './bloom.js';
8
8
  export type { SkillId, SkillNode, SkillNodeInput, SkillNodeUpdate } from './skill.js';
9
9
  export { createSkillId, SKILL_DEFAULTS, THRESHOLD_CONCEPT_MASTERY, isValidDifficulty, isValidMasteryThreshold, } from './skill.js';
10
10
  export type { EdgeId, EdgeType, PrerequisiteEdge, PrerequisiteEdgeInput } from './edge.js';
@@ -17,4 +17,6 @@ export type { QueryOperator, QueryFilter, QuerySort, QueryPagination, SkillQuery
17
17
  export type { StorageBackend, StorageConfigBase, Neo4jConfig, LevelGraphConfig, MemoryConfig, StorageConfig, ConnectionStatus, ImportResult, GraphStorage, StorageFactory, } from './storage.js';
18
18
  export type { ParseFormat, DocumentMetadata, LearningObjective, Topic, Module, ParseResult, ParseWarning, ParseStats, ExtractedSkill, SkillExtractionResult, ParseOptions, ExtractionOptions, Parser, SkillExtractor, } from './parser.js';
19
19
  export type { LLMProvider, LLMConfig, OpenAIConfig, AnthropicConfig, OllamaConfig, MessageRole, ChatMessage, CompletionRequest, CompletionResponse, SkillExtractionRequest, ExtractedSkillLLM, SkillExtractionResponse, PrerequisiteInferenceRequest, InferredPrerequisite, PrerequisiteInferenceResponse, BloomAnalysisRequest, BloomAnalysisResponse, DecompositionRequest, DecompositionResponse, LLMAdapter, LLMOrchestrator, } from './llm.js';
20
+ export type { QuestionId, QuestionType, AnswerOption, MatchingPair, Question, QuestionInput, AssessmentId, AssessmentType, SelectionStrategy, TerminationCriteria, Assessment, AssessmentInput, ResponseId, LearnerResponse, AssessmentSession, IRTModel, IRTParameters, IRTAbilityEstimate, IRTConfig, BKTParameters, BKTState, BKTConfig, EvidenceSource, LearningEvidence, EvidenceSummary, ItemSelection, AdaptiveState, AdaptiveConfig, AssessmentResult, DifficultyAdjustment, AssessmentValidation, } from './assessment.js';
21
+ export { createQuestionId, createAssessmentId, createResponseId, BKT_DEFAULTS, } from './assessment.js';
20
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,aAAa,EACb,cAAc,EACd,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AAKnB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1E,YAAY,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AAKpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,cAAc,CAAC;AAKtB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,cAAc,GACf,MAAM,aAAa,CAAC;AAKrB,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,6BAA6B,EAC7B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,EACV,eAAe,GAChB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,aAAa,EACb,cAAc,EACd,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AAKnB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1E,YAAY,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AAKpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,cAAc,CAAC;AAKtB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,cAAc,GACf,MAAM,aAAa,CAAC;AAKrB,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,6BAA6B,EAC7B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,EACV,eAAe,GAChB,MAAM,UAAU,CAAC;AAKlB,YAAY,EAEV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,aAAa,EAEb,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,eAAe,EAEf,UAAU,EACV,eAAe,EACf,iBAAiB,EAEjB,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,SAAS,EAET,aAAa,EACb,QAAQ,EACR,SAAS,EAET,cAAc,EACd,gBAAgB,EAChB,eAAe,EAEf,aAAa,EACb,aAAa,EACb,cAAc,EAEd,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learngraph",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "The world's first AI-powered learning path generator. Transform syllabi into personalized mastery paths with Zone of Proximal Development (ZPD), Bloom's Taxonomy, spaced repetition, and Bayesian Knowledge Tracing built in. Every student's path to mastery.",
5
5
  "author": "Dr. Ernesto Lee <dr.ernesto.lee@gmail.com>",
6
6
  "license": "Apache-2.0",
@@ -123,6 +123,26 @@
123
123
  "types": "./dist/types/education/index.d.ts",
124
124
  "default": "./dist/cjs/education/index.js"
125
125
  }
126
+ },
127
+ "./mcp": {
128
+ "import": {
129
+ "types": "./dist/types/mcp/index.d.ts",
130
+ "default": "./dist/esm/mcp/index.js"
131
+ },
132
+ "require": {
133
+ "types": "./dist/types/mcp/index.d.ts",
134
+ "default": "./dist/cjs/mcp/index.js"
135
+ }
136
+ },
137
+ "./components": {
138
+ "import": {
139
+ "types": "./dist/types/components/index.d.ts",
140
+ "default": "./dist/esm/components/index.js"
141
+ },
142
+ "require": {
143
+ "types": "./dist/types/components/index.d.ts",
144
+ "default": "./dist/cjs/components/index.js"
145
+ }
126
146
  }
127
147
  },
128
148
  "files": [
@@ -146,22 +166,32 @@
146
166
  "clean": "rm -rf dist coverage"
147
167
  },
148
168
  "dependencies": {
169
+ "hono": "^4.11.1",
149
170
  "zod": "^3.23.0"
150
171
  },
151
172
  "devDependencies": {
152
173
  "@types/node": "^20.0.0",
174
+ "@types/react": "^18.3.27",
175
+ "@types/react-dom": "^18.3.7",
153
176
  "@typescript-eslint/eslint-plugin": "^7.0.0",
154
177
  "@typescript-eslint/parser": "^7.0.0",
155
178
  "@vitest/coverage-v8": "^1.6.0",
156
179
  "eslint": "^8.57.0",
180
+ "react": "^19.2.3",
181
+ "react-dom": "^19.2.3",
182
+ "reactflow": "^11.11.4",
157
183
  "typescript": "^5.4.0",
158
184
  "vitest": "^1.6.0"
159
185
  },
160
186
  "peerDependencies": {
161
- "neo4j-driver": "^5.0.0",
187
+ "@mediapipe/tasks-genai": "^0.10.0",
188
+ "@modelcontextprotocol/sdk": "^1.25.1",
162
189
  "level": "^8.0.0",
163
190
  "levelgraph": "^3.0.0",
164
- "@mediapipe/tasks-genai": "^0.10.0"
191
+ "neo4j-driver": "^5.0.0",
192
+ "react": "^18.0.0",
193
+ "react-dom": "^18.0.0",
194
+ "reactflow": "^11.0.0"
165
195
  },
166
196
  "peerDependenciesMeta": {
167
197
  "neo4j-driver": {
@@ -175,6 +205,21 @@
175
205
  },
176
206
  "@mediapipe/tasks-genai": {
177
207
  "optional": true
208
+ },
209
+ "@modelcontextprotocol/sdk": {
210
+ "optional": true
211
+ },
212
+ "react": {
213
+ "optional": true
214
+ },
215
+ "react-dom": {
216
+ "optional": true
217
+ },
218
+ "reactflow": {
219
+ "optional": true
178
220
  }
221
+ },
222
+ "bin": {
223
+ "learngraph-mcp": "./dist/esm/mcp/cli.js"
179
224
  }
180
225
  }