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.
- package/dist/cjs/api/routes/analytics.js +288 -0
- package/dist/cjs/api/routes/analytics.js.map +1 -0
- package/dist/cjs/api/routes/assessments.js +269 -0
- package/dist/cjs/api/routes/assessments.js.map +1 -0
- package/dist/cjs/api/routes/curriculum.js +345 -0
- package/dist/cjs/api/routes/curriculum.js.map +1 -0
- package/dist/cjs/api/routes/edges.js +162 -0
- package/dist/cjs/api/routes/edges.js.map +1 -0
- package/dist/cjs/api/routes/explore.js +224 -0
- package/dist/cjs/api/routes/explore.js.map +1 -0
- package/dist/cjs/api/routes/learners.js +324 -0
- package/dist/cjs/api/routes/learners.js.map +1 -0
- package/dist/cjs/api/routes/me.js +404 -0
- package/dist/cjs/api/routes/me.js.map +1 -0
- package/dist/cjs/api/routes/skills.js +319 -0
- package/dist/cjs/api/routes/skills.js.map +1 -0
- package/dist/cjs/api/server.js +185 -0
- package/dist/cjs/api/server.js.map +1 -0
- package/dist/cjs/api/types.js +10 -0
- package/dist/cjs/api/types.js.map +1 -0
- package/dist/cjs/assessment/adaptive.js +390 -0
- package/dist/cjs/assessment/adaptive.js.map +1 -0
- package/dist/cjs/assessment/bkt.js +362 -0
- package/dist/cjs/assessment/bkt.js.map +1 -0
- package/dist/cjs/assessment/index.js +54 -0
- package/dist/cjs/assessment/index.js.map +1 -0
- package/dist/cjs/assessment/irt.js +420 -0
- package/dist/cjs/assessment/irt.js.map +1 -0
- package/dist/cjs/assessment/mastery-engine.js +411 -0
- package/dist/cjs/assessment/mastery-engine.js.map +1 -0
- package/dist/cjs/components/LearningPathView.js +320 -0
- package/dist/cjs/components/LearningPathView.js.map +1 -0
- package/dist/cjs/components/ProgressDashboard.js +308 -0
- package/dist/cjs/components/ProgressDashboard.js.map +1 -0
- package/dist/cjs/components/SkillCard.js +264 -0
- package/dist/cjs/components/SkillCard.js.map +1 -0
- package/dist/cjs/components/SkillExplorer.js +401 -0
- package/dist/cjs/components/SkillExplorer.js.map +1 -0
- package/dist/cjs/components/SkillGraph.js +435 -0
- package/dist/cjs/components/SkillGraph.js.map +1 -0
- package/dist/cjs/components/hooks.js +510 -0
- package/dist/cjs/components/hooks.js.map +1 -0
- package/dist/cjs/components/index.js +77 -0
- package/dist/cjs/components/index.js.map +1 -0
- package/dist/cjs/components/types.js +34 -0
- package/dist/cjs/components/types.js.map +1 -0
- package/dist/cjs/index.js +35 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/llm/adapters/anthropic.js +91 -3
- package/dist/cjs/llm/adapters/anthropic.js.map +1 -1
- package/dist/cjs/llm/adapters/gemini.js +101 -8
- package/dist/cjs/llm/adapters/gemini.js.map +1 -1
- package/dist/cjs/llm/adapters/index.js +42 -1
- package/dist/cjs/llm/adapters/index.js.map +1 -1
- package/dist/cjs/llm/adapters/ollama.js +120 -3
- package/dist/cjs/llm/adapters/ollama.js.map +1 -1
- package/dist/cjs/llm/adapters/openai.js +108 -2
- package/dist/cjs/llm/adapters/openai.js.map +1 -1
- package/dist/cjs/mcp/cli.js +302 -0
- package/dist/cjs/mcp/cli.js.map +1 -0
- package/dist/cjs/mcp/index.js +79 -0
- package/dist/cjs/mcp/index.js.map +1 -0
- package/dist/cjs/mcp/prompts.js +425 -0
- package/dist/cjs/mcp/prompts.js.map +1 -0
- package/dist/cjs/mcp/resources.js +371 -0
- package/dist/cjs/mcp/resources.js.map +1 -0
- package/dist/cjs/mcp/server.js +410 -0
- package/dist/cjs/mcp/server.js.map +1 -0
- package/dist/cjs/mcp/tools.js +612 -0
- package/dist/cjs/mcp/tools.js.map +1 -0
- package/dist/cjs/mcp/types.js +10 -0
- package/dist/cjs/mcp/types.js.map +1 -0
- package/dist/cjs/types/assessment.js +46 -0
- package/dist/cjs/types/assessment.js.map +1 -0
- package/dist/cjs/types/bloom.js +12 -1
- package/dist/cjs/types/bloom.js.map +1 -1
- package/dist/cjs/types/index.js +7 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/esm/api/routes/analytics.js +285 -0
- package/dist/esm/api/routes/analytics.js.map +1 -0
- package/dist/esm/api/routes/assessments.js +266 -0
- package/dist/esm/api/routes/assessments.js.map +1 -0
- package/dist/esm/api/routes/curriculum.js +342 -0
- package/dist/esm/api/routes/curriculum.js.map +1 -0
- package/dist/esm/api/routes/edges.js +159 -0
- package/dist/esm/api/routes/edges.js.map +1 -0
- package/dist/esm/api/routes/explore.js +221 -0
- package/dist/esm/api/routes/explore.js.map +1 -0
- package/dist/esm/api/routes/learners.js +321 -0
- package/dist/esm/api/routes/learners.js.map +1 -0
- package/dist/esm/api/routes/me.js +401 -0
- package/dist/esm/api/routes/me.js.map +1 -0
- package/dist/esm/api/routes/skills.js +316 -0
- package/dist/esm/api/routes/skills.js.map +1 -0
- package/dist/esm/api/server.js +179 -0
- package/dist/esm/api/server.js.map +1 -0
- package/dist/esm/api/types.js +9 -0
- package/dist/esm/api/types.js.map +1 -0
- package/dist/esm/assessment/adaptive.js +384 -0
- package/dist/esm/assessment/adaptive.js.map +1 -0
- package/dist/esm/assessment/bkt.js +354 -0
- package/dist/esm/assessment/bkt.js.map +1 -0
- package/dist/esm/assessment/index.js +21 -0
- package/dist/esm/assessment/index.js.map +1 -0
- package/dist/esm/assessment/irt.js +406 -0
- package/dist/esm/assessment/irt.js.map +1 -0
- package/dist/esm/assessment/mastery-engine.js +406 -0
- package/dist/esm/assessment/mastery-engine.js.map +1 -0
- package/dist/esm/components/LearningPathView.js +316 -0
- package/dist/esm/components/LearningPathView.js.map +1 -0
- package/dist/esm/components/ProgressDashboard.js +304 -0
- package/dist/esm/components/ProgressDashboard.js.map +1 -0
- package/dist/esm/components/SkillCard.js +260 -0
- package/dist/esm/components/SkillCard.js.map +1 -0
- package/dist/esm/components/SkillExplorer.js +397 -0
- package/dist/esm/components/SkillExplorer.js.map +1 -0
- package/dist/esm/components/SkillGraph.js +398 -0
- package/dist/esm/components/SkillGraph.js.map +1 -0
- package/dist/esm/components/hooks.js +502 -0
- package/dist/esm/components/hooks.js.map +1 -0
- package/dist/esm/components/index.js +61 -0
- package/dist/esm/components/index.js.map +1 -0
- package/dist/esm/components/types.js +31 -0
- package/dist/esm/components/types.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/llm/adapters/anthropic.js +88 -2
- package/dist/esm/llm/adapters/anthropic.js.map +1 -1
- package/dist/esm/llm/adapters/gemini.js +98 -7
- package/dist/esm/llm/adapters/gemini.js.map +1 -1
- package/dist/esm/llm/adapters/index.js +15 -4
- package/dist/esm/llm/adapters/index.js.map +1 -1
- package/dist/esm/llm/adapters/ollama.js +117 -2
- package/dist/esm/llm/adapters/ollama.js.map +1 -1
- package/dist/esm/llm/adapters/openai.js +105 -1
- package/dist/esm/llm/adapters/openai.js.map +1 -1
- package/dist/esm/mcp/cli.js +267 -0
- package/dist/esm/mcp/cli.js.map +1 -0
- package/dist/esm/mcp/index.js +39 -0
- package/dist/esm/mcp/index.js.map +1 -0
- package/dist/esm/mcp/prompts.js +419 -0
- package/dist/esm/mcp/prompts.js.map +1 -0
- package/dist/esm/mcp/resources.js +359 -0
- package/dist/esm/mcp/resources.js.map +1 -0
- package/dist/esm/mcp/server.js +372 -0
- package/dist/esm/mcp/server.js.map +1 -0
- package/dist/esm/mcp/tools.js +598 -0
- package/dist/esm/mcp/tools.js.map +1 -0
- package/dist/esm/mcp/types.js +9 -0
- package/dist/esm/mcp/types.js.map +1 -0
- package/dist/esm/types/assessment.js +40 -0
- package/dist/esm/types/assessment.js.map +1 -0
- package/dist/esm/types/bloom.js +11 -0
- package/dist/esm/types/bloom.js.map +1 -1
- package/dist/esm/types/index.js +2 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/types/api/routes/analytics.d.ts +14 -0
- package/dist/types/api/routes/analytics.d.ts.map +1 -0
- package/dist/types/api/routes/assessments.d.ts +14 -0
- package/dist/types/api/routes/assessments.d.ts.map +1 -0
- package/dist/types/api/routes/curriculum.d.ts +14 -0
- package/dist/types/api/routes/curriculum.d.ts.map +1 -0
- package/dist/types/api/routes/edges.d.ts +14 -0
- package/dist/types/api/routes/edges.d.ts.map +1 -0
- package/dist/types/api/routes/explore.d.ts +14 -0
- package/dist/types/api/routes/explore.d.ts.map +1 -0
- package/dist/types/api/routes/learners.d.ts +14 -0
- package/dist/types/api/routes/learners.d.ts.map +1 -0
- package/dist/types/api/routes/me.d.ts +14 -0
- package/dist/types/api/routes/me.d.ts.map +1 -0
- package/dist/types/api/routes/skills.d.ts +14 -0
- package/dist/types/api/routes/skills.d.ts.map +1 -0
- package/dist/types/api/server.d.ts +147 -0
- package/dist/types/api/server.d.ts.map +1 -0
- package/dist/types/api/types.d.ts +443 -0
- package/dist/types/api/types.d.ts.map +1 -0
- package/dist/types/assessment/adaptive.d.ts +155 -0
- package/dist/types/assessment/adaptive.d.ts.map +1 -0
- package/dist/types/assessment/bkt.d.ts +185 -0
- package/dist/types/assessment/bkt.d.ts.map +1 -0
- package/dist/types/assessment/index.d.ts +18 -0
- package/dist/types/assessment/index.d.ts.map +1 -0
- package/dist/types/assessment/irt.d.ts +159 -0
- package/dist/types/assessment/irt.d.ts.map +1 -0
- package/dist/types/assessment/mastery-engine.d.ts +178 -0
- package/dist/types/assessment/mastery-engine.d.ts.map +1 -0
- package/dist/types/components/LearningPathView.d.ts +40 -0
- package/dist/types/components/LearningPathView.d.ts.map +1 -0
- package/dist/types/components/ProgressDashboard.d.ts +49 -0
- package/dist/types/components/ProgressDashboard.d.ts.map +1 -0
- package/dist/types/components/SkillCard.d.ts +34 -0
- package/dist/types/components/SkillCard.d.ts.map +1 -0
- package/dist/types/components/SkillExplorer.d.ts +39 -0
- package/dist/types/components/SkillExplorer.d.ts.map +1 -0
- package/dist/types/components/SkillGraph.d.ts +38 -0
- package/dist/types/components/SkillGraph.d.ts.map +1 -0
- package/dist/types/components/hooks.d.ts +187 -0
- package/dist/types/components/hooks.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +59 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/types/components/types.d.ts +410 -0
- package/dist/types/components/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/llm/adapters/anthropic.d.ts +84 -1
- package/dist/types/llm/adapters/anthropic.d.ts.map +1 -1
- package/dist/types/llm/adapters/gemini.d.ts +93 -6
- package/dist/types/llm/adapters/gemini.d.ts.map +1 -1
- package/dist/types/llm/adapters/index.d.ts +13 -4
- package/dist/types/llm/adapters/index.d.ts.map +1 -1
- package/dist/types/llm/adapters/ollama.d.ts +126 -1
- package/dist/types/llm/adapters/ollama.d.ts.map +1 -1
- package/dist/types/llm/adapters/openai.d.ts +104 -1
- package/dist/types/llm/adapters/openai.d.ts.map +1 -1
- package/dist/types/mcp/cli.d.ts +15 -0
- package/dist/types/mcp/cli.d.ts.map +1 -0
- package/dist/types/mcp/index.d.ts +32 -0
- package/dist/types/mcp/index.d.ts.map +1 -0
- package/dist/types/mcp/prompts.d.ts +27 -0
- package/dist/types/mcp/prompts.d.ts.map +1 -0
- package/dist/types/mcp/resources.d.ts +59 -0
- package/dist/types/mcp/resources.d.ts.map +1 -0
- package/dist/types/mcp/server.d.ts +136 -0
- package/dist/types/mcp/server.d.ts.map +1 -0
- package/dist/types/mcp/tools.d.ts +344 -0
- package/dist/types/mcp/tools.d.ts.map +1 -0
- package/dist/types/mcp/types.d.ts +137 -0
- package/dist/types/mcp/types.d.ts.map +1 -0
- package/dist/types/types/assessment.d.ts +512 -0
- package/dist/types/types/assessment.d.ts.map +1 -0
- package/dist/types/types/bloom.d.ts +4 -0
- package/dist/types/types/bloom.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +3 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/package.json +48 -3
|
@@ -2,12 +2,90 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* OpenAI adapter for LLM integration
|
|
4
4
|
*
|
|
5
|
+
* Supports all OpenAI models including GPT-5, o3, and GPT-4.1 families.
|
|
6
|
+
*
|
|
5
7
|
* @packageDocumentation
|
|
6
8
|
*/
|
|
7
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.OpenAIAdapter = void 0;
|
|
10
|
+
exports.OpenAIAdapter = exports.OPENAI_MODELS = exports.GPT_4_LEGACY_MODELS = exports.GPT_4O_MODELS = exports.GPT_4_1_MODELS = exports.O_SERIES_MODELS = exports.GPT_5_MODELS = void 0;
|
|
11
|
+
exports.resolveOpenAIModel = resolveOpenAIModel;
|
|
9
12
|
exports.createOpenAIAdapter = createOpenAIAdapter;
|
|
13
|
+
exports.listOpenAIModels = listOpenAIModels;
|
|
10
14
|
const base_js_1 = require("./base.js");
|
|
15
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
16
|
+
// OpenAI Model Registry
|
|
17
|
+
// Models are updated frequently - use any valid model ID string.
|
|
18
|
+
// These constants are provided for convenience but you can use any model.
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* GPT-5 Models (Latest - 2025)
|
|
22
|
+
* - gpt-5: Flagship model for general-purpose and agentic use
|
|
23
|
+
* - gpt-5-mini: Smaller, faster version
|
|
24
|
+
* - gpt-5-nano: Smallest, most cost-effective
|
|
25
|
+
*/
|
|
26
|
+
exports.GPT_5_MODELS = {
|
|
27
|
+
'gpt-5': 'gpt-5',
|
|
28
|
+
'gpt-5-mini': 'gpt-5-mini',
|
|
29
|
+
'gpt-5-nano': 'gpt-5-nano',
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* o-Series Reasoning Models (Latest - 2025)
|
|
33
|
+
* - o3: Most powerful reasoning model
|
|
34
|
+
* - o3-pro: Extended thinking for complex tasks
|
|
35
|
+
* - o4-mini: Fast, cost-efficient reasoning
|
|
36
|
+
*/
|
|
37
|
+
exports.O_SERIES_MODELS = {
|
|
38
|
+
'o3': 'o3',
|
|
39
|
+
'o3-pro': 'o3-pro',
|
|
40
|
+
'o4-mini': 'o4-mini',
|
|
41
|
+
'o1': 'o1', // Previous generation
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* GPT-4.1 Models (2025)
|
|
45
|
+
* - Major gains in coding and instruction following
|
|
46
|
+
* - Up to 1M token context
|
|
47
|
+
*/
|
|
48
|
+
exports.GPT_4_1_MODELS = {
|
|
49
|
+
'gpt-4.1': 'gpt-4.1',
|
|
50
|
+
'gpt-4.1-mini': 'gpt-4.1-mini',
|
|
51
|
+
'gpt-4.1-nano': 'gpt-4.1-nano',
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* GPT-4o Models (2024-2025)
|
|
55
|
+
* - Optimized for speed and multimodal
|
|
56
|
+
*/
|
|
57
|
+
exports.GPT_4O_MODELS = {
|
|
58
|
+
'gpt-4o': 'gpt-4o',
|
|
59
|
+
'gpt-4o-mini': 'gpt-4o-mini',
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Legacy GPT-4 Models
|
|
63
|
+
*/
|
|
64
|
+
exports.GPT_4_LEGACY_MODELS = {
|
|
65
|
+
'gpt-4-turbo': 'gpt-4-turbo',
|
|
66
|
+
'gpt-4': 'gpt-4',
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* All available OpenAI models
|
|
70
|
+
*/
|
|
71
|
+
exports.OPENAI_MODELS = {
|
|
72
|
+
...exports.GPT_5_MODELS,
|
|
73
|
+
...exports.O_SERIES_MODELS,
|
|
74
|
+
...exports.GPT_4_1_MODELS,
|
|
75
|
+
...exports.GPT_4O_MODELS,
|
|
76
|
+
...exports.GPT_4_LEGACY_MODELS,
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Resolve a model alias or ID to the full model ID
|
|
80
|
+
*/
|
|
81
|
+
function resolveOpenAIModel(modelOrAlias) {
|
|
82
|
+
// Check if it's an alias
|
|
83
|
+
if (modelOrAlias in exports.OPENAI_MODELS) {
|
|
84
|
+
return exports.OPENAI_MODELS[modelOrAlias];
|
|
85
|
+
}
|
|
86
|
+
// Otherwise return as-is (allows using any model ID directly)
|
|
87
|
+
return modelOrAlias;
|
|
88
|
+
}
|
|
11
89
|
/**
|
|
12
90
|
* OpenAI adapter for chat completions
|
|
13
91
|
*/
|
|
@@ -110,12 +188,31 @@ class OpenAIAdapter extends base_js_1.BaseLLMAdapter {
|
|
|
110
188
|
exports.OpenAIAdapter = OpenAIAdapter;
|
|
111
189
|
/**
|
|
112
190
|
* Create an OpenAI adapter from environment variables
|
|
191
|
+
*
|
|
192
|
+
* @param model - Model ID or alias (e.g., 'gpt-5', 'o3', 'gpt-4.1', 'gpt-4o')
|
|
193
|
+
* Use aliases for convenience or full model IDs for specific versions.
|
|
194
|
+
* Any valid OpenAI model ID will work - not limited to the aliases.
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* // Using current flagship model
|
|
199
|
+
* const adapter = createOpenAIAdapter('gpt-5');
|
|
200
|
+
*
|
|
201
|
+
* // Using reasoning model for complex tasks
|
|
202
|
+
* const adapter = createOpenAIAdapter('o3');
|
|
203
|
+
*
|
|
204
|
+
* // Using fast, cost-effective reasoning
|
|
205
|
+
* const adapter = createOpenAIAdapter('o4-mini');
|
|
206
|
+
*
|
|
207
|
+
* // Using a future model (when released)
|
|
208
|
+
* const adapter = createOpenAIAdapter('gpt-6');
|
|
209
|
+
* ```
|
|
113
210
|
*/
|
|
114
211
|
function createOpenAIAdapter(model = 'gpt-4o', overrides) {
|
|
115
212
|
const apiKey = typeof process !== 'undefined' ? process.env.OPENAI_API_KEY : undefined;
|
|
116
213
|
const config = {
|
|
117
214
|
provider: 'openai',
|
|
118
|
-
model,
|
|
215
|
+
model: resolveOpenAIModel(model),
|
|
119
216
|
...overrides,
|
|
120
217
|
};
|
|
121
218
|
if (apiKey) {
|
|
@@ -123,4 +220,13 @@ function createOpenAIAdapter(model = 'gpt-4o', overrides) {
|
|
|
123
220
|
}
|
|
124
221
|
return new OpenAIAdapter(config);
|
|
125
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* List all available OpenAI model aliases
|
|
225
|
+
*/
|
|
226
|
+
function listOpenAIModels() {
|
|
227
|
+
return Object.entries(exports.OPENAI_MODELS).map(([alias, modelId]) => ({
|
|
228
|
+
alias,
|
|
229
|
+
modelId,
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
126
232
|
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/llm/adapters/openai.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/llm/adapters/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* LearnGraph MCP Server CLI
|
|
5
|
+
*
|
|
6
|
+
* Command-line interface for running the LearnGraph MCP server.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx learngraph-mcp # Run with in-memory storage
|
|
10
|
+
* npx learngraph-mcp --neo4j <uri> # Run with Neo4j backend
|
|
11
|
+
* npx learngraph-mcp --level <path> # Run with LevelGraph backend
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
const server_js_1 = require("./server.js");
|
|
50
|
+
const memory_js_1 = require("../storage/memory.js");
|
|
51
|
+
function parseArgs(args) {
|
|
52
|
+
const options = {
|
|
53
|
+
backend: 'memory',
|
|
54
|
+
debug: false,
|
|
55
|
+
help: false,
|
|
56
|
+
};
|
|
57
|
+
for (let i = 0; i < args.length; i++) {
|
|
58
|
+
const arg = args[i];
|
|
59
|
+
switch (arg) {
|
|
60
|
+
case '-h':
|
|
61
|
+
case '--help':
|
|
62
|
+
options.help = true;
|
|
63
|
+
break;
|
|
64
|
+
case '-d':
|
|
65
|
+
case '--debug':
|
|
66
|
+
options.debug = true;
|
|
67
|
+
break;
|
|
68
|
+
case '--neo4j': {
|
|
69
|
+
options.backend = 'neo4j';
|
|
70
|
+
const nextArg = args[i + 1];
|
|
71
|
+
if (nextArg !== undefined && !nextArg.startsWith('-')) {
|
|
72
|
+
options.neo4jUri = nextArg;
|
|
73
|
+
i++;
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case '--neo4j-user': {
|
|
78
|
+
const nextArg = args[i + 1];
|
|
79
|
+
if (nextArg !== undefined) {
|
|
80
|
+
options.neo4jUser = nextArg;
|
|
81
|
+
i++;
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
case '--neo4j-password': {
|
|
86
|
+
const nextArg = args[i + 1];
|
|
87
|
+
if (nextArg !== undefined) {
|
|
88
|
+
options.neo4jPassword = nextArg;
|
|
89
|
+
i++;
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case '--level':
|
|
94
|
+
case '--levelgraph': {
|
|
95
|
+
options.backend = 'levelgraph';
|
|
96
|
+
const nextArg = args[i + 1];
|
|
97
|
+
if (nextArg !== undefined && !nextArg.startsWith('-')) {
|
|
98
|
+
options.levelPath = nextArg;
|
|
99
|
+
i++;
|
|
100
|
+
}
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case '--memory':
|
|
104
|
+
options.backend = 'memory';
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return options;
|
|
109
|
+
}
|
|
110
|
+
function printHelp() {
|
|
111
|
+
console.error(`
|
|
112
|
+
LearnGraph MCP Server
|
|
113
|
+
|
|
114
|
+
An MCP server that provides educational knowledge graph capabilities to Claude.
|
|
115
|
+
|
|
116
|
+
USAGE:
|
|
117
|
+
learngraph-mcp [OPTIONS]
|
|
118
|
+
|
|
119
|
+
OPTIONS:
|
|
120
|
+
-h, --help Show this help message
|
|
121
|
+
-d, --debug Enable debug logging
|
|
122
|
+
|
|
123
|
+
--memory Use in-memory storage (default)
|
|
124
|
+
--neo4j <uri> Use Neo4j storage
|
|
125
|
+
--neo4j-user <user> Neo4j username (default: neo4j)
|
|
126
|
+
--neo4j-password <pwd> Neo4j password
|
|
127
|
+
--level <path> Use LevelGraph storage
|
|
128
|
+
|
|
129
|
+
ENVIRONMENT VARIABLES:
|
|
130
|
+
NEO4J_URI Neo4j connection URI
|
|
131
|
+
NEO4J_USER Neo4j username
|
|
132
|
+
NEO4J_PASSWORD Neo4j password
|
|
133
|
+
LEARNGRAPH_DEBUG Enable debug logging (1 or true)
|
|
134
|
+
|
|
135
|
+
EXAMPLES:
|
|
136
|
+
# Run with in-memory storage
|
|
137
|
+
learngraph-mcp
|
|
138
|
+
|
|
139
|
+
# Run with Neo4j
|
|
140
|
+
learngraph-mcp --neo4j bolt://localhost:7687 --neo4j-password secret
|
|
141
|
+
|
|
142
|
+
# Run with LevelGraph (file-based)
|
|
143
|
+
learngraph-mcp --level ./my-graph
|
|
144
|
+
|
|
145
|
+
CLAUDE DESKTOP CONFIGURATION:
|
|
146
|
+
Add to claude_desktop_config.json:
|
|
147
|
+
{
|
|
148
|
+
"mcpServers": {
|
|
149
|
+
"learngraph": {
|
|
150
|
+
"command": "npx",
|
|
151
|
+
"args": ["learngraph-mcp"]
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
AVAILABLE TOOLS:
|
|
157
|
+
list_skills List all skills in the knowledge graph
|
|
158
|
+
get_skill Get detailed skill information
|
|
159
|
+
create_skill Create a new skill
|
|
160
|
+
search_skills Search skills by name/description
|
|
161
|
+
get_prerequisites Get prerequisite skills
|
|
162
|
+
get_dependents Get dependent skills
|
|
163
|
+
get_learning_path Generate a learning path
|
|
164
|
+
get_zpd_skills Get skills in the Zone of Proximal Development
|
|
165
|
+
create_prerequisite Create a prerequisite relationship
|
|
166
|
+
get_graph_stats Get graph statistics
|
|
167
|
+
validate_curriculum Validate curriculum structure
|
|
168
|
+
|
|
169
|
+
AVAILABLE RESOURCES:
|
|
170
|
+
learngraph://curriculum/overview Curriculum overview
|
|
171
|
+
learngraph://curriculum/skills All skills
|
|
172
|
+
learngraph://curriculum/edges All prerequisites
|
|
173
|
+
learngraph://curriculum/skills/{id} Specific skill
|
|
174
|
+
learngraph://curriculum/bloom/{lvl} Skills by Bloom level
|
|
175
|
+
learngraph://curriculum/tags All tags
|
|
176
|
+
learngraph://curriculum/export Full export
|
|
177
|
+
|
|
178
|
+
AVAILABLE PROMPTS:
|
|
179
|
+
analyze_syllabus Extract skills from a syllabus
|
|
180
|
+
generate_learning_path Create a personalized learning path
|
|
181
|
+
identify_prerequisites Map prerequisite relationships
|
|
182
|
+
zpd_recommendations Get ZPD-based skill recommendations
|
|
183
|
+
curriculum_validation Validate curriculum structure
|
|
184
|
+
gap_analysis Analyze competency gaps
|
|
185
|
+
create_assessment Generate skill assessments
|
|
186
|
+
explain_concept Multi-level concept explanations
|
|
187
|
+
`);
|
|
188
|
+
}
|
|
189
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
190
|
+
// Storage Factory
|
|
191
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
192
|
+
async function createStorage(options) {
|
|
193
|
+
const debug = options.debug || process.env.LEARNGRAPH_DEBUG === '1' || process.env.LEARNGRAPH_DEBUG === 'true';
|
|
194
|
+
if (debug) {
|
|
195
|
+
console.error('[LearnGraph MCP] Creating storage...');
|
|
196
|
+
}
|
|
197
|
+
switch (options.backend) {
|
|
198
|
+
case 'neo4j': {
|
|
199
|
+
const uri = options.neo4jUri || process.env.NEO4J_URI || 'bolt://localhost:7687';
|
|
200
|
+
const user = options.neo4jUser || process.env.NEO4J_USER || 'neo4j';
|
|
201
|
+
const password = options.neo4jPassword || process.env.NEO4J_PASSWORD;
|
|
202
|
+
if (!password) {
|
|
203
|
+
console.error('Error: Neo4j password required. Use --neo4j-password or NEO4J_PASSWORD env var.');
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
const { Neo4jStorage } = await Promise.resolve().then(() => __importStar(require('../storage/neo4j.js')));
|
|
208
|
+
const storage = new Neo4jStorage();
|
|
209
|
+
await storage.connect({
|
|
210
|
+
backend: 'neo4j',
|
|
211
|
+
uri,
|
|
212
|
+
username: user,
|
|
213
|
+
password,
|
|
214
|
+
});
|
|
215
|
+
if (debug) {
|
|
216
|
+
console.error(`[LearnGraph MCP] Connected to Neo4j at ${uri}`);
|
|
217
|
+
}
|
|
218
|
+
return storage;
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
console.error('Error: Neo4j driver not installed. Run: npm install neo4j-driver');
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
case 'levelgraph': {
|
|
226
|
+
const path = options.levelPath;
|
|
227
|
+
try {
|
|
228
|
+
const { LevelGraphStorage } = await Promise.resolve().then(() => __importStar(require('../storage/levelgraph.js')));
|
|
229
|
+
const storage = new LevelGraphStorage();
|
|
230
|
+
const config = { backend: 'levelgraph' };
|
|
231
|
+
if (path) {
|
|
232
|
+
config.path = path;
|
|
233
|
+
}
|
|
234
|
+
await storage.connect(config);
|
|
235
|
+
if (debug) {
|
|
236
|
+
console.error(`[LearnGraph MCP] LevelGraph storage${path ? ` at ${path}` : ' (in-memory)'}`);
|
|
237
|
+
}
|
|
238
|
+
return storage;
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
console.error('Error: LevelGraph not installed. Run: npm install level levelgraph');
|
|
242
|
+
process.exit(1);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
case 'memory':
|
|
246
|
+
default: {
|
|
247
|
+
const storage = new memory_js_1.MemoryStorage();
|
|
248
|
+
await storage.connect({ backend: 'memory' });
|
|
249
|
+
if (debug) {
|
|
250
|
+
console.error('[LearnGraph MCP] Using in-memory storage');
|
|
251
|
+
}
|
|
252
|
+
return storage;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
257
|
+
// Main
|
|
258
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
259
|
+
async function main() {
|
|
260
|
+
const options = parseArgs(process.argv.slice(2));
|
|
261
|
+
if (options.help) {
|
|
262
|
+
printHelp();
|
|
263
|
+
process.exit(0);
|
|
264
|
+
}
|
|
265
|
+
const debug = options.debug || process.env.LEARNGRAPH_DEBUG === '1' || process.env.LEARNGRAPH_DEBUG === 'true';
|
|
266
|
+
try {
|
|
267
|
+
// Create storage
|
|
268
|
+
const storage = await createStorage(options);
|
|
269
|
+
// Create and start MCP server
|
|
270
|
+
const server = new server_js_1.LearnGraphMcpServer({
|
|
271
|
+
storage,
|
|
272
|
+
debug,
|
|
273
|
+
});
|
|
274
|
+
await server.start();
|
|
275
|
+
if (debug) {
|
|
276
|
+
console.error('[LearnGraph MCP] Server running. Waiting for MCP client connection...');
|
|
277
|
+
}
|
|
278
|
+
// Handle graceful shutdown
|
|
279
|
+
process.on('SIGINT', () => {
|
|
280
|
+
if (debug) {
|
|
281
|
+
console.error('[LearnGraph MCP] Shutting down...');
|
|
282
|
+
}
|
|
283
|
+
process.exit(0);
|
|
284
|
+
});
|
|
285
|
+
process.on('SIGTERM', () => {
|
|
286
|
+
if (debug) {
|
|
287
|
+
console.error('[LearnGraph MCP] Shutting down...');
|
|
288
|
+
}
|
|
289
|
+
process.exit(0);
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
console.error('Error starting MCP server:', err instanceof Error ? err.message : err);
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// Run if executed directly
|
|
298
|
+
main().catch((err) => {
|
|
299
|
+
console.error('Fatal error:', err);
|
|
300
|
+
process.exit(1);
|
|
301
|
+
});
|
|
302
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/mcp/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LearnGraph MCP Server Module
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol integration for Claude.
|
|
6
|
+
* Provides tools, resources, and prompts for educational knowledge graphs.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { LearnGraphMcpServer, startMcpServer } from 'learngraph/mcp';
|
|
13
|
+
* import { MemoryStorage } from 'learngraph/storage';
|
|
14
|
+
*
|
|
15
|
+
* // Create storage
|
|
16
|
+
* const storage = new MemoryStorage();
|
|
17
|
+
* await storage.connect({ backend: 'memory' });
|
|
18
|
+
*
|
|
19
|
+
* // Option 1: Quick start
|
|
20
|
+
* await startMcpServer({ storage });
|
|
21
|
+
*
|
|
22
|
+
* // Option 2: Full control
|
|
23
|
+
* const server = new LearnGraphMcpServer({ storage });
|
|
24
|
+
* console.log(server.listTools());
|
|
25
|
+
* await server.start();
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.getPromptDefinition = exports.renderPrompt = exports.getPromptMetas = exports.PROMPT_DEFINITIONS = exports.getFullExport = exports.getAllTags = exports.getSkillsByBloomLevel = exports.getSkillById = exports.getAllEdges = exports.getAllSkills = exports.getCurriculumOverview = exports.resolveResource = exports.listResources = exports.getResourceTemplates = exports.validateCurriculum = exports.getGraphStats = exports.createPrerequisite = exports.getZpdSkills = exports.getLearningPath = exports.getDependents = exports.getPrerequisites = exports.searchSkills = exports.createSkill = exports.getSkill = exports.listSkills = exports.ValidateCurriculumSchema = exports.GetGraphStatsSchema = exports.CreatePrerequisiteSchema = exports.GetZpdSkillsSchema = exports.GetLearningPathSchema = exports.GetDependentsSchema = exports.GetPrerequisitesSchema = exports.SearchSkillsSchema = exports.CreateSkillSchema = exports.GetSkillSchema = exports.ListSkillsSchema = exports.TOOL_DEFINITIONS = exports.startMcpServer = exports.LearnGraphMcpServer = void 0;
|
|
30
|
+
// Server
|
|
31
|
+
var server_js_1 = require("./server.js");
|
|
32
|
+
Object.defineProperty(exports, "LearnGraphMcpServer", { enumerable: true, get: function () { return server_js_1.LearnGraphMcpServer; } });
|
|
33
|
+
Object.defineProperty(exports, "startMcpServer", { enumerable: true, get: function () { return server_js_1.startMcpServer; } });
|
|
34
|
+
// Tools
|
|
35
|
+
var tools_js_1 = require("./tools.js");
|
|
36
|
+
Object.defineProperty(exports, "TOOL_DEFINITIONS", { enumerable: true, get: function () { return tools_js_1.TOOL_DEFINITIONS; } });
|
|
37
|
+
// Individual tool schemas for advanced usage
|
|
38
|
+
Object.defineProperty(exports, "ListSkillsSchema", { enumerable: true, get: function () { return tools_js_1.ListSkillsSchema; } });
|
|
39
|
+
Object.defineProperty(exports, "GetSkillSchema", { enumerable: true, get: function () { return tools_js_1.GetSkillSchema; } });
|
|
40
|
+
Object.defineProperty(exports, "CreateSkillSchema", { enumerable: true, get: function () { return tools_js_1.CreateSkillSchema; } });
|
|
41
|
+
Object.defineProperty(exports, "SearchSkillsSchema", { enumerable: true, get: function () { return tools_js_1.SearchSkillsSchema; } });
|
|
42
|
+
Object.defineProperty(exports, "GetPrerequisitesSchema", { enumerable: true, get: function () { return tools_js_1.GetPrerequisitesSchema; } });
|
|
43
|
+
Object.defineProperty(exports, "GetDependentsSchema", { enumerable: true, get: function () { return tools_js_1.GetDependentsSchema; } });
|
|
44
|
+
Object.defineProperty(exports, "GetLearningPathSchema", { enumerable: true, get: function () { return tools_js_1.GetLearningPathSchema; } });
|
|
45
|
+
Object.defineProperty(exports, "GetZpdSkillsSchema", { enumerable: true, get: function () { return tools_js_1.GetZpdSkillsSchema; } });
|
|
46
|
+
Object.defineProperty(exports, "CreatePrerequisiteSchema", { enumerable: true, get: function () { return tools_js_1.CreatePrerequisiteSchema; } });
|
|
47
|
+
Object.defineProperty(exports, "GetGraphStatsSchema", { enumerable: true, get: function () { return tools_js_1.GetGraphStatsSchema; } });
|
|
48
|
+
Object.defineProperty(exports, "ValidateCurriculumSchema", { enumerable: true, get: function () { return tools_js_1.ValidateCurriculumSchema; } });
|
|
49
|
+
// Individual tool handlers for testing
|
|
50
|
+
Object.defineProperty(exports, "listSkills", { enumerable: true, get: function () { return tools_js_1.listSkills; } });
|
|
51
|
+
Object.defineProperty(exports, "getSkill", { enumerable: true, get: function () { return tools_js_1.getSkill; } });
|
|
52
|
+
Object.defineProperty(exports, "createSkill", { enumerable: true, get: function () { return tools_js_1.createSkill; } });
|
|
53
|
+
Object.defineProperty(exports, "searchSkills", { enumerable: true, get: function () { return tools_js_1.searchSkills; } });
|
|
54
|
+
Object.defineProperty(exports, "getPrerequisites", { enumerable: true, get: function () { return tools_js_1.getPrerequisites; } });
|
|
55
|
+
Object.defineProperty(exports, "getDependents", { enumerable: true, get: function () { return tools_js_1.getDependents; } });
|
|
56
|
+
Object.defineProperty(exports, "getLearningPath", { enumerable: true, get: function () { return tools_js_1.getLearningPath; } });
|
|
57
|
+
Object.defineProperty(exports, "getZpdSkills", { enumerable: true, get: function () { return tools_js_1.getZpdSkills; } });
|
|
58
|
+
Object.defineProperty(exports, "createPrerequisite", { enumerable: true, get: function () { return tools_js_1.createPrerequisite; } });
|
|
59
|
+
Object.defineProperty(exports, "getGraphStats", { enumerable: true, get: function () { return tools_js_1.getGraphStats; } });
|
|
60
|
+
Object.defineProperty(exports, "validateCurriculum", { enumerable: true, get: function () { return tools_js_1.validateCurriculum; } });
|
|
61
|
+
// Resources
|
|
62
|
+
var resources_js_1 = require("./resources.js");
|
|
63
|
+
Object.defineProperty(exports, "getResourceTemplates", { enumerable: true, get: function () { return resources_js_1.getResourceTemplates; } });
|
|
64
|
+
Object.defineProperty(exports, "listResources", { enumerable: true, get: function () { return resources_js_1.listResources; } });
|
|
65
|
+
Object.defineProperty(exports, "resolveResource", { enumerable: true, get: function () { return resources_js_1.resolveResource; } });
|
|
66
|
+
Object.defineProperty(exports, "getCurriculumOverview", { enumerable: true, get: function () { return resources_js_1.getCurriculumOverview; } });
|
|
67
|
+
Object.defineProperty(exports, "getAllSkills", { enumerable: true, get: function () { return resources_js_1.getAllSkills; } });
|
|
68
|
+
Object.defineProperty(exports, "getAllEdges", { enumerable: true, get: function () { return resources_js_1.getAllEdges; } });
|
|
69
|
+
Object.defineProperty(exports, "getSkillById", { enumerable: true, get: function () { return resources_js_1.getSkillById; } });
|
|
70
|
+
Object.defineProperty(exports, "getSkillsByBloomLevel", { enumerable: true, get: function () { return resources_js_1.getSkillsByBloomLevel; } });
|
|
71
|
+
Object.defineProperty(exports, "getAllTags", { enumerable: true, get: function () { return resources_js_1.getAllTags; } });
|
|
72
|
+
Object.defineProperty(exports, "getFullExport", { enumerable: true, get: function () { return resources_js_1.getFullExport; } });
|
|
73
|
+
// Prompts
|
|
74
|
+
var prompts_js_1 = require("./prompts.js");
|
|
75
|
+
Object.defineProperty(exports, "PROMPT_DEFINITIONS", { enumerable: true, get: function () { return prompts_js_1.PROMPT_DEFINITIONS; } });
|
|
76
|
+
Object.defineProperty(exports, "getPromptMetas", { enumerable: true, get: function () { return prompts_js_1.getPromptMetas; } });
|
|
77
|
+
Object.defineProperty(exports, "renderPrompt", { enumerable: true, get: function () { return prompts_js_1.renderPrompt; } });
|
|
78
|
+
Object.defineProperty(exports, "getPromptDefinition", { enumerable: true, get: function () { return prompts_js_1.getPromptDefinition; } });
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAEH,SAAS;AACT,yCAAkE;AAAzD,gHAAA,mBAAmB,OAAA;AAAE,2GAAA,cAAc,OAAA;AAmB5C,QAAQ;AACR,uCA2BoB;AA1BlB,4GAAA,gBAAgB,OAAA;AAEhB,6CAA6C;AAC7C,4GAAA,gBAAgB,OAAA;AAChB,0GAAA,cAAc,OAAA;AACd,6GAAA,iBAAiB,OAAA;AACjB,8GAAA,kBAAkB,OAAA;AAClB,kHAAA,sBAAsB,OAAA;AACtB,+GAAA,mBAAmB,OAAA;AACnB,iHAAA,qBAAqB,OAAA;AACrB,8GAAA,kBAAkB,OAAA;AAClB,oHAAA,wBAAwB,OAAA;AACxB,+GAAA,mBAAmB,OAAA;AACnB,oHAAA,wBAAwB,OAAA;AACxB,uCAAuC;AACvC,sGAAA,UAAU,OAAA;AACV,oGAAA,QAAQ,OAAA;AACR,uGAAA,WAAW,OAAA;AACX,wGAAA,YAAY,OAAA;AACZ,4GAAA,gBAAgB,OAAA;AAChB,yGAAA,aAAa,OAAA;AACb,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA;AACZ,8GAAA,kBAAkB,OAAA;AAClB,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAGpB,YAAY;AACZ,+CAYwB;AAXtB,oHAAA,oBAAoB,OAAA;AACpB,6GAAA,aAAa,OAAA;AACb,+GAAA,eAAe,OAAA;AACf,qHAAA,qBAAqB,OAAA;AACrB,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA;AACX,4GAAA,YAAY,OAAA;AACZ,qHAAA,qBAAqB,OAAA;AACrB,0GAAA,UAAU,OAAA;AACV,6GAAA,aAAa,OAAA;AAIf,UAAU;AACV,2CAKsB;AAJpB,gHAAA,kBAAkB,OAAA;AAClB,4GAAA,cAAc,OAAA;AACd,0GAAA,YAAY,OAAA;AACZ,iHAAA,mBAAmB,OAAA"}
|