@thanh01.pmt/curriculum-kit 1.4.48 → 1.4.50

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/errors/index.ts","../../src/ai/streamRunner.ts","../../src/ai/provider-factory.ts","../../src/services/templateLoader.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/projectInstructionPrompt.ts","../../src/ai/prompts/selfLabPrompt.ts","../../src/ai/prompts/diagnosticQuizPrompt.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/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/constants/pedagogy.ts","../../src/ai/flows/auditCurriculumQualityFlow.ts","../../src/ai/flows/generateProjectInstructionFlow.ts","../../src/ai/flows/generateSelfLabFlow.ts","../../src/ai/flows/generateDiagnosticQuizFlow.ts","../../src/ai/flows/streamLessonMasterFlow.ts","../../src/ai/flows/streamSelfLabFlow.ts","../../src/ai/flows/streamDiagnosticQuizFlow.ts","../../src/ai/tools/specialistTools.ts","../../src/ai/modelPolicyResolver.ts","../../src/ai/llmJudgeEngine.ts","../../src/ai/chatToolLoop.ts"],"names":["path","fs","createOpenAI","google","createGoogleGenerativeAI","deepseek","createDeepSeek","openai","fileURLToPath","z","generateObject","streamObject"],"mappings":"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","file":"index.cjs","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_CUSTOM_INFERENCE_REQUIRED'\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 | 'ERR_LESSON_NOT_IN_SOT'\n | 'ERR_CONTEXT_MISSING';\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 case 'ERR_CONTEXT_MISSING':\n return 'Thiếu nguồn tri thức bắt buộc (KNOWLEDGE_EXPOSITION hoặc CANONICAL LESSON) theo Dependency Routing Matrix. Vui lòng tạo hoặc đồng bộ tài liệu nguồn trước.';\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 case 'ERR_CONTEXT_MISSING':\n return false;\n default:\n return true;\n }\n}\n\nexport function createContextMissingError(params: {\n artifactType: string;\n missingSource: string;\n lessonId?: string;\n agent?: string;\n}): CurriculumError {\n return new CurriculumError({\n errorCode: 'ERR_CONTEXT_MISSING',\n artifactType: params.artifactType,\n lessonId: params.lessonId,\n agent: params.agent,\n message: `Required context source \"${params.missingSource}\" is missing for artifact \"${params.artifactType}\"`,\n suggestedAction: `Generate or provide the authoritative \"${params.missingSource}\" source before producing \"${params.artifactType}\".`,\n retryable: false\n });\n}\n\n","import { createAiInferenceError } from '../errors';\nimport type { ToolDefinition, AggregatedToolCall } from './toolLoopTypes';\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 /** Thời gian tối đa cho phép không nhận thêm token mới trước khi abort (mặc định 90_000ms = 90s; env ARTIFACT_STREAM_IDLE_TIMEOUT_MS override) */\n idleTimeoutMs?: number;\n /** Thời gian hard cap tối đa cho toàn bộ lượt stream trước khi abort (mặc định 420_000ms = 7 phút) */\n timeoutMs?: number;\n /**\n * Host-provided inference override (Vercel AI SDK gateway, test stubs, …).\n * When set, ALL built-in provider routes (raw-fetch NVIDIA/OpenRouter/\n * DeepSeek/DashScope/Gemini + designated fallback chain) are bypassed and\n * every inference call goes through this function instead. It receives the\n * fully-formed system instruction (persona + project context + guidelines)\n * and the user prompt, plus the same onChunk contract as the built-in\n * routes: stream text deltas via ('content'|'thought'), and report token\n * spend via onChunk(JSON.stringify({ promptTokens, completionTokens,\n * totalTokens, reasoningTokens }), 'usage'). Return the full completion text.\n */\n customInference?: (request: {\n systemInstruction: string;\n userPrompt: string;\n messages: ChatMessage[];\n temperature: number;\n maxTokens: number;\n onChunk: (token: string, type: ChunkType) => void;\n }) => Promise<string>;\n /**\n * Host-provided TOOL-CALLING inference override (unified-tracing mandate,\n * gap #8 audit 2026-09-14). When present, `streamCurriculumAIInferenceWithTools`\n * routes every turn through this gateway instead of its built-in raw-fetch\n * provider routes, so tool-loop calls emit the host's OpenTelemetry spans\n * (unified Langfuse trace). The request carries the FULL conversation\n * (including prior assistant tool_calls and tool results) and the OpenAI-\n * compatible tool definitions; the implementation returns the turn result.\n * Stream text deltas via ('content'|'thought') chunks and report token spend\n * via onChunk(JSON.stringify({ promptTokens, completionTokens, totalTokens,\n * reasoningTokens }), 'usage') — same contract as customInference.\n */\n customToolInference?: (request: {\n messages: Array<{\n role: string;\n content: string | null;\n tool_calls?: Array<{ id: string; type: 'function'; function: { name: string; arguments: string } }>;\n tool_call_id?: string;\n }>;\n tools: ToolDefinition[];\n temperature: number;\n maxTokens: number;\n onChunk: (token: string, type: ChunkType) => void;\n }) => Promise<{ content: string; toolCalls: AggregatedToolCall[] }>;\n}\n\nexport function 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:free,@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 '9router,nvidia,openrouter';\n\n const rawModels =\n resolveApiKey('FALLBACK_AI_MODEL') ||\n resolveApiKey('FALLBACK_AI_MODELS') ||\n resolveApiKey('DEFAULT_AI_MODEL') ||\n 'fast-reasoning,deep-reasoning,mid-range,free-tier';\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 === '9router' || provider === 'ninerouter') {\n providerModels = modelList.filter((m) => ['fast-reasoning', 'deep-reasoning', 'mid-range', 'free-tier'].includes(m));\n if (providerModels.length === 0) {\n providerModels = ['fast-reasoning', 'mid-range', 'free-tier'];\n }\n } else 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:free', '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: '9router', model: 'fast-reasoning' };\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\nexport const DEFAULT_ARTIFACT_STREAM_IDLE_MS = 90_000;\nexport const DEFAULT_ARTIFACT_STREAM_TOTAL_MS = 480_000;\n\nexport interface StreamAbortController {\n signal: AbortSignal;\n /** Reset the idle window (call on every received chunk). */\n kick: () => void;\n /** Clear all pending timers once the request lifecycle is over. */\n dispose: () => void;\n}\n\n/**\n * Budget-aware stream abort controller. Combines an idle window (kicked on\n * every received chunk — covers slow TTFT and hung connections) with a generous\n * total hard cap (defaults to 420s / 7 minutes).\n *\n * Configurable via options or process.env:\n * - ARTIFACT_STREAM_IDLE_TIMEOUT_MS / STREAM_IDLE_TIMEOUT_MS\n * - ARTIFACT_STREAM_TOTAL_TIMEOUT_MS / STREAM_TOTAL_TIMEOUT_MS\n */\nexport function createStreamAbortController(options?: { idleMs?: number; totalMs?: number }): StreamAbortController {\n const envIdle = Number(process.env.ARTIFACT_STREAM_IDLE_TIMEOUT_MS || process.env.STREAM_IDLE_TIMEOUT_MS);\n const envTotal = Number(process.env.ARTIFACT_STREAM_TOTAL_TIMEOUT_MS || process.env.STREAM_TOTAL_TIMEOUT_MS);\n\n const idleMs = Number.isFinite(options?.idleMs) && (options!.idleMs! > 0)\n ? options!.idleMs!\n : (Number.isFinite(envIdle) && envIdle > 0 ? envIdle : DEFAULT_ARTIFACT_STREAM_IDLE_MS);\n\n const totalMs = Number.isFinite(options?.totalMs) && (options!.totalMs! > 0)\n ? options!.totalMs!\n : (Number.isFinite(envTotal) && envTotal > 0 ? envTotal : DEFAULT_ARTIFACT_STREAM_TOTAL_MS);\n\n const controller = new AbortController();\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n let totalTimer: ReturnType<typeof setTimeout> | null = null;\n\n const armIdle = () => {\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = setTimeout(\n () => controller.abort(new Error(`Idle timeout: no data for ${Math.round(idleMs / 1000)}s`)),\n idleMs\n );\n (idleTimer as any)?.unref?.();\n };\n armIdle();\n\n if (totalMs > 0) {\n totalTimer = setTimeout(\n () => controller.abort(new Error(`Total stream timeout after ${Math.round(totalMs / 1000)}s`)),\n totalMs\n );\n (totalTimer as any)?.unref?.();\n }\n\n return {\n signal: controller.signal,\n kick: armIdle,\n dispose: () => {\n if (idleTimer) clearTimeout(idleTimer);\n if (totalTimer) clearTimeout(totalTimer);\n idleTimer = null;\n totalTimer = null;\n }\n };\n}\n\n/** Backward-compatible alias */\nexport function createIdleAbortController(idleMs?: number, totalMs?: number): StreamAbortController {\n return createStreamAbortController({ idleMs, totalMs });\n}\nexport type IdleAbort = StreamAbortController;\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 // ── Route 0: Host-provided inference override (Vercel AI SDK gateway, …) ──\n // When the embedding app supplies customInference, it is the SOLE inference\n // path: the raw-fetch provider routes below never run, so host apps that\n // mandate a gateway (e.g. Vercel AI SDK) get exactly one auditable engine.\n if (options.customInference) {\n try {\n const text = await options.customInference({\n systemInstruction,\n userPrompt: messages.map(m => m.content).join('\\n\\n'),\n messages,\n temperature,\n maxTokens,\n onChunk: onChunk ?? (() => {}),\n });\n if (text && text.trim()) return text;\n throw createAiInferenceError({\n errorCode: 'ERR_AI_ALL_PROVIDERS_FAILED',\n message: 'customInference returned empty output',\n rawError: { customInference: 'empty response' }\n });\n } catch (e: any) {\n if (e?.errorCode || e?.name === 'AiInferenceError') throw e;\n throw createAiInferenceError({\n errorCode: 'ERR_AI_ALL_PROVIDERS_FAILED',\n message: `customInference failed: ${e?.message || e}`,\n rawError: { customInference: String(e?.message || e) }\n });\n }\n }\n\n // ── Unified-tracing mandate (2026-09-14): fail LOUD on silent bypass ──\n // The embedding app routes every LLM call through its own gateway\n // (customInference → Vercel AI SDK → OpenTelemetry → Langfuse). The raw-fetch\n // routes below are OUTSIDE that telemetry boundary: a call site that forgets\n // to pass customInference used to fall through here silently, producing\n // untraceable generations. When the host mandates gateway-only inference\n // (CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE=1), refuse to run raw instead of\n // silently bypassing the unified tracing mechanism.\n if (!options.customInference && resolveApiKey('CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE') === '1') {\n throw createAiInferenceError({\n errorCode: 'ERR_CUSTOM_INFERENCE_REQUIRED',\n message:\n 'customInference is REQUIRED (CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE=1): pass buildKitCustomInference(...) ' +\n 'so every LLM call flows through the host AI SDK gateway and its unified Langfuse tracing. ' +\n 'Raw-fetch provider routes are disabled by mandate.',\n rawError: { mandate: 'CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE', hasCustomInference: false },\n });\n }\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 || 'fast-reasoning';\n const isNvidiaPreferred = requestedModel.startsWith('nvidia/') || (Boolean(nvidiaKey && !openrouterKey) && isProviderEnabled('nvidia'));\n\n // ── Route 0: 9Router Gateway ──\n const ninerouterKey = resolveApiKey('NINEROUTER_API_KEY') || resolveApiKey('NINE_ROUTER_API_KEY');\n if (ninerouterKey && isProviderEnabled('9router')) {\n const rawUrl = resolveApiKey('NINEROUTER_BASE_URL') || resolveApiKey('NINE_ROUTER_BASE_URL') || 'https://ai-router.orchable.app/v1';\n const ninerouterBaseUrl = rawUrl.replace(/^[\"']|[\"']$/g, '').replace(/\\/$/, '');\n const candidateModels = [\n options.model || 'fast-reasoning',\n 'fast-reasoning',\n 'mid-range',\n 'free-tier',\n ].filter(m => isModelAllowed(m));\n const unique9RouterModels = Array.from(new Set(candidateModels));\n\n for (const model of unique9RouterModels) {\n try {\n // 2026-09-14 (SLIDE idle audit): 45s was tuned for chat-sized prompts.\n // SLIDE cluster prompts run 30k+ chars and the gateway can think for\n // >45s BEFORE the first token, so the budget aborted healthy streams\n // (\"Idle timeout: no data for 45s\"). Honor options.idleTimeoutMs /\n // env like every other route, falling back to the same 90s default.\n const r9Idle = options.idleTimeoutMs\n ?? (Number(process.env.ARTIFACT_STREAM_IDLE_TIMEOUT_MS || process.env.STREAM_IDLE_TIMEOUT_MS) || 0)\n ?? 0;\n const r9Total = options.timeoutMs\n ?? (Number(process.env.ARTIFACT_STREAM_TOTAL_TIMEOUT_MS || process.env.STREAM_TOTAL_TIMEOUT_MS) || 0)\n ?? 0;\n const idle = createStreamAbortController({\n idleMs: r9Idle > 0 ? r9Idle : 90_000,\n totalMs: r9Total > 0 ? r9Total : 300_000,\n });\n const res = await fetch(`${ninerouterBaseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${ninerouterKey}`,\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 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[`9router_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`9router_${model}`] = e?.message || 'Network error';\n console.warn(`[9Router Stream] Failover for ${model}:`, e?.message || e);\n }\n }\n }\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:free',\n 'nvidia/nemotron-3-ultra-550b-a55b:free',\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 nvdIdle = options.idleTimeoutMs ?? 180_000;\n const nvdTotal = options.timeoutMs ?? 600_000;\n const idle = createStreamAbortController({ idleMs: nvdIdle, totalMs: nvdTotal });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 // ── 9Router designated fallback ──\n // 2026-09-14 (9Router-only mandate): the loop previously had NO branch\n // for provider '9router', so a 9router-only chain iterated without ever\n // attempting a call and providerErrors stayed {} — masking the real\n // failure as \"Chi tiết: {}\". This branch makes the designated fallback\n // actually call the gateway (OpenAI-compatible SSE, same as Route 0).\n if ((provider === '9router' || provider === 'ninerouter') && ninerouterKey && isProviderEnabled('9router')) {\n try {\n const rawUrl = resolveApiKey('NINEROUTER_BASE_URL') || resolveApiKey('NINE_ROUTER_BASE_URL') || 'https://ai-router.orchable.app/v1';\n const fbBaseUrl = rawUrl.replace(/[\"']/g, '').replace(/\\/$/, '');\n // Same SLIDE idle-audit fix as Route 0: honor options/env instead of\n // a hardcoded 45s that aborted healthy long-prompt streams.\n const fbIdle = options.idleTimeoutMs\n ?? (Number(process.env.ARTIFACT_STREAM_IDLE_TIMEOUT_MS || process.env.STREAM_IDLE_TIMEOUT_MS) || 0)\n ?? 0;\n const fbTotal = options.timeoutMs\n ?? (Number(process.env.ARTIFACT_STREAM_TOTAL_TIMEOUT_MS || process.env.STREAM_TOTAL_TIMEOUT_MS) || 0)\n ?? 0;\n const idle = createStreamAbortController({\n idleMs: fbIdle > 0 ? fbIdle : 90_000,\n totalMs: fbTotal > 0 ? fbTotal : 300_000,\n });\n const res = await fetch(`${fbBaseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${ninerouterKey}`,\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 if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] ✅ Designated fallback 9Router (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_9router_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_9router_${model}`] = e?.message || 'Network error';\n }\n } else if (provider === 'nvidia' && nvidiaKey && isProviderEnabled('nvidia')) {\n try {\n const nvdIdle = options.idleTimeoutMs ?? 180_000;\n const nvdTotal = options.timeoutMs ?? 600_000;\n const idle = createStreamAbortController({ idleMs: nvdIdle, totalMs: nvdTotal });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs }); 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, resolveApiKey } from './streamRunner';\n\n/**\n * 9Router's NON-STREAMING responses glue a literal `data: [DONE]` marker\n * right after the JSON object — the AI SDK then fails JSON.parse and throws\n * \"Invalid JSON response\" (AI_JSONParseError) on every generateText /\n * generateObject call. Streaming paths are unaffected (the SDK treats the\n * marker as a valid stream terminator).\n *\n * This fetch wrapper repairs non-streaming bodies (strip the trailing\n * marker; reassemble a full SSE body returned to a non-streaming call into\n * one JSON completion) and passes streaming calls (`\"stream\":true`) through\n * untouched so live SSE chunk streams are never buffered/collapsed.\n */\nfunction cleanNonStreamingFetch(): typeof fetch {\n return async (input, init) => {\n const res = await fetch(input, init);\n let wantsStream = false;\n try {\n const body = init?.body;\n if (typeof body === 'string') wantsStream = /\"stream\"\\s*:\\s*true/.test(body);\n } catch {}\n if (wantsStream) return res;\n const contentType = res.headers.get('content-type') || '';\n if (!contentType.includes('text/event-stream') && !contentType.includes('application/json')) return res;\n const text = await res.text();\n const trimmed = text.trim();\n if (trimmed.startsWith('data:')) {\n let content = '';\n let lastChunk: any = null;\n for (const line of trimmed.split('\\n')) {\n const l = line.trim();\n if (!l || !l.startsWith('data:')) continue;\n const jsonStr = l.slice(5).trim();\n if (jsonStr === '[DONE]') continue;\n try {\n const chunk = JSON.parse(jsonStr);\n lastChunk = chunk;\n content += chunk.choices?.[0]?.delta?.content || '';\n } catch {}\n }\n const assembled = {\n id: lastChunk?.id || 'chatcmpl-' + Date.now(),\n object: 'chat.completion',\n created: lastChunk?.created || Math.floor(Date.now() / 1000),\n model: lastChunk?.model || '9router',\n choices: [{ index: 0, message: { role: 'assistant', content }, finish_reason: 'stop' }],\n usage: lastChunk?.usage || undefined,\n };\n const headers = new Headers(res.headers);\n headers.set('content-type', 'application/json');\n return new Response(JSON.stringify(assembled), { status: res.status, statusText: res.statusText, headers });\n }\n const doneIndex = text.indexOf('data: [DONE]');\n if (doneIndex === -1) return res;\n return new Response(text.slice(0, doneIndex).trim(), { status: res.status, statusText: res.statusText, headers: res.headers });\n };\n}\n\nexport type AIProviderName = '9router' | 'ninerouter' | '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 '9router': 'fast-reasoning',\n ninerouter: 'fast-reasoning',\n nvidia: 'nvidia/nemotron-3-ultra-550b-a55b:free',\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:free',\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 === '9router' || (provider as string) === 'ninerouter') {\n const apiKey = options.apiKey || resolveApiKey('NINEROUTER_API_KEY') || resolveApiKey('NINE_ROUTER_API_KEY') || '';\n const rawUrl = options.baseURL || resolveApiKey('NINEROUTER_BASE_URL') || resolveApiKey('NINE_ROUTER_BASE_URL') || 'https://ai-router.orchable.app/v1';\n const ninerouter = createOpenAI({\n apiKey,\n baseURL: rawUrl.replace(/^[\"']|[\"']$/g, '').trim(),\n fetch: cleanNonStreamingFetch(),\n });\n return ninerouter.chat(resolvedModelName || 'fast-reasoning');\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:free');\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.NINEROUTER_API_KEY || resolveApiKey('NINEROUTER_API_KEY') || resolveApiKey('NINE_ROUTER_API_KEY')) && isProviderEnabled('9router')) {\n return '9router';\n }\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 fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\n/**\n * P52/P53 — Runtime artifact-template loading (single source of truth).\n *\n * Restores the curriculum-mcp architecture that was lost when prompt\n * skeletons were retyped as hardcoded strings inside\n * `lessonProductionService.ts` (the \"mandated duplication\" regression):\n * - artifact structure lives in template .md files, loaded at RUNTIME;\n * - methodology directives stay in the prompt-builder;\n * - project-local `_templates/` may override any template (MCP parity).\n *\n * P53 rev3 (echo model): a template file = YAML frontmatter (system-owned\n * cached echo: `template_language`, `template_required_sections`) + fill-in\n * body. The BODY headings are the single source of structure — the\n * frontmatter list is regenerated mechanically (assembleTranslatedTemplate /\n * editor save), never hand-maintained.\n *\n * Heading standard (H1–H3 only; H4+ do not exist):\n * - every heading is REQUIRED by default → the `[REQUIRED]` marker is\n * stripped everywhere (bundled + baked + generated artifacts);\n * - `[OPTIONAL]` → still a heading, but excluded from the echo/contract;\n * - `[CONDITIONAL]` → required echo + exposed as semantic metadata;\n * - a heading containing a VARIABLE part (`{{placeholder}}` or bracket\n * `[guidance]`) is not a section at all — it is an instance/guidance\n * header (Q1, Challenge 1, Term Name, phase timing) → excluded from the\n * echo. Static durations belong on a `**Duration:**` line under the\n * heading, never inside it.\n */\n\nexport interface ResolvedTemplate {\n /** Fill-in body (frontmatter + leading HTML comments stripped). */\n content: string;\n /**\n * P53 rev3 — mechanical echo of the template BODY headings (H2/H3, static\n * text only, `[OPTIONAL]` excluded, markers/ordinals stripped). This IS the\n * contract; the frontmatter list is just its cached copy.\n */\n sections: string[];\n /** Headings explicitly marked `[OPTIONAL]` (excluded from `sections`). */\n optionalSections: string[];\n /** Absolute path the template was loaded from (telemetry / debugging). */\n sourcePath: string;\n /**\n * P53 — canonical sections carrying a `[CONDITIONAL]` marker in the body.\n */\n conditionals: string[];\n /**\n * P53 — declared authoring language of the template body\n * (`template_language:` frontmatter, default \"en\"). \"en\" = bundled source;\n * anything else = translated project copy (bake-aware regime downstream).\n */\n declaredLang: string;\n}\n\n/**\n * Strip YAML frontmatter from a template document.\n * NOTE: HTML comments are intentionally preserved — some templates embed\n * semantic markers (e.g. ACT's `<!-- [HARDWARE_BOM] -->`) that downstream\n * extraction pipelines depend on. Only frontmatter is noise here.\n */\nexport function stripTemplateFrontmatter(raw: string): string {\n let body = raw;\n if (body.startsWith('---')) {\n const end = body.indexOf('\\n---', 3);\n if (end !== -1) body = body.slice(end + 4);\n }\n return body\n .split('\\n')\n .filter((l) => l.trim() !== '<!-- INJECT_BODY -->')\n .join('\\n')\n .replace(/^\\s*\\n/, '')\n .trimEnd();\n}\n\n/**\n * Legacy reader for the `template_required_sections:` YAML list (the cached\n * echo). Kept for app-side consumers reading artifact frontmatter; the kit\n * itself now derives structure from the body (extractEchoSections).\n */\nexport function extractRequiredSections(raw: string): string[] | null {\n const lines = raw.split('\\n');\n const start = lines.findIndex((l) => /^template_required_sections:\\s*$/.test(l.trim()));\n if (start === -1) return null;\n const items: string[] = [];\n for (let i = start + 1; i < lines.length; i++) {\n const line = lines[i] ?? '';\n if (line.trim() === '') continue;\n if (!/^\\s+-\\s/.test(line)) break; // next top-level key → stop\n items.push(line.trim().replace(/^-\\s+/, '').replace(/^[\"']|[\"']$/g, ''));\n }\n return items.length > 0 ? items : null;\n}\n\n/**\n * P53 — canonical heading key: strips contract markers AND ordinal prefixes\n * so `### 1. Learning Objectives & Evidence` and `1) Learning Objectives…`\n * both normalize to the same key. Users may renumber headings without\n * breaking matching.\n */\nexport function stripHeadingKey(h: string): string {\n return h\n .replace(/\\[(REQUIRED|OPTIONAL|CONDITIONAL)\\]\\s*/gi, '')\n .replace(/^\\s*\\d+[.)]\\s+/, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n/** A heading with any variable part is an instance/guidance header, not a section. */\nfunction isVariableHeading(text: string): boolean {\n return /\\{\\{[^}]*\\}\\}/.test(text) || /\\[[^\\]]+\\]/.test(text);\n}\n\ninterface CollectedHeading {\n level: number; // 2 | 3\n name: string; // stripped key\n optional: boolean;\n}\n\n/** Fence-aware H2/H3 collector implementing the P53 heading standard. */\nfunction collectHeadings(body: string): CollectedHeading[] {\n const out: CollectedHeading[] = [];\n let inFence = false;\n for (const line of body.split('\\n')) {\n if (/^(```|~~~)/.test(line.trim())) {\n inFence = !inFence;\n continue;\n }\n if (inFence) continue; // `# comment` inside a code block is not a heading\n const m = line.match(/^(#{2,3})\\s+(.*)$/);\n if (!m) continue;\n const text = m[2].trim();\n const optional = /^\\[OPTIONAL\\]/i.test(text);\n const name = stripHeadingKey(text);\n if (!name || isVariableHeading(name)) continue; // Rule 1+2: variable → not a section\n out.push({ level: m[1].length, name, optional });\n }\n return out;\n}\n\n/**\n * P53 rev3 — the contract echo of a template/artifact document: required\n * sections (default) and explicitly-optional ones, straight from the body.\n */\nexport function extractEchoSections(raw: string): { required: string[]; optional: string[] } {\n const hs = collectHeadings(stripTemplateFrontmatter(raw));\n return {\n required: hs.filter((h) => !h.optional).map((h) => h.name),\n optional: hs.filter((h) => h.optional).map((h) => h.name),\n };\n}\n\n/** P53 — canonical sections carrying a `[CONDITIONAL]` marker in the body. */\nexport function extractConditionalSections(raw: string): string[] {\n const body = stripTemplateFrontmatter(raw);\n return body\n .split('\\n')\n .filter((l) => /^#{2,3} .*\\[CONDITIONAL\\]/i.test(l))\n .map((l) => stripHeadingKey(l.replace(/^#{2,3}\\s*/, '').trim()))\n .filter((s) => s.length > 0 && !isVariableHeading(s));\n}\n\n/** P53 — `template_language:` frontmatter value (default \"en\"). */\nexport function extractDeclaredLanguage(raw: string): string {\n const m = raw.match(/^template_language:\\s*[\"']?([a-zA-Z-]+)[\"']?\\s*$/m);\n return m?.[1]?.toLowerCase() || 'en';\n}\n\nconst KIT_TEMPLATE_FALLBACK_DIRS = [\n // Packaged with the npm bundle (dist/templates) — resolves from node_modules.\n 'templates',\n // Repo checkout layouts.\n 'docs/refs/templates',\n];\n\n// ESM/CJS-safe directory of this module (kit is ESM; tsup CJS build has __dirname).\nconst _moduleDir = (() => {\n try {\n if (typeof import.meta !== 'undefined' && typeof import.meta.url === 'string') {\n return path.dirname(fileURLToPath(import.meta.url));\n }\n } catch {\n // CJS build falls through to __dirname below.\n }\n return typeof __dirname !== 'undefined' ? __dirname : process.cwd();\n})();\n\nfunction candidateDirs(explicitDir?: string): string[] {\n const dirs: string[] = [];\n if (explicitDir) dirs.push(explicitDir);\n if (process.env.CURRICULUM_TEMPLATES_DIR) dirs.push(process.env.CURRICULUM_TEMPLATES_DIR);\n // Project-local override, matching curriculum-mcp's resolve order.\n dirs.push(path.resolve(process.cwd(), '_templates'));\n for (const rel of KIT_TEMPLATE_FALLBACK_DIRS) {\n dirs.push(path.resolve(_moduleDir, rel));\n dirs.push(path.resolve(process.cwd(), rel));\n dirs.push(path.resolve(process.cwd(), 'packages/curriculum-kit', rel));\n }\n return dirs;\n}\n\nfunction findTemplatePath(templateName: string, explicitDir?: string): string | null {\n for (const dir of candidateDirs(explicitDir)) {\n const p = path.join(dir, templateName);\n if (!fs.existsSync(p)) continue;\n try {\n fs.accessSync(p, fs.constants.R_OK);\n return p;\n } catch {\n // unreadable → try next candidate\n }\n }\n // ponytail: fail-open by design — callers degrade to inline scaffolding\n // (pre-P52 contract). Missing templates log nothing here to avoid per-call\n // noise in production streams; upgrade path: emit a one-shot warn per name.\n return null;\n}\n\n/**\n * Resolve a canonical template by file name. First existing candidate wins:\n * explicit dir → CURRICULUM_TEMPLATES_DIR → <cwd>/_templates → packaged\n * dist/templates → repo docs/refs/templates. Returns null when unresolvable\n * (callers fall back to inline scaffolding, same contract as before).\n */\nexport function resolveArtifactTemplate(\n templateName: string,\n opts?: { templatesDir?: string }\n): ResolvedTemplate | null {\n const p = findTemplatePath(templateName, opts?.templatesDir);\n if (!p) return null;\n try {\n const raw = fs.readFileSync(p, 'utf-8');\n const echo = extractEchoSections(raw);\n return {\n content: stripTemplateFrontmatter(raw),\n sections: echo.required,\n optionalSections: echo.optional,\n sourcePath: p,\n conditionals: extractConditionalSections(raw),\n declaredLang: extractDeclaredLanguage(raw),\n };\n } catch {\n return null;\n }\n}\n\n/** AI runner contract for template translation (injected — kit stays provider-agnostic). */\nexport type TemplateTranslateRunner = (prompt: string) => Promise<string>;\n\nexport interface AssembledTemplate {\n /** Full document: REGENERATED frontmatter echo + translated body. */\n raw: string;\n /** Contract echo of the translated body (= the regenerated FM list). */\n sections: string[];\n templateLanguage: string;\n}\n\n/**\n * P53 rev3 — assemble a project template copy from an AI-translated BODY.\n * The frontmatter is never AI-edited: it is regenerated mechanically —\n * `template_language` stamp + `template_required_sections` echoed from the\n * translated headings (the body is the single source; the FM list follows it).\n *\n * Structural verification: heading count, order, and levels must survive\n * translation 1:1 (required AND optional). Any drift → null; the caller\n * falls back to the bundled English template rather than shipping a broken\n * contract. `{{placeholder}}` / marker preservation is verified here too.\n */\nexport function assembleTranslatedTemplate(\n templateName: string,\n translatedBody: string,\n targetLanguage: string,\n opts?: { templatesDir?: string }\n): AssembledTemplate | null {\n const raw = loadCurriculumTemplate(templateName, opts?.templatesDir);\n if (!raw || !translatedBody?.trim()) return null;\n\n const base = collectHeadings(stripTemplateFrontmatter(raw));\n const out = collectHeadings(translatedBody);\n if (base.length !== out.length) return null; // section lost or invented\n for (let i = 0; i < base.length; i++) {\n if (base[i].level !== out[i].level || base[i].optional !== out[i].optional) return null;\n }\n\n // `{{placeholder}}` and semantic markers must survive verbatim.\n const srcBody = stripTemplateFrontmatter(raw);\n for (const ph of new Set(srcBody.match(/\\{\\{[^}]+\\}\\}/g) ?? [])) {\n if (!translatedBody.includes(ph)) return null;\n }\n for (const mk of new Set(srcBody.match(/<!--\\s*\\[\\/?[^\\]]+\\]\\s*-->/g) ?? [])) {\n if (!translatedBody.includes(mk)) return null;\n }\n\n const lang = targetLanguage.trim().toLowerCase() || 'en';\n const req = out.filter((h) => !h.optional).map((h) => h.name);\n // Frontmatter (original fields preserved, echo + language re-stamped) is\n // re-attached to the TRANSLATED body — the original English body is dropped.\n let fmRaw = '';\n if (raw.startsWith('---')) {\n const end = raw.indexOf('\\n---', 3);\n if (end !== -1) fmRaw = raw.slice(0, end + 4);\n }\n const fm = stampEchoOnFrontmatter(fmRaw || '---\\n---', lang, req);\n return { raw: `${fm}\\n${translatedBody.trimStart()}`, sections: req, templateLanguage: lang };\n}\n\n/**\n * System-owned frontmatter update: keep every original field verbatim, only\n * replace the `template_required_sections` echo (regenerated from the body)\n * and stamp `template_language`. A template without frontmatter gets a block.\n */\nfunction stampEchoOnFrontmatter(rawDoc: string, lang: string, sections: string[]): string {\n const echoLines = ['template_language: \"' + lang + '\"', 'template_required_sections:', ...sections.map((n) => ` - \"${n.replace(/\"/g, '\\\\\"')}\"`)];\n if (rawDoc.startsWith('---')) {\n const lines = rawDoc.split('\\n');\n const closeIdx = lines.findIndex((l, i) => i > 0 && l.trim() === '---');\n if (closeIdx === -1) {\n // malformed FM → regenerate a minimal block (frontmatter fields lost is\n // better than a file whose FM leaks into prompts).\n return ['---', ...echoLines, '---', '', stripTemplateFrontmatter(rawDoc)].join('\\n');\n }\n // Drop a previous stamp/echo (idempotent) INCLUDING the old list's child\n // lines — filtering only the key line would orphan its ` - ` items.\n const kept: string[] = [];\n let skippingList = false;\n for (const l of lines.slice(0, closeIdx)) {\n const t = l.trim();\n if (/^template_required_sections:$/.test(t)) {\n skippingList = true;\n continue;\n }\n if (/^template_language:/.test(t)) continue;\n if (skippingList) {\n if (/^\\s+-\\s/.test(l)) continue;\n skippingList = false;\n }\n kept.push(l);\n }\n return [...kept, ...echoLines, '---', ...lines.slice(closeIdx + 1)].join('\\n');\n }\n return ['---', ...echoLines, '---', '', rawDoc].join('\\n');\n}\n\n/**\n * P53 — full-body template translation (AI, once per language + content hash;\n * caching is the caller's job). The kit stays language-neutral: bundled\n * templates are never translated in-repo.\n *\n * Pipeline: split frontmatter (never sent to AI) → prompt the runner with\n * preservation rules → assembleTranslatedTemplate regenerates the frontmatter\n * echo and structurally verifies the result. Returns null on any violation;\n * the caller falls back to the bundled English template.\n */\nexport async function translateTemplate(\n templateName: string,\n targetLanguage: string,\n runner: TemplateTranslateRunner,\n opts?: { templatesDir?: string }\n): Promise<AssembledTemplate | null> {\n const raw = loadCurriculumTemplate(templateName, opts?.templatesDir);\n if (!raw) return null;\n\n const body = stripTemplateFrontmatter(raw);\n const placeholders = Array.from(new Set(body.match(/\\{\\{[^}]+\\}\\}/g) ?? []));\n const markers = Array.from(new Set(body.match(/<!--\\s*\\[\\/?[^\\]]+\\]\\s*-->/g) ?? []));\n\n const prompt = `Translate the following Markdown artifact TEMPLATE body into ${targetLanguage}.\nSTRICT PRESERVATION RULES (violating any of these invalidates the output):\n1. Keep the document structure EXACTLY: same number of headings, same order, same heading levels (## / ###).\n2. Translate heading TEXT naturally, but a heading must remain a single static line: move nothing into or out of it. Headings never contain durations or placeholders — if a source heading carries \"[X mins]\"-style timing, the timing belongs on the line below the heading, not inside it.\n3. Keep every placeholder token VERBATIM (do not translate or alter), including {{ XX }}-style duration tokens: ${placeholders.join(' ') || '(none)'}\n4. Keep every HTML comment marker VERBATIM: ${markers.join(' ') || '(none)'}\n5. Keep code blocks, file paths, technical identifiers (API names, protocols, component models) untranslated.\n6. Translate ONLY natural-language prose, headings, and table headers into natural ${targetLanguage}.\n7. Output ONLY the translated markdown — no explanations, no code fences around the whole document.\n\nTEMPLATE BODY:\n${body}`;\n\n let translatedBody: string;\n try {\n translatedBody = await runner(prompt);\n } catch {\n return null;\n }\n if (!translatedBody || translatedBody.length < body.length * 0.4) return null;\n translatedBody = translatedBody.trim().replace(/^```(?:markdown)?\\n/, '').replace(/\\n```$/, '');\n\n return assembleTranslatedTemplate(templateName, translatedBody, targetLanguage, opts);\n}\n\n/**\n * Legacy raw-content lookup retained for existing callers\n * (`singleArtifactService`, SLIDE workflow). Returns the file verbatim —\n * frontmatter included, byte-compatible with the pre-P52 helper it replaces.\n * Empty string = not found.\n */\nexport function loadCurriculumTemplate(templateName: string, templatesDir?: string): string {\n const p = findTemplatePath(templateName, templatesDir);\n if (!p) return '';\n try {\n return fs.readFileSync(p, 'utf-8');\n } catch {\n return '';\n }\n}\n\n/**\n * Frontmatter-stripped lookup for JSON-first authoring builders\n * (`ai/prompts/*`) that embed the template in a prompt as a structural\n * alignment reference. Prompt-embedded noise (frontmatter) is stripped so\n * the LLM sees only the fill-in skeleton. Empty string = not found.\n */\nexport function loadAuthoringTemplate(templateName: string, templatesDir?: string): string {\n const p = findTemplatePath(templateName, templatesDir);\n if (!p) return '';\n try {\n return stripTemplateFrontmatter(fs.readFileSync(p, 'utf-8'));\n } catch {\n return '';\n }\n}\n","import type { MilestoneInput } from '../../schemas';\nimport { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('LESSON_5E_template.md') ?? '[TEMPLATE FILE NOT FOUND: LESSON_5E_template.md]'}\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 { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('ACT_template.md') ?? '[TEMPLATE FILE NOT FOUND: ACT_template.md]'}\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 { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('LAB_TEMPLATE.md') ?? '[TEMPLATE FILE NOT FOUND: LAB_TEMPLATE.md]'}\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\nexport const SLIDE_CANONICAL_METHODOLOGY = `\nMANDATORY 12-14 SLIDE MICRO-CYCLE STRUCTURE (Delimited by '---'):\n1. **Slide 1 [Title & Mission]:** Real-world inquiry hook and overarching build mission\n2. **Slide 2 [Agenda & Roadmap]:** Timing and milestone breakdown table\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 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`.trim();\n\nexport interface MarpMarkdownSlidePromptInput {\n lessonCode: string;\n lessonTitle: string;\n pedagogyLabel: string;\n templateScaffold: string;\n languageDirective: string;\n headingDirective: string;\n}\n\nexport function buildMarpMarkdownSlidePrompt(input: MarpMarkdownSlidePromptInput): string {\n return `You are @illustrator & @content (Pedagogical Slide Deck Presentation Specialists).\nBased on Master Lesson Plan \\`LESSON_${input.lessonCode}.md\\`, lesson context, and the MARP SLIDE TEMPLATE below, author the complete, highly engaging Marp presentation deck: \\`SLIDE_${input.lessonCode}.md\\`.\n\n[MARP SLIDE TEMPLATE SCAFFOLD]:\n${input.templateScaffold}\n\n${SLIDE_CANONICAL_METHODOLOGY}\n\n${input.languageDirective}\n\n${input.headingDirective}`.trim();\n}\n\nexport interface HtmlDeckSlidePromptInput {\n lessonCode: string;\n lessonTitle: string;\n pedagogyLabel: string;\n languageDirective: string;\n headingDirective: string;\n glossaryBlock?: string;\n customContract?: string;\n}\n\nexport function buildHtmlDeckSlidePrompt(input: HtmlDeckSlidePromptInput): string {\n const contract = input.customContract || `## HTML SLIDE ENGINE — AGENT GENERATION CONTRACT\nYou generate structured slide decks for the LearnWell HTML Slide Presentation Engine.\nYour output MUST be a single, valid JSON object matching the Slide Deck JSON schema below.\n\n### 🎨 Available Layout Presets (Use layoutId):\n1. **hero-cover**: Title/Cover slide with title, subtitle, presenter, date, tag.\n2. **two-column-split**: Side-by-side comparison (col1Title, col1Items[], col2Title, col2Items[]).\n3. **code-explainer**: Code walkthrough with filename, language, code, highlightLines, annotations[].\n4. **metrics-3-card**: 3 key stat cards (card1Title, card1Val, card1Desc, card2..., card3...).\n5. **process-flow**: Step-by-step pipeline (steps: [{ label, desc, status }]).\n6. **quiz-checkpoint**: Quick multiple choice question (question, options[], answerIdx, explanation).\n7. **tiered-practice-3cards**: Differentiated tiers (foundation, standard, challenge cards).\n8. **takeaways-summary**: Summary review with bullet takeaways.\n\n### 🎙️ Mandatory 3-Part Presenter Notes on EVERY slide:\nEvery slide MUST include notes with:\n- Talk Track: 2-3 sentences speaking script\n- Cold-Call: 1 check question\n- Scaffolding Tip: 1 analogy or hint\n\n### ⚠️ STRICT SLIDE FORMATTING INVARIANTS:\n1. Every slide MUST store its content fields inside \"slots\": { ... }. NEVER put \"title\", \"content\", or points at the top level of a slide!\n2. All code slots MUST contain real, executable, high-fidelity code. Never use placeholders like \"<CODE>\" or \"...\".\n3. All point and card slots MUST contain concrete, rich pedagogical explanations. Never use placeholder dots or empty cards.\n\n### Output JSON Format:\n\\`\\`\\`json\n{\n \"title\": \"${input.lessonTitle}\",\n \"theme\": \"ocean\",\n \"slides\": [\n {\n \"layoutId\": \"hero-cover\",\n \"slots\": { \"title\": \"${input.lessonTitle}\", \"subtitle\": \"...\" },\n \"notes\": \"Talk Track: ...\\\\nCold-Call: ...\\\\nScaffolding Tip: ...\"\n }\n ]\n}\n\\`\\`\\``;\n\n return `You are @illustrator & @content (Interactive HTML Slide Deck Presentation Architects).\nBased on Master Lesson Plan \\`LESSON_${input.lessonCode}.md\\`, pedagogical model (${input.pedagogyLabel}), and the HTML SLIDE ENGINE CONTRACT below, author the complete, highly engaging HTML presentation deck in JSON format: \\`SLIDE_${input.lessonCode}\\`.\n\n${contract}\n\n${input.languageDirective}\n\n${input.headingDirective}${input.glossaryBlock ? `\\n\\n${input.glossaryBlock}` : ''}\n\nOutput ONLY the raw JSON object. Do not include extra conversational text or markdown code fences.`.trim();\n}\n\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 and valid. If \\`canonicalExposition\\` or \\`[KNOWLEDGE_EXPOSITION]\\` is provided, content strictly adheres to canonical concepts without contradicting definitions or examples.\n - 8 pts: Minor syntax inaccuracies or unidiomatic code that does not break core concepts.\n - 0 pts: Severe technical hallucinations, broken logic, invalid diagrams, or direct contradiction of canonical exposition knowledge.\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. If \\`canonicalLessonExcerpt\\` is present in candidate JSON, all satellite phases/activities strictly operationalize the master Lesson Flow and Activity Sequence without inventing divergent timelines.\n - 0-5 pts: Scope drift, topic divergence, or disjoint activity sequence detected compared to master lesson.\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\n/**\n * Stage 2: Macro-Pedagogy Curriculum Plan Judge Prompt\n */\nexport interface CurriculumPlanJudgePromptInput {\n planJson: string;\n briefingContext: string;\n expectedLanguage?: string;\n linterFindings?: Array<{ id: string; severity: string; title: string; description: string }>;\n}\n\nexport function buildCurriculumPlanJudgePrompt(input: CurriculumPlanJudgePromptInput): string {\n const { planJson, briefingContext, expectedLanguage = 'Vietnamese', linterFindings = [] } = input;\n\n return `\n# System Methodology: Principal Curriculum SME & Macro-Pedagogical Quality Judge (@sme_judge)\n\nYou are the **Lead Curriculum Architect & Classroom Practicum SME**. Your role is to rigorously evaluate a candidate \\`CURRICULUM_PLAN\\` (Schema v3) against empirical pedagogical science, cognitive load capacity, and real classroom delivery constraints.\n\n## COURSE BRIEFING & TARGET CONSTRAINTS\n${briefingContext}\n\n${linterFindings.length > 0 ? `## DETERMINISTIC PRE-LINT FINDINGS (0-TOKEN LINTER)\nThe deterministic structural linter detected the following issues in advance:\n${linterFindings.map((f) => `- [${f.severity}] ${f.id}: ${f.title} — ${f.description}`).join('\\n')}\nConsider these deterministic findings when scoring and issuing actionable repair prescriptions.` : ''}\n\n## CANDIDATE CURRICULUM PLAN JSON\n\\`\\`\\`json\n${planJson}\n\\`\\`\\`\n\n## EVALUATION RUBRICS & 5 CRITICAL DIMENSIONS (TOTAL 100 POINTS)\n\n1. **Step Incrementality & Single Leap Principle (20 pts):**\n - 20 pts: Every session introduces at most ONE new syntax or algorithmic concept. No massive cognitive leaps (e.g. going from basic variables directly to asynchronous networking).\n - 10 pts: Minor leap detected in 1 session that can be mitigated with starter code.\n - 0 pts: Severe cognitive gap (e.g. multiple compound paradigms combined in one session).\n\n2. **Vygotsky ZPD Saturation & Cognitive Capacity (20 pts):**\n - 20 pts: New concept count <= 2 per session (K-12) / 3 (Adults), with explicit prior concept anchor or recap slot.\n - 10 pts: Session introduces 3 concepts without adequate bridge.\n - 0 pts: Severe overload (>3 new concepts in a single session) or unanchored concepts.\n\n3. **Classroom Friction-Adjusted Time Budget (20 pts):**\n - 20 pts: Incorporates 2.5x student friction multiplier. Total content minutes <= 85% of session duration (15% overhead reserved). No step > 76 minutes.\n - 10 pts: Content is slightly packed, leaving < 10% buffer time.\n - 0 pts: Overpacked content that will cause students to run out of time in a standard classroom.\n\n4. **Reigeluth Walking Skeleton & Milestone Agency (20 pts):**\n - 20 pts: Unit 1 culminates in an end-to-end runnable MVP (Epitome). Subsequent units provide modular elaborations.\n - 10 pts: Walking skeleton present but delayed to Unit 2.\n - 0 pts: Pure theoretical silo teaching where no working product appears until the end of the course.\n\n5. **Exit Evidence Specificity (20 pts):**\n - 20 pts: Every session produces an explicit, tangible, user-visible deliverable (e.g. running UI screen, passing test suite, physical LED sequence).\n - 10 pts: Some sessions have generic deliverables (\"completed practice exercise\").\n - 0 pts: Vague or absent deliverables (\"student understands topic\").\n\n## DECISION RULES\n- **PASS & AUTO-APPROVE:** Total Score >= 85 AND overallVerdict is \"PASS\" AND no CRITICAL actionable repairs.\n- **NEEDS_REVISION:** Total Score between 70 and 84, or fixable flaws. Prescribe concrete structured \\`actionableRepairs\\` (\\`SPLIT_STEP\\`, \\`INSERT_RECAP\\`, \\`ADJUST_TIME_BUDGET\\`, \\`REVISE_EXIT_EVIDENCE\\`).\n- **FAIL:** Total Score < 70, structural collapse, or unbridgeable pedagogical gaps.\n\n## OUTPUT FORMAT\nReturn a valid JSON object matching the MacroPedagogyPlanAuditSchema.\n`.trim();\n}\n\n/**\n * Stage 1: Project Graph Toolchain & Environment Provisioning Judge Prompt\n */\nexport interface ProjectGraphJudgePromptInput {\n bundleJson: string;\n briefingContext: string;\n linterFindings?: Array<{ id: string; severity: string; title: string; description: string }>;\n}\n\nexport function buildProjectGraphJudgePrompt(input: ProjectGraphJudgePromptInput): string {\n const { bundleJson, briefingContext, linterFindings = [] } = input;\n\n return `\n# System Methodology: Lead Systems Engineer & Lab Infrastructure Auditor (@infra_judge)\n\nYou are the **Lead Lab Systems Engineer**. Your role is to rigorously evaluate a candidate \\`PROJECT_GRAPH\\` and its associated \\`technology_scope\\` against real-world lab environment feasibility, toolchain friction, and hardware constraints.\n\n## COURSE BRIEFING & INFRASTRUCTURE CONSTRAINTS\n${briefingContext}\n\n${linterFindings.length > 0 ? `## DETERMINISTIC PRE-LINT FINDINGS\n${linterFindings.map((f) => `- [${f.severity}] ${f.id}: ${f.title} — ${f.description}`).join('\\n')}` : ''}\n\n## CANDIDATE PROJECT GRAPH BUNDLE JSON\n\\`\\`\\`json\n${bundleJson}\n\\`\\`\\`\n\n## EVALUATION RUBRICS & 4 DIMENSIONS (TOTAL 100 POINTS)\n\n1. **Toolchain & Installation Feasibility (25 pts):**\n - 25 pts: Toolchain installs cleanly without complex admin rights, OS friction, or fragile build scripts.\n - 10 pts: Toolchain requires moderate admin setup, suitable for guided lab but risky for BYOD.\n - 0 pts: High-friction setup that frequently breaks in student environments.\n\n2. **Environment Provisioning Strategy (25 pts):**\n - 25 pts: Heavy technologies (PostgreSQL, Docker, ROS2, etc.) declare an explicit, realistic provisioning model (\\`PRE_INSTALLED_LAB\\`, \\`CLOUD_MANAGED\\`, or \\`DEDICATED_SETUP\\`). Core course topics are NEVER downgraded; instead, proper infrastructure is specified.\n - 10 pts: Heavy tech used with ambiguous provisioning plan.\n - 0 pts: Heavy tech dumped on students with no provisioning strategy, causing setup collapse.\n\n3. **Hardware & Runtime Envelope (25 pts):**\n - 25 pts: Code, libraries, and algorithms fit comfortably within target device RAM, Flash, and pinout budget (<= 75% envelope).\n - 10 pts: Memory or resource limits are tight.\n - 0 pts: Guaranteed hardware crash or pinout conflict.\n\n4. **Time to Hello World (25 pts):**\n - 25 pts: First working runnable milestone achieved in <= 15 minutes of student effort.\n - 10 pts: First milestone takes 20-30 minutes.\n - 0 pts: Student spends the entire first session on environment configuration without seeing running code.\n\n## DECISION RULES\n- **PASS:** Score >= 85 AND overallVerdict is \"PASS\".\n- **NEEDS_REVISION:** Score between 70 and 84. Prescribe structured actionable repairs.\n- **FAIL:** Score < 70 or critical environment blocker.\n\n## OUTPUT FORMAT\nReturn a valid JSON object matching ProjectGraphAuditSchema.\n`.trim();\n}\n\n","import type { MilestoneInput, ProjectGraph } from '../../schemas';\n\nexport interface ProjectInstructionPromptInput {\n projectGraph?: ProjectGraph;\n milestone: MilestoneInput;\n roadmapContext?: {\n projectTitle?: string;\n techStack?: string[];\n phaseTitle?: string;\n };\n researchNotes?: string;\n externalResources?: string[];\n language: string;\n difficulty?: 'beginner' | 'intermediate' | 'advanced';\n}\n\nexport function buildProjectInstructionPrompt(input: ProjectInstructionPromptInput): string {\n const {\n projectGraph,\n milestone,\n roadmapContext,\n researchNotes,\n externalResources,\n language,\n difficulty = 'intermediate',\n } = input;\n const milestoneId = milestone.id || milestone.concept_code || 'M01';\n\n const techStackList =\n roadmapContext?.techStack ||\n (Array.isArray(projectGraph?.project.tech_stack)\n ? projectGraph.project.tech_stack\n : typeof projectGraph?.project.tech_stack === 'object'\n ? Object.values(projectGraph.project.tech_stack).flat()\n : milestone.tech_keywords || ['General Technology']);\n\n return `\n# System Methodology: Instructable-style Project Tutorial & Execution Manual (@instruction)\n\nYou are the **@instruction** senior technical author. Your mission is to generate a comprehensive, highly actionable, step-by-step technical tutorial/instruction for completing a specific milestone of a software/hardware project.\n\n## PRIMARY QUALITY BAR: EXECUTION ACCURACY & REPRODUCIBILITY\nThis is an **execution manual**, not a high-level overview. The reader must be able to follow every step sequentially and achieve the exact working result.\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- **MANDATORY REQUIREMENT:** Output all explanations, action titles, tips, warnings, preflight checks, and expected results strictly in **\"${language}\"**.\n- Keep file paths, CLI commands, code syntax, and official SDK API symbols in standard format.\n\n## PROJECT CONTEXT\n${\n projectGraph\n ? `\n- **Project Name:** ${projectGraph.project.name}\n- **Project Purpose:** ${projectGraph.project.purpose || 'N/A'}\n- **Project Type / Platforms:** ${projectGraph.project.project_type || 'N/A'} (${projectGraph.project.platform.join(', ')})\n- **Architecture:** ${projectGraph.project.architecture.join(', ') || 'N/A'}\n- **Product Goals:**\n${projectGraph.product.goals.map((g) => ` - [${g.id}] ${g.description}`).join('\\n')}\n- **User Journeys:**\n${projectGraph.product.journeys.map((j) => ` - ${j.name}: ${j.steps.slice(0, 3).join(' -> ')}...`).join('\\n')}\n`\n : `- **Project:** ${roadmapContext?.projectTitle || 'Software Project'}`\n}\n\n## CURRENT MILESTONE & ROADMAP CONTEXT\n- **Instruction ID:** ${milestoneId}\n- **Milestone Name:** ${milestone.name}\n- **Milestone Description:** ${milestone.description || 'N/A'}\n- **Feature Cluster:** ${milestone.feature_name || milestone.feature_id || 'Core Feature'}\n- **Phase:** ${roadmapContext?.phaseTitle || 'Implementation'}\n- **Concept Code:** ${milestone.concept_code || 'N/A'}\n- **Tech Stack:** ${techStackList.join(', ')}\n- **Difficulty:** ${difficulty}\n- **Learning Objectives Covered:**\n${(milestone.learning_objectives || []).map((lo) => ` - [${lo.lo_type || 'ULO'}] ${lo.code}: ${lo.name} (${lo.description || ''})`).join('\\n')}\n\n${researchNotes ? `## RESEARCH NOTES & VERIFIED TECHNICAL SOURCES\\n${researchNotes}\\n` : ''}\n${externalResources && externalResources.length > 0 ? `## EXTERNAL RESOURCES & REPOSITORIES\\n${externalResources.join('\\n')}\\n` : ''}\n\n## EXECUTION & AUTHORING RULES\n1. **Section Breakdown:** Divide the tutorial into logical sequential sections (e.g. 1. Environment & Preflight, 2. Core Implementation, 3. Integration & Verification).\n2. **Preflight Checks:** Every section MUST start with preflight checks (e.g., verifying tools, directories, environment variables).\n3. **Action-Verb Steps:** Every step must have a clear action-verb title (e.g. \"Create the Network Discovery Manager\", \"Define the JSON Model Struct\").\n4. **Code Quality:** Provide complete, runnable code blocks with target file paths indicated (e.g. \\`# Sources/App/Model.swift\\`). Code comments must explain WHY, not just WHAT.\n5. **Expected Results:** Explicitly describe what the developer will observe (terminal output, simulator behavior, UI state).\n6. **Operational Gotchas & Warnings:** Include \\`warning\\` fields for common failure modes (e.g. missing permissions, wrong port, unhandled optional).\n7. **Visual Placeholders:** Include \\`imagePlaceholder\\` describing screenshots or diagrams where visual confirmation helps.\n8. **End-to-End Verification:** Provide a final verification checklist to ensure complete functionality.\n\n## REQUIRED JSON KEYS\nPlease return a single JSON object matching these exact keys:\n- \"artifactType\": \"INSTRUCTION\"\n- \"instructionId\": \"${milestoneId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"difficulty\": \"${difficulty}\"\n- \"estimatedTotalMinutes\": number\n- \"scopeMode\": \"milestone\"\n- \"milestoneRef\": \"${milestoneId}\"\n- \"featureRef\": \"${milestone.feature_id || 'F0'}\"\n- \"techStack\": [${techStackList.map((t) => `\"${t}\"`).join(', ')}]\n- \"prerequisites\": string[]\n- \"materialsAndTools\": string[]\n- \"sections\": array of { \"sectionNumber\": number, \"title\": string, \"goal\": string, \"estimatedMinutes\": number, \"preflightChecks\": string[], \"steps\": array of { \"stepNumber\": string, \"actionTitle\": string, \"explanation\": string, \"targetFile\": string, \"codeSnippet\": string, \"codeLanguage\": string, \"tip\": string, \"warning\": string, \"expectedResult\": string, \"imagePlaceholder\": string }, \"rollbackOrCleanup\": string }\n- \"verificationChecklist\": string[]\n`.trim();\n}\n","import type { MilestoneInput, ProjectGraph } from '../../schemas';\nimport { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('SELF_LAB_template.md') ?? '[TEMPLATE FILE NOT FOUND: SELF_LAB_template.md]'}\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 { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('QUIZ_v4.6_template.md') ?? '[TEMPLATE FILE NOT FOUND: QUIZ_v4.6_template.md]'}\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 { 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 standardRefs: z.array(z.string()).optional(),\n conceptRefs: z.array(z.string()).optional(),\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']);\nexport type QualityAuditVerdict = z.infer<typeof QualityAuditVerdictSchema>;\n\nexport const JudgeCriterionSchema = z.object({\n name: z.string().describe('Criterion name, e.g. Bloom Alignment, Code Validity, Word Count Gate, Language Adherence, Step Incrementality'),\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});\nexport type JudgeCriterion = z.infer<typeof JudgeCriterionSchema>;\n\n/**\n * Structured Actionable Repair Prescription:\n * Used by the closed-loop autonomous repair pipeline to patch plans deterministically.\n */\nexport const ActionableRepairActionSchema = z.enum([\n 'SPLIT_STEP',\n 'REVISE_PROVISIONING',\n 'INSERT_RECAP',\n 'ADJUST_TIME_BUDGET',\n 'SUBSTITUTE_FALLBACK',\n 'REVISE_EXIT_EVIDENCE',\n]);\nexport type ActionableRepairAction = z.infer<typeof ActionableRepairActionSchema>;\n\nexport const ActionableRepairPromptSchema = z.object({\n action: ActionableRepairActionSchema,\n targetId: z.string().describe('ID of the session, feature, or step requiring repair, e.g. U01_M01_L02 or F1-S3'),\n severity: z.enum(['CRITICAL', 'WARNING', 'INFO']).default('WARNING'),\n rationale: z.string().describe('Pedagogical or technical rationale for why this repair is mandated'),\n instruction: z.string().describe('Exact, actionable text instruction for the planner/generator in the next turn'),\n});\nexport type ActionableRepairPrompt = z.infer<typeof ActionableRepairPromptSchema>;\n\n/**\n * Stage 1: Project Graph Engineering & Toolchain Audit Schema\n */\nexport const ProjectGraphAuditSchema = z.object({\n schema_version: z.number().default(1),\n projectId: z.string(),\n overallVerdict: QualityAuditVerdictSchema,\n totalScore: z.number().min(0).max(100),\n toolchainFeasibility: JudgeCriterionSchema.describe('Installation friction, admin rights, IDE/compiler matrix'),\n provisioningStrategy: JudgeCriterionSchema.describe('Clear model for heavy runtimes: Pre-installed lab, Cloud instance, or Dedicated setup'),\n hardwareRuntimeEnvelope: JudgeCriterionSchema.describe('Memory/Flash limits, pinout conflicts, hardware platform alignment'),\n timeToHelloWorld: JudgeCriterionSchema.describe('Student time to achieve first working feedback loop (target <= 15 mins)'),\n actionableRepairs: z.array(ActionableRepairPromptSchema).default([]),\n});\nexport type ProjectGraphAuditReport = z.infer<typeof ProjectGraphAuditSchema>;\n\n/**\n * Stage 2: Macro-Pedagogical Curriculum Plan Audit Schema\n * Evaluates the full session sequence against real classroom friction and cognitive load.\n */\nexport const MacroPedagogyPlanAuditSchema = z.object({\n schema_version: z.number().default(1),\n planHash: z.string(),\n overallVerdict: QualityAuditVerdictSchema,\n totalScore: z.number().min(0).max(100),\n autoApproved: z.boolean().default(false).describe('True if totalScore >= 85 and overallVerdict is PASS'),\n stepIncrementality: JudgeCriterionSchema.describe('Single leap principle: <= 1 new syntax or 1 new algorithm per step'),\n zpdSaturation: JudgeCriterionSchema.describe('Vygotsky ZPD: <= 2 new concepts per session (K-12) / 3 (Adults), with prior anchor'),\n frictionAdjustedBudget: JudgeCriterionSchema.describe('Student time multiplier (2.5x): total content <= 85% session minutes'),\n epitomeViability: JudgeCriterionSchema.describe('Reigeluth Walking Skeleton: Unit 1 produces an end-to-end runnable MVP'),\n exitEvidenceSpecificity: JudgeCriterionSchema.describe('Tangible, measurable student deliverable for every session'),\n actionableRepairs: z.array(ActionableRepairPromptSchema).default([]),\n summary: z.string().describe('High-level executive evaluation summary'),\n});\nexport type MacroPedagogyPlanAuditReport = z.infer<typeof MacroPedagogyPlanAuditSchema>;\n\n/**\n * Legacy SOT / Lesson Quality Report Schema (Retained for Backward Compatibility)\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 structuredRepairs: z.array(ActionableRepairPromptSchema).optional(),\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\n// P50: Macro-Pedagogical Schemas (ZPD, Bruner Spiral, Walking Skeleton, Mastery Gates)\n\nexport const ZpdVerdictSchema = z.enum(['OK', 'TOO_MANY_NEW', 'NO_ZPD_BRIDGE']);\nexport type ZpdVerdict = z.infer<typeof ZpdVerdictSchema>;\n\nexport const SessionZpdStatusSchema = z.object({\n verdict: ZpdVerdictSchema,\n new_concept_count: z.number().int().nonnegative().default(0),\n known_concept_count: z.number().int().nonnegative().default(0),\n issues: z.array(z.string()).default([]),\n});\nexport type SessionZpdStatus = z.infer<typeof SessionZpdStatusSchema>;\n\nexport const ConceptSpiralEncounterSchema = z.object({\n concept_code: z.string(),\n session_id: LessonCodeSchema,\n encounter_index: z.number().int().positive(),\n bloom_cap: BloomLevelSchema,\n depth: DepthLevelSchema,\n});\nexport type ConceptSpiralEncounter = z.infer<typeof ConceptSpiralEncounterSchema>;\n\nexport const WalkingSkeletonSchema = z.object({\n epitome_unit_id: z.string().default('U01'),\n epitome_deliverables: z.array(z.string()).default([]),\n elaborations: z.array(z.object({\n unit_id: z.string(),\n focus_area: z.string(),\n elaborates_on: z.array(z.string()).default([]),\n })).default([]),\n});\nexport type WalkingSkeleton = z.infer<typeof WalkingSkeletonSchema>;\n\nexport const MasteryGateSchema = z.object({\n phase_or_unit_id: z.string(),\n gate_name: z.string(),\n exit_criteria: z.array(z.string()).min(1),\n next_unit_id: z.string(),\n remediation: z.object({\n trigger: z.literal('FAIL_GATE_CRITERIA'),\n focus_minutes: z.number().int().default(15),\n action: z.string(),\n }),\n});\nexport type MasteryGate = z.infer<typeof MasteryGateSchema>;\n\nexport const ConceptPrerequisiteEdgeSchema = z.object({\n concept_code: z.string(),\n requires: z.string(),\n source: z.enum(['MASTER_TREE', 'INFERRED', 'CONCEPT_LEVEL_PREREQ']).default('CONCEPT_LEVEL_PREREQ'),\n confidence: z.number().min(0).max(1).default(0.8),\n rationale: z.string().default(''),\n structure_supported: z.boolean().default(true),\n needs_review: z.boolean().default(false),\n hub: z.boolean().default(false),\n});\nexport type ConceptPrerequisiteEdge = z.infer<typeof ConceptPrerequisiteEdgeSchema>;\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 // P50: ZPD cognitive load status for this session\n zpd_status: SessionZpdStatusSchema.default({\n verdict: 'OK',\n new_concept_count: 0,\n known_concept_count: 0,\n issues: [],\n }),\n});\nexport type SessionPlan = z.infer<typeof SessionPlanSchema>;\n\n// Root plan\n\nexport const TranslationPolicySchema = z\n .object({\n policy: z.enum(['after_artifact', 'end_of_unit', 'at_publish', 'native']).default('native'),\n target_language: z.string().nullable().default(null),\n })\n .refine(\n (data) => {\n if (data.policy === 'native') {\n return typeof data.target_language === 'string' && data.target_language.trim().length > 0;\n }\n return true;\n },\n {\n message: \"When translation policy is 'native', target_language must be a non-empty string\",\n path: ['target_language'],\n }\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 // P50: Macro-pedagogical course structures\n walking_skeleton: WalkingSkeletonSchema.optional(),\n mastery_gates: z.array(MasteryGateSchema).default([]),\n concept_spiral_progression: z.array(ConceptSpiralEncounterSchema).default([]),\n concept_prerequisites: z.array(ConceptPrerequisiteEdgeSchema).default([]),\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 // P52/T2.1: tangible user-visible outcome projected from the graph step\n // (checkpoint candidate for session cutting). Empty = not a checkpoint.\n user_visible_deliverable: z.string().default(''),\n // P52/T3.1 — depth-reconcile inputs (mirrored from the feed; optional so\n // raw graphs without variants keep planning unchanged):\n // • depth_variants: minutes to teach this node at each depth level (ULO ≤\n // CIO ≤ SIO) — the reconciler's price list for downgrades.\n // • depth_scaffold_candidates: parallel to scaffold_candidates but acting\n // on DEPTH (SIO→CIO, CIO→ULO) instead of lesson time.\n // • is_core: Master-Tree core concept — never downgraded; escalate instead.\n depth_variants: z.object({ ulo: z.number().int().nonnegative(), cio: z.number().int().nonnegative(), sio: z.number().int().nonnegative() }).optional(),\n depth_scaffold_candidates: z.array(z.object({\n from_depth: DepthLevelSchema,\n to_depth: DepthLevelSchema,\n minutes_saved: z.number().int().nonnegative(),\n reason: z.string().default(''),\n })).optional(),\n is_core: z.boolean().default(false),\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","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","/**\n * Universal Pedagogical Constants & Empirical Classroom Standards\n * Single Source of Truth for Curriculum Planning, Linters, and LLM-as-Judge Evaluators.\n */\n\n/**\n * Student Friction Multiplier (Empirical Classroom Constant):\n * Senior engineers write code roughly 2.5x to 3.5x faster than students.\n * A 10-minute expert coding task requires ~25-35 minutes for a student in a classroom setting\n * due to typing, syntax errors, typos, and debugging.\n */\nexport const STUDENT_FRICTION_MULTIPLIER = 2.5;\n\n/**\n * Vygotsky Zone of Proximal Development (ZPD) Saturation Thresholds:\n * Maximum number of completely new conceptual primitives allowed in a single session.\n */\nexport const MAX_NEW_CONCEPTS_PER_SESSION_K12 = 2;\nexport const MAX_NEW_CONCEPTS_PER_SESSION_ADULT = 3;\n\n/**\n * Standard Classroom Overhead Ratio:\n * 15% of total session duration is strictly reserved for setup, attendance,\n * questions, transitions, and hardware teardown.\n */\nexport const DEFAULT_OVERHEAD_RATIO = 0.15;\n\n/**\n * Maximum In-Session Setup Minutes:\n * The maximum time a student should spend on toolchain/environment configuration\n * during the first working session before achieving their first running \"Hello World\".\n */\nexport const MAX_IN_SESSION_SETUP_MINUTES = 15;\n\n/**\n * Session-Cut Tolerance (P52/T2.2):\n * When the content budget is reached, the packer searches for the nearest\n * user-visible checkpoint (node with a non-empty user_visible_deliverable)\n * within ±15% of the session's content budget before falling back to a raw\n * minute cut. Motivation: a session that ends mid-step without anything to\n * show kills momentum (P52 plan, Gap 2).\n */\nexport const SESSION_CUT_TOLERANCE = 0.15;\n\n/**\n * 3-Tier Environment Provisioning Models for Complex or Heavy Technology Stacks:\n * - PRE_INSTALLED_LAB: Environment/IDE/DB is imaged or pre-configured by IT/Lab technician before class.\n * - CLOUD_MANAGED: Cloud instance (Supabase, Neon, Codespaces, Wokwi) with pre-provisioned connection strings.\n * - DEDICATED_SETUP: A dedicated full session specifically budgeted for guided local environment setup.\n */\nexport const ENVIRONMENT_PROVISIONING_MODELS = [\n 'PRE_INSTALLED_LAB',\n 'CLOUD_MANAGED',\n 'DEDICATED_SETUP',\n] as const;\n\nexport type EnvironmentProvisioningModel = (typeof ENVIRONMENT_PROVISIONING_MODELS)[number];\n\n/**\n * Autonomous Evaluation Thresholds:\n */\nexport const JUDGE_AUTO_APPROVE_THRESHOLD = 85;\nexport const JUDGE_ESCALATE_THRESHOLD = 70;\nexport const MAX_AUTONOMOUS_REPAIR_TURNS = 3;\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport {\n CurriculumQualityReportSchema,\n type CurriculumQualityReport,\n MacroPedagogyPlanAuditSchema,\n type MacroPedagogyPlanAuditReport,\n ProjectGraphAuditSchema,\n type ProjectGraphAuditReport,\n} from '../../schemas';\nimport {\n buildJudgePrompt,\n type JudgePromptInput,\n buildCurriculumPlanJudgePrompt,\n type CurriculumPlanJudgePromptInput,\n buildProjectGraphJudgePrompt,\n type ProjectGraphJudgePromptInput,\n} from '../prompts';\nimport { JUDGE_AUTO_APPROVE_THRESHOLD } from '../../constants/pedagogy';\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\nexport interface AuditCurriculumPlanInput extends CurriculumPlanJudgePromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function auditCurriculumPlanFlow(input: AuditCurriculumPlanInput): Promise<MacroPedagogyPlanAuditReport> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildCurriculumPlanJudgePrompt({\n planJson: input.planJson,\n briefingContext: input.briefingContext,\n expectedLanguage: input.expectedLanguage,\n linterFindings: input.linterFindings,\n });\n\n const { object } = await generateObject({\n model,\n schema: MacroPedagogyPlanAuditSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n // Enforce deterministic auto-approve invariant\n const autoApproved = object.totalScore >= JUDGE_AUTO_APPROVE_THRESHOLD && object.overallVerdict === 'PASS';\n return {\n ...object,\n autoApproved,\n };\n}\n\nexport interface AuditProjectGraphInput extends ProjectGraphJudgePromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function auditProjectGraphFlow(input: AuditProjectGraphInput): Promise<ProjectGraphAuditReport> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildProjectGraphJudgePrompt({\n bundleJson: input.bundleJson,\n briefingContext: input.briefingContext,\n linterFindings: input.linterFindings,\n });\n\n const { object } = await generateObject({\n model,\n schema: ProjectGraphAuditSchema,\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 { ProjectInstructionSchema, type ProjectInstruction } from '../../schemas';\nimport { buildProjectInstructionPrompt, type ProjectInstructionPromptInput } from '../prompts';\n\nexport interface GenerateProjectInstructionInput extends ProjectInstructionPromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateProjectInstructionFlow(\n input: GenerateProjectInstructionInput\n): Promise<ProjectInstruction> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildProjectInstructionPrompt({\n projectGraph: input.projectGraph,\n milestone: input.milestone,\n roadmapContext: input.roadmapContext,\n researchNotes: input.researchNotes,\n externalResources: input.externalResources,\n language: input.language,\n difficulty: input.difficulty,\n });\n\n const { object } = await generateObject({\n model,\n schema: ProjectInstructionSchema,\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 { streamObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { LessonPlanSchema, type MilestoneInput } from '../../schemas';\nimport { buildLessonMasterPrompt, type LessonPromptInput } from '../prompts';\n\nexport interface StreamLessonMasterInput extends Omit<LessonPromptInput, 'milestone'> {\n milestone: MilestoneInput;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function streamLessonMasterFlow(input: StreamLessonMasterInput) {\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 });\n\n return streamObject({\n model,\n schema: LessonPlanSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n}\n","import { streamObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { SelfLabSchema, type MilestoneInput } from '../../schemas';\nimport { buildSelfLabPrompt } from '../prompts';\n\nexport interface StreamSelfLabInput {\n milestone: MilestoneInput;\n language: string;\n targetTechStack?: string[];\n contextContinuity?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function streamSelfLabFlow(input: StreamSelfLabInput) {\n const model = getAIModel(input.modelOptions);\n const prompt = buildSelfLabPrompt({\n milestone: input.milestone,\n language: input.language,\n targetTechStack: input.targetTechStack,\n contextContinuity: input.contextContinuity,\n });\n\n return streamObject({\n model,\n schema: SelfLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n}\n","import { streamObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { DiagnosticQuizSchema, type MilestoneInput } from '../../schemas';\nimport { buildDiagnosticQuizPrompt } from '../prompts';\n\nexport interface StreamDiagnosticQuizInput {\n milestone: MilestoneInput;\n language: string;\n questionCount?: number;\n passingScorePct?: number;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function streamDiagnosticQuizFlow(input: StreamDiagnosticQuizInput) {\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 return streamObject({\n model,\n schema: DiagnosticQuizSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n}\n","/**\n * Specialist Sub-Agent Toolbelts (Parity with LangGraph AGENTS.md & nodes)\n *\n * Provides typed Zod tool schemas and execution contracts for 10 specialist personas:\n * 1. @analyst — Brief analysis, learner profile, age group constraints\n * 2. @researcher — Ground Truth, reference pack, evidence scoring\n * 3. @designer — 3-level Curriculum Framework, Bloom matrix, prerequisite graph\n * 4. @content — 5E Lesson Plan, Lesson contract, Section patching\n * 5. @activity — STEM Activity Operations, ACT contract validation\n * 6. @assessor — Diagnostic quizzes, question bank, rubric matrix\n * 7. @illustrator — Mermaid diagrams, technical illustrations, visual assets\n * 8. @tech_sme — Code Lab sandbox execution, syntax validation, runtime checking\n * 9. @reviewer — Alignment matrix audit, reading level check, scope drift detection\n * 10. @packager — 4 Delivery packs (Teacher, Student, Parent, Client), Handover Doc\n */\n\nimport { z } from 'zod';\n\n// ── 1. @analyst Toolbelt ───────────────────────────────────────────\nexport const analystTools = {\n analyzeLearnerProfile: {\n name: 'analyzeLearnerProfile',\n description: 'Extracts and analyzes target learner profile, age tier, prerequisite baseline, and cognitive barriers.',\n schema: z.object({\n targetAge: z.string().describe('Target learner age group (e.g. 12-15 years, Secondary K-12)'),\n priorKnowledge: z.string().describe('Prerequisite baseline knowledge (e.g. Scratch visual block mastery)'),\n cognitiveBarriers: z.array(z.string()).describe('Identified psychological or cognitive barriers when approaching new concepts'),\n transitionStrategy: z.string().describe('Bridge strategy for cognitive scaffolding')\n })\n },\n validatePrerequisites: {\n name: 'validatePrerequisites',\n description: 'Validates prerequisite knowledge requirements and entrance benchmarks for the curriculum.',\n schema: z.object({\n requiredConcepts: z.array(z.string()).describe('List of mandatory prerequisite concepts required before starting'),\n entryBenchmark: z.string().describe('Minimum diagnostic assessment or entry milestone')\n })\n },\n writeLearnerProfile: {\n name: 'writeLearnerProfile',\n description: 'Generates or updates the standardized SOT LEARNER_PROFILE.md document.',\n schema: z.object({\n projectSlug: z.string().describe('Unique project identifier'),\n markdownContent: z.string().describe('Detailed Markdown content conforming to SOT schema')\n })\n }\n};\n\n// ── 2. @researcher Toolbelt ────────────────────────────────────────\nexport const researcherTools = {\n searchAcademicStandards: {\n name: 'searchAcademicStandards',\n description: 'Queries international curriculum standards (CSTA, IEEE/ACM CS2023, National Standards) and official vendor documentation.',\n schema: z.object({\n query: z.string().describe('Search query for standards and specifications'),\n standardCategory: z.enum(['CSTA', 'CS2023', 'OFFICIAL_DOCS', 'ALL']).default('ALL')\n })\n },\n scoreEvidence: {\n name: 'scoreEvidence',\n description: 'Evaluates credibility and relevance score (1-10) of reference materials to prevent AI hallucination.',\n schema: z.object({\n sourceUrl: z.string().describe('Resource URL or specification identifier'),\n sourceType: z.enum(['academic_paper', 'official_doc', 'curriculum_standard', 'community_article']),\n reliabilityScore: z.number().min(1).max(10).describe('Academic and technical reliability rating')\n })\n },\n writeReferencePack: {\n name: 'writeReferencePack',\n description: 'Persists verified Ground Truth references into SOT REFERENCE_PACK.md.',\n schema: z.object({\n projectSlug: z.string().describe('Project identifier'),\n references: z.array(z.object({\n id: z.string(),\n title: z.string(),\n sourceUrl: z.string(),\n relevanceScore: z.number()\n })),\n cs2023Area: z.string().optional()\n })\n }\n};\n\n// ── 3. @designer Toolbelt ──────────────────────────────────────────\nexport const designerTools = {\n buildScopeAndSequence: {\n name: 'buildScopeAndSequence',\n description: 'Constructs the 3-tier curriculum hierarchy: Unit (PBL Project) -> Module (Topic cluster) -> Lesson (5E plan).',\n schema: z.object({\n totalWeeks: z.number().default(16),\n totalSessions: z.number().default(32),\n units: z.array(z.object({\n unitId: z.string().describe('Unit Code (e.g. U01)'),\n title: z.string().describe('Unit title'),\n projectDeliverable: z.string().describe('End-of-unit capstone project deliverable'),\n sessionCount: z.number().describe('Number of sessions allocated'),\n bloomTarget: z.string().describe('Highest target Bloom taxonomy level')\n }))\n })\n },\n writeCurriculumFramework: {\n name: 'writeCurriculumFramework',\n description: 'Generates or updates the standardized SOT CURRICULUM_FRAMEWORK.md document.',\n schema: z.object({\n projectSlug: z.string().describe('Project identifier'),\n frameworkMarkdown: z.string().describe('Complete decomposed curriculum framework in Markdown'),\n standardRefs: z.array(z.object({\n unitId: z.string().describe('Unit the statements anchor, e.g. \"U01\"'),\n standardIds: z.array(z.string()).describe('Canonical statement IDs from the STANDARDS CONTEXT list, e.g. [\"csta-k12-2017:1B-AP-10\"]. MUST exist in the provided list — never invent IDs'),\n })).optional().describe('Standards anchoring per unit, chosen ONLY from the STANDARDS CONTEXT statement list')\n })\n }\n};\n\n// ── 4. @content Toolbelt (Lesson Authoring) ────────────────────────\nexport const contentTools = {\n scaffold5ELesson: {\n name: 'scaffold5ELesson',\n description: 'Scaffolds a 5E lesson plan structure (Engage, Explore, Explain, Elaborate, Evaluate).',\n schema: z.object({\n lessonId: z.string().describe('Lesson identifier (e.g. U01_M01_L01)'),\n title: z.string().describe('Lesson title'),\n learningObjectives: z.array(z.object({\n code: z.string().describe('LO code, e.g. \"LO1\"'),\n statement: z.string().describe('Bloom-tagged objective statement'),\n standardRefs: z.array(z.string()).optional().describe('Anchoring statement IDs chosen ONLY from the STANDARDS CONTEXT list, e.g. [\"csta-k12-2017:1B-AP-10\"]')\n })).describe('Target learning objectives (LOs) with standards anchors'),\n durationMinutes: z.number().default(90)\n })\n },\n writeLessonBody: {\n name: 'writeLessonBody',\n description: 'Authors full 5-phase lesson plan body conforming to Lesson Contract and pedagogical rules.',\n schema: z.object({\n lessonId: z.string(),\n fullMarkdown: z.string(),\n activitySequence: z.array(z.string()).describe('Committed activity sequence from lesson contract')\n })\n },\n patchLessonSection: {\n name: 'patchLessonSection',\n description: 'Locally patches a specific section line range of a lesson artifact without full overwrite.',\n schema: z.object({\n filePath: z.string().describe('Relative path to lesson artifact'),\n targetSectionHeader: z.string().describe('Target section heading to replace'),\n replacementMarkdown: z.string().describe('New replacement Markdown section')\n })\n }\n};\n\n// ── 5. @activity Toolbelt (STEM Labs) ──────────────────────────────\nexport const activityTools = {\n writeActLabOperations: {\n name: 'writeActLabOperations',\n description: 'Authors hands-on laboratory operation document (ACT_...md) expanding the committed LESSON activity flow.',\n schema: z.object({\n lessonId: z.string(),\n targetPlatform: z.string().default('Cross-platform Workstation / IDE'),\n stepByStepSteps: z.array(z.object({\n stepNumber: z.number(),\n instruction: z.string(),\n starterCodeSnippet: z.string().optional(),\n solutionCodeSnippet: z.string().optional()\n }))\n })\n }\n};\n\n// ── 6. @assessor Toolbelt (Quiz & Rubrics) ─────────────────────────\nexport const assessorTools = {\n writeQuizBank: {\n name: 'writeQuizBank',\n description: 'Generates diagnostic and formative scenario-based quiz bank with distractor explanations.',\n schema: z.object({\n lessonId: z.string(),\n questions: z.array(z.object({\n id: z.string(),\n prompt: z.string(),\n options: z.array(z.string()),\n correctIndex: z.number(),\n explanation: z.string(),\n bloomLevel: z.string()\n }))\n })\n },\n generateRubricMatrix: {\n name: 'generateRubricMatrix',\n description: 'Generates 4-tier competency rubric matrix (Developing, Proficient, Advanced, Exemplary).',\n schema: z.object({\n lessonId: z.string(),\n criteria: z.array(z.object({\n criterionName: z.string(),\n weight: z.number(),\n levels: z.record(z.string())\n }))\n })\n }\n};\n\n// ── 7. @illustrator Toolbelt (Visual Assets) ───────────────────────\nexport const illustratorTools = {\n generateMermaidDiagram: {\n name: 'generateMermaidDiagram',\n description: 'Generates valid Mermaid diagrams representing data flow, architecture, or algorithmic state machines.',\n schema: z.object({\n diagramType: z.enum(['flowchart', 'sequenceDiagram', 'classDiagram', 'stateDiagram']),\n mermaidCode: z.string().describe('Pure valid Mermaid code string')\n })\n },\n generateSlideDeck: {\n name: 'generateSlideDeck',\n description: 'Generates pedagogical slide deck in Marp Markdown format following 5E structure.',\n schema: z.object({\n lessonId: z.string(),\n marpMarkdown: z.string().describe('Complete Marp Markdown with frontmatter and slide delimiters')\n })\n }\n};\n\n// ── 8. @tech_sme Toolbelt (Sandbox Code Execution) ─────────────────\nexport const techSmeTools = {\n sandboxExecuteCodeLab: {\n name: 'sandboxExecuteCodeLab',\n description: 'Executes student lab code in a sandbox environment to verify zero syntax and runtime errors.',\n schema: z.object({\n language: z.enum(['swift', 'python', 'javascript', 'html_css']),\n code: z.string().describe('Source code to test and execute'),\n expectedOutput: z.string().optional()\n })\n },\n lintSyntaxErrors: {\n name: 'lintSyntaxErrors',\n description: 'Performs static linting and compiler validation on code samples before student delivery.',\n schema: z.object({\n language: z.string(),\n code: z.string()\n })\n }\n};\n\n// ── 9. @reviewer Toolbelt (Quality Assurance) ──────────────────────\nexport const reviewerTools = {\n auditAlignmentMatrix: {\n name: 'auditAlignmentMatrix',\n description: 'Audits alignment integrity between Objectives (LOs) - Content (LESSON) - Assessment (QUIZ).',\n schema: z.object({\n lessonId: z.string(),\n loCoverageRate: z.number().min(0).max(100),\n detectedGaps: z.array(z.string()),\n verdict: z.enum(['PASS', 'WARN', 'FAIL'])\n })\n },\n verifyReadingLevel: {\n name: 'verifyReadingLevel',\n description: 'Verifies readability grade level and vocabulary complexity against target age group.',\n schema: z.object({\n targetAgeGroup: z.string(),\n textSnippet: z.string(),\n readingGradeLevel: z.string(),\n isAppropriate: z.boolean()\n })\n }\n};\n\n// ── 10. @packager Toolbelt (Delivery & Handover) ───────────────────\nexport const packagerTools = {\n createDeliveryPackage: {\n name: 'createDeliveryPackage',\n description: 'Assembles and packages 4 delivery bundles: Teacher Pack, Student Pack, Parent Pack, and Client Pack.',\n schema: z.object({\n projectSlug: z.string(),\n packageType: z.enum(['TEACHER', 'STUDENT', 'PARENT', 'CLIENT', 'ALL']),\n outputDirectory: z.string().default('_released/')\n })\n }\n};\n","/**\n * Model Policy Resolver (Economic & Expert Council Architecture - August 2026)\n *\n * Core Routing Strategy:\n * 1. Expert Council / LLM-as-Judge (Tier 1):\n * - OpenRouter / Google: google/gemini-3.7-flash (Opus-grade accuracy, 1M context)\n * - DeepSeek: deepseek-v4-pro (Build 0813 - Deep CoT Reasoning)\n * - Alibaba: qwen3.8-max (2.4T MoE Flagship)\n * - NVIDIA NIM: nvidia/nemotron-3-ultra-550b-a55b:free (Robust Free Fallback)\n *\n * 2. Mid & Mid-High Production / Copilot (Tier 2 - Primary Economic):\n * - DeepSeek: deepseek-v4-flash (Build 0731 - $0.22/1M, 1M context, 284B MoE)\n * - Alibaba: qwen3.7-flash ($0.03/1M, ultra-fast tool caller)\n * - OpenRouter / Google: google/gemini-3.7-flash\n *\n * 3. Easy / Structured & Free Tasks (Tier 3):\n * - NVIDIA NIM: nvidia/nemotron-3.5-lightning-30b-a3b (Free 1.8s MoE)\n * - DeepSeek: deepseek-v4-flash\n * - Alibaba: qwen3.7-flash ($0.03/1M, ultra-fast tool caller)\n * - Google: gemini-3.5-flash-lite\n */\n\nexport type ModelProviderKey = 'deepseek' | 'openrouter' | 'alibaba' | 'google' | 'nvidia' | 'zhipu' | 'ollama' | 'openai' | 'anthropic';\n\nexport interface ModelPolicyResolution {\n provider: ModelProviderKey;\n modelName: string;\n maxTokens: number;\n temperature: number;\n reasoningEffort?: 'low' | 'medium' | 'high' | 'max';\n contextWindow?: number;\n providerLabel?: string;\n tierDescription?: string;\n}\n\nexport interface MultiProviderPolicyResolution {\n primary: ModelPolicyResolution;\n fallbacks: ModelPolicyResolution[];\n candidateChain: ModelPolicyResolution[];\n expertCouncil?: ModelPolicyResolution[];\n}\n\nexport const DEFAULT_ENABLED_PROVIDERS: Record<ModelProviderKey, boolean> = {\n deepseek: true, // Primary economic provider (V4-Flash / V4-Pro)\n openrouter: true, // Gateway for Gemini 3.7 Flash & top models\n alibaba: true, // Active provider (Qwen 3.8 / 3.7 Flash)\n nvidia: true, // Free tier fallback lead (Nemotron 3 Ultra / Lightning)\n google: true, // Google AI Studio direct\n ollama: false, // Disabled when out of local GPU/token\n zhipu: false, // Zhipu BigModel (Optional)\n openai: false,\n anthropic: false\n};\n\nexport class ModelPolicyResolver {\n /**\n * Returns the High-End Expert Council for LLM-as-Judge & Architecture Evaluation\n */\n public static getExpertCouncil(): ModelPolicyResolution[] {\n return [\n {\n provider: 'openrouter',\n providerLabel: 'OpenRouter Gateway',\n modelName: 'google/gemini-3.7-flash', // Benchmark on par with Claude 3.5/3.7 Opus\n maxTokens: 32768,\n temperature: 0.15,\n reasoningEffort: 'high',\n contextWindow: 1048576,\n tierDescription: 'Hội đồng Giám khảo: Gemini 3.7 Flash (Opus-grade accuracy)'\n },\n {\n provider: 'deepseek',\n providerLabel: 'DeepSeek API',\n modelName: 'deepseek-v4-pro', // Build 0813\n maxTokens: 32768,\n temperature: 0.15,\n reasoningEffort: 'high',\n contextWindow: 1000000,\n tierDescription: 'Hội đồng Giám khảo: DeepSeek V4 Pro (Deep CoT Reasoning)'\n },\n {\n provider: 'alibaba',\n providerLabel: 'Alibaba Qwen Cloud',\n modelName: 'qwen3.8-max', // 2.4T MoE Flagship\n maxTokens: 32768,\n temperature: 0.15,\n reasoningEffort: 'high',\n contextWindow: 1000000,\n tierDescription: 'Hội đồng Giám khảo: Qwen 3.8 Max (2.4T Sparse MoE)'\n },\n {\n provider: 'nvidia',\n providerLabel: 'NVIDIA NIM API',\n modelName: 'nvidia/nemotron-3-ultra-550b-a55b:free',\n maxTokens: 32768,\n temperature: 0.15,\n reasoningEffort: 'high',\n contextWindow: 1000000,\n tierDescription: 'Hội đồng Giám khảo Dự phòng: Nemotron 3 Ultra 550B (Miễn phí)'\n }\n ];\n }\n\n /**\n * Builds the multi-provider priority candidates list for a given role/artifact\n */\n public static getCandidatePool(role: string, artifactType?: string): ModelPolicyResolution[] {\n const isJudgeOrReasoning = ['judge', 'agent_as_judge', 'reviewer', 'designer', 'analyst', 'tech_sme'].includes(role.toLowerCase()) ||\n (role === 'content' && artifactType?.toUpperCase() === 'LESSON');\n\n const isFastOrEasyStructured = ['activity', 'assessor', 'illustrator', 'packager', 'polish'].includes(role.toLowerCase()) ||\n ['QUIZ', 'SLIDE', 'ACT', 'WKS', 'EXT'].includes(artifactType?.toUpperCase() || '');\n\n // ── 1. TIER 1: HIGH-END FLAGSHIP & LLM-AS-JUDGE ──\n if (isJudgeOrReasoning) {\n return this.getExpertCouncil();\n }\n\n // ── 3. TIER 3: EASY / FAST STRUCTURED ASSET PRODUCTION ──\n if (isFastOrEasyStructured) {\n return [\n {\n provider: 'nvidia',\n providerLabel: 'NVIDIA NIM API (Free Tier)',\n modelName: 'nvidia/nemotron-3.5-lightning-30b-a3b',\n maxTokens: 32768,\n temperature: 0.2,\n reasoningEffort: 'low',\n contextWindow: 1000000,\n tierDescription: 'Nhiệm vụ dễ / Cấu trúc: Nemotron 3.5 Lightning (Miễn phí)'\n },\n {\n provider: 'deepseek',\n providerLabel: 'DeepSeek API',\n modelName: 'deepseek-v4-flash',\n maxTokens: 32768,\n temperature: 0.2,\n reasoningEffort: 'low',\n contextWindow: 1000000,\n tierDescription: 'Nhiệm vụ cấu trúc kinh tế: DeepSeek V4 Flash ($0.22/1M)'\n },\n {\n provider: 'alibaba',\n providerLabel: 'Alibaba Qwen Cloud',\n modelName: 'qwen3.7-flash',\n maxTokens: 32768,\n temperature: 0.2,\n reasoningEffort: 'low',\n contextWindow: 1000000,\n tierDescription: 'Nhiệm vụ cấu trúc: Qwen 3.7 Flash ($0.03/1M)'\n },\n {\n provider: 'openrouter',\n providerLabel: 'OpenRouter Gateway',\n modelName: 'google/gemini-3.5-flash-lite',\n maxTokens: 32768,\n temperature: 0.2,\n reasoningEffort: 'low',\n contextWindow: 1048576,\n tierDescription: 'Nhiệm vụ cấu trúc: Gemini 3.5 Flash-Lite'\n }\n ];\n }\n\n // ── 2. TIER 2: MID & MID-HIGH PRODUCTION / FRONT-LINE COPILOT ──\n return [\n {\n provider: 'deepseek',\n providerLabel: 'DeepSeek API (Primary Economic)',\n modelName: 'deepseek-v4-flash', // $0.22/1M, 1M context, smart reasoning & tool calling\n maxTokens: 32768,\n temperature: 0.3,\n reasoningEffort: 'medium',\n contextWindow: 1000000,\n tierDescription: 'Nhiệm vụ cấp trung kinh tế: DeepSeek V4 Flash (1M Context)'\n },\n {\n provider: 'alibaba',\n providerLabel: 'Alibaba Qwen Cloud',\n modelName: 'qwen3.7-flash', // $0.03/1M, <400ms\n maxTokens: 32768,\n temperature: 0.3,\n reasoningEffort: 'medium',\n contextWindow: 1000000,\n tierDescription: 'Điều phối & Tool Calling: Qwen 3.7 Flash'\n },\n {\n provider: 'openrouter',\n providerLabel: 'OpenRouter Gateway',\n modelName: 'google/gemini-3.6-flash',\n maxTokens: 32768,\n temperature: 0.3,\n contextWindow: 1048576,\n tierDescription: 'Nhiệm vụ cấp trung cao: Gemini 3.6 Flash'\n },\n {\n provider: 'nvidia',\n providerLabel: 'NVIDIA NIM API (Free Fallback)',\n modelName: 'nvidia/nemotron-3.5-lightning-30b-a3b',\n maxTokens: 32768,\n temperature: 0.3,\n contextWindow: 1000000,\n tierDescription: 'Dự phòng miễn phí: Nemotron 3.5 Lightning'\n }\n ];\n }\n\n /**\n * Resolves the primary model and active fallback chain considering enabled providers\n */\n public static resolve(\n role: string,\n artifactType?: string,\n userPreferredModel?: string,\n enabledProviders: Record<string, boolean> = DEFAULT_ENABLED_PROVIDERS\n ): ModelPolicyResolution {\n const multiResolution = this.resolveMultiProvider(role, artifactType, userPreferredModel, enabledProviders);\n return multiResolution.primary;\n }\n\n /**\n * Resolves full multi-provider resolution with primary, fallbacks, and council\n */\n public static resolveMultiProvider(\n role: string,\n artifactType?: string,\n userPreferredModel?: string,\n enabledProviders: Record<string, boolean> = DEFAULT_ENABLED_PROVIDERS\n ): MultiProviderPolicyResolution {\n const pool = this.getCandidatePool(role, artifactType);\n const expertCouncil = this.getExpertCouncil().filter(c => enabledProviders[c.provider] !== false);\n\n // If user explicitly specified a model in Settings override\n if (userPreferredModel && userPreferredModel !== 'auto') {\n let provider: ModelProviderKey = 'nvidia';\n if (userPreferredModel.includes('deepseek')) provider = 'deepseek';\n else if (userPreferredModel.includes('openrouter') || userPreferredModel.includes('google/')) provider = 'openrouter';\n else if (userPreferredModel.includes('qwen')) provider = 'alibaba';\n else if (userPreferredModel.includes('gemini')) provider = 'google';\n else if (userPreferredModel.includes('glm')) provider = 'zhipu';\n else if (userPreferredModel.includes(':')) provider = 'ollama';\n\n const explicitCandidate: ModelPolicyResolution = {\n provider,\n modelName: userPreferredModel,\n maxTokens: 32768,\n temperature: 0.3,\n contextWindow: 1000000,\n providerLabel: provider.toUpperCase()\n };\n\n const remainingCandidates = pool.filter(c => c.modelName !== userPreferredModel && enabledProviders[c.provider] !== false);\n\n return {\n primary: explicitCandidate,\n fallbacks: remainingCandidates,\n candidateChain: [explicitCandidate, ...remainingCandidates],\n expertCouncil\n };\n }\n\n // Filter candidate list by enabled providers\n const activeCandidates = pool.filter(c => enabledProviders[c.provider] !== false);\n\n // If all configured providers are disabled, fallback to available pool to avoid system failure\n const effectiveCandidates = activeCandidates.length > 0 ? activeCandidates : pool;\n\n const primary = effectiveCandidates[0];\n const fallbacks = effectiveCandidates.slice(1);\n\n return {\n primary,\n fallbacks,\n candidateChain: effectiveCandidates,\n expertCouncil\n };\n }\n}\n","import { auditCurriculumQualityFlow } from './flows/auditCurriculumQualityFlow';\nimport type { ModelResolutionOptions } from './provider-factory';\n\nexport interface JudgeEvaluationResult {\n decision: 'APPROVED' | 'NEEDS_REVISION' | 'REJECTED';\n score: number; // 0 to 100\n passed: boolean;\n evaluatedBy: '@agent-as-judge' | '@heuristic-linter';\n critique: string;\n strengths: string[];\n weaknesses: string[];\n autoRepairInstructions?: string;\n}\n\nexport interface AsyncLLMJudgeInput {\n targetArtifactType: string;\n lessonId: string;\n expectedLanguage: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n generatedContentJson: string;\n /** Verbatim standard statements (canonical ID -> text) from the Standards Registry. */\n standardStatements?: Record<string, string>;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport class LLMJudgeEngine {\n /**\n * Executes genuine LLM-as-Judge evaluation using the audit flow.\n */\n public static async evaluateArtifactWithLLM(input: AsyncLLMJudgeInput): Promise<JudgeEvaluationResult> {\n try {\n const report = await auditCurriculumQualityFlow({\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 modelOptions: input.modelOptions,\n });\n\n const passed = report.overallVerdict === 'PASS' && report.languageAdherencePassed;\n const failedCriteria = report.criteria.filter((c) => !c.passed);\n const passedCriteria = report.criteria.filter((c) => c.passed);\n\n return {\n decision: report.overallVerdict === 'PASS' ? 'APPROVED' : report.overallVerdict === 'NEEDS_REVISION' ? 'NEEDS_REVISION' : 'REJECTED',\n score: report.totalScore,\n passed,\n evaluatedBy: '@agent-as-judge',\n critique: passed\n ? `Học liệu ${input.targetArtifactType} cho bài \"${input.lessonId}\" đạt điểm thẩm định ${report.totalScore}/100. Đủ điều kiện phê duyệt.`\n : `Học liệu ${input.targetArtifactType} chưa đạt yêu cầu: ${failedCriteria.map((c) => c.feedback).join('; ')}`,\n strengths: passedCriteria.map((c) => `${c.name}: ${c.feedback}`),\n weaknesses: failedCriteria.map((c) => `${c.name}: ${c.feedback}`),\n autoRepairInstructions: report.actionableRepairPrompts.length > 0 ? report.actionableRepairPrompts.join('\\n') : undefined,\n };\n } catch (err: any) {\n return {\n decision: 'NEEDS_REVISION',\n score: 50,\n passed: false,\n evaluatedBy: '@agent-as-judge',\n critique: `Lỗi trong quá trình thẩm định LLM: ${err.message || String(err)}`,\n strengths: [],\n weaknesses: ['Không thể hoàn tất thẩm định tự động do sự cố kết nối mô hình.'],\n autoRepairInstructions: 'Chạy lại quy trình thẩm định hoặc kiểm tra cấu hình API keys.',\n };\n }\n }\n\n /**\n * Evaluates Gate 1 (SOT Foundation: LEARNER_PROFILE, PROJECT_BRIEF, REFERENCE_PACK)\n * Calibrated heuristic pre-check.\n */\n public static evaluateGate1(\n learnerProfileMarkdown: string,\n referencePackMarkdown: string\n ): JudgeEvaluationResult {\n if (!learnerProfileMarkdown?.trim() || !referencePackMarkdown?.trim()) {\n return {\n decision: 'REJECTED',\n score: 0,\n passed: false,\n evaluatedBy: '@heuristic-linter',\n critique: 'Tệp SOT rỗng hoặc không tồn tại.',\n strengths: [],\n weaknesses: ['Thiếu nội dung tệp SOT cơ sở.'],\n autoRepairInstructions: 'Khởi tạo và biên soạn đầy đủ LEARNER_PROFILE.md và REFERENCE_PACK.md.'\n };\n }\n\n const hasAgeGroup = /(?:độ tuổi|lứa tuổi|age|grade|thcs|tiểu học|k-12|sinh viên|người đi làm)/i.test(learnerProfileMarkdown);\n const hasPriorKnowledge = /(?:kiến thức nền|nền tảng|prior knowledge|tiên quyết|prerequisite)/i.test(learnerProfileMarkdown);\n const hasGroundTruth = /(?:reference|csta|apple|ieee|cs2023|nguồn tham khảo|tài liệu chuẩn|rfc|w3c)/i.test(referencePackMarkdown);\n const hasClientObjectives = /(?:client objectives|mục tiêu|output|chuẩn đầu ra)/i.test(learnerProfileMarkdown);\n\n let score = 30; // Baseline for non-empty documents\n const strengths: string[] = [];\n const weaknesses: string[] = [];\n\n if (hasAgeGroup) {\n score += 20;\n strengths.push('Hồ sơ người học xác định rõ đối tượng và lứa tuổi mục tiêu.');\n } else {\n weaknesses.push('Thiếu định nghĩa rõ ràng về đối tượng/độ tuổi học viên.');\n }\n\n if (hasPriorKnowledge) {\n score += 20;\n strengths.push('Có phân tích kiến thức nền tảng và rào cản nhận thức.');\n } else {\n weaknesses.push('Chưa làm rõ kiến thức tiên quyết (Prerequisites).');\n }\n\n if (hasGroundTruth) {\n score += 20;\n strengths.push('REFERENCE_PACK trích dẫn tài liệu kỹ thuật chuẩn mực.');\n } else {\n weaknesses.push('Tệp REFERENCE_PACK thiếu danh mục tài liệu tham chiếu chuẩn.');\n }\n\n if (hasClientObjectives) {\n score += 10;\n strengths.push('Có xác định rõ mục tiêu đầu ra và kỳ vọng khách hàng.');\n }\n\n const passed = score >= 80;\n return {\n decision: passed ? 'APPROVED' : (score >= 60 ? 'NEEDS_REVISION' : 'REJECTED'),\n score,\n passed,\n evaluatedBy: '@heuristic-linter',\n critique: passed \n ? 'Bộ tài liệu nền tảng SOT đạt chuẩn cấu trúc. Cho phép chuyển sang Phase 2 (Thiết kế Khung chương trình).'\n : 'Tài liệu SOT cần bổ sung thêm các trường thông tin chuẩn trước khi phân rã bài học.',\n strengths,\n weaknesses,\n autoRepairInstructions: passed ? undefined : 'Bổ sung đầy đủ thông tin lứa tuổi, kiến thức tiên quyết và ít nhất 2 nguồn tài liệu kỹ thuật chuẩn vào REFERENCE_PACK.md.'\n };\n }\n\n /**\n * Evaluates Gate 2 (Curriculum Framework: Units, Modules, Lessons, Bloom Progression)\n */\n public static evaluateGate2(\n frameworkMarkdown: string,\n targetUnitCount: number = 4\n ): JudgeEvaluationResult {\n if (!frameworkMarkdown?.trim()) {\n return {\n decision: 'REJECTED',\n score: 0,\n passed: false,\n evaluatedBy: '@heuristic-linter',\n critique: 'Tệp CURRICULUM_FRAMEWORK.md rỗng.',\n strengths: [],\n weaknesses: ['Thiếu nội dung khung chương trình.'],\n };\n }\n\n const unitMatches = frameworkMarkdown.match(/(?:##\\s+(?:Unit\\s+\\d+|U\\d{2})|\\|\\s*U\\d{2}\\s*:|\\|\\s*Unit\\s+\\d+)/gi) || [];\n const hasBloom = /(?:bloom|nhận biết|thông hiểu|vận dụng|phân tích|đánh giá|sáng tạo|remember|understand|apply|analyze|evaluate|create)/i.test(frameworkMarkdown);\n const has5E = /(?:5e|engage|explore|explain|elaborate|evaluate|pbl|edp|hybrid)/i.test(frameworkMarkdown);\n const hasScopeSequence = /(?:scope & sequence|lộ trình|tiến trình|bài học)/i.test(frameworkMarkdown);\n\n let score = 30;\n const strengths: string[] = [];\n const weaknesses: string[] = [];\n\n if (unitMatches.length >= targetUnitCount) {\n score += 25;\n strengths.push(`Phân rã đủ ${unitMatches.length} Units theo đúng yêu cầu cấu trúc.`);\n } else {\n score += Math.min(20, unitMatches.length * 5);\n weaknesses.push(`Số lượng Unit (${unitMatches.length}) chưa đạt mục tiêu ${targetUnitCount} Units.`);\n }\n\n if (hasBloom) {\n score += 20;\n strengths.push('Có phân bổ thang đo Bloom rõ ràng theo tiến trình nhận thức.');\n } else {\n weaknesses.push('Thiếu ánh xạ mức độ Bloom trong các bài học.');\n }\n\n if (has5E) {\n score += 15;\n strengths.push('Cấu trúc bài học định hướng chuẩn mô hình sư phạm (5E/PBL/EDP).');\n }\n\n if (hasScopeSequence) {\n score += 10;\n strengths.push('Có bảng Scope & Sequence chi tiết.');\n }\n\n const passed = score >= 80;\n return {\n decision: passed ? 'APPROVED' : (score >= 60 ? 'NEEDS_REVISION' : 'REJECTED'),\n score,\n passed,\n evaluatedBy: '@heuristic-linter',\n critique: passed\n ? 'Khung chương trình đạt chuẩn kiến trúc phân rã. Cho phép tiến hành sản xuất học liệu.'\n : 'Cần bổ sung chi tiết cấu trúc bài học, bảng phân rã và mức độ Bloom tương ứng.',\n strengths,\n weaknesses\n };\n }\n\n /**\n * Evaluates a produced Lesson Artifact (LESSON, ACT, QUIZ, SLIDE) with heuristic structure checks\n */\n public static evaluateArtifact(\n artifactType: string,\n content: string,\n lessonTitle: string\n ): JudgeEvaluationResult {\n if (!content?.trim() || content.trim().length < 50) {\n return {\n decision: 'REJECTED',\n score: 0,\n passed: false,\n evaluatedBy: '@heuristic-linter',\n critique: `Nội dung ${artifactType} cho bài \"${lessonTitle}\" quá ngắn hoặc rỗng.`,\n strengths: [],\n weaknesses: ['Học liệu không có nội dung thực tế.'],\n };\n }\n\n let score = 40;\n const strengths: string[] = [];\n const weaknesses: string[] = [];\n\n switch (artifactType.toUpperCase()) {\n case 'LESSON': {\n const phases = [\n { name: 'Engage', regex: /(?:Engage|Khởi động|Warm-up|Hook|Mở đầu)/i },\n { name: 'Explore', regex: /(?:Explore|Khám phá|Demo|Thử nghiệm)/i },\n { name: 'Explain', regex: /(?:Explain|Giải thích|Core Concepts|Lý thuyết)/i },\n { name: 'Elaborate', regex: /(?:Elaborate|Vận dụng|Guided Practice|Independent Practice|Challenge|Thực hành)/i },\n { name: 'Evaluate', regex: /(?:Evaluate|Đánh giá|Wrap-up|Exit Ticket|Tổng kết)/i },\n ];\n let phaseCount = 0;\n for (const p of phases) {\n if (p.regex.test(content)) phaseCount++;\n }\n score += phaseCount * 10;\n if (phaseCount >= 4) {\n strengths.push(`Giáo án bao phủ ${phaseCount}/5 pha của tiến trình 5E.`);\n } else {\n weaknesses.push(`Giáo án chỉ có ${phaseCount}/5 pha 5E.`);\n }\n if (content.length > 500) score += 10;\n break;\n }\n\n case 'ACT': {\n const hasSteps = /(?:bước|step\\s+\\d+|hướng dẫn)/i.test(content);\n const hasCode = /```[\\s\\S]*?```/.test(content);\n const hasObjectives = /(?:mục tiêu|objective|yêu cầu)/i.test(content);\n if (hasSteps) { score += 20; strengths.push('Bài thực hành có quy trình từng bước rõ ràng.'); }\n if (hasCode) { score += 20; strengths.push('Có mã nguồn mẫu/lệnh thực thi minh họa.'); }\n if (hasObjectives) { score += 10; strengths.push('Có xác định mục tiêu thực hành.'); }\n break;\n }\n\n case 'QUIZ': {\n const hasQuestions = /(?:question\\s*\\d+|câu\\s*\\d+|\\?)/i.test(content);\n const hasOptions = /(?:[A-D]\\.|\\\"options\\\")/i.test(content);\n const hasExplanation = /(?:explanation|giải thích|vì sao|đáp án)/i.test(content);\n if (hasQuestions) { score += 20; strengths.push('Có câu hỏi chẩn đoán.'); }\n if (hasOptions) { score += 20; strengths.push('Đầy đủ các lựa chọn đáp án.'); }\n if (hasExplanation) { score += 15; strengths.push('Có phần giải thích đáp án chi tiết.'); }\n break;\n }\n\n case 'SLIDE': {\n const hasMarp = /(?:marp:\\s*true|---\\s*\\n)/i.test(content);\n const slideCount = (content.match(/---\\s*\\n/g) || []).length;\n if (hasMarp) { score += 25; strengths.push('Định dạng tương thích Marp Presentation.'); }\n if (slideCount >= 5) { score += 25; strengths.push(`Bộ slide có dung lượng hợp lý (${slideCount + 1} slides).`); }\n else { weaknesses.push(`Số lượng slide (${slideCount + 1}) còn quá ít.`); }\n break;\n }\n\n default: {\n if (content.length > 200) score += 40;\n break;\n }\n }\n\n const passed = score >= 80;\n return {\n decision: passed ? 'APPROVED' : (score >= 60 ? 'NEEDS_REVISION' : 'REJECTED'),\n score: Math.min(100, score),\n passed,\n evaluatedBy: '@heuristic-linter',\n critique: passed \n ? `Học liệu ${artifactType} cho bài \"${lessonTitle}\" đạt kiểm tra cấu trúc (${score}/100).`\n : `Học liệu ${artifactType} cần hoàn thiện thêm cấu trúc để đạt chuẩn sư phạm (${score}/100).`,\n strengths,\n weaknesses\n };\n }\n}\n\n","import {\n type ChatMessage,\n type StreamRunnerOptions,\n type ChunkType,\n resolveApiKey,\n} from './streamRunner';\nimport { createAiInferenceError } from '../errors';\nimport type { ToolLoopConfig, AggregatedToolCall, ToolExecutionResult } from './toolLoopTypes';\n\nconst PROVIDER_ENDPOINTS: Record<string, string> = {\n openrouter: 'https://openrouter.ai/api/v1/chat/completions',\n deepseek: 'https://api.deepseek.com/chat/completions',\n alibaba: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions',\n nvidia: 'https://integrate.api.nvidia.com/v1/chat/completions',\n};\n\nconst NVIDIA_DEFAULT_MODEL = 'nvidia/nemotron-3-ultra-550b-a55b:free';\n\nfunction resolveProviderRoute(options: StreamRunnerOptions): { provider: string; endpoint: string; apiKey: string; model: string } {\n const openrouterKey = options.openrouterKey?.trim() || (typeof process !== 'undefined' ? process.env.OPENROUTER_API_KEY || '' : '');\n const deepseekKey = options.deepseekKey?.trim() || (typeof process !== 'undefined' ? process.env.DEEPSEEK_API_KEY || '' : '');\n const alibabaKey = options.alibabaKey?.trim() || (typeof process !== 'undefined' ? process.env.ALIBABA_API_KEY || process.env.DASHSCOPE_API_KEY || '' : '');\n const nvidiaKey = options.nvidiaKey?.trim() || (typeof process !== 'undefined' ? process.env.NVIDIA_API_KEY || '' : '');\n const requested = options.model || '';\n\n // Route cùng logic với streamRunner: model id quyết định provider ưu tiên\n if (requested.startsWith('nvidia/') && nvidiaKey) {\n return { provider: 'nvidia', endpoint: PROVIDER_ENDPOINTS.nvidia, apiKey: nvidiaKey, model: requested };\n }\n if (requested.startsWith('deepseek') && deepseekKey) {\n return { provider: 'deepseek', endpoint: PROVIDER_ENDPOINTS.deepseek, apiKey: deepseekKey, model: requested };\n }\n if (requested.startsWith('qwen') && alibabaKey) {\n return { provider: 'alibaba', endpoint: PROVIDER_ENDPOINTS.alibaba, apiKey: alibabaKey, model: requested };\n }\n if (openrouterKey) {\n return { provider: 'openrouter', endpoint: PROVIDER_ENDPOINTS.openrouter, apiKey: openrouterKey, model: requested || '@preset/coding-free' };\n }\n if (deepseekKey) return { provider: 'deepseek', endpoint: PROVIDER_ENDPOINTS.deepseek, apiKey: deepseekKey, model: requested || 'deepseek-chat' };\n if (alibabaKey) return { provider: 'alibaba', endpoint: PROVIDER_ENDPOINTS.alibaba, apiKey: alibabaKey, model: requested || 'qwen3.7-plus' };\n // FALLBACK SAU CÙNG: NVIDIA NIM — nemotron ultra\n if (nvidiaKey) return { provider: 'nvidia', endpoint: PROVIDER_ENDPOINTS.nvidia, apiKey: nvidiaKey, model: NVIDIA_DEFAULT_MODEL };\n throw new Error('No compatible API key for tool-calling chat (need OPENROUTER_API_KEY, DEEPSEEK_API_KEY, ALIBABA_API_KEY or NVIDIA_API_KEY).');\n}\n\n/** Parse SSE stream một turn, trả về { content, toolCalls } — dùng chung parser của streamRunner qua inline impl */\nasync function runTurn(\n endpoint: string,\n model: string,\n apiKey: string,\n messages: Array<{ role: string; content: string | null; tool_calls?: any[]; tool_call_id?: string }>,\n tools: ToolLoopConfig['tools'],\n idleTimeoutMs: number,\n onChunk?: (token: string, type: ChunkType) => void,\n maxTokens = 32768,\n temperature = 0.3,\n): Promise<{ content: string; toolCalls: AggregatedToolCall[] }> {\n const controller = new AbortController();\n let timer: ReturnType<typeof setTimeout> | null = null;\n const arm = () => { if (timer) clearTimeout(timer); timer = setTimeout(() => controller.abort(new Error('Idle timeout')), idleTimeoutMs); (timer as any)?.unref?.(); };\n arm();\n const idle = { signal: controller.signal, kick: arm, dispose: () => { if (timer) clearTimeout(timer); timer = null; } };\n const toolCollector = new Map<string, { id: string; name: string; argsBuffer: string }>();\n\n const res = await fetch(endpoint, {\n method: 'POST',\n headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model,\n messages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true },\n ...(tools.length > 0 ? { tools } : {}),\n }),\n signal: idle.signal,\n });\n if (!res.ok) {\n idle.dispose();\n const body = await res.text().catch(() => '');\n throw new Error(`LLM ${res.status}: ${body.slice(0, 300)}`);\n }\n\n if (!res.body) { idle.dispose(); return { content: '', toolCalls: [] }; }\n const reader = res.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let fullRaw = '';\n let buffer = '';\n let insideThink = 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 const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':') || trimmed === 'data: [DONE]') continue;\n if (!trimmed.startsWith('data: ')) continue;\n try {\n const json = JSON.parse(trimmed.substring(6));\n if (json.usage) {\n const pt = json.usage.prompt_tokens || 0;\n const ct = json.usage.completion_tokens || 0;\n onChunk?.(JSON.stringify({ promptTokens: pt, completionTokens: ct, totalTokens: json.usage.total_tokens || pt + ct, reasoningTokens: 0 }), 'usage');\n }\n const delta = json.choices?.[0]?.delta;\n if (!delta) continue;\n const reasoning = delta.reasoning_content || delta.thought || delta.reasoning || '';\n if (reasoning) onChunk?.(reasoning, 'thought');\n if (delta.tool_calls) {\n onChunk?.(JSON.stringify(delta.tool_calls), 'tool_call');\n for (const tcall of delta.tool_calls) {\n const idx = String(tcall.index ?? tcall.id ?? '0');\n const acc = toolCollector.get(idx) || { id: tcall.id || `call_${idx}`, name: '', argsBuffer: '' };\n if (tcall.id) acc.id = tcall.id;\n if (tcall.function?.name) acc.name += tcall.function.name;\n if (tcall.function?.arguments) acc.argsBuffer += tcall.function.arguments;\n toolCollector.set(idx, acc);\n }\n }\n let content = delta.content || '';\n if (content) {\n fullRaw += content;\n if (content.includes('<think>')) { insideThink = true; const p = content.split('<think>'); if (p[0]) onChunk?.(p[0], 'content'); content = p[1] || ''; }\n if (content.includes('</think>')) { insideThink = false; const p = content.split('</think>'); if (p[0]) onChunk?.(p[0], 'thought'); content = p[1] || ''; }\n if (insideThink) { if (content) onChunk?.(content, 'thought'); }\n else if (content) onChunk?.(content, 'content');\n }\n } catch { /* incomplete chunk */ }\n }\n }\n idle.dispose();\n\n const toolCalls: AggregatedToolCall[] = Array.from(toolCollector.values())\n .filter((c) => c.name)\n .map((c) => ({ id: c.id, name: c.name, arguments: c.argsBuffer || '{}' }));\n return { content: fullRaw, toolCalls };\n}\n\n/**\n * Stream chat CÓ tool-calling (vòng lặp: model → tool → kết quả → model → …).\n * Route qua customToolInference (host AI SDK gateway) khi được truyền — unified\n * tracing mandate. Không có customToolInference:\n * - CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE=1 → fail-loud ERR_CUSTOM_INFERENCE_REQUIRED\n * (raw-fetch routes nằm ngoài biên telemetry của host).\n * - Ngược lại → raw-fetch legacy (OpenRouter/DeepSeek/Alibaba/NVIDIA).\n * Tool error KHÔNG làm chết stream: lỗi được đóng gói gửi lại model để tự xử lý\n * (và được báo qua onToolError cho observability).\n */\nexport async function streamCurriculumAIInferenceWithTools(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions,\n loop: ToolLoopConfig,\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n // ── Unified-tracing mandate (gap #8): customToolInference gateway first ──\n if (options.customToolInference) {\n return runToolLoopWithCustomInference(messages, projectContext, options, loop, onChunk);\n }\n if (resolveApiKey('CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE') === '1') {\n throw createAiInferenceError({\n errorCode: 'ERR_CUSTOM_INFERENCE_REQUIRED',\n message:\n 'customToolInference is REQUIRED (CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE=1): pass buildKitToolInference(...) ' +\n 'so tool-calling turns flow through the host AI SDK gateway and its unified Langfuse tracing. ' +\n 'Raw-fetch tool-loop provider routes are disabled by mandate.',\n rawError: { mandate: 'CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE', hasCustomToolInference: false },\n });\n }\n const route = resolveProviderRoute(options);\n const maxTokens = options.maxTokens ?? 32768;\n const maxRounds = loop.maxRounds ?? 4;\n\n const systemInstruction = `${options.systemPersona || 'You are Curriculum OS Assistant.'}\\n\\nProject Context:\\n${projectContext}\\n\\nGuidelines:\\n1. Answer precisely using the provided tools when they help (project status, deep research, production declaration, gate approval).\\n2. Keep Markdown formatting. Never invent tool results.`;\n\n const convo: Array<{ role: string; content: string | null; tool_calls?: any[]; tool_call_id?: string }> = [\n { role: 'system', content: systemInstruction },\n ...messages.map((m) => ({ role: m.role === 'assistant' || m.role === 'model' ? 'assistant' : 'user', content: m.content })),\n ];\n\n let finalContent = '';\n for (let round = 0; round < maxRounds; round++) {\n let turn: { content: string; toolCalls: AggregatedToolCall[] };\n try {\n turn = await runTurn(route.endpoint, route.model, route.apiKey, convo, loop.tools, 180000, onChunk, maxTokens, options.temperature ?? 0.3);\n } catch (err: any) {\n // Model/provider không hỗ trợ tool-calling (404/400 'tools') → hạ cấp: trả lời không-tools, KHÔNG chết chat\n const msg = String(err?.message || err);\n if (/tool/i.test(msg) && /40[04]|400|not support|invalid/i.test(msg)) {\n console.warn('[toolLoop] provider rejected tools — degrading to plain chat:', msg.slice(0, 120));\n const plain = await runTurn(route.endpoint, route.model, route.apiKey, convo, [], 180000, onChunk, maxTokens, options.temperature ?? 0.3);\n finalContent = plain.content;\n break;\n }\n throw err;\n }\n const { content, toolCalls } = turn;\n if (toolCalls.length === 0) { finalContent = content; break; }\n // Always keep the latest text content so that if this is the final round\n // and the model still emitted tool calls, we don't lose the accompanying text.\n if (content) finalContent = content;\n\n // Model muốn gọi tool — thực thi tuần tự, gộp vào hội thoại\n convo.push({ role: 'assistant', content: content || null, tool_calls: toolCalls.map((t) => ({ id: t.id, type: 'function', function: { name: t.name, arguments: t.arguments } })) });\n for (const call of toolCalls) {\n let parsedArgs: Record<string, unknown> = {};\n try { parsedArgs = JSON.parse(call.arguments || '{}'); } catch { /* model trả args sai JSON */ }\n loop.onToolStart?.(call.name, parsedArgs);\n let resultPayload: unknown;\n let isError = false;\n try {\n resultPayload = await loop.executor(call.name, parsedArgs);\n } catch (err: any) {\n isError = true;\n resultPayload = { error: err?.message || String(err) };\n loop.onToolError?.(call.name, err?.message || String(err));\n }\n const exec: ToolExecutionResult = { toolCallId: call.id, name: call.name, result: resultPayload, isError };\n loop.onToolResult?.(exec);\n convo.push({ role: 'tool', tool_call_id: call.id, content: JSON.stringify(resultPayload).slice(0, 12000) });\n }\n if (round === maxRounds - 1) {\n // Hết vòng: chạy turn cuối KHÔNG tools để model buộc trả lời văn bản\n const last = await runTurn(route.endpoint, route.model, route.apiKey, convo, [], 180000, onChunk, maxTokens, options.temperature ?? 0.3);\n finalContent = last.content;\n }\n }\n return finalContent;\n}\n\n/**\n * Tool loop variant that routes EVERY turn through the host's\n * `customToolInference` gateway (AI SDK → OTel → unified Langfuse trace).\n * Mirrors the raw-fetch loop 1:1: same tool execution ordering, same\n * tool-result envelope, same final no-tools turn, same degrade path when the\n * provider rejects tool definitions (404/400/not supported).\n */\nasync function runToolLoopWithCustomInference(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions,\n loop: ToolLoopConfig,\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n const infer = options.customToolInference!;\n const maxTokens = options.maxTokens ?? 32768;\n const maxRounds = loop.maxRounds ?? 4;\n\n const systemInstruction = `${options.systemPersona || 'You are Curriculum OS Assistant.'}\\n\\nProject Context:\\n${projectContext}\\n\\nGuidelines:\\n1. Answer precisely using the provided tools when they help (project status, deep research, production declaration, gate approval).\\n2. Keep Markdown formatting. Never invent tool results.`;\n\n const convo: Array<{\n role: string;\n content: string | null;\n tool_calls?: Array<{ id: string; type: 'function'; function: { name: string; arguments: string } }>;\n tool_call_id?: string;\n }> = [\n { role: 'system', content: systemInstruction },\n ...messages.map((m) => ({ role: m.role === 'assistant' || m.role === 'model' ? 'assistant' : 'user', content: m.content })),\n ];\n\n let finalContent = '';\n for (let round = 0; round < maxRounds; round++) {\n let turn: { content: string; toolCalls: AggregatedToolCall[] };\n try {\n turn = await infer({ messages: convo, tools: loop.tools, temperature: options.temperature ?? 0.3, maxTokens, onChunk: onChunk ?? (() => {}) });\n } catch (err: any) {\n // Provider không hỗ trợ tool-calling → hạ cấp: trả lời không-tools, KHÔNG chết chat\n const msg = String(err?.message || err);\n if (/tool/i.test(msg) && /40[04]|400|not support|invalid/i.test(msg)) {\n console.warn('[toolLoop] custom gateway rejected tools — degrading to plain chat:', msg.slice(0, 120));\n const plain = await infer({ messages: convo, tools: [], temperature: options.temperature ?? 0.3, maxTokens, onChunk: onChunk ?? (() => {}) });\n finalContent = plain.content;\n break;\n }\n throw err;\n }\n const { content, toolCalls } = turn;\n if (toolCalls.length === 0) { finalContent = content; break; }\n if (content) finalContent = content;\n\n // Model muốn gọi tool — thực thi tuần tự, gộp vào hội thoại (giống raw loop)\n convo.push({ role: 'assistant', content: content || null, tool_calls: toolCalls.map((t) => ({ id: t.id, type: 'function', function: { name: t.name, arguments: t.arguments } })) });\n for (const call of toolCalls) {\n let parsedArgs: Record<string, unknown> = {};\n try { parsedArgs = JSON.parse(call.arguments || '{}'); } catch { /* model trả args sai JSON */ }\n loop.onToolStart?.(call.name, parsedArgs);\n let resultPayload: unknown;\n let isError = false;\n try {\n resultPayload = await loop.executor(call.name, parsedArgs);\n } catch (err: any) {\n isError = true;\n resultPayload = { error: err?.message || String(err) };\n loop.onToolError?.(call.name, err?.message || String(err));\n }\n const exec: ToolExecutionResult = { toolCallId: call.id, name: call.name, result: resultPayload, isError };\n loop.onToolResult?.(exec);\n convo.push({ role: 'tool', tool_call_id: call.id, content: JSON.stringify(resultPayload).slice(0, 12000) });\n }\n if (round === maxRounds - 1) {\n // Hết vòng: turn cuối KHÔNG tools để model buộc trả lời văn bản\n const last = await infer({ messages: convo, tools: [], temperature: options.temperature ?? 0.3, maxTokens, onChunk: onChunk ?? (() => {}) });\n finalContent = last.content;\n }\n }\n return finalContent;\n}"]}
1
+ {"version":3,"sources":["../../src/errors/index.ts","../../src/ai/streamRunner.ts","../../src/ai/provider-factory.ts","../../src/services/templateLoader.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/projectInstructionPrompt.ts","../../src/ai/prompts/selfLabPrompt.ts","../../src/ai/prompts/diagnosticQuizPrompt.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/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/constants/pedagogy.ts","../../src/ai/flows/auditCurriculumQualityFlow.ts","../../src/ai/flows/generateProjectInstructionFlow.ts","../../src/ai/flows/generateSelfLabFlow.ts","../../src/ai/flows/generateDiagnosticQuizFlow.ts","../../src/ai/flows/streamLessonMasterFlow.ts","../../src/ai/flows/streamSelfLabFlow.ts","../../src/ai/flows/streamDiagnosticQuizFlow.ts","../../src/ai/tools/specialistTools.ts","../../src/ai/modelPolicyResolver.ts","../../src/ai/llmJudgeEngine.ts","../../src/ai/chatToolLoop.ts"],"names":["path","fs","createOpenAI","google","createGoogleGenerativeAI","deepseek","createDeepSeek","openai","fileURLToPath","z","generateObject","streamObject"],"mappings":"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","file":"index.cjs","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_CUSTOM_INFERENCE_REQUIRED'\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 | 'ERR_LESSON_NOT_IN_SOT'\n | 'ERR_CONTEXT_MISSING';\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 case 'ERR_CONTEXT_MISSING':\n return 'Thiếu nguồn tri thức bắt buộc (KNOWLEDGE_EXPOSITION hoặc CANONICAL LESSON) theo Dependency Routing Matrix. Vui lòng tạo hoặc đồng bộ tài liệu nguồn trước.';\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 case 'ERR_CONTEXT_MISSING':\n return false;\n default:\n return true;\n }\n}\n\nexport function createContextMissingError(params: {\n artifactType: string;\n missingSource: string;\n lessonId?: string;\n agent?: string;\n}): CurriculumError {\n return new CurriculumError({\n errorCode: 'ERR_CONTEXT_MISSING',\n artifactType: params.artifactType,\n lessonId: params.lessonId,\n agent: params.agent,\n message: `Required context source \"${params.missingSource}\" is missing for artifact \"${params.artifactType}\"`,\n suggestedAction: `Generate or provide the authoritative \"${params.missingSource}\" source before producing \"${params.artifactType}\".`,\n retryable: false\n });\n}\n\n","import { createAiInferenceError } from '../errors';\nimport type { ToolDefinition, AggregatedToolCall } from './toolLoopTypes';\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 /** Thời gian tối đa cho phép không nhận thêm token mới trước khi abort (mặc định 90_000ms = 90s; env ARTIFACT_STREAM_IDLE_TIMEOUT_MS override) */\n idleTimeoutMs?: number;\n /** Thời gian hard cap tối đa cho toàn bộ lượt stream trước khi abort (mặc định 420_000ms = 7 phút) */\n timeoutMs?: number;\n /**\n * Host-provided inference override (Vercel AI SDK gateway, test stubs, …).\n * When set, ALL built-in provider routes (raw-fetch NVIDIA/OpenRouter/\n * DeepSeek/DashScope/Gemini + designated fallback chain) are bypassed and\n * every inference call goes through this function instead. It receives the\n * fully-formed system instruction (persona + project context + guidelines)\n * and the user prompt, plus the same onChunk contract as the built-in\n * routes: stream text deltas via ('content'|'thought'), and report token\n * spend via onChunk(JSON.stringify({ promptTokens, completionTokens,\n * totalTokens, reasoningTokens }), 'usage'). Return the full completion text.\n */\n customInference?: (request: {\n systemInstruction: string;\n userPrompt: string;\n messages: ChatMessage[];\n temperature: number;\n maxTokens: number;\n onChunk: (token: string, type: ChunkType) => void;\n }) => Promise<string>;\n /**\n * Host-provided TOOL-CALLING inference override (unified-tracing mandate,\n * gap #8 audit 2026-09-14). When present, `streamCurriculumAIInferenceWithTools`\n * routes every turn through this gateway instead of its built-in raw-fetch\n * provider routes, so tool-loop calls emit the host's OpenTelemetry spans\n * (unified Langfuse trace). The request carries the FULL conversation\n * (including prior assistant tool_calls and tool results) and the OpenAI-\n * compatible tool definitions; the implementation returns the turn result.\n * Stream text deltas via ('content'|'thought') chunks and report token spend\n * via onChunk(JSON.stringify({ promptTokens, completionTokens, totalTokens,\n * reasoningTokens }), 'usage') — same contract as customInference.\n */\n customToolInference?: (request: {\n messages: Array<{\n role: string;\n content: string | null;\n tool_calls?: Array<{ id: string; type: 'function'; function: { name: string; arguments: string } }>;\n tool_call_id?: string;\n }>;\n tools: ToolDefinition[];\n temperature: number;\n maxTokens: number;\n onChunk: (token: string, type: ChunkType) => void;\n }) => Promise<{ content: string; toolCalls: AggregatedToolCall[] }>;\n}\n\nexport function 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:free,@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 '9router,nvidia,openrouter';\n\n const rawModels =\n resolveApiKey('FALLBACK_AI_MODEL') ||\n resolveApiKey('FALLBACK_AI_MODELS') ||\n resolveApiKey('DEFAULT_AI_MODEL') ||\n 'fast-reasoning,deep-reasoning,mid-range,free-tier';\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 === '9router' || provider === 'ninerouter') {\n providerModels = modelList.filter((m) => ['fast-reasoning', 'deep-reasoning', 'mid-range', 'free-tier'].includes(m));\n if (providerModels.length === 0) {\n providerModels = ['fast-reasoning', 'mid-range', 'free-tier'];\n }\n } else 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:free', '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: '9router', model: 'fast-reasoning' };\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\nexport const DEFAULT_ARTIFACT_STREAM_IDLE_MS = 90_000;\nexport const DEFAULT_ARTIFACT_STREAM_TOTAL_MS = 480_000;\n\nexport interface StreamAbortController {\n signal: AbortSignal;\n /** Reset the idle window (call on every received chunk). */\n kick: () => void;\n /** Clear all pending timers once the request lifecycle is over. */\n dispose: () => void;\n}\n\n/**\n * Budget-aware stream abort controller. Combines an idle window (kicked on\n * every received chunk — covers slow TTFT and hung connections) with a generous\n * total hard cap (defaults to 420s / 7 minutes).\n *\n * Configurable via options or process.env:\n * - ARTIFACT_STREAM_IDLE_TIMEOUT_MS / STREAM_IDLE_TIMEOUT_MS\n * - ARTIFACT_STREAM_TOTAL_TIMEOUT_MS / STREAM_TOTAL_TIMEOUT_MS\n */\nexport function createStreamAbortController(options?: { idleMs?: number; totalMs?: number }): StreamAbortController {\n const envIdle = Number(process.env.ARTIFACT_STREAM_IDLE_TIMEOUT_MS || process.env.STREAM_IDLE_TIMEOUT_MS);\n const envTotal = Number(process.env.ARTIFACT_STREAM_TOTAL_TIMEOUT_MS || process.env.STREAM_TOTAL_TIMEOUT_MS);\n\n const idleMs = Number.isFinite(options?.idleMs) && (options!.idleMs! > 0)\n ? options!.idleMs!\n : (Number.isFinite(envIdle) && envIdle > 0 ? envIdle : DEFAULT_ARTIFACT_STREAM_IDLE_MS);\n\n const totalMs = Number.isFinite(options?.totalMs) && (options!.totalMs! > 0)\n ? options!.totalMs!\n : (Number.isFinite(envTotal) && envTotal > 0 ? envTotal : DEFAULT_ARTIFACT_STREAM_TOTAL_MS);\n\n const controller = new AbortController();\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n let totalTimer: ReturnType<typeof setTimeout> | null = null;\n\n const armIdle = () => {\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = setTimeout(\n () => controller.abort(new Error(`Idle timeout: no data for ${Math.round(idleMs / 1000)}s`)),\n idleMs\n );\n (idleTimer as any)?.unref?.();\n };\n armIdle();\n\n if (totalMs > 0) {\n totalTimer = setTimeout(\n () => controller.abort(new Error(`Total stream timeout after ${Math.round(totalMs / 1000)}s`)),\n totalMs\n );\n (totalTimer as any)?.unref?.();\n }\n\n return {\n signal: controller.signal,\n kick: armIdle,\n dispose: () => {\n if (idleTimer) clearTimeout(idleTimer);\n if (totalTimer) clearTimeout(totalTimer);\n idleTimer = null;\n totalTimer = null;\n }\n };\n}\n\n/** Backward-compatible alias */\nexport function createIdleAbortController(idleMs?: number, totalMs?: number): StreamAbortController {\n return createStreamAbortController({ idleMs, totalMs });\n}\nexport type IdleAbort = StreamAbortController;\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 // ── Route 0: Host-provided inference override (Vercel AI SDK gateway, …) ──\n // When the embedding app supplies customInference, it is the SOLE inference\n // path: the raw-fetch provider routes below never run, so host apps that\n // mandate a gateway (e.g. Vercel AI SDK) get exactly one auditable engine.\n if (options.customInference) {\n try {\n const text = await options.customInference({\n systemInstruction,\n userPrompt: messages.map(m => m.content).join('\\n\\n'),\n messages,\n temperature,\n maxTokens,\n onChunk: onChunk ?? (() => {}),\n });\n if (text && text.trim()) return text;\n throw createAiInferenceError({\n errorCode: 'ERR_AI_ALL_PROVIDERS_FAILED',\n message: 'customInference returned empty output',\n rawError: { customInference: 'empty response' }\n });\n } catch (e: any) {\n if (e?.errorCode || e?.name === 'AiInferenceError') throw e;\n throw createAiInferenceError({\n errorCode: 'ERR_AI_ALL_PROVIDERS_FAILED',\n message: `customInference failed: ${e?.message || e}`,\n rawError: { customInference: String(e?.message || e) }\n });\n }\n }\n\n // ── Unified-tracing mandate (2026-09-14): fail LOUD on silent bypass ──\n // The embedding app routes every LLM call through its own gateway\n // (customInference → Vercel AI SDK → OpenTelemetry → Langfuse). The raw-fetch\n // routes below are OUTSIDE that telemetry boundary: a call site that forgets\n // to pass customInference used to fall through here silently, producing\n // untraceable generations. When the host mandates gateway-only inference\n // (CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE=1), refuse to run raw instead of\n // silently bypassing the unified tracing mechanism.\n if (!options.customInference && resolveApiKey('CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE') === '1') {\n throw createAiInferenceError({\n errorCode: 'ERR_CUSTOM_INFERENCE_REQUIRED',\n message:\n 'customInference is REQUIRED (CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE=1): pass buildKitCustomInference(...) ' +\n 'so every LLM call flows through the host AI SDK gateway and its unified Langfuse tracing. ' +\n 'Raw-fetch provider routes are disabled by mandate.',\n rawError: { mandate: 'CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE', hasCustomInference: false },\n });\n }\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 || 'fast-reasoning';\n const isNvidiaPreferred = requestedModel.startsWith('nvidia/') || (Boolean(nvidiaKey && !openrouterKey) && isProviderEnabled('nvidia'));\n\n // ── Route 0: 9Router Gateway ──\n const ninerouterKey = resolveApiKey('NINEROUTER_API_KEY') || resolveApiKey('NINE_ROUTER_API_KEY');\n if (ninerouterKey && isProviderEnabled('9router')) {\n const rawUrl = resolveApiKey('NINEROUTER_BASE_URL') || resolveApiKey('NINE_ROUTER_BASE_URL') || 'https://ai-router.orchable.app/v1';\n const ninerouterBaseUrl = rawUrl.replace(/^[\"']|[\"']$/g, '').replace(/\\/$/, '');\n const candidateModels = [\n options.model || 'fast-reasoning',\n 'fast-reasoning',\n 'mid-range',\n 'free-tier',\n ].filter(m => isModelAllowed(m));\n const unique9RouterModels = Array.from(new Set(candidateModels));\n\n for (const model of unique9RouterModels) {\n try {\n // 2026-09-14 (SLIDE idle audit): 45s was tuned for chat-sized prompts.\n // SLIDE cluster prompts run 30k+ chars and the gateway can think for\n // >45s BEFORE the first token, so the budget aborted healthy streams\n // (\"Idle timeout: no data for 45s\"). Honor options.idleTimeoutMs /\n // env like every other route, falling back to the same 90s default.\n const r9Idle = options.idleTimeoutMs\n ?? (Number(process.env.ARTIFACT_STREAM_IDLE_TIMEOUT_MS || process.env.STREAM_IDLE_TIMEOUT_MS) || 0)\n ?? 0;\n const r9Total = options.timeoutMs\n ?? (Number(process.env.ARTIFACT_STREAM_TOTAL_TIMEOUT_MS || process.env.STREAM_TOTAL_TIMEOUT_MS) || 0)\n ?? 0;\n const idle = createStreamAbortController({\n idleMs: r9Idle > 0 ? r9Idle : 90_000,\n totalMs: r9Total > 0 ? r9Total : 300_000,\n });\n const res = await fetch(`${ninerouterBaseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${ninerouterKey}`,\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 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[`9router_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`9router_${model}`] = e?.message || 'Network error';\n console.warn(`[9Router Stream] Failover for ${model}:`, e?.message || e);\n }\n }\n }\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:free',\n 'nvidia/nemotron-3-ultra-550b-a55b:free',\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 nvdIdle = options.idleTimeoutMs ?? 180_000;\n const nvdTotal = options.timeoutMs ?? 600_000;\n const idle = createStreamAbortController({ idleMs: nvdIdle, totalMs: nvdTotal });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 // ── 9Router designated fallback ──\n // 2026-09-14 (9Router-only mandate): the loop previously had NO branch\n // for provider '9router', so a 9router-only chain iterated without ever\n // attempting a call and providerErrors stayed {} — masking the real\n // failure as \"Chi tiết: {}\". This branch makes the designated fallback\n // actually call the gateway (OpenAI-compatible SSE, same as Route 0).\n if ((provider === '9router' || provider === 'ninerouter') && ninerouterKey && isProviderEnabled('9router')) {\n try {\n const rawUrl = resolveApiKey('NINEROUTER_BASE_URL') || resolveApiKey('NINE_ROUTER_BASE_URL') || 'https://ai-router.orchable.app/v1';\n const fbBaseUrl = rawUrl.replace(/[\"']/g, '').replace(/\\/$/, '');\n // Same SLIDE idle-audit fix as Route 0: honor options/env instead of\n // a hardcoded 45s that aborted healthy long-prompt streams.\n const fbIdle = options.idleTimeoutMs\n ?? (Number(process.env.ARTIFACT_STREAM_IDLE_TIMEOUT_MS || process.env.STREAM_IDLE_TIMEOUT_MS) || 0)\n ?? 0;\n const fbTotal = options.timeoutMs\n ?? (Number(process.env.ARTIFACT_STREAM_TOTAL_TIMEOUT_MS || process.env.STREAM_TOTAL_TIMEOUT_MS) || 0)\n ?? 0;\n const idle = createStreamAbortController({\n idleMs: fbIdle > 0 ? fbIdle : 90_000,\n totalMs: fbTotal > 0 ? fbTotal : 300_000,\n });\n const res = await fetch(`${fbBaseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${ninerouterKey}`,\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 if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] ✅ Designated fallback 9Router (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_9router_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_9router_${model}`] = e?.message || 'Network error';\n }\n } else if (provider === 'nvidia' && nvidiaKey && isProviderEnabled('nvidia')) {\n try {\n const nvdIdle = options.idleTimeoutMs ?? 180_000;\n const nvdTotal = options.timeoutMs ?? 600_000;\n const idle = createStreamAbortController({ idleMs: nvdIdle, totalMs: nvdTotal });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs });\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 = createStreamAbortController({ idleMs: options.idleTimeoutMs, totalMs: options.timeoutMs }); 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, resolveApiKey } from './streamRunner';\n\n/**\n * 9Router's NON-STREAMING responses glue a literal `data: [DONE]` marker\n * right after the JSON object — the AI SDK then fails JSON.parse and throws\n * \"Invalid JSON response\" (AI_JSONParseError) on every generateText /\n * generateObject call. Streaming paths are unaffected (the SDK treats the\n * marker as a valid stream terminator).\n *\n * This fetch wrapper repairs non-streaming bodies (strip the trailing\n * marker; reassemble a full SSE body returned to a non-streaming call into\n * one JSON completion) and passes streaming calls (`\"stream\":true`) through\n * untouched so live SSE chunk streams are never buffered/collapsed.\n */\nfunction cleanNonStreamingFetch(): typeof fetch {\n return async (input, init) => {\n const res = await fetch(input, init);\n let wantsStream = false;\n try {\n const body = init?.body;\n if (typeof body === 'string') wantsStream = /\"stream\"\\s*:\\s*true/.test(body);\n } catch {}\n if (wantsStream) return res;\n const contentType = res.headers.get('content-type') || '';\n if (!contentType.includes('text/event-stream') && !contentType.includes('application/json')) return res;\n const text = await res.text();\n const trimmed = text.trim();\n if (trimmed.startsWith('data:')) {\n let content = '';\n let lastChunk: any = null;\n for (const line of trimmed.split('\\n')) {\n const l = line.trim();\n if (!l || !l.startsWith('data:')) continue;\n const jsonStr = l.slice(5).trim();\n if (jsonStr === '[DONE]') continue;\n try {\n const chunk = JSON.parse(jsonStr);\n lastChunk = chunk;\n content += chunk.choices?.[0]?.delta?.content || '';\n } catch {}\n }\n const assembled = {\n id: lastChunk?.id || 'chatcmpl-' + Date.now(),\n object: 'chat.completion',\n created: lastChunk?.created || Math.floor(Date.now() / 1000),\n model: lastChunk?.model || '9router',\n choices: [{ index: 0, message: { role: 'assistant', content }, finish_reason: 'stop' }],\n usage: lastChunk?.usage || undefined,\n };\n const headers = new Headers(res.headers);\n headers.set('content-type', 'application/json');\n return new Response(JSON.stringify(assembled), { status: res.status, statusText: res.statusText, headers });\n }\n const doneIndex = text.indexOf('data: [DONE]');\n if (doneIndex === -1) return res;\n return new Response(text.slice(0, doneIndex).trim(), { status: res.status, statusText: res.statusText, headers: res.headers });\n };\n}\n\nexport type AIProviderName = '9router' | 'ninerouter' | '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 '9router': 'fast-reasoning',\n ninerouter: 'fast-reasoning',\n nvidia: 'nvidia/nemotron-3-ultra-550b-a55b:free',\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:free',\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 === '9router' || (provider as string) === 'ninerouter') {\n const apiKey = options.apiKey || resolveApiKey('NINEROUTER_API_KEY') || resolveApiKey('NINE_ROUTER_API_KEY') || '';\n const rawUrl = options.baseURL || resolveApiKey('NINEROUTER_BASE_URL') || resolveApiKey('NINE_ROUTER_BASE_URL') || 'https://ai-router.orchable.app/v1';\n const ninerouter = createOpenAI({\n apiKey,\n baseURL: rawUrl.replace(/^[\"']|[\"']$/g, '').trim(),\n fetch: cleanNonStreamingFetch(),\n });\n return ninerouter.chat(resolvedModelName || 'fast-reasoning');\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:free');\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.NINEROUTER_API_KEY || resolveApiKey('NINEROUTER_API_KEY') || resolveApiKey('NINE_ROUTER_API_KEY')) && isProviderEnabled('9router')) {\n return '9router';\n }\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 fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\n/**\n * P52/P53 — Runtime artifact-template loading (single source of truth).\n *\n * Restores the curriculum-mcp architecture that was lost when prompt\n * skeletons were retyped as hardcoded strings inside\n * `lessonProductionService.ts` (the \"mandated duplication\" regression):\n * - artifact structure lives in template .md files, loaded at RUNTIME;\n * - methodology directives stay in the prompt-builder;\n * - project-local `_templates/` may override any template (MCP parity).\n *\n * P53 rev3 (echo model): a template file = YAML frontmatter (system-owned\n * cached echo: `template_language`, `template_required_sections`) + fill-in\n * body. The BODY headings are the single source of structure — the\n * frontmatter list is regenerated mechanically (assembleTranslatedTemplate /\n * editor save), never hand-maintained.\n *\n * Heading standard (H1–H3 only; H4+ do not exist):\n * - every heading is REQUIRED by default → the `[REQUIRED]` marker is\n * stripped everywhere (bundled + baked + generated artifacts);\n * - `[OPTIONAL]` → still a heading, but excluded from the echo/contract;\n * - `[CONDITIONAL]` → required echo + exposed as semantic metadata;\n * - a heading containing a VARIABLE part (`{{placeholder}}` or bracket\n * `[guidance]`) is not a section at all — it is an instance/guidance\n * header (Q1, Challenge 1, Term Name, phase timing) → excluded from the\n * echo. Static durations belong on a `**Duration:**` line under the\n * heading, never inside it.\n */\n\nexport interface ResolvedTemplate {\n /** Fill-in body (frontmatter + leading HTML comments stripped). */\n content: string;\n /**\n * P53 rev3 — mechanical echo of the template BODY headings (H2/H3, static\n * text only, `[OPTIONAL]` excluded, markers/ordinals stripped). This IS the\n * contract; the frontmatter list is just its cached copy.\n */\n sections: string[];\n /** Headings explicitly marked `[OPTIONAL]` (excluded from `sections`). */\n optionalSections: string[];\n /** Absolute path the template was loaded from (telemetry / debugging). */\n sourcePath: string;\n /**\n * P53 — canonical sections carrying a `[CONDITIONAL]` marker in the body.\n */\n conditionals: string[];\n /**\n * P53 — declared authoring language of the template body\n * (`template_language:` frontmatter, default \"en\"). \"en\" = bundled source;\n * anything else = translated project copy (bake-aware regime downstream).\n */\n declaredLang: string;\n}\n\n/**\n * Strip YAML frontmatter from a template document.\n * NOTE: HTML comments are intentionally preserved — some templates embed\n * semantic markers (e.g. ACT's `<!-- [HARDWARE_BOM] -->`) that downstream\n * extraction pipelines depend on. Only frontmatter is noise here.\n */\nexport function stripTemplateFrontmatter(raw: string): string {\n let body = raw;\n if (body.startsWith('---')) {\n const end = body.indexOf('\\n---', 3);\n if (end !== -1) body = body.slice(end + 4);\n }\n return body\n .split('\\n')\n .filter((l) => l.trim() !== '<!-- INJECT_BODY -->')\n .join('\\n')\n .replace(/^\\s*\\n/, '')\n .trimEnd();\n}\n\n/**\n * Legacy reader for the `template_required_sections:` YAML list (the cached\n * echo). Kept for app-side consumers reading artifact frontmatter; the kit\n * itself now derives structure from the body (extractEchoSections).\n */\nexport function extractRequiredSections(raw: string): string[] | null {\n const lines = raw.split('\\n');\n const start = lines.findIndex((l) => /^template_required_sections:\\s*$/.test(l.trim()));\n if (start === -1) return null;\n const items: string[] = [];\n for (let i = start + 1; i < lines.length; i++) {\n const line = lines[i] ?? '';\n if (line.trim() === '') continue;\n if (!/^\\s+-\\s/.test(line)) break; // next top-level key → stop\n items.push(line.trim().replace(/^-\\s+/, '').replace(/^[\"']|[\"']$/g, ''));\n }\n return items.length > 0 ? items : null;\n}\n\n/**\n * P53 — canonical heading key: strips contract markers AND ordinal prefixes\n * so `### 1. Learning Objectives & Evidence` and `1) Learning Objectives…`\n * both normalize to the same key. Users may renumber headings without\n * breaking matching.\n */\nexport function stripHeadingKey(h: string): string {\n return h\n .replace(/\\[(REQUIRED|OPTIONAL|CONDITIONAL)\\]\\s*/gi, '')\n .replace(/^\\s*\\d+[.)]\\s+/, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n/** A heading with any variable part is an instance/guidance header, not a section. */\nfunction isVariableHeading(text: string): boolean {\n return /\\{\\{[^}]*\\}\\}/.test(text) || /\\[[^\\]]+\\]/.test(text);\n}\n\ninterface CollectedHeading {\n level: number; // 2 | 3\n name: string; // stripped key\n optional: boolean;\n}\n\n/** Fence-aware H2/H3 collector implementing the P53 heading standard. */\nfunction collectHeadings(body: string): CollectedHeading[] {\n const out: CollectedHeading[] = [];\n let inFence = false;\n for (const line of body.split('\\n')) {\n if (/^(```|~~~)/.test(line.trim())) {\n inFence = !inFence;\n continue;\n }\n if (inFence) continue; // `# comment` inside a code block is not a heading\n const m = line.match(/^(#{2,3})\\s+(.*)$/);\n if (!m) continue;\n const text = m[2].trim();\n const optional = /^\\[OPTIONAL\\]/i.test(text);\n const name = stripHeadingKey(text);\n if (!name || isVariableHeading(name)) continue; // Rule 1+2: variable → not a section\n out.push({ level: m[1].length, name, optional });\n }\n return out;\n}\n\n/**\n * P53 rev3 — the contract echo of a template/artifact document: required\n * sections (default) and explicitly-optional ones, straight from the body.\n */\nexport function extractEchoSections(raw: string): { required: string[]; optional: string[] } {\n const hs = collectHeadings(stripTemplateFrontmatter(raw));\n return {\n required: hs.filter((h) => !h.optional).map((h) => h.name),\n optional: hs.filter((h) => h.optional).map((h) => h.name),\n };\n}\n\n/** P53 — canonical sections carrying a `[CONDITIONAL]` marker in the body. */\nexport function extractConditionalSections(raw: string): string[] {\n const body = stripTemplateFrontmatter(raw);\n return body\n .split('\\n')\n .filter((l) => /^#{2,3} .*\\[CONDITIONAL\\]/i.test(l))\n .map((l) => stripHeadingKey(l.replace(/^#{2,3}\\s*/, '').trim()))\n .filter((s) => s.length > 0 && !isVariableHeading(s));\n}\n\n/** P53 — `template_language:` frontmatter value (default \"en\"). */\nexport function extractDeclaredLanguage(raw: string): string {\n const m = raw.match(/^template_language:\\s*[\"']?([a-zA-Z-]+)[\"']?\\s*$/m);\n return m?.[1]?.toLowerCase() || 'en';\n}\n\nconst KIT_TEMPLATE_FALLBACK_DIRS = [\n // Packaged with the npm bundle (dist/templates) — resolves from node_modules.\n 'templates',\n // Repo checkout layouts.\n 'docs/refs/templates',\n];\n\n// ESM/CJS-safe directory of this module (kit is ESM; tsup CJS build has __dirname).\nconst _moduleDir = (() => {\n try {\n if (typeof import.meta !== 'undefined' && typeof import.meta.url === 'string') {\n return path.dirname(fileURLToPath(import.meta.url));\n }\n } catch {\n // CJS build falls through to __dirname below.\n }\n return typeof __dirname !== 'undefined' ? __dirname : process.cwd();\n})();\n\nfunction candidateDirs(explicitDir?: string): string[] {\n const dirs: string[] = [];\n if (explicitDir) dirs.push(explicitDir);\n if (process.env.CURRICULUM_TEMPLATES_DIR) dirs.push(process.env.CURRICULUM_TEMPLATES_DIR);\n // Project-local override, matching curriculum-mcp's resolve order.\n dirs.push(path.resolve(process.cwd(), '_templates'));\n for (const rel of KIT_TEMPLATE_FALLBACK_DIRS) {\n dirs.push(path.resolve(_moduleDir, rel));\n dirs.push(path.resolve(process.cwd(), rel));\n dirs.push(path.resolve(process.cwd(), 'packages/curriculum-kit', rel));\n }\n return dirs;\n}\n\nfunction findTemplatePath(templateName: string, explicitDir?: string): string | null {\n for (const dir of candidateDirs(explicitDir)) {\n const p = path.join(dir, templateName);\n if (!fs.existsSync(p)) continue;\n try {\n fs.accessSync(p, fs.constants.R_OK);\n return p;\n } catch {\n // unreadable → try next candidate\n }\n }\n // ponytail: fail-open by design — callers degrade to inline scaffolding\n // (pre-P52 contract). Missing templates log nothing here to avoid per-call\n // noise in production streams; upgrade path: emit a one-shot warn per name.\n return null;\n}\n\n/**\n * Resolve a canonical template by file name. First existing candidate wins:\n * explicit dir → CURRICULUM_TEMPLATES_DIR → <cwd>/_templates → packaged\n * dist/templates → repo docs/refs/templates. Returns null when unresolvable\n * (callers fall back to inline scaffolding, same contract as before).\n */\nexport function resolveArtifactTemplate(\n templateName: string,\n opts?: { templatesDir?: string }\n): ResolvedTemplate | null {\n const p = findTemplatePath(templateName, opts?.templatesDir);\n if (!p) return null;\n try {\n const raw = fs.readFileSync(p, 'utf-8');\n const echo = extractEchoSections(raw);\n return {\n content: stripTemplateFrontmatter(raw),\n sections: echo.required,\n optionalSections: echo.optional,\n sourcePath: p,\n conditionals: extractConditionalSections(raw),\n declaredLang: extractDeclaredLanguage(raw),\n };\n } catch {\n return null;\n }\n}\n\n/** AI runner contract for template translation (injected — kit stays provider-agnostic). */\nexport type TemplateTranslateRunner = (prompt: string) => Promise<string>;\n\nexport interface AssembledTemplate {\n /** Full document: REGENERATED frontmatter echo + translated body. */\n raw: string;\n /** Contract echo of the translated body (= the regenerated FM list). */\n sections: string[];\n templateLanguage: string;\n}\n\n/**\n * P53 rev3 — assemble a project template copy from an AI-translated BODY.\n * The frontmatter is never AI-edited: it is regenerated mechanically —\n * `template_language` stamp + `template_required_sections` echoed from the\n * translated headings (the body is the single source; the FM list follows it).\n *\n * Structural verification: heading count, order, and levels must survive\n * translation 1:1 (required AND optional). Any drift → null; the caller\n * falls back to the bundled English template rather than shipping a broken\n * contract. `{{placeholder}}` / marker preservation is verified here too.\n */\nexport function assembleTranslatedTemplate(\n templateName: string,\n translatedBody: string,\n targetLanguage: string,\n opts?: { templatesDir?: string }\n): AssembledTemplate | null {\n const raw = loadCurriculumTemplate(templateName, opts?.templatesDir);\n if (!raw || !translatedBody?.trim()) return null;\n\n const base = collectHeadings(stripTemplateFrontmatter(raw));\n const out = collectHeadings(translatedBody);\n if (base.length !== out.length) return null; // section lost or invented\n for (let i = 0; i < base.length; i++) {\n if (base[i].level !== out[i].level || base[i].optional !== out[i].optional) return null;\n }\n\n // `{{placeholder}}` and semantic markers must survive verbatim.\n const srcBody = stripTemplateFrontmatter(raw);\n for (const ph of new Set(srcBody.match(/\\{\\{[^}]+\\}\\}/g) ?? [])) {\n if (!translatedBody.includes(ph)) return null;\n }\n for (const mk of new Set(srcBody.match(/<!--\\s*\\[\\/?[^\\]]+\\]\\s*-->/g) ?? [])) {\n if (!translatedBody.includes(mk)) return null;\n }\n\n const lang = targetLanguage.trim().toLowerCase() || 'en';\n const req = out.filter((h) => !h.optional).map((h) => h.name);\n // Frontmatter (original fields preserved, echo + language re-stamped) is\n // re-attached to the TRANSLATED body — the original English body is dropped.\n let fmRaw = '';\n if (raw.startsWith('---')) {\n const end = raw.indexOf('\\n---', 3);\n if (end !== -1) fmRaw = raw.slice(0, end + 4);\n }\n const fm = stampEchoOnFrontmatter(fmRaw || '---\\n---', lang, req);\n return { raw: `${fm}\\n${translatedBody.trimStart()}`, sections: req, templateLanguage: lang };\n}\n\n/**\n * System-owned frontmatter update: keep every original field verbatim, only\n * replace the `template_required_sections` echo (regenerated from the body)\n * and stamp `template_language`. A template without frontmatter gets a block.\n */\nfunction stampEchoOnFrontmatter(rawDoc: string, lang: string, sections: string[]): string {\n const echoLines = ['template_language: \"' + lang + '\"', 'template_required_sections:', ...sections.map((n) => ` - \"${n.replace(/\"/g, '\\\\\"')}\"`)];\n if (rawDoc.startsWith('---')) {\n const lines = rawDoc.split('\\n');\n const closeIdx = lines.findIndex((l, i) => i > 0 && l.trim() === '---');\n if (closeIdx === -1) {\n // malformed FM → regenerate a minimal block (frontmatter fields lost is\n // better than a file whose FM leaks into prompts).\n return ['---', ...echoLines, '---', '', stripTemplateFrontmatter(rawDoc)].join('\\n');\n }\n // Drop a previous stamp/echo (idempotent) INCLUDING the old list's child\n // lines — filtering only the key line would orphan its ` - ` items.\n const kept: string[] = [];\n let skippingList = false;\n for (const l of lines.slice(0, closeIdx)) {\n const t = l.trim();\n if (/^template_required_sections:$/.test(t)) {\n skippingList = true;\n continue;\n }\n if (/^template_language:/.test(t)) continue;\n if (skippingList) {\n if (/^\\s+-\\s/.test(l)) continue;\n skippingList = false;\n }\n kept.push(l);\n }\n return [...kept, ...echoLines, '---', ...lines.slice(closeIdx + 1)].join('\\n');\n }\n return ['---', ...echoLines, '---', '', rawDoc].join('\\n');\n}\n\n/**\n * P53 — full-body template translation (AI, once per language + content hash;\n * caching is the caller's job). The kit stays language-neutral: bundled\n * templates are never translated in-repo.\n *\n * Pipeline: split frontmatter (never sent to AI) → prompt the runner with\n * preservation rules → assembleTranslatedTemplate regenerates the frontmatter\n * echo and structurally verifies the result. Returns null on any violation;\n * the caller falls back to the bundled English template.\n */\nexport async function translateTemplate(\n templateName: string,\n targetLanguage: string,\n runner: TemplateTranslateRunner,\n opts?: { templatesDir?: string }\n): Promise<AssembledTemplate | null> {\n const raw = loadCurriculumTemplate(templateName, opts?.templatesDir);\n if (!raw) return null;\n\n const body = stripTemplateFrontmatter(raw);\n const placeholders = Array.from(new Set(body.match(/\\{\\{[^}]+\\}\\}/g) ?? []));\n const markers = Array.from(new Set(body.match(/<!--\\s*\\[\\/?[^\\]]+\\]\\s*-->/g) ?? []));\n\n const prompt = `Translate the following Markdown artifact TEMPLATE body into ${targetLanguage}.\nSTRICT PRESERVATION RULES (violating any of these invalidates the output):\n1. Keep the document structure EXACTLY: same number of headings, same order, same heading levels (## / ###).\n2. Translate heading TEXT naturally, but a heading must remain a single static line: move nothing into or out of it. Headings never contain durations or placeholders — if a source heading carries \"[X mins]\"-style timing, the timing belongs on the line below the heading, not inside it.\n3. Keep every placeholder token VERBATIM (do not translate or alter), including {{ XX }}-style duration tokens: ${placeholders.join(' ') || '(none)'}\n4. Keep every HTML comment marker VERBATIM: ${markers.join(' ') || '(none)'}\n5. Keep code blocks, file paths, technical identifiers (API names, protocols, component models) untranslated.\n6. Translate ONLY natural-language prose, headings, and table headers into natural ${targetLanguage}.\n7. Output ONLY the translated markdown — no explanations, no code fences around the whole document.\n\nTEMPLATE BODY:\n${body}`;\n\n let translatedBody: string;\n try {\n translatedBody = await runner(prompt);\n } catch {\n return null;\n }\n if (!translatedBody || translatedBody.length < body.length * 0.4) return null;\n translatedBody = translatedBody.trim().replace(/^```(?:markdown)?\\n/, '').replace(/\\n```$/, '');\n\n return assembleTranslatedTemplate(templateName, translatedBody, targetLanguage, opts);\n}\n\n/**\n * Legacy raw-content lookup retained for existing callers\n * (`singleArtifactService`, SLIDE workflow). Returns the file verbatim —\n * frontmatter included, byte-compatible with the pre-P52 helper it replaces.\n * Empty string = not found.\n */\nexport function loadCurriculumTemplate(templateName: string, templatesDir?: string): string {\n const p = findTemplatePath(templateName, templatesDir);\n if (!p) return '';\n try {\n return fs.readFileSync(p, 'utf-8');\n } catch {\n return '';\n }\n}\n\n/**\n * Frontmatter-stripped lookup for JSON-first authoring builders\n * (`ai/prompts/*`) that embed the template in a prompt as a structural\n * alignment reference. Prompt-embedded noise (frontmatter) is stripped so\n * the LLM sees only the fill-in skeleton. Empty string = not found.\n */\nexport function loadAuthoringTemplate(templateName: string, templatesDir?: string): string {\n const p = findTemplatePath(templateName, templatesDir);\n if (!p) return '';\n try {\n return stripTemplateFrontmatter(fs.readFileSync(p, 'utf-8'));\n } catch {\n return '';\n }\n}\n","import type { MilestoneInput } from '../../schemas';\nimport { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('LESSON_5E_template.md') ?? '[TEMPLATE FILE NOT FOUND: LESSON_5E_template.md]'}\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 { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('ACT_template.md') ?? '[TEMPLATE FILE NOT FOUND: ACT_template.md]'}\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 { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('LAB_TEMPLATE.md') ?? '[TEMPLATE FILE NOT FOUND: LAB_TEMPLATE.md]'}\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\nexport const SLIDE_CANONICAL_METHODOLOGY = `\nMANDATORY 12-14 SLIDE MICRO-CYCLE STRUCTURE (Delimited by '---'):\n1. **Slide 1 [Title & Mission]:** Real-world inquiry hook and overarching build mission\n2. **Slide 2 [Agenda & Roadmap]:** Timing and milestone breakdown table\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 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`.trim();\n\nexport interface MarpMarkdownSlidePromptInput {\n lessonCode: string;\n lessonTitle: string;\n pedagogyLabel: string;\n templateScaffold: string;\n languageDirective: string;\n headingDirective: string;\n}\n\nexport function buildMarpMarkdownSlidePrompt(input: MarpMarkdownSlidePromptInput): string {\n return `You are @illustrator & @content (Pedagogical Slide Deck Presentation Specialists).\nBased on Master Lesson Plan \\`LESSON_${input.lessonCode}.md\\`, lesson context, and the MARP SLIDE TEMPLATE below, author the complete, highly engaging Marp presentation deck: \\`SLIDE_${input.lessonCode}.md\\`.\n\n[MARP SLIDE TEMPLATE SCAFFOLD]:\n${input.templateScaffold}\n\n${SLIDE_CANONICAL_METHODOLOGY}\n\n${input.languageDirective}\n\n${input.headingDirective}`.trim();\n}\n\nexport interface HtmlDeckSlidePromptInput {\n lessonCode: string;\n lessonTitle: string;\n pedagogyLabel: string;\n languageDirective: string;\n headingDirective: string;\n glossaryBlock?: string;\n customContract?: string;\n}\n\nexport function buildHtmlDeckSlidePrompt(input: HtmlDeckSlidePromptInput): string {\n const contract = input.customContract || `## HTML SLIDE ENGINE — AGENT GENERATION CONTRACT\nYou generate structured slide decks for the LearnWell HTML Slide Presentation Engine.\nYour output MUST be a single, valid JSON object matching the Slide Deck JSON schema below.\n\n### 🎨 Available Layout Presets (Use layoutId):\n1. **hero-cover**: Title/Cover slide with title, subtitle, presenter, date, tag.\n2. **two-column-split**: Side-by-side comparison (col1Title, col1Items[], col2Title, col2Items[]).\n3. **code-explainer**: Code walkthrough with filename, language, code, highlightLines, annotations[].\n4. **metrics-3-card**: 3 key stat cards (card1Title, card1Val, card1Desc, card2..., card3...).\n5. **process-flow**: Step-by-step pipeline (steps: [{ label, desc, status }]).\n6. **quiz-checkpoint**: Quick multiple choice question (question, options[], answerIdx, explanation).\n7. **tiered-practice-3cards**: Differentiated tiers (foundation, standard, challenge cards).\n8. **takeaways-summary**: Summary review with bullet takeaways.\n\n### 🎙️ Mandatory 3-Part Presenter Notes on EVERY slide:\nEvery slide MUST include notes with:\n- Talk Track: 2-3 sentences speaking script\n- Cold-Call: 1 check question\n- Scaffolding Tip: 1 analogy or hint\n\n### ⚠️ STRICT SLIDE FORMATTING INVARIANTS:\n1. Every slide MUST store its content fields inside \"slots\": { ... }. NEVER put \"title\", \"content\", or points at the top level of a slide!\n2. All code slots MUST contain real, executable, high-fidelity code. Never use placeholders like \"<CODE>\" or \"...\".\n3. All point and card slots MUST contain concrete, rich pedagogical explanations. Never use placeholder dots or empty cards.\n\n### Output JSON Format:\n\\`\\`\\`json\n{\n \"title\": \"${input.lessonTitle}\",\n \"theme\": \"ocean\",\n \"slides\": [\n {\n \"layoutId\": \"hero-cover\",\n \"slots\": { \"title\": \"${input.lessonTitle}\", \"subtitle\": \"...\" },\n \"notes\": \"Talk Track: ...\\\\nCold-Call: ...\\\\nScaffolding Tip: ...\"\n }\n ]\n}\n\\`\\`\\``;\n\n return `You are @illustrator & @content (Interactive HTML Slide Deck Presentation Architects).\nBased on Master Lesson Plan \\`LESSON_${input.lessonCode}.md\\`, pedagogical model (${input.pedagogyLabel}), and the HTML SLIDE ENGINE CONTRACT below, author the complete, highly engaging HTML presentation deck in JSON format: \\`SLIDE_${input.lessonCode}\\`.\n\n${contract}\n\n${input.languageDirective}\n\n${input.headingDirective}${input.glossaryBlock ? `\\n\\n${input.glossaryBlock}` : ''}\n\nOutput ONLY the raw JSON object. Do not include extra conversational text or markdown code fences.`.trim();\n}\n\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 and valid. Every code identifier uses the REAL standard-library/API spelling of the declared stack (grounded in REFERENCE_PACK / canonical LESSON) — internal consistency with a glossary term name is NOT evidence of correctness. If \\`canonicalExposition\\` or \\`[KNOWLEDGE_EXPOSITION]\\` is provided, content strictly adheres to canonical concepts without contradicting definitions or examples.\n - 8 pts: Minor syntax inaccuracies or unidiomatic code that does not break core concepts.\n - 0 pts: Severe technical hallucinations, broken logic, invalid diagrams, invented casing/spelling rules for standard-library identifiers, or direct contradiction of canonical exposition knowledge.\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. If \\`canonicalLessonExcerpt\\` is present in candidate JSON, all satellite phases/activities strictly operationalize the master Lesson Flow and Activity Sequence without inventing divergent timelines.\n - 0-5 pts: Scope drift, topic divergence, or disjoint activity sequence detected compared to master lesson.\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\n/**\n * Stage 2: Macro-Pedagogy Curriculum Plan Judge Prompt\n */\nexport interface CurriculumPlanJudgePromptInput {\n planJson: string;\n briefingContext: string;\n expectedLanguage?: string;\n linterFindings?: Array<{ id: string; severity: string; title: string; description: string }>;\n}\n\nexport function buildCurriculumPlanJudgePrompt(input: CurriculumPlanJudgePromptInput): string {\n const { planJson, briefingContext, expectedLanguage = 'Vietnamese', linterFindings = [] } = input;\n\n return `\n# System Methodology: Principal Curriculum SME & Macro-Pedagogical Quality Judge (@sme_judge)\n\nYou are the **Lead Curriculum Architect & Classroom Practicum SME**. Your role is to rigorously evaluate a candidate \\`CURRICULUM_PLAN\\` (Schema v3) against empirical pedagogical science, cognitive load capacity, and real classroom delivery constraints.\n\n## COURSE BRIEFING & TARGET CONSTRAINTS\n${briefingContext}\n\n${linterFindings.length > 0 ? `## DETERMINISTIC PRE-LINT FINDINGS (0-TOKEN LINTER)\nThe deterministic structural linter detected the following issues in advance:\n${linterFindings.map((f) => `- [${f.severity}] ${f.id}: ${f.title} — ${f.description}`).join('\\n')}\nConsider these deterministic findings when scoring and issuing actionable repair prescriptions.` : ''}\n\n## CANDIDATE CURRICULUM PLAN JSON\n\\`\\`\\`json\n${planJson}\n\\`\\`\\`\n\n## EVALUATION RUBRICS & 5 CRITICAL DIMENSIONS (TOTAL 100 POINTS)\n\n1. **Step Incrementality & Single Leap Principle (20 pts):**\n - 20 pts: Every session introduces at most ONE new syntax or algorithmic concept. No massive cognitive leaps (e.g. going from basic variables directly to asynchronous networking).\n - 10 pts: Minor leap detected in 1 session that can be mitigated with starter code.\n - 0 pts: Severe cognitive gap (e.g. multiple compound paradigms combined in one session).\n\n2. **Vygotsky ZPD Saturation & Cognitive Capacity (20 pts):**\n - 20 pts: New concept count <= 2 per session (K-12) / 3 (Adults), with explicit prior concept anchor or recap slot.\n - 10 pts: Session introduces 3 concepts without adequate bridge.\n - 0 pts: Severe overload (>3 new concepts in a single session) or unanchored concepts.\n\n3. **Classroom Friction-Adjusted Time Budget (20 pts):**\n - 20 pts: Incorporates 2.5x student friction multiplier. Total content minutes <= 85% of session duration (15% overhead reserved). No step > 76 minutes.\n - 10 pts: Content is slightly packed, leaving < 10% buffer time.\n - 0 pts: Overpacked content that will cause students to run out of time in a standard classroom.\n\n4. **Reigeluth Walking Skeleton & Milestone Agency (20 pts):**\n - 20 pts: Unit 1 culminates in an end-to-end runnable MVP (Epitome). Subsequent units provide modular elaborations.\n - 10 pts: Walking skeleton present but delayed to Unit 2.\n - 0 pts: Pure theoretical silo teaching where no working product appears until the end of the course.\n\n5. **Exit Evidence Specificity (20 pts):**\n - 20 pts: Every session produces an explicit, tangible, user-visible deliverable (e.g. running UI screen, passing test suite, physical LED sequence).\n - 10 pts: Some sessions have generic deliverables (\"completed practice exercise\").\n - 0 pts: Vague or absent deliverables (\"student understands topic\").\n\n## DECISION RULES\n- **PASS & AUTO-APPROVE:** Total Score >= 85 AND overallVerdict is \"PASS\" AND no CRITICAL actionable repairs.\n- **NEEDS_REVISION:** Total Score between 70 and 84, or fixable flaws. Prescribe concrete structured \\`actionableRepairs\\` (\\`SPLIT_STEP\\`, \\`INSERT_RECAP\\`, \\`ADJUST_TIME_BUDGET\\`, \\`REVISE_EXIT_EVIDENCE\\`).\n- **FAIL:** Total Score < 70, structural collapse, or unbridgeable pedagogical gaps.\n\n## OUTPUT FORMAT\nReturn a valid JSON object matching the MacroPedagogyPlanAuditSchema.\n`.trim();\n}\n\n/**\n * Stage 1: Project Graph Toolchain & Environment Provisioning Judge Prompt\n */\nexport interface ProjectGraphJudgePromptInput {\n bundleJson: string;\n briefingContext: string;\n linterFindings?: Array<{ id: string; severity: string; title: string; description: string }>;\n}\n\nexport function buildProjectGraphJudgePrompt(input: ProjectGraphJudgePromptInput): string {\n const { bundleJson, briefingContext, linterFindings = [] } = input;\n\n return `\n# System Methodology: Lead Systems Engineer & Lab Infrastructure Auditor (@infra_judge)\n\nYou are the **Lead Lab Systems Engineer**. Your role is to rigorously evaluate a candidate \\`PROJECT_GRAPH\\` and its associated \\`technology_scope\\` against real-world lab environment feasibility, toolchain friction, and hardware constraints.\n\n## COURSE BRIEFING & INFRASTRUCTURE CONSTRAINTS\n${briefingContext}\n\n${linterFindings.length > 0 ? `## DETERMINISTIC PRE-LINT FINDINGS\n${linterFindings.map((f) => `- [${f.severity}] ${f.id}: ${f.title} — ${f.description}`).join('\\n')}` : ''}\n\n## CANDIDATE PROJECT GRAPH BUNDLE JSON\n\\`\\`\\`json\n${bundleJson}\n\\`\\`\\`\n\n## EVALUATION RUBRICS & 4 DIMENSIONS (TOTAL 100 POINTS)\n\n1. **Toolchain & Installation Feasibility (25 pts):**\n - 25 pts: Toolchain installs cleanly without complex admin rights, OS friction, or fragile build scripts.\n - 10 pts: Toolchain requires moderate admin setup, suitable for guided lab but risky for BYOD.\n - 0 pts: High-friction setup that frequently breaks in student environments.\n\n2. **Environment Provisioning Strategy (25 pts):**\n - 25 pts: Heavy technologies (PostgreSQL, Docker, ROS2, etc.) declare an explicit, realistic provisioning model (\\`PRE_INSTALLED_LAB\\`, \\`CLOUD_MANAGED\\`, or \\`DEDICATED_SETUP\\`). Core course topics are NEVER downgraded; instead, proper infrastructure is specified.\n - 10 pts: Heavy tech used with ambiguous provisioning plan.\n - 0 pts: Heavy tech dumped on students with no provisioning strategy, causing setup collapse.\n\n3. **Hardware & Runtime Envelope (25 pts):**\n - 25 pts: Code, libraries, and algorithms fit comfortably within target device RAM, Flash, and pinout budget (<= 75% envelope).\n - 10 pts: Memory or resource limits are tight.\n - 0 pts: Guaranteed hardware crash or pinout conflict.\n\n4. **Time to Hello World (25 pts):**\n - 25 pts: First working runnable milestone achieved in <= 15 minutes of student effort.\n - 10 pts: First milestone takes 20-30 minutes.\n - 0 pts: Student spends the entire first session on environment configuration without seeing running code.\n\n## DECISION RULES\n- **PASS:** Score >= 85 AND overallVerdict is \"PASS\".\n- **NEEDS_REVISION:** Score between 70 and 84. Prescribe structured actionable repairs.\n- **FAIL:** Score < 70 or critical environment blocker.\n\n## OUTPUT FORMAT\nReturn a valid JSON object matching ProjectGraphAuditSchema.\n`.trim();\n}\n\n","import type { MilestoneInput, ProjectGraph } from '../../schemas';\n\nexport interface ProjectInstructionPromptInput {\n projectGraph?: ProjectGraph;\n milestone: MilestoneInput;\n roadmapContext?: {\n projectTitle?: string;\n techStack?: string[];\n phaseTitle?: string;\n };\n researchNotes?: string;\n externalResources?: string[];\n language: string;\n difficulty?: 'beginner' | 'intermediate' | 'advanced';\n}\n\nexport function buildProjectInstructionPrompt(input: ProjectInstructionPromptInput): string {\n const {\n projectGraph,\n milestone,\n roadmapContext,\n researchNotes,\n externalResources,\n language,\n difficulty = 'intermediate',\n } = input;\n const milestoneId = milestone.id || milestone.concept_code || 'M01';\n\n const techStackList =\n roadmapContext?.techStack ||\n (Array.isArray(projectGraph?.project.tech_stack)\n ? projectGraph.project.tech_stack\n : typeof projectGraph?.project.tech_stack === 'object'\n ? Object.values(projectGraph.project.tech_stack).flat()\n : milestone.tech_keywords || ['General Technology']);\n\n return `\n# System Methodology: Instructable-style Project Tutorial & Execution Manual (@instruction)\n\nYou are the **@instruction** senior technical author. Your mission is to generate a comprehensive, highly actionable, step-by-step technical tutorial/instruction for completing a specific milestone of a software/hardware project.\n\n## PRIMARY QUALITY BAR: EXECUTION ACCURACY & REPRODUCIBILITY\nThis is an **execution manual**, not a high-level overview. The reader must be able to follow every step sequentially and achieve the exact working result.\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- **MANDATORY REQUIREMENT:** Output all explanations, action titles, tips, warnings, preflight checks, and expected results strictly in **\"${language}\"**.\n- Keep file paths, CLI commands, code syntax, and official SDK API symbols in standard format.\n\n## PROJECT CONTEXT\n${\n projectGraph\n ? `\n- **Project Name:** ${projectGraph.project.name}\n- **Project Purpose:** ${projectGraph.project.purpose || 'N/A'}\n- **Project Type / Platforms:** ${projectGraph.project.project_type || 'N/A'} (${projectGraph.project.platform.join(', ')})\n- **Architecture:** ${projectGraph.project.architecture.join(', ') || 'N/A'}\n- **Product Goals:**\n${projectGraph.product.goals.map((g) => ` - [${g.id}] ${g.description}`).join('\\n')}\n- **User Journeys:**\n${projectGraph.product.journeys.map((j) => ` - ${j.name}: ${j.steps.slice(0, 3).join(' -> ')}...`).join('\\n')}\n`\n : `- **Project:** ${roadmapContext?.projectTitle || 'Software Project'}`\n}\n\n## CURRENT MILESTONE & ROADMAP CONTEXT\n- **Instruction ID:** ${milestoneId}\n- **Milestone Name:** ${milestone.name}\n- **Milestone Description:** ${milestone.description || 'N/A'}\n- **Feature Cluster:** ${milestone.feature_name || milestone.feature_id || 'Core Feature'}\n- **Phase:** ${roadmapContext?.phaseTitle || 'Implementation'}\n- **Concept Code:** ${milestone.concept_code || 'N/A'}\n- **Tech Stack:** ${techStackList.join(', ')}\n- **Difficulty:** ${difficulty}\n- **Learning Objectives Covered:**\n${(milestone.learning_objectives || []).map((lo) => ` - [${lo.lo_type || 'ULO'}] ${lo.code}: ${lo.name} (${lo.description || ''})`).join('\\n')}\n\n${researchNotes ? `## RESEARCH NOTES & VERIFIED TECHNICAL SOURCES\\n${researchNotes}\\n` : ''}\n${externalResources && externalResources.length > 0 ? `## EXTERNAL RESOURCES & REPOSITORIES\\n${externalResources.join('\\n')}\\n` : ''}\n\n## EXECUTION & AUTHORING RULES\n1. **Section Breakdown:** Divide the tutorial into logical sequential sections (e.g. 1. Environment & Preflight, 2. Core Implementation, 3. Integration & Verification).\n2. **Preflight Checks:** Every section MUST start with preflight checks (e.g., verifying tools, directories, environment variables).\n3. **Action-Verb Steps:** Every step must have a clear action-verb title (e.g. \"Create the Network Discovery Manager\", \"Define the JSON Model Struct\").\n4. **Code Quality:** Provide complete, runnable code blocks with target file paths indicated (e.g. \\`# Sources/App/Model.swift\\`). Code comments must explain WHY, not just WHAT.\n5. **Expected Results:** Explicitly describe what the developer will observe (terminal output, simulator behavior, UI state).\n6. **Operational Gotchas & Warnings:** Include \\`warning\\` fields for common failure modes (e.g. missing permissions, wrong port, unhandled optional).\n7. **Visual Placeholders:** Include \\`imagePlaceholder\\` describing screenshots or diagrams where visual confirmation helps.\n8. **End-to-End Verification:** Provide a final verification checklist to ensure complete functionality.\n\n## REQUIRED JSON KEYS\nPlease return a single JSON object matching these exact keys:\n- \"artifactType\": \"INSTRUCTION\"\n- \"instructionId\": \"${milestoneId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"difficulty\": \"${difficulty}\"\n- \"estimatedTotalMinutes\": number\n- \"scopeMode\": \"milestone\"\n- \"milestoneRef\": \"${milestoneId}\"\n- \"featureRef\": \"${milestone.feature_id || 'F0'}\"\n- \"techStack\": [${techStackList.map((t) => `\"${t}\"`).join(', ')}]\n- \"prerequisites\": string[]\n- \"materialsAndTools\": string[]\n- \"sections\": array of { \"sectionNumber\": number, \"title\": string, \"goal\": string, \"estimatedMinutes\": number, \"preflightChecks\": string[], \"steps\": array of { \"stepNumber\": string, \"actionTitle\": string, \"explanation\": string, \"targetFile\": string, \"codeSnippet\": string, \"codeLanguage\": string, \"tip\": string, \"warning\": string, \"expectedResult\": string, \"imagePlaceholder\": string }, \"rollbackOrCleanup\": string }\n- \"verificationChecklist\": string[]\n`.trim();\n}\n","import type { MilestoneInput, ProjectGraph } from '../../schemas';\nimport { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('SELF_LAB_template.md') ?? '[TEMPLATE FILE NOT FOUND: SELF_LAB_template.md]'}\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 { loadAuthoringTemplate } from '../../services/templateLoader';\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${loadAuthoringTemplate('QUIZ_v4.6_template.md') ?? '[TEMPLATE FILE NOT FOUND: QUIZ_v4.6_template.md]'}\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 { 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 standardRefs: z.array(z.string()).optional(),\n conceptRefs: z.array(z.string()).optional(),\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']);\nexport type QualityAuditVerdict = z.infer<typeof QualityAuditVerdictSchema>;\n\nexport const JudgeCriterionSchema = z.object({\n name: z.string().describe('Criterion name, e.g. Bloom Alignment, Code Validity, Word Count Gate, Language Adherence, Step Incrementality'),\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});\nexport type JudgeCriterion = z.infer<typeof JudgeCriterionSchema>;\n\n/**\n * Structured Actionable Repair Prescription:\n * Used by the closed-loop autonomous repair pipeline to patch plans deterministically.\n */\nexport const ActionableRepairActionSchema = z.enum([\n 'SPLIT_STEP',\n 'REVISE_PROVISIONING',\n 'INSERT_RECAP',\n 'ADJUST_TIME_BUDGET',\n 'SUBSTITUTE_FALLBACK',\n 'REVISE_EXIT_EVIDENCE',\n]);\nexport type ActionableRepairAction = z.infer<typeof ActionableRepairActionSchema>;\n\nexport const ActionableRepairPromptSchema = z.object({\n action: ActionableRepairActionSchema,\n targetId: z.string().describe('ID of the session, feature, or step requiring repair, e.g. U01_M01_L02 or F1-S3'),\n severity: z.enum(['CRITICAL', 'WARNING', 'INFO']).default('WARNING'),\n rationale: z.string().describe('Pedagogical or technical rationale for why this repair is mandated'),\n instruction: z.string().describe('Exact, actionable text instruction for the planner/generator in the next turn'),\n});\nexport type ActionableRepairPrompt = z.infer<typeof ActionableRepairPromptSchema>;\n\n/**\n * Stage 1: Project Graph Engineering & Toolchain Audit Schema\n */\nexport const ProjectGraphAuditSchema = z.object({\n schema_version: z.number().default(1),\n projectId: z.string(),\n overallVerdict: QualityAuditVerdictSchema,\n totalScore: z.number().min(0).max(100),\n toolchainFeasibility: JudgeCriterionSchema.describe('Installation friction, admin rights, IDE/compiler matrix'),\n provisioningStrategy: JudgeCriterionSchema.describe('Clear model for heavy runtimes: Pre-installed lab, Cloud instance, or Dedicated setup'),\n hardwareRuntimeEnvelope: JudgeCriterionSchema.describe('Memory/Flash limits, pinout conflicts, hardware platform alignment'),\n timeToHelloWorld: JudgeCriterionSchema.describe('Student time to achieve first working feedback loop (target <= 15 mins)'),\n actionableRepairs: z.array(ActionableRepairPromptSchema).default([]),\n});\nexport type ProjectGraphAuditReport = z.infer<typeof ProjectGraphAuditSchema>;\n\n/**\n * Stage 2: Macro-Pedagogical Curriculum Plan Audit Schema\n * Evaluates the full session sequence against real classroom friction and cognitive load.\n */\nexport const MacroPedagogyPlanAuditSchema = z.object({\n schema_version: z.number().default(1),\n planHash: z.string(),\n overallVerdict: QualityAuditVerdictSchema,\n totalScore: z.number().min(0).max(100),\n autoApproved: z.boolean().default(false).describe('True if totalScore >= 85 and overallVerdict is PASS'),\n stepIncrementality: JudgeCriterionSchema.describe('Single leap principle: <= 1 new syntax or 1 new algorithm per step'),\n zpdSaturation: JudgeCriterionSchema.describe('Vygotsky ZPD: <= 2 new concepts per session (K-12) / 3 (Adults), with prior anchor'),\n frictionAdjustedBudget: JudgeCriterionSchema.describe('Student time multiplier (2.5x): total content <= 85% session minutes'),\n epitomeViability: JudgeCriterionSchema.describe('Reigeluth Walking Skeleton: Unit 1 produces an end-to-end runnable MVP'),\n exitEvidenceSpecificity: JudgeCriterionSchema.describe('Tangible, measurable student deliverable for every session'),\n actionableRepairs: z.array(ActionableRepairPromptSchema).default([]),\n summary: z.string().describe('High-level executive evaluation summary'),\n});\nexport type MacroPedagogyPlanAuditReport = z.infer<typeof MacroPedagogyPlanAuditSchema>;\n\n/**\n * Legacy SOT / Lesson Quality Report Schema (Retained for Backward Compatibility)\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 structuredRepairs: z.array(ActionableRepairPromptSchema).optional(),\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\n// P50: Macro-Pedagogical Schemas (ZPD, Bruner Spiral, Walking Skeleton, Mastery Gates)\n\nexport const ZpdVerdictSchema = z.enum(['OK', 'TOO_MANY_NEW', 'NO_ZPD_BRIDGE']);\nexport type ZpdVerdict = z.infer<typeof ZpdVerdictSchema>;\n\nexport const SessionZpdStatusSchema = z.object({\n verdict: ZpdVerdictSchema,\n new_concept_count: z.number().int().nonnegative().default(0),\n known_concept_count: z.number().int().nonnegative().default(0),\n issues: z.array(z.string()).default([]),\n});\nexport type SessionZpdStatus = z.infer<typeof SessionZpdStatusSchema>;\n\nexport const ConceptSpiralEncounterSchema = z.object({\n concept_code: z.string(),\n session_id: LessonCodeSchema,\n encounter_index: z.number().int().positive(),\n bloom_cap: BloomLevelSchema,\n depth: DepthLevelSchema,\n});\nexport type ConceptSpiralEncounter = z.infer<typeof ConceptSpiralEncounterSchema>;\n\nexport const WalkingSkeletonSchema = z.object({\n epitome_unit_id: z.string().default('U01'),\n epitome_deliverables: z.array(z.string()).default([]),\n elaborations: z.array(z.object({\n unit_id: z.string(),\n focus_area: z.string(),\n elaborates_on: z.array(z.string()).default([]),\n })).default([]),\n});\nexport type WalkingSkeleton = z.infer<typeof WalkingSkeletonSchema>;\n\nexport const MasteryGateSchema = z.object({\n phase_or_unit_id: z.string(),\n gate_name: z.string(),\n exit_criteria: z.array(z.string()).min(1),\n next_unit_id: z.string(),\n remediation: z.object({\n trigger: z.literal('FAIL_GATE_CRITERIA'),\n focus_minutes: z.number().int().default(15),\n action: z.string(),\n }),\n});\nexport type MasteryGate = z.infer<typeof MasteryGateSchema>;\n\nexport const ConceptPrerequisiteEdgeSchema = z.object({\n concept_code: z.string(),\n requires: z.string(),\n source: z.enum(['MASTER_TREE', 'INFERRED', 'CONCEPT_LEVEL_PREREQ']).default('CONCEPT_LEVEL_PREREQ'),\n confidence: z.number().min(0).max(1).default(0.8),\n rationale: z.string().default(''),\n structure_supported: z.boolean().default(true),\n needs_review: z.boolean().default(false),\n hub: z.boolean().default(false),\n});\nexport type ConceptPrerequisiteEdge = z.infer<typeof ConceptPrerequisiteEdgeSchema>;\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 // P50: ZPD cognitive load status for this session\n zpd_status: SessionZpdStatusSchema.default({\n verdict: 'OK',\n new_concept_count: 0,\n known_concept_count: 0,\n issues: [],\n }),\n});\nexport type SessionPlan = z.infer<typeof SessionPlanSchema>;\n\n// Root plan\n\nexport const TranslationPolicySchema = z\n .object({\n policy: z.enum(['after_artifact', 'end_of_unit', 'at_publish', 'native']).default('native'),\n target_language: z.string().nullable().default(null),\n })\n .refine(\n (data) => {\n if (data.policy === 'native') {\n return typeof data.target_language === 'string' && data.target_language.trim().length > 0;\n }\n return true;\n },\n {\n message: \"When translation policy is 'native', target_language must be a non-empty string\",\n path: ['target_language'],\n }\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 // P50: Macro-pedagogical course structures\n walking_skeleton: WalkingSkeletonSchema.optional(),\n mastery_gates: z.array(MasteryGateSchema).default([]),\n concept_spiral_progression: z.array(ConceptSpiralEncounterSchema).default([]),\n concept_prerequisites: z.array(ConceptPrerequisiteEdgeSchema).default([]),\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 // P52/T2.1: tangible user-visible outcome projected from the graph step\n // (checkpoint candidate for session cutting). Empty = not a checkpoint.\n user_visible_deliverable: z.string().default(''),\n // P52/T3.1 — depth-reconcile inputs (mirrored from the feed; optional so\n // raw graphs without variants keep planning unchanged):\n // • depth_variants: minutes to teach this node at each depth level (ULO ≤\n // CIO ≤ SIO) — the reconciler's price list for downgrades.\n // • depth_scaffold_candidates: parallel to scaffold_candidates but acting\n // on DEPTH (SIO→CIO, CIO→ULO) instead of lesson time.\n // • is_core: Master-Tree core concept — never downgraded; escalate instead.\n depth_variants: z.object({ ulo: z.number().int().nonnegative(), cio: z.number().int().nonnegative(), sio: z.number().int().nonnegative() }).optional(),\n depth_scaffold_candidates: z.array(z.object({\n from_depth: DepthLevelSchema,\n to_depth: DepthLevelSchema,\n minutes_saved: z.number().int().nonnegative(),\n reason: z.string().default(''),\n })).optional(),\n is_core: z.boolean().default(false),\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","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","/**\n * Universal Pedagogical Constants & Empirical Classroom Standards\n * Single Source of Truth for Curriculum Planning, Linters, and LLM-as-Judge Evaluators.\n */\n\n/**\n * Student Friction Multiplier (Empirical Classroom Constant):\n * Senior engineers write code roughly 2.5x to 3.5x faster than students.\n * A 10-minute expert coding task requires ~25-35 minutes for a student in a classroom setting\n * due to typing, syntax errors, typos, and debugging.\n */\nexport const STUDENT_FRICTION_MULTIPLIER = 2.5;\n\n/**\n * Vygotsky Zone of Proximal Development (ZPD) Saturation Thresholds:\n * Maximum number of completely new conceptual primitives allowed in a single session.\n */\nexport const MAX_NEW_CONCEPTS_PER_SESSION_K12 = 2;\nexport const MAX_NEW_CONCEPTS_PER_SESSION_ADULT = 3;\n\n/**\n * Standard Classroom Overhead Ratio:\n * 15% of total session duration is strictly reserved for setup, attendance,\n * questions, transitions, and hardware teardown.\n */\nexport const DEFAULT_OVERHEAD_RATIO = 0.15;\n\n/**\n * Maximum In-Session Setup Minutes:\n * The maximum time a student should spend on toolchain/environment configuration\n * during the first working session before achieving their first running \"Hello World\".\n */\nexport const MAX_IN_SESSION_SETUP_MINUTES = 15;\n\n/**\n * Session-Cut Tolerance (P52/T2.2):\n * When the content budget is reached, the packer searches for the nearest\n * user-visible checkpoint (node with a non-empty user_visible_deliverable)\n * within ±15% of the session's content budget before falling back to a raw\n * minute cut. Motivation: a session that ends mid-step without anything to\n * show kills momentum (P52 plan, Gap 2).\n */\nexport const SESSION_CUT_TOLERANCE = 0.15;\n\n/**\n * 3-Tier Environment Provisioning Models for Complex or Heavy Technology Stacks:\n * - PRE_INSTALLED_LAB: Environment/IDE/DB is imaged or pre-configured by IT/Lab technician before class.\n * - CLOUD_MANAGED: Cloud instance (Supabase, Neon, Codespaces, Wokwi) with pre-provisioned connection strings.\n * - DEDICATED_SETUP: A dedicated full session specifically budgeted for guided local environment setup.\n */\nexport const ENVIRONMENT_PROVISIONING_MODELS = [\n 'PRE_INSTALLED_LAB',\n 'CLOUD_MANAGED',\n 'DEDICATED_SETUP',\n] as const;\n\nexport type EnvironmentProvisioningModel = (typeof ENVIRONMENT_PROVISIONING_MODELS)[number];\n\n/**\n * Autonomous Evaluation Thresholds:\n */\nexport const JUDGE_AUTO_APPROVE_THRESHOLD = 85;\nexport const JUDGE_ESCALATE_THRESHOLD = 70;\nexport const MAX_AUTONOMOUS_REPAIR_TURNS = 3;\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport {\n CurriculumQualityReportSchema,\n type CurriculumQualityReport,\n MacroPedagogyPlanAuditSchema,\n type MacroPedagogyPlanAuditReport,\n ProjectGraphAuditSchema,\n type ProjectGraphAuditReport,\n} from '../../schemas';\nimport {\n buildJudgePrompt,\n type JudgePromptInput,\n buildCurriculumPlanJudgePrompt,\n type CurriculumPlanJudgePromptInput,\n buildProjectGraphJudgePrompt,\n type ProjectGraphJudgePromptInput,\n} from '../prompts';\nimport { JUDGE_AUTO_APPROVE_THRESHOLD } from '../../constants/pedagogy';\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\nexport interface AuditCurriculumPlanInput extends CurriculumPlanJudgePromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function auditCurriculumPlanFlow(input: AuditCurriculumPlanInput): Promise<MacroPedagogyPlanAuditReport> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildCurriculumPlanJudgePrompt({\n planJson: input.planJson,\n briefingContext: input.briefingContext,\n expectedLanguage: input.expectedLanguage,\n linterFindings: input.linterFindings,\n });\n\n const { object } = await generateObject({\n model,\n schema: MacroPedagogyPlanAuditSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n // Enforce deterministic auto-approve invariant\n const autoApproved = object.totalScore >= JUDGE_AUTO_APPROVE_THRESHOLD && object.overallVerdict === 'PASS';\n return {\n ...object,\n autoApproved,\n };\n}\n\nexport interface AuditProjectGraphInput extends ProjectGraphJudgePromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function auditProjectGraphFlow(input: AuditProjectGraphInput): Promise<ProjectGraphAuditReport> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildProjectGraphJudgePrompt({\n bundleJson: input.bundleJson,\n briefingContext: input.briefingContext,\n linterFindings: input.linterFindings,\n });\n\n const { object } = await generateObject({\n model,\n schema: ProjectGraphAuditSchema,\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 { ProjectInstructionSchema, type ProjectInstruction } from '../../schemas';\nimport { buildProjectInstructionPrompt, type ProjectInstructionPromptInput } from '../prompts';\n\nexport interface GenerateProjectInstructionInput extends ProjectInstructionPromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateProjectInstructionFlow(\n input: GenerateProjectInstructionInput\n): Promise<ProjectInstruction> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildProjectInstructionPrompt({\n projectGraph: input.projectGraph,\n milestone: input.milestone,\n roadmapContext: input.roadmapContext,\n researchNotes: input.researchNotes,\n externalResources: input.externalResources,\n language: input.language,\n difficulty: input.difficulty,\n });\n\n const { object } = await generateObject({\n model,\n schema: ProjectInstructionSchema,\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 { streamObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { LessonPlanSchema, type MilestoneInput } from '../../schemas';\nimport { buildLessonMasterPrompt, type LessonPromptInput } from '../prompts';\n\nexport interface StreamLessonMasterInput extends Omit<LessonPromptInput, 'milestone'> {\n milestone: MilestoneInput;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function streamLessonMasterFlow(input: StreamLessonMasterInput) {\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 });\n\n return streamObject({\n model,\n schema: LessonPlanSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n}\n","import { streamObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { SelfLabSchema, type MilestoneInput } from '../../schemas';\nimport { buildSelfLabPrompt } from '../prompts';\n\nexport interface StreamSelfLabInput {\n milestone: MilestoneInput;\n language: string;\n targetTechStack?: string[];\n contextContinuity?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function streamSelfLabFlow(input: StreamSelfLabInput) {\n const model = getAIModel(input.modelOptions);\n const prompt = buildSelfLabPrompt({\n milestone: input.milestone,\n language: input.language,\n targetTechStack: input.targetTechStack,\n contextContinuity: input.contextContinuity,\n });\n\n return streamObject({\n model,\n schema: SelfLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n}\n","import { streamObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { DiagnosticQuizSchema, type MilestoneInput } from '../../schemas';\nimport { buildDiagnosticQuizPrompt } from '../prompts';\n\nexport interface StreamDiagnosticQuizInput {\n milestone: MilestoneInput;\n language: string;\n questionCount?: number;\n passingScorePct?: number;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function streamDiagnosticQuizFlow(input: StreamDiagnosticQuizInput) {\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 return streamObject({\n model,\n schema: DiagnosticQuizSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n}\n","/**\n * Specialist Sub-Agent Toolbelts (Parity with LangGraph AGENTS.md & nodes)\n *\n * Provides typed Zod tool schemas and execution contracts for 10 specialist personas:\n * 1. @analyst — Brief analysis, learner profile, age group constraints\n * 2. @researcher — Ground Truth, reference pack, evidence scoring\n * 3. @designer — 3-level Curriculum Framework, Bloom matrix, prerequisite graph\n * 4. @content — 5E Lesson Plan, Lesson contract, Section patching\n * 5. @activity — STEM Activity Operations, ACT contract validation\n * 6. @assessor — Diagnostic quizzes, question bank, rubric matrix\n * 7. @illustrator — Mermaid diagrams, technical illustrations, visual assets\n * 8. @tech_sme — Code Lab sandbox execution, syntax validation, runtime checking\n * 9. @reviewer — Alignment matrix audit, reading level check, scope drift detection\n * 10. @packager — 4 Delivery packs (Teacher, Student, Parent, Client), Handover Doc\n */\n\nimport { z } from 'zod';\n\n// ── 1. @analyst Toolbelt ───────────────────────────────────────────\nexport const analystTools = {\n analyzeLearnerProfile: {\n name: 'analyzeLearnerProfile',\n description: 'Extracts and analyzes target learner profile, age tier, prerequisite baseline, and cognitive barriers.',\n schema: z.object({\n targetAge: z.string().describe('Target learner age group (e.g. 12-15 years, Secondary K-12)'),\n priorKnowledge: z.string().describe('Prerequisite baseline knowledge (e.g. Scratch visual block mastery)'),\n cognitiveBarriers: z.array(z.string()).describe('Identified psychological or cognitive barriers when approaching new concepts'),\n transitionStrategy: z.string().describe('Bridge strategy for cognitive scaffolding')\n })\n },\n validatePrerequisites: {\n name: 'validatePrerequisites',\n description: 'Validates prerequisite knowledge requirements and entrance benchmarks for the curriculum.',\n schema: z.object({\n requiredConcepts: z.array(z.string()).describe('List of mandatory prerequisite concepts required before starting'),\n entryBenchmark: z.string().describe('Minimum diagnostic assessment or entry milestone')\n })\n },\n writeLearnerProfile: {\n name: 'writeLearnerProfile',\n description: 'Generates or updates the standardized SOT LEARNER_PROFILE.md document.',\n schema: z.object({\n projectSlug: z.string().describe('Unique project identifier'),\n markdownContent: z.string().describe('Detailed Markdown content conforming to SOT schema')\n })\n }\n};\n\n// ── 2. @researcher Toolbelt ────────────────────────────────────────\nexport const researcherTools = {\n searchAcademicStandards: {\n name: 'searchAcademicStandards',\n description: 'Queries international curriculum standards (CSTA, IEEE/ACM CS2023, National Standards) and official vendor documentation.',\n schema: z.object({\n query: z.string().describe('Search query for standards and specifications'),\n standardCategory: z.enum(['CSTA', 'CS2023', 'OFFICIAL_DOCS', 'ALL']).default('ALL')\n })\n },\n scoreEvidence: {\n name: 'scoreEvidence',\n description: 'Evaluates credibility and relevance score (1-10) of reference materials to prevent AI hallucination.',\n schema: z.object({\n sourceUrl: z.string().describe('Resource URL or specification identifier'),\n sourceType: z.enum(['academic_paper', 'official_doc', 'curriculum_standard', 'community_article']),\n reliabilityScore: z.number().min(1).max(10).describe('Academic and technical reliability rating')\n })\n },\n writeReferencePack: {\n name: 'writeReferencePack',\n description: 'Persists verified Ground Truth references into SOT REFERENCE_PACK.md.',\n schema: z.object({\n projectSlug: z.string().describe('Project identifier'),\n references: z.array(z.object({\n id: z.string(),\n title: z.string(),\n sourceUrl: z.string(),\n relevanceScore: z.number()\n })),\n cs2023Area: z.string().optional()\n })\n }\n};\n\n// ── 3. @designer Toolbelt ──────────────────────────────────────────\nexport const designerTools = {\n buildScopeAndSequence: {\n name: 'buildScopeAndSequence',\n description: 'Constructs the 3-tier curriculum hierarchy: Unit (PBL Project) -> Module (Topic cluster) -> Lesson (5E plan).',\n schema: z.object({\n totalWeeks: z.number().default(16),\n totalSessions: z.number().default(32),\n units: z.array(z.object({\n unitId: z.string().describe('Unit Code (e.g. U01)'),\n title: z.string().describe('Unit title'),\n projectDeliverable: z.string().describe('End-of-unit capstone project deliverable'),\n sessionCount: z.number().describe('Number of sessions allocated'),\n bloomTarget: z.string().describe('Highest target Bloom taxonomy level')\n }))\n })\n },\n writeCurriculumFramework: {\n name: 'writeCurriculumFramework',\n description: 'Generates or updates the standardized SOT CURRICULUM_FRAMEWORK.md document.',\n schema: z.object({\n projectSlug: z.string().describe('Project identifier'),\n frameworkMarkdown: z.string().describe('Complete decomposed curriculum framework in Markdown'),\n standardRefs: z.array(z.object({\n unitId: z.string().describe('Unit the statements anchor, e.g. \"U01\"'),\n standardIds: z.array(z.string()).describe('Canonical statement IDs from the STANDARDS CONTEXT list, e.g. [\"csta-k12-2017:1B-AP-10\"]. MUST exist in the provided list — never invent IDs'),\n })).optional().describe('Standards anchoring per unit, chosen ONLY from the STANDARDS CONTEXT statement list')\n })\n }\n};\n\n// ── 4. @content Toolbelt (Lesson Authoring) ────────────────────────\nexport const contentTools = {\n scaffold5ELesson: {\n name: 'scaffold5ELesson',\n description: 'Scaffolds a 5E lesson plan structure (Engage, Explore, Explain, Elaborate, Evaluate).',\n schema: z.object({\n lessonId: z.string().describe('Lesson identifier (e.g. U01_M01_L01)'),\n title: z.string().describe('Lesson title'),\n learningObjectives: z.array(z.object({\n code: z.string().describe('LO code, e.g. \"LO1\"'),\n statement: z.string().describe('Bloom-tagged objective statement'),\n standardRefs: z.array(z.string()).optional().describe('Anchoring statement IDs chosen ONLY from the STANDARDS CONTEXT list, e.g. [\"csta-k12-2017:1B-AP-10\"]')\n })).describe('Target learning objectives (LOs) with standards anchors'),\n durationMinutes: z.number().default(90)\n })\n },\n writeLessonBody: {\n name: 'writeLessonBody',\n description: 'Authors full 5-phase lesson plan body conforming to Lesson Contract and pedagogical rules.',\n schema: z.object({\n lessonId: z.string(),\n fullMarkdown: z.string(),\n activitySequence: z.array(z.string()).describe('Committed activity sequence from lesson contract')\n })\n },\n patchLessonSection: {\n name: 'patchLessonSection',\n description: 'Locally patches a specific section line range of a lesson artifact without full overwrite.',\n schema: z.object({\n filePath: z.string().describe('Relative path to lesson artifact'),\n targetSectionHeader: z.string().describe('Target section heading to replace'),\n replacementMarkdown: z.string().describe('New replacement Markdown section')\n })\n }\n};\n\n// ── 5. @activity Toolbelt (STEM Labs) ──────────────────────────────\nexport const activityTools = {\n writeActLabOperations: {\n name: 'writeActLabOperations',\n description: 'Authors hands-on laboratory operation document (ACT_...md) expanding the committed LESSON activity flow.',\n schema: z.object({\n lessonId: z.string(),\n targetPlatform: z.string().default('Cross-platform Workstation / IDE'),\n stepByStepSteps: z.array(z.object({\n stepNumber: z.number(),\n instruction: z.string(),\n starterCodeSnippet: z.string().optional(),\n solutionCodeSnippet: z.string().optional()\n }))\n })\n }\n};\n\n// ── 6. @assessor Toolbelt (Quiz & Rubrics) ─────────────────────────\nexport const assessorTools = {\n writeQuizBank: {\n name: 'writeQuizBank',\n description: 'Generates diagnostic and formative scenario-based quiz bank with distractor explanations.',\n schema: z.object({\n lessonId: z.string(),\n questions: z.array(z.object({\n id: z.string(),\n prompt: z.string(),\n options: z.array(z.string()),\n correctIndex: z.number(),\n explanation: z.string(),\n bloomLevel: z.string()\n }))\n })\n },\n generateRubricMatrix: {\n name: 'generateRubricMatrix',\n description: 'Generates 4-tier competency rubric matrix (Developing, Proficient, Advanced, Exemplary).',\n schema: z.object({\n lessonId: z.string(),\n criteria: z.array(z.object({\n criterionName: z.string(),\n weight: z.number(),\n levels: z.record(z.string())\n }))\n })\n }\n};\n\n// ── 7. @illustrator Toolbelt (Visual Assets) ───────────────────────\nexport const illustratorTools = {\n generateMermaidDiagram: {\n name: 'generateMermaidDiagram',\n description: 'Generates valid Mermaid diagrams representing data flow, architecture, or algorithmic state machines.',\n schema: z.object({\n diagramType: z.enum(['flowchart', 'sequenceDiagram', 'classDiagram', 'stateDiagram']),\n mermaidCode: z.string().describe('Pure valid Mermaid code string')\n })\n },\n generateSlideDeck: {\n name: 'generateSlideDeck',\n description: 'Generates pedagogical slide deck in Marp Markdown format following 5E structure.',\n schema: z.object({\n lessonId: z.string(),\n marpMarkdown: z.string().describe('Complete Marp Markdown with frontmatter and slide delimiters')\n })\n }\n};\n\n// ── 8. @tech_sme Toolbelt (Sandbox Code Execution) ─────────────────\nexport const techSmeTools = {\n sandboxExecuteCodeLab: {\n name: 'sandboxExecuteCodeLab',\n description: 'Executes student lab code in a sandbox environment to verify zero syntax and runtime errors.',\n schema: z.object({\n language: z.enum(['swift', 'python', 'javascript', 'html_css']),\n code: z.string().describe('Source code to test and execute'),\n expectedOutput: z.string().optional()\n })\n },\n lintSyntaxErrors: {\n name: 'lintSyntaxErrors',\n description: 'Performs static linting and compiler validation on code samples before student delivery.',\n schema: z.object({\n language: z.string(),\n code: z.string()\n })\n }\n};\n\n// ── 9. @reviewer Toolbelt (Quality Assurance) ──────────────────────\nexport const reviewerTools = {\n auditAlignmentMatrix: {\n name: 'auditAlignmentMatrix',\n description: 'Audits alignment integrity between Objectives (LOs) - Content (LESSON) - Assessment (QUIZ).',\n schema: z.object({\n lessonId: z.string(),\n loCoverageRate: z.number().min(0).max(100),\n detectedGaps: z.array(z.string()),\n verdict: z.enum(['PASS', 'WARN', 'FAIL'])\n })\n },\n verifyReadingLevel: {\n name: 'verifyReadingLevel',\n description: 'Verifies readability grade level and vocabulary complexity against target age group.',\n schema: z.object({\n targetAgeGroup: z.string(),\n textSnippet: z.string(),\n readingGradeLevel: z.string(),\n isAppropriate: z.boolean()\n })\n }\n};\n\n// ── 10. @packager Toolbelt (Delivery & Handover) ───────────────────\nexport const packagerTools = {\n createDeliveryPackage: {\n name: 'createDeliveryPackage',\n description: 'Assembles and packages 4 delivery bundles: Teacher Pack, Student Pack, Parent Pack, and Client Pack.',\n schema: z.object({\n projectSlug: z.string(),\n packageType: z.enum(['TEACHER', 'STUDENT', 'PARENT', 'CLIENT', 'ALL']),\n outputDirectory: z.string().default('_released/')\n })\n }\n};\n","/**\n * Model Policy Resolver (Economic & Expert Council Architecture - August 2026)\n *\n * Core Routing Strategy:\n * 1. Expert Council / LLM-as-Judge (Tier 1):\n * - OpenRouter / Google: google/gemini-3.7-flash (Opus-grade accuracy, 1M context)\n * - DeepSeek: deepseek-v4-pro (Build 0813 - Deep CoT Reasoning)\n * - Alibaba: qwen3.8-max (2.4T MoE Flagship)\n * - NVIDIA NIM: nvidia/nemotron-3-ultra-550b-a55b:free (Robust Free Fallback)\n *\n * 2. Mid & Mid-High Production / Copilot (Tier 2 - Primary Economic):\n * - DeepSeek: deepseek-v4-flash (Build 0731 - $0.22/1M, 1M context, 284B MoE)\n * - Alibaba: qwen3.7-flash ($0.03/1M, ultra-fast tool caller)\n * - OpenRouter / Google: google/gemini-3.7-flash\n *\n * 3. Easy / Structured & Free Tasks (Tier 3):\n * - NVIDIA NIM: nvidia/nemotron-3.5-lightning-30b-a3b (Free 1.8s MoE)\n * - DeepSeek: deepseek-v4-flash\n * - Alibaba: qwen3.7-flash ($0.03/1M, ultra-fast tool caller)\n * - Google: gemini-3.5-flash-lite\n */\n\nexport type ModelProviderKey = 'deepseek' | 'openrouter' | 'alibaba' | 'google' | 'nvidia' | 'zhipu' | 'ollama' | 'openai' | 'anthropic';\n\nexport interface ModelPolicyResolution {\n provider: ModelProviderKey;\n modelName: string;\n maxTokens: number;\n temperature: number;\n reasoningEffort?: 'low' | 'medium' | 'high' | 'max';\n contextWindow?: number;\n providerLabel?: string;\n tierDescription?: string;\n}\n\nexport interface MultiProviderPolicyResolution {\n primary: ModelPolicyResolution;\n fallbacks: ModelPolicyResolution[];\n candidateChain: ModelPolicyResolution[];\n expertCouncil?: ModelPolicyResolution[];\n}\n\nexport const DEFAULT_ENABLED_PROVIDERS: Record<ModelProviderKey, boolean> = {\n deepseek: true, // Primary economic provider (V4-Flash / V4-Pro)\n openrouter: true, // Gateway for Gemini 3.7 Flash & top models\n alibaba: true, // Active provider (Qwen 3.8 / 3.7 Flash)\n nvidia: true, // Free tier fallback lead (Nemotron 3 Ultra / Lightning)\n google: true, // Google AI Studio direct\n ollama: false, // Disabled when out of local GPU/token\n zhipu: false, // Zhipu BigModel (Optional)\n openai: false,\n anthropic: false\n};\n\nexport class ModelPolicyResolver {\n /**\n * Returns the High-End Expert Council for LLM-as-Judge & Architecture Evaluation\n */\n public static getExpertCouncil(): ModelPolicyResolution[] {\n return [\n {\n provider: 'openrouter',\n providerLabel: 'OpenRouter Gateway',\n modelName: 'google/gemini-3.7-flash', // Benchmark on par with Claude 3.5/3.7 Opus\n maxTokens: 32768,\n temperature: 0.15,\n reasoningEffort: 'high',\n contextWindow: 1048576,\n tierDescription: 'Hội đồng Giám khảo: Gemini 3.7 Flash (Opus-grade accuracy)'\n },\n {\n provider: 'deepseek',\n providerLabel: 'DeepSeek API',\n modelName: 'deepseek-v4-pro', // Build 0813\n maxTokens: 32768,\n temperature: 0.15,\n reasoningEffort: 'high',\n contextWindow: 1000000,\n tierDescription: 'Hội đồng Giám khảo: DeepSeek V4 Pro (Deep CoT Reasoning)'\n },\n {\n provider: 'alibaba',\n providerLabel: 'Alibaba Qwen Cloud',\n modelName: 'qwen3.8-max', // 2.4T MoE Flagship\n maxTokens: 32768,\n temperature: 0.15,\n reasoningEffort: 'high',\n contextWindow: 1000000,\n tierDescription: 'Hội đồng Giám khảo: Qwen 3.8 Max (2.4T Sparse MoE)'\n },\n {\n provider: 'nvidia',\n providerLabel: 'NVIDIA NIM API',\n modelName: 'nvidia/nemotron-3-ultra-550b-a55b:free',\n maxTokens: 32768,\n temperature: 0.15,\n reasoningEffort: 'high',\n contextWindow: 1000000,\n tierDescription: 'Hội đồng Giám khảo Dự phòng: Nemotron 3 Ultra 550B (Miễn phí)'\n }\n ];\n }\n\n /**\n * Builds the multi-provider priority candidates list for a given role/artifact\n */\n public static getCandidatePool(role: string, artifactType?: string): ModelPolicyResolution[] {\n const isJudgeOrReasoning = ['judge', 'agent_as_judge', 'reviewer', 'designer', 'analyst', 'tech_sme'].includes(role.toLowerCase()) ||\n (role === 'content' && artifactType?.toUpperCase() === 'LESSON');\n\n const isFastOrEasyStructured = ['activity', 'assessor', 'illustrator', 'packager', 'polish'].includes(role.toLowerCase()) ||\n ['QUIZ', 'SLIDE', 'ACT', 'WKS', 'EXT'].includes(artifactType?.toUpperCase() || '');\n\n // ── 1. TIER 1: HIGH-END FLAGSHIP & LLM-AS-JUDGE ──\n if (isJudgeOrReasoning) {\n return this.getExpertCouncil();\n }\n\n // ── 3. TIER 3: EASY / FAST STRUCTURED ASSET PRODUCTION ──\n if (isFastOrEasyStructured) {\n return [\n {\n provider: 'nvidia',\n providerLabel: 'NVIDIA NIM API (Free Tier)',\n modelName: 'nvidia/nemotron-3.5-lightning-30b-a3b',\n maxTokens: 32768,\n temperature: 0.2,\n reasoningEffort: 'low',\n contextWindow: 1000000,\n tierDescription: 'Nhiệm vụ dễ / Cấu trúc: Nemotron 3.5 Lightning (Miễn phí)'\n },\n {\n provider: 'deepseek',\n providerLabel: 'DeepSeek API',\n modelName: 'deepseek-v4-flash',\n maxTokens: 32768,\n temperature: 0.2,\n reasoningEffort: 'low',\n contextWindow: 1000000,\n tierDescription: 'Nhiệm vụ cấu trúc kinh tế: DeepSeek V4 Flash ($0.22/1M)'\n },\n {\n provider: 'alibaba',\n providerLabel: 'Alibaba Qwen Cloud',\n modelName: 'qwen3.7-flash',\n maxTokens: 32768,\n temperature: 0.2,\n reasoningEffort: 'low',\n contextWindow: 1000000,\n tierDescription: 'Nhiệm vụ cấu trúc: Qwen 3.7 Flash ($0.03/1M)'\n },\n {\n provider: 'openrouter',\n providerLabel: 'OpenRouter Gateway',\n modelName: 'google/gemini-3.5-flash-lite',\n maxTokens: 32768,\n temperature: 0.2,\n reasoningEffort: 'low',\n contextWindow: 1048576,\n tierDescription: 'Nhiệm vụ cấu trúc: Gemini 3.5 Flash-Lite'\n }\n ];\n }\n\n // ── 2. TIER 2: MID & MID-HIGH PRODUCTION / FRONT-LINE COPILOT ──\n return [\n {\n provider: 'deepseek',\n providerLabel: 'DeepSeek API (Primary Economic)',\n modelName: 'deepseek-v4-flash', // $0.22/1M, 1M context, smart reasoning & tool calling\n maxTokens: 32768,\n temperature: 0.3,\n reasoningEffort: 'medium',\n contextWindow: 1000000,\n tierDescription: 'Nhiệm vụ cấp trung kinh tế: DeepSeek V4 Flash (1M Context)'\n },\n {\n provider: 'alibaba',\n providerLabel: 'Alibaba Qwen Cloud',\n modelName: 'qwen3.7-flash', // $0.03/1M, <400ms\n maxTokens: 32768,\n temperature: 0.3,\n reasoningEffort: 'medium',\n contextWindow: 1000000,\n tierDescription: 'Điều phối & Tool Calling: Qwen 3.7 Flash'\n },\n {\n provider: 'openrouter',\n providerLabel: 'OpenRouter Gateway',\n modelName: 'google/gemini-3.6-flash',\n maxTokens: 32768,\n temperature: 0.3,\n contextWindow: 1048576,\n tierDescription: 'Nhiệm vụ cấp trung cao: Gemini 3.6 Flash'\n },\n {\n provider: 'nvidia',\n providerLabel: 'NVIDIA NIM API (Free Fallback)',\n modelName: 'nvidia/nemotron-3.5-lightning-30b-a3b',\n maxTokens: 32768,\n temperature: 0.3,\n contextWindow: 1000000,\n tierDescription: 'Dự phòng miễn phí: Nemotron 3.5 Lightning'\n }\n ];\n }\n\n /**\n * Resolves the primary model and active fallback chain considering enabled providers\n */\n public static resolve(\n role: string,\n artifactType?: string,\n userPreferredModel?: string,\n enabledProviders: Record<string, boolean> = DEFAULT_ENABLED_PROVIDERS\n ): ModelPolicyResolution {\n const multiResolution = this.resolveMultiProvider(role, artifactType, userPreferredModel, enabledProviders);\n return multiResolution.primary;\n }\n\n /**\n * Resolves full multi-provider resolution with primary, fallbacks, and council\n */\n public static resolveMultiProvider(\n role: string,\n artifactType?: string,\n userPreferredModel?: string,\n enabledProviders: Record<string, boolean> = DEFAULT_ENABLED_PROVIDERS\n ): MultiProviderPolicyResolution {\n const pool = this.getCandidatePool(role, artifactType);\n const expertCouncil = this.getExpertCouncil().filter(c => enabledProviders[c.provider] !== false);\n\n // If user explicitly specified a model in Settings override\n if (userPreferredModel && userPreferredModel !== 'auto') {\n let provider: ModelProviderKey = 'nvidia';\n if (userPreferredModel.includes('deepseek')) provider = 'deepseek';\n else if (userPreferredModel.includes('openrouter') || userPreferredModel.includes('google/')) provider = 'openrouter';\n else if (userPreferredModel.includes('qwen')) provider = 'alibaba';\n else if (userPreferredModel.includes('gemini')) provider = 'google';\n else if (userPreferredModel.includes('glm')) provider = 'zhipu';\n else if (userPreferredModel.includes(':')) provider = 'ollama';\n\n const explicitCandidate: ModelPolicyResolution = {\n provider,\n modelName: userPreferredModel,\n maxTokens: 32768,\n temperature: 0.3,\n contextWindow: 1000000,\n providerLabel: provider.toUpperCase()\n };\n\n const remainingCandidates = pool.filter(c => c.modelName !== userPreferredModel && enabledProviders[c.provider] !== false);\n\n return {\n primary: explicitCandidate,\n fallbacks: remainingCandidates,\n candidateChain: [explicitCandidate, ...remainingCandidates],\n expertCouncil\n };\n }\n\n // Filter candidate list by enabled providers\n const activeCandidates = pool.filter(c => enabledProviders[c.provider] !== false);\n\n // If all configured providers are disabled, fallback to available pool to avoid system failure\n const effectiveCandidates = activeCandidates.length > 0 ? activeCandidates : pool;\n\n const primary = effectiveCandidates[0];\n const fallbacks = effectiveCandidates.slice(1);\n\n return {\n primary,\n fallbacks,\n candidateChain: effectiveCandidates,\n expertCouncil\n };\n }\n}\n","import { auditCurriculumQualityFlow } from './flows/auditCurriculumQualityFlow';\nimport type { ModelResolutionOptions } from './provider-factory';\n\nexport interface JudgeEvaluationResult {\n decision: 'APPROVED' | 'NEEDS_REVISION' | 'REJECTED';\n score: number; // 0 to 100\n passed: boolean;\n evaluatedBy: '@agent-as-judge' | '@heuristic-linter';\n critique: string;\n strengths: string[];\n weaknesses: string[];\n autoRepairInstructions?: string;\n}\n\nexport interface AsyncLLMJudgeInput {\n targetArtifactType: string;\n lessonId: string;\n expectedLanguage: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n generatedContentJson: string;\n /** Verbatim standard statements (canonical ID -> text) from the Standards Registry. */\n standardStatements?: Record<string, string>;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport class LLMJudgeEngine {\n /**\n * Executes genuine LLM-as-Judge evaluation using the audit flow.\n */\n public static async evaluateArtifactWithLLM(input: AsyncLLMJudgeInput): Promise<JudgeEvaluationResult> {\n try {\n const report = await auditCurriculumQualityFlow({\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 modelOptions: input.modelOptions,\n });\n\n const passed = report.overallVerdict === 'PASS' && report.languageAdherencePassed;\n const failedCriteria = report.criteria.filter((c) => !c.passed);\n const passedCriteria = report.criteria.filter((c) => c.passed);\n\n return {\n decision: report.overallVerdict === 'PASS' ? 'APPROVED' : report.overallVerdict === 'NEEDS_REVISION' ? 'NEEDS_REVISION' : 'REJECTED',\n score: report.totalScore,\n passed,\n evaluatedBy: '@agent-as-judge',\n critique: passed\n ? `Học liệu ${input.targetArtifactType} cho bài \"${input.lessonId}\" đạt điểm thẩm định ${report.totalScore}/100. Đủ điều kiện phê duyệt.`\n : `Học liệu ${input.targetArtifactType} chưa đạt yêu cầu: ${failedCriteria.map((c) => c.feedback).join('; ')}`,\n strengths: passedCriteria.map((c) => `${c.name}: ${c.feedback}`),\n weaknesses: failedCriteria.map((c) => `${c.name}: ${c.feedback}`),\n autoRepairInstructions: report.actionableRepairPrompts.length > 0 ? report.actionableRepairPrompts.join('\\n') : undefined,\n };\n } catch (err: any) {\n return {\n decision: 'NEEDS_REVISION',\n score: 50,\n passed: false,\n evaluatedBy: '@agent-as-judge',\n critique: `Lỗi trong quá trình thẩm định LLM: ${err.message || String(err)}`,\n strengths: [],\n weaknesses: ['Không thể hoàn tất thẩm định tự động do sự cố kết nối mô hình.'],\n autoRepairInstructions: 'Chạy lại quy trình thẩm định hoặc kiểm tra cấu hình API keys.',\n };\n }\n }\n\n /**\n * Evaluates Gate 1 (SOT Foundation: LEARNER_PROFILE, PROJECT_BRIEF, REFERENCE_PACK)\n * Calibrated heuristic pre-check.\n */\n public static evaluateGate1(\n learnerProfileMarkdown: string,\n referencePackMarkdown: string\n ): JudgeEvaluationResult {\n if (!learnerProfileMarkdown?.trim() || !referencePackMarkdown?.trim()) {\n return {\n decision: 'REJECTED',\n score: 0,\n passed: false,\n evaluatedBy: '@heuristic-linter',\n critique: 'Tệp SOT rỗng hoặc không tồn tại.',\n strengths: [],\n weaknesses: ['Thiếu nội dung tệp SOT cơ sở.'],\n autoRepairInstructions: 'Khởi tạo và biên soạn đầy đủ LEARNER_PROFILE.md và REFERENCE_PACK.md.'\n };\n }\n\n const hasAgeGroup = /(?:độ tuổi|lứa tuổi|age|grade|thcs|tiểu học|k-12|sinh viên|người đi làm)/i.test(learnerProfileMarkdown);\n const hasPriorKnowledge = /(?:kiến thức nền|nền tảng|prior knowledge|tiên quyết|prerequisite)/i.test(learnerProfileMarkdown);\n const hasGroundTruth = /(?:reference|csta|apple|ieee|cs2023|nguồn tham khảo|tài liệu chuẩn|rfc|w3c)/i.test(referencePackMarkdown);\n const hasClientObjectives = /(?:client objectives|mục tiêu|output|chuẩn đầu ra)/i.test(learnerProfileMarkdown);\n\n let score = 30; // Baseline for non-empty documents\n const strengths: string[] = [];\n const weaknesses: string[] = [];\n\n if (hasAgeGroup) {\n score += 20;\n strengths.push('Hồ sơ người học xác định rõ đối tượng và lứa tuổi mục tiêu.');\n } else {\n weaknesses.push('Thiếu định nghĩa rõ ràng về đối tượng/độ tuổi học viên.');\n }\n\n if (hasPriorKnowledge) {\n score += 20;\n strengths.push('Có phân tích kiến thức nền tảng và rào cản nhận thức.');\n } else {\n weaknesses.push('Chưa làm rõ kiến thức tiên quyết (Prerequisites).');\n }\n\n if (hasGroundTruth) {\n score += 20;\n strengths.push('REFERENCE_PACK trích dẫn tài liệu kỹ thuật chuẩn mực.');\n } else {\n weaknesses.push('Tệp REFERENCE_PACK thiếu danh mục tài liệu tham chiếu chuẩn.');\n }\n\n if (hasClientObjectives) {\n score += 10;\n strengths.push('Có xác định rõ mục tiêu đầu ra và kỳ vọng khách hàng.');\n }\n\n const passed = score >= 80;\n return {\n decision: passed ? 'APPROVED' : (score >= 60 ? 'NEEDS_REVISION' : 'REJECTED'),\n score,\n passed,\n evaluatedBy: '@heuristic-linter',\n critique: passed \n ? 'Bộ tài liệu nền tảng SOT đạt chuẩn cấu trúc. Cho phép chuyển sang Phase 2 (Thiết kế Khung chương trình).'\n : 'Tài liệu SOT cần bổ sung thêm các trường thông tin chuẩn trước khi phân rã bài học.',\n strengths,\n weaknesses,\n autoRepairInstructions: passed ? undefined : 'Bổ sung đầy đủ thông tin lứa tuổi, kiến thức tiên quyết và ít nhất 2 nguồn tài liệu kỹ thuật chuẩn vào REFERENCE_PACK.md.'\n };\n }\n\n /**\n * Evaluates Gate 2 (Curriculum Framework: Units, Modules, Lessons, Bloom Progression)\n */\n public static evaluateGate2(\n frameworkMarkdown: string,\n targetUnitCount: number = 4\n ): JudgeEvaluationResult {\n if (!frameworkMarkdown?.trim()) {\n return {\n decision: 'REJECTED',\n score: 0,\n passed: false,\n evaluatedBy: '@heuristic-linter',\n critique: 'Tệp CURRICULUM_FRAMEWORK.md rỗng.',\n strengths: [],\n weaknesses: ['Thiếu nội dung khung chương trình.'],\n };\n }\n\n const unitMatches = frameworkMarkdown.match(/(?:##\\s+(?:Unit\\s+\\d+|U\\d{2})|\\|\\s*U\\d{2}\\s*:|\\|\\s*Unit\\s+\\d+)/gi) || [];\n const hasBloom = /(?:bloom|nhận biết|thông hiểu|vận dụng|phân tích|đánh giá|sáng tạo|remember|understand|apply|analyze|evaluate|create)/i.test(frameworkMarkdown);\n const has5E = /(?:5e|engage|explore|explain|elaborate|evaluate|pbl|edp|hybrid)/i.test(frameworkMarkdown);\n const hasScopeSequence = /(?:scope & sequence|lộ trình|tiến trình|bài học)/i.test(frameworkMarkdown);\n\n let score = 30;\n const strengths: string[] = [];\n const weaknesses: string[] = [];\n\n if (unitMatches.length >= targetUnitCount) {\n score += 25;\n strengths.push(`Phân rã đủ ${unitMatches.length} Units theo đúng yêu cầu cấu trúc.`);\n } else {\n score += Math.min(20, unitMatches.length * 5);\n weaknesses.push(`Số lượng Unit (${unitMatches.length}) chưa đạt mục tiêu ${targetUnitCount} Units.`);\n }\n\n if (hasBloom) {\n score += 20;\n strengths.push('Có phân bổ thang đo Bloom rõ ràng theo tiến trình nhận thức.');\n } else {\n weaknesses.push('Thiếu ánh xạ mức độ Bloom trong các bài học.');\n }\n\n if (has5E) {\n score += 15;\n strengths.push('Cấu trúc bài học định hướng chuẩn mô hình sư phạm (5E/PBL/EDP).');\n }\n\n if (hasScopeSequence) {\n score += 10;\n strengths.push('Có bảng Scope & Sequence chi tiết.');\n }\n\n const passed = score >= 80;\n return {\n decision: passed ? 'APPROVED' : (score >= 60 ? 'NEEDS_REVISION' : 'REJECTED'),\n score,\n passed,\n evaluatedBy: '@heuristic-linter',\n critique: passed\n ? 'Khung chương trình đạt chuẩn kiến trúc phân rã. Cho phép tiến hành sản xuất học liệu.'\n : 'Cần bổ sung chi tiết cấu trúc bài học, bảng phân rã và mức độ Bloom tương ứng.',\n strengths,\n weaknesses\n };\n }\n\n /**\n * Evaluates a produced Lesson Artifact (LESSON, ACT, QUIZ, SLIDE) with heuristic structure checks\n */\n public static evaluateArtifact(\n artifactType: string,\n content: string,\n lessonTitle: string\n ): JudgeEvaluationResult {\n if (!content?.trim() || content.trim().length < 50) {\n return {\n decision: 'REJECTED',\n score: 0,\n passed: false,\n evaluatedBy: '@heuristic-linter',\n critique: `Nội dung ${artifactType} cho bài \"${lessonTitle}\" quá ngắn hoặc rỗng.`,\n strengths: [],\n weaknesses: ['Học liệu không có nội dung thực tế.'],\n };\n }\n\n let score = 40;\n const strengths: string[] = [];\n const weaknesses: string[] = [];\n\n switch (artifactType.toUpperCase()) {\n case 'LESSON': {\n const phases = [\n { name: 'Engage', regex: /(?:Engage|Khởi động|Warm-up|Hook|Mở đầu)/i },\n { name: 'Explore', regex: /(?:Explore|Khám phá|Demo|Thử nghiệm)/i },\n { name: 'Explain', regex: /(?:Explain|Giải thích|Core Concepts|Lý thuyết)/i },\n { name: 'Elaborate', regex: /(?:Elaborate|Vận dụng|Guided Practice|Independent Practice|Challenge|Thực hành)/i },\n { name: 'Evaluate', regex: /(?:Evaluate|Đánh giá|Wrap-up|Exit Ticket|Tổng kết)/i },\n ];\n let phaseCount = 0;\n for (const p of phases) {\n if (p.regex.test(content)) phaseCount++;\n }\n score += phaseCount * 10;\n if (phaseCount >= 4) {\n strengths.push(`Giáo án bao phủ ${phaseCount}/5 pha của tiến trình 5E.`);\n } else {\n weaknesses.push(`Giáo án chỉ có ${phaseCount}/5 pha 5E.`);\n }\n if (content.length > 500) score += 10;\n break;\n }\n\n case 'ACT': {\n const hasSteps = /(?:bước|step\\s+\\d+|hướng dẫn)/i.test(content);\n const hasCode = /```[\\s\\S]*?```/.test(content);\n const hasObjectives = /(?:mục tiêu|objective|yêu cầu)/i.test(content);\n if (hasSteps) { score += 20; strengths.push('Bài thực hành có quy trình từng bước rõ ràng.'); }\n if (hasCode) { score += 20; strengths.push('Có mã nguồn mẫu/lệnh thực thi minh họa.'); }\n if (hasObjectives) { score += 10; strengths.push('Có xác định mục tiêu thực hành.'); }\n break;\n }\n\n case 'QUIZ': {\n const hasQuestions = /(?:question\\s*\\d+|câu\\s*\\d+|\\?)/i.test(content);\n const hasOptions = /(?:[A-D]\\.|\\\"options\\\")/i.test(content);\n const hasExplanation = /(?:explanation|giải thích|vì sao|đáp án)/i.test(content);\n if (hasQuestions) { score += 20; strengths.push('Có câu hỏi chẩn đoán.'); }\n if (hasOptions) { score += 20; strengths.push('Đầy đủ các lựa chọn đáp án.'); }\n if (hasExplanation) { score += 15; strengths.push('Có phần giải thích đáp án chi tiết.'); }\n break;\n }\n\n case 'SLIDE': {\n const hasMarp = /(?:marp:\\s*true|---\\s*\\n)/i.test(content);\n const slideCount = (content.match(/---\\s*\\n/g) || []).length;\n if (hasMarp) { score += 25; strengths.push('Định dạng tương thích Marp Presentation.'); }\n if (slideCount >= 5) { score += 25; strengths.push(`Bộ slide có dung lượng hợp lý (${slideCount + 1} slides).`); }\n else { weaknesses.push(`Số lượng slide (${slideCount + 1}) còn quá ít.`); }\n break;\n }\n\n default: {\n if (content.length > 200) score += 40;\n break;\n }\n }\n\n const passed = score >= 80;\n return {\n decision: passed ? 'APPROVED' : (score >= 60 ? 'NEEDS_REVISION' : 'REJECTED'),\n score: Math.min(100, score),\n passed,\n evaluatedBy: '@heuristic-linter',\n critique: passed \n ? `Học liệu ${artifactType} cho bài \"${lessonTitle}\" đạt kiểm tra cấu trúc (${score}/100).`\n : `Học liệu ${artifactType} cần hoàn thiện thêm cấu trúc để đạt chuẩn sư phạm (${score}/100).`,\n strengths,\n weaknesses\n };\n }\n}\n\n","import {\n type ChatMessage,\n type StreamRunnerOptions,\n type ChunkType,\n resolveApiKey,\n} from './streamRunner';\nimport { createAiInferenceError } from '../errors';\nimport type { ToolLoopConfig, AggregatedToolCall, ToolExecutionResult } from './toolLoopTypes';\n\nconst PROVIDER_ENDPOINTS: Record<string, string> = {\n openrouter: 'https://openrouter.ai/api/v1/chat/completions',\n deepseek: 'https://api.deepseek.com/chat/completions',\n alibaba: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions',\n nvidia: 'https://integrate.api.nvidia.com/v1/chat/completions',\n};\n\nconst NVIDIA_DEFAULT_MODEL = 'nvidia/nemotron-3-ultra-550b-a55b:free';\n\nfunction resolveProviderRoute(options: StreamRunnerOptions): { provider: string; endpoint: string; apiKey: string; model: string } {\n const openrouterKey = options.openrouterKey?.trim() || (typeof process !== 'undefined' ? process.env.OPENROUTER_API_KEY || '' : '');\n const deepseekKey = options.deepseekKey?.trim() || (typeof process !== 'undefined' ? process.env.DEEPSEEK_API_KEY || '' : '');\n const alibabaKey = options.alibabaKey?.trim() || (typeof process !== 'undefined' ? process.env.ALIBABA_API_KEY || process.env.DASHSCOPE_API_KEY || '' : '');\n const nvidiaKey = options.nvidiaKey?.trim() || (typeof process !== 'undefined' ? process.env.NVIDIA_API_KEY || '' : '');\n const requested = options.model || '';\n\n // Route cùng logic với streamRunner: model id quyết định provider ưu tiên\n if (requested.startsWith('nvidia/') && nvidiaKey) {\n return { provider: 'nvidia', endpoint: PROVIDER_ENDPOINTS.nvidia, apiKey: nvidiaKey, model: requested };\n }\n if (requested.startsWith('deepseek') && deepseekKey) {\n return { provider: 'deepseek', endpoint: PROVIDER_ENDPOINTS.deepseek, apiKey: deepseekKey, model: requested };\n }\n if (requested.startsWith('qwen') && alibabaKey) {\n return { provider: 'alibaba', endpoint: PROVIDER_ENDPOINTS.alibaba, apiKey: alibabaKey, model: requested };\n }\n if (openrouterKey) {\n return { provider: 'openrouter', endpoint: PROVIDER_ENDPOINTS.openrouter, apiKey: openrouterKey, model: requested || '@preset/coding-free' };\n }\n if (deepseekKey) return { provider: 'deepseek', endpoint: PROVIDER_ENDPOINTS.deepseek, apiKey: deepseekKey, model: requested || 'deepseek-chat' };\n if (alibabaKey) return { provider: 'alibaba', endpoint: PROVIDER_ENDPOINTS.alibaba, apiKey: alibabaKey, model: requested || 'qwen3.7-plus' };\n // FALLBACK SAU CÙNG: NVIDIA NIM — nemotron ultra\n if (nvidiaKey) return { provider: 'nvidia', endpoint: PROVIDER_ENDPOINTS.nvidia, apiKey: nvidiaKey, model: NVIDIA_DEFAULT_MODEL };\n throw new Error('No compatible API key for tool-calling chat (need OPENROUTER_API_KEY, DEEPSEEK_API_KEY, ALIBABA_API_KEY or NVIDIA_API_KEY).');\n}\n\n/** Parse SSE stream một turn, trả về { content, toolCalls } — dùng chung parser của streamRunner qua inline impl */\nasync function runTurn(\n endpoint: string,\n model: string,\n apiKey: string,\n messages: Array<{ role: string; content: string | null; tool_calls?: any[]; tool_call_id?: string }>,\n tools: ToolLoopConfig['tools'],\n idleTimeoutMs: number,\n onChunk?: (token: string, type: ChunkType) => void,\n maxTokens = 32768,\n temperature = 0.3,\n): Promise<{ content: string; toolCalls: AggregatedToolCall[] }> {\n const controller = new AbortController();\n let timer: ReturnType<typeof setTimeout> | null = null;\n const arm = () => { if (timer) clearTimeout(timer); timer = setTimeout(() => controller.abort(new Error('Idle timeout')), idleTimeoutMs); (timer as any)?.unref?.(); };\n arm();\n const idle = { signal: controller.signal, kick: arm, dispose: () => { if (timer) clearTimeout(timer); timer = null; } };\n const toolCollector = new Map<string, { id: string; name: string; argsBuffer: string }>();\n\n const res = await fetch(endpoint, {\n method: 'POST',\n headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model,\n messages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true },\n ...(tools.length > 0 ? { tools } : {}),\n }),\n signal: idle.signal,\n });\n if (!res.ok) {\n idle.dispose();\n const body = await res.text().catch(() => '');\n throw new Error(`LLM ${res.status}: ${body.slice(0, 300)}`);\n }\n\n if (!res.body) { idle.dispose(); return { content: '', toolCalls: [] }; }\n const reader = res.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let fullRaw = '';\n let buffer = '';\n let insideThink = 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 const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':') || trimmed === 'data: [DONE]') continue;\n if (!trimmed.startsWith('data: ')) continue;\n try {\n const json = JSON.parse(trimmed.substring(6));\n if (json.usage) {\n const pt = json.usage.prompt_tokens || 0;\n const ct = json.usage.completion_tokens || 0;\n onChunk?.(JSON.stringify({ promptTokens: pt, completionTokens: ct, totalTokens: json.usage.total_tokens || pt + ct, reasoningTokens: 0 }), 'usage');\n }\n const delta = json.choices?.[0]?.delta;\n if (!delta) continue;\n const reasoning = delta.reasoning_content || delta.thought || delta.reasoning || '';\n if (reasoning) onChunk?.(reasoning, 'thought');\n if (delta.tool_calls) {\n onChunk?.(JSON.stringify(delta.tool_calls), 'tool_call');\n for (const tcall of delta.tool_calls) {\n const idx = String(tcall.index ?? tcall.id ?? '0');\n const acc = toolCollector.get(idx) || { id: tcall.id || `call_${idx}`, name: '', argsBuffer: '' };\n if (tcall.id) acc.id = tcall.id;\n if (tcall.function?.name) acc.name += tcall.function.name;\n if (tcall.function?.arguments) acc.argsBuffer += tcall.function.arguments;\n toolCollector.set(idx, acc);\n }\n }\n let content = delta.content || '';\n if (content) {\n fullRaw += content;\n if (content.includes('<think>')) { insideThink = true; const p = content.split('<think>'); if (p[0]) onChunk?.(p[0], 'content'); content = p[1] || ''; }\n if (content.includes('</think>')) { insideThink = false; const p = content.split('</think>'); if (p[0]) onChunk?.(p[0], 'thought'); content = p[1] || ''; }\n if (insideThink) { if (content) onChunk?.(content, 'thought'); }\n else if (content) onChunk?.(content, 'content');\n }\n } catch { /* incomplete chunk */ }\n }\n }\n idle.dispose();\n\n const toolCalls: AggregatedToolCall[] = Array.from(toolCollector.values())\n .filter((c) => c.name)\n .map((c) => ({ id: c.id, name: c.name, arguments: c.argsBuffer || '{}' }));\n return { content: fullRaw, toolCalls };\n}\n\n/**\n * Stream chat CÓ tool-calling (vòng lặp: model → tool → kết quả → model → …).\n * Route qua customToolInference (host AI SDK gateway) khi được truyền — unified\n * tracing mandate. Không có customToolInference:\n * - CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE=1 → fail-loud ERR_CUSTOM_INFERENCE_REQUIRED\n * (raw-fetch routes nằm ngoài biên telemetry của host).\n * - Ngược lại → raw-fetch legacy (OpenRouter/DeepSeek/Alibaba/NVIDIA).\n * Tool error KHÔNG làm chết stream: lỗi được đóng gói gửi lại model để tự xử lý\n * (và được báo qua onToolError cho observability).\n */\nexport async function streamCurriculumAIInferenceWithTools(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions,\n loop: ToolLoopConfig,\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n // ── Unified-tracing mandate (gap #8): customToolInference gateway first ──\n if (options.customToolInference) {\n return runToolLoopWithCustomInference(messages, projectContext, options, loop, onChunk);\n }\n if (resolveApiKey('CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE') === '1') {\n throw createAiInferenceError({\n errorCode: 'ERR_CUSTOM_INFERENCE_REQUIRED',\n message:\n 'customToolInference is REQUIRED (CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE=1): pass buildKitToolInference(...) ' +\n 'so tool-calling turns flow through the host AI SDK gateway and its unified Langfuse tracing. ' +\n 'Raw-fetch tool-loop provider routes are disabled by mandate.',\n rawError: { mandate: 'CURRICULUM_KIT_REQUIRE_CUSTOM_INFERENCE', hasCustomToolInference: false },\n });\n }\n const route = resolveProviderRoute(options);\n const maxTokens = options.maxTokens ?? 32768;\n const maxRounds = loop.maxRounds ?? 4;\n\n const systemInstruction = `${options.systemPersona || 'You are Curriculum OS Assistant.'}\\n\\nProject Context:\\n${projectContext}\\n\\nGuidelines:\\n1. Answer precisely using the provided tools when they help (project status, deep research, production declaration, gate approval).\\n2. Keep Markdown formatting. Never invent tool results.`;\n\n const convo: Array<{ role: string; content: string | null; tool_calls?: any[]; tool_call_id?: string }> = [\n { role: 'system', content: systemInstruction },\n ...messages.map((m) => ({ role: m.role === 'assistant' || m.role === 'model' ? 'assistant' : 'user', content: m.content })),\n ];\n\n let finalContent = '';\n for (let round = 0; round < maxRounds; round++) {\n let turn: { content: string; toolCalls: AggregatedToolCall[] };\n try {\n turn = await runTurn(route.endpoint, route.model, route.apiKey, convo, loop.tools, 180000, onChunk, maxTokens, options.temperature ?? 0.3);\n } catch (err: any) {\n // Model/provider không hỗ trợ tool-calling (404/400 'tools') → hạ cấp: trả lời không-tools, KHÔNG chết chat\n const msg = String(err?.message || err);\n if (/tool/i.test(msg) && /40[04]|400|not support|invalid/i.test(msg)) {\n console.warn('[toolLoop] provider rejected tools — degrading to plain chat:', msg.slice(0, 120));\n const plain = await runTurn(route.endpoint, route.model, route.apiKey, convo, [], 180000, onChunk, maxTokens, options.temperature ?? 0.3);\n finalContent = plain.content;\n break;\n }\n throw err;\n }\n const { content, toolCalls } = turn;\n if (toolCalls.length === 0) { finalContent = content; break; }\n // Always keep the latest text content so that if this is the final round\n // and the model still emitted tool calls, we don't lose the accompanying text.\n if (content) finalContent = content;\n\n // Model muốn gọi tool — thực thi tuần tự, gộp vào hội thoại\n convo.push({ role: 'assistant', content: content || null, tool_calls: toolCalls.map((t) => ({ id: t.id, type: 'function', function: { name: t.name, arguments: t.arguments } })) });\n for (const call of toolCalls) {\n let parsedArgs: Record<string, unknown> = {};\n try { parsedArgs = JSON.parse(call.arguments || '{}'); } catch { /* model trả args sai JSON */ }\n loop.onToolStart?.(call.name, parsedArgs);\n let resultPayload: unknown;\n let isError = false;\n try {\n resultPayload = await loop.executor(call.name, parsedArgs);\n } catch (err: any) {\n isError = true;\n resultPayload = { error: err?.message || String(err) };\n loop.onToolError?.(call.name, err?.message || String(err));\n }\n const exec: ToolExecutionResult = { toolCallId: call.id, name: call.name, result: resultPayload, isError };\n loop.onToolResult?.(exec);\n convo.push({ role: 'tool', tool_call_id: call.id, content: JSON.stringify(resultPayload).slice(0, 12000) });\n }\n if (round === maxRounds - 1) {\n // Hết vòng: chạy turn cuối KHÔNG tools để model buộc trả lời văn bản\n const last = await runTurn(route.endpoint, route.model, route.apiKey, convo, [], 180000, onChunk, maxTokens, options.temperature ?? 0.3);\n finalContent = last.content;\n }\n }\n return finalContent;\n}\n\n/**\n * Tool loop variant that routes EVERY turn through the host's\n * `customToolInference` gateway (AI SDK → OTel → unified Langfuse trace).\n * Mirrors the raw-fetch loop 1:1: same tool execution ordering, same\n * tool-result envelope, same final no-tools turn, same degrade path when the\n * provider rejects tool definitions (404/400/not supported).\n */\nasync function runToolLoopWithCustomInference(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions,\n loop: ToolLoopConfig,\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n const infer = options.customToolInference!;\n const maxTokens = options.maxTokens ?? 32768;\n const maxRounds = loop.maxRounds ?? 4;\n\n const systemInstruction = `${options.systemPersona || 'You are Curriculum OS Assistant.'}\\n\\nProject Context:\\n${projectContext}\\n\\nGuidelines:\\n1. Answer precisely using the provided tools when they help (project status, deep research, production declaration, gate approval).\\n2. Keep Markdown formatting. Never invent tool results.`;\n\n const convo: Array<{\n role: string;\n content: string | null;\n tool_calls?: Array<{ id: string; type: 'function'; function: { name: string; arguments: string } }>;\n tool_call_id?: string;\n }> = [\n { role: 'system', content: systemInstruction },\n ...messages.map((m) => ({ role: m.role === 'assistant' || m.role === 'model' ? 'assistant' : 'user', content: m.content })),\n ];\n\n let finalContent = '';\n for (let round = 0; round < maxRounds; round++) {\n let turn: { content: string; toolCalls: AggregatedToolCall[] };\n try {\n turn = await infer({ messages: convo, tools: loop.tools, temperature: options.temperature ?? 0.3, maxTokens, onChunk: onChunk ?? (() => {}) });\n } catch (err: any) {\n // Provider không hỗ trợ tool-calling → hạ cấp: trả lời không-tools, KHÔNG chết chat\n const msg = String(err?.message || err);\n if (/tool/i.test(msg) && /40[04]|400|not support|invalid/i.test(msg)) {\n console.warn('[toolLoop] custom gateway rejected tools — degrading to plain chat:', msg.slice(0, 120));\n const plain = await infer({ messages: convo, tools: [], temperature: options.temperature ?? 0.3, maxTokens, onChunk: onChunk ?? (() => {}) });\n finalContent = plain.content;\n break;\n }\n throw err;\n }\n const { content, toolCalls } = turn;\n if (toolCalls.length === 0) { finalContent = content; break; }\n if (content) finalContent = content;\n\n // Model muốn gọi tool — thực thi tuần tự, gộp vào hội thoại (giống raw loop)\n convo.push({ role: 'assistant', content: content || null, tool_calls: toolCalls.map((t) => ({ id: t.id, type: 'function', function: { name: t.name, arguments: t.arguments } })) });\n for (const call of toolCalls) {\n let parsedArgs: Record<string, unknown> = {};\n try { parsedArgs = JSON.parse(call.arguments || '{}'); } catch { /* model trả args sai JSON */ }\n loop.onToolStart?.(call.name, parsedArgs);\n let resultPayload: unknown;\n let isError = false;\n try {\n resultPayload = await loop.executor(call.name, parsedArgs);\n } catch (err: any) {\n isError = true;\n resultPayload = { error: err?.message || String(err) };\n loop.onToolError?.(call.name, err?.message || String(err));\n }\n const exec: ToolExecutionResult = { toolCallId: call.id, name: call.name, result: resultPayload, isError };\n loop.onToolResult?.(exec);\n convo.push({ role: 'tool', tool_call_id: call.id, content: JSON.stringify(resultPayload).slice(0, 12000) });\n }\n if (round === maxRounds - 1) {\n // Hết vòng: turn cuối KHÔNG tools để model buộc trả lời văn bản\n const last = await infer({ messages: convo, tools: [], temperature: options.temperature ?? 0.3, maxTokens, onChunk: onChunk ?? (() => {}) });\n finalContent = last.content;\n }\n }\n return finalContent;\n}"]}