education-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/PRIVACY.md +53 -0
- package/README.md +144 -0
- package/TERMS.md +57 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +191 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/explain-concept.d.ts +9 -0
- package/dist/tools/explain-concept.d.ts.map +1 -0
- package/dist/tools/explain-concept.js +168 -0
- package/dist/tools/explain-concept.js.map +1 -0
- package/dist/tools/generate-exercise.d.ts +8 -0
- package/dist/tools/generate-exercise.d.ts.map +1 -0
- package/dist/tools/generate-exercise.js +364 -0
- package/dist/tools/generate-exercise.js.map +1 -0
- package/dist/tools/generate-flashcards.d.ts +9 -0
- package/dist/tools/generate-flashcards.d.ts.map +1 -0
- package/dist/tools/generate-flashcards.js +131 -0
- package/dist/tools/generate-flashcards.js.map +1 -0
- package/dist/tools/generate-lesson-plan.d.ts +8 -0
- package/dist/tools/generate-lesson-plan.d.ts.map +1 -0
- package/dist/tools/generate-lesson-plan.js +169 -0
- package/dist/tools/generate-lesson-plan.js.map +1 -0
- package/dist/tools/generate-quiz.d.ts +9 -0
- package/dist/tools/generate-quiz.d.ts.map +1 -0
- package/dist/tools/generate-quiz.js +153 -0
- package/dist/tools/generate-quiz.js.map +1 -0
- package/dist/tools/grade-rubric.d.ts +8 -0
- package/dist/tools/grade-rubric.d.ts.map +1 -0
- package/dist/tools/grade-rubric.js +354 -0
- package/dist/tools/grade-rubric.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +215 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/helpers.d.ts +41 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +134 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* explain_concept — Explain a concept at different audience levels and age groups.
|
|
3
|
+
*
|
|
4
|
+
* Generates structured explanations with analogies, examples, prerequisites,
|
|
5
|
+
* and common misconceptions.
|
|
6
|
+
*/
|
|
7
|
+
import { timestamp, clamp, requireNonEmpty, ageGroupLabel, wordCount, } from "../utils/helpers.js";
|
|
8
|
+
// ── Explanation Templates by Level ─────────────────────────────────────────────
|
|
9
|
+
function beginnerExplanation(concept, ageGroup) {
|
|
10
|
+
const ageLabel = ageGroupLabel(ageGroup);
|
|
11
|
+
if (ageGroup === "elementary") {
|
|
12
|
+
return `${concept} is something really interesting that you can learn about! Think of it like a puzzle — once you understand the pieces, you can see the whole picture. ${concept} helps us understand the world around us by showing us how things work. Scientists, teachers, and many other people use what they know about ${concept} every day. The coolest thing is that anyone can learn about it, and the more you learn, the more fun it becomes!`;
|
|
13
|
+
}
|
|
14
|
+
if (ageGroup === "middle_school") {
|
|
15
|
+
return `${concept} is a topic that connects to many things you already know. At its core, it's about understanding patterns and relationships. When you study ${concept}, you learn to think more carefully and ask better questions. Many of the technologies and systems you use every day are built on ideas from ${concept}. Learning it now gives you a strong foundation for more advanced topics later.`;
|
|
16
|
+
}
|
|
17
|
+
return `${concept} is a fundamental topic that forms the basis for deeper understanding in its field. At the beginner level, the most important thing is grasping the core idea: what ${concept} is, why it matters, and how it connects to things you already know. Don't worry about mastering all the details right away — focus on building a solid mental model that you can refine over time. ${concept} has practical applications in everyday life and professional settings alike.`;
|
|
18
|
+
}
|
|
19
|
+
function intermediateExplanation(concept, ageGroup) {
|
|
20
|
+
return `${concept} involves several interconnected principles that build on foundational knowledge. At this level, you should be comfortable with the basic definitions and ready to explore how different aspects of ${concept} relate to each other. Key to intermediate understanding is recognizing patterns, applying concepts to new situations, and beginning to analyze rather than just describe. Practitioners of ${concept} at this level can solve standard problems and are developing the skills to tackle non-routine challenges. The transition from intermediate to advanced requires moving from "knowing what" to "knowing why and how."`;
|
|
21
|
+
}
|
|
22
|
+
function expertExplanation(concept, ageGroup) {
|
|
23
|
+
return `${concept}, at an expert level, requires deep understanding of its theoretical underpinnings, historical development, and current frontiers. Expert practitioners can critically evaluate competing models, synthesize information from multiple sub-domains, and contribute original insights. The nuances of ${concept} become apparent at this level: edge cases, limitations of standard approaches, and the interplay between theory and empirical evidence. Advanced study involves engaging with primary literature, understanding methodological debates, and recognizing how ${concept} intersects with adjacent fields. Mastery is demonstrated not just by knowledge but by the ability to teach, critique, and extend the field.`;
|
|
24
|
+
}
|
|
25
|
+
function generateAnalogy(concept, level, ageGroup) {
|
|
26
|
+
if (ageGroup === "elementary") {
|
|
27
|
+
return `Think of ${concept} like building with LEGO blocks. Each small piece is a simple idea, but when you put them together following the instructions, you can build something amazing. And just like LEGO, once you know the basic pieces, you can start creating your own designs!`;
|
|
28
|
+
}
|
|
29
|
+
if (level === "beginner") {
|
|
30
|
+
return `Learning ${concept} is like learning to cook. At first, you follow recipes exactly (the basics). As you get more comfortable, you start understanding why certain ingredients work together, and eventually you can create your own dishes. ${concept} works the same way — master the fundamentals, then get creative.`;
|
|
31
|
+
}
|
|
32
|
+
if (level === "intermediate") {
|
|
33
|
+
return `${concept} can be compared to learning a musical instrument. You've moved past scales and basic songs (beginner stage) and are now learning to play complex pieces. You understand rhythm, harmony, and technique, but mastery requires continued practice and exposure to diverse styles. The intermediate stage is where theory and practice start to merge.`;
|
|
34
|
+
}
|
|
35
|
+
return `At the expert level, ${concept} is akin to chess grandmaster-level play. A novice sees individual pieces; an expert sees patterns, anticipates consequences many moves ahead, and draws on deep theoretical knowledge while adapting to novel situations in real time. The expert doesn't just know the rules — they understand the principles behind the principles.`;
|
|
36
|
+
}
|
|
37
|
+
function generateKeyPoints(concept, level) {
|
|
38
|
+
const base = [
|
|
39
|
+
`${concept} has both theoretical and practical dimensions.`,
|
|
40
|
+
`Understanding ${concept} builds on prerequisite knowledge from related fields.`,
|
|
41
|
+
`There are multiple valid approaches and perspectives within ${concept}.`,
|
|
42
|
+
];
|
|
43
|
+
if (level === "beginner") {
|
|
44
|
+
return [
|
|
45
|
+
`${concept} is a foundational topic worth investing time in.`,
|
|
46
|
+
...base,
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
if (level === "intermediate") {
|
|
50
|
+
return [
|
|
51
|
+
...base,
|
|
52
|
+
`Pattern recognition is essential for advancing in ${concept}.`,
|
|
53
|
+
`Applying ${concept} to real problems deepens understanding beyond textbook knowledge.`,
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
return [
|
|
57
|
+
...base,
|
|
58
|
+
`Expert understanding of ${concept} requires engaging with primary sources and current research.`,
|
|
59
|
+
`Critical evaluation of methods and assumptions distinguishes expert from intermediate practitioners.`,
|
|
60
|
+
`${concept} intersects meaningfully with several adjacent fields.`,
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
function generateMisconceptions(concept) {
|
|
64
|
+
return [
|
|
65
|
+
`"${concept} is just memorization" — In reality, deep understanding requires critical thinking and application.`,
|
|
66
|
+
`"There's only one right way to approach ${concept}" — Multiple valid methods and perspectives exist.`,
|
|
67
|
+
`"You either get ${concept} or you don't" — Like any subject, understanding develops with practice and effort.`,
|
|
68
|
+
`"${concept} has no real-world relevance" — It has numerous practical applications across industries and daily life.`,
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
function generatePrerequisites(concept, level) {
|
|
72
|
+
if (level === "beginner") {
|
|
73
|
+
return [
|
|
74
|
+
"Basic reading comprehension",
|
|
75
|
+
"Willingness to engage with new ideas",
|
|
76
|
+
"Foundational knowledge typical for the grade level",
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
if (level === "intermediate") {
|
|
80
|
+
return [
|
|
81
|
+
`Solid understanding of ${concept} fundamentals`,
|
|
82
|
+
"Comfort with the field's basic terminology",
|
|
83
|
+
"Experience applying basic concepts to straightforward problems",
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
return [
|
|
87
|
+
`Strong intermediate-level knowledge of ${concept}`,
|
|
88
|
+
"Familiarity with research methods in the field",
|
|
89
|
+
"Experience with analytical and evaluative thinking",
|
|
90
|
+
"Exposure to primary literature or professional practice",
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
function generateRelated(concept) {
|
|
94
|
+
return [
|
|
95
|
+
`Advanced topics within ${concept}`,
|
|
96
|
+
`Historical development of ${concept}`,
|
|
97
|
+
`${concept} in professional practice`,
|
|
98
|
+
`Interdisciplinary connections with ${concept}`,
|
|
99
|
+
`Current research frontiers in ${concept}`,
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
function generateExamples(concept, level) {
|
|
103
|
+
if (level === "beginner") {
|
|
104
|
+
return [
|
|
105
|
+
`A simple classroom demonstration illustrating ${concept} in action.`,
|
|
106
|
+
`An everyday situation where ${concept} applies (e.g., cooking, sports, nature).`,
|
|
107
|
+
`A short video or animation that visualizes the core idea of ${concept}.`,
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
if (level === "intermediate") {
|
|
111
|
+
return [
|
|
112
|
+
`A structured problem-solving exercise applying ${concept} to a real scenario.`,
|
|
113
|
+
`A case study showing how professionals use ${concept} in their work.`,
|
|
114
|
+
`A comparison of two different approaches to the same ${concept} challenge.`,
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
return [
|
|
118
|
+
`A research paper that advanced the understanding of ${concept}.`,
|
|
119
|
+
`A complex real-world problem that requires expert-level ${concept} knowledge.`,
|
|
120
|
+
`A debate or open question in the field that experts in ${concept} are currently investigating.`,
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
// ── Main ───────────────────────────────────────────────────────────────────────
|
|
124
|
+
export function explainConcept(input) {
|
|
125
|
+
const concept = requireNonEmpty(input.concept, "concept");
|
|
126
|
+
const level = input.level ?? "beginner";
|
|
127
|
+
const ageGroup = input.age_group ?? "high_school";
|
|
128
|
+
const includeAnalogy = input.include_analogy ?? true;
|
|
129
|
+
const includeExamples = input.include_examples ?? true;
|
|
130
|
+
const maxLength = clamp(input.max_length ?? 500, 50, 2000);
|
|
131
|
+
let explanation;
|
|
132
|
+
switch (level) {
|
|
133
|
+
case "beginner":
|
|
134
|
+
explanation = beginnerExplanation(concept, ageGroup);
|
|
135
|
+
break;
|
|
136
|
+
case "intermediate":
|
|
137
|
+
explanation = intermediateExplanation(concept, ageGroup);
|
|
138
|
+
break;
|
|
139
|
+
case "expert":
|
|
140
|
+
explanation = expertExplanation(concept, ageGroup);
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
// Truncate if over max length
|
|
144
|
+
const words = explanation.split(/\s+/);
|
|
145
|
+
if (words.length > maxLength) {
|
|
146
|
+
explanation = words.slice(0, maxLength).join(" ") + "...";
|
|
147
|
+
}
|
|
148
|
+
const result = {
|
|
149
|
+
concept,
|
|
150
|
+
level,
|
|
151
|
+
age_group: ageGroup,
|
|
152
|
+
explanation,
|
|
153
|
+
key_points: generateKeyPoints(concept, level),
|
|
154
|
+
common_misconceptions: generateMisconceptions(concept),
|
|
155
|
+
prerequisites: generatePrerequisites(concept, level),
|
|
156
|
+
related_concepts: generateRelated(concept),
|
|
157
|
+
examples: includeExamples ? generateExamples(concept, level) : [],
|
|
158
|
+
metadata: {
|
|
159
|
+
generated_at: timestamp(),
|
|
160
|
+
word_count: wordCount(explanation),
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
if (includeAnalogy) {
|
|
164
|
+
result.analogy = generateAnalogy(concept, level, ageGroup);
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=explain-concept.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain-concept.js","sourceRoot":"","sources":["../../src/tools/explain-concept.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* generate_exercise — Math/science exercises with step-by-step solutions.
|
|
3
|
+
*
|
|
4
|
+
* Generates exercises with hints, common mistakes, and detailed solution steps.
|
|
5
|
+
*/
|
|
6
|
+
import type { GenerateExerciseInput, ExerciseSetResult } from "../types.js";
|
|
7
|
+
export declare function generateExercise(input: GenerateExerciseInput): ExerciseSetResult;
|
|
8
|
+
//# sourceMappingURL=generate-exercise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-exercise.d.ts","sourceRoot":"","sources":["../../src/tools/generate-exercise.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAKlB,MAAM,aAAa,CAAC;AAsVrB,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,iBAAiB,CAoDhF"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* generate_exercise — Math/science exercises with step-by-step solutions.
|
|
3
|
+
*
|
|
4
|
+
* Generates exercises with hints, common mistakes, and detailed solution steps.
|
|
5
|
+
*/
|
|
6
|
+
import { timestamp, clamp, requireNonEmpty, difficultyMultiplier, } from "../utils/helpers.js";
|
|
7
|
+
const MATH_TEMPLATES = [
|
|
8
|
+
{
|
|
9
|
+
problem: (t, d) => d === "easy"
|
|
10
|
+
? `Solve for x: 2x + 6 = 14. (Topic: ${t})`
|
|
11
|
+
: d === "medium"
|
|
12
|
+
? `Solve for x: 3x² - 12 = 0. (Topic: ${t})`
|
|
13
|
+
: `Solve for x: x³ - 6x² + 11x - 6 = 0. (Topic: ${t})`,
|
|
14
|
+
steps: (t, d) => {
|
|
15
|
+
if (d === "easy") {
|
|
16
|
+
return [
|
|
17
|
+
{ step_number: 1, description: "Subtract 6 from both sides", formula: "2x + 6 - 6 = 14 - 6", result: "2x = 8" },
|
|
18
|
+
{ step_number: 2, description: "Divide both sides by 2", formula: "2x / 2 = 8 / 2", result: "x = 4" },
|
|
19
|
+
{ step_number: 3, description: "Verify: 2(4) + 6 = 8 + 6 = 14 ✓", result: "x = 4 is correct" },
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
if (d === "medium") {
|
|
23
|
+
return [
|
|
24
|
+
{ step_number: 1, description: "Add 12 to both sides", formula: "3x² = 12" },
|
|
25
|
+
{ step_number: 2, description: "Divide both sides by 3", formula: "x² = 4" },
|
|
26
|
+
{ step_number: 3, description: "Take the square root", formula: "x = ±√4", result: "x = ±2" },
|
|
27
|
+
{ step_number: 4, description: "Verify both solutions", result: "x = 2 and x = -2 are both correct" },
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
return [
|
|
31
|
+
{ step_number: 1, description: "Try x = 1: 1 - 6 + 11 - 6 = 0 ✓", result: "x = 1 is a root" },
|
|
32
|
+
{ step_number: 2, description: "Factor out (x - 1)", formula: "x³ - 6x² + 11x - 6 = (x - 1)(x² - 5x + 6)" },
|
|
33
|
+
{ step_number: 3, description: "Factor the quadratic", formula: "(x - 1)(x - 2)(x - 3) = 0" },
|
|
34
|
+
{ step_number: 4, description: "Set each factor to zero", result: "x = 1, x = 2, x = 3" },
|
|
35
|
+
];
|
|
36
|
+
},
|
|
37
|
+
answer: (t, d) => d === "easy" ? "x = 4" : d === "medium" ? "x = 2 or x = -2" : "x = 1, x = 2, x = 3",
|
|
38
|
+
hints: (t) => [
|
|
39
|
+
"Isolate the variable on one side of the equation.",
|
|
40
|
+
"Perform the same operation on both sides to maintain equality.",
|
|
41
|
+
"Always check your answer by substituting back into the original equation.",
|
|
42
|
+
],
|
|
43
|
+
mistakes: (t) => [
|
|
44
|
+
"Forgetting to perform the operation on both sides of the equation.",
|
|
45
|
+
"Sign errors when moving terms across the equals sign.",
|
|
46
|
+
"Not checking the solution in the original equation.",
|
|
47
|
+
],
|
|
48
|
+
skills: ["Equation solving", "Algebraic manipulation", "Verification"],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
problem: (t, d) => d === "easy"
|
|
52
|
+
? `Calculate the area of a rectangle with length 8 cm and width 5 cm. (Topic: ${t})`
|
|
53
|
+
: d === "medium"
|
|
54
|
+
? `Find the area of a triangle with base 10 cm and height 7 cm. Then find its perimeter if the other two sides are 8 cm and 9 cm. (Topic: ${t})`
|
|
55
|
+
: `A cylinder has radius 4 cm and height 10 cm. Calculate its volume and total surface area. (Topic: ${t})`,
|
|
56
|
+
steps: (t, d) => {
|
|
57
|
+
if (d === "easy") {
|
|
58
|
+
return [
|
|
59
|
+
{ step_number: 1, description: "Recall the formula for area of a rectangle", formula: "A = length × width" },
|
|
60
|
+
{ step_number: 2, description: "Substitute the values", formula: "A = 8 × 5" },
|
|
61
|
+
{ step_number: 3, description: "Calculate", result: "A = 40 cm²" },
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
if (d === "medium") {
|
|
65
|
+
return [
|
|
66
|
+
{ step_number: 1, description: "Calculate area using triangle formula", formula: "A = ½ × base × height = ½ × 10 × 7", result: "A = 35 cm²" },
|
|
67
|
+
{ step_number: 2, description: "Calculate perimeter", formula: "P = 10 + 8 + 9", result: "P = 27 cm" },
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
return [
|
|
71
|
+
{ step_number: 1, description: "Calculate volume", formula: "V = πr²h = π(4)²(10) = 160π", result: "V ≈ 502.65 cm³" },
|
|
72
|
+
{ step_number: 2, description: "Calculate lateral surface area", formula: "A_lateral = 2πrh = 2π(4)(10) = 80π", result: "A_lateral ≈ 251.33 cm²" },
|
|
73
|
+
{ step_number: 3, description: "Calculate area of two circular ends", formula: "A_ends = 2πr² = 2π(16) = 32π", result: "A_ends ≈ 100.53 cm²" },
|
|
74
|
+
{ step_number: 4, description: "Total surface area", formula: "A_total = 80π + 32π = 112π", result: "A_total ≈ 351.86 cm²" },
|
|
75
|
+
];
|
|
76
|
+
},
|
|
77
|
+
answer: (t, d) => d === "easy" ? "40 cm²" : d === "medium" ? "Area = 35 cm², Perimeter = 27 cm" : "Volume ≈ 502.65 cm³, Surface Area ≈ 351.86 cm²",
|
|
78
|
+
hints: (t) => [
|
|
79
|
+
"Write down the relevant formula before substituting values.",
|
|
80
|
+
"Keep track of units throughout your calculation.",
|
|
81
|
+
"For 3D shapes, surface area has multiple components.",
|
|
82
|
+
],
|
|
83
|
+
mistakes: (t) => [
|
|
84
|
+
"Confusing area and perimeter formulas.",
|
|
85
|
+
"Forgetting to include units in the final answer.",
|
|
86
|
+
"For cylinders, forgetting to add the area of the circular ends.",
|
|
87
|
+
],
|
|
88
|
+
skills: ["Geometry", "Formula application", "Unit awareness"],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
problem: (t, d) => d === "easy"
|
|
92
|
+
? `What is 15% of 80? (Topic: ${t})`
|
|
93
|
+
: d === "medium"
|
|
94
|
+
? `A store offers a 25% discount on an item originally priced at $120. After the discount, a 8% sales tax is applied. What is the final price? (Topic: ${t})`
|
|
95
|
+
: `An investment of $5,000 earns compound interest at 6% per year, compounded quarterly. What is the value after 3 years? (Topic: ${t})`,
|
|
96
|
+
steps: (t, d) => {
|
|
97
|
+
if (d === "easy") {
|
|
98
|
+
return [
|
|
99
|
+
{ step_number: 1, description: "Convert percentage to decimal", formula: "15% = 0.15" },
|
|
100
|
+
{ step_number: 2, description: "Multiply", formula: "0.15 × 80 = 12", result: "15% of 80 = 12" },
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
if (d === "medium") {
|
|
104
|
+
return [
|
|
105
|
+
{ step_number: 1, description: "Calculate discount amount", formula: "120 × 0.25 = $30" },
|
|
106
|
+
{ step_number: 2, description: "Subtract discount", formula: "120 - 30 = $90" },
|
|
107
|
+
{ step_number: 3, description: "Calculate tax", formula: "90 × 0.08 = $7.20" },
|
|
108
|
+
{ step_number: 4, description: "Add tax to discounted price", formula: "90 + 7.20 = $97.20", result: "Final price = $97.20" },
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
return [
|
|
112
|
+
{ step_number: 1, description: "Identify compound interest formula", formula: "A = P(1 + r/n)^(nt)" },
|
|
113
|
+
{ step_number: 2, description: "Substitute values: P=5000, r=0.06, n=4, t=3", formula: "A = 5000(1 + 0.06/4)^(4×3)" },
|
|
114
|
+
{ step_number: 3, description: "Simplify inside parentheses", formula: "A = 5000(1.015)^12" },
|
|
115
|
+
{ step_number: 4, description: "Calculate", formula: "A = 5000 × 1.19562", result: "A ≈ $5,978.09" },
|
|
116
|
+
];
|
|
117
|
+
},
|
|
118
|
+
answer: (t, d) => d === "easy" ? "12" : d === "medium" ? "$97.20" : "≈ $5,978.09",
|
|
119
|
+
hints: (t) => [
|
|
120
|
+
"Convert percentages to decimals by dividing by 100.",
|
|
121
|
+
"Apply operations in the correct order (discount first, then tax).",
|
|
122
|
+
"For compound interest, identify all four variables: P, r, n, t.",
|
|
123
|
+
],
|
|
124
|
+
mistakes: (t) => [
|
|
125
|
+
"Applying tax before the discount instead of after.",
|
|
126
|
+
"Confusing simple and compound interest formulas.",
|
|
127
|
+
"Rounding intermediate steps, which accumulates error in the final answer.",
|
|
128
|
+
],
|
|
129
|
+
skills: ["Percentages", "Multi-step calculations", "Financial mathematics"],
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
const PHYSICS_TEMPLATES = [
|
|
133
|
+
{
|
|
134
|
+
problem: (t, d) => d === "easy"
|
|
135
|
+
? `A car travels 150 km in 2.5 hours at constant speed. What is its average speed? (Topic: ${t})`
|
|
136
|
+
: d === "medium"
|
|
137
|
+
? `An object is dropped from a height of 45 m. How long does it take to reach the ground? (Use g = 9.8 m/s²) (Topic: ${t})`
|
|
138
|
+
: `A projectile is launched at 30 m/s at an angle of 45°. Calculate its maximum height and range. (Use g = 9.8 m/s²) (Topic: ${t})`,
|
|
139
|
+
steps: (t, d) => {
|
|
140
|
+
if (d === "easy") {
|
|
141
|
+
return [
|
|
142
|
+
{ step_number: 1, description: "Use the speed formula", formula: "v = d / t" },
|
|
143
|
+
{ step_number: 2, description: "Substitute values", formula: "v = 150 / 2.5", result: "v = 60 km/h" },
|
|
144
|
+
];
|
|
145
|
+
}
|
|
146
|
+
if (d === "medium") {
|
|
147
|
+
return [
|
|
148
|
+
{ step_number: 1, description: "Use free fall equation", formula: "h = ½gt²" },
|
|
149
|
+
{ step_number: 2, description: "Solve for t", formula: "t = √(2h/g) = √(2×45/9.8)" },
|
|
150
|
+
{ step_number: 3, description: "Calculate", result: "t ≈ 3.03 seconds" },
|
|
151
|
+
];
|
|
152
|
+
}
|
|
153
|
+
return [
|
|
154
|
+
{ step_number: 1, description: "Find vertical component", formula: "v_y = 30 × sin(45°) = 21.21 m/s" },
|
|
155
|
+
{ step_number: 2, description: "Find horizontal component", formula: "v_x = 30 × cos(45°) = 21.21 m/s" },
|
|
156
|
+
{ step_number: 3, description: "Maximum height", formula: "H = v_y² / (2g) = 21.21² / (2×9.8)", result: "H ≈ 22.96 m" },
|
|
157
|
+
{ step_number: 4, description: "Time of flight", formula: "T = 2v_y / g = 2(21.21) / 9.8 ≈ 4.33 s" },
|
|
158
|
+
{ step_number: 5, description: "Range", formula: "R = v_x × T = 21.21 × 4.33", result: "R ≈ 91.84 m" },
|
|
159
|
+
];
|
|
160
|
+
},
|
|
161
|
+
answer: (t, d) => d === "easy" ? "60 km/h" : d === "medium" ? "≈ 3.03 seconds" : "Max height ≈ 22.96 m, Range ≈ 91.84 m",
|
|
162
|
+
hints: (t) => [
|
|
163
|
+
"Write down the known and unknown quantities first.",
|
|
164
|
+
"Choose the right kinematic equation based on what you know and what you need.",
|
|
165
|
+
"Check that your units are consistent throughout.",
|
|
166
|
+
],
|
|
167
|
+
mistakes: (t) => [
|
|
168
|
+
"Mixing up units (km with m, hours with seconds).",
|
|
169
|
+
"Forgetting that g is acceleration, not velocity.",
|
|
170
|
+
"Not decomposing velocity into components for projectile problems.",
|
|
171
|
+
],
|
|
172
|
+
skills: ["Kinematics", "Unit conversion", "Vector decomposition"],
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
const CHEMISTRY_TEMPLATES = [
|
|
176
|
+
{
|
|
177
|
+
problem: (t, d) => d === "easy"
|
|
178
|
+
? `Balance the equation: H₂ + O₂ → H₂O. (Topic: ${t})`
|
|
179
|
+
: d === "medium"
|
|
180
|
+
? `How many moles of CO₂ are produced when 2 moles of C₂H₆ undergo complete combustion? (Topic: ${t})`
|
|
181
|
+
: `Calculate the pH of a 0.01 M HCl solution. Then find the pOH and [OH⁻]. (Topic: ${t})`,
|
|
182
|
+
steps: (t, d) => {
|
|
183
|
+
if (d === "easy") {
|
|
184
|
+
return [
|
|
185
|
+
{ step_number: 1, description: "Count atoms on each side: H₂ + O₂ → H₂O gives H:2,O:2 → H:2,O:1" },
|
|
186
|
+
{ step_number: 2, description: "Balance oxygen by placing coefficient 2 before H₂O", formula: "H₂ + O₂ → 2H₂O" },
|
|
187
|
+
{ step_number: 3, description: "Now H:2,O:2 → H:4,O:2. Balance H with coefficient 2 before H₂", formula: "2H₂ + O₂ → 2H₂O", result: "Balanced!" },
|
|
188
|
+
];
|
|
189
|
+
}
|
|
190
|
+
if (d === "medium") {
|
|
191
|
+
return [
|
|
192
|
+
{ step_number: 1, description: "Write balanced combustion equation", formula: "2C₂H₆ + 7O₂ → 4CO₂ + 6H₂O" },
|
|
193
|
+
{ step_number: 2, description: "Read mole ratio from coefficients: 2 mol C₂H₆ produces 4 mol CO₂" },
|
|
194
|
+
{ step_number: 3, description: "For 2 mol C₂H₆", result: "4 moles of CO₂ are produced" },
|
|
195
|
+
];
|
|
196
|
+
}
|
|
197
|
+
return [
|
|
198
|
+
{ step_number: 1, description: "HCl is a strong acid — fully dissociates", formula: "[H⁺] = 0.01 M" },
|
|
199
|
+
{ step_number: 2, description: "Calculate pH", formula: "pH = -log(0.01) = -log(10⁻²) = 2" },
|
|
200
|
+
{ step_number: 3, description: "Calculate pOH", formula: "pOH = 14 - pH = 14 - 2 = 12" },
|
|
201
|
+
{ step_number: 4, description: "Calculate [OH⁻]", formula: "[OH⁻] = 10⁻¹² M", result: "pH = 2, pOH = 12, [OH⁻] = 10⁻¹² M" },
|
|
202
|
+
];
|
|
203
|
+
},
|
|
204
|
+
answer: (t, d) => d === "easy" ? "2H₂ + O₂ → 2H₂O" : d === "medium" ? "4 moles of CO₂" : "pH = 2, pOH = 12, [OH⁻] = 10⁻¹² M",
|
|
205
|
+
hints: (t) => [
|
|
206
|
+
"Count each type of atom on both sides of the equation.",
|
|
207
|
+
"Use mole ratios from balanced equations for stoichiometry.",
|
|
208
|
+
"Remember: pH + pOH = 14 at 25°C.",
|
|
209
|
+
],
|
|
210
|
+
mistakes: (t) => [
|
|
211
|
+
"Changing subscripts instead of coefficients when balancing.",
|
|
212
|
+
"Forgetting to balance all atom types.",
|
|
213
|
+
"Confusing strong acids (full dissociation) with weak acids (partial dissociation).",
|
|
214
|
+
],
|
|
215
|
+
skills: ["Balancing equations", "Stoichiometry", "Acid-base chemistry"],
|
|
216
|
+
},
|
|
217
|
+
];
|
|
218
|
+
const BIOLOGY_TEMPLATES = [
|
|
219
|
+
{
|
|
220
|
+
problem: (t, d) => d === "easy"
|
|
221
|
+
? `Name the four bases found in DNA and their pairing rules. (Topic: ${t})`
|
|
222
|
+
: d === "medium"
|
|
223
|
+
? `If a DNA strand has the sequence 5'-ATCGGCTA-3', what is the complementary strand? What would the mRNA sequence be? (Topic: ${t})`
|
|
224
|
+
: `A gene has 900 base pairs. How many amino acids will the resulting protein have? Account for the start and stop codons. (Topic: ${t})`,
|
|
225
|
+
steps: (t, d) => {
|
|
226
|
+
if (d === "easy") {
|
|
227
|
+
return [
|
|
228
|
+
{ step_number: 1, description: "The four DNA bases are: Adenine (A), Thymine (T), Guanine (G), Cytosine (C)" },
|
|
229
|
+
{ step_number: 2, description: "Pairing rules: A pairs with T, G pairs with C", result: "A-T and G-C" },
|
|
230
|
+
];
|
|
231
|
+
}
|
|
232
|
+
if (d === "medium") {
|
|
233
|
+
return [
|
|
234
|
+
{ step_number: 1, description: "Apply complementary base pairing (A-T, G-C)", formula: "5'-ATCGGCTA-3' → 3'-TAGCCGAT-5'" },
|
|
235
|
+
{ step_number: 2, description: "For mRNA, use the template strand and replace T with U", formula: "mRNA: 5'-AUCGGCUA-3'" },
|
|
236
|
+
];
|
|
237
|
+
}
|
|
238
|
+
return [
|
|
239
|
+
{ step_number: 1, description: "900 base pairs = 900 nucleotides in mRNA" },
|
|
240
|
+
{ step_number: 2, description: "Each codon = 3 nucleotides", formula: "900 / 3 = 300 codons" },
|
|
241
|
+
{ step_number: 3, description: "Subtract 1 stop codon (not translated to amino acid)", formula: "300 - 1 = 299" },
|
|
242
|
+
{ step_number: 4, description: "The start codon (AUG) codes for methionine and IS counted", result: "299 amino acids (including the initial methionine)" },
|
|
243
|
+
];
|
|
244
|
+
},
|
|
245
|
+
answer: (t, d) => d === "easy" ? "A-T, G-C (Adenine-Thymine, Guanine-Cytosine)" : d === "medium" ? "Complement: 3'-TAGCCGAT-5', mRNA: 5'-AUCGGCUA-3'" : "299 amino acids",
|
|
246
|
+
hints: (t) => [
|
|
247
|
+
"Remember: A pairs with T (DNA) or U (RNA), G pairs with C.",
|
|
248
|
+
"mRNA is synthesized from the template (antisense) strand.",
|
|
249
|
+
"Every three nucleotides form one codon; the stop codon doesn't code for an amino acid.",
|
|
250
|
+
],
|
|
251
|
+
mistakes: (t) => [
|
|
252
|
+
"Confusing the template strand with the coding strand.",
|
|
253
|
+
"Forgetting to replace T with U when writing mRNA.",
|
|
254
|
+
"Including the stop codon in the amino acid count.",
|
|
255
|
+
],
|
|
256
|
+
skills: ["DNA structure", "Transcription", "Translation"],
|
|
257
|
+
},
|
|
258
|
+
];
|
|
259
|
+
const CS_TEMPLATES = [
|
|
260
|
+
{
|
|
261
|
+
problem: (t, d) => d === "easy"
|
|
262
|
+
? `Convert the decimal number 42 to binary. (Topic: ${t})`
|
|
263
|
+
: d === "medium"
|
|
264
|
+
? `What is the time complexity of binary search? Explain why. (Topic: ${t})`
|
|
265
|
+
: `Given an array [3, 1, 4, 1, 5, 9, 2, 6], trace through the merge sort algorithm and show each step. (Topic: ${t})`,
|
|
266
|
+
steps: (t, d) => {
|
|
267
|
+
if (d === "easy") {
|
|
268
|
+
return [
|
|
269
|
+
{ step_number: 1, description: "42 ÷ 2 = 21 remainder 0" },
|
|
270
|
+
{ step_number: 2, description: "21 ÷ 2 = 10 remainder 1" },
|
|
271
|
+
{ step_number: 3, description: "10 ÷ 2 = 5 remainder 0" },
|
|
272
|
+
{ step_number: 4, description: "5 ÷ 2 = 2 remainder 1" },
|
|
273
|
+
{ step_number: 5, description: "2 ÷ 2 = 1 remainder 0" },
|
|
274
|
+
{ step_number: 6, description: "1 ÷ 2 = 0 remainder 1" },
|
|
275
|
+
{ step_number: 7, description: "Read remainders bottom to top", result: "42 in binary = 101010" },
|
|
276
|
+
];
|
|
277
|
+
}
|
|
278
|
+
if (d === "medium") {
|
|
279
|
+
return [
|
|
280
|
+
{ step_number: 1, description: "Binary search halves the search space each step" },
|
|
281
|
+
{ step_number: 2, description: "After 1 step: n/2 elements. After 2 steps: n/4. After k steps: n/2^k" },
|
|
282
|
+
{ step_number: 3, description: "Search ends when n/2^k = 1, so k = log₂(n)", result: "Time complexity: O(log n)" },
|
|
283
|
+
];
|
|
284
|
+
}
|
|
285
|
+
return [
|
|
286
|
+
{ step_number: 1, description: "Split: [3,1,4,1] and [5,9,2,6]" },
|
|
287
|
+
{ step_number: 2, description: "Split: [3,1] [4,1] [5,9] [2,6]" },
|
|
288
|
+
{ step_number: 3, description: "Split: [3] [1] [4] [1] [5] [9] [2] [6]" },
|
|
289
|
+
{ step_number: 4, description: "Merge pairs: [1,3] [1,4] [5,9] [2,6]" },
|
|
290
|
+
{ step_number: 5, description: "Merge pairs: [1,1,3,4] [2,5,6,9]" },
|
|
291
|
+
{ step_number: 6, description: "Final merge", result: "[1,1,2,3,4,5,6,9]" },
|
|
292
|
+
];
|
|
293
|
+
},
|
|
294
|
+
answer: (t, d) => d === "easy" ? "101010" : d === "medium" ? "O(log n)" : "[1, 1, 2, 3, 4, 5, 6, 9]",
|
|
295
|
+
hints: (t) => [
|
|
296
|
+
"For binary conversion, repeatedly divide by 2 and track remainders.",
|
|
297
|
+
"For complexity analysis, think about how the problem size changes at each step.",
|
|
298
|
+
"Merge sort always splits first, then merges in sorted order.",
|
|
299
|
+
],
|
|
300
|
+
mistakes: (t) => [
|
|
301
|
+
"Reading binary remainders in the wrong order (top-to-bottom instead of bottom-to-top).",
|
|
302
|
+
"Confusing O(n) with O(log n) for halving algorithms.",
|
|
303
|
+
"Not maintaining sorted order during the merge step.",
|
|
304
|
+
],
|
|
305
|
+
skills: ["Number systems", "Algorithm analysis", "Sorting algorithms"],
|
|
306
|
+
},
|
|
307
|
+
];
|
|
308
|
+
const SUBJECT_TEMPLATES = {
|
|
309
|
+
math: MATH_TEMPLATES,
|
|
310
|
+
physics: PHYSICS_TEMPLATES,
|
|
311
|
+
chemistry: CHEMISTRY_TEMPLATES,
|
|
312
|
+
biology: BIOLOGY_TEMPLATES,
|
|
313
|
+
computer_science: CS_TEMPLATES,
|
|
314
|
+
};
|
|
315
|
+
// ── Main ───────────────────────────────────────────────────────────────────────
|
|
316
|
+
export function generateExercise(input) {
|
|
317
|
+
const topic = requireNonEmpty(input.topic, "topic");
|
|
318
|
+
const subject = input.subject;
|
|
319
|
+
const exerciseCount = clamp(input.exercise_count ?? 3, 1, 20);
|
|
320
|
+
const difficulty = input.difficulty ?? "medium";
|
|
321
|
+
const includeHints = input.include_hints ?? true;
|
|
322
|
+
const showSteps = input.show_steps ?? true;
|
|
323
|
+
const templates = SUBJECT_TEMPLATES[subject];
|
|
324
|
+
if (!templates || templates.length === 0) {
|
|
325
|
+
throw new Error(`No exercise templates available for subject: ${subject}`);
|
|
326
|
+
}
|
|
327
|
+
const exercises = [];
|
|
328
|
+
for (let i = 0; i < exerciseCount; i++) {
|
|
329
|
+
const tpl = templates[i % templates.length];
|
|
330
|
+
const steps = showSteps ? tpl.steps(topic, difficulty) : [];
|
|
331
|
+
const exercise = {
|
|
332
|
+
id: i + 1,
|
|
333
|
+
problem: tpl.problem(topic, difficulty),
|
|
334
|
+
subject,
|
|
335
|
+
difficulty,
|
|
336
|
+
solution: {
|
|
337
|
+
steps,
|
|
338
|
+
final_answer: tpl.answer(topic, difficulty),
|
|
339
|
+
},
|
|
340
|
+
hints: includeHints ? tpl.hints(topic) : [],
|
|
341
|
+
common_mistakes: tpl.mistakes(topic),
|
|
342
|
+
};
|
|
343
|
+
exercises.push(exercise);
|
|
344
|
+
}
|
|
345
|
+
// Collect all unique skills
|
|
346
|
+
const allSkills = new Set();
|
|
347
|
+
for (let i = 0; i < exerciseCount; i++) {
|
|
348
|
+
const tpl = templates[i % templates.length];
|
|
349
|
+
tpl.skills.forEach((s) => allSkills.add(s));
|
|
350
|
+
}
|
|
351
|
+
const estimatedMinutes = Math.ceil(exerciseCount * 5 * difficultyMultiplier(difficulty));
|
|
352
|
+
return {
|
|
353
|
+
topic,
|
|
354
|
+
subject,
|
|
355
|
+
exercise_count: exercises.length,
|
|
356
|
+
exercises,
|
|
357
|
+
metadata: {
|
|
358
|
+
generated_at: timestamp(),
|
|
359
|
+
estimated_completion_minutes: estimatedMinutes,
|
|
360
|
+
skills_practiced: Array.from(allSkills),
|
|
361
|
+
},
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=generate-exercise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-exercise.js","sourceRoot":"","sources":["../../src/tools/generate-exercise.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* generate_flashcards — Spaced repetition flashcard decks from a topic.
|
|
3
|
+
*
|
|
4
|
+
* Cards include front/back, optional hints, difficulty-tagged SR metadata,
|
|
5
|
+
* and a study schedule following the Leitner system.
|
|
6
|
+
*/
|
|
7
|
+
import type { GenerateFlashcardsInput, FlashcardDeckResult } from "../types.js";
|
|
8
|
+
export declare function generateFlashcards(input: GenerateFlashcardsInput): FlashcardDeckResult;
|
|
9
|
+
//# sourceMappingURL=generate-flashcards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-flashcards.d.ts","sourceRoot":"","sources":["../../src/tools/generate-flashcards.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EAGpB,MAAM,aAAa,CAAC;AAgGrB,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,mBAAmB,CAqDtF"}
|