@thanh01.pmt/curriculum-kit 1.0.3 โ 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1732 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +158 -1
- package/dist/index.d.ts +158 -1
- package/dist/index.mjs +1707 -22
- package/dist/index.mjs.map +1 -1
- package/dist/workflow/index.cjs +11 -6
- package/dist/workflow/index.cjs.map +1 -1
- package/dist/workflow/index.mjs +11 -6
- package/dist/workflow/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors/index.ts","../../src/ai/streamRunner.ts","../../src/ai/provider-factory.ts","../../src/schemas/lessonPlanSchema.ts","../../src/schemas/activitySchema.ts","../../src/schemas/codeLabSchema.ts","../../src/schemas/worksheetSchema.ts","../../src/schemas/handoutSchema.ts","../../src/schemas/slideDeckSchema.ts","../../src/schemas/teacherGuideSchema.ts","../../src/schemas/extensionSchema.ts","../../src/schemas/judgeSchema.ts","../../src/schemas/projectGraphSchema.ts","../../src/schemas/instructionSchema.ts","../../src/schemas/selfLabSchema.ts","../../src/schemas/diagnosticQuizSchema.ts","../../src/schemas/selfPacedBundleSchema.ts","../../src/schemas/rubricSchema.ts","../../src/schemas/exitTicketSchema.ts","../../src/schemas/tieredPracticeSchema.ts","../../src/schemas/bellRingerSchema.ts","../../src/schemas/glossarySchema.ts","../../src/schemas/choiceBoardSchema.ts","../../src/schemas/graphicOrganizerSchema.ts","../../src/schemas/scienceLabSchema.ts","../../src/schemas/stationRotationSchema.ts","../../src/schemas/taskCardsSchema.ts","../../src/schemas/reviewGameSchema.ts","../../src/schemas/curriculumPlanSchema.ts","../../src/schemas/index.ts","../../src/templates/lessonTemplate.ts","../../src/templates/actTemplate.ts","../../src/templates/codeLabTemplate.ts","../../src/templates/selfLabTemplate.ts","../../src/templates/quizTemplate.ts","../../src/ai/prompts/lessonMasterPrompt.ts","../../src/ai/prompts/activityPrompt.ts","../../src/ai/prompts/codeLabPrompt.ts","../../src/ai/prompts/worksheetPrompt.ts","../../src/ai/prompts/handoutPrompt.ts","../../src/ai/prompts/slidesPrompt.ts","../../src/ai/prompts/teacherGuidePrompt.ts","../../src/ai/prompts/extensionPrompt.ts","../../src/ai/prompts/judgePrompt.ts","../../src/ai/prompts/selfLabPrompt.ts","../../src/ai/prompts/diagnosticQuizPrompt.ts","../../src/ai/flows/generateLessonMasterFlow.ts","../../src/ai/flows/generateActivityFlow.ts","../../src/ai/flows/generateCodeLabFlow.ts","../../src/ai/flows/generateWorksheetFlow.ts","../../src/ai/flows/generateHandoutFlow.ts","../../src/ai/flows/generateSlidesFlow.ts","../../src/ai/flows/generateTeacherGuideFlow.ts","../../src/ai/flows/generateExtensionFlow.ts","../../src/ai/flows/auditCurriculumQualityFlow.ts","../../src/ai/flows/generateSelfLabFlow.ts","../../src/ai/flows/generateDiagnosticQuizFlow.ts","../../src/workflow/errors/rateLimitHandler.ts","../../src/workflow/steps/lessonSteps.ts","../../src/workflow/steps/satelliteSteps.ts","../../src/workflow/steps/satelliteJudgeStep.ts","../../src/pipeline/markdownSerializers.ts","../../src/pipeline/selfPacedSerializers.ts","../../src/publishers/localWorkspaceManager.ts","../../src/publishers/gitPublisher.ts","../../src/publishers/supabasePublisher.ts","../../src/workflow/steps/publishSteps.ts","../../src/workflow/gateSettings.ts","../../src/workflow/hooks/approvalHook.ts","../../src/standards/frameworkPackSchema.ts","../../src/standards/standardsContextInjector.ts","../../src/standards/standardsCoverageGate.ts","../../src/standards/data/csta-k12-2017.json","../../src/standards/bundledPacks.ts","../../src/workflow/workflows/milestoneWorkflow.ts","../../src/workflow/workflows/roadmapWorkflow.ts","../../src/services/singleArtifactService.ts","../../src/services/lessonProductionService.ts","../../src/workflow/workflows/singleArtifactWorkflow.ts"],"names":["path","z","generateObject","fs","workflowPkg","createHook","__filename"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Curriculum OS - Standardized Error Taxonomy & Traceability System\n *\n * Provides typed, structured, and traceable error codes for all pipeline failures,\n * API exceptions, safeguard blocks, and contract violations.\n */\n\nexport type CurriculumErrorCode =\n | 'ERR_AI_NO_API_KEY'\n | 'ERR_AI_RATE_LIMIT'\n | 'ERR_AI_AUTH_FAILED'\n | 'ERR_AI_NETWORK_TIMEOUT'\n | 'ERR_AI_RESPONSE_MALFORMED'\n | 'ERR_AI_ALL_PROVIDERS_FAILED'\n | 'ERR_SOT_MISSING'\n | 'ERR_SOT_INVALID_SCHEMA'\n | 'ERR_TASK_GATE_BLOCKED'\n | 'ERR_METERED_LIMIT_EXCEEDED'\n | 'ERR_SCHEMA_CONTRACT_VIOLATION'\n | 'ERR_STORAGE_IO_FAILED';\n\nexport interface CurriculumErrorDetail {\n errorCode: CurriculumErrorCode;\n agent?: string;\n artifactType?: string;\n lessonId?: string;\n provider?: string;\n statusCode?: number;\n message: string;\n suggestedAction: string;\n retryable: boolean;\n timestamp: string;\n rawError?: string;\n}\n\nexport class CurriculumError extends Error {\n public readonly detail: CurriculumErrorDetail;\n\n constructor(detail: Omit<CurriculumErrorDetail, 'timestamp'>) {\n super(`[${detail.errorCode}] ${detail.message}`);\n this.name = 'CurriculumError';\n this.detail = {\n ...detail,\n timestamp: new Date().toISOString()\n };\n Object.setPrototypeOf(this, CurriculumError.prototype);\n }\n\n get errorCode(): CurriculumErrorCode {\n return this.detail.errorCode;\n }\n\n get retryable(): boolean {\n return this.detail.retryable;\n }\n\n get suggestedAction(): string {\n return this.detail.suggestedAction;\n }\n\n toJSON(): CurriculumErrorDetail {\n return this.detail;\n }\n}\n\n/**\n * Helper to build standardized AI inference errors\n */\nexport function createAiInferenceError(params: {\n errorCode: CurriculumErrorCode;\n message: string;\n provider?: string;\n statusCode?: number;\n agent?: string;\n artifactType?: string;\n lessonId?: string;\n rawError?: any;\n suggestedAction?: string;\n retryable?: boolean;\n}): CurriculumError {\n const {\n errorCode,\n message,\n provider,\n statusCode,\n agent,\n artifactType,\n lessonId,\n rawError,\n suggestedAction = getSuggestedActionForCode(errorCode),\n retryable = isCodeRetryable(errorCode)\n } = params;\n\n return new CurriculumError({\n errorCode,\n message,\n provider,\n statusCode,\n agent,\n artifactType,\n lessonId,\n suggestedAction,\n retryable,\n rawError: typeof rawError === 'string' ? rawError : rawError?.message || JSON.stringify(rawError)\n });\n}\n\nfunction getSuggestedActionForCode(code: CurriculumErrorCode): string {\n switch (code) {\n case 'ERR_AI_NO_API_KEY':\n return 'Vร o Settings > API Keys ฤแป cแบฅu hรฌnh รญt nhแบฅt mแปt khรณa API (Gemini, DeepSeek, OpenRouter, Alibaba hoแบทc NVIDIA).';\n case 'ERR_AI_RATE_LIMIT':\n return 'API ฤรฃ vฦฐแปฃt quรก giแปi hแบกn lฦฐแปฃt gแปi (Rate Limit HTTP 429). Hรฃy chแป 30-60 giรขy rแปi bแบฅm Rerun hoแบทc chuyแปn sang Provider dแปฑ phรฒng.';\n case 'ERR_AI_AUTH_FAILED':\n return 'API Key khรดng hแปฃp lแป hoแบทc ฤรฃ hแบฟt hแบกn (HTTP 401/403). Vui lรฒng kiแปm tra lแบกi Key trong mแปฅc Cร i ฤแบทt.';\n case 'ERR_AI_NETWORK_TIMEOUT':\n return 'Kแบฟt nแปi mแบกng tแปi mรกy chแปง AI bแป quรก thแปi gian chแป (Timeout). Vui lรฒng kiแปm tra ฤฦฐแปng truyแปn vร bแบฅm Rerun.';\n case 'ERR_AI_RESPONSE_MALFORMED':\n return 'Mรด hรฌnh AI trแบฃ vแป kแบฟt quแบฃ rแปng hoแบทc khรดng ฤรบng ฤแปnh dแบกng markdown. Bแบฅm Rerun ฤแป yรชu cแบงu AI sinh lแบกi.';\n case 'ERR_AI_ALL_PROVIDERS_FAILED':\n return 'Toร n bแป cรกc nhร cung cแบฅp trong chuแปi Fallback ฤแปu thแบฅt bแบกi. Vui lรฒng kiแปm tra kแบฟt nแปi Internet vร hแบกn mแปฉc Token.';\n case 'ERR_SOT_MISSING':\n return 'Thiแบฟu tร i liแปu nแปn tแบฃng SOT (CURRICULUM_FRAMEWORK.md hoแบทc LEARNER_PROFILE.md). Hรฃy chแบกy workflow Khแปi tแบกo dแปฑ รกn trฦฐแปc.';\n case 'ERR_TASK_GATE_BLOCKED':\n return 'Hแปc liแปu phรญa sau bแป chแบทn do Giรกo รกn (LESSON) phรญa trฦฐแปc chฦฐa ฤฦฐแปฃc Phรช duyแปt (Approval Gate). Hรฃy bแบฅm Phรช duyแปt Giรกo รกn ฤแป mแป khรณa.';\n case 'ERR_METERED_LIMIT_EXCEEDED':\n return 'Chรญnh sรกch Metered Execution giแปi hแบกn tแปi ฤa 2 bร i hแปc mแปi ฤแปฃt. Vui lรฒng phรช duyแปt cรกc bร i hiแปn tแบกi trฦฐแปc khi tแบกo thรชm.';\n case 'ERR_SCHEMA_CONTRACT_VIOLATION':\n return 'Nแปi dung sinh ra thiแบฟu cรกc phแบงn bแบฏt buแปc [REQUIRED]. Hรฃy kรญch hoแบกt kiแปm thแปญ hoแบทc bแบฅm Rerun.';\n case 'ERR_STORAGE_IO_FAILED':\n return 'Lแปi ฤแปc/ghi tแปp tin trรชn hแป thแปng lฦฐu trแปฏ. Kiแปm tra quyแปn ghi thฦฐ mแปฅc output/projects.';\n default:\n return 'Bแบฅm Rerun ฤแป thแปญ lแบกi hoแบทc kiแปm tra nhแบญt kรฝ hแป thแปng.';\n }\n}\n\nfunction isCodeRetryable(code: CurriculumErrorCode): boolean {\n switch (code) {\n case 'ERR_AI_RATE_LIMIT':\n case 'ERR_AI_NETWORK_TIMEOUT':\n case 'ERR_AI_RESPONSE_MALFORMED':\n case 'ERR_STORAGE_IO_FAILED':\n return true;\n case 'ERR_AI_NO_API_KEY':\n case 'ERR_AI_AUTH_FAILED':\n case 'ERR_SOT_MISSING':\n case 'ERR_TASK_GATE_BLOCKED':\n case 'ERR_METERED_LIMIT_EXCEEDED':\n case 'ERR_SCHEMA_CONTRACT_VIOLATION':\n return false;\n default:\n return true;\n }\n}\n","import { createAiInferenceError } from '../errors';\nimport fs from 'fs';\nimport path from 'path';\n\nexport interface ChatMessage {\n role: 'user' | 'assistant' | 'system' | 'model';\n content: string;\n}\n\nexport interface StreamRunnerOptions {\n openrouterKey?: string;\n deepseekKey?: string;\n alibabaKey?: string;\n geminiKey?: string;\n nvidiaKey?: string;\n openaiKey?: string;\n anthropicKey?: string;\n model?: string;\n systemPersona?: string;\n maxTokens?: number;\n temperature?: number;\n reasoningEffort?: 'off' | 'low' | 'medium' | 'high' | 'max';\n}\n\nfunction resolveApiKey(keyName: string, explicitKey?: string): string {\n if (explicitKey && explicitKey.trim()) return explicitKey.trim();\n if (typeof process !== 'undefined' && process.env && process.env[keyName]) {\n return process.env[keyName]!;\n }\n\n try {\n const currentDir = process.cwd();\n const envPaths = [\n path.resolve(currentDir, '.env.local'),\n path.resolve(currentDir, '.env'),\n path.resolve(currentDir, 'apps/web/.env.local'),\n path.resolve(currentDir, 'packages/learnwell-platform/.env'),\n path.resolve(currentDir, '..', '.env.local'),\n path.resolve(currentDir, '..', '.env'),\n path.resolve(currentDir, '../..', '.env.local'),\n path.resolve(currentDir, '../..', '.env'),\n ];\n for (const envPath of envPaths) {\n if (fs.existsSync(envPath)) {\n const content = fs.readFileSync(envPath, 'utf-8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#') && trimmed.startsWith(keyName + '=')) {\n return trimmed.substring(keyName.length + 1).trim().replace(/^[\"']|[\"']$/g, '');\n }\n }\n }\n }\n } catch {}\n return '';\n}\n\n/**\n * Checks if a specific AI provider is enabled via environment variables.\n * Supported env controls:\n * 1. ENABLE_<PROVIDER>=true|false (e.g. ENABLE_ALIBABA=false, ENABLE_OPENROUTER=true)\n * 2. ALLOWED_AI_PROVIDERS=openrouter,nvidia\n * 3. DISABLED_AI_PROVIDERS=alibaba,deepseek,gemini\n */\nexport function isProviderEnabled(provider: string): boolean {\n const p = provider.toLowerCase();\n\n // 1. Explicit ENABLE_<PROVIDER>=true/false\n const explicitVal = resolveApiKey(`ENABLE_${p.toUpperCase()}`);\n if (explicitVal !== '') {\n return explicitVal === 'true' || explicitVal === '1';\n }\n\n // 2. ALLOWED_AI_PROVIDERS (whitelist)\n const allowedList = resolveApiKey('ALLOWED_AI_PROVIDERS');\n if (allowedList && allowedList.trim()) {\n const allowed = allowedList.split(',').map(s => s.trim().toLowerCase());\n return allowed.includes(p);\n }\n\n // 3. DISABLED_AI_PROVIDERS (blacklist)\n const disabledList = resolveApiKey('DISABLED_AI_PROVIDERS');\n if (disabledList && disabledList.trim()) {\n const disabled = disabledList.split(',').map(s => s.trim().toLowerCase());\n if (disabled.includes(p)) return false;\n }\n\n return true;\n}\n\n/**\n * Checks if a model is permitted by ALLOWED_AI_MODELS filter (supports wildcards e.g. nvidia/*, *:free)\n */\nexport function isModelAllowed(model: string): boolean {\n const allowedList = resolveApiKey('ALLOWED_AI_MODELS');\n if (!allowedList || !allowedList.trim()) return true;\n\n const patterns = allowedList.split(',').map(s => s.trim());\n return patterns.some(pattern => {\n if (pattern === '*' || pattern === model) return true;\n if (pattern.endsWith('*') && model.startsWith(pattern.slice(0, -1))) return true;\n if (pattern.startsWith('*') && model.endsWith(pattern.slice(1))) return true;\n return false;\n });\n}\n\nexport interface FallbackTarget {\n provider: string;\n model: string;\n}\n\n/**\n * Resolves the designated last-resort fallback chain from environment variables.\n * Comma-separated lists are parsed in left-to-right priority order:\n * - FALLBACK_AI_PROVIDER=nvidia,openrouter (Must be enabled / in ALLOWED_AI_PROVIDERS)\n * - FALLBACK_AI_MODEL=nvidia/nemotron-3-ultra-550b-a55b,@preset/coding-free,deepseek/deepseek-chat:free\n */\nexport function getDesignatedFallbackChain(): FallbackTarget[] {\n const rawProviders =\n resolveApiKey('FALLBACK_AI_PROVIDER') ||\n resolveApiKey('FALLBACK_AI_PROVIDERS') ||\n resolveApiKey('DEFAULT_AI_PROVIDER') ||\n 'nvidia,openrouter';\n\n const rawModels =\n resolveApiKey('FALLBACK_AI_MODEL') ||\n resolveApiKey('FALLBACK_AI_MODELS') ||\n resolveApiKey('DEFAULT_AI_MODEL') ||\n 'nvidia/nemotron-3-ultra-550b-a55b,@preset/coding-free,deepseek/deepseek-chat:free';\n\n // Providers in priority order (MUST be enabled / allowed in ALLOWED_AI_PROVIDERS)\n const providerList = rawProviders\n .split(',')\n .map((p) => p.trim().toLowerCase())\n .filter((p) => p.length > 0 && isProviderEnabled(p));\n\n const modelList = rawModels\n .split(',')\n .map((m) => m.trim())\n .filter((m) => m.length > 0 && isModelAllowed(m));\n\n const chain: FallbackTarget[] = [];\n\n for (const provider of providerList) {\n let providerModels: string[] = [];\n\n if (provider === 'nvidia') {\n providerModels = modelList.filter((m) => m.startsWith('nvidia/') || m.startsWith('meta/') || m.startsWith('mistralai/'));\n if (providerModels.length === 0) {\n providerModels = ['nvidia/nemotron-3-ultra-550b-a55b', 'nvidia/nemotron-3.5-lightning-30b-a3b'];\n }\n } else if (provider === 'openrouter') {\n providerModels = modelList.filter((m) => m.startsWith('@') || m.includes('/') || m.includes(':'));\n if (providerModels.length === 0) {\n providerModels = ['@preset/coding-free', 'deepseek/deepseek-chat:free', 'meta-llama/llama-3.3-70b-instruct:free'];\n }\n } else if (provider === 'alibaba' || provider === 'dashscope') {\n providerModels = modelList.filter((m) => m.startsWith('qwen') || m.includes('deepseek'));\n if (providerModels.length === 0) {\n providerModels = ['deepseek-v4-flash-0731', 'qwen-plus', 'qwen3.7-plus'];\n }\n } else if (provider === 'google' || provider === 'gemini') {\n providerModels = modelList.filter((m) => m.startsWith('gemini'));\n if (providerModels.length === 0) {\n providerModels = ['gemini-2.0-flash', 'gemini-1.5-flash'];\n }\n } else if (provider === 'deepseek') {\n providerModels = modelList.filter((m) => m.startsWith('deepseek'));\n if (providerModels.length === 0) {\n providerModels = ['deepseek-chat', 'deepseek-reasoner'];\n }\n } else {\n providerModels = modelList.length > 0 ? modelList : ['default'];\n }\n\n for (const model of providerModels) {\n if (!chain.some((c) => c.provider === provider && c.model === model)) {\n chain.push({ provider, model });\n }\n }\n }\n\n return chain;\n}\n\nexport function getDesignatedFallbackConfig(): FallbackTarget {\n const chain = getDesignatedFallbackChain();\n if (chain.length > 0) return chain[0];\n return { provider: 'nvidia', model: 'nvidia/nemotron-3-ultra-550b-a55b' };\n}\n\nexport type ChunkType = 'content' | 'thought' | 'tool_call' | 'usage';\n\n/**\n * Separate thinking process from main content safely\n */\nexport function extractThoughtAndContent(rawText: string): { thought: string; content: string } {\n let text = rawText || '';\n let thought = '';\n\n // 1. Explicit <think>...</think> tags\n const thinkMatch = text.match(/<think>([\\s\\S]*?)<\\/think>/i);\n if (thinkMatch) {\n thought = thinkMatch[1].trim();\n text = text.replace(/<think>[\\s\\S]*?<\\/think>/gi, '').trim();\n } else if (text.includes('<think>')) {\n // Unclosed <think> tag\n const parts = text.split('<think>');\n text = parts[0].trim();\n thought = parts[1].trim();\n }\n\n // 2. Patterns like \"Here's a thinking process: ... \\n\\n# Main Title\"\n if (!thought && (text.startsWith(\"Here's a thinking process:\") || text.startsWith(\"Thinking Process:\"))) {\n // Look for markdown heading (# or ## or ๐ฏ or 1. or ---) as transition to main answer\n const splitRegex = /\\n(?=(?:#|##|###|๐ฏ|๐งญ|๐|๐|1\\.\\s+[A-Z\\u00C0-\\u1EF9]|---))/m;\n const match = text.search(splitRegex);\n if (match > 0) {\n thought = text.slice(0, match).trim();\n text = text.slice(match).trim();\n }\n }\n\n // 3. Strip outer markdown codeblock fence if AI wrapped the entire document\n let content = text.trim();\n if (content.startsWith('```markdown')) {\n content = content.replace(/^```markdown\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n } else if (content.startsWith('```md')) {\n content = content.replace(/^```md\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n } else if (content.startsWith('```') && content.endsWith('```') && !content.includes('---')) {\n content = content.replace(/^```\\w*\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n }\n\n return {\n thought: thought.trim(),\n content: content.trim()\n };\n}\n\n/**\n * Idle-based abort controller. Unlike AbortSignal.timeout() โ which kills a\n * request after a fixed TOTAL time even while tokens are streaming โ this\n * only aborts when no data arrives for `idleMs`. Every network read resets\n * the window, so long artifact generations can run for many minutes while\n * genuinely hung connections are still detected.\n */\nfunction createIdleAbortController(idleMs: number) {\n const controller = new AbortController();\n let timer: ReturnType<typeof setTimeout> | null = null;\n const arm = () => {\n if (timer) clearTimeout(timer);\n timer = setTimeout(\n () => controller.abort(new Error(`Idle timeout: no data for ${Math.round(idleMs / 1000)}s`)),\n idleMs\n );\n (timer as any)?.unref?.();\n };\n arm();\n return {\n signal: controller.signal,\n /** Reset the idle window (call on every received chunk). */\n kick: arm,\n /** Clear the pending timer once the request lifecycle is over. */\n dispose: () => {\n if (timer) clearTimeout(timer);\n timer = null;\n }\n };\n}\ntype IdleAbort = ReturnType<typeof createIdleAbortController>;\n\n/**\n * Helper to process an OpenAI-compatible SSE response stream with Thinking & Tool Call streaming\n */\nasync function processOpenAISSEStream(\n response: Response,\n onChunk?: (token: string, type: ChunkType) => void,\n idle?: IdleAbort,\n toolCallCollector?: Map<string, { id: string; name: string; argsBuffer: string }>\n): Promise<string> {\n if (!response.body) return '';\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let fullRaw = '';\n let buffer = '';\n let insideThinkTag = false;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n idle?.kick();\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (trimmed === 'data: [DONE]') continue;\n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.substring(6));\n\n // 0. Capture exact provider token usage if available in the SSE stream\n if (json.usage) {\n const promptTokens = json.usage.prompt_tokens || json.usage.input_tokens || 0;\n const completionTokens = json.usage.completion_tokens || json.usage.output_tokens || 0;\n const totalTokens = json.usage.total_tokens || (promptTokens + completionTokens);\n const reasoningTokens = json.usage.completion_tokens_details?.reasoning_tokens || 0;\n if (onChunk) {\n onChunk(JSON.stringify({ promptTokens, completionTokens, totalTokens, reasoningTokens }), 'usage');\n }\n }\n\n const delta = json.choices?.[0]?.delta;\n if (!delta) continue;\n\n // 1. Explicit reasoning_content (DeepSeek / Qwen / Claude / Gemini on OpenRouter)\n const reasoning = delta.reasoning_content || delta.thought || delta.reasoning || delta.thought_process || '';\n if (reasoning) {\n if (onChunk) onChunk(reasoning, 'thought');\n }\n\n // 2. Tool Calls โ stream ra UI + aggregate thร nh call hoร n chแปnh khi cรณ collector\n if (delta.tool_calls) {\n const toolStr = JSON.stringify(delta.tool_calls);\n if (onChunk) onChunk(toolStr, 'tool_call');\n if (toolCallCollector) {\n for (const tc of delta.tool_calls) {\n const idx = String(tc.index ?? tc.id ?? '0');\n const existing = toolCallCollector.get(idx) || { id: tc.id || `call_${idx}`, name: '', argsBuffer: '' };\n if (tc.id) existing.id = tc.id;\n if (tc.function?.name) existing.name += tc.function.name;\n if (tc.function?.arguments) existing.argsBuffer += tc.function.arguments;\n toolCallCollector.set(idx, existing);\n }\n }\n }\n\n // 3. Content tokens (handle inline <think> tags dynamically)\n let content = delta.content || '';\n if (content) {\n fullRaw += content;\n\n if (content.includes('<think>')) {\n insideThinkTag = true;\n const parts = content.split('<think>');\n if (parts[0] && onChunk) onChunk(parts[0], 'content');\n content = parts[1] || '';\n }\n if (content.includes('</think>')) {\n insideThinkTag = false;\n const parts = content.split('</think>');\n if (parts[0] && onChunk) onChunk(parts[0], 'thought');\n content = parts[1] || '';\n }\n\n if (insideThinkTag) {\n if (onChunk && content) onChunk(content, 'thought');\n } else if (content) {\n if (onChunk) onChunk(content, 'content');\n }\n }\n } catch {\n // Incomplete JSON chunk, skip\n }\n }\n }\n }\n\n idle?.dispose();\n\n // Final sanity cleanup so raw output has thinking separated\n const extracted = extractThoughtAndContent(fullRaw);\n return extracted.content || fullRaw;\n}\n\n/**\n * Helper to process a Google Gemini SSE stream with Thought streaming\n */\nasync function processGeminiSSEStream(\n response: Response,\n onChunk?: (token: string, type: ChunkType) => void,\n idle?: IdleAbort\n): Promise<string> {\n if (!response.body) return '';\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let fullText = '';\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n idle?.kick();\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.substring(6));\n\n if (json.usageMetadata) {\n const promptTokens = json.usageMetadata.promptTokenCount || 0;\n const completionTokens = json.usageMetadata.candidatesTokenCount || 0;\n const totalTokens = json.usageMetadata.totalTokenCount || (promptTokens + completionTokens);\n if (onChunk) {\n onChunk(JSON.stringify({ promptTokens, completionTokens, totalTokens }), 'usage');\n }\n }\n\n const parts = json.candidates?.[0]?.content?.parts || [];\n for (const part of parts) {\n if (part.thought) {\n if (onChunk) onChunk(part.text || '', 'thought');\n } else if (part.text) {\n fullText += part.text;\n if (onChunk) onChunk(part.text, 'content');\n }\n }\n } catch {\n // Incomplete JSON chunk, skip\n }\n }\n }\n }\n idle?.dispose();\n return fullText;\n}\n\n/**\n * Real-time Streaming Multi-Provider Inference Runner with Thinking & Tool Streaming\n */\nexport async function streamCurriculumAIInference(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions = {},\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n const openrouterKey = resolveApiKey('OPENROUTER_API_KEY', options.openrouterKey);\n const deepseekKey = resolveApiKey('DEEPSEEK_API_KEY', options.deepseekKey);\n const alibabaKey = resolveApiKey('ALIBABA_API_KEY', options.alibabaKey) || resolveApiKey('DASHSCOPE_API_KEY');\n const geminiKey = resolveApiKey('GEMINI_API_KEY', options.geminiKey) || resolveApiKey('NEXT_PUBLIC_GEMINI_API_KEY');\n const nvidiaKey = resolveApiKey('NVIDIA_API_KEY', options.nvidiaKey);\n\n const temperature = options.temperature ?? 0.3;\n // Default to 32768 tokens (32k) so long reasoning, deep curriculum artifacts, code labs, and quizzes are never truncated\n const maxTokens = options.maxTokens ?? 32768;\n\n const basePersona = options.systemPersona || 'You are Curriculum OS Assistant โ Senior AI Technical Curriculum Architect & Educational Content Specialist.';\n\n const systemInstruction = `${basePersona}\n\nProject Context:\n${projectContext}\n\nGuidelines:\n1. You have full context of the project hierarchy, syllabus, lessons, and learning objectives. Answer precisely, deeply, and directly.\n2. Complete responses fully without truncation. When generating tables or roadmaps, include all sections/milestones.\n3. Keep technical terminology and official API symbols intact.\n4. Format output using clean Markdown, clear sections, bullet points, and code blocks where required.\n5. Do NOT use emojis in headings, tab titles, or UI navigation labels.`;\n\n const formattedMessages = [\n { role: 'system', content: systemInstruction },\n ...messages.map(m => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'assistant' : 'user',\n content: m.content\n }))\n ];\n\n // Collect failure errors for full traceability\n const providerErrors: Record<string, string> = {};\n\n const requestedModel = options.model || '@preset/coding-free';\n const isNvidiaPreferred = requestedModel.startsWith('nvidia/') || (Boolean(nvidiaKey && !openrouterKey) && isProviderEnabled('nvidia'));\n\n // โโ Route 1: NVIDIA NIM (Nemotron Suite) โโ\n if (nvidiaKey && isProviderEnabled('nvidia')) {\n const candidateNemotronModels = [\n requestedModel.startsWith('nvidia/') ? requestedModel : 'nvidia/nemotron-3-ultra-550b-a55b',\n 'nvidia/nemotron-3-ultra-550b-a55b',\n 'nvidia/nemotron-3.5-lightning-30b-a3b',\n 'nvidia/nemotron-3-super-120b-a12b',\n 'nvidia/llama-3.1-nemotron-70b-instruct'\n ].filter(m => isModelAllowed(m));\n const uniqueNvidiaModels = Array.from(new Set(candidateNemotronModels));\n\n if (isNvidiaPreferred || uniqueNvidiaModels.length > 0) {\n for (const model of uniqueNvidiaModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://integrate.api.nvidia.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${nvidiaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`nvidia_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`nvidia_${model}`] = e?.message || 'Network error';\n console.warn(`[NVIDIA Stream] Failover for ${model}:`, e?.message || e);\n }\n }\n }\n }\n\n // โโ Route 2: OpenRouter (Primary Free Presets & Models) โโ\n if (openrouterKey && isProviderEnabled('openrouter')) {\n const openrouterModels = [\n requestedModel,\n 'openrouter/free',\n 'nvidia/nemotron-3-super-120b-a12b:free',\n 'nvidia/nemotron-3-ultra-550b-a55b:free',\n 'nvidia/nemotron-3.5-lightning:free',\n 'minimax/minimax-m3:free',\n 'cohere/north-mini-code:free',\n ].filter(m => isModelAllowed(m));\n const uniqueOrModels = Array.from(new Set(openrouterModels));\n\n for (const model of uniqueOrModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://openrouter.ai/api/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${openrouterKey}`,\n 'Content-Type': 'application/json',\n 'HTTP-Referer': 'https://orchable.composer',\n 'X-Title': 'Curriculum OS Studio'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`openrouter_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n if (res.status === 429) {\n console.warn(`[OpenRouter] Rate limited (429) for ${model}, trying fallback...`);\n }\n }\n } catch (e: any) {\n providerErrors[`openrouter_${model}`] = e?.message || 'Network error';\n console.warn(`[OpenRouter Stream] Failover for ${model}:`, e?.message || e);\n }\n }\n }\n\n // โโ Route 3: DeepSeek Official API (Configurable via ENABLE_DEEPSEEK=true) โโ\n if (deepseekKey && isProviderEnabled('deepseek')) {\n const dsModel = options.model?.includes('deepseek-reasoner') ? 'deepseek-reasoner' : 'deepseek-chat';\n if (isModelAllowed(dsModel)) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://api.deepseek.com/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${deepseekKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model: dsModel,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors['deepseek'] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors['deepseek'] = e?.message || 'Network error';\n console.warn(`[DeepSeek Stream] Failover:`, e?.message || e);\n }\n }\n }\n\n // โโ Route 4: Alibaba DashScope / Qwen Cloud (Configurable via ENABLE_ALIBABA=true) โโ\n if (alibabaKey && isProviderEnabled('alibaba')) {\n const qwenModels = (options.model?.startsWith('qwen')\n ? [options.model, 'qwen3.7-plus', 'qwen3.6-flash']\n : ['qwen3.7-plus', 'qwen3.6-flash']).filter(m => isModelAllowed(m));\n\n const baseUrl = alibabaKey.startsWith('sk-sp-')\n ? 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions'\n : 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions';\n\n for (const qwenModel of qwenModels) {\n try {\n const idle = createIdleAbortController(180000);\n const payload: any = {\n model: qwenModel,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n };\n\n const res = await fetch(baseUrl, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${alibabaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(payload),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`alibaba_${qwenModel}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`alibaba_${qwenModel}`] = e?.message || 'Network error';\n console.warn(`[Alibaba Stream] Failover for ${qwenModel}:`, e?.message || e);\n }\n }\n }\n\n // โโ Route 5: Google Gemini Direct (Configurable via ENABLE_GEMINI=true) โโ\n if (geminiKey && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n const geminiModels = (options.model?.startsWith('gemini')\n ? [options.model, 'gemini-1.5-flash', 'gemini-2.0-flash']\n : ['gemini-1.5-flash', 'gemini-2.0-flash']).filter(m => isModelAllowed(m));\n\n const geminiContents = [\n { role: 'user', parts: [{ text: systemInstruction }] },\n { role: 'model', parts: [{ text: 'Tรดi ฤรฃ hiแปu rรต toร n bแป bแปi cแบฃnh dแปฑ รกn vร sแบตn sร ng hแป trแปฃ bแบกn mแปt cรกch chuyรชn sรขu, chรญnh xรกc nhแบฅt.' }] },\n ...messages.map(m => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'model' : 'user',\n parts: [{ text: m.content }]\n }))\n ];\n\n for (const gModel of geminiModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${gModel}:streamGenerateContent?alt=sse&key=${geminiKey}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n contents: geminiContents,\n generationConfig: {\n temperature,\n maxOutputTokens: maxTokens,\n }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processGeminiSSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`gemini_${gModel}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`gemini_${gModel}`] = e?.message || 'Network error';\n console.warn(`[Gemini Stream] Failover for ${gModel}:`, e?.message || e);\n }\n }\n }\n\n // โโ Route 6: Ultimate Designated Fallback Chain (Configurable via FALLBACK_AI_PROVIDER / FALLBACK_AI_MODEL) โโ\n const fallbackChain = getDesignatedFallbackChain();\n if (fallbackChain.length > 0) {\n console.log(\n `[streamRunner] ๐ก๏ธ Primary routes failed/exhausted. Invoking designated last-resort fallback chain:`,\n fallbackChain.map((c) => `${c.provider}(${c.model})`).join(' -> ')\n );\n\n for (const target of fallbackChain) {\n const { provider, model } = target;\n\n if (provider === 'nvidia' && nvidiaKey && isProviderEnabled('nvidia')) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://integrate.api.nvidia.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${nvidiaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] โ
Designated fallback NVIDIA (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_nvidia_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_nvidia_${model}`] = e?.message || 'Network error';\n }\n } else if (provider === 'openrouter' && openrouterKey && isProviderEnabled('openrouter')) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://openrouter.ai/api/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${openrouterKey}`,\n 'Content-Type': 'application/json',\n 'HTTP-Referer': 'https://orchable.composer',\n 'X-Title': 'Curriculum OS Studio'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] โ
Designated fallback OpenRouter (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_openrouter_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_openrouter_${model}`] = e?.message || 'Network error';\n }\n } else if ((provider === 'alibaba' || provider === 'dashscope') && alibabaKey && isProviderEnabled('alibaba')) {\n const baseUrl = alibabaKey.startsWith('sk-sp-')\n ? 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions'\n : 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions';\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch(baseUrl, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${alibabaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] โ
Designated fallback Alibaba (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_alibaba_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_alibaba_${model}`] = e?.message || 'Network error';\n }\n } else if ((provider === 'google' || provider === 'gemini') && geminiKey && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n try {\n const idle = createIdleAbortController(180000); const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${geminiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n contents: [\n { role: 'user', parts: [{ text: systemInstruction }] },\n { role: 'model', parts: [{ text: 'Understood. I will follow the project context and guidelines.' }] },\n ...messages.map((m) => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'model' : 'user',\n parts: [{ text: m.content }]\n }))\n ],\n generationConfig: {\n temperature,\n maxOutputTokens: maxTokens\n }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processGeminiSSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] โ
Designated fallback Gemini (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_gemini_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_gemini_${model}`] = e?.message || 'Network error';\n }\n }\n }\n }\n\n const isRateLimited = Object.values(providerErrors).some(msg => msg.includes('429'));\n const isAuthFailed = Object.values(providerErrors).some(msg => msg.includes('401') || msg.includes('403'));\n\n const errorCode = isRateLimited\n ? 'ERR_AI_RATE_LIMIT'\n : isAuthFailed\n ? 'ERR_AI_AUTH_FAILED'\n : 'ERR_AI_ALL_PROVIDERS_FAILED';\n\n throw createAiInferenceError({\n errorCode,\n message: `Khรดng thแป kแบฟt nแปi tแปi cรกc nhร cung cแบฅp AI trong chuแปi Fallback. Chi tiแบฟt: ${JSON.stringify(providerErrors)}`,\n rawError: providerErrors\n });\n}\n\n/**\n * Synchronous Multi-Model Inference Wrapper with strict error propagation\n */\nexport async function runCurriculumAIInference(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions = {},\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n return await streamCurriculumAIInference(messages, projectContext, options, onChunk);\n}\n","import { createGoogleGenerativeAI } from '@ai-sdk/google';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createDeepSeek } from '@ai-sdk/deepseek';\nimport type { LanguageModel } from 'ai';\nimport { isProviderEnabled, isModelAllowed, getDesignatedFallbackConfig } from './streamRunner';\n\nexport type AIProviderName = 'google' | 'openai' | 'deepseek' | 'alibaba' | 'dashscope' | 'ollama' | 'nvidia' | 'openrouter';\n\nexport interface ModelResolutionOptions {\n provider?: AIProviderName;\n modelName?: string;\n apiKey?: string;\n baseURL?: string;\n}\n\nconst DEFAULT_MODELS: Record<string, string> = {\n nvidia: 'nvidia/nemotron-3-ultra-550b-a55b',\n openrouter: '@preset/coding-free',\n alibaba: 'qwen3.7-plus',\n dashscope: 'qwen3.7-plus',\n google: 'gemini-1.5-flash',\n deepseek: 'deepseek-chat',\n openai: 'gpt-4o-mini',\n ollama: 'deepseek-v4-flash:0731',\n};\n\nexport const NVIDIA_MODELS = {\n codingFast: 'nvidia/nemotron-3.5-lightning-30b-a3b',\n reasoningUltra: 'nvidia/nemotron-3-ultra-550b-a55b',\n superMoE: 'nvidia/nemotron-3-super-120b-a12b',\n llamaNemotron: 'nvidia/llama-3.1-nemotron-70b-instruct',\n translation: 'nvidia/riva-translate-4b-instruct-v2',\n embedding: 'nvidia/nemotron-3-embed-1b',\n visionLlama: 'meta/llama-3.2-11b-vision-instruct',\n} as const;\n\n/**\n * Resolves a Vercel AI SDK LanguageModel instance based on provider options or environment variables.\n * Automatically falls back to designated fallback provider/model if requested provider is disabled.\n */\nexport function getAIModel(options: ModelResolutionOptions = {}): LanguageModel {\n const designated = getDesignatedFallbackConfig();\n const defaultProvider = process.env.DEFAULT_AI_PROVIDER || process.env.LLM_PROVIDER || detectDefaultProvider();\n let provider = (options.provider || defaultProvider).toLowerCase() as AIProviderName;\n\n // If requested provider is disabled in .env, automatically route to designated fallback\n if (!isProviderEnabled(provider)) {\n console.warn(`[provider-factory] Provider \"${provider}\" is disabled via environment toggle. Falling back to designated provider \"${designated.provider}\".`);\n provider = designated.provider as AIProviderName;\n }\n\n let resolvedModelName =\n options.modelName ||\n process.env.DEFAULT_AI_MODEL ||\n process.env.LLM_MODEL ||\n DEFAULT_MODELS[provider] ||\n designated.model;\n\n if (!isModelAllowed(resolvedModelName)) {\n console.warn(`[provider-factory] Model \"${resolvedModelName}\" is not permitted by ALLOWED_AI_MODELS. Using designated model \"${designated.model}\".`);\n resolvedModelName = designated.model;\n }\n\n if (provider === 'nvidia') {\n const apiKey = options.apiKey || process.env.NVIDIA_API_KEY || '';\n const nvidia = createOpenAI({\n apiKey,\n baseURL: options.baseURL || 'https://integrate.api.nvidia.com/v1',\n });\n return nvidia.chat(resolvedModelName || 'nvidia/nemotron-3-ultra-550b-a55b');\n }\n\n if (provider === 'openrouter') {\n const apiKey = options.apiKey || process.env.OPENROUTER_API_KEY || process.env.OPENAI_API_KEY || '';\n const openrouter = createOpenAI({\n apiKey,\n baseURL: options.baseURL || 'https://openrouter.ai/api/v1',\n });\n return openrouter.chat(resolvedModelName || '@preset/coding-free');\n }\n\n if (provider === 'alibaba' || provider === 'dashscope') {\n const effectiveKey =\n options.apiKey ||\n process.env.ALIBABA_API_KEY ||\n process.env.DASHSCOPE_API_KEY ||\n process.env.SAAS_ALIBABA_API_KEY ||\n process.env.SAAS_DASHSCOPE_API_KEY ||\n '';\n\n let defaultBaseURL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n if (effectiveKey.startsWith('sk-sp-')) {\n defaultBaseURL = 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1';\n }\n\n const rawUrl = options.baseURL || process.env.ALIBABA_BASE_URL || process.env.DASHSCOPE_BASE_URL || defaultBaseURL;\n const cleanBaseURL = rawUrl.replace(/^[\"']|[\"']$/g, '').trim();\n\n const alibaba = createOpenAI({\n apiKey: effectiveKey,\n baseURL: cleanBaseURL,\n // Passthrough: no forced format injection โ the Vercel AI SDK's generateObject\n // already instructs the model to return JSON via its schema definition.\n // Injecting 'Output format: JSON.' into markdown-based lesson prompts caused\n // model confusion (mixed markdown + JSON output).\n });\n\n return alibaba.chat(resolvedModelName);\n }\n\n if (provider === 'google') {\n const apiKey = options.apiKey || process.env.GOOGLE_GENERATIVE_AI_API_KEY || process.env.GEMINI_API_KEY || '';\n const google = createGoogleGenerativeAI({ apiKey });\n return google(resolvedModelName);\n }\n\n if (provider === 'deepseek') {\n const apiKey = options.apiKey || process.env.DEEPSEEK_API_KEY || process.env.SAAS_DEEPSEEK_API_KEY || '';\n const deepseek = createDeepSeek({ apiKey });\n return deepseek(resolvedModelName);\n }\n\n if (provider === 'openai') {\n const apiKey = options.apiKey || process.env.OPENAI_API_KEY || '';\n const openai = createOpenAI({\n apiKey,\n baseURL: options.baseURL || process.env.OPENAI_BASE_URL,\n });\n return openai.chat(resolvedModelName);\n }\n\n if (provider === 'ollama') {\n const apiKey = options.apiKey || process.env.OLLAMA_API_KEY || 'ollama';\n const baseURL = options.baseURL || process.env.OLLAMA_BASE_URL || process.env.OPENAI_BASE_URL || 'http://127.0.0.1:11434/v1';\n const ollama = createOpenAI({\n apiKey,\n baseURL,\n });\n return ollama.chat(resolvedModelName || 'qwen2.5:latest');\n }\n\n // Fallback to OpenAI-compatible\n const fallback = createOpenAI({\n apiKey: options.apiKey || process.env.OPENAI_API_KEY || '',\n baseURL: options.baseURL || process.env.OPENAI_BASE_URL,\n });\n return fallback.chat(resolvedModelName);\n}\n\nfunction detectDefaultProvider(): AIProviderName {\n if (process.env.NVIDIA_API_KEY && isProviderEnabled('nvidia')) {\n return 'nvidia';\n }\n if (process.env.OPENROUTER_API_KEY && isProviderEnabled('openrouter')) {\n return 'openrouter';\n }\n if ((process.env.ALIBABA_API_KEY || process.env.DASHSCOPE_API_KEY || process.env.SAAS_ALIBABA_API_KEY) && isProviderEnabled('alibaba')) {\n return 'alibaba';\n }\n if ((process.env.GOOGLE_GENERATIVE_AI_API_KEY || process.env.GEMINI_API_KEY) && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n return 'google';\n }\n if ((process.env.DEEPSEEK_API_KEY || process.env.SAAS_DEEPSEEK_API_KEY) && isProviderEnabled('deepseek')) {\n return 'deepseek';\n }\n if (process.env.OPENAI_API_KEY && process.env.OPENAI_API_KEY !== 'ollama' && isProviderEnabled('openai')) {\n return 'openai';\n }\n return getDesignatedFallbackConfig().provider as AIProviderName;\n}\n","import { z } from 'zod';\n\n// โโโ Shared sub-schemas โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const LearningObjectiveRowSchema = z.object({\n code: z.string().describe('LO code, e.g. \"LO1\"'),\n objective: z.string().describe('Bloom-tagged learning objective'),\n evidence: z.string().describe('Observable student evidence / output'),\n successCriteria: z.string().describe('Measurable pass/fail condition'),\n /**\n * Standards anchors (Phase 1: optional). Format: \"statementId\" or\n * \"packId:statementId\", e.g. \"csta-k12-2017:1B-AP-10\". IDs MUST exist in an\n * adopted Framework Pack โ the Standards Coverage Gate resolves and audits them.\n */\n standardRefs: z.array(z.string()).optional().default([]).describe('Anchoring standard statement IDs from adopted Framework Packs'),\n /** Ontora knowledge-tree anchors, e.g. \"ontora:WHILE_LOOP\" (optional, Phase 1). */\n conceptRefs: z.array(z.string()).optional().default([]).describe('Anchoring ontora concept codes, e.g. \"ontora:FOR_LOOP\"'),\n});\n\nexport const ActivitySeqRowSchema = z.object({\n seq: z.coerce.number().int(),\n phase: z.string().describe('EDP or 5E phase label'),\n activityType: z.string().describe('e.g. \"Mini-lecture\", \"Brainstorming\", \"Hands-on Coding\"'),\n actor: z.string().describe('\"Teacher\" | \"Students\" | \"Teacher + Students\"'),\n purpose: z.string().describe('Why this activity is done'),\n studentAction: z.string(),\n teacherMove: z.string(),\n outputEvidence: z.string(),\n lo: z.array(z.string()).describe('e.g. [\"LO1\",\"LO2\"]'),\n durationMinutes: z.coerce.number().default(10),\n artifactContract: z.string().describe('Satellite artifact(s) linked, e.g. \"SLIDE_U03_M01_L13\"'),\n});\n\nexport const ResourceMapRowSchema = z.object({\n resourceType: z.string().describe('\"Slide Deck\" | \"Handout\" | \"Starter Code\" | \"Lab Tools\" | etc.'),\n identifier: z.string(),\n description: z.string(),\n location: z.string().default(''),\n});\n\nexport const AssessmentMapRowSchema = z.object({\n form: z.string().describe('\"Formative Checkpoint\" | \"Summative Assessment\" | \"Peer Feedback\"'),\n when: z.string().describe('When in the sequence this is assessed'),\n tool: z.string().describe('Assessment tool or artifact used'),\n criteria: z.string(),\n performanceLevels: z.string().default(''),\n remediationPath: z.string().default(''),\n});\n\nexport const ArtifactContractRowSchema = z.object({\n artifactId: z.string(),\n artifactType: z.string(),\n description: z.string(),\n requiredSections: z.string().default(''),\n format: z.string().default(''),\n owner: z.string().default(''),\n});\n\nexport const LessonFlowPhaseSchema = z.object({\n phase: z.string().describe('Phase title, e.g. \"ASK\", \"ENGAGE\", \"PLAN\"'),\n durationMinutes: z.coerce.number(),\n content: z.string().describe('Full narrative content of this phase (teacher actions, student actions, code, outputs)'),\n});\n\nexport const TroubleshootingRowSchema = z.object({\n issue: z.string(),\n potentialCause: z.string(),\n solution: z.string(),\n});\n\n// โโโ Shared base for both Lesson models โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nconst LessonBaseSchema = z.object({\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n estimatedDuration: z.string().describe('e.g. \"90 minutes\"'),\n projectObjective: z.string(),\n materials: z.string().default(''),\n learningObjectives: z.array(LearningObjectiveRowSchema).min(1),\n activitySequence: z.array(ActivitySeqRowSchema).min(1),\n resourceMap: z.array(ResourceMapRowSchema).default([]),\n assessmentMap: z.array(AssessmentMapRowSchema).default([]),\n artifactContract: z.array(ArtifactContractRowSchema).default([]),\n lessonFlow: z.array(LessonFlowPhaseSchema).min(1),\n teacherNotes: z.string().optional().default(''),\n troubleshooting: z.array(TroubleshootingRowSchema).default([]),\n});\n\n// โโโ LESSON_EDP: Engineering Design Process โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Lesson Plan Schema โ EDP (Engineering Design Process) Model\n * Template: LESSON_EDP_template.md\n * Phases: Ask โ Imagine โ Plan โ Create โ Test & Improve โ Share & Evaluate\n */\nexport const EDPPhaseEnum = z.enum([\n 'Ask',\n 'Imagine',\n 'Plan',\n 'Create',\n 'Test & Improve',\n 'Share & Evaluate',\n]);\n\nexport const LessonPlanEDPSchema = LessonBaseSchema.extend({\n artifactType: z.literal('LESSON_EDP').default('LESSON_EDP'),\n});\n\nexport type LessonPlanEDP = z.infer<typeof LessonPlanEDPSchema>;\n\n// โโโ LESSON_5E: 5E Instructional Model โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Lesson Plan Schema โ 5E Instructional Model\n * Template: LESSON_5E_template.md\n * Phases: Engage โ Explore โ Explain โ Elaborate โ Evaluate\n */\nexport const FiveEPhaseEnum = z.enum([\n 'Engage',\n 'Explore',\n 'Explain',\n 'Elaborate',\n 'Evaluate',\n]);\n\n/** Additional 5E-specific Lesson Flow fields */\nexport const FiveEFlowPhaseSchema = LessonFlowPhaseSchema.extend({\n hookScenario: z.string().optional().describe('Hook story/roleplay for Engage phase (5E-specific)'),\n openQuestion: z.string().optional().describe('Explicit guiding question posed to class'),\n visualIllustration: z.string().optional().describe('Mermaid diagram, code, or JSON snippet for Explain phase'),\n tieredScaffolding: z.object({\n bronze: z.string().default(''),\n silver: z.string().default(''),\n gold: z.string().default(''),\n }).optional(),\n exitTicketQuestions: z.array(z.string()).optional(),\n});\n\nexport const LessonPlan5ESchema = LessonBaseSchema.extend({\n artifactType: z.literal('LESSON_5E').default('LESSON_5E'),\n lessonFlow: z.array(FiveEFlowPhaseSchema).min(1),\n keywords: z.array(z.string()).default([]),\n}).omit({ lessonFlow: true }).extend({\n lessonFlow: z.array(FiveEFlowPhaseSchema).min(1),\n});\n\nexport type LessonPlan5E = z.infer<typeof LessonPlan5ESchema>;\n\n// โโโ Legacy LESSON schema (kept for backward compatibility) โโโโโโโโโโโโโโโโโโ\n\nexport const CoreConceptSchema = z.object({\n name: z.string(),\n analogy: z.string().default(''),\n technicalDepth: z.string().default(''),\n comparisonTable: z.object({\n headers: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n }).optional(),\n formulaOrRule: z.string().optional().default(''),\n});\n\nexport const LessonSectionSchema = z.object({\n title: z.string(),\n durationMinutes: z.coerce.number().default(15),\n teacherActions: z.string().default(''),\n studentActions: z.string().default(''),\n analogies: z.array(z.string()).optional().default([]),\n formativeCheck: z.string().optional().default(''),\n});\n\n/**\n * @deprecated Use LessonPlanEDPSchema or LessonPlan5ESchema instead.\n * Kept for backward compatibility with existing data.\n */\nexport const LessonPlanSchema = z.object({\n artifactType: z.literal('LESSON').default('LESSON'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('vi'),\n topic: z.string().default('General Topic'),\n targetGradeOrAudience: z.string().default('Learners'),\n overview: z.string(),\n learningObjectives: z.array(z.object({\n code: z.string().default('LO'),\n name: z.string().optional().default(''),\n description: z.string(),\n bloomLevel: z.string().default('understand'),\n successCriteria: z.string().optional().default(''),\n })).default([]),\n prerequisites: z.string().optional().default(''),\n materialsSummary: z.string().optional().default(''),\n keywords: z.array(z.string()).optional().default([]),\n hookTitle: z.string().optional().default(''),\n hookScenario: z.string().default(''),\n hookQuestions: z.array(z.string()).optional().default([]),\n coreConcepts: z.array(CoreConceptSchema).optional().default([]),\n guidedPractice: z.object({\n title: z.string().default(''),\n explanation: z.string().default(''),\n codeSnippet: z.string().default(''),\n codeLanguage: z.string().default('typescript'),\n mermaidDiagram: z.string().optional().default(''),\n }).optional(),\n independentPractice: z.object({\n title: z.string().default(''),\n description: z.string().default(''),\n }).optional(),\n differentiation: z.object({\n bronzeTier: z.string().default(''),\n silverTier: z.string().default(''),\n goldTier: z.string().default(''),\n }).default({ bronzeTier: '', silverTier: '', goldTier: '' }),\n sections: z.array(LessonSectionSchema).min(1),\n exitTicket: z.object({\n questionStem: z.string(),\n expectedAnswerOrRubric: z.string().default(''),\n metacognitivePrompt: z.string().default(''),\n }),\n teacherNotes: z.object({\n commonPitfalls: z.array(z.string()).default([]),\n troubleshootingMatrix: z.array(TroubleshootingRowSchema).default([]),\n extensionNotes: z.string().optional().default(''),\n }).optional().default({ commonPitfalls: [], troubleshootingMatrix: [], extensionNotes: '' }),\n});\n\nexport type LessonPlan = z.infer<typeof LessonPlanSchema>;\nexport type CoreConcept = z.infer<typeof CoreConceptSchema>;\nexport type TroubleshootingRow = z.infer<typeof TroubleshootingRowSchema>;\nexport type ActivitySeqRow = z.infer<typeof ActivitySeqRowSchema>;\nexport type LessonFlowPhase = z.infer<typeof LessonFlowPhaseSchema>;\nexport type LearningObjectiveRow = z.infer<typeof LearningObjectiveRowSchema>;\n","import { z } from 'zod';\n\n/**\n * Activity Lab Schema โ Hands-on Step-by-Step Inquiry-Based Practical Lab\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/ACT_template.md\n */\nexport const ActivityStepSchema = z.object({\n stepNumber: z.coerce.number().default(1),\n title: z.string().describe('Short descriptive title of this step'),\n durationMinutes: z.coerce.number().default(10).describe('Estimated duration for this step'),\n teacherInstructions: z.string().default('').describe('Guidance and checkpoint tips for the teacher'),\n studentInstructions: z.string().describe('Direct, clear, actionable step-by-step instructions for students'),\n checkpoint: z.string().optional().default('').describe('Clear observable checkpoint or success indicator for this step'),\n});\n\nexport const ComputationalThinkingSchema = z.object({\n problemStatement: z.string().describe('Tรฌnh huแปng thแปฑc tแบฟ ฤแบงy thรกch thแปฉc cแบงn giแบฃi quyแบฟt'),\n decomposition: z.array(z.string()).describe('Cรกc bฦฐแปc phรขn rรฃ bร i toรกn lแปn thร nh cรกc phแบงn nhแป'),\n algorithmDesign: z.string().describe('Thiแบฟt kแบฟ luแปng thuแบญt toรกn vร xแปญ lรฝ dแปฏ liแปu trฦฐแปc khi code'),\n});\n\nexport const ActiveLearningWorkflowSchema = z.object({\n phase1Planning: z.object({\n durationMinutes: z.coerce.number().default(15),\n studentTask: z.string().describe('Vแบฝ sฦก ฤแป, thiแบฟt kแบฟ luแปng trรชn giแบฅy/bแบฃng trฦฐแปc khi gรต phรญm'),\n teacherAction: z.string().describe('Quan sรกt vร ฤแบทt cรขu hแปi gแปฃi mแป (Inquiry questions)'),\n inquiryQuestions: z.array(z.string()).default([]),\n }),\n phase2Implementation: z.object({\n durationMinutes: z.coerce.number().default(40),\n studentTask: z.string().describe('Hiแปn thแปฑc hรณa giแบฃi phรกp qua code hoแบทc lแบฏp rรกp phแบงn cแปฉng'),\n teacherAction: z.string().describe('Hแป trแปฃ khi hแปc sinh bแป tแบฏc > 5 phรบt, trรกnh lร m hแป'),\n codeOrCommands: z.array(z.string()).default([]),\n }),\n phase3Debugging: z.object({\n durationMinutes: z.coerce.number().default(15),\n testingSteps: z.string().describe('Quy trรฌnh chแบกy thแปญ nghiแปm vร kiแปm tra ฤแบงu ra'),\n errorAnalysis: z.string().describe('Phรขn tรญch mรฃ lแปi vร tแปฑ gแปก lแปi dแปฑa trรชn bแบฃng Troubleshooting'),\n }),\n});\n\nexport const ActivityLabSchema = z.object({\n artifactType: z.literal('ACT').default('ACT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Activity title'),\n language: z.string().default('vi').describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n objective: z.string().describe('Core hands-on objective of the activity'),\n totalDurationMinutes: z.coerce.number().default(60).describe('Total estimated duration of the activity'),\n \n // 1. Computational Thinking Focus\n computationalThinking: ComputationalThinkingSchema.optional(),\n\n // 2. Bill of Materials (BOM)\n materialsBOM: z.object({\n hardware: z.array(z.string()).default([]).describe('Hardware boards, components, sensors, or devices required (bแปc trong <!-- [HARDWARE_BOM] -->)'),\n software: z.array(z.string()).default([]).describe('IDE, compilers, browser tools, libraries, or simulators required'),\n consumables: z.array(z.string()).default([]).describe('Paper, pens, wires, or disposable items'),\n otherResources: z.array(z.string()).default([]).describe('Worksheets, handouts, or reference links'),\n }),\n\n // 3. Constraints & Safety\n safetyWarnings: z.array(z.string()).default([]).describe('Essential safety cautions, electrical warnings, or common hazards'),\n designConstraints: z.array(z.string()).default([]).describe('Design constraints to stimulate creative problem solving'),\n teacherTips: z.array(z.string()).default([]).describe('Pedagogical facilitation tips, troubleshooting tricks'),\n\n // 4. Workflow (Phases or Steps)\n activeLearningWorkflow: ActiveLearningWorkflowSchema.optional(),\n steps: z.array(ActivityStepSchema).default([]).describe('Step-by-step procedure of the activity'),\n\n // 5. Differentiation (3-Tier)\n differentiation3Tier: z.object({\n bronzeTier: z.string().default('').describe('Nhiแปm vแปฅ nแปn tแบฃng cฦก bแบฃn'),\n silverTier: z.string().default('').describe('Nhiแปm vแปฅ แปฉng dแปฅng logic nรขng cao'),\n goldTier: z.string().default('').describe('Thแปญ thรกch sรกng tแบกo mแป rแปng'),\n }).optional(),\n scaffoldingSupport: z.string().default('').describe('How to simplify for struggling students'),\n levelUpExtension: z.string().default('').describe('Extension task for students who finish early'),\n\n // 6. Reflection\n reflectionQuestion: z.string().optional().default('').describe('Cรขu hแปi phแบฃn tฦฐ kรญch thรญch tฦฐ duy phแบฃn biแปn'),\n});\n\nexport type ActivityLab = z.infer<typeof ActivityLabSchema>;\nexport type ComputationalThinking = z.infer<typeof ComputationalThinkingSchema>;\nexport type ActiveLearningWorkflow = z.infer<typeof ActiveLearningWorkflowSchema>;\n","import { z } from 'zod';\n\n/**\n * Code Lab Schema โ Executable Source Code, Starters, Solutions & Test Cases\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/LAB_TEMPLATE.md\n */\nexport const CodeSnippetSchema = z.object({\n filename: z.string().describe('Filename with extension, e.g. main.py, App.swift, solution.ts'),\n language: z.string().describe('Programming language identifier, e.g. python, swift, typescript, cpp'),\n purpose: z.enum(['starter', 'solution', 'test_runner', 'scaffold']).describe('Role of this code file'),\n content: z.string().describe('Complete, clean, runnable source code with standardized comments and docstrings'),\n explanation: z.string().default('').describe('Explanation of key algorithmic blocks and syntax nuances'),\n});\n\nexport const LabTierTaskSchema = z.object({\n mins: z.coerce.number().default(15),\n objective: z.string().describe('Mแปฅc tiรชu cแปงa tแบงng nhiแปm vแปฅ'),\n task: z.string().describe('Mรด tแบฃ nhiแปm vแปฅ cแปฅ thแป'),\n requirement: z.string().describe('Tiรชu chรญ hoร n thร nh bแบฏt buแปc'),\n});\n\nexport const CodeLabSchema = z.object({\n artifactType: z.literal('CODE').default('CODE'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Code Lab title'),\n language: z.string().default('vi').describe('Language code for human explanations, e.g. \"vi\" or \"en\"'),\n techStack: z.array(z.string()).default([]).describe('Technologies used, e.g. [\"Python\", \"PyTorch\"] or [\"Swift\", \"SwiftUI\"]'),\n \n // 1. Environment & Setup\n environmentSetup: z.object({\n languageFramework: z.string().default(''),\n ideEditor: z.string().default(''),\n requiredLibraries: z.array(z.string()).default([]),\n hardwareOrEnvConnection: z.string().optional().default(''),\n }).optional(),\n\n // 2. 3-Tier Differentiation Tasks\n threeTierTasks: z.object({\n bronze: LabTierTaskSchema,\n silver: LabTierTaskSchema,\n gold: LabTierTaskSchema,\n }).optional(),\n\n // 3. Verified Runnable Code Snippets (bแปc trong <!-- [SME_MANDATE] -->)\n starterCode: CodeSnippetSchema.describe('Starter code provided to the learner with fill-in markers or skeletons'),\n solutionCode: CodeSnippetSchema.describe('Complete verified reference solution code'),\n testCases: z.array(\n z.object({\n description: z.string().describe('What this test case verifies'),\n input: z.string().optional().default('').describe('Input or mock parameters'),\n expectedOutput: z.string().describe('Expected return value, output, or UI state'),\n })\n ).default([]).describe('Automated verification tests or validation checks'),\n\n // 4. Troubleshooting & Debugging Matrix\n troubleshootingMatrix: z.array(\n z.object({\n issue: z.string().describe('Hiแปn tฦฐแปฃng lแปi runtime/compile'),\n potentialCause: z.string().describe('Nguyรชn nhรขn tiแปm แบฉn'),\n solution: z.string().describe('Giแบฃi phรกp khแบฏc phแปฅc dแปฉt ฤiแปm'),\n })\n ).default([]),\n commonBugsAndFixes: z.array(\n z.object({\n bugDescription: z.string().describe('Common error message or logical pitfall'),\n solutionHint: z.string().describe('How to diagnose and fix it'),\n })\n ).default([]),\n\n // 5. Submission Checklist\n submissionChecklist: z.array(z.string()).default([]).describe('Danh mแปฅc kiแปm tra hoร n thร nh nแปp bร i'),\n});\n\nexport type CodeLab = z.infer<typeof CodeLabSchema>;\nexport type CodeSnippet = z.infer<typeof CodeSnippetSchema>;\nexport type LabTierTask = z.infer<typeof LabTierTaskSchema>;\n","import { z } from 'zod';\n\n// โโโ Worksheet Item โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const WorksheetItemTypeEnum = z.enum([\n 'fill_blank', // Fill in the blanks sentence/table\n 'multiple_choice', // Select the correct option\n 'matching', // Match left column to right column\n 'short_answer', // Open-ended text response\n 'code_trace', // Trace through code and write output\n 'diagram_fill', // Complete a circuit/flow diagram\n 'true_false', // True or False statement\n 'ordering', // Arrange steps/phases in correct order\n]);\n\nexport const WorksheetItemSchema = z.object({\n itemNumber: z.coerce.number().int().default(1),\n itemType: WorksheetItemTypeEnum,\n prompt: z.string().describe('The question, fill-in stem, or task instruction'),\n starterContent: z.string().optional().describe(\n 'Pre-filled content: code with blanks, table skeleton, diagram description, or matching columns'\n ),\n options: z.array(z.string()).optional().describe('Options for multiple_choice / true_false items'),\n answerKey: z.string().optional().describe('Expected answer for teacher use'),\n checkpointRequired: z.boolean().default(false).describe(\n 'If true, student must get teacher sign-off before proceeding'\n ),\n});\n\n// โโโ Worksheet Part โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const WorksheetPartSchema = z.object({\n partNumber: z.coerce.number().int(),\n partTitle: z.string().describe('e.g. \"Knowledge Check\", \"Guided Practice\", \"Concept Tracing\", \"Reflection\"'),\n objective: z.string().optional().default(''),\n items: z.array(WorksheetItemSchema).min(1),\n checkpointInstruction: z.string().optional().describe(\n 'Instruction shown at the end of this part, e.g. \"โ Hoร n thร nh Part 1 โ Xin giรกo viรชn kiแปm tra\"'\n ),\n});\n\n// โโโ Full Worksheet โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Worksheet Schema โ Student-Facing Guided Practice Document\n * Template: WKS_template.md\n * Sections: Knowledge Check โ Guided Practice โ Reflection\n * (Actual lessons expand to 4-5 parts with circuit/code tasks)\n */\nexport const WorksheetSchema = z.object({\n artifactType: z.literal('WKS').default('WKS'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Student header fields\n studentName: z.string().optional().default(''),\n classLabel: z.string().optional().default(''),\n\n // Main content: array of Parts (Part 1: Knowledge Check, Part 2: Guided Practice, etc.)\n parts: z.array(WorksheetPartSchema).min(1),\n\n // Reflection / Computational Thinking prompts (Part 3 in template, standalone)\n reflectionPrompts: z.array(z.string()).default([]),\n});\n\nexport type Worksheet = z.infer<typeof WorksheetSchema>;\nexport type WorksheetPart = z.infer<typeof WorksheetPartSchema>;\nexport type WorksheetItem = z.infer<typeof WorksheetItemSchema>;\n","import { z } from 'zod';\n\n/**\n * Handout Schema โ Student-Facing Quick-Reference Cheat Sheet (5-Second Rule)\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/HANDOUT_template.md\n */\nexport const HandoutSectionSchema = z.object({\n heading: z.string().describe('Short descriptive section heading (Max 3 levels)'),\n summaryPoints: z.array(z.string()).describe('Scannable bullet points in second-person voice (You will...)'),\n codeSnippet: z.string().optional().describe('Essential copy-paste ready syntax or command'),\n tableData: z.object({\n headers: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n }).optional().describe('Structured table for comparisons or hardware pinouts'),\n calloutBox: z.object({\n type: z.string().default('key_formula'),\n title: z.string(),\n content: z.string(),\n }).optional(),\n});\n\nexport const HandoutSchema = z.object({\n artifactType: z.literal('HANDOUT').default('HANDOUT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Handout title'),\n language: z.string().default('vi').describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n tagline: z.string().default('').describe('1-sentence core takeaway'),\n\n // 1. Core Concepts Summary\n coreConceptsSummary: z.array(\n z.object({\n concept: z.string().describe('Tรชn khรกi niแปm'),\n definition: z.string().describe('ฤแปnh nghฤฉa ngแบฏn gแปn, chuแบฉn 5-second'),\n })\n ).default([]),\n\n // 2. Syntax & Configs Table\n syntaxTable: z.array(\n z.object({\n syntax: z.string().describe('Cรบ phรกp lแปnh hoแบทc tรชn Node/Config'),\n meaning: z.string().describe('ร nghฤฉa & chแปฉc nฤng'),\n example: z.string().describe('Vรญ dแปฅ code hoแบทc cแบฅu hรฌnh mแบซu'),\n })\n ).default([]),\n\n // 3. General 3-Step Problem Solving Procedure\n problemSolvingProcedure: z.object({\n step1Trigger: z.string().default('Xรกc ฤแปnh input/trigger kรญch hoแบกt'),\n step2Logic: z.string().default('Xแปญ lรฝ logic, tรญnh toรกn hoแบทc lแปc dแปฏ liแปu'),\n step3Output: z.string().default('Xuแบฅt kแบฟt quแบฃ, cแบญp nhแบญt trแบกng thรกi hoแบทc gแปญi cแบฃnh bรกo'),\n }).optional().default({\n step1Trigger: 'Xรกc ฤแปnh input/trigger kรญch hoแบกt',\n step2Logic: 'Xแปญ lรฝ logic, tรญnh toรกn hoแบทc lแปc dแปฏ liแปu',\n step3Output: 'Xuแบฅt kแบฟt quแบฃ, cแบญp nhแบญt trแบกng thรกi hoแบทc gแปญi cแบฃnh bรกo',\n }),\n\n // 4. Pro Tips\n proTips: z.array(z.string()).default([]).describe('Mแบนo thแปฑc chiแบฟn hแปฏu รญch'),\n\n // 5. Sections & Glossary (Backward Compatibility)\n sections: z.array(HandoutSectionSchema).default([]).describe('Scannable reference sections'),\n glossary: z.array(\n z.object({\n term: z.string().describe('Technical term or acronym'),\n definition: z.string().describe('Plain, jargon-free explanation'),\n })\n ).default([]).describe('Zero-jargon glossary of terms introduced in this lesson'),\n});\n\nexport type Handout = z.infer<typeof HandoutSchema>;\nexport type HandoutSection = z.infer<typeof HandoutSectionSchema>;\n","import { z } from 'zod';\n\n/**\n * Slide Deck Schema โ Dynamic Micro-Pedagogy Marp Presentation Deck\n * Dynamic Sizing: 4-6 slides per core concept + opening/closing anchors (9-25+ slides)\n */\nexport const MarpSlideSchema = z.object({\n slideNumber: z.number().int().min(1).max(60),\n slideType: z.enum([\n 'title',\n 'agenda',\n 'review',\n 'hook',\n 'concept_def',\n 'concept_visual',\n 'concept_compare',\n 'concept_check',\n 'concept_recap',\n 'code_demo',\n 'guided_practice',\n 'activity_intro',\n 'activity_steps',\n 'checkpoint',\n 'exit_ticket',\n 'summary_next',\n 'custom',\n ]),\n title: z.string().describe('Slide title or headline'),\n bloomTag: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create', 'None']).default('None'),\n bulletPoints: z.array(z.string()).max(6).describe('Concise bullet points, max 15 words each'),\n codeSnippet: z.string().optional().describe('Formatted fenced code block for demo'),\n diagramMermaid: z.string().optional().describe('Mermaid diagram definition for visual concepts'),\n presenterNotes: z.string().optional().describe('Teacher speaker notes hidden in presentation mode'),\n});\n\nexport const SlideDeckSchema = z.object({\n artifactType: z.literal('SLIDE').default('SLIDE'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Presentation title'),\n language: z.string().describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n marpTheme: z.string().default('gaia'),\n slides: z.array(MarpSlideSchema).min(6).max(60).describe('Sequential Marp slides scaled dynamically by knowledge volume'),\n});\n\nexport type MarpSlide = z.infer<typeof MarpSlideSchema>;\nexport type SlideDeck = z.infer<typeof SlideDeckSchema>;\n","import { z } from 'zod';\n\n// โโโ Teaching Script Phase โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const TeachingScriptPhaseSchema = z.object({\n phase: z.string().describe(\n 'Phase label from GUIDE template: \"Hook / Engage\" | \"Explore / Core Concepts\" | \"Elaborate / Hands-on Activity\" | \"Evaluate / Wrap-up\"'\n ),\n durationRange: z.string().describe('e.g. \"5-10 minutes\"'),\n delivery: z.string().describe('Real-world story, demo, analogy, or inquiry activity'),\n keyPoints: z.string().describe('What to emphasize; what to skip if running late'),\n quickCheckQuestions: z.array(z.string()).default([]).describe('2-3 rapid comprehension check questions'),\n classroomManagement: z.string().optional().describe('Grouping, device management, seating'),\n facilitation: z.string().optional().describe('When to intervene vs. let students struggle productively'),\n proTips: z.string().optional().describe('Experience-based tips for this specific activity'),\n});\n\n// โโโ Misconception entry โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const MisconceptionSchema = z.object({\n misconception: z.string().describe('What students often wrongly assume or confuse'),\n counterStrategy: z.string().describe('How the teacher should explain or demonstrate the truth'),\n});\n\n// โโโ Troubleshooting entry โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const TroubleshootingEntrySchema = z.object({\n symptom: z.string().describe('Error message or hardware failure symptom'),\n rootCause: z.string().describe('Why this occurs'),\n solution: z.string().describe('Exact step to fix it'),\n});\n\n// โโโ Scoring Rubric row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ScoringRubricRowSchema = z.object({\n criteriaName: z.string(),\n meetsStandard: z.string().describe('Description of acceptable student performance'),\n exceedsStandard: z.string().describe('Description of advanced mastery'),\n});\n\n// โโโ Teacher Guide โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Teacher Guide Schema โ Pedagogical Facilitation Script\n * Template: GUIDE_template.md\n * Sections:\n * 1. Objectives & Preparation\n * 2. Teaching Script & Progression (Hook โ Explore โ Elaborate โ Evaluate)\n * 3. Troubleshooting & FAQs\n * 4. Assessment & Differentiation Tips\n */\nexport const TeacherGuideSchema = z.object({\n artifactType: z.literal('GUIDE').default('GUIDE'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // 1. Objectives & Preparation\n pedagogicalRationale: z.string().describe('The main instructional goal โ mindset shift, not just knowledge'),\n commonMisconceptions: z.array(MisconceptionSchema).min(1),\n technicalChecklist: z.array(z.string()).default([]).describe(\n 'Software/hardware to install; links to have open before class'\n ),\n\n // 2. Teaching Script & Progression\n teachingScript: z.array(TeachingScriptPhaseSchema).min(1).describe(\n 'Ordered phases: Hook/Engage โ Explore/Core Concepts โ Elaborate/Hands-on โ Evaluate/Wrap-up'\n ),\n\n // 3. Troubleshooting & FAQs\n troubleshootingGuide: z.array(TroubleshootingEntrySchema).min(1),\n\n // 4. Assessment & Differentiation\n scoringRubric: z.array(ScoringRubricRowSchema).default([]),\n differentiationTips: z.object({\n proficient: z.string().describe('Minimum threshold description for proficiency'),\n advanced: z.string().describe('Extension tasks / Peer mentoring opportunities'),\n enrichmentQuestion: z.string().optional().describe('1-2 deep-thinking questions for gifted students'),\n }).optional(),\n});\n\nexport type TeacherGuide = z.infer<typeof TeacherGuideSchema>;\nexport type TeachingScriptPhase = z.infer<typeof TeachingScriptPhaseSchema>;\nexport type TroubleshootingEntry = z.infer<typeof TroubleshootingEntrySchema>;\nexport type Misconception = z.infer<typeof MisconceptionSchema>;\n","import { z } from 'zod';\n\n/**\n * Extension Schema โ Advanced Challenges & Novel Context Problems\n */\nexport const ExtensionChallengeSchema = z.object({\n challengeNumber: z.number().int().min(1),\n title: z.string().describe('Catchy title for the extension project'),\n contextDescription: z.string().describe('Novel real-world context for applying the skill'),\n taskDescription: z.string().describe('Specific goal and requirements of the challenge'),\n expectedDeliverable: z.string().describe('What the student produces (code, prototype, report)'),\n hintOrGuidance: z.string().optional().describe('Open-ended exploration prompt'),\n});\n\nexport const ExtensionSchema = z.object({\n artifactType: z.literal('EXT').default('EXT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Extension title'),\n language: z.string().describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n coreLearningObjectivePreserved: z.string().describe('The core LO that this challenge extends'),\n challenges: z.array(ExtensionChallengeSchema).min(2).describe('At least 2 diverse extension challenges'),\n});\n\nexport type Extension = z.infer<typeof ExtensionSchema>;\n","import { z } from 'zod';\n\n/**\n * LLM-as-Judge Schema โ Pedagogical & Technical Quality Audit Report\n */\nexport const QualityAuditVerdictSchema = z.enum(['PASS', 'NEEDS_REVISION', 'FAIL']);\n\nexport const JudgeCriterionSchema = z.object({\n name: z.string().describe('Criterion name, e.g. Bloom Alignment, Code Validity, Word Count Gate, Language Adherence'),\n passed: z.boolean(),\n score: z.number().min(0).max(100).describe('Score out of 100'),\n feedback: z.string().describe('Constructive feedback or citation of issues'),\n});\n\nexport const CurriculumQualityReportSchema = z.object({\n targetArtifactType: z.string().describe('Type of artifact audited, e.g. LESSON, ACT, CODE, WKS, SLIDE'),\n lessonId: z.string(),\n overallVerdict: QualityAuditVerdictSchema,\n totalScore: z.number().min(0).max(100),\n languageAdherencePassed: z.boolean().describe('True if content strictly matches the requested target language'),\n criteria: z.array(JudgeCriterionSchema).min(3),\n actionableRepairPrompts: z.array(z.string()).default([]).describe('Concrete instruction prompts to fix detected issues in the next repair turn'),\n});\n\nexport type CurriculumQualityReport = z.infer<typeof CurriculumQualityReportSchema>;\n","import { z } from 'zod';\n\n/**\n * Project Profile & General Info\n */\nexport const ProjectProfileSchema = z.object({\n id: z.string().optional(),\n name: z.string(),\n version: z.string().optional(),\n purpose: z.string().optional(),\n project_type: z.string().optional(),\n platform: z.array(z.string()).optional().default([]),\n tech_stack: z.union([z.record(z.array(z.string())), z.array(z.string()), z.record(z.string())]).optional().default([]),\n architecture: z.array(z.string()).optional().default([]),\n source: z.object({\n repository: z.string().optional(),\n commit: z.string().optional(),\n scan_dir: z.string().optional(),\n }).optional(),\n});\n\nexport type ProjectProfile = z.infer<typeof ProjectProfileSchema>;\n\n/**\n * Product Goals & User Journeys\n */\nexport const ProductGoalSchema = z.object({\n id: z.string(),\n description: z.string(),\n});\n\nexport const UserJourneySchema = 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\n/**\n * Project Graph Schema โ Full knowledge graph of a software/hardware project\n */\nexport const ProjectGraphSchema = z.object({\n schema_version: z.number().optional().default(3),\n project: ProjectProfileSchema,\n product: z.object({\n goals: z.array(ProductGoalSchema).optional().default([]),\n users: z.array(z.any()).optional().default([]),\n journeys: z.array(UserJourneySchema).optional().default([]),\n requirements: z.array(z.any()).optional().default([]),\n }).optional().default({}),\n features: z.array(z.object({\n id: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n components: z.array(z.string()).optional().default([]),\n requirements: z.array(z.any()).optional().default([]),\n })).optional().default([]),\n capabilities: z.array(z.any()).optional().default([]),\n architecture: z.any().optional(),\n experience: z.any().optional(),\n data_integration: z.any().optional(),\n implementation: z.object({\n files: z.array(z.any()).optional().default([]),\n symbols: z.array(z.any()).optional().default([]),\n modules: z.array(z.any()).optional().default([]),\n }).optional().default({}),\n validation: z.any().optional(),\n evidence: z.any().optional(),\n});\n\nexport type ProjectGraph = z.infer<typeof ProjectGraphSchema>;\n","import { z } from 'zod';\n\n/**\n * Step schema matching Instructable-style tutorial format from tutorial.md\n */\nexport const InstructionStepSchema = z.object({\n stepNumber: z.string().default('1.1').describe('e.g. \"1.1\", \"1.2\"'),\n actionTitle: z.string().describe('Action verb title, e.g. \"Create Bonjour Discovery Browser\"'),\n explanation: z.string().describe('Explanation of why this action is performed and how it works'),\n targetFile: z.string().optional().default('').describe('Relative path of the target file being created or edited, e.g. \"Sources/WledLib/Discovery/BonjourBrowser.swift\"'),\n codeSnippet: z.string().optional().default('').describe('Complete or focused code snippet following grow-by-step or snippet-per-step style'),\n codeLanguage: z.string().optional().default('swift').describe('Language for syntax highlighting, e.g. \"swift\", \"typescript\", \"cpp\", \"bash\"'),\n tip: z.string().optional().default('').describe('Helpful operational tip or best practice'),\n warning: z.string().optional().default('').describe('Operational gotcha or critical warning'),\n expectedResult: z.string().default('').describe('Explicit observable output or success condition after completing this step'),\n imagePlaceholder: z.string().optional().default('').describe('Description of visual screenshot or diagram placeholder [IMAGE: ...]'),\n});\n\nexport const InstructionSectionSchema = z.object({\n sectionNumber: z.coerce.number().default(1),\n title: z.string().describe('Section title'),\n goal: z.string().describe('What the reader achieves in this section'),\n estimatedMinutes: z.coerce.number().default(15),\n preflightChecks: z.array(z.string()).default([]).describe('Commands or conditions to check before starting this section'),\n steps: z.array(InstructionStepSchema).min(1),\n rollbackOrCleanup: z.string().optional().default('').describe('How to undo or reset state if something fails'),\n});\n\nexport const ProjectInstructionSchema = z.object({\n artifactType: z.literal('INSTRUCTION').default('INSTRUCTION'),\n instructionId: z.string().describe('Milestone or instruction ID, e.g. \"F0-S1\"'),\n title: z.string().describe('Tutorial title'),\n language: z.string().describe('Target language code, e.g. \"vi\" or \"en\"'),\n difficulty: z.string().default('intermediate'),\n estimatedTotalMinutes: z.coerce.number().default(45).describe('Total estimated duration in minutes'),\n scopeMode: z.string().default('milestone'),\n milestoneRef: z.string().optional().default('').describe('Milestone code or ID'),\n featureRef: z.string().optional().default('').describe('Feature ID or name'),\n techStack: z.array(z.string()).default([]).describe('List of tools, SDKs, libraries'),\n prerequisites: z.array(z.string()).default([]).describe('Prerequisites assumed before starting'),\n materialsAndTools: z.array(z.string()).default([]).describe('Required software, SDKs, accounts, or simulators'),\n sections: z.array(InstructionSectionSchema).min(1),\n verificationChecklist: z.array(z.string()).default([]).describe('Final end-to-end verification checklist to confirm working implementation'),\n});\n\nexport type InstructionStep = z.infer<typeof InstructionStepSchema>;\nexport type InstructionSection = z.infer<typeof InstructionSectionSchema>;\nexport type ProjectInstruction = z.infer<typeof ProjectInstructionSchema>;\n","import { z } from 'zod';\n\n/**\n * 3-Level Progressive Hints Schema (Concept -> Skeleton -> Full Solution)\n */\nexport const ProgressiveHintsSchema = z.object({\n hint1Concept: z.string().describe('Level 1: Gแปฃi รฝ ฤแปnh hฦฐแปng tฦฐ duy / khรกi niแปm cแปt lรตi'),\n hint2Skeleton: z.string().describe('Level 2: Khung sฦฐแปn code / method signature mแบซu'),\n hint3Solution: z.object({\n code: z.string().describe('Level 3: Lแปi giแบฃi code hoร n chแปnh 100% runnable'),\n explanation: z.string().describe('Phรขn tรญch tแบกi sao giแบฃi phรกp nร y tแปi ฦฐu vร xแปญ lรฝ ฤฦฐแปฃc vแบฅn ฤแป'),\n }),\n});\n\n/**\n * Self-Learner Progressive Challenge Schema\n */\nexport const SelfPacedChallengeSchema = z.object({\n tier: z.enum(['bronze', 'silver', 'gold']),\n title: z.string().describe('Tรชn thแปญ thรกch'),\n estimatedMinutes: z.coerce.number().default(15),\n objective: z.string().describe('Mแปฅc tiรชu cแปฅ thแป cแปงa thแปญ thรกch'),\n tasks: z.array(z.string()).describe('Danh sรกch nhiแปm vแปฅ tแปซng bฦฐแปc cแบงn lร m'),\n verifyCommand: z.string().describe('Lแปnh terminal hoแบทc test runner ฤแป tแปฑ kiแปm chแปฉng (VD: curl... hoแบทc swift test)'),\n expectedOutput: z.string().describe('Kแบฟt quแบฃ mong ฤแปฃi hiแปn thแป trรชn terminal khi chแบกy ฤรบng'),\n hints: ProgressiveHintsSchema,\n});\n\nexport const SelfLabSchema = z.object({\n artifactType: z.literal('SELF_LAB').default('SELF_LAB'),\n labId: z.string().describe('Identifier matching milestone (e.g. F0-S1)'),\n title: z.string().describe('Lab title'),\n language: z.string().default('vi').describe('Language code of content, e.g. \"vi\" or \"en\"'),\n difficulty: z.enum(['beginner', 'intermediate', 'advanced']).default('intermediate'),\n estimatedTotalMinutes: z.coerce.number().default(60),\n techStack: z.array(z.string()).default([]),\n \n // Mission Briefing & Preflight\n missionBriefing: z.string().describe('Bแปi cแบฃnh kแปch bแบฃn vร nhiแปm vแปฅ cแปงa bร i lab'),\n preflightChecklist: z.array(z.string()).default([]).describe('Danh mแปฅc kiแปm tra mรดi trฦฐแปng trฦฐแปc khi bแบฏt ฤแบงu'),\n\n // 3 Progressive Challenges (Bronze -> Silver -> Gold)\n challenges: z.object({\n bronze: SelfPacedChallengeSchema,\n silver: SelfPacedChallengeSchema,\n gold: SelfPacedChallengeSchema,\n }),\n\n // Troubleshooting Matrix\n troubleshootingMatrix: z.array(\n z.object({\n symptom: z.string().describe('Triแปu chแปฉng hoแบทc thรดng bรกo lแปi'),\n rootCause: z.string().describe('Nguyรชn nhรขn gแปc rแป
'),\n exactFix: z.string().describe('Hฦฐแปng dแบซn sแปญa lแปi chรญnh xรกc tแปซng bฦฐแปc'),\n })\n ).default([]),\n\n // Final Checklist\n finalSubmissionChecklist: z.array(z.string()).default([]).describe('Danh mแปฅc kiแปm tra hoร n thร nh toร n bแป bร i lab'),\n});\n\nexport type SelfLab = z.infer<typeof SelfLabSchema>;\nexport type SelfPacedChallenge = z.infer<typeof SelfPacedChallengeSchema>;\nexport type ProgressiveHints = z.infer<typeof ProgressiveHintsSchema>;\n","import { z } from 'zod';\n\n// โโโ Quiz Assessment Objective (per template: ## Assessment Objectives) โโโโโโโ\n\nexport const AssessmentObjectiveSchema = z.object({\n aoCode: z.string().describe('Assessment Objective code, e.g. \"AO1\"'),\n alignedLO: z.string().describe('Matched learning objective code, e.g. \"LO1\"'),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create']),\n objective: z.string().describe('Measurable assessment objective statement'),\n /** Standards anchors: \"statementId\" or \"packId:statementId\" from adopted Framework Packs (Phase 1: optional). */\n standardRefs: z.array(z.string()).optional().default([]).describe('Anchoring standard statement IDs from adopted Framework Packs'),\n});\n\n// โโโ Quiz Option โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const QuizOptionSchema = z.object({\n id: z.string().describe('Option label: \"A\" | \"B\" | \"C\" | \"D\"'),\n text: z.string().describe('Full text of the option (may be a table row, code snippet, or sentence)'),\n isCorrect: z.boolean().describe('True if this option is the correct answer'),\n explanation: z.string().describe('Detailed distractor rationale or confirmation why this is correct/incorrect'),\n});\n\n// โโโ Individual Question โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const DiagnosticQuestionSchema = z.object({\n id: z.string().describe('Question ID, e.g. \"Q1\"'),\n alignedAO: z.string().optional().describe('Matched AO code(s), e.g. \"AO1, AO2\"'),\n // Accept both PascalCase (new) and lowercase (legacy) for backward compat\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n 'remember', 'understand', 'apply', 'analyze', 'evaluate', 'create']).default('Apply'),\n questionType: z.enum(['multiple_choice', 'code_analysis', 'matching', 'open_ended']).default('multiple_choice'),\n // scenarioOrStem: PRIMARY field โ kept for backward compat with evaluators & serializers\n scenarioOrStem: z.string().optional().describe('Legacy combined field. Evaluators read this for stem analysis.'),\n // scenario + stem: richer decomposition for new content (both optional)\n scenario: z.string().optional().describe('Real-world context framing the question'),\n stem: z.string().optional().describe('The core question prompt (new authoring standard)'),\n codeSnippet: z.string().optional().describe('Code block for code analysis questions'),\n codeLanguage: z.string().optional().default('cpp'),\n options: z.array(QuizOptionSchema).min(2).max(6),\n // correctAnswer: optional for backward compat with old fixtures (legacy used isCorrect on options)\n correctAnswer: z.string().optional().describe('Correct option id, e.g. \"A\"'),\n teacherNote: z.string().optional().describe('Pedagogical note for assessor/teacher only'),\n // takeawayMessage: backward-compat alias for teacherNote\n takeawayMessage: z.string().optional().describe('@deprecated โ use teacherNote. Kept for serializer backward compat.'),\n});\n\n// โโโ 4-Level Competency Rubric (per template: ## Competency Rubric) โโโโโโโโโโ\n\nexport const CompetencyRubricRowSchema = z.object({\n competencyDimension: z.string().describe('Competency label with linked LO, e.g. \"C1: Hardware Integration (LO1)\"'),\n developing: z.string().describe('Level 1 โ does not meet standard'),\n proficient: z.string().describe('Level 2 โ meets standard'),\n advanced: z.string().describe('Level 3 โ exceeds standard'),\n exemplary: z.string().describe('Level 4 โ outstanding mastery'),\n});\n\n// โโโ Full Diagnostic Quiz โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Diagnostic Quiz Schema โ v4.6\n * Template: QUIZ_v4.6_template.md\n * Sections: Metadata โ Assessment Objectives โ MCQ Bank โ Code Analysis โ Competency Rubric\n */\nexport const DiagnosticQuizSchema = z.object({\n artifactType: z.literal('QUIZ'),\n quizId: z.string().describe('Matching artifact identifier, e.g. \"QUIZ_U03_M01_L13\"'),\n title: z.string(),\n language: z.string().default('en').describe('\"en\" or \"vi\"'),\n totalQuestions: z.coerce.number().optional().default(5),\n timeAllocationMinutes: z.coerce.number().optional().default(15),\n passingScorePct: z.coerce.number().default(80),\n\n // Assessment Objectives table (## [REQUIRED] Assessment Objectives)\n assessmentObjectives: z.array(AssessmentObjectiveSchema).optional().default([]),\n\n // Question bank (## [REQUIRED] Multiple-Choice + ## [REQUIRED] Code Analysis)\n questions: z.array(DiagnosticQuestionSchema).min(1),\n\n // Competency Rubric (## [REQUIRED] Competency Rubric)\n rubric: z.array(CompetencyRubricRowSchema).optional().default([]),\n});\n\n// Output types (after defaults are applied โ for reading/processing parsed data)\nexport type DiagnosticQuiz = z.infer<typeof DiagnosticQuizSchema>;\nexport type DiagnosticQuestion = z.infer<typeof DiagnosticQuestionSchema>;\nexport type QuizOption = z.infer<typeof QuizOptionSchema>;\nexport type AssessmentObjective = z.infer<typeof AssessmentObjectiveSchema>;\nexport type CompetencyRubricRow = z.infer<typeof CompetencyRubricRowSchema>;\n\n// Input types (for writing/authoring โ fields with defaults are optional)\nexport type DiagnosticQuizInput = z.input<typeof DiagnosticQuizSchema>;\nexport type DiagnosticQuestionInput = z.input<typeof DiagnosticQuestionSchema>;\n","import { z } from 'zod';\nimport { ProjectInstructionSchema } from './instructionSchema';\nimport { SelfLabSchema } from './selfLabSchema';\nimport { DiagnosticQuizSchema } from './diagnosticQuizSchema';\nimport { HandoutSchema } from './handoutSchema';\nimport { CodeLabSchema } from './codeLabSchema';\n\n/**\n * Self-Paced Learning Bundle Schema โ Autonomous Learner Package\n */\nexport const SelfPacedBundleSchema = z.object({\n bundleId: z.string().describe('Milestone identifier (e.g. F0-S1)'),\n title: z.string().describe('Bundle title'),\n language: z.string().default('vi'),\n techStack: z.array(z.string()).default([]),\n instruction: ProjectInstructionSchema.describe('Instructable Step-by-Step Blueprint'),\n selfLab: SelfLabSchema.describe('Self-Paced Lab with Progressive Hints & Verification Commands'),\n quiz: DiagnosticQuizSchema.describe('Diagnostic Quiz Kit with Comprehensive Feedback'),\n cheatSheet: HandoutSchema.describe('5-Second Rule Reference & Syntax Cheat Sheet'),\n codeLab: CodeLabSchema.optional().describe('Code Lab with Starter & Solution Code'),\n});\n\nexport type SelfPacedBundle = z.infer<typeof SelfPacedBundleSchema>;\n","import { z } from 'zod';\n\n// โโโ Rubric Criteria Row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const RubricCriteriaSchema = z.object({\n criteriaName: z.string().describe('Criteria label, e.g. \"Circuitry\" or \"Code Correctness\"'),\n weightPercent: z.coerce.number().int().min(1).max(100).describe('Relative weight as integer %'),\n excellent: z.string().describe('Level 4 โ Excellent performance descriptor'),\n proficient: z.string().describe('Level 3 โ Proficient performance descriptor'),\n developing: z.string().describe('Level 2 โ Developing performance descriptor'),\n beginning: z.string().describe('Level 1 โ Beginning performance descriptor'),\n});\n\n// โโโ Exit Ticket (OPTIONAL within RUBRIC) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ExitTicketQuickItemSchema = z.object({\n question: z.string(),\n questionType: z.enum(['multiple_choice', 'true_false', 'short_answer', 'open_ended']),\n answerOrScoringGuide: z.string().default(''),\n});\n\n// โโโ Full Rubric โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Rubric Schema โ Summative / Formative Assessment Scoring Guide\n * Template: RUBRIC_template.md\n * Sections: Assessment Overview โ Rubric Table โ Exit Ticket โ Self-Assessment Checklist\n */\nexport const RubricSchema = z.object({\n artifactType: z.literal('RUBRIC').default('RUBRIC'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Assessment Overview\n assessmentType: z.enum(['Formative', 'Summative', 'Self-assessment', 'Peer-review']),\n assessmentFormat: z.enum([\n 'Short Exercise',\n 'Exit Ticket',\n 'Practical Product',\n 'Project Presentation',\n ]),\n targetLOs: z.array(z.string()).describe('LO codes being assessed, e.g. [\"LO1\", \"LO2\"]'),\n targetAudience: z.enum(['Teachers', 'Students']).default('Teachers').describe(\n '\"Teachers\" = technical/pedagogical language; \"Students\" = simple \"I can...\" language'\n ),\n\n // Rubric Table (weights should sum to ~100)\n criteria: z.array(RubricCriteriaSchema).min(1),\n\n // Optional quick exit ticket at end of session (โค3 items)\n exitTicket: z.array(ExitTicketQuickItemSchema).max(3).optional(),\n\n // Student self-assessment checklist\n selfAssessmentChecklist: z.array(z.string()).optional(),\n selfAssessmentReflection: z.string().optional().describe(\n 'Open-ended reflection prompt, e.g. \"One thing I am most proud of is:\"'\n ),\n});\n\nexport type Rubric = z.infer<typeof RubricSchema>;\nexport type RubricCriteria = z.infer<typeof RubricCriteriaSchema>;\n","import { z } from 'zod';\n\n// โโโ Exit Ticket Parts โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ExitTicketRecallPromptSchema = z.object({\n question: z.string().describe('Conceptual scenario or analogy comparison testing core mental model'),\n answerAreaLabel: z.string().default('Write 1-2 concise sentences'),\n});\n\nexport const ExitTicketBugHuntSchema = z.object({\n codeSnippet: z.string().describe('4-8 line realistic code snippet containing exactly 1 bug/missing annotation'),\n codeLanguage: z.string().default('swift'),\n tasks: z.array(z.string()).describe(\n 'Ordered task list, e.g. [\"Identify the Compiler/Runtime Error\", \"Write the corrected line\"]'\n ),\n expectedBugDescription: z.string().describe('The exact error type/message students should identify'),\n correctedLine: z.string().describe('The single corrected line of code'),\n});\n\nexport const ExitTicketMetacognitionSchema = z.object({\n options: z.array(z.object({\n label: z.string().describe('\"๐ข Green\" | \"๐ก Yellow\" | \"๐ด Red\"'),\n description: z.string().describe('e.g. \"I can build and explain to a peer without hints\"'),\n })).default([\n { label: '๐ข Green (Mastered)', description: 'I can build and explain this concept to a peer without any hints.' },\n { label: '๐ก Yellow (Needs Practice)', description: 'I understand the concept but got stuck on syntax or error messages.' },\n { label: '๐ด Red (Blocked)', description: 'I need help understanding why this architecture is used.' },\n ]),\n lingeringQuestion: z.string().default('What is one question you still have before leaving today\\'s lab?'),\n});\n\n// โโโ Full Exit Ticket โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Exit Ticket Schema โ Formative End-of-Session Assessment\n * Template: EXIT_TICKET_template.md\n * Sections:\n * Target LOs\n * Part 1: Recall & Conceptual Anchor\n * Part 2: Application & Bug Hunt\n * Part 3: Metacognitive Reflection & Confidence Check\n * Scoring & Teacher Intervention Trigger\n */\nexport const ExitTicketSchema = z.object({\n artifactType: z.literal('EXIT_TICKET').default('EXIT_TICKET'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n estimatedMinutes: z.coerce.number().default(7),\n\n // Target Learning Objectives\n targetLOs: z.array(z.object({\n code: z.string().describe('LO code, e.g. \"ULO\" or \"LO1\"'),\n loType: z.enum(['ULO', 'CIO', 'SIO']).optional(),\n description: z.string(),\n })),\n\n // Part 1: Recall & Conceptual Anchor\n recallPrompt: ExitTicketRecallPromptSchema,\n\n // Part 2: Application & Bug Hunt\n applicationPrompt: ExitTicketBugHuntSchema,\n\n // Part 3: Metacognitive Reflection\n metacognition: ExitTicketMetacognitionSchema,\n\n // Scoring & Intervention Trigger\n scoringGuide: z.object({\n proficiencyThreshold: z.string().describe('e.g. \"Green/Yellow check + Correct Bug Hunt answer\"'),\n interventionProtocol: z.string().describe('e.g. \"If โฅ25% Red, start next session with 5-min Live Debug Warm-up\"'),\n }),\n});\n\nexport type ExitTicket = z.infer<typeof ExitTicketSchema>;\nexport type ExitTicketBugHunt = z.infer<typeof ExitTicketBugHuntSchema>;\n","import { z } from 'zod';\n\n// โโโ Tier Definition โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const TierLevelEnum = z.enum(['Bronze', 'Silver', 'Gold']);\n\nexport const TierObjectiveSchema = z.object({\n tier: TierLevelEnum,\n bloomTarget: z.string().describe('e.g. \"Remember / Understand\" | \"Apply / Analyze\" | \"Evaluate / Create\"'),\n scaffoldingRatio: z.string().describe('e.g. \"70% Starter Code / 30% Fill-in\"'),\n successCriteria: z.string().describe('Condition that determines tier completion'),\n});\n\n// โโโ Bronze Tier โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const BronzeTierSchema = z.object({\n targetAudience: z.string().default('All learners (mandatory milestone)'),\n guidingPrompt: z.string().describe('Clear instruction with references to Handout'),\n starterCode: z.string().default('').describe('Pre-filled boilerplate code with TODO placeholders'),\n codeLanguage: z.string().default('swift'),\n fillInSlots: z.array(z.object({\n todoLabel: z.string().describe('e.g. \"TODO 1 [Bronze]\"'),\n instruction: z.string(),\n })).default([]),\n verificationTest: z.string().default('testBronzeBaseline()'),\n});\n\n// โโโ Silver Tier โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const SilverTierSchema = z.object({\n targetAudience: z.string().default('Learners who completed Bronze without mentor intervention'),\n guidingPrompt: z.string(),\n requirements: z.array(z.string()).min(1).describe('Numbered requirements: validation, state logic, user feedback'),\n implementationTarget: z.string().default('').describe('Skeleton or description of what to implement'),\n codeLanguage: z.string().default('swift'),\n verificationTest: z.string().default('testSilverLogicAndValidation()'),\n});\n\n// โโโ Gold Tier โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const GoldTierSchema = z.object({\n targetAudience: z.string().default('Advanced learners finished ahead of schedule'),\n architecturalChallenge: z.string().describe('Open-ended architectural task'),\n constraints: z.array(z.string()).min(1).describe('Hard invariants, e.g. \"zero data-race under concurrent mutations\"'),\n verificationTest: z.string().optional().default('testGoldConcurrencySafety()'),\n});\n\n// โโโ Mentor Debugging Cheatsheet โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const MentorCheatsheetSchema = z.object({\n bronzeStumble: z.string().default('').describe('Most common Bronze mistake'),\n silverStumble: z.string().default('').describe('Most common Silver mistake'),\n goldDiscussionPrompt: z.string().optional().describe('Scaling / architecture discussion question'),\n});\n\n// โโโ Full Tiered Practice โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Tiered Practice Schema โ 3-Level Differentiated Practice Lab\n * Template: TIERED_PRACTICE_template.md\n * Sections:\n * Computational Objective & Tier Matrix\n * Bronze Tier (Foundational Scaffolding)\n * Silver Tier (Independent Application)\n * Gold Tier (Enrichment & Optimization)\n * Automated Test Verification Matrix\n * Mentor Debugging Cheatsheet\n */\nexport const TieredPracticeSchema = z.object({\n artifactType: z.literal('TIERED_PRACTICE').default('TIERED_PRACTICE'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Tier matrix overview\n tierMatrix: z.array(TierObjectiveSchema).length(3).describe('One entry per tier: Bronze, Silver, Gold'),\n\n // Tier content\n bronze: BronzeTierSchema,\n silver: SilverTierSchema,\n gold: GoldTierSchema,\n\n // Test suite reference\n testSuiteClass: z.string().optional().describe('XCTest class name, e.g. \"AlarmSystemTestSuite\"'),\n\n // Mentor hints\n mentorCheatsheet: MentorCheatsheetSchema.optional(),\n});\n\nexport type TieredPractice = z.infer<typeof TieredPracticeSchema>;\nexport type BronzeTier = z.infer<typeof BronzeTierSchema>;\nexport type SilverTier = z.infer<typeof SilverTierSchema>;\nexport type GoldTier = z.infer<typeof GoldTierSchema>;\n","import { z } from 'zod';\n\n// โโโ Single Bell Ringer day โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const BellRingerDaySchema = z.object({\n dayLabel: z.string().describe('e.g. \"Day 1 (Monday)\" or \"Day 1\"'),\n bloomLevel: z.enum([\n 'Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n ]).optional(),\n promptType: z.enum([\n 'mental_model_recall',\n 'code_tracing',\n 'bug_hunt',\n 'diagram_tracing',\n 'creative_synthesis',\n 'open_reflection',\n ]).default('open_reflection'),\n prompt: z.string().describe('The warm-up question or task shown on projector'),\n codeSnippet: z.string().optional().describe('Code to trace or debug'),\n codeLanguage: z.string().optional().default('cpp'),\n answerKey: z.string().optional().describe('Teacher-facing expected answer or rubric note'),\n});\n\n// โโโ Full Bell Ringer (5-day weekly pack) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Bell Ringer Schema โ 5-Day Weekly Warm-Up Pack\n * Template: BELL_RINGER_template.md\n * Sections: Weekly Objective โ Day 1-5 prompts โ Answer Key\n * Time: 3-5 min each session\n */\nexport const BellRingerSchema = z.object({\n artifactType: z.literal('BELL_RINGER'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n weeklyTheme: z.string().describe('Core concept theme for the week'),\n routineProtocol: z.string().optional().default(\n 'Display prompt on projector as students enter. Students write in Daily Journal before class discussion.'\n ),\n days: z.array(BellRingerDaySchema).min(1).max(7),\n});\n\nexport type BellRinger = z.infer<typeof BellRingerSchema>;\nexport type BellRingerDay = z.infer<typeof BellRingerDaySchema>;\nexport type BellRingerInput = z.input<typeof BellRingerSchema>;\n","import { z } from 'zod';\n\n// โโโ Glossary Term โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const GlossaryTermSchema = z.object({\n termName: z.string().describe('Term in the target language'),\n termNameEN: z.string().optional().describe('English term (for code/docs reference)'),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply']).optional(),\n simpleDefinition: z.string().describe('Max 2 sentences, age-appropriate, no jargon'),\n memoryAnalogy: z.string().describe('Analogy: \"This term is like [familiar thing]...\"'),\n realWorldExample: z.string().describe('1-3 line code snippet or 1-sentence real-world use case'),\n codeLanguage: z.string().optional().default(''),\n commonMistake: z.string().optional().describe('What students often confuse this with, and why'),\n seeMore: z.array(z.string()).optional().default([]).describe('Related term names'),\n});\n\n// โโโ Quick Reference Row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const GlossaryQuickRefRowSchema = z.object({\n termEN: z.string(),\n translation: z.string().optional().default(''),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply']).optional(),\n mnemonicKeywords: z.string().optional().default(''),\n});\n\n// โโโ Standardized Term โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const StandardizedTermRowSchema = z.object({\n technicalTerm: z.string(),\n note: z.string(),\n doNotUse: z.string().optional().default(''),\n});\n\n// โโโ Full Glossary โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Glossary Schema โ Module Vocabulary Reference\n * Template: GLOSSARY_template.md\n * Sections: Term entries (8-15 per module) โ Quick Reference Table โ Standardized Terms\n */\nexport const GlossarySchema = z.object({\n artifactType: z.literal('GLOSSARY'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n terms: z.array(GlossaryTermSchema).min(1).describe('Ordered from basic to advanced'),\n quickReferenceTable: z.array(GlossaryQuickRefRowSchema).optional().default([]),\n standardizedTerms: z.array(StandardizedTermRowSchema).optional().default([]),\n});\n\nexport type Glossary = z.infer<typeof GlossarySchema>;\nexport type GlossaryTerm = z.infer<typeof GlossaryTermSchema>;\nexport type GlossaryInput = z.input<typeof GlossarySchema>;\n","import { z } from 'zod';\n\n// โโโ 9-Square Choice Activity โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ChoiceSquareSchema = z.object({\n squareNumber: z.coerce.number().int().min(1).max(9),\n squareLabel: z.string().describe('e.g. \"Square 1: The Bug Hunter\"'),\n category: z.enum(['analytical', 'visual_architecture', 'creative_applied']).optional(),\n points: z.coerce.number().int().default(30),\n isCenterMaster: z.boolean().default(false).describe('True for the mandatory center โญ challenge'),\n description: z.string().describe('What the student must do'),\n deliverable: z.string().optional().describe('What to submit, e.g. \"Pull Request diff + clean build\"'),\n acceptanceCriteria: z.array(z.string()).optional().default([]),\n format: z.string().optional().describe('Submission format, e.g. \"Mermaid sequenceDiagram\"'),\n});\n\n// โโโ Choice Rule โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ChoiceRuleSchema = z.object({\n model: z.enum(['tic_tac_toe', 'point_balance', 'custom']).default('tic_tac_toe'),\n description: z.string().describe('How the student wins / completes the board'),\n minimumPoints: z.coerce.number().optional().describe('Minimum points for point_balance model'),\n mandatoryCategories: z.array(z.string()).optional().default([]),\n});\n\n// โโโ Rubric Row (reused from choice board context) โโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ChoiceBoardRubricRowSchema = z.object({\n criteriaName: z.string(),\n exemplary: z.string(),\n proficient: z.string(),\n developing: z.string(),\n beginning: z.string(),\n});\n\n// โโโ Full Choice Board โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Choice Board Schema โ 9-Square Differentiated Activity Matrix\n * Template: CHOICE_BOARD_template.md\n * Sections: Learning Goals & Rule โ 9-Square Matrix โ Activity Blueprints โ Rubric\n */\nexport const ChoiceBoardSchema = z.object({\n artifactType: z.literal('CHOICE_BOARD'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n coreConceptAnchor: z.string().describe('All options must demonstrate mastery of this invariant'),\n choiceRule: ChoiceRuleSchema,\n squares: z.array(ChoiceSquareSchema).min(1).max(9),\n rubric: z.array(ChoiceBoardRubricRowSchema).optional().default([]),\n});\n\nexport type ChoiceBoard = z.infer<typeof ChoiceBoardSchema>;\nexport type ChoiceSquare = z.infer<typeof ChoiceSquareSchema>;\nexport type ChoiceBoardInput = z.input<typeof ChoiceBoardSchema>;\n","import { z } from 'zod';\n\n// โโโ Graphic Organizer Item โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const OrganizerTypeEnum = z.enum([\n 'mermaid_flowchart', // Architectural data flow (graph TD/LR)\n 'mermaid_sequence', // Sequence / message flow diagram\n 'mermaid_state', // State machine / lifecycle diagram\n 'mermaid_er', // Entity-relationship diagram\n 'mermaid_class', // Class / OOP diagram\n 'venn_comparison', // Comparative analysis (2+ sets)\n 'fill_in_text', // ASCII/text fill-in exercise\n 'concept_map', // Node-link concept map (freeform)\n]);\n\nexport const GraphicOrganizerItemSchema = z.object({\n organizerNumber: z.coerce.number().int(),\n organizerTitle: z.string().describe('e.g. \"Architectural Data Flow\" or \"State Machine & Lifecycle\"'),\n organizerType: OrganizerTypeEnum,\n mermaidCode: z.string().optional().describe('Raw Mermaid.js diagram definition'),\n fillInTemplate: z.string().optional().describe('ASCII text fill-in box template'),\n wordBank: z.array(z.string()).optional().default([]).describe('Word bank for fill-in exercises'),\n cognitiveGoal: z.string().optional().describe('Why this diagram helps (Paivio dual-coding, etc.)'),\n requiredLabels: z.array(z.string()).optional().default([]).describe('Items students must correctly label'),\n});\n\n// โโโ Full Graphic Organizer โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Graphic Organizer Schema โ Visual Diagram-Based Learning Tool\n * Template: GRAPHIC_ORGANIZER_template.md\n * Sections: Visual Paradigm Overview โ Organizer 1/2/3 โ Student Fill-in Worksheet\n */\nexport const GraphicOrganizerSchema = z.object({\n artifactType: z.literal('GRAPHIC_ORGANIZER'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n cognitivePurpose: z.string().optional().describe(\n 'Cognitive design rationale, e.g. \"Dual-coding theory: spatial + verbal processing\"'\n ),\n organizers: z.array(GraphicOrganizerItemSchema).min(1),\n});\n\nexport type GraphicOrganizer = z.infer<typeof GraphicOrganizerSchema>;\nexport type GraphicOrganizerItem = z.infer<typeof GraphicOrganizerItemSchema>;\nexport type GraphicOrganizerInput = z.input<typeof GraphicOrganizerSchema>;\n","import { z } from 'zod';\n\n// โโโ CER (Claim-Evidence-Reasoning) conclusion โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const CERConclusionSchema = z.object({\n claim: z.string().describe('Direct 1-sentence answer to the driving question'),\n evidence: z.string().describe('Specific quantitative data from the collection table'),\n reasoning: z.string().describe('Connection between evidence and the technical principle'),\n});\n\n// โโโ Experimental Variable Design โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ExperimentalDesignSchema = z.object({\n hypothesisTemplate: z.string().describe(\n '\"If [action], then [predicted outcome] because [rationale].\"'\n ),\n independentVariable: z.string().describe('The variable being manipulated'),\n dependentVariable: z.string().describe('The variable being measured'),\n controlVariables: z.array(z.string()).optional().default([]).describe('Constants held fixed'),\n});\n\n// โโโ Science Lab โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Science Lab (CER Investigation) Schema\n * Template: SCIENCE_LAB_template.md\n * Sections: Guiding Inquiry โ Hypothesis & Design โ Data Protocol โ CER Conclusion โ Peer Review\n * Format: STEM/Code Investigation with Claim-Evidence-Reasoning framework\n */\nexport const ScienceLabSchema = z.object({\n artifactType: z.literal('SCIENCE_LAB'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n domain: z.string().optional().describe('e.g. \"Software Engineering / Concurrency\"'),\n\n // Guiding Inquiry\n drivingQuestion: z.string().describe('Real-world engineering driving question'),\n engineeringPhenomenon: z.string().optional().describe('Observed phenomenon requiring explanation'),\n\n // Hypothesis & Experimental Design\n experimentalDesign: ExperimentalDesignSchema,\n\n // Data Collection\n labSetupCode: z.string().optional().describe('Instrumentation / benchmark harness code'),\n labSetupCodeLanguage: z.string().optional().default('cpp'),\n dataCollectionColumns: z.array(z.string()).optional().default([]).describe('Table column headers'),\n trialCount: z.coerce.number().optional().default(4),\n\n // CER Conclusion\n cerTemplates: CERConclusionSchema.optional().describe('Pre-filled example or rubric for CER'),\n\n // Peer Review\n peerReviewProtocol: z.string().optional().describe(\n 'How groups exchange and verify each other\\'s results'\n ),\n reproducibilityTolerancePct: z.coerce.number().optional().default(10),\n});\n\nexport type ScienceLab = z.infer<typeof ScienceLabSchema>;\nexport type ScienceLabInput = z.input<typeof ScienceLabSchema>;\nexport type CERConclusion = z.infer<typeof CERConclusionSchema>;\n","import { z } from 'zod';\n\n// โโโ Individual Rotation Station โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const StationTypeEnum = z.enum([\n 'teacher_led', // Station 1: Small-group guided inquiry with teacher\n 'pair_lab', // Station 2: Collaborative hands-on pair programming\n 'digital_self_paced', // Station 3: Independent async code lab / LMS\n 'offline_modeling', // Station 4: No-screen diagram / whiteboard activity\n 'custom',\n]);\n\nexport const RotationStationSchema = z.object({\n stationNumber: z.coerce.number().int(),\n stationLabel: z.string().describe('e.g. \"Station 1: Teacher-Led (Guided Inquiry)\"'),\n stationType: StationTypeEnum,\n goal: z.string().describe('What students achieve at this station'),\n durationMinutes: z.coerce.number().optional().default(15),\n teacherScriptOrInquiry: z.string().optional().describe(\n 'Teacher talking points or inquiry prompts (for teacher_led station)'\n ),\n studentInstructions: z.string().optional().describe('Step-by-step student task'),\n materials: z.array(z.string()).optional().default([]),\n successMilestone: z.string().optional().describe('Observable completion criterion'),\n differentiationTrigger: z.string().optional().describe('What to do if students struggle'),\n});\n\n// โโโ Recording Sheet Row (Student Passport) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const StationRecordRowSchema = z.object({\n stationNumber: z.coerce.number().int(),\n taskCompleted: z.string(),\n verificationMethod: z.string().describe('Teacher stamp, peer signature, auto-token, etc.'),\n keyInsightPrompt: z.string().optional().default('What did you learn at this station?'),\n});\n\n// โโโ Full Station Rotation Pack โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Station Rotation Schema โ 4-Station Learning Pack\n * Template: STATION_ROTATION_template.md\n * Format: 4 stations ร 15 min (60-75 min total) with rotation bell protocol\n * Grouping: Heterogeneous groups of 4-6 students\n */\nexport const StationRotationSchema = z.object({\n artifactType: z.literal('STATION_ROTATION'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n totalDurationMinutes: z.coerce.number().optional().default(60),\n rotationDurationMinutes: z.coerce.number().optional().default(15),\n transitionBufferMinutes: z.coerce.number().optional().default(2),\n groupSize: z.string().optional().default('4-6 students'),\n groupingStrategy: z.string().optional().default('Heterogeneous'),\n stations: z.array(RotationStationSchema).min(2),\n recordingSheet: z.array(StationRecordRowSchema).optional().default([]),\n});\n\nexport type StationRotation = z.infer<typeof StationRotationSchema>;\nexport type RotationStation = z.infer<typeof RotationStationSchema>;\nexport type StationRotationInput = z.input<typeof StationRotationSchema>;\n","import { z } from 'zod';\n\n// โโโ Difficulty Tier Enum โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const CardTierEnum = z.enum(['bronze', 'silver', 'gold']);\n\n// โโโ Individual Task Card โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const TaskCardSchema = z.object({\n cardId: z.string().describe('e.g. \"CARD_01\"'),\n cardNumber: z.coerce.number().int(),\n setLabel: z.string().optional().describe(\n 'e.g. \"Set A: Foundational Concepts\" or \"Set B: Code Diagnosis\"'\n ),\n tier: CardTierEnum.optional().default('bronze'),\n points: z.coerce.number().int().optional().default(1),\n category: z.string().optional().describe(\n 'e.g. \"Vocabulary\", \"Code Tracing\", \"Bug Hunt\", \"Architecture\"'\n ),\n prompt: z.string().describe('The task / question printed on the card'),\n codeSnippet: z.string().optional().describe('Code to trace or debug'),\n codeLanguage: z.string().optional().default('cpp'),\n options: z.array(z.object({\n id: z.string(),\n text: z.string(),\n isCorrect: z.boolean().optional(),\n })).optional().default([]).describe('MCQ options (if applicable)'),\n hint: z.string().optional().describe('Student-facing hint'),\n answerKey: z.string().describe('Teacher-facing correct answer or solution blueprint'),\n answerPoints: z.coerce.number().int().optional().default(1),\n});\n\n// โโโ Full Task Cards Deck โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Task Cards Schema โ Printable Task Card Deck\n * Template: TASK_CARDS_template.md\n * Sets: A (Foundational), B (Debugging), C (Application/Synthesis)\n * Usage: Centers, Fast Finishers, Small Group Review, Station 4 Offline Activity\n */\nexport const TaskCardsSchema = z.object({\n artifactType: z.literal('TASK_CARDS'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n targetSkills: z.array(z.string()).optional().default([]).describe(\n 'e.g. [\"Conceptual Understanding\", \"Code Tracing\", \"Bug Hunting\"]'\n ),\n cardFormat: z.string().optional().default('4 cards per A4 page'),\n scoringSystem: z.string().optional().default(\n 'Bronze (1 pt), Silver (2 pts), Gold (3 pts)'\n ),\n cards: z.array(TaskCardSchema).min(1),\n});\n\nexport type TaskCards = z.infer<typeof TaskCardsSchema>;\nexport type TaskCard = z.infer<typeof TaskCardSchema>;\nexport type TaskCardsInput = z.input<typeof TaskCardsSchema>;\n","import { z } from 'zod';\n\n// โโโ Game Question / Challenge โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ReviewGameQuestionSchema = z.object({\n questionId: z.string().optional(),\n round: z.coerce.number().int().min(1).max(3).describe('1=Speed, 2=Code Duel, 3=Final Boss'),\n points: z.coerce.number().int(),\n category: z.string().optional().describe('e.g. \"Vocabulary & Syntax\", \"Mental Model\"'),\n prompt: z.string().describe('The question or challenge shown to teams'),\n codeSnippet: z.string().optional(),\n codeLanguage: z.string().optional().default(''),\n options: z.array(z.object({\n id: z.string(),\n text: z.string(),\n isCorrect: z.boolean().optional(),\n })).optional().default([]).describe('MCQ options for Round 1'),\n answerOrExplanation: z.string().describe('Correct answer or winning explanation'),\n timeLimit: z.coerce.number().optional().default(20).describe('Seconds'),\n bonusMechanic: z.string().optional().describe('e.g. \"Teams can wager points\"'),\n});\n\n// โโโ Kahoot/Quizizz Export Row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ReviewGameExportRowSchema = z.object({\n question: z.string(),\n option1: z.string(),\n option2: z.string(),\n option3: z.string().optional().default(''),\n option4: z.string().optional().default(''),\n correctAnswer: z.coerce.number().int().min(1).max(4).describe('1-indexed correct option'),\n timeLimitSec: z.coerce.number().optional().default(20),\n});\n\n// โโโ Full Review Game Pack โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Review Game Schema โ Interactive Quiz Show Pack\n * Template: REVIEW_GAME_template.md\n * Format: 3 Rounds (Speed โ Code Duel โ Final Boss Architecture)\n * Compatible with: Kahoot, Quizizz, Jeopardy live classroom format\n */\nexport const ReviewGameSchema = z.object({\n artifactType: z.literal('REVIEW_GAME'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n\n // Setup\n format: z.string().optional().default('3 rounds, progressive difficulty, team buzzers'),\n teamSize: z.string().optional().default('3-5 students'),\n hasBonusWager: z.boolean().optional().default(true).describe('Teams can wager points on Round 3'),\n\n // Questions per round\n questions: z.array(ReviewGameQuestionSchema).min(1),\n\n // Export-ready format for Kahoot / Quizizz\n exportRows: z.array(ReviewGameExportRowSchema).optional().default([]),\n});\n\nexport type ReviewGame = z.infer<typeof ReviewGameSchema>;\nexport type ReviewGameQuestion = z.infer<typeof ReviewGameQuestionSchema>;\nexport type ReviewGameInput = z.input<typeof ReviewGameSchema>;\n","import { z } from 'zod';\n\n/**\n * CurriculumPlan โ machine-readable SOT for curriculum planning.\n *\n * Produced by the Curriculum Planner (curriculumPlannerService) from a domain\n * planning graph (CurriculumFeed v2 or raw domain-kit graph shapes) plus\n * course constraints and policy. CURRICULUM_FRAMEWORK.md is a human-readable\n * projection of this plan; LESSON production consumes a session slice of it.\n */\n\n// [7] Canonical decision vocabularies (the ONLY legal values)\n\nexport const PrerequisiteDecisionSchema = z.enum([\n 'mastered_before_course', // entry-level knowledge โ referenced, not taught\n 'taught_in_prior_lesson', // formally taught in an earlier session\n 'recap_in_lesson', // re-activated at the start of this session\n 'jit_introduce_in_lesson', // introduced just-in-time inside this session\n 'scaffolded_provide', // not taught โ supplied ready-made (scaffold)\n]);\nexport type PrerequisiteDecision = z.infer<typeof PrerequisiteDecisionSchema>;\n\nexport const ScaffoldDecisionSchema = z.enum([\n 'student_builds',\n 'provide_partial',\n 'provide_full',\n 'provide_reference',\n]);\nexport type ScaffoldDecision = z.infer<typeof ScaffoldDecisionSchema>;\n\nexport const DepthLevelSchema = z.enum(['ulo', 'cio', 'sio']);\nexport type DepthLevel = z.infer<typeof DepthLevelSchema>;\n\nexport const BloomLevelSchema = z.enum([\n 'Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n]);\nexport type BloomLevel = z.infer<typeof BloomLevelSchema>;\n\nexport const EntryLevelSchema = z.enum(['beginner', 'intermediate', 'advanced']);\nexport const NodeKindSchema = z.enum(['skill', 'concept', 'product_step']);\n\n// Shared atoms\n\nconst LessonCodeSchema = z.string().regex(/^U\\d{2}_M\\d{2}_L\\d{2}$/, 'lesson code must match UXX_MYY_LZZ');\n\nconst SourceCiteSchema = z.object({\n node_ids: z.array(z.string()).default([]),\n concept_codes: z.array(z.string()).default([]),\n});\n\nexport const CourseObjectiveSchema = z.object({\n id: z.string(),\n statement: z.string().min(8),\n bloom: BloomLevelSchema,\n sources: SourceCiteSchema,\n});\nexport type CourseObjective = z.infer<typeof CourseObjectiveSchema>;\n\nexport const UnitPlanSchema = z.object({\n id: z.string().regex(/^U\\d{2}$/),\n name: z.string().min(3),\n objectives: z.array(CourseObjectiveSchema).min(1),\n node_ids: z.array(z.string()).min(1),\n total_minutes: z.number().int().positive(),\n rationale: z.string().min(3),\n // Phases fully contained in this unit (empty for non-phase plans)\n phase_ids: z.array(z.string()).default([]),\n // Product completion description carried from the domain analysis (optional)\n product_completion: z.string().default(''),\n});\nexport type UnitPlan = z.infer<typeof UnitPlanSchema>;\n\n// Session plan ([3][4][5][6] outputs)\n\nexport const DepthAssignmentSchema = z.object({\n node_id: z.string(),\n depth: DepthLevelSchema,\n source: z.enum(['feed_hint', 'planner', 'escalated']),\n});\nexport type DepthAssignment = z.infer<typeof DepthAssignmentSchema>;\n\nexport const PrerequisiteDecisionEntrySchema = z.object({\n node_id: z.string(),\n decision: PrerequisiteDecisionSchema,\n reason: z.string().min(3),\n});\nexport type PrerequisiteDecisionEntry = z.infer<typeof PrerequisiteDecisionEntrySchema>;\n\nexport const ScaffoldDecisionEntrySchema = z.object({\n item: z.string().min(1),\n decision: ScaffoldDecisionSchema,\n minutes_saved: z.number().int().nonnegative().default(0),\n reason: z.string().min(3),\n});\nexport type ScaffoldDecisionEntry = z.infer<typeof ScaffoldDecisionEntrySchema>;\n\nexport const SessionPlanSchema = z.object({\n id: LessonCodeSchema,\n unit_id: z.string().regex(/^U\\d{2}$/),\n order: z.number().int().positive(),\n title: z.string().min(3),\n // [4] Free-text session objective โ no ULO/CIO/SIO mapping at this stage.\n prose_objective: z.string().min(10),\n node_ids: z.array(z.string()).min(1),\n // Development phases this session contributes to (empty when the feed has no phases)\n phase_ids: z.array(z.string()).default([]),\n new_keywords: z.array(z.string()).default([]),\n prerequisite_keywords: z.array(z.string()).default([]),\n knowledge_minutes: z.number().int().nonnegative(),\n practice_minutes: z.number().int().nonnegative(),\n overhead_minutes: z.number().int().nonnegative(),\n depth_assignments: z.array(DepthAssignmentSchema).min(1),\n prerequisite_decisions: z.array(PrerequisiteDecisionEntrySchema).default([]),\n scaffold_decisions: z.array(ScaffoldDecisionEntrySchema).default([]),\n // What the student can demonstrate after this session โ feeds exit tickets.\n exit_evidence: z.array(z.string()).min(1),\n differentiation: z.object({ bronze: z.string(), silver: z.string(), gold: z.string() }),\n});\nexport type SessionPlan = z.infer<typeof SessionPlanSchema>;\n\n// Root plan\n\nexport const TranslationPolicySchema = z.object({\n policy: z.enum(['after_artifact', 'end_of_unit', 'at_publish']).default('at_publish'),\n target_language: z.string().nullable().default(null),\n});\nexport type TranslationPolicy = z.infer<typeof TranslationPolicySchema>;\n\nexport const CoverageReportSchema = z.object({\n assigned_node_ids: z.array(z.string()),\n unassigned_node_ids: z.array(z.string()),\n warnings: z.array(z.string()),\n});\nexport type CoverageReport = z.infer<typeof CoverageReportSchema>;\n\nexport const PlanConstraintsSchema = z.object({\n age_band: z.tuple([z.number().int(), z.number().int()]),\n entry_level: EntryLevelSchema,\n session_duration_minutes: z.number().int().positive(),\n // Overhead (setup/recap/wrap-up) share of a session, 0..0.5.\n overhead_ratio: z.number().min(0).max(0.5).default(0.15),\n total_sessions: z.number().int().positive().nullable().default(null),\n // Keywords the entry level already masters (drives mastered_before_course).\n entry_keywords: z.array(z.string()).default([]),\n course_goals: z.array(z.string()).default([]),\n capstone: z.string().nullable().default(null),\n});\nexport type PlanConstraints = z.infer<typeof PlanConstraintsSchema>;\n\nexport const CurriculumPlanSchema = z.object({\n schema_version: z.literal(1),\n plan_id: z.string(),\n plan_hash: z.string(),\n created_at: z.string(),\n source: z.object({\n graph_type: z.enum(['curriculum_feed', 'project_graph', 'knowledge_graph', 'hybrid_graph']),\n feed_schema_version: z.number().nullable().default(null),\n warnings: z.array(z.string()).default([]),\n hallucination_count: z.number().int().nonnegative().default(0),\n }),\n constraints: PlanConstraintsSchema,\n course: z.object({\n // [1] Course-level objectives, each citing source nodes (anti-fabrication)\n objectives: z.array(CourseObjectiveSchema).min(1),\n capstone_ref: z.string().nullable().default(null),\n }),\n units: z.array(UnitPlanSchema).min(1), // [2]\n sessions: z.array(SessionPlanSchema).min(1), // [3][4][5][6]\n glossary_scope: z.array(z.object({\n session_id: LessonCodeSchema,\n terms: z.array(z.string()),\n })),\n translation: TranslationPolicySchema,\n coverage_report: CoverageReportSchema,\n approval: z.object({\n status: z.enum(['draft', 'approved']),\n approved_at: z.string().nullable().default(null),\n // Hash of the plan payload the approval covers โ invalidation key for EXPOSITION.\n plan_hash: z.string().nullable().default(null),\n }),\n});\nexport type CurriculumPlan = z.infer<typeof CurriculumPlanSchema>;\n\n// Normalized planning graph (Stage 0 output, internal + feed-facing)\n\nexport const PlanningNodeSchema = z.object({\n id: z.string(),\n kind: NodeKindSchema,\n name: z.string().min(1),\n concept_codes: z.array(z.string()).default([]),\n keywords: z.array(z.string()).default([]),\n new_keywords: z.array(z.string()).default([]),\n prerequisite_keywords: z.array(z.string()).default([]),\n estimated_minutes: z.number().int().nonnegative(),\n bloom_hint: BloomLevelSchema.nullable().default(null),\n depth_hint: DepthLevelSchema.nullable().default(null),\n completion_level: z.enum(['mvp', 'standard', 'stretch']).default('standard'),\n scaffold_candidates: z.array(z.object({\n item: z.string(),\n reason: z.string().default(''),\n minutes_saved: z.number().int().nonnegative().default(0),\n suggest: ScaffoldDecisionSchema.default('provide_full'),\n })).default([]),\n references: z.array(z.object({\n file: z.string(),\n evidence: z.string().default(''),\n })).default([]),\n phase_id: z.string().default(''),\n});\nexport type PlanningNode = z.infer<typeof PlanningNodeSchema>;\n\n/** knowledge = must be understood before; task = needs the source node's output first. */\nexport const DependencyEdgeSchema = z.object({\n from: z.string(),\n to: z.string(),\n kind: z.enum(['knowledge', 'task']),\n reason: z.string().default(''),\n});\nexport type DependencyEdge = z.infer<typeof DependencyEdgeSchema>;\n\nexport const PlanningGraphSchema = z.object({\n graph_type: z.enum(['curriculum_feed', 'project_graph', 'knowledge_graph', 'hybrid_graph']),\n warnings: z.array(z.string()).default([]),\n hallucination_count: z.number().int().nonnegative().default(0),\n nodes: z.array(PlanningNodeSchema).min(1, 'planning graph must contain at least one node'),\n edges: z.array(DependencyEdgeSchema).default([]),\n groupings: z.array(z.object({\n id: z.string(),\n name: z.string(),\n node_ids: z.array(z.string()).min(1),\n rationale: z.string().default(''),\n })).default([]),\n // Progressive completion phases (from CurriculumFeed.phases). When non-empty\n // they define units and the teaching sequence; groupings stay informational.\n phases: z.array(z.object({\n id: z.string(),\n order: z.number().int().positive(),\n name: z.string(),\n product_completion: z.string().default(''),\n node_ids: z.array(z.string()).min(1),\n })).default([]),\n});\nexport type PlanningGraph = z.infer<typeof PlanningGraphSchema>;\nexport type PlanningPhase = PlanningGraph['phases'][number];\n\n// Planner input\n\nexport const PlannerInputSchema = z.object({\n graph: z.unknown(),\n constraints: PlanConstraintsSchema,\n translation: TranslationPolicySchema.default({ policy: 'at_publish', target_language: null }),\n});\nexport type PlannerInput = z.infer<typeof PlannerInputSchema>;\n\n/** Validates a plan and enforces the cross-field budget invariant per session. */\nexport function validateCurriculumPlan(plan: unknown): CurriculumPlan {\n const parsed = CurriculumPlanSchema.parse(plan);\n for (const s of parsed.sessions) {\n const total = s.knowledge_minutes + s.practice_minutes + s.overhead_minutes;\n if (total > parsed.constraints.session_duration_minutes) {\n throw new Error(\n 'Session ' + s.id + ' budget violated: ' + total + ' > ' + parsed.constraints.session_duration_minutes + ' minutes',\n );\n }\n }\n return parsed;\n}\n","import { z } from 'zod';\n\n// โโโ Existing schemas โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\nexport * from './lessonPlanSchema';\nexport * from './activitySchema';\nexport * from './codeLabSchema';\nexport * from './worksheetSchema';\nexport * from './handoutSchema';\nexport * from './slideDeckSchema';\nexport * from './teacherGuideSchema';\nexport * from './extensionSchema';\nexport * from './judgeSchema';\nexport * from './projectGraphSchema';\nexport * from './instructionSchema';\nexport * from './selfLabSchema';\nexport * from './diagnosticQuizSchema';\nexport * from './selfPacedBundleSchema';\n\n// โโโ New schemas (derived from canonical templates) โโโโโโโโโโโโโโโโโโโโโโโโโโโ\nexport * from './rubricSchema';\nexport * from './exitTicketSchema';\nexport * from './tieredPracticeSchema';\nexport * from './bellRingerSchema';\nexport * from './glossarySchema';\nexport * from './choiceBoardSchema';\nexport * from './graphicOrganizerSchema';\nexport * from './scienceLabSchema';\nexport * from './stationRotationSchema';\nexport * from './taskCardsSchema';\nexport * from './reviewGameSchema';\n\nimport { LessonPlanSchema, LessonPlanEDPSchema, LessonPlan5ESchema } from './lessonPlanSchema';\nimport { ActivityLabSchema } from './activitySchema';\nimport { CodeLabSchema } from './codeLabSchema';\nimport { WorksheetSchema } from './worksheetSchema';\nimport { HandoutSchema } from './handoutSchema';\nimport { SlideDeckSchema } from './slideDeckSchema';\nimport { TeacherGuideSchema } from './teacherGuideSchema';\nimport { ExtensionSchema } from './extensionSchema';\nimport { DiagnosticQuizSchema } from './diagnosticQuizSchema';\nimport { RubricSchema } from './rubricSchema';\nimport { ExitTicketSchema } from './exitTicketSchema';\nimport { TieredPracticeSchema } from './tieredPracticeSchema';\nimport { BellRingerSchema } from './bellRingerSchema';\nimport { GlossarySchema } from './glossarySchema';\nimport { ChoiceBoardSchema } from './choiceBoardSchema';\nimport { GraphicOrganizerSchema } from './graphicOrganizerSchema';\nimport { ScienceLabSchema } from './scienceLabSchema';\nimport { StationRotationSchema } from './stationRotationSchema';\nimport { TaskCardsSchema } from './taskCardsSchema';\nimport { ReviewGameSchema } from './reviewGameSchema';\n\n/**\n * Discriminated Union of all Curriculum Artifacts.\n * Keyed on `artifactType` literal field.\n *\n * Lesson variants:\n * - 'LESSON' โ LessonPlanSchema (legacy, deprecated โ kept for backward compat)\n * - 'LESSON_EDP' โ LessonPlanEDPSchema (Engineering Design Process model)\n * - 'LESSON_5E' โ LessonPlan5ESchema (5E Instructional Model)\n */\nexport const CurriculumArtifactSchema = z.discriminatedUnion('artifactType', [\n // โโโ Lesson variants โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n LessonPlanSchema, // 'LESSON' โ legacy (deprecated)\n LessonPlanEDPSchema, // 'LESSON_EDP' โ Engineering Design Process\n LessonPlan5ESchema, // 'LESSON_5E' โ 5E Instructional Model\n // โโโ Activity & Practice โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n ActivityLabSchema, // 'ACT'\n TieredPracticeSchema, // 'TIERED_PRACTICE'\n BellRingerSchema, // 'BELL_RINGER'\n ChoiceBoardSchema, // 'CHOICE_BOARD'\n // โโโ Code โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n CodeLabSchema, // 'CODE'\n // โโโ Assessment โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n DiagnosticQuizSchema, // 'QUIZ'\n RubricSchema, // 'RUBRIC'\n ExitTicketSchema, // 'EXIT_TICKET'\n // โโโ Student-facing resources โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n WorksheetSchema, // 'WKS'\n HandoutSchema, // 'HANDOUT'\n SlideDeckSchema, // 'SLIDE'\n TeacherGuideSchema, // 'GUIDE'\n ExtensionSchema, // 'EXT'\n GlossarySchema, // 'GLOSSARY'\n GraphicOrganizerSchema,// 'GRAPHIC_ORGANIZER'\n ScienceLabSchema, // 'SCIENCE_LAB'\n StationRotationSchema, // 'STATION_ROTATION'\n TaskCardsSchema, // 'TASK_CARDS'\n ReviewGameSchema, // 'REVIEW_GAME'\n]);\n\nexport type CurriculumArtifact = z.infer<typeof CurriculumArtifactSchema>;\n\n/**\n * Basic Learning Objective schema from Knowledge Graph / Tree\n */\nexport const LearningObjectiveInputSchema = z.object({\n code: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n lo_type: z.enum(['UNIVERSAL', 'CONCEPTUAL_IMPL', 'SPECIFIC_IMPL', 'ULO', 'CIO', 'SIO']).or(z.string()),\n bloom_level: z.string().optional().default('understand'),\n knowledge_dimension: z.string().optional().default('CONCEPTUAL'),\n assessment: z.string().optional().default('concept-check'),\n keyword: z.string().optional().default(''),\n concept: z.string().optional().default(''),\n concept_code: z.string().optional().default(''),\n concept_name: z.string().optional().default(''),\n});\n\nexport interface LearningObjectiveInput {\n code: string;\n name: string;\n description?: string;\n lo_type?: 'UNIVERSAL' | 'CONCEPTUAL_IMPL' | 'SPECIFIC_IMPL' | 'ULO' | 'CIO' | 'SIO' | string;\n bloom_level?: string;\n knowledge_dimension?: string;\n assessment?: string;\n keyword?: string;\n concept?: string;\n concept_code?: string;\n concept_name?: string;\n}\n\n/**\n * Milestone input schema matching knowledge-tree Roadmap & Learning Path JSON\n */\nexport const MilestoneInputSchema = z.object({\n id: z.string().optional(),\n name: z.string(),\n description: z.string().optional().default(''),\n feature_id: z.string().optional().default('F0'),\n feature_name: z.string().optional().default(''),\n concept_code: z.string().optional().default(''),\n concept_name: z.string().optional().default(''),\n completion_level: z.string().optional().default('base'),\n difficulty: z.string().optional().default('Beginner'),\n bloom_level: z.string().optional().default('Understand'),\n tech_keywords: z.array(z.string()).optional().default([]),\n prerequisite_concept_codes: z.array(z.string()).optional().default([]),\n all_keywords: z.array(z.string()).optional().default([]).describe('All keywords associated with this milestone (aggregated from concepts)'),\n new_keywords: z.array(z.string()).optional().default([]).describe('Keywords introduced for the first time at this milestone'),\n prerequisite_keywords: z.array(z.string()).optional().default([]).describe('Keywords already introduced in earlier milestones'),\n learning_objectives: z.array(LearningObjectiveInputSchema).optional().default([]),\n rationale: z.string().or(z.array(z.string())).optional().default(''),\n instruction_ref: z.string().optional(),\n /** Canonical numeric grade band [min, max] for standards retrieval (Phase 2). */\n grade_band: z.tuple([z.number().int(), z.number().int()]).optional(),\n});\n\nexport interface MilestoneInput {\n id?: string;\n name: string;\n description?: string;\n feature_id?: string;\n feature_name?: string;\n concept_code?: string;\n concept_name?: string;\n completion_level?: string;\n difficulty?: string;\n bloom_level?: string;\n tech_keywords?: string[];\n prerequisite_concept_codes?: string[];\n all_keywords?: string[];\n new_keywords?: string[];\n prerequisite_keywords?: string[];\n learning_objectives?: LearningObjectiveInput[];\n rationale?: string | string[];\n instruction_ref?: string;\n grade_band?: [number, number];\n}\n\n/**\n * Phase input schema\n */\nexport const PhaseInputSchema = z.object({\n phase_id: z.number().or(z.string()),\n title: z.string().optional(),\n phase_name: z.string().optional(),\n description: z.string().optional().default(''),\n target_outcome: z.string().optional(),\n milestones: z.array(MilestoneInputSchema).default([]),\n});\n\nexport type PhaseInput = z.input<typeof PhaseInputSchema>;\n\n/**\n * Full Roadmap input schema\n */\nexport const RoadmapInputSchema = z.object({\n project_brief: z.object({\n name: z.string().optional(),\n title: z.string().optional(),\n goal: z.string().optional(),\n description: z.string().optional().default(''),\n tech_stack: z.array(z.string()).optional().default([]),\n estimated_hours: z.number().optional().default(0),\n estimated_weeks: z.number().optional().default(0),\n target_learner: z.string().optional(),\n audience: z.string().optional(),\n icon: z.string().optional(),\n }),\n phases: z.array(PhaseInputSchema).default([]),\n});\n\nexport type RoadmapInput = z.infer<typeof RoadmapInputSchema>;\n\nexport interface ProjectRoadmap {\n title: string;\n goal?: string;\n topic?: string;\n target_language?: string;\n target_audience?: string;\n tech_stack?: string[];\n milestones: MilestoneInput[];\n}\nexport * from './curriculumPlanSchema';\n","/**\n * Markdown Template for Master Lesson Plan (5E Model)\n * Exact Canonical Template from the-ultimate-curriculum-agent-os/_templates/LESSON_5E_template.md\n */\nexport const LESSON_PLAN_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"LESSON_5E\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T1\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\nprerequisite: []\ntemplate_contract: \"lesson-plan-v2\"\ntemplate_required_sections:\n - \"A. Lesson Design Plan\"\n - \"Learning Objectives & Evidence\"\n - \"Activity Sequence\"\n - \"Resource Map\"\n - \"Assessment Map\"\n - \"Artifact Contract\"\n - \"B. Lesson Flow\"\n---\n<!-- INJECT_BODY -->\n\n# LESSON [{{LESSON_ID}}]: {{TITLE}} (5E Model)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** {{DURATION}}\n- **Materials & Equipment:** {{MATERIALS_SUMMARY}}\n- **Keywords / Core Concepts:** {{KEYWORDS}}\n\n| LO | Objective (Bloom's) | Student Evidence | Success Criteria |\n|---|---|---|---|\n{{LEARNING_OBJECTIVES_TABLE_ROWS}}\n\n### 2. Activity Sequence\n> This is the canonical activity contract. Satellite artifacts must expand this sequence and must not invent a different one.\n\n| Seq | 5E Phase | Activity Type | Actor | Purpose | Student Action | Teacher Move | Output/Evidence | LO | Time | Artifact Contract |\n|---|---|---|---|---|---|---|---|---|---|---|\n{{ACTIVITY_SEQUENCE_TABLE_ROWS}}\n\n### 3. Resource Map\n| Resource | Used In Activity | Purpose | Owner Artifact |\n|---|---|---|---|\n{{RESOURCE_MAP_TABLE_ROWS}}\n\n### 4. Assessment Map\n| Evidence | Assessed By | Criteria | Follow-up If Missing |\n|---|---|---|---|\n{{ASSESSMENT_MAP_TABLE_ROWS}}\n\n### 5. Artifact Contract\n- **ACT must expand:** {{ACT_CONTRACT}}\n- **GUIDE must support:** {{GUIDE_CONTRACT}}\n- **SLIDE must visualize:** {{SLIDE_CONTRACT}}\n- **HANDOUT must provide:** {{HANDOUT_CONTRACT}}\n- **WKS must practice:** {{WKS_CONTRACT}}\n- **QUIZ must assess:** {{QUIZ_CONTRACT}}\n- **EXT must extend:** {{EXT_CONTRACT}}\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ENGAGE โ {{ENGAGE_DURATION}} mins\n- **Hook Scenario:** {{HOOK_SCENARIO}}\n- **Open Question:** {{HOOK_OPEN_QUESTION}}\n- **Transition:** {{HOOK_TRANSITION}}\n\n### 2. EXPLORE โ {{EXPLORE_DURATION}} mins\n- **Activity Reference:** {{EXPLORE_ACTIVITY_REF}}\n- **Student Discovery:** {{EXPLORE_STUDENT_DISCOVERY}}\n\n### 3. EXPLAIN โ {{EXPLAIN_DURATION}} mins\n- **Definitions:** \n{{EXPLAIN_DEFINITIONS}}\n- **Visual Illustration (REQUIRED):**\n{{EXPLAIN_VISUAL_ILLUSTRATION}}\n\n### 4. ELABORATE โ {{ELABORATE_DURATION}} mins\n- **Tiered Scaffolding:**\n - ๐ฅ **Bronze:** {{DIFFERENTIATION_BRONZE}}\n - ๐ฅ **Silver:** {{DIFFERENTIATION_SILVER}}\n - ๐ฅ **Gold:** {{DIFFERENTIATION_GOLD}}\n\n> **ACT Contract**: Detailed operational instructions must expand the Activity Sequence above and must not change the planned evidence target.\n\n### 5. EVALUATE โ {{EVALUATE_DURATION}} mins\n- **Exit Ticket:** {{EXIT_TICKET_CONTENT}}\n- **Closing:** {{CLOSING_REMARKS}}\n\n> **QUIZ Contract**: Detailed assessment criteria and rubrics must assess the evidence and success criteria defined in the Lesson Design Plan.\n\n---\n\n## [OPTIONAL] Teacher Notes\n- **Common Pitfalls:**\n{{COMMON_PITFALLS}}\n- **Troubleshooting:**\n{{TROUBLESHOOTING_ROWS}}\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\n> List all satellite files used in this lesson.\n\n| Artifact File | Role in the Classroom | When to Use |\n|---|---|---|\n| \\`GUIDE_{{LESSON_ID}}.md\\` | Detailed Teaching Script | Teacher preparation |\n| \\`SLIDE_{{LESSON_ID}}.md\\` | Presentation Content | Throughout the session |\n| \\`HANDOUT_{{LESSON_ID}}.md\\` | Theory Summary for Students | During EXPLAIN phase |\n| \\`ACT_{{LESSON_ID}}.md\\` | Detailed Learning Activity Operations | During EXPLORE / ELABORATE / checkpoint phases |\n| \\`WKS_{{LESSON_ID}}.md\\` | Individual Worksheet | Wrap-up or Homework |\n| \\`QUIZ_{{LESSON_ID}}.md\\` | Assessment Rubric | During EVALUATE phase |\n| \\`EXT_{{LESSON_ID}}.md\\` | Enrichment Materials | For \"Gold\" students |\n`.trim();\n","/**\n * Markdown Template for Inquiry-Based Activity (ACT)\n * Exact Canonical Template from the-ultimate-curriculum-agent-os/_templates/ACT_template.md\n */\nexport const ACT_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T2\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Computational Thinking Focus\"\n - \"Materials & Setup\"\n - \"Constraints & Safety\"\n - \"Active Learning Workflow\"\n - \"3-Tier Differentiation\"\n - \"Reflection\"\n---\n<!-- INJECT_BODY -->\n\n# INQUIRY-BASED ACTIVITY: {{TITLE}}\n_Milestone: {{MILESTONE_ID}} | Module: {{MODULE_NAME}} | Lesson: {{LESSON_ID}}_\n\n## [REQUIRED] Computational Thinking Focus\n- **Problem Statement (Real-world Scenario):** {{PROBLEM_STATEMENT}}\n- **Decomposition:**\n{{DECOMPOSITION_STEPS}}\n- **Algorithm Design:** {{ALGORITHM_DESIGN}}\n\n## [REQUIRED] Materials & Setup\n- **Reference Material:** Students should use the **HANDOUT** for this lesson as their primary technical reference (lifeline).\n- **Hardware/Software:**\n<!-- [HARDWARE_BOM] -->\n{{HARDWARE_ITEMS}}\n<!-- [/HARDWARE_BOM] -->\n- **Software:** {{SOFTWARE_ITEMS}}\n- **Consumables:** {{CONSUMABLES}}\n- **Other Resources:** {{OTHER_RESOURCES}}\n\n## [REQUIRED] Constraints & Safety\n- โ ๏ธ **Technical/Safety:** {{SAFETY_WARNING}}\n- ๐ก **Design Constraint:** {{DESIGN_CONSTRAINT}}\n\n## [REQUIRED] Active Learning Workflow\n\n### Phase 1: Planning & Design โ {{PHASE1_DURATION}} mins\n- **Student Task:** Hand-draw (or draft in words) the algorithm flowchart or connection architecture before touching the computer/devices.\n- **Teacher Action:** Walk around to check the logic of each group. Ask inquiry questions:\n{{PHASE1_INQUIRY_QUESTIONS}}\n\n### Phase 2: Implementation & Discovery โ {{PHASE2_DURATION}} mins\n- **Student Task:** Apply the knowledge from the **HANDOUT** to realize the plan designed in Phase 1. Encourage self-inquiry and documentation lookup.\n- **Teacher Action:** Avoid \"hand-holding.\" Only intervene if a group has been stuck for more than 5 minutes.\n{{PHASE2_GUIDANCE_BLOCK}}\n\n### Phase 3: Debugging & Testing โ {{PHASE3_DURATION}} mins\n- **Testing:** Students run their system.\n- **Error Analysis:** Ask students to record any error codes or unexpected behaviors and compare them with the Troubleshooting table in the Handout.\n{{PHASE3_TESTING_STEPS}}\n\n## [REQUIRED] 3-Tier Differentiation\n> MUST design tasks in 3 tiers to support diverse learner groups. Bronze is the minimum requirement for all students.\n- ๐ฅ **Bronze (Foundational):** {{DIFFERENTIATION_BRONZE}}\n- ๐ฅ **Silver (Application):** {{DIFFERENTIATION_SILVER}}\n- ๐ฅ **Gold (Enrichment/Creative):** {{DIFFERENTIATION_GOLD}}\n\n## [REQUIRED] Reflection\n- **Discussion Question:** {{REFLECTION_QUESTION}}\n`.trim();\n","/**\n * Markdown Template for Code Lab (LAB)\n * 100% English Template Structure (Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/LAB_TEMPLATE.md)\n */\nexport const CODE_LAB_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"LAB\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T2\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\n---\n<!-- INJECT_BODY -->\n\n# ๐จโ๐ป CODE LAB: {{TITLE}}\n_Milestone: {{MILESTONE_ID}} | Tech Stack: {{TECH_STACK}}_\n\n## ๐ฏ Overview\nThis lab focuses on the practical implementation of core technical concepts, bridging theory into working, robust, and testable code.\n\n## ๐ ๏ธ Environment & Setup\n- **Language / Framework:** {{LANGUAGE_FRAMEWORK}}\n- **IDE / Editor:** {{IDE_EDITOR}}\n- **Required Libraries:** {{REQUIRED_LIBRARIES}}\n- **Hardware / Connection Setup:** {{HARDWARE_ENV_CONNECTION}}\n\n## ๐ Lab Tasks (3-Tier Differentiation)\n\n### ๐ฅ Bronze (Foundational) โ {{BRONZE_MINS}} mins\n**Objective:** {{BRONZE_OBJECTIVE}}\n- **Task:** {{BRONZE_TASK}}\n- **Requirement:** {{BRONZE_REQUIREMENT}}\n\n### ๐ฅ Silver (Application) โ {{SILVER_MINS}} mins\n**Objective:** {{SILVER_OBJECTIVE}}\n- **Task:** {{SILVER_TASK}}\n- **Requirement:** {{SILVER_REQUIREMENT}}\n\n### ๐ฅ Gold (Enrichment/Creative) โ {{GOLD_MINS}} mins\n**Objective:** {{GOLD_OBJECTIVE}}\n- **Task:** {{GOLD_TASK}}\n- **Requirement:** {{GOLD_REQUIREMENT}}\n\n## ๐ป Technical Reference ([SME_MANDATE])\n<!-- [SME_MANDATE] -->\n> Any code provided in this section is verified for syntax accuracy and runtime execution.\n\n### Starter Code Template\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{STARTER_CODE}}\n\\`\\`\\`\n\n### Solution Code\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SOLUTION_CODE}}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n## ๐ Troubleshooting & Debugging Matrix\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n{{TROUBLESHOOTING_ROWS}}\n\n## ๐ Submission & Verification Checklist\n{{CHECKLIST_ITEMS}}\n`.trim();\n","/**\n * Markdown Template for Self-Paced Hands-on Lab (SELF_LAB)\n * Features Progressive Hints System (Accordion/Spoilers) & Automated Verification Commands\n */\nexport const SELF_LAB_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"SELF_LAB\"\nlanguage: \"{{LANGUAGE}}\"\ndifficulty: \"{{DIFFICULTY}}\"\nestimated_minutes: {{ESTIMATED_MINUTES}}\ntech_stack: {{TECH_STACK}}\n---\n\n# ๐ Self-Paced Hands-On Lab: {{TITLE}}\n\n> โฑ๏ธ **Estimated Duration:** ~{{ESTIMATED_MINUTES}} mins \n> ๐ฏ **Difficulty Level:** {{DIFFICULTY_UPPER}} \n> ๐งฐ **Tech Stack:** {{TECH_STACK_STR}} \n> ๐ก **Self-Learner Notice:** You are in full control of this lab. Follow the progressive challenges below. If you get stuck at any point, use the **Progressive Hints System** to get unstuck without ruining the learning experience!\n\n---\n\n## ๐ Mission Briefing & Environment Setup\n{{MISSION_BRIEFING}}\n\n### ๐ซ Preflight Checklist\n{{PREFLIGHT_CHECKLIST}}\n\n---\n\n## ๐ฏ Progressive Challenges (3-Tier Differentiation)\n\n### ๐ฅ Challenge 1: Foundational Core (Bronze) โ ~{{BRONZE_MINS}} mins\n**Objective:** {{BRONZE_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{BRONZE_TASKS}}\n\n#### ๐งช Self-Verification Command:\n\\`\\`\\`bash\n{{BRONZE_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{BRONZE_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### ๐ก Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>๐ก Hint Level 1: Conceptual Clue (Hฦฐแปng tฦฐ duy)</b></summary>\n\n{{BRONZE_HINT_1}}\n</details>\n\n<details>\n<summary><b>๐ Hint Level 2: Structural Skeleton (Khung code mแบซu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{BRONZE_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>๐จ Hint Level 3: Full Solution & Explanation (Lแปi giแบฃi trแปn vแบนn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{BRONZE_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{BRONZE_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n### ๐ฅ Challenge 2: Logic & Error Handling (Silver) โ ~{{SILVER_MINS}} mins\n**Objective:** {{SILVER_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{SILVER_TASKS}}\n\n#### ๐งช Self-Verification Command:\n\\`\\`\\`bash\n{{SILVER_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{SILVER_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### ๐ก Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>๐ก Hint Level 1: Conceptual Clue (Hฦฐแปng tฦฐ duy)</b></summary>\n\n{{SILVER_HINT_1}}\n</details>\n\n<details>\n<summary><b>๐ Hint Level 2: Structural Skeleton (Khung code mแบซu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SILVER_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>๐จ Hint Level 3: Full Solution & Explanation (Lแปi giแบฃi trแปn vแบนn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SILVER_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{SILVER_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n### ๐ฅ Challenge 3: Edge Cases & Optimization (Gold) โ ~{{GOLD_MINS}} mins\n**Objective:** {{GOLD_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{GOLD_TASKS}}\n\n#### ๐งช Self-Verification Command:\n\\`\\`\\`bash\n{{GOLD_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{GOLD_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### ๐ก Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>๐ก Hint Level 1: Conceptual Clue (Hฦฐแปng tฦฐ duy)</b></summary>\n\n{{GOLD_HINT_1}}\n</details>\n\n<details>\n<summary><b>๐ Hint Level 2: Structural Skeleton (Khung code mแบซu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{GOLD_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>๐จ Hint Level 3: Full Solution & Explanation (Lแปi giแบฃi trแปn vแบนn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{GOLD_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{GOLD_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n## ๐ Self-Learner Troubleshooting Matrix\n| Symptom / Error Message | Root Cause | Exact Fix |\n| :--- | :--- | :--- |\n{{TROUBLESHOOTING_ROWS}}\n\n---\n\n## ๐ Final Lab Submission & Mastery Checklist\n{{FINAL_CHECKLIST}}\n`.trim();\n","/**\n * Markdown Template for Diagnostic & Active Recall Quiz (QUIZ)\n * Compatible with @thanh01.pmt/interactive-quiz-kit standard\n */\nexport const QUIZ_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"QUIZ\"\nlanguage: \"{{LANGUAGE}}\"\ntotal_questions: {{TOTAL_QUESTIONS}}\npassing_score_pct: {{PASSING_SCORE_PCT}}\n---\n\n# ๐ง Diagnostic & Active Recall Quiz: {{TITLE}}\n\n> โฑ๏ธ **Recommended Time:** ~10-15 mins \n> ๐ฏ **Passing Score:** {{PASSING_SCORE_PCT}}% \n> ๐ก **Purpose:** Test your conceptual understanding, catch hidden misconceptions, and evaluate architectural trade-offs.\n\n---\n\n{{QUESTIONS_SECTION}}\n\n---\n\n## ๐ Comprehensive Answer Key & Deep Explanation (Expand after completing)\n<details>\n<summary><b>๐ Click to View Full Explanations & Common Pitfall Analysis</b></summary>\n\n{{ANSWER_KEY_SECTION}}\n</details>\n`.trim();\n","import type { MilestoneInput } from '../../schemas';\nimport { LESSON_PLAN_TEMPLATE } from '../../templates';\n\nexport interface LessonPromptInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n contextContinuity?: string;\n /** Pre-rendered STANDARDS CONTEXT block (from buildStandardsContextBlock) โ verbatim standard statements binding this lesson. */\n standardsContext?: string;\n}\n\nexport function buildLessonMasterPrompt(input: LessonPromptInput): string {\n const { milestone, language, topic, targetAudience, contextContinuity, standardsContext } = input;\n const learningObjectives = milestone.learning_objectives || [];\n const lessonId = milestone.id || milestone.concept_code || 'U01_M01_L01';\n\n return `\n# ROLE & PERSONA\nYou are a Senior Educational Content Editor and Curriculum Architect (@content), expert in the 5E Instructional Model (Engage, Explore, Explain, Elaborate, Evaluate), Bloom's Revised Taxonomy, and Universal Design for Learning (UDL).\n\n# MISSION SCOPE\nBuild a deep, rigorous, and highly pedagogical Master Lesson Plan (LESSON) that strictly fulfills the target Learning Objectives across any domain (Coding, Engineering, Data, Science, Math, Business, Design, or Humanities).\n\n## IN SCOPE:\n- **Pedagogical Structure:** Use the 5E model to orchestrate active inquiry and cognitive scaffolding.\n- **Cumulative Scaffolding & Zero Duplication:**\n - โ **ANTI-DUPLICATION MANDATE:** Inspect the CUMULATIVE CONTEXT ($L_1 \\dots L_{N-1}$). You MUST NOT re-teach, re-explain, or duplicate the exact same code snippet, hardware wiring, or basic concept already taught in prior lessons (e.g. if $L_1$ already taught blinking LED on pin 13 with delay(1000), $L_2$ MUST advance to multi-LED sequencing, variable state, PWM analogWrite, or sensor input).\n - ๐ **CONTINUOUS STORYLINE & ANALOGIES:** Re-use and build upon the overarching narrative, character evolution, and analogies established in CONTENT_CONTINUITY.md (e.g. Mind -> Reflexes -> Hands -> Master System) instead of inventing disconnected one-off metaphors.\n- **Strict Satellite Artifact ID Contract:** All satellite deliverables referenced in the Lesson Plan MUST follow canonical naming based on **lessonId** (\"${lessonId}\"):\n - Activity Lab: \\`ACT_${lessonId}\\`\n - Slide Deck: \\`SLIDE_${lessonId}\\`\n - Diagnostic Quiz: \\`QUIZ_${lessonId}\\`\n - Teacher Guide: \\`GUIDE_${lessonId}\\`\n - Worksheet: \\`WKS_${lessonId}\\`\n - Student Handout: \\`HANDOUT_${lessonId}\\`\n - Extension: \\`EXT_${lessonId}\\`\n - โ PROHIBITED: Never generate ad-hoc IDs like \\`ACT_WARMUP_01\\`, \\`SLIDE_CORE_02\\`, or \\`QUIZ_WRAPUP_05\\`.\n- **Authentic Real-World Hook:** Create a compelling, high-stakes scenario tailored to the domain:\n - *Tech/Software/IoT:* Server outage, vaccine cold-chain failure, cybersecurity breach, logistics bottleneck.\n - *Data/Science/Math:* Clinical trial anomaly, ecological tipping point, forecasting error, experimental anomaly.\n - *Business/Economics/Finance:* Critical market shift, startup runway crisis, operational failure, supply chain shock.\n - *Design/Media/Humanities:* UX accessibility collapse, public communication dilemma, historical inflection point.\n- **Relatable Analogies & Conceptual Depth:** For EVERY core concept, provide a relatable real-world analogy alongside rigorous domain explanation.\n- **Multidimensional Comparison Table:** Compare at least 3 options/approaches across 4 columns (Option, Mechanism/Principle, Trade-offs/Impact, Practical Meaning).\n- **Formulas, Rules of Thumb, or Heuristics:** Provide mathematical formulas in LaTeX (e.g. $Z = \\\\frac{x - \\\\mu}{\\\\sigma}$), scientific equations, or domain-specific decision heuristics where applicable.\n- **Visual Architecture & Flow:** Provide a valid, clean Mermaid diagram (flowchart, sequence diagram, or state machine) illustrating the conceptual flow, system architecture, or process sequence.\n- **Guided Practice Demonstration:**\n - *For Coding/Tech Courses:* Provide complete, runnable code with line-by-line comments explaining \"Why\" not just \"How\".\n - *For Non-Coding/Domain Courses:* Provide a structured analysis framework, step-by-step calculation, protocol template, or case study walkthrough.\n- **Formative Exit Ticket:** Formulate scenario-based questions at the Apply/Analyze Bloom level + a metacognitive self-assessment prompt.\n- **Comprehensive Teacher Notes:** Detail common student pitfalls/misconceptions and an actionable Troubleshooting/Intervention Matrix.\n\n## OUT OF SCOPE (PROHIBITED):\n- Do NOT repeat exercises, code, or circuits from prior lessons in the roadmap.\n- Do NOT invent ad-hoc artifact IDs (use only canonical IDs).\n- Do NOT write shallow, generic textbook summaries.\n- Do NOT skip analogies or provide dry, context-free definitions.\n- Do NOT omit Mermaid diagrams or comparison tables.\n- Do NOT force programming code on non-technical subjects (use domain-appropriate structured frameworks instead).\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate structured data that will render directly into this exact Markdown template:\n---\n${LESSON_PLAN_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Lesson ID:** ${milestone.id || milestone.concept_code || 'L01'}\n- **Title / Name:** ${milestone.name}\n- **Milestone Description:** ${milestone.description}\n- **Feature / Phase:** ${milestone.feature_name || milestone.feature_id || 'Core Learning'}\n- **Bloom Taxonomy Target:** ${milestone.bloom_level || 'understand'}\n- **Difficulty:** ${milestone.difficulty || 'Intermediate'}\n- **Subject / Topic:** ${topic || milestone.feature_name || 'Curriculum Subject'}\n- **Target Audience:** ${targetAudience || 'Target Learners'}\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Learning Objectives:**\n${learningObjectives.map((lo) => ` - [${lo.lo_type || 'ULO'}] ${lo.code}: ${lo.name} (${lo.description || ''}) -> Bloom: ${lo.bloom_level || 'understand'}`).join('\\n')}\n\n${contextContinuity ? `# CUMULATIVE CONTEXT & CONTINUITY (SOURCE OF TRUTH FOR PRIOR LESSONS)\\n${contextContinuity}\\n\\n*INSTRUCTION: Build strictly on top of the above progress. DO NOT re-teach concepts already marked completed above.*` : ''}\n\n${standardsContext || ''}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching the LessonPlanSchema with these exact keys:\n- \"artifactType\": \"LESSON\"\n- \"lessonId\": \"${milestone.id || 'L01'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"topic\": \"${topic || milestone.feature_name || 'General Topic'}\"\n- \"targetGradeOrAudience\": \"${targetAudience || 'Learners'}\"\n- \"overview\": string (Pedagogical overview)\n- \"learningObjectives\": array of { \"code\": string, \"name\": string, \"description\": string, \"bloomLevel\": string, \"successCriteria\": string }\n- \"prerequisites\": string (Prior knowledge linkage)\n- \"materialsSummary\": string (Required tools / resources)\n- \"keywords\": string[] (Core domain terms introduced)\n- \"hookTitle\": string (Compelling scenario title)\n- \"hookScenario\": string (High-stakes real-world scenario)\n- \"hookQuestions\": string[] (At least 2 provocative open-ended inquiry questions)\n- \"coreConcepts\": array of { \"name\": string, \"analogy\": string, \"technicalDepth\": string, \"comparisonTable\": { \"headers\": string[], \"rows\": string[][] }, \"formulaOrRule\": string }\n- \"guidedPractice\": { \"title\": string, \"explanation\": string, \"codeSnippet\": string (Runnable code for tech courses OR structured domain template/walkthrough for non-tech), \"codeLanguage\": string (e.g. \"python\", \"typescript\", \"markdown\", \"text\"), \"mermaidDiagram\": string (Valid Mermaid diagram syntax) }\n- \"independentPractice\": { \"title\": string, \"description\": string }\n- \"differentiation\": { \"bronzeTier\": string, \"silverTier\": string, \"goldTier\": string }\n- \"sections\": array of { \"title\": string, \"durationMinutes\": number, \"teacherActions\": string, \"studentActions\": string, \"analogies\": string[], \"formativeCheck\": string }\n- \"exitTicket\": { \"questionStem\": string, \"expectedAnswerOrRubric\": string, \"metacognitivePrompt\": string }\n- \"teacherNotes\": { \"commonPitfalls\": string[], \"troubleshootingMatrix\": array of { \"issue\": string, \"potentialCause\": string, \"solution\": string }, \"extensionNotes\": string }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\nimport { ACT_TEMPLATE } from '../../templates';\n\nexport interface ActivityPromptInput {\n lesson: LessonPlan;\n language: string;\n hardwareBOM?: string[];\n softwareTools?: string[];\n}\n\nexport function buildActivityPrompt(input: ActivityPromptInput): string {\n const { lesson, language, hardwareBOM, softwareTools } = input;\n\n const loList = lesson.learningObjectives\n .map((lo) => `- [${lo.bloomLevel}] ${lo.code}: ${lo.name || ''} โ ${lo.description}${lo.successCriteria ? ` (Evidence: ${lo.successCriteria})` : ''}`)\n .join('\\n');\n\n const lessonFlowSummary = (lesson.sections || [])\n .map((s, idx) => `### Stage ${idx + 1}: ${s.title} (${s.durationMinutes} mins)\\n- Teacher Moves: ${s.teacherActions}\\n- Student Actions: ${s.studentActions}${(s.analogies || []).length > 0 ? `\\n- Analogies: ${s.analogies.join('; ')}` : ''}`)\n .join('\\n\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **@activity** Specialist in Inquiry-Based Learning and Hands-On STEM/Software Engineering design.\n\n# MISSION SCOPE & CANONICAL CONTRACT\nTransform the exact pedagogical flow and activities from the Master Lesson Plan (LESSON) into an active, hands-on, inquiry-driven classroom lab.\n\n## STRICT CONTRACT RULES (CRITICAL):\n1. **Activity Sequence Alignment:** You MUST operationalize and expand the EXACT activity sequence and stages defined in the Master Lesson Plan. DO NOT invent an unrelated topic or activity (e.g. if the lesson is about Design Thinking, Empathy Mapping and Problem Definition, the activity MUST be an Empathy Mapping & Problem Definition lab on paper/Miro, NOT a physical hardware soldering or wiring lab).\n2. **Context-Appropriate Materials & BOM:** \n - Only include physical hardware in \\`<!-- [HARDWARE_BOM] -->\\` if the lesson explicitly involves physical wiring or hardware setup.\n - If the lesson is conceptual, design, or pure software, \\`hardware\\` must be empty or contain only workstation tools (e.g. \"Developer Workstation\"), while \\`consumables\\` and \\`software\\` contain paper, sticky notes, IDE, or design canvas.\n3. **Context-Appropriate Safety:** Safety warnings must strictly match what students actually do in this specific lesson (e.g. avoid electrical warnings for a paper-based design workshop).\n4. **3-Tier Differentiation:** Follow the scaffolding defined in the lesson plan:\n - ๐ฅ Bronze: ${lesson.differentiation?.bronzeTier || 'Foundational core task'}\n - ๐ฅ Silver: ${lesson.differentiation?.silverTier || 'Application task with additional logic'}\n - ๐ฅ Gold: ${lesson.differentiation?.goldTier || 'Enrichment and creative extension'}\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${ACT_TEMPLATE}\n---\n\n# CANONICAL MASTER LESSON CONTEXT (SOURCE OF TRUTH)\n- **Lesson ID:** ${lesson.lessonId}\n- **Lesson Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Target Audience:** ${lesson.targetGradeOrAudience}\n- **Lesson Overview:** ${lesson.overview}\n- **Hook Scenario:** ${lesson.hookScenario}\n- **Learning Objectives:**\n${loList}\n\n- **Master Lesson Flow (Stages & Teacher/Student Actions):**\n${lessonFlowSummary}\n\n${lesson.guidedPractice ? `- **Guided Practice Context:** ${lesson.guidedPractice.title} โ ${lesson.guidedPractice.explanation}` : ''}\n${lesson.materialsSummary ? `- **Lesson Materials Summary:** ${lesson.materialsSummary}` : ''}\n\n# INPUT PARAMETERS\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Available Hardware Context:** ${(hardwareBOM || []).join(', ') || 'Developer Workstation'}\n- **Available Software Context:** ${(softwareTools || []).join(', ') || 'IDE / Design Canvas'}\n\n# REQUIRED JSON KEYS\nReturn a single JSON object matching ActivityLabSchema with these exact keys:\n- \"artifactType\": \"ACT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (Must match or complement \"${lesson.title}\")\n- \"language\": \"${language}\"\n- \"objective\": string (Hands-on practical objective directly fulfilling the lesson LOs)\n- \"totalDurationMinutes\": number (e.g. 45 or 60)\n- \"computationalThinking\": { \n \"problemStatement\": string (Authentic real-world challenge aligned with lesson hook),\n \"decomposition\": string[] (3-4 discrete steps directly matching the lesson flow),\n \"algorithmDesign\": string (Data flow, logic, or design framework to follow before executing)\n }\n- \"materialsBOM\": { \n \"hardware\": string[] (Hardware components ONLY if physical hardware is touched, else empty array []),\n \"software\": string[] (IDEs, web tools, simulators, or design platforms),\n \"consumables\": string[] (Paper, pens, sticky notes, wires if applicable),\n \"otherResources\": string[] (Handout, empathy canvas, or reference docs)\n }\n- \"safetyWarnings\": string[] (Realistic cautions matching the specific activity)\n- \"designConstraints\": string[] (Design constraints to stimulate thinking)\n- \"teacherTips\": string[] (Pedagogical facilitation tips)\n- \"activeLearningWorkflow\": {\n \"phase1Planning\": { \"durationMinutes\": number, \"studentTask\": string, \"teacherAction\": string, \"inquiryQuestions\": string[] },\n \"phase2Implementation\": { \"durationMinutes\": number, \"studentTask\": string, \"teacherAction\": string, \"codeOrCommands\": string[] },\n \"phase3Debugging\": { \"durationMinutes\": number, \"testingSteps\": string, \"errorAnalysis\": string }\n }\n- \"steps\": array of {\n \"stepNumber\": number,\n \"title\": string,\n \"durationMinutes\": number,\n \"teacherInstructions\": string,\n \"studentInstructions\": string,\n \"checkpoint\": string\n } (Detailed step-by-step procedure operationalizing the lesson stages)\n- \"differentiation3Tier\": { \n \"bronzeTier\": string, \n \"silverTier\": string, \n \"goldTier\": string \n }\n- \"scaffoldingSupport\": string\n- \"levelUpExtension\": string\n- \"reflectionQuestion\": string\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\nimport { CODE_LAB_TEMPLATE } from '../../templates';\n\nexport interface CodeLabPromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n targetTechStack?: string[];\n}\n\nexport function buildCodeLabPrompt(input: CodeLabPromptInput): string {\n const { lesson, activity, language, targetTechStack } = input;\n const techStackList = targetTechStack && targetTechStack.length > 0\n ? targetTechStack\n : ['General Programming & Engineering'];\n\n const loList = lesson.learningObjectives\n .map((lo) => `- [${lo.bloomLevel}] ${lo.code}: ${lo.name || ''} โ ${lo.description}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Software Architect & Engineering Instructor**, responsible for creating production-quality, runnable Code Labs with automated tests and clear debugging guidance.\n\n# MISSION SCOPE & CANONICAL CONTRACT\nGenerate complete, verified source code that satisfies the lesson objectives and operationalizes the practical tasks of this lesson.\n\n## IN SCOPE:\n- **Environment & Setup:** Specify exact language versions, required packages, IDE setups, and environment variables.\n- **3-Tier Lab Tasks:** Define progressive challenges:\n - ๐ฅ **Bronze:** Basic setup, syntax correctness, clean run.\n - ๐ฅ **Silver:** Core logic implementation, data transformations, error handling.\n - ๐ฅ **Gold:** Advanced edge cases, optimizations, or external service integration.\n- **Verified Code:** Provide complete, runnable Starter Code (with skeleton/TODO markers) and Solution Code (with robust error handling).\n- **Troubleshooting Matrix:** Provide an actionable table with at least 3 common runtime/compilation bugs, their root cause, and exact fix.\n- **Verification Checklist:** End-to-end checks for student self-submission.\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${CODE_LAB_TEMPLATE}\n---\n\n# CANONICAL LESSON CONTEXT (SOURCE OF TRUTH)\n- **Lesson ID:** ${lesson.lessonId}\n- **Lesson Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Lesson Overview:** ${lesson.overview}\n- **Learning Objectives:**\n${loList}\n${lesson.guidedPractice ? `- **Lesson Guided Code:**\\n\\`\\`\\`${lesson.guidedPractice.codeLanguage}\\n${lesson.guidedPractice.codeSnippet}\\n\\`\\`\\`` : ''}\n${activity?.objective ? `- **Activity Practical Objective:** ${activity.objective}` : ''}\n\n# INPUT PARAMETERS\n- **Tech Stack:** ${techStackList.join(', ')}\n- **Language Policy:** Code comments, explanations, and instructions in **\"${language}\"**.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching CodeLabSchema with these exact keys:\n- \"artifactType\": \"CODE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"techStack\": string[]\n- \"environmentSetup\": { \"languageFramework\": string, \"ideEditor\": string, \"requiredLibraries\": string[], \"hardwareOrEnvConnection\": string }\n- \"threeTierTasks\": {\n \"bronze\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string },\n \"silver\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string },\n \"gold\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string }\n }\n- \"starterCode\": { \"filename\": string, \"language\": string, \"purpose\": \"starter\", \"content\": string, \"explanation\": string }\n- \"solutionCode\": { \"filename\": string, \"language\": string, \"purpose\": \"solution\", \"content\": string, \"explanation\": string }\n- \"testCases\": array of { \"description\": string, \"input\": string, \"expectedOutput\": string }\n- \"troubleshootingMatrix\": array of { \"issue\": string, \"potentialCause\": string, \"solution\": string }\n- \"commonBugsAndFixes\": array of { \"bugDescription\": string, \"solutionHint\": string }\n- \"submissionChecklist\": string[]\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface WorksheetPromptInput {\n lesson: LessonPlan;\n language: string;\n}\n\nexport function buildWorksheetPrompt(input: WorksheetPromptInput): string {\n const { lesson, language } = input;\n\n return `\n# System Methodology: Guided Worksheet Design (@activity โ Scaffolded Practice)\n\nYou are the **@activity** specialist designing a Guided Worksheet (WKS) based on the **Gradual Release Model** (I Do -> We Do -> You Do).\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all instructions, questions, think-aloud reflection prompts, and checkpoints strictly in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Objectives:** ${lesson.learningObjectives.map((lo) => lo.description).join('; ')}\n\n## REQUIREMENTS\n1. **Scaffolding Ladder:** Include exercises spanning across:\n - Section A (โญ Remember / Fill-in-the-blank)\n - Section B (โญโญ Understand / Short answer)\n - Section C (โญโญโญ Apply / Scenario-based problem)\n - Section D (โญโญโญโญ Analyze / Extension challenge)\n2. **Think-Aloud Prompts:** Include metacognitive reflection prompts.\n3. **Checkpoints:** Include teacher-signoff checkpoints to prevent misconceptions.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching WorksheetSchema with these exact keys:\n- \"artifactType\": \"WKS\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"learningObjectivesSummary\": string[] (checklist of objectives students will achieve)\n- \"exercises\": array of {\n \"exerciseId\": string (e.g. \"Ex1_A\", \"Ex2_B\"),\n \"sectionTier\": \"Section_A_Remember\" | \"Section_B_Understand\" | \"Section_C_Apply\" | \"Section_D_Analyze\",\n \"difficultyStars\": number (1 to 4),\n \"prompt\": string,\n \"starterSnippetOrTemplate\": string (optional code with blanks or template to complete),\n \"answerSpaceType\": \"code_box\" | \"text_lines\" | \"multiple_choice\" | \"matching_table\",\n \"hint\": string (optional scaffolding hint)\n }\n- \"thinkAloudPrompts\": string[] (metacognitive reflection prompts)\n- \"checkpoints\": array of {\n \"afterExerciseId\": string,\n \"instruction\": string\n }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface HandoutPromptInput {\n lesson: LessonPlan;\n language: string;\n}\n\nexport function buildHandoutPrompt(input: HandoutPromptInput): string {\n const { lesson, language } = input;\n\n return `\n# System Methodology: Student Reference Handout (@content โ Publishing Mode)\n\nYou are the **@content** specialist creating an instant-reference Student Handout following the **5-Second Rule** (scannable, concise, learner-facing).\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all headings, bullet points, callout boxes, and glossary definitions strictly in **\"${language}\"**.\n- Use second-person voice (\"You will...\").\n\n## MASTER LESSON CONTRACT\n- **Lesson ID:** ${lesson.lessonId}\n- **Title:** ${lesson.title}\n- **Overview:** ${lesson.overview}\n\n## REQUIREMENTS\n1. **5-Second Scannability:** Max 3 heading levels, concise bullet points (<= 7 per list), bold key terms on first use.\n2. **Tables & Snippets:** Use tables for comparisons or pinouts, and clean copy-paste ready code syntax blocks.\n3. **Callout Boxes:** Include at least one Key Formula / Syntax Box, Analogy Reminder, or Common Mistake callout.\n4. **Zero-Jargon Glossary:** Define all newly introduced technical terms in plain language.\n5. **Sanitization:** Do NOT include teacher notes, Bloom tags, or answer keys in this student handout.\n\n## REQUIRED JSON KEYS\nPlease return a single JSON object matching these exact keys:\n- \"artifactType\": \"HANDOUT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"tagline\": string (1-sentence summary in \"${language}\")\n- \"sections\": array of { \"heading\": string, \"summaryPoints\": string[], \"codeSnippet\": string, \"calloutBox\": { \"type\": \"key_formula\" | \"analogy_reminder\" | \"common_mistake\", \"title\": string, \"content\": string } }\n- \"glossary\": array of { \"term\": string, \"definition\": string }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface SlidesPromptInput {\n lesson: LessonPlan;\n language: string;\n marpTheme?: string;\n}\n\nexport function buildSlidesPrompt(input: SlidesPromptInput): string {\n const { lesson, language, marpTheme } = input;\n const concepts = lesson.coreConcepts || [];\n\n return `\n# System Methodology: Marp Presentation Slides Deck (@illustrator + @content)\n\nYou are the **@illustrator + @content** presentation architect. Your mission is to produce a pedagogically structured, highly interactive Marp presentation deck built on **Chunky Micro-Cycle Learning (Learn-Apply-Validate Loops)**.\n\n## PEDAGOGICAL PHILOSOPHY (ANTI-FRONT-LOADING)\nโ **DO NOT DUMP THEORY ALL AT ONCE:** Never lecture through Concept 1, 2, and 3 consecutively for 30 minutes before giving students a hands-on task. This causes severe cognitive overload and passive disengagement.\nโ
**CHUNKY MICRO-LEARNING & IMMEDIATE APPLICATION:** Break the lesson into self-contained batches. For EACH concept batch, provide foundational theory, followed IMMEDIATELY by a quick hands-on micro-practice / cold-call check. Only after students master the micro-bricks do we transition into the **Integrated Advanced Hands-On Lab**.\n\n---\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all slide titles, bullet points, diagram labels, and presenter notes in **\"${language}\"**.\n- Keep programming keywords and code syntax intact.\n\n## MASTER LESSON CONTRACT\n- **Lesson ID:** ${lesson.lessonId}\n- **Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Overview:** ${lesson.overview}\n- **Theme:** ${marpTheme || 'gaia'}\n- **Core Concepts (${concepts.length}):**\n${concepts.map((c, i) => ` ${i + 1}. **${c.name}**: ${c.technicalDepth || ''} (Analogy: ${c.analogy || ''})`).join('\\n')}\n\n---\n\n## DYNAMIC SLIDE ARCHITECTURE (CHUNKY MICRO-CYCLES)\n\n### Phase 1: Anchor Opening (~3-4 slides)\n1. **Title & Mission:** Lesson name, real-world context, and overarching build objective.\n2. **Roadmap & Agenda:** Visual journey breakdown showing the micro-milestones and timing.\n3. **Prior Knowledge Warm-up (Review):** 2 cold-call questions activating existing mental models.\n4. **Hook Scenario (Engage):** High-stakes real-world engineering problem (stakes & constraints, no solution yet).\n\n### Phase 2: Concept Micro-Cycles (Repeat this 4-6 slide loop for EACH Core Concept Batch)\nFor EACH Concept Batch ($i = 1 \\\\dots N$):\n- **Slide A: Core Definition & Mental Model** โ What is it? Real-world analogy with visual clarity.\n- **Slide B: Visual Architecture / Diagram** โ Mermaid sequence diagram, data flow, or component wiring.\n- **Slide C: Code Demo (I Do)** โ Concise, annotated runnable snippet showing the minimal syntax.\n- **Slide D: Quick Micro-Practice / Try It Now (We Do / You Do)** โ A 3-5 minute immediate interactive task for students to write/modify 3-5 lines of code at their desks.\n- **Slide E: Concept Check / Cold-Call** โ 1 rapid formative check question with instant reveal.\n- **Slide F: Golden Rule / Takeaway** โ 1 key takeaway, syntax rule, or anti-pattern to avoid.\n\n### Phase 3: Integrated Advanced Hands-On Lab (~3-4 slides)\n*Only after all concept micro-bricks are learned and verified do we assemble them into the comprehensive project challenge:*\n- **Advanced Challenge Briefing:** The big mission integrating all concepts together.\n- **3-Tier Differentiation:**\n - ๐ฅ **Bronze:** Complete core working pipeline.\n - ๐ฅ **Silver:** Error handling, resilience, and input validation.\n - ๐ฅ **Gold:** Performance optimization, edge cases, and asynchronous polish.\n- **Live Execution Protocol & Gotchas:** Step-by-step workflow, debugging tips, and emergency rollback.\n\n### Phase 4: Reflection & Closing (~2-3 slides)\n- **Formative Checkpoint (Traffic Light):** ๐ข Ready / ๐ก Shaky / ๐ด Stuck with instant troubleshooting tips.\n- **Exit Ticket:** 2 technical scenario questions + 1 metacognitive reflection prompt.\n- **Summary & Next Milestone Preview:** 3 core takeaways and teaser for the next lesson.\n\n---\n\n## COMPOSITION & COGNITIVE LOAD RULES\n- **Max 6 bullet points per slide** (Miller's Law).\n- **Max 15 words per bullet point** โ use fragments, code blocks, and visual tables.\n- **Code Slides:** Use fenced code blocks with language tags and line-by-line annotations.\n- **Presenter Notes:** Include detailed teacher talk tracks, cold-call prompts, and facilitation tips for every single slide.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching SlideDeckSchema with these exact keys:\n- \"artifactType\": \"SLIDE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"marpTheme\": \"${marpTheme || 'gaia'}\"\n- \"slides\": array of {\n \"slideNumber\": number (1 to N),\n \"slideType\": \"title\" | \"agenda\" | \"review\" | \"hook\" | \"concept_def\" | \"concept_visual\" | \"concept_compare\" | \"concept_check\" | \"concept_recap\" | \"code_demo\" | \"guided_practice\" | \"activity_intro\" | \"activity_steps\" | \"checkpoint\" | \"exit_ticket\" | \"summary_next\" | \"custom\",\n \"title\": string (in \"${language}\"),\n \"bloomTag\": \"Remember\" | \"Understand\" | \"Apply\" | \"Analyze\" | \"Evaluate\" | \"Create\" | \"None\",\n \"bulletPoints\": string[] (Max 6 points, max 15 words each),\n \"codeSnippet\": string (optional, runnable snippet),\n \"diagramMermaid\": string (optional, valid mermaid code),\n \"presenterNotes\": string (optional, detailed talk track)\n }\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\n\nexport interface TeacherGuidePromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n}\n\nexport function buildTeacherGuidePrompt(input: TeacherGuidePromptInput): string {\n const { lesson, activity, language } = input;\n\n return `\n# System Methodology: Teacher Facilitation Guide (@guide)\n\nYou are the **@guide** instructional coach. Your goal is to produce a practical, insightful Teacher Guide for delivering this lesson and troubleshooting student roadblocks.\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all rationales, misconceptions, troubleshooting guides, and rubric descriptions strictly in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Overview:** ${lesson.overview}\n- **Activity Context:** ${activity ? activity.objective : 'Standard lesson activities'}\n\n## REQUIREMENTS\n1. **Instructional Rationale:** Why this sequence works and how to guide pacing.\n2. **Common Misconceptions & Counter-Strategies:** Identify what students often confuse and provide actionable counter-explanations.\n3. **Troubleshooting Guide:** Detail at least 2 common technical bugs/symptoms, root causes, and explicit fixes.\n4. **Scoring Rubric:** Provide criteria for \"Meets Standard\" vs \"Exceeds Standard\" student performance.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching TeacherGuideSchema with these exact keys:\n- \"artifactType\": \"GUIDE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"pedagogicalRationale\": string (the instructional purpose behind this lesson flow)\n- \"commonMisconceptions\": array of {\n \"misconception\": string (what students often wrongly assume or confuse),\n \"counterStrategy\": string (how the teacher should explain or demonstrate the truth)\n }\n- \"troubleshootingGuide\": array of {\n \"symptom\": string (error message or failure symptom),\n \"rootCause\": string (why this occurs),\n \"solution\": string (exact step to fix it)\n }\n- \"scoringRubric\": array of {\n \"criteriaName\": string,\n \"meetsStandard\": string (description of acceptable student performance),\n \"exceedsStandard\": string (description of advanced mastery)\n }\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\n\nexport interface ExtensionPromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n}\n\nexport function buildExtensionPrompt(input: ExtensionPromptInput): string {\n const { lesson, activity, language } = input;\n\n return `\n# System Methodology: Extension Challenges & Novel Context (@extension)\n\nYou are the **@extension** specialist. Your mission is to design advanced, creative extension challenges that apply the lesson skills to novel real-world contexts without altering the core learning objectives.\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output challenge titles, context narratives, tasks, and guidance in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Objectives:** ${lesson.learningObjectives.map((lo) => lo.description).join('; ')}\n- **Base Activity:** ${activity ? activity.objective : lesson.overview}\n\n## REQUIREMENTS\n1. Provide at least 2 distinct challenges (e.g. one technical optimization challenge, one authentic real-world application challenge).\n2. Keep the core learning objective preserved while increasing complexity or agency.\n3. Clearly define the expected deliverable for each challenge.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching ExtensionSchema with these exact keys:\n- \"artifactType\": \"EXT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"coreLearningObjectivePreserved\": string (the core LO extended by these challenges)\n- \"challenges\": array of {\n \"challengeNumber\": number (1, 2, ...),\n \"title\": string (Catchy title for the extension project),\n \"contextDescription\": string (Novel real-world context for applying the skill),\n \"taskDescription\": string (Specific goal and requirements of the challenge),\n \"expectedDeliverable\": string (What the student produces: code, prototype, or report),\n \"hintOrGuidance\": string (optional open-ended exploration prompt)\n }\n`.trim();\n}\n","export interface JudgePromptInput {\n targetArtifactType: string;\n lessonId: string;\n expectedLanguage: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n generatedContentJson: string;\n /**\n * VERBATIM standard statements relevant to this artifact, keyed by canonical ID\n * (\"packId:statementId\" -> verbatim text). Sourced from the Standards Registry.\n * The judge compares the candidate against the REAL standard text, never memory.\n * Optional for backward compatibility.\n */\n standardStatements?: Record<string, string>;\n}\n\nexport function buildJudgePrompt(input: JudgePromptInput): string {\n const { targetArtifactType, lessonId, expectedLanguage, targetObjectives, generatedContentJson, standardStatements } = input;\n\n return `\n# System Methodology: Multi-Agent LLM-as-Judge & Pedagogical Quality Auditor (@validator)\n\nYou are the **@validator / LLM-as-Judge** expert. Your task is to impartially and rigorously audit the generated curriculum artifact against pedagogical standards, Bloom's Taxonomy alignment, technical validity, and strict language adherence.\n\n## AUDIT TARGET\n- **Artifact Type:** ${targetArtifactType}\n- **Lesson ID:** ${lessonId}\n- **Expected Output Language:** \"${expectedLanguage}\"\n- **Target Learning Objectives:**\n${targetObjectives.map((lo) => ` - ${lo.code}: ${lo.description} (Bloom: ${lo.bloomLevel})`).join('\\n')}\n\n${standardStatements && Object.keys(standardStatements).length > 0 ? `## STANDARDS GROUND TRUTH (VERBATIM - from Standards Registry)\nThe statements below are COPIED VERBATIM from the official standards this course is bound to:\n${Object.entries(standardStatements).map(([id, text]) => `- [${id}] \"${text}\"`).join(\"\\n\")}\n\nYou MUST audit standards alignment ONLY against the statements above. If the candidate claims alignment with a standard NOT listed here, treat that claim as UNVERIFIABLE and score it down.` : \"\"}\n\n## CANDIDATE CONTENT JSON\n\\`\\`\\`json\n${generatedContentJson}\n\\`\\`\\`\n\n## EVALUATION CRITERIA & SCORING RUBRIC (TOTAL 100 POINTS)\nEvaluate the candidate artifact across these 6 dimensions:\n\n1. **Language Adherence (MANDATORY GATE - 15 pts):**\n - 15 pts: 100% of instructions, explanations, and pedagogy strictly in \"${expectedLanguage}\". Technical keywords and code symbols preserved.\n - 0 pts (FAIL GATE): Language contamination or wrong output language detected.\n\n2. **Bloom & Pedagogical Alignment (25 pts):**\n - 25 pts: Cognitive depth of tasks/questions strictly fulfills the targeted Bloom levels (${targetObjectives.map(o => o.bloomLevel).join(', ')}). No superficial recall masquerading as high-level analysis.\n - 15 pts: Minor misalignment in 1 objective or slight depth variance.\n - 0-10 pts: Severe cognitive mismatch (e.g. asking basic definitions for an Evaluate-level objective).\n\n3. **Standards Alignment (20 pts):**\n - 20 pts: Every learning objective and core activity demonstrably serves the VERBATIM standard statements listed in STANDARDS GROUND TRUTH above; cited statement IDs exist and are used faithfully (statement as destination, not script).\n - 12 pts: All statements covered but 1 shows only partial fidelity (taught implicitly, or the assessment measures adjacent rather than the exact statement behavior).\n - 5 pts: Explicit statement IDs referenced but 1+ IDs do not exist in STANDARDS GROUND TRUTH (hallucinated or stale IDs), or statements ignored while claimed as covered.\n - 0 pts: No standards grounding at all despite STANDARDS GROUND TRUTH being present, or fabricated standard citations.\n ${standardStatements && Object.keys(standardStatements).length > 0 ? '- NOTE: STANDARDS GROUND TRUTH IS PRESENT - this dimension is fully in scope.' : '- NOTE: No STANDARDS GROUND TRUTH provided. Award only for absence of fabricated standard citations; treat 20 pts as N/A and redistribute proportionally.'}\n\n4. **Completeness & Structural Integrity (15 pts):**\n - 15 pts: All required schema fields are fully populated with substantive, age-appropriate content. No empty arrays, stubs, or placeholders.\n - 8 pts: Some fields are thin or lack sufficient pedagogical detail.\n - 0 pts: Missing critical sections.\n\n5. **Technical & Conceptual Accuracy (15 pts):**\n - 15 pts: Code snippets, logic flows, architectural descriptions, and Mermaid diagrams are conceptually sound, valid, and free of syntax hallucinations.\n - 8 pts: Minor syntax inaccuracies or unidiomatic code that does not break core concepts.\n - 0 pts: Severe technical hallucinations, broken logic, or invalid diagrams.\n\n6. **Contract Consistency & Zero-Drift (10 pts):**\n - 10 pts: Satellite artifact strictly adheres to the scope, tech stack, and objectives of Lesson ${lessonId} without introducing unrelated topics.\n - 0-5 pts: Scope drift or topic divergence detected.\n\n## VERDICT RULES\n- **PASS:** Score >= 80 AND Language Adherence = true AND Standards Alignment >= 12 (when STANDARDS GROUND TRUTH is present).\n- **NEEDS_REVISION:** Score between 60 and 79, or minor addressable flaws. Provide concrete, actionable repair prompts.\n- **FAIL:** Score < 60, Language Adherence failed, empty sections, critical technical hallucinations, or hallucinated standard IDs when STANDARDS GROUND TRUTH is present.\n\n## REQUIRED JSON KEYS\nPlease return a single JSON object matching these exact keys:\n- \"targetArtifactType\": \"${targetArtifactType}\"\n- \"lessonId\": \"${lessonId}\"\n- \"overallVerdict\": \"PASS\" | \"NEEDS_REVISION\" | \"FAIL\"\n- \"totalScore\": number (0 to 100)\n- \"languageAdherencePassed\": boolean\n- \"criteria\": array of { \"name\": string, \"passed\": boolean, \"score\": number, \"feedback\": string }\n- \"actionableRepairPrompts\": string[]\n`.trim();\n}\n","import type { MilestoneInput, ProjectGraph } from '../../schemas';\nimport { SELF_LAB_TEMPLATE } from '../../templates';\n\nexport interface SelfLabPromptInput {\n milestone: MilestoneInput;\n projectGraph?: ProjectGraph;\n language: string;\n targetTechStack?: string[];\n contextContinuity?: string;\n}\n\nexport function buildSelfLabPrompt(input: SelfLabPromptInput): string {\n const { milestone, projectGraph, language, targetTechStack, contextContinuity } = input;\n const techStackList = (targetTechStack && targetTechStack.length > 0)\n ? targetTechStack\n : (milestone.tech_keywords && milestone.tech_keywords.length > 0)\n ? milestone.tech_keywords\n : ['General Engineering'];\n const learningObjectives = milestone.learning_objectives || [];\n const normalizedDifficulty = (milestone.difficulty || 'intermediate').toLowerCase() as 'beginner' | 'intermediate' | 'advanced';\n\n const loList = learningObjectives\n .map((lo) => `- [${lo.bloom_level || 'understand'}] ${lo.code}: ${lo.name || ''} โ ${lo.description || ''}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Software Engineering Mentor & Self-Paced Learning Architect**, dedicated to creating autonomous, inquiry-based labs for independent developers.\n\n# MISSION SCOPE & DESIGN PRINCIPLES\nBuild a complete, engaging Self-Paced Hands-On Lab (SELF_LAB) for autonomous learners.\n\n## CRITICAL PILLARS FOR SELF-LEARNERS:\n1. **Progressive Challenges (3 Tiers):**\n - ๐ฅ **Bronze:** Foundational implementation, basic syntax correctness, verifying environment setup.\n - ๐ฅ **Silver:** Core logic, state transformation, and explicit error handling (e.g. timeouts, bad inputs).\n - ๐ฅ **Gold:** Edge cases, optimizations, performance profiling, or asynchronous resilience.\n2. **Progressive Hints System (3 Tiers per Challenge):**\n - ๐ก **Hint Level 1 (Conceptual Clue):** High-level architectural hint or mental model. DO NOT give code yet.\n - ๐ **Hint Level 2 (Structural Skeleton):** Method signature, structural boilerplate, or function signature with TODOs.\n - ๐จ **Hint Level 3 (Full Solution & Post-Mortem):** Complete verified solution code + a concise explanation of *Why this works best*.\n3. **Automated Self-Verification Commands:**\n - For EACH challenge, provide an executable terminal command or test runner (e.g. \\`curl ... | jq .\\`, \\`swift test --filter ...\\`, \\`pytest -k ...\\`) and the **Exact Expected Output**.\n4. **Actionable Troubleshooting Matrix:**\n - At least 3 realistic runtime errors/gotchas, their exact root causes, and step-by-step fixes.\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${SELF_LAB_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Milestone ID:** ${milestone.id || 'F0-S1'}\n- **Title:** ${milestone.name}\n- **Description:** ${milestone.description}\n- **Tech Stack:** ${techStackList.join(', ')}\n- **Difficulty:** ${normalizedDifficulty}\n- **Language Policy:** Output 100% in **\"${language}\"** (code comments and explanations).\n- **Target Learning Objectives:**\n${loList}\n\n${projectGraph ? `- **Project Graph Context:** ${projectGraph.project.name} (${projectGraph.project.purpose || ''})` : ''}\n${contextContinuity ? `- **Prior Knowledge & Continuity:**\\n${contextContinuity}` : ''}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching SelfLabSchema with these exact keys:\n- \"artifactType\": \"SELF_LAB\"\n- \"labId\": \"${milestone.id || 'F0-S1'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"difficulty\": \"beginner\" | \"intermediate\" | \"advanced\"\n- \"estimatedTotalMinutes\": number (e.g. 60)\n- \"techStack\": string[]\n- \"missionBriefing\": string (Authentic scenario framing what we are building and why)\n- \"preflightChecklist\": string[] (3-5 prerequisite tools/configs)\n- \"challenges\": {\n \"bronze\": {\n \"tier\": \"bronze\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n },\n \"silver\": {\n \"tier\": \"silver\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n },\n \"gold\": {\n \"tier\": \"gold\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n }\n }\n- \"troubleshootingMatrix\": array of { \"symptom\": string, \"rootCause\": string, \"exactFix\": string }\n- \"finalSubmissionChecklist\": string[]\n`.trim();\n}\n","import type { MilestoneInput } from '../../schemas';\nimport { QUIZ_TEMPLATE } from '../../templates';\n\nexport interface DiagnosticQuizPromptInput {\n milestone: MilestoneInput;\n language: string;\n questionCount?: number;\n passingScorePct?: number;\n}\n\nexport function buildDiagnosticQuizPrompt(input: DiagnosticQuizPromptInput): string {\n const { milestone, language, questionCount = 4, passingScorePct = 80 } = input;\n const learningObjectives = milestone.learning_objectives || [];\n\n const loList = learningObjectives\n .map((lo) => `- [${lo.bloom_level || 'understand'}] ${lo.code}: ${lo.name || ''} โ ${lo.description || ''}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Psychometrician & Technical Assessment Specialist (@assessor)**, expert in designing diagnostic scenario-based tests with high-quality distractors.\n\n# MISSION SCOPE\nGenerate a 3-5 question Diagnostic & Active Recall Quiz that deeply evaluates conceptual understanding, code tracing, and architectural trade-offs.\n\n## RIGOROUS RULES FOR HIGH-QUALITY QUESTIONS:\n\n### Bloom Taxonomy Cognitive Action Mapping (MANDATORY โ DO NOT CONFLATE LEVELS):\nUse this mapping to determine which Bloom level each question truly targets. Match questions to the milestone's target level(s) listed in INPUT PARAMETERS.\n\n| Bloom Level | Cognitive Action | Code Task Examples |\n|---|---|---|\n| **Remember** | Recall syntax, definitions, API names | \"What does \\`async/await\\` do?\" |\n| **Understand** | Explain, interpret, classify, **predict execution of existing code**, trace a known algorithm | \"Given this code block, what does it print?\" / \"Why does this loop terminate?\" |\n| **Apply** | Execute a skill in a **new context**, fix a bug in code you haven't seen before, implement from a spec | \"This API response is malformed โ rewrite the parsing logic to handle it\" |\n| **Analyze** | Decompose, compare designs, identify root causes, differentiate competing approaches | \"Compare these two caching strategies for a high-read workload\" |\n| **Evaluate** | Justify architectural decisions, critique trade-offs, argue for a design given constraints | \"Which approach is superior for a mobile-first environment and why?\" |\n\n> โ ๏ธ **CRITICAL RULE:** \"Predict the output of a code snippet\" = **Understand** level, NOT Apply. \"Trace code step by step\" = **Understand**, NOT Apply. Only count as Apply when the student must USE a concept in a context they have NOT seen in the lesson.\n\n### Question Generation Rules:\n1. **Respect Milestone Bloom Level:** The milestone targets \\`${milestone.bloom_level || 'understand'}\\`. Distribute question cognitive demand to match or exceed this level. Do NOT force all questions to Apply+ if the milestone targets Understand.\n2. **Scenario-Based Stems:** Frame questions around realistic engineering problems (e.g. \"A sensor network experiences packet loss...\", \"The UI thread freezes when...\").\n3. **Code-Based Questions:** Include a concise code snippet in at least 2 questions. Tag each with the correct Bloom level using the table above:\n - If students **trace or predict** โ tag as \\`\"understand\"\\`\n - If students **debug in a new scenario** โ tag as \\`\"apply\"\\`\n - If students **compare architectures** โ tag as \\`\"analyze\"\\`\n4. **Plausible Distractors (Cognitive Traps):** Every incorrect option (distractor) MUST represent a common student misconception, subtle edge case, or logical fallacy (e.g. inverted pin modes, millisecond vs second units, blocking delay, forgetting current-limiting resistor, missing pullup).\n - โ PROHIBITED LAZY DISTRACTORS: NEVER use \"All of the above\", \"None of the above\", \"Cแบฃ 3 ฤแปu ฤรบng\", \"Khรดng cรณ ฤรกp รกn nร o\", or throwaway non-options.\n5. **Comprehensive Explanations:** For EVERY option (A, B, C, D), explain *Why it is right* or *Why it is a trap*.\n\n### FEW-SHOT GOLD EXEMPLARS:\n\n#### Example 1: Understand Level (Code Tracing / Output Prediction)\n- **Stem:** \"Given the following loop with a delay in Arduino C++, what is the exact duration of one complete blink cycle?\"\n- **Code:** \\`digitalWrite(13, HIGH); delay(200); digitalWrite(13, LOW); delay(800);\\`\n- **Options:**\n - A (Correct): \"1000ms (1.0 second) because the total period equals the ON time (200ms) plus the OFF time (800ms).\"\n - B (Trap): \"200ms because only the HIGH state duration is counted as the cycle period.\"\n - C (Trap): \"800ms because the longer delay overrides the shorter delay in the execution queue.\"\n - D (Trap): \"600ms due to subtracting the ON duration from the OFF duration.\"\n\n#### Example 2: Apply Level (Debugging Logic Bug in Novel Scenario)\n- **Stem:** \"A student connects an LED to digital pin 12. In setup(), they wrote \\`pinMode(13, OUTPUT);\\`. In loop(), they call \\`digitalWrite(12, HIGH);\\`. What physical symptom occurs and what is the exact root cause?\"\n- **Options:**\n - A (Correct): \"The LED on pin 12 remains very dim or off because pin 12 was left in default high-impedance INPUT mode.\"\n - B (Trap): \"The microcontroller immediately overheats and triggers an overcurrent reset.\"\n - C (Trap): \"The Arduino IDE compiler rejects the sketch with a 'Pin Mismatch Error'.\"\n - D (Trap): \"The LED on pin 13 blinks instead because digitalWrite redirects to the configured pin.\"\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${QUIZ_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Milestone ID:** ${milestone.id || 'F0-S1'}\n- **Milestone Name:** ${milestone.name}\n- **Description:** ${milestone.description}\n- **Number of Questions:** ${questionCount}\n- **Passing Score (%):** ${passingScorePct}%\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Learning Objectives to Assess:**\n${loList}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching DiagnosticQuizSchema with these exact keys:\n- \"artifactType\": \"QUIZ\"\n- \"quizId\": \"${milestone.id || 'F0-S1'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"passingScorePct\": ${passingScorePct}\n- \"questions\": array of {\n \"id\": string (e.g. \"Q1\", \"Q2\"),\n \"bloomLevel\": \"understand\" | \"apply\" | \"analyze\" | \"evaluate\",\n \"scenarioOrStem\": string,\n \"codeSnippet\": string (optional, concise code snippet),\n \"codeLanguage\": string (e.g. \"swift\", \"python\", \"typescript\"),\n \"options\": array of {\n \"id\": \"A\" | \"B\" | \"C\" | \"D\",\n \"text\": string,\n \"isCorrect\": boolean (exactly one option true per question),\n \"explanation\": string (detailed breakdown why this option is correct or a pitfall)\n },\n \"takeawayMessage\": string (key takeaway)\n }\n`.trim();\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { LessonPlanSchema, type LessonPlan, type MilestoneInput } from '../../schemas';\nimport { buildLessonMasterPrompt, type LessonPromptInput } from '../prompts';\n\nexport interface GenerateLessonMasterInput extends Omit<LessonPromptInput, 'milestone'> {\n milestone: MilestoneInput;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateLessonMasterFlow(input: GenerateLessonMasterInput): Promise<LessonPlan> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildLessonMasterPrompt({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: input.contextContinuity,\n standardsContext: input.standardsContext,\n });\n\n const { object } = await generateObject({\n model,\n schema: LessonPlanSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { ActivityLabSchema, type ActivityLab, type LessonPlan } from '../../schemas';\nimport { buildActivityPrompt, type ActivityPromptInput } from '../prompts';\n\nexport interface GenerateActivityInput extends Omit<ActivityPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateActivityFlow(input: GenerateActivityInput): Promise<ActivityLab> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildActivityPrompt({\n lesson: input.lesson,\n language: input.language,\n hardwareBOM: input.hardwareBOM,\n softwareTools: input.softwareTools,\n });\n\n const { object } = await generateObject({\n model,\n schema: ActivityLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { CodeLabSchema, type CodeLab, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildCodeLabPrompt, type CodeLabPromptInput } from '../prompts';\n\nexport interface GenerateCodeLabInput extends Omit<CodeLabPromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateCodeLabFlow(input: GenerateCodeLabInput): Promise<CodeLab> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildCodeLabPrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n targetTechStack: input.targetTechStack,\n });\n\n const { object } = await generateObject({\n model,\n schema: CodeLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { WorksheetSchema, type Worksheet, type LessonPlan } from '../../schemas';\nimport { buildWorksheetPrompt, type WorksheetPromptInput } from '../prompts';\n\nexport interface GenerateWorksheetInput extends Omit<WorksheetPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateWorksheetFlow(input: GenerateWorksheetInput): Promise<Worksheet> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildWorksheetPrompt({\n lesson: input.lesson,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: WorksheetSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { HandoutSchema, type Handout, type LessonPlan } from '../../schemas';\nimport { buildHandoutPrompt, type HandoutPromptInput } from '../prompts';\n\nexport interface GenerateHandoutInput extends Omit<HandoutPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateHandoutFlow(input: GenerateHandoutInput): Promise<Handout> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildHandoutPrompt({\n lesson: input.lesson,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: HandoutSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { SlideDeckSchema, type SlideDeck, type LessonPlan } from '../../schemas';\nimport { buildSlidesPrompt, type SlidesPromptInput } from '../prompts';\n\nexport interface GenerateSlidesInput extends Omit<SlidesPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateSlidesFlow(input: GenerateSlidesInput): Promise<SlideDeck> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildSlidesPrompt({\n lesson: input.lesson,\n language: input.language,\n marpTheme: input.marpTheme,\n });\n\n const { object } = await generateObject({\n model,\n schema: SlideDeckSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { TeacherGuideSchema, type TeacherGuide, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildTeacherGuidePrompt, type TeacherGuidePromptInput } from '../prompts';\n\nexport interface GenerateTeacherGuideInput extends Omit<TeacherGuidePromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateTeacherGuideFlow(input: GenerateTeacherGuideInput): Promise<TeacherGuide> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildTeacherGuidePrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: TeacherGuideSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { ExtensionSchema, type Extension, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildExtensionPrompt, type ExtensionPromptInput } from '../prompts';\n\nexport interface GenerateExtensionInput extends Omit<ExtensionPromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateExtensionFlow(input: GenerateExtensionInput): Promise<Extension> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildExtensionPrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: ExtensionSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { CurriculumQualityReportSchema, type CurriculumQualityReport } from '../../schemas';\nimport { buildJudgePrompt, type JudgePromptInput } from '../prompts';\n\nexport interface AuditCurriculumQualityInput extends JudgePromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function auditCurriculumQualityFlow(input: AuditCurriculumQualityInput): Promise<CurriculumQualityReport> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildJudgePrompt({\n targetArtifactType: input.targetArtifactType,\n lessonId: input.lessonId,\n expectedLanguage: input.expectedLanguage,\n targetObjectives: input.targetObjectives,\n generatedContentJson: input.generatedContentJson,\n standardStatements: input.standardStatements,\n });\n\n const { object } = await generateObject({\n model,\n schema: CurriculumQualityReportSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { SelfLabSchema, type SelfLab, type MilestoneInput, type ProjectGraph } from '../../schemas';\nimport { buildSelfLabPrompt } from '../prompts';\n\nexport interface GenerateSelfLabInput {\n milestone: MilestoneInput;\n projectGraph?: ProjectGraph;\n language: string;\n targetTechStack?: string[];\n contextContinuity?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateSelfLabFlow(input: GenerateSelfLabInput): Promise<SelfLab> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildSelfLabPrompt({\n milestone: input.milestone,\n projectGraph: input.projectGraph,\n language: input.language,\n targetTechStack: input.targetTechStack,\n contextContinuity: input.contextContinuity,\n });\n\n const { object } = await generateObject({\n model,\n schema: SelfLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { DiagnosticQuizSchema, type DiagnosticQuiz, type MilestoneInput } from '../../schemas';\nimport { buildDiagnosticQuizPrompt } from '../prompts';\n\nexport interface GenerateDiagnosticQuizInput {\n milestone: MilestoneInput;\n language: string;\n questionCount?: number;\n passingScorePct?: number;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateDiagnosticQuizFlow(input: GenerateDiagnosticQuizInput): Promise<DiagnosticQuiz> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildDiagnosticQuizPrompt({\n milestone: input.milestone,\n language: input.language,\n questionCount: input.questionCount,\n passingScorePct: input.passingScorePct,\n });\n\n const { object } = await generateObject({\n model,\n schema: DiagnosticQuizSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { RetryableError, getStepMetadata } from 'workflow';\n\nexport interface ExecuteWithRateLimitOptions<T> {\n stepName: string;\n fn: () => Promise<T>;\n maxAttempts?: number;\n}\n\n/**\n * Wraps async LLM functions to automatically catch 429/503/transient network errors\n * and throw a durable RetryableError with exponential backoff for Vercel Workflow runtime.\n */\nexport async function withRateLimitBackoff<T>(options: ExecuteWithRateLimitOptions<T>): Promise<T> {\n let attempt = 1;\n try {\n const meta = getStepMetadata();\n if (meta && typeof meta.attempt === 'number') {\n attempt = meta.attempt;\n }\n } catch {\n // If called outside workflow step context\n }\n\n try {\n return await options.fn();\n } catch (error: any) {\n const errorMessage = error?.message || String(error);\n const status = error?.status || error?.statusCode || error?.response?.status;\n\n const isRateLimited =\n status === 429 ||\n errorMessage.includes('429') ||\n errorMessage.toLowerCase().includes('rate limit') ||\n errorMessage.toLowerCase().includes('resource exhausted') ||\n errorMessage.toLowerCase().includes('quota exceeded');\n\n const isTransientError =\n status === 500 ||\n status === 502 ||\n status === 503 ||\n status === 504 ||\n errorMessage.includes('fetch failed') ||\n errorMessage.includes('ECONNRESET') ||\n errorMessage.includes('ETIMEDOUT') ||\n errorMessage.includes('socket hang up');\n\n if (isRateLimited || isTransientError) {\n const retryAfterSeconds = Math.min(120, Math.pow(2, attempt) * 2); // 4s, 8s, 16s, 32s, 64s, 120s\n const reason = isRateLimited ? 'Rate limit exceeded (429)' : `Transient server error (${status || 'network'})`;\n\n throw new RetryableError(`[${options.stepName}] ${reason}. Retrying attempt ${attempt + 1}...`, {\n retryAfter: `${retryAfterSeconds}s`,\n });\n }\n\n // Permanent/fatal error\n throw error;\n }\n}\n","import { generateLessonMasterFlow, auditCurriculumQualityFlow } from '../../ai/flows';\nimport { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport type { MilestoneInput, LessonPlan, CurriculumQualityReport } from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface GenerateMasterLessonStepInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n contextContinuity?: string;\n /** Pre-rendered STANDARDS CONTEXT block (verbatim standard statements). */\n standardsContext?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateMasterLessonStep(input: GenerateMasterLessonStepInput): Promise<LessonPlan> {\n 'use step';\n console.log(` โณ [Step: Master Lesson] Generating 5E Master Lesson Plan for \"${input.milestone.name}\"...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-master-lesson-${input.milestone.id || 'L01'}`,\n fn: async () => {\n return generateLessonMasterFlow({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: input.contextContinuity,\n standardsContext: input.standardsContext,\n modelOptions: input.modelOptions,\n });\n },\n });\n console.log(` โ
[Step: Master Lesson] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport interface JudgeMasterLessonStepInput {\n lessonId: string;\n lesson: LessonPlan;\n language: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n /** Verbatim standard statements (canonical ID -> text) for the Standards Alignment judge dimension. */\n standardStatements?: Record<string, string>;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function judgeMasterLessonStep(input: JudgeMasterLessonStepInput): Promise<CurriculumQualityReport> {\n 'use step';\n console.log(` โ๏ธ [Step: Quality Judge] Auditing Master Lesson pedagogical quality & language adherence...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `judge-master-lesson-${input.lessonId}`,\n fn: async () => {\n return auditCurriculumQualityFlow({\n targetArtifactType: 'LESSON',\n lessonId: input.lessonId,\n expectedLanguage: input.language,\n targetObjectives: input.targetObjectives,\n generatedContentJson: JSON.stringify(input.lesson, null, 2),\n standardStatements: input.standardStatements,\n modelOptions: input.modelOptions,\n });\n },\n });\n console.log(` โ
[Step: Quality Judge] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Verdict: ${res.overallVerdict}, Score: ${res.totalScore}/100)`);\n return res;\n}\n\nexport interface RepairMasterLessonStepInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n auditReport: CurriculumQualityReport;\n /** Pre-rendered STANDARDS CONTEXT block โ kept across repair so grounding is never lost. */\n standardsContext?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function repairMasterLessonStep(input: RepairMasterLessonStepInput): Promise<LessonPlan> {\n 'use step';\n console.log(` ๐ ๏ธ [Step: Auto-Repair] Repairing Master Lesson based on Judge feedback...`);\n const repairFeedback = `\nPREVIOUS AUDIT VERDICT: ${input.auditReport.overallVerdict} (Score: ${input.auditReport.totalScore}/100)\nDetected Issues:\n${input.auditReport.criteria.filter((c) => !c.passed).map((c) => `- [${c.name}] ${c.feedback}`).join('\\n')}\nActionable Repairs:\n${input.auditReport.actionableRepairPrompts.map((p) => `* ${p}`).join('\\n')}\nLanguage Adherence Required: \"${input.language}\"\n`.trim();\n\n return withRateLimitBackoff({\n stepName: `repair-master-lesson-${input.milestone.id || 'L01'}`,\n fn: async () => {\n return generateLessonMasterFlow({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: repairFeedback,\n standardsContext: input.standardsContext,\n modelOptions: input.modelOptions,\n });\n },\n });\n}\n","import {\n generateActivityFlow,\n generateCodeLabFlow,\n generateSelfLabFlow,\n generateDiagnosticQuizFlow,\n generateSlidesFlow,\n generateHandoutFlow,\n generateWorksheetFlow,\n generateTeacherGuideFlow,\n generateExtensionFlow,\n} from '../../ai/flows';\nimport { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n MilestoneInput,\n} from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport async function generateActivityStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<ActivityLab> {\n 'use step';\n console.log(` โณ [Step: Activity Lab] Generating hands-on ACT.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-act-${options.lesson.lessonId}`,\n fn: async () => generateActivityFlow(options),\n });\n console.log(` โ
[Step: Activity Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateCodeLabStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n targetTechStack?: string[];\n modelOptions?: ModelResolutionOptions;\n}): Promise<CodeLab> {\n 'use step';\n console.log(` โณ [Step: Code Lab] Generating starter & solution code LAB.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-lab-${options.lesson.lessonId}`,\n fn: async () => generateCodeLabFlow(options),\n });\n console.log(` โ
[Step: Code Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateSelfLabStep(options: {\n milestone: MilestoneInput;\n language: string;\n targetTechStack?: string[];\n modelOptions?: ModelResolutionOptions;\n}): Promise<SelfLab> {\n 'use step';\n console.log(` โณ [Step: Self-Lab] Generating SELF_LAB.md with Progressive Hints...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-self-lab-${options.milestone.id || 'L01'}`,\n fn: async () => generateSelfLabFlow(options),\n });\n console.log(` โ
[Step: Self-Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Challenges: 3 tiers Bronze/Silver/Gold)`);\n return res;\n}\n\nexport async function generateDiagnosticQuizStep(options: {\n milestone: MilestoneInput;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<DiagnosticQuiz> {\n 'use step';\n console.log(` โณ [Step: Diagnostic Quiz] Generating QUIZ.json Bloom Assessment...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-quiz-${options.milestone.id || 'L01'}`,\n fn: async () => generateDiagnosticQuizFlow(options),\n });\n console.log(` โ
[Step: Diagnostic Quiz] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Questions: ${res.questions.length})`);\n return res;\n}\n\nexport async function generateSlidesStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<SlideDeck> {\n 'use step';\n console.log(` โณ [Step: Slides] Generating Marp presentation SLIDE.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-slides-${options.lesson.lessonId}`,\n fn: async () => generateSlidesFlow(options),\n });\n console.log(` โ
[Step: Slides] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Slides: ${res.slides.length})`);\n return res;\n}\n\nexport async function generateHandoutStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Handout> {\n 'use step';\n console.log(` โณ [Step: Handout] Generating 5-Second Rule HANDOUT.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-handout-${options.lesson.lessonId}`,\n fn: async () => generateHandoutFlow(options),\n });\n console.log(` โ
[Step: Handout] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateWorksheetStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Worksheet> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-worksheet-${options.lesson.lessonId}`,\n fn: async () => generateWorksheetFlow(options),\n });\n}\n\nexport async function generateTeacherGuideStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<TeacherGuide> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-teacher-guide-${options.lesson.lessonId}`,\n fn: async () => generateTeacherGuideFlow(options),\n });\n}\n\nexport async function generateExtensionStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Extension> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-extension-${options.lesson.lessonId}`,\n fn: async () => generateExtensionFlow(options),\n });\n}\n","import { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport { auditCurriculumQualityFlow } from '../../ai/flows/auditCurriculumQualityFlow';\nimport type { CurriculumQualityReport } from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface JudgeSatelliteStepInput {\n artifactType: string; // 'ACT' | 'QUIZ' | 'SLIDE' | 'GUIDE' | 'WKS' | 'HANDOUT' | 'EXT' | 'CODE'\n artifactId: string;\n artifact: unknown;\n language: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n standardStatements?: Record<string, string>;\n modelOptions?: ModelResolutionOptions;\n}\n\n/**\n * Gate step for satellite artifacts (LLM_JUDGE mode).\n * Judges any artifact JSON against the same 6-dimension rubric; returns the report.\n * The workflow decides what to do with the verdict (log / block / store) โ gate config stays the single source of truth.\n */\nexport async function judgeSatelliteStep(input: JudgeSatelliteStepInput): Promise<CurriculumQualityReport> {\n 'use step';\n const t0 = Date.now();\n console.log(' ๐งโโ๏ธ [Step: Satellite Judge] ' + input.artifactType + ' (' + input.artifactId + ')...');\n return withRateLimitBackoff({\n stepName: 'judge-satellite-' + input.artifactType + '-' + input.artifactId,\n fn: async () => {\n return auditCurriculumQualityFlow({\n targetArtifactType: input.artifactType,\n lessonId: input.artifactId,\n expectedLanguage: input.language,\n targetObjectives: input.targetObjectives,\n generatedContentJson: JSON.stringify(input.artifact),\n standardStatements: input.standardStatements,\n modelOptions: input.modelOptions,\n });\n },\n }).then((res) => {\n console.log(' โ
[Satellite Judge] ' + input.artifactType + ' โ ' + res.overallVerdict + ' (' + res.totalScore + '/100) in ' + ((Date.now() - t0) / 1000).toFixed(1) + 's');\n return res;\n });\n}\n","import type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n Worksheet,\n Handout,\n SlideDeck,\n TeacherGuide,\n Extension,\n ProjectInstruction,\n} from '../schemas';\n\n/**\n * Serializes a LessonPlan object into canonical LESSON.md (5E Model & Deep Technical Standards)\n */\nexport function serializeLessonToMarkdown(lesson: LessonPlan): string {\n const learningObjectivesStr = lesson.learningObjectives\n .map((lo) => ` - **[${lo.bloomLevel}] \\`${lo.code}\\`**: ${lo.name ? `${lo.name} โ ` : ''}${lo.description}${lo.successCriteria ? ` (Indicator: ${lo.successCriteria})` : ''}`)\n .join('\\n');\n\n const coreConceptsStr = (lesson.coreConcepts && lesson.coreConcepts.length > 0)\n ? lesson.coreConcepts\n .map((cc, i) => {\n let str = `### Concept ${i + 1}: ${cc.name}\\n${cc.technicalDepth}`;\n if (cc.analogy) {\n str += `\\n\\n- **Real-World Analogy (แบจn dแปฅ thแปฑc tแบฟ):** ${cc.analogy}`;\n }\n if (cc.formulaOrRule) {\n str += `\\n\\n- **Mathematical / Statistical Principle:**\\n ${cc.formulaOrRule}`;\n }\n if (cc.comparisonTable && cc.comparisonTable.headers.length > 0) {\n const headerRow = `| ${cc.comparisonTable.headers.join(' | ')} |`;\n const dividerRow = `| ${cc.comparisonTable.headers.map(() => ':---').join(' | ')} |`;\n const dataRows = cc.comparisonTable.rows.map((r) => `| ${r.join(' | ')} |`).join('\\n');\n str += `\\n\\n#### Comparison & Trade-off Analysis\\n${headerRow}\\n${dividerRow}\\n${dataRows}`;\n }\n return str;\n })\n .join('\\n\\n---\\n\\n')\n : (lesson.sections || [])\n .map((sec, i) => `### Concept ${i + 1}: ${sec.title}\\n* **Teacher Explains:** ${sec.teacherActions}\\n* **Student Observes:** ${sec.studentActions}${sec.analogies.length > 0 ? `\\n* **Analogy:** ${sec.analogies.join('; ')}` : ''}`)\n .join('\\n\\n---\\n\\n');\n\n const guidedPractice = lesson.guidedPractice || {\n title: 'Guided Practice',\n explanation: 'Interactive implementation step.',\n codeSnippet: '# Verified reference code',\n codeLanguage: 'python',\n mermaidDiagram: '',\n };\n\n const mermaidBlock = guidedPractice.mermaidDiagram\n ? `\\`\\`\\`mermaid\\n${guidedPractice.mermaidDiagram.trim()}\\n\\`\\`\\``\n : '';\n\n const troubleshootingRows = (lesson.teacherNotes?.troubleshootingMatrix && lesson.teacherNotes.troubleshootingMatrix.length > 0)\n ? lesson.teacherNotes.troubleshootingMatrix.map((r) => `| ${r.issue} | ${r.potentialCause} | ${r.solution} |`).join('\\n')\n : '| Runtime Timeout / Disconnect | Hardware power fluctuation or wrong IP | Check network broadcast and verify 5V power stability |';\n\n const commonPitfallsStr = (lesson.teacherNotes?.commonPitfalls && lesson.teacherNotes.commonPitfalls.length > 0)\n ? lesson.teacherNotes.commonPitfalls.map((p) => `- ${p}`).join('\\n')\n : '- Forgetting exception handling when payload format changes.';\n\n const effectiveCodeLang = guidedPractice.codeLanguage || (lesson.topic?.toLowerCase().includes('swift') ? 'swift' : 'typescript');\n\n return `<!-- [SME_MANDATE] -->\n<!-- \n Lesson ID: ${lesson.lessonId}\n Title: ${lesson.title}\n Topic: ${lesson.topic}\n Language: ${lesson.language}\n-->\n\n# ${lesson.lessonId}: ${lesson.title}\n\n---\n\n## 0. Overview\n- **Duration:** 90 minutes\n- **Target Audience:** ${lesson.targetGradeOrAudience || 'Learners'}\n- **Learning Objectives (Bloom's Taxonomy):**\n${learningObjectivesStr}\n- **Prerequisites & Continuity:** ${lesson.prerequisites || 'Basic understanding of foundational programming and protocols.'}\n- **Materials & Tools Required:** ${lesson.materialsSummary || 'Developer workstation with terminal and code editor.'}\n- **Core Vocabulary & Keywords:** ${lesson.keywords?.join(', ') || 'N/A'}\n\n---\n\n## 1. ENGAGE (Hook & High-Stakes Scenario) โ 10-15 mins\n\n### Real-World Context: \"${lesson.hookTitle || 'The Incident'}\"\n${lesson.hookScenario}\n\n${lesson.hookQuestions && lesson.hookQuestions.length > 0 ? lesson.hookQuestions.map((q, idx) => `- **Inquiry Question ${idx + 1}:** ${q}`).join('\\n') : '- **Inquiry Question 1:** How can our system distinguish between legitimate telemetry and corrupted signals?'}\n\n---\n\n## 2. EXPLORE & EXPLAIN (Core Technical Concepts & Principles) โ 30-40 mins\n\n${coreConceptsStr}\n\n---\n\n## 3. GUIDED PRACTICE (Visual Architecture & Annotated Code) โ 20-25 mins\n\n### System Architecture & Data Flow (Mermaid Diagram)\n${mermaidBlock}\n\n### Verified Reference Code with Line-by-Line Annotations\n<!-- [SME_MANDATE] -->\n\\`\\`\\`${effectiveCodeLang}\n${guidedPractice.codeSnippet}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n---\n\n## 4. ELABORATE & INDEPENDENT PRACTICE (Technical Challenge & Scaffolding) โ 15-20 mins\n\n### Engineering Challenge: \"${lesson.independentPractice?.title || 'System Optimization Challenge'}\"\n${lesson.independentPractice?.description || 'Implement the core logic and test against simulated edge cases.'}\n\n- ๐ฅ **Bronze (Foundational):** ${lesson.differentiation.bronzeTier || 'Implement the core happy path and run verified test.'}\n- ๐ฅ **Silver (Application):** ${lesson.differentiation.silverTier || 'Add conditional validation and error handling for malformed inputs.'}\n- ๐ฅ **Gold (Enrichment / Creative):** ${lesson.differentiation.goldTier || 'Extend with automated retries, metrics logging, or external notification hooks.'}\n\n---\n\n## 5. EVALUATE (Summary, Assessment & Metacognition) โ 5-10 mins\n\n### Exit Ticket (Bloom: Apply / Analyze)\n> **Scenario Question:** ${lesson.exitTicket.questionStem} \n> **Expected Response / Rubric:** ${lesson.exitTicket.expectedAnswerOrRubric} \n> **Metacognitive Reflection Prompt:** ${lesson.exitTicket.metacognitivePrompt}\n\n---\n\n## 6. Teacher Notes & Troubleshooting Matrix\n- **Common Pitfalls (What Learners Commonly Misunderstand):**\n${commonPitfallsStr}\n\n- **Troubleshooting & Debugging Matrix:**\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n- **Extension Challenges for Advanced Learners:** ${lesson.teacherNotes?.extensionNotes || 'Explore asynchronous concurrency and resilience patterns.'}\n`.trim();\n}\n\n/**\n * Serializes an ActivityLab object into canonical ACT.md (Inquiry-Based & Computational Thinking)\n */\nexport function serializeActivityToMarkdown(act: ActivityLab): string {\n const hardwareItems = act.materialsBOM.hardware.length > 0\n ? act.materialsBOM.hardware.map((h) => `- ${h}`).join('\\n')\n : '- 1 x Standard developer workstation / simulation board';\n\n const ct = act.computationalThinking || {\n problemStatement: act.objective,\n decomposition: [\n '1. Parse incoming parameters and validate input state.',\n '2. Execute core transformation / hardware communication.',\n '3. Verify response telemetry and handle exceptions.',\n ],\n algorithmDesign: 'Structured data flow ensuring state consistency before and after execution.',\n };\n\n const workflow = act.activeLearningWorkflow;\n const phase1 = workflow?.phase1Planning || {\n durationMinutes: 15,\n studentTask: 'Hand-draw the data flow diagram or state machine on paper before writing code.',\n teacherAction: 'Inspect student flowcharts and ask: \"What happens if network latency spikes?\"',\n inquiryQuestions: ['Where is the primary point of failure?', 'How will the system notify the user upon error?'],\n };\n\n const phase2 = workflow?.phase2Implementation || {\n durationMinutes: 40,\n studentTask: 'Implement the logic step by step using the reference specifications.',\n teacherAction: 'Observe student progress and intervene only when a team is stuck for > 5 mins.',\n codeOrCommands: act.steps.map((s) => `# Step ${s.stepNumber}: ${s.title}\\n${s.studentInstructions}`),\n };\n\n const phase3 = workflow?.phase3Debugging || {\n durationMinutes: 15,\n testingSteps: 'Run test suite or live verification commands to confirm expected output.',\n errorAnalysis: 'Compare error logs against the troubleshooting table to isolate hardware vs software faults.',\n };\n\n const diff3Tier = act.differentiation3Tier || {\n bronzeTier: act.scaffoldingSupport || 'Complete basic verified setup and run happy path test.',\n silverTier: 'Implement validation checks and handle error recovery gracefully.',\n goldTier: act.levelUpExtension || 'Extend with automated regression tests or asynchronous event streaming.',\n };\n\n return `---\nid: \"${act.lessonId}\"\ntitle: \"${act.title}\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n<!-- INJECT_BODY -->\n\n# INQUIRY-BASED ACTIVITY: ${act.title}\n_Lesson: ${act.lessonId} | Estimated Duration: ${act.totalDurationMinutes} mins_\n\n## [REQUIRED] Computational Thinking Focus\n- **Problem Statement (Real-world Scenario):** ${ct.problemStatement}\n- **Decomposition (Sub-problems Breakdown):**\n${ct.decomposition.map((d) => ` ${d}`).join('\\n')}\n- **Algorithm Design (Data Flow & Logic Architecture):** ${ct.algorithmDesign}\n\n## [REQUIRED] Materials & Setup\n- **Reference Material:** Students should use the **HANDOUT** and Technical Reference as their primary technical lifeline.\n- **Hardware/Software:**\n<!-- [HARDWARE_BOM] -->\n${hardwareItems}\n<!-- [/HARDWARE_BOM] -->\n- **Software:** ${act.materialsBOM.software.join(', ') || 'IDE and Terminal'}\n- **Consumables:** ${act.materialsBOM.consumables.join(', ') || 'None'}\n- **Other Resources:** ${act.materialsBOM.otherResources.join(', ') || 'Handout cheat sheet'}\n\n## [REQUIRED] Constraints & Safety\n- โ ๏ธ **Technical/Safety:** ${act.safetyWarnings.join('; ') || 'Do not expose unencrypted secrets or exceed hardware electrical ratings.'}\n- ๐ก **Design Constraint:** ${act.designConstraints?.join('; ') || 'All operations must be idempotent and non-blocking.'}\n\n## [REQUIRED] Active Learning Workflow\n\n### Phase 1: Planning & Design โ ${phase1.durationMinutes} mins\n- **Student Task:** ${phase1.studentTask}\n- **Teacher Action:** ${phase1.teacherAction}\n${phase1.inquiryQuestions.map((q) => ` - *Inquiry Question:* ${q}`).join('\\n')}\n\n### Phase 2: Implementation & Discovery โ ${phase2.durationMinutes} mins\n- **Student Task:** ${phase2.studentTask}\n- **Teacher Action:** ${phase2.teacherAction}\n\n${phase2.codeOrCommands.map((c) => `\\`\\`\\`text\\n${c}\\n\\`\\`\\``).join('\\n\\n')}\n\n### Phase 3: Debugging & Testing โ ${phase3.durationMinutes} mins\n- **Testing:** ${phase3.testingSteps}\n- **Error Analysis:** ${phase3.errorAnalysis}\n\n## [REQUIRED] 3-Tier Differentiation\n- ๐ฅ **Bronze (Foundational):** ${diff3Tier.bronzeTier}\n- ๐ฅ **Silver (Application):** ${diff3Tier.silverTier}\n- ๐ฅ **Gold (Enrichment/Creative):** ${diff3Tier.goldTier}\n\n## [REQUIRED] Reflection & Discussion\n- **Discussion Question:** ${act.reflectionQuestion || 'Why is this architectural design superior to a monolithic direct call? Where is the performance bottleneck?'}\n`.trim();\n}\n\n/**\n * Serializes CodeLab object into canonical LAB.md (LAB_TEMPLATE standard)\n */\nexport function serializeCodeLabToMarkdown(codeLab: CodeLab): string {\n const env = codeLab.environmentSetup || {\n languageFramework: codeLab.techStack.join(', '),\n ideEditor: 'VS Code / Xcode / IDE of choice',\n requiredLibraries: codeLab.techStack,\n hardwareOrEnvConnection: 'Localhost / Embedded connection',\n };\n\n const tasks = codeLab.threeTierTasks || {\n bronze: { mins: 15, objective: 'Basic Setup & Syntax', task: 'Implement starter code skeleton', requirement: 'Clean compilation without errors' },\n silver: { mins: 25, objective: 'Core Logic Implementation', task: 'Implement full data processing logic', requirement: 'All standard test cases pass' },\n gold: { mins: 20, objective: 'Edge Cases & Optimization', task: 'Handle network failures and performance tuning', requirement: 'Resilience under edge-case injection' },\n };\n\n const troubleshootingRows = (codeLab.troubleshootingMatrix && codeLab.troubleshootingMatrix.length > 0)\n ? codeLab.troubleshootingMatrix.map((r) => `| ${r.issue} | ${r.potentialCause} | ${r.solution} |`).join('\\n')\n : (codeLab.commonBugsAndFixes && codeLab.commonBugsAndFixes.length > 0)\n ? codeLab.commonBugsAndFixes.map((b) => `| ${b.bugDescription} | Logical error or misconfiguration | ${b.solutionHint} |`).join('\\n')\n : '| Connection Timeout | Network interface down or bad endpoint | Check IP address and retry with timeout wrapper |';\n\n const checklistStr = (codeLab.submissionChecklist && codeLab.submissionChecklist.length > 0)\n ? codeLab.submissionChecklist.map((c) => `- [ ] ${c}`).join('\\n')\n : `- [ ] Starter code compiles and runs without crashes.\\n- [ ] Solution code passes all automated test cases.\\n- [ ] Code comments explain the reasoning behind key algorithms.`;\n\n return `---\nid: \"${codeLab.lessonId}\"\ntitle: \"${codeLab.title}\"\ntype: \"LAB\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n<!-- INJECT_BODY -->\n\n# ๐จโ๐ป CODE LAB: ${codeLab.title}\n_Lesson: ${codeLab.lessonId} | Tech Stack: ${codeLab.techStack.join(', ')}_\n\n## ๐ฏ Overview\nThis lab focuses on the practical implementation of core technical concepts, bridging theory into working, robust, and testable code.\n\n## ๐ ๏ธ Environment & Setup\n- **Language / Framework:** ${env.languageFramework}\n- **IDE / Editor:** ${env.ideEditor}\n- **Required Libraries:** ${env.requiredLibraries.join(', ')}\n- **Hardware / Connection Setup:** ${env.hardwareOrEnvConnection || 'Local dev environment'}\n\n## ๐ Lab Tasks (3-Tier Differentiation)\n\n### ๐ฅ Bronze (Foundational) โ ${tasks.bronze.mins} mins\n**Objective:** ${tasks.bronze.objective}\n- **Task:** ${tasks.bronze.task}\n- **Requirement:** ${tasks.bronze.requirement}\n\n### ๐ฅ Silver (Application) โ ${tasks.silver.mins} mins\n**Objective:** ${tasks.silver.objective}\n- **Task:** ${tasks.silver.task}\n- **Requirement:** ${tasks.silver.requirement}\n\n### ๐ฅ Gold (Enrichment/Creative) โ ${tasks.gold.mins} mins\n**Objective:** ${tasks.gold.objective}\n- **Task:** ${tasks.gold.task}\n- **Requirement:** ${tasks.gold.requirement}\n\n## ๐ป Technical Reference ([SME_MANDATE])\n<!-- [SME_MANDATE] -->\n> Any code provided in this section is verified for syntax accuracy and runtime execution.\n\n### Starter Code Template (\\`${codeLab.starterCode.filename}\\`)\n\\`\\`\\`${codeLab.starterCode.language}\n${codeLab.starterCode.content}\n\\`\\`\\`\n\n### Solution Code (\\`${codeLab.solutionCode.filename}\\`)\n\\`\\`\\`${codeLab.solutionCode.language}\n${codeLab.solutionCode.content}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n## ๐ Troubleshooting & Debugging Matrix\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n## ๐ Submission & Verification Checklist\n${checklistStr}\n`.trim();\n}\n\n/**\n * Serializes Handout to HANDOUT.md (5-Second Rule Cheat Sheet standard)\n */\nexport function serializeHandoutToMarkdown(handout: Handout): string {\n const conceptsStr = (handout.coreConceptsSummary && handout.coreConceptsSummary.length > 0)\n ? handout.coreConceptsSummary.map((c) => `- **${c.concept}:** ${c.definition}`).join('\\n')\n : (handout.sections || []).map((s) => `### ${s.heading}\\n${s.summaryPoints.map((p) => `- ${p}`).join('\\n')}`).join('\\n\\n');\n\n const syntaxTableRows = (handout.syntaxTable && handout.syntaxTable.length > 0)\n ? handout.syntaxTable.map((r) => `| \\`${r.syntax}\\` | ${r.meaning} | \\`${r.example}\\` |`).join('\\n')\n : '| `execute()` | Main trigger function | `const res = await service.execute()` |';\n\n const procedure = handout.problemSolvingProcedure || {\n step1Trigger: 'Identify input parameters, sensor triggers, or user events.',\n step2Logic: 'Transform data, apply business logic, and handle potential errors.',\n step3Output: 'Update system state, persist results, or transmit telemetry.',\n };\n\n const proTipsStr = (handout.proTips && handout.proTips.length > 0)\n ? handout.proTips.map((t) => `> ๐ก **Pro-Tip:** ${t}`).join('\\n')\n : '> ๐ก **Pro-Tip:** Always validate inputs at the system boundary before executing heavy processing.';\n\n return `---\nid: \"${handout.lessonId}\"\ntitle: \"${handout.title}\"\ntype: \"HANDOUT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T6\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n\n# STUDENT HANDOUT: ${handout.title}\n**Quick-Reference Cheat Sheet & Concept Summary**\n\n> **For Students:** This document summarizes the core concepts and the most important syntax following the **5-Second Rule** (instant look-up). Use it as a quick reference during your lab tasks or projects.\n\n## ๐ 1. Core Concepts\n${conceptsStr}\n\n## โก 2. Common Syntax & Configurations\n| Syntax / Config | Meaning & Function | Example / Snippet |\n| :--- | :--- | :--- |\n${syntaxTableRows}\n\n## ๐ 3. General Problem-Solving Procedure\n*Three general thinking steps when tackling problems in this domain:*\n1. **Step 1 (Input/Trigger):** ${procedure.step1Trigger}\n2. **Step 2 (Logic/Transform):** ${procedure.step2Logic}\n3. **Step 3 (Output/Verify):** ${procedure.step3Output}\n\n---\n\n### ๐ก Pro-tips\n${proTipsStr}\n`.trim();\n}\n\n/**\n * Serializes ProjectInstruction to Instructable-style INSTRUCTION.md\n */\nexport function serializeProjectInstructionToMarkdown(instruction: ProjectInstruction): string {\n return `---\nid: \"${instruction.instructionId}\"\ntitle: \"${instruction.title}\"\ntype: \"INSTRUCTION\"\nlanguage: \"${instruction.language}\"\ndifficulty: \"${instruction.difficulty}\"\nestimated_minutes: ${instruction.estimatedTotalMinutes}\ntech_stack: [${instruction.techStack.map((t) => `\"${t}\"`).join(', ')}]\n---\n\n# ๐ ๏ธ ${instruction.title}\n\n> โฑ๏ธ **Estimated Duration:** ~${instruction.estimatedTotalMinutes} mins \n> ๐ฏ **Difficulty:** ${instruction.difficulty.toUpperCase()} \n> ๐งฐ **Tech Stack:** ${instruction.techStack.join(', ')}\n\n---\n\n## ๐ Prerequisites & Tools\n* **Prerequisites:** ${instruction.prerequisites.join('; ') || 'Basic programming knowledge'}\n* **Materials & Tools:** ${instruction.materialsAndTools.join('; ') || 'Standard developer environment'}\n\n---\n\n${instruction.sections\n .map(\n (sec) => `## Section ${sec.sectionNumber}: ${sec.title}\n> ๐ฏ **Goal:** ${sec.goal} (~${sec.estimatedMinutes || 15} mins)\n\n${sec.preflightChecks.length > 0 ? `### ๐ซ Preflight Checks\\n${sec.preflightChecks.map((p) => `- [ ] ${p}`).join('\\n')}\\n` : ''}\n${sec.steps\n .map(\n (step) => `### Step ${step.stepNumber}: ${step.actionTitle}\n\n${step.explanation}\n\n${step.targetFile ? `๐ **File:** \\`${step.targetFile}\\`` : ''}\n\n${step.codeSnippet ? `\\`\\`\\`${step.codeLanguage || 'text'}\\n# ${step.targetFile || 'Implementation'}\\n${step.codeSnippet}\\n\\`\\`\\`` : ''}\n\n${step.tip ? `> [!TIP]\\n> ${step.tip}` : ''}\n${step.warning ? `> [!WARNING]\\n> ${step.warning}` : ''}\n\n**Expected result:** ${step.expectedResult}\n\n${step.imagePlaceholder ? `[IMAGE: ${step.imagePlaceholder}]` : ''}`\n )\n .join('\\n\\n')}\n\n${sec.rollbackOrCleanup ? `> ๐ **Rollback / Reset:** ${sec.rollbackOrCleanup}` : ''}`\n )\n .join('\\n\\n---\\n\\n')}\n\n---\n\n## ๐ Verification Checklist\n${instruction.verificationChecklist.map((c) => `- [ ] ${c}`).join('\\n')}\n`.trim();\n}\n","import type { SelfLab, DiagnosticQuiz } from '../schemas';\n\n/**\n * Serializes SelfLab object into canonical SELF_LAB.md with Progressive Hints (Accordion / Spoilers)\n */\nexport function serializeSelfLabToMarkdown(lab: SelfLab): string {\n const renderChallenge = (c: SelfLab['challenges']['bronze'], label: string) => {\n const tasksList = c.tasks.map((t) => `- ${t}`).join('\\n');\n return `### ${label}: ${c.title} โ ~${c.estimatedMinutes} mins\n**Objective:** ${c.objective}\n\n#### Tasks & Implementation Details:\n${tasksList}\n\n#### ๐งช Self-Verification Command:\n\\`\\`\\`bash\n${c.verifyCommand}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n${c.expectedOutput}\n\\`\\`\\`\n\n#### ๐ก Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>๐ก Hint Level 1: Conceptual Clue (Hฦฐแปng tฦฐ duy)</b></summary>\n\n${c.hints.hint1Concept}\n</details>\n\n<details>\n<summary><b>๐ Hint Level 2: Structural Skeleton (Khung code mแบซu)</b></summary>\n\n\\`\\`\\`${lab.techStack[0]?.toLowerCase() || 'swift'}\n${c.hints.hint2Skeleton}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>๐จ Hint Level 3: Full Solution & Explanation (Lแปi giแบฃi trแปn vแบนn)</b></summary>\n\n\\`\\`\\`${lab.techStack[0]?.toLowerCase() || 'swift'}\n${c.hints.hint3Solution.code}\n\\`\\`\\`\n\n**Why this solution works:**\n${c.hints.hint3Solution.explanation}\n</details>`;\n };\n\n const troubleshootingRows = (lab.troubleshootingMatrix && lab.troubleshootingMatrix.length > 0)\n ? lab.troubleshootingMatrix.map((r) => `| ${r.symptom} | ${r.rootCause} | ${r.exactFix} |`).join('\\n')\n : '| Network Timeout | Device IP unreachable or firewall blocking port | Verify device is on same subnet and ping IP |';\n\n const preflightList = (lab.preflightChecklist && lab.preflightChecklist.length > 0)\n ? lab.preflightChecklist.map((p) => `- [ ] ${p}`).join('\\n')\n : '- [ ] Development environment configured\\n- [ ] Code editor ready';\n\n const finalChecklist = (lab.finalSubmissionChecklist && lab.finalSubmissionChecklist.length > 0)\n ? lab.finalSubmissionChecklist.map((c) => `- [ ] ${c}`).join('\\n')\n : '- [ ] All verification commands pass with expected outputs\\n- [ ] Code is formatted and clean';\n\n return `---\nid: \"${lab.labId}\"\ntitle: \"${lab.title}\"\ntype: \"SELF_LAB\"\nlanguage: \"${lab.language}\"\ndifficulty: \"${lab.difficulty}\"\nestimated_minutes: ${lab.estimatedTotalMinutes}\ntech_stack: [${lab.techStack.map((t) => `\"${t}\"`).join(', ')}]\n---\n\n# ๐ Self-Paced Hands-On Lab: ${lab.title}\n\n> โฑ๏ธ **Estimated Duration:** ~${lab.estimatedTotalMinutes} mins \n> ๐ฏ **Difficulty Level:** ${lab.difficulty.toUpperCase()} \n> ๐งฐ **Tech Stack:** ${lab.techStack.join(', ')} \n> ๐ก **Self-Learner Notice:** You are in full control of this lab. Follow the progressive challenges below. If you get stuck at any point, use the **Progressive Hints System** to get unstuck without ruining the learning experience!\n\n---\n\n## ๐ Mission Briefing & Environment Setup\n${lab.missionBriefing}\n\n### ๐ซ Preflight Checklist\n${preflightList}\n\n---\n\n## ๐ฏ Progressive Challenges (3-Tier Differentiation)\n\n${renderChallenge(lab.challenges.bronze, '๐ฅ Challenge 1: Foundational Core (Bronze)')}\n\n---\n\n${renderChallenge(lab.challenges.silver, '๐ฅ Challenge 2: Logic & Error Handling (Silver)')}\n\n---\n\n${renderChallenge(lab.challenges.gold, '๐ฅ Challenge 3: Edge Cases & Optimization (Gold)')}\n\n---\n\n## ๐ Self-Learner Troubleshooting Matrix\n| Symptom / Error Message | Root Cause | Exact Fix |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n---\n\n## ๐ Final Lab Submission & Mastery Checklist\n${finalChecklist}\n`.trim();\n}\n\n/**\n * Serializes DiagnosticQuiz object into canonical QUIZ.md\n */\nexport function serializeDiagnosticQuizToMarkdown(quiz: DiagnosticQuiz): string {\n const questionsSection = quiz.questions\n .map((q, qIdx) => {\n let qStr = `### Question ${qIdx + 1} (${q.id}) [Bloom: ${q.bloomLevel.toUpperCase()}]\\n${q.scenarioOrStem}`;\n if (q.codeSnippet) {\n qStr += `\\n\\n\\`\\`\\`${q.codeLanguage || 'text'}\\n${q.codeSnippet}\\n\\`\\`\\``;\n }\n qStr += '\\n\\n' + q.options.map((opt) => `- **${opt.id}.** ${opt.text}`).join('\\n');\n return qStr;\n })\n .join('\\n\\n---\\n\\n');\n\n const answerKeySection = quiz.questions\n .map((q, qIdx) => {\n const correctOpt = q.options.find((o) => o.isCorrect) || q.options[0];\n const optExplanations = q.options\n .map((o) => ` - **${o.id}${o.isCorrect ? ' (โ
CORRECT)' : ' (โ)'}:** ${o.explanation}`)\n .join('\\n');\n\n const takeaway = q.takeawayMessage || q.teacherNote || `The correct answer is ${correctOpt.id}.`;\n return `#### Question ${qIdx + 1} (${q.id}) โ Correct Answer: **${correctOpt.id}**\n- **Takeaway:** ${takeaway}\n- **Option Analysis:**\n${optExplanations}`;\n })\n .join('\\n\\n');\n\n return `---\nid: \"${quiz.quizId}\"\ntitle: \"${quiz.title}\"\ntype: \"QUIZ\"\nlanguage: \"${quiz.language}\"\ntotal_questions: ${quiz.questions.length}\npassing_score_pct: ${quiz.passingScorePct}\n---\n\n# ๐ง Diagnostic & Active Recall Quiz: ${quiz.title}\n\n> โฑ๏ธ **Recommended Time:** ~10-15 mins \n> ๐ฏ **Passing Score:** ${quiz.passingScorePct}% \n> ๐ก **Purpose:** Test your conceptual understanding, catch hidden misconceptions, and evaluate architectural trade-offs.\n\n---\n\n${questionsSection}\n\n---\n\n## ๐ Comprehensive Answer Key & Deep Explanation (Expand after completing)\n<details>\n<summary><b>๐ Click to View Full Explanations & Common Pitfall Analysis</b></summary>\n\n${answerKeySection}\n</details>\n`.trim();\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface JobManifest {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n status: 'PENDING' | 'IN_PROGRESS' | 'COMPLETED' | 'FAILED';\n totalMilestones: number;\n completedMilestones: number;\n createdAt: string;\n updatedAt: string;\n artifacts: Array<{\n milestoneId: string;\n artifactType: string;\n filePath: string;\n sizeBytes: number;\n createdAt: string;\n }>;\n error?: string;\n}\n\nexport class LocalWorkspaceManager {\n private baseDir: string;\n\n constructor(baseDir?: string) {\n this.baseDir = baseDir || path.resolve(process.cwd(), 'output', 'workspace-jobs');\n }\n\n getJobDirectory(jobId: string): string {\n return path.join(this.baseDir, jobId);\n }\n\n async initJobWorkspace(\n jobId: string,\n initialInfo: { courseTitle: string; topic: string; language: string; totalMilestones: number }\n ): Promise<string> {\n const jobDir = this.getJobDirectory(jobId);\n await fs.mkdir(jobDir, { recursive: true });\n\n const now = new Date().toISOString();\n const manifest: JobManifest = {\n jobId,\n courseTitle: initialInfo.courseTitle,\n topic: initialInfo.topic,\n language: initialInfo.language,\n status: 'IN_PROGRESS',\n totalMilestones: initialInfo.totalMilestones,\n completedMilestones: 0,\n createdAt: now,\n updatedAt: now,\n artifacts: [],\n };\n\n await this.saveManifest(jobId, manifest);\n return jobDir;\n }\n\n async saveArtifact(\n jobId: string,\n milestoneSlug: string,\n filename: string,\n content: string,\n artifactType: string\n ): Promise<string> {\n const jobDir = this.getJobDirectory(jobId);\n const targetDir = path.join(jobDir, milestoneSlug);\n await fs.mkdir(targetDir, { recursive: true });\n\n const filePath = path.join(targetDir, filename);\n await fs.writeFile(filePath, content, 'utf-8');\n\n const stat = await fs.stat(filePath);\n const manifest = await this.getManifest(jobId);\n\n if (manifest) {\n manifest.artifacts.push({\n milestoneId: milestoneSlug,\n artifactType,\n filePath: path.relative(jobDir, filePath),\n sizeBytes: stat.size,\n createdAt: new Date().toISOString(),\n });\n manifest.updatedAt = new Date().toISOString();\n await this.saveManifest(jobId, manifest);\n }\n\n return filePath;\n }\n\n async getManifest(jobId: string): Promise<JobManifest | null> {\n const manifestPath = path.join(this.getJobDirectory(jobId), 'manifest.json');\n try {\n const data = await fs.readFile(manifestPath, 'utf-8');\n return JSON.parse(data) as JobManifest;\n } catch {\n return null;\n }\n }\n\n async saveManifest(jobId: string, manifest: JobManifest): Promise<void> {\n const manifestPath = path.join(this.getJobDirectory(jobId), 'manifest.json');\n manifest.updatedAt = new Date().toISOString();\n await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');\n }\n\n async markMilestoneCompleted(jobId: string): Promise<void> {\n const manifest = await this.getManifest(jobId);\n if (manifest) {\n manifest.completedMilestones += 1;\n if (manifest.completedMilestones >= manifest.totalMilestones) {\n manifest.status = 'COMPLETED';\n }\n await this.saveManifest(jobId, manifest);\n }\n }\n\n async markJobFailed(jobId: string, errorMsg: string): Promise<void> {\n const manifest = await this.getManifest(jobId);\n if (manifest) {\n manifest.status = 'FAILED';\n manifest.error = errorMsg;\n await this.saveManifest(jobId, manifest);\n }\n }\n}\n","import { Octokit } from '@octokit/rest';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface GitPublishOptions {\n jobId: string;\n localJobDir: string;\n githubToken?: string;\n owner: string;\n repo: string;\n branch?: string;\n commitMessage?: string;\n createPullRequest?: boolean;\n}\n\nexport interface GitPublishResult {\n success: boolean;\n commitSha?: string;\n branch: string;\n pullRequestUrl?: string;\n publishedFilesCount: number;\n error?: string;\n}\n\n/**\n * Publishes generated course artifacts to a designated GitHub Repository (Git-as-CMS)\n */\nexport async function publishToGitHub(options: GitPublishOptions): Promise<GitPublishResult> {\n const token = options.githubToken || process.env.GITHUB_TOKEN;\n if (!token) {\n return {\n success: false,\n branch: options.branch || 'main',\n publishedFilesCount: 0,\n error: 'Missing GITHUB_TOKEN in environment or options',\n };\n }\n\n const octokit = new Octokit({ auth: token });\n const targetBranch = options.branch || `generated/course-${options.jobId}`;\n let publishedFilesCount = 0;\n\n try {\n // 1. Scan all files in local workspace\n const filesToUpload: Array<{ path: string; content: string }> = [];\n\n async function scanDir(currentDir: string) {\n const entries = await fs.readdir(currentDir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n if (entry.isDirectory()) {\n await scanDir(fullPath);\n } else if (entry.isFile() && !entry.name.startsWith('.')) {\n const content = await fs.readFile(fullPath, 'utf-8');\n const relPath = path.relative(options.localJobDir, fullPath);\n filesToUpload.push({ path: relPath, content });\n }\n }\n }\n\n await scanDir(options.localJobDir);\n\n if (filesToUpload.length === 0) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount: 0,\n error: 'No files found in workspace to upload',\n };\n }\n\n // 2. Get reference to base branch (e.g. main)\n const baseBranch = 'main';\n let baseTreeSha: string;\n let baseCommitSha: string;\n\n try {\n const { data: refData } = await octokit.git.getRef({\n owner: options.owner,\n repo: options.repo,\n ref: `heads/${baseBranch}`,\n });\n baseCommitSha = refData.object.sha;\n\n const { data: commitData } = await octokit.git.getCommit({\n owner: options.owner,\n repo: options.repo,\n commit_sha: baseCommitSha,\n });\n baseTreeSha = commitData.tree.sha;\n } catch (e: any) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount: 0,\n error: `Failed to fetch base branch ${baseBranch}: ${e.message}`,\n };\n }\n\n // 3. Create Blobs & Tree Entries\n const treeItems: Array<{ path: string; mode: '100644'; type: 'blob'; sha: string }> = [];\n\n for (const file of filesToUpload) {\n const { data: blobData } = await octokit.git.createBlob({\n owner: options.owner,\n repo: options.repo,\n content: Buffer.from(file.content).toString('base64'),\n encoding: 'base64',\n });\n\n treeItems.push({\n path: file.path,\n mode: '100644',\n type: 'blob',\n sha: blobData.sha,\n });\n publishedFilesCount++;\n }\n\n // 4. Create New Git Tree\n const { data: newTree } = await octokit.git.createTree({\n owner: options.owner,\n repo: options.repo,\n base_tree: baseTreeSha,\n tree: treeItems,\n });\n\n // 5. Create Commit\n const message =\n options.commitMessage ||\n `feat(curriculum): publish generated course artifacts [job:${options.jobId}]`;\n\n const { data: newCommit } = await octokit.git.createCommit({\n owner: options.owner,\n repo: options.repo,\n message,\n tree: newTree.sha,\n parents: [baseCommitSha],\n });\n\n // 6. Update or Create Branch Ref\n try {\n await octokit.git.createRef({\n owner: options.owner,\n repo: options.repo,\n ref: `refs/heads/${targetBranch}`,\n sha: newCommit.sha,\n });\n } catch {\n // If branch already exists, force update ref\n await octokit.git.updateRef({\n owner: options.owner,\n repo: options.repo,\n ref: `heads/${targetBranch}`,\n sha: newCommit.sha,\n force: true,\n });\n }\n\n let prUrl: string | undefined = undefined;\n\n // 7. Optional: Create Pull Request\n if (options.createPullRequest && targetBranch !== baseBranch) {\n try {\n const { data: prData } = await octokit.pulls.create({\n owner: options.owner,\n repo: options.repo,\n title: `[Curriculum AI] Generated Curriculum (${options.jobId})`,\n head: targetBranch,\n base: baseBranch,\n body: `Automated curriculum generation output from job \\`${options.jobId}\\`.\\nContains ${publishedFilesCount} files.`,\n });\n prUrl = prData.html_url;\n } catch {\n // PR might already exist\n }\n }\n\n return {\n success: true,\n commitSha: newCommit.sha,\n branch: targetBranch,\n pullRequestUrl: prUrl,\n publishedFilesCount,\n };\n } catch (error: any) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount,\n error: error.message || String(error),\n };\n }\n}\n","import { createClient, type SupabaseClient } from '@supabase/supabase-js';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface SupabasePublishOptions {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n milestones: Array<{\n milestoneId: string;\n milestoneName: string;\n lessonSlug: string;\n summary?: string;\n }>;\n supabaseUrl?: string;\n supabaseServiceKey?: string;\n bucketName?: string;\n}\n\nexport interface SupabasePublishResult {\n success: boolean;\n learningPathId?: string;\n syncedMilestonesCount: number;\n uploadedAssetsCount: number;\n error?: string;\n}\n\n/**\n * Publishes metadata and binary assets to Supabase PostgreSQL & Storage Bucket\n */\nexport async function publishToSupabase(\n options: SupabasePublishOptions\n): Promise<SupabasePublishResult> {\n const supabaseUrl = options.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;\n const serviceKey = options.supabaseServiceKey || process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;\n\n if (!supabaseUrl || !serviceKey) {\n return {\n success: false,\n syncedMilestonesCount: 0,\n uploadedAssetsCount: 0,\n error: 'Missing SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY',\n };\n }\n\n const supabase: SupabaseClient = createClient(supabaseUrl, serviceKey);\n const bucketName = options.bucketName || 'learning_resources';\n\n try {\n // 1. Upsert Learning Path / Course record\n const { data: lpData, error: lpError } = await supabase\n .from('learning_paths')\n .upsert(\n {\n code: `LP-${options.jobId}`,\n title: options.courseTitle,\n description: `Auto-generated curriculum on ${options.topic}`,\n language: options.language,\n metadata: {\n jobId: options.jobId,\n topic: options.topic,\n totalMilestones: options.milestones.length,\n generatedAt: new Date().toISOString(),\n },\n },\n { onConflict: 'code' }\n )\n .select('id')\n .single();\n\n const learningPathId = lpData?.id;\n\n // 2. Upsert Lesson / Milestone Records\n let syncedMilestonesCount = 0;\n for (const [index, m] of options.milestones.entries()) {\n const { error: lessonError } = await supabase.from('lessons').upsert(\n {\n code: `L-${options.jobId}-${m.milestoneId}`,\n title: m.milestoneName,\n order_index: index + 1,\n learning_path_id: learningPathId,\n metadata: {\n milestoneId: m.milestoneId,\n lessonSlug: m.lessonSlug,\n summary: m.summary,\n },\n },\n { onConflict: 'code' }\n );\n\n if (!lessonError) {\n syncedMilestonesCount++;\n }\n }\n\n return {\n success: true,\n learningPathId,\n syncedMilestonesCount,\n uploadedAssetsCount: 0,\n };\n } catch (error: any) {\n return {\n success: false,\n syncedMilestonesCount: 0,\n uploadedAssetsCount: 0,\n error: error.message || String(error),\n };\n }\n}\n\n/**\n * Uploads a binary asset (MP3, SCORM zip, PNG) to Supabase Storage Bucket\n */\nexport async function uploadAssetToBucket(\n filePath: string,\n storagePath: string,\n options?: { supabaseUrl?: string; supabaseServiceKey?: string; bucketName?: string }\n): Promise<{ success: boolean; publicUrl?: string; error?: string }> {\n const supabaseUrl = options?.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;\n const serviceKey = options?.supabaseServiceKey || process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;\n\n if (!supabaseUrl || !serviceKey) {\n return { success: false, error: 'Missing Supabase credentials' };\n }\n\n const supabase = createClient(supabaseUrl, serviceKey);\n const bucketName = options?.bucketName || 'course-materials';\n\n try {\n const fileBuffer = await fs.readFile(filePath);\n const { error: uploadError } = await supabase.storage\n .from(bucketName)\n .upload(storagePath, fileBuffer, { upsert: true });\n\n if (uploadError) {\n return { success: false, error: uploadError.message };\n }\n\n const { data } = supabase.storage.from(bucketName).getPublicUrl(storagePath);\n return { success: true, publicUrl: data.publicUrl };\n } catch (error: any) {\n return { success: false, error: error.message || String(error) };\n }\n}\n","import {\n serializeLessonToMarkdown,\n serializeActivityToMarkdown,\n serializeCodeLabToMarkdown,\n serializeHandoutToMarkdown,\n} from '../../pipeline/markdownSerializers';\nimport {\n serializeSelfLabToMarkdown,\n serializeDiagnosticQuizToMarkdown,\n} from '../../pipeline/selfPacedSerializers';\nimport { LocalWorkspaceManager } from '../../publishers/localWorkspaceManager';\nimport { publishToGitHub, type GitPublishOptions, type GitPublishResult } from '../../publishers/gitPublisher';\nimport { publishToSupabase, type SupabasePublishOptions, type SupabasePublishResult } from '../../publishers/supabasePublisher';\nimport type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n} from '../../schemas';\n\nexport interface SaveMilestoneArtifactsInput {\n jobId: string;\n milestoneSlug: string;\n lesson: LessonPlan;\n activity?: ActivityLab;\n codeLab?: CodeLab;\n selfLab?: SelfLab;\n quiz?: DiagnosticQuiz;\n slides?: SlideDeck;\n handout?: Handout;\n worksheet?: Worksheet;\n teacherGuide?: TeacherGuide;\n extension?: Extension;\n cheatSheetMarkdown?: string;\n baseWorkspaceDir?: string;\n}\n\nexport interface SavedMilestoneResult {\n milestoneSlug: string;\n savedFiles: string[];\n}\n\nexport async function saveMilestoneToWorkspaceStep(input: SaveMilestoneArtifactsInput): Promise<SavedMilestoneResult> {\n 'use step';\n const manager = new LocalWorkspaceManager(input.baseWorkspaceDir);\n const savedFiles: string[] = [];\n\n // 1. LESSON_5E.md\n const lessonMd = serializeLessonToMarkdown(input.lesson);\n const p1 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'LESSON_5E.md', lessonMd, 'LESSON');\n savedFiles.push(p1);\n\n // 2. ACT.md\n if (input.activity) {\n const actMd = serializeActivityToMarkdown(input.activity);\n const p2 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'ACT.md', actMd, 'ACT');\n savedFiles.push(p2);\n }\n\n // 3. LAB.md\n if (input.codeLab) {\n const labContent = serializeCodeLabToMarkdown(input.codeLab);\n const p3 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'LAB.md', labContent, 'LAB');\n savedFiles.push(p3);\n }\n\n // 4. SELF_LAB.md (with Progressive Hints)\n if (input.selfLab) {\n const selfLabMd = serializeSelfLabToMarkdown(input.selfLab);\n const p4 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'SELF_LAB.md', selfLabMd, 'SELF_LAB');\n savedFiles.push(p4);\n }\n\n // 5. QUIZ.json & QUIZ.md\n if (input.quiz) {\n const quizMd = serializeDiagnosticQuizToMarkdown(input.quiz);\n const p5a = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'QUIZ.md', quizMd, 'QUIZ_MD');\n const p5b = await manager.saveArtifact(\n input.jobId,\n input.milestoneSlug,\n 'QUIZ.json',\n JSON.stringify(input.quiz, null, 2),\n 'QUIZ_JSON'\n );\n savedFiles.push(p5a, p5b);\n }\n\n // 6. SLIDE.md\n if (input.slides) {\n const slidesContent = `---\nmarp: true\ntheme: default\npaginate: true\n---\n\n# ${input.slides.title}\n\n---\n\n${input.slides.slides.map((s) => `## Slide ${s.slideNumber}: ${s.title}\\n\\n${s.bulletPoints.map((b) => `- ${b}`).join('\\n')}${s.codeSnippet ? `\\n\\n\\`\\`\\`\\n${s.codeSnippet}\\n\\`\\`\\`` : ''}\\n\\n<!-- Presenter Notes: ${s.presenterNotes || ''} -->`).join('\\n\\n---\\n\\n')}\n`.trim();\n const p6 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'SLIDE.md', slidesContent, 'SLIDES');\n savedFiles.push(p6);\n }\n\n // 7. HANDOUT.md\n if (input.handout) {\n const handoutMd = serializeHandoutToMarkdown(input.handout);\n const p7 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'HANDOUT.md', handoutMd, 'HANDOUT');\n savedFiles.push(p7);\n }\n\n // 8. CHEAT_SHEET.md\n if (input.cheatSheetMarkdown) {\n const p8 = await manager.saveArtifact(\n input.jobId,\n input.milestoneSlug,\n 'CHEAT_SHEET.md',\n input.cheatSheetMarkdown,\n 'CHEAT_SHEET'\n );\n savedFiles.push(p8);\n }\n\n await manager.markMilestoneCompleted(input.jobId);\n\n return {\n milestoneSlug: input.milestoneSlug,\n savedFiles,\n };\n}\n\nexport async function publishToGitStep(options: GitPublishOptions): Promise<GitPublishResult> {\n 'use step';\n return publishToGitHub(options);\n}\n\nexport async function publishToSupabaseStep(options: SupabasePublishOptions): Promise<SupabasePublishResult> {\n 'use step';\n return publishToSupabase(options);\n}\n","/**\n * Gate Settings โ toร n bแป logic \"ai kiแปm artifact nร o\" nแบฑm แป ฤรขy, trong kit.\n * Composer chแป gแปi: resolveGateSettings(projectConfig.gateModes) rแปi dรนng kแบฟt quแบฃ.\n *\n * Vocabulary chuแบฉn (duy nhแบฅt, khรดng cรณ biแบฟn thแป thแปฉ hai):\n * 'OFF' โ khรดng kiแปm\n * 'LLM_JUDGE' โ Agent kiแปm (LLM-as-Judge)\n * 'HITL' โ Human kiแปm (human-in-the-loop)\n *\n * Phแบกm vi phแปง: SOT foundation (Learner Profile, Framework, Style Guide โ duyแปt trฦฐแปc khi\n * sinh content) + toร n bแป content artifacts.\n */\n\nexport type CurriculumGateMode = 'OFF' | 'LLM_JUDGE' | 'HITL';\n\nexport type CurriculumArtifactType =\n // SOT foundation gates (duyแปt nแปn trฦฐแปc khi sinh content) โ khแปp SOT_EXECUTION_ORDER cแปงa Composer\n | 'LEARNER_PROFILE'\n | 'PROJECT_BRIEF'\n | 'REFERENCE_PACK'\n | 'CURRICULUM_FRAMEWORK'\n | 'KNOWLEDGE_EXPOSITION'\n | 'STYLE_GUIDE'\n | 'ART_DIRECTION'\n // content artifacts โ khแปp ARTIFACT_EXECUTION_ORDER cแปงa Composer\n | 'LESSON'\n | 'ACT'\n | 'QUIZ'\n | 'SLIDE'\n | 'GUIDE'\n | 'WKS'\n | 'HANDOUT'\n | 'EXT'\n | 'CODE'\n | 'MEDIA_SCRIPT'\n | 'EXIT_TICKET';\n\nexport type GateSettings = Partial<Record<CurriculumArtifactType, CurriculumGateMode>>;\n\nexport type ResolvedGateSettings = Readonly<Record<CurriculumArtifactType, CurriculumGateMode>>;\n\n/** Mแบทc ฤแปnh trรนng hร nh vi production hiแปn tแบกi: SOT nแปn = HITL, LESSON/CODE = Agent kiแปm, cรฒn lแบกi OFF. */\nexport const DEFAULT_GATE_SETTINGS: ResolvedGateSettings = Object.freeze({\n LEARNER_PROFILE: 'HITL',\n PROJECT_BRIEF: 'HITL',\n REFERENCE_PACK: 'HITL',\n CURRICULUM_FRAMEWORK: 'HITL',\n KNOWLEDGE_EXPOSITION: 'LLM_JUDGE',\n STYLE_GUIDE: 'HITL',\n ART_DIRECTION: 'HITL',\n LESSON: 'LLM_JUDGE',\n ACT: 'OFF',\n QUIZ: 'OFF',\n SLIDE: 'OFF',\n GUIDE: 'OFF',\n WKS: 'OFF',\n HANDOUT: 'OFF',\n EXT: 'OFF',\n CODE: 'LLM_JUDGE',\n MEDIA_SCRIPT: 'OFF',\n EXIT_TICKET: 'OFF',\n});\n\nconst ALL_TYPES = Object.keys(DEFAULT_GATE_SETTINGS) as CurriculumArtifactType[];\n\nconst MODE_ALIASES: Record<string, CurriculumGateMode> = {\n off: 'OFF',\n none: 'OFF',\n llm_judge: 'LLM_JUDGE',\n judge: 'LLM_JUDGE',\n hitl: 'HITL',\n human: 'HITL',\n};\n\nconst TYPE_ALIASES: Record<string, CurriculumArtifactType> = {\n code_lab: 'CODE',\n gate1: 'LEARNER_PROFILE',\n gate2: 'CURRICULUM_FRAMEWORK',\n style_guide: 'STYLE_GUIDE',\n content_style_guide: 'STYLE_GUIDE',\n learner_profile: 'LEARNER_PROFILE',\n project_brief: 'PROJECT_BRIEF',\n reference_pack: 'REFERENCE_PACK',\n curriculum_framework: 'CURRICULUM_FRAMEWORK',\n art_direction: 'ART_DIRECTION',\n media_script: 'MEDIA_SCRIPT',\n exit_ticket: 'EXIT_TICKET',\n};\n\nfunction canonType(key: string): CurriculumArtifactType | undefined {\n const k = key.trim().toLowerCase();\n const t = TYPE_ALIASES[k] ?? (k.toUpperCase() as CurriculumArtifactType);\n return ALL_TYPES.includes(t) ? t : undefined;\n}\n\nfunction canonMode(value: unknown): CurriculumGateMode | undefined {\n if (typeof value !== 'string') return undefined;\n return MODE_ALIASES[value.trim().toLowerCase()];\n}\n\n/**\n * Chuแบฉn hoรก config thรด (vd: gateModes ฤแปc tแปซ project.config.json cแปงa Composer) thร nh GateSettings.\n * Key/value khรดng nhแบญn diแปn ฤฦฐแปฃc bแป bแป qua โ config sai khรดng bao giแป lร m workflow chแบฟt.\n */\nexport function parseGateSettings(raw: unknown): GateSettings {\n const out: GateSettings = {};\n if (!raw || typeof raw !== 'object') return out;\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n const t = canonType(key);\n const m = canonMode(value);\n if (t && m) out[t] = m;\n }\n return out;\n}\n\n/**\n * ฤiแปm vร o DUY NHแบคT: raw config (hoแบทc ฤรฃ chuแบฉn hoรก) โ settings ฤแบงy ฤแปง cho mแปi artifact type.\n * Key khรดng cรณ trong config nhแบญn DEFAULT_GATE_SETTINGS.\n */\nexport function resolveGateSettings(raw?: unknown): ResolvedGateSettings {\n const parsed = parseGateSettings(raw);\n const resolved = {} as Record<CurriculumArtifactType, CurriculumGateMode>;\n for (const t of ALL_TYPES) resolved[t] = parsed[t] ?? DEFAULT_GATE_SETTINGS[t];\n return resolved;\n}\n\n/** Mode ฤรฃ resolve cho 1 artifact type. */\nexport function gateModeFor(resolved: ResolvedGateSettings, type: CurriculumArtifactType): CurriculumGateMode {\n return resolved[type] ?? 'OFF';\n}\n","import * as workflowPkg from 'workflow';\nimport { z } from 'zod';\n\nexport const approvalPayloadSchema = z.object({\n approved: z.boolean().describe('Whether the human reviewer approves the generated curriculum/lesson'),\n reviewerName: z.string().optional().describe('Name or ID of the reviewer'),\n feedback: z.string().optional().describe('Actionable feedback or required changes if rejected'),\n timestamp: z.string().optional().describe('ISO timestamp of the approval action'),\n});\n\nexport type ApprovalPayload = z.infer<typeof approvalPayloadSchema>;\n\nconst hookFactory = (workflowPkg as any).defineHook || (workflowPkg as any).createHook || ((opts: any) => opts);\n\n/**\n * Durable Hook for Human-in-the-Loop curriculum approval gates.\n * Pauses workflow with zero compute cost until an authorized user approves via UI/API.\n */\nexport const lessonApprovalHook = hookFactory({\n schema: approvalPayloadSchema,\n});\n","import { z } from 'zod';\n\n/**\n * Framework Pack Schema v1.0 โ Standards Registry interchange contract.\n *\n * A Framework Pack is a self-contained, schema-validated data bundle describing\n * ONE educational standard/framework (CSTA K-12, NGSS, GDPT 2018, an org's\n * internal standard, ...) in the lowest common denominator that virtually every\n * framework can map onto: a flat list of atomized statements + optional\n * classifications + optional mappings to the Ontora knowledge tree.\n *\n * Design invariants (see docs/ideas/2026-08-29-standards-registry-framework-pack.md):\n * - I1 Pack is DATA, never code. Importing a pack NEVER mutates the Ontora\n * Master Tree โ mappings are reference bridges, resolved (not written).\n * - I2 Canonical statement text (verbatim) is immutable ground truth. Derived\n * fields (translations, keywords, bloom hints) carry their own provenance.\n * - I3 IDs are stable forever: keep the official source ID when present, else\n * mint once from content identity (never from row position).\n * - I4 gradeBand is canonical numeric (gradeModel normalizes grades/ages/bands).\n * - I5 Mappings use namespaced targets (ontora:CODE, csta:1B-AP-10, ...) and are\n * OPTIONAL โ a pack with zero mappings still works (statement-only mode).\n * - I6 Everything is versioned: specVersion (this contract) vs contentVersion\n * (the framework's own content). Published content versions are immutable.\n */\n\n// โโโ Shared primitives โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/** Two-axis Bloom hint (Anderson & Krathwohl). Matches Ontora's dual-axis usage. */\nexport const BloomHintSchema = z.object({\n process: z\n .enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create'])\n .describe('Cognitive process axis'),\n knowledge: z\n .enum(['FACTUAL', 'CONCEPTUAL', 'PROCEDURAL', 'METACOGNITIVE'])\n .optional()\n .describe('Knowledge dimension axis (optional โ most source standards do not tag it)'),\n});\n\n/** How a record entered the pack โ drives trust & review requirements. */\nexport const RecordProvenanceSchema = z.object({\n method: z\n .enum(['source_official', 'ai_draft', 'minted_from_content', 'human', 'crosswalk', 'imported'])\n .describe('source_official = copied from an authoritative machine-readable source; ai_draft = LLM-extracted, REQUIRES human review before activation; minted_from_content = ID synthesized because source has none; crosswalk = derived by the curriculum-crosswalk skill'),\n reviewedBy: z.string().optional().describe('Person/agent that approved this record (required for ai_draft records before activation)'),\n reviewedAt: z.string().optional().describe('ISO-8601 timestamp of review'),\n note: z.string().optional().describe('Free-form provenance note'),\n});\n\n/** Numeric grade band, canonical. [6, 6] = single grade 6; [6, 8] = band. */\nexport const GradeBandSchema = z\n .array(z.number().int().min(-1).max(30), { message: 'gradeBand must be [minGrade, maxGrade] integers' })\n .length(2)\n .refine(([min, max]) => min <= max, { message: 'gradeBand min must be <= max' })\n .describe('Canonical numeric grade band. -1 = kindergarten/pre-primary. Framework-specific models (VN grades, US bands, ages) normalize into this scale via manifest.gradeModel');\n\n/** Optional free-form classification axes (strand, NGSS dimension, \"Chแปง ฤแป\", ...). */\nexport const ClassificationSchema = z.object({\n axis: z.string().describe('Axis label, e.g. \"strand\", \"dimension\", \"Chแปง ฤแป\"'),\n value: z.string().describe('Value on that axis, e.g. \"AP\", \"Disciplinary Core Idea\", \"Thuแบญt toรกn\"'),\n});\n\n// โโโ Manifest โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const FrameworkPackManifestSchema = z.object({\n /** Immutable pack identifier. Never reused, never renamed. */\n id: z\n .string()\n .min(3)\n .regex(/^[a-z0-9][a-z0-9._-]*$/, 'pack id must be kebab/lowercase-safe (a-z 0-9 . _ -)')\n .describe('Immutable pack identifier, e.g. \"csta-k12-2017\", \"gdpt-2018-tin-hoc\", \"abc-tin-hoc\"'),\n name: z.string().min(1).describe('Human-readable framework name'),\n specVersion: z.literal('1.0').describe('Version of THIS pack contract (not the content)'),\n contentVersion: z\n .string()\n .min(1)\n .describe('Content version of the framework inside this pack. Bump on any content change; published versions are immutable'),\n subject: z.string().describe('Primary subject domain, e.g. \"computing\", \"science\", \"mathematics\"'),\n languages: z.array(z.string().min(2)).min(1).describe('BCP-47 language codes present in statement texts, e.g. [\"vi\"], [\"en\",\"vi\"]'),\n gradeModel: z.object({\n type: z.enum(['grades', 'ages', 'bands']).describe('grades = school grades (canonical numbers); ages = years old; bands = named developmental bands'),\n range: GradeBandSchema.describe('Overall grade range covered by the framework'),\n /** Optional normalization table when type != \"grades\" (e.g. band \"6-8\" -> [6,8]). */\n normalization: z\n .array(\n z.object({\n from: z.string().describe('Source label, e.g. \"level 6-8\" or \"11-13 years\"'),\n to: GradeBandSchema,\n })\n )\n .optional()\n .describe('Explicit label -> numeric band conversion table. Required when type != \"grades\"'),\n }),\n provenance: z.object({\n sourceRef: z.string().describe('Citation of the official source, e.g. \"Thรดng tฦฐ 32/2018/TT-BGDฤT\" or a URL'),\n sourceUrl: z.string().optional().describe('Canonical URL of the source document or live registry'),\n license: z.string().describe('License / usage rights of the source text'),\n importedBy: z.string().describe('Who produced this pack, e.g. \"platform\" or \"org:abc\"'),\n importedAt: z.string().describe('ISO-8601 timestamp'),\n originalFileHash: z.string().optional().describe('SHA-256 of the original uploaded file, for source provenance'),\n }),\n trust: z.enum(['verified', 'org']).default('org').describe('verified = platform-curated; org = self-served by an org. Generation accepts both; compliance reporting counts verified only'),\n});\n\n// โโโ Statement โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const FrameworkStatementSchema = z.object({\n /** Canonical, forever-stable statement ID (see invariant I3). */\n id: z\n .string()\n .min(2)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/, 'statement id must not contain whitespace or separators beyond . _ : -')\n .describe('Statement ID. Official source ID when present (e.g. \"1B-AP-10\"); otherwise minted once from content identity. Namespaced at query time by the pack id, never stored with prefix duplication'),\n /** Optional hierarchical parent within the SAME pack (GDPT competence โ requirement, CSTA strand โ statement, ...). */\n parentId: z.string().optional().describe('Parent statement id within this pack, when the source framework is hierarchical'),\n gradeBand: GradeBandSchema,\n /** Verbatim canonical text per language. The FIRST / primary language text is judge ground truth (invariant I2). */\n texts: z\n .record(z.string().min(2), z.string().min(1))\n .refine((t) => Object.keys(t).length > 0, { message: 'texts must contain at least one language entry' })\n .describe('Verbatim statement text per BCP-47 language key, e.g. {\"vi\": \"Yรชu cแบงu cแบงn ฤแบกt...\"}. NEVER paraphrase into these fields'),\n classifications: z.array(ClassificationSchema).optional().default([]).describe('Optional taxonomy axes from the source framework (strands, dimensions, themes...)'),\n bloomHint: BloomHintSchema.optional().describe('Optional Bloom dual-axis hint โ a HINT for generation, never a binding claim about the source'),\n keywords: z.array(z.string()).optional().default([]).describe('Retrieval keywords (topic terms). Used by standards retrieval AND by crosswalk theme matching โ keep them dense'),\n sourceRef: z.string().optional().describe('Precise citation within the source, e.g. \"Trang 24, Mรดn Tin hแปc lแปp 6\"'),\n provenance: RecordProvenanceSchema,\n});\n\n// โโโ Mapping bridge (pack โ Ontora interlingua) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const MappingKindSchema = z.enum(['covers', 'partial', 'extends']).describe('covers = the statement is fully taught when the concept is covered (ONLY \"covers\" counts toward compliance coverage); partial = overlaps partially; extends = statement goes beyond the concept');\n\nexport const FrameworkMappingSchema = z.object({\n statementId: z.string().describe('Must reference a statement id in this pack'),\n /** Namespaced target. Grammar: <namespace>:<ID>. e.g. \"ontora:WHILE_LOOP\", \"ontora:PROBLEM_DECOMPOSITION\". Resolved against the target registry at intake โ unknown targets FAIL validation. */\n targetRef: z.string().refine((v) => /^[a-z][a-z0-9]*:[A-Za-z0-9][A-Za-z0-9._-]*$/.test(v), 'targetRef must be \"<namespace>:<ID>\", e.g. \"ontora:FOR_LOOP\"'),\n kind: MappingKindSchema,\n confidence: z.number().min(0).max(1).describe('0-1 confidence of this mapping'),\n provenance: RecordProvenanceSchema,\n});\n\n// โโโ Root โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const FrameworkPackSchema = z.object({\n manifest: FrameworkPackManifestSchema,\n statements: z.array(FrameworkStatementSchema).min(1).describe('Atomized statements of the framework'),\n mappings: z.array(FrameworkMappingSchema).optional().default([]).describe('Optional bridges to the Ontora knowledge tree (statement-only packs are fully functional)'),\n});\n\nexport type FrameworkPack = z.infer<typeof FrameworkPackSchema>;\nexport type FrameworkPackManifest = z.infer<typeof FrameworkPackManifestSchema>;\nexport type FrameworkStatement = z.infer<typeof FrameworkStatementSchema>;\nexport type FrameworkMapping = z.infer<typeof FrameworkMappingSchema>;\nexport type MappingKind = z.infer<typeof MappingKindSchema>;\nexport type RecordProvenance = z.infer<typeof RecordProvenanceSchema>;\n\n// โโโ Pack lint (beyond field-level Zod checks) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport interface PackLintIssue {\n severity: 'ERROR' | 'WARNING';\n code: string;\n message: string;\n /** statement id or manifest path the issue refers to */\n ref?: string;\n}\n\n/** Minimum token-overlap ratio for the fuzzy duplicate warning. */\nconst DUP_OVERLAP_RATIO = 0.8;\n\n/**\n * Deterministic structural lint over an already schema-valid pack.\n * Pure function: no I/O, no LLM. Mirrors the ontora validator philosophy โ\n * assembly/validation is code, research/judgment is model.\n */\nexport function lintFrameworkPack(pack: FrameworkPack): PackLintIssue[] {\n const issues: PackLintIssue[] = [];\n const statements = pack.statements;\n const ids = new Set<string>();\n\n for (const s of statements) {\n // L1 duplicate ids\n if (ids.has(s.id)) {\n issues.push({ severity: 'ERROR', code: 'DUP_ID', message: `Duplicate statement id \"${s.id}\"`, ref: s.id });\n }\n ids.add(s.id);\n }\n\n for (const s of statements) {\n // L2 parent existence\n if (s.parentId && !ids.has(s.parentId)) {\n issues.push({ severity: 'ERROR', code: 'PARENT_MISSING', message: `parentId \"${s.parentId}\" does not exist in this pack`, ref: s.id });\n }\n // L3 empty-ish text\n for (const [lang, text] of Object.entries(s.texts)) {\n if (!text || text.trim().length < 8) {\n issues.push({ severity: 'ERROR', code: 'TEXT_TOO_SHORT', message: `\"${lang}\" text is empty or shorter than 8 characters`, ref: s.id });\n }\n }\n // L4 grade band sanity: empty band inside manifest range is fine, but warn outside manifest range\n const [min, max] = s.gradeBand;\n const [gMin, gMax] = pack.manifest.gradeModel.range;\n if (min < gMin || max > gMax) {\n issues.push({ severity: 'WARNING', code: 'BAND_OUT_OF_RANGE', message: `gradeBand [${min},${max}] falls outside manifest range [${gMin},${gMax}]`, ref: s.id });\n }\n // L5 ai_draft without reviewer\n if (s.provenance.method === 'ai_draft' && !s.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: 'ai_draft record has no reviewedBy โ human review required before activation', ref: s.id });\n }\n // L6 keywords recommended\n if (!s.keywords || s.keywords.length === 0) {\n issues.push({ severity: 'WARNING', code: 'NO_KEYWORDS', message: 'No keywords โ statement will be hard to retrieve and to crosswalk', ref: s.id });\n }\n }\n\n // L7 fuzzy duplicate texts (same language)\n const seen = new Map<string, string>();\n for (const s of statements) {\n const primaryLang = pack.manifest.languages[0];\n const text = s.texts[primaryLang];\n if (!text) continue;\n const norm = text.toLowerCase().replace(/[^\\p{L}\\p{N}\\s]/gu, ' ').split(/\\s+/).filter((w) => w.length > 2).sort().join(' ');\n if (!norm) continue;\n const prev = seen.get(norm);\n if (prev !== undefined) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_EXACT', message: `Text is token-identical to statement \"${prev}\"`, ref: s.id });\n } else {\n // token-overlap fuzzy pass (O(n^2) avoided via sorted-token key bucketing)\n for (const [otherNorm, otherId] of seen.entries()) {\n const a = new Set(norm.split(' '));\n const b = new Set(otherNorm.split(' '));\n let inter = 0;\n for (const w of a) if (b.has(w)) inter++;\n const ratio = inter / Math.max(a.size, b.size);\n if (ratio >= DUP_OVERLAP_RATIO) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_FUZZY', message: `Text ~${Math.round(ratio * 100)}% overlapping with statement \"${otherId}\"`, ref: s.id });\n break;\n }\n }\n seen.set(norm, s.id);\n }\n }\n\n // L8 mapping integrity\n for (const m of pack.mappings ?? []) {\n if (!ids.has(m.statementId)) {\n issues.push({ severity: 'ERROR', code: 'MAP_STATEMENT_MISSING', message: `mapping references unknown statementId \"${m.statementId}\"`, ref: m.statementId });\n }\n if (m.provenance.method === 'ai_draft' && !m.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: `mapping to ${m.targetRef} is ai_draft without reviewedBy`, ref: m.statementId });\n }\n if (m.kind === 'covers' && m.confidence < 0.5) {\n issues.push({ severity: 'WARNING', code: 'COVERS_LOW_CONFIDENCE', message: `kind=\"covers\" with confidence ${m.confidence} < 0.5 โ consider \"partial\"`, ref: m.statementId });\n }\n }\n\n return issues;\n}\n\nexport interface PackValidationResult {\n valid: boolean;\n schemaErrors: string[];\n lint: PackLintIssue[];\n stats: {\n statements: number;\n mappings: number;\n coveredStatements: number;\n statementOnlyStatements: number;\n gradeRange: [number, number];\n };\n}\n\n/**\n * Full validation: Zod schema โ deterministic lint.\n * Does NOT resolve ontora targets (network/DB concern, layered separately).\n */\nexport function validateFrameworkPack(input: unknown): PackValidationResult {\n const parsed = FrameworkPackSchema.safeParse(input);\n if (!parsed.success) {\n return {\n valid: false,\n schemaErrors: parsed.error.issues.map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`),\n lint: [],\n stats: { statements: 0, mappings: 0, coveredStatements: 0, statementOnlyStatements: 0, gradeRange: [0, 0] },\n };\n }\n const pack = parsed.data;\n const lint = lintFrameworkPack(pack);\n const covered = new Set((pack.mappings ?? []).map((m) => m.statementId));\n const bands = pack.statements.map((s) => s.gradeBand);\n return {\n valid: lint.every((i) => i.severity !== 'ERROR'),\n schemaErrors: [],\n lint,\n stats: {\n statements: pack.statements.length,\n mappings: pack.mappings?.length ?? 0,\n coveredStatements: covered.size,\n statementOnlyStatements: pack.statements.length - covered.size,\n gradeRange: [Math.min(...bands.flat()), Math.max(...bands.flat())],\n },\n };\n}\n","import type { FrameworkPack, FrameworkStatement } from './frameworkPackSchema';\n\n/**\n * Standards Context Injector โ Grounding layer (tแบงng 1 cแปงa cฦก chแบฟ bรกm chuแบฉn).\n *\n * Selects the standard statements RELEVANT to a lesson (by grade band overlap +\n * keyword/concept match) and renders them as a prompt context block containing\n * VERBATIM canonical text. The model must SEE the real standard text โ prompt\n * labels like \"operating under CSTA\" are exactly the anti-pattern this replaces.\n *\n * Pure function: pack data in, markdown block out. No I/O, no LLM.\n */\n\nexport interface StandardsSelectionInput {\n /** Packs adopted by the org / course (already validated + activated). */\n packs: FrameworkPack[];\n /** Lesson grade level or band, canonical numeric (single grade or [min,max]). */\n gradeBand: [number, number] | number;\n /** Lesson topic text: title + concept names + keywords. Matched against statement keywords + texts. */\n topicText: string;\n /** Optional explicit ontora concept codes for the lesson (concept_code from MilestoneInput). */\n conceptCodes?: string[];\n /** Hard cap on injected statements to protect the context budget. */\n maxStatements?: number;\n}\n\nexport interface SelectedStatement {\n packId: string;\n statement: FrameworkStatement;\n score: number;\n matchedBy: Array<'band' | 'keyword' | 'concept' | 'text'>;\n}\n\nconst DEFAULT_MAX_STATEMENTS = 20;\n\nfunction normalizeBand(band: [number, number] | number): [number, number] {\n return Array.isArray(band) ? band : [band, band];\n}\n\nfunction tokenize(text: string): Set<string> {\n return new Set(\n text\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}\\s]/gu, ' ')\n .split(/\\s+/)\n .filter((w) => w.length > 2)\n );\n}\n\n/**\n * Rank + select statements for a lesson.\n * Scoring: band overlap is a GATE (statements outside the grade are dropped),\n * keyword/concept/text overlap is the ranking signal.\n */\nexport function selectStatementsForLesson(input: StandardsSelectionInput): SelectedStatement[] {\n const max = input.maxStatements ?? DEFAULT_MAX_STATEMENTS;\n const lessonBand = normalizeBand(input.gradeBand);\n const lessonTokens = tokenize(input.topicText);\n const conceptSet = new Set((input.conceptCodes ?? []).map((c) => c.toUpperCase().trim()).filter(Boolean));\n\n const candidates: SelectedStatement[] = [];\n\n for (const pack of input.packs) {\n for (const statement of pack.statements) {\n // Band gate: must overlap the lesson band\n const [sMin, sMax] = statement.gradeBand;\n const overlaps = Math.max(sMin, lessonBand[0]) <= Math.min(sMax, lessonBand[1]);\n if (!overlaps) continue;\n\n const matchedBy: SelectedStatement['matchedBy'] = ['band'];\n let score = 1;\n\n // Keyword match (primary signal โ keywords are REQUIRED to be dense by pack lint)\n const kwTokens = new Set(statement.keywords.map((k) => k.toLowerCase()));\n let kwHits = 0;\n for (const t of lessonTokens) if (kwTokens.has(t)) kwHits++;\n if (kwHits > 0) {\n matchedBy.push('keyword');\n score += 2 + kwHits * 0.5;\n }\n\n // Concept code match (statement keyword equals an ontora concept code)\n if (conceptSet.size > 0) {\n for (const k of statement.keywords) {\n if (conceptSet.has(k.toUpperCase().replace(/\\s+/g, '_'))) {\n matchedBy.push('concept');\n score += 3;\n break;\n }\n }\n }\n\n // Raw text-token overlap (fallback signal)\n let textHits = 0;\n for (const lang of Object.keys(statement.texts)) {\n const st = tokenize(statement.texts[lang]);\n for (const t of lessonTokens) if (st.has(t)) textHits++;\n }\n if (textHits >= 2) {\n matchedBy.push('text');\n score += Math.min(2, textHits * 0.2);\n }\n\n if (score > 1) candidates.push({ packId: pack.manifest.id, statement, score, matchedBy });\n }\n }\n\n return candidates.sort((a, b) => b.score - a.score).slice(0, max);\n}\n\n/**\n * Render the STANDARDS CONTEXT prompt block (verbatim statements + binding rules).\n * Mirrors the shape of the proven CUMULATIVE CONTEXT block in lessonMasterPrompt.\n */\nexport function buildStandardsContextBlock(selected: SelectedStatement[], opts?: { language?: string }): string {\n if (selected.length === 0) return '';\n\n const lang = opts?.language;\n const rows = selected\n .map(({ packId, statement }) => {\n const text = (lang && statement.texts[lang]) || Object.values(statement.texts)[0];\n const band = statement.gradeBand[0] === statement.gradeBand[1] ? `L${statement.gradeBand[0]}` : `L${statement.gradeBand[0]}-L${statement.gradeBand[1]}`;\n return `- [${packId}:${statement.id} | ${band}] \"${text}\"`;\n })\n .join('\\n');\n\n return [\n '# STANDARDS CONTEXT (SOURCE OF TRUTH โ VERBATIM STATEMENTS)',\n '',\n 'The statements below are COPIED VERBATIM from official/framework standard documents adopted for this course.',\n 'They are BINDING targets, not suggestions:',\n '- Every Learning Objective you write MUST be anchored to one or more statement IDs above via standardRefs.',\n '- You MUST use ONLY statement IDs from this list. NEVER invent, paraphrase IDs, or cite standards not present here.',\n '- The statement TEXT is the required destination: activities and assessments must demonstrably lead a learner to it.',\n '- The statement is the DESTINATION, not a script: you may extend beyond it, but you may not skip or contradict it.',\n '',\n '## Statement list',\n rows,\n ].join('\\n');\n}\n\n/**\n * One-call convenience: packs + lesson info โ context block (empty string if nothing matches).\n */\nexport function buildStandardsContext(\n input: StandardsSelectionInput & { language?: string }\n): { block: string; selected: SelectedStatement[] } {\n const selected = selectStatementsForLesson(input);\n return { block: buildStandardsContextBlock(selected, { language: input.language }), selected };\n}\n","import type { FrameworkPack } from './frameworkPackSchema';\n\n/**\n * Standards Coverage Gate โ Verification layer (tแบงng 3 cแปงa cฦก chแบฟ bรกm chuแบฉn).\n *\n * Deterministic coverage matrix across the generation chain:\n * standard statement โ learning objective โ lesson activities โ quiz questions\n *\n * Philosophy: \"bรกm chuแบฉn\" must be enforced by CODE, not by prompt goodwill.\n * A statement mapped with kind=\"covers\" that has no LO / no activity / no\n * assessment = a compliance hole, reported with an actionable repair hint.\n *\n * Pure function over already-generated artifacts. No LLM, no I/O.\n */\n\nexport interface CoverageGateInput {\n packs: FrameworkPack[];\n /** Learning objectives as generated (code + optional standardRefs anchoring). */\n objectives: Array<{\n code: string;\n standardRefs?: string[];\n conceptRefs?: string[];\n }>;\n /** activitySequence rows of the lesson (lo codes link activities to LOs). Optional: omitted when no structured activity-LO linkage is available. */\n activities?: Array<{ seq?: number; lo: string[] }>;\n /** Quiz questions; each links to assessment objectives โ alignedLO. */\n quizQuestions: Array<{ alignedLO?: string; alignedAO?: string }>;\n /** Assessment objectives table (AO โ alignedLO). Questions may reference AOs only. */\n assessmentObjectives?: Array<{ aoCode: string; alignedLO: string }>;\n}\n\nexport interface StatementCoverageRow {\n packId: string;\n statementId: string;\n statementText: string;\n status: 'COVERED' | 'PARTIAL' | 'UNCOVERED' | 'UNMAPPED';\n objectives: string[];\n hasActivity: boolean;\n hasAssessment: boolean;\n issues: string[];\n}\n\nexport interface CoverageGateReport {\n verdict: 'PASS' | 'WARN' | 'FAIL';\n coveragePct: number;\n rows: StatementCoverageRow[];\n summary: string;\n rawMarkdownReport: string;\n}\n\n/** statementRef formats accepted in standardRefs: \"1B-AP-10\" or \"csta-k12-2017:1B-AP-10\". */\nfunction resolveStatementRef(ref: string, packs: FrameworkPack[]): { pack: FrameworkPack; statementId: string } | null {\n const [head, ...rest] = ref.split(':');\n const candidatePacks = rest.length > 0 ? packs.filter((p) => p.manifest.id === head) : packs;\n const statementId = rest.length > 0 ? rest.join(':') : ref;\n for (const p of candidatePacks) {\n if (p.statements.some((s) => s.id === statementId)) return { pack: p, statementId };\n }\n return null;\n}\n\nexport function evaluateStandardsCoverage(input: CoverageGateInput): CoverageGateReport {\n const rows: StatementCoverageRow[] = [];\n\n // AO โ LO resolution map\n const aoToLo = new Map<string, string>();\n for (const ao of input.assessmentObjectives ?? []) aoToLo.set(ao.aoCode, ao.alignedLO);\n\n // LO โ covered statements (explicit anchors)\n const loToRefs = new Map<string, Set<string>>();\n for (const lo of input.objectives) {\n loToRefs.set(lo.code, new Set(lo.standardRefs ?? []));\n }\n\n // LOs actually taught (activities) and assessed (quiz, via direct alignedLO or AO table)\n const taughtLOs = new Set<string>();\n for (const act of input.activities ?? []) for (const lo of act.lo) taughtLOs.add(lo);\n const assessedLOs = new Set<string>();\n for (const q of input.quizQuestions) {\n if (q.alignedLO) assessedLOs.add(q.alignedLO);\n if (q.alignedAO) {\n const lo = aoToLo.get(q.alignedAO);\n if (lo) assessedLOs.add(lo);\n }\n }\n\n for (const pack of input.packs) {\n const mappingByStatement = new Map<string, string>();\n for (const m of pack.mappings ?? []) {\n // first mapping wins for kind resolution; \"covers\" beats \"partial\" beats \"extends\"\n const prev = mappingByStatement.get(m.statementId);\n if (!prev || (prev !== 'covers' && m.kind === 'covers') || (prev === 'extends' && m.kind !== 'extends')) {\n mappingByStatement.set(m.statementId, m.kind);\n }\n }\n\n for (const statement of pack.statements) {\n const refFull = `${pack.manifest.id}:${statement.id}`;\n const issues: string[] = [];\n\n // Objectives anchored to this statement\n const los = input.objectives\n .filter((lo) => (lo.standardRefs ?? []).some((r) => r === statement.id || r === refFull))\n .map((lo) => lo.code);\n\n const kind = mappingByStatement.get(statement.id);\n const hasMapping = kind !== undefined;\n const isComplianceRelevant = kind === 'covers';\n\n const hasActivity = los.some((lo) => taughtLOs.has(lo));\n const hasAssessment = los.some((lo) => assessedLOs.has(lo));\n\n let status: StatementCoverageRow['status'];\n if (!hasMapping) status = 'UNMAPPED';\n else if (!isComplianceRelevant) status = 'PARTIAL';\n else if (los.length > 0 && hasActivity && hasAssessment) status = 'COVERED';\n else status = 'UNCOVERED';\n\n if (status === 'UNCOVERED') {\n if (los.length === 0) issues.push('No learning objective anchors this statement (missing standardRefs).');\n else {\n if (!hasActivity) issues.push(`Anchored LO(s) ${los.join(', ')} have no activity in lesson flow.`);\n if (!hasAssessment) issues.push(`Anchored LO(s) ${los.join(', ')} are not measured by any quiz question.`);\n }\n }\n\n rows.push({\n packId: pack.manifest.id,\n statementId: statement.id,\n statementText: Object.values(statement.texts)[0] ?? '',\n status,\n objectives: los,\n hasActivity,\n hasAssessment,\n issues,\n });\n }\n }\n\n // Unresolvable refs (typo / hallucinated IDs) โ reported as issues on no row\n for (const lo of input.objectives) {\n for (const r of lo.standardRefs ?? []) {\n if (!resolveStatementRef(r, input.packs)) {\n rows.push({\n packId: '(unresolved)',\n statementId: r,\n statementText: '',\n status: 'UNCOVERED',\n objectives: [lo.code],\n hasActivity: false,\n hasAssessment: false,\n issues: [`standardRef \"${r}\" does not exist in any adopted pack โ likely a hallucinated or stale ID`],\n });\n }\n }\n }\n\n const complianceRows = rows.filter((r) => r.status !== 'UNMAPPED' && r.status !== 'PARTIAL');\n const covered = complianceRows.filter((r) => r.status === 'COVERED').length;\n const coveragePct = complianceRows.length === 0 ? 100 : Math.round((covered / complianceRows.length) * 100);\n const unresolvedCount = rows.filter((r) => r.packId === '(unresolved)').length;\n\n const verdict: CoverageGateReport['verdict'] =\n unresolvedCount > 0 || coveragePct < 60 ? 'FAIL' : coveragePct < 100 ? 'WARN' : 'PASS';\n\n const lines: string[] = [\n '# Standards Coverage Report',\n '',\n `- Verdict: **${verdict}**`,\n `- Compliance coverage: **${coveragePct}%** (${covered}/${complianceRows.length} \"covers\" statements fully taught + assessed)`,\n `- Unresolved standardRefs: ${unresolvedCount}`,\n '',\n '| Pack | Statement | Status | LOs | Activity | Assessment |',\n '|---|---|---|---|---|---|',\n ...rows.map(\n (r) =>\n `|${r.packId}|${r.statementId}|${r.status}|${r.objectives.join(', ') || 'โ'}|${r.hasActivity ? 'โ' : 'โ'}|${r.hasAssessment ? 'โ' : 'โ'}|`\n ),\n ];\n const issueLines = rows.filter((r) => r.issues.length > 0).flatMap((r) => r.issues.map((i) => `- [${r.packId}:${r.statementId}] ${i}`));\n if (issueLines.length > 0) lines.push('', '## Issues', ...issueLines);\n\n return {\n verdict,\n coveragePct,\n rows,\n summary: `Standards coverage ${coveragePct}% โ verdict ${verdict}`,\n rawMarkdownReport: lines.join('\\n'),\n };\n}\n","{\n \"manifest\": {\n \"id\": \"csta-k12-2017\",\n \"name\": \"CSTA K-12 Computer Science Standards (2017)\",\n \"specVersion\": \"1.0\",\n \"contentVersion\": \"2017.1\",\n \"subject\": \"computing\",\n \"languages\": [\n \"en\"\n ],\n \"gradeModel\": {\n \"type\": \"grades\",\n \"range\": [\n 3,\n 12\n ]\n },\n \"provenance\": {\n \"sourceRef\": \"CSTA K-12 Computer Science Standards, Revised 2017 - csteachers.org\",\n \"sourceUrl\": \"https://www.csteachers.org/page/standards\",\n \"license\": \"CC BY-NC-SA 4.0 (cited verbatim for alignment use)\",\n \"importedBy\": \"platform\",\n \"importedAt\": \"2026-08-29T00:00:00.000Z\"\n },\n \"trust\": \"verified\"\n },\n \"statements\": [\n {\n \"id\": \"1B-AP-08\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Demonstrate that programs can be combined with other programs to create new solutions.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"combine\",\n \"programs\",\n \"composition\",\n \"reuse\",\n \"modules\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-10\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Create programs that include sequences, events, loops, and conditionals.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\",\n \"knowledge\": \"PROCEDURAL\"\n },\n \"keywords\": [\n \"sequence\",\n \"events\",\n \"loops\",\n \"conditionals\",\n \"control structures\",\n \"for\",\n \"while\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-11\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Decompose (break down) problems into smaller, manageable subproblems to facilitate the program development process.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Analyze\"\n },\n \"keywords\": [\n \"decomposition\",\n \"subproblems\",\n \"problem breakdown\",\n \"algorithm\",\n \"divide\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-12\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Modify, remix, or include portions of other programs in one's own work to develop something new or add more advanced features.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\"\n },\n \"keywords\": [\n \"remix\",\n \"modify\",\n \"iterate\",\n \"extend programs\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-15\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Test and debug (identify and fix errors) a program or algorithm to ensure it runs as intended.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Evaluate\"\n },\n \"keywords\": [\n \"test\",\n \"debug\",\n \"errors\",\n \"troubleshooting\",\n \"fix\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-IC-21\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Use public domain or creative commons media, and refrain from copying or using material created by others without permission.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Impacts of Computing\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"copyright\",\n \"creative commons\",\n \"public domain\",\n \"digital citizenship\",\n \"license\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Impacts of Computing\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n }\n ],\n \"mappings\": [\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:FOR_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:WHILE_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-11\",\n \"targetRef\": \"ontora:PROBLEM_DECOMPOSITION\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-08\",\n \"targetRef\": \"ontora:EVENT_BASED_PROGRAMMING\",\n \"kind\": \"partial\",\n \"confidence\": 0.7,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-15\",\n \"targetRef\": \"ontora:TROUBLESHOOTING_STEPS\",\n \"kind\": \"covers\",\n \"confidence\": 0.9,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n }\n ]\n}\n","import { FrameworkPackSchema, type FrameworkPack } from './frameworkPackSchema';\n\nimport csta2017 from './data/csta-k12-2017.json';\n\n/**\n * Bundled Standards Packs โ dแปฏ liแปu chuแบฉn kรจm sแบตn trong kit (user chแปn trong Composer\n * Project Settings โ Gates โ Standards Packs; Composer truyแปn standardsPackIds xuแปng).\n * Pack mแปi: thรชm file JSON validate theo FrameworkPackSchema vร o src/standards/data/ rแปi ฤฤng kรฝ aquรญ.\n */\nconst BUNDLED_PACK_RECORDS: Record<string, unknown> = {\n 'csta-k12-2017': csta2017,\n};\n\n/** Pack ids mร kit ฤรณng gรณi sแบตn (ฤแป UI settings hiแปn thแป ฤรบng danh sรกch khแบฃ dแปฅng). */\nexport const BUNDLED_STANDARDS_PACK_IDS: string[] = Object.keys(BUNDLED_PACK_RECORDS).sort();\n\nconst parsedPackCache = new Map<string, FrameworkPack>();\n\n/**\n * Resolve danh sรกch pack id โ FrameworkPack[] ฤรฃ validate. Id khรดng biแบฟt ฤฦฐแปฃc bแป qua (log warn),\n * config sai khรดng bao giแป lร m pipeline chแบฟt.\n */\nexport function resolveStandardsPacks(packIds: string[] | undefined | null): FrameworkPack[] {\n if (!packIds || packIds.length === 0) return [];\n const packs: FrameworkPack[] = [];\n for (const id of packIds) {\n if (parsedPackCache.has(id)) {\n packs.push(parsedPackCache.get(id) as FrameworkPack);\n continue;\n }\n const raw = BUNDLED_PACK_RECORDS[id];\n if (!raw) {\n console.warn(`[standards] pack '${id}' khรดng tแปn tแบกi trong kit โ bแป qua.`);\n continue;\n }\n const parsed = FrameworkPackSchema.safeParse(raw);\n if (!parsed.success) {\n console.warn(`[standards] pack '${id}' fail schema โ bแป qua:`, parsed.error.issues[0]?.message);\n continue;\n }\n parsedPackCache.set(id, parsed.data);\n packs.push(parsed.data);\n }\n return packs;\n}","import {\n generateMasterLessonStep,\n judgeMasterLessonStep,\n repairMasterLessonStep,\n generateActivityStep,\n judgeSatelliteStep,\n generateCodeLabStep,\n generateSelfLabStep,\n generateDiagnosticQuizStep,\n generateSlidesStep,\n generateHandoutStep,\n generateWorksheetStep,\n generateTeacherGuideStep,\n generateExtensionStep,\n saveMilestoneToWorkspaceStep,\n type SavedMilestoneResult,\n} from '../steps';\nimport type {\n MilestoneInput,\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n CurriculumQualityReport,\n} from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\nimport { buildStandardsContext, evaluateStandardsCoverage } from '../../standards';\nimport { resolveGateSettings, gateModeFor } from '../gateSettings';\n\nexport interface MilestoneWorkflowInput {\n jobId: string;\n milestone: MilestoneInput;\n language?: string;\n topic?: string;\n targetAudience?: string;\n techStack?: string[];\n bundleTier?: 'minimum' | 'full';\n baseWorkspaceDir?: string;\n modelOptions?: ModelResolutionOptions;\n /** Adopted Framework Packs (hydrated from the Standards Registry) for standards-grounded generation. */\n standardsPacks?: import('../../standards').FrameworkPack[];\n /** Hard-block the milestone when standards coverage FAILs (default: true when packs provided). */\n enforceStandardsCoverage?: boolean;\n /** Gate Settings thรด (vd: gateModes tแปซ project.config.json) โ kit tแปฑ chuแบฉn hoรก. */\n gateSettings?: unknown;\n}\n\nexport interface MilestoneWorkflowResult {\n milestoneId: string;\n milestoneSlug: string;\n status: 'SUCCESS' | 'FAILED';\n savedResult: SavedMilestoneResult;\n judgeReport?: CurriculumQualityReport;\n /** Per-artifact-type judge reports for satellites (Gate mode LLM_JUDGE only). */\n satelliteJudgeReports?: Record<string, CurriculumQualityReport>;\n /** The resolved gate settings actually applied in this run (for traceability). */\n gatesResolved?: Record<string, string>;\n /** Set when a Gate (e.g. HITL rejection) BLOCKED downstream production. */\n gateBlocked?: { artifactType: string; reason: 'HITL_REJECTED' | 'HITL_REJECTED_V2'; feedback?: string };\n standardsCoverage?: import('../../standards').CoverageGateReport;\n artifacts: {\n lesson: LessonPlan;\n activity?: ActivityLab;\n codeLab?: CodeLab;\n selfLab?: SelfLab;\n quiz?: DiagnosticQuiz;\n slides?: SlideDeck;\n handout?: Handout;\n worksheet?: Worksheet;\n teacherGuide?: TeacherGuide;\n extension?: Extension;\n };\n}\n\n/**\n * Child Workflow: Executes fine-grained durable generation for a single Milestone.\n * Uses Step-level memoization, automatic LLM retries, and parallel satellite generation.\n */\nexport async function generateMilestoneWorkflow(\n input: MilestoneWorkflowInput\n): Promise<MilestoneWorkflowResult> {\n 'use workflow';\n\n const language = input.language || 'vi';\n const milestoneId = input.milestone.id || input.milestone.concept_code || 'L01';\n // Avoid double-M prefix: if milestoneId already starts with 'M' or 'U', use it directly\n const slugPrefix = /^\\d+$/.test(milestoneId)\n ? `M${milestoneId.padStart(2, '0')}`\n : milestoneId;\n const milestoneSlug = `${slugPrefix}_${(input.milestone.name || 'milestone')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')}`;\n const bundleTier = input.bundleTier || 'minimum';\n // Gate Settings = nguแปn quyแบฟt ฤแปnh DUY NHแบคT cho viแปc ai kiแปm artifact nร o.\n const gates = resolveGateSettings(input.gateSettings);\n const techStack = input.techStack || input.milestone.tech_keywords || ['General Technology'];\n console.log(' ๐ฆ [Gate] LESSON: ' + gates.LESSON + ' | ACT: ' + gates.ACT + ' | QUIZ: ' + gates.QUIZ);\n\n const targetObjectives = (input.milestone.learning_objectives || []).map((lo) => ({\n code: lo.code,\n description: lo.description || lo.name || '',\n bloomLevel: lo.bloom_level || 'understand',\n }));\n\n // โโโ Standards grounding (Phase 2): select verbatim statements for this lesson โโโ\n const packs = input.standardsPacks ?? [];\n const { block: standardsContext, selected: selectedStatements } = buildStandardsContext({\n packs,\n gradeBand: input.milestone.grade_band ?? [6, 12],\n topicText: [input.topic, input.milestone.name, input.milestone.description, ...(input.milestone.tech_keywords || [])].filter(Boolean).join(' '),\n conceptCodes: (input.milestone.concept_code || '').split(',').map((c) => c.trim()).filter(Boolean),\n language,\n });\n const standardStatements: Record<string, string> = {};\n for (const s of selectedStatements) {\n standardStatements[s.packId + ':' + s.statement.id] = Object.values(s.statement.texts)[0] || '';\n }\n if (selectedStatements.length > 0) {\n console.log(' ๐ [Standards] Grounded with ' + selectedStatements.length + ' verbatim statement(s) from ' + new Set(selectedStatements.map((s) => s.packId)).size + ' pack(s)');\n }\n\n // 1. Step: Generate Master Lesson Plan\n let lesson = await generateMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n\n let auditReport: CurriculumQualityReport | undefined;\n\n // 2. Gate cho LESSON โ ฤรบng 1 trong 3 mode chแบกy, khรดng bao giแป chแปng xแบฟp:\n // LLM_JUDGE = Agent kiแปm โ judge (+ auto-repair khi NEEDS_REVISION/FAIL)\n // HITL = Human kiแปm โ workflow treo chแป verdict qua durable hook (khรดng judge LLM)\n // OFF = khรดng kiแปm\n const lessonGate = gateModeFor(gates, 'LESSON');\n\n if (lessonGate === 'LLM_JUDGE') {\n auditReport = await judgeMasterLessonStep({\n lessonId: milestoneId,\n lesson,\n language,\n targetObjectives,\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n modelOptions: input.modelOptions,\n });\n\n if (auditReport.overallVerdict === 'FAIL' || auditReport.overallVerdict === 'NEEDS_REVISION') {\n lesson = await repairMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n auditReport,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n }\n } else if (lessonGate === 'HITL') {\n // HITL = Human kiแปm. Workflow TREO (durable, zero compute) chแป verdict qua hook.\n // Token deterministic theo milestone โ API respond tรฌm ฤฦฐแปฃc ฤรบng hook.\n const hookToken = 'gate:lesson:' + milestoneId;\n console.log(' โธ [Gate] LESSON awaiting HUMAN review (HITL) โ hook ' + hookToken);\n const workflowPkg = await import('workflow');\n const createHook = (workflowPkg as any).createHook as ((o: { token: string }) => AsyncIterable<import('../hooks/approvalHook').ApprovalPayload> & { token: string; dispose(): Promise<void> });\n const hook = createHook({ token: hookToken });\n const review = await (hook as unknown as Promise<import('../hooks/approvalHook').ApprovalPayload>);\n console.log(' โ
[Gate] Human verdict: ' + (review.approved ? 'APPROVED' : 'REJECTED') + (review.feedback ? ' โ ' + review.feedback : ''));\n if (!review.approved) {\n // Human tแปซ chแปi โ repair theo feedback โ vรฒng HITL mแปi trรชn token v2 (human kiแปm lแบกi bแบฃn mแปi)\n const repairReport = {\n overallVerdict: 'NEEDS_REVISION',\n totalScore: 0,\n languageAdherencePassed: true,\n criteria: [],\n actionableRepairPrompts: review.feedback ? [review.feedback] : ['Sแปญa theo phแบฃn hแปi cแปงa ngฦฐแปi duyแปt'],\n } as unknown as CurriculumQualityReport;\n lesson = await repairMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n auditReport: repairReport,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n const hook2 = createHook({ token: hookToken + ':v2' });\n const review2 = (await (hook2 as unknown as Promise<import('../hooks/approvalHook').ApprovalPayload>));\n console.log(' โ
[Gate] Human verdict (v2): ' + (review2.approved ? 'APPROVED' : 'REJECTED'));\n if (!review2.approved) {\n // Nguyรชn lรฝ gate: task phแปฅ thuแปc task bแป tแปซ chแปi KHรNG ฤฦฐแปฃc thแปฑc thi.\n // Chแบทn toร n bแป downstream โ khรดng sinh satellites, khรดng save.\n console.log(' ๐ [Gate] LESSON rejected twice โ satellites & save BLOCKED');\n return {\n milestoneId,\n milestoneSlug,\n status: 'FAILED',\n gateBlocked: { artifactType: 'LESSON', reason: 'HITL_REJECTED_V2', feedback: review2.feedback },\n artifacts: undefined as unknown as MilestoneWorkflowResult['artifacts'],\n } as unknown as MilestoneWorkflowResult;\n }\n }\n }\n\n // 3. Step: Parallel Fan-out for Satellites\n const [activity, selfLab, quiz, slides, handout] = await Promise.all([\n generateActivityStep({ lesson, language, modelOptions: input.modelOptions }),\n generateSelfLabStep({ milestone: input.milestone, language, targetTechStack: techStack, modelOptions: input.modelOptions }),\n generateDiagnosticQuizStep({ milestone: input.milestone, language, modelOptions: input.modelOptions }),\n generateSlidesStep({ lesson, language, modelOptions: input.modelOptions }),\n generateHandoutStep({ lesson, language, modelOptions: input.modelOptions }),\n ]);\n\n const codeLab = await generateCodeLabStep({\n lesson,\n activity,\n language,\n targetTechStack: techStack,\n modelOptions: input.modelOptions,\n });\n\n // 3b. Gate satellites per Gate Settings (LLM_JUDGE โ judge; HITL/OFF โ skip judging here).\n const satelliteReports: Record<string, CurriculumQualityReport> = {};\n const satelliteCandidates: Array<{ type: import('../gateSettings').CurriculumArtifactType; id: string; artifact: unknown }> = [\n { type: 'ACT', id: 'ACT_' + milestoneId, artifact: activity },\n { type: 'QUIZ', id: 'QUIZ_' + milestoneId, artifact: quiz },\n { type: 'SLIDE', id: 'SLIDE_' + milestoneId, artifact: slides },\n { type: 'HANDOUT', id: 'HANDOUT_' + milestoneId, artifact: handout },\n { type: 'CODE', id: 'CODE_' + milestoneId, artifact: codeLab },\n ];\n const toJudge = satelliteCandidates.filter((c) => c.artifact && gateModeFor(gates, c.type) === 'LLM_JUDGE');\n if (toJudge.length > 0) {\n const reports = await Promise.all(\n toJudge.map((c) =>\n judgeSatelliteStep({\n artifactType: c.type,\n artifactId: c.id,\n artifact: c.artifact,\n language,\n targetObjectives,\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n modelOptions: input.modelOptions,\n }).catch((err: Error) => {\n console.warn(' โ [Gate] satellite judge failed for ' + c.type + ': ' + err.message);\n return undefined;\n })\n )\n );\n for (let i = 0; i < toJudge.length; i++) {\n const r = reports[i];\n if (r) satelliteReports[toJudge[i].type] = r;\n }\n }\n\n let worksheet: Worksheet | undefined;\n let teacherGuide: TeacherGuide | undefined;\n let extension: Extension | undefined;\n\n if (bundleTier === 'full') {\n [worksheet, teacherGuide, extension] = await Promise.all([\n generateWorksheetStep({ lesson, language, modelOptions: input.modelOptions }),\n generateTeacherGuideStep({ lesson, activity, language, modelOptions: input.modelOptions }),\n generateExtensionStep({ lesson, activity, language, modelOptions: input.modelOptions }),\n ]);\n }\n\n // 4. Standards Coverage Gate (deterministic): statement โ LO โ activity โ quiz\n let standardsCoverage: import('../../standards').CoverageGateReport | undefined;\n if (packs.length > 0) {\n standardsCoverage = evaluateStandardsCoverage({\n packs,\n objectives: (lesson.learningObjectives || []).map((lo: any) => ({\n code: lo.code,\n standardRefs: lo.standardRefs,\n conceptRefs: lo.conceptRefs,\n })),\n // NOTE: ActivityLab has no structured LO linkage yet โ activity coverage rows are derived\n // from LOโquiz paths inside the gate. Wire ACT.loRefs in a future schema revision.\n activities: [],\n quizQuestions: (quiz?.questions || []).map((q: any) => ({ alignedLO: q.alignedLO, alignedAO: q.alignedAO })),\n assessmentObjectives: quiz?.assessmentObjectives?.map((ao: any) => ({ aoCode: ao.aoCode, alignedLO: ao.alignedLO })),\n });\n console.log(' ๐ [Standards Coverage] ' + standardsCoverage.summary);\n\n const enforce = input.enforceStandardsCoverage ?? true;\n if (enforce && standardsCoverage.verdict === 'FAIL') {\n console.error(' โ [Standards Coverage] HARD BLOCK โ ' + standardsCoverage.summary);\n console.error(standardsCoverage.rawMarkdownReport.split('\\n').filter((l) => l.startsWith('- [')).slice(0, 10).join('\\n'));\n return {\n milestoneId,\n milestoneSlug,\n status: 'FAILED',\n savedResult: { workspaceDir: '', files: [] } as unknown as SavedMilestoneResult,\n judgeReport: auditReport,\n standardsCoverage,\n artifacts: { lesson, activity, codeLab, selfLab, quiz, slides, handout, worksheet, teacherGuide, extension },\n };\n }\n }\n\n // 5. Step: Save serialized Markdown/JSON files to Local Workspace Disk\n const savedResult = await saveMilestoneToWorkspaceStep({\n jobId: input.jobId,\n milestoneSlug,\n lesson,\n activity,\n codeLab,\n selfLab,\n quiz,\n slides,\n handout,\n worksheet,\n teacherGuide,\n extension,\n baseWorkspaceDir: input.baseWorkspaceDir,\n });\n\n return {\n milestoneId,\n milestoneSlug,\n status: 'SUCCESS',\n savedResult,\n judgeReport: auditReport,\n satelliteJudgeReports: Object.keys(satelliteReports).length > 0 ? satelliteReports : undefined,\n gatesResolved: gates as unknown as Record<string, string>,\n standardsCoverage,\n artifacts: {\n lesson,\n activity,\n codeLab,\n selfLab,\n quiz,\n slides,\n handout,\n worksheet,\n teacherGuide,\n extension,\n },\n };\n}\n","import { sleep } from 'workflow';\nimport { generateMilestoneWorkflow, type MilestoneWorkflowResult } from './milestoneWorkflow';\nimport { publishToGitStep, publishToSupabaseStep } from '../steps/publishSteps';\nimport { LocalWorkspaceManager } from '../../publishers/localWorkspaceManager';\nimport type { ProjectRoadmap, MilestoneInput } from '../../schemas';\nimport type { GitPublishOptions, GitPublishResult } from '../../publishers/gitPublisher';\nimport type { SupabasePublishOptions, SupabasePublishResult } from '../../publishers/supabasePublisher';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface GenerateRoadmapWorkflowInput {\n jobId?: string;\n roadmap: ProjectRoadmap;\n language?: string;\n bundleTier?: 'minimum' | 'full';\n batchSize?: number;\n /** Gate Settings thรด (vd: gateModes tแปซ project.config.json) โ kit tแปฑ chuแบฉn hoรก. */\n gateSettings?: unknown;\n baseWorkspaceDir?: string;\n gitPublishOptions?: Omit<GitPublishOptions, 'jobId' | 'localJobDir'>;\n supabasePublishOptions?: Omit<SupabasePublishOptions, 'jobId' | 'courseTitle' | 'topic' | 'language' | 'milestones'>;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport interface RoadmapWorkflowSummary {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n totalMilestones: number;\n successfulMilestones: number;\n failedMilestones: number;\n results: Array<{ milestoneId: string; status: 'FULFILLED' | 'REJECTED'; result?: MilestoneWorkflowResult; error?: string }>;\n gitPublishResult?: GitPublishResult;\n supabasePublishResult?: SupabasePublishResult;\n workspaceDir: string;\n}\n\n/**\n * Parent Workflow: Orchestrates durable generation of an entire Curriculum Roadmap.\n * Implements Batching (Pattern 1), Failure Isolation, and Dual-Target Publishing (Git + Supabase).\n */\nexport async function generateRoadmapWorkflow(\n input: GenerateRoadmapWorkflowInput\n): Promise<RoadmapWorkflowSummary> {\n 'use workflow';\n\n const jobId = input.jobId || `job_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;\n const language = input.language || input.roadmap.target_language || 'vi';\n const topic = input.roadmap.topic || input.roadmap.goal || 'General Curriculum';\n const courseTitle = input.roadmap.title || `Curriculum: ${topic}`;\n const batchSize = input.batchSize || 2;\n const milestones: MilestoneInput[] = input.roadmap.milestones || [];\n\n const workspaceManager = new LocalWorkspaceManager(input.baseWorkspaceDir);\n const workspaceDir = await workspaceManager.initJobWorkspace(jobId, {\n courseTitle,\n topic,\n language,\n totalMilestones: milestones.length,\n });\n\n const milestoneOutcomes: Array<{\n milestoneId: string;\n status: 'FULFILLED' | 'REJECTED';\n result?: MilestoneWorkflowResult;\n error?: string;\n }> = [];\n\n // 1. Process Milestones in Batches with sleep pacing (Pattern 1: Batching)\n for (let i = 0; i < milestones.length; i += batchSize) {\n const batch = milestones.slice(i, i + batchSize);\n\n const batchSettled = await Promise.allSettled(\n batch.map((milestone) =>\n generateMilestoneWorkflow({\n jobId,\n milestone,\n language,\n topic,\n targetAudience: input.roadmap.target_audience,\n techStack: input.roadmap.tech_stack || milestone.tech_keywords,\n bundleTier: input.bundleTier,\n gateSettings: input.gateSettings,\n baseWorkspaceDir: input.baseWorkspaceDir,\n modelOptions: input.modelOptions,\n })\n )\n );\n\n for (const [idx, outcome] of batchSettled.entries()) {\n const targetMilestone = batch[idx];\n const mId = targetMilestone.id || targetMilestone.concept_code || `M${i + idx + 1}`;\n\n if (outcome.status === 'fulfilled') {\n milestoneOutcomes.push({\n milestoneId: mId,\n status: 'FULFILLED',\n result: outcome.value,\n });\n } else {\n milestoneOutcomes.push({\n milestoneId: mId,\n status: 'REJECTED',\n error: outcome.reason instanceof Error ? outcome.reason.message : String(outcome.reason),\n });\n }\n }\n\n // Pace between batches to respect LLM rate limits\n if (i + batchSize < milestones.length) {\n await sleep('2s');\n }\n }\n\n const successfulMilestones = milestoneOutcomes.filter((m) => m.status === 'FULFILLED').length;\n const failedMilestones = milestoneOutcomes.filter((m) => m.status === 'REJECTED').length;\n\n let gitPublishResult: GitPublishResult | undefined = undefined;\n let supabasePublishResult: SupabasePublishResult | undefined = undefined;\n\n // 2. Dual-Target Publishing (if configured)\n if (input.gitPublishOptions) {\n gitPublishResult = await publishToGitStep({\n jobId,\n localJobDir: workspaceDir,\n ...input.gitPublishOptions,\n });\n }\n\n if (input.supabasePublishOptions) {\n supabasePublishResult = await publishToSupabaseStep({\n jobId,\n courseTitle,\n topic,\n language,\n milestones: milestoneOutcomes\n .filter((m) => m.status === 'FULFILLED' && m.result)\n .map((m) => ({\n milestoneId: m.milestoneId,\n milestoneName: m.result!.savedResult.milestoneSlug,\n lessonSlug: m.result!.savedResult.milestoneSlug,\n })),\n ...input.supabasePublishOptions,\n });\n }\n\n return {\n jobId,\n courseTitle,\n topic,\n language,\n totalMilestones: milestones.length,\n successfulMilestones,\n failedMilestones,\n results: milestoneOutcomes,\n gitPublishResult,\n supabasePublishResult,\n workspaceDir,\n };\n}\n","import { streamCurriculumAIInference, extractThoughtAndContent, type ChunkType } from '../ai/streamRunner';\nimport { loadCurriculumTemplate } from './lessonProductionService';\nimport { createAiInferenceError } from '../errors';\n\nexport type ArtifactType = \n | 'lesson' \n | 'slide' \n | 'act' \n | 'quiz' \n | 'guide' \n | 'handout' \n | 'worksheet' \n | 'rubric' \n | 'ext' \n | 'glossary' \n | 'codelab' \n | 'bom'\n | 'exit_ticket' \n | 'tiered_practice' \n | 'choice_board' \n | 'science_lab' \n | 'task_cards' \n | 'station_rotation' \n | 'bell_ringer' \n | 'review_game' \n | 'graphic_organizer';\n\nexport type ScaffoldingLevel = 'foundation' | 'balanced' | 'advanced';\n\nexport interface SingleArtifactRequest {\n artifactType: ArtifactType;\n topic: string;\n lessonId?: string;\n lessonTitle?: string;\n pedagogy?: '5e' | 'edp' | 'pbl' | 'general';\n targetAge?: string;\n scaffoldingLevel?: ScaffoldingLevel;\n hardwarePlatform?: string[];\n gradeLevel?: string;\n studentCount?: string;\n language?: string;\n extraContext?: string;\n config?: Record<string, any>;\n contextSot?: {\n framework?: string;\n learnerProfile?: string;\n lessonPlan?: string;\n handout?: string;\n };\n options?: {\n model?: string;\n temperature?: number;\n openrouterKey?: string;\n alibabaKey?: string;\n deepseekKey?: string;\n geminiKey?: string;\n nvidiaKey?: string;\n openaiKey?: string;\n anthropicKey?: string;\n };\n onChunk?: (chunk: string, type: 'content' | 'thought') => void;\n}\n\nexport interface SingleArtifactResult {\n artifactType: ArtifactType;\n filename: string;\n content: string;\n persona: string;\n thought?: string;\n}\n\n/**\n * Maps artifact type to default canonical filename and responsible agent persona\n */\nexport function getArtifactMetadata(type: ArtifactType, lessonId?: string, pedagogy?: string): { filename: string; persona: string; templateFile: string } {\n const id = lessonId || 'ON_DEMAND';\n\n switch (type) {\n case 'lesson': {\n const p = (pedagogy || '').toLowerCase();\n const templateFile = p === 'edp' ? 'LESSON_EDP_template.md' : p === 'general' ? 'LESSON_GENERAL_template.md' : 'LESSON_5E_template.md';\n return { filename: `LESSON_${id}.md`, persona: '@content', templateFile };\n }\n case 'slide':\n return { filename: `SLIDE_${id}.md`, persona: '@illustrator', templateFile: 'SLIDE_template.md' };\n case 'act':\n return { filename: `ACT_${id}.md`, persona: '@activity', templateFile: 'ACT_template.md' };\n case 'quiz':\n return { filename: `QUIZ_${id}.md`, persona: '@assessor', templateFile: 'QUIZ_v4.6_template.md' };\n case 'guide':\n return { filename: `GUIDE_${id}.md`, persona: '@content', templateFile: 'GUIDE_template.md' };\n case 'handout':\n return { filename: `HANDOUT_${id}.md`, persona: '@content', templateFile: 'HANDOUT_template.md' };\n case 'worksheet':\n return { filename: `WKS_${id}.md`, persona: '@content', templateFile: 'WKS_template.md' };\n case 'rubric':\n return { filename: `RUBRIC_${id}.md`, persona: '@assessor', templateFile: 'RUBRIC_template.md' };\n case 'ext':\n return { filename: `EXT_${id}.md`, persona: '@activity', templateFile: 'EXT_template.md' };\n case 'glossary':\n return { filename: `GLOSSARY_${id}.md`, persona: '@content', templateFile: 'GLOSSARY_template.md' };\n case 'codelab':\n return { filename: `CODE_${id}.md`, persona: '@activity', templateFile: 'ACT_template.md' };\n case 'bom':\n return { filename: `BOM_${id}.md`, persona: '@activity', templateFile: 'PROJECT_BRIEF_template.md' };\n case 'exit_ticket':\n return { filename: `EXIT_TICKET_${id}.md`, persona: '@assessor', templateFile: 'EXIT_TICKET_template.md' };\n case 'tiered_practice':\n return { filename: `TIERED_PRACTICE_${id}.md`, persona: '@activity', templateFile: 'TIERED_PRACTICE_template.md' };\n case 'choice_board':\n return { filename: `CHOICE_BOARD_${id}.md`, persona: '@activity', templateFile: 'CHOICE_BOARD_template.md' };\n case 'science_lab':\n return { filename: `SCIENCE_LAB_${id}.md`, persona: '@activity', templateFile: 'SCIENCE_LAB_template.md' };\n case 'task_cards':\n return { filename: `TASK_CARDS_${id}.md`, persona: '@activity', templateFile: 'TASK_CARDS_template.md' };\n case 'station_rotation':\n return { filename: `STATION_ROTATION_${id}.md`, persona: '@content', templateFile: 'STATION_ROTATION_template.md' };\n case 'bell_ringer':\n return { filename: `BELL_RINGER_${id}.md`, persona: '@content', templateFile: 'BELL_RINGER_template.md' };\n case 'review_game':\n return { filename: `REVIEW_GAME_${id}.md`, persona: '@assessor', templateFile: 'REVIEW_GAME_template.md' };\n case 'graphic_organizer':\n return { filename: `GRAPHIC_ORGANIZER_${id}.md`, persona: '@illustrator', templateFile: 'GRAPHIC_ORGANIZER_template.md' };\n default:\n return { filename: `ARTIFACT_${id}.md`, persona: '@content', templateFile: 'LESSON_5E_template.md' };\n }\n}\n\n/**\n * Universal Single Artifact Generator Service for all 21 Pedagogical JTBD Artifacts\n */\nexport async function generateSingleArtifact(req: SingleArtifactRequest): Promise<SingleArtifactResult> {\n const { \n artifactType, \n topic, \n lessonId, \n lessonTitle, \n pedagogy = '5e', \n targetAge = '14-18 years old (High School / Early College)', \n scaffoldingLevel = 'balanced',\n hardwarePlatform = ['MacBook Lab (macOS 14+ / Swift 6)'],\n gradeLevel,\n studentCount,\n language = 'Vietnamese',\n extraContext,\n config,\n contextSot = {},\n options = {},\n onChunk\n } = req;\n\n const meta = getArtifactMetadata(artifactType, lessonId, pedagogy || config?.pedagogicalModel);\n const displayTitle = lessonTitle || topic;\n const loadedTemplate = loadCurriculumTemplate(meta.templateFile);\n const templateContent = loadedTemplate || getDefaultFallbackTemplate(artifactType, displayTitle, lessonId || 'ON_DEMAND');\n const hwStr = hardwarePlatform.join(', ');\n const selectedDevices = (config?.devices || (hardwarePlatform[0]?.toLowerCase().includes('paper') ? 'paper-only' : 'laptop')).toLowerCase();\n\n const isBilingual = language.toLowerCase().includes('bilingual') || language.toLowerCase().includes('song');\n const isVietnamese = !isBilingual && language.toLowerCase().includes('viet');\n const langRule = isBilingual\n ? `1. AUTHORING LANGUAGE: Bilingual (Vietnamese - English). Headings and core conceptual definitions should be presented in Vietnamese with English technical terms in parentheses. Explanations and instructional text are in Vietnamese. Key code terms, comments, and challenge summaries are presented bilingually.`\n : isVietnamese\n ? `1. AUTHORING LANGUAGE: Vietnamese for all instructional text, explanations, questions, rubrics, and presenter notes. Programming code, syntax keywords, and standard API identifiers remain in standard English (with Vietnamese explanation comments/notes).`\n : `1. AUTHORING LANGUAGE: 100% English (Plan C Canonical Specification).`;\n\n // Hardware and device adaptation\n const isPaperOnly = selectedDevices === 'paper-only' || hwStr.toLowerCase().includes('paper') || hwStr.toLowerCase().includes('print-ready');\n const deviceRule = isPaperOnly\n ? `\\n- ๐ PAPER-ONLY / NO-DEVICE ENVIRONMENT: The learning space has NO computers or screens. All exercises, worksheets, task cards, exit tickets, and code analyses MUST be 100% printable. Provide write-in blank boxes, printed code snippets with line numbers, tracing tables, and physical manipulative instructions.`\n : selectedDevices === 'tablet' || selectedDevices === 'smartphone'\n ? `\\n- ๐ฑ MOBILE/TABLET ENVIRONMENT: Activities should be optimized for touch interfaces and mobile/tablet sandboxes (e.g. Swift Playgrounds, Web IDEs, tap/touch interactions).`\n : `\\n- ๐ป LAPTOP/DESKTOP ENVIRONMENT: Full keyboard, terminal, multi-file code editing, and browser developer tooling are available.`;\n\n // Class size dynamics\n const classDynamicsRule = studentCount\n ? `\\n- ๐ฅ CLASS SIZE LOGISTICS: Class has exactly ${studentCount} students. Structure group sizes, pair-programming pairs, station rotations, and material distribution to realistically accommodate ${studentCount} students without bottlenecks.`\n : '';\n\n // Scaffolding level instruction\n const scaffoldingRule = scaffoldingLevel === 'foundation'\n ? `\\n- ๐ช FOUNDATION SCAFFOLDING: High instructional support. Provide step-by-step numbered breakdowns, concrete real-world analogies, hints for every problem, scaffolded starter code/fill-in-the-blanks, and frequent check-for-understanding prompts.`\n : scaffoldingLevel === 'advanced'\n ? `\\n- ๐ ADVANCED CHALLENGE: Minimal scaffolding. Focus on deeper system architecture, edge case handling, computational complexity, performance optimization, and open-ended extension challenges.`\n : `\\n- โ๏ธ BALANCED SCAFFOLDING: Balanced approach combining structured teacher guidance with independent inquiry and problem solving.`;\n\n // Extra user guidance\n const extraContextRule = extraContext\n ? `\\n- ๐ฏ CRITICAL USER INSTRUCTIONS (MANDATORY): \"${extraContext}\". You MUST directly reflect and satisfy every point of this user guidance in the generated artifact!`\n : '';\n\n const artifactSpecializedPrompt = getArtifactSpecializedInvariants(artifactType, {\n ...req,\n studentCount,\n gradeLevel,\n language,\n scaffoldingLevel\n });\n\n // Construct rigorous, archetypal pedagogical system prompt\n const systemPrompt = `You are ${meta.persona}, an expert Curriculum & Pedagogical Specialist in the Curriculum OS Multi-Agent Team.\nYour task is to author a canonical, publication-grade learning artifact of type \"${artifactType.toUpperCase()}\".\n\n### CORE OPERATIONAL INVARIANTS:\n${langRule}\n2. NON-MOCK CODE INVARIANT: Any code snippet provided MUST be 100% syntactically valid, idiomatic, and executable without placeholders or fake functions.\n3. PEDAGOGICAL GROUNDING: Strictly align with the ${pedagogy.toUpperCase()} model, Bloom's Revised Taxonomy, and IEEE/ACM CS2023 guidelines.\n4. SCAFFOLDING LEVEL: \"${scaffoldingLevel.toUpperCase()}\".${scaffoldingRule}\n5. TARGET AUDIENCE: ${gradeLevel ? `Grade ${gradeLevel}, ` : ''}${targetAge} on ${hwStr}.${deviceRule}${classDynamicsRule}${extraContextRule}\n6. OUTPUT INTEGRITY: Output clean Markdown starting directly with YAML frontmatter. Do not wrap entire response in triple backticks.${artifactSpecializedPrompt}`;\n\n const userPrompt = `### CONTEXT GROUND TRUTH:\n- Topic / Concept Domain: \"${topic}\"\n- Lesson ID: \"${lessonId || 'ON_DEMAND'}\"\n- Artifact Title: \"${displayTitle}\"\n- Pedagogy: \"${pedagogy.toUpperCase()}\"\n- Scaffolding Level: \"${scaffoldingLevel}\"\n- Hardware Environment: \"${hwStr}\"\n${gradeLevel ? `- Target Grade Level: \"${gradeLevel}\"\\n` : ''}${studentCount ? `- Class Size: \"${studentCount} students\"\\n` : ''}- Target Language: \"${language}\"\n${selectedDevices ? `- Device Mode: \"${selectedDevices}\"\\n` : ''}${extraContext ? `- User Specific Guidance & Requirements: \"${extraContext}\"\\n` : ''}${config ? `- Full Task Config: ${JSON.stringify(config)}\\n` : ''}\n${contextSot.framework ? `### SOT CURRICULUM FRAMEWORK:\\n${contextSot.framework.slice(0, 1500)}\\n` : ''}\n${contextSot.lessonPlan ? `### SOT CANONICAL LESSON PLAN:\\n${contextSot.lessonPlan.slice(0, 1500)}\\n` : ''}\n${contextSot.handout ? `### SOT STUDENT HANDOUT:\\n${contextSot.handout.slice(0, 1000)}\\n` : ''}\n\n### MANDATORY CANONICAL TEMPLATE CONTRACT:\nUse the following reference template structure as the exact specification:\n\n${templateContent}\n\n### TASK INSTRUCTION:\nGenerate the complete, thorough, publication-grade \"${artifactType.toUpperCase()}\" artifact for \"${displayTitle}\". Ensure all [REQUIRED] sections are fully developed with realistic, detailed pedagogical and technical content. Strictly follow the specialized invariants for \"${artifactType.toUpperCase()}\".`;\n\n let accumulatedContent = '';\n let accumulatedThought = '';\n\n try {\n const rawResult = await streamCurriculumAIInference(\n [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt }\n ],\n userPrompt,\n {\n ...options,\n systemPersona: systemPrompt\n },\n (chunk: string, type: ChunkType) => {\n if (type === 'thought') {\n accumulatedThought += chunk;\n } else if (type === 'content') {\n accumulatedContent += chunk;\n }\n if (onChunk) onChunk(chunk, type === 'thought' ? 'thought' : 'content');\n }\n );\n\n const { thought, content } = extractThoughtAndContent(rawResult);\n\n return {\n artifactType,\n filename: meta.filename,\n content: content || accumulatedContent,\n persona: meta.persona,\n thought: thought || accumulatedThought\n };\n } catch (error: any) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_ALL_PROVIDERS_FAILED',\n message: `Failed to generate single artifact ${artifactType}: ${error?.message || 'Unknown error'}`,\n rawError: error\n });\n }\n}\n\n/**\n * Provides specialized, publication-grade pedagogical prompt invariants for each artifact type\n */\nfunction getArtifactSpecializedInvariants(type: ArtifactType, req: SingleArtifactRequest): string {\n const cfg = req.config || {};\n const isPaperOnly = cfg.devices === 'paper-only' || req.hardwarePlatform?.some(h => h.toLowerCase().includes('paper'));\n const studentCount = req.studentCount || '25';\n\n switch (type) {\n case 'slide': {\n const slideCount = cfg.slideCount || 10;\n const presentationStyle = cfg.presentationStyle || 'modern';\n const presentationDuration = cfg.presentationDuration || 45;\n const includeSpeakerNotes = cfg.includeSpeakerNotes !== false;\n\n return `\n### ๐ฌ SLIDE PRESENTATION & MARP ARCHITECTURE INVARIANTS:\n1. **SLIDE COUNT & TIMING TARGET**:\n - Generate EXACTLY ${slideCount} slides separated by \\`---\\` horizontal rules.\n - Pacing: Target total duration is ${presentationDuration} minutes (~${Math.round(Number(presentationDuration) / Number(slideCount))} mins per slide).\n - Visual Style: \"${presentationStyle.toUpperCase()}\". Maintain high visual clarity, contrasting accents, and executive polish.\n2. **STRICT CONCISENESS & 6x6 RULE (ABSOLUTELY NO TEXT WALLS)**:\n - A slide is a VISUAL PROJECTION CANVAS, NOT a textbook or lesson plan!\n - Maximum 4โ6 bullet points per slide.\n - Maximum 8โ12 words per bullet point. Forbid dense multi-sentence paragraphs on the slide surface.\n3. **SPEAKER NOTES FOR ALL SPOKEN WORDS (<!-- Presenter Notes: ... -->)**:\n ${includeSpeakerNotes ? '- MANDATORY: Every single slide MUST contain comprehensive presenter notes in `<!-- Presenter Notes: ... -->` at the bottom, giving the teacher the exact verbal talking points, analogies, and pacing tips.' : '- Optional brief presenter notes.'}\n4. **CLICK-TO-REVEAL SYSTEM**:\n - Use \\`<!-- clicks -->\\` before bulleted lists (\\`<ul>\\` or \\`<ol>\\`) for incremental click-to-reveal.\n - Use \\`<!-- click -->\\` before answers, code reveals, or key callouts.\n5. **2-COLUMN / SPLIT LAYOUT**:\n - Use <div class=\"columns\"><div>...</div><div>...</div></div> for side-by-side concept vs. code or problem vs. solution comparisons.\n6. **CONCISE CODE SNIPPETS**:\n - Maximum 6โ10 lines of clean code per snippet with inline comments. Never paste whole files.\n7. **MERMAID VISUALS**:\n - Use Mermaid flowcharts or sequence diagrams for workflows and control loops.`;\n }\n\n case 'tiered_practice': {\n const techStack = cfg.techStack || (req.hardwarePlatform?.[0] || 'Modern Programming Language');\n const includeUnitTests = cfg.includeUnitTests !== false;\n\n return `\n### ๐ช TIERED PRACTICE ARCHITECTURE INVARIANTS (3-TIER ADAPTIVE):\n- Target Technology Stack: \"${techStack}\"\n${includeUnitTests ? '- Automated Testing: Include explicit executable Unit Tests / Assertions for verifying Bronze, Silver, and Gold tiers.' : ''}\n1. **3 EXPLICIT RIGOR TIERS**:\n - **๐ฅ Tier 1 (Bronze / Cฦก bแบฃn)**: 70% starter boilerplate / 30% fill-in. Direct recall, scaffolded fill-in-the-blanks, single-concept recognition with starter hints.\n - **๐ฅ Tier 2 (Silver / Tiรชu chuแบฉn)**: 30% starter boilerplate / 70% implementation. Independent multi-step problem solving, bug identification, synthesis of 2+ concepts.\n - **๐ฅ Tier 3 (Gold / Thแปญ thรกch)**: 0% code / open architecture. Edge case handling, algorithmic optimization, open-ended architectural design or extension.\n2. **COMPLETE WORKED SOLUTIONS & ANSWER KEYS**:\n - Provide step-by-step worked solutions for every problem across all 3 tiers.\n3. **SELF-DIAGNOSTIC RUBRIC**:\n - Include a clear student rubric with criteria for when a student is ready to level up from Bronze โ Silver โ Gold.`;\n }\n\n case 'exit_ticket': {\n const questionCount = cfg.questionCount || 3;\n const diagnosticFocus = cfg.diagnosticFocus || 'misconceptions';\n\n return `\n### ๐๏ธ EXIT TICKET ARCHITECTURE INVARIANTS:\n1. **EXACTLY ${questionCount} TARGETED ITEMS (3โ5 MINUTE DURATION)**:\n - Item 1: Quick diagnostic checking mastery of the core objective.\n - Item 2: Application with diagnostic trap focusing on: \"${diagnosticFocus}\".\n - Item 3: Metacognitive self-check (Confidence rating 1โ5 + \"Explain what is still fuzzy\").\n2. **TEACHER DIAGNOSTIC INTERVENTION GUIDE**:\n - Provide a quick lookup table: \"If student chooses/writes X โ Misconception is Y โ Quick remedy is Z\".${isPaperOnly ? '\\n3. **PRINTABLE CUT-OUT FORMAT**: Include student name/date line and cut-border dashed line.' : ''}`;\n }\n\n case 'quiz': {\n const questionCount = cfg.questionCount || 5;\n const questionTypes = Array.isArray(cfg.questionTypes) ? cfg.questionTypes.join(', ') : (cfg.questionTypes || 'multiple_choice');\n const diagnosticFocus = cfg.diagnosticFocus || 'balanced';\n\n return `\n### ๐ BLOOM-ALIGNED QUIZ ARCHITECTURE INVARIANTS:\n1. **EXACTLY ${questionCount} QUESTIONS (${questionTypes.toUpperCase()})**:\n - Diagnostic emphasis: \"${diagnosticFocus}\".\n - 40% Remember/Understand (Conceptual foundations).\n - 40% Apply/Analyze (Bug finding, code tracing, scenario application).\n - 20% Evaluate/Create (Algorithmic reasoning, trade-off evaluation).\n2. **HIGH-QUALITY DISTRACTORS WITH RATIONALE**:\n - For every multiple choice item, explain WHY each incorrect option is a plausible misconception and WHY the key is correct.\n3. **COMPLETE ANSWER KEY & SCORING RUBRIC**:\n - Explicit point distribution, partial credit guidelines, and sample ideal answers for open-ended questions.`;\n }\n\n case 'task_cards': {\n const cardCount = cfg.cardCount || 12;\n const cardUsage = cfg.cardUsage || 'stations';\n\n return `\n### ๐ TASK CARDS ARCHITECTURE INVARIANTS:\n1. **SET OF EXACTLY ${cardCount} NUMBERED CARDS (Optimized for ${cardUsage.toUpperCase()})**:\n - Clearly mark each card: Card # (1 to ${cardCount}), Difficulty (Foundation / Standard / Challenge), and Target Skill.\n2. **STUDENT RECORDING SHEET (BแบขNG GHI ฤรP รN)**:\n - Include a structured printable grid where students record answers for Cards 1โ${cardCount}.\n3. **TEACHER MASTER KEY**:\n - Quick reference key with verified answers and explanations.${isPaperOnly ? '\\n4. **PRINT-READY CARD BORDERS**: Layout with clean visual borders ready for physical printing and cutting.' : ''}`;\n }\n\n case 'graphic_organizer': {\n const diagramType = cfg.diagramType || 'concept_map';\n const includeFillIn = cfg.includeFillInExercise !== false;\n\n return `\n### ๐ GRAPHIC ORGANIZER ARCHITECTURE INVARIANTS:\n1. **VISUAL MODEL TYPE: \"${diagramType.toUpperCase()}\"**:\n - Structure a clear cognitive thinking tool: Concept Map, Flowchart, Venn Diagram, Hierarchy Tree, or Cause-Effect Matrix.\n2. **VALID MERMAID SYNTAX**:\n - Embed complete, 100% syntactically correct Mermaid diagrams showing the knowledge structure.\n3. **ACTIVE STUDENT INTERACTION PROMPTS**:\n ${includeFillIn ? '- Include interactive fill-in-the-blank nodes and connection articulation challenges.' : '- Include synthesis and reflection prompts based on the visual model.'}`;\n }\n\n case 'choice_board': {\n const gridSize = cfg.gridSize || '3x3';\n const completionRule = cfg.completionRule || 'row_column_diagonal';\n\n return `\n### ๐ฏ CHOICE BOARD ARCHITECTURE INVARIANTS (UDL ${gridSize.toUpperCase()} MATRIX):\n1. **${gridSize.toUpperCase()} MENU (UDL MULTIPLE MEANS OF EXPRESSION)**:\n - Option tasks spanning practical coding, architectural diagrams, analytical writing, and real-world scenarios.\n2. **COMPLETION CONTRACT: \"${completionRule.toUpperCase()}\"**:\n - Explicit rule (e.g. Tic-Tac-Toe 3-in-a-row/column/diagonal, or Point Bounty system).\n3. **UNIFIED EVALUATION RUBRIC**:\n - Consistent grading criteria applicable across all task choices on the board.`;\n }\n\n case 'station_rotation': {\n const stationCount = cfg.stationCount || 3;\n const stationDuration = cfg.stationDuration || 15;\n\n return `\n### ๐ STATION ROTATION ARCHITECTURE INVARIANTS:\n1. **EXACTLY ${stationCount} STATIONS SCALED FOR ${studentCount} STUDENTS**:\n - Group size: ~${Math.ceil(Number(studentCount) / Number(stationCount)) || 7} students per group.\n - Distinct station roles: Teacher-Led Small Group, Independent Practical Lab, Collaborative / Unplugged Peer Challenge.\n2. **TIMING & TRANSITIONS (${stationDuration} MINS/STATION)**:\n - ${stationDuration} minutes per station + 3-minute structured rotation protocol.\n3. **STATION DELIVERABLES & ACCOUNTABILITY**:\n - Clear check-in deliverable required at each station to ensure on-task accountability.`;\n }\n\n case 'act':\n case 'codelab':\n case 'science_lab': {\n const techStack = cfg.techStack || (req.hardwarePlatform?.[0] || 'Modern Programming Language');\n const includeUnitTests = cfg.includeUnitTests !== false;\n\n return `\n### ๐ป HANDS-ON LAB & CODE ACTIVITY ARCHITECTURE INVARIANTS:\n- Technology Stack: \"${techStack}\"\n${includeUnitTests ? '- Unit Testing: Provide automated assertions or test runner checks.' : ''}\n1. **100% RUNNABLE CODE / RIGOROUS PROCEDURE**:\n - Absolutely no fake APIs, mock functions, or non-executable pseudocode.\n2. **STRUCTURED LAB PHASES**:\n - Objective & Environmental Prerequisites.\n - Starter Skeleton Code with clear \\`// TODO [Student Task]\\` comments.\n - Step-by-step Guided Challenges (Level 1 โ Level 2 โ Level 3).\n - Automated Verification / Test Cases.\n - Complete Reference Solution with design explanation.`;\n }\n\n case 'bell_ringer':\n return `\n### ๐ BELL RINGER ARCHITECTURE INVARIANTS (3โ5 MIN WARM-UP):\n1. **3 QUICK HOOK QUESTIONS**:\n - 2 rapid-fire recall questions activating previous knowledge.\n - 1 curiosity hook question bridging into today's core topic.\n2. **60-SECOND TEACHER REVIEW KEY**:\n - Quick-glance answer key for instant whole-class review.`;\n\n case 'review_game':\n return `\n### ๐ฎ REVIEW GAME ARCHITECTURE INVARIANTS:\n1. **GAMIFIED STRUCTURE**:\n - Jeopardy-style board (3โ4 Categories x 3 Point Values: 100 / 200 / 300) OR 3-Round Interactive Trivia.\n2. **CLEAR RULES & TEAM DYNAMICS**:\n - Team scoring rules, buzz-in protocol, and tie-breaker challenge.\n3. **COMPLETE QUESTION & ANSWER DECK**:\n - Verified answers and point values for the host/teacher.`;\n\n case 'guide': {\n const lessonDuration = cfg.lessonDuration || 90;\n return `\n### ๐ TEACHER GUIDE ARCHITECTURE INVARIANTS (${lessonDuration} MINS LESSON):\n1. **MINUTE-BY-MINUTE PACING TIMELINE**:\n - Pacing broken down for ${lessonDuration} minutes (Hook, Modeling, Guided Practice, Independent Practice, Debrief).\n2. **SOCRATIC QUESTIONS & PROMPTS**:\n - Cold-call questions with anticipated student misconceptions and remediation scripts.\n3. **DIFFERENTIATION STRATEGIES**:\n - Specific adaptations for students needing support vs. high-flyers needing extension.`;\n }\n\n case 'worksheet':\n case 'handout':\n return `\n### ๐ WORKSHEET / HANDOUT ARCHITECTURE INVARIANTS:\n1. **I DO โ WE DO โ YOU DO SCAFFOLDING**:\n - Part 1 (I Do): Fully worked and annotated example.\n - Part 2 (We Do): Guided problem with fill-in hints and scaffolding scaffolds.\n - Part 3 (You Do): Independent mastery challenge.\n2. **SELF-CHECK RUBRIC**:\n - End-of-worksheet self-evaluation checklist.${isPaperOnly ? '\\n3. **PRINTABLE WORKSPACES**: Include spacious, clean write-in boxes and workspace for calculations/code.' : ''}`;\n\n case 'rubric': {\n const rubricScale = cfg.rubricScale || '4_levels';\n return `\n### ๐ ANALYTIC RUBRIC ARCHITECTURE INVARIANTS (${rubricScale.toUpperCase()} SCALE):\n1. **RIGOROUS PROFICIENCY LEVELS**:\n - 4 Proficiency Levels: Level 4 (Exemplary) | Level 3 (Proficient) | Level 2 (Developing) | Level 1 (Beginning).\n2. **CONCRETE OBSERVABLE CRITERIA**:\n - Each cell MUST describe concrete, observable behavioral evidence, not vague words like \"good\" or \"average\".`;\n }\n\n case 'glossary':\n return `\n### ๐ TECHNICAL GLOSSARY ARCHITECTURE INVARIANTS:\n1. **COMPREHENSIVE TERM PROFILES**:\n - For every key term: Technical Definition, Real-world Analogy, Code Syntax Example, and Common Misconception.`;\n\n case 'bom':\n return `\n### ๐ฆ BILL OF MATERIALS (BOM) ARCHITECTURE INVARIANTS:\n1. **CLASS-SCALED INVENTORY FOR ${studentCount} STUDENTS**:\n - Exact quantities calculated for ${studentCount} students.\n - Component specifications, estimated unit cost, and affordable alternatives.`;\n\n case 'lesson': {\n const lessonDuration = cfg.lessonDuration || 90;\n const pedagogicalModel = cfg.pedagogicalModel || req.pedagogy || '5e';\n return `\n### ๐ CANONICAL LESSON PLAN INVARIANTS (${pedagogicalModel.toUpperCase()} MODEL, ${lessonDuration} MINS):\n1. **A. LESSON DESIGN PLAN**:\n - Learning Objectives (Bloom-aligned) & Observable Student Evidence.\n - Activity Sequence mapping every phase with timing totaling ${lessonDuration} minutes.\n - Resource Map & Assessment Map with explicit Artifact Contracts.\n2. **B. LESSON FLOW**:\n - Detailed teacher moves, student actions, scripted key questions, and check-for-understanding points for every activity phase.`;\n }\n\n default:\n return '';\n }\n}\n\n/**\n * Generates rich markdown scaffolding when the physical template file is not found on disk\n */\nfunction getDefaultFallbackTemplate(type: ArtifactType, title: string, id: string): string {\n const upperType = type.toUpperCase();\n return `---\nid: \"${id}\"\ntitle: \"${title}\"\ntype: \"${upperType}\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n\n# ${title}\n\n## 1. Overview & Learning Objectives\n<!-- [REQUIRED] State 2-3 measurable, Bloom-aligned learning objectives -->\n\n## 2. Core Pedagogical Content\n<!-- [REQUIRED] Provide the core educational substance, questions, problems, and diagrams -->\n\n## 3. Practice & Differentiation\n<!-- [REQUIRED] Tiered support, worked examples, and challenges -->\n\n## 4. Assessment & Answer Key\n<!-- [REQUIRED] Complete solutions, rubrics, and diagnostic teacher feedback -->\n`;\n}\n","import type { ICurriculumStorage, ProjectStatusReport, PipelineState } from '../storage/types';\nimport { computeContentHash } from '../storage/fileSystemCurriculumAdapter';\nimport { runCurriculumAIInference, type ChunkType } from '../ai/streamRunner';\nimport { LLMJudgeEngine } from '../ai/llmJudgeEngine';\nimport type { JudgeEvaluationResult } from '../ai/llmJudgeEngine';\nimport { lintAndSanitizeArtifact } from '../pipeline/artifactLinter';\nimport { createAiInferenceError, CurriculumError } from '../errors';\nimport { getProjectArtifactScope } from './statusService';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { resolveGateSettings, gateModeFor, type ResolvedGateSettings } from '../workflow/gateSettings';\nimport { ensureExpositionForLesson, type ExpositionResult } from './knowledgeExpositionService';\nimport { buildSessionSliceContext } from './curriculumPlannerService';\nimport { buildStandardsContext } from '../standards/standardsContextInjector';\nimport { resolveStandardsPacks } from '../standards/bundledPacks';\nimport type { FrameworkPack } from '../standards/frameworkPackSchema';\n\nconst __filename = typeof import.meta?.url === 'string' ? fileURLToPath(import.meta.url) : '';\nconst _resolvedDir = __filename ? path.dirname(__filename) : (typeof __dirname !== 'undefined' ? __dirname : process.cwd());\n\n/**\n * Resolves and loads official canonical templates from docs/refs/templates or _templates/\n */\nexport function loadCurriculumTemplate(templateName: string): string {\n const candidatePaths = [\n path.resolve('/Users/tonypham/MEGA/WebApp/WIP/learnwell-platform/packages/curriculum-kit/docs/refs/templates', templateName),\n path.resolve(process.cwd(), 'packages/curriculum-kit/docs/refs/templates', templateName),\n path.resolve(process.cwd(), '_templates', templateName),\n path.resolve(process.cwd(), 'docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../../docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../../../docs/refs/templates', templateName),\n path.resolve('/Users/tonypham/MEGA/WebApp/content-gen/the-ultimate-curriculum-agent-os/_templates', templateName),\n path.resolve(_resolvedDir, '../../../../the-ultimate-curriculum-agent-os/_templates', templateName),\n ];\n\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n try {\n return fs.readFileSync(p, 'utf-8');\n } catch {\n // continue\n }\n }\n }\n console.warn(`[curriculum-kit:loadCurriculumTemplate] โ ๏ธ Template \"${templateName}\" not found across candidate paths. Falling back to inline structural scaffolding.`);\n return '';\n}\n\nexport type PedagogicalModel = '5e' | 'edp' | 'pbl' | 'general';\n\nexport interface ProduceLessonOptions {\n artifactScope?: string[];\n force?: boolean;\n pedagogy?: PedagogicalModel;\n /** Chiแบฟn lฦฐแปฃc batch (chแป produceBatchLessons dรนng). */\n batchStrategy?: 'depth_first_lesson' | 'breadth_first_artifact';\n /**\n * Gate Settings โ NGUแปN DUY NHแบคT quyแบฟt ฤแปnh \"ai kiแปm artifact nร o\".\n * Chแบฅp nhแบญn config thรด (vd: gateModes tแปซ project.config.json cแปงa Composer):\n * { LESSON: 'llm_judge', ACT: 'none', gate1: 'hitl', ... } โ kit tแปฑ chuแบฉn hoรก.\n * Riรชng approvedArtifacts lร INPUT cแปงa HITL (bแบฃn ฤรฃ ฤฦฐแปฃc ngฦฐแปi duyแปt), khรดng phแบฃi config.\n */\n gateSettings?: unknown;\n /**\n * Standards Registry packs (ฤรฃ validate + activate) ฤแป GROUNDING prompt vร Judge.\n * Khรดng truyแปn โ pipeline chแบกy nhฦฐ cลฉ, khรดng inject block chuแบฉn nร o.\n */\n standardsPacks?: import('../standards/frameworkPackSchema').FrameworkPack[];\n /** Id pack ฤรณng gรณi sแบตn trong kit (vd: 'csta-k12-2017') โ cรกch Composer truyแปn chuแบฉn gแปn nhแบฅt. */\n standardsPackIds?: string[];\n /** Grade band cแปงa lesson (ฤแป chแปn statement theo lแปp). Fallback [6,12]. */\n gradeBand?: [number, number] | number;\n /**\n * Media Ledger policy (nแบฟu cรณ): agent chรจn placeholder [IMAGE: slug], Curator duyแปt, Fulfiller thแปฑc thi.\n * maxGenImagesPerArtifact = quota แบฃnh AI/gen โ search kho แบฃnh (Pexels) KHรNG tแปn quota nร y.\n */\n mediaPolicy?: {\n maxGenImagesPerArtifact: number;\n autoFulfill?: boolean;\n preferredProvider?: 'openai' | 'gemini';\n mode?: 'search_only' | 'gen_only' | 'auto';\n };\n approvedArtifacts?: string[]; // e.g. ['LESSON']\n onProgress?: (agent: string, message: string, meta?: any) => void;\n}\n\nexport interface ProduceLessonResult {\n lessonId: string;\n pedagogy: PedagogicalModel;\n producedArtifacts: string[];\n pausedForReview: boolean;\n gateStatus?: string;\n}\n\n/**\n * Detects pedagogical model from SOT (Framework, Style Guide, or Brief)\n */\nexport function detectProjectPedagogy(\n frameworkText: string,\n styleGuideText: string,\n explicitPedagogy?: PedagogicalModel\n): PedagogicalModel {\n if (explicitPedagogy) return explicitPedagogy;\n\n const combined = (frameworkText + ' ' + styleGuideText).toLowerCase();\n if (combined.includes('edp') || combined.includes('engineering design process') || combined.includes('thiแบฟt kแบฟ kแปน thuแบญt')) {\n return 'edp';\n }\n if (combined.includes('pbl') || combined.includes('project-based') || combined.includes('dแปฑa trรชn dแปฑ รกn')) {\n return 'pbl';\n }\n if (combined.includes('general') || combined.includes('truyแปn thแปng') || combined.includes('standard lesson format')) {\n return 'general';\n }\n return '5e';\n}\n\n/**\n * Extracts lesson information (Title, Concept, Bloom, Unit, Module) from CURRICULUM_FRAMEWORK.md.\n */\nexport async function getLessonMetadata(\n storage: ICurriculumStorage,\n projectId: string,\n lessonId: string\n): Promise<{\n unitCode: string;\n moduleCode: string;\n lessonCode: string;\n lessonTitle: string;\n concept: string;\n prerequisites: string;\n bloomLevel: string;\n}> {\n const framework = (await storage.readSotDocument(projectId, 'CURRICULUM_FRAMEWORK.md')) || '';\n \n const parts = lessonId.split('_');\n const unitCode = parts[0] || 'U01';\n const moduleCode = parts.length >= 2 ? `${parts[0]}_${parts[1]}` : `${unitCode}_M01`;\n const lessonCode = lessonId;\n\n let lessonTitle = `Lesson ${lessonId}`;\n let concept = 'Core Technical Competency';\n let prerequisites = 'None';\n let bloomLevel = 'Apply';\n let objective = '';\n let deliverable = '';\n let found = false;\n\n // โโ ฤแปc bแบฃng Scope & Sequence THEO HEADER (khรดng theo vแป trรญ cแปฉng) โโ\n // Hแป trแปฃ bแบฃng hแปฃp ฤแปng mแปi (11 cแปt cรณ Lesson Code + Learning Objective) Vร bแบฃng legacy (6 cแปt).\n const lines = framework.split('\\n');\n let headerCols: string[] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith('|')) continue;\n const cols = trimmed.split('|').slice(1, -1).map((c) => c.trim());\n const lower = cols.map((c) => c.toLowerCase());\n\n // Header row? โ ghi mapping cแปt\n if (lower.some((c) => c.includes('lesson code') || c === 'mรฃ bร i')) {\n headerCols = cols;\n continue;\n }\n if (/^[-: |]+$/.test(trimmed.slice(1, -1))) continue;\n if (cols.length < 3) continue;\n\n // Tรฌm dรฒng cแปงa bร i nร y: cแปt nร o chแปฉa mรฃ UXX_MYY_LZZ khแปp lessonId\n const codePattern = new RegExp('^' + lessonId.replace(/_/g, '[_-]') + '$', 'i');\n const codeColIdx = cols.findIndex((c) => codePattern.test(c.replace(/\\*\\*/g, '').trim()));\n if (codeColIdx === -1) continue;\n\n if (headerCols.length > 0) {\n // Bแบฃng cรณ header chuแบฉn โ map theo tรชn cแปt\n const col = (name: string): string => {\n const idx = headerCols.findIndex((h) => h.toLowerCase().includes(name));\n return idx >= 0 ? (cols[idx] || '') : '';\n };\n lessonTitle = (col('title') || col('tรชn')).replace(/\\*\\*/g, '') || lessonTitle;\n objective = col('learning objective') || col('objective') || col('mแปฅc tiรชu') || '';\n concept = col('key concept') || col('concept') || col('khรกi niแปm') || concept;\n deliverable = col('deliverable') || col('sแบฃn phแบฉm') || '';\n prerequisites = col('prerequisit') || col('tiแปn ฤiแปu kiแปn') || prerequisites;\n bloomLevel = col('bloom') || bloomLevel;\n found = true;\n } else {\n // Bแบฃng legacy khรดng cรณ header: ฤoรกn theo vแป trรญ (hร nh vi cลฉ)\n lessonTitle = cols[2]?.replace(/\\*\\*/g, '') || lessonTitle;\n concept = cols[4] || concept;\n prerequisites = cols[5] || prerequisites;\n bloomLevel = cols[6] || bloomLevel;\n found = true;\n }\n if (found) break;\n }\n\n // Objective/deliverable tแปซ framework chแบฃy thแบณng vร o metadata โ SOT thแบญt cho LESSON prompt\n return {\n unitCode,\n moduleCode,\n lessonCode,\n lessonTitle,\n concept: objective ? `${concept}. Mแปฅc tiรชu buแปi hแปc: ${objective}` : concept,\n prerequisites: deliverable ? `${prerequisites}. Sแบฃn phแบฉm hands-on cแปงa buแปi: ${deliverable}` : prerequisites,\n bloomLevel,\n };\n}\n\n/**\n * P1: Framework excerpt Cร CHแปฆ ฤIแปM cho tแปซng bร i โ thay cho slice(0,1500) mรน:\n * Global Objectives + Structural Hierarchy + dรฒng bร i hiแปn tแบกi (ฤแปง cแปt) + 2 dรฒng lรขn cแบญn (context trฦฐแปc/sau).\n */\nfunction buildFrameworkExcerptForLesson(framework: string, lessonId: string): string {\n if (!framework) return '';\n const lines = framework.split('\\n');\n\n // 1. Lแบฅy khแปi Global Learning Objectives\n const objStart = lines.findIndex((l) => /##\\s*\\[?REQUIRED\\]?\\s*Global Learning Objectives/i.test(l));\n let objectivesBlock = '';\n if (objStart >= 0) {\n const objLines: string[] = [];\n for (let i = objStart; i < Math.min(objStart + 12, lines.length); i++) {\n if (i > objStart && /^##\\s/.test(lines[i] as string)) break;\n objLines.push(lines[i] as string);\n }\n objectivesBlock = objLines.join('\\n');\n }\n\n // 2. Tรฌm cรกc dรฒng Scope & Sequence: bร i hiแปn tแบกi + lรขn cแบญn\n const scopeRows: number[] = [];\n lines.forEach((l, idx) => {\n if (l.includes('|') && new RegExp(lessonId.replace(/_/g, '[_-]'), 'i').test(l)) scopeRows.push(idx);\n });\n const rowIdx = scopeRows[0] ?? -1;\n const currentRow = rowIdx >= 0 ? lines[rowIdx] : '';\n const prevRow = rowIdx > 0 && (lines[rowIdx - 1] || '').trim().startsWith('|') ? lines[rowIdx - 1] : '';\n const nextRow = (lines[rowIdx + 1] || '').trim().startsWith('|') ? lines[rowIdx + 1] : '';\n\n // 3. Hierarchy table (structural) โ cแบฏt gแปn 10 dรฒng ฤแบงu\n const hierStart = lines.findIndex((l) => /Structural Hierarchy/i.test(l));\n let hierarchyBlock = '';\n if (hierStart >= 0) {\n hierarchyBlock = lines.slice(hierStart, Math.min(hierStart + 12, lines.length)).join('\\n');\n }\n\n const parts = [\n objectivesBlock && `[GLOBAL LEARNING OBJECTIVES]:\\n${objectivesBlock}`,\n hierarchyBlock && `[COURSE STRUCTURE]:\\n${hierarchyBlock}`,\n currentRow && `[BรI HIแปN Tแบ I (${lessonId}) โ dรฒng Scope & Sequence cแปงa chรญnh bร i nร y]:\\n${currentRow}`,\n prevRow && `[BรI TRฦฏแปC โ hแปc sinh ฤรฃ biแบฟt gรฌ]:\\n${prevRow}`,\n nextRow && `[BรI SAU โ cแบงu nแปi cแบงn ฤแบทt]:\\n${nextRow}`,\n ].filter(Boolean);\n\n return parts.join('\\n\\n') || framework.slice(0, 1500);\n}\n\n/**\n * Builds the canonical LESSON prompt matching the exact template contract (lesson-plan-v2) for 5E, EDP, or GENERAL.\n */\nfunction buildLessonPrompt(\n pedagogy: PedagogicalModel,\n lessonCode: string,\n unitCode: string,\n lessonTitle: string,\n concept: string,\n bloomLevel: string,\n dateStr: string\n): string {\n const commonFrontmatter = `id: \"LESSON_${lessonCode}\"\ntitle: \"${lessonTitle}\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T1\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\nlesson_id: \"${lessonCode}\"\nunit_id: \"${unitCode}\"\ntemplate_contract: \"lesson-plan-v2\"\ntemplate_required_sections:\n - \"A. Lesson Design Plan\"\n - \"Learning Objectives & Evidence\"\n - \"Activity Sequence\"\n - \"Resource Map\"\n - \"Assessment Map\"\n - \"Artifact Contract\"\n - \"B. Lesson Flow\"\n - \"Artifact Linkage\"`;\n\n if (pedagogy === 'edp') {\n return `You are @content (Educational Content Editor & EDP Engineering Design Process Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_EDP_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_EDP\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle} (EDP Model - Engineering Design Process)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Project Objective:** [Complete engineering system or functional deliverable students build]\n- **Materials & Equipment:** [Detailed hardware, software libraries, and workstation tools]\n- **Learning Objectives Table:** (LO1, LO2 mapped with EDP Bloom level, Student Evidence, and Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, EDP Phase (Ask, Imagine, Plan, Create, Test & Improve, Share & Evaluate), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map (Slide, Handout, Starter Code, Lab Tools)\n### 4. Assessment Map (Rubric criteria, formative checkpoints, remediation paths)\n### 5. Artifact Contract (Detailed specifications for ACT, SLIDE, QUIZ)\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ASK โ [10 mins] (Problem Statement, High-Stakes Real-World Context & Engineering Challenge)\n### 2. IMAGINE โ [15 mins] (Brainstorming Design Alternatives & Trade-off Evaluation)\n### 3. PLAN โ [15 mins] (System Block Diagrams, Module Architecture & Task Decomposition)\n### 4. CREATE โ [25 mins] (Implementation / Verified 100% Executable Code Blueprint)\n### 5. TEST & IMPROVE โ [15 mins] (Diagnostic Testing, Telemetry & Iterative Debugging)\n### 6. SHARE & EVALUATE โ [10 mins] (Showcase, Metacognitive Reflection & Peer Evaluation)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`ACT_...\\`, \\`QUIZ_...\\`, \\`SLIDE_...\\`, \\`GUIDE_...\\`).\n\n3. Ensure all sample code and schemas are 100% syntax-valid and executable.\n4. Output 100% clean Markdown directly.`;\n }\n\n if (pedagogy === 'pbl' || pedagogy === 'general') {\n return `You are @content (Educational Content Editor & PBL/General Pedagogy Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_GENERAL_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_GENERAL\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle}\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Materials & Equipment:** [Tools, IDE, workstations, resources]\n- **Keywords / Core Concepts:** [Core domain terminology]\n- **Learning Objectives Table:** (LO1, LO2 with Bloom action verbs, Student Evidence, Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, Lesson Stage (Warm-up, Core Concepts, Guided Practice, Independent Practice, Wrap-up), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map\n### 4. Assessment Map\n### 5. Artifact Contract\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. Warm-up & Hook โ [10 mins]\n### 2. Core Concepts & Demo โ [25 mins] (Accompanied by Mermaid Diagram or Code Blueprint)\n### 3. Guided Practice โ [20 mins] (Step-by-step teacher-led scaffolding: I Do -> We Do)\n### 4. Independent Practice / Challenge โ [25 mins] (Autonomous student lab / Mini-project)\n### 5. Wrap-up & Evaluation โ [10 mins] (Synthesis & Formative Checkpoint)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`ACT_...\\`, \\`QUIZ_...\\`, \\`SLIDE_...\\`).\n\n3. Output 100% clean Markdown directly.`;\n }\n\n // Default: 5E Instructional Model (LESSON_5E_template.md)\n return `You are @content (Educational Content Editor & 5E Instructional Model Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_5E_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_5E\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle} (5E Model)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Materials & Equipment:** [Tools, IDE, hardware/software specifications]\n- **Keywords / Core Concepts:** [Core domain terminology]\n- **Learning Objectives Table:** (LO1, LO2 with Bloom action verbs, Student Evidence, Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, 5E Phase (Engage, Explore, Explain, Elaborate, Evaluate), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map\n### 4. Assessment Map\n### 5. Artifact Contract (Detailed specifications for ACT, SLIDE, QUIZ, GUIDE)\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ENGAGE โ [10 mins] (High-Stakes Hook Scenario, Inquiry Question, Transition)\n### 2. EXPLORE โ [20 mins] (Inquiry-Based Discovery, Hands-on Sandbox)\n### 3. EXPLAIN โ [25 mins] (Core Definitions, Relatable Analogies, Mermaid Diagram & Code Blueprints)\n### 4. ELABORATE โ [25 mins] (3-Tier Differentiated Scaffolding: ๐ฅ Bronze, ๐ฅ Silver, ๐ฅ Gold tasks)\n### 5. EVALUATE โ [10 mins] (Exit Ticket, Metacognitive Reflection)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`GUIDE_...\\`, \\`SLIDE_...\\`, \\`HANDOUT_...\\`, \\`ACT_...\\`, \\`WKS_...\\`, \\`QUIZ_...\\`, \\`EXT_...\\`).\n\n3. Ensure all sample code and syntax are 100% verified and runnable.\n4. Output 100% clean Markdown directly.`;\n}\n\n/**\n * Produces artifacts for a single lesson with support for dynamic pedagogy, HITL gating, and artifact scope.\n */\nexport async function produceSingleLesson(\n storage: ICurriculumStorage,\n projectId: string,\n lessonId: string,\n options: ProduceLessonOptions = {}\n): Promise<ProduceLessonResult> {\n const {\n artifactScope = ['LESSON', 'ACT', 'QUIZ', 'SLIDE'],\n force = false,\n approvedArtifacts = [],\n onProgress\n } = options;\n\n // Gate Settings = nguแปn quyแบฟt ฤแปnh DUY NHแบคT cho \"ai kiแปm artifact nร o\".\n const gates: ResolvedGateSettings = resolveGateSettings(options.gateSettings);\n\n const metadata = await getLessonMetadata(storage, projectId, lessonId);\n const { unitCode, lessonCode, lessonTitle, concept, prerequisites, bloomLevel } = metadata;\n\n // Standards grounding (Registry packs truyแปn thแบณng tแปซ Composer nแบฟu org cรณ adopt).\n // Khรดng cรณ packs โ mแปi thแปฉ hoแบกt ฤแปng y nhฦฐ cลฉ (khรดng inject, khรดng judge theo chuแบฉn).\n const packs: FrameworkPack[] = options.standardsPacks?.length\n ? options.standardsPacks\n : resolveStandardsPacks(options.standardsPackIds);\n let standardsContext = '';\n let standardStatements: Record<string, string> = {};\n if (packs.length > 0) {\n const { block, selected } = buildStandardsContext({\n packs,\n gradeBand: options.gradeBand ?? [6, 12],\n topicText: [lessonTitle, concept, prerequisites].filter(Boolean).join(' '),\n conceptCodes: [],\n });\n standardsContext = block;\n for (const s of selected) {\n standardStatements[s.packId + ':' + s.statement.id] = Object.values(s.statement.texts)[0] || '';\n }\n }\n\n // Read SOT references\n const framework = (await storage.readSotDocument(projectId, 'CURRICULUM_FRAMEWORK.md')) || '';\n const styleGuide = (await storage.readSotDocument(projectId, 'CONTENT_STYLE_GUIDE.md')) || '';\n const refPack = (await storage.readSotDocument(projectId, 'REFERENCE_PACK.md')) || '';\n const learnerProfile = (await storage.readSotDocument(projectId, 'LEARNER_PROFILE.md')) || '';\n\n // โโ KNOWLEDGE_EXPOSITION: canonical knowledge source (plan-driven flow).\n // Plan tแปn tแบกi โ EXPOSITION lร nguแปn kiแบฟn thแปฉc chรญnh tแบฏc; khรดng cรณ plan โ\n // legacy flow chแบกy nhฦฐ cลฉ (explicit, khรดng silent). โโ\n let expositionContext = '';\n let sessionSliceContext = '';\n try {\n const exposition = await ensureExpositionForLesson(storage, projectId, lessonCode, {\n gates: resolveGateSettings(options.gateSettings),\n force: options.force,\n });\n if (exposition) {\n expositionContext = exposition.context;\n onProgress?.('@content', `[EXPOSITION] ${exposition.reused ? 'Reused' : 'Generated'} \\`\\${exposition.relPath}\\` (plan-driven knowledge source)...`);\n } else {\n onProgress?.('@content', '[EXPOSITION] No CURRICULUM_PLAN.json โ running legacy knowledge flow (no plan-driven exposition).');\n }\n // Session slice [4][6][7]: machine-readable decisions for activity design\n const planRaw = await storage.readArtifact(projectId, '_sot/CURRICULUM_PLAN.json');\n if (planRaw) {\n try {\n const plan = JSON.parse(planRaw) as Parameters<typeof buildSessionSliceContext>[0];\n sessionSliceContext = buildSessionSliceContext(plan, lessonCode);\n } catch {\n sessionSliceContext = ''; // malformed plan โ exposition call above already failed hard if invalid\n }\n }\n } catch (err) {\n // Fail-closed: lแปi approval/judge/scope KHรNG ฤฦฐแปฃc nuแปt โ pipeline dแปซng rรต rร ng.\n throw new CurriculumError({\n errorCode: 'ERR_SOT_INVALID_SCHEMA',\n artifactType: 'KNOWLEDGE_EXPOSITION',\n lessonId: lessonCode,\n message: 'KNOWLEDGE_EXPOSITION failed: ' + (err instanceof Error ? err.message : String(err)),\n suggestedAction: 'Fix the domain graph or re-approve the curriculum plan, then retry lesson production',\n retryable: false,\n });\n }\n\n // Detect project pedagogy dynamically from SOT\n const pedagogy = detectProjectPedagogy(framework, styleGuide, options.pedagogy);\n const pedagogyLabel = pedagogy.toUpperCase();\n\n const commonContext = `PROJECT & ACADEMIC CONTEXT:\n- Project ID: ${projectId}\n- Pedagogical Model: ${pedagogyLabel}\n- Lesson Code: ${lessonCode}\n- Lesson Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Prerequisites: ${prerequisites}\n- Target Bloom Level: ${bloomLevel}\n\n[CURRICULUM FRAMEWORK EXCERPT]:\n${buildFrameworkExcerptForLesson(framework, lessonId)}\n\n[CONTENT STYLE GUIDE EXCERPT]:\n${styleGuide.slice(0, 1500)}\n\n[REFERENCE PACK GROUND TRUTH]:\n${refPack.slice(0, 1000)}${standardsContext ? '\\n\\n' + standardsContext : ''}${expositionContext ? '\\n\\n[KNOWLEDGE_EXPOSITION (CANONICAL KNOWLEDGE โ teach from this, do not contradict)]:\\n' + expositionContext : ''}${sessionSliceContext ? '\\n\\n' + sessionSliceContext : ''}`;\n\n const producedArtifacts: string[] = [];\n const lessonRelPath = `_content/${unitCode}/LESSON_${lessonCode}.md`;\n const existingLessonContent = await storage.readArtifact(projectId, lessonRelPath);\n\n let lessonContent = existingLessonContent || '';\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 1. Produce LESSON Plan matching the detected pedagogy\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n if (artifactScope.includes('LESSON') && (!existingLessonContent || force)) {\n onProgress?.('@content', `[1/4] Authoring Master Lesson Plan (${pedagogyLabel}): \\`LESSON_${lessonCode}.md\\` (${lessonTitle})...`);\n\n const dateStr = new Date().toISOString().split('T')[0];\n const mediaDirective = options.mediaPolicy && options.mediaPolicy.maxGenImagesPerArtifact > 0\n ? `\\n\\nIMAGE PLANNING (media ledger) โ QUOTA GEN: tแปi ฤa ${options.mediaPolicy.maxGenImagesPerArtifact} แบฃnh AI cho bร i nร y (แบฃnh search kho khรดng giแปi hแบกn).\\nKhi nแปi dung cแบงn minh hแปa (diagram quy trรฌnh, sฦก ฤแป khรกi niแปm, step-by-step visual), chรจn placeholder ฤรบng format [IMAGE: slug] (slug chแปฏ thฦฐแปng-gแบกch ngang, unique trong bร i, vd img-for-loop-diagram) Tแบ I ฤรNG CHแป cแบงn แบฃnh, trรชn dรฒng riรชng. KHรNG tแปฑ sinh แบฃnh, KHรNG dรนng markdown image โ placeholder sแบฝ ฤฦฐแปฃc thay bแบฑng แบฃnh thแบญt sau khi Media Curator duyแปt. Chแป ฤแบทt cho แบฃnh THแปฐC Sแปฐ cแบงn thiแบฟt.`\n : '';\n const lessonPrompt = buildLessonPrompt(\n pedagogy,\n lessonCode,\n unitCode,\n lessonTitle,\n concept,\n bloomLevel,\n dateStr\n ) + mediaDirective;\n\n const rawLesson = await runCurriculumAIInference(\n [{ role: 'user', content: lessonPrompt }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n\n if (!rawLesson || rawLesson.startsWith('โ ๏ธ') || rawLesson.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@content',\n artifactType: 'LESSON',\n lessonId: lessonCode,\n message: `Agent @content failed to author a valid Lesson Plan for ${lessonCode}.`,\n rawError: rawLesson || 'Empty AI response'\n });\n }\n\n // โโ Deterministic gate: lint + auto-fix trฦฐแปc khi ฤแปt tiแปn judge โโ\n // 0-token, hร ng ms: bแบฏt preamble/fence/postamble/mermaid hแปng/table lแปch cแปt + tแปฑ sแปญa ฤฦฐแปฃc\n const lintReport = lintAndSanitizeArtifact(rawLesson, `LESSON_${lessonCode}.md`);\n if (lintReport.fixedCount > 0) {\n options.onProgress?.('@linter', `๐ ๏ธ Deterministic lint auto-fixed ${lintReport.fixedCount} issue(s) on LESSON_${lessonCode}: ${lintReport.issues.map(i => i.type).join(', ')}`);\n }\n const blockingIssues = lintReport.issues.filter((i) => i.severity === 'ERROR' && !i.autoFixable);\n if (blockingIssues.length > 0) {\n // Lแปi cแบฅu trรบc khรดng tแปฑ sแปญa ฤฦฐแปฃc โ retry 1 lแบงn vแปi feedback cแปฅ thแป (repair cรณ mแปฅc tiรชu, khรดng retry mรน)\n options.onProgress?.('@linter', `โ ๏ธ ${blockingIssues.length} blocking lint issue(s): ${blockingIssues.map(i => i.message).join('; ')} โ retrying once with targeted feedback`);\n const retryRaw = await runCurriculumAIInference(\n [{ role: 'user', content: lessonPrompt + `\\n\\nPREVIOUS ATTEMPT FAILED STRUCTURAL LINT:\\n${blockingIssues.map(i => '- ' + i.message).join('\\n')}\\nFix ALL issues above and output the complete corrected document.` }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n const retryLint = lintAndSanitizeArtifact(retryRaw, `LESSON_${lessonCode}.md`);\n const stillBlocking = retryLint.issues.filter((i) => i.severity === 'ERROR' && !i.autoFixable);\n if (stillBlocking.length > 0) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@content',\n artifactType: 'LESSON',\n lessonId: lessonCode,\n message: `Lesson failed deterministic structural lint after 1 targeted retry: ${stillBlocking.map(i => i.message).join('; ')}`,\n rawError: retryRaw.slice(0, 500)\n });\n }\n lessonContent = retryLint.autoFixedContent || retryRaw;\n } else {\n lessonContent = lintReport.autoFixedContent || rawLesson;\n }\n await storage.saveArtifact(projectId, lessonRelPath, lessonContent);\n producedArtifacts.push(`LESSON_${lessonCode}.md`);\n }\n\n // Compute content hash and load pipeline state\n const contentHash = lessonContent ? computeContentHash(lessonContent) : undefined;\n const pipelineState = await storage.getPipelineState(projectId);\n const taskState = pipelineState.tasks[lessonCode] || {};\n const currentLessonInfo = taskState.LESSON;\n\n const lessonGate = gateModeFor(gates, 'LESSON');\n let isLessonApproved =\n lessonGate !== 'HITL' || // OFF/LLM_JUDGE: khรดng cแบงn duyแปt ngฦฐแปi\n currentLessonInfo?.state === 'approved' ||\n currentLessonInfo?.review?.decision === 'APPROVED' ||\n approvedArtifacts.includes('LESSON') ||\n approvedArtifacts.includes(lessonCode);\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 2. Gate LESSON: LLM_JUDGE = Agent kiแปm ยท HITL = human duyแปt (xแปญ lรฝ phรญa caller) ยท OFF = bแป qua\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n if (lessonGate === 'LLM_JUDGE' && !isLessonApproved && lessonContent) {\n onProgress?.('@reviewer', `๐ค Executing LLM-as-Judge academic evaluation on LESSON_${lessonCode}.md...`);\n try {\n const judgeObjectives = parseLessonObjectives(lessonContent, concept, bloomLevel);\n const judgeResult = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: 'LESSON',\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: judgeObjectives,\n generatedContentJson: JSON.stringify({\n lessonContent,\n lessonId: lessonCode,\n title: lessonTitle,\n frameworkExcerpt: framework ? framework.slice(0, 2500) : undefined,\n styleGuideExcerpt: styleGuide ? styleGuide.slice(0, 1500) : undefined,\n }),\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n });\n\nfunction injectYamlReviewMetadata(content: string, meta: Record<string, string>): string {\n const frontmatterMatch = content.match(/^---\\s*\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/);\n if (!frontmatterMatch) {\n const newYaml = Object.entries(meta)\n .map(([k, v]) => `${k}: \"${v}\"`)\n .join('\\n');\n return `---\\n${newYaml}\\n---\\n\\n${content}`;\n }\n\n let yamlBlock = frontmatterMatch[1];\n for (const [k, v] of Object.entries(meta)) {\n const keyRegex = new RegExp(`^${k}:.*$`, 'm');\n if (keyRegex.test(yamlBlock)) {\n yamlBlock = yamlBlock.replace(keyRegex, `${k}: \"${v}\"`);\n } else {\n yamlBlock += `\\n${k}: \"${v}\"`;\n }\n }\n\n return content.replace(frontmatterMatch[0], `---\\n${yamlBlock.trim()}\\n---\\n`);\n}\n\n if (judgeResult.passed && judgeResult.score >= 85) {\n isLessonApproved = true;\n const reviewDate = new Date().toISOString();\n const updatedLessonMarkdown = injectYamlReviewMetadata(lessonContent, {\n review_status: 'APPROVED',\n reviewed_by: '@reviewer (LLM-as-Judge)',\n reviewed_at: reviewDate,\n approved_by: '@reviewer',\n review_decision: 'APPROVED'\n });\n await storage.saveArtifact(projectId, lessonRelPath, updatedLessonMarkdown);\n const updatedHash = computeContentHash(updatedLessonMarkdown);\n\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: reviewDate,\n contentHash: updatedHash,\n review: {\n decision: 'APPROVED',\n reviewedBy: '@agent-as-judge',\n reviewedAt: reviewDate,\n score: judgeResult.score,\n critique: judgeResult.critique,\n }\n });\n onProgress?.('@reviewer', `โ
LLM-as-Judge PASS (${judgeResult.score}/100): ${judgeResult.critique}. Auto-approved for satellite generation.`);\n } else {\n // โโ Revision loop tแปฑ ฤแปng (P0): NEEDS_REVISION โ repair theo hฦฐแปng dแบซn cแปงa Judge โ re-judge.\n // Tแปi ฤa 2 vรฒng repair; vแบซn fail mแปi pause HITL. autoRepairInstructions vแปn cรณ trong JudgeResult.\n const MAX_REPAIR_ROUNDS = 2;\n let currentContent = lessonContent;\n let currentResult: JudgeEvaluationResult = judgeResult;\n let repaired = false;\n\n for (let round = 1; round <= MAX_REPAIR_ROUNDS; round++) {\n const repairFeedback = [\n currentResult.autoRepairInstructions || '',\n ...currentResult.weaknesses.map((w) => `- ${w}`),\n ].filter(Boolean).join('\\n');\n\n onProgress?.('@repair', `๐ง Repair round ${round}/${MAX_REPAIR_ROUNDS} for LESSON_${lessonCode} (judge score ${currentResult.score}/100)...`);\n\n const repairedRaw = await runCurriculumAIInference(\n [{ role: 'user', content: `You previously authored \\`LESSON_${lessonCode}.md\\` and the academic Judge REJECTED it with the critique below.\\nRewrite the COMPLETE corrected document: fix every listed issue, keep the mandatory structure, frontmatter and all approved sections. Output 100% clean Markdown only.\\n\\nJUDGE CRITIQUE:\\n${repairFeedback}\\n\\nCURRENT DOCUMENT:\\n${currentContent}` }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@repair', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n\n if (!repairedRaw || repairedRaw.startsWith('โ ๏ธ') || repairedRaw.length < 200) {\n onProgress?.('@repair', `โ ๏ธ Repair round ${round} produced invalid output โ stopping repair loop`);\n break;\n }\n\n // Lint + auto-fix bแบฃn repaired trฦฐแปc khi re-judge\n const repairLint = lintAndSanitizeArtifact(repairedRaw, `LESSON_${lessonCode}.md`);\n currentContent = repairLint.autoFixedContent || repairedRaw;\n\n onProgress?.('@reviewer', `๐ค Re-judging repaired LESSON_${lessonCode} (round ${round})...`);\n const reJudge = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: 'LESSON',\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: parseLessonObjectives(currentContent, concept, bloomLevel),\n generatedContentJson: JSON.stringify({\n lessonContent: currentContent,\n lessonId: lessonCode,\n title: lessonTitle,\n frameworkExcerpt: framework ? framework.slice(0, 2500) : undefined,\n styleGuideExcerpt: styleGuide ? styleGuide.slice(0, 1500) : undefined,\n }),\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n });\n currentResult = reJudge;\n lessonContent = currentContent;\n await storage.saveArtifact(projectId, lessonRelPath, currentContent);\n producedArtifacts.push(`LESSON_${lessonCode}.md`);\n\n if (reJudge.passed && reJudge.score >= 85) {\n repaired = true;\n break;\n }\n }\n\n if (repaired) {\n isLessonApproved = true;\n const reviewDate = new Date().toISOString();\n const repairedMarkdown = injectYamlReviewMetadata(lessonContent, {\n review_status: 'APPROVED',\n reviewed_by: '@reviewer (LLM-as-Judge)',\n reviewed_at: reviewDate,\n approved_by: '@reviewer',\n review_decision: 'APPROVED'\n });\n await storage.saveArtifact(projectId, lessonRelPath, repairedMarkdown);\n const repairedHash = computeContentHash(repairedMarkdown);\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: reviewDate,\n contentHash: repairedHash,\n review: {\n decision: 'APPROVED',\n reviewedBy: '@agent-as-judge',\n reviewedAt: reviewDate,\n score: currentResult.score,\n critique: `Repaired after ${MAX_REPAIR_ROUNDS > 0 ? 'revision loop' : 'first pass'} โ ${currentResult.critique}`,\n }\n });\n onProgress?.('@reviewer', `โ
Repair loop SUCCESS (${currentResult.score}/100) โ LESSON_${lessonCode} auto-approved after revision`);\n } else {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'rejected',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n score: currentResult.score,\n critique: currentResult.critique,\n feedback: currentResult.weaknesses.join('; '),\n }\n });\n onProgress?.('@reviewer', `โ ๏ธ LESSON_${lessonCode} still NEEDS_REVISION (${currentResult.score}/100) after ${MAX_REPAIR_ROUNDS} repair rounds: ${currentResult.weaknesses.join('; ')}`);\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'judge_needs_revision',\n };\n }\n }\n } catch (judgeErr: any) {\n // Fail-closed (P0): judge lแปi โ KHรNG รขm thแบงm duyแปt. ฤรกnh dแบฅu awaiting judge + trแบฃ paused ฤแป queue retry/hiแปn rรต.\n console.error(`[produceSingleLesson] LLM-as-Judge failed for ${lessonCode}:`, judgeErr?.message || judgeErr);\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Judge unavailable (fail-closed, KHรNG tแปฑ duyแปt): ${judgeErr?.message || String(judgeErr)}`,\n }\n });\n onProgress?.('@reviewer', `โ LLM-as-Judge failed for LESSON_${lessonCode} โ fail-closed (bร i KHรNG ฤฦฐแปฃc duyแปt ngแบงm): ${judgeErr?.message || judgeErr}`);\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'judge_error',\n };\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 3. HITL Checkpoint for LESSON (chแป khi Gate = HITL vร chฦฐa ฤฦฐแปฃc duyแปt)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n if (lessonGate === 'HITL' && !isLessonApproved) {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash,\n });\n\n const satellites = artifactScope.filter(s => s !== 'LESSON');\n for (const sat of satellites) {\n const satRelPath = `_content/${unitCode}/${sat}_${lessonCode}.md`;\n const satExists = await storage.readArtifact(projectId, satRelPath);\n if (!satExists) {\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: 'pending'\n });\n }\n }\n\n onProgress?.(\n '@reviewer',\n `๐ฆ HITL Review Gate Triggered: Completed \\`LESSON_${lessonCode}.md\\` (${pedagogyLabel}). Pausing for user approval before satellite artifact production (${satellites.join(', ')}).`,\n { gate: 'LESSON', lessonId: lessonCode, status: 'awaiting_approval', paused: true }\n );\n\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'awaiting_approval',\n };\n }\n\n // If approved or autonomy, record approved state if not yet recorded\n if (isLessonApproved && currentLessonInfo?.state !== 'approved') {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: new Date().toISOString(),\n contentHash,\n });\n }\n\n // Context derived from the canonical LESSON\n const satelliteContext = `${commonContext}\\n\\n[CANONICAL LESSON PLAN (${pedagogyLabel})]:\\n${lessonContent.slice(0, 4000)}`;\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 4. Produce ACT (Hands-on Lab Exercise)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const actRelPath = `_content/${unitCode}/ACT_${lessonCode}.md`;\n if (artifactScope.includes('ACT') && (!(await storage.readArtifact(projectId, actRelPath)) || force)) {\n onProgress?.('@activity', `[2/4] Authoring Hands-on Lab: \\`ACT_${lessonCode}.md\\`...`);\n\n const actDateStr = new Date().toISOString().split('T')[0];\n const actPrompt = `You are @activity (Lead Hands-on STEM & Laboratory Exercise Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the comprehensive hands-on lab guide: \\`ACT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"ACT_${lessonCode}\"\ntitle: \"[Descriptive lab title based on lesson concept]\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"v1.0\"\ndate: \"${actDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Computational Thinking Focus\"\n - \"Materials & Setup\"\n - \"Constraints & Safety\"\n - \"Active Learning Workflow\"\n - \"3-Tier Differentiation\"\n - \"Reflection\"\n---\n\n2. Mandatory sections (matching ACT_template.md):\n - ## [REQUIRED] Computational Thinking Focus (Problem statement, decomposition, algorithm design)\n - ## [REQUIRED] Materials & Setup (Hardware BOM with <!-- [HARDWARE_BOM] --> marker, software, consumables)\n - ## [REQUIRED] Constraints & Safety (Technical/safety warnings, design constraints)\n - ## [REQUIRED] Active Learning Workflow with 3 phases:\n - ### Phase 1: Planning & Design\n - ### Phase 2: Implementation & Discovery\n - ### Phase 3: Debugging & Testing\n - ## [REQUIRED] 3-Tier Differentiation (Bronze/Silver/Gold tasks)\n - ## [REQUIRED] Reflection (Discussion question)\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawAct = await runCurriculumAIInference(\n [{ role: 'user', content: actPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'content', artifactType: 'ACT' });\n }\n );\n\n if (!rawAct || rawAct.startsWith('โ ๏ธ') || rawAct.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@activity',\n artifactType: 'ACT',\n lessonId: lessonCode,\n message: `Agent @activity failed to author a valid ACT Lab for ${lessonCode}.`,\n rawError: rawAct || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, actRelPath, rawAct);\n await storage.updateArtifactState(projectId, lessonCode, 'ACT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawAct)\n });\n producedArtifacts.push(`ACT_${lessonCode}.md`);\n if (gateModeFor(gates, 'ACT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'ACT', content: rawAct,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 5. Produce QUIZ (Assessment Bank & Rubrics)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const quizRelPath = `_content/${unitCode}/QUIZ_${lessonCode}.md`;\n if (artifactScope.includes('QUIZ') && (!(await storage.readArtifact(projectId, quizRelPath)) || force)) {\n onProgress?.('@assessor', `[3/4] Authoring Assessment Bank: \\`QUIZ_${lessonCode}.md\\`...`);\n\n const quizDateStr = new Date().toISOString().split('T')[0];\n const quizPrompt = `You are @assessor (Lead Psychometrician & Competency Assessment Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the scenario-based diagnostic question bank: \\`QUIZ_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"QUIZ_${lessonCode}\"\ntitle: \"[Descriptive quiz title based on lesson concept]\"\ntype: \"QUIZ\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P2\"\ndeliverable: \"P2-T08\"\nversion: \"v1.0\"\ndate: \"${quizDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Assessment Objectives\"\n - \"Multiple-Choice Question Bank\"\n - \"Code Analysis / Debugging Question\"\n - \"Competency Rubric\"\n---\n\n2. Mandatory sections (matching QUIZ_v4.6_template.md):\n - ## 1. Metadata Specs (Lesson ID, Bloom target levels, language)\n - ## [REQUIRED] Assessment Objectives (Bloom taxonomy aligned goals for each LO)\n - ## [REQUIRED] Multiple-Choice Question Bank (โฅ5 scenario-based 4-option questions with: Question text, A/B/C/D options, Correct answer, Bloom level, Detailed distractor rationale)\n - ## [REQUIRED] Code Analysis / Debugging Question (1 deep code tracing question requiring students to predict output or identify bugs)\n - ## [REQUIRED] Competency Rubric (4-tier matrix: Developing โ Proficient โ Advanced โ Exemplary)\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawQuiz = await runCurriculumAIInference(\n [{ role: 'user', content: quizPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@assessor', chunk, { type: type || 'content', artifactType: 'QUIZ' });\n }\n );\n\n if (!rawQuiz || rawQuiz.startsWith('โ ๏ธ') || rawQuiz.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@assessor',\n artifactType: 'QUIZ',\n lessonId: lessonCode,\n message: `Agent @assessor failed to author a valid Quiz for ${lessonCode}.`,\n rawError: rawQuiz || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, quizRelPath, rawQuiz);\n await storage.updateArtifactState(projectId, lessonCode, 'QUIZ', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawQuiz)\n });\n producedArtifacts.push(`QUIZ_${lessonCode}.md`);\n if (gateModeFor(gates, 'QUIZ') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'QUIZ', content: rawQuiz,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 6. Produce SLIDE (Presentation Deck in Marp format)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const slideRelPath = `_content/${unitCode}/SLIDE_${lessonCode}.md`;\n if (artifactScope.includes('SLIDE') && (!(await storage.readArtifact(projectId, slideRelPath)) || force)) {\n onProgress?.('@illustrator', `[4/4] Authoring Presentation Slide Deck: \\`SLIDE_${lessonCode}.md\\`...`);\n\n const canonicalSlideTemplate = loadCurriculumTemplate('SLIDE_template.md');\n\n const slidePrompt = `You are @illustrator & @content (Pedagogical Slide Deck Presentation Specialists).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, lesson context, and the MARP SLIDE TEMPLATE below, author the complete, highly engaging Marp presentation deck: \\`SLIDE_${lessonCode}.md\\`.\n\n[MARP SLIDE TEMPLATE SCAFFOLD]:\n${canonicalSlideTemplate || `---\nmarp: true\ntheme: default\npaginate: true\nheader: \"${titleHeader(lessonTitle)}\"\nfooter: \"Curriculum OS โข ${lessonCode} (${pedagogyLabel})\"\n---`}\n\nMANDATORY 12-14 SLIDE MICRO-CYCLE STRUCTURE (Delimited by '---'):\n1. **Slide 1 [Title & Mission]:** ${lessonCode}: ${lessonTitle} + Real-world inquiry hook\n2. **Slide 2 [Agenda & Roadmap]:** Timing and milestone breakdown (${pedagogyLabel})\n3. **Slide 3 [Warm-Up / Prior Knowledge]:** Prerequisite recall and mental model activator\n4. **Slide 4 [High-Stakes Hook Scenario]:** Authentic engineering/domain crisis scenario\n5. **Slide 5 [Core Concept 1: Mental Model]:** Principle definition, core terminology, and analogy\n6. **Slide 6 [Architecture & Visual Flow]:** Clean Mermaid diagram (flowchart or sequenceDiagram)\n7. **Slide 7 [Core Concept 2: Syntax / Mechanism Anatomy]:** Breakdown of mechanics and key rules\n8. **Slide 8 [Executable Blueprint / Demonstration]:** Annotated runnable code or structured domain walkthrough\n9. **Slide 9 [Guided Practice: Try It Now]:** 3-5 minute active check (I Do -> We Do)\n10. **Slide 10 [Integrated Hands-On Lab]:** 3-tier differentiated challenge (Bronze / Silver / Gold)\n11. **Slide 11 [Traffic Light Checkpoint & Pitfalls]:** Formative self-check & top 2 student misconceptions\n12. **Slide 12 [Exit Ticket & Metacognition]:** Scenario-based check + 1 reflection question\n13. **Slide 13 [Summary & Next Steps]:** 3 core takeaways and preview of next milestone\n\nRules:\n- No empty slides or shallow bullet lists. Every slide must contain substantive pedagogical value, diagrams, or runnable snippets.\n- Output 100% valid Marp Markdown.`;\n\n const rawSlide = await runCurriculumAIInference(\n [{ role: 'user', content: slidePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@illustrator', chunk, { type: type || 'content', artifactType: 'SLIDE' });\n }\n );\n\n if (!rawSlide || rawSlide.startsWith('โ ๏ธ') || rawSlide.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@illustrator',\n artifactType: 'SLIDE',\n lessonId: lessonCode,\n message: `Agent @illustrator failed to author valid Slides for ${lessonCode}.`,\n rawError: rawSlide || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, slideRelPath, rawSlide);\n await storage.updateArtifactState(projectId, lessonCode, 'SLIDE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawSlide)\n });\n producedArtifacts.push(`SLIDE_${lessonCode}.md`);\n if (gateModeFor(gates, 'SLIDE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'SLIDE', content: rawSlide,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 7. Produce GUIDE (Teacher Instructional Guide)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const guideRelPath = `_content/${unitCode}/GUIDE_${lessonCode}.md`;\n if (artifactScope.includes('GUIDE') && (!(await storage.readArtifact(projectId, guideRelPath)) || force)) {\n onProgress?.('@content', `Authoring Teacher Guide: \\`GUIDE_${lessonCode}.md\\`...`, { artifactType: 'GUIDE' });\n\n const guideDateStr = new Date().toISOString().split('T')[0];\n const guidePrompt = `You are @content (Senior Curriculum Developer & Teacher Facilitation Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\` and pedagogical context, author the comprehensive Teacher Guide: \\`GUIDE_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"GUIDE_${lessonCode}\"\ntitle: \"[Descriptive teacher guide title for this lesson]\"\ntype: \"GUIDE\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T5\"\nversion: \"v1.0\"\ndate: \"${guideDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n2. Mandatory sections (matching GUIDE_template.md):\n - ## [REQUIRED] Objectives & Preparation (Pedagogical goal, common blindspots, technical checklist)\n - ## [REQUIRED] Preparation Checklist & Workstation Setup\n - ## [REQUIRED] Facilitation Script & Timeline (Phase-by-phase teacher moves, inquiry questions, transitions)\n - ## [REQUIRED] Common Misconceptions & Diagnostic Remediation Matrix\n - ## [REQUIRED] Differentiated Support Strategies (Support scaffolds vs Extension challenges)\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawGuide = await runCurriculumAIInference(\n [{ role: 'user', content: guidePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'GUIDE' });\n }\n );\n\n if (rawGuide && !rawGuide.startsWith('โ ๏ธ') && rawGuide.length >= 200) {\n await storage.saveArtifact(projectId, guideRelPath, rawGuide);\n await storage.updateArtifactState(projectId, lessonCode, 'GUIDE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawGuide)\n });\n producedArtifacts.push(`GUIDE_${lessonCode}.md`);\n if (gateModeFor(gates, 'GUIDE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'GUIDE', content: rawGuide,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 8. Produce HANDOUT (Student Reference Notes)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const handoutRelPath = `_content/${unitCode}/HANDOUT_${lessonCode}.md`;\n if (artifactScope.includes('HANDOUT') && (!(await storage.readArtifact(projectId, handoutRelPath)) || force)) {\n onProgress?.('@content', `Authoring Student Handout: \\`HANDOUT_${lessonCode}.md\\`...`, { artifactType: 'HANDOUT' });\n\n const handoutDateStr = new Date().toISOString().split('T')[0];\n const handoutPrompt = `You are @content (Educational Content Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the student self-paced reference handout: \\`HANDOUT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"HANDOUT_${lessonCode}\"\ntitle: \"[Descriptive cheat-sheet title for this lesson]\"\ntype: \"HANDOUT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T6\"\nversion: \"v1.0\"\ndate: \"${handoutDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n2. Mandatory sections (matching HANDOUT_template.md):\n - ## [REQUIRED] ๐ Core Concepts (Key terms, definitions, and student-friendly explanations)\n - ## [REQUIRED] Core Syntax & Mechanism Cheat Sheet (Quick-scan reference table)\n - ## [REQUIRED] Visual Mental Model / Architecture Diagram (Mermaid or ASCII diagram)\n - ## [REQUIRED] Step-by-Step Practical Quick-Start Guide\n - ## [REQUIRED] Self-Check Diagnostic Checklist (Can-do statements for student self-assessment)\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawHandout = await runCurriculumAIInference(\n [{ role: 'user', content: handoutPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'HANDOUT' });\n }\n );\n\n if (rawHandout && !rawHandout.startsWith('โ ๏ธ') && rawHandout.length >= 200) {\n await storage.saveArtifact(projectId, handoutRelPath, rawHandout);\n await storage.updateArtifactState(projectId, lessonCode, 'HANDOUT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawHandout)\n });\n producedArtifacts.push(`HANDOUT_${lessonCode}.md`);\n if (gateModeFor(gates, 'HANDOUT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'HANDOUT', content: rawHandout,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 9. Produce WKS (Guided Student Worksheet)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const wksRelPath = `_content/${unitCode}/WKS_${lessonCode}.md`;\n if (artifactScope.includes('WKS') && (!(await storage.readArtifact(projectId, wksRelPath)) || force)) {\n onProgress?.('@content', `Authoring Student Worksheet: \\`WKS_${lessonCode}.md\\`...`, { artifactType: 'WKS' });\n\n const wksDateStr = new Date().toISOString().split('T')[0];\n const wksPrompt = `You are @content (Instructional Activity & Worksheet Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the guided student worksheet: \\`WKS_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"WKS_${lessonCode}\"\ntitle: \"[Descriptive worksheet title for this lesson]\"\ntype: \"WKS\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T7\"\nversion: \"v1.0\"\ndate: \"${wksDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n**Student Name:** _______________________ **Class:** _______________ **Date:** _______________\n\n> **For Students:** This document guides you step-by-step through the practical tasks. Read carefully, fill in the blanks, and mark the checkbox [x] once completed. If you encounter errors, refer back to your **HANDOUT**.\n\n2. Mandatory sections (matching WKS_template.md):\n - ## [REQUIRED] Part 1: Knowledge Check (Warm-up โ Prior knowledge retrieval tasks)\n - ## [REQUIRED] Part 2: Concept Tracing & Diagram Fill-in\n - ## [REQUIRED] Part 3: Code Analysis & Bug Hunting Challenge\n - ## [REQUIRED] Part 4: Synthesis & Problem-Solving Application\n - ## [REQUIRED] Part 5: Self-Reflection & Learning Log\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawWks = await runCurriculumAIInference(\n [{ role: 'user', content: wksPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'WKS' });\n }\n );\n\n if (rawWks && !rawWks.startsWith('โ ๏ธ') && rawWks.length >= 200) {\n await storage.saveArtifact(projectId, wksRelPath, rawWks);\n await storage.updateArtifactState(projectId, lessonCode, 'WKS', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawWks)\n });\n producedArtifacts.push(`WKS_${lessonCode}.md`);\n if (gateModeFor(gates, 'WKS') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'WKS', content: rawWks,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 10. Produce CODE / CODE_LAB (Executable Code Lab & Starter Projects)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const codeRelPath = `_content/${unitCode}/CODE_${lessonCode}.md`;\n if ((artifactScope.includes('CODE') || artifactScope.includes('CODE_LAB')) && (!(await storage.readArtifact(projectId, codeRelPath)) || force)) {\n onProgress?.('@activity', `Authoring Executable Code Lab: \\`CODE_${lessonCode}.md\\`...`, { artifactType: 'CODE' });\n\n const codeDateStr = new Date().toISOString().split('T')[0];\n const codePrompt = `You are @activity & @tech_sme (Lead Software Engineer & Technical SME).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, hardware platform, and starter code requirements, author the comprehensive executable Code Lab: \\`CODE_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"CODE_${lessonCode}\"\ntitle: \"[Descriptive code lab title for this lesson]\"\ntype: \"CODE\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T3\"\nversion: \"v1.0\"\ndate: \"${codeDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Technical Overview & Architecture Blueprint\"\n - \"Hardware Pinout & Wiring Configuration Matrix\"\n - \"Starter Code Sandbox\"\n - \"Verified Reference Solution Code\"\n - \"Automated Test / Verification Script\"\n - \"Common Syntax & Runtime Pitfalls Matrix\"\n---\n\n2. Mandatory sections:\n - ## [REQUIRED] Technical Overview & Architecture Blueprint\n - ## [REQUIRED] Hardware Pinout & Wiring Configuration Matrix\n - ## [REQUIRED] Starter Code Sandbox (Skeleton code with explicit TODO comments for students)\n - ## [REQUIRED] Verified Reference Solution Code (100% syntactically valid, production-ready, fully commented)\n - ## [REQUIRED] Automated Test / Verification Script (How to compile, flash, or unit test)\n - ## [REQUIRED] Common Syntax & Runtime Pitfalls Matrix\n3. Output 100% clean Markdown directly with runnable code snippets โ NO outer code fences around the document.`;\n\n const rawCode = await runCurriculumAIInference(\n [{ role: 'user', content: codePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'chunk', artifactType: 'CODE' });\n }\n );\n\n if (rawCode && !rawCode.startsWith('โ ๏ธ') && rawCode.length >= 200) {\n await storage.saveArtifact(projectId, codeRelPath, rawCode);\n await storage.updateArtifactState(projectId, lessonCode, 'CODE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawCode)\n });\n await storage.updateArtifactState(projectId, lessonCode, 'CODE_LAB', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawCode)\n });\n producedArtifacts.push(`CODE_${lessonCode}.md`);\n if (gateModeFor(gates, 'CODE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'CODE', content: rawCode,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 11. Produce EXT (Extension / Advanced Challenge)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const extRelPath = `_content/${unitCode}/EXT_${lessonCode}.md`;\n if (artifactScope.includes('EXT') && (!(await storage.readArtifact(projectId, extRelPath)) || force)) {\n onProgress?.('@activity', `Authoring Advanced Extension Challenge: \\`EXT_${lessonCode}.md\\`...`, { artifactType: 'EXT' });\n\n const extDateStr = new Date().toISOString().split('T')[0];\n const extPrompt = `You are @activity (Lead STEM Specialist & Differentiated Extension Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the advanced extension challenge: \\`EXT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"EXT_${lessonCode}\"\ntitle: \"[Descriptive advanced challenge title for this lesson]\"\ntype: \"EXT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T8\"\nversion: \"v1.0\"\ndate: \"${extDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n# EXTENSION TASKS: [LESSON TITLE]\n## For: Advanced Students / Extra Time\n\n2. Mandatory sections (matching EXT_template.md):\n - ### Challenge 1: [Name] (Difficulty: โญโญโญ) โ Mission Briefing & Real-World High-Stakes Scenario\n - ### Challenge 2: [Name] (Difficulty: โญโญโญโญ) โ Advanced Architectural Constraints & Edge Cases\n - ### Challenge 3: [Name] (Difficulty: โญโญโญโญโญ) โ Extension Milestones (Level 1: Ninja โ Level 2: Guru โ Level 3: Master)\n - ## [REQUIRED] Metacognitive Deep Dive & Engineering Trade-offs\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawExt = await runCurriculumAIInference(\n [{ role: 'user', content: extPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'chunk', artifactType: 'EXT' });\n }\n );\n\n if (rawExt && !rawExt.startsWith('โ ๏ธ') && rawExt.length >= 200) {\n await storage.saveArtifact(projectId, extRelPath, rawExt);\n await storage.updateArtifactState(projectId, lessonCode, 'EXT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawExt)\n });\n producedArtifacts.push(`EXT_${lessonCode}.md`);\n if (gateModeFor(gates, 'EXT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'EXT', content: rawExt,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n onProgress?.('@reviewer', `โ
Successfully authored all requested artifacts for \\`${lessonCode}\\` (${pedagogyLabel})!`);\n\n // โโ Cross-Artifact Drift Check (P1, deterministic markdown-level): quรฉt satellites ฤรฃ sinh trong lแบงn chแบกy nร y\n // kiแปm frontmatter id/type khแปp lessonCode + IDEA: phรกt hiแปn lแปch ID sแปm thay vรฌ ฤแป Judge ngฦฐแปi dรนng tแปฑ thแบฅy.\n if (producedArtifacts.some((a) => !a.startsWith('LESSON_'))) {\n const driftFindings: string[] = [];\n for (const artFile of producedArtifacts) {\n if (artFile.startsWith('LESSON_')) continue;\n const satType = artFile.split('_')[0];\n const relPath = `_content/${unitCode}/${artFile}`;\n const satContent = await storage.readArtifact(projectId, relPath);\n if (!satContent) continue;\n const idMatch = satContent.match(/^id:\\s*\"([^\"]+)\"/m);\n const typeMatch = satContent.match(/^type:\\s*\"([^\"]+)\"/m);\n if (idMatch && !idMatch[1].includes(lessonCode)) {\n driftFindings.push(`${artFile}: frontmatter id \"${idMatch[1]}\" khรดng chแปฉa lessonId \"${lessonCode}\"`);\n }\n if (typeMatch && typeMatch[1] !== satType) {\n driftFindings.push(`${artFile}: frontmatter type \"${typeMatch[1]}\" โ expected \"${satType}\"`);\n }\n }\n if (driftFindings.length > 0) {\n onProgress?.('@reviewer', `โ ๏ธ Cross-artifact drift detected (${driftFindings.length}): ${driftFindings.join(' | ')}`);\n // Ghi nhแบญn vร o state cแปงa LESSON ฤแป telemetry/queue thแบฅy (khรดng chแบทn โ chแป cแบฃnh bรกo rรต rร ng)\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: isLessonApproved ? 'approved' : 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: isLessonApproved ? 'APPROVED' : 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Cross-artifact drift: ${driftFindings.slice(0, 5).join('; ')}`,\n }\n });\n }\n }\n\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: false,\n };\n}\n\n/**\n * P0: Parse Learning Objectives THแบฌT tแปซ markdown lesson (bแบฃng LO hoแบทc bullet **LOx:**)\n * ฤแป Judge chแบฅm ฤรบng mแปฅc tiรชu thay vรฌ LO1 = concept hardcode. Fallback: concept duy nhแบฅt.\n */\nfunction parseLessonObjectives(lessonContent: string, concept: string, bloomLevel: string): Array<{ code: string; description: string; bloomLevel: string }> {\n const objectives: Array<{ code: string; description: string; bloomLevel: string }> = [];\n // Bแบฃng: | LO1 | mรด tแบฃ | ... | hoแบทc bullet: - **LO1:** mรด tแบฃ\n const tableRe = /\\|\\s*(LO\\d+)\\s*\\|([^|]+)\\|/g;\n const bulletRe = /\\*\\*(LO\\d+)\\*\\*\\s*[:\\-โ]\\s*([^\\n]+)/g;\n let m: RegExpExecArray | null;\n while ((m = tableRe.exec(lessonContent)) !== null) {\n const desc = m[2].trim();\n if (desc && desc.length > 5 && !/^\\**$/.test(desc)) objectives.push({ code: m[1], description: desc, bloomLevel });\n }\n if (objectives.length === 0) {\n while ((m = bulletRe.exec(lessonContent)) !== null) {\n objectives.push({ code: m[1], description: m[2].trim().slice(0, 200), bloomLevel });\n }\n }\n if (objectives.length === 0) {\n objectives.push({ code: 'LO1', description: concept, bloomLevel });\n }\n return objectives.slice(0, 6);\n}\n\n/**\n * Per-artifact LLM-as-Judge cho satellite โ CHแป gแปi khi gateModeFor(gates, sat) === 'LLM_JUDGE'.\n * Pass โ state 'approved' + review record. Fail โ state 'rejected' + review record.\n * KHรNG chแบทn pipeline (khรกc LESSON): satellite kรฉm chแป bแป ฤรกnh dแบฅu, ngฦฐแปi duyแปt quyแบฟt tiแบฟp theo.\n */\nasync function judgeSatelliteArtifact(\n ctx: {\n storage: ICurriculumStorage;\n projectId: string;\n lessonCode: string;\n sat: string;\n content: string;\n concept: string;\n bloomLevel: string;\n standardStatements: Record<string, string>;\n onProgress?: (agent: string, message: string, meta?: any) => void;\n }\n): Promise<void> {\n const { storage, projectId, lessonCode, sat, content } = ctx;\n try {\n ctx.onProgress?.('@reviewer', `\\u{1F916} Judging ${sat}_${lessonCode}...`);\n const result = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: sat,\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: parseLessonObjectives(content, ctx.concept, ctx.bloomLevel),\n generatedContentJson: JSON.stringify({ content, artifactType: sat, lessonId: lessonCode }),\n standardStatements: Object.keys(ctx.standardStatements).length > 0 ? ctx.standardStatements : undefined,\n });\n const passed = result.passed && result.score >= 85;\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: passed ? 'approved' : 'rejected',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(content),\n review: {\n decision: passed ? 'APPROVED' : 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n score: result.score,\n critique: result.critique,\n feedback: passed ? undefined : result.weaknesses.join('; '),\n }\n });\n ctx.onProgress?.('@reviewer', passed\n ? `\\u{2705} ${sat} judge PASS (${result.score}/100)`\n : `\\u{26A0}\\u{FE0F} ${sat} judge NEEDS_REVISION (${result.score}/100)`);\n } catch (err: any) {\n // Fail-closed cho satellite: judge lแปi โ state 'awaiting_review' + review record rรต rร ng, KHรNG รขm thแบงm ฤแป completed\n console.error(`[produceSingleLesson] satellite judge failed for ${sat}_${lessonCode}:`, err?.message || err);\n try {\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(content),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Judge unavailable (fail-closed): ${err?.message || String(err)}`,\n }\n });\n ctx.onProgress?.('@reviewer', `โ Judge failed for ${sat}_${lessonCode} โ marked awaiting_review (fail-closed)`);\n } catch (stateErr: any) {\n console.error(`[produceSingleLesson] failed to persist judge-error state for ${sat}_${lessonCode}:`, stateErr?.message || stateErr);\n }\n }\n}\nfunction titleHeader(title: string): string {\n return title.replace(/[\"\\n\\r]/g, '');\n}\n\n/**\n * Batch production orchestrator supporting Lesson-by-Lesson (Strategy A) or Artifact-by-Artifact (Strategy B) execution.\n */\nexport async function produceBatchLessons(\n storage: ICurriculumStorage,\n projectId: string,\n lessonIds: string[],\n options: ProduceLessonOptions = {}\n): Promise<{\n totalLessons: number;\n completedLessons: string[];\n pausedLessonId?: string;\n report: ProjectStatusReport;\n}> {\n const { batchStrategy = 'depth_first_lesson', onProgress } = options;\n\n // Gate-driven: cรณ HITL แป bแบฅt kแปณ gate nร o (SOT hoแบทc artifact) โ breadth-first ฤแป dแปซng duyแปt sแปm.\n const gates = resolveGateSettings(options.gateSettings);\n const hasHitl = Object.values(gates).some((m) => m === 'HITL');\n const effectiveStrategy = hasHitl ? 'breadth_first_artifact' : batchStrategy;\n\n const completedLessons: string[] = [];\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // Strategy B: Artifact-by-Artifact (Breadth-first) -> Used for HITL\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n if (effectiveStrategy === 'breadth_first_artifact') {\n onProgress?.('@router', `Bแบฏt ฤแบงu sแบฃn xuแบฅt theo chiแบฟn lฦฐแปฃc [B] (Breadth-first): Chแบกy toร n bแป Lesson Plan (Giรกo รกn) cho ${lessonIds.length} bร i hแปc trฦฐแปc...`);\n\n // Phase 1: Build all LESSON plans\n for (const lid of lessonIds) {\n const res = await produceSingleLesson(storage, projectId, lid, {\n ...options,\n artifactScope: ['LESSON'], // Only produce LESSON\n });\n completedLessons.push(lid);\n\n if (res.pausedForReview) {\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: lid,\n report,\n };\n }\n }\n\n // Check if HITL gate is enabled for LESSON\n if (gates.LESSON === 'HITL') {\n const pipelineState = await storage.getPipelineState(projectId);\n const unapproved = lessonIds.filter(lid => pipelineState.tasks[lid]?.LESSON?.state !== 'approved');\n if (unapproved.length > 0) {\n onProgress?.(\n '@reviewer',\n `๐ฆ Dแปซng kiแปm duyแปt HITL tแบกi Chแปt Giรกo รกn: ฤรฃ soแบกn thแบฃo xong Giรกo รกn cho ${lessonIds.length} bร i hแปc. Vui lรฒng kiแปm tra vร phรช duyแปt ฤแป tiแบฟp tแปฅc sแบฃn xuแบฅt Lab, Quiz, Slide.`,\n { gate: 'BATCH_LESSONS', status: 'awaiting_approval', paused: true }\n );\n\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: unapproved[0],\n report,\n };\n }\n }\n\n // Phase 2: Build Satellite Artifacts after LESSON approval\n const fullScope = options.artifactScope && options.artifactScope.length > 0 \n ? options.artifactScope \n : await getProjectArtifactScope(storage, projectId);\n const satelliteScope = fullScope.filter(s => s !== 'LESSON');\n\n onProgress?.('@router', `Tiแบฟp tแปฅc sแบฃn xuแบฅt cรกc hแปc liแปu vแป tinh (${satelliteScope.join(', ')}) cho ${lessonIds.length} bร i hแปc...`);\n for (const lid of lessonIds) {\n await produceSingleLesson(storage, projectId, lid, {\n ...options,\n artifactScope: satelliteScope,\n approvedArtifacts: ['LESSON', lid], // LESSON is approved\n });\n }\n } else {\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // Strategy A: Lesson-by-Lesson (Depth-first / Full Autonomy)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n onProgress?.('@router', `Bแบฏt ฤแบงu sแบฃn xuแบฅt theo chiแบฟn lฦฐแปฃc [A] (Depth-first): Hoร n thร nh trแปn gรณi tแปซng bร i hแปc mแปt...`);\n\n for (const lid of lessonIds) {\n onProgress?.('@router', `--- BแบฎT ฤแบฆU SแบขN XUแบคT BรI HแปC: ${lid} ---`);\n const res = await produceSingleLesson(storage, projectId, lid, options);\n\n if (res.pausedForReview) {\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: lid,\n report,\n };\n }\n\n completedLessons.push(lid);\n }\n }\n\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n report,\n };\n}\n\n","import { generateSingleArtifact, type SingleArtifactRequest, type SingleArtifactResult } from '../../services/singleArtifactService';\nimport { withRateLimitBackoff } from '../errors/rateLimitHandler';\n\n/**\n * Step-level durable execution for generating a single standalone artifact.\n */\nexport async function executeSingleArtifactStep(request: SingleArtifactRequest): Promise<SingleArtifactResult> {\n 'use step';\n const t0 = Date.now();\n console.log(` โณ [Step: Single Artifact] Generating ${request.artifactType.toUpperCase()} for \"${request.topic.slice(0, 35)}\"...`);\n\n const res = await withRateLimitBackoff({\n stepName: `generate-single-artifact-${request.artifactType}-${(request.topic || 'topic').slice(0, 20)}`,\n fn: async () => generateSingleArtifact(request),\n });\n\n console.log(` โ
[Step: Single Artifact] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (File: \"${res.filename}\")`);\n return res;\n}\n\n/**\n * Workflow for on-demand single artifact generation.\n * Supports Vercel Workflow durable execution, step memoization, and automatic retry.\n */\nexport async function generateSingleArtifactWorkflow(request: SingleArtifactRequest): Promise<SingleArtifactResult> {\n 'use workflow';\n return executeSingleArtifactStep(request);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/errors/index.ts","../../src/ai/streamRunner.ts","../../src/ai/provider-factory.ts","../../src/schemas/lessonPlanSchema.ts","../../src/schemas/activitySchema.ts","../../src/schemas/codeLabSchema.ts","../../src/schemas/worksheetSchema.ts","../../src/schemas/handoutSchema.ts","../../src/schemas/slideDeckSchema.ts","../../src/schemas/teacherGuideSchema.ts","../../src/schemas/extensionSchema.ts","../../src/schemas/judgeSchema.ts","../../src/schemas/projectGraphSchema.ts","../../src/schemas/instructionSchema.ts","../../src/schemas/selfLabSchema.ts","../../src/schemas/diagnosticQuizSchema.ts","../../src/schemas/selfPacedBundleSchema.ts","../../src/schemas/rubricSchema.ts","../../src/schemas/exitTicketSchema.ts","../../src/schemas/tieredPracticeSchema.ts","../../src/schemas/bellRingerSchema.ts","../../src/schemas/glossarySchema.ts","../../src/schemas/choiceBoardSchema.ts","../../src/schemas/graphicOrganizerSchema.ts","../../src/schemas/scienceLabSchema.ts","../../src/schemas/stationRotationSchema.ts","../../src/schemas/taskCardsSchema.ts","../../src/schemas/reviewGameSchema.ts","../../src/schemas/curriculumPlanSchema.ts","../../src/schemas/index.ts","../../src/templates/lessonTemplate.ts","../../src/templates/actTemplate.ts","../../src/templates/codeLabTemplate.ts","../../src/templates/selfLabTemplate.ts","../../src/templates/quizTemplate.ts","../../src/ai/prompts/lessonMasterPrompt.ts","../../src/ai/prompts/activityPrompt.ts","../../src/ai/prompts/codeLabPrompt.ts","../../src/ai/prompts/worksheetPrompt.ts","../../src/ai/prompts/handoutPrompt.ts","../../src/ai/prompts/slidesPrompt.ts","../../src/ai/prompts/teacherGuidePrompt.ts","../../src/ai/prompts/extensionPrompt.ts","../../src/ai/prompts/judgePrompt.ts","../../src/ai/prompts/selfLabPrompt.ts","../../src/ai/prompts/diagnosticQuizPrompt.ts","../../src/ai/flows/generateLessonMasterFlow.ts","../../src/ai/flows/generateActivityFlow.ts","../../src/ai/flows/generateCodeLabFlow.ts","../../src/ai/flows/generateWorksheetFlow.ts","../../src/ai/flows/generateHandoutFlow.ts","../../src/ai/flows/generateSlidesFlow.ts","../../src/ai/flows/generateTeacherGuideFlow.ts","../../src/ai/flows/generateExtensionFlow.ts","../../src/ai/flows/auditCurriculumQualityFlow.ts","../../src/ai/flows/generateSelfLabFlow.ts","../../src/ai/flows/generateDiagnosticQuizFlow.ts","../../src/workflow/errors/rateLimitHandler.ts","../../src/workflow/steps/lessonSteps.ts","../../src/workflow/steps/satelliteSteps.ts","../../src/workflow/steps/satelliteJudgeStep.ts","../../src/pipeline/markdownSerializers.ts","../../src/pipeline/selfPacedSerializers.ts","../../src/publishers/localWorkspaceManager.ts","../../src/publishers/gitPublisher.ts","../../src/publishers/supabasePublisher.ts","../../src/workflow/steps/publishSteps.ts","../../src/workflow/gateSettings.ts","../../src/workflow/hooks/approvalHook.ts","../../src/standards/frameworkPackSchema.ts","../../src/standards/standardsContextInjector.ts","../../src/standards/standardsCoverageGate.ts","../../src/standards/data/csta-k12-2017.json","../../src/standards/bundledPacks.ts","../../src/workflow/workflows/milestoneWorkflow.ts","../../src/workflow/workflows/roadmapWorkflow.ts","../../src/services/singleArtifactService.ts","../../src/services/lessonProductionService.ts","../../src/workflow/workflows/singleArtifactWorkflow.ts"],"names":["path","z","generateObject","fs","workflowPkg","createHook","__filename"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Curriculum OS - Standardized Error Taxonomy & Traceability System\n *\n * Provides typed, structured, and traceable error codes for all pipeline failures,\n * API exceptions, safeguard blocks, and contract violations.\n */\n\nexport type CurriculumErrorCode =\n | 'ERR_AI_NO_API_KEY'\n | 'ERR_AI_RATE_LIMIT'\n | 'ERR_AI_AUTH_FAILED'\n | 'ERR_AI_NETWORK_TIMEOUT'\n | 'ERR_AI_RESPONSE_MALFORMED'\n | 'ERR_AI_ALL_PROVIDERS_FAILED'\n | 'ERR_SOT_MISSING'\n | 'ERR_SOT_INVALID_SCHEMA'\n | 'ERR_TASK_GATE_BLOCKED'\n | 'ERR_METERED_LIMIT_EXCEEDED'\n | 'ERR_SCHEMA_CONTRACT_VIOLATION'\n | 'ERR_STORAGE_IO_FAILED';\n\nexport interface CurriculumErrorDetail {\n errorCode: CurriculumErrorCode;\n agent?: string;\n artifactType?: string;\n lessonId?: string;\n provider?: string;\n statusCode?: number;\n message: string;\n suggestedAction: string;\n retryable: boolean;\n timestamp: string;\n rawError?: string;\n}\n\nexport class CurriculumError extends Error {\n public readonly detail: CurriculumErrorDetail;\n\n constructor(detail: Omit<CurriculumErrorDetail, 'timestamp'>) {\n super(`[${detail.errorCode}] ${detail.message}`);\n this.name = 'CurriculumError';\n this.detail = {\n ...detail,\n timestamp: new Date().toISOString()\n };\n Object.setPrototypeOf(this, CurriculumError.prototype);\n }\n\n get errorCode(): CurriculumErrorCode {\n return this.detail.errorCode;\n }\n\n get retryable(): boolean {\n return this.detail.retryable;\n }\n\n get suggestedAction(): string {\n return this.detail.suggestedAction;\n }\n\n toJSON(): CurriculumErrorDetail {\n return this.detail;\n }\n}\n\n/**\n * Helper to build standardized AI inference errors\n */\nexport function createAiInferenceError(params: {\n errorCode: CurriculumErrorCode;\n message: string;\n provider?: string;\n statusCode?: number;\n agent?: string;\n artifactType?: string;\n lessonId?: string;\n rawError?: any;\n suggestedAction?: string;\n retryable?: boolean;\n}): CurriculumError {\n const {\n errorCode,\n message,\n provider,\n statusCode,\n agent,\n artifactType,\n lessonId,\n rawError,\n suggestedAction = getSuggestedActionForCode(errorCode),\n retryable = isCodeRetryable(errorCode)\n } = params;\n\n return new CurriculumError({\n errorCode,\n message,\n provider,\n statusCode,\n agent,\n artifactType,\n lessonId,\n suggestedAction,\n retryable,\n rawError: typeof rawError === 'string' ? rawError : rawError?.message || JSON.stringify(rawError)\n });\n}\n\nfunction getSuggestedActionForCode(code: CurriculumErrorCode): string {\n switch (code) {\n case 'ERR_AI_NO_API_KEY':\n return 'Vร o Settings > API Keys ฤแป cแบฅu hรฌnh รญt nhแบฅt mแปt khรณa API (Gemini, DeepSeek, OpenRouter, Alibaba hoแบทc NVIDIA).';\n case 'ERR_AI_RATE_LIMIT':\n return 'API ฤรฃ vฦฐแปฃt quรก giแปi hแบกn lฦฐแปฃt gแปi (Rate Limit HTTP 429). Hรฃy chแป 30-60 giรขy rแปi bแบฅm Rerun hoแบทc chuyแปn sang Provider dแปฑ phรฒng.';\n case 'ERR_AI_AUTH_FAILED':\n return 'API Key khรดng hแปฃp lแป hoแบทc ฤรฃ hแบฟt hแบกn (HTTP 401/403). Vui lรฒng kiแปm tra lแบกi Key trong mแปฅc Cร i ฤแบทt.';\n case 'ERR_AI_NETWORK_TIMEOUT':\n return 'Kแบฟt nแปi mแบกng tแปi mรกy chแปง AI bแป quรก thแปi gian chแป (Timeout). Vui lรฒng kiแปm tra ฤฦฐแปng truyแปn vร bแบฅm Rerun.';\n case 'ERR_AI_RESPONSE_MALFORMED':\n return 'Mรด hรฌnh AI trแบฃ vแป kแบฟt quแบฃ rแปng hoแบทc khรดng ฤรบng ฤแปnh dแบกng markdown. Bแบฅm Rerun ฤแป yรชu cแบงu AI sinh lแบกi.';\n case 'ERR_AI_ALL_PROVIDERS_FAILED':\n return 'Toร n bแป cรกc nhร cung cแบฅp trong chuแปi Fallback ฤแปu thแบฅt bแบกi. Vui lรฒng kiแปm tra kแบฟt nแปi Internet vร hแบกn mแปฉc Token.';\n case 'ERR_SOT_MISSING':\n return 'Thiแบฟu tร i liแปu nแปn tแบฃng SOT (CURRICULUM_FRAMEWORK.md hoแบทc LEARNER_PROFILE.md). Hรฃy chแบกy workflow Khแปi tแบกo dแปฑ รกn trฦฐแปc.';\n case 'ERR_TASK_GATE_BLOCKED':\n return 'Hแปc liแปu phรญa sau bแป chแบทn do Giรกo รกn (LESSON) phรญa trฦฐแปc chฦฐa ฤฦฐแปฃc Phรช duyแปt (Approval Gate). Hรฃy bแบฅm Phรช duyแปt Giรกo รกn ฤแป mแป khรณa.';\n case 'ERR_METERED_LIMIT_EXCEEDED':\n return 'Chรญnh sรกch Metered Execution giแปi hแบกn tแปi ฤa 2 bร i hแปc mแปi ฤแปฃt. Vui lรฒng phรช duyแปt cรกc bร i hiแปn tแบกi trฦฐแปc khi tแบกo thรชm.';\n case 'ERR_SCHEMA_CONTRACT_VIOLATION':\n return 'Nแปi dung sinh ra thiแบฟu cรกc phแบงn bแบฏt buแปc [REQUIRED]. Hรฃy kรญch hoแบกt kiแปm thแปญ hoแบทc bแบฅm Rerun.';\n case 'ERR_STORAGE_IO_FAILED':\n return 'Lแปi ฤแปc/ghi tแปp tin trรชn hแป thแปng lฦฐu trแปฏ. Kiแปm tra quyแปn ghi thฦฐ mแปฅc output/projects.';\n default:\n return 'Bแบฅm Rerun ฤแป thแปญ lแบกi hoแบทc kiแปm tra nhแบญt kรฝ hแป thแปng.';\n }\n}\n\nfunction isCodeRetryable(code: CurriculumErrorCode): boolean {\n switch (code) {\n case 'ERR_AI_RATE_LIMIT':\n case 'ERR_AI_NETWORK_TIMEOUT':\n case 'ERR_AI_RESPONSE_MALFORMED':\n case 'ERR_STORAGE_IO_FAILED':\n return true;\n case 'ERR_AI_NO_API_KEY':\n case 'ERR_AI_AUTH_FAILED':\n case 'ERR_SOT_MISSING':\n case 'ERR_TASK_GATE_BLOCKED':\n case 'ERR_METERED_LIMIT_EXCEEDED':\n case 'ERR_SCHEMA_CONTRACT_VIOLATION':\n return false;\n default:\n return true;\n }\n}\n","import { createAiInferenceError } from '../errors';\nimport fs from 'fs';\nimport path from 'path';\n\nexport interface ChatMessage {\n role: 'user' | 'assistant' | 'system' | 'model';\n content: string;\n}\n\nexport interface StreamRunnerOptions {\n openrouterKey?: string;\n deepseekKey?: string;\n alibabaKey?: string;\n geminiKey?: string;\n nvidiaKey?: string;\n openaiKey?: string;\n anthropicKey?: string;\n model?: string;\n systemPersona?: string;\n maxTokens?: number;\n temperature?: number;\n reasoningEffort?: 'off' | 'low' | 'medium' | 'high' | 'max';\n}\n\nfunction resolveApiKey(keyName: string, explicitKey?: string): string {\n if (explicitKey && explicitKey.trim()) return explicitKey.trim();\n if (typeof process !== 'undefined' && process.env && process.env[keyName]) {\n return process.env[keyName]!;\n }\n\n try {\n const currentDir = process.cwd();\n const envPaths = [\n path.resolve(currentDir, '.env.local'),\n path.resolve(currentDir, '.env'),\n path.resolve(currentDir, 'apps/web/.env.local'),\n path.resolve(currentDir, 'packages/learnwell-platform/.env'),\n path.resolve(currentDir, '..', '.env.local'),\n path.resolve(currentDir, '..', '.env'),\n path.resolve(currentDir, '../..', '.env.local'),\n path.resolve(currentDir, '../..', '.env'),\n ];\n for (const envPath of envPaths) {\n if (fs.existsSync(envPath)) {\n const content = fs.readFileSync(envPath, 'utf-8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#') && trimmed.startsWith(keyName + '=')) {\n return trimmed.substring(keyName.length + 1).trim().replace(/^[\"']|[\"']$/g, '');\n }\n }\n }\n }\n } catch {}\n return '';\n}\n\n/**\n * Checks if a specific AI provider is enabled via environment variables.\n * Supported env controls:\n * 1. ENABLE_<PROVIDER>=true|false (e.g. ENABLE_ALIBABA=false, ENABLE_OPENROUTER=true)\n * 2. ALLOWED_AI_PROVIDERS=openrouter,nvidia\n * 3. DISABLED_AI_PROVIDERS=alibaba,deepseek,gemini\n */\nexport function isProviderEnabled(provider: string): boolean {\n const p = provider.toLowerCase();\n\n // 1. Explicit ENABLE_<PROVIDER>=true/false\n const explicitVal = resolveApiKey(`ENABLE_${p.toUpperCase()}`);\n if (explicitVal !== '') {\n return explicitVal === 'true' || explicitVal === '1';\n }\n\n // 2. ALLOWED_AI_PROVIDERS (whitelist)\n const allowedList = resolveApiKey('ALLOWED_AI_PROVIDERS');\n if (allowedList && allowedList.trim()) {\n const allowed = allowedList.split(',').map(s => s.trim().toLowerCase());\n return allowed.includes(p);\n }\n\n // 3. DISABLED_AI_PROVIDERS (blacklist)\n const disabledList = resolveApiKey('DISABLED_AI_PROVIDERS');\n if (disabledList && disabledList.trim()) {\n const disabled = disabledList.split(',').map(s => s.trim().toLowerCase());\n if (disabled.includes(p)) return false;\n }\n\n return true;\n}\n\n/**\n * Checks if a model is permitted by ALLOWED_AI_MODELS filter (supports wildcards e.g. nvidia/*, *:free)\n */\nexport function isModelAllowed(model: string): boolean {\n const allowedList = resolveApiKey('ALLOWED_AI_MODELS');\n if (!allowedList || !allowedList.trim()) return true;\n\n const patterns = allowedList.split(',').map(s => s.trim());\n return patterns.some(pattern => {\n if (pattern === '*' || pattern === model) return true;\n if (pattern.endsWith('*') && model.startsWith(pattern.slice(0, -1))) return true;\n if (pattern.startsWith('*') && model.endsWith(pattern.slice(1))) return true;\n return false;\n });\n}\n\nexport interface FallbackTarget {\n provider: string;\n model: string;\n}\n\n/**\n * Resolves the designated last-resort fallback chain from environment variables.\n * Comma-separated lists are parsed in left-to-right priority order:\n * - FALLBACK_AI_PROVIDER=nvidia,openrouter (Must be enabled / in ALLOWED_AI_PROVIDERS)\n * - FALLBACK_AI_MODEL=nvidia/nemotron-3-ultra-550b-a55b,@preset/coding-free,deepseek/deepseek-chat:free\n */\nexport function getDesignatedFallbackChain(): FallbackTarget[] {\n const rawProviders =\n resolveApiKey('FALLBACK_AI_PROVIDER') ||\n resolveApiKey('FALLBACK_AI_PROVIDERS') ||\n resolveApiKey('DEFAULT_AI_PROVIDER') ||\n 'nvidia,openrouter';\n\n const rawModels =\n resolveApiKey('FALLBACK_AI_MODEL') ||\n resolveApiKey('FALLBACK_AI_MODELS') ||\n resolveApiKey('DEFAULT_AI_MODEL') ||\n 'nvidia/nemotron-3-ultra-550b-a55b,@preset/coding-free,deepseek/deepseek-chat:free';\n\n // Providers in priority order (MUST be enabled / allowed in ALLOWED_AI_PROVIDERS)\n const providerList = rawProviders\n .split(',')\n .map((p) => p.trim().toLowerCase())\n .filter((p) => p.length > 0 && isProviderEnabled(p));\n\n const modelList = rawModels\n .split(',')\n .map((m) => m.trim())\n .filter((m) => m.length > 0 && isModelAllowed(m));\n\n const chain: FallbackTarget[] = [];\n\n for (const provider of providerList) {\n let providerModels: string[] = [];\n\n if (provider === 'nvidia') {\n providerModels = modelList.filter((m) => m.startsWith('nvidia/') || m.startsWith('meta/') || m.startsWith('mistralai/'));\n if (providerModels.length === 0) {\n providerModels = ['nvidia/nemotron-3-ultra-550b-a55b', 'nvidia/nemotron-3.5-lightning-30b-a3b'];\n }\n } else if (provider === 'openrouter') {\n providerModels = modelList.filter((m) => m.startsWith('@') || m.includes('/') || m.includes(':'));\n if (providerModels.length === 0) {\n providerModels = ['@preset/coding-free', 'deepseek/deepseek-chat:free', 'meta-llama/llama-3.3-70b-instruct:free'];\n }\n } else if (provider === 'alibaba' || provider === 'dashscope') {\n providerModels = modelList.filter((m) => m.startsWith('qwen') || m.includes('deepseek'));\n if (providerModels.length === 0) {\n providerModels = ['deepseek-v4-flash-0731', 'qwen-plus', 'qwen3.7-plus'];\n }\n } else if (provider === 'google' || provider === 'gemini') {\n providerModels = modelList.filter((m) => m.startsWith('gemini'));\n if (providerModels.length === 0) {\n providerModels = ['gemini-2.0-flash', 'gemini-1.5-flash'];\n }\n } else if (provider === 'deepseek') {\n providerModels = modelList.filter((m) => m.startsWith('deepseek'));\n if (providerModels.length === 0) {\n providerModels = ['deepseek-chat', 'deepseek-reasoner'];\n }\n } else {\n providerModels = modelList.length > 0 ? modelList : ['default'];\n }\n\n for (const model of providerModels) {\n if (!chain.some((c) => c.provider === provider && c.model === model)) {\n chain.push({ provider, model });\n }\n }\n }\n\n return chain;\n}\n\nexport function getDesignatedFallbackConfig(): FallbackTarget {\n const chain = getDesignatedFallbackChain();\n if (chain.length > 0) return chain[0];\n return { provider: 'nvidia', model: 'nvidia/nemotron-3-ultra-550b-a55b' };\n}\n\nexport type ChunkType = 'content' | 'thought' | 'tool_call' | 'usage';\n\n/**\n * Separate thinking process from main content safely\n */\nexport function extractThoughtAndContent(rawText: string): { thought: string; content: string } {\n let text = rawText || '';\n let thought = '';\n\n // 1. Explicit <think>...</think> tags\n const thinkMatch = text.match(/<think>([\\s\\S]*?)<\\/think>/i);\n if (thinkMatch) {\n thought = thinkMatch[1].trim();\n text = text.replace(/<think>[\\s\\S]*?<\\/think>/gi, '').trim();\n } else if (text.includes('<think>')) {\n // Unclosed <think> tag\n const parts = text.split('<think>');\n text = parts[0].trim();\n thought = parts[1].trim();\n }\n\n // 2. Patterns like \"Here's a thinking process: ... \\n\\n# Main Title\"\n if (!thought && (text.startsWith(\"Here's a thinking process:\") || text.startsWith(\"Thinking Process:\"))) {\n // Look for markdown heading (# or ## or ๐ฏ or 1. or ---) as transition to main answer\n const splitRegex = /\\n(?=(?:#|##|###|๐ฏ|๐งญ|๐|๐|1\\.\\s+[A-Z\\u00C0-\\u1EF9]|---))/m;\n const match = text.search(splitRegex);\n if (match > 0) {\n thought = text.slice(0, match).trim();\n text = text.slice(match).trim();\n }\n }\n\n // 3. Strip outer markdown codeblock fence if AI wrapped the entire document\n let content = text.trim();\n if (content.startsWith('```markdown')) {\n content = content.replace(/^```markdown\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n } else if (content.startsWith('```md')) {\n content = content.replace(/^```md\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n } else if (content.startsWith('```') && content.endsWith('```') && !content.includes('---')) {\n content = content.replace(/^```\\w*\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n }\n\n return {\n thought: thought.trim(),\n content: content.trim()\n };\n}\n\n/**\n * Idle-based abort controller. Unlike AbortSignal.timeout() โ which kills a\n * request after a fixed TOTAL time even while tokens are streaming โ this\n * only aborts when no data arrives for `idleMs`. Every network read resets\n * the window, so long artifact generations can run for many minutes while\n * genuinely hung connections are still detected.\n */\nfunction createIdleAbortController(idleMs: number) {\n const controller = new AbortController();\n let timer: ReturnType<typeof setTimeout> | null = null;\n const arm = () => {\n if (timer) clearTimeout(timer);\n timer = setTimeout(\n () => controller.abort(new Error(`Idle timeout: no data for ${Math.round(idleMs / 1000)}s`)),\n idleMs\n );\n (timer as any)?.unref?.();\n };\n arm();\n return {\n signal: controller.signal,\n /** Reset the idle window (call on every received chunk). */\n kick: arm,\n /** Clear the pending timer once the request lifecycle is over. */\n dispose: () => {\n if (timer) clearTimeout(timer);\n timer = null;\n }\n };\n}\ntype IdleAbort = ReturnType<typeof createIdleAbortController>;\n\n/**\n * Helper to process an OpenAI-compatible SSE response stream with Thinking & Tool Call streaming\n */\nasync function processOpenAISSEStream(\n response: Response,\n onChunk?: (token: string, type: ChunkType) => void,\n idle?: IdleAbort,\n toolCallCollector?: Map<string, { id: string; name: string; argsBuffer: string }>\n): Promise<string> {\n if (!response.body) return '';\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let fullRaw = '';\n let buffer = '';\n let insideThinkTag = false;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n idle?.kick();\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (trimmed === 'data: [DONE]') continue;\n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.substring(6));\n\n // 0. Capture exact provider token usage if available in the SSE stream\n if (json.usage) {\n const promptTokens = json.usage.prompt_tokens || json.usage.input_tokens || 0;\n const completionTokens = json.usage.completion_tokens || json.usage.output_tokens || 0;\n const totalTokens = json.usage.total_tokens || (promptTokens + completionTokens);\n const reasoningTokens = json.usage.completion_tokens_details?.reasoning_tokens || 0;\n if (onChunk) {\n onChunk(JSON.stringify({ promptTokens, completionTokens, totalTokens, reasoningTokens }), 'usage');\n }\n }\n\n const delta = json.choices?.[0]?.delta;\n if (!delta) continue;\n\n // 1. Explicit reasoning_content (DeepSeek / Qwen / Claude / Gemini on OpenRouter)\n const reasoning = delta.reasoning_content || delta.thought || delta.reasoning || delta.thought_process || '';\n if (reasoning) {\n if (onChunk) onChunk(reasoning, 'thought');\n }\n\n // 2. Tool Calls โ stream ra UI + aggregate thร nh call hoร n chแปnh khi cรณ collector\n if (delta.tool_calls) {\n const toolStr = JSON.stringify(delta.tool_calls);\n if (onChunk) onChunk(toolStr, 'tool_call');\n if (toolCallCollector) {\n for (const tc of delta.tool_calls) {\n const idx = String(tc.index ?? tc.id ?? '0');\n const existing = toolCallCollector.get(idx) || { id: tc.id || `call_${idx}`, name: '', argsBuffer: '' };\n if (tc.id) existing.id = tc.id;\n if (tc.function?.name) existing.name += tc.function.name;\n if (tc.function?.arguments) existing.argsBuffer += tc.function.arguments;\n toolCallCollector.set(idx, existing);\n }\n }\n }\n\n // 3. Content tokens (handle inline <think> tags dynamically)\n let content = delta.content || '';\n if (content) {\n fullRaw += content;\n\n if (content.includes('<think>')) {\n insideThinkTag = true;\n const parts = content.split('<think>');\n if (parts[0] && onChunk) onChunk(parts[0], 'content');\n content = parts[1] || '';\n }\n if (content.includes('</think>')) {\n insideThinkTag = false;\n const parts = content.split('</think>');\n if (parts[0] && onChunk) onChunk(parts[0], 'thought');\n content = parts[1] || '';\n }\n\n if (insideThinkTag) {\n if (onChunk && content) onChunk(content, 'thought');\n } else if (content) {\n if (onChunk) onChunk(content, 'content');\n }\n }\n } catch {\n // Incomplete JSON chunk, skip\n }\n }\n }\n }\n\n idle?.dispose();\n\n // Final sanity cleanup so raw output has thinking separated\n const extracted = extractThoughtAndContent(fullRaw);\n return extracted.content || fullRaw;\n}\n\n/**\n * Helper to process a Google Gemini SSE stream with Thought streaming\n */\nasync function processGeminiSSEStream(\n response: Response,\n onChunk?: (token: string, type: ChunkType) => void,\n idle?: IdleAbort\n): Promise<string> {\n if (!response.body) return '';\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let fullText = '';\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n idle?.kick();\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.substring(6));\n\n if (json.usageMetadata) {\n const promptTokens = json.usageMetadata.promptTokenCount || 0;\n const completionTokens = json.usageMetadata.candidatesTokenCount || 0;\n const totalTokens = json.usageMetadata.totalTokenCount || (promptTokens + completionTokens);\n if (onChunk) {\n onChunk(JSON.stringify({ promptTokens, completionTokens, totalTokens }), 'usage');\n }\n }\n\n const parts = json.candidates?.[0]?.content?.parts || [];\n for (const part of parts) {\n if (part.thought) {\n if (onChunk) onChunk(part.text || '', 'thought');\n } else if (part.text) {\n fullText += part.text;\n if (onChunk) onChunk(part.text, 'content');\n }\n }\n } catch {\n // Incomplete JSON chunk, skip\n }\n }\n }\n }\n idle?.dispose();\n return fullText;\n}\n\n/**\n * Real-time Streaming Multi-Provider Inference Runner with Thinking & Tool Streaming\n */\nexport async function streamCurriculumAIInference(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions = {},\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n const openrouterKey = resolveApiKey('OPENROUTER_API_KEY', options.openrouterKey);\n const deepseekKey = resolveApiKey('DEEPSEEK_API_KEY', options.deepseekKey);\n const alibabaKey = resolveApiKey('ALIBABA_API_KEY', options.alibabaKey) || resolveApiKey('DASHSCOPE_API_KEY');\n const geminiKey = resolveApiKey('GEMINI_API_KEY', options.geminiKey) || resolveApiKey('NEXT_PUBLIC_GEMINI_API_KEY');\n const nvidiaKey = resolveApiKey('NVIDIA_API_KEY', options.nvidiaKey);\n\n const temperature = options.temperature ?? 0.3;\n // Default to 32768 tokens (32k) so long reasoning, deep curriculum artifacts, code labs, and quizzes are never truncated\n const maxTokens = options.maxTokens ?? 32768;\n\n const basePersona = options.systemPersona || 'You are Curriculum OS Assistant โ Senior AI Technical Curriculum Architect & Educational Content Specialist.';\n\n const systemInstruction = `${basePersona}\n\nProject Context:\n${projectContext}\n\nGuidelines:\n1. You have full context of the project hierarchy, syllabus, lessons, and learning objectives. Answer precisely, deeply, and directly.\n2. Complete responses fully without truncation. When generating tables or roadmaps, include all sections/milestones.\n3. Keep technical terminology and official API symbols intact.\n4. Format output using clean Markdown, clear sections, bullet points, and code blocks where required.\n5. Do NOT use emojis in headings, tab titles, or UI navigation labels.`;\n\n const formattedMessages = [\n { role: 'system', content: systemInstruction },\n ...messages.map(m => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'assistant' : 'user',\n content: m.content\n }))\n ];\n\n // Collect failure errors for full traceability\n const providerErrors: Record<string, string> = {};\n\n const requestedModel = options.model || '@preset/coding-free';\n const isNvidiaPreferred = requestedModel.startsWith('nvidia/') || (Boolean(nvidiaKey && !openrouterKey) && isProviderEnabled('nvidia'));\n\n // โโ Route 1: NVIDIA NIM (Nemotron Suite) โโ\n if (nvidiaKey && isProviderEnabled('nvidia')) {\n const candidateNemotronModels = [\n requestedModel.startsWith('nvidia/') ? requestedModel : 'nvidia/nemotron-3-ultra-550b-a55b',\n 'nvidia/nemotron-3-ultra-550b-a55b',\n 'nvidia/nemotron-3.5-lightning-30b-a3b',\n 'nvidia/nemotron-3-super-120b-a12b',\n 'nvidia/llama-3.1-nemotron-70b-instruct'\n ].filter(m => isModelAllowed(m));\n const uniqueNvidiaModels = Array.from(new Set(candidateNemotronModels));\n\n if (isNvidiaPreferred || uniqueNvidiaModels.length > 0) {\n for (const model of uniqueNvidiaModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://integrate.api.nvidia.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${nvidiaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`nvidia_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`nvidia_${model}`] = e?.message || 'Network error';\n console.warn(`[NVIDIA Stream] Failover for ${model}:`, e?.message || e);\n }\n }\n }\n }\n\n // โโ Route 2: OpenRouter (Primary Free Presets & Models) โโ\n if (openrouterKey && isProviderEnabled('openrouter')) {\n const openrouterModels = [\n requestedModel,\n 'openrouter/free',\n 'nvidia/nemotron-3-super-120b-a12b:free',\n 'nvidia/nemotron-3-ultra-550b-a55b:free',\n 'nvidia/nemotron-3.5-lightning:free',\n 'minimax/minimax-m3:free',\n 'cohere/north-mini-code:free',\n ].filter(m => isModelAllowed(m));\n const uniqueOrModels = Array.from(new Set(openrouterModels));\n\n for (const model of uniqueOrModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://openrouter.ai/api/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${openrouterKey}`,\n 'Content-Type': 'application/json',\n 'HTTP-Referer': 'https://orchable.composer',\n 'X-Title': 'Curriculum OS Studio'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`openrouter_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n if (res.status === 429) {\n console.warn(`[OpenRouter] Rate limited (429) for ${model}, trying fallback...`);\n }\n }\n } catch (e: any) {\n providerErrors[`openrouter_${model}`] = e?.message || 'Network error';\n console.warn(`[OpenRouter Stream] Failover for ${model}:`, e?.message || e);\n }\n }\n }\n\n // โโ Route 3: DeepSeek Official API (Configurable via ENABLE_DEEPSEEK=true) โโ\n if (deepseekKey && isProviderEnabled('deepseek')) {\n const dsModel = options.model?.includes('deepseek-reasoner') ? 'deepseek-reasoner' : 'deepseek-chat';\n if (isModelAllowed(dsModel)) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://api.deepseek.com/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${deepseekKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model: dsModel,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors['deepseek'] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors['deepseek'] = e?.message || 'Network error';\n console.warn(`[DeepSeek Stream] Failover:`, e?.message || e);\n }\n }\n }\n\n // โโ Route 4: Alibaba DashScope / Qwen Cloud (Configurable via ENABLE_ALIBABA=true) โโ\n if (alibabaKey && isProviderEnabled('alibaba')) {\n const qwenModels = (options.model?.startsWith('qwen')\n ? [options.model, 'qwen3.7-plus', 'qwen3.6-flash']\n : ['qwen3.7-plus', 'qwen3.6-flash']).filter(m => isModelAllowed(m));\n\n const baseUrl = alibabaKey.startsWith('sk-sp-')\n ? 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions'\n : 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions';\n\n for (const qwenModel of qwenModels) {\n try {\n const idle = createIdleAbortController(180000);\n const payload: any = {\n model: qwenModel,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n };\n\n const res = await fetch(baseUrl, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${alibabaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(payload),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`alibaba_${qwenModel}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`alibaba_${qwenModel}`] = e?.message || 'Network error';\n console.warn(`[Alibaba Stream] Failover for ${qwenModel}:`, e?.message || e);\n }\n }\n }\n\n // โโ Route 5: Google Gemini Direct (Configurable via ENABLE_GEMINI=true) โโ\n if (geminiKey && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n const geminiModels = (options.model?.startsWith('gemini')\n ? [options.model, 'gemini-1.5-flash', 'gemini-2.0-flash']\n : ['gemini-1.5-flash', 'gemini-2.0-flash']).filter(m => isModelAllowed(m));\n\n const geminiContents = [\n { role: 'user', parts: [{ text: systemInstruction }] },\n { role: 'model', parts: [{ text: 'Tรดi ฤรฃ hiแปu rรต toร n bแป bแปi cแบฃnh dแปฑ รกn vร sแบตn sร ng hแป trแปฃ bแบกn mแปt cรกch chuyรชn sรขu, chรญnh xรกc nhแบฅt.' }] },\n ...messages.map(m => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'model' : 'user',\n parts: [{ text: m.content }]\n }))\n ];\n\n for (const gModel of geminiModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${gModel}:streamGenerateContent?alt=sse&key=${geminiKey}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n contents: geminiContents,\n generationConfig: {\n temperature,\n maxOutputTokens: maxTokens,\n }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processGeminiSSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`gemini_${gModel}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`gemini_${gModel}`] = e?.message || 'Network error';\n console.warn(`[Gemini Stream] Failover for ${gModel}:`, e?.message || e);\n }\n }\n }\n\n // โโ Route 6: Ultimate Designated Fallback Chain (Configurable via FALLBACK_AI_PROVIDER / FALLBACK_AI_MODEL) โโ\n const fallbackChain = getDesignatedFallbackChain();\n if (fallbackChain.length > 0) {\n console.log(\n `[streamRunner] ๐ก๏ธ Primary routes failed/exhausted. Invoking designated last-resort fallback chain:`,\n fallbackChain.map((c) => `${c.provider}(${c.model})`).join(' -> ')\n );\n\n for (const target of fallbackChain) {\n const { provider, model } = target;\n\n if (provider === 'nvidia' && nvidiaKey && isProviderEnabled('nvidia')) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://integrate.api.nvidia.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${nvidiaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] โ
Designated fallback NVIDIA (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_nvidia_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_nvidia_${model}`] = e?.message || 'Network error';\n }\n } else if (provider === 'openrouter' && openrouterKey && isProviderEnabled('openrouter')) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://openrouter.ai/api/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${openrouterKey}`,\n 'Content-Type': 'application/json',\n 'HTTP-Referer': 'https://orchable.composer',\n 'X-Title': 'Curriculum OS Studio'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] โ
Designated fallback OpenRouter (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_openrouter_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_openrouter_${model}`] = e?.message || 'Network error';\n }\n } else if ((provider === 'alibaba' || provider === 'dashscope') && alibabaKey && isProviderEnabled('alibaba')) {\n const baseUrl = alibabaKey.startsWith('sk-sp-')\n ? 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions'\n : 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions';\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch(baseUrl, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${alibabaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] โ
Designated fallback Alibaba (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_alibaba_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_alibaba_${model}`] = e?.message || 'Network error';\n }\n } else if ((provider === 'google' || provider === 'gemini') && geminiKey && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n try {\n const idle = createIdleAbortController(180000); const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${geminiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n contents: [\n { role: 'user', parts: [{ text: systemInstruction }] },\n { role: 'model', parts: [{ text: 'Understood. I will follow the project context and guidelines.' }] },\n ...messages.map((m) => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'model' : 'user',\n parts: [{ text: m.content }]\n }))\n ],\n generationConfig: {\n temperature,\n maxOutputTokens: maxTokens\n }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processGeminiSSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] โ
Designated fallback Gemini (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_gemini_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_gemini_${model}`] = e?.message || 'Network error';\n }\n }\n }\n }\n\n const isRateLimited = Object.values(providerErrors).some(msg => msg.includes('429'));\n const isAuthFailed = Object.values(providerErrors).some(msg => msg.includes('401') || msg.includes('403'));\n\n const errorCode = isRateLimited\n ? 'ERR_AI_RATE_LIMIT'\n : isAuthFailed\n ? 'ERR_AI_AUTH_FAILED'\n : 'ERR_AI_ALL_PROVIDERS_FAILED';\n\n throw createAiInferenceError({\n errorCode,\n message: `Khรดng thแป kแบฟt nแปi tแปi cรกc nhร cung cแบฅp AI trong chuแปi Fallback. Chi tiแบฟt: ${JSON.stringify(providerErrors)}`,\n rawError: providerErrors\n });\n}\n\n/**\n * Synchronous Multi-Model Inference Wrapper with strict error propagation\n */\nexport async function runCurriculumAIInference(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions = {},\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n return await streamCurriculumAIInference(messages, projectContext, options, onChunk);\n}\n","import { createGoogleGenerativeAI } from '@ai-sdk/google';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createDeepSeek } from '@ai-sdk/deepseek';\nimport type { LanguageModel } from 'ai';\nimport { isProviderEnabled, isModelAllowed, getDesignatedFallbackConfig } from './streamRunner';\n\nexport type AIProviderName = 'google' | 'openai' | 'deepseek' | 'alibaba' | 'dashscope' | 'ollama' | 'nvidia' | 'openrouter';\n\nexport interface ModelResolutionOptions {\n provider?: AIProviderName;\n modelName?: string;\n apiKey?: string;\n baseURL?: string;\n}\n\nconst DEFAULT_MODELS: Record<string, string> = {\n nvidia: 'nvidia/nemotron-3-ultra-550b-a55b',\n openrouter: '@preset/coding-free',\n alibaba: 'qwen3.7-plus',\n dashscope: 'qwen3.7-plus',\n google: 'gemini-1.5-flash',\n deepseek: 'deepseek-chat',\n openai: 'gpt-4o-mini',\n ollama: 'deepseek-v4-flash:0731',\n};\n\nexport const NVIDIA_MODELS = {\n codingFast: 'nvidia/nemotron-3.5-lightning-30b-a3b',\n reasoningUltra: 'nvidia/nemotron-3-ultra-550b-a55b',\n superMoE: 'nvidia/nemotron-3-super-120b-a12b',\n llamaNemotron: 'nvidia/llama-3.1-nemotron-70b-instruct',\n translation: 'nvidia/riva-translate-4b-instruct-v2',\n embedding: 'nvidia/nemotron-3-embed-1b',\n visionLlama: 'meta/llama-3.2-11b-vision-instruct',\n} as const;\n\n/**\n * Resolves a Vercel AI SDK LanguageModel instance based on provider options or environment variables.\n * Automatically falls back to designated fallback provider/model if requested provider is disabled.\n */\nexport function getAIModel(options: ModelResolutionOptions = {}): LanguageModel {\n const designated = getDesignatedFallbackConfig();\n const defaultProvider = process.env.DEFAULT_AI_PROVIDER || process.env.LLM_PROVIDER || detectDefaultProvider();\n let provider = (options.provider || defaultProvider).toLowerCase() as AIProviderName;\n\n // If requested provider is disabled in .env, automatically route to designated fallback\n if (!isProviderEnabled(provider)) {\n console.warn(`[provider-factory] Provider \"${provider}\" is disabled via environment toggle. Falling back to designated provider \"${designated.provider}\".`);\n provider = designated.provider as AIProviderName;\n }\n\n let resolvedModelName =\n options.modelName ||\n process.env.DEFAULT_AI_MODEL ||\n process.env.LLM_MODEL ||\n DEFAULT_MODELS[provider] ||\n designated.model;\n\n if (!isModelAllowed(resolvedModelName)) {\n console.warn(`[provider-factory] Model \"${resolvedModelName}\" is not permitted by ALLOWED_AI_MODELS. Using designated model \"${designated.model}\".`);\n resolvedModelName = designated.model;\n }\n\n if (provider === 'nvidia') {\n const apiKey = options.apiKey || process.env.NVIDIA_API_KEY || '';\n const nvidia = createOpenAI({\n apiKey,\n baseURL: options.baseURL || 'https://integrate.api.nvidia.com/v1',\n });\n return nvidia.chat(resolvedModelName || 'nvidia/nemotron-3-ultra-550b-a55b');\n }\n\n if (provider === 'openrouter') {\n const apiKey = options.apiKey || process.env.OPENROUTER_API_KEY || process.env.OPENAI_API_KEY || '';\n const openrouter = createOpenAI({\n apiKey,\n baseURL: options.baseURL || 'https://openrouter.ai/api/v1',\n });\n return openrouter.chat(resolvedModelName || '@preset/coding-free');\n }\n\n if (provider === 'alibaba' || provider === 'dashscope') {\n const effectiveKey =\n options.apiKey ||\n process.env.ALIBABA_API_KEY ||\n process.env.DASHSCOPE_API_KEY ||\n process.env.SAAS_ALIBABA_API_KEY ||\n process.env.SAAS_DASHSCOPE_API_KEY ||\n '';\n\n let defaultBaseURL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n if (effectiveKey.startsWith('sk-sp-')) {\n defaultBaseURL = 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1';\n }\n\n const rawUrl = options.baseURL || process.env.ALIBABA_BASE_URL || process.env.DASHSCOPE_BASE_URL || defaultBaseURL;\n const cleanBaseURL = rawUrl.replace(/^[\"']|[\"']$/g, '').trim();\n\n const alibaba = createOpenAI({\n apiKey: effectiveKey,\n baseURL: cleanBaseURL,\n // Passthrough: no forced format injection โ the Vercel AI SDK's generateObject\n // already instructs the model to return JSON via its schema definition.\n // Injecting 'Output format: JSON.' into markdown-based lesson prompts caused\n // model confusion (mixed markdown + JSON output).\n });\n\n return alibaba.chat(resolvedModelName);\n }\n\n if (provider === 'google') {\n const apiKey = options.apiKey || process.env.GOOGLE_GENERATIVE_AI_API_KEY || process.env.GEMINI_API_KEY || '';\n const google = createGoogleGenerativeAI({ apiKey });\n return google(resolvedModelName);\n }\n\n if (provider === 'deepseek') {\n const apiKey = options.apiKey || process.env.DEEPSEEK_API_KEY || process.env.SAAS_DEEPSEEK_API_KEY || '';\n const deepseek = createDeepSeek({ apiKey });\n return deepseek(resolvedModelName);\n }\n\n if (provider === 'openai') {\n const apiKey = options.apiKey || process.env.OPENAI_API_KEY || '';\n const openai = createOpenAI({\n apiKey,\n baseURL: options.baseURL || process.env.OPENAI_BASE_URL,\n });\n return openai.chat(resolvedModelName);\n }\n\n if (provider === 'ollama') {\n const apiKey = options.apiKey || process.env.OLLAMA_API_KEY || 'ollama';\n const baseURL = options.baseURL || process.env.OLLAMA_BASE_URL || process.env.OPENAI_BASE_URL || 'http://127.0.0.1:11434/v1';\n const ollama = createOpenAI({\n apiKey,\n baseURL,\n });\n return ollama.chat(resolvedModelName || 'qwen2.5:latest');\n }\n\n // Fallback to OpenAI-compatible\n const fallback = createOpenAI({\n apiKey: options.apiKey || process.env.OPENAI_API_KEY || '',\n baseURL: options.baseURL || process.env.OPENAI_BASE_URL,\n });\n return fallback.chat(resolvedModelName);\n}\n\nfunction detectDefaultProvider(): AIProviderName {\n if (process.env.NVIDIA_API_KEY && isProviderEnabled('nvidia')) {\n return 'nvidia';\n }\n if (process.env.OPENROUTER_API_KEY && isProviderEnabled('openrouter')) {\n return 'openrouter';\n }\n if ((process.env.ALIBABA_API_KEY || process.env.DASHSCOPE_API_KEY || process.env.SAAS_ALIBABA_API_KEY) && isProviderEnabled('alibaba')) {\n return 'alibaba';\n }\n if ((process.env.GOOGLE_GENERATIVE_AI_API_KEY || process.env.GEMINI_API_KEY) && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n return 'google';\n }\n if ((process.env.DEEPSEEK_API_KEY || process.env.SAAS_DEEPSEEK_API_KEY) && isProviderEnabled('deepseek')) {\n return 'deepseek';\n }\n if (process.env.OPENAI_API_KEY && process.env.OPENAI_API_KEY !== 'ollama' && isProviderEnabled('openai')) {\n return 'openai';\n }\n return getDesignatedFallbackConfig().provider as AIProviderName;\n}\n","import { z } from 'zod';\n\n// โโโ Shared sub-schemas โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const LearningObjectiveRowSchema = z.object({\n code: z.string().describe('LO code, e.g. \"LO1\"'),\n objective: z.string().describe('Bloom-tagged learning objective'),\n evidence: z.string().describe('Observable student evidence / output'),\n successCriteria: z.string().describe('Measurable pass/fail condition'),\n /**\n * Standards anchors (Phase 1: optional). Format: \"statementId\" or\n * \"packId:statementId\", e.g. \"csta-k12-2017:1B-AP-10\". IDs MUST exist in an\n * adopted Framework Pack โ the Standards Coverage Gate resolves and audits them.\n */\n standardRefs: z.array(z.string()).optional().default([]).describe('Anchoring standard statement IDs from adopted Framework Packs'),\n /** Ontora knowledge-tree anchors, e.g. \"ontora:WHILE_LOOP\" (optional, Phase 1). */\n conceptRefs: z.array(z.string()).optional().default([]).describe('Anchoring ontora concept codes, e.g. \"ontora:FOR_LOOP\"'),\n});\n\nexport const ActivitySeqRowSchema = z.object({\n seq: z.coerce.number().int(),\n phase: z.string().describe('EDP or 5E phase label'),\n activityType: z.string().describe('e.g. \"Mini-lecture\", \"Brainstorming\", \"Hands-on Coding\"'),\n actor: z.string().describe('\"Teacher\" | \"Students\" | \"Teacher + Students\"'),\n purpose: z.string().describe('Why this activity is done'),\n studentAction: z.string(),\n teacherMove: z.string(),\n outputEvidence: z.string(),\n lo: z.array(z.string()).describe('e.g. [\"LO1\",\"LO2\"]'),\n durationMinutes: z.coerce.number().default(10),\n artifactContract: z.string().describe('Satellite artifact(s) linked, e.g. \"SLIDE_U03_M01_L13\"'),\n});\n\nexport const ResourceMapRowSchema = z.object({\n resourceType: z.string().describe('\"Slide Deck\" | \"Handout\" | \"Starter Code\" | \"Lab Tools\" | etc.'),\n identifier: z.string(),\n description: z.string(),\n location: z.string().default(''),\n});\n\nexport const AssessmentMapRowSchema = z.object({\n form: z.string().describe('\"Formative Checkpoint\" | \"Summative Assessment\" | \"Peer Feedback\"'),\n when: z.string().describe('When in the sequence this is assessed'),\n tool: z.string().describe('Assessment tool or artifact used'),\n criteria: z.string(),\n performanceLevels: z.string().default(''),\n remediationPath: z.string().default(''),\n});\n\nexport const ArtifactContractRowSchema = z.object({\n artifactId: z.string(),\n artifactType: z.string(),\n description: z.string(),\n requiredSections: z.string().default(''),\n format: z.string().default(''),\n owner: z.string().default(''),\n});\n\nexport const LessonFlowPhaseSchema = z.object({\n phase: z.string().describe('Phase title, e.g. \"ASK\", \"ENGAGE\", \"PLAN\"'),\n durationMinutes: z.coerce.number(),\n content: z.string().describe('Full narrative content of this phase (teacher actions, student actions, code, outputs)'),\n});\n\nexport const TroubleshootingRowSchema = z.object({\n issue: z.string(),\n potentialCause: z.string(),\n solution: z.string(),\n});\n\n// โโโ Shared base for both Lesson models โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nconst LessonBaseSchema = z.object({\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n estimatedDuration: z.string().describe('e.g. \"90 minutes\"'),\n projectObjective: z.string(),\n materials: z.string().default(''),\n learningObjectives: z.array(LearningObjectiveRowSchema).min(1),\n activitySequence: z.array(ActivitySeqRowSchema).min(1),\n resourceMap: z.array(ResourceMapRowSchema).default([]),\n assessmentMap: z.array(AssessmentMapRowSchema).default([]),\n artifactContract: z.array(ArtifactContractRowSchema).default([]),\n lessonFlow: z.array(LessonFlowPhaseSchema).min(1),\n teacherNotes: z.string().optional().default(''),\n troubleshooting: z.array(TroubleshootingRowSchema).default([]),\n});\n\n// โโโ LESSON_EDP: Engineering Design Process โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Lesson Plan Schema โ EDP (Engineering Design Process) Model\n * Template: LESSON_EDP_template.md\n * Phases: Ask โ Imagine โ Plan โ Create โ Test & Improve โ Share & Evaluate\n */\nexport const EDPPhaseEnum = z.enum([\n 'Ask',\n 'Imagine',\n 'Plan',\n 'Create',\n 'Test & Improve',\n 'Share & Evaluate',\n]);\n\nexport const LessonPlanEDPSchema = LessonBaseSchema.extend({\n artifactType: z.literal('LESSON_EDP').default('LESSON_EDP'),\n});\n\nexport type LessonPlanEDP = z.infer<typeof LessonPlanEDPSchema>;\n\n// โโโ LESSON_5E: 5E Instructional Model โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Lesson Plan Schema โ 5E Instructional Model\n * Template: LESSON_5E_template.md\n * Phases: Engage โ Explore โ Explain โ Elaborate โ Evaluate\n */\nexport const FiveEPhaseEnum = z.enum([\n 'Engage',\n 'Explore',\n 'Explain',\n 'Elaborate',\n 'Evaluate',\n]);\n\n/** Additional 5E-specific Lesson Flow fields */\nexport const FiveEFlowPhaseSchema = LessonFlowPhaseSchema.extend({\n hookScenario: z.string().optional().describe('Hook story/roleplay for Engage phase (5E-specific)'),\n openQuestion: z.string().optional().describe('Explicit guiding question posed to class'),\n visualIllustration: z.string().optional().describe('Mermaid diagram, code, or JSON snippet for Explain phase'),\n tieredScaffolding: z.object({\n bronze: z.string().default(''),\n silver: z.string().default(''),\n gold: z.string().default(''),\n }).optional(),\n exitTicketQuestions: z.array(z.string()).optional(),\n});\n\nexport const LessonPlan5ESchema = LessonBaseSchema.extend({\n artifactType: z.literal('LESSON_5E').default('LESSON_5E'),\n lessonFlow: z.array(FiveEFlowPhaseSchema).min(1),\n keywords: z.array(z.string()).default([]),\n}).omit({ lessonFlow: true }).extend({\n lessonFlow: z.array(FiveEFlowPhaseSchema).min(1),\n});\n\nexport type LessonPlan5E = z.infer<typeof LessonPlan5ESchema>;\n\n// โโโ Legacy LESSON schema (kept for backward compatibility) โโโโโโโโโโโโโโโโโโ\n\nexport const CoreConceptSchema = z.object({\n name: z.string(),\n analogy: z.string().default(''),\n technicalDepth: z.string().default(''),\n comparisonTable: z.object({\n headers: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n }).optional(),\n formulaOrRule: z.string().optional().default(''),\n});\n\nexport const LessonSectionSchema = z.object({\n title: z.string(),\n durationMinutes: z.coerce.number().default(15),\n teacherActions: z.string().default(''),\n studentActions: z.string().default(''),\n analogies: z.array(z.string()).optional().default([]),\n formativeCheck: z.string().optional().default(''),\n});\n\n/**\n * @deprecated Use LessonPlanEDPSchema or LessonPlan5ESchema instead.\n * Kept for backward compatibility with existing data.\n */\nexport const LessonPlanSchema = z.object({\n artifactType: z.literal('LESSON').default('LESSON'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('vi'),\n topic: z.string().default('General Topic'),\n targetGradeOrAudience: z.string().default('Learners'),\n overview: z.string(),\n learningObjectives: z.array(z.object({\n code: z.string().default('LO'),\n name: z.string().optional().default(''),\n description: z.string(),\n bloomLevel: z.string().default('understand'),\n successCriteria: z.string().optional().default(''),\n })).default([]),\n prerequisites: z.string().optional().default(''),\n materialsSummary: z.string().optional().default(''),\n keywords: z.array(z.string()).optional().default([]),\n hookTitle: z.string().optional().default(''),\n hookScenario: z.string().default(''),\n hookQuestions: z.array(z.string()).optional().default([]),\n coreConcepts: z.array(CoreConceptSchema).optional().default([]),\n guidedPractice: z.object({\n title: z.string().default(''),\n explanation: z.string().default(''),\n codeSnippet: z.string().default(''),\n codeLanguage: z.string().default('typescript'),\n mermaidDiagram: z.string().optional().default(''),\n }).optional(),\n independentPractice: z.object({\n title: z.string().default(''),\n description: z.string().default(''),\n }).optional(),\n differentiation: z.object({\n bronzeTier: z.string().default(''),\n silverTier: z.string().default(''),\n goldTier: z.string().default(''),\n }).default({ bronzeTier: '', silverTier: '', goldTier: '' }),\n sections: z.array(LessonSectionSchema).min(1),\n exitTicket: z.object({\n questionStem: z.string(),\n expectedAnswerOrRubric: z.string().default(''),\n metacognitivePrompt: z.string().default(''),\n }),\n teacherNotes: z.object({\n commonPitfalls: z.array(z.string()).default([]),\n troubleshootingMatrix: z.array(TroubleshootingRowSchema).default([]),\n extensionNotes: z.string().optional().default(''),\n }).optional().default({ commonPitfalls: [], troubleshootingMatrix: [], extensionNotes: '' }),\n});\n\nexport type LessonPlan = z.infer<typeof LessonPlanSchema>;\nexport type CoreConcept = z.infer<typeof CoreConceptSchema>;\nexport type TroubleshootingRow = z.infer<typeof TroubleshootingRowSchema>;\nexport type ActivitySeqRow = z.infer<typeof ActivitySeqRowSchema>;\nexport type LessonFlowPhase = z.infer<typeof LessonFlowPhaseSchema>;\nexport type LearningObjectiveRow = z.infer<typeof LearningObjectiveRowSchema>;\n","import { z } from 'zod';\n\n/**\n * Activity Lab Schema โ Hands-on Step-by-Step Inquiry-Based Practical Lab\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/ACT_template.md\n */\nexport const ActivityStepSchema = z.object({\n stepNumber: z.coerce.number().default(1),\n title: z.string().describe('Short descriptive title of this step'),\n durationMinutes: z.coerce.number().default(10).describe('Estimated duration for this step'),\n teacherInstructions: z.string().default('').describe('Guidance and checkpoint tips for the teacher'),\n studentInstructions: z.string().describe('Direct, clear, actionable step-by-step instructions for students'),\n checkpoint: z.string().optional().default('').describe('Clear observable checkpoint or success indicator for this step'),\n});\n\nexport const ComputationalThinkingSchema = z.object({\n problemStatement: z.string().describe('Tรฌnh huแปng thแปฑc tแบฟ ฤแบงy thรกch thแปฉc cแบงn giแบฃi quyแบฟt'),\n decomposition: z.array(z.string()).describe('Cรกc bฦฐแปc phรขn rรฃ bร i toรกn lแปn thร nh cรกc phแบงn nhแป'),\n algorithmDesign: z.string().describe('Thiแบฟt kแบฟ luแปng thuแบญt toรกn vร xแปญ lรฝ dแปฏ liแปu trฦฐแปc khi code'),\n});\n\nexport const ActiveLearningWorkflowSchema = z.object({\n phase1Planning: z.object({\n durationMinutes: z.coerce.number().default(15),\n studentTask: z.string().describe('Vแบฝ sฦก ฤแป, thiแบฟt kแบฟ luแปng trรชn giแบฅy/bแบฃng trฦฐแปc khi gรต phรญm'),\n teacherAction: z.string().describe('Quan sรกt vร ฤแบทt cรขu hแปi gแปฃi mแป (Inquiry questions)'),\n inquiryQuestions: z.array(z.string()).default([]),\n }),\n phase2Implementation: z.object({\n durationMinutes: z.coerce.number().default(40),\n studentTask: z.string().describe('Hiแปn thแปฑc hรณa giแบฃi phรกp qua code hoแบทc lแบฏp rรกp phแบงn cแปฉng'),\n teacherAction: z.string().describe('Hแป trแปฃ khi hแปc sinh bแป tแบฏc > 5 phรบt, trรกnh lร m hแป'),\n codeOrCommands: z.array(z.string()).default([]),\n }),\n phase3Debugging: z.object({\n durationMinutes: z.coerce.number().default(15),\n testingSteps: z.string().describe('Quy trรฌnh chแบกy thแปญ nghiแปm vร kiแปm tra ฤแบงu ra'),\n errorAnalysis: z.string().describe('Phรขn tรญch mรฃ lแปi vร tแปฑ gแปก lแปi dแปฑa trรชn bแบฃng Troubleshooting'),\n }),\n});\n\nexport const ActivityLabSchema = z.object({\n artifactType: z.literal('ACT').default('ACT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Activity title'),\n language: z.string().default('vi').describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n objective: z.string().describe('Core hands-on objective of the activity'),\n totalDurationMinutes: z.coerce.number().default(60).describe('Total estimated duration of the activity'),\n \n // 1. Computational Thinking Focus\n computationalThinking: ComputationalThinkingSchema.optional(),\n\n // 2. Bill of Materials (BOM)\n materialsBOM: z.object({\n hardware: z.array(z.string()).default([]).describe('Hardware boards, components, sensors, or devices required (bแปc trong <!-- [HARDWARE_BOM] -->)'),\n software: z.array(z.string()).default([]).describe('IDE, compilers, browser tools, libraries, or simulators required'),\n consumables: z.array(z.string()).default([]).describe('Paper, pens, wires, or disposable items'),\n otherResources: z.array(z.string()).default([]).describe('Worksheets, handouts, or reference links'),\n }),\n\n // 3. Constraints & Safety\n safetyWarnings: z.array(z.string()).default([]).describe('Essential safety cautions, electrical warnings, or common hazards'),\n designConstraints: z.array(z.string()).default([]).describe('Design constraints to stimulate creative problem solving'),\n teacherTips: z.array(z.string()).default([]).describe('Pedagogical facilitation tips, troubleshooting tricks'),\n\n // 4. Workflow (Phases or Steps)\n activeLearningWorkflow: ActiveLearningWorkflowSchema.optional(),\n steps: z.array(ActivityStepSchema).default([]).describe('Step-by-step procedure of the activity'),\n\n // 5. Differentiation (3-Tier)\n differentiation3Tier: z.object({\n bronzeTier: z.string().default('').describe('Nhiแปm vแปฅ nแปn tแบฃng cฦก bแบฃn'),\n silverTier: z.string().default('').describe('Nhiแปm vแปฅ แปฉng dแปฅng logic nรขng cao'),\n goldTier: z.string().default('').describe('Thแปญ thรกch sรกng tแบกo mแป rแปng'),\n }).optional(),\n scaffoldingSupport: z.string().default('').describe('How to simplify for struggling students'),\n levelUpExtension: z.string().default('').describe('Extension task for students who finish early'),\n\n // 6. Reflection\n reflectionQuestion: z.string().optional().default('').describe('Cรขu hแปi phแบฃn tฦฐ kรญch thรญch tฦฐ duy phแบฃn biแปn'),\n});\n\nexport type ActivityLab = z.infer<typeof ActivityLabSchema>;\nexport type ComputationalThinking = z.infer<typeof ComputationalThinkingSchema>;\nexport type ActiveLearningWorkflow = z.infer<typeof ActiveLearningWorkflowSchema>;\n","import { z } from 'zod';\n\n/**\n * Code Lab Schema โ Executable Source Code, Starters, Solutions & Test Cases\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/LAB_TEMPLATE.md\n */\nexport const CodeSnippetSchema = z.object({\n filename: z.string().describe('Filename with extension, e.g. main.py, App.swift, solution.ts'),\n language: z.string().describe('Programming language identifier, e.g. python, swift, typescript, cpp'),\n purpose: z.enum(['starter', 'solution', 'test_runner', 'scaffold']).describe('Role of this code file'),\n content: z.string().describe('Complete, clean, runnable source code with standardized comments and docstrings'),\n explanation: z.string().default('').describe('Explanation of key algorithmic blocks and syntax nuances'),\n});\n\nexport const LabTierTaskSchema = z.object({\n mins: z.coerce.number().default(15),\n objective: z.string().describe('Mแปฅc tiรชu cแปงa tแบงng nhiแปm vแปฅ'),\n task: z.string().describe('Mรด tแบฃ nhiแปm vแปฅ cแปฅ thแป'),\n requirement: z.string().describe('Tiรชu chรญ hoร n thร nh bแบฏt buแปc'),\n});\n\nexport const CodeLabSchema = z.object({\n artifactType: z.literal('CODE').default('CODE'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Code Lab title'),\n language: z.string().default('vi').describe('Language code for human explanations, e.g. \"vi\" or \"en\"'),\n techStack: z.array(z.string()).default([]).describe('Technologies used, e.g. [\"Python\", \"PyTorch\"] or [\"Swift\", \"SwiftUI\"]'),\n \n // 1. Environment & Setup\n environmentSetup: z.object({\n languageFramework: z.string().default(''),\n ideEditor: z.string().default(''),\n requiredLibraries: z.array(z.string()).default([]),\n hardwareOrEnvConnection: z.string().optional().default(''),\n }).optional(),\n\n // 2. 3-Tier Differentiation Tasks\n threeTierTasks: z.object({\n bronze: LabTierTaskSchema,\n silver: LabTierTaskSchema,\n gold: LabTierTaskSchema,\n }).optional(),\n\n // 3. Verified Runnable Code Snippets (bแปc trong <!-- [SME_MANDATE] -->)\n starterCode: CodeSnippetSchema.describe('Starter code provided to the learner with fill-in markers or skeletons'),\n solutionCode: CodeSnippetSchema.describe('Complete verified reference solution code'),\n testCases: z.array(\n z.object({\n description: z.string().describe('What this test case verifies'),\n input: z.string().optional().default('').describe('Input or mock parameters'),\n expectedOutput: z.string().describe('Expected return value, output, or UI state'),\n })\n ).default([]).describe('Automated verification tests or validation checks'),\n\n // 4. Troubleshooting & Debugging Matrix\n troubleshootingMatrix: z.array(\n z.object({\n issue: z.string().describe('Hiแปn tฦฐแปฃng lแปi runtime/compile'),\n potentialCause: z.string().describe('Nguyรชn nhรขn tiแปm แบฉn'),\n solution: z.string().describe('Giแบฃi phรกp khแบฏc phแปฅc dแปฉt ฤiแปm'),\n })\n ).default([]),\n commonBugsAndFixes: z.array(\n z.object({\n bugDescription: z.string().describe('Common error message or logical pitfall'),\n solutionHint: z.string().describe('How to diagnose and fix it'),\n })\n ).default([]),\n\n // 5. Submission Checklist\n submissionChecklist: z.array(z.string()).default([]).describe('Danh mแปฅc kiแปm tra hoร n thร nh nแปp bร i'),\n});\n\nexport type CodeLab = z.infer<typeof CodeLabSchema>;\nexport type CodeSnippet = z.infer<typeof CodeSnippetSchema>;\nexport type LabTierTask = z.infer<typeof LabTierTaskSchema>;\n","import { z } from 'zod';\n\n// โโโ Worksheet Item โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const WorksheetItemTypeEnum = z.enum([\n 'fill_blank', // Fill in the blanks sentence/table\n 'multiple_choice', // Select the correct option\n 'matching', // Match left column to right column\n 'short_answer', // Open-ended text response\n 'code_trace', // Trace through code and write output\n 'diagram_fill', // Complete a circuit/flow diagram\n 'true_false', // True or False statement\n 'ordering', // Arrange steps/phases in correct order\n]);\n\nexport const WorksheetItemSchema = z.object({\n itemNumber: z.coerce.number().int().default(1),\n itemType: WorksheetItemTypeEnum,\n prompt: z.string().describe('The question, fill-in stem, or task instruction'),\n starterContent: z.string().optional().describe(\n 'Pre-filled content: code with blanks, table skeleton, diagram description, or matching columns'\n ),\n options: z.array(z.string()).optional().describe('Options for multiple_choice / true_false items'),\n answerKey: z.string().optional().describe('Expected answer for teacher use'),\n checkpointRequired: z.boolean().default(false).describe(\n 'If true, student must get teacher sign-off before proceeding'\n ),\n});\n\n// โโโ Worksheet Part โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const WorksheetPartSchema = z.object({\n partNumber: z.coerce.number().int(),\n partTitle: z.string().describe('e.g. \"Knowledge Check\", \"Guided Practice\", \"Concept Tracing\", \"Reflection\"'),\n objective: z.string().optional().default(''),\n items: z.array(WorksheetItemSchema).min(1),\n checkpointInstruction: z.string().optional().describe(\n 'Instruction shown at the end of this part, e.g. \"โ Hoร n thร nh Part 1 โ Xin giรกo viรชn kiแปm tra\"'\n ),\n});\n\n// โโโ Full Worksheet โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Worksheet Schema โ Student-Facing Guided Practice Document\n * Template: WKS_template.md\n * Sections: Knowledge Check โ Guided Practice โ Reflection\n * (Actual lessons expand to 4-5 parts with circuit/code tasks)\n */\nexport const WorksheetSchema = z.object({\n artifactType: z.literal('WKS').default('WKS'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Student header fields\n studentName: z.string().optional().default(''),\n classLabel: z.string().optional().default(''),\n\n // Main content: array of Parts (Part 1: Knowledge Check, Part 2: Guided Practice, etc.)\n parts: z.array(WorksheetPartSchema).min(1),\n\n // Reflection / Computational Thinking prompts (Part 3 in template, standalone)\n reflectionPrompts: z.array(z.string()).default([]),\n});\n\nexport type Worksheet = z.infer<typeof WorksheetSchema>;\nexport type WorksheetPart = z.infer<typeof WorksheetPartSchema>;\nexport type WorksheetItem = z.infer<typeof WorksheetItemSchema>;\n","import { z } from 'zod';\n\n/**\n * Handout Schema โ Student-Facing Quick-Reference Cheat Sheet (5-Second Rule)\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/HANDOUT_template.md\n */\nexport const HandoutSectionSchema = z.object({\n heading: z.string().describe('Short descriptive section heading (Max 3 levels)'),\n summaryPoints: z.array(z.string()).describe('Scannable bullet points in second-person voice (You will...)'),\n codeSnippet: z.string().optional().describe('Essential copy-paste ready syntax or command'),\n tableData: z.object({\n headers: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n }).optional().describe('Structured table for comparisons or hardware pinouts'),\n calloutBox: z.object({\n type: z.string().default('key_formula'),\n title: z.string(),\n content: z.string(),\n }).optional(),\n});\n\nexport const HandoutSchema = z.object({\n artifactType: z.literal('HANDOUT').default('HANDOUT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Handout title'),\n language: z.string().default('vi').describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n tagline: z.string().default('').describe('1-sentence core takeaway'),\n\n // 1. Core Concepts Summary\n coreConceptsSummary: z.array(\n z.object({\n concept: z.string().describe('Tรชn khรกi niแปm'),\n definition: z.string().describe('ฤแปnh nghฤฉa ngแบฏn gแปn, chuแบฉn 5-second'),\n })\n ).default([]),\n\n // 2. Syntax & Configs Table\n syntaxTable: z.array(\n z.object({\n syntax: z.string().describe('Cรบ phรกp lแปnh hoแบทc tรชn Node/Config'),\n meaning: z.string().describe('ร nghฤฉa & chแปฉc nฤng'),\n example: z.string().describe('Vรญ dแปฅ code hoแบทc cแบฅu hรฌnh mแบซu'),\n })\n ).default([]),\n\n // 3. General 3-Step Problem Solving Procedure\n problemSolvingProcedure: z.object({\n step1Trigger: z.string().default('Xรกc ฤแปnh input/trigger kรญch hoแบกt'),\n step2Logic: z.string().default('Xแปญ lรฝ logic, tรญnh toรกn hoแบทc lแปc dแปฏ liแปu'),\n step3Output: z.string().default('Xuแบฅt kแบฟt quแบฃ, cแบญp nhแบญt trแบกng thรกi hoแบทc gแปญi cแบฃnh bรกo'),\n }).optional().default({\n step1Trigger: 'Xรกc ฤแปnh input/trigger kรญch hoแบกt',\n step2Logic: 'Xแปญ lรฝ logic, tรญnh toรกn hoแบทc lแปc dแปฏ liแปu',\n step3Output: 'Xuแบฅt kแบฟt quแบฃ, cแบญp nhแบญt trแบกng thรกi hoแบทc gแปญi cแบฃnh bรกo',\n }),\n\n // 4. Pro Tips\n proTips: z.array(z.string()).default([]).describe('Mแบนo thแปฑc chiแบฟn hแปฏu รญch'),\n\n // 5. Sections & Glossary (Backward Compatibility)\n sections: z.array(HandoutSectionSchema).default([]).describe('Scannable reference sections'),\n glossary: z.array(\n z.object({\n term: z.string().describe('Technical term or acronym'),\n definition: z.string().describe('Plain, jargon-free explanation'),\n })\n ).default([]).describe('Zero-jargon glossary of terms introduced in this lesson'),\n});\n\nexport type Handout = z.infer<typeof HandoutSchema>;\nexport type HandoutSection = z.infer<typeof HandoutSectionSchema>;\n","import { z } from 'zod';\n\n/**\n * Slide Deck Schema โ Dynamic Micro-Pedagogy Marp Presentation Deck\n * Dynamic Sizing: 4-6 slides per core concept + opening/closing anchors (9-25+ slides)\n */\nexport const MarpSlideSchema = z.object({\n slideNumber: z.number().int().min(1).max(60),\n slideType: z.enum([\n 'title',\n 'agenda',\n 'review',\n 'hook',\n 'concept_def',\n 'concept_visual',\n 'concept_compare',\n 'concept_check',\n 'concept_recap',\n 'code_demo',\n 'guided_practice',\n 'activity_intro',\n 'activity_steps',\n 'checkpoint',\n 'exit_ticket',\n 'summary_next',\n 'custom',\n ]),\n title: z.string().describe('Slide title or headline'),\n bloomTag: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create', 'None']).default('None'),\n bulletPoints: z.array(z.string()).max(6).describe('Concise bullet points, max 15 words each'),\n codeSnippet: z.string().optional().describe('Formatted fenced code block for demo'),\n diagramMermaid: z.string().optional().describe('Mermaid diagram definition for visual concepts'),\n presenterNotes: z.string().optional().describe('Teacher speaker notes hidden in presentation mode'),\n});\n\nexport const SlideDeckSchema = z.object({\n artifactType: z.literal('SLIDE').default('SLIDE'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Presentation title'),\n language: z.string().describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n marpTheme: z.string().default('gaia'),\n slides: z.array(MarpSlideSchema).min(6).max(60).describe('Sequential Marp slides scaled dynamically by knowledge volume'),\n});\n\nexport type MarpSlide = z.infer<typeof MarpSlideSchema>;\nexport type SlideDeck = z.infer<typeof SlideDeckSchema>;\n","import { z } from 'zod';\n\n// โโโ Teaching Script Phase โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const TeachingScriptPhaseSchema = z.object({\n phase: z.string().describe(\n 'Phase label from GUIDE template: \"Hook / Engage\" | \"Explore / Core Concepts\" | \"Elaborate / Hands-on Activity\" | \"Evaluate / Wrap-up\"'\n ),\n durationRange: z.string().describe('e.g. \"5-10 minutes\"'),\n delivery: z.string().describe('Real-world story, demo, analogy, or inquiry activity'),\n keyPoints: z.string().describe('What to emphasize; what to skip if running late'),\n quickCheckQuestions: z.array(z.string()).default([]).describe('2-3 rapid comprehension check questions'),\n classroomManagement: z.string().optional().describe('Grouping, device management, seating'),\n facilitation: z.string().optional().describe('When to intervene vs. let students struggle productively'),\n proTips: z.string().optional().describe('Experience-based tips for this specific activity'),\n});\n\n// โโโ Misconception entry โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const MisconceptionSchema = z.object({\n misconception: z.string().describe('What students often wrongly assume or confuse'),\n counterStrategy: z.string().describe('How the teacher should explain or demonstrate the truth'),\n});\n\n// โโโ Troubleshooting entry โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const TroubleshootingEntrySchema = z.object({\n symptom: z.string().describe('Error message or hardware failure symptom'),\n rootCause: z.string().describe('Why this occurs'),\n solution: z.string().describe('Exact step to fix it'),\n});\n\n// โโโ Scoring Rubric row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ScoringRubricRowSchema = z.object({\n criteriaName: z.string(),\n meetsStandard: z.string().describe('Description of acceptable student performance'),\n exceedsStandard: z.string().describe('Description of advanced mastery'),\n});\n\n// โโโ Teacher Guide โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Teacher Guide Schema โ Pedagogical Facilitation Script\n * Template: GUIDE_template.md\n * Sections:\n * 1. Objectives & Preparation\n * 2. Teaching Script & Progression (Hook โ Explore โ Elaborate โ Evaluate)\n * 3. Troubleshooting & FAQs\n * 4. Assessment & Differentiation Tips\n */\nexport const TeacherGuideSchema = z.object({\n artifactType: z.literal('GUIDE').default('GUIDE'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // 1. Objectives & Preparation\n pedagogicalRationale: z.string().describe('The main instructional goal โ mindset shift, not just knowledge'),\n commonMisconceptions: z.array(MisconceptionSchema).min(1),\n technicalChecklist: z.array(z.string()).default([]).describe(\n 'Software/hardware to install; links to have open before class'\n ),\n\n // 2. Teaching Script & Progression\n teachingScript: z.array(TeachingScriptPhaseSchema).min(1).describe(\n 'Ordered phases: Hook/Engage โ Explore/Core Concepts โ Elaborate/Hands-on โ Evaluate/Wrap-up'\n ),\n\n // 3. Troubleshooting & FAQs\n troubleshootingGuide: z.array(TroubleshootingEntrySchema).min(1),\n\n // 4. Assessment & Differentiation\n scoringRubric: z.array(ScoringRubricRowSchema).default([]),\n differentiationTips: z.object({\n proficient: z.string().describe('Minimum threshold description for proficiency'),\n advanced: z.string().describe('Extension tasks / Peer mentoring opportunities'),\n enrichmentQuestion: z.string().optional().describe('1-2 deep-thinking questions for gifted students'),\n }).optional(),\n});\n\nexport type TeacherGuide = z.infer<typeof TeacherGuideSchema>;\nexport type TeachingScriptPhase = z.infer<typeof TeachingScriptPhaseSchema>;\nexport type TroubleshootingEntry = z.infer<typeof TroubleshootingEntrySchema>;\nexport type Misconception = z.infer<typeof MisconceptionSchema>;\n","import { z } from 'zod';\n\n/**\n * Extension Schema โ Advanced Challenges & Novel Context Problems\n */\nexport const ExtensionChallengeSchema = z.object({\n challengeNumber: z.number().int().min(1),\n title: z.string().describe('Catchy title for the extension project'),\n contextDescription: z.string().describe('Novel real-world context for applying the skill'),\n taskDescription: z.string().describe('Specific goal and requirements of the challenge'),\n expectedDeliverable: z.string().describe('What the student produces (code, prototype, report)'),\n hintOrGuidance: z.string().optional().describe('Open-ended exploration prompt'),\n});\n\nexport const ExtensionSchema = z.object({\n artifactType: z.literal('EXT').default('EXT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Extension title'),\n language: z.string().describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n coreLearningObjectivePreserved: z.string().describe('The core LO that this challenge extends'),\n challenges: z.array(ExtensionChallengeSchema).min(2).describe('At least 2 diverse extension challenges'),\n});\n\nexport type Extension = z.infer<typeof ExtensionSchema>;\n","import { z } from 'zod';\n\n/**\n * LLM-as-Judge Schema โ Pedagogical & Technical Quality Audit Report\n */\nexport const QualityAuditVerdictSchema = z.enum(['PASS', 'NEEDS_REVISION', 'FAIL']);\n\nexport const JudgeCriterionSchema = z.object({\n name: z.string().describe('Criterion name, e.g. Bloom Alignment, Code Validity, Word Count Gate, Language Adherence'),\n passed: z.boolean(),\n score: z.number().min(0).max(100).describe('Score out of 100'),\n feedback: z.string().describe('Constructive feedback or citation of issues'),\n});\n\nexport const CurriculumQualityReportSchema = z.object({\n targetArtifactType: z.string().describe('Type of artifact audited, e.g. LESSON, ACT, CODE, WKS, SLIDE'),\n lessonId: z.string(),\n overallVerdict: QualityAuditVerdictSchema,\n totalScore: z.number().min(0).max(100),\n languageAdherencePassed: z.boolean().describe('True if content strictly matches the requested target language'),\n criteria: z.array(JudgeCriterionSchema).min(3),\n actionableRepairPrompts: z.array(z.string()).default([]).describe('Concrete instruction prompts to fix detected issues in the next repair turn'),\n});\n\nexport type CurriculumQualityReport = z.infer<typeof CurriculumQualityReportSchema>;\n","import { z } from 'zod';\n\n/**\n * Project Profile & General Info\n */\nexport const ProjectProfileSchema = z.object({\n id: z.string().optional(),\n name: z.string(),\n version: z.string().optional(),\n purpose: z.string().optional(),\n project_type: z.string().optional(),\n platform: z.array(z.string()).optional().default([]),\n tech_stack: z.union([z.record(z.array(z.string())), z.array(z.string()), z.record(z.string())]).optional().default([]),\n architecture: z.array(z.string()).optional().default([]),\n source: z.object({\n repository: z.string().optional(),\n commit: z.string().optional(),\n scan_dir: z.string().optional(),\n }).optional(),\n});\n\nexport type ProjectProfile = z.infer<typeof ProjectProfileSchema>;\n\n/**\n * Product Goals & User Journeys\n */\nexport const ProductGoalSchema = z.object({\n id: z.string(),\n description: z.string(),\n});\n\nexport const UserJourneySchema = 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\n/**\n * Project Graph Schema โ Full knowledge graph of a software/hardware project\n */\nexport const ProjectGraphSchema = z.object({\n schema_version: z.number().optional().default(3),\n project: ProjectProfileSchema,\n product: z.object({\n goals: z.array(ProductGoalSchema).optional().default([]),\n users: z.array(z.any()).optional().default([]),\n journeys: z.array(UserJourneySchema).optional().default([]),\n requirements: z.array(z.any()).optional().default([]),\n }).optional().default({}),\n features: z.array(z.object({\n id: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n components: z.array(z.string()).optional().default([]),\n requirements: z.array(z.any()).optional().default([]),\n })).optional().default([]),\n capabilities: z.array(z.any()).optional().default([]),\n architecture: z.any().optional(),\n experience: z.any().optional(),\n data_integration: z.any().optional(),\n implementation: z.object({\n files: z.array(z.any()).optional().default([]),\n symbols: z.array(z.any()).optional().default([]),\n modules: z.array(z.any()).optional().default([]),\n }).optional().default({}),\n validation: z.any().optional(),\n evidence: z.any().optional(),\n});\n\nexport type ProjectGraph = z.infer<typeof ProjectGraphSchema>;\n","import { z } from 'zod';\n\n/**\n * Step schema matching Instructable-style tutorial format from tutorial.md\n */\nexport const InstructionStepSchema = z.object({\n stepNumber: z.string().default('1.1').describe('e.g. \"1.1\", \"1.2\"'),\n actionTitle: z.string().describe('Action verb title, e.g. \"Create Bonjour Discovery Browser\"'),\n explanation: z.string().describe('Explanation of why this action is performed and how it works'),\n targetFile: z.string().optional().default('').describe('Relative path of the target file being created or edited, e.g. \"Sources/WledLib/Discovery/BonjourBrowser.swift\"'),\n codeSnippet: z.string().optional().default('').describe('Complete or focused code snippet following grow-by-step or snippet-per-step style'),\n codeLanguage: z.string().optional().default('swift').describe('Language for syntax highlighting, e.g. \"swift\", \"typescript\", \"cpp\", \"bash\"'),\n tip: z.string().optional().default('').describe('Helpful operational tip or best practice'),\n warning: z.string().optional().default('').describe('Operational gotcha or critical warning'),\n expectedResult: z.string().default('').describe('Explicit observable output or success condition after completing this step'),\n imagePlaceholder: z.string().optional().default('').describe('Description of visual screenshot or diagram placeholder [IMAGE: ...]'),\n});\n\nexport const InstructionSectionSchema = z.object({\n sectionNumber: z.coerce.number().default(1),\n title: z.string().describe('Section title'),\n goal: z.string().describe('What the reader achieves in this section'),\n estimatedMinutes: z.coerce.number().default(15),\n preflightChecks: z.array(z.string()).default([]).describe('Commands or conditions to check before starting this section'),\n steps: z.array(InstructionStepSchema).min(1),\n rollbackOrCleanup: z.string().optional().default('').describe('How to undo or reset state if something fails'),\n});\n\nexport const ProjectInstructionSchema = z.object({\n artifactType: z.literal('INSTRUCTION').default('INSTRUCTION'),\n instructionId: z.string().describe('Milestone or instruction ID, e.g. \"F0-S1\"'),\n title: z.string().describe('Tutorial title'),\n language: z.string().describe('Target language code, e.g. \"vi\" or \"en\"'),\n difficulty: z.string().default('intermediate'),\n estimatedTotalMinutes: z.coerce.number().default(45).describe('Total estimated duration in minutes'),\n scopeMode: z.string().default('milestone'),\n milestoneRef: z.string().optional().default('').describe('Milestone code or ID'),\n featureRef: z.string().optional().default('').describe('Feature ID or name'),\n techStack: z.array(z.string()).default([]).describe('List of tools, SDKs, libraries'),\n prerequisites: z.array(z.string()).default([]).describe('Prerequisites assumed before starting'),\n materialsAndTools: z.array(z.string()).default([]).describe('Required software, SDKs, accounts, or simulators'),\n sections: z.array(InstructionSectionSchema).min(1),\n verificationChecklist: z.array(z.string()).default([]).describe('Final end-to-end verification checklist to confirm working implementation'),\n});\n\nexport type InstructionStep = z.infer<typeof InstructionStepSchema>;\nexport type InstructionSection = z.infer<typeof InstructionSectionSchema>;\nexport type ProjectInstruction = z.infer<typeof ProjectInstructionSchema>;\n","import { z } from 'zod';\n\n/**\n * 3-Level Progressive Hints Schema (Concept -> Skeleton -> Full Solution)\n */\nexport const ProgressiveHintsSchema = z.object({\n hint1Concept: z.string().describe('Level 1: Gแปฃi รฝ ฤแปnh hฦฐแปng tฦฐ duy / khรกi niแปm cแปt lรตi'),\n hint2Skeleton: z.string().describe('Level 2: Khung sฦฐแปn code / method signature mแบซu'),\n hint3Solution: z.object({\n code: z.string().describe('Level 3: Lแปi giแบฃi code hoร n chแปnh 100% runnable'),\n explanation: z.string().describe('Phรขn tรญch tแบกi sao giแบฃi phรกp nร y tแปi ฦฐu vร xแปญ lรฝ ฤฦฐแปฃc vแบฅn ฤแป'),\n }),\n});\n\n/**\n * Self-Learner Progressive Challenge Schema\n */\nexport const SelfPacedChallengeSchema = z.object({\n tier: z.enum(['bronze', 'silver', 'gold']),\n title: z.string().describe('Tรชn thแปญ thรกch'),\n estimatedMinutes: z.coerce.number().default(15),\n objective: z.string().describe('Mแปฅc tiรชu cแปฅ thแป cแปงa thแปญ thรกch'),\n tasks: z.array(z.string()).describe('Danh sรกch nhiแปm vแปฅ tแปซng bฦฐแปc cแบงn lร m'),\n verifyCommand: z.string().describe('Lแปnh terminal hoแบทc test runner ฤแป tแปฑ kiแปm chแปฉng (VD: curl... hoแบทc swift test)'),\n expectedOutput: z.string().describe('Kแบฟt quแบฃ mong ฤแปฃi hiแปn thแป trรชn terminal khi chแบกy ฤรบng'),\n hints: ProgressiveHintsSchema,\n});\n\nexport const SelfLabSchema = z.object({\n artifactType: z.literal('SELF_LAB').default('SELF_LAB'),\n labId: z.string().describe('Identifier matching milestone (e.g. F0-S1)'),\n title: z.string().describe('Lab title'),\n language: z.string().default('vi').describe('Language code of content, e.g. \"vi\" or \"en\"'),\n difficulty: z.enum(['beginner', 'intermediate', 'advanced']).default('intermediate'),\n estimatedTotalMinutes: z.coerce.number().default(60),\n techStack: z.array(z.string()).default([]),\n \n // Mission Briefing & Preflight\n missionBriefing: z.string().describe('Bแปi cแบฃnh kแปch bแบฃn vร nhiแปm vแปฅ cแปงa bร i lab'),\n preflightChecklist: z.array(z.string()).default([]).describe('Danh mแปฅc kiแปm tra mรดi trฦฐแปng trฦฐแปc khi bแบฏt ฤแบงu'),\n\n // 3 Progressive Challenges (Bronze -> Silver -> Gold)\n challenges: z.object({\n bronze: SelfPacedChallengeSchema,\n silver: SelfPacedChallengeSchema,\n gold: SelfPacedChallengeSchema,\n }),\n\n // Troubleshooting Matrix\n troubleshootingMatrix: z.array(\n z.object({\n symptom: z.string().describe('Triแปu chแปฉng hoแบทc thรดng bรกo lแปi'),\n rootCause: z.string().describe('Nguyรชn nhรขn gแปc rแป
'),\n exactFix: z.string().describe('Hฦฐแปng dแบซn sแปญa lแปi chรญnh xรกc tแปซng bฦฐแปc'),\n })\n ).default([]),\n\n // Final Checklist\n finalSubmissionChecklist: z.array(z.string()).default([]).describe('Danh mแปฅc kiแปm tra hoร n thร nh toร n bแป bร i lab'),\n});\n\nexport type SelfLab = z.infer<typeof SelfLabSchema>;\nexport type SelfPacedChallenge = z.infer<typeof SelfPacedChallengeSchema>;\nexport type ProgressiveHints = z.infer<typeof ProgressiveHintsSchema>;\n","import { z } from 'zod';\n\n// โโโ Quiz Assessment Objective (per template: ## Assessment Objectives) โโโโโโโ\n\nexport const AssessmentObjectiveSchema = z.object({\n aoCode: z.string().describe('Assessment Objective code, e.g. \"AO1\"'),\n alignedLO: z.string().describe('Matched learning objective code, e.g. \"LO1\"'),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create']),\n objective: z.string().describe('Measurable assessment objective statement'),\n /** Standards anchors: \"statementId\" or \"packId:statementId\" from adopted Framework Packs (Phase 1: optional). */\n standardRefs: z.array(z.string()).optional().default([]).describe('Anchoring standard statement IDs from adopted Framework Packs'),\n});\n\n// โโโ Quiz Option โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const QuizOptionSchema = z.object({\n id: z.string().describe('Option label: \"A\" | \"B\" | \"C\" | \"D\"'),\n text: z.string().describe('Full text of the option (may be a table row, code snippet, or sentence)'),\n isCorrect: z.boolean().describe('True if this option is the correct answer'),\n explanation: z.string().describe('Detailed distractor rationale or confirmation why this is correct/incorrect'),\n});\n\n// โโโ Individual Question โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const DiagnosticQuestionSchema = z.object({\n id: z.string().describe('Question ID, e.g. \"Q1\"'),\n alignedAO: z.string().optional().describe('Matched AO code(s), e.g. \"AO1, AO2\"'),\n // Accept both PascalCase (new) and lowercase (legacy) for backward compat\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n 'remember', 'understand', 'apply', 'analyze', 'evaluate', 'create']).default('Apply'),\n questionType: z.enum(['multiple_choice', 'code_analysis', 'matching', 'open_ended']).default('multiple_choice'),\n // scenarioOrStem: PRIMARY field โ kept for backward compat with evaluators & serializers\n scenarioOrStem: z.string().optional().describe('Legacy combined field. Evaluators read this for stem analysis.'),\n // scenario + stem: richer decomposition for new content (both optional)\n scenario: z.string().optional().describe('Real-world context framing the question'),\n stem: z.string().optional().describe('The core question prompt (new authoring standard)'),\n codeSnippet: z.string().optional().describe('Code block for code analysis questions'),\n codeLanguage: z.string().optional().default('cpp'),\n options: z.array(QuizOptionSchema).min(2).max(6),\n // correctAnswer: optional for backward compat with old fixtures (legacy used isCorrect on options)\n correctAnswer: z.string().optional().describe('Correct option id, e.g. \"A\"'),\n teacherNote: z.string().optional().describe('Pedagogical note for assessor/teacher only'),\n // takeawayMessage: backward-compat alias for teacherNote\n takeawayMessage: z.string().optional().describe('@deprecated โ use teacherNote. Kept for serializer backward compat.'),\n});\n\n// โโโ 4-Level Competency Rubric (per template: ## Competency Rubric) โโโโโโโโโโ\n\nexport const CompetencyRubricRowSchema = z.object({\n competencyDimension: z.string().describe('Competency label with linked LO, e.g. \"C1: Hardware Integration (LO1)\"'),\n developing: z.string().describe('Level 1 โ does not meet standard'),\n proficient: z.string().describe('Level 2 โ meets standard'),\n advanced: z.string().describe('Level 3 โ exceeds standard'),\n exemplary: z.string().describe('Level 4 โ outstanding mastery'),\n});\n\n// โโโ Full Diagnostic Quiz โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Diagnostic Quiz Schema โ v4.6\n * Template: QUIZ_v4.6_template.md\n * Sections: Metadata โ Assessment Objectives โ MCQ Bank โ Code Analysis โ Competency Rubric\n */\nexport const DiagnosticQuizSchema = z.object({\n artifactType: z.literal('QUIZ'),\n quizId: z.string().describe('Matching artifact identifier, e.g. \"QUIZ_U03_M01_L13\"'),\n title: z.string(),\n language: z.string().default('en').describe('\"en\" or \"vi\"'),\n totalQuestions: z.coerce.number().optional().default(5),\n timeAllocationMinutes: z.coerce.number().optional().default(15),\n passingScorePct: z.coerce.number().default(80),\n\n // Assessment Objectives table (## [REQUIRED] Assessment Objectives)\n assessmentObjectives: z.array(AssessmentObjectiveSchema).optional().default([]),\n\n // Question bank (## [REQUIRED] Multiple-Choice + ## [REQUIRED] Code Analysis)\n questions: z.array(DiagnosticQuestionSchema).min(1),\n\n // Competency Rubric (## [REQUIRED] Competency Rubric)\n rubric: z.array(CompetencyRubricRowSchema).optional().default([]),\n});\n\n// Output types (after defaults are applied โ for reading/processing parsed data)\nexport type DiagnosticQuiz = z.infer<typeof DiagnosticQuizSchema>;\nexport type DiagnosticQuestion = z.infer<typeof DiagnosticQuestionSchema>;\nexport type QuizOption = z.infer<typeof QuizOptionSchema>;\nexport type AssessmentObjective = z.infer<typeof AssessmentObjectiveSchema>;\nexport type CompetencyRubricRow = z.infer<typeof CompetencyRubricRowSchema>;\n\n// Input types (for writing/authoring โ fields with defaults are optional)\nexport type DiagnosticQuizInput = z.input<typeof DiagnosticQuizSchema>;\nexport type DiagnosticQuestionInput = z.input<typeof DiagnosticQuestionSchema>;\n","import { z } from 'zod';\nimport { ProjectInstructionSchema } from './instructionSchema';\nimport { SelfLabSchema } from './selfLabSchema';\nimport { DiagnosticQuizSchema } from './diagnosticQuizSchema';\nimport { HandoutSchema } from './handoutSchema';\nimport { CodeLabSchema } from './codeLabSchema';\n\n/**\n * Self-Paced Learning Bundle Schema โ Autonomous Learner Package\n */\nexport const SelfPacedBundleSchema = z.object({\n bundleId: z.string().describe('Milestone identifier (e.g. F0-S1)'),\n title: z.string().describe('Bundle title'),\n language: z.string().default('vi'),\n techStack: z.array(z.string()).default([]),\n instruction: ProjectInstructionSchema.describe('Instructable Step-by-Step Blueprint'),\n selfLab: SelfLabSchema.describe('Self-Paced Lab with Progressive Hints & Verification Commands'),\n quiz: DiagnosticQuizSchema.describe('Diagnostic Quiz Kit with Comprehensive Feedback'),\n cheatSheet: HandoutSchema.describe('5-Second Rule Reference & Syntax Cheat Sheet'),\n codeLab: CodeLabSchema.optional().describe('Code Lab with Starter & Solution Code'),\n});\n\nexport type SelfPacedBundle = z.infer<typeof SelfPacedBundleSchema>;\n","import { z } from 'zod';\n\n// โโโ Rubric Criteria Row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const RubricCriteriaSchema = z.object({\n criteriaName: z.string().describe('Criteria label, e.g. \"Circuitry\" or \"Code Correctness\"'),\n weightPercent: z.coerce.number().int().min(1).max(100).describe('Relative weight as integer %'),\n excellent: z.string().describe('Level 4 โ Excellent performance descriptor'),\n proficient: z.string().describe('Level 3 โ Proficient performance descriptor'),\n developing: z.string().describe('Level 2 โ Developing performance descriptor'),\n beginning: z.string().describe('Level 1 โ Beginning performance descriptor'),\n});\n\n// โโโ Exit Ticket (OPTIONAL within RUBRIC) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ExitTicketQuickItemSchema = z.object({\n question: z.string(),\n questionType: z.enum(['multiple_choice', 'true_false', 'short_answer', 'open_ended']),\n answerOrScoringGuide: z.string().default(''),\n});\n\n// โโโ Full Rubric โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Rubric Schema โ Summative / Formative Assessment Scoring Guide\n * Template: RUBRIC_template.md\n * Sections: Assessment Overview โ Rubric Table โ Exit Ticket โ Self-Assessment Checklist\n */\nexport const RubricSchema = z.object({\n artifactType: z.literal('RUBRIC').default('RUBRIC'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Assessment Overview\n assessmentType: z.enum(['Formative', 'Summative', 'Self-assessment', 'Peer-review']),\n assessmentFormat: z.enum([\n 'Short Exercise',\n 'Exit Ticket',\n 'Practical Product',\n 'Project Presentation',\n ]),\n targetLOs: z.array(z.string()).describe('LO codes being assessed, e.g. [\"LO1\", \"LO2\"]'),\n targetAudience: z.enum(['Teachers', 'Students']).default('Teachers').describe(\n '\"Teachers\" = technical/pedagogical language; \"Students\" = simple \"I can...\" language'\n ),\n\n // Rubric Table (weights should sum to ~100)\n criteria: z.array(RubricCriteriaSchema).min(1),\n\n // Optional quick exit ticket at end of session (โค3 items)\n exitTicket: z.array(ExitTicketQuickItemSchema).max(3).optional(),\n\n // Student self-assessment checklist\n selfAssessmentChecklist: z.array(z.string()).optional(),\n selfAssessmentReflection: z.string().optional().describe(\n 'Open-ended reflection prompt, e.g. \"One thing I am most proud of is:\"'\n ),\n});\n\nexport type Rubric = z.infer<typeof RubricSchema>;\nexport type RubricCriteria = z.infer<typeof RubricCriteriaSchema>;\n","import { z } from 'zod';\n\n// โโโ Exit Ticket Parts โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ExitTicketRecallPromptSchema = z.object({\n question: z.string().describe('Conceptual scenario or analogy comparison testing core mental model'),\n answerAreaLabel: z.string().default('Write 1-2 concise sentences'),\n});\n\nexport const ExitTicketBugHuntSchema = z.object({\n codeSnippet: z.string().describe('4-8 line realistic code snippet containing exactly 1 bug/missing annotation'),\n codeLanguage: z.string().default('swift'),\n tasks: z.array(z.string()).describe(\n 'Ordered task list, e.g. [\"Identify the Compiler/Runtime Error\", \"Write the corrected line\"]'\n ),\n expectedBugDescription: z.string().describe('The exact error type/message students should identify'),\n correctedLine: z.string().describe('The single corrected line of code'),\n});\n\nexport const ExitTicketMetacognitionSchema = z.object({\n options: z.array(z.object({\n label: z.string().describe('\"๐ข Green\" | \"๐ก Yellow\" | \"๐ด Red\"'),\n description: z.string().describe('e.g. \"I can build and explain to a peer without hints\"'),\n })).default([\n { label: '๐ข Green (Mastered)', description: 'I can build and explain this concept to a peer without any hints.' },\n { label: '๐ก Yellow (Needs Practice)', description: 'I understand the concept but got stuck on syntax or error messages.' },\n { label: '๐ด Red (Blocked)', description: 'I need help understanding why this architecture is used.' },\n ]),\n lingeringQuestion: z.string().default('What is one question you still have before leaving today\\'s lab?'),\n});\n\n// โโโ Full Exit Ticket โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Exit Ticket Schema โ Formative End-of-Session Assessment\n * Template: EXIT_TICKET_template.md\n * Sections:\n * Target LOs\n * Part 1: Recall & Conceptual Anchor\n * Part 2: Application & Bug Hunt\n * Part 3: Metacognitive Reflection & Confidence Check\n * Scoring & Teacher Intervention Trigger\n */\nexport const ExitTicketSchema = z.object({\n artifactType: z.literal('EXIT_TICKET').default('EXIT_TICKET'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n estimatedMinutes: z.coerce.number().default(7),\n\n // Target Learning Objectives\n targetLOs: z.array(z.object({\n code: z.string().describe('LO code, e.g. \"ULO\" or \"LO1\"'),\n loType: z.enum(['ULO', 'CIO', 'SIO']).optional(),\n description: z.string(),\n })),\n\n // Part 1: Recall & Conceptual Anchor\n recallPrompt: ExitTicketRecallPromptSchema,\n\n // Part 2: Application & Bug Hunt\n applicationPrompt: ExitTicketBugHuntSchema,\n\n // Part 3: Metacognitive Reflection\n metacognition: ExitTicketMetacognitionSchema,\n\n // Scoring & Intervention Trigger\n scoringGuide: z.object({\n proficiencyThreshold: z.string().describe('e.g. \"Green/Yellow check + Correct Bug Hunt answer\"'),\n interventionProtocol: z.string().describe('e.g. \"If โฅ25% Red, start next session with 5-min Live Debug Warm-up\"'),\n }),\n});\n\nexport type ExitTicket = z.infer<typeof ExitTicketSchema>;\nexport type ExitTicketBugHunt = z.infer<typeof ExitTicketBugHuntSchema>;\n","import { z } from 'zod';\n\n// โโโ Tier Definition โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const TierLevelEnum = z.enum(['Bronze', 'Silver', 'Gold']);\n\nexport const TierObjectiveSchema = z.object({\n tier: TierLevelEnum,\n bloomTarget: z.string().describe('e.g. \"Remember / Understand\" | \"Apply / Analyze\" | \"Evaluate / Create\"'),\n scaffoldingRatio: z.string().describe('e.g. \"70% Starter Code / 30% Fill-in\"'),\n successCriteria: z.string().describe('Condition that determines tier completion'),\n});\n\n// โโโ Bronze Tier โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const BronzeTierSchema = z.object({\n targetAudience: z.string().default('All learners (mandatory milestone)'),\n guidingPrompt: z.string().describe('Clear instruction with references to Handout'),\n starterCode: z.string().default('').describe('Pre-filled boilerplate code with TODO placeholders'),\n codeLanguage: z.string().default('swift'),\n fillInSlots: z.array(z.object({\n todoLabel: z.string().describe('e.g. \"TODO 1 [Bronze]\"'),\n instruction: z.string(),\n })).default([]),\n verificationTest: z.string().default('testBronzeBaseline()'),\n});\n\n// โโโ Silver Tier โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const SilverTierSchema = z.object({\n targetAudience: z.string().default('Learners who completed Bronze without mentor intervention'),\n guidingPrompt: z.string(),\n requirements: z.array(z.string()).min(1).describe('Numbered requirements: validation, state logic, user feedback'),\n implementationTarget: z.string().default('').describe('Skeleton or description of what to implement'),\n codeLanguage: z.string().default('swift'),\n verificationTest: z.string().default('testSilverLogicAndValidation()'),\n});\n\n// โโโ Gold Tier โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const GoldTierSchema = z.object({\n targetAudience: z.string().default('Advanced learners finished ahead of schedule'),\n architecturalChallenge: z.string().describe('Open-ended architectural task'),\n constraints: z.array(z.string()).min(1).describe('Hard invariants, e.g. \"zero data-race under concurrent mutations\"'),\n verificationTest: z.string().optional().default('testGoldConcurrencySafety()'),\n});\n\n// โโโ Mentor Debugging Cheatsheet โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const MentorCheatsheetSchema = z.object({\n bronzeStumble: z.string().default('').describe('Most common Bronze mistake'),\n silverStumble: z.string().default('').describe('Most common Silver mistake'),\n goldDiscussionPrompt: z.string().optional().describe('Scaling / architecture discussion question'),\n});\n\n// โโโ Full Tiered Practice โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Tiered Practice Schema โ 3-Level Differentiated Practice Lab\n * Template: TIERED_PRACTICE_template.md\n * Sections:\n * Computational Objective & Tier Matrix\n * Bronze Tier (Foundational Scaffolding)\n * Silver Tier (Independent Application)\n * Gold Tier (Enrichment & Optimization)\n * Automated Test Verification Matrix\n * Mentor Debugging Cheatsheet\n */\nexport const TieredPracticeSchema = z.object({\n artifactType: z.literal('TIERED_PRACTICE').default('TIERED_PRACTICE'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Tier matrix overview\n tierMatrix: z.array(TierObjectiveSchema).length(3).describe('One entry per tier: Bronze, Silver, Gold'),\n\n // Tier content\n bronze: BronzeTierSchema,\n silver: SilverTierSchema,\n gold: GoldTierSchema,\n\n // Test suite reference\n testSuiteClass: z.string().optional().describe('XCTest class name, e.g. \"AlarmSystemTestSuite\"'),\n\n // Mentor hints\n mentorCheatsheet: MentorCheatsheetSchema.optional(),\n});\n\nexport type TieredPractice = z.infer<typeof TieredPracticeSchema>;\nexport type BronzeTier = z.infer<typeof BronzeTierSchema>;\nexport type SilverTier = z.infer<typeof SilverTierSchema>;\nexport type GoldTier = z.infer<typeof GoldTierSchema>;\n","import { z } from 'zod';\n\n// โโโ Single Bell Ringer day โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const BellRingerDaySchema = z.object({\n dayLabel: z.string().describe('e.g. \"Day 1 (Monday)\" or \"Day 1\"'),\n bloomLevel: z.enum([\n 'Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n ]).optional(),\n promptType: z.enum([\n 'mental_model_recall',\n 'code_tracing',\n 'bug_hunt',\n 'diagram_tracing',\n 'creative_synthesis',\n 'open_reflection',\n ]).default('open_reflection'),\n prompt: z.string().describe('The warm-up question or task shown on projector'),\n codeSnippet: z.string().optional().describe('Code to trace or debug'),\n codeLanguage: z.string().optional().default('cpp'),\n answerKey: z.string().optional().describe('Teacher-facing expected answer or rubric note'),\n});\n\n// โโโ Full Bell Ringer (5-day weekly pack) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Bell Ringer Schema โ 5-Day Weekly Warm-Up Pack\n * Template: BELL_RINGER_template.md\n * Sections: Weekly Objective โ Day 1-5 prompts โ Answer Key\n * Time: 3-5 min each session\n */\nexport const BellRingerSchema = z.object({\n artifactType: z.literal('BELL_RINGER'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n weeklyTheme: z.string().describe('Core concept theme for the week'),\n routineProtocol: z.string().optional().default(\n 'Display prompt on projector as students enter. Students write in Daily Journal before class discussion.'\n ),\n days: z.array(BellRingerDaySchema).min(1).max(7),\n});\n\nexport type BellRinger = z.infer<typeof BellRingerSchema>;\nexport type BellRingerDay = z.infer<typeof BellRingerDaySchema>;\nexport type BellRingerInput = z.input<typeof BellRingerSchema>;\n","import { z } from 'zod';\n\n// โโโ Glossary Term โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const GlossaryTermSchema = z.object({\n termName: z.string().describe('Term in the target language'),\n termNameEN: z.string().optional().describe('English term (for code/docs reference)'),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply']).optional(),\n simpleDefinition: z.string().describe('Max 2 sentences, age-appropriate, no jargon'),\n memoryAnalogy: z.string().describe('Analogy: \"This term is like [familiar thing]...\"'),\n realWorldExample: z.string().describe('1-3 line code snippet or 1-sentence real-world use case'),\n codeLanguage: z.string().optional().default(''),\n commonMistake: z.string().optional().describe('What students often confuse this with, and why'),\n seeMore: z.array(z.string()).optional().default([]).describe('Related term names'),\n});\n\n// โโโ Quick Reference Row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const GlossaryQuickRefRowSchema = z.object({\n termEN: z.string(),\n translation: z.string().optional().default(''),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply']).optional(),\n mnemonicKeywords: z.string().optional().default(''),\n});\n\n// โโโ Standardized Term โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const StandardizedTermRowSchema = z.object({\n technicalTerm: z.string(),\n note: z.string(),\n doNotUse: z.string().optional().default(''),\n});\n\n// โโโ Full Glossary โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Glossary Schema โ Module Vocabulary Reference\n * Template: GLOSSARY_template.md\n * Sections: Term entries (8-15 per module) โ Quick Reference Table โ Standardized Terms\n */\nexport const GlossarySchema = z.object({\n artifactType: z.literal('GLOSSARY'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n terms: z.array(GlossaryTermSchema).min(1).describe('Ordered from basic to advanced'),\n quickReferenceTable: z.array(GlossaryQuickRefRowSchema).optional().default([]),\n standardizedTerms: z.array(StandardizedTermRowSchema).optional().default([]),\n});\n\nexport type Glossary = z.infer<typeof GlossarySchema>;\nexport type GlossaryTerm = z.infer<typeof GlossaryTermSchema>;\nexport type GlossaryInput = z.input<typeof GlossarySchema>;\n","import { z } from 'zod';\n\n// โโโ 9-Square Choice Activity โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ChoiceSquareSchema = z.object({\n squareNumber: z.coerce.number().int().min(1).max(9),\n squareLabel: z.string().describe('e.g. \"Square 1: The Bug Hunter\"'),\n category: z.enum(['analytical', 'visual_architecture', 'creative_applied']).optional(),\n points: z.coerce.number().int().default(30),\n isCenterMaster: z.boolean().default(false).describe('True for the mandatory center โญ challenge'),\n description: z.string().describe('What the student must do'),\n deliverable: z.string().optional().describe('What to submit, e.g. \"Pull Request diff + clean build\"'),\n acceptanceCriteria: z.array(z.string()).optional().default([]),\n format: z.string().optional().describe('Submission format, e.g. \"Mermaid sequenceDiagram\"'),\n});\n\n// โโโ Choice Rule โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ChoiceRuleSchema = z.object({\n model: z.enum(['tic_tac_toe', 'point_balance', 'custom']).default('tic_tac_toe'),\n description: z.string().describe('How the student wins / completes the board'),\n minimumPoints: z.coerce.number().optional().describe('Minimum points for point_balance model'),\n mandatoryCategories: z.array(z.string()).optional().default([]),\n});\n\n// โโโ Rubric Row (reused from choice board context) โโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ChoiceBoardRubricRowSchema = z.object({\n criteriaName: z.string(),\n exemplary: z.string(),\n proficient: z.string(),\n developing: z.string(),\n beginning: z.string(),\n});\n\n// โโโ Full Choice Board โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Choice Board Schema โ 9-Square Differentiated Activity Matrix\n * Template: CHOICE_BOARD_template.md\n * Sections: Learning Goals & Rule โ 9-Square Matrix โ Activity Blueprints โ Rubric\n */\nexport const ChoiceBoardSchema = z.object({\n artifactType: z.literal('CHOICE_BOARD'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n coreConceptAnchor: z.string().describe('All options must demonstrate mastery of this invariant'),\n choiceRule: ChoiceRuleSchema,\n squares: z.array(ChoiceSquareSchema).min(1).max(9),\n rubric: z.array(ChoiceBoardRubricRowSchema).optional().default([]),\n});\n\nexport type ChoiceBoard = z.infer<typeof ChoiceBoardSchema>;\nexport type ChoiceSquare = z.infer<typeof ChoiceSquareSchema>;\nexport type ChoiceBoardInput = z.input<typeof ChoiceBoardSchema>;\n","import { z } from 'zod';\n\n// โโโ Graphic Organizer Item โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const OrganizerTypeEnum = z.enum([\n 'mermaid_flowchart', // Architectural data flow (graph TD/LR)\n 'mermaid_sequence', // Sequence / message flow diagram\n 'mermaid_state', // State machine / lifecycle diagram\n 'mermaid_er', // Entity-relationship diagram\n 'mermaid_class', // Class / OOP diagram\n 'venn_comparison', // Comparative analysis (2+ sets)\n 'fill_in_text', // ASCII/text fill-in exercise\n 'concept_map', // Node-link concept map (freeform)\n]);\n\nexport const GraphicOrganizerItemSchema = z.object({\n organizerNumber: z.coerce.number().int(),\n organizerTitle: z.string().describe('e.g. \"Architectural Data Flow\" or \"State Machine & Lifecycle\"'),\n organizerType: OrganizerTypeEnum,\n mermaidCode: z.string().optional().describe('Raw Mermaid.js diagram definition'),\n fillInTemplate: z.string().optional().describe('ASCII text fill-in box template'),\n wordBank: z.array(z.string()).optional().default([]).describe('Word bank for fill-in exercises'),\n cognitiveGoal: z.string().optional().describe('Why this diagram helps (Paivio dual-coding, etc.)'),\n requiredLabels: z.array(z.string()).optional().default([]).describe('Items students must correctly label'),\n});\n\n// โโโ Full Graphic Organizer โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Graphic Organizer Schema โ Visual Diagram-Based Learning Tool\n * Template: GRAPHIC_ORGANIZER_template.md\n * Sections: Visual Paradigm Overview โ Organizer 1/2/3 โ Student Fill-in Worksheet\n */\nexport const GraphicOrganizerSchema = z.object({\n artifactType: z.literal('GRAPHIC_ORGANIZER'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n cognitivePurpose: z.string().optional().describe(\n 'Cognitive design rationale, e.g. \"Dual-coding theory: spatial + verbal processing\"'\n ),\n organizers: z.array(GraphicOrganizerItemSchema).min(1),\n});\n\nexport type GraphicOrganizer = z.infer<typeof GraphicOrganizerSchema>;\nexport type GraphicOrganizerItem = z.infer<typeof GraphicOrganizerItemSchema>;\nexport type GraphicOrganizerInput = z.input<typeof GraphicOrganizerSchema>;\n","import { z } from 'zod';\n\n// โโโ CER (Claim-Evidence-Reasoning) conclusion โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const CERConclusionSchema = z.object({\n claim: z.string().describe('Direct 1-sentence answer to the driving question'),\n evidence: z.string().describe('Specific quantitative data from the collection table'),\n reasoning: z.string().describe('Connection between evidence and the technical principle'),\n});\n\n// โโโ Experimental Variable Design โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ExperimentalDesignSchema = z.object({\n hypothesisTemplate: z.string().describe(\n '\"If [action], then [predicted outcome] because [rationale].\"'\n ),\n independentVariable: z.string().describe('The variable being manipulated'),\n dependentVariable: z.string().describe('The variable being measured'),\n controlVariables: z.array(z.string()).optional().default([]).describe('Constants held fixed'),\n});\n\n// โโโ Science Lab โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Science Lab (CER Investigation) Schema\n * Template: SCIENCE_LAB_template.md\n * Sections: Guiding Inquiry โ Hypothesis & Design โ Data Protocol โ CER Conclusion โ Peer Review\n * Format: STEM/Code Investigation with Claim-Evidence-Reasoning framework\n */\nexport const ScienceLabSchema = z.object({\n artifactType: z.literal('SCIENCE_LAB'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n domain: z.string().optional().describe('e.g. \"Software Engineering / Concurrency\"'),\n\n // Guiding Inquiry\n drivingQuestion: z.string().describe('Real-world engineering driving question'),\n engineeringPhenomenon: z.string().optional().describe('Observed phenomenon requiring explanation'),\n\n // Hypothesis & Experimental Design\n experimentalDesign: ExperimentalDesignSchema,\n\n // Data Collection\n labSetupCode: z.string().optional().describe('Instrumentation / benchmark harness code'),\n labSetupCodeLanguage: z.string().optional().default('cpp'),\n dataCollectionColumns: z.array(z.string()).optional().default([]).describe('Table column headers'),\n trialCount: z.coerce.number().optional().default(4),\n\n // CER Conclusion\n cerTemplates: CERConclusionSchema.optional().describe('Pre-filled example or rubric for CER'),\n\n // Peer Review\n peerReviewProtocol: z.string().optional().describe(\n 'How groups exchange and verify each other\\'s results'\n ),\n reproducibilityTolerancePct: z.coerce.number().optional().default(10),\n});\n\nexport type ScienceLab = z.infer<typeof ScienceLabSchema>;\nexport type ScienceLabInput = z.input<typeof ScienceLabSchema>;\nexport type CERConclusion = z.infer<typeof CERConclusionSchema>;\n","import { z } from 'zod';\n\n// โโโ Individual Rotation Station โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const StationTypeEnum = z.enum([\n 'teacher_led', // Station 1: Small-group guided inquiry with teacher\n 'pair_lab', // Station 2: Collaborative hands-on pair programming\n 'digital_self_paced', // Station 3: Independent async code lab / LMS\n 'offline_modeling', // Station 4: No-screen diagram / whiteboard activity\n 'custom',\n]);\n\nexport const RotationStationSchema = z.object({\n stationNumber: z.coerce.number().int(),\n stationLabel: z.string().describe('e.g. \"Station 1: Teacher-Led (Guided Inquiry)\"'),\n stationType: StationTypeEnum,\n goal: z.string().describe('What students achieve at this station'),\n durationMinutes: z.coerce.number().optional().default(15),\n teacherScriptOrInquiry: z.string().optional().describe(\n 'Teacher talking points or inquiry prompts (for teacher_led station)'\n ),\n studentInstructions: z.string().optional().describe('Step-by-step student task'),\n materials: z.array(z.string()).optional().default([]),\n successMilestone: z.string().optional().describe('Observable completion criterion'),\n differentiationTrigger: z.string().optional().describe('What to do if students struggle'),\n});\n\n// โโโ Recording Sheet Row (Student Passport) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const StationRecordRowSchema = z.object({\n stationNumber: z.coerce.number().int(),\n taskCompleted: z.string(),\n verificationMethod: z.string().describe('Teacher stamp, peer signature, auto-token, etc.'),\n keyInsightPrompt: z.string().optional().default('What did you learn at this station?'),\n});\n\n// โโโ Full Station Rotation Pack โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Station Rotation Schema โ 4-Station Learning Pack\n * Template: STATION_ROTATION_template.md\n * Format: 4 stations ร 15 min (60-75 min total) with rotation bell protocol\n * Grouping: Heterogeneous groups of 4-6 students\n */\nexport const StationRotationSchema = z.object({\n artifactType: z.literal('STATION_ROTATION'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n totalDurationMinutes: z.coerce.number().optional().default(60),\n rotationDurationMinutes: z.coerce.number().optional().default(15),\n transitionBufferMinutes: z.coerce.number().optional().default(2),\n groupSize: z.string().optional().default('4-6 students'),\n groupingStrategy: z.string().optional().default('Heterogeneous'),\n stations: z.array(RotationStationSchema).min(2),\n recordingSheet: z.array(StationRecordRowSchema).optional().default([]),\n});\n\nexport type StationRotation = z.infer<typeof StationRotationSchema>;\nexport type RotationStation = z.infer<typeof RotationStationSchema>;\nexport type StationRotationInput = z.input<typeof StationRotationSchema>;\n","import { z } from 'zod';\n\n// โโโ Difficulty Tier Enum โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const CardTierEnum = z.enum(['bronze', 'silver', 'gold']);\n\n// โโโ Individual Task Card โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const TaskCardSchema = z.object({\n cardId: z.string().describe('e.g. \"CARD_01\"'),\n cardNumber: z.coerce.number().int(),\n setLabel: z.string().optional().describe(\n 'e.g. \"Set A: Foundational Concepts\" or \"Set B: Code Diagnosis\"'\n ),\n tier: CardTierEnum.optional().default('bronze'),\n points: z.coerce.number().int().optional().default(1),\n category: z.string().optional().describe(\n 'e.g. \"Vocabulary\", \"Code Tracing\", \"Bug Hunt\", \"Architecture\"'\n ),\n prompt: z.string().describe('The task / question printed on the card'),\n codeSnippet: z.string().optional().describe('Code to trace or debug'),\n codeLanguage: z.string().optional().default('cpp'),\n options: z.array(z.object({\n id: z.string(),\n text: z.string(),\n isCorrect: z.boolean().optional(),\n })).optional().default([]).describe('MCQ options (if applicable)'),\n hint: z.string().optional().describe('Student-facing hint'),\n answerKey: z.string().describe('Teacher-facing correct answer or solution blueprint'),\n answerPoints: z.coerce.number().int().optional().default(1),\n});\n\n// โโโ Full Task Cards Deck โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Task Cards Schema โ Printable Task Card Deck\n * Template: TASK_CARDS_template.md\n * Sets: A (Foundational), B (Debugging), C (Application/Synthesis)\n * Usage: Centers, Fast Finishers, Small Group Review, Station 4 Offline Activity\n */\nexport const TaskCardsSchema = z.object({\n artifactType: z.literal('TASK_CARDS'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n targetSkills: z.array(z.string()).optional().default([]).describe(\n 'e.g. [\"Conceptual Understanding\", \"Code Tracing\", \"Bug Hunting\"]'\n ),\n cardFormat: z.string().optional().default('4 cards per A4 page'),\n scoringSystem: z.string().optional().default(\n 'Bronze (1 pt), Silver (2 pts), Gold (3 pts)'\n ),\n cards: z.array(TaskCardSchema).min(1),\n});\n\nexport type TaskCards = z.infer<typeof TaskCardsSchema>;\nexport type TaskCard = z.infer<typeof TaskCardSchema>;\nexport type TaskCardsInput = z.input<typeof TaskCardsSchema>;\n","import { z } from 'zod';\n\n// โโโ Game Question / Challenge โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ReviewGameQuestionSchema = z.object({\n questionId: z.string().optional(),\n round: z.coerce.number().int().min(1).max(3).describe('1=Speed, 2=Code Duel, 3=Final Boss'),\n points: z.coerce.number().int(),\n category: z.string().optional().describe('e.g. \"Vocabulary & Syntax\", \"Mental Model\"'),\n prompt: z.string().describe('The question or challenge shown to teams'),\n codeSnippet: z.string().optional(),\n codeLanguage: z.string().optional().default(''),\n options: z.array(z.object({\n id: z.string(),\n text: z.string(),\n isCorrect: z.boolean().optional(),\n })).optional().default([]).describe('MCQ options for Round 1'),\n answerOrExplanation: z.string().describe('Correct answer or winning explanation'),\n timeLimit: z.coerce.number().optional().default(20).describe('Seconds'),\n bonusMechanic: z.string().optional().describe('e.g. \"Teams can wager points\"'),\n});\n\n// โโโ Kahoot/Quizizz Export Row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const ReviewGameExportRowSchema = z.object({\n question: z.string(),\n option1: z.string(),\n option2: z.string(),\n option3: z.string().optional().default(''),\n option4: z.string().optional().default(''),\n correctAnswer: z.coerce.number().int().min(1).max(4).describe('1-indexed correct option'),\n timeLimitSec: z.coerce.number().optional().default(20),\n});\n\n// โโโ Full Review Game Pack โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/**\n * Review Game Schema โ Interactive Quiz Show Pack\n * Template: REVIEW_GAME_template.md\n * Format: 3 Rounds (Speed โ Code Duel โ Final Boss Architecture)\n * Compatible with: Kahoot, Quizizz, Jeopardy live classroom format\n */\nexport const ReviewGameSchema = z.object({\n artifactType: z.literal('REVIEW_GAME'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n\n // Setup\n format: z.string().optional().default('3 rounds, progressive difficulty, team buzzers'),\n teamSize: z.string().optional().default('3-5 students'),\n hasBonusWager: z.boolean().optional().default(true).describe('Teams can wager points on Round 3'),\n\n // Questions per round\n questions: z.array(ReviewGameQuestionSchema).min(1),\n\n // Export-ready format for Kahoot / Quizizz\n exportRows: z.array(ReviewGameExportRowSchema).optional().default([]),\n});\n\nexport type ReviewGame = z.infer<typeof ReviewGameSchema>;\nexport type ReviewGameQuestion = z.infer<typeof ReviewGameQuestionSchema>;\nexport type ReviewGameInput = z.input<typeof ReviewGameSchema>;\n","import { z } from 'zod';\n\n/**\n * CurriculumPlan โ machine-readable SOT for curriculum planning.\n *\n * Produced by the Curriculum Planner (curriculumPlannerService) from a domain\n * planning graph (CurriculumFeed v2 or raw domain-kit graph shapes) plus\n * course constraints and policy. CURRICULUM_FRAMEWORK.md is a human-readable\n * projection of this plan; LESSON production consumes a session slice of it.\n */\n\n// [7] Canonical decision vocabularies (the ONLY legal values)\n\nexport const PrerequisiteDecisionSchema = z.enum([\n 'mastered_before_course', // entry-level knowledge โ referenced, not taught\n 'taught_in_prior_lesson', // formally taught in an earlier session\n 'recap_in_lesson', // re-activated at the start of this session\n 'jit_introduce_in_lesson', // introduced just-in-time inside this session\n 'scaffolded_provide', // not taught โ supplied ready-made (scaffold)\n]);\nexport type PrerequisiteDecision = z.infer<typeof PrerequisiteDecisionSchema>;\n\nexport const ScaffoldDecisionSchema = z.enum([\n 'student_builds',\n 'provide_partial',\n 'provide_full',\n 'provide_reference',\n]);\nexport type ScaffoldDecision = z.infer<typeof ScaffoldDecisionSchema>;\n\nexport const DepthLevelSchema = z.enum(['ulo', 'cio', 'sio']);\nexport type DepthLevel = z.infer<typeof DepthLevelSchema>;\n\nexport const BloomLevelSchema = z.enum([\n 'Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n]);\nexport type BloomLevel = z.infer<typeof BloomLevelSchema>;\n\nexport const EntryLevelSchema = z.enum(['beginner', 'intermediate', 'advanced']);\nexport const NodeKindSchema = z.enum(['skill', 'concept', 'product_step']);\n\n// Shared atoms\n\nconst LessonCodeSchema = z.string().regex(/^U\\d{2}_M\\d{2}_L\\d{2}$/, 'lesson code must match UXX_MYY_LZZ');\n\nconst SourceCiteSchema = z.object({\n node_ids: z.array(z.string()).default([]),\n concept_codes: z.array(z.string()).default([]),\n});\n\nexport const CourseObjectiveSchema = z.object({\n id: z.string(),\n statement: z.string().min(8),\n bloom: BloomLevelSchema,\n sources: SourceCiteSchema,\n});\nexport type CourseObjective = z.infer<typeof CourseObjectiveSchema>;\n\nexport const UnitPlanSchema = z.object({\n id: z.string().regex(/^U\\d{2}$/),\n name: z.string().min(3),\n objectives: z.array(CourseObjectiveSchema).min(1),\n node_ids: z.array(z.string()).min(1),\n total_minutes: z.number().int().positive(),\n rationale: z.string().min(3),\n // Phases fully contained in this unit (empty for non-phase plans)\n phase_ids: z.array(z.string()).default([]),\n // Product completion description carried from the domain analysis (optional)\n product_completion: z.string().default(''),\n});\nexport type UnitPlan = z.infer<typeof UnitPlanSchema>;\n\n// Session plan ([3][4][5][6] outputs)\n\nexport const DepthAssignmentSchema = z.object({\n node_id: z.string(),\n depth: DepthLevelSchema,\n source: z.enum(['feed_hint', 'planner', 'escalated']),\n});\nexport type DepthAssignment = z.infer<typeof DepthAssignmentSchema>;\n\nexport const PrerequisiteDecisionEntrySchema = z.object({\n node_id: z.string(),\n decision: PrerequisiteDecisionSchema,\n reason: z.string().min(3),\n});\nexport type PrerequisiteDecisionEntry = z.infer<typeof PrerequisiteDecisionEntrySchema>;\n\nexport const ScaffoldDecisionEntrySchema = z.object({\n item: z.string().min(1),\n decision: ScaffoldDecisionSchema,\n minutes_saved: z.number().int().nonnegative().default(0),\n reason: z.string().min(3),\n});\nexport type ScaffoldDecisionEntry = z.infer<typeof ScaffoldDecisionEntrySchema>;\n\nexport const SessionPlanSchema = z.object({\n id: LessonCodeSchema,\n unit_id: z.string().regex(/^U\\d{2}$/),\n order: z.number().int().positive(),\n title: z.string().min(3),\n // [4] Free-text session objective โ no ULO/CIO/SIO mapping at this stage.\n prose_objective: z.string().min(10),\n node_ids: z.array(z.string()).min(1),\n // Development phases this session contributes to (empty when the feed has no phases)\n phase_ids: z.array(z.string()).default([]),\n new_keywords: z.array(z.string()).default([]),\n prerequisite_keywords: z.array(z.string()).default([]),\n knowledge_minutes: z.number().int().nonnegative(),\n practice_minutes: z.number().int().nonnegative(),\n overhead_minutes: z.number().int().nonnegative(),\n depth_assignments: z.array(DepthAssignmentSchema).min(1),\n prerequisite_decisions: z.array(PrerequisiteDecisionEntrySchema).default([]),\n scaffold_decisions: z.array(ScaffoldDecisionEntrySchema).default([]),\n // What the student can demonstrate after this session โ feeds exit tickets.\n exit_evidence: z.array(z.string()).min(1),\n differentiation: z.object({ bronze: z.string(), silver: z.string(), gold: z.string() }),\n});\nexport type SessionPlan = z.infer<typeof SessionPlanSchema>;\n\n// Root plan\n\nexport const TranslationPolicySchema = z.object({\n policy: z.enum(['after_artifact', 'end_of_unit', 'at_publish']).default('at_publish'),\n target_language: z.string().nullable().default(null),\n});\nexport type TranslationPolicy = z.infer<typeof TranslationPolicySchema>;\n\nexport const CoverageReportSchema = z.object({\n assigned_node_ids: z.array(z.string()),\n unassigned_node_ids: z.array(z.string()),\n warnings: z.array(z.string()),\n});\nexport type CoverageReport = z.infer<typeof CoverageReportSchema>;\n\nexport const PlanConstraintsSchema = z.object({\n age_band: z.tuple([z.number().int(), z.number().int()]),\n entry_level: EntryLevelSchema,\n session_duration_minutes: z.number().int().positive(),\n // Overhead (setup/recap/wrap-up) share of a session, 0..0.5.\n overhead_ratio: z.number().min(0).max(0.5).default(0.15),\n total_sessions: z.number().int().positive().nullable().default(null),\n // Keywords the entry level already masters (drives mastered_before_course).\n entry_keywords: z.array(z.string()).default([]),\n course_goals: z.array(z.string()).default([]),\n capstone: z.string().nullable().default(null),\n});\nexport type PlanConstraints = z.infer<typeof PlanConstraintsSchema>;\n\nexport const CurriculumPlanSchema = z.object({\n schema_version: z.literal(1),\n plan_id: z.string(),\n plan_hash: z.string(),\n created_at: z.string(),\n source: z.object({\n graph_type: z.enum(['curriculum_feed', 'project_graph', 'knowledge_graph', 'hybrid_graph']),\n feed_schema_version: z.number().nullable().default(null),\n warnings: z.array(z.string()).default([]),\n hallucination_count: z.number().int().nonnegative().default(0),\n }),\n constraints: PlanConstraintsSchema,\n course: z.object({\n // [1] Course-level objectives, each citing source nodes (anti-fabrication)\n objectives: z.array(CourseObjectiveSchema).min(1),\n capstone_ref: z.string().nullable().default(null),\n }),\n units: z.array(UnitPlanSchema).min(1), // [2]\n sessions: z.array(SessionPlanSchema).min(1), // [3][4][5][6]\n glossary_scope: z.array(z.object({\n session_id: LessonCodeSchema,\n terms: z.array(z.string()),\n })),\n translation: TranslationPolicySchema,\n coverage_report: CoverageReportSchema,\n approval: z.object({\n status: z.enum(['draft', 'approved']),\n approved_at: z.string().nullable().default(null),\n // Hash of the plan payload the approval covers โ invalidation key for EXPOSITION.\n plan_hash: z.string().nullable().default(null),\n }),\n});\nexport type CurriculumPlan = z.infer<typeof CurriculumPlanSchema>;\n\n// Normalized planning graph (Stage 0 output, internal + feed-facing)\n\nexport const PlanningNodeSchema = z.object({\n id: z.string(),\n kind: NodeKindSchema,\n name: z.string().min(1),\n concept_codes: z.array(z.string()).default([]),\n keywords: z.array(z.string()).default([]),\n new_keywords: z.array(z.string()).default([]),\n prerequisite_keywords: z.array(z.string()).default([]),\n estimated_minutes: z.number().int().nonnegative(),\n bloom_hint: BloomLevelSchema.nullable().default(null),\n depth_hint: DepthLevelSchema.nullable().default(null),\n completion_level: z.enum(['mvp', 'standard', 'stretch']).default('standard'),\n scaffold_candidates: z.array(z.object({\n item: z.string(),\n reason: z.string().default(''),\n minutes_saved: z.number().int().nonnegative().default(0),\n suggest: ScaffoldDecisionSchema.default('provide_full'),\n })).default([]),\n references: z.array(z.object({\n file: z.string(),\n evidence: z.string().default(''),\n })).default([]),\n phase_id: z.string().default(''),\n});\nexport type PlanningNode = z.infer<typeof PlanningNodeSchema>;\n\n/** knowledge = must be understood before; task = needs the source node's output first. */\nexport const DependencyEdgeSchema = z.object({\n from: z.string(),\n to: z.string(),\n kind: z.enum(['knowledge', 'task']),\n reason: z.string().default(''),\n});\nexport type DependencyEdge = z.infer<typeof DependencyEdgeSchema>;\n\nexport const PlanningGraphSchema = z.object({\n graph_type: z.enum(['curriculum_feed', 'project_graph', 'knowledge_graph', 'hybrid_graph']),\n warnings: z.array(z.string()).default([]),\n hallucination_count: z.number().int().nonnegative().default(0),\n nodes: z.array(PlanningNodeSchema).min(1, 'planning graph must contain at least one node'),\n edges: z.array(DependencyEdgeSchema).default([]),\n groupings: z.array(z.object({\n id: z.string(),\n name: z.string(),\n node_ids: z.array(z.string()).min(1),\n rationale: z.string().default(''),\n })).default([]),\n // Progressive completion phases (from CurriculumFeed.phases). When non-empty\n // they define units and the teaching sequence; groupings stay informational.\n phases: z.array(z.object({\n id: z.string(),\n order: z.number().int().positive(),\n name: z.string(),\n product_completion: z.string().default(''),\n node_ids: z.array(z.string()).min(1),\n })).default([]),\n});\nexport type PlanningGraph = z.infer<typeof PlanningGraphSchema>;\nexport type PlanningPhase = PlanningGraph['phases'][number];\n\n// Planner input\n\nexport const PlannerInputSchema = z.object({\n graph: z.unknown(),\n constraints: PlanConstraintsSchema,\n translation: TranslationPolicySchema.default({ policy: 'at_publish', target_language: null }),\n});\nexport type PlannerInput = z.infer<typeof PlannerInputSchema>;\n\n/** Validates a plan and enforces the cross-field budget invariant per session. */\nexport function validateCurriculumPlan(plan: unknown): CurriculumPlan {\n const parsed = CurriculumPlanSchema.parse(plan);\n for (const s of parsed.sessions) {\n const total = s.knowledge_minutes + s.practice_minutes + s.overhead_minutes;\n if (total > parsed.constraints.session_duration_minutes) {\n throw new Error(\n 'Session ' + s.id + ' budget violated: ' + total + ' > ' + parsed.constraints.session_duration_minutes + ' minutes',\n );\n }\n }\n return parsed;\n}\n","import { z } from 'zod';\n\n// โโโ Existing schemas โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\nexport * from './lessonPlanSchema';\nexport * from './activitySchema';\nexport * from './codeLabSchema';\nexport * from './worksheetSchema';\nexport * from './handoutSchema';\nexport * from './slideDeckSchema';\nexport * from './teacherGuideSchema';\nexport * from './extensionSchema';\nexport * from './judgeSchema';\nexport * from './projectGraphSchema';\nexport * from './instructionSchema';\nexport * from './selfLabSchema';\nexport * from './diagnosticQuizSchema';\nexport * from './selfPacedBundleSchema';\n\n// โโโ New schemas (derived from canonical templates) โโโโโโโโโโโโโโโโโโโโโโโโโโโ\nexport * from './rubricSchema';\nexport * from './exitTicketSchema';\nexport * from './tieredPracticeSchema';\nexport * from './bellRingerSchema';\nexport * from './glossarySchema';\nexport * from './choiceBoardSchema';\nexport * from './graphicOrganizerSchema';\nexport * from './scienceLabSchema';\nexport * from './stationRotationSchema';\nexport * from './taskCardsSchema';\nexport * from './reviewGameSchema';\n\nimport { LessonPlanSchema, LessonPlanEDPSchema, LessonPlan5ESchema } from './lessonPlanSchema';\nimport { ActivityLabSchema } from './activitySchema';\nimport { CodeLabSchema } from './codeLabSchema';\nimport { WorksheetSchema } from './worksheetSchema';\nimport { HandoutSchema } from './handoutSchema';\nimport { SlideDeckSchema } from './slideDeckSchema';\nimport { TeacherGuideSchema } from './teacherGuideSchema';\nimport { ExtensionSchema } from './extensionSchema';\nimport { DiagnosticQuizSchema } from './diagnosticQuizSchema';\nimport { RubricSchema } from './rubricSchema';\nimport { ExitTicketSchema } from './exitTicketSchema';\nimport { TieredPracticeSchema } from './tieredPracticeSchema';\nimport { BellRingerSchema } from './bellRingerSchema';\nimport { GlossarySchema } from './glossarySchema';\nimport { ChoiceBoardSchema } from './choiceBoardSchema';\nimport { GraphicOrganizerSchema } from './graphicOrganizerSchema';\nimport { ScienceLabSchema } from './scienceLabSchema';\nimport { StationRotationSchema } from './stationRotationSchema';\nimport { TaskCardsSchema } from './taskCardsSchema';\nimport { ReviewGameSchema } from './reviewGameSchema';\n\n/**\n * Discriminated Union of all Curriculum Artifacts.\n * Keyed on `artifactType` literal field.\n *\n * Lesson variants:\n * - 'LESSON' โ LessonPlanSchema (legacy, deprecated โ kept for backward compat)\n * - 'LESSON_EDP' โ LessonPlanEDPSchema (Engineering Design Process model)\n * - 'LESSON_5E' โ LessonPlan5ESchema (5E Instructional Model)\n */\nexport const CurriculumArtifactSchema = z.discriminatedUnion('artifactType', [\n // โโโ Lesson variants โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n LessonPlanSchema, // 'LESSON' โ legacy (deprecated)\n LessonPlanEDPSchema, // 'LESSON_EDP' โ Engineering Design Process\n LessonPlan5ESchema, // 'LESSON_5E' โ 5E Instructional Model\n // โโโ Activity & Practice โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n ActivityLabSchema, // 'ACT'\n TieredPracticeSchema, // 'TIERED_PRACTICE'\n BellRingerSchema, // 'BELL_RINGER'\n ChoiceBoardSchema, // 'CHOICE_BOARD'\n // โโโ Code โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n CodeLabSchema, // 'CODE'\n // โโโ Assessment โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n DiagnosticQuizSchema, // 'QUIZ'\n RubricSchema, // 'RUBRIC'\n ExitTicketSchema, // 'EXIT_TICKET'\n // โโโ Student-facing resources โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n WorksheetSchema, // 'WKS'\n HandoutSchema, // 'HANDOUT'\n SlideDeckSchema, // 'SLIDE'\n TeacherGuideSchema, // 'GUIDE'\n ExtensionSchema, // 'EXT'\n GlossarySchema, // 'GLOSSARY'\n GraphicOrganizerSchema,// 'GRAPHIC_ORGANIZER'\n ScienceLabSchema, // 'SCIENCE_LAB'\n StationRotationSchema, // 'STATION_ROTATION'\n TaskCardsSchema, // 'TASK_CARDS'\n ReviewGameSchema, // 'REVIEW_GAME'\n]);\n\nexport type CurriculumArtifact = z.infer<typeof CurriculumArtifactSchema>;\n\n/**\n * Basic Learning Objective schema from Knowledge Graph / Tree\n */\nexport const LearningObjectiveInputSchema = z.object({\n code: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n lo_type: z.enum(['UNIVERSAL', 'CONCEPTUAL_IMPL', 'SPECIFIC_IMPL', 'ULO', 'CIO', 'SIO']).or(z.string()),\n bloom_level: z.string().optional().default('understand'),\n knowledge_dimension: z.string().optional().default('CONCEPTUAL'),\n assessment: z.string().optional().default('concept-check'),\n keyword: z.string().optional().default(''),\n concept: z.string().optional().default(''),\n concept_code: z.string().optional().default(''),\n concept_name: z.string().optional().default(''),\n});\n\nexport interface LearningObjectiveInput {\n code: string;\n name: string;\n description?: string;\n lo_type?: 'UNIVERSAL' | 'CONCEPTUAL_IMPL' | 'SPECIFIC_IMPL' | 'ULO' | 'CIO' | 'SIO' | string;\n bloom_level?: string;\n knowledge_dimension?: string;\n assessment?: string;\n keyword?: string;\n concept?: string;\n concept_code?: string;\n concept_name?: string;\n}\n\n/**\n * Milestone input schema matching knowledge-tree Roadmap & Learning Path JSON\n */\nexport const MilestoneInputSchema = z.object({\n id: z.string().optional(),\n name: z.string(),\n description: z.string().optional().default(''),\n feature_id: z.string().optional().default('F0'),\n feature_name: z.string().optional().default(''),\n concept_code: z.string().optional().default(''),\n concept_name: z.string().optional().default(''),\n completion_level: z.string().optional().default('base'),\n difficulty: z.string().optional().default('Beginner'),\n bloom_level: z.string().optional().default('Understand'),\n tech_keywords: z.array(z.string()).optional().default([]),\n prerequisite_concept_codes: z.array(z.string()).optional().default([]),\n all_keywords: z.array(z.string()).optional().default([]).describe('All keywords associated with this milestone (aggregated from concepts)'),\n new_keywords: z.array(z.string()).optional().default([]).describe('Keywords introduced for the first time at this milestone'),\n prerequisite_keywords: z.array(z.string()).optional().default([]).describe('Keywords already introduced in earlier milestones'),\n learning_objectives: z.array(LearningObjectiveInputSchema).optional().default([]),\n rationale: z.string().or(z.array(z.string())).optional().default(''),\n instruction_ref: z.string().optional(),\n /** Canonical numeric grade band [min, max] for standards retrieval (Phase 2). */\n grade_band: z.tuple([z.number().int(), z.number().int()]).optional(),\n});\n\nexport interface MilestoneInput {\n id?: string;\n name: string;\n description?: string;\n feature_id?: string;\n feature_name?: string;\n concept_code?: string;\n concept_name?: string;\n completion_level?: string;\n difficulty?: string;\n bloom_level?: string;\n tech_keywords?: string[];\n prerequisite_concept_codes?: string[];\n all_keywords?: string[];\n new_keywords?: string[];\n prerequisite_keywords?: string[];\n learning_objectives?: LearningObjectiveInput[];\n rationale?: string | string[];\n instruction_ref?: string;\n grade_band?: [number, number];\n}\n\n/**\n * Phase input schema\n */\nexport const PhaseInputSchema = z.object({\n phase_id: z.number().or(z.string()),\n title: z.string().optional(),\n phase_name: z.string().optional(),\n description: z.string().optional().default(''),\n target_outcome: z.string().optional(),\n milestones: z.array(MilestoneInputSchema).default([]),\n});\n\nexport type PhaseInput = z.input<typeof PhaseInputSchema>;\n\n/**\n * Full Roadmap input schema\n */\nexport const RoadmapInputSchema = z.object({\n project_brief: z.object({\n name: z.string().optional(),\n title: z.string().optional(),\n goal: z.string().optional(),\n description: z.string().optional().default(''),\n tech_stack: z.array(z.string()).optional().default([]),\n estimated_hours: z.number().optional().default(0),\n estimated_weeks: z.number().optional().default(0),\n target_learner: z.string().optional(),\n audience: z.string().optional(),\n icon: z.string().optional(),\n }),\n phases: z.array(PhaseInputSchema).default([]),\n});\n\nexport type RoadmapInput = z.infer<typeof RoadmapInputSchema>;\n\nexport interface ProjectRoadmap {\n title: string;\n goal?: string;\n topic?: string;\n target_language?: string;\n target_audience?: string;\n tech_stack?: string[];\n milestones: MilestoneInput[];\n}\nexport * from './curriculumPlanSchema';\n","/**\n * Markdown Template for Master Lesson Plan (5E Model)\n * Exact Canonical Template from the-ultimate-curriculum-agent-os/_templates/LESSON_5E_template.md\n */\nexport const LESSON_PLAN_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"LESSON_5E\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T1\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\nprerequisite: []\ntemplate_contract: \"lesson-plan-v2\"\ntemplate_required_sections:\n - \"A. Lesson Design Plan\"\n - \"Learning Objectives & Evidence\"\n - \"Activity Sequence\"\n - \"Resource Map\"\n - \"Assessment Map\"\n - \"Artifact Contract\"\n - \"B. Lesson Flow\"\n---\n<!-- INJECT_BODY -->\n\n# LESSON [{{LESSON_ID}}]: {{TITLE}} (5E Model)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** {{DURATION}}\n- **Materials & Equipment:** {{MATERIALS_SUMMARY}}\n- **Keywords / Core Concepts:** {{KEYWORDS}}\n\n| LO | Objective (Bloom's) | Student Evidence | Success Criteria |\n|---|---|---|---|\n{{LEARNING_OBJECTIVES_TABLE_ROWS}}\n\n### 2. Activity Sequence\n> This is the canonical activity contract. Satellite artifacts must expand this sequence and must not invent a different one.\n\n| Seq | 5E Phase | Activity Type | Actor | Purpose | Student Action | Teacher Move | Output/Evidence | LO | Time | Artifact Contract |\n|---|---|---|---|---|---|---|---|---|---|---|\n{{ACTIVITY_SEQUENCE_TABLE_ROWS}}\n\n### 3. Resource Map\n| Resource | Used In Activity | Purpose | Owner Artifact |\n|---|---|---|---|\n{{RESOURCE_MAP_TABLE_ROWS}}\n\n### 4. Assessment Map\n| Evidence | Assessed By | Criteria | Follow-up If Missing |\n|---|---|---|---|\n{{ASSESSMENT_MAP_TABLE_ROWS}}\n\n### 5. Artifact Contract\n- **ACT must expand:** {{ACT_CONTRACT}}\n- **GUIDE must support:** {{GUIDE_CONTRACT}}\n- **SLIDE must visualize:** {{SLIDE_CONTRACT}}\n- **HANDOUT must provide:** {{HANDOUT_CONTRACT}}\n- **WKS must practice:** {{WKS_CONTRACT}}\n- **QUIZ must assess:** {{QUIZ_CONTRACT}}\n- **EXT must extend:** {{EXT_CONTRACT}}\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ENGAGE โ {{ENGAGE_DURATION}} mins\n- **Hook Scenario:** {{HOOK_SCENARIO}}\n- **Open Question:** {{HOOK_OPEN_QUESTION}}\n- **Transition:** {{HOOK_TRANSITION}}\n\n### 2. EXPLORE โ {{EXPLORE_DURATION}} mins\n- **Activity Reference:** {{EXPLORE_ACTIVITY_REF}}\n- **Student Discovery:** {{EXPLORE_STUDENT_DISCOVERY}}\n\n### 3. EXPLAIN โ {{EXPLAIN_DURATION}} mins\n- **Definitions:** \n{{EXPLAIN_DEFINITIONS}}\n- **Visual Illustration (REQUIRED):**\n{{EXPLAIN_VISUAL_ILLUSTRATION}}\n\n### 4. ELABORATE โ {{ELABORATE_DURATION}} mins\n- **Tiered Scaffolding:**\n - ๐ฅ **Bronze:** {{DIFFERENTIATION_BRONZE}}\n - ๐ฅ **Silver:** {{DIFFERENTIATION_SILVER}}\n - ๐ฅ **Gold:** {{DIFFERENTIATION_GOLD}}\n\n> **ACT Contract**: Detailed operational instructions must expand the Activity Sequence above and must not change the planned evidence target.\n\n### 5. EVALUATE โ {{EVALUATE_DURATION}} mins\n- **Exit Ticket:** {{EXIT_TICKET_CONTENT}}\n- **Closing:** {{CLOSING_REMARKS}}\n\n> **QUIZ Contract**: Detailed assessment criteria and rubrics must assess the evidence and success criteria defined in the Lesson Design Plan.\n\n---\n\n## [OPTIONAL] Teacher Notes\n- **Common Pitfalls:**\n{{COMMON_PITFALLS}}\n- **Troubleshooting:**\n{{TROUBLESHOOTING_ROWS}}\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\n> List all satellite files used in this lesson.\n\n| Artifact File | Role in the Classroom | When to Use |\n|---|---|---|\n| \\`GUIDE_{{LESSON_ID}}.md\\` | Detailed Teaching Script | Teacher preparation |\n| \\`SLIDE_{{LESSON_ID}}.md\\` | Presentation Content | Throughout the session |\n| \\`HANDOUT_{{LESSON_ID}}.md\\` | Theory Summary for Students | During EXPLAIN phase |\n| \\`ACT_{{LESSON_ID}}.md\\` | Detailed Learning Activity Operations | During EXPLORE / ELABORATE / checkpoint phases |\n| \\`WKS_{{LESSON_ID}}.md\\` | Individual Worksheet | Wrap-up or Homework |\n| \\`QUIZ_{{LESSON_ID}}.md\\` | Assessment Rubric | During EVALUATE phase |\n| \\`EXT_{{LESSON_ID}}.md\\` | Enrichment Materials | For \"Gold\" students |\n`.trim();\n","/**\n * Markdown Template for Inquiry-Based Activity (ACT)\n * Exact Canonical Template from the-ultimate-curriculum-agent-os/_templates/ACT_template.md\n */\nexport const ACT_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T2\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Computational Thinking Focus\"\n - \"Materials & Setup\"\n - \"Constraints & Safety\"\n - \"Active Learning Workflow\"\n - \"3-Tier Differentiation\"\n - \"Reflection\"\n---\n<!-- INJECT_BODY -->\n\n# INQUIRY-BASED ACTIVITY: {{TITLE}}\n_Milestone: {{MILESTONE_ID}} | Module: {{MODULE_NAME}} | Lesson: {{LESSON_ID}}_\n\n## [REQUIRED] Computational Thinking Focus\n- **Problem Statement (Real-world Scenario):** {{PROBLEM_STATEMENT}}\n- **Decomposition:**\n{{DECOMPOSITION_STEPS}}\n- **Algorithm Design:** {{ALGORITHM_DESIGN}}\n\n## [REQUIRED] Materials & Setup\n- **Reference Material:** Students should use the **HANDOUT** for this lesson as their primary technical reference (lifeline).\n- **Hardware/Software:**\n<!-- [HARDWARE_BOM] -->\n{{HARDWARE_ITEMS}}\n<!-- [/HARDWARE_BOM] -->\n- **Software:** {{SOFTWARE_ITEMS}}\n- **Consumables:** {{CONSUMABLES}}\n- **Other Resources:** {{OTHER_RESOURCES}}\n\n## [REQUIRED] Constraints & Safety\n- โ ๏ธ **Technical/Safety:** {{SAFETY_WARNING}}\n- ๐ก **Design Constraint:** {{DESIGN_CONSTRAINT}}\n\n## [REQUIRED] Active Learning Workflow\n\n### Phase 1: Planning & Design โ {{PHASE1_DURATION}} mins\n- **Student Task:** Hand-draw (or draft in words) the algorithm flowchart or connection architecture before touching the computer/devices.\n- **Teacher Action:** Walk around to check the logic of each group. Ask inquiry questions:\n{{PHASE1_INQUIRY_QUESTIONS}}\n\n### Phase 2: Implementation & Discovery โ {{PHASE2_DURATION}} mins\n- **Student Task:** Apply the knowledge from the **HANDOUT** to realize the plan designed in Phase 1. Encourage self-inquiry and documentation lookup.\n- **Teacher Action:** Avoid \"hand-holding.\" Only intervene if a group has been stuck for more than 5 minutes.\n{{PHASE2_GUIDANCE_BLOCK}}\n\n### Phase 3: Debugging & Testing โ {{PHASE3_DURATION}} mins\n- **Testing:** Students run their system.\n- **Error Analysis:** Ask students to record any error codes or unexpected behaviors and compare them with the Troubleshooting table in the Handout.\n{{PHASE3_TESTING_STEPS}}\n\n## [REQUIRED] 3-Tier Differentiation\n> MUST design tasks in 3 tiers to support diverse learner groups. Bronze is the minimum requirement for all students.\n- ๐ฅ **Bronze (Foundational):** {{DIFFERENTIATION_BRONZE}}\n- ๐ฅ **Silver (Application):** {{DIFFERENTIATION_SILVER}}\n- ๐ฅ **Gold (Enrichment/Creative):** {{DIFFERENTIATION_GOLD}}\n\n## [REQUIRED] Reflection\n- **Discussion Question:** {{REFLECTION_QUESTION}}\n`.trim();\n","/**\n * Markdown Template for Code Lab (LAB)\n * 100% English Template Structure (Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/LAB_TEMPLATE.md)\n */\nexport const CODE_LAB_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"LAB\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T2\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\n---\n<!-- INJECT_BODY -->\n\n# ๐จโ๐ป CODE LAB: {{TITLE}}\n_Milestone: {{MILESTONE_ID}} | Tech Stack: {{TECH_STACK}}_\n\n## ๐ฏ Overview\nThis lab focuses on the practical implementation of core technical concepts, bridging theory into working, robust, and testable code.\n\n## ๐ ๏ธ Environment & Setup\n- **Language / Framework:** {{LANGUAGE_FRAMEWORK}}\n- **IDE / Editor:** {{IDE_EDITOR}}\n- **Required Libraries:** {{REQUIRED_LIBRARIES}}\n- **Hardware / Connection Setup:** {{HARDWARE_ENV_CONNECTION}}\n\n## ๐ Lab Tasks (3-Tier Differentiation)\n\n### ๐ฅ Bronze (Foundational) โ {{BRONZE_MINS}} mins\n**Objective:** {{BRONZE_OBJECTIVE}}\n- **Task:** {{BRONZE_TASK}}\n- **Requirement:** {{BRONZE_REQUIREMENT}}\n\n### ๐ฅ Silver (Application) โ {{SILVER_MINS}} mins\n**Objective:** {{SILVER_OBJECTIVE}}\n- **Task:** {{SILVER_TASK}}\n- **Requirement:** {{SILVER_REQUIREMENT}}\n\n### ๐ฅ Gold (Enrichment/Creative) โ {{GOLD_MINS}} mins\n**Objective:** {{GOLD_OBJECTIVE}}\n- **Task:** {{GOLD_TASK}}\n- **Requirement:** {{GOLD_REQUIREMENT}}\n\n## ๐ป Technical Reference ([SME_MANDATE])\n<!-- [SME_MANDATE] -->\n> Any code provided in this section is verified for syntax accuracy and runtime execution.\n\n### Starter Code Template\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{STARTER_CODE}}\n\\`\\`\\`\n\n### Solution Code\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SOLUTION_CODE}}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n## ๐ Troubleshooting & Debugging Matrix\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n{{TROUBLESHOOTING_ROWS}}\n\n## ๐ Submission & Verification Checklist\n{{CHECKLIST_ITEMS}}\n`.trim();\n","/**\n * Markdown Template for Self-Paced Hands-on Lab (SELF_LAB)\n * Features Progressive Hints System (Accordion/Spoilers) & Automated Verification Commands\n */\nexport const SELF_LAB_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"SELF_LAB\"\nlanguage: \"{{LANGUAGE}}\"\ndifficulty: \"{{DIFFICULTY}}\"\nestimated_minutes: {{ESTIMATED_MINUTES}}\ntech_stack: {{TECH_STACK}}\n---\n\n# ๐ Self-Paced Hands-On Lab: {{TITLE}}\n\n> โฑ๏ธ **Estimated Duration:** ~{{ESTIMATED_MINUTES}} mins \n> ๐ฏ **Difficulty Level:** {{DIFFICULTY_UPPER}} \n> ๐งฐ **Tech Stack:** {{TECH_STACK_STR}} \n> ๐ก **Self-Learner Notice:** You are in full control of this lab. Follow the progressive challenges below. If you get stuck at any point, use the **Progressive Hints System** to get unstuck without ruining the learning experience!\n\n---\n\n## ๐ Mission Briefing & Environment Setup\n{{MISSION_BRIEFING}}\n\n### ๐ซ Preflight Checklist\n{{PREFLIGHT_CHECKLIST}}\n\n---\n\n## ๐ฏ Progressive Challenges (3-Tier Differentiation)\n\n### ๐ฅ Challenge 1: Foundational Core (Bronze) โ ~{{BRONZE_MINS}} mins\n**Objective:** {{BRONZE_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{BRONZE_TASKS}}\n\n#### ๐งช Self-Verification Command:\n\\`\\`\\`bash\n{{BRONZE_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{BRONZE_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### ๐ก Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>๐ก Hint Level 1: Conceptual Clue (Hฦฐแปng tฦฐ duy)</b></summary>\n\n{{BRONZE_HINT_1}}\n</details>\n\n<details>\n<summary><b>๐ Hint Level 2: Structural Skeleton (Khung code mแบซu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{BRONZE_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>๐จ Hint Level 3: Full Solution & Explanation (Lแปi giแบฃi trแปn vแบนn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{BRONZE_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{BRONZE_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n### ๐ฅ Challenge 2: Logic & Error Handling (Silver) โ ~{{SILVER_MINS}} mins\n**Objective:** {{SILVER_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{SILVER_TASKS}}\n\n#### ๐งช Self-Verification Command:\n\\`\\`\\`bash\n{{SILVER_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{SILVER_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### ๐ก Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>๐ก Hint Level 1: Conceptual Clue (Hฦฐแปng tฦฐ duy)</b></summary>\n\n{{SILVER_HINT_1}}\n</details>\n\n<details>\n<summary><b>๐ Hint Level 2: Structural Skeleton (Khung code mแบซu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SILVER_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>๐จ Hint Level 3: Full Solution & Explanation (Lแปi giแบฃi trแปn vแบนn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SILVER_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{SILVER_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n### ๐ฅ Challenge 3: Edge Cases & Optimization (Gold) โ ~{{GOLD_MINS}} mins\n**Objective:** {{GOLD_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{GOLD_TASKS}}\n\n#### ๐งช Self-Verification Command:\n\\`\\`\\`bash\n{{GOLD_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{GOLD_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### ๐ก Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>๐ก Hint Level 1: Conceptual Clue (Hฦฐแปng tฦฐ duy)</b></summary>\n\n{{GOLD_HINT_1}}\n</details>\n\n<details>\n<summary><b>๐ Hint Level 2: Structural Skeleton (Khung code mแบซu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{GOLD_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>๐จ Hint Level 3: Full Solution & Explanation (Lแปi giแบฃi trแปn vแบนn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{GOLD_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{GOLD_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n## ๐ Self-Learner Troubleshooting Matrix\n| Symptom / Error Message | Root Cause | Exact Fix |\n| :--- | :--- | :--- |\n{{TROUBLESHOOTING_ROWS}}\n\n---\n\n## ๐ Final Lab Submission & Mastery Checklist\n{{FINAL_CHECKLIST}}\n`.trim();\n","/**\n * Markdown Template for Diagnostic & Active Recall Quiz (QUIZ)\n * Compatible with @thanh01.pmt/interactive-quiz-kit standard\n */\nexport const QUIZ_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"QUIZ\"\nlanguage: \"{{LANGUAGE}}\"\ntotal_questions: {{TOTAL_QUESTIONS}}\npassing_score_pct: {{PASSING_SCORE_PCT}}\n---\n\n# ๐ง Diagnostic & Active Recall Quiz: {{TITLE}}\n\n> โฑ๏ธ **Recommended Time:** ~10-15 mins \n> ๐ฏ **Passing Score:** {{PASSING_SCORE_PCT}}% \n> ๐ก **Purpose:** Test your conceptual understanding, catch hidden misconceptions, and evaluate architectural trade-offs.\n\n---\n\n{{QUESTIONS_SECTION}}\n\n---\n\n## ๐ Comprehensive Answer Key & Deep Explanation (Expand after completing)\n<details>\n<summary><b>๐ Click to View Full Explanations & Common Pitfall Analysis</b></summary>\n\n{{ANSWER_KEY_SECTION}}\n</details>\n`.trim();\n","import type { MilestoneInput } from '../../schemas';\nimport { LESSON_PLAN_TEMPLATE } from '../../templates';\n\nexport interface LessonPromptInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n contextContinuity?: string;\n /** Pre-rendered STANDARDS CONTEXT block (from buildStandardsContextBlock) โ verbatim standard statements binding this lesson. */\n standardsContext?: string;\n}\n\nexport function buildLessonMasterPrompt(input: LessonPromptInput): string {\n const { milestone, language, topic, targetAudience, contextContinuity, standardsContext } = input;\n const learningObjectives = milestone.learning_objectives || [];\n const lessonId = milestone.id || milestone.concept_code || 'U01_M01_L01';\n\n return `\n# ROLE & PERSONA\nYou are a Senior Educational Content Editor and Curriculum Architect (@content), expert in the 5E Instructional Model (Engage, Explore, Explain, Elaborate, Evaluate), Bloom's Revised Taxonomy, and Universal Design for Learning (UDL).\n\n# MISSION SCOPE\nBuild a deep, rigorous, and highly pedagogical Master Lesson Plan (LESSON) that strictly fulfills the target Learning Objectives across any domain (Coding, Engineering, Data, Science, Math, Business, Design, or Humanities).\n\n## IN SCOPE:\n- **Pedagogical Structure:** Use the 5E model to orchestrate active inquiry and cognitive scaffolding.\n- **Cumulative Scaffolding & Zero Duplication:**\n - โ **ANTI-DUPLICATION MANDATE:** Inspect the CUMULATIVE CONTEXT ($L_1 \\dots L_{N-1}$). You MUST NOT re-teach, re-explain, or duplicate the exact same code snippet, hardware wiring, or basic concept already taught in prior lessons (e.g. if $L_1$ already taught blinking LED on pin 13 with delay(1000), $L_2$ MUST advance to multi-LED sequencing, variable state, PWM analogWrite, or sensor input).\n - ๐ **CONTINUOUS STORYLINE & ANALOGIES:** Re-use and build upon the overarching narrative, character evolution, and analogies established in CONTENT_CONTINUITY.md (e.g. Mind -> Reflexes -> Hands -> Master System) instead of inventing disconnected one-off metaphors.\n- **Strict Satellite Artifact ID Contract:** All satellite deliverables referenced in the Lesson Plan MUST follow canonical naming based on **lessonId** (\"${lessonId}\"):\n - Activity Lab: \\`ACT_${lessonId}\\`\n - Slide Deck: \\`SLIDE_${lessonId}\\`\n - Diagnostic Quiz: \\`QUIZ_${lessonId}\\`\n - Teacher Guide: \\`GUIDE_${lessonId}\\`\n - Worksheet: \\`WKS_${lessonId}\\`\n - Student Handout: \\`HANDOUT_${lessonId}\\`\n - Extension: \\`EXT_${lessonId}\\`\n - โ PROHIBITED: Never generate ad-hoc IDs like \\`ACT_WARMUP_01\\`, \\`SLIDE_CORE_02\\`, or \\`QUIZ_WRAPUP_05\\`.\n- **Authentic Real-World Hook:** Create a compelling, high-stakes scenario tailored to the domain:\n - *Tech/Software/IoT:* Server outage, vaccine cold-chain failure, cybersecurity breach, logistics bottleneck.\n - *Data/Science/Math:* Clinical trial anomaly, ecological tipping point, forecasting error, experimental anomaly.\n - *Business/Economics/Finance:* Critical market shift, startup runway crisis, operational failure, supply chain shock.\n - *Design/Media/Humanities:* UX accessibility collapse, public communication dilemma, historical inflection point.\n- **Relatable Analogies & Conceptual Depth:** For EVERY core concept, provide a relatable real-world analogy alongside rigorous domain explanation.\n- **Multidimensional Comparison Table:** Compare at least 3 options/approaches across 4 columns (Option, Mechanism/Principle, Trade-offs/Impact, Practical Meaning).\n- **Formulas, Rules of Thumb, or Heuristics:** Provide mathematical formulas in LaTeX (e.g. $Z = \\\\frac{x - \\\\mu}{\\\\sigma}$), scientific equations, or domain-specific decision heuristics where applicable.\n- **Visual Architecture & Flow:** Provide a valid, clean Mermaid diagram (flowchart, sequence diagram, or state machine) illustrating the conceptual flow, system architecture, or process sequence.\n- **Guided Practice Demonstration:**\n - *For Coding/Tech Courses:* Provide complete, runnable code with line-by-line comments explaining \"Why\" not just \"How\".\n - *For Non-Coding/Domain Courses:* Provide a structured analysis framework, step-by-step calculation, protocol template, or case study walkthrough.\n- **Formative Exit Ticket:** Formulate scenario-based questions at the Apply/Analyze Bloom level + a metacognitive self-assessment prompt.\n- **Comprehensive Teacher Notes:** Detail common student pitfalls/misconceptions and an actionable Troubleshooting/Intervention Matrix.\n\n## OUT OF SCOPE (PROHIBITED):\n- Do NOT repeat exercises, code, or circuits from prior lessons in the roadmap.\n- Do NOT invent ad-hoc artifact IDs (use only canonical IDs).\n- Do NOT write shallow, generic textbook summaries.\n- Do NOT skip analogies or provide dry, context-free definitions.\n- Do NOT omit Mermaid diagrams or comparison tables.\n- Do NOT force programming code on non-technical subjects (use domain-appropriate structured frameworks instead).\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate structured data that will render directly into this exact Markdown template:\n---\n${LESSON_PLAN_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Lesson ID:** ${milestone.id || milestone.concept_code || 'L01'}\n- **Title / Name:** ${milestone.name}\n- **Milestone Description:** ${milestone.description}\n- **Feature / Phase:** ${milestone.feature_name || milestone.feature_id || 'Core Learning'}\n- **Bloom Taxonomy Target:** ${milestone.bloom_level || 'understand'}\n- **Difficulty:** ${milestone.difficulty || 'Intermediate'}\n- **Subject / Topic:** ${topic || milestone.feature_name || 'Curriculum Subject'}\n- **Target Audience:** ${targetAudience || 'Target Learners'}\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Learning Objectives:**\n${learningObjectives.map((lo) => ` - [${lo.lo_type || 'ULO'}] ${lo.code}: ${lo.name} (${lo.description || ''}) -> Bloom: ${lo.bloom_level || 'understand'}`).join('\\n')}\n\n${contextContinuity ? `# CUMULATIVE CONTEXT & CONTINUITY (SOURCE OF TRUTH FOR PRIOR LESSONS)\\n${contextContinuity}\\n\\n*INSTRUCTION: Build strictly on top of the above progress. DO NOT re-teach concepts already marked completed above.*` : ''}\n\n${standardsContext || ''}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching the LessonPlanSchema with these exact keys:\n- \"artifactType\": \"LESSON\"\n- \"lessonId\": \"${milestone.id || 'L01'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"topic\": \"${topic || milestone.feature_name || 'General Topic'}\"\n- \"targetGradeOrAudience\": \"${targetAudience || 'Learners'}\"\n- \"overview\": string (Pedagogical overview)\n- \"learningObjectives\": array of { \"code\": string, \"name\": string, \"description\": string, \"bloomLevel\": string, \"successCriteria\": string }\n- \"prerequisites\": string (Prior knowledge linkage)\n- \"materialsSummary\": string (Required tools / resources)\n- \"keywords\": string[] (Core domain terms introduced)\n- \"hookTitle\": string (Compelling scenario title)\n- \"hookScenario\": string (High-stakes real-world scenario)\n- \"hookQuestions\": string[] (At least 2 provocative open-ended inquiry questions)\n- \"coreConcepts\": array of { \"name\": string, \"analogy\": string, \"technicalDepth\": string, \"comparisonTable\": { \"headers\": string[], \"rows\": string[][] }, \"formulaOrRule\": string }\n- \"guidedPractice\": { \"title\": string, \"explanation\": string, \"codeSnippet\": string (Runnable code for tech courses OR structured domain template/walkthrough for non-tech), \"codeLanguage\": string (e.g. \"python\", \"typescript\", \"markdown\", \"text\"), \"mermaidDiagram\": string (Valid Mermaid diagram syntax) }\n- \"independentPractice\": { \"title\": string, \"description\": string }\n- \"differentiation\": { \"bronzeTier\": string, \"silverTier\": string, \"goldTier\": string }\n- \"sections\": array of { \"title\": string, \"durationMinutes\": number, \"teacherActions\": string, \"studentActions\": string, \"analogies\": string[], \"formativeCheck\": string }\n- \"exitTicket\": { \"questionStem\": string, \"expectedAnswerOrRubric\": string, \"metacognitivePrompt\": string }\n- \"teacherNotes\": { \"commonPitfalls\": string[], \"troubleshootingMatrix\": array of { \"issue\": string, \"potentialCause\": string, \"solution\": string }, \"extensionNotes\": string }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\nimport { ACT_TEMPLATE } from '../../templates';\n\nexport interface ActivityPromptInput {\n lesson: LessonPlan;\n language: string;\n hardwareBOM?: string[];\n softwareTools?: string[];\n}\n\nexport function buildActivityPrompt(input: ActivityPromptInput): string {\n const { lesson, language, hardwareBOM, softwareTools } = input;\n\n const loList = lesson.learningObjectives\n .map((lo) => `- [${lo.bloomLevel}] ${lo.code}: ${lo.name || ''} โ ${lo.description}${lo.successCriteria ? ` (Evidence: ${lo.successCriteria})` : ''}`)\n .join('\\n');\n\n const lessonFlowSummary = (lesson.sections || [])\n .map((s, idx) => `### Stage ${idx + 1}: ${s.title} (${s.durationMinutes} mins)\\n- Teacher Moves: ${s.teacherActions}\\n- Student Actions: ${s.studentActions}${(s.analogies || []).length > 0 ? `\\n- Analogies: ${s.analogies.join('; ')}` : ''}`)\n .join('\\n\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **@activity** Specialist in Inquiry-Based Learning and Hands-On STEM/Software Engineering design.\n\n# MISSION SCOPE & CANONICAL CONTRACT\nTransform the exact pedagogical flow and activities from the Master Lesson Plan (LESSON) into an active, hands-on, inquiry-driven classroom lab.\n\n## STRICT CONTRACT RULES (CRITICAL):\n1. **Activity Sequence Alignment:** You MUST operationalize and expand the EXACT activity sequence and stages defined in the Master Lesson Plan. DO NOT invent an unrelated topic or activity (e.g. if the lesson is about Design Thinking, Empathy Mapping and Problem Definition, the activity MUST be an Empathy Mapping & Problem Definition lab on paper/Miro, NOT a physical hardware soldering or wiring lab).\n2. **Context-Appropriate Materials & BOM:** \n - Only include physical hardware in \\`<!-- [HARDWARE_BOM] -->\\` if the lesson explicitly involves physical wiring or hardware setup.\n - If the lesson is conceptual, design, or pure software, \\`hardware\\` must be empty or contain only workstation tools (e.g. \"Developer Workstation\"), while \\`consumables\\` and \\`software\\` contain paper, sticky notes, IDE, or design canvas.\n3. **Context-Appropriate Safety:** Safety warnings must strictly match what students actually do in this specific lesson (e.g. avoid electrical warnings for a paper-based design workshop).\n4. **3-Tier Differentiation:** Follow the scaffolding defined in the lesson plan:\n - ๐ฅ Bronze: ${lesson.differentiation?.bronzeTier || 'Foundational core task'}\n - ๐ฅ Silver: ${lesson.differentiation?.silverTier || 'Application task with additional logic'}\n - ๐ฅ Gold: ${lesson.differentiation?.goldTier || 'Enrichment and creative extension'}\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${ACT_TEMPLATE}\n---\n\n# CANONICAL MASTER LESSON CONTEXT (SOURCE OF TRUTH)\n- **Lesson ID:** ${lesson.lessonId}\n- **Lesson Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Target Audience:** ${lesson.targetGradeOrAudience}\n- **Lesson Overview:** ${lesson.overview}\n- **Hook Scenario:** ${lesson.hookScenario}\n- **Learning Objectives:**\n${loList}\n\n- **Master Lesson Flow (Stages & Teacher/Student Actions):**\n${lessonFlowSummary}\n\n${lesson.guidedPractice ? `- **Guided Practice Context:** ${lesson.guidedPractice.title} โ ${lesson.guidedPractice.explanation}` : ''}\n${lesson.materialsSummary ? `- **Lesson Materials Summary:** ${lesson.materialsSummary}` : ''}\n\n# INPUT PARAMETERS\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Available Hardware Context:** ${(hardwareBOM || []).join(', ') || 'Developer Workstation'}\n- **Available Software Context:** ${(softwareTools || []).join(', ') || 'IDE / Design Canvas'}\n\n# REQUIRED JSON KEYS\nReturn a single JSON object matching ActivityLabSchema with these exact keys:\n- \"artifactType\": \"ACT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (Must match or complement \"${lesson.title}\")\n- \"language\": \"${language}\"\n- \"objective\": string (Hands-on practical objective directly fulfilling the lesson LOs)\n- \"totalDurationMinutes\": number (e.g. 45 or 60)\n- \"computationalThinking\": { \n \"problemStatement\": string (Authentic real-world challenge aligned with lesson hook),\n \"decomposition\": string[] (3-4 discrete steps directly matching the lesson flow),\n \"algorithmDesign\": string (Data flow, logic, or design framework to follow before executing)\n }\n- \"materialsBOM\": { \n \"hardware\": string[] (Hardware components ONLY if physical hardware is touched, else empty array []),\n \"software\": string[] (IDEs, web tools, simulators, or design platforms),\n \"consumables\": string[] (Paper, pens, sticky notes, wires if applicable),\n \"otherResources\": string[] (Handout, empathy canvas, or reference docs)\n }\n- \"safetyWarnings\": string[] (Realistic cautions matching the specific activity)\n- \"designConstraints\": string[] (Design constraints to stimulate thinking)\n- \"teacherTips\": string[] (Pedagogical facilitation tips)\n- \"activeLearningWorkflow\": {\n \"phase1Planning\": { \"durationMinutes\": number, \"studentTask\": string, \"teacherAction\": string, \"inquiryQuestions\": string[] },\n \"phase2Implementation\": { \"durationMinutes\": number, \"studentTask\": string, \"teacherAction\": string, \"codeOrCommands\": string[] },\n \"phase3Debugging\": { \"durationMinutes\": number, \"testingSteps\": string, \"errorAnalysis\": string }\n }\n- \"steps\": array of {\n \"stepNumber\": number,\n \"title\": string,\n \"durationMinutes\": number,\n \"teacherInstructions\": string,\n \"studentInstructions\": string,\n \"checkpoint\": string\n } (Detailed step-by-step procedure operationalizing the lesson stages)\n- \"differentiation3Tier\": { \n \"bronzeTier\": string, \n \"silverTier\": string, \n \"goldTier\": string \n }\n- \"scaffoldingSupport\": string\n- \"levelUpExtension\": string\n- \"reflectionQuestion\": string\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\nimport { CODE_LAB_TEMPLATE } from '../../templates';\n\nexport interface CodeLabPromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n targetTechStack?: string[];\n}\n\nexport function buildCodeLabPrompt(input: CodeLabPromptInput): string {\n const { lesson, activity, language, targetTechStack } = input;\n const techStackList = targetTechStack && targetTechStack.length > 0\n ? targetTechStack\n : ['General Programming & Engineering'];\n\n const loList = lesson.learningObjectives\n .map((lo) => `- [${lo.bloomLevel}] ${lo.code}: ${lo.name || ''} โ ${lo.description}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Software Architect & Engineering Instructor**, responsible for creating production-quality, runnable Code Labs with automated tests and clear debugging guidance.\n\n# MISSION SCOPE & CANONICAL CONTRACT\nGenerate complete, verified source code that satisfies the lesson objectives and operationalizes the practical tasks of this lesson.\n\n## IN SCOPE:\n- **Environment & Setup:** Specify exact language versions, required packages, IDE setups, and environment variables.\n- **3-Tier Lab Tasks:** Define progressive challenges:\n - ๐ฅ **Bronze:** Basic setup, syntax correctness, clean run.\n - ๐ฅ **Silver:** Core logic implementation, data transformations, error handling.\n - ๐ฅ **Gold:** Advanced edge cases, optimizations, or external service integration.\n- **Verified Code:** Provide complete, runnable Starter Code (with skeleton/TODO markers) and Solution Code (with robust error handling).\n- **Troubleshooting Matrix:** Provide an actionable table with at least 3 common runtime/compilation bugs, their root cause, and exact fix.\n- **Verification Checklist:** End-to-end checks for student self-submission.\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${CODE_LAB_TEMPLATE}\n---\n\n# CANONICAL LESSON CONTEXT (SOURCE OF TRUTH)\n- **Lesson ID:** ${lesson.lessonId}\n- **Lesson Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Lesson Overview:** ${lesson.overview}\n- **Learning Objectives:**\n${loList}\n${lesson.guidedPractice ? `- **Lesson Guided Code:**\\n\\`\\`\\`${lesson.guidedPractice.codeLanguage}\\n${lesson.guidedPractice.codeSnippet}\\n\\`\\`\\`` : ''}\n${activity?.objective ? `- **Activity Practical Objective:** ${activity.objective}` : ''}\n\n# INPUT PARAMETERS\n- **Tech Stack:** ${techStackList.join(', ')}\n- **Language Policy:** Code comments, explanations, and instructions in **\"${language}\"**.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching CodeLabSchema with these exact keys:\n- \"artifactType\": \"CODE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"techStack\": string[]\n- \"environmentSetup\": { \"languageFramework\": string, \"ideEditor\": string, \"requiredLibraries\": string[], \"hardwareOrEnvConnection\": string }\n- \"threeTierTasks\": {\n \"bronze\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string },\n \"silver\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string },\n \"gold\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string }\n }\n- \"starterCode\": { \"filename\": string, \"language\": string, \"purpose\": \"starter\", \"content\": string, \"explanation\": string }\n- \"solutionCode\": { \"filename\": string, \"language\": string, \"purpose\": \"solution\", \"content\": string, \"explanation\": string }\n- \"testCases\": array of { \"description\": string, \"input\": string, \"expectedOutput\": string }\n- \"troubleshootingMatrix\": array of { \"issue\": string, \"potentialCause\": string, \"solution\": string }\n- \"commonBugsAndFixes\": array of { \"bugDescription\": string, \"solutionHint\": string }\n- \"submissionChecklist\": string[]\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface WorksheetPromptInput {\n lesson: LessonPlan;\n language: string;\n}\n\nexport function buildWorksheetPrompt(input: WorksheetPromptInput): string {\n const { lesson, language } = input;\n\n return `\n# System Methodology: Guided Worksheet Design (@activity โ Scaffolded Practice)\n\nYou are the **@activity** specialist designing a Guided Worksheet (WKS) based on the **Gradual Release Model** (I Do -> We Do -> You Do).\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all instructions, questions, think-aloud reflection prompts, and checkpoints strictly in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Objectives:** ${lesson.learningObjectives.map((lo) => lo.description).join('; ')}\n\n## REQUIREMENTS\n1. **Scaffolding Ladder:** Include exercises spanning across:\n - Section A (โญ Remember / Fill-in-the-blank)\n - Section B (โญโญ Understand / Short answer)\n - Section C (โญโญโญ Apply / Scenario-based problem)\n - Section D (โญโญโญโญ Analyze / Extension challenge)\n2. **Think-Aloud Prompts:** Include metacognitive reflection prompts.\n3. **Checkpoints:** Include teacher-signoff checkpoints to prevent misconceptions.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching WorksheetSchema with these exact keys:\n- \"artifactType\": \"WKS\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"learningObjectivesSummary\": string[] (checklist of objectives students will achieve)\n- \"exercises\": array of {\n \"exerciseId\": string (e.g. \"Ex1_A\", \"Ex2_B\"),\n \"sectionTier\": \"Section_A_Remember\" | \"Section_B_Understand\" | \"Section_C_Apply\" | \"Section_D_Analyze\",\n \"difficultyStars\": number (1 to 4),\n \"prompt\": string,\n \"starterSnippetOrTemplate\": string (optional code with blanks or template to complete),\n \"answerSpaceType\": \"code_box\" | \"text_lines\" | \"multiple_choice\" | \"matching_table\",\n \"hint\": string (optional scaffolding hint)\n }\n- \"thinkAloudPrompts\": string[] (metacognitive reflection prompts)\n- \"checkpoints\": array of {\n \"afterExerciseId\": string,\n \"instruction\": string\n }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface HandoutPromptInput {\n lesson: LessonPlan;\n language: string;\n}\n\nexport function buildHandoutPrompt(input: HandoutPromptInput): string {\n const { lesson, language } = input;\n\n return `\n# System Methodology: Student Reference Handout (@content โ Publishing Mode)\n\nYou are the **@content** specialist creating an instant-reference Student Handout following the **5-Second Rule** (scannable, concise, learner-facing).\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all headings, bullet points, callout boxes, and glossary definitions strictly in **\"${language}\"**.\n- Use second-person voice (\"You will...\").\n\n## MASTER LESSON CONTRACT\n- **Lesson ID:** ${lesson.lessonId}\n- **Title:** ${lesson.title}\n- **Overview:** ${lesson.overview}\n\n## REQUIREMENTS\n1. **5-Second Scannability:** Max 3 heading levels, concise bullet points (<= 7 per list), bold key terms on first use.\n2. **Tables & Snippets:** Use tables for comparisons or pinouts, and clean copy-paste ready code syntax blocks.\n3. **Callout Boxes:** Include at least one Key Formula / Syntax Box, Analogy Reminder, or Common Mistake callout.\n4. **Zero-Jargon Glossary:** Define all newly introduced technical terms in plain language.\n5. **Sanitization:** Do NOT include teacher notes, Bloom tags, or answer keys in this student handout.\n\n## REQUIRED JSON KEYS\nPlease return a single JSON object matching these exact keys:\n- \"artifactType\": \"HANDOUT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"tagline\": string (1-sentence summary in \"${language}\")\n- \"sections\": array of { \"heading\": string, \"summaryPoints\": string[], \"codeSnippet\": string, \"calloutBox\": { \"type\": \"key_formula\" | \"analogy_reminder\" | \"common_mistake\", \"title\": string, \"content\": string } }\n- \"glossary\": array of { \"term\": string, \"definition\": string }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface SlidesPromptInput {\n lesson: LessonPlan;\n language: string;\n marpTheme?: string;\n}\n\nexport function buildSlidesPrompt(input: SlidesPromptInput): string {\n const { lesson, language, marpTheme } = input;\n const concepts = lesson.coreConcepts || [];\n\n return `\n# System Methodology: Marp Presentation Slides Deck (@illustrator + @content)\n\nYou are the **@illustrator + @content** presentation architect. Your mission is to produce a pedagogically structured, highly interactive Marp presentation deck built on **Chunky Micro-Cycle Learning (Learn-Apply-Validate Loops)**.\n\n## PEDAGOGICAL PHILOSOPHY (ANTI-FRONT-LOADING)\nโ **DO NOT DUMP THEORY ALL AT ONCE:** Never lecture through Concept 1, 2, and 3 consecutively for 30 minutes before giving students a hands-on task. This causes severe cognitive overload and passive disengagement.\nโ
**CHUNKY MICRO-LEARNING & IMMEDIATE APPLICATION:** Break the lesson into self-contained batches. For EACH concept batch, provide foundational theory, followed IMMEDIATELY by a quick hands-on micro-practice / cold-call check. Only after students master the micro-bricks do we transition into the **Integrated Advanced Hands-On Lab**.\n\n---\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all slide titles, bullet points, diagram labels, and presenter notes in **\"${language}\"**.\n- Keep programming keywords and code syntax intact.\n\n## MASTER LESSON CONTRACT\n- **Lesson ID:** ${lesson.lessonId}\n- **Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Overview:** ${lesson.overview}\n- **Theme:** ${marpTheme || 'gaia'}\n- **Core Concepts (${concepts.length}):**\n${concepts.map((c, i) => ` ${i + 1}. **${c.name}**: ${c.technicalDepth || ''} (Analogy: ${c.analogy || ''})`).join('\\n')}\n\n---\n\n## DYNAMIC SLIDE ARCHITECTURE (CHUNKY MICRO-CYCLES)\n\n### Phase 1: Anchor Opening (~3-4 slides)\n1. **Title & Mission:** Lesson name, real-world context, and overarching build objective.\n2. **Roadmap & Agenda:** Visual journey breakdown showing the micro-milestones and timing.\n3. **Prior Knowledge Warm-up (Review):** 2 cold-call questions activating existing mental models.\n4. **Hook Scenario (Engage):** High-stakes real-world engineering problem (stakes & constraints, no solution yet).\n\n### Phase 2: Concept Micro-Cycles (Repeat this 4-6 slide loop for EACH Core Concept Batch)\nFor EACH Concept Batch ($i = 1 \\\\dots N$):\n- **Slide A: Core Definition & Mental Model** โ What is it? Real-world analogy with visual clarity.\n- **Slide B: Visual Architecture / Diagram** โ Mermaid sequence diagram, data flow, or component wiring.\n- **Slide C: Code Demo (I Do)** โ Concise, annotated runnable snippet showing the minimal syntax.\n- **Slide D: Quick Micro-Practice / Try It Now (We Do / You Do)** โ A 3-5 minute immediate interactive task for students to write/modify 3-5 lines of code at their desks.\n- **Slide E: Concept Check / Cold-Call** โ 1 rapid formative check question with instant reveal.\n- **Slide F: Golden Rule / Takeaway** โ 1 key takeaway, syntax rule, or anti-pattern to avoid.\n\n### Phase 3: Integrated Advanced Hands-On Lab (~3-4 slides)\n*Only after all concept micro-bricks are learned and verified do we assemble them into the comprehensive project challenge:*\n- **Advanced Challenge Briefing:** The big mission integrating all concepts together.\n- **3-Tier Differentiation:**\n - ๐ฅ **Bronze:** Complete core working pipeline.\n - ๐ฅ **Silver:** Error handling, resilience, and input validation.\n - ๐ฅ **Gold:** Performance optimization, edge cases, and asynchronous polish.\n- **Live Execution Protocol & Gotchas:** Step-by-step workflow, debugging tips, and emergency rollback.\n\n### Phase 4: Reflection & Closing (~2-3 slides)\n- **Formative Checkpoint (Traffic Light):** ๐ข Ready / ๐ก Shaky / ๐ด Stuck with instant troubleshooting tips.\n- **Exit Ticket:** 2 technical scenario questions + 1 metacognitive reflection prompt.\n- **Summary & Next Milestone Preview:** 3 core takeaways and teaser for the next lesson.\n\n---\n\n## COMPOSITION & COGNITIVE LOAD RULES\n- **Max 6 bullet points per slide** (Miller's Law).\n- **Max 15 words per bullet point** โ use fragments, code blocks, and visual tables.\n- **Code Slides:** Use fenced code blocks with language tags and line-by-line annotations.\n- **Presenter Notes:** Include detailed teacher talk tracks, cold-call prompts, and facilitation tips for every single slide.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching SlideDeckSchema with these exact keys:\n- \"artifactType\": \"SLIDE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"marpTheme\": \"${marpTheme || 'gaia'}\"\n- \"slides\": array of {\n \"slideNumber\": number (1 to N),\n \"slideType\": \"title\" | \"agenda\" | \"review\" | \"hook\" | \"concept_def\" | \"concept_visual\" | \"concept_compare\" | \"concept_check\" | \"concept_recap\" | \"code_demo\" | \"guided_practice\" | \"activity_intro\" | \"activity_steps\" | \"checkpoint\" | \"exit_ticket\" | \"summary_next\" | \"custom\",\n \"title\": string (in \"${language}\"),\n \"bloomTag\": \"Remember\" | \"Understand\" | \"Apply\" | \"Analyze\" | \"Evaluate\" | \"Create\" | \"None\",\n \"bulletPoints\": string[] (Max 6 points, max 15 words each),\n \"codeSnippet\": string (optional, runnable snippet),\n \"diagramMermaid\": string (optional, valid mermaid code),\n \"presenterNotes\": string (optional, detailed talk track)\n }\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\n\nexport interface TeacherGuidePromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n}\n\nexport function buildTeacherGuidePrompt(input: TeacherGuidePromptInput): string {\n const { lesson, activity, language } = input;\n\n return `\n# System Methodology: Teacher Facilitation Guide (@guide)\n\nYou are the **@guide** instructional coach. Your goal is to produce a practical, insightful Teacher Guide for delivering this lesson and troubleshooting student roadblocks.\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all rationales, misconceptions, troubleshooting guides, and rubric descriptions strictly in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Overview:** ${lesson.overview}\n- **Activity Context:** ${activity ? activity.objective : 'Standard lesson activities'}\n\n## REQUIREMENTS\n1. **Instructional Rationale:** Why this sequence works and how to guide pacing.\n2. **Common Misconceptions & Counter-Strategies:** Identify what students often confuse and provide actionable counter-explanations.\n3. **Troubleshooting Guide:** Detail at least 2 common technical bugs/symptoms, root causes, and explicit fixes.\n4. **Scoring Rubric:** Provide criteria for \"Meets Standard\" vs \"Exceeds Standard\" student performance.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching TeacherGuideSchema with these exact keys:\n- \"artifactType\": \"GUIDE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"pedagogicalRationale\": string (the instructional purpose behind this lesson flow)\n- \"commonMisconceptions\": array of {\n \"misconception\": string (what students often wrongly assume or confuse),\n \"counterStrategy\": string (how the teacher should explain or demonstrate the truth)\n }\n- \"troubleshootingGuide\": array of {\n \"symptom\": string (error message or failure symptom),\n \"rootCause\": string (why this occurs),\n \"solution\": string (exact step to fix it)\n }\n- \"scoringRubric\": array of {\n \"criteriaName\": string,\n \"meetsStandard\": string (description of acceptable student performance),\n \"exceedsStandard\": string (description of advanced mastery)\n }\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\n\nexport interface ExtensionPromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n}\n\nexport function buildExtensionPrompt(input: ExtensionPromptInput): string {\n const { lesson, activity, language } = input;\n\n return `\n# System Methodology: Extension Challenges & Novel Context (@extension)\n\nYou are the **@extension** specialist. Your mission is to design advanced, creative extension challenges that apply the lesson skills to novel real-world contexts without altering the core learning objectives.\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output challenge titles, context narratives, tasks, and guidance in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Objectives:** ${lesson.learningObjectives.map((lo) => lo.description).join('; ')}\n- **Base Activity:** ${activity ? activity.objective : lesson.overview}\n\n## REQUIREMENTS\n1. Provide at least 2 distinct challenges (e.g. one technical optimization challenge, one authentic real-world application challenge).\n2. Keep the core learning objective preserved while increasing complexity or agency.\n3. Clearly define the expected deliverable for each challenge.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching ExtensionSchema with these exact keys:\n- \"artifactType\": \"EXT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"coreLearningObjectivePreserved\": string (the core LO extended by these challenges)\n- \"challenges\": array of {\n \"challengeNumber\": number (1, 2, ...),\n \"title\": string (Catchy title for the extension project),\n \"contextDescription\": string (Novel real-world context for applying the skill),\n \"taskDescription\": string (Specific goal and requirements of the challenge),\n \"expectedDeliverable\": string (What the student produces: code, prototype, or report),\n \"hintOrGuidance\": string (optional open-ended exploration prompt)\n }\n`.trim();\n}\n","export interface JudgePromptInput {\n targetArtifactType: string;\n lessonId: string;\n expectedLanguage: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n generatedContentJson: string;\n /**\n * VERBATIM standard statements relevant to this artifact, keyed by canonical ID\n * (\"packId:statementId\" -> verbatim text). Sourced from the Standards Registry.\n * The judge compares the candidate against the REAL standard text, never memory.\n * Optional for backward compatibility.\n */\n standardStatements?: Record<string, string>;\n}\n\nexport function buildJudgePrompt(input: JudgePromptInput): string {\n const { targetArtifactType, lessonId, expectedLanguage, targetObjectives, generatedContentJson, standardStatements } = input;\n\n return `\n# System Methodology: Multi-Agent LLM-as-Judge & Pedagogical Quality Auditor (@validator)\n\nYou are the **@validator / LLM-as-Judge** expert. Your task is to impartially and rigorously audit the generated curriculum artifact against pedagogical standards, Bloom's Taxonomy alignment, technical validity, and strict language adherence.\n\n## AUDIT TARGET\n- **Artifact Type:** ${targetArtifactType}\n- **Lesson ID:** ${lessonId}\n- **Expected Output Language:** \"${expectedLanguage}\"\n- **Target Learning Objectives:**\n${targetObjectives.map((lo) => ` - ${lo.code}: ${lo.description} (Bloom: ${lo.bloomLevel})`).join('\\n')}\n\n${standardStatements && Object.keys(standardStatements).length > 0 ? `## STANDARDS GROUND TRUTH (VERBATIM - from Standards Registry)\nThe statements below are COPIED VERBATIM from the official standards this course is bound to:\n${Object.entries(standardStatements).map(([id, text]) => `- [${id}] \"${text}\"`).join(\"\\n\")}\n\nYou MUST audit standards alignment ONLY against the statements above. If the candidate claims alignment with a standard NOT listed here, treat that claim as UNVERIFIABLE and score it down.` : \"\"}\n\n## CANDIDATE CONTENT JSON\n\\`\\`\\`json\n${generatedContentJson}\n\\`\\`\\`\n\n## EVALUATION CRITERIA & SCORING RUBRIC (TOTAL 100 POINTS)\nEvaluate the candidate artifact across these 6 dimensions:\n\n1. **Language Adherence (MANDATORY GATE - 15 pts):**\n - 15 pts: 100% of instructions, explanations, and pedagogy strictly in \"${expectedLanguage}\". Technical keywords and code symbols preserved.\n - 0 pts (FAIL GATE): Language contamination or wrong output language detected.\n\n2. **Bloom & Pedagogical Alignment (25 pts):**\n - 25 pts: Cognitive depth of tasks/questions strictly fulfills the targeted Bloom levels (${targetObjectives.map(o => o.bloomLevel).join(', ')}). No superficial recall masquerading as high-level analysis.\n - 15 pts: Minor misalignment in 1 objective or slight depth variance.\n - 0-10 pts: Severe cognitive mismatch (e.g. asking basic definitions for an Evaluate-level objective).\n\n3. **Standards Alignment (20 pts):**\n - 20 pts: Every learning objective and core activity demonstrably serves the VERBATIM standard statements listed in STANDARDS GROUND TRUTH above; cited statement IDs exist and are used faithfully (statement as destination, not script).\n - 12 pts: All statements covered but 1 shows only partial fidelity (taught implicitly, or the assessment measures adjacent rather than the exact statement behavior).\n - 5 pts: Explicit statement IDs referenced but 1+ IDs do not exist in STANDARDS GROUND TRUTH (hallucinated or stale IDs), or statements ignored while claimed as covered.\n - 0 pts: No standards grounding at all despite STANDARDS GROUND TRUTH being present, or fabricated standard citations.\n ${standardStatements && Object.keys(standardStatements).length > 0 ? '- NOTE: STANDARDS GROUND TRUTH IS PRESENT - this dimension is fully in scope.' : '- NOTE: No STANDARDS GROUND TRUTH provided. Award only for absence of fabricated standard citations; treat 20 pts as N/A and redistribute proportionally.'}\n\n4. **Completeness & Structural Integrity (15 pts):**\n - 15 pts: All required schema fields are fully populated with substantive, age-appropriate content. No empty arrays, stubs, or placeholders.\n - 8 pts: Some fields are thin or lack sufficient pedagogical detail.\n - 0 pts: Missing critical sections.\n\n5. **Technical & Conceptual Accuracy (15 pts):**\n - 15 pts: Code snippets, logic flows, architectural descriptions, and Mermaid diagrams are conceptually sound, valid, and free of syntax hallucinations.\n - 8 pts: Minor syntax inaccuracies or unidiomatic code that does not break core concepts.\n - 0 pts: Severe technical hallucinations, broken logic, or invalid diagrams.\n\n6. **Contract Consistency & Zero-Drift (10 pts):**\n - 10 pts: Satellite artifact strictly adheres to the scope, tech stack, and objectives of Lesson ${lessonId} without introducing unrelated topics.\n - 0-5 pts: Scope drift or topic divergence detected.\n\n## VERDICT RULES\n- **PASS:** Score >= 80 AND Language Adherence = true AND Standards Alignment >= 12 (when STANDARDS GROUND TRUTH is present).\n- **NEEDS_REVISION:** Score between 60 and 79, or minor addressable flaws. Provide concrete, actionable repair prompts.\n- **FAIL:** Score < 60, Language Adherence failed, empty sections, critical technical hallucinations, or hallucinated standard IDs when STANDARDS GROUND TRUTH is present.\n\n## REQUIRED JSON KEYS\nPlease return a single JSON object matching these exact keys:\n- \"targetArtifactType\": \"${targetArtifactType}\"\n- \"lessonId\": \"${lessonId}\"\n- \"overallVerdict\": \"PASS\" | \"NEEDS_REVISION\" | \"FAIL\"\n- \"totalScore\": number (0 to 100)\n- \"languageAdherencePassed\": boolean\n- \"criteria\": array of { \"name\": string, \"passed\": boolean, \"score\": number, \"feedback\": string }\n- \"actionableRepairPrompts\": string[]\n`.trim();\n}\n","import type { MilestoneInput, ProjectGraph } from '../../schemas';\nimport { SELF_LAB_TEMPLATE } from '../../templates';\n\nexport interface SelfLabPromptInput {\n milestone: MilestoneInput;\n projectGraph?: ProjectGraph;\n language: string;\n targetTechStack?: string[];\n contextContinuity?: string;\n}\n\nexport function buildSelfLabPrompt(input: SelfLabPromptInput): string {\n const { milestone, projectGraph, language, targetTechStack, contextContinuity } = input;\n const techStackList = (targetTechStack && targetTechStack.length > 0)\n ? targetTechStack\n : (milestone.tech_keywords && milestone.tech_keywords.length > 0)\n ? milestone.tech_keywords\n : ['General Engineering'];\n const learningObjectives = milestone.learning_objectives || [];\n const normalizedDifficulty = (milestone.difficulty || 'intermediate').toLowerCase() as 'beginner' | 'intermediate' | 'advanced';\n\n const loList = learningObjectives\n .map((lo) => `- [${lo.bloom_level || 'understand'}] ${lo.code}: ${lo.name || ''} โ ${lo.description || ''}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Software Engineering Mentor & Self-Paced Learning Architect**, dedicated to creating autonomous, inquiry-based labs for independent developers.\n\n# MISSION SCOPE & DESIGN PRINCIPLES\nBuild a complete, engaging Self-Paced Hands-On Lab (SELF_LAB) for autonomous learners.\n\n## CRITICAL PILLARS FOR SELF-LEARNERS:\n1. **Progressive Challenges (3 Tiers):**\n - ๐ฅ **Bronze:** Foundational implementation, basic syntax correctness, verifying environment setup.\n - ๐ฅ **Silver:** Core logic, state transformation, and explicit error handling (e.g. timeouts, bad inputs).\n - ๐ฅ **Gold:** Edge cases, optimizations, performance profiling, or asynchronous resilience.\n2. **Progressive Hints System (3 Tiers per Challenge):**\n - ๐ก **Hint Level 1 (Conceptual Clue):** High-level architectural hint or mental model. DO NOT give code yet.\n - ๐ **Hint Level 2 (Structural Skeleton):** Method signature, structural boilerplate, or function signature with TODOs.\n - ๐จ **Hint Level 3 (Full Solution & Post-Mortem):** Complete verified solution code + a concise explanation of *Why this works best*.\n3. **Automated Self-Verification Commands:**\n - For EACH challenge, provide an executable terminal command or test runner (e.g. \\`curl ... | jq .\\`, \\`swift test --filter ...\\`, \\`pytest -k ...\\`) and the **Exact Expected Output**.\n4. **Actionable Troubleshooting Matrix:**\n - At least 3 realistic runtime errors/gotchas, their exact root causes, and step-by-step fixes.\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${SELF_LAB_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Milestone ID:** ${milestone.id || 'F0-S1'}\n- **Title:** ${milestone.name}\n- **Description:** ${milestone.description}\n- **Tech Stack:** ${techStackList.join(', ')}\n- **Difficulty:** ${normalizedDifficulty}\n- **Language Policy:** Output 100% in **\"${language}\"** (code comments and explanations).\n- **Target Learning Objectives:**\n${loList}\n\n${projectGraph ? `- **Project Graph Context:** ${projectGraph.project.name} (${projectGraph.project.purpose || ''})` : ''}\n${contextContinuity ? `- **Prior Knowledge & Continuity:**\\n${contextContinuity}` : ''}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching SelfLabSchema with these exact keys:\n- \"artifactType\": \"SELF_LAB\"\n- \"labId\": \"${milestone.id || 'F0-S1'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"difficulty\": \"beginner\" | \"intermediate\" | \"advanced\"\n- \"estimatedTotalMinutes\": number (e.g. 60)\n- \"techStack\": string[]\n- \"missionBriefing\": string (Authentic scenario framing what we are building and why)\n- \"preflightChecklist\": string[] (3-5 prerequisite tools/configs)\n- \"challenges\": {\n \"bronze\": {\n \"tier\": \"bronze\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n },\n \"silver\": {\n \"tier\": \"silver\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n },\n \"gold\": {\n \"tier\": \"gold\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n }\n }\n- \"troubleshootingMatrix\": array of { \"symptom\": string, \"rootCause\": string, \"exactFix\": string }\n- \"finalSubmissionChecklist\": string[]\n`.trim();\n}\n","import type { MilestoneInput } from '../../schemas';\nimport { QUIZ_TEMPLATE } from '../../templates';\n\nexport interface DiagnosticQuizPromptInput {\n milestone: MilestoneInput;\n language: string;\n questionCount?: number;\n passingScorePct?: number;\n}\n\nexport function buildDiagnosticQuizPrompt(input: DiagnosticQuizPromptInput): string {\n const { milestone, language, questionCount = 4, passingScorePct = 80 } = input;\n const learningObjectives = milestone.learning_objectives || [];\n\n const loList = learningObjectives\n .map((lo) => `- [${lo.bloom_level || 'understand'}] ${lo.code}: ${lo.name || ''} โ ${lo.description || ''}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Psychometrician & Technical Assessment Specialist (@assessor)**, expert in designing diagnostic scenario-based tests with high-quality distractors.\n\n# MISSION SCOPE\nGenerate a 3-5 question Diagnostic & Active Recall Quiz that deeply evaluates conceptual understanding, code tracing, and architectural trade-offs.\n\n## RIGOROUS RULES FOR HIGH-QUALITY QUESTIONS:\n\n### Bloom Taxonomy Cognitive Action Mapping (MANDATORY โ DO NOT CONFLATE LEVELS):\nUse this mapping to determine which Bloom level each question truly targets. Match questions to the milestone's target level(s) listed in INPUT PARAMETERS.\n\n| Bloom Level | Cognitive Action | Code Task Examples |\n|---|---|---|\n| **Remember** | Recall syntax, definitions, API names | \"What does \\`async/await\\` do?\" |\n| **Understand** | Explain, interpret, classify, **predict execution of existing code**, trace a known algorithm | \"Given this code block, what does it print?\" / \"Why does this loop terminate?\" |\n| **Apply** | Execute a skill in a **new context**, fix a bug in code you haven't seen before, implement from a spec | \"This API response is malformed โ rewrite the parsing logic to handle it\" |\n| **Analyze** | Decompose, compare designs, identify root causes, differentiate competing approaches | \"Compare these two caching strategies for a high-read workload\" |\n| **Evaluate** | Justify architectural decisions, critique trade-offs, argue for a design given constraints | \"Which approach is superior for a mobile-first environment and why?\" |\n\n> โ ๏ธ **CRITICAL RULE:** \"Predict the output of a code snippet\" = **Understand** level, NOT Apply. \"Trace code step by step\" = **Understand**, NOT Apply. Only count as Apply when the student must USE a concept in a context they have NOT seen in the lesson.\n\n### Question Generation Rules:\n1. **Respect Milestone Bloom Level:** The milestone targets \\`${milestone.bloom_level || 'understand'}\\`. Distribute question cognitive demand to match or exceed this level. Do NOT force all questions to Apply+ if the milestone targets Understand.\n2. **Scenario-Based Stems:** Frame questions around realistic engineering problems (e.g. \"A sensor network experiences packet loss...\", \"The UI thread freezes when...\").\n3. **Code-Based Questions:** Include a concise code snippet in at least 2 questions. Tag each with the correct Bloom level using the table above:\n - If students **trace or predict** โ tag as \\`\"understand\"\\`\n - If students **debug in a new scenario** โ tag as \\`\"apply\"\\`\n - If students **compare architectures** โ tag as \\`\"analyze\"\\`\n4. **Plausible Distractors (Cognitive Traps):** Every incorrect option (distractor) MUST represent a common student misconception, subtle edge case, or logical fallacy (e.g. inverted pin modes, millisecond vs second units, blocking delay, forgetting current-limiting resistor, missing pullup).\n - โ PROHIBITED LAZY DISTRACTORS: NEVER use \"All of the above\", \"None of the above\", \"Cแบฃ 3 ฤแปu ฤรบng\", \"Khรดng cรณ ฤรกp รกn nร o\", or throwaway non-options.\n5. **Comprehensive Explanations:** For EVERY option (A, B, C, D), explain *Why it is right* or *Why it is a trap*.\n\n### FEW-SHOT GOLD EXEMPLARS:\n\n#### Example 1: Understand Level (Code Tracing / Output Prediction)\n- **Stem:** \"Given the following loop with a delay in Arduino C++, what is the exact duration of one complete blink cycle?\"\n- **Code:** \\`digitalWrite(13, HIGH); delay(200); digitalWrite(13, LOW); delay(800);\\`\n- **Options:**\n - A (Correct): \"1000ms (1.0 second) because the total period equals the ON time (200ms) plus the OFF time (800ms).\"\n - B (Trap): \"200ms because only the HIGH state duration is counted as the cycle period.\"\n - C (Trap): \"800ms because the longer delay overrides the shorter delay in the execution queue.\"\n - D (Trap): \"600ms due to subtracting the ON duration from the OFF duration.\"\n\n#### Example 2: Apply Level (Debugging Logic Bug in Novel Scenario)\n- **Stem:** \"A student connects an LED to digital pin 12. In setup(), they wrote \\`pinMode(13, OUTPUT);\\`. In loop(), they call \\`digitalWrite(12, HIGH);\\`. What physical symptom occurs and what is the exact root cause?\"\n- **Options:**\n - A (Correct): \"The LED on pin 12 remains very dim or off because pin 12 was left in default high-impedance INPUT mode.\"\n - B (Trap): \"The microcontroller immediately overheats and triggers an overcurrent reset.\"\n - C (Trap): \"The Arduino IDE compiler rejects the sketch with a 'Pin Mismatch Error'.\"\n - D (Trap): \"The LED on pin 13 blinks instead because digitalWrite redirects to the configured pin.\"\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${QUIZ_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Milestone ID:** ${milestone.id || 'F0-S1'}\n- **Milestone Name:** ${milestone.name}\n- **Description:** ${milestone.description}\n- **Number of Questions:** ${questionCount}\n- **Passing Score (%):** ${passingScorePct}%\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Learning Objectives to Assess:**\n${loList}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching DiagnosticQuizSchema with these exact keys:\n- \"artifactType\": \"QUIZ\"\n- \"quizId\": \"${milestone.id || 'F0-S1'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"passingScorePct\": ${passingScorePct}\n- \"questions\": array of {\n \"id\": string (e.g. \"Q1\", \"Q2\"),\n \"bloomLevel\": \"understand\" | \"apply\" | \"analyze\" | \"evaluate\",\n \"scenarioOrStem\": string,\n \"codeSnippet\": string (optional, concise code snippet),\n \"codeLanguage\": string (e.g. \"swift\", \"python\", \"typescript\"),\n \"options\": array of {\n \"id\": \"A\" | \"B\" | \"C\" | \"D\",\n \"text\": string,\n \"isCorrect\": boolean (exactly one option true per question),\n \"explanation\": string (detailed breakdown why this option is correct or a pitfall)\n },\n \"takeawayMessage\": string (key takeaway)\n }\n`.trim();\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { LessonPlanSchema, type LessonPlan, type MilestoneInput } from '../../schemas';\nimport { buildLessonMasterPrompt, type LessonPromptInput } from '../prompts';\n\nexport interface GenerateLessonMasterInput extends Omit<LessonPromptInput, 'milestone'> {\n milestone: MilestoneInput;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateLessonMasterFlow(input: GenerateLessonMasterInput): Promise<LessonPlan> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildLessonMasterPrompt({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: input.contextContinuity,\n standardsContext: input.standardsContext,\n });\n\n const { object } = await generateObject({\n model,\n schema: LessonPlanSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { ActivityLabSchema, type ActivityLab, type LessonPlan } from '../../schemas';\nimport { buildActivityPrompt, type ActivityPromptInput } from '../prompts';\n\nexport interface GenerateActivityInput extends Omit<ActivityPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateActivityFlow(input: GenerateActivityInput): Promise<ActivityLab> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildActivityPrompt({\n lesson: input.lesson,\n language: input.language,\n hardwareBOM: input.hardwareBOM,\n softwareTools: input.softwareTools,\n });\n\n const { object } = await generateObject({\n model,\n schema: ActivityLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { CodeLabSchema, type CodeLab, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildCodeLabPrompt, type CodeLabPromptInput } from '../prompts';\n\nexport interface GenerateCodeLabInput extends Omit<CodeLabPromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateCodeLabFlow(input: GenerateCodeLabInput): Promise<CodeLab> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildCodeLabPrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n targetTechStack: input.targetTechStack,\n });\n\n const { object } = await generateObject({\n model,\n schema: CodeLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { WorksheetSchema, type Worksheet, type LessonPlan } from '../../schemas';\nimport { buildWorksheetPrompt, type WorksheetPromptInput } from '../prompts';\n\nexport interface GenerateWorksheetInput extends Omit<WorksheetPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateWorksheetFlow(input: GenerateWorksheetInput): Promise<Worksheet> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildWorksheetPrompt({\n lesson: input.lesson,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: WorksheetSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { HandoutSchema, type Handout, type LessonPlan } from '../../schemas';\nimport { buildHandoutPrompt, type HandoutPromptInput } from '../prompts';\n\nexport interface GenerateHandoutInput extends Omit<HandoutPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateHandoutFlow(input: GenerateHandoutInput): Promise<Handout> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildHandoutPrompt({\n lesson: input.lesson,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: HandoutSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { SlideDeckSchema, type SlideDeck, type LessonPlan } from '../../schemas';\nimport { buildSlidesPrompt, type SlidesPromptInput } from '../prompts';\n\nexport interface GenerateSlidesInput extends Omit<SlidesPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateSlidesFlow(input: GenerateSlidesInput): Promise<SlideDeck> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildSlidesPrompt({\n lesson: input.lesson,\n language: input.language,\n marpTheme: input.marpTheme,\n });\n\n const { object } = await generateObject({\n model,\n schema: SlideDeckSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { TeacherGuideSchema, type TeacherGuide, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildTeacherGuidePrompt, type TeacherGuidePromptInput } from '../prompts';\n\nexport interface GenerateTeacherGuideInput extends Omit<TeacherGuidePromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateTeacherGuideFlow(input: GenerateTeacherGuideInput): Promise<TeacherGuide> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildTeacherGuidePrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: TeacherGuideSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { ExtensionSchema, type Extension, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildExtensionPrompt, type ExtensionPromptInput } from '../prompts';\n\nexport interface GenerateExtensionInput extends Omit<ExtensionPromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateExtensionFlow(input: GenerateExtensionInput): Promise<Extension> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildExtensionPrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: ExtensionSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { CurriculumQualityReportSchema, type CurriculumQualityReport } from '../../schemas';\nimport { buildJudgePrompt, type JudgePromptInput } from '../prompts';\n\nexport interface AuditCurriculumQualityInput extends JudgePromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function auditCurriculumQualityFlow(input: AuditCurriculumQualityInput): Promise<CurriculumQualityReport> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildJudgePrompt({\n targetArtifactType: input.targetArtifactType,\n lessonId: input.lessonId,\n expectedLanguage: input.expectedLanguage,\n targetObjectives: input.targetObjectives,\n generatedContentJson: input.generatedContentJson,\n standardStatements: input.standardStatements,\n });\n\n const { object } = await generateObject({\n model,\n schema: CurriculumQualityReportSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { SelfLabSchema, type SelfLab, type MilestoneInput, type ProjectGraph } from '../../schemas';\nimport { buildSelfLabPrompt } from '../prompts';\n\nexport interface GenerateSelfLabInput {\n milestone: MilestoneInput;\n projectGraph?: ProjectGraph;\n language: string;\n targetTechStack?: string[];\n contextContinuity?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateSelfLabFlow(input: GenerateSelfLabInput): Promise<SelfLab> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildSelfLabPrompt({\n milestone: input.milestone,\n projectGraph: input.projectGraph,\n language: input.language,\n targetTechStack: input.targetTechStack,\n contextContinuity: input.contextContinuity,\n });\n\n const { object } = await generateObject({\n model,\n schema: SelfLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { DiagnosticQuizSchema, type DiagnosticQuiz, type MilestoneInput } from '../../schemas';\nimport { buildDiagnosticQuizPrompt } from '../prompts';\n\nexport interface GenerateDiagnosticQuizInput {\n milestone: MilestoneInput;\n language: string;\n questionCount?: number;\n passingScorePct?: number;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateDiagnosticQuizFlow(input: GenerateDiagnosticQuizInput): Promise<DiagnosticQuiz> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildDiagnosticQuizPrompt({\n milestone: input.milestone,\n language: input.language,\n questionCount: input.questionCount,\n passingScorePct: input.passingScorePct,\n });\n\n const { object } = await generateObject({\n model,\n schema: DiagnosticQuizSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { RetryableError, getStepMetadata } from 'workflow';\n\nexport interface ExecuteWithRateLimitOptions<T> {\n stepName: string;\n fn: () => Promise<T>;\n maxAttempts?: number;\n}\n\n/**\n * Wraps async LLM functions to automatically catch 429/503/transient network errors\n * and throw a durable RetryableError with exponential backoff for Vercel Workflow runtime.\n */\nexport async function withRateLimitBackoff<T>(options: ExecuteWithRateLimitOptions<T>): Promise<T> {\n let attempt = 1;\n try {\n const meta = getStepMetadata();\n if (meta && typeof meta.attempt === 'number') {\n attempt = meta.attempt;\n }\n } catch {\n // If called outside workflow step context\n }\n\n try {\n return await options.fn();\n } catch (error: any) {\n const errorMessage = error?.message || String(error);\n const status = error?.status || error?.statusCode || error?.response?.status;\n\n const isRateLimited =\n status === 429 ||\n errorMessage.includes('429') ||\n errorMessage.toLowerCase().includes('rate limit') ||\n errorMessage.toLowerCase().includes('resource exhausted') ||\n errorMessage.toLowerCase().includes('quota exceeded');\n\n const isTransientError =\n status === 500 ||\n status === 502 ||\n status === 503 ||\n status === 504 ||\n errorMessage.includes('fetch failed') ||\n errorMessage.includes('ECONNRESET') ||\n errorMessage.includes('ETIMEDOUT') ||\n errorMessage.includes('socket hang up');\n\n if (isRateLimited || isTransientError) {\n const retryAfterSeconds = Math.min(120, Math.pow(2, attempt) * 2); // 4s, 8s, 16s, 32s, 64s, 120s\n const reason = isRateLimited ? 'Rate limit exceeded (429)' : `Transient server error (${status || 'network'})`;\n\n throw new RetryableError(`[${options.stepName}] ${reason}. Retrying attempt ${attempt + 1}...`, {\n retryAfter: `${retryAfterSeconds}s`,\n });\n }\n\n // Permanent/fatal error\n throw error;\n }\n}\n","import { generateLessonMasterFlow, auditCurriculumQualityFlow } from '../../ai/flows';\nimport { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport type { MilestoneInput, LessonPlan, CurriculumQualityReport } from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface GenerateMasterLessonStepInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n contextContinuity?: string;\n /** Pre-rendered STANDARDS CONTEXT block (verbatim standard statements). */\n standardsContext?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateMasterLessonStep(input: GenerateMasterLessonStepInput): Promise<LessonPlan> {\n 'use step';\n console.log(` โณ [Step: Master Lesson] Generating 5E Master Lesson Plan for \"${input.milestone.name}\"...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-master-lesson-${input.milestone.id || 'L01'}`,\n fn: async () => {\n return generateLessonMasterFlow({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: input.contextContinuity,\n standardsContext: input.standardsContext,\n modelOptions: input.modelOptions,\n });\n },\n });\n console.log(` โ
[Step: Master Lesson] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport interface JudgeMasterLessonStepInput {\n lessonId: string;\n lesson: LessonPlan;\n language: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n /** Verbatim standard statements (canonical ID -> text) for the Standards Alignment judge dimension. */\n standardStatements?: Record<string, string>;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function judgeMasterLessonStep(input: JudgeMasterLessonStepInput): Promise<CurriculumQualityReport> {\n 'use step';\n console.log(` โ๏ธ [Step: Quality Judge] Auditing Master Lesson pedagogical quality & language adherence...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `judge-master-lesson-${input.lessonId}`,\n fn: async () => {\n return auditCurriculumQualityFlow({\n targetArtifactType: 'LESSON',\n lessonId: input.lessonId,\n expectedLanguage: input.language,\n targetObjectives: input.targetObjectives,\n generatedContentJson: JSON.stringify(input.lesson, null, 2),\n standardStatements: input.standardStatements,\n modelOptions: input.modelOptions,\n });\n },\n });\n console.log(` โ
[Step: Quality Judge] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Verdict: ${res.overallVerdict}, Score: ${res.totalScore}/100)`);\n return res;\n}\n\nexport interface RepairMasterLessonStepInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n auditReport: CurriculumQualityReport;\n /** Pre-rendered STANDARDS CONTEXT block โ kept across repair so grounding is never lost. */\n standardsContext?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function repairMasterLessonStep(input: RepairMasterLessonStepInput): Promise<LessonPlan> {\n 'use step';\n console.log(` ๐ ๏ธ [Step: Auto-Repair] Repairing Master Lesson based on Judge feedback...`);\n const repairFeedback = `\nPREVIOUS AUDIT VERDICT: ${input.auditReport.overallVerdict} (Score: ${input.auditReport.totalScore}/100)\nDetected Issues:\n${input.auditReport.criteria.filter((c) => !c.passed).map((c) => `- [${c.name}] ${c.feedback}`).join('\\n')}\nActionable Repairs:\n${input.auditReport.actionableRepairPrompts.map((p) => `* ${p}`).join('\\n')}\nLanguage Adherence Required: \"${input.language}\"\n`.trim();\n\n return withRateLimitBackoff({\n stepName: `repair-master-lesson-${input.milestone.id || 'L01'}`,\n fn: async () => {\n return generateLessonMasterFlow({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: repairFeedback,\n standardsContext: input.standardsContext,\n modelOptions: input.modelOptions,\n });\n },\n });\n}\n","import {\n generateActivityFlow,\n generateCodeLabFlow,\n generateSelfLabFlow,\n generateDiagnosticQuizFlow,\n generateSlidesFlow,\n generateHandoutFlow,\n generateWorksheetFlow,\n generateTeacherGuideFlow,\n generateExtensionFlow,\n} from '../../ai/flows';\nimport { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n MilestoneInput,\n} from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport async function generateActivityStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<ActivityLab> {\n 'use step';\n console.log(` โณ [Step: Activity Lab] Generating hands-on ACT.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-act-${options.lesson.lessonId}`,\n fn: async () => generateActivityFlow(options),\n });\n console.log(` โ
[Step: Activity Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateCodeLabStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n targetTechStack?: string[];\n modelOptions?: ModelResolutionOptions;\n}): Promise<CodeLab> {\n 'use step';\n console.log(` โณ [Step: Code Lab] Generating starter & solution code LAB.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-lab-${options.lesson.lessonId}`,\n fn: async () => generateCodeLabFlow(options),\n });\n console.log(` โ
[Step: Code Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateSelfLabStep(options: {\n milestone: MilestoneInput;\n language: string;\n targetTechStack?: string[];\n modelOptions?: ModelResolutionOptions;\n}): Promise<SelfLab> {\n 'use step';\n console.log(` โณ [Step: Self-Lab] Generating SELF_LAB.md with Progressive Hints...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-self-lab-${options.milestone.id || 'L01'}`,\n fn: async () => generateSelfLabFlow(options),\n });\n console.log(` โ
[Step: Self-Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Challenges: 3 tiers Bronze/Silver/Gold)`);\n return res;\n}\n\nexport async function generateDiagnosticQuizStep(options: {\n milestone: MilestoneInput;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<DiagnosticQuiz> {\n 'use step';\n console.log(` โณ [Step: Diagnostic Quiz] Generating QUIZ.json Bloom Assessment...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-quiz-${options.milestone.id || 'L01'}`,\n fn: async () => generateDiagnosticQuizFlow(options),\n });\n console.log(` โ
[Step: Diagnostic Quiz] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Questions: ${res.questions.length})`);\n return res;\n}\n\nexport async function generateSlidesStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<SlideDeck> {\n 'use step';\n console.log(` โณ [Step: Slides] Generating Marp presentation SLIDE.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-slides-${options.lesson.lessonId}`,\n fn: async () => generateSlidesFlow(options),\n });\n console.log(` โ
[Step: Slides] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Slides: ${res.slides.length})`);\n return res;\n}\n\nexport async function generateHandoutStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Handout> {\n 'use step';\n console.log(` โณ [Step: Handout] Generating 5-Second Rule HANDOUT.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-handout-${options.lesson.lessonId}`,\n fn: async () => generateHandoutFlow(options),\n });\n console.log(` โ
[Step: Handout] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateWorksheetStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Worksheet> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-worksheet-${options.lesson.lessonId}`,\n fn: async () => generateWorksheetFlow(options),\n });\n}\n\nexport async function generateTeacherGuideStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<TeacherGuide> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-teacher-guide-${options.lesson.lessonId}`,\n fn: async () => generateTeacherGuideFlow(options),\n });\n}\n\nexport async function generateExtensionStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Extension> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-extension-${options.lesson.lessonId}`,\n fn: async () => generateExtensionFlow(options),\n });\n}\n","import { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport { auditCurriculumQualityFlow } from '../../ai/flows/auditCurriculumQualityFlow';\nimport type { CurriculumQualityReport } from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface JudgeSatelliteStepInput {\n artifactType: string; // 'ACT' | 'QUIZ' | 'SLIDE' | 'GUIDE' | 'WKS' | 'HANDOUT' | 'EXT' | 'CODE'\n artifactId: string;\n artifact: unknown;\n language: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n standardStatements?: Record<string, string>;\n modelOptions?: ModelResolutionOptions;\n}\n\n/**\n * Gate step for satellite artifacts (LLM_JUDGE mode).\n * Judges any artifact JSON against the same 6-dimension rubric; returns the report.\n * The workflow decides what to do with the verdict (log / block / store) โ gate config stays the single source of truth.\n */\nexport async function judgeSatelliteStep(input: JudgeSatelliteStepInput): Promise<CurriculumQualityReport> {\n 'use step';\n const t0 = Date.now();\n console.log(' ๐งโโ๏ธ [Step: Satellite Judge] ' + input.artifactType + ' (' + input.artifactId + ')...');\n return withRateLimitBackoff({\n stepName: 'judge-satellite-' + input.artifactType + '-' + input.artifactId,\n fn: async () => {\n return auditCurriculumQualityFlow({\n targetArtifactType: input.artifactType,\n lessonId: input.artifactId,\n expectedLanguage: input.language,\n targetObjectives: input.targetObjectives,\n generatedContentJson: JSON.stringify(input.artifact),\n standardStatements: input.standardStatements,\n modelOptions: input.modelOptions,\n });\n },\n }).then((res) => {\n console.log(' โ
[Satellite Judge] ' + input.artifactType + ' โ ' + res.overallVerdict + ' (' + res.totalScore + '/100) in ' + ((Date.now() - t0) / 1000).toFixed(1) + 's');\n return res;\n });\n}\n","import type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n Worksheet,\n Handout,\n SlideDeck,\n TeacherGuide,\n Extension,\n ProjectInstruction,\n} from '../schemas';\n\n/**\n * Serializes a LessonPlan object into canonical LESSON.md (5E Model & Deep Technical Standards)\n */\nexport function serializeLessonToMarkdown(lesson: LessonPlan): string {\n const learningObjectivesStr = lesson.learningObjectives\n .map((lo) => ` - **[${lo.bloomLevel}] \\`${lo.code}\\`**: ${lo.name ? `${lo.name} โ ` : ''}${lo.description}${lo.successCriteria ? ` (Indicator: ${lo.successCriteria})` : ''}`)\n .join('\\n');\n\n const coreConceptsStr = (lesson.coreConcepts && lesson.coreConcepts.length > 0)\n ? lesson.coreConcepts\n .map((cc, i) => {\n let str = `### Concept ${i + 1}: ${cc.name}\\n${cc.technicalDepth}`;\n if (cc.analogy) {\n str += `\\n\\n- **Real-World Analogy (แบจn dแปฅ thแปฑc tแบฟ):** ${cc.analogy}`;\n }\n if (cc.formulaOrRule) {\n str += `\\n\\n- **Mathematical / Statistical Principle:**\\n ${cc.formulaOrRule}`;\n }\n if (cc.comparisonTable && cc.comparisonTable.headers.length > 0) {\n const headerRow = `| ${cc.comparisonTable.headers.join(' | ')} |`;\n const dividerRow = `| ${cc.comparisonTable.headers.map(() => ':---').join(' | ')} |`;\n const dataRows = cc.comparisonTable.rows.map((r) => `| ${r.join(' | ')} |`).join('\\n');\n str += `\\n\\n#### Comparison & Trade-off Analysis\\n${headerRow}\\n${dividerRow}\\n${dataRows}`;\n }\n return str;\n })\n .join('\\n\\n---\\n\\n')\n : (lesson.sections || [])\n .map((sec, i) => `### Concept ${i + 1}: ${sec.title}\\n* **Teacher Explains:** ${sec.teacherActions}\\n* **Student Observes:** ${sec.studentActions}${sec.analogies.length > 0 ? `\\n* **Analogy:** ${sec.analogies.join('; ')}` : ''}`)\n .join('\\n\\n---\\n\\n');\n\n const guidedPractice = lesson.guidedPractice || {\n title: 'Guided Practice',\n explanation: 'Interactive implementation step.',\n codeSnippet: '# Verified reference code',\n codeLanguage: 'python',\n mermaidDiagram: '',\n };\n\n const mermaidBlock = guidedPractice.mermaidDiagram\n ? `\\`\\`\\`mermaid\\n${guidedPractice.mermaidDiagram.trim()}\\n\\`\\`\\``\n : '';\n\n const troubleshootingRows = (lesson.teacherNotes?.troubleshootingMatrix && lesson.teacherNotes.troubleshootingMatrix.length > 0)\n ? lesson.teacherNotes.troubleshootingMatrix.map((r) => `| ${r.issue} | ${r.potentialCause} | ${r.solution} |`).join('\\n')\n : '| Runtime Timeout / Disconnect | Hardware power fluctuation or wrong IP | Check network broadcast and verify 5V power stability |';\n\n const commonPitfallsStr = (lesson.teacherNotes?.commonPitfalls && lesson.teacherNotes.commonPitfalls.length > 0)\n ? lesson.teacherNotes.commonPitfalls.map((p) => `- ${p}`).join('\\n')\n : '- Forgetting exception handling when payload format changes.';\n\n const effectiveCodeLang = guidedPractice.codeLanguage || (lesson.topic?.toLowerCase().includes('swift') ? 'swift' : 'typescript');\n\n return `<!-- [SME_MANDATE] -->\n<!-- \n Lesson ID: ${lesson.lessonId}\n Title: ${lesson.title}\n Topic: ${lesson.topic}\n Language: ${lesson.language}\n-->\n\n# ${lesson.lessonId}: ${lesson.title}\n\n---\n\n## 0. Overview\n- **Duration:** 90 minutes\n- **Target Audience:** ${lesson.targetGradeOrAudience || 'Learners'}\n- **Learning Objectives (Bloom's Taxonomy):**\n${learningObjectivesStr}\n- **Prerequisites & Continuity:** ${lesson.prerequisites || 'Basic understanding of foundational programming and protocols.'}\n- **Materials & Tools Required:** ${lesson.materialsSummary || 'Developer workstation with terminal and code editor.'}\n- **Core Vocabulary & Keywords:** ${lesson.keywords?.join(', ') || 'N/A'}\n\n---\n\n## 1. ENGAGE (Hook & High-Stakes Scenario) โ 10-15 mins\n\n### Real-World Context: \"${lesson.hookTitle || 'The Incident'}\"\n${lesson.hookScenario}\n\n${lesson.hookQuestions && lesson.hookQuestions.length > 0 ? lesson.hookQuestions.map((q, idx) => `- **Inquiry Question ${idx + 1}:** ${q}`).join('\\n') : '- **Inquiry Question 1:** How can our system distinguish between legitimate telemetry and corrupted signals?'}\n\n---\n\n## 2. EXPLORE & EXPLAIN (Core Technical Concepts & Principles) โ 30-40 mins\n\n${coreConceptsStr}\n\n---\n\n## 3. GUIDED PRACTICE (Visual Architecture & Annotated Code) โ 20-25 mins\n\n### System Architecture & Data Flow (Mermaid Diagram)\n${mermaidBlock}\n\n### Verified Reference Code with Line-by-Line Annotations\n<!-- [SME_MANDATE] -->\n\\`\\`\\`${effectiveCodeLang}\n${guidedPractice.codeSnippet}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n---\n\n## 4. ELABORATE & INDEPENDENT PRACTICE (Technical Challenge & Scaffolding) โ 15-20 mins\n\n### Engineering Challenge: \"${lesson.independentPractice?.title || 'System Optimization Challenge'}\"\n${lesson.independentPractice?.description || 'Implement the core logic and test against simulated edge cases.'}\n\n- ๐ฅ **Bronze (Foundational):** ${lesson.differentiation.bronzeTier || 'Implement the core happy path and run verified test.'}\n- ๐ฅ **Silver (Application):** ${lesson.differentiation.silverTier || 'Add conditional validation and error handling for malformed inputs.'}\n- ๐ฅ **Gold (Enrichment / Creative):** ${lesson.differentiation.goldTier || 'Extend with automated retries, metrics logging, or external notification hooks.'}\n\n---\n\n## 5. EVALUATE (Summary, Assessment & Metacognition) โ 5-10 mins\n\n### Exit Ticket (Bloom: Apply / Analyze)\n> **Scenario Question:** ${lesson.exitTicket.questionStem} \n> **Expected Response / Rubric:** ${lesson.exitTicket.expectedAnswerOrRubric} \n> **Metacognitive Reflection Prompt:** ${lesson.exitTicket.metacognitivePrompt}\n\n---\n\n## 6. Teacher Notes & Troubleshooting Matrix\n- **Common Pitfalls (What Learners Commonly Misunderstand):**\n${commonPitfallsStr}\n\n- **Troubleshooting & Debugging Matrix:**\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n- **Extension Challenges for Advanced Learners:** ${lesson.teacherNotes?.extensionNotes || 'Explore asynchronous concurrency and resilience patterns.'}\n`.trim();\n}\n\n/**\n * Serializes an ActivityLab object into canonical ACT.md (Inquiry-Based & Computational Thinking)\n */\nexport function serializeActivityToMarkdown(act: ActivityLab): string {\n const hardwareItems = act.materialsBOM.hardware.length > 0\n ? act.materialsBOM.hardware.map((h) => `- ${h}`).join('\\n')\n : '- 1 x Standard developer workstation / simulation board';\n\n const ct = act.computationalThinking || {\n problemStatement: act.objective,\n decomposition: [\n '1. Parse incoming parameters and validate input state.',\n '2. Execute core transformation / hardware communication.',\n '3. Verify response telemetry and handle exceptions.',\n ],\n algorithmDesign: 'Structured data flow ensuring state consistency before and after execution.',\n };\n\n const workflow = act.activeLearningWorkflow;\n const phase1 = workflow?.phase1Planning || {\n durationMinutes: 15,\n studentTask: 'Hand-draw the data flow diagram or state machine on paper before writing code.',\n teacherAction: 'Inspect student flowcharts and ask: \"What happens if network latency spikes?\"',\n inquiryQuestions: ['Where is the primary point of failure?', 'How will the system notify the user upon error?'],\n };\n\n const phase2 = workflow?.phase2Implementation || {\n durationMinutes: 40,\n studentTask: 'Implement the logic step by step using the reference specifications.',\n teacherAction: 'Observe student progress and intervene only when a team is stuck for > 5 mins.',\n codeOrCommands: act.steps.map((s) => `# Step ${s.stepNumber}: ${s.title}\\n${s.studentInstructions}`),\n };\n\n const phase3 = workflow?.phase3Debugging || {\n durationMinutes: 15,\n testingSteps: 'Run test suite or live verification commands to confirm expected output.',\n errorAnalysis: 'Compare error logs against the troubleshooting table to isolate hardware vs software faults.',\n };\n\n const diff3Tier = act.differentiation3Tier || {\n bronzeTier: act.scaffoldingSupport || 'Complete basic verified setup and run happy path test.',\n silverTier: 'Implement validation checks and handle error recovery gracefully.',\n goldTier: act.levelUpExtension || 'Extend with automated regression tests or asynchronous event streaming.',\n };\n\n return `---\nid: \"${act.lessonId}\"\ntitle: \"${act.title}\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n<!-- INJECT_BODY -->\n\n# INQUIRY-BASED ACTIVITY: ${act.title}\n_Lesson: ${act.lessonId} | Estimated Duration: ${act.totalDurationMinutes} mins_\n\n## [REQUIRED] Computational Thinking Focus\n- **Problem Statement (Real-world Scenario):** ${ct.problemStatement}\n- **Decomposition (Sub-problems Breakdown):**\n${ct.decomposition.map((d) => ` ${d}`).join('\\n')}\n- **Algorithm Design (Data Flow & Logic Architecture):** ${ct.algorithmDesign}\n\n## [REQUIRED] Materials & Setup\n- **Reference Material:** Students should use the **HANDOUT** and Technical Reference as their primary technical lifeline.\n- **Hardware/Software:**\n<!-- [HARDWARE_BOM] -->\n${hardwareItems}\n<!-- [/HARDWARE_BOM] -->\n- **Software:** ${act.materialsBOM.software.join(', ') || 'IDE and Terminal'}\n- **Consumables:** ${act.materialsBOM.consumables.join(', ') || 'None'}\n- **Other Resources:** ${act.materialsBOM.otherResources.join(', ') || 'Handout cheat sheet'}\n\n## [REQUIRED] Constraints & Safety\n- โ ๏ธ **Technical/Safety:** ${act.safetyWarnings.join('; ') || 'Do not expose unencrypted secrets or exceed hardware electrical ratings.'}\n- ๐ก **Design Constraint:** ${act.designConstraints?.join('; ') || 'All operations must be idempotent and non-blocking.'}\n\n## [REQUIRED] Active Learning Workflow\n\n### Phase 1: Planning & Design โ ${phase1.durationMinutes} mins\n- **Student Task:** ${phase1.studentTask}\n- **Teacher Action:** ${phase1.teacherAction}\n${phase1.inquiryQuestions.map((q) => ` - *Inquiry Question:* ${q}`).join('\\n')}\n\n### Phase 2: Implementation & Discovery โ ${phase2.durationMinutes} mins\n- **Student Task:** ${phase2.studentTask}\n- **Teacher Action:** ${phase2.teacherAction}\n\n${phase2.codeOrCommands.map((c) => `\\`\\`\\`text\\n${c}\\n\\`\\`\\``).join('\\n\\n')}\n\n### Phase 3: Debugging & Testing โ ${phase3.durationMinutes} mins\n- **Testing:** ${phase3.testingSteps}\n- **Error Analysis:** ${phase3.errorAnalysis}\n\n## [REQUIRED] 3-Tier Differentiation\n- ๐ฅ **Bronze (Foundational):** ${diff3Tier.bronzeTier}\n- ๐ฅ **Silver (Application):** ${diff3Tier.silverTier}\n- ๐ฅ **Gold (Enrichment/Creative):** ${diff3Tier.goldTier}\n\n## [REQUIRED] Reflection & Discussion\n- **Discussion Question:** ${act.reflectionQuestion || 'Why is this architectural design superior to a monolithic direct call? Where is the performance bottleneck?'}\n`.trim();\n}\n\n/**\n * Serializes CodeLab object into canonical LAB.md (LAB_TEMPLATE standard)\n */\nexport function serializeCodeLabToMarkdown(codeLab: CodeLab): string {\n const env = codeLab.environmentSetup || {\n languageFramework: codeLab.techStack.join(', '),\n ideEditor: 'VS Code / Xcode / IDE of choice',\n requiredLibraries: codeLab.techStack,\n hardwareOrEnvConnection: 'Localhost / Embedded connection',\n };\n\n const tasks = codeLab.threeTierTasks || {\n bronze: { mins: 15, objective: 'Basic Setup & Syntax', task: 'Implement starter code skeleton', requirement: 'Clean compilation without errors' },\n silver: { mins: 25, objective: 'Core Logic Implementation', task: 'Implement full data processing logic', requirement: 'All standard test cases pass' },\n gold: { mins: 20, objective: 'Edge Cases & Optimization', task: 'Handle network failures and performance tuning', requirement: 'Resilience under edge-case injection' },\n };\n\n const troubleshootingRows = (codeLab.troubleshootingMatrix && codeLab.troubleshootingMatrix.length > 0)\n ? codeLab.troubleshootingMatrix.map((r) => `| ${r.issue} | ${r.potentialCause} | ${r.solution} |`).join('\\n')\n : (codeLab.commonBugsAndFixes && codeLab.commonBugsAndFixes.length > 0)\n ? codeLab.commonBugsAndFixes.map((b) => `| ${b.bugDescription} | Logical error or misconfiguration | ${b.solutionHint} |`).join('\\n')\n : '| Connection Timeout | Network interface down or bad endpoint | Check IP address and retry with timeout wrapper |';\n\n const checklistStr = (codeLab.submissionChecklist && codeLab.submissionChecklist.length > 0)\n ? codeLab.submissionChecklist.map((c) => `- [ ] ${c}`).join('\\n')\n : `- [ ] Starter code compiles and runs without crashes.\\n- [ ] Solution code passes all automated test cases.\\n- [ ] Code comments explain the reasoning behind key algorithms.`;\n\n return `---\nid: \"${codeLab.lessonId}\"\ntitle: \"${codeLab.title}\"\ntype: \"LAB\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n<!-- INJECT_BODY -->\n\n# ๐จโ๐ป CODE LAB: ${codeLab.title}\n_Lesson: ${codeLab.lessonId} | Tech Stack: ${codeLab.techStack.join(', ')}_\n\n## ๐ฏ Overview\nThis lab focuses on the practical implementation of core technical concepts, bridging theory into working, robust, and testable code.\n\n## ๐ ๏ธ Environment & Setup\n- **Language / Framework:** ${env.languageFramework}\n- **IDE / Editor:** ${env.ideEditor}\n- **Required Libraries:** ${env.requiredLibraries.join(', ')}\n- **Hardware / Connection Setup:** ${env.hardwareOrEnvConnection || 'Local dev environment'}\n\n## ๐ Lab Tasks (3-Tier Differentiation)\n\n### ๐ฅ Bronze (Foundational) โ ${tasks.bronze.mins} mins\n**Objective:** ${tasks.bronze.objective}\n- **Task:** ${tasks.bronze.task}\n- **Requirement:** ${tasks.bronze.requirement}\n\n### ๐ฅ Silver (Application) โ ${tasks.silver.mins} mins\n**Objective:** ${tasks.silver.objective}\n- **Task:** ${tasks.silver.task}\n- **Requirement:** ${tasks.silver.requirement}\n\n### ๐ฅ Gold (Enrichment/Creative) โ ${tasks.gold.mins} mins\n**Objective:** ${tasks.gold.objective}\n- **Task:** ${tasks.gold.task}\n- **Requirement:** ${tasks.gold.requirement}\n\n## ๐ป Technical Reference ([SME_MANDATE])\n<!-- [SME_MANDATE] -->\n> Any code provided in this section is verified for syntax accuracy and runtime execution.\n\n### Starter Code Template (\\`${codeLab.starterCode.filename}\\`)\n\\`\\`\\`${codeLab.starterCode.language}\n${codeLab.starterCode.content}\n\\`\\`\\`\n\n### Solution Code (\\`${codeLab.solutionCode.filename}\\`)\n\\`\\`\\`${codeLab.solutionCode.language}\n${codeLab.solutionCode.content}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n## ๐ Troubleshooting & Debugging Matrix\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n## ๐ Submission & Verification Checklist\n${checklistStr}\n`.trim();\n}\n\n/**\n * Serializes Handout to HANDOUT.md (5-Second Rule Cheat Sheet standard)\n */\nexport function serializeHandoutToMarkdown(handout: Handout): string {\n const conceptsStr = (handout.coreConceptsSummary && handout.coreConceptsSummary.length > 0)\n ? handout.coreConceptsSummary.map((c) => `- **${c.concept}:** ${c.definition}`).join('\\n')\n : (handout.sections || []).map((s) => `### ${s.heading}\\n${s.summaryPoints.map((p) => `- ${p}`).join('\\n')}`).join('\\n\\n');\n\n const syntaxTableRows = (handout.syntaxTable && handout.syntaxTable.length > 0)\n ? handout.syntaxTable.map((r) => `| \\`${r.syntax}\\` | ${r.meaning} | \\`${r.example}\\` |`).join('\\n')\n : '| `execute()` | Main trigger function | `const res = await service.execute()` |';\n\n const procedure = handout.problemSolvingProcedure || {\n step1Trigger: 'Identify input parameters, sensor triggers, or user events.',\n step2Logic: 'Transform data, apply business logic, and handle potential errors.',\n step3Output: 'Update system state, persist results, or transmit telemetry.',\n };\n\n const proTipsStr = (handout.proTips && handout.proTips.length > 0)\n ? handout.proTips.map((t) => `> ๐ก **Pro-Tip:** ${t}`).join('\\n')\n : '> ๐ก **Pro-Tip:** Always validate inputs at the system boundary before executing heavy processing.';\n\n return `---\nid: \"${handout.lessonId}\"\ntitle: \"${handout.title}\"\ntype: \"HANDOUT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T6\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n\n# STUDENT HANDOUT: ${handout.title}\n**Quick-Reference Cheat Sheet & Concept Summary**\n\n> **For Students:** This document summarizes the core concepts and the most important syntax following the **5-Second Rule** (instant look-up). Use it as a quick reference during your lab tasks or projects.\n\n## ๐ 1. Core Concepts\n${conceptsStr}\n\n## โก 2. Common Syntax & Configurations\n| Syntax / Config | Meaning & Function | Example / Snippet |\n| :--- | :--- | :--- |\n${syntaxTableRows}\n\n## ๐ 3. General Problem-Solving Procedure\n*Three general thinking steps when tackling problems in this domain:*\n1. **Step 1 (Input/Trigger):** ${procedure.step1Trigger}\n2. **Step 2 (Logic/Transform):** ${procedure.step2Logic}\n3. **Step 3 (Output/Verify):** ${procedure.step3Output}\n\n---\n\n### ๐ก Pro-tips\n${proTipsStr}\n`.trim();\n}\n\n/**\n * Serializes ProjectInstruction to Instructable-style INSTRUCTION.md\n */\nexport function serializeProjectInstructionToMarkdown(instruction: ProjectInstruction): string {\n return `---\nid: \"${instruction.instructionId}\"\ntitle: \"${instruction.title}\"\ntype: \"INSTRUCTION\"\nlanguage: \"${instruction.language}\"\ndifficulty: \"${instruction.difficulty}\"\nestimated_minutes: ${instruction.estimatedTotalMinutes}\ntech_stack: [${instruction.techStack.map((t) => `\"${t}\"`).join(', ')}]\n---\n\n# ๐ ๏ธ ${instruction.title}\n\n> โฑ๏ธ **Estimated Duration:** ~${instruction.estimatedTotalMinutes} mins \n> ๐ฏ **Difficulty:** ${instruction.difficulty.toUpperCase()} \n> ๐งฐ **Tech Stack:** ${instruction.techStack.join(', ')}\n\n---\n\n## ๐ Prerequisites & Tools\n* **Prerequisites:** ${instruction.prerequisites.join('; ') || 'Basic programming knowledge'}\n* **Materials & Tools:** ${instruction.materialsAndTools.join('; ') || 'Standard developer environment'}\n\n---\n\n${instruction.sections\n .map(\n (sec) => `## Section ${sec.sectionNumber}: ${sec.title}\n> ๐ฏ **Goal:** ${sec.goal} (~${sec.estimatedMinutes || 15} mins)\n\n${sec.preflightChecks.length > 0 ? `### ๐ซ Preflight Checks\\n${sec.preflightChecks.map((p) => `- [ ] ${p}`).join('\\n')}\\n` : ''}\n${sec.steps\n .map(\n (step) => `### Step ${step.stepNumber}: ${step.actionTitle}\n\n${step.explanation}\n\n${step.targetFile ? `๐ **File:** \\`${step.targetFile}\\`` : ''}\n\n${step.codeSnippet ? `\\`\\`\\`${step.codeLanguage || 'text'}\\n# ${step.targetFile || 'Implementation'}\\n${step.codeSnippet}\\n\\`\\`\\`` : ''}\n\n${step.tip ? `> [!TIP]\\n> ${step.tip}` : ''}\n${step.warning ? `> [!WARNING]\\n> ${step.warning}` : ''}\n\n**Expected result:** ${step.expectedResult}\n\n${step.imagePlaceholder ? `[IMAGE: ${step.imagePlaceholder}]` : ''}`\n )\n .join('\\n\\n')}\n\n${sec.rollbackOrCleanup ? `> ๐ **Rollback / Reset:** ${sec.rollbackOrCleanup}` : ''}`\n )\n .join('\\n\\n---\\n\\n')}\n\n---\n\n## ๐ Verification Checklist\n${instruction.verificationChecklist.map((c) => `- [ ] ${c}`).join('\\n')}\n`.trim();\n}\n","import type { SelfLab, DiagnosticQuiz } from '../schemas';\n\n/**\n * Serializes SelfLab object into canonical SELF_LAB.md with Progressive Hints (Accordion / Spoilers)\n */\nexport function serializeSelfLabToMarkdown(lab: SelfLab): string {\n const renderChallenge = (c: SelfLab['challenges']['bronze'], label: string) => {\n const tasksList = c.tasks.map((t) => `- ${t}`).join('\\n');\n return `### ${label}: ${c.title} โ ~${c.estimatedMinutes} mins\n**Objective:** ${c.objective}\n\n#### Tasks & Implementation Details:\n${tasksList}\n\n#### ๐งช Self-Verification Command:\n\\`\\`\\`bash\n${c.verifyCommand}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n${c.expectedOutput}\n\\`\\`\\`\n\n#### ๐ก Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>๐ก Hint Level 1: Conceptual Clue (Hฦฐแปng tฦฐ duy)</b></summary>\n\n${c.hints.hint1Concept}\n</details>\n\n<details>\n<summary><b>๐ Hint Level 2: Structural Skeleton (Khung code mแบซu)</b></summary>\n\n\\`\\`\\`${lab.techStack[0]?.toLowerCase() || 'swift'}\n${c.hints.hint2Skeleton}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>๐จ Hint Level 3: Full Solution & Explanation (Lแปi giแบฃi trแปn vแบนn)</b></summary>\n\n\\`\\`\\`${lab.techStack[0]?.toLowerCase() || 'swift'}\n${c.hints.hint3Solution.code}\n\\`\\`\\`\n\n**Why this solution works:**\n${c.hints.hint3Solution.explanation}\n</details>`;\n };\n\n const troubleshootingRows = (lab.troubleshootingMatrix && lab.troubleshootingMatrix.length > 0)\n ? lab.troubleshootingMatrix.map((r) => `| ${r.symptom} | ${r.rootCause} | ${r.exactFix} |`).join('\\n')\n : '| Network Timeout | Device IP unreachable or firewall blocking port | Verify device is on same subnet and ping IP |';\n\n const preflightList = (lab.preflightChecklist && lab.preflightChecklist.length > 0)\n ? lab.preflightChecklist.map((p) => `- [ ] ${p}`).join('\\n')\n : '- [ ] Development environment configured\\n- [ ] Code editor ready';\n\n const finalChecklist = (lab.finalSubmissionChecklist && lab.finalSubmissionChecklist.length > 0)\n ? lab.finalSubmissionChecklist.map((c) => `- [ ] ${c}`).join('\\n')\n : '- [ ] All verification commands pass with expected outputs\\n- [ ] Code is formatted and clean';\n\n return `---\nid: \"${lab.labId}\"\ntitle: \"${lab.title}\"\ntype: \"SELF_LAB\"\nlanguage: \"${lab.language}\"\ndifficulty: \"${lab.difficulty}\"\nestimated_minutes: ${lab.estimatedTotalMinutes}\ntech_stack: [${lab.techStack.map((t) => `\"${t}\"`).join(', ')}]\n---\n\n# ๐ Self-Paced Hands-On Lab: ${lab.title}\n\n> โฑ๏ธ **Estimated Duration:** ~${lab.estimatedTotalMinutes} mins \n> ๐ฏ **Difficulty Level:** ${lab.difficulty.toUpperCase()} \n> ๐งฐ **Tech Stack:** ${lab.techStack.join(', ')} \n> ๐ก **Self-Learner Notice:** You are in full control of this lab. Follow the progressive challenges below. If you get stuck at any point, use the **Progressive Hints System** to get unstuck without ruining the learning experience!\n\n---\n\n## ๐ Mission Briefing & Environment Setup\n${lab.missionBriefing}\n\n### ๐ซ Preflight Checklist\n${preflightList}\n\n---\n\n## ๐ฏ Progressive Challenges (3-Tier Differentiation)\n\n${renderChallenge(lab.challenges.bronze, '๐ฅ Challenge 1: Foundational Core (Bronze)')}\n\n---\n\n${renderChallenge(lab.challenges.silver, '๐ฅ Challenge 2: Logic & Error Handling (Silver)')}\n\n---\n\n${renderChallenge(lab.challenges.gold, '๐ฅ Challenge 3: Edge Cases & Optimization (Gold)')}\n\n---\n\n## ๐ Self-Learner Troubleshooting Matrix\n| Symptom / Error Message | Root Cause | Exact Fix |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n---\n\n## ๐ Final Lab Submission & Mastery Checklist\n${finalChecklist}\n`.trim();\n}\n\n/**\n * Serializes DiagnosticQuiz object into canonical QUIZ.md\n */\nexport function serializeDiagnosticQuizToMarkdown(quiz: DiagnosticQuiz): string {\n const questionsSection = quiz.questions\n .map((q, qIdx) => {\n let qStr = `### Question ${qIdx + 1} (${q.id}) [Bloom: ${q.bloomLevel.toUpperCase()}]\\n${q.scenarioOrStem}`;\n if (q.codeSnippet) {\n qStr += `\\n\\n\\`\\`\\`${q.codeLanguage || 'text'}\\n${q.codeSnippet}\\n\\`\\`\\``;\n }\n qStr += '\\n\\n' + q.options.map((opt) => `- **${opt.id}.** ${opt.text}`).join('\\n');\n return qStr;\n })\n .join('\\n\\n---\\n\\n');\n\n const answerKeySection = quiz.questions\n .map((q, qIdx) => {\n const correctOpt = q.options.find((o) => o.isCorrect) || q.options[0];\n const optExplanations = q.options\n .map((o) => ` - **${o.id}${o.isCorrect ? ' (โ
CORRECT)' : ' (โ)'}:** ${o.explanation}`)\n .join('\\n');\n\n const takeaway = q.takeawayMessage || q.teacherNote || `The correct answer is ${correctOpt.id}.`;\n return `#### Question ${qIdx + 1} (${q.id}) โ Correct Answer: **${correctOpt.id}**\n- **Takeaway:** ${takeaway}\n- **Option Analysis:**\n${optExplanations}`;\n })\n .join('\\n\\n');\n\n return `---\nid: \"${quiz.quizId}\"\ntitle: \"${quiz.title}\"\ntype: \"QUIZ\"\nlanguage: \"${quiz.language}\"\ntotal_questions: ${quiz.questions.length}\npassing_score_pct: ${quiz.passingScorePct}\n---\n\n# ๐ง Diagnostic & Active Recall Quiz: ${quiz.title}\n\n> โฑ๏ธ **Recommended Time:** ~10-15 mins \n> ๐ฏ **Passing Score:** ${quiz.passingScorePct}% \n> ๐ก **Purpose:** Test your conceptual understanding, catch hidden misconceptions, and evaluate architectural trade-offs.\n\n---\n\n${questionsSection}\n\n---\n\n## ๐ Comprehensive Answer Key & Deep Explanation (Expand after completing)\n<details>\n<summary><b>๐ Click to View Full Explanations & Common Pitfall Analysis</b></summary>\n\n${answerKeySection}\n</details>\n`.trim();\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface JobManifest {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n status: 'PENDING' | 'IN_PROGRESS' | 'COMPLETED' | 'FAILED';\n totalMilestones: number;\n completedMilestones: number;\n createdAt: string;\n updatedAt: string;\n artifacts: Array<{\n milestoneId: string;\n artifactType: string;\n filePath: string;\n sizeBytes: number;\n createdAt: string;\n }>;\n error?: string;\n}\n\nexport class LocalWorkspaceManager {\n private baseDir: string;\n\n constructor(baseDir?: string) {\n this.baseDir = baseDir || path.resolve(process.cwd(), 'output', 'workspace-jobs');\n }\n\n getJobDirectory(jobId: string): string {\n return path.join(this.baseDir, jobId);\n }\n\n async initJobWorkspace(\n jobId: string,\n initialInfo: { courseTitle: string; topic: string; language: string; totalMilestones: number }\n ): Promise<string> {\n const jobDir = this.getJobDirectory(jobId);\n await fs.mkdir(jobDir, { recursive: true });\n\n const now = new Date().toISOString();\n const manifest: JobManifest = {\n jobId,\n courseTitle: initialInfo.courseTitle,\n topic: initialInfo.topic,\n language: initialInfo.language,\n status: 'IN_PROGRESS',\n totalMilestones: initialInfo.totalMilestones,\n completedMilestones: 0,\n createdAt: now,\n updatedAt: now,\n artifacts: [],\n };\n\n await this.saveManifest(jobId, manifest);\n return jobDir;\n }\n\n async saveArtifact(\n jobId: string,\n milestoneSlug: string,\n filename: string,\n content: string,\n artifactType: string\n ): Promise<string> {\n const jobDir = this.getJobDirectory(jobId);\n const targetDir = path.join(jobDir, milestoneSlug);\n await fs.mkdir(targetDir, { recursive: true });\n\n const filePath = path.join(targetDir, filename);\n await fs.writeFile(filePath, content, 'utf-8');\n\n const stat = await fs.stat(filePath);\n const manifest = await this.getManifest(jobId);\n\n if (manifest) {\n manifest.artifacts.push({\n milestoneId: milestoneSlug,\n artifactType,\n filePath: path.relative(jobDir, filePath),\n sizeBytes: stat.size,\n createdAt: new Date().toISOString(),\n });\n manifest.updatedAt = new Date().toISOString();\n await this.saveManifest(jobId, manifest);\n }\n\n return filePath;\n }\n\n async getManifest(jobId: string): Promise<JobManifest | null> {\n const manifestPath = path.join(this.getJobDirectory(jobId), 'manifest.json');\n try {\n const data = await fs.readFile(manifestPath, 'utf-8');\n return JSON.parse(data) as JobManifest;\n } catch {\n return null;\n }\n }\n\n async saveManifest(jobId: string, manifest: JobManifest): Promise<void> {\n const manifestPath = path.join(this.getJobDirectory(jobId), 'manifest.json');\n manifest.updatedAt = new Date().toISOString();\n await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');\n }\n\n async markMilestoneCompleted(jobId: string): Promise<void> {\n const manifest = await this.getManifest(jobId);\n if (manifest) {\n manifest.completedMilestones += 1;\n if (manifest.completedMilestones >= manifest.totalMilestones) {\n manifest.status = 'COMPLETED';\n }\n await this.saveManifest(jobId, manifest);\n }\n }\n\n async markJobFailed(jobId: string, errorMsg: string): Promise<void> {\n const manifest = await this.getManifest(jobId);\n if (manifest) {\n manifest.status = 'FAILED';\n manifest.error = errorMsg;\n await this.saveManifest(jobId, manifest);\n }\n }\n}\n","import { Octokit } from '@octokit/rest';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface GitPublishOptions {\n jobId: string;\n localJobDir: string;\n githubToken?: string;\n owner: string;\n repo: string;\n branch?: string;\n commitMessage?: string;\n createPullRequest?: boolean;\n}\n\nexport interface GitPublishResult {\n success: boolean;\n commitSha?: string;\n branch: string;\n pullRequestUrl?: string;\n publishedFilesCount: number;\n error?: string;\n}\n\n/**\n * Publishes generated course artifacts to a designated GitHub Repository (Git-as-CMS)\n */\nexport async function publishToGitHub(options: GitPublishOptions): Promise<GitPublishResult> {\n const token = options.githubToken || process.env.GITHUB_TOKEN;\n if (!token) {\n return {\n success: false,\n branch: options.branch || 'main',\n publishedFilesCount: 0,\n error: 'Missing GITHUB_TOKEN in environment or options',\n };\n }\n\n const octokit = new Octokit({ auth: token });\n const targetBranch = options.branch || `generated/course-${options.jobId}`;\n let publishedFilesCount = 0;\n\n try {\n // 1. Scan all files in local workspace\n const filesToUpload: Array<{ path: string; content: string }> = [];\n\n async function scanDir(currentDir: string) {\n const entries = await fs.readdir(currentDir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n if (entry.isDirectory()) {\n await scanDir(fullPath);\n } else if (entry.isFile() && !entry.name.startsWith('.')) {\n const content = await fs.readFile(fullPath, 'utf-8');\n const relPath = path.relative(options.localJobDir, fullPath);\n filesToUpload.push({ path: relPath, content });\n }\n }\n }\n\n await scanDir(options.localJobDir);\n\n if (filesToUpload.length === 0) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount: 0,\n error: 'No files found in workspace to upload',\n };\n }\n\n // 2. Get reference to base branch (e.g. main)\n const baseBranch = 'main';\n let baseTreeSha: string;\n let baseCommitSha: string;\n\n try {\n const { data: refData } = await octokit.git.getRef({\n owner: options.owner,\n repo: options.repo,\n ref: `heads/${baseBranch}`,\n });\n baseCommitSha = refData.object.sha;\n\n const { data: commitData } = await octokit.git.getCommit({\n owner: options.owner,\n repo: options.repo,\n commit_sha: baseCommitSha,\n });\n baseTreeSha = commitData.tree.sha;\n } catch (e: any) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount: 0,\n error: `Failed to fetch base branch ${baseBranch}: ${e.message}`,\n };\n }\n\n // 3. Create Blobs & Tree Entries\n const treeItems: Array<{ path: string; mode: '100644'; type: 'blob'; sha: string }> = [];\n\n for (const file of filesToUpload) {\n const { data: blobData } = await octokit.git.createBlob({\n owner: options.owner,\n repo: options.repo,\n content: Buffer.from(file.content).toString('base64'),\n encoding: 'base64',\n });\n\n treeItems.push({\n path: file.path,\n mode: '100644',\n type: 'blob',\n sha: blobData.sha,\n });\n publishedFilesCount++;\n }\n\n // 4. Create New Git Tree\n const { data: newTree } = await octokit.git.createTree({\n owner: options.owner,\n repo: options.repo,\n base_tree: baseTreeSha,\n tree: treeItems,\n });\n\n // 5. Create Commit\n const message =\n options.commitMessage ||\n `feat(curriculum): publish generated course artifacts [job:${options.jobId}]`;\n\n const { data: newCommit } = await octokit.git.createCommit({\n owner: options.owner,\n repo: options.repo,\n message,\n tree: newTree.sha,\n parents: [baseCommitSha],\n });\n\n // 6. Update or Create Branch Ref\n try {\n await octokit.git.createRef({\n owner: options.owner,\n repo: options.repo,\n ref: `refs/heads/${targetBranch}`,\n sha: newCommit.sha,\n });\n } catch {\n // If branch already exists, force update ref\n await octokit.git.updateRef({\n owner: options.owner,\n repo: options.repo,\n ref: `heads/${targetBranch}`,\n sha: newCommit.sha,\n force: true,\n });\n }\n\n let prUrl: string | undefined = undefined;\n\n // 7. Optional: Create Pull Request\n if (options.createPullRequest && targetBranch !== baseBranch) {\n try {\n const { data: prData } = await octokit.pulls.create({\n owner: options.owner,\n repo: options.repo,\n title: `[Curriculum AI] Generated Curriculum (${options.jobId})`,\n head: targetBranch,\n base: baseBranch,\n body: `Automated curriculum generation output from job \\`${options.jobId}\\`.\\nContains ${publishedFilesCount} files.`,\n });\n prUrl = prData.html_url;\n } catch {\n // PR might already exist\n }\n }\n\n return {\n success: true,\n commitSha: newCommit.sha,\n branch: targetBranch,\n pullRequestUrl: prUrl,\n publishedFilesCount,\n };\n } catch (error: any) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount,\n error: error.message || String(error),\n };\n }\n}\n","import { createClient, type SupabaseClient } from '@supabase/supabase-js';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface SupabasePublishOptions {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n milestones: Array<{\n milestoneId: string;\n milestoneName: string;\n lessonSlug: string;\n summary?: string;\n }>;\n supabaseUrl?: string;\n supabaseServiceKey?: string;\n bucketName?: string;\n}\n\nexport interface SupabasePublishResult {\n success: boolean;\n learningPathId?: string;\n syncedMilestonesCount: number;\n uploadedAssetsCount: number;\n error?: string;\n}\n\n/**\n * Publishes metadata and binary assets to Supabase PostgreSQL & Storage Bucket\n */\nexport async function publishToSupabase(\n options: SupabasePublishOptions\n): Promise<SupabasePublishResult> {\n const supabaseUrl = options.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;\n const serviceKey = options.supabaseServiceKey || process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;\n\n if (!supabaseUrl || !serviceKey) {\n return {\n success: false,\n syncedMilestonesCount: 0,\n uploadedAssetsCount: 0,\n error: 'Missing SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY',\n };\n }\n\n const supabase: SupabaseClient = createClient(supabaseUrl, serviceKey);\n const bucketName = options.bucketName || 'learning_resources';\n\n try {\n // 1. Upsert Learning Path / Course record\n const { data: lpData, error: lpError } = await supabase\n .from('learning_paths')\n .upsert(\n {\n code: `LP-${options.jobId}`,\n title: options.courseTitle,\n description: `Auto-generated curriculum on ${options.topic}`,\n language: options.language,\n metadata: {\n jobId: options.jobId,\n topic: options.topic,\n totalMilestones: options.milestones.length,\n generatedAt: new Date().toISOString(),\n },\n },\n { onConflict: 'code' }\n )\n .select('id')\n .single();\n\n const learningPathId = lpData?.id;\n\n // 2. Upsert Lesson / Milestone Records\n let syncedMilestonesCount = 0;\n for (const [index, m] of options.milestones.entries()) {\n const { error: lessonError } = await supabase.from('lessons').upsert(\n {\n code: `L-${options.jobId}-${m.milestoneId}`,\n title: m.milestoneName,\n order_index: index + 1,\n learning_path_id: learningPathId,\n metadata: {\n milestoneId: m.milestoneId,\n lessonSlug: m.lessonSlug,\n summary: m.summary,\n },\n },\n { onConflict: 'code' }\n );\n\n if (!lessonError) {\n syncedMilestonesCount++;\n }\n }\n\n return {\n success: true,\n learningPathId,\n syncedMilestonesCount,\n uploadedAssetsCount: 0,\n };\n } catch (error: any) {\n return {\n success: false,\n syncedMilestonesCount: 0,\n uploadedAssetsCount: 0,\n error: error.message || String(error),\n };\n }\n}\n\n/**\n * Uploads a binary asset (MP3, SCORM zip, PNG) to Supabase Storage Bucket\n */\nexport async function uploadAssetToBucket(\n filePath: string,\n storagePath: string,\n options?: { supabaseUrl?: string; supabaseServiceKey?: string; bucketName?: string }\n): Promise<{ success: boolean; publicUrl?: string; error?: string }> {\n const supabaseUrl = options?.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;\n const serviceKey = options?.supabaseServiceKey || process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;\n\n if (!supabaseUrl || !serviceKey) {\n return { success: false, error: 'Missing Supabase credentials' };\n }\n\n const supabase = createClient(supabaseUrl, serviceKey);\n const bucketName = options?.bucketName || 'course-materials';\n\n try {\n const fileBuffer = await fs.readFile(filePath);\n const { error: uploadError } = await supabase.storage\n .from(bucketName)\n .upload(storagePath, fileBuffer, { upsert: true });\n\n if (uploadError) {\n return { success: false, error: uploadError.message };\n }\n\n const { data } = supabase.storage.from(bucketName).getPublicUrl(storagePath);\n return { success: true, publicUrl: data.publicUrl };\n } catch (error: any) {\n return { success: false, error: error.message || String(error) };\n }\n}\n","import {\n serializeLessonToMarkdown,\n serializeActivityToMarkdown,\n serializeCodeLabToMarkdown,\n serializeHandoutToMarkdown,\n} from '../../pipeline/markdownSerializers';\nimport {\n serializeSelfLabToMarkdown,\n serializeDiagnosticQuizToMarkdown,\n} from '../../pipeline/selfPacedSerializers';\nimport { LocalWorkspaceManager } from '../../publishers/localWorkspaceManager';\nimport { publishToGitHub, type GitPublishOptions, type GitPublishResult } from '../../publishers/gitPublisher';\nimport { publishToSupabase, type SupabasePublishOptions, type SupabasePublishResult } from '../../publishers/supabasePublisher';\nimport type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n} from '../../schemas';\n\nexport interface SaveMilestoneArtifactsInput {\n jobId: string;\n milestoneSlug: string;\n lesson: LessonPlan;\n activity?: ActivityLab;\n codeLab?: CodeLab;\n selfLab?: SelfLab;\n quiz?: DiagnosticQuiz;\n slides?: SlideDeck;\n handout?: Handout;\n worksheet?: Worksheet;\n teacherGuide?: TeacherGuide;\n extension?: Extension;\n cheatSheetMarkdown?: string;\n baseWorkspaceDir?: string;\n}\n\nexport interface SavedMilestoneResult {\n milestoneSlug: string;\n savedFiles: string[];\n}\n\nexport async function saveMilestoneToWorkspaceStep(input: SaveMilestoneArtifactsInput): Promise<SavedMilestoneResult> {\n 'use step';\n const manager = new LocalWorkspaceManager(input.baseWorkspaceDir);\n const savedFiles: string[] = [];\n\n // 1. LESSON_5E.md\n const lessonMd = serializeLessonToMarkdown(input.lesson);\n const p1 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'LESSON_5E.md', lessonMd, 'LESSON');\n savedFiles.push(p1);\n\n // 2. ACT.md\n if (input.activity) {\n const actMd = serializeActivityToMarkdown(input.activity);\n const p2 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'ACT.md', actMd, 'ACT');\n savedFiles.push(p2);\n }\n\n // 3. LAB.md\n if (input.codeLab) {\n const labContent = serializeCodeLabToMarkdown(input.codeLab);\n const p3 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'LAB.md', labContent, 'LAB');\n savedFiles.push(p3);\n }\n\n // 4. SELF_LAB.md (with Progressive Hints)\n if (input.selfLab) {\n const selfLabMd = serializeSelfLabToMarkdown(input.selfLab);\n const p4 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'SELF_LAB.md', selfLabMd, 'SELF_LAB');\n savedFiles.push(p4);\n }\n\n // 5. QUIZ.json & QUIZ.md\n if (input.quiz) {\n const quizMd = serializeDiagnosticQuizToMarkdown(input.quiz);\n const p5a = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'QUIZ.md', quizMd, 'QUIZ_MD');\n const p5b = await manager.saveArtifact(\n input.jobId,\n input.milestoneSlug,\n 'QUIZ.json',\n JSON.stringify(input.quiz, null, 2),\n 'QUIZ_JSON'\n );\n savedFiles.push(p5a, p5b);\n }\n\n // 6. SLIDE.md\n if (input.slides) {\n const slidesContent = `---\nmarp: true\ntheme: default\npaginate: true\n---\n\n# ${input.slides.title}\n\n---\n\n${input.slides.slides.map((s) => `## Slide ${s.slideNumber}: ${s.title}\\n\\n${s.bulletPoints.map((b) => `- ${b}`).join('\\n')}${s.codeSnippet ? `\\n\\n\\`\\`\\`\\n${s.codeSnippet}\\n\\`\\`\\`` : ''}\\n\\n<!-- Presenter Notes: ${s.presenterNotes || ''} -->`).join('\\n\\n---\\n\\n')}\n`.trim();\n const p6 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'SLIDE.md', slidesContent, 'SLIDES');\n savedFiles.push(p6);\n }\n\n // 7. HANDOUT.md\n if (input.handout) {\n const handoutMd = serializeHandoutToMarkdown(input.handout);\n const p7 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'HANDOUT.md', handoutMd, 'HANDOUT');\n savedFiles.push(p7);\n }\n\n // 8. CHEAT_SHEET.md\n if (input.cheatSheetMarkdown) {\n const p8 = await manager.saveArtifact(\n input.jobId,\n input.milestoneSlug,\n 'CHEAT_SHEET.md',\n input.cheatSheetMarkdown,\n 'CHEAT_SHEET'\n );\n savedFiles.push(p8);\n }\n\n await manager.markMilestoneCompleted(input.jobId);\n\n return {\n milestoneSlug: input.milestoneSlug,\n savedFiles,\n };\n}\n\nexport async function publishToGitStep(options: GitPublishOptions): Promise<GitPublishResult> {\n 'use step';\n return publishToGitHub(options);\n}\n\nexport async function publishToSupabaseStep(options: SupabasePublishOptions): Promise<SupabasePublishResult> {\n 'use step';\n return publishToSupabase(options);\n}\n","/**\n * Gate Settings โ toร n bแป logic \"ai kiแปm artifact nร o\" nแบฑm แป ฤรขy, trong kit.\n * Composer chแป gแปi: resolveGateSettings(projectConfig.gateModes) rแปi dรนng kแบฟt quแบฃ.\n *\n * Vocabulary chuแบฉn (duy nhแบฅt, khรดng cรณ biแบฟn thแป thแปฉ hai):\n * 'OFF' โ khรดng kiแปm\n * 'LLM_JUDGE' โ Agent kiแปm (LLM-as-Judge)\n * 'HITL' โ Human kiแปm (human-in-the-loop)\n *\n * Phแบกm vi phแปง: SOT foundation (Learner Profile, Framework, Style Guide โ duyแปt trฦฐแปc khi\n * sinh content) + toร n bแป content artifacts.\n */\n\nexport type CurriculumGateMode = 'OFF' | 'LLM_JUDGE' | 'HITL';\n\nexport type CurriculumArtifactType =\n // SOT foundation gates (duyแปt nแปn trฦฐแปc khi sinh content) โ khแปp SOT_EXECUTION_ORDER cแปงa Composer\n | 'LEARNER_PROFILE'\n | 'PROJECT_BRIEF'\n | 'REFERENCE_PACK'\n | 'CURRICULUM_FRAMEWORK'\n | 'KNOWLEDGE_EXPOSITION'\n | 'STYLE_GUIDE'\n | 'ART_DIRECTION'\n // content artifacts โ khแปp ARTIFACT_EXECUTION_ORDER cแปงa Composer\n | 'LESSON'\n | 'ACT'\n | 'QUIZ'\n | 'SLIDE'\n | 'GUIDE'\n | 'WKS'\n | 'HANDOUT'\n | 'EXT'\n | 'CODE'\n | 'MEDIA_SCRIPT'\n | 'EXIT_TICKET';\n\nexport type GateSettings = Partial<Record<CurriculumArtifactType, CurriculumGateMode>>;\n\nexport type ResolvedGateSettings = Readonly<Record<CurriculumArtifactType, CurriculumGateMode>>;\n\n/** Mแบทc ฤแปnh trรนng hร nh vi production hiแปn tแบกi: SOT nแปn = HITL, LESSON/CODE = Agent kiแปm, cรฒn lแบกi OFF. */\nexport const DEFAULT_GATE_SETTINGS: ResolvedGateSettings = Object.freeze({\n LEARNER_PROFILE: 'HITL',\n PROJECT_BRIEF: 'HITL',\n REFERENCE_PACK: 'HITL',\n CURRICULUM_FRAMEWORK: 'HITL',\n KNOWLEDGE_EXPOSITION: 'LLM_JUDGE',\n STYLE_GUIDE: 'HITL',\n ART_DIRECTION: 'HITL',\n LESSON: 'LLM_JUDGE',\n ACT: 'OFF',\n QUIZ: 'OFF',\n SLIDE: 'OFF',\n GUIDE: 'OFF',\n WKS: 'OFF',\n HANDOUT: 'OFF',\n EXT: 'OFF',\n CODE: 'LLM_JUDGE',\n MEDIA_SCRIPT: 'OFF',\n EXIT_TICKET: 'OFF',\n});\n\nconst ALL_TYPES = Object.keys(DEFAULT_GATE_SETTINGS) as CurriculumArtifactType[];\n\nconst MODE_ALIASES: Record<string, CurriculumGateMode> = {\n off: 'OFF',\n none: 'OFF',\n llm_judge: 'LLM_JUDGE',\n judge: 'LLM_JUDGE',\n hitl: 'HITL',\n human: 'HITL',\n};\n\nconst TYPE_ALIASES: Record<string, CurriculumArtifactType> = {\n code_lab: 'CODE',\n gate1: 'LEARNER_PROFILE',\n gate2: 'CURRICULUM_FRAMEWORK',\n style_guide: 'STYLE_GUIDE',\n content_style_guide: 'STYLE_GUIDE',\n learner_profile: 'LEARNER_PROFILE',\n project_brief: 'PROJECT_BRIEF',\n reference_pack: 'REFERENCE_PACK',\n curriculum_framework: 'CURRICULUM_FRAMEWORK',\n art_direction: 'ART_DIRECTION',\n media_script: 'MEDIA_SCRIPT',\n exit_ticket: 'EXIT_TICKET',\n};\n\nfunction canonType(key: string): CurriculumArtifactType | undefined {\n const k = key.trim().toLowerCase();\n const t = TYPE_ALIASES[k] ?? (k.toUpperCase() as CurriculumArtifactType);\n return ALL_TYPES.includes(t) ? t : undefined;\n}\n\nfunction canonMode(value: unknown): CurriculumGateMode | undefined {\n if (typeof value !== 'string') return undefined;\n return MODE_ALIASES[value.trim().toLowerCase()];\n}\n\n/**\n * Chuแบฉn hoรก config thรด (vd: gateModes ฤแปc tแปซ project.config.json cแปงa Composer) thร nh GateSettings.\n * Key/value khรดng nhแบญn diแปn ฤฦฐแปฃc bแป bแป qua โ config sai khรดng bao giแป lร m workflow chแบฟt.\n */\nexport function parseGateSettings(raw: unknown): GateSettings {\n const out: GateSettings = {};\n if (!raw || typeof raw !== 'object') return out;\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n const t = canonType(key);\n const m = canonMode(value);\n if (t && m) out[t] = m;\n }\n return out;\n}\n\n/**\n * ฤiแปm vร o DUY NHแบคT: raw config (hoแบทc ฤรฃ chuแบฉn hoรก) โ settings ฤแบงy ฤแปง cho mแปi artifact type.\n * Key khรดng cรณ trong config nhแบญn DEFAULT_GATE_SETTINGS.\n */\nexport function resolveGateSettings(raw?: unknown): ResolvedGateSettings {\n const parsed = parseGateSettings(raw);\n const resolved = {} as Record<CurriculumArtifactType, CurriculumGateMode>;\n for (const t of ALL_TYPES) resolved[t] = parsed[t] ?? DEFAULT_GATE_SETTINGS[t];\n return resolved;\n}\n\n/** Mode ฤรฃ resolve cho 1 artifact type. */\nexport function gateModeFor(resolved: ResolvedGateSettings, type: CurriculumArtifactType): CurriculumGateMode {\n return resolved[type] ?? 'OFF';\n}\n","import * as workflowPkg from 'workflow';\nimport { z } from 'zod';\n\nexport const approvalPayloadSchema = z.object({\n approved: z.boolean().describe('Whether the human reviewer approves the generated curriculum/lesson'),\n reviewerName: z.string().optional().describe('Name or ID of the reviewer'),\n feedback: z.string().optional().describe('Actionable feedback or required changes if rejected'),\n timestamp: z.string().optional().describe('ISO timestamp of the approval action'),\n});\n\nexport type ApprovalPayload = z.infer<typeof approvalPayloadSchema>;\n\nconst hookFactory = (workflowPkg as any).defineHook || (workflowPkg as any).createHook || ((opts: any) => opts);\n\n/**\n * Durable Hook for Human-in-the-Loop curriculum approval gates.\n * Pauses workflow with zero compute cost until an authorized user approves via UI/API.\n */\nexport const lessonApprovalHook = hookFactory({\n schema: approvalPayloadSchema,\n});\n","import { z } from 'zod';\n\n/**\n * Framework Pack Schema v1.0 โ Standards Registry interchange contract.\n *\n * A Framework Pack is a self-contained, schema-validated data bundle describing\n * ONE educational standard/framework (CSTA K-12, NGSS, GDPT 2018, an org's\n * internal standard, ...) in the lowest common denominator that virtually every\n * framework can map onto: a flat list of atomized statements + optional\n * classifications + optional mappings to the Ontora knowledge tree.\n *\n * Design invariants (see docs/ideas/2026-08-29-standards-registry-framework-pack.md):\n * - I1 Pack is DATA, never code. Importing a pack NEVER mutates the Ontora\n * Master Tree โ mappings are reference bridges, resolved (not written).\n * - I2 Canonical statement text (verbatim) is immutable ground truth. Derived\n * fields (translations, keywords, bloom hints) carry their own provenance.\n * - I3 IDs are stable forever: keep the official source ID when present, else\n * mint once from content identity (never from row position).\n * - I4 gradeBand is canonical numeric (gradeModel normalizes grades/ages/bands).\n * - I5 Mappings use namespaced targets (ontora:CODE, csta:1B-AP-10, ...) and are\n * OPTIONAL โ a pack with zero mappings still works (statement-only mode).\n * - I6 Everything is versioned: specVersion (this contract) vs contentVersion\n * (the framework's own content). Published content versions are immutable.\n */\n\n// โโโ Shared primitives โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n/** Two-axis Bloom hint (Anderson & Krathwohl). Matches Ontora's dual-axis usage. */\nexport const BloomHintSchema = z.object({\n process: z\n .enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create'])\n .describe('Cognitive process axis'),\n knowledge: z\n .enum(['FACTUAL', 'CONCEPTUAL', 'PROCEDURAL', 'METACOGNITIVE'])\n .optional()\n .describe('Knowledge dimension axis (optional โ most source standards do not tag it)'),\n});\n\n/** How a record entered the pack โ drives trust & review requirements. */\nexport const RecordProvenanceSchema = z.object({\n method: z\n .enum(['source_official', 'ai_draft', 'minted_from_content', 'human', 'crosswalk', 'imported'])\n .describe('source_official = copied from an authoritative machine-readable source; ai_draft = LLM-extracted, REQUIRES human review before activation; minted_from_content = ID synthesized because source has none; crosswalk = derived by the curriculum-crosswalk skill'),\n reviewedBy: z.string().optional().describe('Person/agent that approved this record (required for ai_draft records before activation)'),\n reviewedAt: z.string().optional().describe('ISO-8601 timestamp of review'),\n note: z.string().optional().describe('Free-form provenance note'),\n});\n\n/** Numeric grade band, canonical. [6, 6] = single grade 6; [6, 8] = band. */\nexport const GradeBandSchema = z\n .array(z.number().int().min(-1).max(30), { message: 'gradeBand must be [minGrade, maxGrade] integers' })\n .length(2)\n .refine(([min, max]) => min <= max, { message: 'gradeBand min must be <= max' })\n .describe('Canonical numeric grade band. -1 = kindergarten/pre-primary. Framework-specific models (VN grades, US bands, ages) normalize into this scale via manifest.gradeModel');\n\n/** Optional free-form classification axes (strand, NGSS dimension, \"Chแปง ฤแป\", ...). */\nexport const ClassificationSchema = z.object({\n axis: z.string().describe('Axis label, e.g. \"strand\", \"dimension\", \"Chแปง ฤแป\"'),\n value: z.string().describe('Value on that axis, e.g. \"AP\", \"Disciplinary Core Idea\", \"Thuแบญt toรกn\"'),\n});\n\n// โโโ Manifest โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const FrameworkPackManifestSchema = z.object({\n /** Immutable pack identifier. Never reused, never renamed. */\n id: z\n .string()\n .min(3)\n .regex(/^[a-z0-9][a-z0-9._-]*$/, 'pack id must be kebab/lowercase-safe (a-z 0-9 . _ -)')\n .describe('Immutable pack identifier, e.g. \"csta-k12-2017\", \"gdpt-2018-tin-hoc\", \"abc-tin-hoc\"'),\n name: z.string().min(1).describe('Human-readable framework name'),\n specVersion: z.literal('1.0').describe('Version of THIS pack contract (not the content)'),\n contentVersion: z\n .string()\n .min(1)\n .describe('Content version of the framework inside this pack. Bump on any content change; published versions are immutable'),\n subject: z.string().describe('Primary subject domain, e.g. \"computing\", \"science\", \"mathematics\"'),\n languages: z.array(z.string().min(2)).min(1).describe('BCP-47 language codes present in statement texts, e.g. [\"vi\"], [\"en\",\"vi\"]'),\n gradeModel: z.object({\n type: z.enum(['grades', 'ages', 'bands']).describe('grades = school grades (canonical numbers); ages = years old; bands = named developmental bands'),\n range: GradeBandSchema.describe('Overall grade range covered by the framework'),\n /** Optional normalization table when type != \"grades\" (e.g. band \"6-8\" -> [6,8]). */\n normalization: z\n .array(\n z.object({\n from: z.string().describe('Source label, e.g. \"level 6-8\" or \"11-13 years\"'),\n to: GradeBandSchema,\n })\n )\n .optional()\n .describe('Explicit label -> numeric band conversion table. Required when type != \"grades\"'),\n }),\n provenance: z.object({\n sourceRef: z.string().describe('Citation of the official source, e.g. \"Thรดng tฦฐ 32/2018/TT-BGDฤT\" or a URL'),\n sourceUrl: z.string().optional().describe('Canonical URL of the source document or live registry'),\n license: z.string().describe('License / usage rights of the source text'),\n importedBy: z.string().describe('Who produced this pack, e.g. \"platform\" or \"org:abc\"'),\n importedAt: z.string().describe('ISO-8601 timestamp'),\n originalFileHash: z.string().optional().describe('SHA-256 of the original uploaded file, for source provenance'),\n }),\n trust: z.enum(['verified', 'org']).default('org').describe('verified = platform-curated; org = self-served by an org. Generation accepts both; compliance reporting counts verified only'),\n});\n\n// โโโ Statement โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const FrameworkStatementSchema = z.object({\n /** Canonical, forever-stable statement ID (see invariant I3). */\n id: z\n .string()\n .min(2)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/, 'statement id must not contain whitespace or separators beyond . _ : -')\n .describe('Statement ID. Official source ID when present (e.g. \"1B-AP-10\"); otherwise minted once from content identity. Namespaced at query time by the pack id, never stored with prefix duplication'),\n /** Optional hierarchical parent within the SAME pack (GDPT competence โ requirement, CSTA strand โ statement, ...). */\n parentId: z.string().optional().describe('Parent statement id within this pack, when the source framework is hierarchical'),\n gradeBand: GradeBandSchema,\n /** Verbatim canonical text per language. The FIRST / primary language text is judge ground truth (invariant I2). */\n texts: z\n .record(z.string().min(2), z.string().min(1))\n .refine((t) => Object.keys(t).length > 0, { message: 'texts must contain at least one language entry' })\n .describe('Verbatim statement text per BCP-47 language key, e.g. {\"vi\": \"Yรชu cแบงu cแบงn ฤแบกt...\"}. NEVER paraphrase into these fields'),\n classifications: z.array(ClassificationSchema).optional().default([]).describe('Optional taxonomy axes from the source framework (strands, dimensions, themes...)'),\n bloomHint: BloomHintSchema.optional().describe('Optional Bloom dual-axis hint โ a HINT for generation, never a binding claim about the source'),\n keywords: z.array(z.string()).optional().default([]).describe('Retrieval keywords (topic terms). Used by standards retrieval AND by crosswalk theme matching โ keep them dense'),\n sourceRef: z.string().optional().describe('Precise citation within the source, e.g. \"Trang 24, Mรดn Tin hแปc lแปp 6\"'),\n provenance: RecordProvenanceSchema,\n});\n\n// โโโ Mapping bridge (pack โ Ontora interlingua) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const MappingKindSchema = z.enum(['covers', 'partial', 'extends']).describe('covers = the statement is fully taught when the concept is covered (ONLY \"covers\" counts toward compliance coverage); partial = overlaps partially; extends = statement goes beyond the concept');\n\nexport const FrameworkMappingSchema = z.object({\n statementId: z.string().describe('Must reference a statement id in this pack'),\n /** Namespaced target. Grammar: <namespace>:<ID>. e.g. \"ontora:WHILE_LOOP\", \"ontora:PROBLEM_DECOMPOSITION\". Resolved against the target registry at intake โ unknown targets FAIL validation. */\n targetRef: z.string().refine((v) => /^[a-z][a-z0-9]*:[A-Za-z0-9][A-Za-z0-9._-]*$/.test(v), 'targetRef must be \"<namespace>:<ID>\", e.g. \"ontora:FOR_LOOP\"'),\n kind: MappingKindSchema,\n confidence: z.number().min(0).max(1).describe('0-1 confidence of this mapping'),\n provenance: RecordProvenanceSchema,\n});\n\n// โโโ Root โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport const FrameworkPackSchema = z.object({\n manifest: FrameworkPackManifestSchema,\n statements: z.array(FrameworkStatementSchema).min(1).describe('Atomized statements of the framework'),\n mappings: z.array(FrameworkMappingSchema).optional().default([]).describe('Optional bridges to the Ontora knowledge tree (statement-only packs are fully functional)'),\n});\n\nexport type FrameworkPack = z.infer<typeof FrameworkPackSchema>;\nexport type FrameworkPackManifest = z.infer<typeof FrameworkPackManifestSchema>;\nexport type FrameworkStatement = z.infer<typeof FrameworkStatementSchema>;\nexport type FrameworkMapping = z.infer<typeof FrameworkMappingSchema>;\nexport type MappingKind = z.infer<typeof MappingKindSchema>;\nexport type RecordProvenance = z.infer<typeof RecordProvenanceSchema>;\n\n// โโโ Pack lint (beyond field-level Zod checks) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\nexport interface PackLintIssue {\n severity: 'ERROR' | 'WARNING';\n code: string;\n message: string;\n /** statement id or manifest path the issue refers to */\n ref?: string;\n}\n\n/** Minimum token-overlap ratio for the fuzzy duplicate warning. */\nconst DUP_OVERLAP_RATIO = 0.8;\n\n/**\n * Deterministic structural lint over an already schema-valid pack.\n * Pure function: no I/O, no LLM. Mirrors the ontora validator philosophy โ\n * assembly/validation is code, research/judgment is model.\n */\nexport function lintFrameworkPack(pack: FrameworkPack): PackLintIssue[] {\n const issues: PackLintIssue[] = [];\n const statements = pack.statements;\n const ids = new Set<string>();\n\n for (const s of statements) {\n // L1 duplicate ids\n if (ids.has(s.id)) {\n issues.push({ severity: 'ERROR', code: 'DUP_ID', message: `Duplicate statement id \"${s.id}\"`, ref: s.id });\n }\n ids.add(s.id);\n }\n\n for (const s of statements) {\n // L2 parent existence\n if (s.parentId && !ids.has(s.parentId)) {\n issues.push({ severity: 'ERROR', code: 'PARENT_MISSING', message: `parentId \"${s.parentId}\" does not exist in this pack`, ref: s.id });\n }\n // L3 empty-ish text\n for (const [lang, text] of Object.entries(s.texts)) {\n if (!text || text.trim().length < 8) {\n issues.push({ severity: 'ERROR', code: 'TEXT_TOO_SHORT', message: `\"${lang}\" text is empty or shorter than 8 characters`, ref: s.id });\n }\n }\n // L4 grade band sanity: empty band inside manifest range is fine, but warn outside manifest range\n const [min, max] = s.gradeBand;\n const [gMin, gMax] = pack.manifest.gradeModel.range;\n if (min < gMin || max > gMax) {\n issues.push({ severity: 'WARNING', code: 'BAND_OUT_OF_RANGE', message: `gradeBand [${min},${max}] falls outside manifest range [${gMin},${gMax}]`, ref: s.id });\n }\n // L5 ai_draft without reviewer\n if (s.provenance.method === 'ai_draft' && !s.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: 'ai_draft record has no reviewedBy โ human review required before activation', ref: s.id });\n }\n // L6 keywords recommended\n if (!s.keywords || s.keywords.length === 0) {\n issues.push({ severity: 'WARNING', code: 'NO_KEYWORDS', message: 'No keywords โ statement will be hard to retrieve and to crosswalk', ref: s.id });\n }\n }\n\n // L7 fuzzy duplicate texts (same language)\n const seen = new Map<string, string>();\n for (const s of statements) {\n const primaryLang = pack.manifest.languages[0];\n const text = s.texts[primaryLang];\n if (!text) continue;\n const norm = text.toLowerCase().replace(/[^\\p{L}\\p{N}\\s]/gu, ' ').split(/\\s+/).filter((w) => w.length > 2).sort().join(' ');\n if (!norm) continue;\n const prev = seen.get(norm);\n if (prev !== undefined) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_EXACT', message: `Text is token-identical to statement \"${prev}\"`, ref: s.id });\n } else {\n // token-overlap fuzzy pass (O(n^2) avoided via sorted-token key bucketing)\n for (const [otherNorm, otherId] of seen.entries()) {\n const a = new Set(norm.split(' '));\n const b = new Set(otherNorm.split(' '));\n let inter = 0;\n for (const w of a) if (b.has(w)) inter++;\n const ratio = inter / Math.max(a.size, b.size);\n if (ratio >= DUP_OVERLAP_RATIO) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_FUZZY', message: `Text ~${Math.round(ratio * 100)}% overlapping with statement \"${otherId}\"`, ref: s.id });\n break;\n }\n }\n seen.set(norm, s.id);\n }\n }\n\n // L8 mapping integrity\n for (const m of pack.mappings ?? []) {\n if (!ids.has(m.statementId)) {\n issues.push({ severity: 'ERROR', code: 'MAP_STATEMENT_MISSING', message: `mapping references unknown statementId \"${m.statementId}\"`, ref: m.statementId });\n }\n if (m.provenance.method === 'ai_draft' && !m.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: `mapping to ${m.targetRef} is ai_draft without reviewedBy`, ref: m.statementId });\n }\n if (m.kind === 'covers' && m.confidence < 0.5) {\n issues.push({ severity: 'WARNING', code: 'COVERS_LOW_CONFIDENCE', message: `kind=\"covers\" with confidence ${m.confidence} < 0.5 โ consider \"partial\"`, ref: m.statementId });\n }\n }\n\n return issues;\n}\n\nexport interface PackValidationResult {\n valid: boolean;\n schemaErrors: string[];\n lint: PackLintIssue[];\n stats: {\n statements: number;\n mappings: number;\n coveredStatements: number;\n statementOnlyStatements: number;\n gradeRange: [number, number];\n };\n}\n\n/**\n * Full validation: Zod schema โ deterministic lint.\n * Does NOT resolve ontora targets (network/DB concern, layered separately).\n */\nexport function validateFrameworkPack(input: unknown): PackValidationResult {\n const parsed = FrameworkPackSchema.safeParse(input);\n if (!parsed.success) {\n return {\n valid: false,\n schemaErrors: parsed.error.issues.map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`),\n lint: [],\n stats: { statements: 0, mappings: 0, coveredStatements: 0, statementOnlyStatements: 0, gradeRange: [0, 0] },\n };\n }\n const pack = parsed.data;\n const lint = lintFrameworkPack(pack);\n const covered = new Set((pack.mappings ?? []).map((m) => m.statementId));\n const bands = pack.statements.map((s) => s.gradeBand);\n return {\n valid: lint.every((i) => i.severity !== 'ERROR'),\n schemaErrors: [],\n lint,\n stats: {\n statements: pack.statements.length,\n mappings: pack.mappings?.length ?? 0,\n coveredStatements: covered.size,\n statementOnlyStatements: pack.statements.length - covered.size,\n gradeRange: [Math.min(...bands.flat()), Math.max(...bands.flat())],\n },\n };\n}\n","import type { FrameworkPack, FrameworkStatement } from './frameworkPackSchema';\n\n/**\n * Standards Context Injector โ Grounding layer (tแบงng 1 cแปงa cฦก chแบฟ bรกm chuแบฉn).\n *\n * Selects the standard statements RELEVANT to a lesson (by grade band overlap +\n * keyword/concept match) and renders them as a prompt context block containing\n * VERBATIM canonical text. The model must SEE the real standard text โ prompt\n * labels like \"operating under CSTA\" are exactly the anti-pattern this replaces.\n *\n * Pure function: pack data in, markdown block out. No I/O, no LLM.\n */\n\nexport interface StandardsSelectionInput {\n /** Packs adopted by the org / course (already validated + activated). */\n packs: FrameworkPack[];\n /** Lesson grade level or band, canonical numeric (single grade or [min,max]). */\n gradeBand: [number, number] | number;\n /** Lesson topic text: title + concept names + keywords. Matched against statement keywords + texts. */\n topicText: string;\n /** Optional explicit ontora concept codes for the lesson (concept_code from MilestoneInput). */\n conceptCodes?: string[];\n /** Hard cap on injected statements to protect the context budget. */\n maxStatements?: number;\n}\n\nexport interface SelectedStatement {\n packId: string;\n statement: FrameworkStatement;\n score: number;\n matchedBy: Array<'band' | 'keyword' | 'concept' | 'text'>;\n}\n\nconst DEFAULT_MAX_STATEMENTS = 20;\n\nfunction normalizeBand(band: [number, number] | number): [number, number] {\n return Array.isArray(band) ? band : [band, band];\n}\n\nfunction tokenize(text: string): Set<string> {\n return new Set(\n text\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}\\s]/gu, ' ')\n .split(/\\s+/)\n .filter((w) => w.length > 2)\n );\n}\n\n/**\n * Rank + select statements for a lesson.\n * Scoring: band overlap is a GATE (statements outside the grade are dropped),\n * keyword/concept/text overlap is the ranking signal.\n */\nexport function selectStatementsForLesson(input: StandardsSelectionInput): SelectedStatement[] {\n const max = input.maxStatements ?? DEFAULT_MAX_STATEMENTS;\n const lessonBand = normalizeBand(input.gradeBand);\n const lessonTokens = tokenize(input.topicText);\n const conceptSet = new Set((input.conceptCodes ?? []).map((c) => c.toUpperCase().trim()).filter(Boolean));\n\n const candidates: SelectedStatement[] = [];\n\n for (const pack of input.packs) {\n for (const statement of pack.statements) {\n // Band gate: must overlap the lesson band\n const [sMin, sMax] = statement.gradeBand;\n const overlaps = Math.max(sMin, lessonBand[0]) <= Math.min(sMax, lessonBand[1]);\n if (!overlaps) continue;\n\n const matchedBy: SelectedStatement['matchedBy'] = ['band'];\n let score = 1;\n\n // Keyword match (primary signal โ keywords are REQUIRED to be dense by pack lint)\n const kwTokens = new Set(statement.keywords.map((k) => k.toLowerCase()));\n let kwHits = 0;\n for (const t of lessonTokens) if (kwTokens.has(t)) kwHits++;\n if (kwHits > 0) {\n matchedBy.push('keyword');\n score += 2 + kwHits * 0.5;\n }\n\n // Concept code match (statement keyword equals an ontora concept code)\n if (conceptSet.size > 0) {\n for (const k of statement.keywords) {\n if (conceptSet.has(k.toUpperCase().replace(/\\s+/g, '_'))) {\n matchedBy.push('concept');\n score += 3;\n break;\n }\n }\n }\n\n // Raw text-token overlap (fallback signal)\n let textHits = 0;\n for (const lang of Object.keys(statement.texts)) {\n const st = tokenize(statement.texts[lang]);\n for (const t of lessonTokens) if (st.has(t)) textHits++;\n }\n if (textHits >= 2) {\n matchedBy.push('text');\n score += Math.min(2, textHits * 0.2);\n }\n\n if (score > 1) candidates.push({ packId: pack.manifest.id, statement, score, matchedBy });\n }\n }\n\n return candidates.sort((a, b) => b.score - a.score).slice(0, max);\n}\n\n/**\n * Render the STANDARDS CONTEXT prompt block (verbatim statements + binding rules).\n * Mirrors the shape of the proven CUMULATIVE CONTEXT block in lessonMasterPrompt.\n */\nexport function buildStandardsContextBlock(selected: SelectedStatement[], opts?: { language?: string }): string {\n if (selected.length === 0) return '';\n\n const lang = opts?.language;\n const rows = selected\n .map(({ packId, statement }) => {\n const text = (lang && statement.texts[lang]) || Object.values(statement.texts)[0];\n const band = statement.gradeBand[0] === statement.gradeBand[1] ? `L${statement.gradeBand[0]}` : `L${statement.gradeBand[0]}-L${statement.gradeBand[1]}`;\n return `- [${packId}:${statement.id} | ${band}] \"${text}\"`;\n })\n .join('\\n');\n\n return [\n '# STANDARDS CONTEXT (SOURCE OF TRUTH โ VERBATIM STATEMENTS)',\n '',\n 'The statements below are COPIED VERBATIM from official/framework standard documents adopted for this course.',\n 'They are BINDING targets, not suggestions:',\n '- Every Learning Objective you write MUST be anchored to one or more statement IDs above via standardRefs.',\n '- You MUST use ONLY statement IDs from this list. NEVER invent, paraphrase IDs, or cite standards not present here.',\n '- The statement TEXT is the required destination: activities and assessments must demonstrably lead a learner to it.',\n '- The statement is the DESTINATION, not a script: you may extend beyond it, but you may not skip or contradict it.',\n '',\n '## Statement list',\n rows,\n ].join('\\n');\n}\n\n/**\n * One-call convenience: packs + lesson info โ context block (empty string if nothing matches).\n */\nexport function buildStandardsContext(\n input: StandardsSelectionInput & { language?: string }\n): { block: string; selected: SelectedStatement[] } {\n const selected = selectStatementsForLesson(input);\n return { block: buildStandardsContextBlock(selected, { language: input.language }), selected };\n}\n","import type { FrameworkPack } from './frameworkPackSchema';\n\n/**\n * Standards Coverage Gate โ Verification layer (tแบงng 3 cแปงa cฦก chแบฟ bรกm chuแบฉn).\n *\n * Deterministic coverage matrix across the generation chain:\n * standard statement โ learning objective โ lesson activities โ quiz questions\n *\n * Philosophy: \"bรกm chuแบฉn\" must be enforced by CODE, not by prompt goodwill.\n * A statement mapped with kind=\"covers\" that has no LO / no activity / no\n * assessment = a compliance hole, reported with an actionable repair hint.\n *\n * Pure function over already-generated artifacts. No LLM, no I/O.\n */\n\nexport interface CoverageGateInput {\n packs: FrameworkPack[];\n /** Learning objectives as generated (code + optional standardRefs anchoring). */\n objectives: Array<{\n code: string;\n standardRefs?: string[];\n conceptRefs?: string[];\n }>;\n /** activitySequence rows of the lesson (lo codes link activities to LOs). Optional: omitted when no structured activity-LO linkage is available. */\n activities?: Array<{ seq?: number; lo: string[] }>;\n /** Quiz questions; each links to assessment objectives โ alignedLO. */\n quizQuestions: Array<{ alignedLO?: string; alignedAO?: string }>;\n /** Assessment objectives table (AO โ alignedLO). Questions may reference AOs only. */\n assessmentObjectives?: Array<{ aoCode: string; alignedLO: string }>;\n}\n\nexport interface StatementCoverageRow {\n packId: string;\n statementId: string;\n statementText: string;\n status: 'COVERED' | 'PARTIAL' | 'UNCOVERED' | 'UNMAPPED';\n objectives: string[];\n hasActivity: boolean;\n hasAssessment: boolean;\n issues: string[];\n}\n\nexport interface CoverageGateReport {\n verdict: 'PASS' | 'WARN' | 'FAIL';\n coveragePct: number;\n rows: StatementCoverageRow[];\n summary: string;\n rawMarkdownReport: string;\n}\n\n/** statementRef formats accepted in standardRefs: \"1B-AP-10\" or \"csta-k12-2017:1B-AP-10\". */\nfunction resolveStatementRef(ref: string, packs: FrameworkPack[]): { pack: FrameworkPack; statementId: string } | null {\n const [head, ...rest] = ref.split(':');\n const candidatePacks = rest.length > 0 ? packs.filter((p) => p.manifest.id === head) : packs;\n const statementId = rest.length > 0 ? rest.join(':') : ref;\n for (const p of candidatePacks) {\n if (p.statements.some((s) => s.id === statementId)) return { pack: p, statementId };\n }\n return null;\n}\n\nexport function evaluateStandardsCoverage(input: CoverageGateInput): CoverageGateReport {\n const rows: StatementCoverageRow[] = [];\n\n // AO โ LO resolution map\n const aoToLo = new Map<string, string>();\n for (const ao of input.assessmentObjectives ?? []) aoToLo.set(ao.aoCode, ao.alignedLO);\n\n // LO โ covered statements (explicit anchors)\n const loToRefs = new Map<string, Set<string>>();\n for (const lo of input.objectives) {\n loToRefs.set(lo.code, new Set(lo.standardRefs ?? []));\n }\n\n // LOs actually taught (activities) and assessed (quiz, via direct alignedLO or AO table)\n const taughtLOs = new Set<string>();\n for (const act of input.activities ?? []) for (const lo of act.lo) taughtLOs.add(lo);\n const assessedLOs = new Set<string>();\n for (const q of input.quizQuestions) {\n if (q.alignedLO) assessedLOs.add(q.alignedLO);\n if (q.alignedAO) {\n const lo = aoToLo.get(q.alignedAO);\n if (lo) assessedLOs.add(lo);\n }\n }\n\n for (const pack of input.packs) {\n const mappingByStatement = new Map<string, string>();\n for (const m of pack.mappings ?? []) {\n // first mapping wins for kind resolution; \"covers\" beats \"partial\" beats \"extends\"\n const prev = mappingByStatement.get(m.statementId);\n if (!prev || (prev !== 'covers' && m.kind === 'covers') || (prev === 'extends' && m.kind !== 'extends')) {\n mappingByStatement.set(m.statementId, m.kind);\n }\n }\n\n for (const statement of pack.statements) {\n const refFull = `${pack.manifest.id}:${statement.id}`;\n const issues: string[] = [];\n\n // Objectives anchored to this statement\n const los = input.objectives\n .filter((lo) => (lo.standardRefs ?? []).some((r) => r === statement.id || r === refFull))\n .map((lo) => lo.code);\n\n const kind = mappingByStatement.get(statement.id);\n const hasMapping = kind !== undefined;\n const isComplianceRelevant = kind === 'covers';\n\n const hasActivity = los.some((lo) => taughtLOs.has(lo));\n const hasAssessment = los.some((lo) => assessedLOs.has(lo));\n\n let status: StatementCoverageRow['status'];\n if (!hasMapping) status = 'UNMAPPED';\n else if (!isComplianceRelevant) status = 'PARTIAL';\n else if (los.length > 0 && hasActivity && hasAssessment) status = 'COVERED';\n else status = 'UNCOVERED';\n\n if (status === 'UNCOVERED') {\n if (los.length === 0) issues.push('No learning objective anchors this statement (missing standardRefs).');\n else {\n if (!hasActivity) issues.push(`Anchored LO(s) ${los.join(', ')} have no activity in lesson flow.`);\n if (!hasAssessment) issues.push(`Anchored LO(s) ${los.join(', ')} are not measured by any quiz question.`);\n }\n }\n\n rows.push({\n packId: pack.manifest.id,\n statementId: statement.id,\n statementText: Object.values(statement.texts)[0] ?? '',\n status,\n objectives: los,\n hasActivity,\n hasAssessment,\n issues,\n });\n }\n }\n\n // Unresolvable refs (typo / hallucinated IDs) โ reported as issues on no row\n for (const lo of input.objectives) {\n for (const r of lo.standardRefs ?? []) {\n if (!resolveStatementRef(r, input.packs)) {\n rows.push({\n packId: '(unresolved)',\n statementId: r,\n statementText: '',\n status: 'UNCOVERED',\n objectives: [lo.code],\n hasActivity: false,\n hasAssessment: false,\n issues: [`standardRef \"${r}\" does not exist in any adopted pack โ likely a hallucinated or stale ID`],\n });\n }\n }\n }\n\n const complianceRows = rows.filter((r) => r.status !== 'UNMAPPED' && r.status !== 'PARTIAL');\n const covered = complianceRows.filter((r) => r.status === 'COVERED').length;\n const coveragePct = complianceRows.length === 0 ? 100 : Math.round((covered / complianceRows.length) * 100);\n const unresolvedCount = rows.filter((r) => r.packId === '(unresolved)').length;\n\n const verdict: CoverageGateReport['verdict'] =\n unresolvedCount > 0 || coveragePct < 60 ? 'FAIL' : coveragePct < 100 ? 'WARN' : 'PASS';\n\n const lines: string[] = [\n '# Standards Coverage Report',\n '',\n `- Verdict: **${verdict}**`,\n `- Compliance coverage: **${coveragePct}%** (${covered}/${complianceRows.length} \"covers\" statements fully taught + assessed)`,\n `- Unresolved standardRefs: ${unresolvedCount}`,\n '',\n '| Pack | Statement | Status | LOs | Activity | Assessment |',\n '|---|---|---|---|---|---|',\n ...rows.map(\n (r) =>\n `|${r.packId}|${r.statementId}|${r.status}|${r.objectives.join(', ') || 'โ'}|${r.hasActivity ? 'โ' : 'โ'}|${r.hasAssessment ? 'โ' : 'โ'}|`\n ),\n ];\n const issueLines = rows.filter((r) => r.issues.length > 0).flatMap((r) => r.issues.map((i) => `- [${r.packId}:${r.statementId}] ${i}`));\n if (issueLines.length > 0) lines.push('', '## Issues', ...issueLines);\n\n return {\n verdict,\n coveragePct,\n rows,\n summary: `Standards coverage ${coveragePct}% โ verdict ${verdict}`,\n rawMarkdownReport: lines.join('\\n'),\n };\n}\n","{\n \"manifest\": {\n \"id\": \"csta-k12-2017\",\n \"name\": \"CSTA K-12 Computer Science Standards (2017)\",\n \"specVersion\": \"1.0\",\n \"contentVersion\": \"2017.1\",\n \"subject\": \"computing\",\n \"languages\": [\n \"en\"\n ],\n \"gradeModel\": {\n \"type\": \"grades\",\n \"range\": [\n 3,\n 12\n ]\n },\n \"provenance\": {\n \"sourceRef\": \"CSTA K-12 Computer Science Standards, Revised 2017 - csteachers.org\",\n \"sourceUrl\": \"https://www.csteachers.org/page/standards\",\n \"license\": \"CC BY-NC-SA 4.0 (cited verbatim for alignment use)\",\n \"importedBy\": \"platform\",\n \"importedAt\": \"2026-08-29T00:00:00.000Z\"\n },\n \"trust\": \"verified\"\n },\n \"statements\": [\n {\n \"id\": \"1B-AP-08\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Demonstrate that programs can be combined with other programs to create new solutions.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"combine\",\n \"programs\",\n \"composition\",\n \"reuse\",\n \"modules\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-10\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Create programs that include sequences, events, loops, and conditionals.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\",\n \"knowledge\": \"PROCEDURAL\"\n },\n \"keywords\": [\n \"sequence\",\n \"events\",\n \"loops\",\n \"conditionals\",\n \"control structures\",\n \"for\",\n \"while\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-11\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Decompose (break down) problems into smaller, manageable subproblems to facilitate the program development process.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Analyze\"\n },\n \"keywords\": [\n \"decomposition\",\n \"subproblems\",\n \"problem breakdown\",\n \"algorithm\",\n \"divide\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-12\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Modify, remix, or include portions of other programs in one's own work to develop something new or add more advanced features.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\"\n },\n \"keywords\": [\n \"remix\",\n \"modify\",\n \"iterate\",\n \"extend programs\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-15\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Test and debug (identify and fix errors) a program or algorithm to ensure it runs as intended.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Evaluate\"\n },\n \"keywords\": [\n \"test\",\n \"debug\",\n \"errors\",\n \"troubleshooting\",\n \"fix\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-IC-21\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Use public domain or creative commons media, and refrain from copying or using material created by others without permission.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Impacts of Computing\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"copyright\",\n \"creative commons\",\n \"public domain\",\n \"digital citizenship\",\n \"license\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Impacts of Computing\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n }\n ],\n \"mappings\": [\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:FOR_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:WHILE_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-11\",\n \"targetRef\": \"ontora:PROBLEM_DECOMPOSITION\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-08\",\n \"targetRef\": \"ontora:EVENT_BASED_PROGRAMMING\",\n \"kind\": \"partial\",\n \"confidence\": 0.7,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-15\",\n \"targetRef\": \"ontora:TROUBLESHOOTING_STEPS\",\n \"kind\": \"covers\",\n \"confidence\": 0.9,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n }\n ]\n}\n","import { FrameworkPackSchema, type FrameworkPack } from './frameworkPackSchema';\n\nimport csta2017 from './data/csta-k12-2017.json';\n\n/**\n * Bundled Standards Packs โ dแปฏ liแปu chuแบฉn kรจm sแบตn trong kit (user chแปn trong Composer\n * Project Settings โ Gates โ Standards Packs; Composer truyแปn standardsPackIds xuแปng).\n * Pack mแปi: thรชm file JSON validate theo FrameworkPackSchema vร o src/standards/data/ rแปi ฤฤng kรฝ aquรญ.\n */\nconst BUNDLED_PACK_RECORDS: Record<string, unknown> = {\n 'csta-k12-2017': csta2017,\n};\n\n/** Pack ids mร kit ฤรณng gรณi sแบตn (ฤแป UI settings hiแปn thแป ฤรบng danh sรกch khแบฃ dแปฅng). */\nexport const BUNDLED_STANDARDS_PACK_IDS: string[] = Object.keys(BUNDLED_PACK_RECORDS).sort();\n\nconst parsedPackCache = new Map<string, FrameworkPack>();\n\n/**\n * Resolve danh sรกch pack id โ FrameworkPack[] ฤรฃ validate. Id khรดng biแบฟt ฤฦฐแปฃc bแป qua (log warn),\n * config sai khรดng bao giแป lร m pipeline chแบฟt.\n */\nexport function resolveStandardsPacks(packIds: string[] | undefined | null): FrameworkPack[] {\n if (!packIds || packIds.length === 0) return [];\n const packs: FrameworkPack[] = [];\n for (const id of packIds) {\n if (parsedPackCache.has(id)) {\n packs.push(parsedPackCache.get(id) as FrameworkPack);\n continue;\n }\n const raw = BUNDLED_PACK_RECORDS[id];\n if (!raw) {\n console.warn(`[standards] pack '${id}' khรดng tแปn tแบกi trong kit โ bแป qua.`);\n continue;\n }\n const parsed = FrameworkPackSchema.safeParse(raw);\n if (!parsed.success) {\n console.warn(`[standards] pack '${id}' fail schema โ bแป qua:`, parsed.error.issues[0]?.message);\n continue;\n }\n parsedPackCache.set(id, parsed.data);\n packs.push(parsed.data);\n }\n return packs;\n}","import {\n generateMasterLessonStep,\n judgeMasterLessonStep,\n repairMasterLessonStep,\n generateActivityStep,\n judgeSatelliteStep,\n generateCodeLabStep,\n generateSelfLabStep,\n generateDiagnosticQuizStep,\n generateSlidesStep,\n generateHandoutStep,\n generateWorksheetStep,\n generateTeacherGuideStep,\n generateExtensionStep,\n saveMilestoneToWorkspaceStep,\n type SavedMilestoneResult,\n} from '../steps';\nimport type {\n MilestoneInput,\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n CurriculumQualityReport,\n} from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\nimport { buildStandardsContext, evaluateStandardsCoverage } from '../../standards';\nimport { resolveGateSettings, gateModeFor } from '../gateSettings';\n\nexport interface MilestoneWorkflowInput {\n jobId: string;\n milestone: MilestoneInput;\n language?: string;\n topic?: string;\n targetAudience?: string;\n techStack?: string[];\n bundleTier?: 'minimum' | 'full';\n baseWorkspaceDir?: string;\n modelOptions?: ModelResolutionOptions;\n /** Adopted Framework Packs (hydrated from the Standards Registry) for standards-grounded generation. */\n standardsPacks?: import('../../standards').FrameworkPack[];\n /** Hard-block the milestone when standards coverage FAILs (default: true when packs provided). */\n enforceStandardsCoverage?: boolean;\n /** Gate Settings thรด (vd: gateModes tแปซ project.config.json) โ kit tแปฑ chuแบฉn hoรก. */\n gateSettings?: unknown;\n}\n\nexport interface MilestoneWorkflowResult {\n milestoneId: string;\n milestoneSlug: string;\n status: 'SUCCESS' | 'FAILED';\n savedResult: SavedMilestoneResult;\n judgeReport?: CurriculumQualityReport;\n /** Per-artifact-type judge reports for satellites (Gate mode LLM_JUDGE only). */\n satelliteJudgeReports?: Record<string, CurriculumQualityReport>;\n /** The resolved gate settings actually applied in this run (for traceability). */\n gatesResolved?: Record<string, string>;\n /** Set when a Gate (e.g. HITL rejection) BLOCKED downstream production. */\n gateBlocked?: { artifactType: string; reason: 'HITL_REJECTED' | 'HITL_REJECTED_V2'; feedback?: string };\n standardsCoverage?: import('../../standards').CoverageGateReport;\n artifacts: {\n lesson: LessonPlan;\n activity?: ActivityLab;\n codeLab?: CodeLab;\n selfLab?: SelfLab;\n quiz?: DiagnosticQuiz;\n slides?: SlideDeck;\n handout?: Handout;\n worksheet?: Worksheet;\n teacherGuide?: TeacherGuide;\n extension?: Extension;\n };\n}\n\n/**\n * Child Workflow: Executes fine-grained durable generation for a single Milestone.\n * Uses Step-level memoization, automatic LLM retries, and parallel satellite generation.\n */\nexport async function generateMilestoneWorkflow(\n input: MilestoneWorkflowInput\n): Promise<MilestoneWorkflowResult> {\n 'use workflow';\n\n const language = input.language || 'vi';\n const milestoneId = input.milestone.id || input.milestone.concept_code || 'L01';\n // Avoid double-M prefix: if milestoneId already starts with 'M' or 'U', use it directly\n const slugPrefix = /^\\d+$/.test(milestoneId)\n ? `M${milestoneId.padStart(2, '0')}`\n : milestoneId;\n const milestoneSlug = `${slugPrefix}_${(input.milestone.name || 'milestone')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')}`;\n const bundleTier = input.bundleTier || 'minimum';\n // Gate Settings = nguแปn quyแบฟt ฤแปnh DUY NHแบคT cho viแปc ai kiแปm artifact nร o.\n const gates = resolveGateSettings(input.gateSettings);\n const techStack = input.techStack || input.milestone.tech_keywords || ['General Technology'];\n console.log(' ๐ฆ [Gate] LESSON: ' + gates.LESSON + ' | ACT: ' + gates.ACT + ' | QUIZ: ' + gates.QUIZ);\n\n const targetObjectives = (input.milestone.learning_objectives || []).map((lo) => ({\n code: lo.code,\n description: lo.description || lo.name || '',\n bloomLevel: lo.bloom_level || 'understand',\n }));\n\n // โโโ Standards grounding (Phase 2): select verbatim statements for this lesson โโโ\n const packs = input.standardsPacks ?? [];\n const { block: standardsContext, selected: selectedStatements } = buildStandardsContext({\n packs,\n gradeBand: input.milestone.grade_band ?? [6, 12],\n topicText: [input.topic, input.milestone.name, input.milestone.description, ...(input.milestone.tech_keywords || [])].filter(Boolean).join(' '),\n conceptCodes: (input.milestone.concept_code || '').split(',').map((c) => c.trim()).filter(Boolean),\n language,\n });\n const standardStatements: Record<string, string> = {};\n for (const s of selectedStatements) {\n standardStatements[s.packId + ':' + s.statement.id] = Object.values(s.statement.texts)[0] || '';\n }\n if (selectedStatements.length > 0) {\n console.log(' ๐ [Standards] Grounded with ' + selectedStatements.length + ' verbatim statement(s) from ' + new Set(selectedStatements.map((s) => s.packId)).size + ' pack(s)');\n }\n\n // 1. Step: Generate Master Lesson Plan\n let lesson = await generateMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n\n let auditReport: CurriculumQualityReport | undefined;\n\n // 2. Gate cho LESSON โ ฤรบng 1 trong 3 mode chแบกy, khรดng bao giแป chแปng xแบฟp:\n // LLM_JUDGE = Agent kiแปm โ judge (+ auto-repair khi NEEDS_REVISION/FAIL)\n // HITL = Human kiแปm โ workflow treo chแป verdict qua durable hook (khรดng judge LLM)\n // OFF = khรดng kiแปm\n const lessonGate = gateModeFor(gates, 'LESSON');\n\n if (lessonGate === 'LLM_JUDGE') {\n auditReport = await judgeMasterLessonStep({\n lessonId: milestoneId,\n lesson,\n language,\n targetObjectives,\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n modelOptions: input.modelOptions,\n });\n\n if (auditReport.overallVerdict === 'FAIL' || auditReport.overallVerdict === 'NEEDS_REVISION') {\n lesson = await repairMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n auditReport,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n }\n } else if (lessonGate === 'HITL') {\n // HITL = Human kiแปm. Workflow TREO (durable, zero compute) chแป verdict qua hook.\n // Token deterministic theo milestone โ API respond tรฌm ฤฦฐแปฃc ฤรบng hook.\n const hookToken = 'gate:lesson:' + milestoneId;\n console.log(' โธ [Gate] LESSON awaiting HUMAN review (HITL) โ hook ' + hookToken);\n const workflowPkg = await import('workflow');\n const createHook = (workflowPkg as any).createHook as ((o: { token: string }) => AsyncIterable<import('../hooks/approvalHook').ApprovalPayload> & { token: string; dispose(): Promise<void> });\n const hook = createHook({ token: hookToken });\n const review = await (hook as unknown as Promise<import('../hooks/approvalHook').ApprovalPayload>);\n console.log(' โ
[Gate] Human verdict: ' + (review.approved ? 'APPROVED' : 'REJECTED') + (review.feedback ? ' โ ' + review.feedback : ''));\n if (!review.approved) {\n // Human tแปซ chแปi โ repair theo feedback โ vรฒng HITL mแปi trรชn token v2 (human kiแปm lแบกi bแบฃn mแปi)\n const repairReport = {\n overallVerdict: 'NEEDS_REVISION',\n totalScore: 0,\n languageAdherencePassed: true,\n criteria: [],\n actionableRepairPrompts: review.feedback ? [review.feedback] : ['Sแปญa theo phแบฃn hแปi cแปงa ngฦฐแปi duyแปt'],\n } as unknown as CurriculumQualityReport;\n lesson = await repairMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n auditReport: repairReport,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n const hook2 = createHook({ token: hookToken + ':v2' });\n const review2 = (await (hook2 as unknown as Promise<import('../hooks/approvalHook').ApprovalPayload>));\n console.log(' โ
[Gate] Human verdict (v2): ' + (review2.approved ? 'APPROVED' : 'REJECTED'));\n if (!review2.approved) {\n // Nguyรชn lรฝ gate: task phแปฅ thuแปc task bแป tแปซ chแปi KHรNG ฤฦฐแปฃc thแปฑc thi.\n // Chแบทn toร n bแป downstream โ khรดng sinh satellites, khรดng save.\n console.log(' ๐ [Gate] LESSON rejected twice โ satellites & save BLOCKED');\n return {\n milestoneId,\n milestoneSlug,\n status: 'FAILED',\n gateBlocked: { artifactType: 'LESSON', reason: 'HITL_REJECTED_V2', feedback: review2.feedback },\n artifacts: undefined as unknown as MilestoneWorkflowResult['artifacts'],\n } as unknown as MilestoneWorkflowResult;\n }\n }\n }\n\n // 3. Step: Parallel Fan-out for Satellites\n const [activity, selfLab, quiz, slides, handout] = await Promise.all([\n generateActivityStep({ lesson, language, modelOptions: input.modelOptions }),\n generateSelfLabStep({ milestone: input.milestone, language, targetTechStack: techStack, modelOptions: input.modelOptions }),\n generateDiagnosticQuizStep({ milestone: input.milestone, language, modelOptions: input.modelOptions }),\n generateSlidesStep({ lesson, language, modelOptions: input.modelOptions }),\n generateHandoutStep({ lesson, language, modelOptions: input.modelOptions }),\n ]);\n\n const codeLab = await generateCodeLabStep({\n lesson,\n activity,\n language,\n targetTechStack: techStack,\n modelOptions: input.modelOptions,\n });\n\n // 3b. Gate satellites per Gate Settings (LLM_JUDGE โ judge; HITL/OFF โ skip judging here).\n const satelliteReports: Record<string, CurriculumQualityReport> = {};\n const satelliteCandidates: Array<{ type: import('../gateSettings').CurriculumArtifactType; id: string; artifact: unknown }> = [\n { type: 'ACT', id: 'ACT_' + milestoneId, artifact: activity },\n { type: 'QUIZ', id: 'QUIZ_' + milestoneId, artifact: quiz },\n { type: 'SLIDE', id: 'SLIDE_' + milestoneId, artifact: slides },\n { type: 'HANDOUT', id: 'HANDOUT_' + milestoneId, artifact: handout },\n { type: 'CODE', id: 'CODE_' + milestoneId, artifact: codeLab },\n ];\n const toJudge = satelliteCandidates.filter((c) => c.artifact && gateModeFor(gates, c.type) === 'LLM_JUDGE');\n if (toJudge.length > 0) {\n const reports = await Promise.all(\n toJudge.map((c) =>\n judgeSatelliteStep({\n artifactType: c.type,\n artifactId: c.id,\n artifact: c.artifact,\n language,\n targetObjectives,\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n modelOptions: input.modelOptions,\n }).catch((err: Error) => {\n console.warn(' โ [Gate] satellite judge failed for ' + c.type + ': ' + err.message);\n return undefined;\n })\n )\n );\n for (let i = 0; i < toJudge.length; i++) {\n const r = reports[i];\n if (r) satelliteReports[toJudge[i].type] = r;\n }\n }\n\n let worksheet: Worksheet | undefined;\n let teacherGuide: TeacherGuide | undefined;\n let extension: Extension | undefined;\n\n if (bundleTier === 'full') {\n [worksheet, teacherGuide, extension] = await Promise.all([\n generateWorksheetStep({ lesson, language, modelOptions: input.modelOptions }),\n generateTeacherGuideStep({ lesson, activity, language, modelOptions: input.modelOptions }),\n generateExtensionStep({ lesson, activity, language, modelOptions: input.modelOptions }),\n ]);\n }\n\n // 4. Standards Coverage Gate (deterministic): statement โ LO โ activity โ quiz\n let standardsCoverage: import('../../standards').CoverageGateReport | undefined;\n if (packs.length > 0) {\n standardsCoverage = evaluateStandardsCoverage({\n packs,\n objectives: (lesson.learningObjectives || []).map((lo: any) => ({\n code: lo.code,\n standardRefs: lo.standardRefs,\n conceptRefs: lo.conceptRefs,\n })),\n // NOTE: ActivityLab has no structured LO linkage yet โ activity coverage rows are derived\n // from LOโquiz paths inside the gate. Wire ACT.loRefs in a future schema revision.\n activities: [],\n quizQuestions: (quiz?.questions || []).map((q: any) => ({ alignedLO: q.alignedLO, alignedAO: q.alignedAO })),\n assessmentObjectives: quiz?.assessmentObjectives?.map((ao: any) => ({ aoCode: ao.aoCode, alignedLO: ao.alignedLO })),\n });\n console.log(' ๐ [Standards Coverage] ' + standardsCoverage.summary);\n\n const enforce = input.enforceStandardsCoverage ?? true;\n if (enforce && standardsCoverage.verdict === 'FAIL') {\n console.error(' โ [Standards Coverage] HARD BLOCK โ ' + standardsCoverage.summary);\n console.error(standardsCoverage.rawMarkdownReport.split('\\n').filter((l) => l.startsWith('- [')).slice(0, 10).join('\\n'));\n return {\n milestoneId,\n milestoneSlug,\n status: 'FAILED',\n savedResult: { workspaceDir: '', files: [] } as unknown as SavedMilestoneResult,\n judgeReport: auditReport,\n standardsCoverage,\n artifacts: { lesson, activity, codeLab, selfLab, quiz, slides, handout, worksheet, teacherGuide, extension },\n };\n }\n }\n\n // 5. Step: Save serialized Markdown/JSON files to Local Workspace Disk\n const savedResult = await saveMilestoneToWorkspaceStep({\n jobId: input.jobId,\n milestoneSlug,\n lesson,\n activity,\n codeLab,\n selfLab,\n quiz,\n slides,\n handout,\n worksheet,\n teacherGuide,\n extension,\n baseWorkspaceDir: input.baseWorkspaceDir,\n });\n\n return {\n milestoneId,\n milestoneSlug,\n status: 'SUCCESS',\n savedResult,\n judgeReport: auditReport,\n satelliteJudgeReports: Object.keys(satelliteReports).length > 0 ? satelliteReports : undefined,\n gatesResolved: gates as unknown as Record<string, string>,\n standardsCoverage,\n artifacts: {\n lesson,\n activity,\n codeLab,\n selfLab,\n quiz,\n slides,\n handout,\n worksheet,\n teacherGuide,\n extension,\n },\n };\n}\n","import { sleep } from 'workflow';\nimport { generateMilestoneWorkflow, type MilestoneWorkflowResult } from './milestoneWorkflow';\nimport { publishToGitStep, publishToSupabaseStep } from '../steps/publishSteps';\nimport { LocalWorkspaceManager } from '../../publishers/localWorkspaceManager';\nimport type { ProjectRoadmap, MilestoneInput } from '../../schemas';\nimport type { GitPublishOptions, GitPublishResult } from '../../publishers/gitPublisher';\nimport type { SupabasePublishOptions, SupabasePublishResult } from '../../publishers/supabasePublisher';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface GenerateRoadmapWorkflowInput {\n jobId?: string;\n roadmap: ProjectRoadmap;\n language?: string;\n bundleTier?: 'minimum' | 'full';\n batchSize?: number;\n /** Gate Settings thรด (vd: gateModes tแปซ project.config.json) โ kit tแปฑ chuแบฉn hoรก. */\n gateSettings?: unknown;\n baseWorkspaceDir?: string;\n gitPublishOptions?: Omit<GitPublishOptions, 'jobId' | 'localJobDir'>;\n supabasePublishOptions?: Omit<SupabasePublishOptions, 'jobId' | 'courseTitle' | 'topic' | 'language' | 'milestones'>;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport interface RoadmapWorkflowSummary {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n totalMilestones: number;\n successfulMilestones: number;\n failedMilestones: number;\n results: Array<{ milestoneId: string; status: 'FULFILLED' | 'REJECTED'; result?: MilestoneWorkflowResult; error?: string }>;\n gitPublishResult?: GitPublishResult;\n supabasePublishResult?: SupabasePublishResult;\n workspaceDir: string;\n}\n\n/**\n * Parent Workflow: Orchestrates durable generation of an entire Curriculum Roadmap.\n * Implements Batching (Pattern 1), Failure Isolation, and Dual-Target Publishing (Git + Supabase).\n */\nexport async function generateRoadmapWorkflow(\n input: GenerateRoadmapWorkflowInput\n): Promise<RoadmapWorkflowSummary> {\n 'use workflow';\n\n const jobId = input.jobId || `job_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;\n const language = input.language || input.roadmap.target_language || 'vi';\n const topic = input.roadmap.topic || input.roadmap.goal || 'General Curriculum';\n const courseTitle = input.roadmap.title || `Curriculum: ${topic}`;\n const batchSize = input.batchSize || 2;\n const milestones: MilestoneInput[] = input.roadmap.milestones || [];\n\n const workspaceManager = new LocalWorkspaceManager(input.baseWorkspaceDir);\n const workspaceDir = await workspaceManager.initJobWorkspace(jobId, {\n courseTitle,\n topic,\n language,\n totalMilestones: milestones.length,\n });\n\n const milestoneOutcomes: Array<{\n milestoneId: string;\n status: 'FULFILLED' | 'REJECTED';\n result?: MilestoneWorkflowResult;\n error?: string;\n }> = [];\n\n // 1. Process Milestones in Batches with sleep pacing (Pattern 1: Batching)\n for (let i = 0; i < milestones.length; i += batchSize) {\n const batch = milestones.slice(i, i + batchSize);\n\n const batchSettled = await Promise.allSettled(\n batch.map((milestone) =>\n generateMilestoneWorkflow({\n jobId,\n milestone,\n language,\n topic,\n targetAudience: input.roadmap.target_audience,\n techStack: input.roadmap.tech_stack || milestone.tech_keywords,\n bundleTier: input.bundleTier,\n gateSettings: input.gateSettings,\n baseWorkspaceDir: input.baseWorkspaceDir,\n modelOptions: input.modelOptions,\n })\n )\n );\n\n for (const [idx, outcome] of batchSettled.entries()) {\n const targetMilestone = batch[idx];\n const mId = targetMilestone.id || targetMilestone.concept_code || `M${i + idx + 1}`;\n\n if (outcome.status === 'fulfilled') {\n milestoneOutcomes.push({\n milestoneId: mId,\n status: 'FULFILLED',\n result: outcome.value,\n });\n } else {\n milestoneOutcomes.push({\n milestoneId: mId,\n status: 'REJECTED',\n error: outcome.reason instanceof Error ? outcome.reason.message : String(outcome.reason),\n });\n }\n }\n\n // Pace between batches to respect LLM rate limits\n if (i + batchSize < milestones.length) {\n await sleep('2s');\n }\n }\n\n const successfulMilestones = milestoneOutcomes.filter((m) => m.status === 'FULFILLED').length;\n const failedMilestones = milestoneOutcomes.filter((m) => m.status === 'REJECTED').length;\n\n let gitPublishResult: GitPublishResult | undefined = undefined;\n let supabasePublishResult: SupabasePublishResult | undefined = undefined;\n\n // 2. Dual-Target Publishing (if configured)\n if (input.gitPublishOptions) {\n gitPublishResult = await publishToGitStep({\n jobId,\n localJobDir: workspaceDir,\n ...input.gitPublishOptions,\n });\n }\n\n if (input.supabasePublishOptions) {\n supabasePublishResult = await publishToSupabaseStep({\n jobId,\n courseTitle,\n topic,\n language,\n milestones: milestoneOutcomes\n .filter((m) => m.status === 'FULFILLED' && m.result)\n .map((m) => ({\n milestoneId: m.milestoneId,\n milestoneName: m.result!.savedResult.milestoneSlug,\n lessonSlug: m.result!.savedResult.milestoneSlug,\n })),\n ...input.supabasePublishOptions,\n });\n }\n\n return {\n jobId,\n courseTitle,\n topic,\n language,\n totalMilestones: milestones.length,\n successfulMilestones,\n failedMilestones,\n results: milestoneOutcomes,\n gitPublishResult,\n supabasePublishResult,\n workspaceDir,\n };\n}\n","import { streamCurriculumAIInference, extractThoughtAndContent, type ChunkType } from '../ai/streamRunner';\nimport { loadCurriculumTemplate } from './lessonProductionService';\nimport { createAiInferenceError } from '../errors';\n\nexport type ArtifactType = \n | 'lesson' \n | 'slide' \n | 'act' \n | 'quiz' \n | 'guide' \n | 'handout' \n | 'worksheet' \n | 'rubric' \n | 'ext' \n | 'glossary' \n | 'codelab' \n | 'bom'\n | 'exit_ticket' \n | 'tiered_practice' \n | 'choice_board' \n | 'science_lab' \n | 'task_cards' \n | 'station_rotation' \n | 'bell_ringer' \n | 'review_game' \n | 'graphic_organizer';\n\nexport type ScaffoldingLevel = 'foundation' | 'balanced' | 'advanced';\n\nexport interface SingleArtifactRequest {\n artifactType: ArtifactType;\n topic: string;\n lessonId?: string;\n lessonTitle?: string;\n pedagogy?: '5e' | 'edp' | 'pbl' | 'general';\n targetAge?: string;\n scaffoldingLevel?: ScaffoldingLevel;\n hardwarePlatform?: string[];\n gradeLevel?: string;\n studentCount?: string;\n language?: string;\n extraContext?: string;\n config?: Record<string, any>;\n contextSot?: {\n framework?: string;\n learnerProfile?: string;\n lessonPlan?: string;\n handout?: string;\n };\n options?: {\n model?: string;\n temperature?: number;\n openrouterKey?: string;\n alibabaKey?: string;\n deepseekKey?: string;\n geminiKey?: string;\n nvidiaKey?: string;\n openaiKey?: string;\n anthropicKey?: string;\n };\n onChunk?: (chunk: string, type: 'content' | 'thought') => void;\n}\n\nexport interface SingleArtifactResult {\n artifactType: ArtifactType;\n filename: string;\n content: string;\n persona: string;\n thought?: string;\n}\n\n/**\n * Maps artifact type to default canonical filename and responsible agent persona\n */\nexport function getArtifactMetadata(type: ArtifactType, lessonId?: string, pedagogy?: string): { filename: string; persona: string; templateFile: string } {\n const id = lessonId || 'ON_DEMAND';\n\n switch (type) {\n case 'lesson': {\n const p = (pedagogy || '').toLowerCase();\n const templateFile = p === 'edp' ? 'LESSON_EDP_template.md' : p === 'general' ? 'LESSON_GENERAL_template.md' : 'LESSON_5E_template.md';\n return { filename: `LESSON_${id}.md`, persona: '@content', templateFile };\n }\n case 'slide':\n return { filename: `SLIDE_${id}.md`, persona: '@illustrator', templateFile: 'SLIDE_template.md' };\n case 'act':\n return { filename: `ACT_${id}.md`, persona: '@activity', templateFile: 'ACT_template.md' };\n case 'quiz':\n return { filename: `QUIZ_${id}.md`, persona: '@assessor', templateFile: 'QUIZ_v4.6_template.md' };\n case 'guide':\n return { filename: `GUIDE_${id}.md`, persona: '@content', templateFile: 'GUIDE_template.md' };\n case 'handout':\n return { filename: `HANDOUT_${id}.md`, persona: '@content', templateFile: 'HANDOUT_template.md' };\n case 'worksheet':\n return { filename: `WKS_${id}.md`, persona: '@content', templateFile: 'WKS_template.md' };\n case 'rubric':\n return { filename: `RUBRIC_${id}.md`, persona: '@assessor', templateFile: 'RUBRIC_template.md' };\n case 'ext':\n return { filename: `EXT_${id}.md`, persona: '@activity', templateFile: 'EXT_template.md' };\n case 'glossary':\n return { filename: `GLOSSARY_${id}.md`, persona: '@content', templateFile: 'GLOSSARY_template.md' };\n case 'codelab':\n return { filename: `CODE_${id}.md`, persona: '@activity', templateFile: 'ACT_template.md' };\n case 'bom':\n return { filename: `BOM_${id}.md`, persona: '@activity', templateFile: 'PROJECT_BRIEF_template.md' };\n case 'exit_ticket':\n return { filename: `EXIT_TICKET_${id}.md`, persona: '@assessor', templateFile: 'EXIT_TICKET_template.md' };\n case 'tiered_practice':\n return { filename: `TIERED_PRACTICE_${id}.md`, persona: '@activity', templateFile: 'TIERED_PRACTICE_template.md' };\n case 'choice_board':\n return { filename: `CHOICE_BOARD_${id}.md`, persona: '@activity', templateFile: 'CHOICE_BOARD_template.md' };\n case 'science_lab':\n return { filename: `SCIENCE_LAB_${id}.md`, persona: '@activity', templateFile: 'SCIENCE_LAB_template.md' };\n case 'task_cards':\n return { filename: `TASK_CARDS_${id}.md`, persona: '@activity', templateFile: 'TASK_CARDS_template.md' };\n case 'station_rotation':\n return { filename: `STATION_ROTATION_${id}.md`, persona: '@content', templateFile: 'STATION_ROTATION_template.md' };\n case 'bell_ringer':\n return { filename: `BELL_RINGER_${id}.md`, persona: '@content', templateFile: 'BELL_RINGER_template.md' };\n case 'review_game':\n return { filename: `REVIEW_GAME_${id}.md`, persona: '@assessor', templateFile: 'REVIEW_GAME_template.md' };\n case 'graphic_organizer':\n return { filename: `GRAPHIC_ORGANIZER_${id}.md`, persona: '@illustrator', templateFile: 'GRAPHIC_ORGANIZER_template.md' };\n default:\n return { filename: `ARTIFACT_${id}.md`, persona: '@content', templateFile: 'LESSON_5E_template.md' };\n }\n}\n\n/**\n * Universal Single Artifact Generator Service for all 21 Pedagogical JTBD Artifacts\n */\nexport async function generateSingleArtifact(req: SingleArtifactRequest): Promise<SingleArtifactResult> {\n const { \n artifactType, \n topic, \n lessonId, \n lessonTitle, \n pedagogy = '5e', \n targetAge = '14-18 years old (High School / Early College)', \n scaffoldingLevel = 'balanced',\n hardwarePlatform = ['MacBook Lab (macOS 14+ / Swift 6)'],\n gradeLevel,\n studentCount,\n language = 'Vietnamese',\n extraContext,\n config,\n contextSot = {},\n options = {},\n onChunk\n } = req;\n\n const meta = getArtifactMetadata(artifactType, lessonId, pedagogy || config?.pedagogicalModel);\n const displayTitle = lessonTitle || topic;\n const loadedTemplate = loadCurriculumTemplate(meta.templateFile);\n const templateContent = loadedTemplate || getDefaultFallbackTemplate(artifactType, displayTitle, lessonId || 'ON_DEMAND');\n const hwStr = hardwarePlatform.join(', ');\n const selectedDevices = (config?.devices || (hardwarePlatform[0]?.toLowerCase().includes('paper') ? 'paper-only' : 'laptop')).toLowerCase();\n\n const isBilingual = language.toLowerCase().includes('bilingual') || language.toLowerCase().includes('song');\n const isVietnamese = !isBilingual && language.toLowerCase().includes('viet');\n const langRule = isBilingual\n ? `1. AUTHORING LANGUAGE: Bilingual (Vietnamese - English). Headings and core conceptual definitions should be presented in Vietnamese with English technical terms in parentheses. Explanations and instructional text are in Vietnamese. Key code terms, comments, and challenge summaries are presented bilingually.`\n : isVietnamese\n ? `1. AUTHORING LANGUAGE: Vietnamese for all instructional text, explanations, questions, rubrics, and presenter notes. Programming code, syntax keywords, and standard API identifiers remain in standard English (with Vietnamese explanation comments/notes).`\n : `1. AUTHORING LANGUAGE: 100% English (Plan C Canonical Specification).`;\n\n // Hardware and device adaptation\n const isPaperOnly = selectedDevices === 'paper-only' || hwStr.toLowerCase().includes('paper') || hwStr.toLowerCase().includes('print-ready');\n const deviceRule = isPaperOnly\n ? `\\n- ๐ PAPER-ONLY / NO-DEVICE ENVIRONMENT: The learning space has NO computers or screens. All exercises, worksheets, task cards, exit tickets, and code analyses MUST be 100% printable. Provide write-in blank boxes, printed code snippets with line numbers, tracing tables, and physical manipulative instructions.`\n : selectedDevices === 'tablet' || selectedDevices === 'smartphone'\n ? `\\n- ๐ฑ MOBILE/TABLET ENVIRONMENT: Activities should be optimized for touch interfaces and mobile/tablet sandboxes (e.g. Swift Playgrounds, Web IDEs, tap/touch interactions).`\n : `\\n- ๐ป LAPTOP/DESKTOP ENVIRONMENT: Full keyboard, terminal, multi-file code editing, and browser developer tooling are available.`;\n\n // Class size dynamics\n const classDynamicsRule = studentCount\n ? `\\n- ๐ฅ CLASS SIZE LOGISTICS: Class has exactly ${studentCount} students. Structure group sizes, pair-programming pairs, station rotations, and material distribution to realistically accommodate ${studentCount} students without bottlenecks.`\n : '';\n\n // Scaffolding level instruction\n const scaffoldingRule = scaffoldingLevel === 'foundation'\n ? `\\n- ๐ช FOUNDATION SCAFFOLDING: High instructional support. Provide step-by-step numbered breakdowns, concrete real-world analogies, hints for every problem, scaffolded starter code/fill-in-the-blanks, and frequent check-for-understanding prompts.`\n : scaffoldingLevel === 'advanced'\n ? `\\n- ๐ ADVANCED CHALLENGE: Minimal scaffolding. Focus on deeper system architecture, edge case handling, computational complexity, performance optimization, and open-ended extension challenges.`\n : `\\n- โ๏ธ BALANCED SCAFFOLDING: Balanced approach combining structured teacher guidance with independent inquiry and problem solving.`;\n\n // Extra user guidance\n const extraContextRule = extraContext\n ? `\\n- ๐ฏ CRITICAL USER INSTRUCTIONS (MANDATORY): \"${extraContext}\". You MUST directly reflect and satisfy every point of this user guidance in the generated artifact!`\n : '';\n\n const artifactSpecializedPrompt = getArtifactSpecializedInvariants(artifactType, {\n ...req,\n studentCount,\n gradeLevel,\n language,\n scaffoldingLevel\n });\n\n // Construct rigorous, archetypal pedagogical system prompt\n const systemPrompt = `You are ${meta.persona}, an expert Curriculum & Pedagogical Specialist in the Curriculum OS Multi-Agent Team.\nYour task is to author a canonical, publication-grade learning artifact of type \"${artifactType.toUpperCase()}\".\n\n### CORE OPERATIONAL INVARIANTS:\n${langRule}\n2. NON-MOCK CODE INVARIANT: Any code snippet provided MUST be 100% syntactically valid, idiomatic, and executable without placeholders or fake functions.\n3. PEDAGOGICAL GROUNDING: Strictly align with the ${pedagogy.toUpperCase()} model, Bloom's Revised Taxonomy, and IEEE/ACM CS2023 guidelines.\n4. SCAFFOLDING LEVEL: \"${scaffoldingLevel.toUpperCase()}\".${scaffoldingRule}\n5. TARGET AUDIENCE: ${gradeLevel ? `Grade ${gradeLevel}, ` : ''}${targetAge} on ${hwStr}.${deviceRule}${classDynamicsRule}${extraContextRule}\n6. OUTPUT INTEGRITY: Output clean Markdown starting directly with YAML frontmatter. Do not wrap entire response in triple backticks.${artifactSpecializedPrompt}`;\n\n const userPrompt = `### CONTEXT GROUND TRUTH:\n- Topic / Concept Domain: \"${topic}\"\n- Lesson ID: \"${lessonId || 'ON_DEMAND'}\"\n- Artifact Title: \"${displayTitle}\"\n- Pedagogy: \"${pedagogy.toUpperCase()}\"\n- Scaffolding Level: \"${scaffoldingLevel}\"\n- Hardware Environment: \"${hwStr}\"\n${gradeLevel ? `- Target Grade Level: \"${gradeLevel}\"\\n` : ''}${studentCount ? `- Class Size: \"${studentCount} students\"\\n` : ''}- Target Language: \"${language}\"\n${selectedDevices ? `- Device Mode: \"${selectedDevices}\"\\n` : ''}${extraContext ? `- User Specific Guidance & Requirements: \"${extraContext}\"\\n` : ''}${config ? `- Full Task Config: ${JSON.stringify(config)}\\n` : ''}\n${contextSot.framework ? `### SOT CURRICULUM FRAMEWORK:\\n${contextSot.framework.slice(0, 1500)}\\n` : ''}\n${contextSot.lessonPlan ? `### SOT CANONICAL LESSON PLAN:\\n${contextSot.lessonPlan.slice(0, 1500)}\\n` : ''}\n${contextSot.handout ? `### SOT STUDENT HANDOUT:\\n${contextSot.handout.slice(0, 1000)}\\n` : ''}\n\n### MANDATORY CANONICAL TEMPLATE CONTRACT:\nUse the following reference template structure as the exact specification:\n\n${templateContent}\n\n### TASK INSTRUCTION:\nGenerate the complete, thorough, publication-grade \"${artifactType.toUpperCase()}\" artifact for \"${displayTitle}\". Ensure all [REQUIRED] sections are fully developed with realistic, detailed pedagogical and technical content. Strictly follow the specialized invariants for \"${artifactType.toUpperCase()}\".`;\n\n let accumulatedContent = '';\n let accumulatedThought = '';\n\n try {\n const rawResult = await streamCurriculumAIInference(\n [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt }\n ],\n userPrompt,\n {\n ...options,\n systemPersona: systemPrompt\n },\n (chunk: string, type: ChunkType) => {\n if (type === 'thought') {\n accumulatedThought += chunk;\n } else if (type === 'content') {\n accumulatedContent += chunk;\n }\n if (onChunk) onChunk(chunk, type === 'thought' ? 'thought' : 'content');\n }\n );\n\n const { thought, content } = extractThoughtAndContent(rawResult);\n\n return {\n artifactType,\n filename: meta.filename,\n content: content || accumulatedContent,\n persona: meta.persona,\n thought: thought || accumulatedThought\n };\n } catch (error: any) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_ALL_PROVIDERS_FAILED',\n message: `Failed to generate single artifact ${artifactType}: ${error?.message || 'Unknown error'}`,\n rawError: error\n });\n }\n}\n\n/**\n * Provides specialized, publication-grade pedagogical prompt invariants for each artifact type\n */\nfunction getArtifactSpecializedInvariants(type: ArtifactType, req: SingleArtifactRequest): string {\n const cfg = req.config || {};\n const isPaperOnly = cfg.devices === 'paper-only' || req.hardwarePlatform?.some(h => h.toLowerCase().includes('paper'));\n const studentCount = req.studentCount || '25';\n\n switch (type) {\n case 'slide': {\n const slideCount = cfg.slideCount || 10;\n const presentationStyle = cfg.presentationStyle || 'modern';\n const presentationDuration = cfg.presentationDuration || 45;\n const includeSpeakerNotes = cfg.includeSpeakerNotes !== false;\n\n return `\n### ๐ฌ SLIDE PRESENTATION & MARP ARCHITECTURE INVARIANTS:\n1. **SLIDE COUNT & TIMING TARGET**:\n - Generate EXACTLY ${slideCount} slides separated by \\`---\\` horizontal rules.\n - Pacing: Target total duration is ${presentationDuration} minutes (~${Math.round(Number(presentationDuration) / Number(slideCount))} mins per slide).\n - Visual Style: \"${presentationStyle.toUpperCase()}\". Maintain high visual clarity, contrasting accents, and executive polish.\n2. **STRICT CONCISENESS & 6x6 RULE (ABSOLUTELY NO TEXT WALLS)**:\n - A slide is an INTERACTIVE PROJECTION CANVAS, NOT a textbook or lesson plan!\n - Maximum 4โ6 bullet points per slide.\n - Maximum 8โ12 words per bullet point. Forbid dense multi-sentence paragraphs on the slide surface.\n3. **SPEAKER NOTES FOR ALL SPOKEN WORDS (<!-- Presenter Notes: ... -->)**:\n ${includeSpeakerNotes ? `- MANDATORY: Every single slide MUST contain structured presenter notes in \\`<!-- Presenter Notes: ... -->\\` at the bottom:\n - SCRIPT: 60-90s teacher talk track with intuitive analogies.\n - COLD CALL / CHECK: Diagnostic question to ask students.\n - SCAFFOLDING / GOTCHA: How to resolve student misconceptions.\n - PACING: Recommended minutes for the slide.` : '- Optional brief presenter notes.'}\n4. **2-COLUMN & CALLOUT CARD LAYOUTS**:\n - Use \\`<div class=\"columns\"><div>...</div><div>...</div></div>\\` for comparisons, code vs. mechanics, or side-by-side tasks.\n - Use \\`<div class=\"card\">\\`, \\`<div class=\"card highlight\">\\`, \\`<div class=\"card warning\">\\`, and \\`<div class=\"card success\">\\` for scannable chunking.\n5. **CLICK-TO-REVEAL SYSTEM**:\n - Use \\`<!-- clicks -->\\` before bulleted lists (\\`<ul>\\` or \\`<ol>\\`) for incremental click-to-reveal.\n - Use \\`<!-- click -->\\` before answers, code reveals, or key callouts.\n6. **CONCISE CODE SNIPPETS**:\n - Maximum 6โ10 lines of clean code per snippet with inline comments. Never paste whole files.\n7. **MERMAID VISUALS**:\n - Use Mermaid flowcharts (\\`graph TD\\` or \\`graph LR\\`) or sequence diagrams for workflows and control loops.`;\n }\n\n case 'tiered_practice': {\n const techStack = cfg.techStack || (req.hardwarePlatform?.[0] || 'Modern Programming Language');\n const includeUnitTests = cfg.includeUnitTests !== false;\n\n return `\n### ๐ช TIERED PRACTICE ARCHITECTURE INVARIANTS (3-TIER ADAPTIVE):\n- Target Technology Stack: \"${techStack}\"\n${includeUnitTests ? '- Automated Testing: Include explicit executable Unit Tests / Assertions for verifying Bronze, Silver, and Gold tiers.' : ''}\n1. **3 EXPLICIT RIGOR TIERS**:\n - **๐ฅ Tier 1 (Bronze / Cฦก bแบฃn)**: 70% starter boilerplate / 30% fill-in. Direct recall, scaffolded fill-in-the-blanks, single-concept recognition with starter hints.\n - **๐ฅ Tier 2 (Silver / Tiรชu chuแบฉn)**: 30% starter boilerplate / 70% implementation. Independent multi-step problem solving, bug identification, synthesis of 2+ concepts.\n - **๐ฅ Tier 3 (Gold / Thแปญ thรกch)**: 0% code / open architecture. Edge case handling, algorithmic optimization, open-ended architectural design or extension.\n2. **COMPLETE WORKED SOLUTIONS & ANSWER KEYS**:\n - Provide step-by-step worked solutions for every problem across all 3 tiers.\n3. **SELF-DIAGNOSTIC RUBRIC**:\n - Include a clear student rubric with criteria for when a student is ready to level up from Bronze โ Silver โ Gold.`;\n }\n\n case 'exit_ticket': {\n const questionCount = cfg.questionCount || 3;\n const diagnosticFocus = cfg.diagnosticFocus || 'misconceptions';\n\n return `\n### ๐๏ธ EXIT TICKET ARCHITECTURE INVARIANTS:\n1. **EXACTLY ${questionCount} TARGETED ITEMS (3โ5 MINUTE DURATION)**:\n - Item 1: Quick diagnostic checking mastery of the core objective.\n - Item 2: Application with diagnostic trap focusing on: \"${diagnosticFocus}\".\n - Item 3: Metacognitive self-check (Confidence rating 1โ5 + \"Explain what is still fuzzy\").\n2. **TEACHER DIAGNOSTIC INTERVENTION GUIDE**:\n - Provide a quick lookup table: \"If student chooses/writes X โ Misconception is Y โ Quick remedy is Z\".${isPaperOnly ? '\\n3. **PRINTABLE CUT-OUT FORMAT**: Include student name/date line and cut-border dashed line.' : ''}`;\n }\n\n case 'quiz': {\n const questionCount = cfg.questionCount || 5;\n const questionTypes = Array.isArray(cfg.questionTypes) ? cfg.questionTypes.join(', ') : (cfg.questionTypes || 'multiple_choice');\n const diagnosticFocus = cfg.diagnosticFocus || 'balanced';\n\n return `\n### ๐ BLOOM-ALIGNED QUIZ ARCHITECTURE INVARIANTS:\n1. **EXACTLY ${questionCount} QUESTIONS (${questionTypes.toUpperCase()})**:\n - Diagnostic emphasis: \"${diagnosticFocus}\".\n - 40% Remember/Understand (Conceptual foundations).\n - 40% Apply/Analyze (Bug finding, code tracing, scenario application).\n - 20% Evaluate/Create (Algorithmic reasoning, trade-off evaluation).\n2. **HIGH-QUALITY DISTRACTORS WITH RATIONALE**:\n - For every multiple choice item, explain WHY each incorrect option is a plausible misconception and WHY the key is correct.\n3. **COMPLETE ANSWER KEY & SCORING RUBRIC**:\n - Explicit point distribution, partial credit guidelines, and sample ideal answers for open-ended questions.`;\n }\n\n case 'task_cards': {\n const cardCount = cfg.cardCount || 12;\n const cardUsage = cfg.cardUsage || 'stations';\n\n return `\n### ๐ TASK CARDS ARCHITECTURE INVARIANTS:\n1. **SET OF EXACTLY ${cardCount} NUMBERED CARDS (Optimized for ${cardUsage.toUpperCase()})**:\n - Clearly mark each card: Card # (1 to ${cardCount}), Difficulty (Foundation / Standard / Challenge), and Target Skill.\n2. **STUDENT RECORDING SHEET (BแบขNG GHI ฤรP รN)**:\n - Include a structured printable grid where students record answers for Cards 1โ${cardCount}.\n3. **TEACHER MASTER KEY**:\n - Quick reference key with verified answers and explanations.${isPaperOnly ? '\\n4. **PRINT-READY CARD BORDERS**: Layout with clean visual borders ready for physical printing and cutting.' : ''}`;\n }\n\n case 'graphic_organizer': {\n const diagramType = cfg.diagramType || 'concept_map';\n const includeFillIn = cfg.includeFillInExercise !== false;\n\n return `\n### ๐ GRAPHIC ORGANIZER ARCHITECTURE INVARIANTS:\n1. **VISUAL MODEL TYPE: \"${diagramType.toUpperCase()}\"**:\n - Structure a clear cognitive thinking tool: Concept Map, Flowchart, Venn Diagram, Hierarchy Tree, or Cause-Effect Matrix.\n2. **VALID MERMAID SYNTAX**:\n - Embed complete, 100% syntactically correct Mermaid diagrams showing the knowledge structure.\n3. **ACTIVE STUDENT INTERACTION PROMPTS**:\n ${includeFillIn ? '- Include interactive fill-in-the-blank nodes and connection articulation challenges.' : '- Include synthesis and reflection prompts based on the visual model.'}`;\n }\n\n case 'choice_board': {\n const gridSize = cfg.gridSize || '3x3';\n const completionRule = cfg.completionRule || 'row_column_diagonal';\n\n return `\n### ๐ฏ CHOICE BOARD ARCHITECTURE INVARIANTS (UDL ${gridSize.toUpperCase()} MATRIX):\n1. **${gridSize.toUpperCase()} MENU (UDL MULTIPLE MEANS OF EXPRESSION)**:\n - Option tasks spanning practical coding, architectural diagrams, analytical writing, and real-world scenarios.\n2. **COMPLETION CONTRACT: \"${completionRule.toUpperCase()}\"**:\n - Explicit rule (e.g. Tic-Tac-Toe 3-in-a-row/column/diagonal, or Point Bounty system).\n3. **UNIFIED EVALUATION RUBRIC**:\n - Consistent grading criteria applicable across all task choices on the board.`;\n }\n\n case 'station_rotation': {\n const stationCount = cfg.stationCount || 3;\n const stationDuration = cfg.stationDuration || 15;\n\n return `\n### ๐ STATION ROTATION ARCHITECTURE INVARIANTS:\n1. **EXACTLY ${stationCount} STATIONS SCALED FOR ${studentCount} STUDENTS**:\n - Group size: ~${Math.ceil(Number(studentCount) / Number(stationCount)) || 7} students per group.\n - Distinct station roles: Teacher-Led Small Group, Independent Practical Lab, Collaborative / Unplugged Peer Challenge.\n2. **TIMING & TRANSITIONS (${stationDuration} MINS/STATION)**:\n - ${stationDuration} minutes per station + 3-minute structured rotation protocol.\n3. **STATION DELIVERABLES & ACCOUNTABILITY**:\n - Clear check-in deliverable required at each station to ensure on-task accountability.`;\n }\n\n case 'act':\n case 'codelab':\n case 'science_lab': {\n const techStack = cfg.techStack || (req.hardwarePlatform?.[0] || 'Modern Programming Language');\n const includeUnitTests = cfg.includeUnitTests !== false;\n\n return `\n### ๐ป HANDS-ON LAB & CODE ACTIVITY ARCHITECTURE INVARIANTS:\n- Technology Stack: \"${techStack}\"\n${includeUnitTests ? '- Unit Testing: Provide automated assertions or test runner checks.' : ''}\n1. **100% RUNNABLE CODE / RIGOROUS PROCEDURE**:\n - Absolutely no fake APIs, mock functions, or non-executable pseudocode.\n2. **STRUCTURED LAB PHASES**:\n - Objective & Environmental Prerequisites.\n - Starter Skeleton Code with clear \\`// TODO [Student Task]\\` comments.\n - Step-by-step Guided Challenges (Level 1 โ Level 2 โ Level 3).\n - Automated Verification / Test Cases.\n - Complete Reference Solution with design explanation.`;\n }\n\n case 'bell_ringer':\n return `\n### ๐ BELL RINGER ARCHITECTURE INVARIANTS (3โ5 MIN WARM-UP):\n1. **3 QUICK HOOK QUESTIONS**:\n - 2 rapid-fire recall questions activating previous knowledge.\n - 1 curiosity hook question bridging into today's core topic.\n2. **60-SECOND TEACHER REVIEW KEY**:\n - Quick-glance answer key for instant whole-class review.`;\n\n case 'review_game':\n return `\n### ๐ฎ REVIEW GAME ARCHITECTURE INVARIANTS:\n1. **GAMIFIED STRUCTURE**:\n - Jeopardy-style board (3โ4 Categories x 3 Point Values: 100 / 200 / 300) OR 3-Round Interactive Trivia.\n2. **CLEAR RULES & TEAM DYNAMICS**:\n - Team scoring rules, buzz-in protocol, and tie-breaker challenge.\n3. **COMPLETE QUESTION & ANSWER DECK**:\n - Verified answers and point values for the host/teacher.`;\n\n case 'guide': {\n const lessonDuration = cfg.lessonDuration || 90;\n return `\n### ๐ TEACHER GUIDE ARCHITECTURE INVARIANTS (${lessonDuration} MINS LESSON):\n1. **MINUTE-BY-MINUTE PACING TIMELINE**:\n - Pacing broken down for ${lessonDuration} minutes (Hook, Modeling, Guided Practice, Independent Practice, Debrief).\n2. **SOCRATIC QUESTIONS & PROMPTS**:\n - Cold-call questions with anticipated student misconceptions and remediation scripts.\n3. **DIFFERENTIATION STRATEGIES**:\n - Specific adaptations for students needing support vs. high-flyers needing extension.`;\n }\n\n case 'worksheet':\n case 'handout':\n return `\n### ๐ WORKSHEET / HANDOUT ARCHITECTURE INVARIANTS:\n1. **I DO โ WE DO โ YOU DO SCAFFOLDING**:\n - Part 1 (I Do): Fully worked and annotated example.\n - Part 2 (We Do): Guided problem with fill-in hints and scaffolding scaffolds.\n - Part 3 (You Do): Independent mastery challenge.\n2. **SELF-CHECK RUBRIC**:\n - End-of-worksheet self-evaluation checklist.${isPaperOnly ? '\\n3. **PRINTABLE WORKSPACES**: Include spacious, clean write-in boxes and workspace for calculations/code.' : ''}`;\n\n case 'rubric': {\n const rubricScale = cfg.rubricScale || '4_levels';\n return `\n### ๐ ANALYTIC RUBRIC ARCHITECTURE INVARIANTS (${rubricScale.toUpperCase()} SCALE):\n1. **RIGOROUS PROFICIENCY LEVELS**:\n - 4 Proficiency Levels: Level 4 (Exemplary) | Level 3 (Proficient) | Level 2 (Developing) | Level 1 (Beginning).\n2. **CONCRETE OBSERVABLE CRITERIA**:\n - Each cell MUST describe concrete, observable behavioral evidence, not vague words like \"good\" or \"average\".`;\n }\n\n case 'glossary':\n return `\n### ๐ TECHNICAL GLOSSARY ARCHITECTURE INVARIANTS:\n1. **COMPREHENSIVE TERM PROFILES**:\n - For every key term: Technical Definition, Real-world Analogy, Code Syntax Example, and Common Misconception.`;\n\n case 'bom':\n return `\n### ๐ฆ BILL OF MATERIALS (BOM) ARCHITECTURE INVARIANTS:\n1. **CLASS-SCALED INVENTORY FOR ${studentCount} STUDENTS**:\n - Exact quantities calculated for ${studentCount} students.\n - Component specifications, estimated unit cost, and affordable alternatives.`;\n\n case 'lesson': {\n const lessonDuration = cfg.lessonDuration || 90;\n const pedagogicalModel = cfg.pedagogicalModel || req.pedagogy || '5e';\n return `\n### ๐ CANONICAL LESSON PLAN INVARIANTS (${pedagogicalModel.toUpperCase()} MODEL, ${lessonDuration} MINS):\n1. **A. LESSON DESIGN PLAN**:\n - Learning Objectives (Bloom-aligned) & Observable Student Evidence.\n - Activity Sequence mapping every phase with timing totaling ${lessonDuration} minutes.\n - Resource Map & Assessment Map with explicit Artifact Contracts.\n2. **B. LESSON FLOW**:\n - Detailed teacher moves, student actions, scripted key questions, and check-for-understanding points for every activity phase.`;\n }\n\n default:\n return '';\n }\n}\n\n/**\n * Generates rich markdown scaffolding when the physical template file is not found on disk\n */\nfunction getDefaultFallbackTemplate(type: ArtifactType, title: string, id: string): string {\n const upperType = type.toUpperCase();\n return `---\nid: \"${id}\"\ntitle: \"${title}\"\ntype: \"${upperType}\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n\n# ${title}\n\n## 1. Overview & Learning Objectives\n<!-- [REQUIRED] State 2-3 measurable, Bloom-aligned learning objectives -->\n\n## 2. Core Pedagogical Content\n<!-- [REQUIRED] Provide the core educational substance, questions, problems, and diagrams -->\n\n## 3. Practice & Differentiation\n<!-- [REQUIRED] Tiered support, worked examples, and challenges -->\n\n## 4. Assessment & Answer Key\n<!-- [REQUIRED] Complete solutions, rubrics, and diagnostic teacher feedback -->\n`;\n}\n","import type { ICurriculumStorage, ProjectStatusReport, PipelineState } from '../storage/types';\nimport { computeContentHash } from '../storage/fileSystemCurriculumAdapter';\nimport { runCurriculumAIInference, type ChunkType } from '../ai/streamRunner';\nimport { LLMJudgeEngine } from '../ai/llmJudgeEngine';\nimport type { JudgeEvaluationResult } from '../ai/llmJudgeEngine';\nimport { lintAndSanitizeArtifact } from '../pipeline/artifactLinter';\nimport { createAiInferenceError, CurriculumError } from '../errors';\nimport { getProjectArtifactScope } from './statusService';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { resolveGateSettings, gateModeFor, type ResolvedGateSettings } from '../workflow/gateSettings';\nimport { ensureExpositionForLesson, type ExpositionResult } from './knowledgeExpositionService';\nimport { buildSessionSliceContext } from './curriculumPlannerService';\nimport { buildStandardsContext } from '../standards/standardsContextInjector';\nimport { resolveStandardsPacks } from '../standards/bundledPacks';\nimport type { FrameworkPack } from '../standards/frameworkPackSchema';\n\nconst __filename = typeof import.meta?.url === 'string' ? fileURLToPath(import.meta.url) : '';\nconst _resolvedDir = __filename ? path.dirname(__filename) : (typeof __dirname !== 'undefined' ? __dirname : process.cwd());\n\n/**\n * Resolves and loads official canonical templates from docs/refs/templates or _templates/\n */\nexport function loadCurriculumTemplate(templateName: string): string {\n const candidatePaths = [\n path.resolve('/Users/tonypham/MEGA/WebApp/WIP/learnwell-platform/packages/curriculum-kit/docs/refs/templates', templateName),\n path.resolve(process.cwd(), 'packages/curriculum-kit/docs/refs/templates', templateName),\n path.resolve(process.cwd(), '_templates', templateName),\n path.resolve(process.cwd(), 'docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../../docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../../../docs/refs/templates', templateName),\n path.resolve('/Users/tonypham/MEGA/WebApp/content-gen/the-ultimate-curriculum-agent-os/_templates', templateName),\n path.resolve(_resolvedDir, '../../../../the-ultimate-curriculum-agent-os/_templates', templateName),\n ];\n\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n try {\n return fs.readFileSync(p, 'utf-8');\n } catch {\n // continue\n }\n }\n }\n console.warn(`[curriculum-kit:loadCurriculumTemplate] โ ๏ธ Template \"${templateName}\" not found across candidate paths. Falling back to inline structural scaffolding.`);\n return '';\n}\n\nexport type PedagogicalModel = '5e' | 'edp' | 'pbl' | 'general';\n\nexport interface ProduceLessonOptions {\n artifactScope?: string[];\n force?: boolean;\n pedagogy?: PedagogicalModel;\n /** Chiแบฟn lฦฐแปฃc batch (chแป produceBatchLessons dรนng). */\n batchStrategy?: 'depth_first_lesson' | 'breadth_first_artifact';\n /**\n * Gate Settings โ NGUแปN DUY NHแบคT quyแบฟt ฤแปnh \"ai kiแปm artifact nร o\".\n * Chแบฅp nhแบญn config thรด (vd: gateModes tแปซ project.config.json cแปงa Composer):\n * { LESSON: 'llm_judge', ACT: 'none', gate1: 'hitl', ... } โ kit tแปฑ chuแบฉn hoรก.\n * Riรชng approvedArtifacts lร INPUT cแปงa HITL (bแบฃn ฤรฃ ฤฦฐแปฃc ngฦฐแปi duyแปt), khรดng phแบฃi config.\n */\n gateSettings?: unknown;\n /**\n * Standards Registry packs (ฤรฃ validate + activate) ฤแป GROUNDING prompt vร Judge.\n * Khรดng truyแปn โ pipeline chแบกy nhฦฐ cลฉ, khรดng inject block chuแบฉn nร o.\n */\n standardsPacks?: import('../standards/frameworkPackSchema').FrameworkPack[];\n /** Id pack ฤรณng gรณi sแบตn trong kit (vd: 'csta-k12-2017') โ cรกch Composer truyแปn chuแบฉn gแปn nhแบฅt. */\n standardsPackIds?: string[];\n /** Grade band cแปงa lesson (ฤแป chแปn statement theo lแปp). Fallback [6,12]. */\n gradeBand?: [number, number] | number;\n /**\n * Media Ledger policy (nแบฟu cรณ): agent chรจn placeholder [IMAGE: slug], Curator duyแปt, Fulfiller thแปฑc thi.\n * maxGenImagesPerArtifact = quota แบฃnh AI/gen โ search kho แบฃnh (Pexels) KHรNG tแปn quota nร y.\n */\n mediaPolicy?: {\n maxGenImagesPerArtifact: number;\n autoFulfill?: boolean;\n preferredProvider?: 'openai' | 'gemini';\n mode?: 'search_only' | 'gen_only' | 'auto';\n };\n approvedArtifacts?: string[]; // e.g. ['LESSON']\n onProgress?: (agent: string, message: string, meta?: any) => void;\n}\n\nexport interface ProduceLessonResult {\n lessonId: string;\n pedagogy: PedagogicalModel;\n producedArtifacts: string[];\n pausedForReview: boolean;\n gateStatus?: string;\n}\n\n/**\n * Detects pedagogical model from SOT (Framework, Style Guide, or Brief)\n */\nexport function detectProjectPedagogy(\n frameworkText: string,\n styleGuideText: string,\n explicitPedagogy?: PedagogicalModel\n): PedagogicalModel {\n if (explicitPedagogy) return explicitPedagogy;\n\n const combined = (frameworkText + ' ' + styleGuideText).toLowerCase();\n if (combined.includes('edp') || combined.includes('engineering design process') || combined.includes('thiแบฟt kแบฟ kแปน thuแบญt')) {\n return 'edp';\n }\n if (combined.includes('pbl') || combined.includes('project-based') || combined.includes('dแปฑa trรชn dแปฑ รกn')) {\n return 'pbl';\n }\n if (combined.includes('general') || combined.includes('truyแปn thแปng') || combined.includes('standard lesson format')) {\n return 'general';\n }\n return '5e';\n}\n\n/**\n * Extracts lesson information (Title, Concept, Bloom, Unit, Module) from CURRICULUM_FRAMEWORK.md.\n */\nexport async function getLessonMetadata(\n storage: ICurriculumStorage,\n projectId: string,\n lessonId: string\n): Promise<{\n unitCode: string;\n moduleCode: string;\n lessonCode: string;\n lessonTitle: string;\n concept: string;\n prerequisites: string;\n bloomLevel: string;\n}> {\n const framework = (await storage.readSotDocument(projectId, 'CURRICULUM_FRAMEWORK.md')) || '';\n \n const parts = lessonId.split('_');\n const unitCode = parts[0] || 'U01';\n const moduleCode = parts.length >= 2 ? `${parts[0]}_${parts[1]}` : `${unitCode}_M01`;\n const lessonCode = lessonId;\n\n let lessonTitle = `Lesson ${lessonId}`;\n let concept = 'Core Technical Competency';\n let prerequisites = 'None';\n let bloomLevel = 'Apply';\n let objective = '';\n let deliverable = '';\n let found = false;\n\n // โโ ฤแปc bแบฃng Scope & Sequence THEO HEADER (khรดng theo vแป trรญ cแปฉng) โโ\n // Hแป trแปฃ bแบฃng hแปฃp ฤแปng mแปi (11 cแปt cรณ Lesson Code + Learning Objective) Vร bแบฃng legacy (6 cแปt).\n const lines = framework.split('\\n');\n let headerCols: string[] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith('|')) continue;\n const cols = trimmed.split('|').slice(1, -1).map((c) => c.trim());\n const lower = cols.map((c) => c.toLowerCase());\n\n // Header row? โ ghi mapping cแปt\n if (lower.some((c) => c.includes('lesson code') || c === 'mรฃ bร i')) {\n headerCols = cols;\n continue;\n }\n if (/^[-: |]+$/.test(trimmed.slice(1, -1))) continue;\n if (cols.length < 3) continue;\n\n // Tรฌm dรฒng cแปงa bร i nร y: cแปt nร o chแปฉa mรฃ UXX_MYY_LZZ khแปp lessonId\n const codePattern = new RegExp('^' + lessonId.replace(/_/g, '[_-]') + '$', 'i');\n const codeColIdx = cols.findIndex((c) => codePattern.test(c.replace(/\\*\\*/g, '').trim()));\n if (codeColIdx === -1) continue;\n\n if (headerCols.length > 0) {\n // Bแบฃng cรณ header chuแบฉn โ map theo tรชn cแปt\n const col = (name: string): string => {\n const idx = headerCols.findIndex((h) => h.toLowerCase().includes(name));\n return idx >= 0 ? (cols[idx] || '') : '';\n };\n lessonTitle = (col('title') || col('tรชn')).replace(/\\*\\*/g, '') || lessonTitle;\n objective = col('learning objective') || col('objective') || col('mแปฅc tiรชu') || '';\n concept = col('key concept') || col('concept') || col('khรกi niแปm') || concept;\n deliverable = col('deliverable') || col('sแบฃn phแบฉm') || '';\n prerequisites = col('prerequisit') || col('tiแปn ฤiแปu kiแปn') || prerequisites;\n bloomLevel = col('bloom') || bloomLevel;\n found = true;\n } else {\n // Bแบฃng legacy khรดng cรณ header: ฤoรกn theo vแป trรญ (hร nh vi cลฉ)\n lessonTitle = cols[2]?.replace(/\\*\\*/g, '') || lessonTitle;\n concept = cols[4] || concept;\n prerequisites = cols[5] || prerequisites;\n bloomLevel = cols[6] || bloomLevel;\n found = true;\n }\n if (found) break;\n }\n\n // Objective/deliverable tแปซ framework chแบฃy thแบณng vร o metadata โ SOT thแบญt cho LESSON prompt\n return {\n unitCode,\n moduleCode,\n lessonCode,\n lessonTitle,\n concept: objective ? `${concept}. Mแปฅc tiรชu buแปi hแปc: ${objective}` : concept,\n prerequisites: deliverable ? `${prerequisites}. Sแบฃn phแบฉm hands-on cแปงa buแปi: ${deliverable}` : prerequisites,\n bloomLevel,\n };\n}\n\n/**\n * P1: Framework excerpt Cร CHแปฆ ฤIแปM cho tแปซng bร i โ thay cho slice(0,1500) mรน:\n * Global Objectives + Structural Hierarchy + dรฒng bร i hiแปn tแบกi (ฤแปง cแปt) + 2 dรฒng lรขn cแบญn (context trฦฐแปc/sau).\n */\nfunction buildFrameworkExcerptForLesson(framework: string, lessonId: string): string {\n if (!framework) return '';\n const lines = framework.split('\\n');\n\n // 1. Lแบฅy khแปi Global Learning Objectives\n const objStart = lines.findIndex((l) => /##\\s*\\[?REQUIRED\\]?\\s*Global Learning Objectives/i.test(l));\n let objectivesBlock = '';\n if (objStart >= 0) {\n const objLines: string[] = [];\n for (let i = objStart; i < Math.min(objStart + 12, lines.length); i++) {\n if (i > objStart && /^##\\s/.test(lines[i] as string)) break;\n objLines.push(lines[i] as string);\n }\n objectivesBlock = objLines.join('\\n');\n }\n\n // 2. Tรฌm cรกc dรฒng Scope & Sequence: bร i hiแปn tแบกi + lรขn cแบญn\n const scopeRows: number[] = [];\n lines.forEach((l, idx) => {\n if (l.includes('|') && new RegExp(lessonId.replace(/_/g, '[_-]'), 'i').test(l)) scopeRows.push(idx);\n });\n const rowIdx = scopeRows[0] ?? -1;\n const currentRow = rowIdx >= 0 ? lines[rowIdx] : '';\n const prevRow = rowIdx > 0 && (lines[rowIdx - 1] || '').trim().startsWith('|') ? lines[rowIdx - 1] : '';\n const nextRow = (lines[rowIdx + 1] || '').trim().startsWith('|') ? lines[rowIdx + 1] : '';\n\n // 3. Hierarchy table (structural) โ cแบฏt gแปn 10 dรฒng ฤแบงu\n const hierStart = lines.findIndex((l) => /Structural Hierarchy/i.test(l));\n let hierarchyBlock = '';\n if (hierStart >= 0) {\n hierarchyBlock = lines.slice(hierStart, Math.min(hierStart + 12, lines.length)).join('\\n');\n }\n\n const parts = [\n objectivesBlock && `[GLOBAL LEARNING OBJECTIVES]:\\n${objectivesBlock}`,\n hierarchyBlock && `[COURSE STRUCTURE]:\\n${hierarchyBlock}`,\n currentRow && `[BรI HIแปN Tแบ I (${lessonId}) โ dรฒng Scope & Sequence cแปงa chรญnh bร i nร y]:\\n${currentRow}`,\n prevRow && `[BรI TRฦฏแปC โ hแปc sinh ฤรฃ biแบฟt gรฌ]:\\n${prevRow}`,\n nextRow && `[BรI SAU โ cแบงu nแปi cแบงn ฤแบทt]:\\n${nextRow}`,\n ].filter(Boolean);\n\n return parts.join('\\n\\n') || framework.slice(0, 1500);\n}\n\n/**\n * Builds the canonical LESSON prompt matching the exact template contract (lesson-plan-v2) for 5E, EDP, or GENERAL.\n */\nfunction buildLessonPrompt(\n pedagogy: PedagogicalModel,\n lessonCode: string,\n unitCode: string,\n lessonTitle: string,\n concept: string,\n bloomLevel: string,\n dateStr: string\n): string {\n const commonFrontmatter = `id: \"LESSON_${lessonCode}\"\ntitle: \"${lessonTitle}\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T1\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\nlesson_id: \"${lessonCode}\"\nunit_id: \"${unitCode}\"\ntemplate_contract: \"lesson-plan-v2\"\ntemplate_required_sections:\n - \"A. Lesson Design Plan\"\n - \"Learning Objectives & Evidence\"\n - \"Activity Sequence\"\n - \"Resource Map\"\n - \"Assessment Map\"\n - \"Artifact Contract\"\n - \"B. Lesson Flow\"\n - \"Artifact Linkage\"`;\n\n if (pedagogy === 'edp') {\n return `You are @content (Educational Content Editor & EDP Engineering Design Process Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_EDP_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_EDP\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle} (EDP Model - Engineering Design Process)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Project Objective:** [Complete engineering system or functional deliverable students build]\n- **Materials & Equipment:** [Detailed hardware, software libraries, and workstation tools]\n- **Learning Objectives Table:** (LO1, LO2 mapped with EDP Bloom level, Student Evidence, and Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, EDP Phase (Ask, Imagine, Plan, Create, Test & Improve, Share & Evaluate), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map (Slide, Handout, Starter Code, Lab Tools)\n### 4. Assessment Map (Rubric criteria, formative checkpoints, remediation paths)\n### 5. Artifact Contract (Detailed specifications for ACT, SLIDE, QUIZ)\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ASK โ [10 mins] (Problem Statement, High-Stakes Real-World Context & Engineering Challenge)\n### 2. IMAGINE โ [15 mins] (Brainstorming Design Alternatives & Trade-off Evaluation)\n### 3. PLAN โ [15 mins] (System Block Diagrams, Module Architecture & Task Decomposition)\n### 4. CREATE โ [25 mins] (Implementation / Verified 100% Executable Code Blueprint)\n### 5. TEST & IMPROVE โ [15 mins] (Diagnostic Testing, Telemetry & Iterative Debugging)\n### 6. SHARE & EVALUATE โ [10 mins] (Showcase, Metacognitive Reflection & Peer Evaluation)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`ACT_...\\`, \\`QUIZ_...\\`, \\`SLIDE_...\\`, \\`GUIDE_...\\`).\n\n3. Ensure all sample code and schemas are 100% syntax-valid and executable.\n4. Output 100% clean Markdown directly.`;\n }\n\n if (pedagogy === 'pbl' || pedagogy === 'general') {\n return `You are @content (Educational Content Editor & PBL/General Pedagogy Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_GENERAL_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_GENERAL\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle}\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Materials & Equipment:** [Tools, IDE, workstations, resources]\n- **Keywords / Core Concepts:** [Core domain terminology]\n- **Learning Objectives Table:** (LO1, LO2 with Bloom action verbs, Student Evidence, Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, Lesson Stage (Warm-up, Core Concepts, Guided Practice, Independent Practice, Wrap-up), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map\n### 4. Assessment Map\n### 5. Artifact Contract\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. Warm-up & Hook โ [10 mins]\n### 2. Core Concepts & Demo โ [25 mins] (Accompanied by Mermaid Diagram or Code Blueprint)\n### 3. Guided Practice โ [20 mins] (Step-by-step teacher-led scaffolding: I Do -> We Do)\n### 4. Independent Practice / Challenge โ [25 mins] (Autonomous student lab / Mini-project)\n### 5. Wrap-up & Evaluation โ [10 mins] (Synthesis & Formative Checkpoint)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`ACT_...\\`, \\`QUIZ_...\\`, \\`SLIDE_...\\`).\n\n3. Output 100% clean Markdown directly.`;\n }\n\n // Default: 5E Instructional Model (LESSON_5E_template.md)\n return `You are @content (Educational Content Editor & 5E Instructional Model Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_5E_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_5E\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle} (5E Model)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Materials & Equipment:** [Tools, IDE, hardware/software specifications]\n- **Keywords / Core Concepts:** [Core domain terminology]\n- **Learning Objectives Table:** (LO1, LO2 with Bloom action verbs, Student Evidence, Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, 5E Phase (Engage, Explore, Explain, Elaborate, Evaluate), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map\n### 4. Assessment Map\n### 5. Artifact Contract (Detailed specifications for ACT, SLIDE, QUIZ, GUIDE)\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ENGAGE โ [10 mins] (High-Stakes Hook Scenario, Inquiry Question, Transition)\n### 2. EXPLORE โ [20 mins] (Inquiry-Based Discovery, Hands-on Sandbox)\n### 3. EXPLAIN โ [25 mins] (Core Definitions, Relatable Analogies, Mermaid Diagram & Code Blueprints)\n### 4. ELABORATE โ [25 mins] (3-Tier Differentiated Scaffolding: ๐ฅ Bronze, ๐ฅ Silver, ๐ฅ Gold tasks)\n### 5. EVALUATE โ [10 mins] (Exit Ticket, Metacognitive Reflection)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`GUIDE_...\\`, \\`SLIDE_...\\`, \\`HANDOUT_...\\`, \\`ACT_...\\`, \\`WKS_...\\`, \\`QUIZ_...\\`, \\`EXT_...\\`).\n\n3. Ensure all sample code and syntax are 100% verified and runnable.\n4. Output 100% clean Markdown directly.`;\n}\n\n/**\n * Produces artifacts for a single lesson with support for dynamic pedagogy, HITL gating, and artifact scope.\n */\nexport async function produceSingleLesson(\n storage: ICurriculumStorage,\n projectId: string,\n lessonId: string,\n options: ProduceLessonOptions = {}\n): Promise<ProduceLessonResult> {\n const {\n artifactScope = ['LESSON', 'ACT', 'QUIZ', 'SLIDE'],\n force = false,\n approvedArtifacts = [],\n onProgress\n } = options;\n\n // Gate Settings = nguแปn quyแบฟt ฤแปnh DUY NHแบคT cho \"ai kiแปm artifact nร o\".\n const gates: ResolvedGateSettings = resolveGateSettings(options.gateSettings);\n\n const metadata = await getLessonMetadata(storage, projectId, lessonId);\n const { unitCode, lessonCode, lessonTitle, concept, prerequisites, bloomLevel } = metadata;\n\n // Standards grounding (Registry packs truyแปn thแบณng tแปซ Composer nแบฟu org cรณ adopt).\n // Khรดng cรณ packs โ mแปi thแปฉ hoแบกt ฤแปng y nhฦฐ cลฉ (khรดng inject, khรดng judge theo chuแบฉn).\n const packs: FrameworkPack[] = options.standardsPacks?.length\n ? options.standardsPacks\n : resolveStandardsPacks(options.standardsPackIds);\n let standardsContext = '';\n let standardStatements: Record<string, string> = {};\n if (packs.length > 0) {\n const { block, selected } = buildStandardsContext({\n packs,\n gradeBand: options.gradeBand ?? [6, 12],\n topicText: [lessonTitle, concept, prerequisites].filter(Boolean).join(' '),\n conceptCodes: [],\n });\n standardsContext = block;\n for (const s of selected) {\n standardStatements[s.packId + ':' + s.statement.id] = Object.values(s.statement.texts)[0] || '';\n }\n }\n\n // Read SOT references\n const framework = (await storage.readSotDocument(projectId, 'CURRICULUM_FRAMEWORK.md')) || '';\n const styleGuide = (await storage.readSotDocument(projectId, 'CONTENT_STYLE_GUIDE.md')) || '';\n const refPack = (await storage.readSotDocument(projectId, 'REFERENCE_PACK.md')) || '';\n const learnerProfile = (await storage.readSotDocument(projectId, 'LEARNER_PROFILE.md')) || '';\n\n // โโ KNOWLEDGE_EXPOSITION: canonical knowledge source (plan-driven flow).\n // Plan tแปn tแบกi โ EXPOSITION lร nguแปn kiแบฟn thแปฉc chรญnh tแบฏc; khรดng cรณ plan โ\n // legacy flow chแบกy nhฦฐ cลฉ (explicit, khรดng silent). โโ\n let expositionContext = '';\n let sessionSliceContext = '';\n try {\n const exposition = await ensureExpositionForLesson(storage, projectId, lessonCode, {\n gates: resolveGateSettings(options.gateSettings),\n force: options.force,\n });\n if (exposition) {\n expositionContext = exposition.context;\n onProgress?.('@content', `[EXPOSITION] ${exposition.reused ? 'Reused' : 'Generated'} \\`\\${exposition.relPath}\\` (plan-driven knowledge source)...`);\n } else {\n onProgress?.('@content', '[EXPOSITION] No CURRICULUM_PLAN.json โ running legacy knowledge flow (no plan-driven exposition).');\n }\n // Session slice [4][6][7]: machine-readable decisions for activity design\n const planRaw = await storage.readArtifact(projectId, '_sot/CURRICULUM_PLAN.json');\n if (planRaw) {\n try {\n const plan = JSON.parse(planRaw) as Parameters<typeof buildSessionSliceContext>[0];\n sessionSliceContext = buildSessionSliceContext(plan, lessonCode);\n } catch {\n sessionSliceContext = ''; // malformed plan โ exposition call above already failed hard if invalid\n }\n }\n } catch (err) {\n // Fail-closed: lแปi approval/judge/scope KHรNG ฤฦฐแปฃc nuแปt โ pipeline dแปซng rรต rร ng.\n throw new CurriculumError({\n errorCode: 'ERR_SOT_INVALID_SCHEMA',\n artifactType: 'KNOWLEDGE_EXPOSITION',\n lessonId: lessonCode,\n message: 'KNOWLEDGE_EXPOSITION failed: ' + (err instanceof Error ? err.message : String(err)),\n suggestedAction: 'Fix the domain graph or re-approve the curriculum plan, then retry lesson production',\n retryable: false,\n });\n }\n\n // Detect project pedagogy dynamically from SOT\n const pedagogy = detectProjectPedagogy(framework, styleGuide, options.pedagogy);\n const pedagogyLabel = pedagogy.toUpperCase();\n\n const commonContext = `PROJECT & ACADEMIC CONTEXT:\n- Project ID: ${projectId}\n- Pedagogical Model: ${pedagogyLabel}\n- Lesson Code: ${lessonCode}\n- Lesson Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Prerequisites: ${prerequisites}\n- Target Bloom Level: ${bloomLevel}\n\n[CURRICULUM FRAMEWORK EXCERPT]:\n${buildFrameworkExcerptForLesson(framework, lessonId)}\n\n[CONTENT STYLE GUIDE EXCERPT]:\n${styleGuide.slice(0, 1500)}\n\n[REFERENCE PACK GROUND TRUTH]:\n${refPack.slice(0, 1000)}${standardsContext ? '\\n\\n' + standardsContext : ''}${expositionContext ? '\\n\\n[KNOWLEDGE_EXPOSITION (CANONICAL KNOWLEDGE โ teach from this, do not contradict)]:\\n' + expositionContext : ''}${sessionSliceContext ? '\\n\\n' + sessionSliceContext : ''}`;\n\n const producedArtifacts: string[] = [];\n const lessonRelPath = `_content/${unitCode}/LESSON_${lessonCode}.md`;\n const existingLessonContent = await storage.readArtifact(projectId, lessonRelPath);\n\n let lessonContent = existingLessonContent || '';\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 1. Produce LESSON Plan matching the detected pedagogy\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n if (artifactScope.includes('LESSON') && (!existingLessonContent || force)) {\n onProgress?.('@content', `[1/4] Authoring Master Lesson Plan (${pedagogyLabel}): \\`LESSON_${lessonCode}.md\\` (${lessonTitle})...`);\n\n const dateStr = new Date().toISOString().split('T')[0];\n const mediaDirective = options.mediaPolicy && options.mediaPolicy.maxGenImagesPerArtifact > 0\n ? `\\n\\nIMAGE PLANNING (media ledger) โ QUOTA GEN: tแปi ฤa ${options.mediaPolicy.maxGenImagesPerArtifact} แบฃnh AI cho bร i nร y (แบฃnh search kho khรดng giแปi hแบกn).\\nKhi nแปi dung cแบงn minh hแปa (diagram quy trรฌnh, sฦก ฤแป khรกi niแปm, step-by-step visual), chรจn placeholder ฤรบng format [IMAGE: slug] (slug chแปฏ thฦฐแปng-gแบกch ngang, unique trong bร i, vd img-for-loop-diagram) Tแบ I ฤรNG CHแป cแบงn แบฃnh, trรชn dรฒng riรชng. KHรNG tแปฑ sinh แบฃnh, KHรNG dรนng markdown image โ placeholder sแบฝ ฤฦฐแปฃc thay bแบฑng แบฃnh thแบญt sau khi Media Curator duyแปt. Chแป ฤแบทt cho แบฃnh THแปฐC Sแปฐ cแบงn thiแบฟt.`\n : '';\n const lessonPrompt = buildLessonPrompt(\n pedagogy,\n lessonCode,\n unitCode,\n lessonTitle,\n concept,\n bloomLevel,\n dateStr\n ) + mediaDirective;\n\n const rawLesson = await runCurriculumAIInference(\n [{ role: 'user', content: lessonPrompt }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n\n if (!rawLesson || rawLesson.startsWith('โ ๏ธ') || rawLesson.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@content',\n artifactType: 'LESSON',\n lessonId: lessonCode,\n message: `Agent @content failed to author a valid Lesson Plan for ${lessonCode}.`,\n rawError: rawLesson || 'Empty AI response'\n });\n }\n\n // โโ Deterministic gate: lint + auto-fix trฦฐแปc khi ฤแปt tiแปn judge โโ\n // 0-token, hร ng ms: bแบฏt preamble/fence/postamble/mermaid hแปng/table lแปch cแปt + tแปฑ sแปญa ฤฦฐแปฃc\n const lintReport = lintAndSanitizeArtifact(rawLesson, `LESSON_${lessonCode}.md`);\n if (lintReport.fixedCount > 0) {\n options.onProgress?.('@linter', `๐ ๏ธ Deterministic lint auto-fixed ${lintReport.fixedCount} issue(s) on LESSON_${lessonCode}: ${lintReport.issues.map(i => i.type).join(', ')}`);\n }\n const blockingIssues = lintReport.issues.filter((i) => i.severity === 'ERROR' && !i.autoFixable);\n if (blockingIssues.length > 0) {\n // Lแปi cแบฅu trรบc khรดng tแปฑ sแปญa ฤฦฐแปฃc โ retry 1 lแบงn vแปi feedback cแปฅ thแป (repair cรณ mแปฅc tiรชu, khรดng retry mรน)\n options.onProgress?.('@linter', `โ ๏ธ ${blockingIssues.length} blocking lint issue(s): ${blockingIssues.map(i => i.message).join('; ')} โ retrying once with targeted feedback`);\n const retryRaw = await runCurriculumAIInference(\n [{ role: 'user', content: lessonPrompt + `\\n\\nPREVIOUS ATTEMPT FAILED STRUCTURAL LINT:\\n${blockingIssues.map(i => '- ' + i.message).join('\\n')}\\nFix ALL issues above and output the complete corrected document.` }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n const retryLint = lintAndSanitizeArtifact(retryRaw, `LESSON_${lessonCode}.md`);\n const stillBlocking = retryLint.issues.filter((i) => i.severity === 'ERROR' && !i.autoFixable);\n if (stillBlocking.length > 0) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@content',\n artifactType: 'LESSON',\n lessonId: lessonCode,\n message: `Lesson failed deterministic structural lint after 1 targeted retry: ${stillBlocking.map(i => i.message).join('; ')}`,\n rawError: retryRaw.slice(0, 500)\n });\n }\n lessonContent = retryLint.autoFixedContent || retryRaw;\n } else {\n lessonContent = lintReport.autoFixedContent || rawLesson;\n }\n await storage.saveArtifact(projectId, lessonRelPath, lessonContent);\n producedArtifacts.push(`LESSON_${lessonCode}.md`);\n }\n\n // Compute content hash and load pipeline state\n const contentHash = lessonContent ? computeContentHash(lessonContent) : undefined;\n const pipelineState = await storage.getPipelineState(projectId);\n const taskState = pipelineState.tasks[lessonCode] || {};\n const currentLessonInfo = taskState.LESSON;\n\n const lessonGate = gateModeFor(gates, 'LESSON');\n let isLessonApproved =\n lessonGate !== 'HITL' || // OFF/LLM_JUDGE: khรดng cแบงn duyแปt ngฦฐแปi\n currentLessonInfo?.state === 'approved' ||\n currentLessonInfo?.review?.decision === 'APPROVED' ||\n approvedArtifacts.includes('LESSON') ||\n approvedArtifacts.includes(lessonCode);\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 2. Gate LESSON: LLM_JUDGE = Agent kiแปm ยท HITL = human duyแปt (xแปญ lรฝ phรญa caller) ยท OFF = bแป qua\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n if (lessonGate === 'LLM_JUDGE' && !isLessonApproved && lessonContent) {\n onProgress?.('@reviewer', `๐ค Executing LLM-as-Judge academic evaluation on LESSON_${lessonCode}.md...`);\n try {\n const judgeObjectives = parseLessonObjectives(lessonContent, concept, bloomLevel);\n const judgeResult = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: 'LESSON',\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: judgeObjectives,\n generatedContentJson: JSON.stringify({\n lessonContent,\n lessonId: lessonCode,\n title: lessonTitle,\n frameworkExcerpt: framework ? framework.slice(0, 2500) : undefined,\n styleGuideExcerpt: styleGuide ? styleGuide.slice(0, 1500) : undefined,\n }),\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n });\n\nfunction injectYamlReviewMetadata(content: string, meta: Record<string, string>): string {\n const frontmatterMatch = content.match(/^---\\s*\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/);\n if (!frontmatterMatch) {\n const newYaml = Object.entries(meta)\n .map(([k, v]) => `${k}: \"${v}\"`)\n .join('\\n');\n return `---\\n${newYaml}\\n---\\n\\n${content}`;\n }\n\n let yamlBlock = frontmatterMatch[1];\n for (const [k, v] of Object.entries(meta)) {\n const keyRegex = new RegExp(`^${k}:.*$`, 'm');\n if (keyRegex.test(yamlBlock)) {\n yamlBlock = yamlBlock.replace(keyRegex, `${k}: \"${v}\"`);\n } else {\n yamlBlock += `\\n${k}: \"${v}\"`;\n }\n }\n\n return content.replace(frontmatterMatch[0], `---\\n${yamlBlock.trim()}\\n---\\n`);\n}\n\n if (judgeResult.passed && judgeResult.score >= 85) {\n isLessonApproved = true;\n const reviewDate = new Date().toISOString();\n const updatedLessonMarkdown = injectYamlReviewMetadata(lessonContent, {\n review_status: 'APPROVED',\n reviewed_by: '@reviewer (LLM-as-Judge)',\n reviewed_at: reviewDate,\n approved_by: '@reviewer',\n review_decision: 'APPROVED'\n });\n await storage.saveArtifact(projectId, lessonRelPath, updatedLessonMarkdown);\n const updatedHash = computeContentHash(updatedLessonMarkdown);\n\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: reviewDate,\n contentHash: updatedHash,\n review: {\n decision: 'APPROVED',\n reviewedBy: '@agent-as-judge',\n reviewedAt: reviewDate,\n score: judgeResult.score,\n critique: judgeResult.critique,\n }\n });\n onProgress?.('@reviewer', `โ
LLM-as-Judge PASS (${judgeResult.score}/100): ${judgeResult.critique}. Auto-approved for satellite generation.`);\n } else {\n // โโ Revision loop tแปฑ ฤแปng (P0): NEEDS_REVISION โ repair theo hฦฐแปng dแบซn cแปงa Judge โ re-judge.\n // Tแปi ฤa 2 vรฒng repair; vแบซn fail mแปi pause HITL. autoRepairInstructions vแปn cรณ trong JudgeResult.\n const MAX_REPAIR_ROUNDS = 2;\n let currentContent = lessonContent;\n let currentResult: JudgeEvaluationResult = judgeResult;\n let repaired = false;\n\n for (let round = 1; round <= MAX_REPAIR_ROUNDS; round++) {\n const repairFeedback = [\n currentResult.autoRepairInstructions || '',\n ...currentResult.weaknesses.map((w) => `- ${w}`),\n ].filter(Boolean).join('\\n');\n\n onProgress?.('@repair', `๐ง Repair round ${round}/${MAX_REPAIR_ROUNDS} for LESSON_${lessonCode} (judge score ${currentResult.score}/100)...`);\n\n const repairedRaw = await runCurriculumAIInference(\n [{ role: 'user', content: `You previously authored \\`LESSON_${lessonCode}.md\\` and the academic Judge REJECTED it with the critique below.\\nRewrite the COMPLETE corrected document: fix every listed issue, keep the mandatory structure, frontmatter and all approved sections. Output 100% clean Markdown only.\\n\\nJUDGE CRITIQUE:\\n${repairFeedback}\\n\\nCURRENT DOCUMENT:\\n${currentContent}` }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@repair', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n\n if (!repairedRaw || repairedRaw.startsWith('โ ๏ธ') || repairedRaw.length < 200) {\n onProgress?.('@repair', `โ ๏ธ Repair round ${round} produced invalid output โ stopping repair loop`);\n break;\n }\n\n // Lint + auto-fix bแบฃn repaired trฦฐแปc khi re-judge\n const repairLint = lintAndSanitizeArtifact(repairedRaw, `LESSON_${lessonCode}.md`);\n currentContent = repairLint.autoFixedContent || repairedRaw;\n\n onProgress?.('@reviewer', `๐ค Re-judging repaired LESSON_${lessonCode} (round ${round})...`);\n const reJudge = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: 'LESSON',\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: parseLessonObjectives(currentContent, concept, bloomLevel),\n generatedContentJson: JSON.stringify({\n lessonContent: currentContent,\n lessonId: lessonCode,\n title: lessonTitle,\n frameworkExcerpt: framework ? framework.slice(0, 2500) : undefined,\n styleGuideExcerpt: styleGuide ? styleGuide.slice(0, 1500) : undefined,\n }),\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n });\n currentResult = reJudge;\n lessonContent = currentContent;\n await storage.saveArtifact(projectId, lessonRelPath, currentContent);\n producedArtifacts.push(`LESSON_${lessonCode}.md`);\n\n if (reJudge.passed && reJudge.score >= 85) {\n repaired = true;\n break;\n }\n }\n\n if (repaired) {\n isLessonApproved = true;\n const reviewDate = new Date().toISOString();\n const repairedMarkdown = injectYamlReviewMetadata(lessonContent, {\n review_status: 'APPROVED',\n reviewed_by: '@reviewer (LLM-as-Judge)',\n reviewed_at: reviewDate,\n approved_by: '@reviewer',\n review_decision: 'APPROVED'\n });\n await storage.saveArtifact(projectId, lessonRelPath, repairedMarkdown);\n const repairedHash = computeContentHash(repairedMarkdown);\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: reviewDate,\n contentHash: repairedHash,\n review: {\n decision: 'APPROVED',\n reviewedBy: '@agent-as-judge',\n reviewedAt: reviewDate,\n score: currentResult.score,\n critique: `Repaired after ${MAX_REPAIR_ROUNDS > 0 ? 'revision loop' : 'first pass'} โ ${currentResult.critique}`,\n }\n });\n onProgress?.('@reviewer', `โ
Repair loop SUCCESS (${currentResult.score}/100) โ LESSON_${lessonCode} auto-approved after revision`);\n } else {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'rejected',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n score: currentResult.score,\n critique: currentResult.critique,\n feedback: currentResult.weaknesses.join('; '),\n }\n });\n onProgress?.('@reviewer', `โ ๏ธ LESSON_${lessonCode} still NEEDS_REVISION (${currentResult.score}/100) after ${MAX_REPAIR_ROUNDS} repair rounds: ${currentResult.weaknesses.join('; ')}`);\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'judge_needs_revision',\n };\n }\n }\n } catch (judgeErr: any) {\n // Fail-closed (P0): judge lแปi โ KHรNG รขm thแบงm duyแปt. ฤรกnh dแบฅu awaiting judge + trแบฃ paused ฤแป queue retry/hiแปn rรต.\n console.error(`[produceSingleLesson] LLM-as-Judge failed for ${lessonCode}:`, judgeErr?.message || judgeErr);\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Judge unavailable (fail-closed, KHรNG tแปฑ duyแปt): ${judgeErr?.message || String(judgeErr)}`,\n }\n });\n onProgress?.('@reviewer', `โ LLM-as-Judge failed for LESSON_${lessonCode} โ fail-closed (bร i KHรNG ฤฦฐแปฃc duyแปt ngแบงm): ${judgeErr?.message || judgeErr}`);\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'judge_error',\n };\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 3. HITL Checkpoint for LESSON (chแป khi Gate = HITL vร chฦฐa ฤฦฐแปฃc duyแปt)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n if (lessonGate === 'HITL' && !isLessonApproved) {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash,\n });\n\n const satellites = artifactScope.filter(s => s !== 'LESSON');\n for (const sat of satellites) {\n const satRelPath = `_content/${unitCode}/${sat}_${lessonCode}.md`;\n const satExists = await storage.readArtifact(projectId, satRelPath);\n if (!satExists) {\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: 'pending'\n });\n }\n }\n\n onProgress?.(\n '@reviewer',\n `๐ฆ HITL Review Gate Triggered: Completed \\`LESSON_${lessonCode}.md\\` (${pedagogyLabel}). Pausing for user approval before satellite artifact production (${satellites.join(', ')}).`,\n { gate: 'LESSON', lessonId: lessonCode, status: 'awaiting_approval', paused: true }\n );\n\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'awaiting_approval',\n };\n }\n\n // If approved or autonomy, record approved state if not yet recorded\n if (isLessonApproved && currentLessonInfo?.state !== 'approved') {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: new Date().toISOString(),\n contentHash,\n });\n }\n\n // Context derived from the canonical LESSON\n const satelliteContext = `${commonContext}\\n\\n[CANONICAL LESSON PLAN (${pedagogyLabel})]:\\n${lessonContent.slice(0, 4000)}`;\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 4. Produce ACT (Hands-on Lab Exercise)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const actRelPath = `_content/${unitCode}/ACT_${lessonCode}.md`;\n if (artifactScope.includes('ACT') && (!(await storage.readArtifact(projectId, actRelPath)) || force)) {\n onProgress?.('@activity', `[2/4] Authoring Hands-on Lab: \\`ACT_${lessonCode}.md\\`...`);\n\n const actDateStr = new Date().toISOString().split('T')[0];\n const actPrompt = `You are @activity (Lead Hands-on STEM & Laboratory Exercise Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the comprehensive hands-on lab guide: \\`ACT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"ACT_${lessonCode}\"\ntitle: \"[Descriptive lab title based on lesson concept]\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"v1.0\"\ndate: \"${actDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Computational Thinking Focus\"\n - \"Materials & Setup\"\n - \"Constraints & Safety\"\n - \"Active Learning Workflow\"\n - \"3-Tier Differentiation\"\n - \"Reflection\"\n---\n\n2. Mandatory sections (matching ACT_template.md):\n - ## [REQUIRED] Computational Thinking Focus (Problem statement, decomposition, algorithm design)\n - ## [REQUIRED] Materials & Setup (Hardware BOM with <!-- [HARDWARE_BOM] --> marker, software, consumables)\n - ## [REQUIRED] Constraints & Safety (Technical/safety warnings, design constraints)\n - ## [REQUIRED] Active Learning Workflow with 3 phases:\n - ### Phase 1: Planning & Design\n - ### Phase 2: Implementation & Discovery\n - ### Phase 3: Debugging & Testing\n - ## [REQUIRED] 3-Tier Differentiation (Bronze/Silver/Gold tasks)\n - ## [REQUIRED] Reflection (Discussion question)\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawAct = await runCurriculumAIInference(\n [{ role: 'user', content: actPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'content', artifactType: 'ACT' });\n }\n );\n\n if (!rawAct || rawAct.startsWith('โ ๏ธ') || rawAct.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@activity',\n artifactType: 'ACT',\n lessonId: lessonCode,\n message: `Agent @activity failed to author a valid ACT Lab for ${lessonCode}.`,\n rawError: rawAct || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, actRelPath, rawAct);\n await storage.updateArtifactState(projectId, lessonCode, 'ACT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawAct)\n });\n producedArtifacts.push(`ACT_${lessonCode}.md`);\n if (gateModeFor(gates, 'ACT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'ACT', content: rawAct,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 5. Produce QUIZ (Assessment Bank & Rubrics)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const quizRelPath = `_content/${unitCode}/QUIZ_${lessonCode}.md`;\n if (artifactScope.includes('QUIZ') && (!(await storage.readArtifact(projectId, quizRelPath)) || force)) {\n onProgress?.('@assessor', `[3/4] Authoring Assessment Bank: \\`QUIZ_${lessonCode}.md\\`...`);\n\n const quizDateStr = new Date().toISOString().split('T')[0];\n const quizPrompt = `You are @assessor (Lead Psychometrician & Competency Assessment Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the scenario-based diagnostic question bank: \\`QUIZ_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"QUIZ_${lessonCode}\"\ntitle: \"[Descriptive quiz title based on lesson concept]\"\ntype: \"QUIZ\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P2\"\ndeliverable: \"P2-T08\"\nversion: \"v1.0\"\ndate: \"${quizDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Assessment Objectives\"\n - \"Multiple-Choice Question Bank\"\n - \"Code Analysis / Debugging Question\"\n - \"Competency Rubric\"\n---\n\n2. Mandatory sections (matching QUIZ_v4.6_template.md):\n - ## 1. Metadata Specs (Lesson ID, Bloom target levels, language)\n - ## [REQUIRED] Assessment Objectives (Bloom taxonomy aligned goals for each LO)\n - ## [REQUIRED] Multiple-Choice Question Bank (โฅ5 scenario-based 4-option questions with: Question text, A/B/C/D options, Correct answer, Bloom level, Detailed distractor rationale)\n - ## [REQUIRED] Code Analysis / Debugging Question (1 deep code tracing question requiring students to predict output or identify bugs)\n - ## [REQUIRED] Competency Rubric (4-tier matrix: Developing โ Proficient โ Advanced โ Exemplary)\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawQuiz = await runCurriculumAIInference(\n [{ role: 'user', content: quizPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@assessor', chunk, { type: type || 'content', artifactType: 'QUIZ' });\n }\n );\n\n if (!rawQuiz || rawQuiz.startsWith('โ ๏ธ') || rawQuiz.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@assessor',\n artifactType: 'QUIZ',\n lessonId: lessonCode,\n message: `Agent @assessor failed to author a valid Quiz for ${lessonCode}.`,\n rawError: rawQuiz || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, quizRelPath, rawQuiz);\n await storage.updateArtifactState(projectId, lessonCode, 'QUIZ', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawQuiz)\n });\n producedArtifacts.push(`QUIZ_${lessonCode}.md`);\n if (gateModeFor(gates, 'QUIZ') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'QUIZ', content: rawQuiz,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 6. Produce SLIDE (Presentation Deck in Marp format)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const slideRelPath = `_content/${unitCode}/SLIDE_${lessonCode}.md`;\n if (artifactScope.includes('SLIDE') && (!(await storage.readArtifact(projectId, slideRelPath)) || force)) {\n onProgress?.('@illustrator', `[4/4] Authoring Presentation Slide Deck: \\`SLIDE_${lessonCode}.md\\`...`);\n\n const canonicalSlideTemplate = loadCurriculumTemplate('SLIDE_template.md');\n\n const slidePrompt = `You are @illustrator & @content (Pedagogical Slide Deck Presentation Specialists).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, lesson context, and the MARP SLIDE TEMPLATE below, author the complete, highly engaging Marp presentation deck: \\`SLIDE_${lessonCode}.md\\`.\n\n[MARP SLIDE TEMPLATE SCAFFOLD]:\n${canonicalSlideTemplate || `---\nmarp: true\ntheme: default\npaginate: true\nheader: \"${titleHeader(lessonTitle)}\"\nfooter: \"Curriculum OS โข ${lessonCode} (${pedagogyLabel})\"\n---`}\n\nMANDATORY 12-14 SLIDE MICRO-CYCLE STRUCTURE (Delimited by '---'):\n1. **Slide 1 [Title & Mission]:** ${lessonCode}: ${lessonTitle} + Real-world inquiry hook\n2. **Slide 2 [Agenda & Roadmap]:** Timing and milestone breakdown table (${pedagogyLabel})\n3. **Slide 3 [Warm-Up / Prior Knowledge]:** 2-column recall + 60-second diagnostic challenge card\n4. **Slide 4 [High-Stakes Hook Scenario]:** Authentic engineering/domain crisis card + dilemma constraint\n5. **Slide 5 [Core Concept 1: Mental Model]:** Definition, intuitive everyday analogy, and golden rule card\n6. **Slide 6 [Architecture & Visual Flow]:** Clean Mermaid diagram (flowchart or sequenceDiagram) + 3 flow steps\n7. **Slide 7 [Core Concept 2: Syntax / Mechanism Anatomy]:** Side-by-side 6-10 lines runnable code + anatomy breakdown & syntax trap card\n8. **Slide 8 [Guided Practice: Try It Now]:** 3-minute active desk task card with starter hint and success criteria\n9. **Slide 9 [Integrated Hands-On Lab]:** 3-tier differentiated challenge cards (Bronze / Silver / Gold) + gotcha alert card\n10. **Slide 10 [Traffic Light Checkpoint & Pitfalls]:** Formative self-check cards (๐ข/๐ก/๐ด) & diagnostic test question\n11. **Slide 11 [Exit Ticket & Metacognition]:** 2 scenario-based check questions + 1 metacognitive reflection prompt\n12. **Slide 12 [Summary & Next Steps]:** 3 core golden rules + preview card of next upcoming milestone\n\nMandatory Canvas & Presentation Invariants:\n- A slide is an INTERACTIVE PROJECTION CANVAS, NOT a textbook! Absolutely NO dense paragraphs or walls of text.\n- Follow the 6x6 rule: Maximum 4-6 bullet points per slide, maximum 8-12 words per bullet.\n- Structure slides using \\`<div class=\"columns\"><div>...</div><div>...</div></div>\\` and \\`<div class=\"card\">\\`, \\`<div class=\"card highlight\">\\`, \\`<div class=\"card warning\">\\`, \\`<div class=\"card success\">\\`.\n- MANDATORY PRESENTER NOTES ON EVERY SLIDE: Every slide MUST end with \\`<!-- Presenter Notes: ... -->\\` containing:\n * SCRIPT: 60-90s teacher talk track with intuitive analogies.\n * COLD CALL / CHECK: Specific diagnostic question to ask students.\n * SCAFFOLDING / GOTCHA: Guidance for students who get stuck.\n * PACING: Recommended minutes for the slide.\n- Output 100% valid Marp Markdown.`;\n\n const rawSlide = await runCurriculumAIInference(\n [{ role: 'user', content: slidePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@illustrator', chunk, { type: type || 'content', artifactType: 'SLIDE' });\n }\n );\n\n if (!rawSlide || rawSlide.startsWith('โ ๏ธ') || rawSlide.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@illustrator',\n artifactType: 'SLIDE',\n lessonId: lessonCode,\n message: `Agent @illustrator failed to author valid Slides for ${lessonCode}.`,\n rawError: rawSlide || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, slideRelPath, rawSlide);\n await storage.updateArtifactState(projectId, lessonCode, 'SLIDE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawSlide)\n });\n producedArtifacts.push(`SLIDE_${lessonCode}.md`);\n if (gateModeFor(gates, 'SLIDE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'SLIDE', content: rawSlide,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 7. Produce GUIDE (Teacher Instructional Guide)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const guideRelPath = `_content/${unitCode}/GUIDE_${lessonCode}.md`;\n if (artifactScope.includes('GUIDE') && (!(await storage.readArtifact(projectId, guideRelPath)) || force)) {\n onProgress?.('@content', `Authoring Teacher Guide: \\`GUIDE_${lessonCode}.md\\`...`, { artifactType: 'GUIDE' });\n\n const guideDateStr = new Date().toISOString().split('T')[0];\n const guidePrompt = `You are @content (Senior Curriculum Developer & Teacher Facilitation Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\` and pedagogical context, author the comprehensive Teacher Guide: \\`GUIDE_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"GUIDE_${lessonCode}\"\ntitle: \"[Descriptive teacher guide title for this lesson]\"\ntype: \"GUIDE\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T5\"\nversion: \"v1.0\"\ndate: \"${guideDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n2. Mandatory sections (matching GUIDE_template.md):\n - ## [REQUIRED] Objectives & Preparation (Pedagogical goal, common blindspots, technical checklist)\n - ## [REQUIRED] Preparation Checklist & Workstation Setup\n - ## [REQUIRED] Facilitation Script & Timeline (Phase-by-phase teacher moves, inquiry questions, transitions)\n - ## [REQUIRED] Common Misconceptions & Diagnostic Remediation Matrix\n - ## [REQUIRED] Differentiated Support Strategies (Support scaffolds vs Extension challenges)\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawGuide = await runCurriculumAIInference(\n [{ role: 'user', content: guidePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'GUIDE' });\n }\n );\n\n if (rawGuide && !rawGuide.startsWith('โ ๏ธ') && rawGuide.length >= 200) {\n await storage.saveArtifact(projectId, guideRelPath, rawGuide);\n await storage.updateArtifactState(projectId, lessonCode, 'GUIDE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawGuide)\n });\n producedArtifacts.push(`GUIDE_${lessonCode}.md`);\n if (gateModeFor(gates, 'GUIDE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'GUIDE', content: rawGuide,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 8. Produce HANDOUT (Student Reference Notes)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const handoutRelPath = `_content/${unitCode}/HANDOUT_${lessonCode}.md`;\n if (artifactScope.includes('HANDOUT') && (!(await storage.readArtifact(projectId, handoutRelPath)) || force)) {\n onProgress?.('@content', `Authoring Student Handout: \\`HANDOUT_${lessonCode}.md\\`...`, { artifactType: 'HANDOUT' });\n\n const handoutDateStr = new Date().toISOString().split('T')[0];\n const handoutPrompt = `You are @content (Educational Content Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the student self-paced reference handout: \\`HANDOUT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"HANDOUT_${lessonCode}\"\ntitle: \"[Descriptive cheat-sheet title for this lesson]\"\ntype: \"HANDOUT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T6\"\nversion: \"v1.0\"\ndate: \"${handoutDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n2. Mandatory sections (matching HANDOUT_template.md):\n - ## [REQUIRED] ๐ Core Concepts (Key terms, definitions, and student-friendly explanations)\n - ## [REQUIRED] Core Syntax & Mechanism Cheat Sheet (Quick-scan reference table)\n - ## [REQUIRED] Visual Mental Model / Architecture Diagram (Mermaid or ASCII diagram)\n - ## [REQUIRED] Step-by-Step Practical Quick-Start Guide\n - ## [REQUIRED] Self-Check Diagnostic Checklist (Can-do statements for student self-assessment)\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawHandout = await runCurriculumAIInference(\n [{ role: 'user', content: handoutPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'HANDOUT' });\n }\n );\n\n if (rawHandout && !rawHandout.startsWith('โ ๏ธ') && rawHandout.length >= 200) {\n await storage.saveArtifact(projectId, handoutRelPath, rawHandout);\n await storage.updateArtifactState(projectId, lessonCode, 'HANDOUT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawHandout)\n });\n producedArtifacts.push(`HANDOUT_${lessonCode}.md`);\n if (gateModeFor(gates, 'HANDOUT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'HANDOUT', content: rawHandout,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 9. Produce WKS (Guided Student Worksheet)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const wksRelPath = `_content/${unitCode}/WKS_${lessonCode}.md`;\n if (artifactScope.includes('WKS') && (!(await storage.readArtifact(projectId, wksRelPath)) || force)) {\n onProgress?.('@content', `Authoring Student Worksheet: \\`WKS_${lessonCode}.md\\`...`, { artifactType: 'WKS' });\n\n const wksDateStr = new Date().toISOString().split('T')[0];\n const wksPrompt = `You are @content (Instructional Activity & Worksheet Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the guided student worksheet: \\`WKS_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"WKS_${lessonCode}\"\ntitle: \"[Descriptive worksheet title for this lesson]\"\ntype: \"WKS\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T7\"\nversion: \"v1.0\"\ndate: \"${wksDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n**Student Name:** _______________________ **Class:** _______________ **Date:** _______________\n\n> **For Students:** This document guides you step-by-step through the practical tasks. Read carefully, fill in the blanks, and mark the checkbox [x] once completed. If you encounter errors, refer back to your **HANDOUT**.\n\n2. Mandatory sections (matching WKS_template.md):\n - ## [REQUIRED] Part 1: Knowledge Check (Warm-up โ Prior knowledge retrieval tasks)\n - ## [REQUIRED] Part 2: Concept Tracing & Diagram Fill-in\n - ## [REQUIRED] Part 3: Code Analysis & Bug Hunting Challenge\n - ## [REQUIRED] Part 4: Synthesis & Problem-Solving Application\n - ## [REQUIRED] Part 5: Self-Reflection & Learning Log\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawWks = await runCurriculumAIInference(\n [{ role: 'user', content: wksPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'WKS' });\n }\n );\n\n if (rawWks && !rawWks.startsWith('โ ๏ธ') && rawWks.length >= 200) {\n await storage.saveArtifact(projectId, wksRelPath, rawWks);\n await storage.updateArtifactState(projectId, lessonCode, 'WKS', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawWks)\n });\n producedArtifacts.push(`WKS_${lessonCode}.md`);\n if (gateModeFor(gates, 'WKS') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'WKS', content: rawWks,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 10. Produce CODE / CODE_LAB (Executable Code Lab & Starter Projects)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const codeRelPath = `_content/${unitCode}/CODE_${lessonCode}.md`;\n if ((artifactScope.includes('CODE') || artifactScope.includes('CODE_LAB')) && (!(await storage.readArtifact(projectId, codeRelPath)) || force)) {\n onProgress?.('@activity', `Authoring Executable Code Lab: \\`CODE_${lessonCode}.md\\`...`, { artifactType: 'CODE' });\n\n const codeDateStr = new Date().toISOString().split('T')[0];\n const codePrompt = `You are @activity & @tech_sme (Lead Software Engineer & Technical SME).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, hardware platform, and starter code requirements, author the comprehensive executable Code Lab: \\`CODE_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"CODE_${lessonCode}\"\ntitle: \"[Descriptive code lab title for this lesson]\"\ntype: \"CODE\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T3\"\nversion: \"v1.0\"\ndate: \"${codeDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Technical Overview & Architecture Blueprint\"\n - \"Hardware Pinout & Wiring Configuration Matrix\"\n - \"Starter Code Sandbox\"\n - \"Verified Reference Solution Code\"\n - \"Automated Test / Verification Script\"\n - \"Common Syntax & Runtime Pitfalls Matrix\"\n---\n\n2. Mandatory sections:\n - ## [REQUIRED] Technical Overview & Architecture Blueprint\n - ## [REQUIRED] Hardware Pinout & Wiring Configuration Matrix\n - ## [REQUIRED] Starter Code Sandbox (Skeleton code with explicit TODO comments for students)\n - ## [REQUIRED] Verified Reference Solution Code (100% syntactically valid, production-ready, fully commented)\n - ## [REQUIRED] Automated Test / Verification Script (How to compile, flash, or unit test)\n - ## [REQUIRED] Common Syntax & Runtime Pitfalls Matrix\n3. Output 100% clean Markdown directly with runnable code snippets โ NO outer code fences around the document.`;\n\n const rawCode = await runCurriculumAIInference(\n [{ role: 'user', content: codePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'chunk', artifactType: 'CODE' });\n }\n );\n\n if (rawCode && !rawCode.startsWith('โ ๏ธ') && rawCode.length >= 200) {\n await storage.saveArtifact(projectId, codeRelPath, rawCode);\n await storage.updateArtifactState(projectId, lessonCode, 'CODE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawCode)\n });\n await storage.updateArtifactState(projectId, lessonCode, 'CODE_LAB', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawCode)\n });\n producedArtifacts.push(`CODE_${lessonCode}.md`);\n if (gateModeFor(gates, 'CODE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'CODE', content: rawCode,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // 11. Produce EXT (Extension / Advanced Challenge)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n const extRelPath = `_content/${unitCode}/EXT_${lessonCode}.md`;\n if (artifactScope.includes('EXT') && (!(await storage.readArtifact(projectId, extRelPath)) || force)) {\n onProgress?.('@activity', `Authoring Advanced Extension Challenge: \\`EXT_${lessonCode}.md\\`...`, { artifactType: 'EXT' });\n\n const extDateStr = new Date().toISOString().split('T')[0];\n const extPrompt = `You are @activity (Lead STEM Specialist & Differentiated Extension Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the advanced extension challenge: \\`EXT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter โ copy verbatim, then fill in the blanks:\n---\nid: \"EXT_${lessonCode}\"\ntitle: \"[Descriptive advanced challenge title for this lesson]\"\ntype: \"EXT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T8\"\nversion: \"v1.0\"\ndate: \"${extDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n# EXTENSION TASKS: [LESSON TITLE]\n## For: Advanced Students / Extra Time\n\n2. Mandatory sections (matching EXT_template.md):\n - ### Challenge 1: [Name] (Difficulty: โญโญโญ) โ Mission Briefing & Real-World High-Stakes Scenario\n - ### Challenge 2: [Name] (Difficulty: โญโญโญโญ) โ Advanced Architectural Constraints & Edge Cases\n - ### Challenge 3: [Name] (Difficulty: โญโญโญโญโญ) โ Extension Milestones (Level 1: Ninja โ Level 2: Guru โ Level 3: Master)\n - ## [REQUIRED] Metacognitive Deep Dive & Engineering Trade-offs\n3. Output 100% clean Markdown directly โ NO code fences around the document.`;\n\n const rawExt = await runCurriculumAIInference(\n [{ role: 'user', content: extPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'chunk', artifactType: 'EXT' });\n }\n );\n\n if (rawExt && !rawExt.startsWith('โ ๏ธ') && rawExt.length >= 200) {\n await storage.saveArtifact(projectId, extRelPath, rawExt);\n await storage.updateArtifactState(projectId, lessonCode, 'EXT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawExt)\n });\n producedArtifacts.push(`EXT_${lessonCode}.md`);\n if (gateModeFor(gates, 'EXT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'EXT', content: rawExt,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n onProgress?.('@reviewer', `โ
Successfully authored all requested artifacts for \\`${lessonCode}\\` (${pedagogyLabel})!`);\n\n // โโ Cross-Artifact Drift Check (P1, deterministic markdown-level): quรฉt satellites ฤรฃ sinh trong lแบงn chแบกy nร y\n // kiแปm frontmatter id/type khแปp lessonCode + IDEA: phรกt hiแปn lแปch ID sแปm thay vรฌ ฤแป Judge ngฦฐแปi dรนng tแปฑ thแบฅy.\n if (producedArtifacts.some((a) => !a.startsWith('LESSON_'))) {\n const driftFindings: string[] = [];\n for (const artFile of producedArtifacts) {\n if (artFile.startsWith('LESSON_')) continue;\n const satType = artFile.split('_')[0];\n const relPath = `_content/${unitCode}/${artFile}`;\n const satContent = await storage.readArtifact(projectId, relPath);\n if (!satContent) continue;\n const idMatch = satContent.match(/^id:\\s*\"([^\"]+)\"/m);\n const typeMatch = satContent.match(/^type:\\s*\"([^\"]+)\"/m);\n if (idMatch && !idMatch[1].includes(lessonCode)) {\n driftFindings.push(`${artFile}: frontmatter id \"${idMatch[1]}\" khรดng chแปฉa lessonId \"${lessonCode}\"`);\n }\n if (typeMatch && typeMatch[1] !== satType) {\n driftFindings.push(`${artFile}: frontmatter type \"${typeMatch[1]}\" โ expected \"${satType}\"`);\n }\n }\n if (driftFindings.length > 0) {\n onProgress?.('@reviewer', `โ ๏ธ Cross-artifact drift detected (${driftFindings.length}): ${driftFindings.join(' | ')}`);\n // Ghi nhแบญn vร o state cแปงa LESSON ฤแป telemetry/queue thแบฅy (khรดng chแบทn โ chแป cแบฃnh bรกo rรต rร ng)\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: isLessonApproved ? 'approved' : 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: isLessonApproved ? 'APPROVED' : 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Cross-artifact drift: ${driftFindings.slice(0, 5).join('; ')}`,\n }\n });\n }\n }\n\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: false,\n };\n}\n\n/**\n * P0: Parse Learning Objectives THแบฌT tแปซ markdown lesson (bแบฃng LO hoแบทc bullet **LOx:**)\n * ฤแป Judge chแบฅm ฤรบng mแปฅc tiรชu thay vรฌ LO1 = concept hardcode. Fallback: concept duy nhแบฅt.\n */\nfunction parseLessonObjectives(lessonContent: string, concept: string, bloomLevel: string): Array<{ code: string; description: string; bloomLevel: string }> {\n const objectives: Array<{ code: string; description: string; bloomLevel: string }> = [];\n // Bแบฃng: | LO1 | mรด tแบฃ | ... | hoแบทc bullet: - **LO1:** mรด tแบฃ\n const tableRe = /\\|\\s*(LO\\d+)\\s*\\|([^|]+)\\|/g;\n const bulletRe = /\\*\\*(LO\\d+)\\*\\*\\s*[:\\-โ]\\s*([^\\n]+)/g;\n let m: RegExpExecArray | null;\n while ((m = tableRe.exec(lessonContent)) !== null) {\n const desc = m[2].trim();\n if (desc && desc.length > 5 && !/^\\**$/.test(desc)) objectives.push({ code: m[1], description: desc, bloomLevel });\n }\n if (objectives.length === 0) {\n while ((m = bulletRe.exec(lessonContent)) !== null) {\n objectives.push({ code: m[1], description: m[2].trim().slice(0, 200), bloomLevel });\n }\n }\n if (objectives.length === 0) {\n objectives.push({ code: 'LO1', description: concept, bloomLevel });\n }\n return objectives.slice(0, 6);\n}\n\n/**\n * Per-artifact LLM-as-Judge cho satellite โ CHแป gแปi khi gateModeFor(gates, sat) === 'LLM_JUDGE'.\n * Pass โ state 'approved' + review record. Fail โ state 'rejected' + review record.\n * KHรNG chแบทn pipeline (khรกc LESSON): satellite kรฉm chแป bแป ฤรกnh dแบฅu, ngฦฐแปi duyแปt quyแบฟt tiแบฟp theo.\n */\nasync function judgeSatelliteArtifact(\n ctx: {\n storage: ICurriculumStorage;\n projectId: string;\n lessonCode: string;\n sat: string;\n content: string;\n concept: string;\n bloomLevel: string;\n standardStatements: Record<string, string>;\n onProgress?: (agent: string, message: string, meta?: any) => void;\n }\n): Promise<void> {\n const { storage, projectId, lessonCode, sat, content } = ctx;\n try {\n ctx.onProgress?.('@reviewer', `\\u{1F916} Judging ${sat}_${lessonCode}...`);\n const result = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: sat,\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: parseLessonObjectives(content, ctx.concept, ctx.bloomLevel),\n generatedContentJson: JSON.stringify({ content, artifactType: sat, lessonId: lessonCode }),\n standardStatements: Object.keys(ctx.standardStatements).length > 0 ? ctx.standardStatements : undefined,\n });\n const passed = result.passed && result.score >= 85;\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: passed ? 'approved' : 'rejected',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(content),\n review: {\n decision: passed ? 'APPROVED' : 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n score: result.score,\n critique: result.critique,\n feedback: passed ? undefined : result.weaknesses.join('; '),\n }\n });\n ctx.onProgress?.('@reviewer', passed\n ? `\\u{2705} ${sat} judge PASS (${result.score}/100)`\n : `\\u{26A0}\\u{FE0F} ${sat} judge NEEDS_REVISION (${result.score}/100)`);\n } catch (err: any) {\n // Fail-closed cho satellite: judge lแปi โ state 'awaiting_review' + review record rรต rร ng, KHรNG รขm thแบงm ฤแป completed\n console.error(`[produceSingleLesson] satellite judge failed for ${sat}_${lessonCode}:`, err?.message || err);\n try {\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(content),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Judge unavailable (fail-closed): ${err?.message || String(err)}`,\n }\n });\n ctx.onProgress?.('@reviewer', `โ Judge failed for ${sat}_${lessonCode} โ marked awaiting_review (fail-closed)`);\n } catch (stateErr: any) {\n console.error(`[produceSingleLesson] failed to persist judge-error state for ${sat}_${lessonCode}:`, stateErr?.message || stateErr);\n }\n }\n}\nfunction titleHeader(title: string): string {\n return title.replace(/[\"\\n\\r]/g, '');\n}\n\n/**\n * Batch production orchestrator supporting Lesson-by-Lesson (Strategy A) or Artifact-by-Artifact (Strategy B) execution.\n */\nexport async function produceBatchLessons(\n storage: ICurriculumStorage,\n projectId: string,\n lessonIds: string[],\n options: ProduceLessonOptions = {}\n): Promise<{\n totalLessons: number;\n completedLessons: string[];\n pausedLessonId?: string;\n report: ProjectStatusReport;\n}> {\n const { batchStrategy = 'depth_first_lesson', onProgress } = options;\n\n // Gate-driven: cรณ HITL แป bแบฅt kแปณ gate nร o (SOT hoแบทc artifact) โ breadth-first ฤแป dแปซng duyแปt sแปm.\n const gates = resolveGateSettings(options.gateSettings);\n const hasHitl = Object.values(gates).some((m) => m === 'HITL');\n const effectiveStrategy = hasHitl ? 'breadth_first_artifact' : batchStrategy;\n\n const completedLessons: string[] = [];\n\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // Strategy B: Artifact-by-Artifact (Breadth-first) -> Used for HITL\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n if (effectiveStrategy === 'breadth_first_artifact') {\n onProgress?.('@router', `Bแบฏt ฤแบงu sแบฃn xuแบฅt theo chiแบฟn lฦฐแปฃc [B] (Breadth-first): Chแบกy toร n bแป Lesson Plan (Giรกo รกn) cho ${lessonIds.length} bร i hแปc trฦฐแปc...`);\n\n // Phase 1: Build all LESSON plans\n for (const lid of lessonIds) {\n const res = await produceSingleLesson(storage, projectId, lid, {\n ...options,\n artifactScope: ['LESSON'], // Only produce LESSON\n });\n completedLessons.push(lid);\n\n if (res.pausedForReview) {\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: lid,\n report,\n };\n }\n }\n\n // Check if HITL gate is enabled for LESSON\n if (gates.LESSON === 'HITL') {\n const pipelineState = await storage.getPipelineState(projectId);\n const unapproved = lessonIds.filter(lid => pipelineState.tasks[lid]?.LESSON?.state !== 'approved');\n if (unapproved.length > 0) {\n onProgress?.(\n '@reviewer',\n `๐ฆ Dแปซng kiแปm duyแปt HITL tแบกi Chแปt Giรกo รกn: ฤรฃ soแบกn thแบฃo xong Giรกo รกn cho ${lessonIds.length} bร i hแปc. Vui lรฒng kiแปm tra vร phรช duyแปt ฤแป tiแบฟp tแปฅc sแบฃn xuแบฅt Lab, Quiz, Slide.`,\n { gate: 'BATCH_LESSONS', status: 'awaiting_approval', paused: true }\n );\n\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: unapproved[0],\n report,\n };\n }\n }\n\n // Phase 2: Build Satellite Artifacts after LESSON approval\n const fullScope = options.artifactScope && options.artifactScope.length > 0 \n ? options.artifactScope \n : await getProjectArtifactScope(storage, projectId);\n const satelliteScope = fullScope.filter(s => s !== 'LESSON');\n\n onProgress?.('@router', `Tiแบฟp tแปฅc sแบฃn xuแบฅt cรกc hแปc liแปu vแป tinh (${satelliteScope.join(', ')}) cho ${lessonIds.length} bร i hแปc...`);\n for (const lid of lessonIds) {\n await produceSingleLesson(storage, projectId, lid, {\n ...options,\n artifactScope: satelliteScope,\n approvedArtifacts: ['LESSON', lid], // LESSON is approved\n });\n }\n } else {\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n // Strategy A: Lesson-by-Lesson (Depth-first / Full Autonomy)\n // โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n onProgress?.('@router', `Bแบฏt ฤแบงu sแบฃn xuแบฅt theo chiแบฟn lฦฐแปฃc [A] (Depth-first): Hoร n thร nh trแปn gรณi tแปซng bร i hแปc mแปt...`);\n\n for (const lid of lessonIds) {\n onProgress?.('@router', `--- BแบฎT ฤแบฆU SแบขN XUแบคT BรI HแปC: ${lid} ---`);\n const res = await produceSingleLesson(storage, projectId, lid, options);\n\n if (res.pausedForReview) {\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: lid,\n report,\n };\n }\n\n completedLessons.push(lid);\n }\n }\n\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n report,\n };\n}\n\n","import { generateSingleArtifact, type SingleArtifactRequest, type SingleArtifactResult } from '../../services/singleArtifactService';\nimport { withRateLimitBackoff } from '../errors/rateLimitHandler';\n\n/**\n * Step-level durable execution for generating a single standalone artifact.\n */\nexport async function executeSingleArtifactStep(request: SingleArtifactRequest): Promise<SingleArtifactResult> {\n 'use step';\n const t0 = Date.now();\n console.log(` โณ [Step: Single Artifact] Generating ${request.artifactType.toUpperCase()} for \"${request.topic.slice(0, 35)}\"...`);\n\n const res = await withRateLimitBackoff({\n stepName: `generate-single-artifact-${request.artifactType}-${(request.topic || 'topic').slice(0, 20)}`,\n fn: async () => generateSingleArtifact(request),\n });\n\n console.log(` โ
[Step: Single Artifact] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (File: \"${res.filename}\")`);\n return res;\n}\n\n/**\n * Workflow for on-demand single artifact generation.\n * Supports Vercel Workflow durable execution, step memoization, and automatic retry.\n */\nexport async function generateSingleArtifactWorkflow(request: SingleArtifactRequest): Promise<SingleArtifactResult> {\n 'use workflow';\n return executeSingleArtifactStep(request);\n}\n"]}
|