@thanh01.pmt/domain-kit 0.1.0 → 0.2.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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chunk-7XGWW6CB.mjs +3 -0
  3. package/dist/{chunk-F4RZNBOE.mjs.map → chunk-7XGWW6CB.mjs.map} +1 -1
  4. package/dist/{chunk-VFART56O.mjs → chunk-BL5NBKPH.mjs} +12 -8
  5. package/dist/chunk-BL5NBKPH.mjs.map +1 -0
  6. package/dist/chunk-IJZUV7N3.mjs +3 -0
  7. package/dist/chunk-IJZUV7N3.mjs.map +1 -0
  8. package/dist/{chunk-3VVPSRAM.mjs → chunk-JE57VFWX.mjs} +1056 -92
  9. package/dist/chunk-JE57VFWX.mjs.map +1 -0
  10. package/dist/{chunk-GEUDHZE7.mjs → chunk-KPZKPNOJ.mjs} +173 -4
  11. package/dist/chunk-KPZKPNOJ.mjs.map +1 -0
  12. package/dist/chunk-R57WTNXW.mjs +3 -0
  13. package/dist/chunk-R57WTNXW.mjs.map +1 -0
  14. package/dist/{chunk-3H2HX7PR.mjs → chunk-RAR5MUUK.mjs} +57 -7
  15. package/dist/chunk-RAR5MUUK.mjs.map +1 -0
  16. package/dist/chunk-T4Y2DE2W.mjs +187 -0
  17. package/dist/chunk-T4Y2DE2W.mjs.map +1 -0
  18. package/dist/{chunk-PM42MMDJ.mjs → chunk-WHBAGJWN.mjs} +48 -3
  19. package/dist/chunk-WHBAGJWN.mjs.map +1 -0
  20. package/dist/chunk-ZKLT27T4.mjs +3 -0
  21. package/dist/chunk-ZKLT27T4.mjs.map +1 -0
  22. package/dist/concepts/index.d.cts +2 -2
  23. package/dist/concepts/index.d.ts +2 -2
  24. package/dist/cpp-CZUPqJt9.d.cts +98 -0
  25. package/dist/cpp-CZUPqJt9.d.ts +98 -0
  26. package/dist/curriculumFeedEmitter-UG664SWY.mjs +4 -0
  27. package/dist/curriculumFeedEmitter-UG664SWY.mjs.map +1 -0
  28. package/dist/detector/index.cjs +10 -6
  29. package/dist/detector/index.cjs.map +1 -1
  30. package/dist/detector/index.d.cts +4 -19
  31. package/dist/detector/index.d.ts +4 -19
  32. package/dist/detector/index.mjs +2 -1
  33. package/dist/domainProfileDetector-DHb1T0zB.d.ts +22 -0
  34. package/dist/domainProfileDetector-bzugdQmS.d.cts +22 -0
  35. package/dist/extractors/index.d.cts +3 -3
  36. package/dist/extractors/index.d.ts +3 -3
  37. package/dist/feed/index.cjs +55 -5
  38. package/dist/feed/index.cjs.map +1 -1
  39. package/dist/feed/index.mjs +2 -1
  40. package/dist/graph/index.cjs +368 -64
  41. package/dist/graph/index.cjs.map +1 -1
  42. package/dist/graph/index.d.cts +7 -67
  43. package/dist/graph/index.d.ts +7 -67
  44. package/dist/graph/index.mjs +3 -2
  45. package/dist/hybridGraphPipeline-DVZYLCAQ.d.ts +159 -0
  46. package/dist/hybridGraphPipeline-DmWRKYXf.d.cts +159 -0
  47. package/dist/index.cjs +1300 -697
  48. package/dist/index.cjs.map +1 -1
  49. package/dist/index.d.cts +9 -7
  50. package/dist/index.d.ts +9 -7
  51. package/dist/index.mjs +10 -7
  52. package/dist/{keywordExtractor-zPAz2isq.d.cts → keywordExtractor-BxlGRMHC.d.cts} +1 -1
  53. package/dist/{keywordExtractor-CKaXqSku.d.ts → keywordExtractor-DU5XRN8-.d.ts} +1 -1
  54. package/dist/parsers/index.cjs +185 -0
  55. package/dist/parsers/index.cjs.map +1 -1
  56. package/dist/parsers/index.d.cts +2 -98
  57. package/dist/parsers/index.d.ts +2 -98
  58. package/dist/parsers/index.mjs +2 -1
  59. package/dist/pipeline/index.cjs +3140 -6
  60. package/dist/pipeline/index.cjs.map +1 -1
  61. package/dist/pipeline/index.d.cts +87 -4
  62. package/dist/pipeline/index.d.ts +87 -4
  63. package/dist/pipeline/index.mjs +6 -2
  64. package/dist/schemas/index.cjs +51 -0
  65. package/dist/schemas/index.cjs.map +1 -1
  66. package/dist/schemas/index.d.cts +222 -3
  67. package/dist/schemas/index.d.ts +222 -3
  68. package/dist/schemas/index.mjs +1 -1
  69. package/dist/syllabusParser-MSX1fEzW.d.cts +40 -0
  70. package/dist/syllabusParser-MSX1fEzW.d.ts +40 -0
  71. package/package.json +9 -10
  72. package/dist/chunk-3H2HX7PR.mjs.map +0 -1
  73. package/dist/chunk-3VVPSRAM.mjs.map +0 -1
  74. package/dist/chunk-F4RZNBOE.mjs +0 -3
  75. package/dist/chunk-GEUDHZE7.mjs.map +0 -1
  76. package/dist/chunk-MOKNFLUD.mjs +0 -851
  77. package/dist/chunk-MOKNFLUD.mjs.map +0 -1
  78. package/dist/chunk-PM42MMDJ.mjs.map +0 -1
  79. package/dist/chunk-VFART56O.mjs.map +0 -1
  80. package/dist/graphVerifier-DsTP9uAN.d.ts +0 -37
  81. package/dist/graphVerifier-QjgDAJce.d.cts +0 -37
