learngraph 0.1.1 → 0.3.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 (150) hide show
  1. package/LICENSE +190 -21
  2. package/README.md +165 -3
  3. package/dist/cjs/llm/adapters/anthropic.js +124 -0
  4. package/dist/cjs/llm/adapters/anthropic.js.map +1 -0
  5. package/dist/cjs/llm/adapters/base.js +100 -0
  6. package/dist/cjs/llm/adapters/base.js.map +1 -0
  7. package/dist/cjs/llm/adapters/index.js +22 -0
  8. package/dist/cjs/llm/adapters/index.js.map +1 -0
  9. package/dist/cjs/llm/adapters/ollama.js +149 -0
  10. package/dist/cjs/llm/adapters/ollama.js.map +1 -0
  11. package/dist/cjs/llm/adapters/openai.js +126 -0
  12. package/dist/cjs/llm/adapters/openai.js.map +1 -0
  13. package/dist/cjs/llm/index.js +34 -5
  14. package/dist/cjs/llm/index.js.map +1 -1
  15. package/dist/cjs/llm/orchestrator.js +219 -0
  16. package/dist/cjs/llm/orchestrator.js.map +1 -0
  17. package/dist/cjs/llm/prompts.js +367 -0
  18. package/dist/cjs/llm/prompts.js.map +1 -0
  19. package/dist/cjs/parsers/base.js +189 -0
  20. package/dist/cjs/parsers/base.js.map +1 -0
  21. package/dist/cjs/parsers/demo.js +159 -0
  22. package/dist/cjs/parsers/demo.js.map +1 -0
  23. package/dist/cjs/parsers/extractor.js +191 -0
  24. package/dist/cjs/parsers/extractor.js.map +1 -0
  25. package/dist/cjs/parsers/index.js +43 -4
  26. package/dist/cjs/parsers/index.js.map +1 -1
  27. package/dist/cjs/parsers/json.js +157 -0
  28. package/dist/cjs/parsers/json.js.map +1 -0
  29. package/dist/cjs/parsers/markdown.js +168 -0
  30. package/dist/cjs/parsers/markdown.js.map +1 -0
  31. package/dist/cjs/parsers/samples.js +139 -0
  32. package/dist/cjs/parsers/samples.js.map +1 -0
  33. package/dist/cjs/storage/base.js +231 -0
  34. package/dist/cjs/storage/base.js.map +1 -0
  35. package/dist/cjs/storage/errors.js +128 -0
  36. package/dist/cjs/storage/errors.js.map +1 -0
  37. package/dist/cjs/storage/index.js +92 -5
  38. package/dist/cjs/storage/index.js.map +1 -1
  39. package/dist/cjs/storage/levelgraph.js +855 -0
  40. package/dist/cjs/storage/levelgraph.js.map +1 -0
  41. package/dist/cjs/storage/memory.js +447 -0
  42. package/dist/cjs/storage/memory.js.map +1 -0
  43. package/dist/cjs/storage/neo4j.js +866 -0
  44. package/dist/cjs/storage/neo4j.js.map +1 -0
  45. package/dist/cjs/storage/seeds.js +565 -0
  46. package/dist/cjs/storage/seeds.js.map +1 -0
  47. package/dist/cjs/types/llm.js +8 -0
  48. package/dist/cjs/types/llm.js.map +1 -0
  49. package/dist/cjs/types/parser.js +8 -0
  50. package/dist/cjs/types/parser.js.map +1 -0
  51. package/dist/esm/llm/adapters/anthropic.js +119 -0
  52. package/dist/esm/llm/adapters/anthropic.js.map +1 -0
  53. package/dist/esm/llm/adapters/base.js +95 -0
  54. package/dist/esm/llm/adapters/base.js.map +1 -0
  55. package/dist/esm/llm/adapters/index.js +10 -0
  56. package/dist/esm/llm/adapters/index.js.map +1 -0
  57. package/dist/esm/llm/adapters/ollama.js +144 -0
  58. package/dist/esm/llm/adapters/ollama.js.map +1 -0
  59. package/dist/esm/llm/adapters/openai.js +121 -0
  60. package/dist/esm/llm/adapters/openai.js.map +1 -0
  61. package/dist/esm/llm/index.js +12 -6
  62. package/dist/esm/llm/index.js.map +1 -1
  63. package/dist/esm/llm/orchestrator.js +214 -0
  64. package/dist/esm/llm/orchestrator.js.map +1 -0
  65. package/dist/esm/llm/prompts.js +360 -0
  66. package/dist/esm/llm/prompts.js.map +1 -0
  67. package/dist/esm/parsers/base.js +179 -0
  68. package/dist/esm/parsers/base.js.map +1 -0
  69. package/dist/esm/parsers/demo.js +154 -0
  70. package/dist/esm/parsers/demo.js.map +1 -0
  71. package/dist/esm/parsers/extractor.js +187 -0
  72. package/dist/esm/parsers/extractor.js.map +1 -0
  73. package/dist/esm/parsers/index.js +24 -5
  74. package/dist/esm/parsers/index.js.map +1 -1
  75. package/dist/esm/parsers/json.js +153 -0
  76. package/dist/esm/parsers/json.js.map +1 -0
  77. package/dist/esm/parsers/markdown.js +164 -0
  78. package/dist/esm/parsers/markdown.js.map +1 -0
  79. package/dist/esm/parsers/samples.js +136 -0
  80. package/dist/esm/parsers/samples.js.map +1 -0
  81. package/dist/esm/storage/base.js +221 -0
  82. package/dist/esm/storage/base.js.map +1 -0
  83. package/dist/esm/storage/errors.js +116 -0
  84. package/dist/esm/storage/errors.js.map +1 -0
  85. package/dist/esm/storage/index.js +71 -6
  86. package/dist/esm/storage/index.js.map +1 -1
  87. package/dist/esm/storage/levelgraph.js +818 -0
  88. package/dist/esm/storage/levelgraph.js.map +1 -0
  89. package/dist/esm/storage/memory.js +443 -0
  90. package/dist/esm/storage/memory.js.map +1 -0
  91. package/dist/esm/storage/neo4j.js +829 -0
  92. package/dist/esm/storage/neo4j.js.map +1 -0
  93. package/dist/esm/storage/seeds.js +561 -0
  94. package/dist/esm/storage/seeds.js.map +1 -0
  95. package/dist/esm/types/llm.js +7 -0
  96. package/dist/esm/types/llm.js.map +1 -0
  97. package/dist/esm/types/parser.js +7 -0
  98. package/dist/esm/types/parser.js.map +1 -0
  99. package/dist/types/llm/adapters/anthropic.d.ts +21 -0
  100. package/dist/types/llm/adapters/anthropic.d.ts.map +1 -0
  101. package/dist/types/llm/adapters/base.d.ts +46 -0
  102. package/dist/types/llm/adapters/base.d.ts.map +1 -0
  103. package/dist/types/llm/adapters/index.d.ts +11 -0
  104. package/dist/types/llm/adapters/index.d.ts.map +1 -0
  105. package/dist/types/llm/adapters/ollama.d.ts +30 -0
  106. package/dist/types/llm/adapters/ollama.d.ts.map +1 -0
  107. package/dist/types/llm/adapters/openai.d.ts +22 -0
  108. package/dist/types/llm/adapters/openai.d.ts.map +1 -0
  109. package/dist/types/llm/index.d.ts +5 -0
  110. package/dist/types/llm/index.d.ts.map +1 -1
  111. package/dist/types/llm/orchestrator.d.ts +35 -0
  112. package/dist/types/llm/orchestrator.d.ts.map +1 -0
  113. package/dist/types/llm/prompts.d.ts +269 -0
  114. package/dist/types/llm/prompts.d.ts.map +1 -0
  115. package/dist/types/parsers/base.d.ts +39 -0
  116. package/dist/types/parsers/base.d.ts.map +1 -0
  117. package/dist/types/parsers/demo.d.ts +87 -0
  118. package/dist/types/parsers/demo.d.ts.map +1 -0
  119. package/dist/types/parsers/extractor.d.ts +43 -0
  120. package/dist/types/parsers/extractor.d.ts.map +1 -0
  121. package/dist/types/parsers/index.d.ts +10 -0
  122. package/dist/types/parsers/index.d.ts.map +1 -1
  123. package/dist/types/parsers/json.d.ts +71 -0
  124. package/dist/types/parsers/json.d.ts.map +1 -0
  125. package/dist/types/parsers/markdown.d.ts +43 -0
  126. package/dist/types/parsers/markdown.d.ts.map +1 -0
  127. package/dist/types/parsers/samples.d.ts +27 -0
  128. package/dist/types/parsers/samples.d.ts.map +1 -0
  129. package/dist/types/storage/base.d.ts +39 -0
  130. package/dist/types/storage/base.d.ts.map +1 -0
  131. package/dist/types/storage/errors.d.ts +74 -0
  132. package/dist/types/storage/errors.d.ts.map +1 -0
  133. package/dist/types/storage/index.d.ts +50 -2
  134. package/dist/types/storage/index.d.ts.map +1 -1
  135. package/dist/types/storage/levelgraph.d.ts +92 -0
  136. package/dist/types/storage/levelgraph.d.ts.map +1 -0
  137. package/dist/types/storage/memory.d.ts +70 -0
  138. package/dist/types/storage/memory.d.ts.map +1 -0
  139. package/dist/types/storage/neo4j.d.ts +88 -0
  140. package/dist/types/storage/neo4j.d.ts.map +1 -0
  141. package/dist/types/storage/seeds.d.ts +27 -0
  142. package/dist/types/storage/seeds.d.ts.map +1 -0
  143. package/dist/types/types/index.d.ts +2 -0
  144. package/dist/types/types/index.d.ts.map +1 -1
  145. package/dist/types/types/llm.d.ts +298 -0
  146. package/dist/types/types/llm.d.ts.map +1 -0
  147. package/dist/types/types/parser.d.ts +208 -0
  148. package/dist/types/types/parser.d.ts.map +1 -0
  149. package/package.json +4 -2
  150. package/scripts/postinstall.js +68 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Sample educational graphs for testing and demos
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import type { SkillNodeInput, PrerequisiteEdgeInput, GraphStorage, ImportResult } from '../types/index.js';
7
+ /**
8
+ * Sample fractions curriculum (elementary math)
9
+ */
10
+ export declare const FRACTIONS_CURRICULUM: {
11
+ nodes: SkillNodeInput[];
12
+ edges: PrerequisiteEdgeInput[];
13
+ };
14
+ /**
15
+ * Sample programming fundamentals curriculum
16
+ */
17
+ export declare const PROGRAMMING_CURRICULUM: {
18
+ nodes: SkillNodeInput[];
19
+ edges: PrerequisiteEdgeInput[];
20
+ };
21
+ /**
22
+ * Seed a storage instance with sample data
23
+ */
24
+ export declare function seedStorage(storage: GraphStorage, curriculum?: 'fractions' | 'programming' | 'all', options?: {
25
+ clearExisting?: boolean;
26
+ }): Promise<ImportResult>;
27
+ //# sourceMappingURL=seeds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeds.d.ts","sourceRoot":"","sources":["../../../src/storage/seeds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAoThC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE;IACnC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,qBAAqB,EAAE,CAAC;CA6MhC,CAAC;AAEF;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EACrB,UAAU,GAAE,WAAW,GAAG,aAAa,GAAG,KAAa,EACvD,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,YAAY,CAAC,CA0CvB"}
@@ -15,4 +15,6 @@ export type { Subgraph, GraphExport, GraphStats, GraphValidation, GraphValidatio
15
15
  export { GRAPH_VERSION } from './graph.js';
16
16
  export type { QueryOperator, QueryFilter, QuerySort, QueryPagination, SkillQuery, ZPDResult, LearningPath, LearningSession, ReviewSchedule, ReviewItem, ZPDOptions, PathOptions, ReviewOptions, } from './query.js';
17
17
  export type { StorageBackend, StorageConfigBase, Neo4jConfig, LevelGraphConfig, MemoryConfig, StorageConfig, ConnectionStatus, ImportResult, GraphStorage, StorageFactory, } from './storage.js';
18
+ export type { ParseFormat, DocumentMetadata, LearningObjective, Topic, Module, ParseResult, ParseWarning, ParseStats, ExtractedSkill, SkillExtractionResult, ParseOptions, ExtractionOptions, Parser, SkillExtractor, } from './parser.js';
19
+ export type { LLMProvider, LLMConfig, OpenAIConfig, AnthropicConfig, OllamaConfig, MessageRole, ChatMessage, CompletionRequest, CompletionResponse, SkillExtractionRequest, ExtractedSkillLLM, SkillExtractionResponse, PrerequisiteInferenceRequest, InferredPrerequisite, PrerequisiteInferenceResponse, BloomAnalysisRequest, BloomAnalysisResponse, DecompositionRequest, DecompositionResponse, LLMAdapter, LLMOrchestrator, } from './llm.js';
18
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,aAAa,EACb,cAAc,EACd,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AAKnB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1E,YAAY,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AAKpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,aAAa,EACb,cAAc,EACd,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAKpB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AAKnB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1E,YAAY,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AAKpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,cAAc,CAAC;AAKtB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,cAAc,GACf,MAAM,aAAa,CAAC;AAKrB,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,6BAA6B,EAC7B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,EACV,eAAe,GAChB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,298 @@
1
+ /**
2
+ * LLM provider types for skill extraction and prerequisite inference
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import type { BloomLevel } from './bloom.js';
7
+ import type { SkillNodeInput } from './skill.js';
8
+ /**
9
+ * Supported LLM providers
10
+ */
11
+ export type LLMProvider = 'openai' | 'anthropic' | 'ollama' | 'custom';
12
+ /**
13
+ * Base configuration for all LLM providers
14
+ */
15
+ export interface LLMConfig {
16
+ /** Provider type */
17
+ provider: LLMProvider;
18
+ /** Model identifier (e.g., 'gpt-4o', 'claude-3-5-sonnet-20241022', 'llama3.2') */
19
+ model: string;
20
+ /** API key (not needed for Ollama) */
21
+ apiKey?: string;
22
+ /** Base URL for API (optional, for custom endpoints) */
23
+ baseUrl?: string;
24
+ /** Maximum tokens to generate */
25
+ maxTokens?: number;
26
+ /** Temperature for generation (0-1) */
27
+ temperature?: number;
28
+ /** Request timeout in milliseconds */
29
+ timeout?: number;
30
+ /** Number of retries on failure */
31
+ retries?: number;
32
+ }
33
+ /**
34
+ * OpenAI-specific configuration
35
+ */
36
+ export interface OpenAIConfig extends LLMConfig {
37
+ provider: 'openai';
38
+ /** Organization ID (optional) */
39
+ organization?: string;
40
+ }
41
+ /**
42
+ * Anthropic-specific configuration
43
+ */
44
+ export interface AnthropicConfig extends LLMConfig {
45
+ provider: 'anthropic';
46
+ }
47
+ /**
48
+ * Ollama-specific configuration (local models)
49
+ */
50
+ export interface OllamaConfig extends LLMConfig {
51
+ provider: 'ollama';
52
+ /** Default: http://localhost:11434 */
53
+ baseUrl?: string;
54
+ }
55
+ /**
56
+ * Message role in conversation
57
+ */
58
+ export type MessageRole = 'system' | 'user' | 'assistant';
59
+ /**
60
+ * Chat message
61
+ */
62
+ export interface ChatMessage {
63
+ role: MessageRole;
64
+ content: string;
65
+ }
66
+ /**
67
+ * LLM completion request
68
+ */
69
+ export interface CompletionRequest {
70
+ /** Messages for chat completion */
71
+ messages: ChatMessage[];
72
+ /** Override temperature for this request */
73
+ temperature?: number;
74
+ /** Override max tokens for this request */
75
+ maxTokens?: number;
76
+ /** Response format (for structured output) */
77
+ responseFormat?: 'text' | 'json';
78
+ /** JSON schema for structured output (if responseFormat is 'json') */
79
+ jsonSchema?: Record<string, unknown>;
80
+ }
81
+ /**
82
+ * LLM completion response
83
+ */
84
+ export interface CompletionResponse {
85
+ /** Generated text content */
86
+ content: string;
87
+ /** Parsed JSON (if responseFormat was 'json') */
88
+ json?: unknown;
89
+ /** Token usage statistics */
90
+ usage: {
91
+ promptTokens: number;
92
+ completionTokens: number;
93
+ totalTokens: number;
94
+ };
95
+ /** Model used for completion */
96
+ model: string;
97
+ /** Finish reason */
98
+ finishReason: 'stop' | 'length' | 'content_filter' | 'error';
99
+ }
100
+ /**
101
+ * Request to extract skills from curriculum content
102
+ */
103
+ export interface SkillExtractionRequest {
104
+ /** Raw curriculum/syllabus content */
105
+ content: string;
106
+ /** Content format hint */
107
+ format?: 'markdown' | 'text' | 'html' | 'pdf';
108
+ /** Domain/subject area hint */
109
+ domain?: string;
110
+ /** Target audience/grade level */
111
+ gradeLevel?: string;
112
+ /** Additional context for extraction */
113
+ context?: string;
114
+ /** Tags to apply to all extracted skills */
115
+ tags?: string[];
116
+ /** Minimum confidence threshold (0-1) */
117
+ minConfidence?: number;
118
+ }
119
+ /**
120
+ * LLM-extracted skill with metadata
121
+ */
122
+ export interface ExtractedSkillLLM {
123
+ /** Skill name (concise) */
124
+ name: string;
125
+ /** Skill description */
126
+ description: string;
127
+ /** Detected Bloom's level */
128
+ bloomLevel: BloomLevel;
129
+ /** Difficulty estimate (0-1) */
130
+ difficulty: number;
131
+ /** Confidence in extraction (0-1) */
132
+ confidence: number;
133
+ /** Whether this is a threshold concept */
134
+ isThresholdConcept: boolean;
135
+ /** Estimated time to master in minutes */
136
+ estimatedMinutes?: number;
137
+ /** Source text that generated this skill */
138
+ sourceText?: string;
139
+ /** LLM's reasoning for this extraction */
140
+ reasoning?: string;
141
+ /** Keywords/concepts associated with this skill */
142
+ keywords?: string[];
143
+ }
144
+ /**
145
+ * Result of skill extraction
146
+ */
147
+ export interface SkillExtractionResponse {
148
+ /** Extracted skills */
149
+ skills: ExtractedSkillLLM[];
150
+ /** Overall extraction confidence */
151
+ confidence: number;
152
+ /** Token usage */
153
+ usage: CompletionResponse['usage'];
154
+ /** Warnings or notes from extraction */
155
+ warnings: string[];
156
+ /** Processing time in milliseconds */
157
+ durationMs: number;
158
+ }
159
+ /**
160
+ * Request to infer prerequisites between skills
161
+ */
162
+ export interface PrerequisiteInferenceRequest {
163
+ /** Skills to analyze for prerequisites */
164
+ skills: Array<{
165
+ id: string;
166
+ name: string;
167
+ description: string;
168
+ bloomLevel: BloomLevel;
169
+ difficulty: number;
170
+ }>;
171
+ /** Domain context */
172
+ domain?: string;
173
+ /** Whether to infer transitive prerequisites */
174
+ inferTransitive?: boolean;
175
+ /** Minimum confidence for edge suggestion */
176
+ minConfidence?: number;
177
+ }
178
+ /**
179
+ * Inferred prerequisite relationship
180
+ */
181
+ export interface InferredPrerequisite {
182
+ /** Source skill ID (the prerequisite) */
183
+ sourceId: string;
184
+ /** Target skill ID (depends on source) */
185
+ targetId: string;
186
+ /** Relationship strength (0-1) */
187
+ strength: number;
188
+ /** Type of prerequisite */
189
+ type: 'hard' | 'soft' | 'recommended';
190
+ /** Confidence in this inference (0-1) */
191
+ confidence: number;
192
+ /** LLM's reasoning for this relationship */
193
+ reasoning: string;
194
+ }
195
+ /**
196
+ * Result of prerequisite inference
197
+ */
198
+ export interface PrerequisiteInferenceResponse {
199
+ /** Inferred prerequisites */
200
+ prerequisites: InferredPrerequisite[];
201
+ /** Token usage */
202
+ usage: CompletionResponse['usage'];
203
+ /** Processing time in milliseconds */
204
+ durationMs: number;
205
+ }
206
+ /**
207
+ * Request to analyze Bloom's level of text
208
+ */
209
+ export interface BloomAnalysisRequest {
210
+ /** Text to analyze */
211
+ text: string;
212
+ /** Context for analysis */
213
+ context?: string;
214
+ }
215
+ /**
216
+ * Result of Bloom's level analysis
217
+ */
218
+ export interface BloomAnalysisResponse {
219
+ /** Detected Bloom's level */
220
+ level: BloomLevel;
221
+ /** Confidence in detection (0-1) */
222
+ confidence: number;
223
+ /** Key verbs/phrases that indicated this level */
224
+ indicators: string[];
225
+ /** LLM's reasoning */
226
+ reasoning: string;
227
+ /** Token usage */
228
+ usage: CompletionResponse['usage'];
229
+ }
230
+ /**
231
+ * Request to decompose curriculum into a skill graph
232
+ */
233
+ export interface DecompositionRequest {
234
+ /** Curriculum content */
235
+ content: string;
236
+ /** Title of the course/curriculum */
237
+ title?: string;
238
+ /** Domain/subject */
239
+ domain?: string;
240
+ /** Target grade level */
241
+ gradeLevel?: string;
242
+ /** Additional context */
243
+ context?: string;
244
+ /** Maximum depth of skill hierarchy */
245
+ maxDepth?: number;
246
+ /** Whether to infer prerequisites */
247
+ inferPrerequisites?: boolean;
248
+ }
249
+ /**
250
+ * Result of curriculum decomposition
251
+ */
252
+ export interface DecompositionResponse {
253
+ /** Course/curriculum title */
254
+ title: string;
255
+ /** Extracted skills */
256
+ skills: ExtractedSkillLLM[];
257
+ /** Inferred prerequisites (if requested) */
258
+ prerequisites: InferredPrerequisite[];
259
+ /** Skill inputs ready for storage */
260
+ skillInputs: SkillNodeInput[];
261
+ /** Token usage */
262
+ usage: CompletionResponse['usage'];
263
+ /** Processing time in milliseconds */
264
+ durationMs: number;
265
+ /** Warnings from processing */
266
+ warnings: string[];
267
+ }
268
+ /**
269
+ * LLM adapter interface for different providers
270
+ */
271
+ export interface LLMAdapter {
272
+ /** Provider name */
273
+ readonly provider: LLMProvider;
274
+ /** Model identifier */
275
+ readonly model: string;
276
+ /** Send a completion request */
277
+ complete(request: CompletionRequest): Promise<CompletionResponse>;
278
+ /** Check if the adapter is properly configured */
279
+ isConfigured(): boolean;
280
+ /** Get current configuration (without sensitive data) */
281
+ getConfig(): Omit<LLMConfig, 'apiKey'>;
282
+ }
283
+ /**
284
+ * High-level LLM orchestrator for educational tasks
285
+ */
286
+ export interface LLMOrchestrator {
287
+ /** Extract skills from curriculum content */
288
+ extractSkills(request: SkillExtractionRequest): Promise<SkillExtractionResponse>;
289
+ /** Infer prerequisites between skills */
290
+ inferPrerequisites(request: PrerequisiteInferenceRequest): Promise<PrerequisiteInferenceResponse>;
291
+ /** Analyze Bloom's level of text */
292
+ analyzeBloomLevel(request: BloomAnalysisRequest): Promise<BloomAnalysisResponse>;
293
+ /** Full curriculum decomposition */
294
+ decompose(request: DecompositionRequest): Promise<DecompositionResponse>;
295
+ /** Get the underlying adapter */
296
+ getAdapter(): LLMAdapter;
297
+ }
298
+ //# sourceMappingURL=llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/types/llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Parser types for syllabus and curriculum parsing
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import type { BloomLevel } from './bloom.js';
7
+ import type { SkillNodeInput } from './skill.js';
8
+ /**
9
+ * Supported input formats for parsing
10
+ */
11
+ export type ParseFormat = 'markdown' | 'json' | 'yaml' | 'pdf' | 'text';
12
+ /**
13
+ * Source document metadata
14
+ */
15
+ export interface DocumentMetadata {
16
+ /** Original filename or URL */
17
+ source: string;
18
+ /** Document format */
19
+ format: ParseFormat;
20
+ /** Document title if detected */
21
+ title?: string;
22
+ /** Course or subject name */
23
+ course?: string;
24
+ /** Institution name */
25
+ institution?: string;
26
+ /** Grade level or audience */
27
+ gradeLevel?: string;
28
+ /** Parse timestamp */
29
+ parsedAt: string;
30
+ /** Additional metadata */
31
+ custom?: Record<string, unknown>;
32
+ }
33
+ /**
34
+ * A learning objective extracted from a syllabus
35
+ */
36
+ export interface LearningObjective {
37
+ /** Original text of the objective */
38
+ text: string;
39
+ /** Detected Bloom's level (null if not detected) */
40
+ bloomLevel: BloomLevel | null;
41
+ /** Confidence score for Bloom's detection (0-1) */
42
+ bloomConfidence: number;
43
+ /** Chapter or section this belongs to */
44
+ section?: string;
45
+ /** Week or unit number */
46
+ week?: number;
47
+ /** Suggested skill name derived from objective */
48
+ suggestedName?: string;
49
+ }
50
+ /**
51
+ * A topic or concept extracted from a syllabus
52
+ */
53
+ export interface Topic {
54
+ /** Topic name */
55
+ name: string;
56
+ /** Description if available */
57
+ description?: string;
58
+ /** Parent topic (for hierarchical structures) */
59
+ parent?: string;
60
+ /** Week or unit number */
61
+ week?: number;
62
+ /** Associated learning objectives */
63
+ objectives: LearningObjective[];
64
+ /** Estimated time in minutes */
65
+ estimatedMinutes?: number;
66
+ }
67
+ /**
68
+ * A module or chapter extracted from a syllabus
69
+ */
70
+ export interface Module {
71
+ /** Module/chapter number or ID */
72
+ id: string;
73
+ /** Module title */
74
+ title: string;
75
+ /** Description or summary */
76
+ description?: string;
77
+ /** Week number (for weekly syllabi) */
78
+ week?: number;
79
+ /** Topics covered in this module */
80
+ topics: Topic[];
81
+ /** Direct learning objectives (not under topics) */
82
+ objectives: LearningObjective[];
83
+ /** Estimated duration in minutes */
84
+ estimatedMinutes?: number;
85
+ }
86
+ /**
87
+ * Result of parsing a syllabus document
88
+ */
89
+ export interface ParseResult {
90
+ /** Document metadata */
91
+ metadata: DocumentMetadata;
92
+ /** Extracted modules/chapters */
93
+ modules: Module[];
94
+ /** Standalone topics (not in modules) */
95
+ topics: Topic[];
96
+ /** Standalone objectives (not in topics) */
97
+ objectives: LearningObjective[];
98
+ /** Parse warnings (non-fatal issues) */
99
+ warnings: ParseWarning[];
100
+ /** Parse statistics */
101
+ stats: ParseStats;
102
+ }
103
+ /**
104
+ * Warning generated during parsing
105
+ */
106
+ export interface ParseWarning {
107
+ /** Warning type */
108
+ type: 'ambiguous_bloom' | 'missing_objective' | 'unclear_structure' | 'unknown';
109
+ /** Warning message */
110
+ message: string;
111
+ /** Line number or location (if applicable) */
112
+ location?: string;
113
+ }
114
+ /**
115
+ * Statistics about the parse operation
116
+ */
117
+ export interface ParseStats {
118
+ /** Total modules found */
119
+ moduleCount: number;
120
+ /** Total topics found */
121
+ topicCount: number;
122
+ /** Total learning objectives found */
123
+ objectiveCount: number;
124
+ /** Objectives with detected Bloom's level */
125
+ bloomDetectedCount: number;
126
+ /** Parse duration in milliseconds */
127
+ durationMs: number;
128
+ }
129
+ /**
130
+ * An extracted skill ready for graph creation
131
+ */
132
+ export interface ExtractedSkill {
133
+ /** Suggested skill input (ready for storage) */
134
+ skill: SkillNodeInput;
135
+ /** Source objective or topic */
136
+ source: LearningObjective | Topic;
137
+ /** Extraction confidence (0-1) */
138
+ confidence: number;
139
+ /** Suggested prerequisites (names, not IDs yet) */
140
+ suggestedPrerequisites?: string[];
141
+ }
142
+ /**
143
+ * Result of extracting skills from parsed content
144
+ */
145
+ export interface SkillExtractionResult {
146
+ /** Extracted skills */
147
+ skills: ExtractedSkill[];
148
+ /** Suggested prerequisite relationships */
149
+ suggestedEdges: Array<{
150
+ sourceName: string;
151
+ targetName: string;
152
+ strength: number;
153
+ reasoning?: string;
154
+ }>;
155
+ /** Extraction warnings */
156
+ warnings: ParseWarning[];
157
+ }
158
+ /**
159
+ * Options for parsing operations
160
+ */
161
+ export interface ParseOptions {
162
+ /** Attempt to detect Bloom's levels */
163
+ detectBloom?: boolean;
164
+ /** Extract time estimates */
165
+ extractTime?: boolean;
166
+ /** Suggest skill names from objectives */
167
+ suggestNames?: boolean;
168
+ /** Include raw text in output */
169
+ includeRaw?: boolean;
170
+ /** Custom section headers to recognize */
171
+ sectionHeaders?: string[];
172
+ /** Custom objective markers (e.g., "LO:", "Students will be able to:") */
173
+ objectiveMarkers?: string[];
174
+ }
175
+ /**
176
+ * Options for skill extraction
177
+ */
178
+ export interface ExtractionOptions extends ParseOptions {
179
+ /** Default difficulty for extracted skills */
180
+ defaultDifficulty?: number;
181
+ /** Default mastery threshold */
182
+ defaultMasteryThreshold?: number;
183
+ /** Default estimated minutes */
184
+ defaultEstimatedMinutes?: number;
185
+ /** Tags to apply to all extracted skills */
186
+ tags?: string[];
187
+ /** Domain to apply to all extracted skills */
188
+ domain?: string;
189
+ /** Grade level to apply */
190
+ gradeLevel?: string;
191
+ }
192
+ /**
193
+ * Base parser interface
194
+ */
195
+ export interface Parser {
196
+ /** Parse content from a string */
197
+ parse(content: string, options?: ParseOptions): Promise<ParseResult>;
198
+ /** Get supported format */
199
+ format: ParseFormat;
200
+ }
201
+ /**
202
+ * Skill extractor interface (can use LLM)
203
+ */
204
+ export interface SkillExtractor {
205
+ /** Extract skills from parse result */
206
+ extract(parseResult: ParseResult, options?: ExtractionOptions): Promise<SkillExtractionResult>;
207
+ }
208
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/types/parser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "learngraph",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "The world's first AI-powered learning path generator. Transform syllabi into personalized mastery paths with Zone of Proximal Development (ZPD), Bloom's Taxonomy, spaced repetition, and Bayesian Knowledge Tracing built in. Every student's path to mastery.",
5
5
  "author": "Dr. Ernesto Lee <dr.ernesto.lee@gmail.com>",
6
- "license": "MIT",
6
+ "license": "Apache-2.0",
7
7
  "homepage": "https://github.com/fenago/Jali#readme",
8
8
  "bugs": {
9
9
  "url": "https://github.com/fenago/Jali/issues"
@@ -127,10 +127,12 @@
127
127
  },
128
128
  "files": [
129
129
  "dist",
130
+ "scripts",
130
131
  "README.md",
131
132
  "LICENSE"
132
133
  ],
133
134
  "scripts": {
135
+ "postinstall": "node scripts/postinstall.js || true",
134
136
  "build": "npm run build:esm && npm run build:cjs && npm run build:types",
135
137
  "build:esm": "tsc -p tsconfig.esm.json",
136
138
  "build:cjs": "tsc -p tsconfig.cjs.json",
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * LearnGraph Post-Install Script
5
+ * Displays welcome message with quick start guide
6
+ */
7
+
8
+ const CYAN = '\x1b[36m';
9
+ const YELLOW = '\x1b[33m';
10
+ const GREEN = '\x1b[32m';
11
+ const MAGENTA = '\x1b[35m';
12
+ const WHITE = '\x1b[37m';
13
+ const BOLD = '\x1b[1m';
14
+ const DIM = '\x1b[2m';
15
+ const RESET = '\x1b[0m';
16
+
17
+ const ascii = `
18
+ ${CYAN}${BOLD}
19
+ ╦ ╔═╗╔═╗╦═╗╔╗╔ ╔═╗╦═╗╔═╗╔═╗╦ ╦
20
+ ║ ║╣ ╠═╣╠╦╝║║║ ║ ╦╠╦╝╠═╣╠═╝╠═╣
21
+ ╩═╝╚═╝╩ ╩╩╚═╝╚╝ ╚═╝╩╚═╩ ╩╩ ╩ ╩
22
+ ${RESET}
23
+ ${YELLOW} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}
24
+ ${WHITE}${BOLD} AI-Powered Learning Path Generator${RESET}
25
+ ${YELLOW} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}
26
+
27
+ ${DIM} Transform syllabi into personalized mastery paths${RESET}
28
+ ${DIM} with ZPD, Bloom's Taxonomy & Knowledge Tracing${RESET}
29
+
30
+ ${MAGENTA}${BOLD} Created by Dr. Ernesto Lee${RESET}
31
+ ${CYAN} https://DrLee.ai${RESET}
32
+
33
+ ${GREEN}${BOLD} Quick Start${RESET}
34
+ ${GREEN} ───────────${RESET}
35
+
36
+ ${WHITE} // In-memory storage (great for testing)${RESET}
37
+ ${DIM} import { MemoryStorage } from 'learngraph/storage';
38
+
39
+ const storage = new MemoryStorage();
40
+ await storage.connect({ backend: 'memory' });
41
+
42
+ const skill = await storage.createSkill({
43
+ name: 'Add Fractions',
44
+ description: 'Add fractions with like denominators',
45
+ bloomLevel: 'apply',
46
+ difficulty: 0.4,
47
+ isThresholdConcept: false,
48
+ masteryThreshold: 0.8,
49
+ estimatedMinutes: 30,
50
+ tags: ['math', 'fractions'],
51
+ metadata: {}
52
+ });${RESET}
53
+
54
+ ${GREEN}${BOLD} Storage Backends${RESET}
55
+ ${GREEN} ────────────────${RESET}
56
+
57
+ ${WHITE} Memory${RESET} ${DIM}Built-in, zero config${RESET}
58
+ ${WHITE} LevelGraph${RESET} ${DIM}npm install level levelgraph${RESET}
59
+ ${WHITE} Neo4j${RESET} ${DIM}npm install neo4j-driver${RESET}
60
+
61
+ ${YELLOW} Docs:${RESET} ${CYAN}https://github.com/fenago/Jali${RESET}
62
+ ${YELLOW} Issues:${RESET} ${CYAN}https://github.com/fenago/Jali/issues${RESET}
63
+
64
+ ${GREEN}${BOLD} Thank you for using LearnGraph!${RESET}
65
+
66
+ `;
67
+
68
+ console.log(ascii);