@contractspec/module.learning-journey 1.44.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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/dist/contracts/index.d.ts +5 -0
  4. package/dist/contracts/index.js +6 -0
  5. package/dist/contracts/models.d.ts +451 -0
  6. package/dist/contracts/models.d.ts.map +1 -0
  7. package/dist/contracts/models.js +388 -0
  8. package/dist/contracts/models.js.map +1 -0
  9. package/dist/contracts/onboarding.d.ts +666 -0
  10. package/dist/contracts/onboarding.d.ts.map +1 -0
  11. package/dist/contracts/onboarding.js +402 -0
  12. package/dist/contracts/onboarding.js.map +1 -0
  13. package/dist/contracts/operations.d.ts +280 -0
  14. package/dist/contracts/operations.d.ts.map +1 -0
  15. package/dist/contracts/operations.js +151 -0
  16. package/dist/contracts/operations.js.map +1 -0
  17. package/dist/contracts/shared.d.ts +5 -0
  18. package/dist/contracts/shared.d.ts.map +1 -0
  19. package/dist/contracts/shared.js +6 -0
  20. package/dist/contracts/shared.js.map +1 -0
  21. package/dist/docs/index.d.ts +1 -0
  22. package/dist/docs/index.js +1 -0
  23. package/dist/docs/learning-journey.docblock.d.ts +1 -0
  24. package/dist/docs/learning-journey.docblock.js +136 -0
  25. package/dist/docs/learning-journey.docblock.js.map +1 -0
  26. package/dist/engines/index.d.ts +4 -0
  27. package/dist/engines/index.js +5 -0
  28. package/dist/engines/srs.d.ts +111 -0
  29. package/dist/engines/srs.d.ts.map +1 -0
  30. package/dist/engines/srs.js +219 -0
  31. package/dist/engines/srs.js.map +1 -0
  32. package/dist/engines/streak.d.ts +100 -0
  33. package/dist/engines/streak.d.ts.map +1 -0
  34. package/dist/engines/streak.js +194 -0
  35. package/dist/engines/streak.js.map +1 -0
  36. package/dist/engines/xp.d.ts +97 -0
  37. package/dist/engines/xp.d.ts.map +1 -0
  38. package/dist/engines/xp.js +213 -0
  39. package/dist/engines/xp.js.map +1 -0
  40. package/dist/entities/ai.d.ts +232 -0
  41. package/dist/entities/ai.d.ts.map +1 -0
  42. package/dist/entities/ai.js +376 -0
  43. package/dist/entities/ai.js.map +1 -0
  44. package/dist/entities/course.d.ts +184 -0
  45. package/dist/entities/course.d.ts.map +1 -0
  46. package/dist/entities/course.js +316 -0
  47. package/dist/entities/course.js.map +1 -0
  48. package/dist/entities/flashcard.d.ts +170 -0
  49. package/dist/entities/flashcard.d.ts.map +1 -0
  50. package/dist/entities/flashcard.js +249 -0
  51. package/dist/entities/flashcard.js.map +1 -0
  52. package/dist/entities/gamification.d.ts +238 -0
  53. package/dist/entities/gamification.d.ts.map +1 -0
  54. package/dist/entities/gamification.js +392 -0
  55. package/dist/entities/gamification.js.map +1 -0
  56. package/dist/entities/index.d.ts +629 -0
  57. package/dist/entities/index.d.ts.map +1 -0
  58. package/dist/entities/index.js +45 -0
  59. package/dist/entities/index.js.map +1 -0
  60. package/dist/entities/learner.d.ts +224 -0
  61. package/dist/entities/learner.d.ts.map +1 -0
  62. package/dist/entities/learner.js +365 -0
  63. package/dist/entities/learner.js.map +1 -0
  64. package/dist/entities/onboarding.d.ts +190 -0
  65. package/dist/entities/onboarding.d.ts.map +1 -0
  66. package/dist/entities/onboarding.js +307 -0
  67. package/dist/entities/onboarding.js.map +1 -0
  68. package/dist/entities/quiz.d.ts +220 -0
  69. package/dist/entities/quiz.d.ts.map +1 -0
  70. package/dist/entities/quiz.js +370 -0
  71. package/dist/entities/quiz.js.map +1 -0
  72. package/dist/events.d.ts +796 -0
  73. package/dist/events.d.ts.map +1 -0
  74. package/dist/events.js +690 -0
  75. package/dist/events.js.map +1 -0
  76. package/dist/index.d.ts +20 -0
  77. package/dist/index.js +22 -0
  78. package/dist/learning-journey.feature.d.ts +12 -0
  79. package/dist/learning-journey.feature.d.ts.map +1 -0
  80. package/dist/learning-journey.feature.js +150 -0
  81. package/dist/learning-journey.feature.js.map +1 -0
  82. package/dist/track-spec.d.ts +129 -0
  83. package/dist/track-spec.d.ts.map +1 -0
  84. package/dist/track-spec.js +0 -0
  85. package/package.json +98 -0