@@ -0,0 +1,187 @@
1
+ // src/parsers/syllabusParser.ts
2
+ var STOP_WORDS = /* @__PURE__ */ new Set([
3
+ "and",
4
+ "the",
5
+ "for",
6
+ "with",
7
+ "from",
8
+ "that",
9
+ "this",
10
+ "into",
11
+ "when",
12
+ "while",
13
+ "using",
14
+ "their",
15
+ "your",
16
+ "each",
17
+ "how",
18
+ "why",
19
+ "what",
20
+ "between",
21
+ "through",
22
+ "about",
23
+ "trong",
24
+ "nhung",
25
+ "cac",
26
+ "cua",
27
+ "cho",
28
+ "voi",
29
+ "duoc",
30
+ "khong",
31
+ "theo",
32
+ "tren",
33
+ "duoi",
34
+ "va",
35
+ "hoac",
36
+ "thi",
37
+ "la",
38
+ "nhu"
39
+ ]);
40
+ function extractTokens(text) {
41
+ const words = text.toLowerCase().replace(/[^a-z0-9à-ỹ\s-]/gi, " ").split(/\s+/).filter((w) => w.length >= 3 && !STOP_WORDS.has(w));
42
+ return [...new Set(words)];
43
+ }
44
+ function extractGradeBand(text) {
45
+ const gbMatch = text.match(/(?:grade\s*band|độ\s*tuổi|lớp)\s*[:=]?\s*(?:lớp\s*)?(\d{1,2})\s*(?:-|đến|to)\s*(?:lớp\s*)?(\d{1,2})/i);
46
+ if (gbMatch && gbMatch[1] && gbMatch[2]) {
47
+ const min = parseInt(gbMatch[1], 10);
48
+ const max = parseInt(gbMatch[2], 10);
49
+ return [Math.min(min, max), Math.max(min, max)];
50
+ }
51
+ return void 0;
52
+ }
53
+ function extractDomain(text) {
54
+ const lower = text.toLowerCase();
55
+ if (lower.includes("computer science") || lower.includes("l\u1EADp tr\xECnh") || lower.includes("algorithm") || lower.includes("software")) return "software";
56
+ if (lower.includes("to\xE1n") || lower.includes("geometry") || lower.includes("algebra") || lower.includes("h\xECnh h\u1ECDc") || lower.includes("mathematics")) return "math";
57
+ if (lower.includes("v\u1EADt l\xFD") || lower.includes("h\xF3a h\u1ECDc") || lower.includes("sinh h\u1ECDc") || lower.includes("physics") || lower.includes("chemistry") || lower.includes("biology") || lower.includes("science")) return "science";
58
+ if (lower.includes("ti\u1EBFng") || lower.includes("ng\u1EEF v\u0103n") || lower.includes("grammar") || lower.includes("language") || lower.includes("writing") || lower.includes("literature")) return "language";
59
+ return void 0;
60
+ }
61
+ function parseSyllabus(rawText) {
62
+ const lines = rawText.split(/\r?\n/);
63
+ let subjectTitle = "";
64
+ let subjectDesc = "";
65
+ const units = [];
66
+ const allTopics = [];
67
+ const globalKeywordsSet = /* @__PURE__ */ new Set();
68
+ let currentUnit = null;
69
+ let currentTopic = null;
70
+ let unitIndex = 0;
71
+ let topicIndex = 0;
72
+ for (let i = 0; i < lines.length; i++) {
73
+ const line = lines[i].trim();
74
+ const lineNum = i + 1;
75
+ if (!line) continue;
76
+ if (line.startsWith("# ") && !subjectTitle) {
77
+ subjectTitle = line.replace(/^#\s+/, "").trim();
78
+ continue;
79
+ }
80
+ if (!currentUnit) {
81
+ if (line.toLowerCase().startsWith("m\xF4n h\u1ECDc:") || line.toLowerCase().startsWith("subject:")) {
82
+ const val = line.split(":")[1]?.trim() || "";
83
+ if (val && !subjectTitle) subjectTitle = val;
84
+ }
85
+ if (line.toLowerCase().startsWith("m\xF4 t\u1EA3:") || line.toLowerCase().startsWith("description:")) {
86
+ subjectDesc = line.split(":")[1]?.trim() || "";
87
+ }
88
+ }
89
+ const isUnitHeading = /^##\s+(?:chương|module|unit|phần|chủ đề)\s*(\d+|[ivx]+)?[:.-]?\s*(.*)/i.test(line) || /^##\s+([^#].*)/.test(line);
90
+ if (isUnitHeading) {
91
+ if (currentTopic) {
92
+ currentTopic.rawLineEnd = lineNum - 1;
93
+ currentTopic = null;
94
+ }
95
+ unitIndex += 1;
96
+ const titleMatch = line.replace(/^##\s+/, "").trim();
97
+ currentUnit = {
98
+ id: `U${String(unitIndex).padStart(2, "0")}`,
99
+ title: titleMatch,
100
+ order: unitIndex,
101
+ topics: []
102
+ };
103
+ units.push(currentUnit);
104
+ continue;
105
+ }
106
+ const isTopicItem = /^(?:-\s*\*\*(?:bài|topic|lesson|chủ đề)\s*(\d+(?:\.\d+)?|\w+)?[:.-]?\s*(.*?)\*\*)/i.exec(line) || /^###\s+(?:bài|topic|lesson)?\s*(\d+(?:\.\d+)?|\w+)?[:.-]?\s*(.*)/i.exec(line) || /^-\s+\*\*(.*?)\*\*/.exec(line) || /^(\d+)\.\s+(?:(?:\*\*)?(?:bài|topic|lesson)?\s*(\d+(?:\.\d+)?|\w+)?[:.-]?\s*(.*?)(?:\*\*)?)$/i.exec(line);
107
+ if (isTopicItem) {
108
+ if (currentTopic) {
109
+ currentTopic.rawLineEnd = lineNum - 1;
110
+ }
111
+ if (!currentUnit) {
112
+ unitIndex += 1;
113
+ currentUnit = {
114
+ id: `U${String(unitIndex).padStart(2, "0")}`,
115
+ title: subjectTitle || "General",
116
+ order: unitIndex,
117
+ topics: []
118
+ };
119
+ units.push(currentUnit);
120
+ }
121
+ topicIndex += 1;
122
+ const rawName = (isTopicItem[3] || isTopicItem[2] || isTopicItem[1] || `Topic ${topicIndex}`).trim();
123
+ currentTopic = {
124
+ id: `T${String(topicIndex).padStart(2, "0")}`,
125
+ title: rawName,
126
+ unitId: currentUnit.id,
127
+ unitTitle: currentUnit.title,
128
+ description: "",
129
+ learningObjectives: [],
130
+ keywords: [],
131
+ rawLineStart: lineNum,
132
+ rawLineEnd: lineNum
133
+ };
134
+ currentUnit.topics.push(currentTopic);
135
+ allTopics.push(currentTopic);
136
+ continue;
137
+ }
138
+ if (currentTopic) {
139
+ currentTopic.rawLineEnd = lineNum;
140
+ const stripped = line.replace(/^[-*•\s]+/, "").trim();
141
+ if (stripped.toLowerCase().startsWith("m\u1EE5c ti\xEAu:") || stripped.toLowerCase().startsWith("objectives:")) {
142
+ const content = stripped.replace(/^(?:mục tiêu|objectives):\s*/i, "").trim();
143
+ if (content) currentTopic.learningObjectives.push(content);
144
+ continue;
145
+ }
146
+ if (stripped.toLowerCase().startsWith("t\u1EEB kh\xF3a:") || stripped.toLowerCase().startsWith("keywords:")) {
147
+ const rawKw = stripped.replace(/^(?:từ khóa|keywords):\s*/i, "").trim();
148
+ const tokens = rawKw.split(/[,;]+/).map((k) => k.trim()).filter(Boolean);
149
+ for (const tok of tokens) {
150
+ currentTopic.keywords.push(tok);
151
+ globalKeywordsSet.add(tok);
152
+ }
153
+ continue;
154
+ }
155
+ if (currentTopic.description) {
156
+ currentTopic.description += " " + stripped;
157
+ } else {
158
+ currentTopic.description = stripped;
159
+ }
160
+ for (const tok of extractTokens(stripped)) {
161
+ if (tok.length >= 4) globalKeywordsSet.add(tok);
162
+ }
163
+ }
164
+ }
165
+ if (currentTopic) {
166
+ currentTopic.rawLineEnd = lines.length;
167
+ }
168
+ if (!subjectTitle && units.length > 0) {
169
+ subjectTitle = units[0]?.title || "Untitled Subject";
170
+ }
171
+ return {
172
+ subject: {
173
+ title: subjectTitle || "Untitled Subject",
174
+ domain: extractDomain(rawText),
175
+ gradeBand: extractGradeBand(rawText),
176
+ description: subjectDesc
177
+ },
178
+ units,
179
+ allTopics,
180
+ extractedKeywords: [...globalKeywordsSet],
181
+ rawText
182
+ };
183
+ }
184
+
185
+ export { parseSyllabus };
186
+ //# sourceMappingURL=chunk-T4Y2DE2W.mjs.map
187
+ //# sourceMappingURL=chunk-T4Y2DE2W.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/parsers/syllabusParser.ts"],"names":[],"mappings":"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","file":"chunk-T4Y2DE2W.mjs","sourcesContent":["/**\n * Syllabus Parser — parses structured Markdown, numbered text, or outlines\n * into a structured ParsedSyllabus object with traceable line references.\n */\n\nexport interface SyllabusTopic {\n id: string;\n title: string;\n unitId: string;\n unitTitle: string;\n description: string;\n learningObjectives: string[];\n keywords: string[];\n rawLineStart: number;\n rawLineEnd: number;\n}\n\nexport interface SyllabusUnit {\n id: string;\n title: string;\n order: number;\n topics: SyllabusTopic[];\n}\n\nexport interface ParsedSyllabus {\n subject: {\n title: string;\n domain?: string;\n gradeBand?: [number, number];\n description?: string;\n estimatedHours?: number;\n };\n units: SyllabusUnit[];\n allTopics: SyllabusTopic[];\n extractedKeywords: string[];\n rawText: string;\n}\n\nconst STOP_WORDS = new Set([\n 'and', 'the', 'for', 'with', 'from', 'that', 'this', 'into', 'when', 'while',\n 'using', 'their', 'your', 'each', 'how', 'why', 'what', 'between', 'through',\n 'about', 'trong', 'nhung', 'cac', 'cua', 'cho', 'voi', 'duoc', 'khong', 'theo',\n 'tren', 'duoi', 'va', 'hoac', 'thi', 'la', 'nhu',\n]);\n\n/**\n * Heuristically extracts meaningful terminology keywords from text tokens.\n */\nfunction extractTokens(text: string): string[] {\n const words = text\n .toLowerCase()\n .replace(/[^a-z0-9à-ỹ\\s-]/gi, ' ')\n .split(/\\s+/)\n .filter((w) => w.length >= 3 && !STOP_WORDS.has(w));\n return [...new Set(words)];\n}\n\n/**\n * Detect grade band from raw text patterns like \"Lớp 7 - Lớp 9\", \"Grade Band: 15-18\", \"12 - 15 tuổi\".\n */\nfunction extractGradeBand(text: string): [number, number] | undefined {\n const gbMatch = text.match(/(?:grade\\s*band|độ\\s*tuổi|lớp)\\s*[:=]?\\s*(?:lớp\\s*)?(\\d{1,2})\\s*(?:-|đến|to)\\s*(?:lớp\\s*)?(\\d{1,2})/i);\n if (gbMatch && gbMatch[1] && gbMatch[2]) {\n const min = parseInt(gbMatch[1], 10);\n const max = parseInt(gbMatch[2], 10);\n return [Math.min(min, max), Math.max(min, max)];\n }\n return undefined;\n}\n\n/**\n * Detect domain from text keywords.\n */\nfunction extractDomain(text: string): string | undefined {\n const lower = text.toLowerCase();\n if (lower.includes('computer science') || lower.includes('lập trình') || lower.includes('algorithm') || lower.includes('software')) return 'software';\n if (lower.includes('toán') || lower.includes('geometry') || lower.includes('algebra') || lower.includes('hình học') || lower.includes('mathematics')) return 'math';\n if (lower.includes('vật lý') || lower.includes('hóa học') || lower.includes('sinh học') || lower.includes('physics') || lower.includes('chemistry') || lower.includes('biology') || lower.includes('science')) return 'science';\n if (lower.includes('tiếng') || lower.includes('ngữ văn') || lower.includes('grammar') || lower.includes('language') || lower.includes('writing') || lower.includes('literature')) return 'language';\n return undefined;\n}\n\n/**\n * Main syllabus parser function.\n */\nexport function parseSyllabus(rawText: string): ParsedSyllabus {\n const lines = rawText.split(/\\r?\\n/);\n let subjectTitle = '';\n let subjectDesc = '';\n\n const units: SyllabusUnit[] = [];\n const allTopics: SyllabusTopic[] = [];\n const globalKeywordsSet = new Set<string>();\n\n let currentUnit: SyllabusUnit | null = null;\n let currentTopic: SyllabusTopic | null = null;\n let unitIndex = 0;\n let topicIndex = 0;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!.trim();\n const lineNum = i + 1;\n if (!line) continue;\n\n // 1. Level 1 Heading: Subject Title\n if (line.startsWith('# ') && !subjectTitle) {\n subjectTitle = line.replace(/^#\\s+/, '').trim();\n continue;\n }\n\n // 2. Metadata lines at root\n if (!currentUnit) {\n if (line.toLowerCase().startsWith('môn học:') || line.toLowerCase().startsWith('subject:')) {\n const val = line.split(':')[1]?.trim() || '';\n if (val && !subjectTitle) subjectTitle = val;\n }\n if (line.toLowerCase().startsWith('mô tả:') || line.toLowerCase().startsWith('description:')) {\n subjectDesc = line.split(':')[1]?.trim() || '';\n }\n }\n\n // 3. Level 2 Heading: Unit / Chapter / Module\n const isUnitHeading = /^##\\s+(?:chương|module|unit|phần|chủ đề)\\s*(\\d+|[ivx]+)?[:.-]?\\s*(.*)/i.test(line)\n || /^##\\s+([^#].*)/.test(line);\n\n if (isUnitHeading) {\n if (currentTopic) {\n currentTopic.rawLineEnd = lineNum - 1;\n currentTopic = null;\n }\n unitIndex += 1;\n const titleMatch = line.replace(/^##\\s+/, '').trim();\n currentUnit = {\n id: `U${String(unitIndex).padStart(2, '0')}`,\n title: titleMatch,\n order: unitIndex,\n topics: [],\n };\n units.push(currentUnit);\n continue;\n }\n\n // 4. Topic heading inside Unit: \"- **Bài X: ...**\", \"### Topic ...\", \"1. Bài ...\", or \"- **...**\"\n const isTopicItem = /^(?:-\\s*\\*\\*(?:bài|topic|lesson|chủ đề)\\s*(\\d+(?:\\.\\d+)?|\\w+)?[:.-]?\\s*(.*?)\\*\\*)/i.exec(line)\n || /^###\\s+(?:bài|topic|lesson)?\\s*(\\d+(?:\\.\\d+)?|\\w+)?[:.-]?\\s*(.*)/i.exec(line)\n || /^-\\s+\\*\\*(.*?)\\*\\*/.exec(line)\n || /^(\\d+)\\.\\s+(?:(?:\\*\\*)?(?:bài|topic|lesson)?\\s*(\\d+(?:\\.\\d+)?|\\w+)?[:.-]?\\s*(.*?)(?:\\*\\*)?)$/i.exec(line);\n\n if (isTopicItem) {\n if (currentTopic) {\n currentTopic.rawLineEnd = lineNum - 1;\n }\n if (!currentUnit) {\n unitIndex += 1;\n currentUnit = {\n id: `U${String(unitIndex).padStart(2, '0')}`,\n title: subjectTitle || 'General',\n order: unitIndex,\n topics: [],\n };\n units.push(currentUnit);\n }\n topicIndex += 1;\n const rawName = (isTopicItem[3] || isTopicItem[2] || isTopicItem[1] || `Topic ${topicIndex}`).trim();\n currentTopic = {\n id: `T${String(topicIndex).padStart(2, '0')}`,\n title: rawName,\n unitId: currentUnit.id,\n unitTitle: currentUnit.title,\n description: '',\n learningObjectives: [],\n keywords: [],\n rawLineStart: lineNum,\n rawLineEnd: lineNum,\n };\n currentUnit.topics.push(currentTopic);\n allTopics.push(currentTopic);\n continue;\n }\n\n // 5. Content lines inside Topic\n if (currentTopic) {\n currentTopic.rawLineEnd = lineNum;\n const stripped = line.replace(/^[-*•\\s]+/, '').trim();\n\n // Objectives line\n if (stripped.toLowerCase().startsWith('mục tiêu:') || stripped.toLowerCase().startsWith('objectives:')) {\n const content = stripped.replace(/^(?:mục tiêu|objectives):\\s*/i, '').trim();\n if (content) currentTopic.learningObjectives.push(content);\n continue;\n }\n\n // Keywords line\n if (stripped.toLowerCase().startsWith('từ khóa:') || stripped.toLowerCase().startsWith('keywords:')) {\n const rawKw = stripped.replace(/^(?:từ khóa|keywords):\\s*/i, '').trim();\n const tokens = rawKw.split(/[,;]+/).map((k) => k.trim()).filter(Boolean);\n for (const tok of tokens) {\n currentTopic.keywords.push(tok);\n globalKeywordsSet.add(tok);\n }\n continue;\n }\n\n // General description line\n if (currentTopic.description) {\n currentTopic.description += ' ' + stripped;\n } else {\n currentTopic.description = stripped;\n }\n\n // Harvest tokens\n for (const tok of extractTokens(stripped)) {\n if (tok.length >= 4) globalKeywordsSet.add(tok);\n }\n }\n }\n\n // Close last topic if open\n if (currentTopic) {\n currentTopic.rawLineEnd = lines.length;\n }\n\n // Fallback subject title\n if (!subjectTitle && units.length > 0) {\n subjectTitle = units[0]?.title || 'Untitled Subject';\n }\n\n return {\n subject: {\n title: subjectTitle || 'Untitled Subject',\n domain: extractDomain(rawText),\n gradeBand: extractGradeBand(rawText),\n description: subjectDesc,\n },\n units,\n allTopics,\n extractedKeywords: [...globalKeywordsSet],\n rawText,\n };\n}\n"]}
@@ -372,6 +372,51 @@ var ThreeDesignTechStackExtensionSchema = z.object({
372
372
  canvas_size: z.string().optional(),
373
373
  export_formats: z.array(z.string()).optional().default([]).describe("STL, OBJ, STEP")
374
374
  });
375
+ var MathTheoremSchema = z.object({
376
+ name: z.string(),
377
+ statement: z.string(),
378
+ proof_outline: z.string().optional(),
379
+ converse_statement: z.string().optional()
380
+ });
381
+ var MathConceptExtensionSchema = z.object({
382
+ formulas: z.array(z.string()).optional().default([]).describe("Mathematical formulas, e.g. a^2 + b^2 = c^2"),
383
+ theorems: z.array(MathTheoremSchema).optional().default([]),
384
+ constructions: z.array(z.string()).optional().default([]).describe("Compass and ruler constructions, auxiliary lines"),
385
+ visual_aids: z.array(z.string()).optional().default([]).describe("Geometric figures, function graphs"),
386
+ common_mistakes: z.array(z.string()).optional().default([]).describe("False intuitions or algebraic traps")
387
+ });
388
+ var ExperimentProcedureSchema = z.object({
389
+ name: z.string(),
390
+ apparatus: z.array(z.string()).optional().default([]),
391
+ steps: z.array(z.string()).optional().default([]),
392
+ safety_warnings: z.array(z.string()).optional().default([]),
393
+ expected_observation: z.string().optional()
394
+ });
395
+ var ScienceConceptExtensionSchema = z.object({
396
+ experiments: z.array(ExperimentProcedureSchema).optional().default([]),
397
+ instruments: z.array(z.string()).optional().default([]).describe("Lab equipment: microscope, beaker, sensor"),
398
+ variables: z.object({
399
+ independent: z.string().optional(),
400
+ dependent: z.string().optional(),
401
+ controlled: z.array(z.string()).optional().default([])
402
+ }).optional(),
403
+ hypotheses: z.array(z.string()).optional().default([]),
404
+ laws_and_theories: z.array(z.string()).optional().default([])
405
+ });
406
+ var GrammarRuleSchema = z.object({
407
+ rule_name: z.string(),
408
+ pattern: z.string(),
409
+ example_correct: z.string(),
410
+ example_incorrect: z.string().optional(),
411
+ exceptions: z.array(z.string()).optional().default([])
412
+ });
413
+ var LanguageConceptExtensionSchema = z.object({
414
+ reading_genres: z.array(z.string()).optional().default([]).describe("argumentative, narrative, expository"),
415
+ grammar_rules: z.array(GrammarRuleSchema).optional().default([]),
416
+ writing_tasks: z.array(z.string()).optional().default([]),
417
+ lexicon_keywords: z.array(z.string()).optional().default([]),
418
+ rhetorical_devices: z.array(z.string()).optional().default([])
419
+ });
375
420
  var ProjectConceptLinkSchema = z.object({
376
421
  feature_id: z.string().describe("Feature ID from project_graph"),
377
422
  concept_id: z.string().describe("Concept ID from knowledge_graph"),
@@ -511,6 +556,6 @@ var DomainProfileSchema = z.object({
511
556
  syllabusText: z.string().optional().default("")
512
557
  });
513
558
 
514
- export { ArchEdgeSchema, ArchNodeSchema, ArchitectureDetailSchema, CapabilitySchema, ConceptCategorySchema, ConceptIntroductionSchema, ConceptSchema, DataIntegrationSchema, DecompositionSchema, DetectionConfidenceSchema, DevelopmentPhaseSchema, DevelopmentStageSchema, DomainCategorySchema, DomainProfileSchema, ExperienceComponentSchema, ExperienceSchema, FeatureSchema, GraphTypeSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, HybridGraphSchema, ImplementationSchema, InputTypeSchema, JourneySchema, JourneyStepSchema, KnowledgeGraphSchema, LearningModeSchema, LearningPathStepSchema, MilestoneDecompositionSchema, MissingGapSchema, NavigationSchema, ProblemTypeSchema, ProductGoalSchema, ProductSchema, ProductUserSchema, ProjectConceptLinkSchema, ProjectGraphSchema, ProjectInfoSchema, RequirementSchema, ScreenSchema, ShapeSchema, StepEffortSchema, StepOutcomeSchema, StepSchema, SubjectInfoSchema, TaskEffortSchema, TaskOutcomeSchema, TaskSchema, TechDebtSchema, TechStackSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, UiStateSchema, WiringSchema };
515
- //# sourceMappingURL=chunk-PM42MMDJ.mjs.map
516
- //# sourceMappingURL=chunk-PM42MMDJ.mjs.map
559
+ export { ArchEdgeSchema, ArchNodeSchema, ArchitectureDetailSchema, CapabilitySchema, ConceptCategorySchema, ConceptIntroductionSchema, ConceptSchema, DataIntegrationSchema, DecompositionSchema, DetectionConfidenceSchema, DevelopmentPhaseSchema, DevelopmentStageSchema, DomainCategorySchema, DomainProfileSchema, ExperienceComponentSchema, ExperienceSchema, ExperimentProcedureSchema, FeatureSchema, GrammarRuleSchema, GraphTypeSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, HybridGraphSchema, ImplementationSchema, InputTypeSchema, JourneySchema, JourneyStepSchema, KnowledgeGraphSchema, LanguageConceptExtensionSchema, LearningModeSchema, LearningPathStepSchema, MathConceptExtensionSchema, MathTheoremSchema, MilestoneDecompositionSchema, MissingGapSchema, NavigationSchema, ProblemTypeSchema, ProductGoalSchema, ProductSchema, ProductUserSchema, ProjectConceptLinkSchema, ProjectGraphSchema, ProjectInfoSchema, RequirementSchema, ScienceConceptExtensionSchema, ScreenSchema, ShapeSchema, StepEffortSchema, StepOutcomeSchema, StepSchema, SubjectInfoSchema, TaskEffortSchema, TaskOutcomeSchema, TaskSchema, TechDebtSchema, TechStackSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, UiStateSchema, WiringSchema };
560
+ //# sourceMappingURL=chunk-WHBAGJWN.mjs.map
561
+ //# sourceMappingURL=chunk-WHBAGJWN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/projectGraphSchema.ts","../src/schemas/knowledgeGraphSchema.ts","../src/schemas/domainExtensions.ts","../src/schemas/hybridGraphSchema.ts","../src/schemas/domainProfileSchema.ts"],"names":["z"],"mappings":"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","file":"chunk-WHBAGJWN.mjs","sourcesContent":["import { z } from 'zod';\n\n// ─── Step (trong Feature) ────────────────────────────────────────────────────\nexport const StepEffortSchema = z.object({\n estimated_minutes: z.number().optional(),\n complexity: z.enum(['low', 'medium', 'high']).optional(),\n concepts_count: z.number().optional(),\n files_touched: z.number().optional(),\n});\n\nexport const StepOutcomeSchema = z.object({\n user_visible: z.string().optional(),\n technical: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nexport const StepSchema = z.object({\n id: z.string(),\n sequence: z.number(),\n name: z.string(),\n description: z.string().optional().default(''),\n files: z.array(z.string()).optional().default([]),\n api_usage: z.array(z.string()).optional().default([]),\n keywords: z.array(z.string()).optional().default([]),\n completion_level: z.enum(['base', 'mvp', 'extend', 'polish']).optional().default('mvp'),\n platform: z.string().optional().default('app'),\n intent: z.string().optional().default(''),\n outcome: StepOutcomeSchema.optional(),\n acceptance: z.array(z.string()).optional().default([]),\n effort: StepEffortSchema.optional(),\n requirement_ids: z.array(z.string()).optional().default([]),\n concept_codes: z.array(z.string()).optional().default([]),\n});\nexport type Step = z.infer<typeof StepSchema>;\n\n// ─── Feature ─────────────────────────────────────────────────────────────────\nexport const FeatureSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n purpose: z.string().optional().default(''),\n priority: z.enum(['core', 'supporting', 'polish']).optional().default('core'),\n status: z.enum(['PLANNED', 'IMPLEMENTED', 'IN_PROGRESS']).optional().default('PLANNED'),\n platform: z.string().optional().default('app'),\n requirement_ids: z.array(z.string()).optional().default([]),\n journey_ids: z.array(z.string()).optional().default([]),\n depends_on: z.array(z.string()).optional().default([]),\n api_usage: z.array(z.string()).optional().default([]),\n steps: z.array(StepSchema).optional().default([]),\n});\nexport type Feature = z.infer<typeof FeatureSchema>;\n\n// ─── Journey ─────────────────────────────────────────────────────────────────\nexport const JourneyStepSchema = z.object({\n id: z.string(),\n name: z.string(),\n steps: z.array(z.string()).optional().default([]),\n requirement_ids: z.array(z.string()).optional().default([]),\n});\n\nexport const JourneySchema = z.object({\n id: z.string(),\n name: z.string(),\n steps: z.array(z.string()).optional().default([]),\n feature_ids: z.array(z.string()).optional().default([]),\n requirement_ids: z.array(z.string()).optional().default([]),\n});\n\n// ─── Requirement ─────────────────────────────────────────────────────────────\nexport const RequirementSchema = z.object({\n id: z.string(),\n statement: z.string(),\n priority: z.enum(['core', 'supporting', 'polish']).optional().default('core'),\n acceptance: z.array(z.string()).optional().default([]),\n completion_level: z.string().optional().default('base'),\n});\n\n// ─── Development Stage ───────────────────────────────────────────────────────\nexport const DevelopmentStageSchema = z.object({\n stage: z.string(),\n product_state: z.string().optional().default(''),\n need: z.array(z.string()).optional().default([]),\n learn: z.array(z.string()).optional().default([]),\n validation: z.string().optional().default(''),\n cross_feature_value: z.string().optional().default(''),\n temporary_approach: z.string().optional().default(''),\n});\n\n// ─── Product ─────────────────────────────────────────────────────────────────\nexport const ProductGoalSchema = z.object({\n id: z.string(),\n description: z.string(),\n});\n\nexport const ProductUserSchema = z.object({\n id: z.string(),\n goals: z.array(z.string()),\n});\n\nexport const ProductSchema = z.object({\n goals: z.array(ProductGoalSchema).optional().default([]),\n users: z.array(ProductUserSchema).optional().default([]),\n journeys: z.array(JourneySchema).optional().default([]),\n requirements: z.array(RequirementSchema).optional().default([]),\n development_stages: z.array(DevelopmentStageSchema).optional().default([]),\n purpose: z.string().optional().default(''),\n problem_statement: z.string().optional().default(''),\n primary_users: z.array(z.string()).optional().default([]),\n});\n\n// ─── Project ─────────────────────────────────────────────────────────────────\nexport const TechStackSchema = z.record(z.string(), z.array(z.string()));\n\nexport const ProjectInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n version: z.string().optional().default('0.1.0'),\n purpose: z.string().optional().default(''),\n project_type: z.string().optional().default('app'),\n platform: z.array(z.string()).optional().default([]),\n tech_stack: TechStackSchema.optional(),\n architecture: z.array(z.string()).optional().default([]),\n source: z.object({\n repository: z.string().optional().default(''),\n commit: z.string().optional().default(''),\n scan_dir: z.string().optional().default(''),\n }).optional(),\n});\n\n// ─── Capability ──────────────────────────────────────────────────────────────\nexport const CapabilitySchema = z.object({\n id: z.string(),\n feature_id: z.string(),\n purpose: z.string().optional().default(''),\n depends_on: z.array(z.string()).optional().default([]),\n produces: z.array(z.string()).optional().default([]),\n});\n\n// ─── Architecture ────────────────────────────────────────────────────────────\nexport const ArchNodeSchema = z.object({\n id: z.string(),\n type: z.string().optional().default('component'),\n custom_type: z.string().optional(),\n layer: z.string().optional().default('presentation'),\n responsibility: z.string().optional().default(''),\n depends_on: z.array(z.string()).optional().default([]),\n used_by: z.array(z.string()).optional().default([]),\n evidence_type: z.string().optional().default('INFERRED'),\n confidence: z.number().optional().default(0.5),\n});\n\nexport const ArchEdgeSchema = z.object({\n from: z.string(),\n to: z.string(),\n type: z.string().optional().default('USES'),\n});\n\nexport const ArchitectureDetailSchema = z.object({\n pattern: z.array(z.string()).optional().default([]),\n confidence: z.number().optional().default(0.5),\n evidence: z.array(z.string()).optional().default([]),\n nodes: z.array(ArchNodeSchema).optional().default([]),\n edges: z.array(ArchEdgeSchema).optional().default([]),\n});\n\n// ─── Experience ──────────────────────────────────────────────────────────────\nexport const ScreenSchema = z.object({\n id: z.string(),\n name: z.string().optional().default(''),\n purpose: z.string().optional().default(''),\n entry_point: z.boolean().optional().default(false),\n components: z.array(z.string()).optional().default([]),\n states: z.array(z.string()).optional().default([]),\n navigates_to: z.array(z.string()).optional().default([]),\n keywords: z.array(z.string()).optional().default([]),\n});\n\nexport const ExperienceComponentSchema = z.object({\n id: z.string(),\n type: z.string().optional().default('component'),\n purpose: z.string().optional().default(''),\n inputs: z.array(z.string()).optional().default([]),\n outputs: z.array(z.string()).optional().default([]),\n state: z.array(z.string()).optional().default([]),\n});\n\nexport const UiStateSchema = z.object({\n id: z.string(),\n owner: z.string().optional().default(''),\n triggered_by: z.array(z.string()).optional().default([]),\n transitions_to: z.array(z.string()).optional().default([]),\n});\n\nexport const NavigationSchema = z.object({\n from: z.string(),\n to: z.string(),\n trigger: z.string().optional().default(''),\n presentation: z.string().optional().default('push'),\n});\n\nexport const ExperienceSchema = z.object({\n screens: z.array(ScreenSchema).optional().default([]),\n components: z.array(ExperienceComponentSchema).optional().default([]),\n ui_states: z.array(UiStateSchema).optional().default([]),\n navigation: z.array(NavigationSchema).optional().default([]),\n});\n\n// ─── Data Integration ────────────────────────────────────────────────────────\nexport const DataIntegrationSchema = z.object({\n data_flows: z.array(z.any()).optional().default([]),\n models: z.array(z.any()).optional().default([]),\n integrations: z.array(z.any()).optional().default([]),\n persistence: z.array(z.any()).optional().default([]),\n});\n\n// ─── Implementation ──────────────────────────────────────────────────────────\nexport const TaskEffortSchema = z.object({\n concepts_count: z.number().optional().default(0),\n files_touched: z.number().optional().default(0),\n estimated_minutes: z.number().optional().default(0),\n});\n\nexport const TaskOutcomeSchema = z.object({\n user_visible: z.string().optional().default(''),\n technical: z.array(z.string()).optional().default([]),\n});\n\nexport const TaskSchema = z.object({\n id: z.string(),\n capability_id: z.string().optional().default(''),\n action: z.string(),\n modifies: z.array(z.string()).optional().default([]),\n creates: z.array(z.string()).optional().default([]),\n depends_on: z.array(z.string()).optional().default([]),\n acceptance: z.array(z.string()).optional().default([]),\n intent: z.string().optional().default(''),\n outcome: TaskOutcomeSchema.optional(),\n source_evidence: z.array(z.string()).optional().default([]),\n keywords: z.array(z.string()).optional().default([]),\n concurrency: z.array(z.string()).optional().default([]),\n effort: TaskEffortSchema.optional(),\n requirement_ids: z.array(z.string()).optional().default([]),\n});\n\nexport const ImplementationSchema = z.object({\n tasks: z.array(TaskSchema).optional().default([]),\n});\n\n// ─── Missing Gap & Tech Debt ─────────────────────────────────────────────────\nexport const MissingGapSchema = z.object({\n gap: z.string(),\n location: z.string().optional().default(''),\n suggested_lo: z.string().optional().default(''),\n});\n\nexport const TechDebtSchema = z.object({\n issue: z.string(),\n location: z.string().optional().default(''),\n severity: z.enum(['low', 'medium', 'high']).optional().default('medium'),\n});\n\n// ─── Decomposition ───────────────────────────────────────────────────────────\nexport const MilestoneDecompositionSchema = z.object({\n id: z.string(),\n phase: z.string().optional().default(''),\n name: z.string().optional().default(''),\n goal: z.string().optional().default(''),\n feature_ids: z.array(z.string()).optional().default([]),\n});\n\nexport const DecompositionSchema = z.object({\n milestones: z.array(MilestoneDecompositionSchema).optional().default([]),\n});\n\n// ─── Project Graph (Root) ────────────────────────────────────────────────────\nexport const ProjectGraphSchema = z.object({\n schema_version: z.literal(3).optional().default(3),\n project: ProjectInfoSchema,\n product: ProductSchema,\n features: z.array(FeatureSchema).optional().default([]),\n capabilities: z.array(CapabilitySchema).optional().default([]),\n architecture_detail: ArchitectureDetailSchema.optional(),\n experience: ExperienceSchema.optional(),\n data_integration: DataIntegrationSchema.optional(),\n implementation: ImplementationSchema,\n decomposition: DecompositionSchema.optional(),\n missing_gaps: z.array(MissingGapSchema).optional().default([]),\n tech_debt: z.array(TechDebtSchema).optional().default([]),\n});\n\nexport type ProjectGraph = z.infer<typeof ProjectGraphSchema>;\nexport type Product = z.infer<typeof ProductSchema>;\nexport type Capability = z.infer<typeof CapabilitySchema>;\nexport type ArchitectureDetail = z.infer<typeof ArchitectureDetailSchema>;\nexport type Experience = z.infer<typeof ExperienceSchema>;\nexport type DataIntegration = z.infer<typeof DataIntegrationSchema>;\nexport type Implementation = z.infer<typeof ImplementationSchema>;\nexport type Decomposition = z.infer<typeof DecompositionSchema>;\n","/**\n * Knowledge Graph Schema — for concept-driven learning domains\n * (Math, Science, Language, Arts, Research)\n *\n * Unlike ProjectGraph (product decomposition), KnowledgeGraph represents\n * concept decomposition with ULO/CIO/SIO levels and prerequisite chains.\n */\n\nimport { z } from 'zod';\n\n// ─── Problem Type ────────────────────────────────────────────────────────────\nexport const ProblemTypeSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n bloom_level: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create']).optional().default('Understand'),\n difficulty: z.enum(['easy', 'medium', 'hard']).optional().default('medium'),\n estimated_minutes: z.number().optional().default(10),\n examples: z.array(z.string()).optional().default([]),\n common_mistakes: z.array(z.string()).optional().default([]),\n});\nexport type ProblemType = z.infer<typeof ProblemTypeSchema>;\n\n// ─── Concept ─────────────────────────────────────────────────────────────────\nexport const ConceptSchema = z.object({\n id: z.string(),\n // Production-standard neutral code (UPPER_SNAKE_CASE, Naming Conventions v2.2).\n // After STEP_2_5 standardization this is either a knowledge-tree code\n // (standardized) or a provisional proposed code (tracked in the proposals\n // artifact for later merge).\n code: z.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),\n // Knowledge-tree provenance (STEP_2_5): standardized | proposed_new | unset\n standardization: z.enum(['standardized', 'proposed_new']).optional(),\n tree_code: z.string().optional().describe('Exact knowledge-tree CONCEPT code when standardization=standardized'),\n tree_prerequisites: z.array(z.string()).optional().default([]).describe('Knowledge-tree prerequisite concept codes (seed for prereq edges)'),\n name: z.string(),\n description: z.string().optional().default(''),\n category: z.string().optional().default(''),\n\n // ULO/CIO/SIO — technology-independent knowledge levels.\n // Text fields use the production clause \"The learner will be able to ...\".\n ulo: z.string().optional().default('').describe('WHAT + WHY: What is this concept? Why does it exist? What problem does it solve?'),\n ulo_code: z.string().optional().describe('ULO-[CONCEPT]-NN per Naming Conventions v2.2'),\n cio: z.string().optional().default('').describe('HOW: How does it solve the problem? What is the mechanism?'),\n cio_code: z.string().optional().describe('CIO-[CONCEPT]-NN-ACTION per Naming Conventions v2.2'),\n sio: z.array(z.string()).optional().default([]).describe('IMPLEMENTATION: Specific implementations in concrete technologies'),\n sio_codes: z.array(z.string()).optional().describe('SIO-[TECH]-[CONCEPT]-NN, one per sio item'),\n\n // Prerequisites and timing\n prerequisites: z.array(z.string()).optional().default([]).describe('Concept IDs that must be learned first'),\n estimated_minutes: z.number().optional().default(30),\n\n // Problem types associated with this concept\n problem_types: z.array(ProblemTypeSchema).optional().default([]),\n\n // Supporting materials\n techniques: z.array(z.string()).optional().default([]).describe('Methods, formulas, tools, procedures'),\n materials: z.array(z.string()).optional().default([]).describe('Physical materials needed (lab equipment, instruments)'),\n visual_aids: z.array(z.string()).optional().default([]).describe('Diagrams, images, animations needed'),\n common_mistakes: z.array(z.string()).optional().default([]).describe('Frequently confused ideas or errors'),\n\n // Metadata\n keywords: z.array(z.string()).optional().default([]).describe('Technology-specific keywords (SIO level)'),\n tech_stack: z.array(z.string()).optional().default([]).describe('Specific technologies if applicable'),\n});\nexport type Concept = z.infer<typeof ConceptSchema>;\n\n// ─── Category ────────────────────────────────────────────────────────────────\nexport const ConceptCategorySchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n concept_ids: z.array(z.string()).optional().default([]),\n order: z.number().optional().default(0).describe('Teaching order within the subject'),\n});\nexport type ConceptCategory = z.infer<typeof ConceptCategorySchema>;\n\n// ─── Subject ─────────────────────────────────────────────────────────────────\nexport const SubjectInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n domain: z.enum(['math', 'science', 'language', 'arts', 'research', 'business', 'other']).optional().default('other'),\n grade_band: z.tuple([z.number().int(), z.number().int()]).optional(),\n estimated_hours: z.number().optional().default(0),\n estimated_weeks: z.number().optional().default(0),\n syllabus_ref: z.string().optional().default('').describe('Reference to original syllabus/curriculum'),\n});\nexport type SubjectInfo = z.infer<typeof SubjectInfoSchema>;\n\n// ─── Learning Path ───────────────────────────────────────────────────────────\nexport const LearningPathStepSchema = z.object({\n concept_id: z.string(),\n order: z.number(),\n depends_on: z.array(z.string()).optional().default([]),\n milestone_name: z.string().optional().default(''),\n});\nexport type LearningPathStep = z.infer<typeof LearningPathStepSchema>;\n\n// ─── Knowledge Graph (Root) ──────────────────────────────────────────────────\nexport const KnowledgeGraphSchema = z.object({\n schema_version: z.literal(1).optional().default(1),\n type: z.literal('knowledge_graph').optional().default('knowledge_graph'),\n subject: SubjectInfoSchema,\n concepts: z.array(ConceptSchema).optional().default([]),\n categories: z.array(ConceptCategorySchema).optional().default([]),\n learning_path: z.array(LearningPathStepSchema).optional().default([]).describe('Recommended teaching order'),\n});\nexport type KnowledgeGraph = z.infer<typeof KnowledgeGraphSchema>;\n","/**\n * Domain-specific extensions for ProjectGraph and KnowledgeGraph.\n * These are overlay schemas that add domain-specific fields to the base graphs.\n */\n\nimport { z } from 'zod';\n\n// ─── Hardware/IoT Extension (Product-Driven) ─────────────────────────────────\n\nexport const WiringSchema = z.object({\n component: z.string(),\n pin: z.string(),\n connection: z.string(),\n wire_color: z.string().optional(),\n notes: z.string().optional(),\n});\n\nexport const HardwareStepSchema = z.object({\n action: z.string(),\n tool: z.string().optional(),\n safety_note: z.string().optional(),\n estimated_minutes: z.number().optional(),\n});\n\nexport const HardwareFeatureExtensionSchema = z.object({\n wiring: z.array(WiringSchema).optional().default([]),\n components_used: z.array(z.string()).optional().default([]),\n circuit_diagram_ref: z.string().optional(),\n});\n\nexport const HardwareTaskExtensionSchema = z.object({\n techniques: z.array(z.string()).optional().default([]).describe('soldering, breadboarding, debugging'),\n hardware_steps: z.array(HardwareStepSchema).optional().default([]),\n safety_notes: z.array(z.string()).optional().default([]),\n multimeter_readings: z.boolean().optional().default(false),\n});\n\nexport const HardwareTechStackExtensionSchema = z.object({\n materials: z.array(z.string()).optional().default([]).describe('Physical components: Arduino Uno, LED, Servo'),\n tools: z.array(z.string()).optional().default([]).describe('Arduino IDE, USB cable, Multimeter'),\n protocols: z.array(z.string()).optional().default([]).describe('I2C, PWM, SPI, UART'),\n pin_config: z.record(z.string(), z.string()).optional().default({}).describe('Pin assignments'),\n power_requirements: z.string().optional(),\n});\n\n// ─── 3D Design Extension (Product-Driven) ─────────────────────────────────────\n\nexport const ShapeSchema = z.object({\n id: z.string(),\n type: z.string().describe('Box, Cylinder, Sphere, Roof, Torus, Hole, etc.'),\n dimensions: z.string().describe('e.g. \"200x150x5mm\"'),\n position: z.string().describe('e.g. \"0,0,0\"'),\n color: z.string().optional(),\n rotation: z.string().optional(),\n});\n\nexport const ThreeDesignFeatureExtensionSchema = z.object({\n shapes: z.array(ShapeSchema).optional().default([]),\n assembly_order: z.array(z.string()).optional().default([]).describe('Shape IDs in assembly order'),\n group_operations: z.array(z.string()).optional().default([]).describe('Group/hole operations'),\n});\n\nexport const ThreeDesignTaskExtensionSchema = z.object({\n operations: z.array(z.string()).optional().default([]).describe('create, resize, position, group, align, hole'),\n dimensions: z.record(z.string(), z.string()).optional().default({}),\n shape_type: z.string().optional(),\n constraints: z.array(z.string()).optional().default([]),\n});\n\nexport const ThreeDesignTechStackExtensionSchema = z.object({\n design_software: z.string().optional().describe('Tinkercad, Fusion360, Blender'),\n units: z.string().optional().default('mm'),\n canvas_size: z.string().optional(),\n export_formats: z.array(z.string()).optional().default([]).describe('STL, OBJ, STEP'),\n});\n\n// ─── Math Extension (Concept-Driven) ──────────────────────────────────────────\n\nexport const MathTheoremSchema = z.object({\n name: z.string(),\n statement: z.string(),\n proof_outline: z.string().optional(),\n converse_statement: z.string().optional(),\n});\n\nexport const MathConceptExtensionSchema = z.object({\n formulas: z.array(z.string()).optional().default([]).describe('Mathematical formulas, e.g. a^2 + b^2 = c^2'),\n theorems: z.array(MathTheoremSchema).optional().default([]),\n constructions: z.array(z.string()).optional().default([]).describe('Compass and ruler constructions, auxiliary lines'),\n visual_aids: z.array(z.string()).optional().default([]).describe('Geometric figures, function graphs'),\n common_mistakes: z.array(z.string()).optional().default([]).describe('False intuitions or algebraic traps'),\n});\nexport type MathConceptExtension = z.infer<typeof MathConceptExtensionSchema>;\n\n// ─── Science Extension (Concept-Driven) ───────────────────────────────────────\n\nexport const ExperimentProcedureSchema = z.object({\n name: z.string(),\n apparatus: z.array(z.string()).optional().default([]),\n steps: z.array(z.string()).optional().default([]),\n safety_warnings: z.array(z.string()).optional().default([]),\n expected_observation: z.string().optional(),\n});\n\nexport const ScienceConceptExtensionSchema = z.object({\n experiments: z.array(ExperimentProcedureSchema).optional().default([]),\n instruments: z.array(z.string()).optional().default([]).describe('Lab equipment: microscope, beaker, sensor'),\n variables: z.object({\n independent: z.string().optional(),\n dependent: z.string().optional(),\n controlled: z.array(z.string()).optional().default([]),\n }).optional(),\n hypotheses: z.array(z.string()).optional().default([]),\n laws_and_theories: z.array(z.string()).optional().default([]),\n});\nexport type ScienceConceptExtension = z.infer<typeof ScienceConceptExtensionSchema>;\n\n// ─── Language & Humanities Extension (Concept-Driven) ─────────────────────────\n\nexport const GrammarRuleSchema = z.object({\n rule_name: z.string(),\n pattern: z.string(),\n example_correct: z.string(),\n example_incorrect: z.string().optional(),\n exceptions: z.array(z.string()).optional().default([]),\n});\n\nexport const LanguageConceptExtensionSchema = z.object({\n reading_genres: z.array(z.string()).optional().default([]).describe('argumentative, narrative, expository'),\n grammar_rules: z.array(GrammarRuleSchema).optional().default([]),\n writing_tasks: z.array(z.string()).optional().default([]),\n lexicon_keywords: z.array(z.string()).optional().default([]),\n rhetorical_devices: z.array(z.string()).optional().default([]),\n});\nexport type LanguageConceptExtension = z.infer<typeof LanguageConceptExtensionSchema>;\n","/**\n * Hybrid Graph Schema — for projects that combine product-driven and concept-driven learning.\n *\n * Example: \"Build an Arduino robot but need to understand electronics theory first\"\n * Links project_graph (what to build) with knowledge_graph (what to understand).\n */\n\nimport { z } from 'zod';\nimport { ProjectGraphSchema } from './projectGraphSchema';\nimport { KnowledgeGraphSchema } from './knowledgeGraphSchema';\n\n// ─── Link between Project and Knowledge ──────────────────────────────────────\nexport const ProjectConceptLinkSchema = z.object({\n feature_id: z.string().describe('Feature ID from project_graph'),\n concept_id: z.string().describe('Concept ID from knowledge_graph'),\n relationship: z.enum([\n 'requires', // Feature requires understanding this concept\n 'demonstrates', // Feature demonstrates this concept in practice\n 'applies', // Feature applies this concept\n 'extends', // Feature extends this concept to new context\n ]).optional().default('requires'),\n depth: z.enum([\n 'ulo', // Feature only needs WHAT+WHY understanding\n 'cio', // Feature needs HOW understanding\n 'sio', // Feature needs specific implementation knowledge\n ]).optional().default('cio'),\n description: z.string().optional().default(''),\n estimated_prereq_minutes: z.number().optional().default(0).describe('How many minutes of concept learning before this feature'),\n phase_id: z.string().optional().default('').describe('Development phase this link belongs to'),\n});\n\n// ─── Development Phase (progressive completion) ──────────────────────────────\nexport const ConceptIntroductionSchema = z.object({\n concept_id: z.string().describe('Concept ID from knowledge_graph'),\n aspect: z.enum(['new', 'advanced']).default('new').describe(\n 'new = concept introduced for the first time; advanced = previously introduced concept revisited at higher depth'\n ),\n note: z.string().optional().default('').describe('Which advanced aspect of the concept this phase develops'),\n});\n\nexport const DevelopmentPhaseSchema = z.object({\n id: z.string().describe('Phase id, e.g. PH1'),\n order: z.number().int().positive().describe('1-based phase execution order'),\n name: z.string().min(1).describe('Short phase name'),\n product_completion: z.string().min(1).describe(\n 'What the product can demonstrably DO once this phase is complete (completion level description)'\n ),\n feature_ids: z.array(z.string()).default([]).describe('Every feature built during this phase (each feature in EXACTLY one phase)'),\n introduces: z.array(ConceptIntroductionSchema).default([]).describe(\n 'Concepts introduced (new) or revisited at advanced depth (advanced) at the start of this phase'\n ),\n});\n\n// ─── Hybrid Graph (Root) ─────────────────────────────────────────────────────\nexport const HybridGraphSchema = z.object({\n schema_version: z.literal(1).optional().default(1),\n type: z.literal('hybrid_graph').optional().default('hybrid_graph'),\n\n // Product decomposition (what to build)\n project_graph: ProjectGraphSchema,\n\n // Concept decomposition (what to understand)\n knowledge_graph: KnowledgeGraphSchema,\n\n // Links between features and concepts\n links: z.array(ProjectConceptLinkSchema).optional().default([]),\n\n // Progressive completion phases (cross-feature decomposition). Empty for\n // pre-phase legacy graphs — emitters fall back to feature ordering.\n phases: z.array(DevelopmentPhaseSchema).optional().default([]),\n\n // Metadata\n description: z.string().optional().default(''),\n total_project_minutes: z.number().optional().default(0),\n total_concept_minutes: z.number().optional().default(0),\n estimated_total_minutes: z.number().optional().default(0),\n});\nexport type HybridGraph = z.infer<typeof HybridGraphSchema>;\nexport type ProjectConceptLink = z.infer<typeof ProjectConceptLinkSchema>;\nexport type DevelopmentPhase = z.infer<typeof DevelopmentPhaseSchema>;\nexport type ConceptIntroduction = z.infer<typeof ConceptIntroductionSchema>;\n","/**\n * Domain Profile Schema — output of domain detection.\n *\n * Determines:\n * 1. Input type (repository, description, syllabus, files, mixed)\n * 2. Domain category (software, hardware, math, science, etc.)\n * 3. Learning mode (product, concept, hybrid)\n * 4. Which graph type and pipeline to use\n */\n\nimport { z } from 'zod';\n\n// ─── Input Type ──────────────────────────────────────────────────────────────\nexport const InputTypeSchema = z.enum([\n 'repository', // Source code repo (git URL or local dir)\n 'description', // Text description of subject/project\n 'syllabus', // Syllabus, curriculum framework, textbook outline\n 'files', // Non-code files (3D models, images, documents)\n 'mixed', // Combination of the above\n]);\n\n// ─── Domain Category ─────────────────────────────────────────────────────────\nexport const DomainCategorySchema = z.enum([\n 'software', // App, web, API, CLI, library\n 'hardware_iot', // Arduino, robotics, ESP32, Raspberry Pi\n '3d_design', // Tinkercad, Fusion360, Blender, CAD\n 'math', // Hình học, đại số, giải tích, xác suất\n 'science', // Lý, hóa, sinh, địa lý\n 'language', // Tiếng Việt, English, writing, grammar\n 'arts', // Âm nhạc, hội họa, thiết kế, nhiếp ảnh\n 'research', // Nghiên cứu, thống kê, phân tích dữ liệu\n 'business', // Kinh doanh, tài chính, quản lý\n 'other',\n]);\n\n// ─── Learning Mode ───────────────────────────────────────────────────────────\nexport const LearningModeSchema = z.enum([\n 'product', // Build a product (project-driven)\n 'concept', // Understand concepts (knowledge-driven)\n 'hybrid', // Both: build product while understanding concepts\n]);\n\n// ─── Graph Type ──────────────────────────────────────────────────────────────\nexport const GraphTypeSchema = z.enum([\n 'project_graph', // Product decomposition (software, hardware, 3d_design)\n 'knowledge_graph', // Concept decomposition (math, science, language, etc.)\n 'hybrid_graph', // Both linked together\n]);\n\n// ─── Confidence ──────────────────────────────────────────────────────────────\nexport const DetectionConfidenceSchema = z.object({\n inputType: z.number().min(0).max(1).optional().default(0.5),\n domainCategory: z.number().min(0).max(1).optional().default(0.5),\n learningMode: z.number().min(0).max(1).optional().default(0.5),\n});\n\n// ─── Domain Profile (Root) ───────────────────────────────────────────────────\nexport const DomainProfileSchema = z.object({\n // Detection results\n inputType: InputTypeSchema,\n domainCategory: DomainCategorySchema,\n learningMode: LearningModeSchema,\n graphType: GraphTypeSchema,\n\n // Confidence scores\n confidence: DetectionConfidenceSchema.optional(),\n\n // Evidence for detection decisions\n evidence: z.array(z.string()).optional().default([]),\n\n // Detected metadata (optional, populated during detection)\n detectedTechStack: z.array(z.string()).optional().default([]),\n detectedSubject: z.string().optional().default(''),\n detectedGradeBand: z.tuple([z.number().int(), z.number().int()]).optional(),\n detectedDomain: z.string().optional().default(''),\n\n // User-provided context (pass-through)\n goal: z.string().optional().default(''),\n description: z.string().optional().default(''),\n repoUrl: z.string().optional().default(''),\n repoDir: z.string().optional().default(''),\n syllabusText: z.string().optional().default(''),\n});\nexport type DomainProfile = z.infer<typeof DomainProfileSchema>;\nexport type InputType = z.infer<typeof InputTypeSchema>;\nexport type DomainCategory = z.infer<typeof DomainCategorySchema>;\nexport type LearningMode = z.infer<typeof LearningModeSchema>;\nexport type GraphType = z.infer<typeof GraphTypeSchema>;\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-ZKLT27T4.mjs.map
3
+ //# sourceMappingURL=chunk-ZKLT27T4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-ZKLT27T4.mjs"}
@@ -1,6 +1,6 @@
1
1
  import { L as LlmClientConfig } from '../llmClient-ysPhLjcH.cjs';
2
- import { K as Keyword } from '../keywordExtractor-zPAz2isq.cjs';
3
- import '../parsers/index.cjs';
2
+ import { K as Keyword } from '../keywordExtractor-BxlGRMHC.cjs';
3
+ import '../cpp-CZUPqJt9.cjs';
4
4
 
5
5
  /**
6
6
  * Concept resolution — maps keywords to Master Tree concepts.
@@ -1,6 +1,6 @@
1
1
  import { L as LlmClientConfig } from '../llmClient-ysPhLjcH.js';
2
- import { K as Keyword } from '../keywordExtractor-CKaXqSku.js';
3
- import '../parsers/index.js';
2
+ import { K as Keyword } from '../keywordExtractor-DU5XRN8-.js';
3
+ import '../cpp-CZUPqJt9.js';
4
4
 
5
5
  /**
6
6
  * Concept resolution — maps keywords to Master Tree concepts.
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Swift AST-level parser — extracts imports, types, functions, property wrappers,
3
+ * error handling patterns, and framework usage from Swift source files.
4
+ *
5
+ * Ported from knowledge-tree/extract_project_keywords.py parse_swift_file()
6
+ */
7
+ interface SwiftParseResult {
8
+ imports: string[];
9
+ types: Array<{
10
+ kind: string;
11
+ name: string;
12
+ conforms_to: string[];
13
+ file: string;
14
+ }>;
15
+ functions: Array<{
16
+ name: string;
17
+ params: string;
18
+ returns: string;
19
+ file: string;
20
+ }>;
21
+ property_wrappers: string[];
22
+ error_handling: string[];
23
+ frameworks_used: string[];
24
+ }
25
+ declare function parseSwiftFile(filepath: string, content: string): SwiftParseResult;
26
+ declare function mergeSwiftResults(results: SwiftParseResult[]): SwiftParseResult;
27
+
28
+ /**
29
+ * TypeScript/JavaScript AST-level parser — extracts imports, types, functions,
30
+ * and error handling patterns.
31
+ *
32
+ * Ported from knowledge-tree/extract_project_keywords.py parse_ts_file()
33
+ */
34
+ interface TsParseResult {
35
+ imports: string[];
36
+ types: Array<{
37
+ kind: string;
38
+ name: string;
39
+ file: string;
40
+ }>;
41
+ functions: Array<{
42
+ name: string;
43
+ params: string;
44
+ file: string;
45
+ }>;
46
+ error_handling: string[];
47
+ }
48
+ declare function parseTsFile(filepath: string, content: string): TsParseResult;
49
+ declare function mergeTsResults(results: TsParseResult[]): TsParseResult;
50
+
51
+ /**
52
+ * Python AST-level parser — extracts imports, classes, functions, docstrings,
53
+ * and error handling patterns.
54
+ *
55
+ * Ported from knowledge-tree/extract_project_keywords.py parse_python_file()
56
+ */
57
+ interface PythonParseResult {
58
+ imports: string[];
59
+ types: Array<{
60
+ kind: string;
61
+ name: string;
62
+ bases: string[];
63
+ file: string;
64
+ }>;
65
+ functions: Array<{
66
+ name: string;
67
+ params: string;
68
+ file: string;
69
+ }>;
70
+ docstrings: string[];
71
+ error_handling: string[];
72
+ }
73
+ declare function parsePythonFile(filepath: string, content: string): PythonParseResult;
74
+ declare function mergePythonResults(results: PythonParseResult[]): PythonParseResult;
75
+
76
+ /**
77
+ * C++/Arduino AST-level parser — extracts #include, types, functions,
78
+ * and error handling patterns.
79
+ *
80
+ * Ported from knowledge-tree/extract_project_keywords.py parse_cpp_file()
81
+ */
82
+ interface CppParseResult {
83
+ imports: string[];
84
+ types: Array<{
85
+ kind: string;
86
+ name: string;
87
+ file: string;
88
+ }>;
89
+ functions: Array<{
90
+ name: string;
91
+ file: string;
92
+ }>;
93
+ error_handling: string[];
94
+ }
95
+ declare function parseCppFile(filepath: string, content: string): CppParseResult;
96
+ declare function mergeCppResults(results: CppParseResult[]): CppParseResult;
97
+
98
+ export { type CppParseResult as C, type PythonParseResult as P, type SwiftParseResult as S, type TsParseResult as T, parseTsFile as a, mergeTsResults as b, parsePythonFile as c, mergePythonResults as d, parseCppFile as e, mergeCppResults as f, mergeSwiftResults as m, parseSwiftFile as p };