@thanh01.pmt/domain-kit 0.1.0 → 0.2.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.
- package/LICENSE +21 -0
- package/dist/{chunk-GEUDHZE7.mjs → chunk-23TQPTHG.mjs} +173 -4
- package/dist/chunk-23TQPTHG.mjs.map +1 -0
- package/dist/chunk-7XGWW6CB.mjs +3 -0
- package/dist/{chunk-F4RZNBOE.mjs.map → chunk-7XGWW6CB.mjs.map} +1 -1
- package/dist/{chunk-VFART56O.mjs → chunk-BL5NBKPH.mjs} +12 -8
- package/dist/chunk-BL5NBKPH.mjs.map +1 -0
- package/dist/{chunk-3VVPSRAM.mjs → chunk-CRN6D4HG.mjs} +1056 -92
- package/dist/chunk-CRN6D4HG.mjs.map +1 -0
- package/dist/{chunk-3H2HX7PR.mjs → chunk-HUDFN4IX.mjs} +58 -8
- package/dist/chunk-HUDFN4IX.mjs.map +1 -0
- package/dist/chunk-IJZUV7N3.mjs +3 -0
- package/dist/chunk-IJZUV7N3.mjs.map +1 -0
- package/dist/chunk-R57WTNXW.mjs +3 -0
- package/dist/chunk-R57WTNXW.mjs.map +1 -0
- package/dist/chunk-T4Y2DE2W.mjs +187 -0
- package/dist/chunk-T4Y2DE2W.mjs.map +1 -0
- package/dist/{chunk-PM42MMDJ.mjs → chunk-WHBAGJWN.mjs} +48 -3
- package/dist/chunk-WHBAGJWN.mjs.map +1 -0
- package/dist/chunk-ZKLT27T4.mjs +3 -0
- package/dist/chunk-ZKLT27T4.mjs.map +1 -0
- package/dist/concepts/index.d.cts +2 -2
- package/dist/concepts/index.d.ts +2 -2
- package/dist/cpp-CZUPqJt9.d.cts +98 -0
- package/dist/cpp-CZUPqJt9.d.ts +98 -0
- package/dist/curriculumFeedEmitter-E5DAJYUZ.mjs +4 -0
- package/dist/curriculumFeedEmitter-E5DAJYUZ.mjs.map +1 -0
- package/dist/detector/index.cjs +10 -6
- package/dist/detector/index.cjs.map +1 -1
- package/dist/detector/index.d.cts +4 -19
- package/dist/detector/index.d.ts +4 -19
- package/dist/detector/index.mjs +2 -1
- package/dist/domainProfileDetector-DHb1T0zB.d.ts +22 -0
- package/dist/domainProfileDetector-bzugdQmS.d.cts +22 -0
- package/dist/extractors/index.d.cts +3 -3
- package/dist/extractors/index.d.ts +3 -3
- package/dist/feed/index.cjs +56 -6
- package/dist/feed/index.cjs.map +1 -1
- package/dist/feed/index.mjs +2 -1
- package/dist/graph/index.cjs +370 -66
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +7 -67
- package/dist/graph/index.d.ts +7 -67
- package/dist/graph/index.mjs +3 -2
- package/dist/hybridGraphPipeline-DVZYLCAQ.d.ts +159 -0
- package/dist/hybridGraphPipeline-DmWRKYXf.d.cts +159 -0
- package/dist/index.cjs +1303 -700
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -7
- package/dist/index.d.ts +9 -7
- package/dist/index.mjs +10 -7
- package/dist/{keywordExtractor-zPAz2isq.d.cts → keywordExtractor-BxlGRMHC.d.cts} +1 -1
- package/dist/{keywordExtractor-CKaXqSku.d.ts → keywordExtractor-DU5XRN8-.d.ts} +1 -1
- package/dist/parsers/index.cjs +185 -0
- package/dist/parsers/index.cjs.map +1 -1
- package/dist/parsers/index.d.cts +2 -98
- package/dist/parsers/index.d.ts +2 -98
- package/dist/parsers/index.mjs +2 -1
- package/dist/pipeline/index.cjs +3142 -8
- package/dist/pipeline/index.cjs.map +1 -1
- package/dist/pipeline/index.d.cts +87 -4
- package/dist/pipeline/index.d.ts +87 -4
- package/dist/pipeline/index.mjs +6 -2
- package/dist/schemas/index.cjs +51 -0
- package/dist/schemas/index.cjs.map +1 -1
- package/dist/schemas/index.d.cts +222 -3
- package/dist/schemas/index.d.ts +222 -3
- package/dist/schemas/index.mjs +1 -1
- package/dist/syllabusParser-MSX1fEzW.d.cts +40 -0
- package/dist/syllabusParser-MSX1fEzW.d.ts +40 -0
- package/package.json +9 -10
- package/dist/chunk-3H2HX7PR.mjs.map +0 -1
- package/dist/chunk-3VVPSRAM.mjs.map +0 -1
- package/dist/chunk-F4RZNBOE.mjs +0 -3
- package/dist/chunk-GEUDHZE7.mjs.map +0 -1
- package/dist/chunk-MOKNFLUD.mjs +0 -851
- package/dist/chunk-MOKNFLUD.mjs.map +0 -1
- package/dist/chunk-PM42MMDJ.mjs.map +0 -1
- package/dist/chunk-VFART56O.mjs.map +0 -1
- package/dist/graphVerifier-DsTP9uAN.d.ts +0 -37
- package/dist/graphVerifier-QjgDAJce.d.cts +0 -37
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/llmClient.ts","../src/graph/scaffoldExtractor.ts","../src/graph/overviewExtractor.ts","../src/graph/stepExtractor.ts","../src/graph/graphVerifier.ts","../src/graph/conceptEscalator.ts"],"names":["buildSourceText"],"mappings":"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","file":"chunk-MOKNFLUD.mjs","sourcesContent":["/**\n * LLM client wrapper — provides a unified interface for LLM calls\n * used by the graph generation pipeline.\n *\n * Supports OpenAI-compatible APIs via environment variables:\n * LLM_API_KEY, LLM_BASE_URL, LLM_MODEL (or LLM_TIER_FAST / LLM_TIER_STRONG)\n */\n\nexport interface LlmClientConfig {\n apiKey?: string;\n baseUrl?: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n}\n\n/** One callable provider endpoint in the fallback chain. */\nexport interface ProviderSpec {\n label: string;\n baseUrl: string;\n apiKey: string;\n model: string;\n}\n\nexport interface LlmClient {\n chat(messages: LlmChatMessage[], options?: { temperature?: number; maxTokens?: number }): Promise<LlmChatResult>;\n model: string;\n}\n\nexport interface LlmChatMessage {\n role: 'system' | 'user' | 'assistant';\n content: string;\n}\n\nexport interface LlmChatResult {\n content: string;\n model: string;\n /** Provider label that ultimately served the request. */\n provider?: string;\n /** What happened per provider when fallback occurred (empty when first try succeeded). */\n attempts?: string[];\n /** 'stop' when complete; 'length' means the response was TRUNCATED by max_tokens. */\n finishReason?: string;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n finishReason?: string;\n};\n}\n\nexport class LlmClientError extends Error {\n constructor(\n message: string,\n public readonly status?: number,\n public readonly cause?: Error,\n ) {\n super(message);\n this.name = 'LlmClientError';\n }\n}\n\n/**\n * Create an LLM client from environment variables.\n */\n/**\n * Resolve the provider fallback chain from explicit config and environment.\n * Base order: explicit config > legacy LLM_API_KEY/OPENAI_API_KEY > NVIDIA NIM >\n * OpenRouter > DashScope/Alibaba MaaS. First entry is PRIMARY; the rest are\n * fallbacks tried in order.\n *\n * QUALITY-EVAL MODE: when OPENROUTER_MODEL is set (a paid preset), OpenRouter\n * is promoted to PRIMARY so generation quality is evaluated without free-tier\n * 429/403 noise. NVIDIA/dashscope then act only as safety-net fallbacks.\n */\nexport function resolveProviderChain(config?: LlmClientConfig): ProviderSpec[] {\n const chain: ProviderSpec[] = [];\n const push = (label: string, baseUrl: string, apiKey: string, model: string): void => {\n if (apiKey && baseUrl && model && !chain.some((c) => c.baseUrl === baseUrl && c.model === model)) {\n chain.push({ label, baseUrl, apiKey, model });\n }\n };\n // Explicit single-provider config keeps its historical meaning.\n if (config?.apiKey) {\n push('config', config.baseUrl || 'https://api.openai.com/v1', config.apiKey, config.model || 'gpt-4o-mini');\n }\n // Legacy generic env (knowledge-tree compatible: OPENAI_BASE_URL + LLM_MODEL).\n push('legacy', process.env.LLM_BASE_URL || process.env.OPENAI_BASE_URL || '', process.env.LLM_API_KEY || process.env.OPENAI_API_KEY || '', process.env.LLM_MODEL || process.env.LLM_TIER_FAST || '');\n // DashScope / Alibaba MaaS (OpenAI-compatible endpoints).\n push('dashscope', process.env.DASHSCOPE_BASE_URL || process.env.ALIBABA_BASE_URL || '', process.env.DASHSCOPE_API_KEY || process.env.ALIBABA_API_KEY || '', process.env.DASHSCOPE_MODEL || process.env.DEFAULT_AI_MODEL || '');\n // NVIDIA NIM — hosted provider for generation workloads.\n push('nvidia', 'https://integrate.api.nvidia.com/v1', process.env.NVIDIA_API_KEY || '', process.env.NVIDIA_MODEL || 'nvidia/nemotron-3-ultra-550b-a55b');\n // OpenRouter — paid preset primary when OPENROUTER_MODEL pins a model/preset.\n push('openrouter', 'https://openrouter.ai/api/v1', process.env.OPENROUTER_API_KEY || '', process.env.OPENROUTER_MODEL || 'nvidia/nemotron-3-ultra-550b-a55b');\n // QUALITY-EVAL MODE: paid OpenRouter preset goes FIRST (no 429 noise).\n if (process.env.OPENROUTER_MODEL) {\n const or = chain.find((c) => c.label === 'openrouter');\n if (or) {\n const rest = chain.filter((c) => c !== or);\n return [or, ...rest];\n }\n }\n return chain;\n}\n\n// Free-tier rate limits (NVIDIA NIM, OpenRouter) trip when a pipeline fires\n// many requests in a burst. Global pacing keeps us under the limit; a single\n// isolated call still goes through immediately.\nconst MIN_REQUEST_INTERVAL_MS = 2_500;\nlet lastRequestAt = 0;\n\nasync function pacedDelay(): Promise<void> {\n const wait = lastRequestAt + MIN_REQUEST_INTERVAL_MS - Date.now();\n if (wait > 0) await new Promise((resolve) => setTimeout(resolve, wait));\n lastRequestAt = Date.now();\n}\n\nexport function createLlmClient(config?: LlmClientConfig): LlmClient {\n const chain = resolveProviderChain(config);\n const primary = chain[0];\n if (!primary) {\n throw new LlmClientError(\n 'No LLM provider configured. Set NVIDIA_API_KEY (primary) and/or OPENROUTER_API_KEY (fallback), or pass llmConfig.',\n );\n }\n const apiKey = primary.apiKey;\n const baseUrl = primary.baseUrl;\n const model = primary.model;\n\n async function chat(\n messages: LlmChatMessage[],\n options?: { temperature?: number; maxTokens?: number },\n ): Promise<LlmChatResult> {\n const temperature = options?.temperature ?? config?.temperature ?? 0.1;\n const maxTokens = options?.maxTokens ?? config?.maxTokens ?? parseInt(process.env.LLM_MAX_TOKENS || '65536', 10);\n\n const attempts: string[] = [];\n let lastError: LlmClientError | null = null;\n const TRANSIENT = new Set([408, 429, 500, 502, 503, 504]);\n // Hard per-request cap so a hanging provider degrades to a transient error\n // and the chain falls through instead of blocking the pipeline forever.\n // Reasoning presets (e.g. deepseek-v4-flash) can legitimately think for\n // minutes on large structured outputs — 5 minutes default, env-overridable.\n const REQUEST_TIMEOUT_MS = Number(process.env.LLM_REQUEST_TIMEOUT_MS || 300_000);\n const MAX_CHAIN_ROUNDS = 3;\n for (let round = 1; round <= MAX_CHAIN_ROUNDS; round++) {\n if (round > 1) {\n // Whole chain failed transiently (rate limits / upstream 5xx) — back\n // off and rewalk the chain from the primary instead of dying.\n attempts.push('round ' + (round - 1) + ' failed — backing off 20s before rewalking the chain');\n await new Promise((resolve) => setTimeout(resolve, 20_000));\n }\n for (const provider of chain) {\n try {\n const headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${provider.apiKey}`,\n };\n const payload = {\n model: provider.model,\n messages,\n temperature,\n max_tokens: maxTokens,\n };\n await pacedDelay();\n const doFetch = (): Promise<Response> => fetch(`${provider.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${provider.apiKey}`,\n },\n body: JSON.stringify({\n model: provider.model,\n messages,\n temperature,\n max_tokens: maxTokens,\n }),\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n // Transient network failures (DNS blip, TLS reset, \"fetch failed\") get\n // one same-provider retry before falling through the chain.\n let response: Response;\n try {\n response = await doFetch();\n } catch (netErr) {\n attempts.push(`${provider.label}: network error (${netErr instanceof Error ? netErr.message : String(netErr)}) — retrying once`);\n await new Promise((r) => setTimeout(r, 5_000));\n lastRequestAt = Date.now();\n response = await doFetch();\n }\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n const err = new LlmClientError(\n `[${provider.label}] LLM API error: ${response.status} ${response.statusText} — ${body.slice(0, 200)}`,\n response.status,\n );\n if (response.status === 429) {\n // Rate-limited: honor Retry-After (bounded) and retry once on the\n // same provider before falling through to the next one.\n const retryAfterRaw = response.headers.get('retry-after');\n const retryAfterMs = Math.min(\n 60_000,\n Math.max(15_000, (Number.isFinite(Number(retryAfterRaw)) ? Number(retryAfterRaw) : 20) * 1_000),\n );\n attempts.push(`${provider.label}: 429 rate-limited — backing off ${Math.round(retryAfterMs / 1000)}s`);\n await new Promise((resolve) => setTimeout(resolve, retryAfterMs));\n lastRequestAt = Date.now();\n const retry = await fetch(`${provider.baseUrl}/chat/completions`, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n if (!retry.ok) throw err;\n const retryData = await retry.json() as {\n choices?: Array<{ message?: { content?: string }; finish_reason?: string }>;\n model?: string;\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n const retryContent2 = retryData.choices?.[0]?.message?.content || '';\n if (!retryContent2.trim()) throw err;\n return {\n content: retryContent2,\n model: retryData.model || provider.model,\n provider: provider.label,\n attempts: attempts.slice(),\n usage: retryData.usage,\n finishReason: retryData.choices?.[0]?.finish_reason,\n };\n }\n if (TRANSIENT.has(response.status)) {\n await new Promise((r) => setTimeout(r, 3000));\n const retry = await fetch(`${provider.baseUrl}/chat/completions`, {\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${provider.apiKey}`,\n },\n body: JSON.stringify({\n model: provider.model,\n messages,\n temperature,\n max_tokens: maxTokens,\n }),\n });\n if (!retry.ok) throw err; // still transient-failing — fall through to next provider\n const retryData = await retry.json() as {\n choices?: Array<{ message?: { content?: string }; finish_reason?: string }>;\n model?: string;\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n const retryContent = retryData.choices?.[0]?.message?.content || '';\n return {\n content: retryContent,\n model: retryData.model || provider.model,\n provider: provider.label,\n attempts: attempts.slice(),\n usage: retryData.usage,\n finishReason: retryData.choices?.[0]?.finish_reason,\n };\n }\n throw err;\n }\n const data = await response.json() as {\n choices?: Array<{ message?: { content?: string }; finish_reason?: string }>;\n model?: string;\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n const wrappedError = (data as { error?: { message?: string; code?: number } }).error;\n if (wrappedError) {\n // OpenRouter proxies some upstream failures as HTTP 200 with an\n // {\"error\": {...}} body — treat as transient and fall through.\n throw new LlmClientError('[' + provider.label + '] upstream error ' + (wrappedError.code ?? '') + ': ' + (wrappedError.message ?? 'unknown'));\n }\n const content = data.choices?.[0]?.message?.content || '';\n if (!content.trim()) {\n // Empty completion (provider outage / content filter) is transient —\n // fall through to the next provider instead of returning unusable ''.\n throw new LlmClientError('[' + provider.label + '] empty completion returned');\n }\n return {\n content,\n model: data.model || provider.model,\n provider: provider.label,\n attempts: attempts.slice(),\n usage: data.usage,\n finishReason: data.choices?.[0]?.finish_reason,\n };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n attempts.push(`${provider.label}: ${msg}`);\n lastError = err instanceof LlmClientError ? err : new LlmClientError(`[${provider.label}] ${msg}`);\n // try next provider\n }\n }\n if (round < MAX_CHAIN_ROUNDS) continue; // rewalk the chain\n throw lastError ?? new LlmClientError('All LLM providers failed (empty chain).');\n }\n throw lastError ?? new LlmClientError('All LLM providers failed after ' + MAX_CHAIN_ROUNDS + ' rounds.');\n }\n\n return { chat, model };\n}\n\n/**\n * Parse JSON from LLM response, handling markdown code fences.\n */\nexport function parseJsonFromLlm(text: string): Record<string, unknown> {\n // Strip markdown code fences if present\n let cleaned = text.trim();\n if (cleaned.startsWith('```json')) {\n cleaned = cleaned.slice(7);\n } else if (cleaned.startsWith('```')) {\n cleaned = cleaned.slice(3);\n }\n if (cleaned.endsWith('```')) {\n cleaned = cleaned.slice(0, -3);\n }\n cleaned = cleaned.trim();\n\n try {\n return JSON.parse(cleaned) as Record<string, unknown>;\n } catch {\n // Try to find first complete JSON object using brace-depth tracking\n const start = cleaned.indexOf('{');\n if (start >= 0) {\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < cleaned.length; i++) {\n const ch = cleaned[i];\n if (escape) { escape = false; continue; }\n if (ch === '\\\\') { escape = true; continue; }\n if (ch === '\"') { inString = !inString; continue; }\n if (inString) continue;\n if (ch === '{') depth++;\n if (ch === '}') {\n depth--;\n if (depth === 0) {\n try {\n return JSON.parse(cleaned.slice(start, i + 1)) as Record<string, unknown>;\n } catch {\n // keep looking\n }\n }\n }\n }\n }\n throw new LlmClientError(`Failed to parse JSON from LLM response: ${cleaned.slice(0, 200)}`);\n }\n}\n\n/**\n * Call LLM and parse JSON response.\n */\nexport async function llmChatJson(\n client: ReturnType<typeof createLlmClient>,\n systemPrompt: string,\n userPrompt: string,\n options?: { temperature?: number; maxTokens?: number },\n): Promise<Record<string, unknown>> {\n const result = await client.chat(\n [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ],\n options,\n );\n\n return parseJsonFromLlm(result.content);\n}\n","/**\n * STEP C0: Extract FOUNDATION & SETUP feature (F0) via LLM.\n *\n * Ported from knowledge-tree/llm_project_graph.py extract_scaffold_llm()\n * The F0 feature covers MUST-KNOW steps before the first feature:\n * tools, project creation, minimal programming knowledge, repo map, dev loop.\n */\n\nimport { createLlmClient, llmChatJson, type LlmClientConfig } from '../utils/llmClient';\nimport type { Feature } from '../schemas/projectGraphSchema';\n\nexport interface ExtractScaffoldOptions {\n goal: string;\n techStack: string;\n fileList: string[];\n llmConfig?: LlmClientConfig;\n}\n\n/**\n * Extract the FOUNDATION & SETUP feature (F0) via LLM.\n * Returns a Feature with steps covering tool setup, project creation,\n * minimal programming knowledge, repo map, and dev loop.\n */\nexport async function extractScaffold(options: ExtractScaffoldOptions): Promise<Feature | null> {\n const { goal, techStack, fileList, llmConfig } = options;\n const client = createLlmClient(llmConfig);\n const fileListStr = fileList.length > 0 ? fileList.join('\\n') : '(empty)';\n\n const systemPrompt = (\n 'You are a programming pedagogy expert. For ONE concrete project, extract the '\n + \"'FOUNDATION & SETUP' feature (id F0) — the COMPLETE set of 'MUST-KNOW' steps \"\n + 'the learner needs before studying the first feature. Break it into concrete ACTION '\n + 'steps (5-8 steps), each with completion_level=\\'base\\'. Include:\\n'\n + '1. Tools required for this tech stack (IDE, simulator/emulator, terminal, git, '\n + 'package manager) + basic operations (open project, build, run, debug, commit).\\n'\n + '2. Create the initial project: from a template OR clone/open the base-project (the provided repo).\\n'\n + '3. MINIMAL programming knowledge of the language (variables, types, functions, if/for, view declaration) '\n + '+ build one small demo (e.g. a single-screen Hello World app) BEFORE touching the real project.\\n'\n + '4. Repo map of the actual project: folder structure, entry point, how to build/run, main architecture '\n + '(MVVM/Flux...), important packages/modules.\\n'\n + '5. Development loop (build->run->see result->debug), how to read/fix basic compile errors, '\n + 'minimal git workflow (clone/branch/commit/push).\\n'\n + 'keywords[]: real tool/language terms (e.g. \\'Xcode\\', \\'Simulator\\', \\'Git\\', \\'Swift\\', '\n + '\\'@main\\', \\'MVVM\\'). files[]: leave [] or use real paths if the step touches specific files. '\n + 'description: ONE concise sentence, MAX 140 characters. '\n + 'intent: WHY this step matters. outcome: {user_visible: string, technical: string}. '\n + 'acceptance[]: 2 verifiable criteria. effort: {estimated_minutes: number, complexity: low|medium|high}. '\n + 'NEVER invent. ALL text must be in ENGLISH (technical terms stay as-is). '\n + 'Return JSON containing only feature F0.'\n );\n\n const userPrompt = (\n `App goal: ${goal}\\n`\n + `Tech stack: ${techStack}\\n\\n`\n + 'PROJECT FILE LIST (base-project):\\n'\n + `${fileListStr}\\n\\n`\n + 'Return JSON:\\n'\n + '{\\n'\n + ' \"feature\": {\\n'\n + ' \"id\": \"F0\",\\n'\n + ' \"name\": \"FOUNDATION & SETUP\",\\n'\n + ' \"description\": \"Get familiar with the tools, create/clone the project, learn minimal knowledge and the repo map\",\\n'\n + ' \"platform\": \"app\",\\n'\n + ' \"steps\": [\\n'\n + ' {\\n'\n + ' \"id\": \"F0-S1\",\\n'\n + ' \"sequence\": 1,\\n'\n + ' \"name\": \"Action step name\",\\n'\n + ' \"description\": \"Detailed description of the concrete actions\",\\n'\n + ' \"files\": [],\\n'\n + ' \"api_usage\": [],\\n'\n + ' \"keywords\": [\"Xcode\", \"Terminal\"],\\n'\n + ' \"completion_level\": \"base\",\\n'\n + ' \"intent\": \"Learn how to setup the IDE and run a minimal Swift app\",\\n'\n + ' \"outcome\": {\"user_visible\": \"App builds and runs\", \"technical\": \"Toolchain verified\"},\\n'\n + ' \"acceptance\": [\"Xcode builds without errors\", \"Simulator launches successfully\"],\\n'\n + ' \"effort\": {\"estimated_minutes\": 20, \"complexity\": \"low\"}\\n'\n + ' }\\n'\n + ' ]\\n'\n + ' }\\n'\n + '}\\n'\n );\n\n try {\n const result = await llmChatJson(client, systemPrompt, userPrompt, {\n temperature: 0.1,\n maxTokens: parseInt(process.env.PG_C0_MAX_TOKENS || '16384', 10),\n });\n\n const feat = result.feature as Record<string, unknown> | undefined;\n if (!feat || !Array.isArray(feat.steps) || feat.steps.length === 0) {\n console.warn('[WARN] Scaffold LLM returned no steps — skipping F0');\n return null;\n }\n\n // Normalize step IDs and ensure required fields\n const steps = (feat.steps as Record<string, unknown>[]).map((s, i) => ({\n id: `F0-S${i + 1}`,\n sequence: i + 1,\n name: String(s.name || `Step ${i + 1}`),\n description: String(s.description || ''),\n files: Array.isArray(s.files) ? s.files : [],\n api_usage: Array.isArray(s.api_usage) ? s.api_usage : [],\n keywords: Array.isArray(s.keywords) ? s.keywords : [],\n completion_level: 'base' as const,\n platform: String(s.platform || 'app'),\n intent: String(s.intent || ''),\n outcome: s.outcome && typeof s.outcome === 'object' ? s.outcome as { user_visible?: string; technical?: string } : undefined,\n acceptance: Array.isArray(s.acceptance) ? s.acceptance : [],\n effort: s.effort && typeof s.effort === 'object' ? s.effort as { estimated_minutes?: number; complexity?: 'low' | 'medium' | 'high' } : undefined,\n requirement_ids: [] as string[],\n concept_codes: [] as string[],\n }));\n\n return {\n id: 'F0',\n name: String(feat.name || 'FOUNDATION & SETUP'),\n description: String(feat.description || ''),\n platform: String(feat.platform || 'app'),\n steps,\n } as Feature;\n } catch (err) {\n console.error(`[ERROR] extractScaffold failed: ${err}`);\n return null;\n }\n}\n","/**\n * STEP C1: Extract PROJECT OVERVIEW via LLM (features meta — NO steps).\n *\n * Ported from knowledge-tree/llm_project_graph.py extract_project_overview_llm()\n * Output: project, product, features[], user_journeys, architecture, decomposition.\n */\n\nimport { createLlmClient, llmChatJson, type LlmClientConfig } from '../utils/llmClient';\nimport type { Keyword } from '../extractors/keywordExtractor';\n\nexport interface ExtractOverviewOptions {\n goal: string;\n techStack: string;\n sdkApiIndex: { sdk_apis: Array<{ name: string; kind: string; used_in_demo: boolean }> };\n fileContentsMap: Map<string, string>;\n astKeywords?: Keyword[];\n llmConfig?: LlmClientConfig;\n}\n\nfunction buildSourceText(fileContentsMap: Map<string, string>): string {\n const blocks: string[] = [];\n for (const [relPath, content] of fileContentsMap) {\n blocks.push(`### FILE: ${relPath}\\n${content}`);\n }\n return blocks.join('\\n\\n');\n}\n\n/**\n * Extract project overview (features meta) via LLM.\n * Does NOT include steps — those are extracted per-feature in STEP C2.\n */\nexport async function extractProjectOverview(options: ExtractOverviewOptions): Promise<Record<string, unknown>> {\n const { goal, techStack, sdkApiIndex, fileContentsMap, astKeywords, llmConfig } = options;\n const client = createLlmClient(llmConfig);\n\n const usedSdkApis = sdkApiIndex.sdk_apis\n .filter(api => api.used_in_demo)\n .map(api => api.name)\n .slice(0, 2000);\n\n const allFilesStr = buildSourceText(fileContentsMap);\n\n // Build AST keywords anchor\n let keywordsAnchor = '';\n if (astKeywords && astKeywords.length > 0) {\n const kwItems = astKeywords.slice(0, 30).map(kw =>\n `- ${kw.keyword} (from ${kw.source})`,\n );\n if (kwItems.length > 0) {\n keywordsAnchor = (\n '\\nAST Domain Keywords & Patterns (from static analysis — use as context anchor):\\n'\n + kwItems.join('\\n')\n + '\\n'\n );\n }\n }\n\n const systemPrompt = (\n 'You are a software architect. The app the user will build IS EXACTLY the provided files '\n + '(not an SDK/lib). Analyze them and return a PROJECT OVERVIEW — meta only, '\n + 'DO NOT list steps (steps are handled in a later step). '\n + 'NEVER invent files/APIs. NEVER reference internal SDK/lib unless it appears in the given files.\\n'\n + 'END-USER VIEW (M1/Design Thinking): product.purpose must describe the USER PROBLEM '\n + '(what the user does with the app, which need it solves). NEVER describe repo/artifacts.\\n'\n + 'DEVELOPMENT STAGES: Include 4-6 development stages in product.development_stages. '\n + 'Each stage must have: stage (name), need (list of feature needs), learn (concepts learned), '\n + 'product_state (what works), temporary_approach, and validation.\\n'\n + 'MISSING GAPS: Identify 0-5 missing_gaps (features/functionality that should exist but don\\'t).\\n'\n + 'TECH DEBT: Identify 0-5 tech_debt issues (code quality problems).\\n'\n + 'ALL text must be in ENGLISH.'\n );\n\n const userPrompt = `App goal: ${goal}\nTech stack: ${techStack}\n${keywordsAnchor}\nFiltered SDK API list (used_in_demo):\n${JSON.stringify(usedSdkApis, null, 0)}\n\nSource code of the files:\n${allFilesStr}\n\nReturn JSON per the schema:\n{\n \"schema_version\": 2,\n \"project\": {\"name\": \"...\", \"project_type\": \"app\", \"platforms\": [\"ios\"]},\n \"product\": {\n \"purpose\": \"END-USER problem being solved\",\n \"problem_statement\": \"Core user problem\",\n \"primary_users\": [\"who the main users are\"],\n \"development_stages\": [\n {\n \"stage\": \"Stage 1: Foundation & Setup\",\n \"need\": [\"Core app shell\"],\n \"learn\": [\"App lifecycle, basic UI\"],\n \"product_state\": \"App launches with static mock data\",\n \"temporary_approach\": \"Hardcoded array\",\n \"validation\": \"Main screen loads\"\n }\n ],\n \"features\": [\n {\"id\": \"F1\", \"name\": \"Feature name\", \"description\": \"Feature description\", \"platform\": \"ios\"}\n ],\n \"user_journeys\": [{\"name\": \"...\", \"feature_ids\": [\"F1\"]}]\n },\n \"architecture\": {\"layers\": [], \"services\": [], \"state_management\": \"...\"},\n \"decomposition\": {\"milestones\": [{\"id\": \"M1\", \"phase\": \"MVP\", \"name\": \"...\", \"goal\": \"...\", \"feature_ids\": [\"F1\"]}]}\n}`;\n\n const result = await llmChatJson(client, systemPrompt, userPrompt, {\n temperature: 0.1,\n maxTokens: parseInt(process.env.PG_C1_MAX_TOKENS || '32768', 10),\n });\n\n // Ensure development_stages exists\n const prod = result.product as Record<string, unknown> | undefined;\n if (prod && !Array.isArray(prod.development_stages)) {\n prod.development_stages = [];\n }\n\n return result;\n}\n","/**\n * STEP C2: Extract feature STEPS via LLM.\n *\n * Ported from knowledge-tree/llm_project_graph.py\n * - extract_feature_steps_llm() — single feature\n * - extract_feature_steps_batched() — batch of features\n */\n\nimport { createLlmClient, llmChatJson, type LlmClientConfig } from '../utils/llmClient';\nimport type { Feature, Step } from '../schemas/projectGraphSchema';\n\nexport interface ExtractStepsOptions {\n goal: string;\n techStack: string;\n sdkApiIndex: { sdk_apis: Array<{ name: string; kind: string; used_in_demo: boolean }> };\n fileContentsMap: Map<string, string>;\n feature: Feature;\n llmConfig?: LlmClientConfig;\n}\n\nfunction buildSourceText(fileContentsMap: Map<string, string>): string {\n const blocks: string[] = [];\n for (const [relPath, content] of fileContentsMap) {\n blocks.push(`### FILE: ${relPath}\\n${content}`);\n }\n return blocks.join('\\n\\n');\n}\n\n/**\n * Extract steps for a SINGLE feature via LLM.\n */\nexport async function extractFeatureSteps(options: ExtractStepsOptions): Promise<Step[]> {\n const { goal, techStack, sdkApiIndex, fileContentsMap, feature, llmConfig } = options;\n const client = createLlmClient(llmConfig);\n\n const usedSdkApis = sdkApiIndex.sdk_apis\n .filter(api => api.used_in_demo)\n .map(api => api.name)\n .slice(0, 2000);\n\n const allFilesStr = buildSourceText(fileContentsMap);\n const fid = feature.id || 'F_UNK';\n const fname = feature.name || fid;\n const fdesc = feature.description || '';\n\n const systemPrompt = (\n 'You are a software architect. Split ONE feature into ACTION steps '\n + '(implementation steps) the learner must code sequentially. Each step must carry '\n + 'files[] (CORRECT paths in the source), api_usage[] (only from the provided SDK API index), '\n + 'keywords[] (real terms/language features in the files), '\n + 'and completion_level ∈ {base, mvp, extend, polish}.\\n'\n + ' - base = foundation/setup\\n'\n + ' - mvp = make the app minimally WORKING for this feature\\n'\n + ' - extend = make it real/richer\\n'\n + ' - polish = robustness (error handling, tests, validation)\\n'\n + 'Include metadata: intent, outcome ({user_visible, technical}), '\n + 'acceptance[] (2 verifiable criteria), effort ({estimated_minutes, complexity}).\\n'\n + 'description: ONE concise sentence, MAX 140 characters. '\n + 'NEVER invent files/APIs. Return ONLY the steps array. '\n + 'ALL text must be in ENGLISH.'\n );\n\n const userPrompt = `App goal: ${goal}\nTech stack: ${techStack}\n\nFEATURE TO SPLIT: ${fid} — ${fname}\nFeature description: ${fdesc}\n\nSDK API list (used_in_demo):\n${JSON.stringify(usedSdkApis)}\n\nSource code:\n${allFilesStr}\n\nSplit this feature into 2-6 action steps. Return JSON:\n{\n \"steps\": [\n {\n \"id\": \"${fid}-S1\",\n \"sequence\": 1,\n \"name\": \"Action step name\",\n \"description\": \"One concise sentence (max 140 chars)\",\n \"files\": [\"path/to/file.swift\"],\n \"api_usage\": [\"ChatClient\"],\n \"keywords\": [\"@State\", \"NavigationStack\"],\n \"completion_level\": \"mvp\",\n \"intent\": \"Create reactive state container\",\n \"outcome\": {\"user_visible\": \"Chat view updates\", \"technical\": \"ChatViewModel conforms to ObservableObject\"},\n \"acceptance\": [\"ViewModel publishes messages\", \"UI re-renders on state mutation\"],\n \"effort\": {\"estimated_minutes\": 30, \"complexity\": \"medium\"}\n }\n ]\n}`;\n\n const result = await llmChatJson(client, systemPrompt, userPrompt, {\n temperature: 0.1,\n maxTokens: parseInt(process.env.PG_C2_MAX_TOKENS || '32768', 10),\n });\n\n const rawSteps = (result.steps || []) as Record<string, unknown>[];\n // Clamp to 2-6 steps per prompt contract\n const clampedSteps = rawSteps.length > 6 ? rawSteps.slice(0, 6) : rawSteps.length < 2 && rawSteps.length > 0 ? rawSteps : rawSteps;\n if (rawSteps.length > 6) {\n console.warn(`[WARN] LLM returned ${rawSteps.length} steps for ${fid}, clamped to 6`);\n } else if (rawSteps.length === 0) {\n console.warn(`[WARN] LLM returned 0 steps for ${fid}`);\n }\n return clampedSteps.map((s, i) => ({\n id: `${fid}-S${i + 1}`,\n sequence: i + 1,\n name: String(s.name || `Step ${i + 1}`),\n description: String(s.description || ''),\n files: Array.isArray(s.files) ? s.files as string[] : [],\n api_usage: Array.isArray(s.api_usage) ? s.api_usage as string[] : [],\n keywords: Array.isArray(s.keywords) ? s.keywords as string[] : [],\n completion_level: (String(s.completion_level || 'mvp') as 'base' | 'mvp' | 'extend' | 'polish'),\n platform: String(s.platform || feature.platform || 'app'),\n intent: String(s.intent || ''),\n outcome: s.outcome as Step['outcome'],\n acceptance: Array.isArray(s.acceptance) ? s.acceptance as string[] : [],\n effort: s.effort as Step['effort'],\n requirement_ids: [],\n concept_codes: [],\n }));\n}\n\n/**\n * Extract steps for MULTIPLE features in a single LLM call.\n */\nexport async function extractFeatureStepsBatched(\n goal: string,\n techStack: string,\n sdkApiIndex: { sdk_apis: Array<{ name: string; kind: string; used_in_demo: boolean }> },\n fileContentsMap: Map<string, string>,\n featuresMeta: Feature[],\n llmConfig?: LlmClientConfig,\n): Promise<Map<string, Step[]>> {\n const client = createLlmClient(llmConfig);\n\n const usedSdkApis = sdkApiIndex.sdk_apis\n .filter(api => api.used_in_demo)\n .map(api => api.name)\n .slice(0, 2000);\n\n const sourceText = buildSourceText(fileContentsMap);\n\n const featuresListing = featuresMeta.map(f =>\n `- ${f.id || 'F?'}: ${f.name || ''} — ${f.description || ''}`,\n ).join('\\n');\n\n const systemPrompt = (\n 'You are a software architect. Split MULTIPLE features into ACTION steps. '\n + 'Each step must carry files[], api_usage[], keywords[], and '\n + 'completion_level ∈ {base, mvp, extend, polish}. '\n + 'Include metadata: intent, outcome ({user_visible, technical}), '\n + 'acceptance[] (2 verifiable criteria), effort ({estimated_minutes, complexity}). '\n + 'description: ONE concise sentence, MAX 140 characters. '\n + 'NEVER invent files/APIs. Return ONLY the JSON. '\n + 'ALL text must be in ENGLISH.'\n );\n\n const userPrompt = `App goal: ${goal}\nTech stack: ${techStack}\n\nSDK API list (used_in_demo):\n${JSON.stringify(usedSdkApis)}\n\nSource code:\n${sourceText}\n\nFEATURES to split into steps:\n${featuresListing}\n\nFor EACH feature above, produce 4-6 action steps. Each step must include:\nid, sequence, name, description, files, api_usage, keywords, completion_level, platform,\nintent, outcome ({user_visible, technical}), acceptance[] (2 criteria), effort ({estimated_minutes, complexity}).\n\nReturn JSON with a \"steps\" dict keyed by feature_id:\n{\n \"steps\": {\n \"<feature_id>\": [\n {\n \"id\": \"<feature_id>-S1\",\n \"sequence\": 1,\n \"name\": \"Step name\",\n \"description\": \"Concise sentence (max 140 chars)\",\n \"files\": [\"path/to/file\"],\n \"api_usage\": [\"APIName\"],\n \"keywords\": [\"keyword\"],\n \"completion_level\": \"mvp\",\n \"platform\": \"app\",\n \"intent\": \"Step intent\",\n \"outcome\": {\"user_visible\": \"User visible result\", \"technical\": \"Technical result\"},\n \"acceptance\": [\"Criterion 1\", \"Criterion 2\"],\n \"effort\": {\"estimated_minutes\": 30, \"complexity\": \"medium\"}\n }\n ]\n }\n}`;\n\n const result = await llmChatJson(client, systemPrompt, userPrompt, {\n temperature: 0.1,\n maxTokens: parseInt(process.env.PG_C2_MAX_TOKENS || '32768', 10),\n });\n\n const stepsDict = result.steps as Record<string, Record<string, unknown>[]> | undefined;\n const output = new Map<string, Step[]>();\n\n if (stepsDict && typeof stepsDict === 'object') {\n for (const [fid, rawSteps] of Object.entries(stepsDict)) {\n if (!Array.isArray(rawSteps)) continue;\n const featMeta = featuresMeta.find(f => f.id === fid);\n const steps = rawSteps.map((s, i) => ({\n id: `${fid}-S${i + 1}`,\n sequence: i + 1,\n name: String(s.name || `Step ${i + 1}`),\n description: String(s.description || ''),\n files: Array.isArray(s.files) ? s.files as string[] : [],\n api_usage: Array.isArray(s.api_usage) ? s.api_usage as string[] : [],\n keywords: Array.isArray(s.keywords) ? s.keywords as string[] : [],\n completion_level: (String(s.completion_level || 'mvp') as 'base' | 'mvp' | 'extend' | 'polish'),\n platform: String(s.platform || featMeta?.platform || 'app'),\n intent: String(s.intent || ''),\n outcome: s.outcome as Step['outcome'],\n acceptance: Array.isArray(s.acceptance) ? s.acceptance as string[] : [],\n effort: s.effort as Step['effort'],\n requirement_ids: [],\n concept_codes: [],\n }));\n output.set(fid, steps);\n }\n }\n\n return output;\n}\n","/**\n * STEP D: Ground-truth verification of project graph against code and SDK API index.\n *\n * Ported from knowledge-tree/llm_project_graph.py verify_project_graph()\n * Removes invalid files, APIs, keywords and logs hallucinations.\n */\n\nimport type { ProjectGraph, Feature, Step } from '../schemas/projectGraphSchema';\n\nexport interface Hallucination {\n type: string;\n item: string;\n feature_id: string;\n step_id: string;\n reason: string;\n}\n\nexport interface VerifyOptions {\n repoDir: string;\n sdkApiIndex: { sdk_apis: Array<{ name: string; kind: string; used_in_demo: boolean }> };\n fileContentsMap: Map<string, string>;\n}\n\n/**\n * Verify project graph against actual code. Remove hallucinated files, APIs, keywords.\n * F0 (foundation) keywords are kept as-is since they are pedagogical terms.\n */\nexport function verifyProjectGraph(\n projectGraph: ProjectGraph,\n options: VerifyOptions,\n): { graph: ProjectGraph; hallucinations: Hallucination[] } {\n const { sdkApiIndex, fileContentsMap } = options;\n const sdkApiNames = new Set(sdkApiIndex.sdk_apis.map(api => api.name));\n const hallucinations: Hallucination[] = [];\n\n const features = projectGraph.features || [];\n\n for (const feature of features) {\n const fid = feature.id || 'F_UNK';\n const isFoundation = fid === 'F0';\n\n for (const step of feature.steps || []) {\n const sid = step.id || `${fid}-SUNK`;\n\n // Verify files[]\n const validFiles: string[] = [];\n for (const f of step.files || []) {\n if (fileContentsMap.has(f)) {\n validFiles.push(f);\n } else {\n hallucinations.push({\n type: 'file',\n item: f,\n feature_id: fid,\n step_id: sid,\n reason: `File '${f}' not found in repository`,\n });\n }\n }\n step.files = validFiles;\n\n // Verify api_usage[]\n const validApis: string[] = [];\n for (const api of step.api_usage || []) {\n if (sdkApiNames.size === 0 || sdkApiNames.has(api)) {\n validApis.push(api);\n } else {\n hallucinations.push({\n type: 'api',\n item: api,\n feature_id: fid,\n step_id: sid,\n reason: `API '${api}' not found in SDK API index`,\n });\n }\n }\n step.api_usage = validApis;\n\n // Verify keywords[] — skip for F0 (foundation keywords are pedagogical)\n if (isFoundation) continue;\n\n const validKws: string[] = [];\n for (const kw of step.keywords || []) {\n const kwLow = kw.toLowerCase();\n // Single-word keywords: use word boundary match to avoid\n // false positives (\"app\" should NOT match \"mapping\" or \"happen\")\n const isSingleWord = !kwLow.includes(' ');\n let found = false;\n // Check in step's files\n for (const f of validFiles) {\n const content = (fileContentsMap.get(f) || '').toLowerCase();\n if (isSingleWord) {\n found = new RegExp(`\\\\b${kwLow.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\b`).test(content);\n } else {\n found = content.includes(kwLow);\n }\n if (found) break;\n }\n // Check in any file\n if (!found) {\n for (const content of fileContentsMap.values()) {\n const lc = content.toLowerCase();\n if (isSingleWord) {\n found = new RegExp(`\\\\b${kwLow.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\b`).test(lc);\n } else {\n found = lc.includes(kwLow);\n }\n if (found) break;\n }\n }\n\n if (found) {\n validKws.push(kw);\n } else {\n hallucinations.push({\n type: 'keyword',\n item: kw,\n feature_id: fid,\n step_id: sid,\n reason: `Keyword '${kw}' not found in target files`,\n });\n }\n }\n step.keywords = validKws;\n }\n }\n\n return { graph: projectGraph, hallucinations };\n}\n","/**\n * STEP E: Escalate keywords/api_usage to neutral concepts + ULO/CIO/SIO depth + evidence files join.\n *\n * Ported from knowledge-tree/llm_project_graph.py escalate_and_map_concepts()\n * Maps concrete keywords to technology-neutral concept codes WITH depth levels.\n *\n * ULO/CIO/SIO model:\n * - ULO: WHAT + WHY — concept is introduced (what it is, why it exists)\n * - CIO: HOW — mechanism is explained (how it works)\n * - SIO: IMPLEMENTATION — concrete tech-specific usage (syntax, API)\n */\n\nimport { createLlmClient, llmChatJson, type LlmClientConfig } from '../utils/llmClient';\nimport type { ProjectGraph, Feature } from '../schemas/projectGraphSchema';\n\nexport interface ConceptMapping {\n concept_code: string;\n concept_name: string;\n keyword: string;\n depth: 'ulo' | 'cio' | 'sio';\n depth_rationale: string;\n evidence_files: string[];\n}\n\nexport interface EscalateOptions {\n projectGraph: ProjectGraph;\n fileContentsMap: Map<string, string>;\n availableConcepts?: string[];\n conceptMapOverride?: Record<string, { concept_code: string; concept_name: string; depth?: string }>;\n llmConfig?: LlmClientConfig;\n}\n\nfunction toUpperSnake(term: string): string {\n let s = term.replace(/^[^\\w]+/, '');\n s = s.replace(/([a-z0-9])([A-Z])/g, '$1_$2');\n s = s.replace(/[^\\w]+/g, '_');\n const res = s.toUpperCase().replace(/^_+|_+$/g, '');\n return res || 'CONCEPT';\n}\n\nfunction extractTermSnippets(term: string, fileContentsMap: Map<string, string>, maxSnippets = 1): string[] {\n const snippets: string[] = [];\n const termLow = term.toLowerCase();\n for (const [relPath, content] of fileContentsMap) {\n const lines = content.split('\\n');\n for (let idx = 0; idx < lines.length; idx++) {\n if (lines[idx].toLowerCase().includes(termLow)) {\n const start = Math.max(0, idx - 1);\n const end = Math.min(lines.length, idx + 2);\n let snippet = lines.slice(start, end).map(l => l.trim()).filter(Boolean).join(' ');\n if (snippet.length > 120) snippet = snippet.slice(0, 120) + '...';\n if (snippet) snippets.push(`[${relPath}]: ${snippet}`);\n if (snippets.length >= maxSnippets) break;\n }\n }\n if (snippets.length >= maxSnippets) break;\n }\n return snippets;\n}\n\n/**\n * Determine ULO/CIO/SIO depth based on keyword usage context.\n */\nfunction inferDepthFromContext(\n keyword: string,\n fileContentsMap: Map<string, string>,\n): { depth: 'ulo' | 'cio' | 'sio'; rationale: string } {\n const kw = keyword.toLowerCase();\n\n // SIO: specific implementation keywords (API names, decorators, syntax)\n const sioPatterns = [\n /^@/, // SwiftUI decorators: @State, @Binding\n /^import\\s/, // Import statements\n /\\(\\)$/, // Function calls\n /\\.prototype/, // Prototype methods\n /^new\\s/, // Constructor calls\n /^async\\s/, // Async keywords\n /^await\\s/,\n ];\n\n if (sioPatterns.some(p => p.test(keyword))) {\n return { depth: 'sio', rationale: `Keyword '${keyword}' is a specific API/syntax pattern` };\n }\n\n // CIO: mechanism-level keywords (patterns, protocols, design patterns)\n const cioPatterns = [\n /pattern/i, /protocol/i, /architecture/i, /lifecycle/i,\n /observer/i, /singleton/i, /factory/i, /delegate/i,\n /state\\s*management/i, /data\\s*flow/i, /binding/i,\n /mvvm/i, /mvc/i, /flux/i, /redux/i,\n /authentication/i, /authorization/i,\n /persistence/i, /caching/i, /serialization/i,\n ];\n\n if (cioPatterns.some(p => p.test(keyword))) {\n return { depth: 'cio', rationale: `Keyword '${keyword}' represents a mechanism/pattern` };\n }\n\n // ULO: general concept keywords (what/why level)\n const uloPatterns = [\n /design\\s*thinking/i, /user\\s*needs/i, /problem\\s*statement/i,\n /foundation/i, /setup/i, /overview/i, /introduction/i,\n /scaffold/i, /hello\\s*world/i, /getting\\s*started/i,\n ];\n\n if (uloPatterns.some(p => p.test(keyword))) {\n return { depth: 'ulo', rationale: `Keyword '${keyword}' is a foundational/introductory concept` };\n }\n\n // Default: check evidence in code — if it appears in import/declaration → SIO, in comment → ULO\n for (const content of fileContentsMap.values()) {\n const lines = content.split('\\n');\n for (const line of lines) {\n if (line.toLowerCase().includes(kw)) {\n if (/^(import|from|require|use |#include)/.test(line.trim())) {\n return { depth: 'sio', rationale: `Keyword '${keyword}' found in import statement` };\n }\n if (/^\\/\\/|^\\/\\*|^#|^-->/.test(line.trim())) {\n return { depth: 'ulo', rationale: `Keyword '${keyword}' found in comment/doc` };\n }\n // Found in code body → likely SIO\n return { depth: 'sio', rationale: `Keyword '${keyword}' used in implementation code` };\n }\n }\n }\n\n return { depth: 'sio', rationale: `Default: treating '${keyword}' as SIO (implementation-level)` };\n}\n\n/**\n * Escalate keywords/api_usage to neutral concepts with ULO/CIO/SIO depth and join evidence files.\n */\nexport async function escalateAndMapConcepts(\n options: EscalateOptions,\n): Promise<Map<string, ConceptMapping[]>> {\n const { projectGraph, fileContentsMap, availableConcepts, conceptMapOverride, llmConfig } = options;\n\n const features = projectGraph.features || [];\n\n // Collect all terms from all features\n const allTerms = new Set<string>();\n for (const feature of features) {\n for (const step of feature.steps || []) {\n for (const api of step.api_usage || []) allTerms.add(api);\n for (const kw of step.keywords || []) allTerms.add(kw);\n }\n }\n\n if (allTerms.size === 0) return new Map();\n\n const termList = Array.from(allTerms).sort();\n let llmResults: Record<string, { concept_code?: string; concept_name?: string; depth?: string }> = {};\n\n if (conceptMapOverride) {\n llmResults = conceptMapOverride;\n } else {\n try {\n const client = createLlmClient(llmConfig);\n const conceptBank = (availableConcepts || []).sort().join(', ') || '(empty)';\n\n const termEntries = termList.map(term => {\n const snippets = extractTermSnippets(term, fileContentsMap);\n return snippets.length > 0\n ? `- ${term} (Usage context: ${snippets[0]})`\n : `- ${term}`;\n });\n\n const systemPrompt = (\n 'You are a knowledge classification expert. For each concrete keyword/API, determine:\\n'\n + '1. The neutral concept it belongs to (UPPER_SNAKE_CASE)\\n'\n + '2. The depth level: ulo | cio | sio\\n\\n'\n + 'DEPTH DEFINITIONS:\\n'\n + '- ulo (WHAT + WHY): The keyword introduces a concept — \"what is it, why does it exist\"\\n'\n + ' Example: In a scaffold step, \"@State is SwiftUI\\'s way of managing local view state\"\\n'\n + '- cio (HOW): The keyword demonstrates a mechanism — \"how it works\"\\n'\n + ' Example: \"@State triggers view re-render when value changes — mechanism is value-type observation\"\\n'\n + '- sio (IMPLEMENTATION): The keyword is a concrete API/syntax used in code\\n'\n + ' Example: \"Using @State var isActive: Bool = false in ContentView\"\\n\\n'\n + 'RULES:\\n'\n + '1. PREFER an EXISTING concept from the CONCEPT_BANK below if the keyword is a manifestation of that concept.\\n'\n + '2. ONLY create a NEW concept (UPPER_SNAKE_CASE, NOT ending in _CONCEPT, NOT containing a specific technology name) when NO concept in the bank covers it.\\n'\n + `3. CONCEPT_BANK: ${conceptBank.slice(0, 12000)}\\n`\n + '4. Depth is per-keyword-in-context, NOT per-concept. The same concept can have ULO at one step and SIO at another.\\n'\n + 'Return JSON: {\"results\": {\"<keyword>\": {\"concept_code\": \"...\", \"concept_name\": \"...\", \"depth\": \"ulo|cio|sio\"}}}'\n );\n\n const userPrompt = (\n 'Classify the following keyword/API list into neutral concepts WITH depth levels.\\n'\n + 'Code usage context is provided to disambiguate depth:\\n'\n + termEntries.join('\\n')\n + '\\n\\nReturn JSON: {\"results\": {\"<keyword>\": {\"concept_code\": \"...\", \"concept_name\": \"...\", \"depth\": \"ulo|cio|sio\"}}}'\n );\n\n const result = await llmChatJson(client, systemPrompt, userPrompt, {\n temperature: 0.1,\n maxTokens: 16384,\n });\n\n llmResults = (result.results || {}) as Record<string, { concept_code?: string; concept_name?: string; depth?: string }>;\n } catch (err) {\n console.warn(`[WARN] Concept escalation LLM failed (${err}), using fallback depth inference`);\n }\n }\n\n // Join results into feature_concepts\n const featureConcepts = new Map<string, ConceptMapping[]>();\n\n for (const feature of features) {\n const fid = feature.id || 'F_UNK';\n const featureFiles = new Set<string>();\n for (const step of feature.steps || []) {\n for (const f of step.files || []) featureFiles.add(f);\n }\n\n const fTerms = [\n ...(feature.api_usage || []),\n ...(feature.steps || []).flatMap(s => [...(s.api_usage || []), ...(s.keywords || [])]),\n ];\n\n const items: ConceptMapping[] = [];\n const seen = new Set<string>();\n\n for (const kw of fTerms) {\n const info = llmResults[kw] || {};\n const cCode = info.concept_code || toUpperSnake(kw);\n const cName = info.concept_name || kw;\n\n // Determine depth: LLM result > fallback inference\n let depth: 'ulo' | 'cio' | 'sio' = 'sio';\n let depthRationale = 'Default: SIO';\n\n if (info.depth && ['ulo', 'cio', 'sio'].includes(info.depth)) {\n depth = info.depth as 'ulo' | 'cio' | 'sio';\n depthRationale = `LLM classified as ${depth}`;\n } else {\n const inferred = inferDepthFromContext(kw, fileContentsMap);\n depth = inferred.depth;\n depthRationale = inferred.rationale;\n }\n\n // Allow multiple keywords per concept — don't dedup by concept_code\n const kwKey = `${cCode}::${kw}`;\n if (seen.has(kwKey)) continue;\n seen.add(kwKey);\n\n // Evidence: files that actually contain this term\n const evidenceFiles: string[] = [];\n for (const f of featureFiles) {\n const content = fileContentsMap.get(f) || '';\n if (content.toLowerCase().includes(kw.toLowerCase())) {\n evidenceFiles.push(f);\n }\n }\n\n items.push({\n concept_code: cCode,\n concept_name: cName,\n keyword: kw,\n depth,\n depth_rationale: depthRationale,\n evidence_files: evidenceFiles,\n });\n }\n\n featureConcepts.set(fid, items);\n }\n\n return featureConcepts;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
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-PM42MMDJ.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.\n * These are overlay schemas that add domain-specific fields to the base ProjectGraph.\n */\n\nimport { z } from 'zod';\n\n// ─── Hardware/IoT Extension ──────────────────────────────────────────────────\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 ─────────────────────────────────────────────────────\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 * 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"]}
|
|
@@ -1 +0,0 @@
|
|
|
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":"chunk-VFART56O.mjs","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';\n\nexport interface DetectDomainProfileOptions {\n repoUrl?: string;\n repoDir?: string;\n description?: string;\n goal?: string;\n syllabusText?: string;\n chapters?: string[];\n fileExtensions?: string[];\n techStack?: string;\n gradeBand?: [number, number];\n}\n\nexport function detectDomainProfile(options: DetectDomainProfileOptions): DomainProfile {\n const inputResult = detectInputType(options);\n\n const domainResult = detectDomain({\n description: options.description,\n goal: options.goal,\n syllabusText: options.syllabusText,\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: !!(options.syllabusText || (options.chapters && options.chapters.length > 0)),\n });\n\n const graphType = determineGraphType(modeResult.learningMode);\n\n return {\n inputType: inputResult.inputType,\n domainCategory: 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: domainResult.detectedSubject,\n detectedDomain: domainResult.domainCategory,\n goal: options.goal || '',\n description: options.description || '',\n repoUrl: options.repoUrl || '',\n repoDir: options.repoDir || '',\n syllabusText: options.syllabusText || '',\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,37 +0,0 @@
|
|
|
1
|
-
import { u as ProjectGraph } from './projectGraphSchema-DnD7orZV.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* STEP D: Ground-truth verification of project graph against code and SDK API index.
|
|
5
|
-
*
|
|
6
|
-
* Ported from knowledge-tree/llm_project_graph.py verify_project_graph()
|
|
7
|
-
* Removes invalid files, APIs, keywords and logs hallucinations.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
interface Hallucination {
|
|
11
|
-
type: string;
|
|
12
|
-
item: string;
|
|
13
|
-
feature_id: string;
|
|
14
|
-
step_id: string;
|
|
15
|
-
reason: string;
|
|
16
|
-
}
|
|
17
|
-
interface VerifyOptions {
|
|
18
|
-
repoDir: string;
|
|
19
|
-
sdkApiIndex: {
|
|
20
|
-
sdk_apis: Array<{
|
|
21
|
-
name: string;
|
|
22
|
-
kind: string;
|
|
23
|
-
used_in_demo: boolean;
|
|
24
|
-
}>;
|
|
25
|
-
};
|
|
26
|
-
fileContentsMap: Map<string, string>;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Verify project graph against actual code. Remove hallucinated files, APIs, keywords.
|
|
30
|
-
* F0 (foundation) keywords are kept as-is since they are pedagogical terms.
|
|
31
|
-
*/
|
|
32
|
-
declare function verifyProjectGraph(projectGraph: ProjectGraph, options: VerifyOptions): {
|
|
33
|
-
graph: ProjectGraph;
|
|
34
|
-
hallucinations: Hallucination[];
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export { type Hallucination as H, type VerifyOptions as V, verifyProjectGraph as v };
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { u as ProjectGraph } from './projectGraphSchema-DnD7orZV.cjs';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* STEP D: Ground-truth verification of project graph against code and SDK API index.
|
|
5
|
-
*
|
|
6
|
-
* Ported from knowledge-tree/llm_project_graph.py verify_project_graph()
|
|
7
|
-
* Removes invalid files, APIs, keywords and logs hallucinations.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
interface Hallucination {
|
|
11
|
-
type: string;
|
|
12
|
-
item: string;
|
|
13
|
-
feature_id: string;
|
|
14
|
-
step_id: string;
|
|
15
|
-
reason: string;
|
|
16
|
-
}
|
|
17
|
-
interface VerifyOptions {
|
|
18
|
-
repoDir: string;
|
|
19
|
-
sdkApiIndex: {
|
|
20
|
-
sdk_apis: Array<{
|
|
21
|
-
name: string;
|
|
22
|
-
kind: string;
|
|
23
|
-
used_in_demo: boolean;
|
|
24
|
-
}>;
|
|
25
|
-
};
|
|
26
|
-
fileContentsMap: Map<string, string>;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Verify project graph against actual code. Remove hallucinated files, APIs, keywords.
|
|
30
|
-
* F0 (foundation) keywords are kept as-is since they are pedagogical terms.
|
|
31
|
-
*/
|
|
32
|
-
declare function verifyProjectGraph(projectGraph: ProjectGraph, options: VerifyOptions): {
|
|
33
|
-
graph: ProjectGraph;
|
|
34
|
-
hallucinations: Hallucination[];
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export { type Hallucination as H, type VerifyOptions as V, verifyProjectGraph as v };
|