@@ -0,0 +1,213 @@
1
+ //#region src/engines/xp.ts
2
+ const DEFAULT_XP_CONFIG = {
3
+ baseValues: {
4
+ lesson_complete: 10,
5
+ quiz_pass: 20,
6
+ quiz_perfect: 50,
7
+ flashcard_review: 1,
8
+ course_complete: 200,
9
+ module_complete: 50,
10
+ streak_bonus: 5,
11
+ achievement_unlock: 0,
12
+ daily_goal_complete: 15,
13
+ first_lesson: 25,
14
+ onboarding_step: 5,
15
+ onboarding_complete: 50
16
+ },
17
+ scoreThresholds: [
18
+ {
19
+ min: 90,
20
+ multiplier: 1.5
21
+ },
22
+ {
23
+ min: 80,
24
+ multiplier: 1.25
25
+ },
26
+ {
27
+ min: 70,
28
+ multiplier: 1
29
+ },
30
+ {
31
+ min: 60,
32
+ multiplier: .75
33
+ },
34
+ {
35
+ min: 0,
36
+ multiplier: .5
37
+ }
38
+ ],
39
+ streakTiers: [
40
+ {
41
+ days: 365,
42
+ bonus: 50
43
+ },
44
+ {
45
+ days: 180,
46
+ bonus: 30
47
+ },
48
+ {
49
+ days: 90,
50
+ bonus: 20
51
+ },
52
+ {
53
+ days: 30,
54
+ bonus: 15
55
+ },
56
+ {
57
+ days: 14,
58
+ bonus: 10
59
+ },
60
+ {
61
+ days: 7,
62
+ bonus: 5
63
+ },
64
+ {
65
+ days: 3,
66
+ bonus: 2
67
+ },
68
+ {
69
+ days: 1,
70
+ bonus: 0
71
+ }
72
+ ],
73
+ perfectScoreMultiplier: 1.5,
74
+ firstAttemptBonus: 10,
75
+ retryPenalty: .5,
76
+ speedBonusMultiplier: 1.2,
77
+ speedBonusThreshold: .8
78
+ };
79
+ var XPEngine = class {
80
+ config;
81
+ constructor(config = {}) {
82
+ this.config = {
83
+ ...DEFAULT_XP_CONFIG,
84
+ ...config,
85
+ baseValues: {
86
+ ...DEFAULT_XP_CONFIG.baseValues,
87
+ ...config.baseValues
88
+ },
89
+ scoreThresholds: config.scoreThresholds || DEFAULT_XP_CONFIG.scoreThresholds,
90
+ streakTiers: config.streakTiers || DEFAULT_XP_CONFIG.streakTiers
91
+ };
92
+ }
93
+ /**
94
+ * Calculate XP for an activity.
95
+ */
96
+ calculate(input) {
97
+ const breakdown = [];
98
+ const baseXp = input.baseXp ?? this.config.baseValues[input.activity];
99
+ let totalXp = baseXp;
100
+ breakdown.push({
101
+ source: "base",
102
+ amount: baseXp
103
+ });
104
+ if (input.score !== void 0) {
105
+ const scoreMultiplier = this.getScoreMultiplier(input.score);
106
+ if (scoreMultiplier !== 1) {
107
+ const scoreBonus = Math.round(baseXp * (scoreMultiplier - 1));
108
+ totalXp += scoreBonus;
109
+ breakdown.push({
110
+ source: "score_bonus",
111
+ amount: scoreBonus,
112
+ multiplier: scoreMultiplier
113
+ });
114
+ }
115
+ if (input.score === 100) {
116
+ const perfectBonus = Math.round(baseXp * (this.config.perfectScoreMultiplier - 1));
117
+ totalXp += perfectBonus;
118
+ breakdown.push({
119
+ source: "perfect_score",
120
+ amount: perfectBonus,
121
+ multiplier: this.config.perfectScoreMultiplier
122
+ });
123
+ }
124
+ }
125
+ if (input.attemptNumber === 1 && !input.isRetry) {
126
+ totalXp += this.config.firstAttemptBonus;
127
+ breakdown.push({
128
+ source: "first_attempt",
129
+ amount: this.config.firstAttemptBonus
130
+ });
131
+ }
132
+ if (input.isRetry) {
133
+ const penalty = Math.round(totalXp * (1 - this.config.retryPenalty));
134
+ totalXp -= penalty;
135
+ breakdown.push({
136
+ source: "retry_penalty",
137
+ amount: -penalty,
138
+ multiplier: this.config.retryPenalty
139
+ });
140
+ }
141
+ if (input.currentStreak && input.currentStreak > 0) {
142
+ const streakBonus = this.getStreakBonus(input.currentStreak);
143
+ if (streakBonus > 0) {
144
+ totalXp += streakBonus;
145
+ breakdown.push({
146
+ source: "streak_bonus",
147
+ amount: streakBonus
148
+ });
149
+ }
150
+ }
151
+ if (baseXp > 0) totalXp = Math.max(1, totalXp);
152
+ return {
153
+ totalXp: Math.round(totalXp),
154
+ baseXp,
155
+ breakdown
156
+ };
157
+ }
158
+ /**
159
+ * Calculate streak bonus XP.
160
+ */
161
+ calculateStreakBonus(currentStreak) {
162
+ const bonus = this.getStreakBonus(currentStreak);
163
+ return {
164
+ totalXp: bonus,
165
+ baseXp: bonus,
166
+ breakdown: [{
167
+ source: "streak_bonus",
168
+ amount: bonus
169
+ }]
170
+ };
171
+ }
172
+ /**
173
+ * Calculate XP needed for a level.
174
+ */
175
+ getXpForLevel(level) {
176
+ if (level <= 1) return 0;
177
+ return Math.round(100 * Math.pow(level - 1, 1.5));
178
+ }
179
+ /**
180
+ * Get level from total XP.
181
+ */
182
+ getLevelFromXp(totalXp) {
183
+ let level = 1;
184
+ let xpRequired = this.getXpForLevel(level + 1);
185
+ while (totalXp >= xpRequired && level < 1e3) {
186
+ level++;
187
+ xpRequired = this.getXpForLevel(level + 1);
188
+ }
189
+ const xpForCurrentLevel = this.getXpForLevel(level);
190
+ const xpForNextLevel = this.getXpForLevel(level + 1);
191
+ return {
192
+ level,
193
+ xpInLevel: totalXp - xpForCurrentLevel,
194
+ xpForNextLevel: xpForNextLevel - xpForCurrentLevel
195
+ };
196
+ }
197
+ getScoreMultiplier(score) {
198
+ for (const threshold of this.config.scoreThresholds) if (score >= threshold.min) return threshold.multiplier;
199
+ return 1;
200
+ }
201
+ getStreakBonus(streak) {
202
+ for (const tier of this.config.streakTiers) if (streak >= tier.days) return tier.bonus;
203
+ return 0;
204
+ }
205
+ };
206
+ /**
207
+ * Default XP engine instance.
208
+ */
209
+ const xpEngine = new XPEngine();
210
+
211
+ //#endregion
212
+ export { DEFAULT_XP_CONFIG, XPEngine, xpEngine };
213
+ //# sourceMappingURL=xp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xp.js","names":["DEFAULT_XP_CONFIG: XPConfig","breakdown: XPBreakdown[]"],"sources":["../../src/engines/xp.ts"],"sourcesContent":["/**\n * XP (Experience Points) Engine\n *\n * Calculates XP rewards for various learning activities.\n */\n\n// ============ Types ============\n\nexport type XPActivityType =\n | 'lesson_complete'\n | 'quiz_pass'\n | 'quiz_perfect'\n | 'flashcard_review'\n | 'course_complete'\n | 'module_complete'\n | 'streak_bonus'\n | 'achievement_unlock'\n | 'daily_goal_complete'\n | 'first_lesson'\n | 'onboarding_step'\n | 'onboarding_complete';\n\nexport interface XPCalculationInput {\n /** Type of activity */\n activity: XPActivityType;\n /** Base XP for the activity (from content config) */\n baseXp?: number;\n /** Score achieved (0-100) for scored activities */\n score?: number;\n /** Current streak (for streak bonuses) */\n currentStreak?: number;\n /** Time spent in seconds */\n timeSpent?: number;\n /** Attempt number (for quizzes) */\n attemptNumber?: number;\n /** Whether this is a retry */\n isRetry?: boolean;\n}\n\nexport interface XPResult {\n /** Total XP earned */\n totalXp: number;\n /** Base XP before bonuses */\n baseXp: number;\n /** Breakdown of XP sources */\n breakdown: XPBreakdown[];\n}\n\nexport interface XPBreakdown {\n /** Source of XP */\n source: string;\n /** XP amount */\n amount: number;\n /** Multiplier applied */\n multiplier?: number;\n}\n\nexport interface XPConfig {\n /** Base XP values for each activity */\n baseValues: Record<XPActivityType, number>;\n /** Score thresholds for bonus XP */\n scoreThresholds: { min: number; multiplier: number }[];\n /** Streak bonus tiers */\n streakTiers: { days: number; bonus: number }[];\n /** Perfect score bonus multiplier */\n perfectScoreMultiplier: number;\n /** First attempt bonus */\n firstAttemptBonus: number;\n /** Retry penalty multiplier */\n retryPenalty: number;\n /** Speed bonus (complete under expected time) */\n speedBonusMultiplier: number;\n /** Speed bonus threshold (percentage of expected time) */\n speedBonusThreshold: number;\n}\n\n// ============ Default Configuration ============\n\nexport const DEFAULT_XP_CONFIG: XPConfig = {\n baseValues: {\n lesson_complete: 10,\n quiz_pass: 20,\n quiz_perfect: 50,\n flashcard_review: 1,\n course_complete: 200,\n module_complete: 50,\n streak_bonus: 5,\n achievement_unlock: 0, // XP comes from achievement\n daily_goal_complete: 15,\n first_lesson: 25,\n onboarding_step: 5,\n onboarding_complete: 50,\n },\n scoreThresholds: [\n { min: 90, multiplier: 1.5 },\n { min: 80, multiplier: 1.25 },\n { min: 70, multiplier: 1.0 },\n { min: 60, multiplier: 0.75 },\n { min: 0, multiplier: 0.5 },\n ],\n streakTiers: [\n { days: 365, bonus: 50 },\n { days: 180, bonus: 30 },\n { days: 90, bonus: 20 },\n { days: 30, bonus: 15 },\n { days: 14, bonus: 10 },\n { days: 7, bonus: 5 },\n { days: 3, bonus: 2 },\n { days: 1, bonus: 0 },\n ],\n perfectScoreMultiplier: 1.5,\n firstAttemptBonus: 10,\n retryPenalty: 0.5,\n speedBonusMultiplier: 1.2,\n speedBonusThreshold: 0.8,\n};\n\n// ============ XP Engine ============\n\nexport class XPEngine {\n private config: XPConfig;\n\n constructor(config: Partial<XPConfig> = {}) {\n this.config = {\n ...DEFAULT_XP_CONFIG,\n ...config,\n baseValues: { ...DEFAULT_XP_CONFIG.baseValues, ...config.baseValues },\n scoreThresholds:\n config.scoreThresholds || DEFAULT_XP_CONFIG.scoreThresholds,\n streakTiers: config.streakTiers || DEFAULT_XP_CONFIG.streakTiers,\n };\n }\n\n /**\n * Calculate XP for an activity.\n */\n calculate(input: XPCalculationInput): XPResult {\n const breakdown: XPBreakdown[] = [];\n\n // Get base XP\n const baseXp = input.baseXp ?? this.config.baseValues[input.activity];\n let totalXp = baseXp;\n\n breakdown.push({\n source: 'base',\n amount: baseXp,\n });\n\n // Apply score-based multiplier\n if (input.score !== undefined) {\n const scoreMultiplier = this.getScoreMultiplier(input.score);\n if (scoreMultiplier !== 1.0) {\n const scoreBonus = Math.round(baseXp * (scoreMultiplier - 1));\n totalXp += scoreBonus;\n breakdown.push({\n source: 'score_bonus',\n amount: scoreBonus,\n multiplier: scoreMultiplier,\n });\n }\n\n // Perfect score bonus\n if (input.score === 100) {\n const perfectBonus = Math.round(\n baseXp * (this.config.perfectScoreMultiplier - 1)\n );\n totalXp += perfectBonus;\n breakdown.push({\n source: 'perfect_score',\n amount: perfectBonus,\n multiplier: this.config.perfectScoreMultiplier,\n });\n }\n }\n\n // First attempt bonus\n if (input.attemptNumber === 1 && !input.isRetry) {\n totalXp += this.config.firstAttemptBonus;\n breakdown.push({\n source: 'first_attempt',\n amount: this.config.firstAttemptBonus,\n });\n }\n\n // Retry penalty\n if (input.isRetry) {\n const penalty = Math.round(totalXp * (1 - this.config.retryPenalty));\n totalXp -= penalty;\n breakdown.push({\n source: 'retry_penalty',\n amount: -penalty,\n multiplier: this.config.retryPenalty,\n });\n }\n\n // Streak bonus\n if (input.currentStreak && input.currentStreak > 0) {\n const streakBonus = this.getStreakBonus(input.currentStreak);\n if (streakBonus > 0) {\n totalXp += streakBonus;\n breakdown.push({\n source: 'streak_bonus',\n amount: streakBonus,\n });\n }\n }\n\n // Ensure XP is at least 1 (if base was > 0)\n if (baseXp > 0) {\n totalXp = Math.max(1, totalXp);\n }\n\n return {\n totalXp: Math.round(totalXp),\n baseXp,\n breakdown,\n };\n }\n\n /**\n * Calculate streak bonus XP.\n */\n calculateStreakBonus(currentStreak: number): XPResult {\n const bonus = this.getStreakBonus(currentStreak);\n return {\n totalXp: bonus,\n baseXp: bonus,\n breakdown: [\n {\n source: 'streak_bonus',\n amount: bonus,\n },\n ],\n };\n }\n\n /**\n * Calculate XP needed for a level.\n */\n getXpForLevel(level: number): number {\n // Exponential growth formula\n // Level 1: 0 XP\n // Level 2: 100 XP\n // Level 3: 300 XP\n // etc.\n if (level <= 1) return 0;\n return Math.round(100 * Math.pow(level - 1, 1.5));\n }\n\n /**\n * Get level from total XP.\n */\n getLevelFromXp(totalXp: number): {\n level: number;\n xpInLevel: number;\n xpForNextLevel: number;\n } {\n let level = 1;\n let xpRequired = this.getXpForLevel(level + 1);\n\n while (totalXp >= xpRequired && level < 1000) {\n level++;\n xpRequired = this.getXpForLevel(level + 1);\n }\n\n const xpForCurrentLevel = this.getXpForLevel(level);\n const xpForNextLevel = this.getXpForLevel(level + 1);\n\n return {\n level,\n xpInLevel: totalXp - xpForCurrentLevel,\n xpForNextLevel: xpForNextLevel - xpForCurrentLevel,\n };\n }\n\n // ============ Helpers ============\n\n private getScoreMultiplier(score: number): number {\n for (const threshold of this.config.scoreThresholds) {\n if (score >= threshold.min) {\n return threshold.multiplier;\n }\n }\n return 1.0;\n }\n\n private getStreakBonus(streak: number): number {\n for (const tier of this.config.streakTiers) {\n if (streak >= tier.days) {\n return tier.bonus;\n }\n }\n return 0;\n }\n}\n\n/**\n * Default XP engine instance.\n */\nexport const xpEngine = new XPEngine();\n"],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ import * as _contractspec_lib_schema747 from "@contractspec/lib.schema";
2
+
3
+ //#region src/entities/ai.d.ts
4
+ /**
5
+ * Learning style enum.
6
+ */
7
+ declare const LearningStyleEnum: _contractspec_lib_schema747.EntityEnumDef;
8
+ /**
9
+ * Recommendation type enum.
10
+ */
11
+ declare const RecommendationTypeEnum: _contractspec_lib_schema747.EntityEnumDef;
12
+ /**
13
+ * LearnerProfile entity - AI personalization profile.
14
+ */
15
+ declare const LearnerProfileEntity: _contractspec_lib_schema747.EntitySpec<{
16
+ id: _contractspec_lib_schema747.EntityScalarField;
17
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
18
+ learningStyle: _contractspec_lib_schema747.EntityEnumField;
19
+ preferredDifficulty: _contractspec_lib_schema747.EntityScalarField;
20
+ preferredSessionLength: _contractspec_lib_schema747.EntityScalarField;
21
+ interests: _contractspec_lib_schema747.EntityScalarField;
22
+ goals: _contractspec_lib_schema747.EntityScalarField;
23
+ pacePreference: _contractspec_lib_schema747.EntityScalarField;
24
+ bestTimeOfDay: _contractspec_lib_schema747.EntityScalarField;
25
+ averageSessionLength: _contractspec_lib_schema747.EntityScalarField;
26
+ daysActivePerWeek: _contractspec_lib_schema747.EntityScalarField;
27
+ avgQuizScore: _contractspec_lib_schema747.EntityScalarField;
28
+ avgLessonCompletionTime: _contractspec_lib_schema747.EntityScalarField;
29
+ strengths: _contractspec_lib_schema747.EntityScalarField;
30
+ weaknesses: _contractspec_lib_schema747.EntityScalarField;
31
+ lastAnalyzedAt: _contractspec_lib_schema747.EntityScalarField;
32
+ metadata: _contractspec_lib_schema747.EntityScalarField;
33
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
34
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
35
+ learner: _contractspec_lib_schema747.EntityRelationField;
36
+ }>;
37
+ /**
38
+ * SkillMap entity - tracks skill proficiency.
39
+ */
40
+ declare const SkillMapEntity: _contractspec_lib_schema747.EntitySpec<{
41
+ id: _contractspec_lib_schema747.EntityScalarField;
42
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
43
+ skillId: _contractspec_lib_schema747.EntityScalarField;
44
+ skillName: _contractspec_lib_schema747.EntityScalarField;
45
+ skillCategory: _contractspec_lib_schema747.EntityScalarField;
46
+ level: _contractspec_lib_schema747.EntityScalarField;
47
+ confidence: _contractspec_lib_schema747.EntityScalarField;
48
+ lessonsCompleted: _contractspec_lib_schema747.EntityScalarField;
49
+ quizzesCompleted: _contractspec_lib_schema747.EntityScalarField;
50
+ practiceTime: _contractspec_lib_schema747.EntityScalarField;
51
+ lastPracticedAt: _contractspec_lib_schema747.EntityScalarField;
52
+ learningVelocity: _contractspec_lib_schema747.EntityScalarField;
53
+ predictedTimeToMastery: _contractspec_lib_schema747.EntityScalarField;
54
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
55
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
56
+ learner: _contractspec_lib_schema747.EntityRelationField;
57
+ }>;
58
+ /**
59
+ * LearningPath entity - AI-generated learning paths.
60
+ */
61
+ declare const LearningPathEntity: _contractspec_lib_schema747.EntitySpec<{
62
+ id: _contractspec_lib_schema747.EntityScalarField;
63
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
64
+ name: _contractspec_lib_schema747.EntityScalarField;
65
+ description: _contractspec_lib_schema747.EntityScalarField;
66
+ goal: _contractspec_lib_schema747.EntityScalarField;
67
+ steps: _contractspec_lib_schema747.EntityScalarField;
68
+ currentStepIndex: _contractspec_lib_schema747.EntityScalarField;
69
+ progress: _contractspec_lib_schema747.EntityScalarField;
70
+ completedSteps: _contractspec_lib_schema747.EntityScalarField;
71
+ totalSteps: _contractspec_lib_schema747.EntityScalarField;
72
+ generatedAt: _contractspec_lib_schema747.EntityScalarField;
73
+ adaptedFrom: _contractspec_lib_schema747.EntityScalarField;
74
+ generationParams: _contractspec_lib_schema747.EntityScalarField;
75
+ adaptationHistory: _contractspec_lib_schema747.EntityScalarField;
76
+ isActive: _contractspec_lib_schema747.EntityScalarField;
77
+ isCompleted: _contractspec_lib_schema747.EntityScalarField;
78
+ startedAt: _contractspec_lib_schema747.EntityScalarField;
79
+ completedAt: _contractspec_lib_schema747.EntityScalarField;
80
+ estimatedCompletionDate: _contractspec_lib_schema747.EntityScalarField;
81
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
82
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
83
+ learner: _contractspec_lib_schema747.EntityRelationField;
84
+ }>;
85
+ /**
86
+ * Recommendation entity - AI-powered learning recommendations.
87
+ */
88
+ declare const RecommendationEntity: _contractspec_lib_schema747.EntitySpec<{
89
+ id: _contractspec_lib_schema747.EntityScalarField;
90
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
91
+ type: _contractspec_lib_schema747.EntityEnumField;
92
+ itemId: _contractspec_lib_schema747.EntityScalarField;
93
+ itemType: _contractspec_lib_schema747.EntityScalarField;
94
+ score: _contractspec_lib_schema747.EntityScalarField;
95
+ confidence: _contractspec_lib_schema747.EntityScalarField;
96
+ reason: _contractspec_lib_schema747.EntityScalarField;
97
+ factors: _contractspec_lib_schema747.EntityScalarField;
98
+ status: _contractspec_lib_schema747.EntityScalarField;
99
+ viewedAt: _contractspec_lib_schema747.EntityScalarField;
100
+ acceptedAt: _contractspec_lib_schema747.EntityScalarField;
101
+ dismissedAt: _contractspec_lib_schema747.EntityScalarField;
102
+ feedback: _contractspec_lib_schema747.EntityScalarField;
103
+ feedbackRating: _contractspec_lib_schema747.EntityScalarField;
104
+ expiresAt: _contractspec_lib_schema747.EntityScalarField;
105
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
106
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
107
+ learner: _contractspec_lib_schema747.EntityRelationField;
108
+ }>;
109
+ /**
110
+ * LearningGap entity - identified knowledge gaps.
111
+ */
112
+ declare const LearningGapEntity: _contractspec_lib_schema747.EntitySpec<{
113
+ id: _contractspec_lib_schema747.EntityScalarField;
114
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
115
+ skillId: _contractspec_lib_schema747.EntityScalarField;
116
+ skillName: _contractspec_lib_schema747.EntityScalarField;
117
+ severity: _contractspec_lib_schema747.EntityScalarField;
118
+ confidence: _contractspec_lib_schema747.EntityScalarField;
119
+ evidence: _contractspec_lib_schema747.EntityScalarField;
120
+ relatedQuestions: _contractspec_lib_schema747.EntityScalarField;
121
+ suggestedRemediation: _contractspec_lib_schema747.EntityScalarField;
122
+ remediationProgress: _contractspec_lib_schema747.EntityScalarField;
123
+ status: _contractspec_lib_schema747.EntityScalarField;
124
+ resolvedAt: _contractspec_lib_schema747.EntityScalarField;
125
+ detectedAt: _contractspec_lib_schema747.EntityScalarField;
126
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
127
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
128
+ learner: _contractspec_lib_schema747.EntityRelationField;
129
+ }>;
130
+ declare const aiEntities: (_contractspec_lib_schema747.EntitySpec<{
131
+ id: _contractspec_lib_schema747.EntityScalarField;
132
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
133
+ learningStyle: _contractspec_lib_schema747.EntityEnumField;
134
+ preferredDifficulty: _contractspec_lib_schema747.EntityScalarField;
135
+ preferredSessionLength: _contractspec_lib_schema747.EntityScalarField;
136
+ interests: _contractspec_lib_schema747.EntityScalarField;
137
+ goals: _contractspec_lib_schema747.EntityScalarField;
138
+ pacePreference: _contractspec_lib_schema747.EntityScalarField;
139
+ bestTimeOfDay: _contractspec_lib_schema747.EntityScalarField;
140
+ averageSessionLength: _contractspec_lib_schema747.EntityScalarField;
141
+ daysActivePerWeek: _contractspec_lib_schema747.EntityScalarField;
142
+ avgQuizScore: _contractspec_lib_schema747.EntityScalarField;
143
+ avgLessonCompletionTime: _contractspec_lib_schema747.EntityScalarField;
144
+ strengths: _contractspec_lib_schema747.EntityScalarField;
145
+ weaknesses: _contractspec_lib_schema747.EntityScalarField;
146
+ lastAnalyzedAt: _contractspec_lib_schema747.EntityScalarField;
147
+ metadata: _contractspec_lib_schema747.EntityScalarField;
148
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
149
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
150
+ learner: _contractspec_lib_schema747.EntityRelationField;
151
+ }> | _contractspec_lib_schema747.EntitySpec<{
152
+ id: _contractspec_lib_schema747.EntityScalarField;
153
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
154
+ skillId: _contractspec_lib_schema747.EntityScalarField;
155
+ skillName: _contractspec_lib_schema747.EntityScalarField;
156
+ skillCategory: _contractspec_lib_schema747.EntityScalarField;
157
+ level: _contractspec_lib_schema747.EntityScalarField;
158
+ confidence: _contractspec_lib_schema747.EntityScalarField;
159
+ lessonsCompleted: _contractspec_lib_schema747.EntityScalarField;
160
+ quizzesCompleted: _contractspec_lib_schema747.EntityScalarField;
161
+ practiceTime: _contractspec_lib_schema747.EntityScalarField;
162
+ lastPracticedAt: _contractspec_lib_schema747.EntityScalarField;
163
+ learningVelocity: _contractspec_lib_schema747.EntityScalarField;
164
+ predictedTimeToMastery: _contractspec_lib_schema747.EntityScalarField;
165
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
166
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
167
+ learner: _contractspec_lib_schema747.EntityRelationField;
168
+ }> | _contractspec_lib_schema747.EntitySpec<{
169
+ id: _contractspec_lib_schema747.EntityScalarField;
170
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
171
+ name: _contractspec_lib_schema747.EntityScalarField;
172
+ description: _contractspec_lib_schema747.EntityScalarField;
173
+ goal: _contractspec_lib_schema747.EntityScalarField;
174
+ steps: _contractspec_lib_schema747.EntityScalarField;
175
+ currentStepIndex: _contractspec_lib_schema747.EntityScalarField;
176
+ progress: _contractspec_lib_schema747.EntityScalarField;
177
+ completedSteps: _contractspec_lib_schema747.EntityScalarField;
178
+ totalSteps: _contractspec_lib_schema747.EntityScalarField;
179
+ generatedAt: _contractspec_lib_schema747.EntityScalarField;
180
+ adaptedFrom: _contractspec_lib_schema747.EntityScalarField;
181
+ generationParams: _contractspec_lib_schema747.EntityScalarField;
182
+ adaptationHistory: _contractspec_lib_schema747.EntityScalarField;
183
+ isActive: _contractspec_lib_schema747.EntityScalarField;
184
+ isCompleted: _contractspec_lib_schema747.EntityScalarField;
185
+ startedAt: _contractspec_lib_schema747.EntityScalarField;
186
+ completedAt: _contractspec_lib_schema747.EntityScalarField;
187
+ estimatedCompletionDate: _contractspec_lib_schema747.EntityScalarField;
188
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
189
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
190
+ learner: _contractspec_lib_schema747.EntityRelationField;
191
+ }> | _contractspec_lib_schema747.EntitySpec<{
192
+ id: _contractspec_lib_schema747.EntityScalarField;
193
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
194
+ type: _contractspec_lib_schema747.EntityEnumField;
195
+ itemId: _contractspec_lib_schema747.EntityScalarField;
196
+ itemType: _contractspec_lib_schema747.EntityScalarField;
197
+ score: _contractspec_lib_schema747.EntityScalarField;
198
+ confidence: _contractspec_lib_schema747.EntityScalarField;
199
+ reason: _contractspec_lib_schema747.EntityScalarField;
200
+ factors: _contractspec_lib_schema747.EntityScalarField;
201
+ status: _contractspec_lib_schema747.EntityScalarField;
202
+ viewedAt: _contractspec_lib_schema747.EntityScalarField;
203
+ acceptedAt: _contractspec_lib_schema747.EntityScalarField;
204
+ dismissedAt: _contractspec_lib_schema747.EntityScalarField;
205
+ feedback: _contractspec_lib_schema747.EntityScalarField;
206
+ feedbackRating: _contractspec_lib_schema747.EntityScalarField;
207
+ expiresAt: _contractspec_lib_schema747.EntityScalarField;
208
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
209
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
210
+ learner: _contractspec_lib_schema747.EntityRelationField;
211
+ }> | _contractspec_lib_schema747.EntitySpec<{
212
+ id: _contractspec_lib_schema747.EntityScalarField;
213
+ learnerId: _contractspec_lib_schema747.EntityScalarField;
214
+ skillId: _contractspec_lib_schema747.EntityScalarField;
215
+ skillName: _contractspec_lib_schema747.EntityScalarField;
216
+ severity: _contractspec_lib_schema747.EntityScalarField;
217
+ confidence: _contractspec_lib_schema747.EntityScalarField;
218
+ evidence: _contractspec_lib_schema747.EntityScalarField;
219
+ relatedQuestions: _contractspec_lib_schema747.EntityScalarField;
220
+ suggestedRemediation: _contractspec_lib_schema747.EntityScalarField;
221
+ remediationProgress: _contractspec_lib_schema747.EntityScalarField;
222
+ status: _contractspec_lib_schema747.EntityScalarField;
223
+ resolvedAt: _contractspec_lib_schema747.EntityScalarField;
224
+ detectedAt: _contractspec_lib_schema747.EntityScalarField;
225
+ createdAt: _contractspec_lib_schema747.EntityScalarField;
226
+ updatedAt: _contractspec_lib_schema747.EntityScalarField;
227
+ learner: _contractspec_lib_schema747.EntityRelationField;
228
+ }>)[];
229
+ declare const aiEnums: _contractspec_lib_schema747.EntityEnumDef[];
230
+ //#endregion
231
+ export { LearnerProfileEntity, LearningGapEntity, LearningPathEntity, LearningStyleEnum, RecommendationEntity, RecommendationTypeEnum, SkillMapEntity, aiEntities, aiEnums };
232
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","names":[],"sources":["../../src/entities/ai.ts"],"sourcesContent":[],"mappings":";;;;;;AAUa,cAAA,iBAKX,EAAA,2BAAA,CAL4B,aAK5B;AAKF;AAiBA;;cAjBa,wBAYX,2BAAA,CAZiC;;;;cAiBtB,kDAAoB;MA2F/B,2BAAA,CAAA;;;;;;;;;;;;;;2DA3F+B;EAAA,cAAA,+CAAA;EAgGpB,QAAA,+CAoEX;EAAA,SAAA,+CAAA;;;;;;;cApEW,4CAAc;MAoEzB,2BAAA,CAAA;;;;;;;;iEApEyB;EAAA,YAAA,+CAAA;EAyEd,eAAA,+CAgFX;EAAA,gBAAA,+CAAA;;;;;;;;;cAhFW,gDAAkB;MAgF7B,2BAAA,CAAA;;;;;;;;;;;;iEAhF6B;EAAA,iBAAA,+CAAA;EAqFlB,QAAA,+CAwEX;EAAA,WAAA,+CAAA;;;;;;;;;;;cAxEW,kDAAoB;MAwE/B,2BAAA,CAAA;;;;;;;uDAxE+B;EAAA,OAAA,+CAAA;EA6EpB,MAAA,+CA8DX;EAAA,QAAA,+CAAA;;;;;;;;;;;;;cA9DW,+CAAiB;MA8D5B,2BAAA,CAAA;;wDA9D4B;EAAA,SAAA,+CAAA;EAgEjB,QAAA,+CAMZ;EAAA,UAAA,+CAAA;;;;;;;;;;;;cANY,yCAAU;MAMtB,2BAAA,CAAA;;;;;;;+DANsB;EAAA,aAAA,+CAAA;;;;;;;;;;;;;MAAA,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQV,UAAqD,+CAA9C;;;;;;;;;;;;cAAP,SAAqD,2BAAA,CAA9C,aAAA"}