@thanh01.pmt/domain-kit 0.5.0 → 0.6.1

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 (101) hide show
  1. package/README.md +682 -168
  2. package/dist/assembly/index.d.cts +3 -2
  3. package/dist/assembly/index.d.ts +3 -2
  4. package/dist/{chunk-TYXSJUQU.mjs → chunk-4UCXYRM3.mjs} +208 -310
  5. package/dist/chunk-4UCXYRM3.mjs.map +1 -0
  6. package/dist/chunk-7A2SG466.mjs +325 -0
  7. package/dist/chunk-7A2SG466.mjs.map +1 -0
  8. package/dist/{chunk-E4GCCWJO.mjs → chunk-CGNXGVHV.mjs} +37 -4
  9. package/dist/chunk-CGNXGVHV.mjs.map +1 -0
  10. package/dist/{chunk-DRVOV5ZD.mjs → chunk-DSEJLTUO.mjs} +2 -2
  11. package/dist/chunk-DSEJLTUO.mjs.map +1 -0
  12. package/dist/{chunk-VCPIWJ7R.mjs → chunk-H4W3YJLK.mjs} +29 -4
  13. package/dist/chunk-H4W3YJLK.mjs.map +1 -0
  14. package/dist/chunk-IBVXXVGE.mjs +14 -0
  15. package/dist/chunk-IBVXXVGE.mjs.map +1 -0
  16. package/dist/{chunk-G7HLFMD2.mjs → chunk-KHCZYLKM.mjs} +68 -33
  17. package/dist/chunk-KHCZYLKM.mjs.map +1 -0
  18. package/dist/chunk-OYSZQVPY.mjs +10 -0
  19. package/dist/chunk-OYSZQVPY.mjs.map +1 -0
  20. package/dist/{chunk-BL5NBKPH.mjs → chunk-WD3P5V3B.mjs} +19 -8
  21. package/dist/chunk-WD3P5V3B.mjs.map +1 -0
  22. package/dist/{chunk-TWKIVUTQ.mjs → chunk-WKTH3JPA.mjs} +197 -36
  23. package/dist/chunk-WKTH3JPA.mjs.map +1 -0
  24. package/dist/{conceptEscalator-ltRLtPhf.d.cts → conceptEscalator-BmMJD8C5.d.cts} +10 -1
  25. package/dist/{conceptEscalator-YfMKIKCZ.d.ts → conceptEscalator-DMsehscs.d.ts} +10 -1
  26. package/dist/concepts/index.d.cts +4 -3
  27. package/dist/concepts/index.d.ts +4 -3
  28. package/dist/{cpp-CZUPqJt9.d.cts → cpp-vlDl6pCL.d.cts} +4 -4
  29. package/dist/{cpp-CZUPqJt9.d.ts → cpp-vlDl6pCL.d.ts} +4 -4
  30. package/dist/{curriculumFeedSchema-DUFwFyr2.d.ts → curriculumFeedSchema-DK-TUAJZ.d.cts} +164 -9
  31. package/dist/{curriculumFeedSchema-DUFwFyr2.d.cts → curriculumFeedSchema-DK-TUAJZ.d.ts} +164 -9
  32. package/dist/detector/index.cjs +22 -6
  33. package/dist/detector/index.cjs.map +1 -1
  34. package/dist/detector/index.d.cts +2 -2
  35. package/dist/detector/index.d.ts +2 -2
  36. package/dist/detector/index.mjs +2 -1
  37. package/dist/{domainProfileDetector-DHb1T0zB.d.ts → domainProfileDetector-6pjgL-6_.d.ts} +1 -1
  38. package/dist/{domainProfileDetector-bzugdQmS.d.cts → domainProfileDetector-BsADsuRV.d.cts} +1 -1
  39. package/dist/{domainProfileSchema-CwT3Ffsw.d.ts → domainProfileSchema-779FGk14.d.cts} +38 -1
  40. package/dist/{domainProfileSchema-CwT3Ffsw.d.cts → domainProfileSchema-779FGk14.d.ts} +38 -1
  41. package/dist/extractors/index.d.cts +3 -3
  42. package/dist/extractors/index.d.ts +3 -3
  43. package/dist/feed/index.cjs +229 -33
  44. package/dist/feed/index.cjs.map +1 -1
  45. package/dist/feed/index.d.cts +32 -2
  46. package/dist/feed/index.d.ts +32 -2
  47. package/dist/feed/index.mjs +2 -2
  48. package/dist/graph/index.cjs +308 -86
  49. package/dist/graph/index.cjs.map +1 -1
  50. package/dist/graph/index.d.cts +20 -8
  51. package/dist/graph/index.d.ts +20 -8
  52. package/dist/graph/index.mjs +4 -1
  53. package/dist/{hybridGraphPipeline-dT-bio-3.d.cts → hybridGraphPipeline-B4mamLim.d.cts} +6 -2
  54. package/dist/{hybridGraphPipeline-DXQDbBEj.d.ts → hybridGraphPipeline-D2_1GUva.d.ts} +6 -2
  55. package/dist/{hybridGraphSchema-nrUeSwpU.d.ts → hybridGraphSchema-C37qxdTM.d.cts} +16 -3
  56. package/dist/{hybridGraphSchema-nrUeSwpU.d.cts → hybridGraphSchema-C37qxdTM.d.ts} +16 -3
  57. package/dist/index.cjs +3948 -3464
  58. package/dist/index.cjs.map +1 -1
  59. package/dist/index.d.cts +11 -10
  60. package/dist/index.d.ts +11 -10
  61. package/dist/index.mjs +14 -11
  62. package/dist/{keywordExtractor-BxlGRMHC.d.cts → keywordExtractor-1YAFntsn.d.cts} +1 -1
  63. package/dist/{keywordExtractor-DU5XRN8-.d.ts → keywordExtractor-DWw8z_AF.d.ts} +1 -1
  64. package/dist/parsers/index.cjs.map +1 -1
  65. package/dist/parsers/index.d.cts +1 -1
  66. package/dist/parsers/index.d.ts +1 -1
  67. package/dist/parsers/index.mjs +1 -1
  68. package/dist/pipeline/index.cjs +2436 -1994
  69. package/dist/pipeline/index.cjs.map +1 -1
  70. package/dist/pipeline/index.d.cts +19 -10
  71. package/dist/pipeline/index.d.ts +19 -10
  72. package/dist/pipeline/index.mjs +11 -8
  73. package/dist/schemas/index.cjs +63 -2
  74. package/dist/schemas/index.cjs.map +1 -1
  75. package/dist/schemas/index.d.cts +3 -3
  76. package/dist/schemas/index.d.ts +3 -3
  77. package/dist/schemas/index.mjs +2 -2
  78. package/dist/utils/llmClient.cjs +344 -0
  79. package/dist/utils/llmClient.cjs.map +1 -0
  80. package/dist/utils/llmClient.d.cts +118 -0
  81. package/dist/utils/llmClient.d.ts +118 -0
  82. package/dist/utils/llmClient.mjs +4 -0
  83. package/dist/utils/llmClient.mjs.map +1 -0
  84. package/dist/utils/llmTransportResult.cjs +16 -0
  85. package/dist/utils/llmTransportResult.cjs.map +1 -0
  86. package/dist/utils/llmTransportResult.d.cts +36 -0
  87. package/dist/utils/llmTransportResult.d.ts +36 -0
  88. package/dist/utils/llmTransportResult.mjs +3 -0
  89. package/dist/utils/llmTransportResult.mjs.map +1 -0
  90. package/package.json +1 -1
  91. package/dist/chunk-BL5NBKPH.mjs.map +0 -1
  92. package/dist/chunk-DRVOV5ZD.mjs.map +0 -1
  93. package/dist/chunk-E4GCCWJO.mjs.map +0 -1
  94. package/dist/chunk-G7HLFMD2.mjs.map +0 -1
  95. package/dist/chunk-TWKIVUTQ.mjs.map +0 -1
  96. package/dist/chunk-TYXSJUQU.mjs.map +0 -1
  97. package/dist/chunk-VCPIWJ7R.mjs.map +0 -1
  98. package/dist/curriculumFeedEmitter-T7NUBLAM.mjs +0 -4
  99. package/dist/curriculumFeedEmitter-T7NUBLAM.mjs.map +0 -1
  100. package/dist/llmClient-ysPhLjcH.d.cts +0 -16
  101. package/dist/llmClient-ysPhLjcH.d.ts +0 -16
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/detector/inputTypeDetector.ts","../../src/detector/domainDetector.ts","../../src/detector/learningModeDetector.ts","../../src/detector/domainProfileDetector.ts"],"names":["raw"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Input Type Detection — determines what kind of input the user provided.\n *\n * Signals:\n * repository: repoUrl, repoDir, or source code files present\n * syllabus: syllabusText, chapters[], or curriculum-like structure\n * files: non-code files (3D models, images, documents)\n * description: free-text description (>100 chars)\n * mixed: combination of the above\n */\n\nimport type { InputType } from '../schemas/domainProfileSchema';\n\nexport interface InputTypeDetectionResult {\n inputType: InputType;\n confidence: number;\n evidence: string[];\n}\n\nexport interface DetectInputTypeOptions {\n repoUrl?: string;\n repoDir?: string;\n description?: string;\n syllabusText?: string;\n chapters?: string[];\n fileExtensions?: string[];\n goal?: string;\n}\n\nconst CODE_EXTENSIONS = new Set([\n '.swift', '.ts', '.tsx', '.js', '.jsx', '.py', '.ino', '.cpp', '.c', '.h', '.hpp',\n '.kt', '.kts', '.java', '.cs', '.rb', '.go', '.rs', '.php', '.lua', '.r', '.m',\n]);\n\nconst NON_CODE_EXTENSIONS = new Set([\n '.stl', '.obj', '.step', '.stp', '.iges', '.igs', // 3D models\n '.png', '.jpg', '.jpeg', '.gif', '.svg', '.bmp', // Images\n '.pdf', '.doc', '.docx', '.pptx', '.xlsx', // Documents\n '.tc3', '.f3d', // CAD files\n '.mp3', '.wav', '.midi', // Audio\n '.mp4', '.avi', '.mov', // Video\n]);\n\n/**\n * Detect input type from user-provided options.\n */\nexport function detectInputType(options: DetectInputTypeOptions): InputTypeDetectionResult {\n const evidence: string[] = [];\n let repoScore = 0;\n let syllabusScore = 0;\n let filesScore = 0;\n let descriptionScore = 0;\n\n // Check for repository signals\n if (options.repoUrl) {\n repoScore += 0.5;\n evidence.push(`repoUrl provided: ${options.repoUrl}`);\n }\n if (options.repoDir) {\n repoScore += 0.5;\n evidence.push(`repoDir provided: ${options.repoDir}`);\n }\n\n // Check for syllabus signals\n if (options.syllabusText && options.syllabusText.length > 50) {\n syllabusScore += 0.6;\n evidence.push(`syllabusText provided (${options.syllabusText.length} chars)`);\n }\n if (options.chapters && options.chapters.length > 0) {\n syllabusScore += 0.4;\n evidence.push(`${options.chapters.length} chapters provided`);\n }\n\n // Check for file signals\n if (options.fileExtensions && options.fileExtensions.length > 0) {\n const codeCount = options.fileExtensions.filter(ext => CODE_EXTENSIONS.has(ext)).length;\n const nonCodeCount = options.fileExtensions.filter(ext => NON_CODE_EXTENSIONS.has(ext)).length;\n\n if (nonCodeCount > 0) {\n filesScore += 0.7;\n evidence.push(`${nonCodeCount} non-code files detected: ${options.fileExtensions.filter(ext => NON_CODE_EXTENSIONS.has(ext)).join(', ')}`);\n }\n if (codeCount > 0 && repoScore === 0) {\n repoScore += 0.3;\n evidence.push(`${codeCount} source code files detected`);\n }\n }\n\n // Check for description signals\n if (options.description && options.description.length > 100) {\n descriptionScore += 0.5;\n evidence.push(`description provided (${options.description.length} chars)`);\n }\n if (options.goal && options.goal.length > 20) {\n descriptionScore += 0.3;\n evidence.push(`goal provided (${options.goal.length} chars)`);\n }\n\n // Determine winner\n const scores = [\n { type: 'repository' as InputType, score: repoScore },\n { type: 'syllabus' as InputType, score: syllabusScore },\n { type: 'files' as InputType, score: filesScore },\n { type: 'description' as InputType, score: descriptionScore },\n ];\n\n scores.sort((a, b) => b.score - a.score);\n const winner = scores[0];\n\n // Check for mixed\n const activeTypes = scores.filter(s => s.score >= 0.3);\n if (activeTypes.length >= 2) {\n return {\n inputType: 'mixed',\n confidence: 0.7,\n evidence: [...evidence, `Mixed input detected: ${activeTypes.map(t => t.type).join(' + ')}`],\n };\n }\n\n if (winner.score === 0) {\n return {\n inputType: 'description',\n confidence: 0.3,\n evidence: [...evidence, 'No strong signals — defaulting to description'],\n };\n }\n\n return {\n inputType: winner.type,\n confidence: Math.min(winner.score, 1.0),\n evidence,\n };\n}\n","/**\n * Domain Category Detection — determines the subject domain from context.\n *\n * Uses multi-signal scoring:\n * - File extensions (code vs non-code, context-dependent)\n * - Keywords in description/goal (multi-language)\n * - Tech stack mentions\n * - Subject-specific vocabulary\n * - Disambiguation for overlapping domains (e.g., .cpp in software vs hardware)\n */\n\nimport type { DomainCategory } from '../schemas/domainProfileSchema';\n\nexport interface DomainDetectionResult {\n domainCategory: DomainCategory;\n confidence: number;\n evidence: string[];\n detectedTechStack: string[];\n detectedSubject: string;\n ambiguous?: { domain1: DomainCategory; domain2: DomainCategory; reason: string };\n}\n\nexport interface DetectDomainOptions {\n description?: string;\n goal?: string;\n syllabusText?: string;\n techStack?: string;\n fileExtensions?: string[];\n repoUrl?: string;\n}\n\n\n\n\n// ─── Keyword lists per domain (broad matching) ──────────────────────────────\nconst DOMAIN_KEYWORDS: Record<DomainCategory, string[]> = {\n software: [\n 'app', 'web', 'api', 'database', 'frontend', 'backend', 'mobile',\n 'swift', 'react', 'vue', 'angular', 'node', 'python', 'java',\n 'typescript', 'javascript', 'html', 'css', 'sql', 'rest', 'graphql',\n 'git', 'docker', 'kubernetes', 'ci/cd', 'deploy',\n 'swiftui', 'uikit', 'flutter', 'kotlin', 'android', 'ios',\n 'nextjs', 'nuxt', 'svelte', 'django', 'flask', 'express',\n ],\n hardware_iot: [\n 'arduino', 'robot', 'sensor', 'motor', 'esp32', 'gpio',\n 'raspberry pi', 'iot', 'firmware', 'embedded', 'microcontroller',\n 'led', 'servo', 'potentiometer', 'breadboard', 'soldering',\n 'i2c', 'spi', 'pwm', 'uart', 'analog', 'digital',\n 'ultrasonic', 'infrared', 'bluetooth', 'wifi module',\n 'pin', 'voltage', 'resistor', 'capacitor', 'circuit',\n ],\n '3d_design': [\n 'tinkercad', '3d model', 'cad', 'parametric', 'stl', 'obj',\n 'fusion360', 'blender', 'solidworks', 'autocad', 'freecad',\n 'shape', 'dimension', 'extrude', 'revolve', 'fillet', 'chamfer',\n 'assembly', 'constraint', 'sketch', 'plane', 'axis',\n 'render', 'mesh', 'nurbs', 'surface', 'volume',\n ],\n math: [\n // Vietnamese\n 'hình học', 'đại số', 'giải tích', 'xác suất', 'thống kê',\n 'tam giác', 'đường tròn', 'phương trình', 'bất phương trình',\n 'số học', 'tổ hợp', 'hoán vị', 'độ đo', 'góc', 'cạnh',\n 'diện tích', 'thể tích', 'chu vi', 'đường cao', 'trung tuyến',\n // English\n 'geometry', 'algebra', 'calculus', 'trigonometry', 'logarithm',\n 'probability', 'statistics', 'derivative', 'integral', 'matrix',\n 'vector', 'theorem', 'proof', 'angle', 'perimeter', 'area',\n // Chinese\n '几何', '代数', '微积分', '概率', '统计', '三角形', '圆', '方程',\n // Japanese\n '幾何', '代数', '微分', '積分', '確率', '統計',\n // French\n 'géométrie', 'algèbre', 'calcul', 'trigonométrie', 'probabilité',\n ],\n science: [\n // Vietnamese\n 'lý thuyết', 'nguyên lý', 'thí nghiệm', 'điện', 'lực',\n 'hóa học', 'sinh học', 'vật lý', 'địa lý',\n 'phản ứng', 'nguyên tố', 'phân tử',\n 'năng lượng', 'cảm ứng', 'từ trường', 'quang học',\n 'môi trường', 'sinh thái',\n // English\n 'physics', 'chemistry', 'biology', 'earth science',\n 'cell', 'gene', 'evolution', 'ecosystem', 'molecule', 'atom',\n // Chinese\n '物理', '化学', '生物', '地理',\n // Japanese\n '物理', '化学', '生物',\n // French\n 'physique', 'chimie', 'biologie',\n ],\n language: [\n // Vietnamese\n 'tiếng anh', 'tiếng việt', 'ngữ pháp', 'từ vựng',\n 'đọc', 'viết', 'nói', 'nghe',\n // English\n 'grammar', 'vocabulary', 'writing', 'reading', 'speaking',\n 'listening', 'pronunciation', 'essay', 'paragraph', 'sentence',\n 'verb', 'noun', 'adjective', 'ielts', 'toeic', 'toefl',\n // Chinese\n '英语', '语法', '词汇', '阅读', '写作',\n // Japanese\n '英語', '文法', '語彙', '読解', '作文',\n // French\n 'anglais', 'grammaire', 'vocabulaire', 'lecture', 'écriture',\n ],\n arts: [\n // Vietnamese\n 'âm nhạc', 'nhạc lý', 'solfège', 'đàn', 'piano', 'guitar',\n 'hội họa', 'thiết kế', 'nhiếp ảnh',\n 'tranh', 'màu', 'sáng tác', 'biên khúc',\n // English\n 'music', 'art', 'painting', 'drawing', 'sketch', 'photography',\n 'color theory', 'composition', 'typography', 'layout',\n 'digital art', 'illustration', 'figma',\n // Chinese\n '音乐', '美术', '绘画', '摄影', '设计',\n // Japanese\n '音楽', '美術', '絵画', '写真', 'デザイン',\n // French\n 'musique', 'art', 'peinture', 'dessin', 'photographie',\n ],\n research: [\n // Vietnamese\n 'nghiên cứu', 'thống kê', 'phương pháp luận', 'phân tích dữ liệu',\n 'định tính', 'định lượng', 'giả thuyết',\n 'mẫu', 'tổng thể', 'tương quan', 'hồi quy',\n 'tài liệu tham khảo', 'trích dẫn', 'tóm tắt',\n // English\n 'research', 'survey', 'methodology', 'data analysis',\n 'qualitative', 'quantitative', 'hypothesis', 'experiment',\n 'sample', 'population', 'correlation', 'regression',\n 'literature review', 'citation', 'abstract',\n // Chinese\n '研究', '调查', '方法论', '数据分析',\n // Japanese\n '研究', '調査', '方法論', 'データ分析',\n // French\n 'recherche', 'enquête', 'méthodologie', 'analyse de données',\n ],\n business: [\n // Vietnamese\n 'kinh doanh', 'tài chính', 'quản lý', 'marketing', 'bán hàng',\n 'khởi nghiệp', 'kế hoạch kinh doanh', 'doanh thu', 'lợi nhuận',\n 'quản trị', 'tài khoản', 'đầu tư', 'ngân sách',\n // English\n 'business', 'finance', 'accounting', 'investment', 'budget',\n 'startup', 'revenue', 'profit', 'roi', 'sales',\n 'product management', 'agile', 'scrum', 'kanban',\n // Chinese\n '商业', '金融', '会计', '投资', '营销',\n // Japanese\n 'ビジネス', '金融', '会計', '投資', 'マーケティング',\n // French\n 'affaires', 'finance', 'comptabilité', 'investissement',\n ],\n other: [],\n};\n\n// ─── Extension → Domain mapping (context-dependent for ambiguous extensions) ──\nconst EXTENSION_DOMAIN: Record<string, DomainCategory> = {\n '.swift': 'software',\n '.ts': 'software', '.tsx': 'software',\n '.js': 'software', '.jsx': 'software',\n '.py': 'software',\n '.kt': 'software', '.kts': 'software',\n '.java': 'software', '.cs': 'software',\n '.go': 'software', '.rs': 'software',\n '.rb': 'software', '.php': 'software',\n '.lua': 'software', '.r': 'software',\n // .ino is ALWAYS hardware\n '.ino': 'hardware_iot',\n // .cpp/.c/.h are CONTEXT-DEPENDENT → resolve in detection logic\n '.stl': '3d_design', '.obj': '3d_design',\n '.step': '3d_design', '.stp': '3d_design',\n '.tc3': '3d_design', '.f3d': '3d_design',\n};\n\n// Extensions that need context disambiguation\nconst AMBIGUOUS_EXTENSIONS = new Set(['.cpp', '.c', '.h', '.hpp']);\n\n// ─── Syllabus language detection ─────────────────────────────────────────────\nconst LANG_PATTERNS: Array<{ lang: string; patterns: RegExp[] }> = [\n { lang: 'vi', patterns: [/[ạảãàáạảãạ]/i, /\\bgiải\\b/, /\\btính\\b/] },\n { lang: 'zh', patterns: [/[\\u4e00-\\u9fff]{2,}/] },\n { lang: 'ja', patterns: [/[\\u3040-\\u309f\\u30a0-\\u30ff]{2,}/] },\n { lang: 'ko', patterns: [/[\\uac00-\\ud7af]{2,}/] },\n { lang: 'fr', patterns: [/\\b(la|le|les|des|une|est|sont|avec|pour|dans)\\b/i] },\n];\n\nfunction detectSyllabusLanguage(text: string): string {\n for (const { lang, patterns } of LANG_PATTERNS) {\n if (patterns.some(p => p.test(text))) return lang;\n }\n return 'en';\n}\n\n// ─── Main Detection Function ─────────────────────────────────────────────────\nexport function detectDomain(options: DetectDomainOptions): DomainDetectionResult {\n const evidence: string[] = [];\n const detectedTechStack: string[] = [];\n let detectedSubject = '';\n let ambiguous: DomainDetectionResult['ambiguous'];\n\n const scores: Record<DomainCategory, number> = {\n software: 0, hardware_iot: 0, '3d_design': 0,\n math: 0, science: 0, language: 0, arts: 0,\n research: 0, business: 0, other: 0,\n };\n\n // ─── 1. File Extension Signals ───────────────────────────────────────────\n const hasHardwareContext = !!(\n options.techStack?.toLowerCase().match(/arduino|esp32|raspberry|embedded|iot/)\n || options.description?.toLowerCase().match(/arduino|robot|sensor|motor|circuit/)\n || options.goal?.toLowerCase().match(/arduino|robot|sensor|motor|circuit/)\n );\n\n const hasSoftwareContext = !!(\n options.techStack?.toLowerCase().match(/swift|react|vue|angular|python|java|typescript|javascript/)\n || options.description?.toLowerCase().match(/app|web|api|frontend|backend|mobile/)\n || options.goal?.toLowerCase().match(/app|web|api|frontend|backend|mobile/)\n );\n\n if (options.fileExtensions) {\n for (const ext of options.fileExtensions) {\n const extLower = ext.toLowerCase();\n\n // Always-hardware extensions\n if (extLower === '.ino') {\n scores.hardware_iot += 0.5;\n evidence.push(`File extension ${ext} → hardware_iot (always)`);\n continue;\n }\n\n // Ambiguous extensions → context-dependent\n if (AMBIGUOUS_EXTENSIONS.has(extLower)) {\n if (hasHardwareContext && !hasSoftwareContext) {\n scores.hardware_iot += 0.3;\n evidence.push(`File extension ${ext} → hardware_iot (hardware context)`);\n } else if (hasSoftwareContext && !hasHardwareContext) {\n scores.software += 0.3;\n evidence.push(`File extension ${ext} → software (software context)`);\n } else if (hasHardwareContext && hasSoftwareContext) {\n // Both contexts → slight preference for software (more common for .cpp)\n scores.software += 0.15;\n scores.hardware_iot += 0.15;\n evidence.push(`File extension ${ext} → ambiguous (both software and hardware context)`);\n ambiguous = {\n domain1: 'software',\n domain2: 'hardware_iot',\n reason: `.cpp/.c/.h files present with both software and hardware context keywords`,\n };\n } else {\n // No context → default to software\n scores.software += 0.2;\n evidence.push(`File extension ${ext} → software (default, no context)`);\n }\n continue;\n }\n\n // Clear mapping extensions\n const domain = EXTENSION_DOMAIN[extLower];\n if (domain) {\n scores[domain] += 0.3;\n evidence.push(`File extension ${ext} → ${domain}`);\n }\n }\n }\n\n // ─── 2. Text Content Signals (multi-language) ─────────────────────────────\n const textContent = [\n options.description || '',\n options.goal || '',\n options.syllabusText || '',\n ].join(' ').toLowerCase();\n\n for (const [domain, keywords] of Object.entries(DOMAIN_KEYWORDS)) {\n const cat = domain as DomainCategory;\n for (const kw of keywords) {\n if (textContent.includes(kw.toLowerCase())) {\n scores[cat] += 0.1;\n if (!evidence.some(e => e.includes(`\"${kw}\"`))) {\n evidence.push(`Keyword \"${kw}\" → ${cat}`);\n }\n }\n }\n }\n\n // ─── 3. Tech Stack Signals ────────────────────────────────────────────────\n if (options.techStack) {\n const techItems = options.techStack.split(',').map(t => t.trim());\n for (const tech of techItems) {\n const techL = tech.toLowerCase();\n if (['swift', 'swiftui', 'uikit', 'ios'].some(k => techL.includes(k))) {\n scores.software += 0.4;\n detectedTechStack.push(tech);\n } else if (['react', 'vue', 'angular', 'next', 'nuxt', 'typescript', 'javascript'].some(k => techL.includes(k))) {\n scores.software += 0.4;\n detectedTechStack.push(tech);\n } else if (['python', 'django', 'flask'].some(k => techL.includes(k))) {\n scores.software += 0.3;\n detectedTechStack.push(tech);\n } else if (['arduino', 'esp32', 'raspberry'].some(k => techL.includes(k))) {\n scores.hardware_iot += 0.5;\n detectedTechStack.push(tech);\n } else if (['tinkercad', 'fusion360', 'blender'].some(k => techL.includes(k))) {\n scores['3d_design'] += 0.5;\n detectedTechStack.push(tech);\n } else if (['c++', 'c', 'cpp'].some(k => techL === k || techL.endsWith(k))) {\n // C++/C → context-dependent\n if (hasHardwareContext) {\n scores.hardware_iot += 0.3;\n } else {\n scores.software += 0.3;\n }\n detectedTechStack.push(tech);\n }\n }\n }\n\n // ─── 4. Syllabus Content Signals (with language detection) ────────────────\n if (options.syllabusText) {\n const syllabusLang = detectSyllabusLanguage(options.syllabusText);\n const syllabusLower = options.syllabusText.toLowerCase();\n\n if (syllabusLower.includes('hình học') || syllabusLower.includes('đại số')\n || syllabusLower.includes('geometry') || syllabusLower.includes('algebra')\n || syllabusLower.includes('几何') || syllabusLower.includes('代数')\n || syllabusLower.includes('幾何') || syllabusLower.includes('代数')\n || syllabusLower.includes('géométrie') || syllabusLower.includes('algèbre')) {\n scores.math += 0.5;\n detectedSubject = 'Mathematics';\n } else if (syllabusLower.includes('vật lý') || syllabusLower.includes('hóa')\n || syllabusLower.includes('sinh') || syllabusLower.includes('physics')\n || syllabusLower.includes('chemistry') || syllabusLower.includes('biology')\n || syllabusLower.includes('物理') || syllabusLower.includes('化学')\n || syllabusLower.includes('物理') || syllabusLower.includes('化学')\n || syllabusLower.includes('physique') || syllabusLower.includes('chimie')) {\n scores.science += 0.5;\n detectedSubject = 'Natural Science';\n } else if (syllabusLower.includes('tiếng anh') || syllabusLower.includes('english')\n || syllabusLower.includes('grammar') || syllabusLower.includes('英语')\n || syllabusLower.includes('英語') || syllabusLower.includes('anglais')) {\n scores.language += 0.5;\n detectedSubject = 'English Language';\n }\n\n evidence.push(`Syllabus language detected: ${syllabusLang}`);\n }\n\n // ─── 5. Scoring & Winner ─────────────────────────────────────────────────\n const entries = Object.entries(scores).filter(([k]) => k !== 'other') as [DomainCategory, number][];\n entries.sort((a, b) => b[1] - a[1]);\n const [winner, winnerScore] = entries[0];\n\n if (winnerScore === 0) {\n return {\n domainCategory: 'other',\n confidence: 0.2,\n evidence: [...evidence, 'No domain signals detected'],\n detectedTechStack,\n detectedSubject,\n };\n }\n\n // Check for near-tie (within 0.15) → ambiguous\n const second = entries[1];\n if (second && (winnerScore - second[1]) < 0.15 && winnerScore > 0) {\n ambiguous = {\n domain1: winner,\n domain2: second[0],\n reason: `Scores very close: ${winner}=${winnerScore.toFixed(2)}, ${second[0]}=${second[1].toFixed(2)}`,\n };\n }\n\n const totalScore = entries.reduce((sum, [, s]) => sum + s, 0);\n const confidence = totalScore > 0 ? Math.min(winnerScore / totalScore + 0.3, 1.0) : 0.3;\n\n return {\n domainCategory: winner,\n confidence,\n evidence: evidence.slice(0, 20),\n detectedTechStack,\n detectedSubject,\n ambiguous,\n };\n}\n","/**\n * Learning Mode Detection — determines product vs concept vs hybrid.\n *\n * Logic:\n * - Repository + build verbs → product\n * - Syllabus + no source code → concept\n * - Repository + understanding verbs → hybrid\n * - Domain category heuristic (math/science → concept, software/hardware → product)\n */\n\nimport type { LearningMode, DomainCategory, InputType } from '../schemas/domainProfileSchema';\n\nexport interface LearningModeDetectionResult {\n learningMode: LearningMode;\n confidence: number;\n evidence: string[];\n}\n\nexport interface DetectLearningModeOptions {\n inputType: InputType;\n domainCategory: DomainCategory;\n goal?: string;\n description?: string;\n hasRepo: boolean;\n hasSyllabus: boolean;\n}\n\n// ─── Verb patterns ───────────────────────────────────────────────────────────\n\nconst BUILD_VERBS = [\n 'build', 'create', 'develop', 'implement', 'construct', 'make',\n 'xây dựng', 'tạo', 'phát triển', 'triển khai', 'lắp ráp',\n 'code', 'program', 'design a', 'set up', 'deploy',\n];\n\nconst UNDERSTAND_VERBS = [\n 'understand', 'learn', 'grasp', 'comprehend', 'master',\n 'hiểu', 'nắm vững', 'học', 'tiếp thu', 'am hiểu',\n 'vận dụng', 'phân tích', 'đánh giá', 'so sánh',\n 'explain', 'describe', 'analyze', 'evaluate', 'compare',\n];\n\nconst CONCEPT_DOMAINS: DomainCategory[] = ['math', 'science', 'language', 'arts', 'research', 'business'];\nconst PRODUCT_DOMAINS: DomainCategory[] = ['software', 'hardware_iot', '3d_design'];\n\n/**\n * Detect learning mode from context.\n */\nexport function detectLearningMode(options: DetectLearningModeOptions): LearningModeDetectionResult {\n const evidence: string[] = [];\n const text = [options.goal || '', options.description || ''].join(' ').toLowerCase();\n\n let productScore = 0;\n let conceptScore = 0;\n\n // 1. Input type signals\n if (options.hasRepo) {\n productScore += 0.3;\n evidence.push('Repository present → product signal');\n }\n if (options.hasSyllabus) {\n conceptScore += 0.3;\n evidence.push('Syllabus present → concept signal');\n }\n\n // 2. Domain category heuristic\n if (PRODUCT_DOMAINS.includes(options.domainCategory)) {\n productScore += 0.2;\n evidence.push(`Domain ${options.domainCategory} → product倾向`);\n }\n if (CONCEPT_DOMAINS.includes(options.domainCategory)) {\n conceptScore += 0.2;\n evidence.push(`Domain ${options.domainCategory} → concept倾向`);\n }\n\n // 3. Verb pattern matching\n const hasBuildVerbs = BUILD_VERBS.some(v => text.includes(v));\n const hasUnderstandVerbs = UNDERSTAND_VERBS.some(v => text.includes(v));\n\n if (hasBuildVerbs) {\n productScore += 0.3;\n evidence.push('Build verbs detected in goal/description');\n }\n if (hasUnderstandVerbs) {\n conceptScore += 0.3;\n evidence.push('Understand verbs detected in goal/description');\n }\n\n // 4. Determine mode\n const total = productScore + conceptScore;\n if (total === 0) {\n return {\n learningMode: 'product',\n confidence: 0.3,\n evidence: [...evidence, 'No signals — defaulting to product'],\n };\n }\n\n // Check for hybrid\n if (productScore >= 0.3 && conceptScore >= 0.3) {\n const hybridConf = Math.min((productScore + conceptScore) / 2, 1.0);\n return {\n learningMode: 'hybrid',\n confidence: hybridConf,\n evidence: [...evidence, `Mixed signals: product=${productScore.toFixed(2)}, concept=${conceptScore.toFixed(2)} → hybrid`],\n };\n }\n\n if (productScore > conceptScore) {\n const raw = total > 0 ? productScore / total : 0.5;\n return {\n learningMode: 'product',\n confidence: Math.min(Math.max(raw, 0) + 0.2, 1.0),\n evidence,\n };\n }\n\n const raw = total > 0 ? conceptScore / total : 0.5;\n return {\n learningMode: 'concept',\n confidence: Math.min(Math.max(raw, 0) + 0.2, 1.0),\n evidence,\n };\n}\n","/**\n * Domain Profile Detection Orchestrator — combines all detection modules.\n */\n\nimport { detectInputType, type DetectInputTypeOptions } from './inputTypeDetector';\nimport { detectDomain, type DetectDomainOptions } from './domainDetector';\nimport { detectLearningMode } from './learningModeDetector';\nimport type { DomainProfile, GraphType } from '../schemas/domainProfileSchema';\nimport type { ParsedSyllabus } from '../parsers/syllabusParser';\n\nexport interface DetectDomainProfileOptions {\n repoUrl?: string;\n repoDir?: string;\n description?: string;\n goal?: string;\n syllabusText?: string;\n parsedSyllabus?: ParsedSyllabus;\n chapters?: string[];\n fileExtensions?: string[];\n techStack?: string;\n gradeBand?: [number, number];\n}\n\nexport function detectDomainProfile(options: DetectDomainProfileOptions): DomainProfile {\n const effectiveSyllabus = options.syllabusText || options.parsedSyllabus?.rawText || '';\n const inputResult = detectInputType({\n ...options,\n syllabusText: effectiveSyllabus,\n });\n\n const domainResult = detectDomain({\n description: options.description,\n goal: options.goal,\n syllabusText: effectiveSyllabus,\n techStack: options.techStack,\n fileExtensions: options.fileExtensions,\n repoUrl: options.repoUrl,\n });\n\n const modeResult = detectLearningMode({\n inputType: inputResult.inputType,\n domainCategory: domainResult.domainCategory,\n goal: options.goal,\n description: options.description,\n hasRepo: !!(options.repoUrl || options.repoDir),\n hasSyllabus: !!(effectiveSyllabus || (options.chapters && options.chapters.length > 0) || options.parsedSyllabus),\n });\n\n const graphType = determineGraphType(modeResult.learningMode);\n\n return {\n inputType: inputResult.inputType,\n domainCategory: (domainResult.domainCategory === 'other' && options.parsedSyllabus?.subject.domain)\n ? (options.parsedSyllabus.subject.domain as any)\n : domainResult.domainCategory,\n learningMode: modeResult.learningMode,\n graphType,\n confidence: {\n inputType: inputResult.confidence,\n domainCategory: domainResult.confidence,\n learningMode: modeResult.confidence,\n },\n evidence: [...inputResult.evidence, ...domainResult.evidence, ...modeResult.evidence],\n detectedTechStack: domainResult.detectedTechStack,\n detectedSubject: options.parsedSyllabus?.subject.title || domainResult.detectedSubject,\n detectedDomain: domainResult.domainCategory,\n goal: options.goal || '',\n description: options.description || '',\n repoUrl: options.repoUrl || '',\n repoDir: options.repoDir || '',\n syllabusText: effectiveSyllabus,\n };\n}\n\nfunction determineGraphType(learningMode: string): GraphType {\n switch (learningMode) {\n case 'product': return 'project_graph';\n case 'concept': return 'knowledge_graph';\n case 'hybrid': return 'hybrid_graph';\n default: return 'project_graph';\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/detector/inputTypeDetector.ts","../../src/utils/diacritics.ts","../../src/detector/domainDetector.ts","../../src/detector/learningModeDetector.ts","../../src/detector/domainProfileDetector.ts"],"names":["raw"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Input Type Detection — determines what kind of input the user provided.\n *\n * Signals:\n * repository: repoUrl, repoDir, or source code files present\n * syllabus: syllabusText, chapters[], or curriculum-like structure\n * files: non-code files (3D models, images, documents)\n * description: free-text description (>100 chars)\n * mixed: combination of the above\n */\n\nimport type { InputType } from '../schemas/domainProfileSchema';\n\nexport interface InputTypeDetectionResult {\n inputType: InputType;\n confidence: number;\n evidence: string[];\n}\n\nexport interface DetectInputTypeOptions {\n repoUrl?: string;\n repoDir?: string;\n description?: string;\n syllabusText?: string;\n chapters?: string[];\n fileExtensions?: string[];\n goal?: string;\n}\n\nconst CODE_EXTENSIONS = new Set([\n '.swift', '.ts', '.tsx', '.js', '.jsx', '.py', '.ino', '.cpp', '.c', '.h', '.hpp',\n '.kt', '.kts', '.java', '.cs', '.rb', '.go', '.rs', '.php', '.lua', '.r', '.m',\n]);\n\nconst NON_CODE_EXTENSIONS = new Set([\n '.stl', '.obj', '.step', '.stp', '.iges', '.igs', // 3D models\n '.png', '.jpg', '.jpeg', '.gif', '.svg', '.bmp', // Images\n '.pdf', '.doc', '.docx', '.pptx', '.xlsx', // Documents\n '.tc3', '.f3d', // CAD files\n '.mp3', '.wav', '.midi', // Audio\n '.mp4', '.avi', '.mov', // Video\n]);\n\n/**\n * Detect input type from user-provided options.\n */\nexport function detectInputType(options: DetectInputTypeOptions): InputTypeDetectionResult {\n const evidence: string[] = [];\n let repoScore = 0;\n let syllabusScore = 0;\n let filesScore = 0;\n let descriptionScore = 0;\n\n // Check for repository signals\n if (options.repoUrl) {\n repoScore += 0.5;\n evidence.push(`repoUrl provided: ${options.repoUrl}`);\n }\n if (options.repoDir) {\n repoScore += 0.5;\n evidence.push(`repoDir provided: ${options.repoDir}`);\n }\n\n // Check for syllabus signals\n if (options.syllabusText && options.syllabusText.length > 50) {\n syllabusScore += 0.6;\n evidence.push(`syllabusText provided (${options.syllabusText.length} chars)`);\n }\n if (options.chapters && options.chapters.length > 0) {\n syllabusScore += 0.4;\n evidence.push(`${options.chapters.length} chapters provided`);\n }\n\n // Check for file signals\n if (options.fileExtensions && options.fileExtensions.length > 0) {\n const codeCount = options.fileExtensions.filter(ext => CODE_EXTENSIONS.has(ext)).length;\n const nonCodeCount = options.fileExtensions.filter(ext => NON_CODE_EXTENSIONS.has(ext)).length;\n\n if (nonCodeCount > 0) {\n filesScore += 0.7;\n evidence.push(`${nonCodeCount} non-code files detected: ${options.fileExtensions.filter(ext => NON_CODE_EXTENSIONS.has(ext)).join(', ')}`);\n }\n if (codeCount > 0 && repoScore === 0) {\n repoScore += 0.3;\n evidence.push(`${codeCount} source code files detected`);\n }\n }\n\n // Check for description signals\n if (options.description && options.description.length > 100) {\n descriptionScore += 0.5;\n evidence.push(`description provided (${options.description.length} chars)`);\n }\n if (options.goal && options.goal.length > 20) {\n descriptionScore += 0.3;\n evidence.push(`goal provided (${options.goal.length} chars)`);\n }\n\n // Determine winner\n const scores = [\n { type: 'repository' as InputType, score: repoScore },\n { type: 'syllabus' as InputType, score: syllabusScore },\n { type: 'files' as InputType, score: filesScore },\n { type: 'description' as InputType, score: descriptionScore },\n ];\n\n scores.sort((a, b) => b.score - a.score);\n const winner = scores[0];\n\n // Check for mixed\n const activeTypes = scores.filter(s => s.score >= 0.3);\n if (activeTypes.length >= 2) {\n return {\n inputType: 'mixed',\n confidence: 0.7,\n evidence: [...evidence, `Mixed input detected: ${activeTypes.map(t => t.type).join(' + ')}`],\n };\n }\n\n if (winner.score === 0) {\n return {\n inputType: 'description',\n confidence: 0.3,\n evidence: [...evidence, 'No strong signals — defaulting to description'],\n };\n }\n\n return {\n inputType: winner.type,\n confidence: Math.min(winner.score, 1.0),\n evidence,\n };\n}\n","/**\n * Shared text folding for tokenizers and matchers that previously assumed\n * ASCII-only input (KG-1): Vietnamese text lost every accented character,\n * which either killed the pipeline (empty derived keywords -> throw) or\n * filled keyword registries with meaningless syllable fragments.\n *\n * NFD FIRST: NFC composes \"á\" into U+00E1, which carries no combining mark to\n * strip. Decomposing exposes U+0301 + base letter, then removal leaves the\n * bare \"a\". \"đ\" (U+0111) is a precomposed BASE letter — NFD never decomposes\n * it, so it is folded by explicit replacement. Latin-only in practice —\n * CJK/Kana have no combining marks and pass through intact.\n */\nconst COMBINING_MARKS = /[\\u0300-\\u036f]/g;\nconst D_WITH_STROKE = /đ/gi;\n\nexport function stripDiacritics(s: string): string {\n return s\n .normalize('NFD')\n .replace(COMBINING_MARKS, '')\n .replace(D_WITH_STROKE, 'd')\n .toLowerCase();\n}\n","/**\n * Domain Category Detection — determines the subject domain from context.\n *\n * Uses multi-signal scoring:\n * - File extensions (code vs non-code, context-dependent)\n * - Keywords in description/goal (multi-language)\n * - Tech stack mentions\n * - Subject-specific vocabulary\n * - Disambiguation for overlapping domains (e.g., .cpp in software vs hardware)\n */\n\nimport type { DomainCategory } from '../schemas/domainProfileSchema';\nimport { stripDiacritics } from '../utils/diacritics';\n\nexport interface DomainDetectionResult {\n domainCategory: DomainCategory;\n confidence: number;\n evidence: string[];\n detectedTechStack: string[];\n detectedSubject: string;\n ambiguous?: { domain1: DomainCategory; domain2: DomainCategory; reason: string };\n}\n\nexport interface DetectDomainOptions {\n description?: string;\n goal?: string;\n syllabusText?: string;\n techStack?: string;\n fileExtensions?: string[];\n repoUrl?: string;\n}\n\n\n\n\n// ─── Keyword lists per domain (broad matching) ──────────────────────────────\nconst DOMAIN_KEYWORDS: Record<DomainCategory, string[]> = {\n software: [\n 'app', 'web', 'api', 'database', 'frontend', 'backend', 'mobile',\n 'swift', 'react', 'vue', 'angular', 'node', 'python', 'java',\n 'typescript', 'javascript', 'html', 'css', 'sql', 'rest', 'graphql',\n 'git', 'docker', 'kubernetes', 'ci/cd', 'deploy',\n 'swiftui', 'uikit', 'flutter', 'kotlin', 'android', 'ios',\n 'nextjs', 'nuxt', 'svelte', 'django', 'flask', 'express',\n ],\n hardware_iot: [\n 'arduino', 'robot', 'sensor', 'motor', 'esp32', 'gpio',\n 'raspberry pi', 'iot', 'firmware', 'embedded', 'microcontroller',\n 'led', 'servo', 'potentiometer', 'breadboard', 'soldering',\n 'i2c', 'spi', 'pwm', 'uart', 'analog', 'digital',\n 'ultrasonic', 'infrared', 'bluetooth', 'wifi module',\n 'pin', 'voltage', 'resistor', 'capacitor', 'circuit',\n ],\n '3d_design': [\n 'tinkercad', '3d model', 'cad', 'parametric', 'stl', 'obj',\n 'fusion360', 'blender', 'solidworks', 'autocad', 'freecad',\n 'shape', 'dimension', 'extrude', 'revolve', 'fillet', 'chamfer',\n 'assembly', 'constraint', 'sketch', 'plane', 'axis',\n 'render', 'mesh', 'nurbs', 'surface', 'volume',\n ],\n math: [\n // Vietnamese\n 'hình học', 'đại số', 'giải tích', 'xác suất', 'thống kê',\n 'tam giác', 'đường tròn', 'phương trình', 'bất phương trình',\n 'số học', 'tổ hợp', 'hoán vị', 'độ đo', 'góc', 'cạnh',\n 'diện tích', 'thể tích', 'chu vi', 'đường cao', 'trung tuyến',\n // English\n 'geometry', 'algebra', 'calculus', 'trigonometry', 'logarithm',\n 'probability', 'statistics', 'derivative', 'integral', 'matrix',\n 'vector', 'theorem', 'proof', 'angle', 'perimeter', 'area',\n // Chinese\n '几何', '代数', '微积分', '概率', '统计', '三角形', '圆', '方程',\n // Japanese\n '幾何', '代数', '微分', '積分', '確率', '統計',\n // French\n 'géométrie', 'algèbre', 'calcul', 'trigonométrie', 'probabilité',\n ],\n science: [\n // Vietnamese\n 'lý thuyết', 'nguyên lý', 'thí nghiệm', 'điện', 'lực',\n 'hóa học', 'sinh học', 'vật lý', 'địa lý',\n 'phản ứng', 'nguyên tố', 'phân tử',\n 'năng lượng', 'cảm ứng', 'từ trường', 'quang học',\n 'môi trường', 'sinh thái',\n // English\n 'physics', 'chemistry', 'biology', 'earth science',\n 'cell', 'gene', 'evolution', 'ecosystem', 'molecule', 'atom',\n // Chinese\n '物理', '化学', '生物', '地理',\n // Japanese\n '物理', '化学', '生物',\n // French\n 'physique', 'chimie', 'biologie',\n ],\n language: [\n // Vietnamese\n 'tiếng anh', 'tiếng việt', 'ngữ pháp', 'từ vựng',\n 'đọc', 'viết', 'nói', 'nghe',\n // English\n 'grammar', 'vocabulary', 'writing', 'reading', 'speaking',\n 'listening', 'pronunciation', 'essay', 'paragraph', 'sentence',\n 'verb', 'noun', 'adjective', 'ielts', 'toeic', 'toefl',\n // Chinese\n '英语', '语法', '词汇', '阅读', '写作',\n // Japanese\n '英語', '文法', '語彙', '読解', '作文',\n // French\n 'anglais', 'grammaire', 'vocabulaire', 'lecture', 'écriture',\n ],\n arts: [\n // Vietnamese\n 'âm nhạc', 'nhạc lý', 'solfège', 'đàn', 'piano', 'guitar',\n 'hội họa', 'thiết kế', 'nhiếp ảnh',\n 'tranh', 'màu', 'sáng tác', 'biên khúc',\n // English\n 'music', 'art', 'painting', 'drawing', 'sketch', 'photography',\n 'color theory', 'composition', 'typography', 'layout',\n 'digital art', 'illustration', 'figma',\n // Chinese\n '音乐', '美术', '绘画', '摄影', '设计',\n // Japanese\n '音楽', '美術', '絵画', '写真', 'デザイン',\n // French\n 'musique', 'art', 'peinture', 'dessin', 'photographie',\n ],\n research: [\n // Vietnamese\n 'nghiên cứu', 'thống kê', 'phương pháp luận', 'phân tích dữ liệu',\n 'định tính', 'định lượng', 'giả thuyết',\n 'mẫu', 'tổng thể', 'tương quan', 'hồi quy',\n 'tài liệu tham khảo', 'trích dẫn', 'tóm tắt',\n // English\n 'research', 'survey', 'methodology', 'data analysis',\n 'qualitative', 'quantitative', 'hypothesis', 'experiment',\n 'sample', 'population', 'correlation', 'regression',\n 'literature review', 'citation', 'abstract',\n // Chinese\n '研究', '调查', '方法论', '数据分析',\n // Japanese\n '研究', '調査', '方法論', 'データ分析',\n // French\n 'recherche', 'enquête', 'méthodologie', 'analyse de données',\n ],\n business: [\n // Vietnamese\n 'kinh doanh', 'tài chính', 'quản lý', 'marketing', 'bán hàng',\n 'khởi nghiệp', 'kế hoạch kinh doanh', 'doanh thu', 'lợi nhuận',\n 'quản trị', 'tài khoản', 'đầu tư', 'ngân sách',\n // English\n 'business', 'finance', 'accounting', 'investment', 'budget',\n 'startup', 'revenue', 'profit', 'roi', 'sales',\n 'product management', 'agile', 'scrum', 'kanban',\n // Chinese\n '商业', '金融', '会计', '投资', '营销',\n // Japanese\n 'ビジネス', '金融', '会計', '投資', 'マーケティング',\n // French\n 'affaires', 'finance', 'comptabilité', 'investissement',\n ],\n other: [],\n};\n\n// ─── Extension → Domain mapping (context-dependent for ambiguous extensions) ──\nconst EXTENSION_DOMAIN: Record<string, DomainCategory> = {\n '.swift': 'software',\n '.ts': 'software', '.tsx': 'software',\n '.js': 'software', '.jsx': 'software',\n '.py': 'software',\n '.kt': 'software', '.kts': 'software',\n '.java': 'software', '.cs': 'software',\n '.go': 'software', '.rs': 'software',\n '.rb': 'software', '.php': 'software',\n '.lua': 'software', '.r': 'software',\n // .ino is ALWAYS hardware\n '.ino': 'hardware_iot',\n // .cpp/.c/.h are CONTEXT-DEPENDENT → resolve in detection logic\n '.stl': '3d_design', '.obj': '3d_design',\n '.step': '3d_design', '.stp': '3d_design',\n '.tc3': '3d_design', '.f3d': '3d_design',\n};\n\n// Extensions that need context disambiguation\nconst AMBIGUOUS_EXTENSIONS = new Set(['.cpp', '.c', '.h', '.hpp']);\n\n// ─── Syllabus language detection ─────────────────────────────────────────────\nconst LANG_PATTERNS: Array<{ lang: string; patterns: RegExp[] }> = [\n { lang: 'vi', patterns: [/[ạảãàáạảãạ]/i, /\\bgiải\\b/, /\\btính\\b/] },\n { lang: 'zh', patterns: [/[\\u4e00-\\u9fff]{2,}/] },\n { lang: 'ja', patterns: [/[\\u3040-\\u309f\\u30a0-\\u30ff]{2,}/] },\n { lang: 'ko', patterns: [/[\\uac00-\\ud7af]{2,}/] },\n { lang: 'fr', patterns: [/\\b(la|le|les|des|une|est|sont|avec|pour|dans)\\b/i] },\n];\n\nfunction detectSyllabusLanguage(text: string): string {\n for (const { lang, patterns } of LANG_PATTERNS) {\n if (patterns.some(p => p.test(text))) return lang;\n }\n return 'en';\n}\n\n// ─── Text normalization ───────────────────────────────────────────────────────\n// Vietnamese input reaches us in two Unicode forms. NFC composes \"ộ\" into one code\n// point; NFD (what several input methods and older text sources emit) splits it into\n// \"o\" + U+0312 + U+0300. Measured: one identical sentence classified as `math`\n// (confidence 1.0) in NFC and `other` (confidence 0.2) in NFD, because the keyword\n// table is NFC and the comparison was a raw `includes`. Normalize at the boundary,\n// and compare a diacritic-stripped form too so \"hình học\" matches unaccented input.\n// Stripping is Latin-only: CJK/Kana carry no combining marks and must stay intact.\nfunction normalizeText(s: string): string {\n return s.normalize('NFC').toLowerCase();\n}\n\n// ─── Main Detection Function ─────────────────────────────────────────────────\nexport function detectDomain(options: DetectDomainOptions): DomainDetectionResult {\n const evidence: string[] = [];\n const detectedTechStack: string[] = [];\n let detectedSubject = '';\n let ambiguous: DomainDetectionResult['ambiguous'];\n\n const scores: Record<DomainCategory, number> = {\n software: 0, hardware_iot: 0, '3d_design': 0,\n math: 0, science: 0, language: 0, arts: 0,\n research: 0, business: 0, other: 0,\n };\n\n // ─── 1. File Extension Signals ───────────────────────────────────────────\n const hasHardwareContext = !!(\n options.techStack?.toLowerCase().match(/arduino|esp32|raspberry|embedded|iot/)\n || options.description?.toLowerCase().match(/arduino|robot|sensor|motor|circuit/)\n || options.goal?.toLowerCase().match(/arduino|robot|sensor|motor|circuit/)\n );\n\n const hasSoftwareContext = !!(\n options.techStack?.toLowerCase().match(/swift|react|vue|angular|python|java|typescript|javascript/)\n || options.description?.toLowerCase().match(/app|web|api|frontend|backend|mobile/)\n || options.goal?.toLowerCase().match(/app|web|api|frontend|backend|mobile/)\n );\n\n if (options.fileExtensions) {\n for (const ext of options.fileExtensions) {\n const extLower = ext.toLowerCase();\n\n // Always-hardware extensions\n if (extLower === '.ino') {\n scores.hardware_iot += 0.5;\n evidence.push(`File extension ${ext} → hardware_iot (always)`);\n continue;\n }\n\n // Ambiguous extensions → context-dependent\n if (AMBIGUOUS_EXTENSIONS.has(extLower)) {\n if (hasHardwareContext && !hasSoftwareContext) {\n scores.hardware_iot += 0.3;\n evidence.push(`File extension ${ext} → hardware_iot (hardware context)`);\n } else if (hasSoftwareContext && !hasHardwareContext) {\n scores.software += 0.3;\n evidence.push(`File extension ${ext} → software (software context)`);\n } else if (hasHardwareContext && hasSoftwareContext) {\n // Both contexts → slight preference for software (more common for .cpp)\n scores.software += 0.15;\n scores.hardware_iot += 0.15;\n evidence.push(`File extension ${ext} → ambiguous (both software and hardware context)`);\n ambiguous = {\n domain1: 'software',\n domain2: 'hardware_iot',\n reason: `.cpp/.c/.h files present with both software and hardware context keywords`,\n };\n } else {\n // No context → default to software\n scores.software += 0.2;\n evidence.push(`File extension ${ext} → software (default, no context)`);\n }\n continue;\n }\n\n // Clear mapping extensions\n const domain = EXTENSION_DOMAIN[extLower];\n if (domain) {\n scores[domain] += 0.3;\n evidence.push(`File extension ${ext} → ${domain}`);\n }\n }\n }\n\n // ─── 2. Text Content Signals (multi-language) ─────────────────────────────\n const textContent = normalizeText([\n options.description || '',\n options.goal || '',\n options.syllabusText || '',\n ].join(' '));\n const textNoMarks = stripDiacritics(textContent);\n\n for (const [domain, keywords] of Object.entries(DOMAIN_KEYWORDS)) {\n const cat = domain as DomainCategory;\n for (const kw of keywords) {\n const kwNorm = normalizeText(kw);\n const kwPlain = stripDiacritics(kw);\n // Second form only helps Latin keywords — for CJK the stripped form equals the\n // original, so this degrades to the first check rather than widening the match.\n const matched = textContent.includes(kwNorm)\n || (kwPlain !== kwNorm && textNoMarks.includes(kwPlain));\n if (matched) {\n scores[cat] += 0.1;\n if (!evidence.some(e => e.includes(`\"${kw}\"`))) {\n evidence.push(`Keyword \"${kw}\" → ${cat}`);\n }\n }\n }\n }\n\n // ─── 3. Tech Stack Signals ────────────────────────────────────────────────\n if (options.techStack) {\n const techItems = options.techStack.split(',').map(t => t.trim());\n for (const tech of techItems) {\n const techL = tech.toLowerCase();\n if (['swift', 'swiftui', 'uikit', 'ios'].some(k => techL.includes(k))) {\n scores.software += 0.4;\n detectedTechStack.push(tech);\n } else if (['react', 'vue', 'angular', 'next', 'nuxt', 'typescript', 'javascript'].some(k => techL.includes(k))) {\n scores.software += 0.4;\n detectedTechStack.push(tech);\n } else if (['python', 'django', 'flask'].some(k => techL.includes(k))) {\n scores.software += 0.3;\n detectedTechStack.push(tech);\n } else if (['arduino', 'esp32', 'raspberry'].some(k => techL.includes(k))) {\n scores.hardware_iot += 0.5;\n detectedTechStack.push(tech);\n } else if (['tinkercad', 'fusion360', 'blender'].some(k => techL.includes(k))) {\n scores['3d_design'] += 0.5;\n detectedTechStack.push(tech);\n } else if (['c++', 'c', 'cpp'].some(k => techL === k || techL.endsWith(k))) {\n // C++/C → context-dependent\n if (hasHardwareContext) {\n scores.hardware_iot += 0.3;\n } else {\n scores.software += 0.3;\n }\n detectedTechStack.push(tech);\n }\n }\n }\n\n // ─── 4. Syllabus Content Signals (with language detection) ────────────────\n if (options.syllabusText) {\n const syllabusLang = detectSyllabusLanguage(options.syllabusText);\n const syllabusLower = normalizeText(options.syllabusText);\n const syllabusPlain = stripDiacritics(options.syllabusText);\n\n if (syllabusLower.includes('hình học') || syllabusLower.includes('đại số')\n || syllabusPlain.includes('hinh hoc') || syllabusPlain.includes('dai so')\n || syllabusLower.includes('geometry') || syllabusLower.includes('algebra')\n || syllabusLower.includes('几何') || syllabusLower.includes('代数')\n || syllabusLower.includes('幾何') || syllabusLower.includes('代数')\n || syllabusLower.includes('géométrie') || syllabusLower.includes('algèbre')) {\n scores.math += 0.5;\n detectedSubject = 'Mathematics';\n } else if (syllabusLower.includes('vật lý') || syllabusLower.includes('hóa')\n || syllabusPlain.includes('vat ly') || syllabusPlain.includes('hoa')\n || syllabusLower.includes('sinh') || syllabusLower.includes('physics')\n || syllabusLower.includes('chemistry') || syllabusLower.includes('biology')\n || syllabusLower.includes('物理') || syllabusLower.includes('化学')\n || syllabusLower.includes('物理') || syllabusLower.includes('化学')\n || syllabusLower.includes('physique') || syllabusLower.includes('chimie')) {\n scores.science += 0.5;\n detectedSubject = 'Natural Science';\n } else if (syllabusLower.includes('tiếng anh') || syllabusLower.includes('english')\n || syllabusLower.includes('grammar') || syllabusLower.includes('英语')\n || syllabusLower.includes('英語') || syllabusLower.includes('anglais')) {\n scores.language += 0.5;\n detectedSubject = 'English Language';\n }\n\n evidence.push(`Syllabus language detected: ${syllabusLang}`);\n }\n\n // ─── 5. Scoring & Winner ─────────────────────────────────────────────────\n const entries = Object.entries(scores).filter(([k]) => k !== 'other') as [DomainCategory, number][];\n entries.sort((a, b) => b[1] - a[1]);\n const [winner, winnerScore] = entries[0];\n\n if (winnerScore === 0) {\n return {\n domainCategory: 'other',\n confidence: 0.2,\n evidence: [...evidence, 'No domain signals detected'],\n detectedTechStack,\n detectedSubject,\n };\n }\n\n // Check for near-tie (within 0.15) → ambiguous\n const second = entries[1];\n if (second && (winnerScore - second[1]) < 0.15 && winnerScore > 0) {\n ambiguous = {\n domain1: winner,\n domain2: second[0],\n reason: `Scores very close: ${winner}=${winnerScore.toFixed(2)}, ${second[0]}=${second[1].toFixed(2)}`,\n };\n }\n\n const totalScore = entries.reduce((sum, [, s]) => sum + s, 0);\n const confidence = totalScore > 0 ? Math.min(winnerScore / totalScore + 0.3, 1.0) : 0.3;\n\n return {\n domainCategory: winner,\n confidence,\n evidence: evidence.slice(0, 20),\n detectedTechStack,\n detectedSubject,\n ambiguous,\n };\n}\n","/**\n * Learning Mode Detection — determines product vs concept vs hybrid.\n *\n * Logic:\n * - Repository + build verbs → product\n * - Syllabus + no source code → concept\n * - Repository + understanding verbs → hybrid\n * - Domain category heuristic (math/science → concept, software/hardware → product)\n */\n\nimport type { LearningMode, DomainCategory, InputType } from '../schemas/domainProfileSchema';\n\nexport interface LearningModeDetectionResult {\n learningMode: LearningMode;\n confidence: number;\n evidence: string[];\n}\n\nexport interface DetectLearningModeOptions {\n inputType: InputType;\n domainCategory: DomainCategory;\n goal?: string;\n description?: string;\n hasRepo: boolean;\n hasSyllabus: boolean;\n}\n\n// ─── Verb patterns ───────────────────────────────────────────────────────────\n\nconst BUILD_VERBS = [\n 'build', 'create', 'develop', 'implement', 'construct', 'make',\n 'xây dựng', 'tạo', 'phát triển', 'triển khai', 'lắp ráp',\n 'code', 'program', 'design a', 'set up', 'deploy',\n];\n\nconst UNDERSTAND_VERBS = [\n 'understand', 'learn', 'grasp', 'comprehend', 'master',\n 'hiểu', 'nắm vững', 'học', 'tiếp thu', 'am hiểu',\n 'vận dụng', 'phân tích', 'đánh giá', 'so sánh',\n 'explain', 'describe', 'analyze', 'evaluate', 'compare',\n];\n\nconst CONCEPT_DOMAINS: DomainCategory[] = ['math', 'science', 'language', 'arts', 'research', 'business'];\nconst PRODUCT_DOMAINS: DomainCategory[] = ['software', 'hardware_iot', '3d_design'];\n\n/**\n * Detect learning mode from context.\n */\nexport function detectLearningMode(options: DetectLearningModeOptions): LearningModeDetectionResult {\n const evidence: string[] = [];\n const text = [options.goal || '', options.description || ''].join(' ').toLowerCase();\n\n let productScore = 0;\n let conceptScore = 0;\n\n // 1. Input type signals\n if (options.hasRepo) {\n productScore += 0.3;\n evidence.push('Repository present → product signal');\n }\n if (options.hasSyllabus) {\n conceptScore += 0.3;\n evidence.push('Syllabus present → concept signal');\n }\n\n // 2. Domain category heuristic\n if (PRODUCT_DOMAINS.includes(options.domainCategory)) {\n productScore += 0.2;\n evidence.push(`Domain ${options.domainCategory} → product倾向`);\n }\n if (CONCEPT_DOMAINS.includes(options.domainCategory)) {\n conceptScore += 0.2;\n evidence.push(`Domain ${options.domainCategory} → concept倾向`);\n }\n\n // 3. Verb pattern matching\n const hasBuildVerbs = BUILD_VERBS.some(v => text.includes(v));\n const hasUnderstandVerbs = UNDERSTAND_VERBS.some(v => text.includes(v));\n\n if (hasBuildVerbs) {\n productScore += 0.3;\n evidence.push('Build verbs detected in goal/description');\n }\n if (hasUnderstandVerbs) {\n conceptScore += 0.3;\n evidence.push('Understand verbs detected in goal/description');\n }\n\n // 4. Determine mode\n const total = productScore + conceptScore;\n if (total === 0) {\n return {\n learningMode: 'product',\n confidence: 0.3,\n evidence: [...evidence, 'No signals — defaulting to product'],\n };\n }\n\n // Check for hybrid\n if (productScore >= 0.3 && conceptScore >= 0.3) {\n const hybridConf = Math.min((productScore + conceptScore) / 2, 1.0);\n return {\n learningMode: 'hybrid',\n confidence: hybridConf,\n evidence: [...evidence, `Mixed signals: product=${productScore.toFixed(2)}, concept=${conceptScore.toFixed(2)} → hybrid`],\n };\n }\n\n if (productScore > conceptScore) {\n const raw = total > 0 ? productScore / total : 0.5;\n return {\n learningMode: 'product',\n confidence: Math.min(Math.max(raw, 0) + 0.2, 1.0),\n evidence,\n };\n }\n\n const raw = total > 0 ? conceptScore / total : 0.5;\n return {\n learningMode: 'concept',\n confidence: Math.min(Math.max(raw, 0) + 0.2, 1.0),\n evidence,\n };\n}\n","/**\n * Domain Profile Detection Orchestrator — combines all detection modules.\n */\n\nimport { detectInputType, type DetectInputTypeOptions } from './inputTypeDetector';\nimport { detectDomain, type DetectDomainOptions } from './domainDetector';\nimport { detectLearningMode } from './learningModeDetector';\nimport type { DomainProfile, GraphType } from '../schemas/domainProfileSchema';\nimport type { ParsedSyllabus } from '../parsers/syllabusParser';\n\nexport interface DetectDomainProfileOptions {\n repoUrl?: string;\n repoDir?: string;\n description?: string;\n goal?: string;\n syllabusText?: string;\n parsedSyllabus?: ParsedSyllabus;\n chapters?: string[];\n fileExtensions?: string[];\n techStack?: string;\n gradeBand?: [number, number];\n}\n\nexport function detectDomainProfile(options: DetectDomainProfileOptions): DomainProfile {\n const effectiveSyllabus = options.syllabusText || options.parsedSyllabus?.rawText || '';\n const inputResult = detectInputType({\n ...options,\n syllabusText: effectiveSyllabus,\n });\n\n const domainResult = detectDomain({\n description: options.description,\n goal: options.goal,\n syllabusText: effectiveSyllabus,\n techStack: options.techStack,\n fileExtensions: options.fileExtensions,\n repoUrl: options.repoUrl,\n });\n\n const modeResult = detectLearningMode({\n inputType: inputResult.inputType,\n domainCategory: domainResult.domainCategory,\n goal: options.goal,\n description: options.description,\n hasRepo: !!(options.repoUrl || options.repoDir),\n hasSyllabus: !!(effectiveSyllabus || (options.chapters && options.chapters.length > 0) || options.parsedSyllabus),\n });\n\n const graphType = determineGraphType(modeResult.learningMode);\n\n return {\n inputType: inputResult.inputType,\n domainCategory: (domainResult.domainCategory === 'other' && options.parsedSyllabus?.subject.domain)\n ? (options.parsedSyllabus.subject.domain as any)\n : domainResult.domainCategory,\n learningMode: modeResult.learningMode,\n graphType,\n confidence: {\n inputType: inputResult.confidence,\n domainCategory: domainResult.confidence,\n learningMode: modeResult.confidence,\n },\n evidence: [...inputResult.evidence, ...domainResult.evidence, ...modeResult.evidence],\n ambiguous: domainResult.ambiguous,\n detectedTechStack: domainResult.detectedTechStack,\n detectedSubject: options.parsedSyllabus?.subject.title || domainResult.detectedSubject,\n detectedDomain: domainResult.domainCategory,\n goal: options.goal || '',\n description: options.description || '',\n repoUrl: options.repoUrl || '',\n repoDir: options.repoDir || '',\n syllabusText: effectiveSyllabus,\n };\n}\n\nfunction determineGraphType(learningMode: string): GraphType {\n switch (learningMode) {\n case 'product': return 'project_graph';\n case 'concept': return 'knowledge_graph';\n case 'hybrid': return 'hybrid_graph';\n default: return 'project_graph';\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { d as InputType, e as DomainCategory, f as LearningMode } from '../domainProfileSchema-CwT3Ffsw.cjs';
2
- export { D as DetectDomainProfileOptions, d as detectDomainProfile } from '../domainProfileDetector-bzugdQmS.cjs';
1
+ import { e as InputType, f as DomainCategory, g as LearningMode } from '../domainProfileSchema-779FGk14.cjs';
2
+ export { D as DetectDomainProfileOptions, d as detectDomainProfile } from '../domainProfileDetector-BsADsuRV.cjs';
3
3
  import 'zod';
4
4
  import '../syllabusParser-MSX1fEzW.cjs';
5
5
 
@@ -1,5 +1,5 @@
1
- import { d as InputType, e as DomainCategory, f as LearningMode } from '../domainProfileSchema-CwT3Ffsw.js';
2
- export { D as DetectDomainProfileOptions, d as detectDomainProfile } from '../domainProfileDetector-DHb1T0zB.js';
1
+ import { e as InputType, f as DomainCategory, g as LearningMode } from '../domainProfileSchema-779FGk14.js';
2
+ export { D as DetectDomainProfileOptions, d as detectDomainProfile } from '../domainProfileDetector-6pjgL-6_.js';
3
3
  import 'zod';
4
4
  import '../syllabusParser-MSX1fEzW.js';
5
5
 
@@ -1,4 +1,5 @@
1
1
  import '../chunk-7XGWW6CB.mjs';
2
- export { detectDomain, detectDomainProfile, detectInputType, detectLearningMode } from '../chunk-BL5NBKPH.mjs';
2
+ export { detectDomain, detectDomainProfile, detectInputType, detectLearningMode } from '../chunk-WD3P5V3B.mjs';
3
+ import '../chunk-OYSZQVPY.mjs';
3
4
  //# sourceMappingURL=index.mjs.map
4
5
  //# sourceMappingURL=index.mjs.map
@@ -1,4 +1,4 @@
1
- import { c as DomainProfile } from './domainProfileSchema-CwT3Ffsw.js';
1
+ import { d as DomainProfile } from './domainProfileSchema-779FGk14.js';
2
2
  import { P as ParsedSyllabus } from './syllabusParser-MSX1fEzW.js';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { c as DomainProfile } from './domainProfileSchema-CwT3Ffsw.cjs';
1
+ import { d as DomainProfile } from './domainProfileSchema-779FGk14.cjs';
2
2
  import { P as ParsedSyllabus } from './syllabusParser-MSX1fEzW.cjs';
3
3
 
4
4
  /**
@@ -27,6 +27,20 @@ declare const DetectionConfidenceSchema: z.ZodObject<{
27
27
  domainCategory?: number | undefined;
28
28
  learningMode?: number | undefined;
29
29
  }>;
30
+ declare const AmbiguousDomainSchema: z.ZodObject<{
31
+ domain1: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
32
+ domain2: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
33
+ reason: z.ZodString;
34
+ }, "strip", z.ZodTypeAny, {
35
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
36
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
37
+ reason: string;
38
+ }, {
39
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
40
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
41
+ reason: string;
42
+ }>;
43
+ type AmbiguousDomain = z.infer<typeof AmbiguousDomainSchema>;
30
44
  declare const DomainProfileSchema: z.ZodObject<{
31
45
  inputType: z.ZodEnum<["repository", "description", "syllabus", "files", "mixed"]>;
32
46
  domainCategory: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
@@ -45,6 +59,19 @@ declare const DomainProfileSchema: z.ZodObject<{
45
59
  domainCategory?: number | undefined;
46
60
  learningMode?: number | undefined;
47
61
  }>>;
62
+ ambiguous: z.ZodOptional<z.ZodObject<{
63
+ domain1: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
64
+ domain2: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
65
+ reason: z.ZodString;
66
+ }, "strip", z.ZodTypeAny, {
67
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
68
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
69
+ reason: string;
70
+ }, {
71
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
72
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
73
+ reason: string;
74
+ }>>;
48
75
  evidence: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
49
76
  detectedTechStack: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
50
77
  detectedSubject: z.ZodDefault<z.ZodOptional<z.ZodString>>;
@@ -74,6 +101,11 @@ declare const DomainProfileSchema: z.ZodObject<{
74
101
  domainCategory: number;
75
102
  learningMode: number;
76
103
  } | undefined;
104
+ ambiguous?: {
105
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
106
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
107
+ reason: string;
108
+ } | undefined;
77
109
  detectedGradeBand?: [number, number] | undefined;
78
110
  }, {
79
111
  inputType: "description" | "files" | "repository" | "syllabus" | "mixed";
@@ -88,6 +120,11 @@ declare const DomainProfileSchema: z.ZodObject<{
88
120
  } | undefined;
89
121
  evidence?: string[] | undefined;
90
122
  goal?: string | undefined;
123
+ ambiguous?: {
124
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
125
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
126
+ reason: string;
127
+ } | undefined;
91
128
  detectedTechStack?: string[] | undefined;
92
129
  detectedSubject?: string | undefined;
93
130
  detectedGradeBand?: [number, number] | undefined;
@@ -102,4 +139,4 @@ type DomainCategory = z.infer<typeof DomainCategorySchema>;
102
139
  type LearningMode = z.infer<typeof LearningModeSchema>;
103
140
  type GraphType = z.infer<typeof GraphTypeSchema>;
104
141
 
105
- export { DomainCategorySchema as D, GraphTypeSchema as G, InputTypeSchema as I, LearningModeSchema as L, DetectionConfidenceSchema as a, DomainProfileSchema as b, type DomainProfile as c, type InputType as d, type DomainCategory as e, type LearningMode as f, type GraphType as g };
142
+ export { AmbiguousDomainSchema as A, DomainCategorySchema as D, GraphTypeSchema as G, InputTypeSchema as I, LearningModeSchema as L, DetectionConfidenceSchema as a, type AmbiguousDomain as b, DomainProfileSchema as c, type DomainProfile as d, type InputType as e, type DomainCategory as f, type LearningMode as g, type GraphType as h };
@@ -27,6 +27,20 @@ declare const DetectionConfidenceSchema: z.ZodObject<{
27
27
  domainCategory?: number | undefined;
28
28
  learningMode?: number | undefined;
29
29
  }>;
30
+ declare const AmbiguousDomainSchema: z.ZodObject<{
31
+ domain1: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
32
+ domain2: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
33
+ reason: z.ZodString;
34
+ }, "strip", z.ZodTypeAny, {
35
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
36
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
37
+ reason: string;
38
+ }, {
39
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
40
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
41
+ reason: string;
42
+ }>;
43
+ type AmbiguousDomain = z.infer<typeof AmbiguousDomainSchema>;
30
44
  declare const DomainProfileSchema: z.ZodObject<{
31
45
  inputType: z.ZodEnum<["repository", "description", "syllabus", "files", "mixed"]>;
32
46
  domainCategory: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
@@ -45,6 +59,19 @@ declare const DomainProfileSchema: z.ZodObject<{
45
59
  domainCategory?: number | undefined;
46
60
  learningMode?: number | undefined;
47
61
  }>>;
62
+ ambiguous: z.ZodOptional<z.ZodObject<{
63
+ domain1: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
64
+ domain2: z.ZodEnum<["software", "hardware_iot", "3d_design", "math", "science", "language", "arts", "research", "business", "other"]>;
65
+ reason: z.ZodString;
66
+ }, "strip", z.ZodTypeAny, {
67
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
68
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
69
+ reason: string;
70
+ }, {
71
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
72
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
73
+ reason: string;
74
+ }>>;
48
75
  evidence: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
49
76
  detectedTechStack: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
50
77
  detectedSubject: z.ZodDefault<z.ZodOptional<z.ZodString>>;
@@ -74,6 +101,11 @@ declare const DomainProfileSchema: z.ZodObject<{
74
101
  domainCategory: number;
75
102
  learningMode: number;
76
103
  } | undefined;
104
+ ambiguous?: {
105
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
106
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
107
+ reason: string;
108
+ } | undefined;
77
109
  detectedGradeBand?: [number, number] | undefined;
78
110
  }, {
79
111
  inputType: "description" | "files" | "repository" | "syllabus" | "mixed";
@@ -88,6 +120,11 @@ declare const DomainProfileSchema: z.ZodObject<{
88
120
  } | undefined;
89
121
  evidence?: string[] | undefined;
90
122
  goal?: string | undefined;
123
+ ambiguous?: {
124
+ domain1: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
125
+ domain2: "math" | "science" | "language" | "arts" | "research" | "business" | "other" | "software" | "hardware_iot" | "3d_design";
126
+ reason: string;
127
+ } | undefined;
91
128
  detectedTechStack?: string[] | undefined;
92
129
  detectedSubject?: string | undefined;
93
130
  detectedGradeBand?: [number, number] | undefined;
@@ -102,4 +139,4 @@ type DomainCategory = z.infer<typeof DomainCategorySchema>;
102
139
  type LearningMode = z.infer<typeof LearningModeSchema>;
103
140
  type GraphType = z.infer<typeof GraphTypeSchema>;
104
141
 
105
- export { DomainCategorySchema as D, GraphTypeSchema as G, InputTypeSchema as I, LearningModeSchema as L, DetectionConfidenceSchema as a, DomainProfileSchema as b, type DomainProfile as c, type InputType as d, type DomainCategory as e, type LearningMode as f, type GraphType as g };
142
+ export { AmbiguousDomainSchema as A, DomainCategorySchema as D, GraphTypeSchema as G, InputTypeSchema as I, LearningModeSchema as L, DetectionConfidenceSchema as a, type AmbiguousDomain as b, DomainProfileSchema as c, type DomainProfile as d, type InputType as e, type DomainCategory as f, type LearningMode as g, type GraphType as h };
@@ -1,6 +1,6 @@
1
- import { S as SourceContext } from '../keywordExtractor-BxlGRMHC.cjs';
2
- export { K as Keyword, e as extractKeywords } from '../keywordExtractor-BxlGRMHC.cjs';
3
- import '../cpp-CZUPqJt9.cjs';
1
+ import { S as SourceContext } from '../keywordExtractor-1YAFntsn.cjs';
2
+ export { K as Keyword, e as extractKeywords } from '../keywordExtractor-1YAFntsn.cjs';
3
+ import '../cpp-vlDl6pCL.cjs';
4
4
 
5
5
  /**
6
6
  * File Relevance Scorer — determines which source files are most relevant
@@ -1,6 +1,6 @@
1
- import { S as SourceContext } from '../keywordExtractor-DU5XRN8-.js';
2
- export { K as Keyword, e as extractKeywords } from '../keywordExtractor-DU5XRN8-.js';
3
- import '../cpp-CZUPqJt9.js';
1
+ import { S as SourceContext } from '../keywordExtractor-DWw8z_AF.js';
2
+ export { K as Keyword, e as extractKeywords } from '../keywordExtractor-DWw8z_AF.js';
3
+ import '../cpp-vlDl6pCL.js';
4
4
 
5
5
  /**
6
6
  * File Relevance Scorer — determines which source files are most relevant