@thanh01.pmt/curriculum-kit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +22 -0
  2. package/dist/ai/index.cjs +4980 -0
  3. package/dist/ai/index.cjs.map +1 -0
  4. package/dist/ai/index.d.cts +1287 -0
  5. package/dist/ai/index.d.ts +1287 -0
  6. package/dist/ai/index.mjs +4924 -0
  7. package/dist/ai/index.mjs.map +1 -0
  8. package/dist/index.cjs +15308 -0
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.cts +747 -0
  11. package/dist/index.d.ts +747 -0
  12. package/dist/index.mjs +14965 -0
  13. package/dist/index.mjs.map +1 -0
  14. package/dist/media/index.cjs +1238 -0
  15. package/dist/media/index.cjs.map +1 -0
  16. package/dist/media/index.d.cts +254 -0
  17. package/dist/media/index.d.ts +254 -0
  18. package/dist/media/index.mjs +1221 -0
  19. package/dist/media/index.mjs.map +1 -0
  20. package/dist/milestoneBundleGenerator-CbXhs1CP.d.ts +62 -0
  21. package/dist/milestoneBundleGenerator-DrBtHzBO.d.cts +62 -0
  22. package/dist/pipeline/index.cjs +4894 -0
  23. package/dist/pipeline/index.cjs.map +1 -0
  24. package/dist/pipeline/index.d.cts +161 -0
  25. package/dist/pipeline/index.d.ts +161 -0
  26. package/dist/pipeline/index.mjs +4869 -0
  27. package/dist/pipeline/index.mjs.map +1 -0
  28. package/dist/provider-factory-DH3udYlN.d.cts +25 -0
  29. package/dist/provider-factory-DH3udYlN.d.ts +25 -0
  30. package/dist/publishers/index.cjs +575 -0
  31. package/dist/publishers/index.cjs.map +1 -0
  32. package/dist/publishers/index.d.cts +85 -0
  33. package/dist/publishers/index.d.ts +85 -0
  34. package/dist/publishers/index.mjs +561 -0
  35. package/dist/publishers/index.mjs.map +1 -0
  36. package/dist/schemas/index.cjs +1640 -0
  37. package/dist/schemas/index.cjs.map +1 -0
  38. package/dist/schemas/index.d.cts +14194 -0
  39. package/dist/schemas/index.d.ts +14194 -0
  40. package/dist/schemas/index.mjs +1517 -0
  41. package/dist/schemas/index.mjs.map +1 -0
  42. package/dist/standards/index.cjs +910 -0
  43. package/dist/standards/index.cjs.map +1 -0
  44. package/dist/standards/index.d.cts +130 -0
  45. package/dist/standards/index.d.ts +130 -0
  46. package/dist/standards/index.mjs +890 -0
  47. package/dist/standards/index.mjs.map +1 -0
  48. package/dist/standardsCoverageGate-BWAkXY76.d.cts +767 -0
  49. package/dist/standardsCoverageGate-BWAkXY76.d.ts +767 -0
  50. package/dist/storage/index.cjs +595 -0
  51. package/dist/storage/index.cjs.map +1 -0
  52. package/dist/storage/index.d.cts +77 -0
  53. package/dist/storage/index.d.ts +77 -0
  54. package/dist/storage/index.mjs +583 -0
  55. package/dist/storage/index.mjs.map +1 -0
  56. package/dist/streamRunner-C7j5LKon.d.cts +60 -0
  57. package/dist/streamRunner-C7j5LKon.d.ts +60 -0
  58. package/dist/supabasePublisher-C627qXFT.d.cts +63 -0
  59. package/dist/supabasePublisher-C627qXFT.d.ts +63 -0
  60. package/dist/types-BUJGYiep.d.cts +89 -0
  61. package/dist/types-BUJGYiep.d.ts +89 -0
  62. package/dist/workflow/index.cjs +5266 -0
  63. package/dist/workflow/index.cjs.map +1 -0
  64. package/dist/workflow/index.d.cts +295 -0
  65. package/dist/workflow/index.d.ts +295 -0
  66. package/dist/workflow/index.mjs +5216 -0
  67. package/dist/workflow/index.mjs.map +1 -0
  68. package/package.json +105 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors/index.ts","../src/ai/streamRunner.ts","../src/pipeline/artifactLinter.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/provider-factory.ts","../src/templates/lessonTemplate.ts","../src/templates/actTemplate.ts","../src/templates/codeLabTemplate.ts","../src/templates/selfLabTemplate.ts","../src/templates/quizTemplate.ts","../src/ai/prompts/lessonMasterPrompt.ts","../src/ai/prompts/activityPrompt.ts","../src/ai/prompts/codeLabPrompt.ts","../src/ai/prompts/worksheetPrompt.ts","../src/ai/prompts/handoutPrompt.ts","../src/ai/prompts/slidesPrompt.ts","../src/ai/prompts/teacherGuidePrompt.ts","../src/ai/prompts/extensionPrompt.ts","../src/ai/prompts/judgePrompt.ts","../src/ai/prompts/projectInstructionPrompt.ts","../src/ai/prompts/selfLabPrompt.ts","../src/ai/prompts/diagnosticQuizPrompt.ts","../src/ai/flows/generateLessonMasterFlow.ts","../src/ai/flows/generateActivityFlow.ts","../src/ai/flows/generateCodeLabFlow.ts","../src/ai/flows/generateWorksheetFlow.ts","../src/ai/flows/generateHandoutFlow.ts","../src/ai/flows/generateSlidesFlow.ts","../src/ai/flows/generateTeacherGuideFlow.ts","../src/ai/flows/generateExtensionFlow.ts","../src/ai/flows/auditCurriculumQualityFlow.ts","../src/ai/flows/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/index.ts","../src/ai/tools/specialistTools.ts","../src/ai/modelPolicyResolver.ts","../src/ai/llmJudgeEngine.ts","../src/ai/chatToolLoop.ts","../src/pipeline/markdownSerializers.ts","../src/pipeline/selfPacedSerializers.ts","../src/pipeline/autonomousRepair.ts","../src/pipeline/milestoneBundleGenerator.ts","../src/pipeline/roadmapCurriculumGenerator.ts","../src/pipeline/projectInstructionGenerator.ts","../src/pipeline/generateSelfPacedBundle.ts","../src/pipeline/roadmapSotAdapter.ts","../src/pipeline/index.ts","../src/storage/fileSystemCurriculumAdapter.ts","../src/storage/supabaseCurriculumAdapter.ts","../src/storage/factory.ts","../src/services/statusService.ts","../src/services/contextService.ts","../src/services/sotGeneratorService.ts","../src/services/frameworkLinter.ts","../src/standards/standardStackGenerator.ts","../src/services/lessonProductionService.ts","../src/workflow/gateSettings.ts","../src/services/knowledgeExpositionService.ts","../src/services/curriculumPlannerService.ts","../src/standards/standardsContextInjector.ts","../src/standards/frameworkPackSchema.ts","../src/standards/data/csta-k12-2017.json","../src/standards/bundledPacks.ts","../src/services/singleArtifactService.ts","../src/services/projectCreationService.ts","../src/services/commandService.ts","../src/services/deterministicPipelineRunner.ts","../src/services/prefillService.ts","../src/services/frameworkProjectionService.ts","../src/services/translationPolicyService.ts","../src/publishers/localWorkspaceManager.ts","../src/publishers/gitPublisher.ts","../src/publishers/supabasePublisher.ts","../src/publishers/packagingService.ts","../src/workflow/errors/rateLimitHandler.ts","../src/workflow/steps/lessonSteps.ts","../src/workflow/steps/satelliteSteps.ts","../src/workflow/steps/satelliteJudgeStep.ts","../src/workflow/steps/publishSteps.ts","../src/workflow/hooks/approvalHook.ts","../src/standards/standardsCoverageGate.ts","../src/standards/standardsRegistryAdapter.ts","../src/workflow/workflows/milestoneWorkflow.ts","../src/workflow/workflows/roadmapWorkflow.ts","../src/index.ts","../src/evaluators/deterministicStructuralLinter.ts","../src/evaluators/academicAuditor.ts","../src/evaluators/bloomTaxonomyEvaluator.ts","../src/evaluators/crossArtifactDriftEvaluator.ts","../src/evaluators/constructiveAlignmentEvaluator.ts","../src/evaluators/fiveEInstructionalEvaluator.ts","../src/evaluators/codeHardwareFeasibilityEvaluator.ts","../src/evaluators/misconceptionEvaluator.ts","../src/media/types.ts","../src/media/imageProviders.ts","../src/media/stockSearch.ts","../src/media/ledger.ts","../src/media/curator.ts","../src/media/orchestrate.ts"],"names":["CurriculumError","path","fs","z","createOpenAI","google","createGoogleGenerativeAI","deepseek","createDeepSeek","openai","generateObject","streamObject","pLimit","fsPromises","crypto","createClient","__filename","fileURLToPath","__dirname","createHash","runCurriculumAIInference","rest","injectYamlReviewMetadata","report","lintAndSanitizeArtifact","jsonrepair","pad2","Octokit","header","rows","getStepMetadata","RetryableError","workflowPkg","createHook","sleep","dimFindings","resolveApiKey"],"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_SOT_MISSING'\n | 'ERR_SOT_INVALID_SCHEMA'\n | 'ERR_TASK_GATE_BLOCKED'\n | 'ERR_METERED_LIMIT_EXCEEDED'\n | 'ERR_SCHEMA_CONTRACT_VIOLATION'\n | 'ERR_STORAGE_IO_FAILED';\n\nexport interface CurriculumErrorDetail {\n errorCode: CurriculumErrorCode;\n agent?: string;\n artifactType?: string;\n lessonId?: string;\n provider?: string;\n statusCode?: number;\n message: string;\n suggestedAction: string;\n retryable: boolean;\n timestamp: string;\n rawError?: string;\n}\n\nexport class CurriculumError extends Error {\n public readonly detail: CurriculumErrorDetail;\n\n constructor(detail: Omit<CurriculumErrorDetail, 'timestamp'>) {\n super(`[${detail.errorCode}] ${detail.message}`);\n this.name = 'CurriculumError';\n this.detail = {\n ...detail,\n timestamp: new Date().toISOString()\n };\n Object.setPrototypeOf(this, CurriculumError.prototype);\n }\n\n get errorCode(): CurriculumErrorCode {\n return this.detail.errorCode;\n }\n\n get retryable(): boolean {\n return this.detail.retryable;\n }\n\n get suggestedAction(): string {\n return this.detail.suggestedAction;\n }\n\n toJSON(): CurriculumErrorDetail {\n return this.detail;\n }\n}\n\n/**\n * Helper to build standardized AI inference errors\n */\nexport function createAiInferenceError(params: {\n errorCode: CurriculumErrorCode;\n message: string;\n provider?: string;\n statusCode?: number;\n agent?: string;\n artifactType?: string;\n lessonId?: string;\n rawError?: any;\n suggestedAction?: string;\n retryable?: boolean;\n}): CurriculumError {\n const {\n errorCode,\n message,\n provider,\n statusCode,\n agent,\n artifactType,\n lessonId,\n rawError,\n suggestedAction = getSuggestedActionForCode(errorCode),\n retryable = isCodeRetryable(errorCode)\n } = params;\n\n return new CurriculumError({\n errorCode,\n message,\n provider,\n statusCode,\n agent,\n artifactType,\n lessonId,\n suggestedAction,\n retryable,\n rawError: typeof rawError === 'string' ? rawError : rawError?.message || JSON.stringify(rawError)\n });\n}\n\nfunction getSuggestedActionForCode(code: CurriculumErrorCode): string {\n switch (code) {\n case 'ERR_AI_NO_API_KEY':\n return 'Vào Settings > API Keys để cấu hình ít nhất một khóa API (Gemini, DeepSeek, OpenRouter, Alibaba hoặc NVIDIA).';\n case 'ERR_AI_RATE_LIMIT':\n return 'API đã vượt quá giới hạn lượt gọi (Rate Limit HTTP 429). Hãy chờ 30-60 giây rồi bấm Rerun hoặc chuyển sang Provider dự phòng.';\n case 'ERR_AI_AUTH_FAILED':\n return 'API Key không hợp lệ hoặc đã hết hạn (HTTP 401/403). Vui lòng kiểm tra lại Key trong mục Cài đặt.';\n case 'ERR_AI_NETWORK_TIMEOUT':\n return 'Kết nối mạng tới máy chủ AI bị quá thời gian chờ (Timeout). Vui lòng kiểm tra đường truyền và bấm Rerun.';\n case 'ERR_AI_RESPONSE_MALFORMED':\n return 'Mô hình AI trả về kết quả rỗng hoặc không đúng định dạng markdown. Bấm Rerun để yêu cầu AI sinh lại.';\n case 'ERR_AI_ALL_PROVIDERS_FAILED':\n return 'Toàn bộ các nhà cung cấp trong chuỗi Fallback đều thất bại. Vui lòng kiểm tra kết nối Internet và hạn mức Token.';\n case 'ERR_SOT_MISSING':\n return 'Thiếu tài liệu nền tảng SOT (CURRICULUM_FRAMEWORK.md hoặc LEARNER_PROFILE.md). Hãy chạy workflow Khởi tạo dự án trước.';\n case 'ERR_TASK_GATE_BLOCKED':\n return 'Học liệu phía sau bị chặn do Giáo án (LESSON) phía trước chưa được Phê duyệt (Approval Gate). Hãy bấm Phê duyệt Giáo án để mở khóa.';\n case 'ERR_METERED_LIMIT_EXCEEDED':\n return 'Chính sách Metered Execution giới hạn tối đa 2 bài học mỗi đợt. Vui lòng phê duyệt các bài hiện tại trước khi tạo thêm.';\n case 'ERR_SCHEMA_CONTRACT_VIOLATION':\n return 'Nội dung sinh ra thiếu các phần bắt buộc [REQUIRED]. Hãy kích hoạt kiểm thử hoặc bấm Rerun.';\n case 'ERR_STORAGE_IO_FAILED':\n return 'Lỗi đọc/ghi tệp tin trên hệ thống lưu trữ. Kiểm tra quyền ghi thư mục output/projects.';\n default:\n return 'Bấm Rerun để thử lại hoặc kiểm tra nhật ký hệ thống.';\n }\n}\n\nfunction isCodeRetryable(code: CurriculumErrorCode): boolean {\n switch (code) {\n case 'ERR_AI_RATE_LIMIT':\n case 'ERR_AI_NETWORK_TIMEOUT':\n case 'ERR_AI_RESPONSE_MALFORMED':\n case 'ERR_STORAGE_IO_FAILED':\n return true;\n case 'ERR_AI_NO_API_KEY':\n case 'ERR_AI_AUTH_FAILED':\n case 'ERR_SOT_MISSING':\n case 'ERR_TASK_GATE_BLOCKED':\n case 'ERR_METERED_LIMIT_EXCEEDED':\n case 'ERR_SCHEMA_CONTRACT_VIOLATION':\n return false;\n default:\n return true;\n }\n}\n","import { createAiInferenceError } from '../errors';\nimport fs from 'fs';\nimport path from 'path';\n\nexport interface ChatMessage {\n role: 'user' | 'assistant' | 'system' | 'model';\n content: string;\n}\n\nexport interface StreamRunnerOptions {\n openrouterKey?: string;\n deepseekKey?: string;\n alibabaKey?: string;\n geminiKey?: string;\n nvidiaKey?: string;\n openaiKey?: string;\n anthropicKey?: string;\n model?: string;\n systemPersona?: string;\n maxTokens?: number;\n temperature?: number;\n reasoningEffort?: 'off' | 'low' | 'medium' | 'high' | 'max';\n}\n\nfunction resolveApiKey(keyName: string, explicitKey?: string): string {\n if (explicitKey && explicitKey.trim()) return explicitKey.trim();\n if (typeof process !== 'undefined' && process.env && process.env[keyName]) {\n return process.env[keyName]!;\n }\n\n try {\n const currentDir = process.cwd();\n const envPaths = [\n path.resolve(currentDir, '.env.local'),\n path.resolve(currentDir, '.env'),\n path.resolve(currentDir, 'apps/web/.env.local'),\n path.resolve(currentDir, 'packages/learnwell-platform/.env'),\n path.resolve(currentDir, '..', '.env.local'),\n path.resolve(currentDir, '..', '.env'),\n path.resolve(currentDir, '../..', '.env.local'),\n path.resolve(currentDir, '../..', '.env'),\n ];\n for (const envPath of envPaths) {\n if (fs.existsSync(envPath)) {\n const content = fs.readFileSync(envPath, 'utf-8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#') && trimmed.startsWith(keyName + '=')) {\n return trimmed.substring(keyName.length + 1).trim().replace(/^[\"']|[\"']$/g, '');\n }\n }\n }\n }\n } catch {}\n return '';\n}\n\n/**\n * Checks if a specific AI provider is enabled via environment variables.\n * Supported env controls:\n * 1. ENABLE_<PROVIDER>=true|false (e.g. ENABLE_ALIBABA=false, ENABLE_OPENROUTER=true)\n * 2. ALLOWED_AI_PROVIDERS=openrouter,nvidia\n * 3. DISABLED_AI_PROVIDERS=alibaba,deepseek,gemini\n */\nexport function isProviderEnabled(provider: string): boolean {\n const p = provider.toLowerCase();\n\n // 1. Explicit ENABLE_<PROVIDER>=true/false\n const explicitVal = resolveApiKey(`ENABLE_${p.toUpperCase()}`);\n if (explicitVal !== '') {\n return explicitVal === 'true' || explicitVal === '1';\n }\n\n // 2. ALLOWED_AI_PROVIDERS (whitelist)\n const allowedList = resolveApiKey('ALLOWED_AI_PROVIDERS');\n if (allowedList && allowedList.trim()) {\n const allowed = allowedList.split(',').map(s => s.trim().toLowerCase());\n return allowed.includes(p);\n }\n\n // 3. DISABLED_AI_PROVIDERS (blacklist)\n const disabledList = resolveApiKey('DISABLED_AI_PROVIDERS');\n if (disabledList && disabledList.trim()) {\n const disabled = disabledList.split(',').map(s => s.trim().toLowerCase());\n if (disabled.includes(p)) return false;\n }\n\n return true;\n}\n\n/**\n * Checks if a model is permitted by ALLOWED_AI_MODELS filter (supports wildcards e.g. nvidia/*, *:free)\n */\nexport function isModelAllowed(model: string): boolean {\n const allowedList = resolveApiKey('ALLOWED_AI_MODELS');\n if (!allowedList || !allowedList.trim()) return true;\n\n const patterns = allowedList.split(',').map(s => s.trim());\n return patterns.some(pattern => {\n if (pattern === '*' || pattern === model) return true;\n if (pattern.endsWith('*') && model.startsWith(pattern.slice(0, -1))) return true;\n if (pattern.startsWith('*') && model.endsWith(pattern.slice(1))) return true;\n return false;\n });\n}\n\nexport interface FallbackTarget {\n provider: string;\n model: string;\n}\n\n/**\n * Resolves the designated last-resort fallback chain from environment variables.\n * Comma-separated lists are parsed in left-to-right priority order:\n * - FALLBACK_AI_PROVIDER=nvidia,openrouter (Must be enabled / in ALLOWED_AI_PROVIDERS)\n * - FALLBACK_AI_MODEL=nvidia/nemotron-3-ultra-550b-a55b,@preset/coding-free,deepseek/deepseek-chat:free\n */\nexport function getDesignatedFallbackChain(): FallbackTarget[] {\n const rawProviders =\n resolveApiKey('FALLBACK_AI_PROVIDER') ||\n resolveApiKey('FALLBACK_AI_PROVIDERS') ||\n resolveApiKey('DEFAULT_AI_PROVIDER') ||\n 'nvidia,openrouter';\n\n const rawModels =\n resolveApiKey('FALLBACK_AI_MODEL') ||\n resolveApiKey('FALLBACK_AI_MODELS') ||\n resolveApiKey('DEFAULT_AI_MODEL') ||\n 'nvidia/nemotron-3-ultra-550b-a55b,@preset/coding-free,deepseek/deepseek-chat:free';\n\n // Providers in priority order (MUST be enabled / allowed in ALLOWED_AI_PROVIDERS)\n const providerList = rawProviders\n .split(',')\n .map((p) => p.trim().toLowerCase())\n .filter((p) => p.length > 0 && isProviderEnabled(p));\n\n const modelList = rawModels\n .split(',')\n .map((m) => m.trim())\n .filter((m) => m.length > 0 && isModelAllowed(m));\n\n const chain: FallbackTarget[] = [];\n\n for (const provider of providerList) {\n let providerModels: string[] = [];\n\n if (provider === 'nvidia') {\n providerModels = modelList.filter((m) => m.startsWith('nvidia/') || m.startsWith('meta/') || m.startsWith('mistralai/'));\n if (providerModels.length === 0) {\n providerModels = ['nvidia/nemotron-3-ultra-550b-a55b', 'nvidia/nemotron-3.5-lightning-30b-a3b'];\n }\n } else if (provider === 'openrouter') {\n providerModels = modelList.filter((m) => m.startsWith('@') || m.includes('/') || m.includes(':'));\n if (providerModels.length === 0) {\n providerModels = ['@preset/coding-free', 'deepseek/deepseek-chat:free', 'meta-llama/llama-3.3-70b-instruct:free'];\n }\n } else if (provider === 'alibaba' || provider === 'dashscope') {\n providerModels = modelList.filter((m) => m.startsWith('qwen') || m.includes('deepseek'));\n if (providerModels.length === 0) {\n providerModels = ['deepseek-v4-flash-0731', 'qwen-plus', 'qwen3.7-plus'];\n }\n } else if (provider === 'google' || provider === 'gemini') {\n providerModels = modelList.filter((m) => m.startsWith('gemini'));\n if (providerModels.length === 0) {\n providerModels = ['gemini-2.0-flash', 'gemini-1.5-flash'];\n }\n } else if (provider === 'deepseek') {\n providerModels = modelList.filter((m) => m.startsWith('deepseek'));\n if (providerModels.length === 0) {\n providerModels = ['deepseek-chat', 'deepseek-reasoner'];\n }\n } else {\n providerModels = modelList.length > 0 ? modelList : ['default'];\n }\n\n for (const model of providerModels) {\n if (!chain.some((c) => c.provider === provider && c.model === model)) {\n chain.push({ provider, model });\n }\n }\n }\n\n return chain;\n}\n\nexport function getDesignatedFallbackConfig(): FallbackTarget {\n const chain = getDesignatedFallbackChain();\n if (chain.length > 0) return chain[0];\n return { provider: 'nvidia', model: 'nvidia/nemotron-3-ultra-550b-a55b' };\n}\n\nexport type ChunkType = 'content' | 'thought' | 'tool_call' | 'usage';\n\n/**\n * Separate thinking process from main content safely\n */\nexport function extractThoughtAndContent(rawText: string): { thought: string; content: string } {\n let text = rawText || '';\n let thought = '';\n\n // 1. Explicit <think>...</think> tags\n const thinkMatch = text.match(/<think>([\\s\\S]*?)<\\/think>/i);\n if (thinkMatch) {\n thought = thinkMatch[1].trim();\n text = text.replace(/<think>[\\s\\S]*?<\\/think>/gi, '').trim();\n } else if (text.includes('<think>')) {\n // Unclosed <think> tag\n const parts = text.split('<think>');\n text = parts[0].trim();\n thought = parts[1].trim();\n }\n\n // 2. Patterns like \"Here's a thinking process: ... \\n\\n# Main Title\"\n if (!thought && (text.startsWith(\"Here's a thinking process:\") || text.startsWith(\"Thinking Process:\"))) {\n // Look for markdown heading (# or ## or 🎯 or 1. or ---) as transition to main answer\n const splitRegex = /\\n(?=(?:#|##|###|🎯|🧭|📋|🚀|1\\.\\s+[A-Z\\u00C0-\\u1EF9]|---))/m;\n const match = text.search(splitRegex);\n if (match > 0) {\n thought = text.slice(0, match).trim();\n text = text.slice(match).trim();\n }\n }\n\n // 3. Strip outer markdown codeblock fence if AI wrapped the entire document\n let content = text.trim();\n if (content.startsWith('```markdown')) {\n content = content.replace(/^```markdown\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n } else if (content.startsWith('```md')) {\n content = content.replace(/^```md\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n } else if (content.startsWith('```') && content.endsWith('```') && !content.includes('---')) {\n content = content.replace(/^```\\w*\\s*\\n/i, '').replace(/\\n```\\s*$/i, '');\n }\n\n return {\n thought: thought.trim(),\n content: content.trim()\n };\n}\n\n/**\n * Idle-based abort controller. Unlike AbortSignal.timeout() — which kills a\n * request after a fixed TOTAL time even while tokens are streaming — this\n * only aborts when no data arrives for `idleMs`. Every network read resets\n * the window, so long artifact generations can run for many minutes while\n * genuinely hung connections are still detected.\n */\nfunction createIdleAbortController(idleMs: number) {\n const controller = new AbortController();\n let timer: ReturnType<typeof setTimeout> | null = null;\n const arm = () => {\n if (timer) clearTimeout(timer);\n timer = setTimeout(\n () => controller.abort(new Error(`Idle timeout: no data for ${Math.round(idleMs / 1000)}s`)),\n idleMs\n );\n (timer as any)?.unref?.();\n };\n arm();\n return {\n signal: controller.signal,\n /** Reset the idle window (call on every received chunk). */\n kick: arm,\n /** Clear the pending timer once the request lifecycle is over. */\n dispose: () => {\n if (timer) clearTimeout(timer);\n timer = null;\n }\n };\n}\ntype IdleAbort = ReturnType<typeof createIdleAbortController>;\n\n/**\n * Helper to process an OpenAI-compatible SSE response stream with Thinking & Tool Call streaming\n */\nasync function processOpenAISSEStream(\n response: Response,\n onChunk?: (token: string, type: ChunkType) => void,\n idle?: IdleAbort,\n toolCallCollector?: Map<string, { id: string; name: string; argsBuffer: string }>\n): Promise<string> {\n if (!response.body) return '';\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let fullRaw = '';\n let buffer = '';\n let insideThinkTag = false;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n idle?.kick();\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (trimmed === 'data: [DONE]') continue;\n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.substring(6));\n\n // 0. Capture exact provider token usage if available in the SSE stream\n if (json.usage) {\n const promptTokens = json.usage.prompt_tokens || json.usage.input_tokens || 0;\n const completionTokens = json.usage.completion_tokens || json.usage.output_tokens || 0;\n const totalTokens = json.usage.total_tokens || (promptTokens + completionTokens);\n const reasoningTokens = json.usage.completion_tokens_details?.reasoning_tokens || 0;\n if (onChunk) {\n onChunk(JSON.stringify({ promptTokens, completionTokens, totalTokens, reasoningTokens }), 'usage');\n }\n }\n\n const delta = json.choices?.[0]?.delta;\n if (!delta) continue;\n\n // 1. Explicit reasoning_content (DeepSeek / Qwen / Claude / Gemini on OpenRouter)\n const reasoning = delta.reasoning_content || delta.thought || delta.reasoning || delta.thought_process || '';\n if (reasoning) {\n if (onChunk) onChunk(reasoning, 'thought');\n }\n\n // 2. Tool Calls — stream ra UI + aggregate thành call hoàn chỉnh khi có collector\n if (delta.tool_calls) {\n const toolStr = JSON.stringify(delta.tool_calls);\n if (onChunk) onChunk(toolStr, 'tool_call');\n if (toolCallCollector) {\n for (const tc of delta.tool_calls) {\n const idx = String(tc.index ?? tc.id ?? '0');\n const existing = toolCallCollector.get(idx) || { id: tc.id || `call_${idx}`, name: '', argsBuffer: '' };\n if (tc.id) existing.id = tc.id;\n if (tc.function?.name) existing.name += tc.function.name;\n if (tc.function?.arguments) existing.argsBuffer += tc.function.arguments;\n toolCallCollector.set(idx, existing);\n }\n }\n }\n\n // 3. Content tokens (handle inline <think> tags dynamically)\n let content = delta.content || '';\n if (content) {\n fullRaw += content;\n\n if (content.includes('<think>')) {\n insideThinkTag = true;\n const parts = content.split('<think>');\n if (parts[0] && onChunk) onChunk(parts[0], 'content');\n content = parts[1] || '';\n }\n if (content.includes('</think>')) {\n insideThinkTag = false;\n const parts = content.split('</think>');\n if (parts[0] && onChunk) onChunk(parts[0], 'thought');\n content = parts[1] || '';\n }\n\n if (insideThinkTag) {\n if (onChunk && content) onChunk(content, 'thought');\n } else if (content) {\n if (onChunk) onChunk(content, 'content');\n }\n }\n } catch {\n // Incomplete JSON chunk, skip\n }\n }\n }\n }\n\n idle?.dispose();\n\n // Final sanity cleanup so raw output has thinking separated\n const extracted = extractThoughtAndContent(fullRaw);\n return extracted.content || fullRaw;\n}\n\n/**\n * Helper to process a Google Gemini SSE stream with Thought streaming\n */\nasync function processGeminiSSEStream(\n response: Response,\n onChunk?: (token: string, type: ChunkType) => void,\n idle?: IdleAbort\n): Promise<string> {\n if (!response.body) return '';\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let fullText = '';\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n idle?.kick();\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(':')) continue;\n if (trimmed.startsWith('data: ')) {\n try {\n const json = JSON.parse(trimmed.substring(6));\n\n if (json.usageMetadata) {\n const promptTokens = json.usageMetadata.promptTokenCount || 0;\n const completionTokens = json.usageMetadata.candidatesTokenCount || 0;\n const totalTokens = json.usageMetadata.totalTokenCount || (promptTokens + completionTokens);\n if (onChunk) {\n onChunk(JSON.stringify({ promptTokens, completionTokens, totalTokens }), 'usage');\n }\n }\n\n const parts = json.candidates?.[0]?.content?.parts || [];\n for (const part of parts) {\n if (part.thought) {\n if (onChunk) onChunk(part.text || '', 'thought');\n } else if (part.text) {\n fullText += part.text;\n if (onChunk) onChunk(part.text, 'content');\n }\n }\n } catch {\n // Incomplete JSON chunk, skip\n }\n }\n }\n }\n idle?.dispose();\n return fullText;\n}\n\n/**\n * Real-time Streaming Multi-Provider Inference Runner with Thinking & Tool Streaming\n */\nexport async function streamCurriculumAIInference(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions = {},\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n const openrouterKey = resolveApiKey('OPENROUTER_API_KEY', options.openrouterKey);\n const deepseekKey = resolveApiKey('DEEPSEEK_API_KEY', options.deepseekKey);\n const alibabaKey = resolveApiKey('ALIBABA_API_KEY', options.alibabaKey) || resolveApiKey('DASHSCOPE_API_KEY');\n const geminiKey = resolveApiKey('GEMINI_API_KEY', options.geminiKey) || resolveApiKey('NEXT_PUBLIC_GEMINI_API_KEY');\n const nvidiaKey = resolveApiKey('NVIDIA_API_KEY', options.nvidiaKey);\n\n const temperature = options.temperature ?? 0.3;\n // Default to 32768 tokens (32k) so long reasoning, deep curriculum artifacts, code labs, and quizzes are never truncated\n const maxTokens = options.maxTokens ?? 32768;\n\n const basePersona = options.systemPersona || 'You are Curriculum OS Assistant — Senior AI Technical Curriculum Architect & Educational Content Specialist.';\n\n const systemInstruction = `${basePersona}\n\nProject Context:\n${projectContext}\n\nGuidelines:\n1. You have full context of the project hierarchy, syllabus, lessons, and learning objectives. Answer precisely, deeply, and directly.\n2. Complete responses fully without truncation. When generating tables or roadmaps, include all sections/milestones.\n3. Keep technical terminology and official API symbols intact.\n4. Format output using clean Markdown, clear sections, bullet points, and code blocks where required.\n5. Do NOT use emojis in headings, tab titles, or UI navigation labels.`;\n\n const formattedMessages = [\n { role: 'system', content: systemInstruction },\n ...messages.map(m => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'assistant' : 'user',\n content: m.content\n }))\n ];\n\n // Collect failure errors for full traceability\n const providerErrors: Record<string, string> = {};\n\n const requestedModel = options.model || '@preset/coding-free';\n const isNvidiaPreferred = requestedModel.startsWith('nvidia/') || (Boolean(nvidiaKey && !openrouterKey) && isProviderEnabled('nvidia'));\n\n // ── Route 1: NVIDIA NIM (Nemotron Suite) ──\n if (nvidiaKey && isProviderEnabled('nvidia')) {\n const candidateNemotronModels = [\n requestedModel.startsWith('nvidia/') ? requestedModel : 'nvidia/nemotron-3-ultra-550b-a55b',\n 'nvidia/nemotron-3-ultra-550b-a55b',\n 'nvidia/nemotron-3.5-lightning-30b-a3b',\n 'nvidia/nemotron-3-super-120b-a12b',\n 'nvidia/llama-3.1-nemotron-70b-instruct'\n ].filter(m => isModelAllowed(m));\n const uniqueNvidiaModels = Array.from(new Set(candidateNemotronModels));\n\n if (isNvidiaPreferred || uniqueNvidiaModels.length > 0) {\n for (const model of uniqueNvidiaModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://integrate.api.nvidia.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${nvidiaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`nvidia_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`nvidia_${model}`] = e?.message || 'Network error';\n console.warn(`[NVIDIA Stream] Failover for ${model}:`, e?.message || e);\n }\n }\n }\n }\n\n // ── Route 2: OpenRouter (Primary Free Presets & Models) ──\n if (openrouterKey && isProviderEnabled('openrouter')) {\n const openrouterModels = [\n requestedModel,\n 'openrouter/free',\n 'nvidia/nemotron-3-super-120b-a12b:free',\n 'nvidia/nemotron-3-ultra-550b-a55b:free',\n 'nvidia/nemotron-3.5-lightning:free',\n 'minimax/minimax-m3:free',\n 'cohere/north-mini-code:free',\n ].filter(m => isModelAllowed(m));\n const uniqueOrModels = Array.from(new Set(openrouterModels));\n\n for (const model of uniqueOrModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://openrouter.ai/api/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${openrouterKey}`,\n 'Content-Type': 'application/json',\n 'HTTP-Referer': 'https://orchable.composer',\n 'X-Title': 'Curriculum OS Studio'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`openrouter_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n if (res.status === 429) {\n console.warn(`[OpenRouter] Rate limited (429) for ${model}, trying fallback...`);\n }\n }\n } catch (e: any) {\n providerErrors[`openrouter_${model}`] = e?.message || 'Network error';\n console.warn(`[OpenRouter Stream] Failover for ${model}:`, e?.message || e);\n }\n }\n }\n\n // ── Route 3: DeepSeek Official API (Configurable via ENABLE_DEEPSEEK=true) ──\n if (deepseekKey && isProviderEnabled('deepseek')) {\n const dsModel = options.model?.includes('deepseek-reasoner') ? 'deepseek-reasoner' : 'deepseek-chat';\n if (isModelAllowed(dsModel)) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://api.deepseek.com/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${deepseekKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model: dsModel,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors['deepseek'] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors['deepseek'] = e?.message || 'Network error';\n console.warn(`[DeepSeek Stream] Failover:`, e?.message || e);\n }\n }\n }\n\n // ── Route 4: Alibaba DashScope / Qwen Cloud (Configurable via ENABLE_ALIBABA=true) ──\n if (alibabaKey && isProviderEnabled('alibaba')) {\n const qwenModels = (options.model?.startsWith('qwen')\n ? [options.model, 'qwen3.7-plus', 'qwen3.6-flash']\n : ['qwen3.7-plus', 'qwen3.6-flash']).filter(m => isModelAllowed(m));\n\n const baseUrl = alibabaKey.startsWith('sk-sp-')\n ? 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions'\n : 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions';\n\n for (const qwenModel of qwenModels) {\n try {\n const idle = createIdleAbortController(180000);\n const payload: any = {\n model: qwenModel,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n };\n\n const res = await fetch(baseUrl, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${alibabaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(payload),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`alibaba_${qwenModel}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`alibaba_${qwenModel}`] = e?.message || 'Network error';\n console.warn(`[Alibaba Stream] Failover for ${qwenModel}:`, e?.message || e);\n }\n }\n }\n\n // ── Route 5: Google Gemini Direct (Configurable via ENABLE_GEMINI=true) ──\n if (geminiKey && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n const geminiModels = (options.model?.startsWith('gemini')\n ? [options.model, 'gemini-1.5-flash', 'gemini-2.0-flash']\n : ['gemini-1.5-flash', 'gemini-2.0-flash']).filter(m => isModelAllowed(m));\n\n const geminiContents = [\n { role: 'user', parts: [{ text: systemInstruction }] },\n { role: 'model', parts: [{ text: 'Tôi đã hiểu rõ toàn bộ bối cảnh dự án và sẵn sàng hỗ trợ bạn một cách chuyên sâu, chính xác nhất.' }] },\n ...messages.map(m => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'model' : 'user',\n parts: [{ text: m.content }]\n }))\n ];\n\n for (const gModel of geminiModels) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${gModel}:streamGenerateContent?alt=sse&key=${geminiKey}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n contents: geminiContents,\n generationConfig: {\n temperature,\n maxOutputTokens: maxTokens,\n }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processGeminiSSEStream(res, onChunk, idle);\n if (text && text.trim()) return text;\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`gemini_${gModel}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`gemini_${gModel}`] = e?.message || 'Network error';\n console.warn(`[Gemini Stream] Failover for ${gModel}:`, e?.message || e);\n }\n }\n }\n\n // ── Route 6: Ultimate Designated Fallback Chain (Configurable via FALLBACK_AI_PROVIDER / FALLBACK_AI_MODEL) ──\n const fallbackChain = getDesignatedFallbackChain();\n if (fallbackChain.length > 0) {\n console.log(\n `[streamRunner] 🛡️ Primary routes failed/exhausted. Invoking designated last-resort fallback chain:`,\n fallbackChain.map((c) => `${c.provider}(${c.model})`).join(' -> ')\n );\n\n for (const target of fallbackChain) {\n const { provider, model } = target;\n\n if (provider === 'nvidia' && nvidiaKey && isProviderEnabled('nvidia')) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://integrate.api.nvidia.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${nvidiaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] ✅ Designated fallback NVIDIA (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_nvidia_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_nvidia_${model}`] = e?.message || 'Network error';\n }\n } else if (provider === 'openrouter' && openrouterKey && isProviderEnabled('openrouter')) {\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch('https://openrouter.ai/api/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${openrouterKey}`,\n 'Content-Type': 'application/json',\n 'HTTP-Referer': 'https://orchable.composer',\n 'X-Title': 'Curriculum OS Studio'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] ✅ Designated fallback OpenRouter (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_openrouter_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_openrouter_${model}`] = e?.message || 'Network error';\n }\n } else if ((provider === 'alibaba' || provider === 'dashscope') && alibabaKey && isProviderEnabled('alibaba')) {\n const baseUrl = alibabaKey.startsWith('sk-sp-')\n ? 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions'\n : 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions';\n try {\n const idle = createIdleAbortController(180000);\n const res = await fetch(baseUrl, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${alibabaKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model,\n messages: formattedMessages,\n max_tokens: maxTokens,\n temperature,\n stream: true,\n stream_options: { include_usage: true }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processOpenAISSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] ✅ Designated fallback Alibaba (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_alibaba_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_alibaba_${model}`] = e?.message || 'Network error';\n }\n } else if ((provider === 'google' || provider === 'gemini') && geminiKey && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n try {\n const idle = createIdleAbortController(180000); const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${geminiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n contents: [\n { role: 'user', parts: [{ text: systemInstruction }] },\n { role: 'model', parts: [{ text: 'Understood. I will follow the project context and guidelines.' }] },\n ...messages.map((m) => ({\n role: m.role === 'assistant' || m.role === 'model' ? 'model' : 'user',\n parts: [{ text: m.content }]\n }))\n ],\n generationConfig: {\n temperature,\n maxOutputTokens: maxTokens\n }\n }),\n signal: idle.signal\n });\n\n if (res.ok) {\n const text = await processGeminiSSEStream(res, onChunk, idle);\n if (text && text.trim()) {\n console.log(`[streamRunner] ✅ Designated fallback Gemini (${model}) succeeded!`);\n return text;\n }\n } else {\n const errText = await res.text().catch(() => '');\n providerErrors[`designated_fallback_gemini_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;\n }\n } catch (e: any) {\n providerErrors[`designated_fallback_gemini_${model}`] = e?.message || 'Network error';\n }\n }\n }\n }\n\n const isRateLimited = Object.values(providerErrors).some(msg => msg.includes('429'));\n const isAuthFailed = Object.values(providerErrors).some(msg => msg.includes('401') || msg.includes('403'));\n\n const errorCode = isRateLimited\n ? 'ERR_AI_RATE_LIMIT'\n : isAuthFailed\n ? 'ERR_AI_AUTH_FAILED'\n : 'ERR_AI_ALL_PROVIDERS_FAILED';\n\n throw createAiInferenceError({\n errorCode,\n message: `Không thể kết nối tới các nhà cung cấp AI trong chuỗi Fallback. Chi tiết: ${JSON.stringify(providerErrors)}`,\n rawError: providerErrors\n });\n}\n\n/**\n * Synchronous Multi-Model Inference Wrapper with strict error propagation\n */\nexport async function runCurriculumAIInference(\n messages: ChatMessage[],\n projectContext: string,\n options: StreamRunnerOptions = {},\n onChunk?: (token: string, type: ChunkType) => void\n): Promise<string> {\n return await streamCurriculumAIInference(messages, projectContext, options, onChunk);\n}\n","export interface LintIssue {\n line?: number;\n type: 'PREAMBLE' | 'POSTAMBLE' | 'CODE_FENCE' | 'TABLE' | 'MERMAID' | 'FRONTMATTER' | 'PLACEHOLDER' | 'MATH';\n severity: 'ERROR' | 'WARNING';\n message: string;\n autoFixable: boolean;\n}\n\nexport interface ArtifactLintReport {\n filePath?: string;\n isValid: boolean;\n issues: LintIssue[];\n autoFixedContent: string;\n fixedCount: number;\n}\n\n/**\n * Validates Mermaid diagram blocks for common syntax errors\n */\nexport function validateMermaidSyntax(code: string): { valid: boolean; error?: string } {\n const trimmed = code.trim();\n if (!trimmed) return { valid: false, error: 'Empty mermaid block' };\n\n // Check valid start keyword\n const validStarts = ['graph', 'flowchart', 'sequenceDiagram', 'classDiagram', 'stateDiagram', 'erDiagram', 'gantt', 'pie', 'mindmap', 'gitGraph', 'timeline', 'quadrantChart', 'sankey-beta', 'block-beta'];\n const firstWord = trimmed.split(/\\s+/)[0]?.replace(/^---[\\s\\S]*?---\\s*/, '') || '';\n const hasValidStart = validStarts.some(k => trimmed.startsWith(k) || trimmed.includes(`\\n${k}`));\n\n if (!hasValidStart) {\n return { valid: false, error: `Invalid mermaid declaration: \"${firstWord}\"` };\n }\n\n // Check balanced brackets, parentheses and braces in nodes\n const lines = trimmed.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // Check unmatched square brackets\n const openBrackets = (line.match(/\\[/g) || []).length;\n const closeBrackets = (line.match(/\\]/g) || []).length;\n if (openBrackets !== closeBrackets) {\n return { valid: false, error: `Line ${i + 1}: Unmatched square brackets '[' and ']'` };\n }\n\n // Check unmatched parentheses\n const openParens = (line.match(/\\(/g) || []).length;\n const closeParens = (line.match(/\\)/g) || []).length;\n if (openParens !== closeParens) {\n return { valid: false, error: `Line ${i + 1}: Unmatched parentheses '(' and ')'` };\n }\n\n // Check unmatched curly braces\n const openCurly = (line.match(/\\{/g) || []).length;\n const closeCurly = (line.match(/\\}/g) || []).length;\n if (openCurly !== closeCurly) {\n return { valid: false, error: `Line ${i + 1}: Unmatched curly braces '{' and '}'` };\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Validates and repairs markdown tables for column parity\n */\nexport function validateMarkdownTables(raw: string): { issues: LintIssue[]; fixedContent: string } {\n const issues: LintIssue[] = [];\n const lines = raw.split('\\n');\n const fixedLines: string[] = [];\n\n let inTable = false;\n let tableHeaderCols = 0;\n let tableStartLine = 0;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const isTableRow = line.trim().startsWith('|') && line.trim().endsWith('|');\n\n if (isTableRow) {\n const cols = line.split('|').slice(1, -1);\n const colCount = cols.length;\n\n if (!inTable) {\n // Table Header\n inTable = true;\n tableHeaderCols = colCount;\n tableStartLine = i + 1;\n fixedLines.push(line);\n } else if (i === tableStartLine) {\n // Table Separator (|---|---|)\n if (colCount !== tableHeaderCols) {\n issues.push({\n line: i + 1,\n type: 'TABLE',\n severity: 'WARNING',\n message: `Table separator row at line ${i + 1} has ${colCount} columns, expected ${tableHeaderCols}`,\n autoFixable: true\n });\n // Auto-fix separator\n const fixedSep = '|' + Array(tableHeaderCols).fill('---').join('|') + '|';\n fixedLines.push(fixedSep);\n } else {\n fixedLines.push(line);\n }\n } else {\n // Data row\n if (colCount !== tableHeaderCols) {\n issues.push({\n line: i + 1,\n type: 'TABLE',\n severity: 'WARNING',\n message: `Table row at line ${i + 1} has ${colCount} columns, expected ${tableHeaderCols}`,\n autoFixable: true\n });\n // Auto-fix by padding or trimming\n let fixedRowCols = [...cols];\n if (colCount < tableHeaderCols) {\n fixedRowCols = fixedRowCols.concat(Array(tableHeaderCols - colCount).fill(' '));\n } else {\n fixedRowCols = fixedRowCols.slice(0, tableHeaderCols);\n }\n fixedLines.push('|' + fixedRowCols.join('|') + '|');\n } else {\n fixedLines.push(line);\n }\n }\n } else {\n if (inTable) inTable = false;\n fixedLines.push(line);\n }\n }\n\n return { issues, fixedContent: fixedLines.join('\\n') };\n}\n\n/**\n * Scans, lints, and automatically sanitizes an artifact markdown document.\n */\nexport function lintAndSanitizeArtifact(rawContent: string, filePath?: string): ArtifactLintReport {\n const issues: LintIssue[] = [];\n let currentContent = rawContent;\n let fixedCount = 0;\n\n // 1. Strip Conversational Preamble before Frontmatter or Code block\n const preambleMatch = currentContent.match(/^([\\s\\S]*?)(?:```(?:markdown|marp|md)?\\s*\\n|---\\s*\\n)/i);\n if (preambleMatch && preambleMatch[1].trim().length > 0) {\n const preamble = preambleMatch[1].trim();\n issues.push({\n type: 'PREAMBLE',\n severity: 'WARNING',\n message: `Conversational preamble detected: \"${preamble.slice(0, 50)}...\"`,\n autoFixable: true\n });\n currentContent = currentContent.slice(preambleMatch[1].length).trim();\n fixedCount++;\n }\n\n // 2. Strip Outer Code Fences (```markdown ... ```)\n const codeBlockMatch = currentContent.match(/^```(?:markdown|marp|md)?\\s*\\n([\\s\\S]*?)\\n```([\\s\\S]*)$/i);\n if (codeBlockMatch) {\n issues.push({\n type: 'CODE_FENCE',\n severity: 'WARNING',\n message: 'Document was wrapped in outer markdown code fence',\n autoFixable: true\n });\n const inner = codeBlockMatch[1].trim();\n const postamble = (codeBlockMatch[2] || '').trim();\n if (postamble.length > 0) {\n issues.push({\n type: 'POSTAMBLE',\n severity: 'WARNING',\n message: `Conversational postamble detected: \"${postamble.slice(0, 50)}...\"`,\n autoFixable: true\n });\n fixedCount++;\n }\n currentContent = inner;\n fixedCount++;\n }\n\n // 3. Strip Conversational Postamble after end of document (if not handled by code fence)\n const conversationalPhrases = [\n /(\\n\\s*(?:Hy vọng|Trên đây là|Chúc bạn|Nếu bạn cần|Hope this helps|Let me know if you need|Here is the complete|This concludes)[\\s\\S]*$)/i,\n /(\\n\\s*---\\s*\\n\\s*(?:Tài liệu được soạn thảo bởi|Generated by|AI Assistant)[\\s\\S]*$)/i\n ];\n for (const pattern of conversationalPhrases) {\n if (pattern.test(currentContent)) {\n const match = currentContent.match(pattern);\n if (match) {\n issues.push({\n type: 'POSTAMBLE',\n severity: 'WARNING',\n message: `Conversational postamble stripped: \"${match[0].trim().slice(0, 50)}...\"`,\n autoFixable: true\n });\n currentContent = currentContent.replace(pattern, '').trim();\n fixedCount++;\n }\n }\n }\n\n // 4. Frontmatter Integrity Validation\n const frontmatterMatch = currentContent.trim().match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!frontmatterMatch) {\n issues.push({\n line: 1,\n type: 'FRONTMATTER',\n severity: 'ERROR',\n message: 'Missing standard YAML frontmatter opening/closing markers (---)',\n autoFixable: false\n });\n } else {\n const fm = frontmatterMatch[1];\n if (!fm.includes('title:') && !fm.includes('id:')) {\n issues.push({\n type: 'FRONTMATTER',\n severity: 'WARNING',\n message: 'Frontmatter missing \"title:\" or \"id:\" property',\n autoFixable: false\n });\n }\n if (!fm.includes('type:')) {\n issues.push({\n type: 'FRONTMATTER',\n severity: 'WARNING',\n message: 'Frontmatter missing \"type:\" property',\n autoFixable: false\n });\n }\n // Canonical schema enforcement (from curriculum-kit/docs/refs/templates/)\n const typeMatch = fm.match(/^type:\\s*\"?([A-Z_0-9]+)\"?/m);\n const artifactType = typeMatch?.[1];\n // SLIDE uses marp frontmatter, not standard schema — skip schema check\n const isMarpSlide = fm.includes('marp:');\n if (!isMarpSlide && artifactType && artifactType !== 'STATUS') {\n if (!fm.includes('created_by:')) {\n issues.push({\n type: 'FRONTMATTER',\n severity: 'WARNING',\n message: 'Frontmatter missing \"created_by:\" — expected \"Curriculum OS Builder\"',\n autoFixable: false\n });\n }\n if (!fm.includes('phase:')) {\n issues.push({\n type: 'FRONTMATTER',\n severity: 'WARNING',\n message: 'Frontmatter missing \"phase:\" field (e.g. P1, P2, P3)',\n autoFixable: false\n });\n }\n if (!fm.includes('deliverable:')) {\n issues.push({\n type: 'FRONTMATTER',\n severity: 'WARNING',\n message: 'Frontmatter missing \"deliverable:\" field (e.g. P3-T2 for ACT, P2-T08 for QUIZ)',\n autoFixable: false\n });\n }\n if (!fm.includes('version:')) {\n issues.push({\n type: 'FRONTMATTER',\n severity: 'WARNING',\n message: 'Frontmatter missing \"version:\" field (e.g. \"v1.0\")',\n autoFixable: false\n });\n }\n if (!fm.includes('date:')) {\n issues.push({\n type: 'FRONTMATTER',\n severity: 'WARNING',\n message: 'Frontmatter missing \"date:\" field',\n autoFixable: false\n });\n }\n }\n }\n\n\n // 5. Placeholder & Stub Detection (Exclude starter code comments inside ``` ... ```)\n const proseWithoutCode = currentContent.replace(/```[\\s\\S]*?```/g, '');\n const placeholderPatterns = [\n /\\b(TODO:\\s*Viết|TBD|FIXME|PLACEHOLDER|LOREM IPSUM)\\b/i,\n /\\[Chưa điền\\]|\\[Cần bổ sung\\]|\\[Insert here\\]|\\[Placeholder\\]/i,\n /<TODO[\\s\\S]*?>/i\n ];\n placeholderPatterns.forEach(pattern => {\n if (pattern.test(proseWithoutCode)) {\n issues.push({\n type: 'PLACEHOLDER',\n severity: 'ERROR',\n message: `Contains unfinished placeholder or stub matching pattern: ${pattern.source}`,\n autoFixable: false\n });\n }\n });\n\n // 6. Markdown Table Validation & Auto-fix\n const tableResult = validateMarkdownTables(currentContent);\n if (tableResult.issues.length > 0) {\n issues.push(...tableResult.issues);\n currentContent = tableResult.fixedContent;\n fixedCount += tableResult.issues.length;\n }\n\n // 7. Mermaid Block Syntax Validation\n const mermaidMatches = Array.from(currentContent.matchAll(/```mermaid\\s*\\n([\\s\\S]*?)\\n```/g));\n for (const m of mermaidMatches) {\n const mermaidCode = m[1];\n const validation = validateMermaidSyntax(mermaidCode);\n if (!validation.valid) {\n issues.push({\n type: 'MERMAID',\n severity: 'ERROR',\n message: `Mermaid Syntax Error: ${validation.error}`,\n autoFixable: false\n });\n }\n }\n\n // 8. Math LaTeX Dollar Matching\n const doubleDollarCount = (currentContent.match(/\\$\\$/g) || []).length;\n if (doubleDollarCount % 2 !== 0) {\n issues.push({\n type: 'MATH',\n severity: 'ERROR',\n message: 'Unmatched block math delimiters ($$)',\n autoFixable: false\n });\n }\n\n const hasErrors = issues.some(i => i.severity === 'ERROR');\n\n return {\n filePath,\n isValid: !hasErrors,\n issues,\n autoFixedContent: currentContent,\n fixedCount\n };\n}\n","import { z } from 'zod';\n\n// ─── Shared sub-schemas ───────────────────────────────────────────────────────\n\nexport const LearningObjectiveRowSchema = z.object({\n code: z.string().describe('LO code, e.g. \"LO1\"'),\n objective: z.string().describe('Bloom-tagged learning objective'),\n evidence: z.string().describe('Observable student evidence / output'),\n successCriteria: z.string().describe('Measurable pass/fail condition'),\n /**\n * Standards anchors (Phase 1: optional). Format: \"statementId\" or\n * \"packId:statementId\", e.g. \"csta-k12-2017:1B-AP-10\". IDs MUST exist in an\n * adopted Framework Pack — the Standards Coverage Gate resolves and audits them.\n */\n standardRefs: z.array(z.string()).optional().default([]).describe('Anchoring standard statement IDs from adopted Framework Packs'),\n /** Ontora knowledge-tree anchors, e.g. \"ontora:WHILE_LOOP\" (optional, Phase 1). */\n conceptRefs: z.array(z.string()).optional().default([]).describe('Anchoring ontora concept codes, e.g. \"ontora:FOR_LOOP\"'),\n});\n\nexport const ActivitySeqRowSchema = z.object({\n seq: z.coerce.number().int(),\n phase: z.string().describe('EDP or 5E phase label'),\n activityType: z.string().describe('e.g. \"Mini-lecture\", \"Brainstorming\", \"Hands-on Coding\"'),\n actor: z.string().describe('\"Teacher\" | \"Students\" | \"Teacher + Students\"'),\n purpose: z.string().describe('Why this activity is done'),\n studentAction: z.string(),\n teacherMove: z.string(),\n outputEvidence: z.string(),\n lo: z.array(z.string()).describe('e.g. [\"LO1\",\"LO2\"]'),\n durationMinutes: z.coerce.number().default(10),\n artifactContract: z.string().describe('Satellite artifact(s) linked, e.g. \"SLIDE_U03_M01_L13\"'),\n});\n\nexport const ResourceMapRowSchema = z.object({\n resourceType: z.string().describe('\"Slide Deck\" | \"Handout\" | \"Starter Code\" | \"Lab Tools\" | etc.'),\n identifier: z.string(),\n description: z.string(),\n location: z.string().default(''),\n});\n\nexport const AssessmentMapRowSchema = z.object({\n form: z.string().describe('\"Formative Checkpoint\" | \"Summative Assessment\" | \"Peer Feedback\"'),\n when: z.string().describe('When in the sequence this is assessed'),\n tool: z.string().describe('Assessment tool or artifact used'),\n criteria: z.string(),\n performanceLevels: z.string().default(''),\n remediationPath: z.string().default(''),\n});\n\nexport const ArtifactContractRowSchema = z.object({\n artifactId: z.string(),\n artifactType: z.string(),\n description: z.string(),\n requiredSections: z.string().default(''),\n format: z.string().default(''),\n owner: z.string().default(''),\n});\n\nexport const LessonFlowPhaseSchema = z.object({\n phase: z.string().describe('Phase title, e.g. \"ASK\", \"ENGAGE\", \"PLAN\"'),\n durationMinutes: z.coerce.number(),\n content: z.string().describe('Full narrative content of this phase (teacher actions, student actions, code, outputs)'),\n});\n\nexport const TroubleshootingRowSchema = z.object({\n issue: z.string(),\n potentialCause: z.string(),\n solution: z.string(),\n});\n\n// ─── Shared base for both Lesson models ──────────────────────────────────────\n\nconst LessonBaseSchema = z.object({\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n estimatedDuration: z.string().describe('e.g. \"90 minutes\"'),\n projectObjective: z.string(),\n materials: z.string().default(''),\n learningObjectives: z.array(LearningObjectiveRowSchema).min(1),\n activitySequence: z.array(ActivitySeqRowSchema).min(1),\n resourceMap: z.array(ResourceMapRowSchema).default([]),\n assessmentMap: z.array(AssessmentMapRowSchema).default([]),\n artifactContract: z.array(ArtifactContractRowSchema).default([]),\n lessonFlow: z.array(LessonFlowPhaseSchema).min(1),\n teacherNotes: z.string().optional().default(''),\n troubleshooting: z.array(TroubleshootingRowSchema).default([]),\n});\n\n// ─── LESSON_EDP: Engineering Design Process ───────────────────────────────────\n\n/**\n * Lesson Plan Schema — EDP (Engineering Design Process) Model\n * Template: LESSON_EDP_template.md\n * Phases: Ask → Imagine → Plan → Create → Test & Improve → Share & Evaluate\n */\nexport const EDPPhaseEnum = z.enum([\n 'Ask',\n 'Imagine',\n 'Plan',\n 'Create',\n 'Test & Improve',\n 'Share & Evaluate',\n]);\n\nexport const LessonPlanEDPSchema = LessonBaseSchema.extend({\n artifactType: z.literal('LESSON_EDP').default('LESSON_EDP'),\n});\n\nexport type LessonPlanEDP = z.infer<typeof LessonPlanEDPSchema>;\n\n// ─── LESSON_5E: 5E Instructional Model ──────────────────────────────────────\n\n/**\n * Lesson Plan Schema — 5E Instructional Model\n * Template: LESSON_5E_template.md\n * Phases: Engage → Explore → Explain → Elaborate → Evaluate\n */\nexport const FiveEPhaseEnum = z.enum([\n 'Engage',\n 'Explore',\n 'Explain',\n 'Elaborate',\n 'Evaluate',\n]);\n\n/** Additional 5E-specific Lesson Flow fields */\nexport const FiveEFlowPhaseSchema = LessonFlowPhaseSchema.extend({\n hookScenario: z.string().optional().describe('Hook story/roleplay for Engage phase (5E-specific)'),\n openQuestion: z.string().optional().describe('Explicit guiding question posed to class'),\n visualIllustration: z.string().optional().describe('Mermaid diagram, code, or JSON snippet for Explain phase'),\n tieredScaffolding: z.object({\n bronze: z.string().default(''),\n silver: z.string().default(''),\n gold: z.string().default(''),\n }).optional(),\n exitTicketQuestions: z.array(z.string()).optional(),\n});\n\nexport const LessonPlan5ESchema = LessonBaseSchema.extend({\n artifactType: z.literal('LESSON_5E').default('LESSON_5E'),\n lessonFlow: z.array(FiveEFlowPhaseSchema).min(1),\n keywords: z.array(z.string()).default([]),\n}).omit({ lessonFlow: true }).extend({\n lessonFlow: z.array(FiveEFlowPhaseSchema).min(1),\n});\n\nexport type LessonPlan5E = z.infer<typeof LessonPlan5ESchema>;\n\n// ─── Legacy LESSON schema (kept for backward compatibility) ──────────────────\n\nexport const CoreConceptSchema = z.object({\n name: z.string(),\n analogy: z.string().default(''),\n technicalDepth: z.string().default(''),\n comparisonTable: z.object({\n headers: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n }).optional(),\n formulaOrRule: z.string().optional().default(''),\n});\n\nexport const LessonSectionSchema = z.object({\n title: z.string(),\n durationMinutes: z.coerce.number().default(15),\n teacherActions: z.string().default(''),\n studentActions: z.string().default(''),\n analogies: z.array(z.string()).optional().default([]),\n formativeCheck: z.string().optional().default(''),\n});\n\n/**\n * @deprecated Use LessonPlanEDPSchema or LessonPlan5ESchema instead.\n * Kept for backward compatibility with existing data.\n */\nexport const LessonPlanSchema = z.object({\n artifactType: z.literal('LESSON').default('LESSON'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('vi'),\n topic: z.string().default('General Topic'),\n targetGradeOrAudience: z.string().default('Learners'),\n overview: z.string(),\n learningObjectives: z.array(z.object({\n code: z.string().default('LO'),\n name: z.string().optional().default(''),\n description: z.string(),\n bloomLevel: z.string().default('understand'),\n successCriteria: z.string().optional().default(''),\n })).default([]),\n prerequisites: z.string().optional().default(''),\n materialsSummary: z.string().optional().default(''),\n keywords: z.array(z.string()).optional().default([]),\n hookTitle: z.string().optional().default(''),\n hookScenario: z.string().default(''),\n hookQuestions: z.array(z.string()).optional().default([]),\n coreConcepts: z.array(CoreConceptSchema).optional().default([]),\n guidedPractice: z.object({\n title: z.string().default(''),\n explanation: z.string().default(''),\n codeSnippet: z.string().default(''),\n codeLanguage: z.string().default('typescript'),\n mermaidDiagram: z.string().optional().default(''),\n }).optional(),\n independentPractice: z.object({\n title: z.string().default(''),\n description: z.string().default(''),\n }).optional(),\n differentiation: z.object({\n bronzeTier: z.string().default(''),\n silverTier: z.string().default(''),\n goldTier: z.string().default(''),\n }).default({ bronzeTier: '', silverTier: '', goldTier: '' }),\n sections: z.array(LessonSectionSchema).min(1),\n exitTicket: z.object({\n questionStem: z.string(),\n expectedAnswerOrRubric: z.string().default(''),\n metacognitivePrompt: z.string().default(''),\n }),\n teacherNotes: z.object({\n commonPitfalls: z.array(z.string()).default([]),\n troubleshootingMatrix: z.array(TroubleshootingRowSchema).default([]),\n extensionNotes: z.string().optional().default(''),\n }).optional().default({ commonPitfalls: [], troubleshootingMatrix: [], extensionNotes: '' }),\n});\n\nexport type LessonPlan = z.infer<typeof LessonPlanSchema>;\nexport type CoreConcept = z.infer<typeof CoreConceptSchema>;\nexport type TroubleshootingRow = z.infer<typeof TroubleshootingRowSchema>;\nexport type ActivitySeqRow = z.infer<typeof ActivitySeqRowSchema>;\nexport type LessonFlowPhase = z.infer<typeof LessonFlowPhaseSchema>;\nexport type LearningObjectiveRow = z.infer<typeof LearningObjectiveRowSchema>;\n","import { z } from 'zod';\n\n/**\n * Activity Lab Schema — Hands-on Step-by-Step Inquiry-Based Practical Lab\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/ACT_template.md\n */\nexport const ActivityStepSchema = z.object({\n stepNumber: z.coerce.number().default(1),\n title: z.string().describe('Short descriptive title of this step'),\n durationMinutes: z.coerce.number().default(10).describe('Estimated duration for this step'),\n teacherInstructions: z.string().default('').describe('Guidance and checkpoint tips for the teacher'),\n studentInstructions: z.string().describe('Direct, clear, actionable step-by-step instructions for students'),\n checkpoint: z.string().optional().default('').describe('Clear observable checkpoint or success indicator for this step'),\n});\n\nexport const ComputationalThinkingSchema = z.object({\n problemStatement: z.string().describe('Tình huống thực tế đầy thách thức cần giải quyết'),\n decomposition: z.array(z.string()).describe('Các bước phân rã bài toán lớn thành các phần nhỏ'),\n algorithmDesign: z.string().describe('Thiết kế luồng thuật toán và xử lý dữ liệu trước khi code'),\n});\n\nexport const ActiveLearningWorkflowSchema = z.object({\n phase1Planning: z.object({\n durationMinutes: z.coerce.number().default(15),\n studentTask: z.string().describe('Vẽ sơ đồ, thiết kế luồng trên giấy/bảng trước khi gõ phím'),\n teacherAction: z.string().describe('Quan sát và đặt câu hỏi gợi mở (Inquiry questions)'),\n inquiryQuestions: z.array(z.string()).default([]),\n }),\n phase2Implementation: z.object({\n durationMinutes: z.coerce.number().default(40),\n studentTask: z.string().describe('Hiện thực hóa giải pháp qua code hoặc lắp ráp phần cứng'),\n teacherAction: z.string().describe('Hỗ trợ khi học sinh bị tắc > 5 phút, tránh làm hộ'),\n codeOrCommands: z.array(z.string()).default([]),\n }),\n phase3Debugging: z.object({\n durationMinutes: z.coerce.number().default(15),\n testingSteps: z.string().describe('Quy trình chạy thử nghiệm và kiểm tra đầu ra'),\n errorAnalysis: z.string().describe('Phân tích mã lỗi và tự gỡ lỗi dựa trên bảng Troubleshooting'),\n }),\n});\n\nexport const ActivityLabSchema = z.object({\n artifactType: z.literal('ACT').default('ACT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Activity title'),\n language: z.string().default('vi').describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n objective: z.string().describe('Core hands-on objective of the activity'),\n totalDurationMinutes: z.coerce.number().default(60).describe('Total estimated duration of the activity'),\n \n // 1. Computational Thinking Focus\n computationalThinking: ComputationalThinkingSchema.optional(),\n\n // 2. Bill of Materials (BOM)\n materialsBOM: z.object({\n hardware: z.array(z.string()).default([]).describe('Hardware boards, components, sensors, or devices required (bọc trong <!-- [HARDWARE_BOM] -->)'),\n software: z.array(z.string()).default([]).describe('IDE, compilers, browser tools, libraries, or simulators required'),\n consumables: z.array(z.string()).default([]).describe('Paper, pens, wires, or disposable items'),\n otherResources: z.array(z.string()).default([]).describe('Worksheets, handouts, or reference links'),\n }),\n\n // 3. Constraints & Safety\n safetyWarnings: z.array(z.string()).default([]).describe('Essential safety cautions, electrical warnings, or common hazards'),\n designConstraints: z.array(z.string()).default([]).describe('Design constraints to stimulate creative problem solving'),\n teacherTips: z.array(z.string()).default([]).describe('Pedagogical facilitation tips, troubleshooting tricks'),\n\n // 4. Workflow (Phases or Steps)\n activeLearningWorkflow: ActiveLearningWorkflowSchema.optional(),\n steps: z.array(ActivityStepSchema).default([]).describe('Step-by-step procedure of the activity'),\n\n // 5. Differentiation (3-Tier)\n differentiation3Tier: z.object({\n bronzeTier: z.string().default('').describe('Nhiệm vụ nền tảng cơ bản'),\n silverTier: z.string().default('').describe('Nhiệm vụ ứng dụng logic nâng cao'),\n goldTier: z.string().default('').describe('Thử thách sáng tạo mở rộng'),\n }).optional(),\n scaffoldingSupport: z.string().default('').describe('How to simplify for struggling students'),\n levelUpExtension: z.string().default('').describe('Extension task for students who finish early'),\n\n // 6. Reflection\n reflectionQuestion: z.string().optional().default('').describe('Câu hỏi phản tư kích thích tư duy phản biện'),\n});\n\nexport type ActivityLab = z.infer<typeof ActivityLabSchema>;\nexport type ComputationalThinking = z.infer<typeof ComputationalThinkingSchema>;\nexport type ActiveLearningWorkflow = z.infer<typeof ActiveLearningWorkflowSchema>;\n","import { z } from 'zod';\n\n/**\n * Code Lab Schema — Executable Source Code, Starters, Solutions & Test Cases\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/LAB_TEMPLATE.md\n */\nexport const CodeSnippetSchema = z.object({\n filename: z.string().describe('Filename with extension, e.g. main.py, App.swift, solution.ts'),\n language: z.string().describe('Programming language identifier, e.g. python, swift, typescript, cpp'),\n purpose: z.enum(['starter', 'solution', 'test_runner', 'scaffold']).describe('Role of this code file'),\n content: z.string().describe('Complete, clean, runnable source code with standardized comments and docstrings'),\n explanation: z.string().default('').describe('Explanation of key algorithmic blocks and syntax nuances'),\n});\n\nexport const LabTierTaskSchema = z.object({\n mins: z.coerce.number().default(15),\n objective: z.string().describe('Mục tiêu của tầng nhiệm vụ'),\n task: z.string().describe('Mô tả nhiệm vụ cụ thể'),\n requirement: z.string().describe('Tiêu chí hoàn thành bắt buộc'),\n});\n\nexport const CodeLabSchema = z.object({\n artifactType: z.literal('CODE').default('CODE'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Code Lab title'),\n language: z.string().default('vi').describe('Language code for human explanations, e.g. \"vi\" or \"en\"'),\n techStack: z.array(z.string()).default([]).describe('Technologies used, e.g. [\"Python\", \"PyTorch\"] or [\"Swift\", \"SwiftUI\"]'),\n \n // 1. Environment & Setup\n environmentSetup: z.object({\n languageFramework: z.string().default(''),\n ideEditor: z.string().default(''),\n requiredLibraries: z.array(z.string()).default([]),\n hardwareOrEnvConnection: z.string().optional().default(''),\n }).optional(),\n\n // 2. 3-Tier Differentiation Tasks\n threeTierTasks: z.object({\n bronze: LabTierTaskSchema,\n silver: LabTierTaskSchema,\n gold: LabTierTaskSchema,\n }).optional(),\n\n // 3. Verified Runnable Code Snippets (bọc trong <!-- [SME_MANDATE] -->)\n starterCode: CodeSnippetSchema.describe('Starter code provided to the learner with fill-in markers or skeletons'),\n solutionCode: CodeSnippetSchema.describe('Complete verified reference solution code'),\n testCases: z.array(\n z.object({\n description: z.string().describe('What this test case verifies'),\n input: z.string().optional().default('').describe('Input or mock parameters'),\n expectedOutput: z.string().describe('Expected return value, output, or UI state'),\n })\n ).default([]).describe('Automated verification tests or validation checks'),\n\n // 4. Troubleshooting & Debugging Matrix\n troubleshootingMatrix: z.array(\n z.object({\n issue: z.string().describe('Hiện tượng lỗi runtime/compile'),\n potentialCause: z.string().describe('Nguyên nhân tiềm ẩn'),\n solution: z.string().describe('Giải pháp khắc phục dứt điểm'),\n })\n ).default([]),\n commonBugsAndFixes: z.array(\n z.object({\n bugDescription: z.string().describe('Common error message or logical pitfall'),\n solutionHint: z.string().describe('How to diagnose and fix it'),\n })\n ).default([]),\n\n // 5. Submission Checklist\n submissionChecklist: z.array(z.string()).default([]).describe('Danh mục kiểm tra hoàn thành nộp bài'),\n});\n\nexport type CodeLab = z.infer<typeof CodeLabSchema>;\nexport type CodeSnippet = z.infer<typeof CodeSnippetSchema>;\nexport type LabTierTask = z.infer<typeof LabTierTaskSchema>;\n","import { z } from 'zod';\n\n// ─── Worksheet Item ───────────────────────────────────────────────────────────\n\nexport const WorksheetItemTypeEnum = z.enum([\n 'fill_blank', // Fill in the blanks sentence/table\n 'multiple_choice', // Select the correct option\n 'matching', // Match left column to right column\n 'short_answer', // Open-ended text response\n 'code_trace', // Trace through code and write output\n 'diagram_fill', // Complete a circuit/flow diagram\n 'true_false', // True or False statement\n 'ordering', // Arrange steps/phases in correct order\n]);\n\nexport const WorksheetItemSchema = z.object({\n itemNumber: z.coerce.number().int().default(1),\n itemType: WorksheetItemTypeEnum,\n prompt: z.string().describe('The question, fill-in stem, or task instruction'),\n starterContent: z.string().optional().describe(\n 'Pre-filled content: code with blanks, table skeleton, diagram description, or matching columns'\n ),\n options: z.array(z.string()).optional().describe('Options for multiple_choice / true_false items'),\n answerKey: z.string().optional().describe('Expected answer for teacher use'),\n checkpointRequired: z.boolean().default(false).describe(\n 'If true, student must get teacher sign-off before proceeding'\n ),\n});\n\n// ─── Worksheet Part ───────────────────────────────────────────────────────────\n\nexport const WorksheetPartSchema = z.object({\n partNumber: z.coerce.number().int(),\n partTitle: z.string().describe('e.g. \"Knowledge Check\", \"Guided Practice\", \"Concept Tracing\", \"Reflection\"'),\n objective: z.string().optional().default(''),\n items: z.array(WorksheetItemSchema).min(1),\n checkpointInstruction: z.string().optional().describe(\n 'Instruction shown at the end of this part, e.g. \"☐ Hoàn thành Part 1 — Xin giáo viên kiểm tra\"'\n ),\n});\n\n// ─── Full Worksheet ───────────────────────────────────────────────────────────\n\n/**\n * Worksheet Schema — Student-Facing Guided Practice Document\n * Template: WKS_template.md\n * Sections: Knowledge Check → Guided Practice → Reflection\n * (Actual lessons expand to 4-5 parts with circuit/code tasks)\n */\nexport const WorksheetSchema = z.object({\n artifactType: z.literal('WKS').default('WKS'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Student header fields\n studentName: z.string().optional().default(''),\n classLabel: z.string().optional().default(''),\n\n // Main content: array of Parts (Part 1: Knowledge Check, Part 2: Guided Practice, etc.)\n parts: z.array(WorksheetPartSchema).min(1),\n\n // Reflection / Computational Thinking prompts (Part 3 in template, standalone)\n reflectionPrompts: z.array(z.string()).default([]),\n});\n\nexport type Worksheet = z.infer<typeof WorksheetSchema>;\nexport type WorksheetPart = z.infer<typeof WorksheetPartSchema>;\nexport type WorksheetItem = z.infer<typeof WorksheetItemSchema>;\n","import { z } from 'zod';\n\n/**\n * Handout Schema — Student-Facing Quick-Reference Cheat Sheet (5-Second Rule)\n * Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/HANDOUT_template.md\n */\nexport const HandoutSectionSchema = z.object({\n heading: z.string().describe('Short descriptive section heading (Max 3 levels)'),\n summaryPoints: z.array(z.string()).describe('Scannable bullet points in second-person voice (You will...)'),\n codeSnippet: z.string().optional().describe('Essential copy-paste ready syntax or command'),\n tableData: z.object({\n headers: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n }).optional().describe('Structured table for comparisons or hardware pinouts'),\n calloutBox: z.object({\n type: z.string().default('key_formula'),\n title: z.string(),\n content: z.string(),\n }).optional(),\n});\n\nexport const HandoutSchema = z.object({\n artifactType: z.literal('HANDOUT').default('HANDOUT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Handout title'),\n language: z.string().default('vi').describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n tagline: z.string().default('').describe('1-sentence core takeaway'),\n\n // 1. Core Concepts Summary\n coreConceptsSummary: z.array(\n z.object({\n concept: z.string().describe('Tên khái niệm'),\n definition: z.string().describe('Định nghĩa ngắn gọn, chuẩn 5-second'),\n })\n ).default([]),\n\n // 2. Syntax & Configs Table\n syntaxTable: z.array(\n z.object({\n syntax: z.string().describe('Cú pháp lệnh hoặc tên Node/Config'),\n meaning: z.string().describe('Ý nghĩa & chức năng'),\n example: z.string().describe('Ví dụ code hoặc cấu hình mẫu'),\n })\n ).default([]),\n\n // 3. General 3-Step Problem Solving Procedure\n problemSolvingProcedure: z.object({\n step1Trigger: z.string().default('Xác định input/trigger kích hoạt'),\n step2Logic: z.string().default('Xử lý logic, tính toán hoặc lọc dữ liệu'),\n step3Output: z.string().default('Xuất kết quả, cập nhật trạng thái hoặc gửi cảnh báo'),\n }).optional().default({\n step1Trigger: 'Xác định input/trigger kích hoạt',\n step2Logic: 'Xử lý logic, tính toán hoặc lọc dữ liệu',\n step3Output: 'Xuất kết quả, cập nhật trạng thái hoặc gửi cảnh báo',\n }),\n\n // 4. Pro Tips\n proTips: z.array(z.string()).default([]).describe('Mẹo thực chiến hữu ích'),\n\n // 5. Sections & Glossary (Backward Compatibility)\n sections: z.array(HandoutSectionSchema).default([]).describe('Scannable reference sections'),\n glossary: z.array(\n z.object({\n term: z.string().describe('Technical term or acronym'),\n definition: z.string().describe('Plain, jargon-free explanation'),\n })\n ).default([]).describe('Zero-jargon glossary of terms introduced in this lesson'),\n});\n\nexport type Handout = z.infer<typeof HandoutSchema>;\nexport type HandoutSection = z.infer<typeof HandoutSectionSchema>;\n","import { z } from 'zod';\n\n/**\n * Slide Deck Schema — Dynamic Micro-Pedagogy Marp Presentation Deck\n * Dynamic Sizing: 4-6 slides per core concept + opening/closing anchors (9-25+ slides)\n */\nexport const MarpSlideSchema = z.object({\n slideNumber: z.number().int().min(1).max(60),\n slideType: z.enum([\n 'title',\n 'agenda',\n 'review',\n 'hook',\n 'concept_def',\n 'concept_visual',\n 'concept_compare',\n 'concept_check',\n 'concept_recap',\n 'code_demo',\n 'guided_practice',\n 'activity_intro',\n 'activity_steps',\n 'checkpoint',\n 'exit_ticket',\n 'summary_next',\n 'custom',\n ]),\n title: z.string().describe('Slide title or headline'),\n bloomTag: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create', 'None']).default('None'),\n bulletPoints: z.array(z.string()).max(6).describe('Concise bullet points, max 15 words each'),\n codeSnippet: z.string().optional().describe('Formatted fenced code block for demo'),\n diagramMermaid: z.string().optional().describe('Mermaid diagram definition for visual concepts'),\n presenterNotes: z.string().optional().describe('Teacher speaker notes hidden in presentation mode'),\n});\n\nexport const SlideDeckSchema = z.object({\n artifactType: z.literal('SLIDE').default('SLIDE'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Presentation title'),\n language: z.string().describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n marpTheme: z.string().default('gaia'),\n slides: z.array(MarpSlideSchema).min(6).max(60).describe('Sequential Marp slides scaled dynamically by knowledge volume'),\n});\n\nexport type MarpSlide = z.infer<typeof MarpSlideSchema>;\nexport type SlideDeck = z.infer<typeof SlideDeckSchema>;\n","import { z } from 'zod';\n\n// ─── Teaching Script Phase ────────────────────────────────────────────────────\n\nexport const TeachingScriptPhaseSchema = z.object({\n phase: z.string().describe(\n 'Phase label from GUIDE template: \"Hook / Engage\" | \"Explore / Core Concepts\" | \"Elaborate / Hands-on Activity\" | \"Evaluate / Wrap-up\"'\n ),\n durationRange: z.string().describe('e.g. \"5-10 minutes\"'),\n delivery: z.string().describe('Real-world story, demo, analogy, or inquiry activity'),\n keyPoints: z.string().describe('What to emphasize; what to skip if running late'),\n quickCheckQuestions: z.array(z.string()).default([]).describe('2-3 rapid comprehension check questions'),\n classroomManagement: z.string().optional().describe('Grouping, device management, seating'),\n facilitation: z.string().optional().describe('When to intervene vs. let students struggle productively'),\n proTips: z.string().optional().describe('Experience-based tips for this specific activity'),\n});\n\n// ─── Misconception entry ─────────────────────────────────────────────────────\n\nexport const MisconceptionSchema = z.object({\n misconception: z.string().describe('What students often wrongly assume or confuse'),\n counterStrategy: z.string().describe('How the teacher should explain or demonstrate the truth'),\n});\n\n// ─── Troubleshooting entry ────────────────────────────────────────────────────\n\nexport const TroubleshootingEntrySchema = z.object({\n symptom: z.string().describe('Error message or hardware failure symptom'),\n rootCause: z.string().describe('Why this occurs'),\n solution: z.string().describe('Exact step to fix it'),\n});\n\n// ─── Scoring Rubric row ───────────────────────────────────────────────────────\n\nexport const ScoringRubricRowSchema = z.object({\n criteriaName: z.string(),\n meetsStandard: z.string().describe('Description of acceptable student performance'),\n exceedsStandard: z.string().describe('Description of advanced mastery'),\n});\n\n// ─── Teacher Guide ────────────────────────────────────────────────────────────\n\n/**\n * Teacher Guide Schema — Pedagogical Facilitation Script\n * Template: GUIDE_template.md\n * Sections:\n * 1. Objectives & Preparation\n * 2. Teaching Script & Progression (Hook → Explore → Elaborate → Evaluate)\n * 3. Troubleshooting & FAQs\n * 4. Assessment & Differentiation Tips\n */\nexport const TeacherGuideSchema = z.object({\n artifactType: z.literal('GUIDE').default('GUIDE'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // 1. Objectives & Preparation\n pedagogicalRationale: z.string().describe('The main instructional goal — mindset shift, not just knowledge'),\n commonMisconceptions: z.array(MisconceptionSchema).min(1),\n technicalChecklist: z.array(z.string()).default([]).describe(\n 'Software/hardware to install; links to have open before class'\n ),\n\n // 2. Teaching Script & Progression\n teachingScript: z.array(TeachingScriptPhaseSchema).min(1).describe(\n 'Ordered phases: Hook/Engage → Explore/Core Concepts → Elaborate/Hands-on → Evaluate/Wrap-up'\n ),\n\n // 3. Troubleshooting & FAQs\n troubleshootingGuide: z.array(TroubleshootingEntrySchema).min(1),\n\n // 4. Assessment & Differentiation\n scoringRubric: z.array(ScoringRubricRowSchema).default([]),\n differentiationTips: z.object({\n proficient: z.string().describe('Minimum threshold description for proficiency'),\n advanced: z.string().describe('Extension tasks / Peer mentoring opportunities'),\n enrichmentQuestion: z.string().optional().describe('1-2 deep-thinking questions for gifted students'),\n }).optional(),\n});\n\nexport type TeacherGuide = z.infer<typeof TeacherGuideSchema>;\nexport type TeachingScriptPhase = z.infer<typeof TeachingScriptPhaseSchema>;\nexport type TroubleshootingEntry = z.infer<typeof TroubleshootingEntrySchema>;\nexport type Misconception = z.infer<typeof MisconceptionSchema>;\n","import { z } from 'zod';\n\n/**\n * Extension Schema — Advanced Challenges & Novel Context Problems\n */\nexport const ExtensionChallengeSchema = z.object({\n challengeNumber: z.number().int().min(1),\n title: z.string().describe('Catchy title for the extension project'),\n contextDescription: z.string().describe('Novel real-world context for applying the skill'),\n taskDescription: z.string().describe('Specific goal and requirements of the challenge'),\n expectedDeliverable: z.string().describe('What the student produces (code, prototype, report)'),\n hintOrGuidance: z.string().optional().describe('Open-ended exploration prompt'),\n});\n\nexport const ExtensionSchema = z.object({\n artifactType: z.literal('EXT').default('EXT'),\n lessonId: z.string().describe('Matching lesson identifier'),\n title: z.string().describe('Extension title'),\n language: z.string().describe('Language code of the content, e.g. \"vi\" or \"en\"'),\n coreLearningObjectivePreserved: z.string().describe('The core LO that this challenge extends'),\n challenges: z.array(ExtensionChallengeSchema).min(2).describe('At least 2 diverse extension challenges'),\n});\n\nexport type Extension = z.infer<typeof ExtensionSchema>;\n","import { z } from 'zod';\n\n/**\n * LLM-as-Judge Schema — Pedagogical & Technical Quality Audit Report\n */\nexport const QualityAuditVerdictSchema = z.enum(['PASS', 'NEEDS_REVISION', 'FAIL']);\n\nexport const JudgeCriterionSchema = z.object({\n name: z.string().describe('Criterion name, e.g. Bloom Alignment, Code Validity, Word Count Gate, Language Adherence'),\n passed: z.boolean(),\n score: z.number().min(0).max(100).describe('Score out of 100'),\n feedback: z.string().describe('Constructive feedback or citation of issues'),\n});\n\nexport const CurriculumQualityReportSchema = z.object({\n targetArtifactType: z.string().describe('Type of artifact audited, e.g. LESSON, ACT, CODE, WKS, SLIDE'),\n lessonId: z.string(),\n overallVerdict: QualityAuditVerdictSchema,\n totalScore: z.number().min(0).max(100),\n languageAdherencePassed: z.boolean().describe('True if content strictly matches the requested target language'),\n criteria: z.array(JudgeCriterionSchema).min(3),\n actionableRepairPrompts: z.array(z.string()).default([]).describe('Concrete instruction prompts to fix detected issues in the next repair turn'),\n});\n\nexport type CurriculumQualityReport = z.infer<typeof CurriculumQualityReportSchema>;\n","import { z } from 'zod';\n\n/**\n * Project Profile & General Info\n */\nexport const ProjectProfileSchema = z.object({\n id: z.string().optional(),\n name: z.string(),\n version: z.string().optional(),\n purpose: z.string().optional(),\n project_type: z.string().optional(),\n platform: z.array(z.string()).optional().default([]),\n tech_stack: z.union([z.record(z.array(z.string())), z.array(z.string()), z.record(z.string())]).optional().default([]),\n architecture: z.array(z.string()).optional().default([]),\n source: z.object({\n repository: z.string().optional(),\n commit: z.string().optional(),\n scan_dir: z.string().optional(),\n }).optional(),\n});\n\nexport type ProjectProfile = z.infer<typeof ProjectProfileSchema>;\n\n/**\n * Product Goals & User Journeys\n */\nexport const ProductGoalSchema = z.object({\n id: z.string(),\n description: z.string(),\n});\n\nexport const UserJourneySchema = z.object({\n id: z.string(),\n name: z.string(),\n steps: z.array(z.string()).optional().default([]),\n requirement_ids: z.array(z.string()).optional().default([]),\n});\n\n/**\n * Project Graph Schema — Full knowledge graph of a software/hardware project\n */\nexport const ProjectGraphSchema = z.object({\n schema_version: z.number().optional().default(3),\n project: ProjectProfileSchema,\n product: z.object({\n goals: z.array(ProductGoalSchema).optional().default([]),\n users: z.array(z.any()).optional().default([]),\n journeys: z.array(UserJourneySchema).optional().default([]),\n requirements: z.array(z.any()).optional().default([]),\n }).optional().default({}),\n features: z.array(z.object({\n id: z.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n components: z.array(z.string()).optional().default([]),\n requirements: z.array(z.any()).optional().default([]),\n })).optional().default([]),\n capabilities: z.array(z.any()).optional().default([]),\n architecture: z.any().optional(),\n experience: z.any().optional(),\n data_integration: z.any().optional(),\n implementation: z.object({\n files: z.array(z.any()).optional().default([]),\n symbols: z.array(z.any()).optional().default([]),\n modules: z.array(z.any()).optional().default([]),\n }).optional().default({}),\n validation: z.any().optional(),\n evidence: z.any().optional(),\n});\n\nexport type ProjectGraph = z.infer<typeof ProjectGraphSchema>;\n","import { z } from 'zod';\n\n/**\n * Step schema matching Instructable-style tutorial format from tutorial.md\n */\nexport const InstructionStepSchema = z.object({\n stepNumber: z.string().default('1.1').describe('e.g. \"1.1\", \"1.2\"'),\n actionTitle: z.string().describe('Action verb title, e.g. \"Create Bonjour Discovery Browser\"'),\n explanation: z.string().describe('Explanation of why this action is performed and how it works'),\n targetFile: z.string().optional().default('').describe('Relative path of the target file being created or edited, e.g. \"Sources/WledLib/Discovery/BonjourBrowser.swift\"'),\n codeSnippet: z.string().optional().default('').describe('Complete or focused code snippet following grow-by-step or snippet-per-step style'),\n codeLanguage: z.string().optional().default('swift').describe('Language for syntax highlighting, e.g. \"swift\", \"typescript\", \"cpp\", \"bash\"'),\n tip: z.string().optional().default('').describe('Helpful operational tip or best practice'),\n warning: z.string().optional().default('').describe('Operational gotcha or critical warning'),\n expectedResult: z.string().default('').describe('Explicit observable output or success condition after completing this step'),\n imagePlaceholder: z.string().optional().default('').describe('Description of visual screenshot or diagram placeholder [IMAGE: ...]'),\n});\n\nexport const InstructionSectionSchema = z.object({\n sectionNumber: z.coerce.number().default(1),\n title: z.string().describe('Section title'),\n goal: z.string().describe('What the reader achieves in this section'),\n estimatedMinutes: z.coerce.number().default(15),\n preflightChecks: z.array(z.string()).default([]).describe('Commands or conditions to check before starting this section'),\n steps: z.array(InstructionStepSchema).min(1),\n rollbackOrCleanup: z.string().optional().default('').describe('How to undo or reset state if something fails'),\n});\n\nexport const ProjectInstructionSchema = z.object({\n artifactType: z.literal('INSTRUCTION').default('INSTRUCTION'),\n instructionId: z.string().describe('Milestone or instruction ID, e.g. \"F0-S1\"'),\n title: z.string().describe('Tutorial title'),\n language: z.string().describe('Target language code, e.g. \"vi\" or \"en\"'),\n difficulty: z.string().default('intermediate'),\n estimatedTotalMinutes: z.coerce.number().default(45).describe('Total estimated duration in minutes'),\n scopeMode: z.string().default('milestone'),\n milestoneRef: z.string().optional().default('').describe('Milestone code or ID'),\n featureRef: z.string().optional().default('').describe('Feature ID or name'),\n techStack: z.array(z.string()).default([]).describe('List of tools, SDKs, libraries'),\n prerequisites: z.array(z.string()).default([]).describe('Prerequisites assumed before starting'),\n materialsAndTools: z.array(z.string()).default([]).describe('Required software, SDKs, accounts, or simulators'),\n sections: z.array(InstructionSectionSchema).min(1),\n verificationChecklist: z.array(z.string()).default([]).describe('Final end-to-end verification checklist to confirm working implementation'),\n});\n\nexport type InstructionStep = z.infer<typeof InstructionStepSchema>;\nexport type InstructionSection = z.infer<typeof InstructionSectionSchema>;\nexport type ProjectInstruction = z.infer<typeof ProjectInstructionSchema>;\n","import { z } from 'zod';\n\n/**\n * 3-Level Progressive Hints Schema (Concept -> Skeleton -> Full Solution)\n */\nexport const ProgressiveHintsSchema = z.object({\n hint1Concept: z.string().describe('Level 1: Gợi ý định hướng tư duy / khái niệm cốt lõi'),\n hint2Skeleton: z.string().describe('Level 2: Khung sườn code / method signature mẫu'),\n hint3Solution: z.object({\n code: z.string().describe('Level 3: Lời giải code hoàn chỉnh 100% runnable'),\n explanation: z.string().describe('Phân tích tại sao giải pháp này tối ưu và xử lý được vấn đề'),\n }),\n});\n\n/**\n * Self-Learner Progressive Challenge Schema\n */\nexport const SelfPacedChallengeSchema = z.object({\n tier: z.enum(['bronze', 'silver', 'gold']),\n title: z.string().describe('Tên thử thách'),\n estimatedMinutes: z.coerce.number().default(15),\n objective: z.string().describe('Mục tiêu cụ thể của thử thách'),\n tasks: z.array(z.string()).describe('Danh sách nhiệm vụ từng bước cần làm'),\n verifyCommand: z.string().describe('Lệnh terminal hoặc test runner để tự kiểm chứng (VD: curl... hoặc swift test)'),\n expectedOutput: z.string().describe('Kết quả mong đợi hiển thị trên terminal khi chạy đúng'),\n hints: ProgressiveHintsSchema,\n});\n\nexport const SelfLabSchema = z.object({\n artifactType: z.literal('SELF_LAB').default('SELF_LAB'),\n labId: z.string().describe('Identifier matching milestone (e.g. F0-S1)'),\n title: z.string().describe('Lab title'),\n language: z.string().default('vi').describe('Language code of content, e.g. \"vi\" or \"en\"'),\n difficulty: z.enum(['beginner', 'intermediate', 'advanced']).default('intermediate'),\n estimatedTotalMinutes: z.coerce.number().default(60),\n techStack: z.array(z.string()).default([]),\n \n // Mission Briefing & Preflight\n missionBriefing: z.string().describe('Bối cảnh kịch bản và nhiệm vụ của bài lab'),\n preflightChecklist: z.array(z.string()).default([]).describe('Danh mục kiểm tra môi trường trước khi bắt đầu'),\n\n // 3 Progressive Challenges (Bronze -> Silver -> Gold)\n challenges: z.object({\n bronze: SelfPacedChallengeSchema,\n silver: SelfPacedChallengeSchema,\n gold: SelfPacedChallengeSchema,\n }),\n\n // Troubleshooting Matrix\n troubleshootingMatrix: z.array(\n z.object({\n symptom: z.string().describe('Triệu chứng hoặc thông báo lỗi'),\n rootCause: z.string().describe('Nguyên nhân gốc rễ'),\n exactFix: z.string().describe('Hướng dẫn sửa lỗi chính xác từng bước'),\n })\n ).default([]),\n\n // Final Checklist\n finalSubmissionChecklist: z.array(z.string()).default([]).describe('Danh mục kiểm tra hoàn thành toàn bộ bài lab'),\n});\n\nexport type SelfLab = z.infer<typeof SelfLabSchema>;\nexport type SelfPacedChallenge = z.infer<typeof SelfPacedChallengeSchema>;\nexport type ProgressiveHints = z.infer<typeof ProgressiveHintsSchema>;\n","import { z } from 'zod';\n\n// ─── Quiz Assessment Objective (per template: ## Assessment Objectives) ───────\n\nexport const AssessmentObjectiveSchema = z.object({\n aoCode: z.string().describe('Assessment Objective code, e.g. \"AO1\"'),\n alignedLO: z.string().describe('Matched learning objective code, e.g. \"LO1\"'),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create']),\n objective: z.string().describe('Measurable assessment objective statement'),\n /** Standards anchors: \"statementId\" or \"packId:statementId\" from adopted Framework Packs (Phase 1: optional). */\n standardRefs: z.array(z.string()).optional().default([]).describe('Anchoring standard statement IDs from adopted Framework Packs'),\n});\n\n// ─── Quiz Option ─────────────────────────────────────────────────────────────\n\nexport const QuizOptionSchema = z.object({\n id: z.string().describe('Option label: \"A\" | \"B\" | \"C\" | \"D\"'),\n text: z.string().describe('Full text of the option (may be a table row, code snippet, or sentence)'),\n isCorrect: z.boolean().describe('True if this option is the correct answer'),\n explanation: z.string().describe('Detailed distractor rationale or confirmation why this is correct/incorrect'),\n});\n\n// ─── Individual Question ──────────────────────────────────────────────────────\n\nexport const DiagnosticQuestionSchema = z.object({\n id: z.string().describe('Question ID, e.g. \"Q1\"'),\n alignedAO: z.string().optional().describe('Matched AO code(s), e.g. \"AO1, AO2\"'),\n // Accept both PascalCase (new) and lowercase (legacy) for backward compat\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n 'remember', 'understand', 'apply', 'analyze', 'evaluate', 'create']).default('Apply'),\n questionType: z.enum(['multiple_choice', 'code_analysis', 'matching', 'open_ended']).default('multiple_choice'),\n // scenarioOrStem: PRIMARY field — kept for backward compat with evaluators & serializers\n scenarioOrStem: z.string().optional().describe('Legacy combined field. Evaluators read this for stem analysis.'),\n // scenario + stem: richer decomposition for new content (both optional)\n scenario: z.string().optional().describe('Real-world context framing the question'),\n stem: z.string().optional().describe('The core question prompt (new authoring standard)'),\n codeSnippet: z.string().optional().describe('Code block for code analysis questions'),\n codeLanguage: z.string().optional().default('cpp'),\n options: z.array(QuizOptionSchema).min(2).max(6),\n // correctAnswer: optional for backward compat with old fixtures (legacy used isCorrect on options)\n correctAnswer: z.string().optional().describe('Correct option id, e.g. \"A\"'),\n teacherNote: z.string().optional().describe('Pedagogical note for assessor/teacher only'),\n // takeawayMessage: backward-compat alias for teacherNote\n takeawayMessage: z.string().optional().describe('@deprecated — use teacherNote. Kept for serializer backward compat.'),\n});\n\n// ─── 4-Level Competency Rubric (per template: ## Competency Rubric) ──────────\n\nexport const CompetencyRubricRowSchema = z.object({\n competencyDimension: z.string().describe('Competency label with linked LO, e.g. \"C1: Hardware Integration (LO1)\"'),\n developing: z.string().describe('Level 1 — does not meet standard'),\n proficient: z.string().describe('Level 2 — meets standard'),\n advanced: z.string().describe('Level 3 — exceeds standard'),\n exemplary: z.string().describe('Level 4 — outstanding mastery'),\n});\n\n// ─── Full Diagnostic Quiz ─────────────────────────────────────────────────────\n\n/**\n * Diagnostic Quiz Schema — v4.6\n * Template: QUIZ_v4.6_template.md\n * Sections: Metadata → Assessment Objectives → MCQ Bank → Code Analysis → Competency Rubric\n */\nexport const DiagnosticQuizSchema = z.object({\n artifactType: z.literal('QUIZ'),\n quizId: z.string().describe('Matching artifact identifier, e.g. \"QUIZ_U03_M01_L13\"'),\n title: z.string(),\n language: z.string().default('en').describe('\"en\" or \"vi\"'),\n totalQuestions: z.coerce.number().optional().default(5),\n timeAllocationMinutes: z.coerce.number().optional().default(15),\n passingScorePct: z.coerce.number().default(80),\n\n // Assessment Objectives table (## [REQUIRED] Assessment Objectives)\n assessmentObjectives: z.array(AssessmentObjectiveSchema).optional().default([]),\n\n // Question bank (## [REQUIRED] Multiple-Choice + ## [REQUIRED] Code Analysis)\n questions: z.array(DiagnosticQuestionSchema).min(1),\n\n // Competency Rubric (## [REQUIRED] Competency Rubric)\n rubric: z.array(CompetencyRubricRowSchema).optional().default([]),\n});\n\n// Output types (after defaults are applied — for reading/processing parsed data)\nexport type DiagnosticQuiz = z.infer<typeof DiagnosticQuizSchema>;\nexport type DiagnosticQuestion = z.infer<typeof DiagnosticQuestionSchema>;\nexport type QuizOption = z.infer<typeof QuizOptionSchema>;\nexport type AssessmentObjective = z.infer<typeof AssessmentObjectiveSchema>;\nexport type CompetencyRubricRow = z.infer<typeof CompetencyRubricRowSchema>;\n\n// Input types (for writing/authoring — fields with defaults are optional)\nexport type DiagnosticQuizInput = z.input<typeof DiagnosticQuizSchema>;\nexport type DiagnosticQuestionInput = z.input<typeof DiagnosticQuestionSchema>;\n","import { z } from 'zod';\nimport { ProjectInstructionSchema } from './instructionSchema';\nimport { SelfLabSchema } from './selfLabSchema';\nimport { DiagnosticQuizSchema } from './diagnosticQuizSchema';\nimport { HandoutSchema } from './handoutSchema';\nimport { CodeLabSchema } from './codeLabSchema';\n\n/**\n * Self-Paced Learning Bundle Schema — Autonomous Learner Package\n */\nexport const SelfPacedBundleSchema = z.object({\n bundleId: z.string().describe('Milestone identifier (e.g. F0-S1)'),\n title: z.string().describe('Bundle title'),\n language: z.string().default('vi'),\n techStack: z.array(z.string()).default([]),\n instruction: ProjectInstructionSchema.describe('Instructable Step-by-Step Blueprint'),\n selfLab: SelfLabSchema.describe('Self-Paced Lab with Progressive Hints & Verification Commands'),\n quiz: DiagnosticQuizSchema.describe('Diagnostic Quiz Kit with Comprehensive Feedback'),\n cheatSheet: HandoutSchema.describe('5-Second Rule Reference & Syntax Cheat Sheet'),\n codeLab: CodeLabSchema.optional().describe('Code Lab with Starter & Solution Code'),\n});\n\nexport type SelfPacedBundle = z.infer<typeof SelfPacedBundleSchema>;\n","import { z } from 'zod';\n\n// ─── Rubric Criteria Row ──────────────────────────────────────────────────────\n\nexport const RubricCriteriaSchema = z.object({\n criteriaName: z.string().describe('Criteria label, e.g. \"Circuitry\" or \"Code Correctness\"'),\n weightPercent: z.coerce.number().int().min(1).max(100).describe('Relative weight as integer %'),\n excellent: z.string().describe('Level 4 — Excellent performance descriptor'),\n proficient: z.string().describe('Level 3 — Proficient performance descriptor'),\n developing: z.string().describe('Level 2 — Developing performance descriptor'),\n beginning: z.string().describe('Level 1 — Beginning performance descriptor'),\n});\n\n// ─── Exit Ticket (OPTIONAL within RUBRIC) ─────────────────────────────────────\n\nexport const ExitTicketQuickItemSchema = z.object({\n question: z.string(),\n questionType: z.enum(['multiple_choice', 'true_false', 'short_answer', 'open_ended']),\n answerOrScoringGuide: z.string().default(''),\n});\n\n// ─── Full Rubric ──────────────────────────────────────────────────────────────\n\n/**\n * Rubric Schema — Summative / Formative Assessment Scoring Guide\n * Template: RUBRIC_template.md\n * Sections: Assessment Overview → Rubric Table → Exit Ticket → Self-Assessment Checklist\n */\nexport const RubricSchema = z.object({\n artifactType: z.literal('RUBRIC').default('RUBRIC'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Assessment Overview\n assessmentType: z.enum(['Formative', 'Summative', 'Self-assessment', 'Peer-review']),\n assessmentFormat: z.enum([\n 'Short Exercise',\n 'Exit Ticket',\n 'Practical Product',\n 'Project Presentation',\n ]),\n targetLOs: z.array(z.string()).describe('LO codes being assessed, e.g. [\"LO1\", \"LO2\"]'),\n targetAudience: z.enum(['Teachers', 'Students']).default('Teachers').describe(\n '\"Teachers\" = technical/pedagogical language; \"Students\" = simple \"I can...\" language'\n ),\n\n // Rubric Table (weights should sum to ~100)\n criteria: z.array(RubricCriteriaSchema).min(1),\n\n // Optional quick exit ticket at end of session (≤3 items)\n exitTicket: z.array(ExitTicketQuickItemSchema).max(3).optional(),\n\n // Student self-assessment checklist\n selfAssessmentChecklist: z.array(z.string()).optional(),\n selfAssessmentReflection: z.string().optional().describe(\n 'Open-ended reflection prompt, e.g. \"One thing I am most proud of is:\"'\n ),\n});\n\nexport type Rubric = z.infer<typeof RubricSchema>;\nexport type RubricCriteria = z.infer<typeof RubricCriteriaSchema>;\n","import { z } from 'zod';\n\n// ─── Exit Ticket Parts ────────────────────────────────────────────────────────\n\nexport const ExitTicketRecallPromptSchema = z.object({\n question: z.string().describe('Conceptual scenario or analogy comparison testing core mental model'),\n answerAreaLabel: z.string().default('Write 1-2 concise sentences'),\n});\n\nexport const ExitTicketBugHuntSchema = z.object({\n codeSnippet: z.string().describe('4-8 line realistic code snippet containing exactly 1 bug/missing annotation'),\n codeLanguage: z.string().default('swift'),\n tasks: z.array(z.string()).describe(\n 'Ordered task list, e.g. [\"Identify the Compiler/Runtime Error\", \"Write the corrected line\"]'\n ),\n expectedBugDescription: z.string().describe('The exact error type/message students should identify'),\n correctedLine: z.string().describe('The single corrected line of code'),\n});\n\nexport const ExitTicketMetacognitionSchema = z.object({\n options: z.array(z.object({\n label: z.string().describe('\"🟢 Green\" | \"🟡 Yellow\" | \"🔴 Red\"'),\n description: z.string().describe('e.g. \"I can build and explain to a peer without hints\"'),\n })).default([\n { label: '🟢 Green (Mastered)', description: 'I can build and explain this concept to a peer without any hints.' },\n { label: '🟡 Yellow (Needs Practice)', description: 'I understand the concept but got stuck on syntax or error messages.' },\n { label: '🔴 Red (Blocked)', description: 'I need help understanding why this architecture is used.' },\n ]),\n lingeringQuestion: z.string().default('What is one question you still have before leaving today\\'s lab?'),\n});\n\n// ─── Full Exit Ticket ─────────────────────────────────────────────────────────\n\n/**\n * Exit Ticket Schema — Formative End-of-Session Assessment\n * Template: EXIT_TICKET_template.md\n * Sections:\n * Target LOs\n * Part 1: Recall & Conceptual Anchor\n * Part 2: Application & Bug Hunt\n * Part 3: Metacognitive Reflection & Confidence Check\n * Scoring & Teacher Intervention Trigger\n */\nexport const ExitTicketSchema = z.object({\n artifactType: z.literal('EXIT_TICKET').default('EXIT_TICKET'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n estimatedMinutes: z.coerce.number().default(7),\n\n // Target Learning Objectives\n targetLOs: z.array(z.object({\n code: z.string().describe('LO code, e.g. \"ULO\" or \"LO1\"'),\n loType: z.enum(['ULO', 'CIO', 'SIO']).optional(),\n description: z.string(),\n })),\n\n // Part 1: Recall & Conceptual Anchor\n recallPrompt: ExitTicketRecallPromptSchema,\n\n // Part 2: Application & Bug Hunt\n applicationPrompt: ExitTicketBugHuntSchema,\n\n // Part 3: Metacognitive Reflection\n metacognition: ExitTicketMetacognitionSchema,\n\n // Scoring & Intervention Trigger\n scoringGuide: z.object({\n proficiencyThreshold: z.string().describe('e.g. \"Green/Yellow check + Correct Bug Hunt answer\"'),\n interventionProtocol: z.string().describe('e.g. \"If ≥25% Red, start next session with 5-min Live Debug Warm-up\"'),\n }),\n});\n\nexport type ExitTicket = z.infer<typeof ExitTicketSchema>;\nexport type ExitTicketBugHunt = z.infer<typeof ExitTicketBugHuntSchema>;\n","import { z } from 'zod';\n\n// ─── Tier Definition ──────────────────────────────────────────────────────────\n\nexport const TierLevelEnum = z.enum(['Bronze', 'Silver', 'Gold']);\n\nexport const TierObjectiveSchema = z.object({\n tier: TierLevelEnum,\n bloomTarget: z.string().describe('e.g. \"Remember / Understand\" | \"Apply / Analyze\" | \"Evaluate / Create\"'),\n scaffoldingRatio: z.string().describe('e.g. \"70% Starter Code / 30% Fill-in\"'),\n successCriteria: z.string().describe('Condition that determines tier completion'),\n});\n\n// ─── Bronze Tier ──────────────────────────────────────────────────────────────\n\nexport const BronzeTierSchema = z.object({\n targetAudience: z.string().default('All learners (mandatory milestone)'),\n guidingPrompt: z.string().describe('Clear instruction with references to Handout'),\n starterCode: z.string().default('').describe('Pre-filled boilerplate code with TODO placeholders'),\n codeLanguage: z.string().default('swift'),\n fillInSlots: z.array(z.object({\n todoLabel: z.string().describe('e.g. \"TODO 1 [Bronze]\"'),\n instruction: z.string(),\n })).default([]),\n verificationTest: z.string().default('testBronzeBaseline()'),\n});\n\n// ─── Silver Tier ──────────────────────────────────────────────────────────────\n\nexport const SilverTierSchema = z.object({\n targetAudience: z.string().default('Learners who completed Bronze without mentor intervention'),\n guidingPrompt: z.string(),\n requirements: z.array(z.string()).min(1).describe('Numbered requirements: validation, state logic, user feedback'),\n implementationTarget: z.string().default('').describe('Skeleton or description of what to implement'),\n codeLanguage: z.string().default('swift'),\n verificationTest: z.string().default('testSilverLogicAndValidation()'),\n});\n\n// ─── Gold Tier ────────────────────────────────────────────────────────────────\n\nexport const GoldTierSchema = z.object({\n targetAudience: z.string().default('Advanced learners finished ahead of schedule'),\n architecturalChallenge: z.string().describe('Open-ended architectural task'),\n constraints: z.array(z.string()).min(1).describe('Hard invariants, e.g. \"zero data-race under concurrent mutations\"'),\n verificationTest: z.string().optional().default('testGoldConcurrencySafety()'),\n});\n\n// ─── Mentor Debugging Cheatsheet ─────────────────────────────────────────────\n\nexport const MentorCheatsheetSchema = z.object({\n bronzeStumble: z.string().default('').describe('Most common Bronze mistake'),\n silverStumble: z.string().default('').describe('Most common Silver mistake'),\n goldDiscussionPrompt: z.string().optional().describe('Scaling / architecture discussion question'),\n});\n\n// ─── Full Tiered Practice ─────────────────────────────────────────────────────\n\n/**\n * Tiered Practice Schema — 3-Level Differentiated Practice Lab\n * Template: TIERED_PRACTICE_template.md\n * Sections:\n * Computational Objective & Tier Matrix\n * Bronze Tier (Foundational Scaffolding)\n * Silver Tier (Independent Application)\n * Gold Tier (Enrichment & Optimization)\n * Automated Test Verification Matrix\n * Mentor Debugging Cheatsheet\n */\nexport const TieredPracticeSchema = z.object({\n artifactType: z.literal('TIERED_PRACTICE').default('TIERED_PRACTICE'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().default('en'),\n\n // Tier matrix overview\n tierMatrix: z.array(TierObjectiveSchema).length(3).describe('One entry per tier: Bronze, Silver, Gold'),\n\n // Tier content\n bronze: BronzeTierSchema,\n silver: SilverTierSchema,\n gold: GoldTierSchema,\n\n // Test suite reference\n testSuiteClass: z.string().optional().describe('XCTest class name, e.g. \"AlarmSystemTestSuite\"'),\n\n // Mentor hints\n mentorCheatsheet: MentorCheatsheetSchema.optional(),\n});\n\nexport type TieredPractice = z.infer<typeof TieredPracticeSchema>;\nexport type BronzeTier = z.infer<typeof BronzeTierSchema>;\nexport type SilverTier = z.infer<typeof SilverTierSchema>;\nexport type GoldTier = z.infer<typeof GoldTierSchema>;\n","import { z } from 'zod';\n\n// ─── Single Bell Ringer day ───────────────────────────────────────────────────\n\nexport const BellRingerDaySchema = z.object({\n dayLabel: z.string().describe('e.g. \"Day 1 (Monday)\" or \"Day 1\"'),\n bloomLevel: z.enum([\n 'Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n ]).optional(),\n promptType: z.enum([\n 'mental_model_recall',\n 'code_tracing',\n 'bug_hunt',\n 'diagram_tracing',\n 'creative_synthesis',\n 'open_reflection',\n ]).default('open_reflection'),\n prompt: z.string().describe('The warm-up question or task shown on projector'),\n codeSnippet: z.string().optional().describe('Code to trace or debug'),\n codeLanguage: z.string().optional().default('cpp'),\n answerKey: z.string().optional().describe('Teacher-facing expected answer or rubric note'),\n});\n\n// ─── Full Bell Ringer (5-day weekly pack) ────────────────────────────────────\n\n/**\n * Bell Ringer Schema — 5-Day Weekly Warm-Up Pack\n * Template: BELL_RINGER_template.md\n * Sections: Weekly Objective → Day 1-5 prompts → Answer Key\n * Time: 3-5 min each session\n */\nexport const BellRingerSchema = z.object({\n artifactType: z.literal('BELL_RINGER'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n weeklyTheme: z.string().describe('Core concept theme for the week'),\n routineProtocol: z.string().optional().default(\n 'Display prompt on projector as students enter. Students write in Daily Journal before class discussion.'\n ),\n days: z.array(BellRingerDaySchema).min(1).max(7),\n});\n\nexport type BellRinger = z.infer<typeof BellRingerSchema>;\nexport type BellRingerDay = z.infer<typeof BellRingerDaySchema>;\nexport type BellRingerInput = z.input<typeof BellRingerSchema>;\n","import { z } from 'zod';\n\n// ─── Glossary Term ────────────────────────────────────────────────────────────\n\nexport const GlossaryTermSchema = z.object({\n termName: z.string().describe('Term in the target language'),\n termNameEN: z.string().optional().describe('English term (for code/docs reference)'),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply']).optional(),\n simpleDefinition: z.string().describe('Max 2 sentences, age-appropriate, no jargon'),\n memoryAnalogy: z.string().describe('Analogy: \"This term is like [familiar thing]...\"'),\n realWorldExample: z.string().describe('1-3 line code snippet or 1-sentence real-world use case'),\n codeLanguage: z.string().optional().default(''),\n commonMistake: z.string().optional().describe('What students often confuse this with, and why'),\n seeMore: z.array(z.string()).optional().default([]).describe('Related term names'),\n});\n\n// ─── Quick Reference Row ──────────────────────────────────────────────────────\n\nexport const GlossaryQuickRefRowSchema = z.object({\n termEN: z.string(),\n translation: z.string().optional().default(''),\n bloomLevel: z.enum(['Remember', 'Understand', 'Apply']).optional(),\n mnemonicKeywords: z.string().optional().default(''),\n});\n\n// ─── Standardized Term ────────────────────────────────────────────────────────\n\nexport const StandardizedTermRowSchema = z.object({\n technicalTerm: z.string(),\n note: z.string(),\n doNotUse: z.string().optional().default(''),\n});\n\n// ─── Full Glossary ────────────────────────────────────────────────────────────\n\n/**\n * Glossary Schema — Module Vocabulary Reference\n * Template: GLOSSARY_template.md\n * Sections: Term entries (8-15 per module) → Quick Reference Table → Standardized Terms\n */\nexport const GlossarySchema = z.object({\n artifactType: z.literal('GLOSSARY'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n terms: z.array(GlossaryTermSchema).min(1).describe('Ordered from basic to advanced'),\n quickReferenceTable: z.array(GlossaryQuickRefRowSchema).optional().default([]),\n standardizedTerms: z.array(StandardizedTermRowSchema).optional().default([]),\n});\n\nexport type Glossary = z.infer<typeof GlossarySchema>;\nexport type GlossaryTerm = z.infer<typeof GlossaryTermSchema>;\nexport type GlossaryInput = z.input<typeof GlossarySchema>;\n","import { z } from 'zod';\n\n// ─── 9-Square Choice Activity ─────────────────────────────────────────────────\n\nexport const ChoiceSquareSchema = z.object({\n squareNumber: z.coerce.number().int().min(1).max(9),\n squareLabel: z.string().describe('e.g. \"Square 1: The Bug Hunter\"'),\n category: z.enum(['analytical', 'visual_architecture', 'creative_applied']).optional(),\n points: z.coerce.number().int().default(30),\n isCenterMaster: z.boolean().default(false).describe('True for the mandatory center ⭐ challenge'),\n description: z.string().describe('What the student must do'),\n deliverable: z.string().optional().describe('What to submit, e.g. \"Pull Request diff + clean build\"'),\n acceptanceCriteria: z.array(z.string()).optional().default([]),\n format: z.string().optional().describe('Submission format, e.g. \"Mermaid sequenceDiagram\"'),\n});\n\n// ─── Choice Rule ─────────────────────────────────────────────────────────────\n\nexport const ChoiceRuleSchema = z.object({\n model: z.enum(['tic_tac_toe', 'point_balance', 'custom']).default('tic_tac_toe'),\n description: z.string().describe('How the student wins / completes the board'),\n minimumPoints: z.coerce.number().optional().describe('Minimum points for point_balance model'),\n mandatoryCategories: z.array(z.string()).optional().default([]),\n});\n\n// ─── Rubric Row (reused from choice board context) ────────────────────────────\n\nexport const ChoiceBoardRubricRowSchema = z.object({\n criteriaName: z.string(),\n exemplary: z.string(),\n proficient: z.string(),\n developing: z.string(),\n beginning: z.string(),\n});\n\n// ─── Full Choice Board ────────────────────────────────────────────────────────\n\n/**\n * Choice Board Schema — 9-Square Differentiated Activity Matrix\n * Template: CHOICE_BOARD_template.md\n * Sections: Learning Goals & Rule → 9-Square Matrix → Activity Blueprints → Rubric\n */\nexport const ChoiceBoardSchema = z.object({\n artifactType: z.literal('CHOICE_BOARD'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n coreConceptAnchor: z.string().describe('All options must demonstrate mastery of this invariant'),\n choiceRule: ChoiceRuleSchema,\n squares: z.array(ChoiceSquareSchema).min(1).max(9),\n rubric: z.array(ChoiceBoardRubricRowSchema).optional().default([]),\n});\n\nexport type ChoiceBoard = z.infer<typeof ChoiceBoardSchema>;\nexport type ChoiceSquare = z.infer<typeof ChoiceSquareSchema>;\nexport type ChoiceBoardInput = z.input<typeof ChoiceBoardSchema>;\n","import { z } from 'zod';\n\n// ─── Graphic Organizer Item ───────────────────────────────────────────────────\n\nexport const OrganizerTypeEnum = z.enum([\n 'mermaid_flowchart', // Architectural data flow (graph TD/LR)\n 'mermaid_sequence', // Sequence / message flow diagram\n 'mermaid_state', // State machine / lifecycle diagram\n 'mermaid_er', // Entity-relationship diagram\n 'mermaid_class', // Class / OOP diagram\n 'venn_comparison', // Comparative analysis (2+ sets)\n 'fill_in_text', // ASCII/text fill-in exercise\n 'concept_map', // Node-link concept map (freeform)\n]);\n\nexport const GraphicOrganizerItemSchema = z.object({\n organizerNumber: z.coerce.number().int(),\n organizerTitle: z.string().describe('e.g. \"Architectural Data Flow\" or \"State Machine & Lifecycle\"'),\n organizerType: OrganizerTypeEnum,\n mermaidCode: z.string().optional().describe('Raw Mermaid.js diagram definition'),\n fillInTemplate: z.string().optional().describe('ASCII text fill-in box template'),\n wordBank: z.array(z.string()).optional().default([]).describe('Word bank for fill-in exercises'),\n cognitiveGoal: z.string().optional().describe('Why this diagram helps (Paivio dual-coding, etc.)'),\n requiredLabels: z.array(z.string()).optional().default([]).describe('Items students must correctly label'),\n});\n\n// ─── Full Graphic Organizer ───────────────────────────────────────────────────\n\n/**\n * Graphic Organizer Schema — Visual Diagram-Based Learning Tool\n * Template: GRAPHIC_ORGANIZER_template.md\n * Sections: Visual Paradigm Overview → Organizer 1/2/3 → Student Fill-in Worksheet\n */\nexport const GraphicOrganizerSchema = z.object({\n artifactType: z.literal('GRAPHIC_ORGANIZER'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n cognitivePurpose: z.string().optional().describe(\n 'Cognitive design rationale, e.g. \"Dual-coding theory: spatial + verbal processing\"'\n ),\n organizers: z.array(GraphicOrganizerItemSchema).min(1),\n});\n\nexport type GraphicOrganizer = z.infer<typeof GraphicOrganizerSchema>;\nexport type GraphicOrganizerItem = z.infer<typeof GraphicOrganizerItemSchema>;\nexport type GraphicOrganizerInput = z.input<typeof GraphicOrganizerSchema>;\n","import { z } from 'zod';\n\n// ─── CER (Claim-Evidence-Reasoning) conclusion ───────────────────────────────\n\nexport const CERConclusionSchema = z.object({\n claim: z.string().describe('Direct 1-sentence answer to the driving question'),\n evidence: z.string().describe('Specific quantitative data from the collection table'),\n reasoning: z.string().describe('Connection between evidence and the technical principle'),\n});\n\n// ─── Experimental Variable Design ────────────────────────────────────────────\n\nexport const ExperimentalDesignSchema = z.object({\n hypothesisTemplate: z.string().describe(\n '\"If [action], then [predicted outcome] because [rationale].\"'\n ),\n independentVariable: z.string().describe('The variable being manipulated'),\n dependentVariable: z.string().describe('The variable being measured'),\n controlVariables: z.array(z.string()).optional().default([]).describe('Constants held fixed'),\n});\n\n// ─── Science Lab ─────────────────────────────────────────────────────────────\n\n/**\n * Science Lab (CER Investigation) Schema\n * Template: SCIENCE_LAB_template.md\n * Sections: Guiding Inquiry → Hypothesis & Design → Data Protocol → CER Conclusion → Peer Review\n * Format: STEM/Code Investigation with Claim-Evidence-Reasoning framework\n */\nexport const ScienceLabSchema = z.object({\n artifactType: z.literal('SCIENCE_LAB'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n domain: z.string().optional().describe('e.g. \"Software Engineering / Concurrency\"'),\n\n // Guiding Inquiry\n drivingQuestion: z.string().describe('Real-world engineering driving question'),\n engineeringPhenomenon: z.string().optional().describe('Observed phenomenon requiring explanation'),\n\n // Hypothesis & Experimental Design\n experimentalDesign: ExperimentalDesignSchema,\n\n // Data Collection\n labSetupCode: z.string().optional().describe('Instrumentation / benchmark harness code'),\n labSetupCodeLanguage: z.string().optional().default('cpp'),\n dataCollectionColumns: z.array(z.string()).optional().default([]).describe('Table column headers'),\n trialCount: z.coerce.number().optional().default(4),\n\n // CER Conclusion\n cerTemplates: CERConclusionSchema.optional().describe('Pre-filled example or rubric for CER'),\n\n // Peer Review\n peerReviewProtocol: z.string().optional().describe(\n 'How groups exchange and verify each other\\'s results'\n ),\n reproducibilityTolerancePct: z.coerce.number().optional().default(10),\n});\n\nexport type ScienceLab = z.infer<typeof ScienceLabSchema>;\nexport type ScienceLabInput = z.input<typeof ScienceLabSchema>;\nexport type CERConclusion = z.infer<typeof CERConclusionSchema>;\n","import { z } from 'zod';\n\n// ─── Individual Rotation Station ─────────────────────────────────────────────\n\nexport const StationTypeEnum = z.enum([\n 'teacher_led', // Station 1: Small-group guided inquiry with teacher\n 'pair_lab', // Station 2: Collaborative hands-on pair programming\n 'digital_self_paced', // Station 3: Independent async code lab / LMS\n 'offline_modeling', // Station 4: No-screen diagram / whiteboard activity\n 'custom',\n]);\n\nexport const RotationStationSchema = z.object({\n stationNumber: z.coerce.number().int(),\n stationLabel: z.string().describe('e.g. \"Station 1: Teacher-Led (Guided Inquiry)\"'),\n stationType: StationTypeEnum,\n goal: z.string().describe('What students achieve at this station'),\n durationMinutes: z.coerce.number().optional().default(15),\n teacherScriptOrInquiry: z.string().optional().describe(\n 'Teacher talking points or inquiry prompts (for teacher_led station)'\n ),\n studentInstructions: z.string().optional().describe('Step-by-step student task'),\n materials: z.array(z.string()).optional().default([]),\n successMilestone: z.string().optional().describe('Observable completion criterion'),\n differentiationTrigger: z.string().optional().describe('What to do if students struggle'),\n});\n\n// ─── Recording Sheet Row (Student Passport) ───────────────────────────────────\n\nexport const StationRecordRowSchema = z.object({\n stationNumber: z.coerce.number().int(),\n taskCompleted: z.string(),\n verificationMethod: z.string().describe('Teacher stamp, peer signature, auto-token, etc.'),\n keyInsightPrompt: z.string().optional().default('What did you learn at this station?'),\n});\n\n// ─── Full Station Rotation Pack ───────────────────────────────────────────────\n\n/**\n * Station Rotation Schema — 4-Station Learning Pack\n * Template: STATION_ROTATION_template.md\n * Format: 4 stations × 15 min (60-75 min total) with rotation bell protocol\n * Grouping: Heterogeneous groups of 4-6 students\n */\nexport const StationRotationSchema = z.object({\n artifactType: z.literal('STATION_ROTATION'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n totalDurationMinutes: z.coerce.number().optional().default(60),\n rotationDurationMinutes: z.coerce.number().optional().default(15),\n transitionBufferMinutes: z.coerce.number().optional().default(2),\n groupSize: z.string().optional().default('4-6 students'),\n groupingStrategy: z.string().optional().default('Heterogeneous'),\n stations: z.array(RotationStationSchema).min(2),\n recordingSheet: z.array(StationRecordRowSchema).optional().default([]),\n});\n\nexport type StationRotation = z.infer<typeof StationRotationSchema>;\nexport type RotationStation = z.infer<typeof RotationStationSchema>;\nexport type StationRotationInput = z.input<typeof StationRotationSchema>;\n","import { z } from 'zod';\n\n// ─── Difficulty Tier Enum ─────────────────────────────────────────────────────\n\nexport const CardTierEnum = z.enum(['bronze', 'silver', 'gold']);\n\n// ─── Individual Task Card ─────────────────────────────────────────────────────\n\nexport const TaskCardSchema = z.object({\n cardId: z.string().describe('e.g. \"CARD_01\"'),\n cardNumber: z.coerce.number().int(),\n setLabel: z.string().optional().describe(\n 'e.g. \"Set A: Foundational Concepts\" or \"Set B: Code Diagnosis\"'\n ),\n tier: CardTierEnum.optional().default('bronze'),\n points: z.coerce.number().int().optional().default(1),\n category: z.string().optional().describe(\n 'e.g. \"Vocabulary\", \"Code Tracing\", \"Bug Hunt\", \"Architecture\"'\n ),\n prompt: z.string().describe('The task / question printed on the card'),\n codeSnippet: z.string().optional().describe('Code to trace or debug'),\n codeLanguage: z.string().optional().default('cpp'),\n options: z.array(z.object({\n id: z.string(),\n text: z.string(),\n isCorrect: z.boolean().optional(),\n })).optional().default([]).describe('MCQ options (if applicable)'),\n hint: z.string().optional().describe('Student-facing hint'),\n answerKey: z.string().describe('Teacher-facing correct answer or solution blueprint'),\n answerPoints: z.coerce.number().int().optional().default(1),\n});\n\n// ─── Full Task Cards Deck ─────────────────────────────────────────────────────\n\n/**\n * Task Cards Schema — Printable Task Card Deck\n * Template: TASK_CARDS_template.md\n * Sets: A (Foundational), B (Debugging), C (Application/Synthesis)\n * Usage: Centers, Fast Finishers, Small Group Review, Station 4 Offline Activity\n */\nexport const TaskCardsSchema = z.object({\n artifactType: z.literal('TASK_CARDS'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n targetSkills: z.array(z.string()).optional().default([]).describe(\n 'e.g. [\"Conceptual Understanding\", \"Code Tracing\", \"Bug Hunting\"]'\n ),\n cardFormat: z.string().optional().default('4 cards per A4 page'),\n scoringSystem: z.string().optional().default(\n 'Bronze (1 pt), Silver (2 pts), Gold (3 pts)'\n ),\n cards: z.array(TaskCardSchema).min(1),\n});\n\nexport type TaskCards = z.infer<typeof TaskCardsSchema>;\nexport type TaskCard = z.infer<typeof TaskCardSchema>;\nexport type TaskCardsInput = z.input<typeof TaskCardsSchema>;\n","import { z } from 'zod';\n\n// ─── Game Question / Challenge ────────────────────────────────────────────────\n\nexport const ReviewGameQuestionSchema = z.object({\n questionId: z.string().optional(),\n round: z.coerce.number().int().min(1).max(3).describe('1=Speed, 2=Code Duel, 3=Final Boss'),\n points: z.coerce.number().int(),\n category: z.string().optional().describe('e.g. \"Vocabulary & Syntax\", \"Mental Model\"'),\n prompt: z.string().describe('The question or challenge shown to teams'),\n codeSnippet: z.string().optional(),\n codeLanguage: z.string().optional().default(''),\n options: z.array(z.object({\n id: z.string(),\n text: z.string(),\n isCorrect: z.boolean().optional(),\n })).optional().default([]).describe('MCQ options for Round 1'),\n answerOrExplanation: z.string().describe('Correct answer or winning explanation'),\n timeLimit: z.coerce.number().optional().default(20).describe('Seconds'),\n bonusMechanic: z.string().optional().describe('e.g. \"Teams can wager points\"'),\n});\n\n// ─── Kahoot/Quizizz Export Row ────────────────────────────────────────────────\n\nexport const ReviewGameExportRowSchema = z.object({\n question: z.string(),\n option1: z.string(),\n option2: z.string(),\n option3: z.string().optional().default(''),\n option4: z.string().optional().default(''),\n correctAnswer: z.coerce.number().int().min(1).max(4).describe('1-indexed correct option'),\n timeLimitSec: z.coerce.number().optional().default(20),\n});\n\n// ─── Full Review Game Pack ────────────────────────────────────────────────────\n\n/**\n * Review Game Schema — Interactive Quiz Show Pack\n * Template: REVIEW_GAME_template.md\n * Format: 3 Rounds (Speed → Code Duel → Final Boss Architecture)\n * Compatible with: Kahoot, Quizizz, Jeopardy live classroom format\n */\nexport const ReviewGameSchema = z.object({\n artifactType: z.literal('REVIEW_GAME'),\n lessonId: z.string(),\n title: z.string(),\n language: z.string().optional().default('en'),\n\n // Setup\n format: z.string().optional().default('3 rounds, progressive difficulty, team buzzers'),\n teamSize: z.string().optional().default('3-5 students'),\n hasBonusWager: z.boolean().optional().default(true).describe('Teams can wager points on Round 3'),\n\n // Questions per round\n questions: z.array(ReviewGameQuestionSchema).min(1),\n\n // Export-ready format for Kahoot / Quizizz\n exportRows: z.array(ReviewGameExportRowSchema).optional().default([]),\n});\n\nexport type ReviewGame = z.infer<typeof ReviewGameSchema>;\nexport type ReviewGameQuestion = z.infer<typeof ReviewGameQuestionSchema>;\nexport type ReviewGameInput = z.input<typeof ReviewGameSchema>;\n","import { z } from 'zod';\n\n/**\n * CurriculumPlan — machine-readable SOT for curriculum planning.\n *\n * Produced by the Curriculum Planner (curriculumPlannerService) from a domain\n * planning graph (CurriculumFeed v2 or raw domain-kit graph shapes) plus\n * course constraints and policy. CURRICULUM_FRAMEWORK.md is a human-readable\n * projection of this plan; LESSON production consumes a session slice of it.\n */\n\n// [7] Canonical decision vocabularies (the ONLY legal values)\n\nexport const PrerequisiteDecisionSchema = z.enum([\n 'mastered_before_course', // entry-level knowledge — referenced, not taught\n 'taught_in_prior_lesson', // formally taught in an earlier session\n 'recap_in_lesson', // re-activated at the start of this session\n 'jit_introduce_in_lesson', // introduced just-in-time inside this session\n 'scaffolded_provide', // not taught — supplied ready-made (scaffold)\n]);\nexport type PrerequisiteDecision = z.infer<typeof PrerequisiteDecisionSchema>;\n\nexport const ScaffoldDecisionSchema = z.enum([\n 'student_builds',\n 'provide_partial',\n 'provide_full',\n 'provide_reference',\n]);\nexport type ScaffoldDecision = z.infer<typeof ScaffoldDecisionSchema>;\n\nexport const DepthLevelSchema = z.enum(['ulo', 'cio', 'sio']);\nexport type DepthLevel = z.infer<typeof DepthLevelSchema>;\n\nexport const BloomLevelSchema = z.enum([\n 'Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create',\n]);\nexport type BloomLevel = z.infer<typeof BloomLevelSchema>;\n\nexport const EntryLevelSchema = z.enum(['beginner', 'intermediate', 'advanced']);\nexport const NodeKindSchema = z.enum(['skill', 'concept', 'product_step']);\n\n// Shared atoms\n\nconst LessonCodeSchema = z.string().regex(/^U\\d{2}_M\\d{2}_L\\d{2}$/, 'lesson code must match UXX_MYY_LZZ');\n\nconst SourceCiteSchema = z.object({\n node_ids: z.array(z.string()).default([]),\n concept_codes: z.array(z.string()).default([]),\n});\n\nexport const CourseObjectiveSchema = z.object({\n id: z.string(),\n statement: z.string().min(8),\n bloom: BloomLevelSchema,\n sources: SourceCiteSchema,\n});\nexport type CourseObjective = z.infer<typeof CourseObjectiveSchema>;\n\nexport const UnitPlanSchema = z.object({\n id: z.string().regex(/^U\\d{2}$/),\n name: z.string().min(3),\n objectives: z.array(CourseObjectiveSchema).min(1),\n node_ids: z.array(z.string()).min(1),\n total_minutes: z.number().int().positive(),\n rationale: z.string().min(3),\n // Phases fully contained in this unit (empty for non-phase plans)\n phase_ids: z.array(z.string()).default([]),\n // Product completion description carried from the domain analysis (optional)\n product_completion: z.string().default(''),\n});\nexport type UnitPlan = z.infer<typeof UnitPlanSchema>;\n\n// Session plan ([3][4][5][6] outputs)\n\nexport const DepthAssignmentSchema = z.object({\n node_id: z.string(),\n depth: DepthLevelSchema,\n source: z.enum(['feed_hint', 'planner', 'escalated']),\n});\nexport type DepthAssignment = z.infer<typeof DepthAssignmentSchema>;\n\nexport const PrerequisiteDecisionEntrySchema = z.object({\n node_id: z.string(),\n decision: PrerequisiteDecisionSchema,\n reason: z.string().min(3),\n});\nexport type PrerequisiteDecisionEntry = z.infer<typeof PrerequisiteDecisionEntrySchema>;\n\nexport const ScaffoldDecisionEntrySchema = z.object({\n item: z.string().min(1),\n decision: ScaffoldDecisionSchema,\n minutes_saved: z.number().int().nonnegative().default(0),\n reason: z.string().min(3),\n});\nexport type ScaffoldDecisionEntry = z.infer<typeof ScaffoldDecisionEntrySchema>;\n\nexport const SessionPlanSchema = z.object({\n id: LessonCodeSchema,\n unit_id: z.string().regex(/^U\\d{2}$/),\n order: z.number().int().positive(),\n title: z.string().min(3),\n // [4] Free-text session objective — no ULO/CIO/SIO mapping at this stage.\n prose_objective: z.string().min(10),\n node_ids: z.array(z.string()).min(1),\n // Development phases this session contributes to (empty when the feed has no phases)\n phase_ids: z.array(z.string()).default([]),\n new_keywords: z.array(z.string()).default([]),\n prerequisite_keywords: z.array(z.string()).default([]),\n knowledge_minutes: z.number().int().nonnegative(),\n practice_minutes: z.number().int().nonnegative(),\n overhead_minutes: z.number().int().nonnegative(),\n depth_assignments: z.array(DepthAssignmentSchema).min(1),\n prerequisite_decisions: z.array(PrerequisiteDecisionEntrySchema).default([]),\n scaffold_decisions: z.array(ScaffoldDecisionEntrySchema).default([]),\n // What the student can demonstrate after this session — feeds exit tickets.\n exit_evidence: z.array(z.string()).min(1),\n differentiation: z.object({ bronze: z.string(), silver: z.string(), gold: z.string() }),\n});\nexport type SessionPlan = z.infer<typeof SessionPlanSchema>;\n\n// Root plan\n\nexport const TranslationPolicySchema = z.object({\n policy: z.enum(['after_artifact', 'end_of_unit', 'at_publish']).default('at_publish'),\n target_language: z.string().nullable().default(null),\n});\nexport type TranslationPolicy = z.infer<typeof TranslationPolicySchema>;\n\nexport const CoverageReportSchema = z.object({\n assigned_node_ids: z.array(z.string()),\n unassigned_node_ids: z.array(z.string()),\n warnings: z.array(z.string()),\n});\nexport type CoverageReport = z.infer<typeof CoverageReportSchema>;\n\nexport const PlanConstraintsSchema = z.object({\n age_band: z.tuple([z.number().int(), z.number().int()]),\n entry_level: EntryLevelSchema,\n session_duration_minutes: z.number().int().positive(),\n // Overhead (setup/recap/wrap-up) share of a session, 0..0.5.\n overhead_ratio: z.number().min(0).max(0.5).default(0.15),\n total_sessions: z.number().int().positive().nullable().default(null),\n // Keywords the entry level already masters (drives mastered_before_course).\n entry_keywords: z.array(z.string()).default([]),\n course_goals: z.array(z.string()).default([]),\n capstone: z.string().nullable().default(null),\n});\nexport type PlanConstraints = z.infer<typeof PlanConstraintsSchema>;\n\nexport const CurriculumPlanSchema = z.object({\n schema_version: z.literal(1),\n plan_id: z.string(),\n plan_hash: z.string(),\n created_at: z.string(),\n source: z.object({\n graph_type: z.enum(['curriculum_feed', 'project_graph', 'knowledge_graph', 'hybrid_graph']),\n feed_schema_version: z.number().nullable().default(null),\n warnings: z.array(z.string()).default([]),\n hallucination_count: z.number().int().nonnegative().default(0),\n }),\n constraints: PlanConstraintsSchema,\n course: z.object({\n // [1] Course-level objectives, each citing source nodes (anti-fabrication)\n objectives: z.array(CourseObjectiveSchema).min(1),\n capstone_ref: z.string().nullable().default(null),\n }),\n units: z.array(UnitPlanSchema).min(1), // [2]\n sessions: z.array(SessionPlanSchema).min(1), // [3][4][5][6]\n glossary_scope: z.array(z.object({\n session_id: LessonCodeSchema,\n terms: z.array(z.string()),\n })),\n translation: TranslationPolicySchema,\n coverage_report: CoverageReportSchema,\n approval: z.object({\n status: z.enum(['draft', 'approved']),\n approved_at: z.string().nullable().default(null),\n // Hash of the plan payload the approval covers — invalidation key for EXPOSITION.\n plan_hash: z.string().nullable().default(null),\n }),\n});\nexport type CurriculumPlan = z.infer<typeof CurriculumPlanSchema>;\n\n// Normalized planning graph (Stage 0 output, internal + feed-facing)\n\nexport const PlanningNodeSchema = z.object({\n id: z.string(),\n kind: NodeKindSchema,\n name: z.string().min(1),\n concept_codes: z.array(z.string()).default([]),\n keywords: z.array(z.string()).default([]),\n new_keywords: z.array(z.string()).default([]),\n prerequisite_keywords: z.array(z.string()).default([]),\n estimated_minutes: z.number().int().nonnegative(),\n bloom_hint: BloomLevelSchema.nullable().default(null),\n depth_hint: DepthLevelSchema.nullable().default(null),\n completion_level: z.enum(['mvp', 'standard', 'stretch']).default('standard'),\n scaffold_candidates: z.array(z.object({\n item: z.string(),\n reason: z.string().default(''),\n minutes_saved: z.number().int().nonnegative().default(0),\n suggest: ScaffoldDecisionSchema.default('provide_full'),\n })).default([]),\n references: z.array(z.object({\n file: z.string(),\n evidence: z.string().default(''),\n })).default([]),\n phase_id: z.string().default(''),\n});\nexport type PlanningNode = z.infer<typeof PlanningNodeSchema>;\n\n/** knowledge = must be understood before; task = needs the source node's output first. */\nexport const DependencyEdgeSchema = z.object({\n from: z.string(),\n to: z.string(),\n kind: z.enum(['knowledge', 'task']),\n reason: z.string().default(''),\n});\nexport type DependencyEdge = z.infer<typeof DependencyEdgeSchema>;\n\nexport const PlanningGraphSchema = z.object({\n graph_type: z.enum(['curriculum_feed', 'project_graph', 'knowledge_graph', 'hybrid_graph']),\n warnings: z.array(z.string()).default([]),\n hallucination_count: z.number().int().nonnegative().default(0),\n nodes: z.array(PlanningNodeSchema).min(1, 'planning graph must contain at least one node'),\n edges: z.array(DependencyEdgeSchema).default([]),\n groupings: z.array(z.object({\n id: z.string(),\n name: z.string(),\n node_ids: z.array(z.string()).min(1),\n rationale: z.string().default(''),\n })).default([]),\n // Progressive completion phases (from CurriculumFeed.phases). When non-empty\n // they define units and the teaching sequence; groupings stay informational.\n phases: z.array(z.object({\n id: z.string(),\n order: z.number().int().positive(),\n name: z.string(),\n product_completion: z.string().default(''),\n node_ids: z.array(z.string()).min(1),\n })).default([]),\n});\nexport type PlanningGraph = z.infer<typeof PlanningGraphSchema>;\nexport type PlanningPhase = PlanningGraph['phases'][number];\n\n// Planner input\n\nexport const PlannerInputSchema = z.object({\n graph: z.unknown(),\n constraints: PlanConstraintsSchema,\n translation: TranslationPolicySchema.default({ policy: 'at_publish', target_language: null }),\n});\nexport type PlannerInput = z.infer<typeof PlannerInputSchema>;\n\n/** Validates a plan and enforces the cross-field budget invariant per session. */\nexport function validateCurriculumPlan(plan: unknown): CurriculumPlan {\n const parsed = CurriculumPlanSchema.parse(plan);\n for (const s of parsed.sessions) {\n const total = s.knowledge_minutes + s.practice_minutes + s.overhead_minutes;\n if (total > parsed.constraints.session_duration_minutes) {\n throw new Error(\n 'Session ' + s.id + ' budget violated: ' + total + ' > ' + parsed.constraints.session_duration_minutes + ' minutes',\n );\n }\n }\n return parsed;\n}\n","import { z } from 'zod';\n\n// ─── Existing schemas ─────────────────────────────────────────────────────────\nexport * from './lessonPlanSchema';\nexport * from './activitySchema';\nexport * from './codeLabSchema';\nexport * from './worksheetSchema';\nexport * from './handoutSchema';\nexport * from './slideDeckSchema';\nexport * from './teacherGuideSchema';\nexport * from './extensionSchema';\nexport * from './judgeSchema';\nexport * from './projectGraphSchema';\nexport * from './instructionSchema';\nexport * from './selfLabSchema';\nexport * from './diagnosticQuizSchema';\nexport * from './selfPacedBundleSchema';\n\n// ─── New schemas (derived from canonical templates) ───────────────────────────\nexport * from './rubricSchema';\nexport * from './exitTicketSchema';\nexport * from './tieredPracticeSchema';\nexport * from './bellRingerSchema';\nexport * from './glossarySchema';\nexport * from './choiceBoardSchema';\nexport * from './graphicOrganizerSchema';\nexport * from './scienceLabSchema';\nexport * from './stationRotationSchema';\nexport * from './taskCardsSchema';\nexport * from './reviewGameSchema';\n\nimport { LessonPlanSchema, LessonPlanEDPSchema, LessonPlan5ESchema } from './lessonPlanSchema';\nimport { ActivityLabSchema } from './activitySchema';\nimport { CodeLabSchema } from './codeLabSchema';\nimport { WorksheetSchema } from './worksheetSchema';\nimport { HandoutSchema } from './handoutSchema';\nimport { SlideDeckSchema } from './slideDeckSchema';\nimport { TeacherGuideSchema } from './teacherGuideSchema';\nimport { ExtensionSchema } from './extensionSchema';\nimport { DiagnosticQuizSchema } from './diagnosticQuizSchema';\nimport { RubricSchema } from './rubricSchema';\nimport { ExitTicketSchema } from './exitTicketSchema';\nimport { TieredPracticeSchema } from './tieredPracticeSchema';\nimport { BellRingerSchema } from './bellRingerSchema';\nimport { GlossarySchema } from './glossarySchema';\nimport { ChoiceBoardSchema } from './choiceBoardSchema';\nimport { GraphicOrganizerSchema } from './graphicOrganizerSchema';\nimport { ScienceLabSchema } from './scienceLabSchema';\nimport { StationRotationSchema } from './stationRotationSchema';\nimport { TaskCardsSchema } from './taskCardsSchema';\nimport { ReviewGameSchema } from './reviewGameSchema';\n\n/**\n * Discriminated Union of all Curriculum Artifacts.\n * Keyed on `artifactType` literal field.\n *\n * Lesson variants:\n * - 'LESSON' → LessonPlanSchema (legacy, deprecated — kept for backward compat)\n * - 'LESSON_EDP' → LessonPlanEDPSchema (Engineering Design Process model)\n * - 'LESSON_5E' → LessonPlan5ESchema (5E Instructional Model)\n */\nexport const CurriculumArtifactSchema = z.discriminatedUnion('artifactType', [\n // ─── Lesson variants ───────────────────────────────────────────\n LessonPlanSchema, // 'LESSON' — legacy (deprecated)\n LessonPlanEDPSchema, // 'LESSON_EDP' — Engineering Design Process\n LessonPlan5ESchema, // 'LESSON_5E' — 5E Instructional Model\n // ─── Activity & Practice ───────────────────────────────────────\n ActivityLabSchema, // 'ACT'\n TieredPracticeSchema, // 'TIERED_PRACTICE'\n BellRingerSchema, // 'BELL_RINGER'\n ChoiceBoardSchema, // 'CHOICE_BOARD'\n // ─── Code ─────────────────────────────────────────────────────\n CodeLabSchema, // 'CODE'\n // ─── Assessment ───────────────────────────────────────────────\n DiagnosticQuizSchema, // 'QUIZ'\n RubricSchema, // 'RUBRIC'\n ExitTicketSchema, // 'EXIT_TICKET'\n // ─── Student-facing resources ──────────────────────────────────\n WorksheetSchema, // 'WKS'\n HandoutSchema, // 'HANDOUT'\n SlideDeckSchema, // 'SLIDE'\n TeacherGuideSchema, // 'GUIDE'\n ExtensionSchema, // 'EXT'\n GlossarySchema, // 'GLOSSARY'\n GraphicOrganizerSchema,// 'GRAPHIC_ORGANIZER'\n ScienceLabSchema, // 'SCIENCE_LAB'\n StationRotationSchema, // 'STATION_ROTATION'\n TaskCardsSchema, // 'TASK_CARDS'\n ReviewGameSchema, // 'REVIEW_GAME'\n]);\n\nexport type CurriculumArtifact = z.infer<typeof CurriculumArtifactSchema>;\n\n/**\n * Basic Learning Objective schema from Knowledge Graph / Tree\n */\nexport const LearningObjectiveInputSchema = z.object({\n code: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n lo_type: z.enum(['UNIVERSAL', 'CONCEPTUAL_IMPL', 'SPECIFIC_IMPL', 'ULO', 'CIO', 'SIO']).or(z.string()),\n bloom_level: z.string().optional().default('understand'),\n knowledge_dimension: z.string().optional().default('CONCEPTUAL'),\n assessment: z.string().optional().default('concept-check'),\n keyword: z.string().optional().default(''),\n concept: z.string().optional().default(''),\n concept_code: z.string().optional().default(''),\n concept_name: z.string().optional().default(''),\n});\n\nexport interface LearningObjectiveInput {\n code: string;\n name: string;\n description?: string;\n lo_type?: 'UNIVERSAL' | 'CONCEPTUAL_IMPL' | 'SPECIFIC_IMPL' | 'ULO' | 'CIO' | 'SIO' | string;\n bloom_level?: string;\n knowledge_dimension?: string;\n assessment?: string;\n keyword?: string;\n concept?: string;\n concept_code?: string;\n concept_name?: string;\n}\n\n/**\n * Milestone input schema matching knowledge-tree Roadmap & Learning Path JSON\n */\nexport const MilestoneInputSchema = z.object({\n id: z.string().optional(),\n name: z.string(),\n description: z.string().optional().default(''),\n feature_id: z.string().optional().default('F0'),\n feature_name: z.string().optional().default(''),\n concept_code: z.string().optional().default(''),\n concept_name: z.string().optional().default(''),\n completion_level: z.string().optional().default('base'),\n difficulty: z.string().optional().default('Beginner'),\n bloom_level: z.string().optional().default('Understand'),\n tech_keywords: z.array(z.string()).optional().default([]),\n prerequisite_concept_codes: z.array(z.string()).optional().default([]),\n all_keywords: z.array(z.string()).optional().default([]).describe('All keywords associated with this milestone (aggregated from concepts)'),\n new_keywords: z.array(z.string()).optional().default([]).describe('Keywords introduced for the first time at this milestone'),\n prerequisite_keywords: z.array(z.string()).optional().default([]).describe('Keywords already introduced in earlier milestones'),\n learning_objectives: z.array(LearningObjectiveInputSchema).optional().default([]),\n rationale: z.string().or(z.array(z.string())).optional().default(''),\n instruction_ref: z.string().optional(),\n /** Canonical numeric grade band [min, max] for standards retrieval (Phase 2). */\n grade_band: z.tuple([z.number().int(), z.number().int()]).optional(),\n});\n\nexport interface MilestoneInput {\n id?: string;\n name: string;\n description?: string;\n feature_id?: string;\n feature_name?: string;\n concept_code?: string;\n concept_name?: string;\n completion_level?: string;\n difficulty?: string;\n bloom_level?: string;\n tech_keywords?: string[];\n prerequisite_concept_codes?: string[];\n all_keywords?: string[];\n new_keywords?: string[];\n prerequisite_keywords?: string[];\n learning_objectives?: LearningObjectiveInput[];\n rationale?: string | string[];\n instruction_ref?: string;\n grade_band?: [number, number];\n}\n\n/**\n * Phase input schema\n */\nexport const PhaseInputSchema = z.object({\n phase_id: z.number().or(z.string()),\n title: z.string().optional(),\n phase_name: z.string().optional(),\n description: z.string().optional().default(''),\n target_outcome: z.string().optional(),\n milestones: z.array(MilestoneInputSchema).default([]),\n});\n\nexport type PhaseInput = z.input<typeof PhaseInputSchema>;\n\n/**\n * Full Roadmap input schema\n */\nexport const RoadmapInputSchema = z.object({\n project_brief: z.object({\n name: z.string().optional(),\n title: z.string().optional(),\n goal: z.string().optional(),\n description: z.string().optional().default(''),\n tech_stack: z.array(z.string()).optional().default([]),\n estimated_hours: z.number().optional().default(0),\n estimated_weeks: z.number().optional().default(0),\n target_learner: z.string().optional(),\n audience: z.string().optional(),\n icon: z.string().optional(),\n }),\n phases: z.array(PhaseInputSchema).default([]),\n});\n\nexport type RoadmapInput = z.infer<typeof RoadmapInputSchema>;\n\nexport interface ProjectRoadmap {\n title: string;\n goal?: string;\n topic?: string;\n target_language?: string;\n target_audience?: string;\n tech_stack?: string[];\n milestones: MilestoneInput[];\n}\nexport * from './curriculumPlanSchema';\n","import { createGoogleGenerativeAI } from '@ai-sdk/google';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createDeepSeek } from '@ai-sdk/deepseek';\nimport type { LanguageModel } from 'ai';\nimport { isProviderEnabled, isModelAllowed, getDesignatedFallbackConfig } from './streamRunner';\n\nexport type AIProviderName = 'google' | 'openai' | 'deepseek' | 'alibaba' | 'dashscope' | 'ollama' | 'nvidia' | 'openrouter';\n\nexport interface ModelResolutionOptions {\n provider?: AIProviderName;\n modelName?: string;\n apiKey?: string;\n baseURL?: string;\n}\n\nconst DEFAULT_MODELS: Record<string, string> = {\n nvidia: 'nvidia/nemotron-3-ultra-550b-a55b',\n openrouter: '@preset/coding-free',\n alibaba: 'qwen3.7-plus',\n dashscope: 'qwen3.7-plus',\n google: 'gemini-1.5-flash',\n deepseek: 'deepseek-chat',\n openai: 'gpt-4o-mini',\n ollama: 'deepseek-v4-flash:0731',\n};\n\nexport const NVIDIA_MODELS = {\n codingFast: 'nvidia/nemotron-3.5-lightning-30b-a3b',\n reasoningUltra: 'nvidia/nemotron-3-ultra-550b-a55b',\n superMoE: 'nvidia/nemotron-3-super-120b-a12b',\n llamaNemotron: 'nvidia/llama-3.1-nemotron-70b-instruct',\n translation: 'nvidia/riva-translate-4b-instruct-v2',\n embedding: 'nvidia/nemotron-3-embed-1b',\n visionLlama: 'meta/llama-3.2-11b-vision-instruct',\n} as const;\n\n/**\n * Resolves a Vercel AI SDK LanguageModel instance based on provider options or environment variables.\n * Automatically falls back to designated fallback provider/model if requested provider is disabled.\n */\nexport function getAIModel(options: ModelResolutionOptions = {}): LanguageModel {\n const designated = getDesignatedFallbackConfig();\n const defaultProvider = process.env.DEFAULT_AI_PROVIDER || process.env.LLM_PROVIDER || detectDefaultProvider();\n let provider = (options.provider || defaultProvider).toLowerCase() as AIProviderName;\n\n // If requested provider is disabled in .env, automatically route to designated fallback\n if (!isProviderEnabled(provider)) {\n console.warn(`[provider-factory] Provider \"${provider}\" is disabled via environment toggle. Falling back to designated provider \"${designated.provider}\".`);\n provider = designated.provider as AIProviderName;\n }\n\n let resolvedModelName =\n options.modelName ||\n process.env.DEFAULT_AI_MODEL ||\n process.env.LLM_MODEL ||\n DEFAULT_MODELS[provider] ||\n designated.model;\n\n if (!isModelAllowed(resolvedModelName)) {\n console.warn(`[provider-factory] Model \"${resolvedModelName}\" is not permitted by ALLOWED_AI_MODELS. Using designated model \"${designated.model}\".`);\n resolvedModelName = designated.model;\n }\n\n if (provider === 'nvidia') {\n const apiKey = options.apiKey || process.env.NVIDIA_API_KEY || '';\n const nvidia = createOpenAI({\n apiKey,\n baseURL: options.baseURL || 'https://integrate.api.nvidia.com/v1',\n });\n return nvidia.chat(resolvedModelName || 'nvidia/nemotron-3-ultra-550b-a55b');\n }\n\n if (provider === 'openrouter') {\n const apiKey = options.apiKey || process.env.OPENROUTER_API_KEY || process.env.OPENAI_API_KEY || '';\n const openrouter = createOpenAI({\n apiKey,\n baseURL: options.baseURL || 'https://openrouter.ai/api/v1',\n });\n return openrouter.chat(resolvedModelName || '@preset/coding-free');\n }\n\n if (provider === 'alibaba' || provider === 'dashscope') {\n const effectiveKey =\n options.apiKey ||\n process.env.ALIBABA_API_KEY ||\n process.env.DASHSCOPE_API_KEY ||\n process.env.SAAS_ALIBABA_API_KEY ||\n process.env.SAAS_DASHSCOPE_API_KEY ||\n '';\n\n let defaultBaseURL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n if (effectiveKey.startsWith('sk-sp-')) {\n defaultBaseURL = 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1';\n }\n\n const rawUrl = options.baseURL || process.env.ALIBABA_BASE_URL || process.env.DASHSCOPE_BASE_URL || defaultBaseURL;\n const cleanBaseURL = rawUrl.replace(/^[\"']|[\"']$/g, '').trim();\n\n const alibaba = createOpenAI({\n apiKey: effectiveKey,\n baseURL: cleanBaseURL,\n // Passthrough: no forced format injection — the Vercel AI SDK's generateObject\n // already instructs the model to return JSON via its schema definition.\n // Injecting 'Output format: JSON.' into markdown-based lesson prompts caused\n // model confusion (mixed markdown + JSON output).\n });\n\n return alibaba.chat(resolvedModelName);\n }\n\n if (provider === 'google') {\n const apiKey = options.apiKey || process.env.GOOGLE_GENERATIVE_AI_API_KEY || process.env.GEMINI_API_KEY || '';\n const google = createGoogleGenerativeAI({ apiKey });\n return google(resolvedModelName);\n }\n\n if (provider === 'deepseek') {\n const apiKey = options.apiKey || process.env.DEEPSEEK_API_KEY || process.env.SAAS_DEEPSEEK_API_KEY || '';\n const deepseek = createDeepSeek({ apiKey });\n return deepseek(resolvedModelName);\n }\n\n if (provider === 'openai') {\n const apiKey = options.apiKey || process.env.OPENAI_API_KEY || '';\n const openai = createOpenAI({\n apiKey,\n baseURL: options.baseURL || process.env.OPENAI_BASE_URL,\n });\n return openai.chat(resolvedModelName);\n }\n\n if (provider === 'ollama') {\n const apiKey = options.apiKey || process.env.OLLAMA_API_KEY || 'ollama';\n const baseURL = options.baseURL || process.env.OLLAMA_BASE_URL || process.env.OPENAI_BASE_URL || 'http://127.0.0.1:11434/v1';\n const ollama = createOpenAI({\n apiKey,\n baseURL,\n });\n return ollama.chat(resolvedModelName || 'qwen2.5:latest');\n }\n\n // Fallback to OpenAI-compatible\n const fallback = createOpenAI({\n apiKey: options.apiKey || process.env.OPENAI_API_KEY || '',\n baseURL: options.baseURL || process.env.OPENAI_BASE_URL,\n });\n return fallback.chat(resolvedModelName);\n}\n\nfunction detectDefaultProvider(): AIProviderName {\n if (process.env.NVIDIA_API_KEY && isProviderEnabled('nvidia')) {\n return 'nvidia';\n }\n if (process.env.OPENROUTER_API_KEY && isProviderEnabled('openrouter')) {\n return 'openrouter';\n }\n if ((process.env.ALIBABA_API_KEY || process.env.DASHSCOPE_API_KEY || process.env.SAAS_ALIBABA_API_KEY) && isProviderEnabled('alibaba')) {\n return 'alibaba';\n }\n if ((process.env.GOOGLE_GENERATIVE_AI_API_KEY || process.env.GEMINI_API_KEY) && (isProviderEnabled('gemini') || isProviderEnabled('google'))) {\n return 'google';\n }\n if ((process.env.DEEPSEEK_API_KEY || process.env.SAAS_DEEPSEEK_API_KEY) && isProviderEnabled('deepseek')) {\n return 'deepseek';\n }\n if (process.env.OPENAI_API_KEY && process.env.OPENAI_API_KEY !== 'ollama' && isProviderEnabled('openai')) {\n return 'openai';\n }\n return getDesignatedFallbackConfig().provider as AIProviderName;\n}\n","/**\n * Markdown Template for Master Lesson Plan (5E Model)\n * Exact Canonical Template from the-ultimate-curriculum-agent-os/_templates/LESSON_5E_template.md\n */\nexport const LESSON_PLAN_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"LESSON_5E\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T1\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\nprerequisite: []\ntemplate_contract: \"lesson-plan-v2\"\ntemplate_required_sections:\n - \"A. Lesson Design Plan\"\n - \"Learning Objectives & Evidence\"\n - \"Activity Sequence\"\n - \"Resource Map\"\n - \"Assessment Map\"\n - \"Artifact Contract\"\n - \"B. Lesson Flow\"\n---\n<!-- INJECT_BODY -->\n\n# LESSON [{{LESSON_ID}}]: {{TITLE}} (5E Model)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** {{DURATION}}\n- **Materials & Equipment:** {{MATERIALS_SUMMARY}}\n- **Keywords / Core Concepts:** {{KEYWORDS}}\n\n| LO | Objective (Bloom's) | Student Evidence | Success Criteria |\n|---|---|---|---|\n{{LEARNING_OBJECTIVES_TABLE_ROWS}}\n\n### 2. Activity Sequence\n> This is the canonical activity contract. Satellite artifacts must expand this sequence and must not invent a different one.\n\n| Seq | 5E Phase | Activity Type | Actor | Purpose | Student Action | Teacher Move | Output/Evidence | LO | Time | Artifact Contract |\n|---|---|---|---|---|---|---|---|---|---|---|\n{{ACTIVITY_SEQUENCE_TABLE_ROWS}}\n\n### 3. Resource Map\n| Resource | Used In Activity | Purpose | Owner Artifact |\n|---|---|---|---|\n{{RESOURCE_MAP_TABLE_ROWS}}\n\n### 4. Assessment Map\n| Evidence | Assessed By | Criteria | Follow-up If Missing |\n|---|---|---|---|\n{{ASSESSMENT_MAP_TABLE_ROWS}}\n\n### 5. Artifact Contract\n- **ACT must expand:** {{ACT_CONTRACT}}\n- **GUIDE must support:** {{GUIDE_CONTRACT}}\n- **SLIDE must visualize:** {{SLIDE_CONTRACT}}\n- **HANDOUT must provide:** {{HANDOUT_CONTRACT}}\n- **WKS must practice:** {{WKS_CONTRACT}}\n- **QUIZ must assess:** {{QUIZ_CONTRACT}}\n- **EXT must extend:** {{EXT_CONTRACT}}\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ENGAGE — {{ENGAGE_DURATION}} mins\n- **Hook Scenario:** {{HOOK_SCENARIO}}\n- **Open Question:** {{HOOK_OPEN_QUESTION}}\n- **Transition:** {{HOOK_TRANSITION}}\n\n### 2. EXPLORE — {{EXPLORE_DURATION}} mins\n- **Activity Reference:** {{EXPLORE_ACTIVITY_REF}}\n- **Student Discovery:** {{EXPLORE_STUDENT_DISCOVERY}}\n\n### 3. EXPLAIN — {{EXPLAIN_DURATION}} mins\n- **Definitions:** \n{{EXPLAIN_DEFINITIONS}}\n- **Visual Illustration (REQUIRED):**\n{{EXPLAIN_VISUAL_ILLUSTRATION}}\n\n### 4. ELABORATE — {{ELABORATE_DURATION}} mins\n- **Tiered Scaffolding:**\n - 🥉 **Bronze:** {{DIFFERENTIATION_BRONZE}}\n - 🥈 **Silver:** {{DIFFERENTIATION_SILVER}}\n - 🥇 **Gold:** {{DIFFERENTIATION_GOLD}}\n\n> **ACT Contract**: Detailed operational instructions must expand the Activity Sequence above and must not change the planned evidence target.\n\n### 5. EVALUATE — {{EVALUATE_DURATION}} mins\n- **Exit Ticket:** {{EXIT_TICKET_CONTENT}}\n- **Closing:** {{CLOSING_REMARKS}}\n\n> **QUIZ Contract**: Detailed assessment criteria and rubrics must assess the evidence and success criteria defined in the Lesson Design Plan.\n\n---\n\n## [OPTIONAL] Teacher Notes\n- **Common Pitfalls:**\n{{COMMON_PITFALLS}}\n- **Troubleshooting:**\n{{TROUBLESHOOTING_ROWS}}\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\n> List all satellite files used in this lesson.\n\n| Artifact File | Role in the Classroom | When to Use |\n|---|---|---|\n| \\`GUIDE_{{LESSON_ID}}.md\\` | Detailed Teaching Script | Teacher preparation |\n| \\`SLIDE_{{LESSON_ID}}.md\\` | Presentation Content | Throughout the session |\n| \\`HANDOUT_{{LESSON_ID}}.md\\` | Theory Summary for Students | During EXPLAIN phase |\n| \\`ACT_{{LESSON_ID}}.md\\` | Detailed Learning Activity Operations | During EXPLORE / ELABORATE / checkpoint phases |\n| \\`WKS_{{LESSON_ID}}.md\\` | Individual Worksheet | Wrap-up or Homework |\n| \\`QUIZ_{{LESSON_ID}}.md\\` | Assessment Rubric | During EVALUATE phase |\n| \\`EXT_{{LESSON_ID}}.md\\` | Enrichment Materials | For \"Gold\" students |\n`.trim();\n","/**\n * Markdown Template for Inquiry-Based Activity (ACT)\n * Exact Canonical Template from the-ultimate-curriculum-agent-os/_templates/ACT_template.md\n */\nexport const ACT_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T2\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Computational Thinking Focus\"\n - \"Materials & Setup\"\n - \"Constraints & Safety\"\n - \"Active Learning Workflow\"\n - \"3-Tier Differentiation\"\n - \"Reflection\"\n---\n<!-- INJECT_BODY -->\n\n# INQUIRY-BASED ACTIVITY: {{TITLE}}\n_Milestone: {{MILESTONE_ID}} | Module: {{MODULE_NAME}} | Lesson: {{LESSON_ID}}_\n\n## [REQUIRED] Computational Thinking Focus\n- **Problem Statement (Real-world Scenario):** {{PROBLEM_STATEMENT}}\n- **Decomposition:**\n{{DECOMPOSITION_STEPS}}\n- **Algorithm Design:** {{ALGORITHM_DESIGN}}\n\n## [REQUIRED] Materials & Setup\n- **Reference Material:** Students should use the **HANDOUT** for this lesson as their primary technical reference (lifeline).\n- **Hardware/Software:**\n<!-- [HARDWARE_BOM] -->\n{{HARDWARE_ITEMS}}\n<!-- [/HARDWARE_BOM] -->\n- **Software:** {{SOFTWARE_ITEMS}}\n- **Consumables:** {{CONSUMABLES}}\n- **Other Resources:** {{OTHER_RESOURCES}}\n\n## [REQUIRED] Constraints & Safety\n- ⚠️ **Technical/Safety:** {{SAFETY_WARNING}}\n- 💡 **Design Constraint:** {{DESIGN_CONSTRAINT}}\n\n## [REQUIRED] Active Learning Workflow\n\n### Phase 1: Planning & Design — {{PHASE1_DURATION}} mins\n- **Student Task:** Hand-draw (or draft in words) the algorithm flowchart or connection architecture before touching the computer/devices.\n- **Teacher Action:** Walk around to check the logic of each group. Ask inquiry questions:\n{{PHASE1_INQUIRY_QUESTIONS}}\n\n### Phase 2: Implementation & Discovery — {{PHASE2_DURATION}} mins\n- **Student Task:** Apply the knowledge from the **HANDOUT** to realize the plan designed in Phase 1. Encourage self-inquiry and documentation lookup.\n- **Teacher Action:** Avoid \"hand-holding.\" Only intervene if a group has been stuck for more than 5 minutes.\n{{PHASE2_GUIDANCE_BLOCK}}\n\n### Phase 3: Debugging & Testing — {{PHASE3_DURATION}} mins\n- **Testing:** Students run their system.\n- **Error Analysis:** Ask students to record any error codes or unexpected behaviors and compare them with the Troubleshooting table in the Handout.\n{{PHASE3_TESTING_STEPS}}\n\n## [REQUIRED] 3-Tier Differentiation\n> MUST design tasks in 3 tiers to support diverse learner groups. Bronze is the minimum requirement for all students.\n- 🥉 **Bronze (Foundational):** {{DIFFERENTIATION_BRONZE}}\n- 🥈 **Silver (Application):** {{DIFFERENTIATION_SILVER}}\n- 🥇 **Gold (Enrichment/Creative):** {{DIFFERENTIATION_GOLD}}\n\n## [REQUIRED] Reflection\n- **Discussion Question:** {{REFLECTION_QUESTION}}\n`.trim();\n","/**\n * Markdown Template for Code Lab (LAB)\n * 100% English Template Structure (Ported from /Users/tonypham/MEGA/ai-platform/my-mcp/_templates/LAB_TEMPLATE.md)\n */\nexport const CODE_LAB_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"LAB\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"{{PHASE}}\"\ndeliverable: \"P3-T2\"\nversion: \"{{VERSION}}\"\ndate: \"{{DATE}}\"\n---\n<!-- INJECT_BODY -->\n\n# 👨‍💻 CODE LAB: {{TITLE}}\n_Milestone: {{MILESTONE_ID}} | Tech Stack: {{TECH_STACK}}_\n\n## 🎯 Overview\nThis lab focuses on the practical implementation of core technical concepts, bridging theory into working, robust, and testable code.\n\n## 🛠️ Environment & Setup\n- **Language / Framework:** {{LANGUAGE_FRAMEWORK}}\n- **IDE / Editor:** {{IDE_EDITOR}}\n- **Required Libraries:** {{REQUIRED_LIBRARIES}}\n- **Hardware / Connection Setup:** {{HARDWARE_ENV_CONNECTION}}\n\n## 📝 Lab Tasks (3-Tier Differentiation)\n\n### 🥉 Bronze (Foundational) — {{BRONZE_MINS}} mins\n**Objective:** {{BRONZE_OBJECTIVE}}\n- **Task:** {{BRONZE_TASK}}\n- **Requirement:** {{BRONZE_REQUIREMENT}}\n\n### 🥈 Silver (Application) — {{SILVER_MINS}} mins\n**Objective:** {{SILVER_OBJECTIVE}}\n- **Task:** {{SILVER_TASK}}\n- **Requirement:** {{SILVER_REQUIREMENT}}\n\n### 🥇 Gold (Enrichment/Creative) — {{GOLD_MINS}} mins\n**Objective:** {{GOLD_OBJECTIVE}}\n- **Task:** {{GOLD_TASK}}\n- **Requirement:** {{GOLD_REQUIREMENT}}\n\n## 💻 Technical Reference ([SME_MANDATE])\n<!-- [SME_MANDATE] -->\n> Any code provided in this section is verified for syntax accuracy and runtime execution.\n\n### Starter Code Template\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{STARTER_CODE}}\n\\`\\`\\`\n\n### Solution Code\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SOLUTION_CODE}}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n## 🔍 Troubleshooting & Debugging Matrix\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n{{TROUBLESHOOTING_ROWS}}\n\n## 🏁 Submission & Verification Checklist\n{{CHECKLIST_ITEMS}}\n`.trim();\n","/**\n * Markdown Template for Self-Paced Hands-on Lab (SELF_LAB)\n * Features Progressive Hints System (Accordion/Spoilers) & Automated Verification Commands\n */\nexport const SELF_LAB_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"SELF_LAB\"\nlanguage: \"{{LANGUAGE}}\"\ndifficulty: \"{{DIFFICULTY}}\"\nestimated_minutes: {{ESTIMATED_MINUTES}}\ntech_stack: {{TECH_STACK}}\n---\n\n# 🚀 Self-Paced Hands-On Lab: {{TITLE}}\n\n> ⏱️ **Estimated Duration:** ~{{ESTIMATED_MINUTES}} mins \n> 🎯 **Difficulty Level:** {{DIFFICULTY_UPPER}} \n> 🧰 **Tech Stack:** {{TECH_STACK_STR}} \n> 💡 **Self-Learner Notice:** You are in full control of this lab. Follow the progressive challenges below. If you get stuck at any point, use the **Progressive Hints System** to get unstuck without ruining the learning experience!\n\n---\n\n## 📋 Mission Briefing & Environment Setup\n{{MISSION_BRIEFING}}\n\n### 🛫 Preflight Checklist\n{{PREFLIGHT_CHECKLIST}}\n\n---\n\n## 🎯 Progressive Challenges (3-Tier Differentiation)\n\n### 🥉 Challenge 1: Foundational Core (Bronze) — ~{{BRONZE_MINS}} mins\n**Objective:** {{BRONZE_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{BRONZE_TASKS}}\n\n#### 🧪 Self-Verification Command:\n\\`\\`\\`bash\n{{BRONZE_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{BRONZE_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### 💡 Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>💡 Hint Level 1: Conceptual Clue (Hướng tư duy)</b></summary>\n\n{{BRONZE_HINT_1}}\n</details>\n\n<details>\n<summary><b>🔍 Hint Level 2: Structural Skeleton (Khung code mẫu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{BRONZE_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>🚨 Hint Level 3: Full Solution & Explanation (Lời giải trọn vẹn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{BRONZE_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{BRONZE_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n### 🥈 Challenge 2: Logic & Error Handling (Silver) — ~{{SILVER_MINS}} mins\n**Objective:** {{SILVER_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{SILVER_TASKS}}\n\n#### 🧪 Self-Verification Command:\n\\`\\`\\`bash\n{{SILVER_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{SILVER_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### 💡 Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>💡 Hint Level 1: Conceptual Clue (Hướng tư duy)</b></summary>\n\n{{SILVER_HINT_1}}\n</details>\n\n<details>\n<summary><b>🔍 Hint Level 2: Structural Skeleton (Khung code mẫu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SILVER_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>🚨 Hint Level 3: Full Solution & Explanation (Lời giải trọn vẹn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{SILVER_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{SILVER_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n### 🥇 Challenge 3: Edge Cases & Optimization (Gold) — ~{{GOLD_MINS}} mins\n**Objective:** {{GOLD_OBJECTIVE}}\n\n#### Tasks & Implementation Details:\n{{GOLD_TASKS}}\n\n#### 🧪 Self-Verification Command:\n\\`\\`\\`bash\n{{GOLD_VERIFY_COMMAND}}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n{{GOLD_EXPECTED_OUTPUT}}\n\\`\\`\\`\n\n#### 💡 Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>💡 Hint Level 1: Conceptual Clue (Hướng tư duy)</b></summary>\n\n{{GOLD_HINT_1}}\n</details>\n\n<details>\n<summary><b>🔍 Hint Level 2: Structural Skeleton (Khung code mẫu)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{GOLD_HINT_2}}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>🚨 Hint Level 3: Full Solution & Explanation (Lời giải trọn vẹn)</b></summary>\n\n\\`\\`\\`{{CODE_LANGUAGE}}\n{{GOLD_HINT_3_CODE}}\n\\`\\`\\`\n\n**Why this solution works:**\n{{GOLD_HINT_3_EXPLANATION}}\n</details>\n\n---\n\n## 🔍 Self-Learner Troubleshooting Matrix\n| Symptom / Error Message | Root Cause | Exact Fix |\n| :--- | :--- | :--- |\n{{TROUBLESHOOTING_ROWS}}\n\n---\n\n## 🏁 Final Lab Submission & Mastery Checklist\n{{FINAL_CHECKLIST}}\n`.trim();\n","/**\n * Markdown Template for Diagnostic & Active Recall Quiz (QUIZ)\n * Compatible with @thanh01.pmt/interactive-quiz-kit standard\n */\nexport const QUIZ_TEMPLATE = `\n---\nid: \"{{ID}}\"\ntitle: \"{{TITLE}}\"\ntype: \"QUIZ\"\nlanguage: \"{{LANGUAGE}}\"\ntotal_questions: {{TOTAL_QUESTIONS}}\npassing_score_pct: {{PASSING_SCORE_PCT}}\n---\n\n# 🧠 Diagnostic & Active Recall Quiz: {{TITLE}}\n\n> ⏱️ **Recommended Time:** ~10-15 mins \n> 🎯 **Passing Score:** {{PASSING_SCORE_PCT}}% \n> 💡 **Purpose:** Test your conceptual understanding, catch hidden misconceptions, and evaluate architectural trade-offs.\n\n---\n\n{{QUESTIONS_SECTION}}\n\n---\n\n## 🔑 Comprehensive Answer Key & Deep Explanation (Expand after completing)\n<details>\n<summary><b>👉 Click to View Full Explanations & Common Pitfall Analysis</b></summary>\n\n{{ANSWER_KEY_SECTION}}\n</details>\n`.trim();\n","import type { MilestoneInput } from '../../schemas';\nimport { LESSON_PLAN_TEMPLATE } from '../../templates';\n\nexport interface LessonPromptInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n contextContinuity?: string;\n /** Pre-rendered STANDARDS CONTEXT block (from buildStandardsContextBlock) — verbatim standard statements binding this lesson. */\n standardsContext?: string;\n}\n\nexport function buildLessonMasterPrompt(input: LessonPromptInput): string {\n const { milestone, language, topic, targetAudience, contextContinuity, standardsContext } = input;\n const learningObjectives = milestone.learning_objectives || [];\n const lessonId = milestone.id || milestone.concept_code || 'U01_M01_L01';\n\n return `\n# ROLE & PERSONA\nYou are a Senior Educational Content Editor and Curriculum Architect (@content), expert in the 5E Instructional Model (Engage, Explore, Explain, Elaborate, Evaluate), Bloom's Revised Taxonomy, and Universal Design for Learning (UDL).\n\n# MISSION SCOPE\nBuild a deep, rigorous, and highly pedagogical Master Lesson Plan (LESSON) that strictly fulfills the target Learning Objectives across any domain (Coding, Engineering, Data, Science, Math, Business, Design, or Humanities).\n\n## IN SCOPE:\n- **Pedagogical Structure:** Use the 5E model to orchestrate active inquiry and cognitive scaffolding.\n- **Cumulative Scaffolding & Zero Duplication:**\n - ⛔ **ANTI-DUPLICATION MANDATE:** Inspect the CUMULATIVE CONTEXT ($L_1 \\dots L_{N-1}$). You MUST NOT re-teach, re-explain, or duplicate the exact same code snippet, hardware wiring, or basic concept already taught in prior lessons (e.g. if $L_1$ already taught blinking LED on pin 13 with delay(1000), $L_2$ MUST advance to multi-LED sequencing, variable state, PWM analogWrite, or sensor input).\n - 🔗 **CONTINUOUS STORYLINE & ANALOGIES:** Re-use and build upon the overarching narrative, character evolution, and analogies established in CONTENT_CONTINUITY.md (e.g. Mind -> Reflexes -> Hands -> Master System) instead of inventing disconnected one-off metaphors.\n- **Strict Satellite Artifact ID Contract:** All satellite deliverables referenced in the Lesson Plan MUST follow canonical naming based on **lessonId** (\"${lessonId}\"):\n - Activity Lab: \\`ACT_${lessonId}\\`\n - Slide Deck: \\`SLIDE_${lessonId}\\`\n - Diagnostic Quiz: \\`QUIZ_${lessonId}\\`\n - Teacher Guide: \\`GUIDE_${lessonId}\\`\n - Worksheet: \\`WKS_${lessonId}\\`\n - Student Handout: \\`HANDOUT_${lessonId}\\`\n - Extension: \\`EXT_${lessonId}\\`\n - ⛔ PROHIBITED: Never generate ad-hoc IDs like \\`ACT_WARMUP_01\\`, \\`SLIDE_CORE_02\\`, or \\`QUIZ_WRAPUP_05\\`.\n- **Authentic Real-World Hook:** Create a compelling, high-stakes scenario tailored to the domain:\n - *Tech/Software/IoT:* Server outage, vaccine cold-chain failure, cybersecurity breach, logistics bottleneck.\n - *Data/Science/Math:* Clinical trial anomaly, ecological tipping point, forecasting error, experimental anomaly.\n - *Business/Economics/Finance:* Critical market shift, startup runway crisis, operational failure, supply chain shock.\n - *Design/Media/Humanities:* UX accessibility collapse, public communication dilemma, historical inflection point.\n- **Relatable Analogies & Conceptual Depth:** For EVERY core concept, provide a relatable real-world analogy alongside rigorous domain explanation.\n- **Multidimensional Comparison Table:** Compare at least 3 options/approaches across 4 columns (Option, Mechanism/Principle, Trade-offs/Impact, Practical Meaning).\n- **Formulas, Rules of Thumb, or Heuristics:** Provide mathematical formulas in LaTeX (e.g. $Z = \\\\frac{x - \\\\mu}{\\\\sigma}$), scientific equations, or domain-specific decision heuristics where applicable.\n- **Visual Architecture & Flow:** Provide a valid, clean Mermaid diagram (flowchart, sequence diagram, or state machine) illustrating the conceptual flow, system architecture, or process sequence.\n- **Guided Practice Demonstration:**\n - *For Coding/Tech Courses:* Provide complete, runnable code with line-by-line comments explaining \"Why\" not just \"How\".\n - *For Non-Coding/Domain Courses:* Provide a structured analysis framework, step-by-step calculation, protocol template, or case study walkthrough.\n- **Formative Exit Ticket:** Formulate scenario-based questions at the Apply/Analyze Bloom level + a metacognitive self-assessment prompt.\n- **Comprehensive Teacher Notes:** Detail common student pitfalls/misconceptions and an actionable Troubleshooting/Intervention Matrix.\n\n## OUT OF SCOPE (PROHIBITED):\n- Do NOT repeat exercises, code, or circuits from prior lessons in the roadmap.\n- Do NOT invent ad-hoc artifact IDs (use only canonical IDs).\n- Do NOT write shallow, generic textbook summaries.\n- Do NOT skip analogies or provide dry, context-free definitions.\n- Do NOT omit Mermaid diagrams or comparison tables.\n- Do NOT force programming code on non-technical subjects (use domain-appropriate structured frameworks instead).\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate structured data that will render directly into this exact Markdown template:\n---\n${LESSON_PLAN_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Lesson ID:** ${milestone.id || milestone.concept_code || 'L01'}\n- **Title / Name:** ${milestone.name}\n- **Milestone Description:** ${milestone.description}\n- **Feature / Phase:** ${milestone.feature_name || milestone.feature_id || 'Core Learning'}\n- **Bloom Taxonomy Target:** ${milestone.bloom_level || 'understand'}\n- **Difficulty:** ${milestone.difficulty || 'Intermediate'}\n- **Subject / Topic:** ${topic || milestone.feature_name || 'Curriculum Subject'}\n- **Target Audience:** ${targetAudience || 'Target Learners'}\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Learning Objectives:**\n${learningObjectives.map((lo) => ` - [${lo.lo_type || 'ULO'}] ${lo.code}: ${lo.name} (${lo.description || ''}) -> Bloom: ${lo.bloom_level || 'understand'}`).join('\\n')}\n\n${contextContinuity ? `# CUMULATIVE CONTEXT & CONTINUITY (SOURCE OF TRUTH FOR PRIOR LESSONS)\\n${contextContinuity}\\n\\n*INSTRUCTION: Build strictly on top of the above progress. DO NOT re-teach concepts already marked completed above.*` : ''}\n\n${standardsContext || ''}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching the LessonPlanSchema with these exact keys:\n- \"artifactType\": \"LESSON\"\n- \"lessonId\": \"${milestone.id || 'L01'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"topic\": \"${topic || milestone.feature_name || 'General Topic'}\"\n- \"targetGradeOrAudience\": \"${targetAudience || 'Learners'}\"\n- \"overview\": string (Pedagogical overview)\n- \"learningObjectives\": array of { \"code\": string, \"name\": string, \"description\": string, \"bloomLevel\": string, \"successCriteria\": string }\n- \"prerequisites\": string (Prior knowledge linkage)\n- \"materialsSummary\": string (Required tools / resources)\n- \"keywords\": string[] (Core domain terms introduced)\n- \"hookTitle\": string (Compelling scenario title)\n- \"hookScenario\": string (High-stakes real-world scenario)\n- \"hookQuestions\": string[] (At least 2 provocative open-ended inquiry questions)\n- \"coreConcepts\": array of { \"name\": string, \"analogy\": string, \"technicalDepth\": string, \"comparisonTable\": { \"headers\": string[], \"rows\": string[][] }, \"formulaOrRule\": string }\n- \"guidedPractice\": { \"title\": string, \"explanation\": string, \"codeSnippet\": string (Runnable code for tech courses OR structured domain template/walkthrough for non-tech), \"codeLanguage\": string (e.g. \"python\", \"typescript\", \"markdown\", \"text\"), \"mermaidDiagram\": string (Valid Mermaid diagram syntax) }\n- \"independentPractice\": { \"title\": string, \"description\": string }\n- \"differentiation\": { \"bronzeTier\": string, \"silverTier\": string, \"goldTier\": string }\n- \"sections\": array of { \"title\": string, \"durationMinutes\": number, \"teacherActions\": string, \"studentActions\": string, \"analogies\": string[], \"formativeCheck\": string }\n- \"exitTicket\": { \"questionStem\": string, \"expectedAnswerOrRubric\": string, \"metacognitivePrompt\": string }\n- \"teacherNotes\": { \"commonPitfalls\": string[], \"troubleshootingMatrix\": array of { \"issue\": string, \"potentialCause\": string, \"solution\": string }, \"extensionNotes\": string }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\nimport { ACT_TEMPLATE } from '../../templates';\n\nexport interface ActivityPromptInput {\n lesson: LessonPlan;\n language: string;\n hardwareBOM?: string[];\n softwareTools?: string[];\n}\n\nexport function buildActivityPrompt(input: ActivityPromptInput): string {\n const { lesson, language, hardwareBOM, softwareTools } = input;\n\n const loList = lesson.learningObjectives\n .map((lo) => `- [${lo.bloomLevel}] ${lo.code}: ${lo.name || ''} — ${lo.description}${lo.successCriteria ? ` (Evidence: ${lo.successCriteria})` : ''}`)\n .join('\\n');\n\n const lessonFlowSummary = (lesson.sections || [])\n .map((s, idx) => `### Stage ${idx + 1}: ${s.title} (${s.durationMinutes} mins)\\n- Teacher Moves: ${s.teacherActions}\\n- Student Actions: ${s.studentActions}${(s.analogies || []).length > 0 ? `\\n- Analogies: ${s.analogies.join('; ')}` : ''}`)\n .join('\\n\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **@activity** Specialist in Inquiry-Based Learning and Hands-On STEM/Software Engineering design.\n\n# MISSION SCOPE & CANONICAL CONTRACT\nTransform the exact pedagogical flow and activities from the Master Lesson Plan (LESSON) into an active, hands-on, inquiry-driven classroom lab.\n\n## STRICT CONTRACT RULES (CRITICAL):\n1. **Activity Sequence Alignment:** You MUST operationalize and expand the EXACT activity sequence and stages defined in the Master Lesson Plan. DO NOT invent an unrelated topic or activity (e.g. if the lesson is about Design Thinking, Empathy Mapping and Problem Definition, the activity MUST be an Empathy Mapping & Problem Definition lab on paper/Miro, NOT a physical hardware soldering or wiring lab).\n2. **Context-Appropriate Materials & BOM:** \n - Only include physical hardware in \\`<!-- [HARDWARE_BOM] -->\\` if the lesson explicitly involves physical wiring or hardware setup.\n - If the lesson is conceptual, design, or pure software, \\`hardware\\` must be empty or contain only workstation tools (e.g. \"Developer Workstation\"), while \\`consumables\\` and \\`software\\` contain paper, sticky notes, IDE, or design canvas.\n3. **Context-Appropriate Safety:** Safety warnings must strictly match what students actually do in this specific lesson (e.g. avoid electrical warnings for a paper-based design workshop).\n4. **3-Tier Differentiation:** Follow the scaffolding defined in the lesson plan:\n - 🥉 Bronze: ${lesson.differentiation?.bronzeTier || 'Foundational core task'}\n - 🥈 Silver: ${lesson.differentiation?.silverTier || 'Application task with additional logic'}\n - 🥇 Gold: ${lesson.differentiation?.goldTier || 'Enrichment and creative extension'}\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${ACT_TEMPLATE}\n---\n\n# CANONICAL MASTER LESSON CONTEXT (SOURCE OF TRUTH)\n- **Lesson ID:** ${lesson.lessonId}\n- **Lesson Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Target Audience:** ${lesson.targetGradeOrAudience}\n- **Lesson Overview:** ${lesson.overview}\n- **Hook Scenario:** ${lesson.hookScenario}\n- **Learning Objectives:**\n${loList}\n\n- **Master Lesson Flow (Stages & Teacher/Student Actions):**\n${lessonFlowSummary}\n\n${lesson.guidedPractice ? `- **Guided Practice Context:** ${lesson.guidedPractice.title} — ${lesson.guidedPractice.explanation}` : ''}\n${lesson.materialsSummary ? `- **Lesson Materials Summary:** ${lesson.materialsSummary}` : ''}\n\n# INPUT PARAMETERS\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Available Hardware Context:** ${(hardwareBOM || []).join(', ') || 'Developer Workstation'}\n- **Available Software Context:** ${(softwareTools || []).join(', ') || 'IDE / Design Canvas'}\n\n# REQUIRED JSON KEYS\nReturn a single JSON object matching ActivityLabSchema with these exact keys:\n- \"artifactType\": \"ACT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (Must match or complement \"${lesson.title}\")\n- \"language\": \"${language}\"\n- \"objective\": string (Hands-on practical objective directly fulfilling the lesson LOs)\n- \"totalDurationMinutes\": number (e.g. 45 or 60)\n- \"computationalThinking\": { \n \"problemStatement\": string (Authentic real-world challenge aligned with lesson hook),\n \"decomposition\": string[] (3-4 discrete steps directly matching the lesson flow),\n \"algorithmDesign\": string (Data flow, logic, or design framework to follow before executing)\n }\n- \"materialsBOM\": { \n \"hardware\": string[] (Hardware components ONLY if physical hardware is touched, else empty array []),\n \"software\": string[] (IDEs, web tools, simulators, or design platforms),\n \"consumables\": string[] (Paper, pens, sticky notes, wires if applicable),\n \"otherResources\": string[] (Handout, empathy canvas, or reference docs)\n }\n- \"safetyWarnings\": string[] (Realistic cautions matching the specific activity)\n- \"designConstraints\": string[] (Design constraints to stimulate thinking)\n- \"teacherTips\": string[] (Pedagogical facilitation tips)\n- \"activeLearningWorkflow\": {\n \"phase1Planning\": { \"durationMinutes\": number, \"studentTask\": string, \"teacherAction\": string, \"inquiryQuestions\": string[] },\n \"phase2Implementation\": { \"durationMinutes\": number, \"studentTask\": string, \"teacherAction\": string, \"codeOrCommands\": string[] },\n \"phase3Debugging\": { \"durationMinutes\": number, \"testingSteps\": string, \"errorAnalysis\": string }\n }\n- \"steps\": array of {\n \"stepNumber\": number,\n \"title\": string,\n \"durationMinutes\": number,\n \"teacherInstructions\": string,\n \"studentInstructions\": string,\n \"checkpoint\": string\n } (Detailed step-by-step procedure operationalizing the lesson stages)\n- \"differentiation3Tier\": { \n \"bronzeTier\": string, \n \"silverTier\": string, \n \"goldTier\": string \n }\n- \"scaffoldingSupport\": string\n- \"levelUpExtension\": string\n- \"reflectionQuestion\": string\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\nimport { CODE_LAB_TEMPLATE } from '../../templates';\n\nexport interface CodeLabPromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n targetTechStack?: string[];\n}\n\nexport function buildCodeLabPrompt(input: CodeLabPromptInput): string {\n const { lesson, activity, language, targetTechStack } = input;\n const techStackList = targetTechStack && targetTechStack.length > 0\n ? targetTechStack\n : ['General Programming & Engineering'];\n\n const loList = lesson.learningObjectives\n .map((lo) => `- [${lo.bloomLevel}] ${lo.code}: ${lo.name || ''} — ${lo.description}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Software Architect & Engineering Instructor**, responsible for creating production-quality, runnable Code Labs with automated tests and clear debugging guidance.\n\n# MISSION SCOPE & CANONICAL CONTRACT\nGenerate complete, verified source code that satisfies the lesson objectives and operationalizes the practical tasks of this lesson.\n\n## IN SCOPE:\n- **Environment & Setup:** Specify exact language versions, required packages, IDE setups, and environment variables.\n- **3-Tier Lab Tasks:** Define progressive challenges:\n - 🥉 **Bronze:** Basic setup, syntax correctness, clean run.\n - 🥈 **Silver:** Core logic implementation, data transformations, error handling.\n - 🥇 **Gold:** Advanced edge cases, optimizations, or external service integration.\n- **Verified Code:** Provide complete, runnable Starter Code (with skeleton/TODO markers) and Solution Code (with robust error handling).\n- **Troubleshooting Matrix:** Provide an actionable table with at least 3 common runtime/compilation bugs, their root cause, and exact fix.\n- **Verification Checklist:** End-to-end checks for student self-submission.\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${CODE_LAB_TEMPLATE}\n---\n\n# CANONICAL LESSON CONTEXT (SOURCE OF TRUTH)\n- **Lesson ID:** ${lesson.lessonId}\n- **Lesson Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Lesson Overview:** ${lesson.overview}\n- **Learning Objectives:**\n${loList}\n${lesson.guidedPractice ? `- **Lesson Guided Code:**\\n\\`\\`\\`${lesson.guidedPractice.codeLanguage}\\n${lesson.guidedPractice.codeSnippet}\\n\\`\\`\\`` : ''}\n${activity?.objective ? `- **Activity Practical Objective:** ${activity.objective}` : ''}\n\n# INPUT PARAMETERS\n- **Tech Stack:** ${techStackList.join(', ')}\n- **Language Policy:** Code comments, explanations, and instructions in **\"${language}\"**.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching CodeLabSchema with these exact keys:\n- \"artifactType\": \"CODE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"techStack\": string[]\n- \"environmentSetup\": { \"languageFramework\": string, \"ideEditor\": string, \"requiredLibraries\": string[], \"hardwareOrEnvConnection\": string }\n- \"threeTierTasks\": {\n \"bronze\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string },\n \"silver\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string },\n \"gold\": { \"mins\": number, \"objective\": string, \"task\": string, \"requirement\": string }\n }\n- \"starterCode\": { \"filename\": string, \"language\": string, \"purpose\": \"starter\", \"content\": string, \"explanation\": string }\n- \"solutionCode\": { \"filename\": string, \"language\": string, \"purpose\": \"solution\", \"content\": string, \"explanation\": string }\n- \"testCases\": array of { \"description\": string, \"input\": string, \"expectedOutput\": string }\n- \"troubleshootingMatrix\": array of { \"issue\": string, \"potentialCause\": string, \"solution\": string }\n- \"commonBugsAndFixes\": array of { \"bugDescription\": string, \"solutionHint\": string }\n- \"submissionChecklist\": string[]\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface WorksheetPromptInput {\n lesson: LessonPlan;\n language: string;\n}\n\nexport function buildWorksheetPrompt(input: WorksheetPromptInput): string {\n const { lesson, language } = input;\n\n return `\n# System Methodology: Guided Worksheet Design (@activity — Scaffolded Practice)\n\nYou are the **@activity** specialist designing a Guided Worksheet (WKS) based on the **Gradual Release Model** (I Do -> We Do -> You Do).\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all instructions, questions, think-aloud reflection prompts, and checkpoints strictly in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Objectives:** ${lesson.learningObjectives.map((lo) => lo.description).join('; ')}\n\n## REQUIREMENTS\n1. **Scaffolding Ladder:** Include exercises spanning across:\n - Section A (⭐ Remember / Fill-in-the-blank)\n - Section B (⭐⭐ Understand / Short answer)\n - Section C (⭐⭐⭐ Apply / Scenario-based problem)\n - Section D (⭐⭐⭐⭐ Analyze / Extension challenge)\n2. **Think-Aloud Prompts:** Include metacognitive reflection prompts.\n3. **Checkpoints:** Include teacher-signoff checkpoints to prevent misconceptions.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching WorksheetSchema with these exact keys:\n- \"artifactType\": \"WKS\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"learningObjectivesSummary\": string[] (checklist of objectives students will achieve)\n- \"exercises\": array of {\n \"exerciseId\": string (e.g. \"Ex1_A\", \"Ex2_B\"),\n \"sectionTier\": \"Section_A_Remember\" | \"Section_B_Understand\" | \"Section_C_Apply\" | \"Section_D_Analyze\",\n \"difficultyStars\": number (1 to 4),\n \"prompt\": string,\n \"starterSnippetOrTemplate\": string (optional code with blanks or template to complete),\n \"answerSpaceType\": \"code_box\" | \"text_lines\" | \"multiple_choice\" | \"matching_table\",\n \"hint\": string (optional scaffolding hint)\n }\n- \"thinkAloudPrompts\": string[] (metacognitive reflection prompts)\n- \"checkpoints\": array of {\n \"afterExerciseId\": string,\n \"instruction\": string\n }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface HandoutPromptInput {\n lesson: LessonPlan;\n language: string;\n}\n\nexport function buildHandoutPrompt(input: HandoutPromptInput): string {\n const { lesson, language } = input;\n\n return `\n# System Methodology: Student Reference Handout (@content — Publishing Mode)\n\nYou are the **@content** specialist creating an instant-reference Student Handout following the **5-Second Rule** (scannable, concise, learner-facing).\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all headings, bullet points, callout boxes, and glossary definitions strictly in **\"${language}\"**.\n- Use second-person voice (\"You will...\").\n\n## MASTER LESSON CONTRACT\n- **Lesson ID:** ${lesson.lessonId}\n- **Title:** ${lesson.title}\n- **Overview:** ${lesson.overview}\n\n## REQUIREMENTS\n1. **5-Second Scannability:** Max 3 heading levels, concise bullet points (<= 7 per list), bold key terms on first use.\n2. **Tables & Snippets:** Use tables for comparisons or pinouts, and clean copy-paste ready code syntax blocks.\n3. **Callout Boxes:** Include at least one Key Formula / Syntax Box, Analogy Reminder, or Common Mistake callout.\n4. **Zero-Jargon Glossary:** Define all newly introduced technical terms in plain language.\n5. **Sanitization:** Do NOT include teacher notes, Bloom tags, or answer keys in this student handout.\n\n## REQUIRED JSON KEYS\nPlease return a single JSON object matching these exact keys:\n- \"artifactType\": \"HANDOUT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"tagline\": string (1-sentence summary in \"${language}\")\n- \"sections\": array of { \"heading\": string, \"summaryPoints\": string[], \"codeSnippet\": string, \"calloutBox\": { \"type\": \"key_formula\" | \"analogy_reminder\" | \"common_mistake\", \"title\": string, \"content\": string } }\n- \"glossary\": array of { \"term\": string, \"definition\": string }\n`.trim();\n}\n","import type { LessonPlan } from '../../schemas';\n\nexport interface SlidesPromptInput {\n lesson: LessonPlan;\n language: string;\n marpTheme?: string;\n}\n\nexport function buildSlidesPrompt(input: SlidesPromptInput): string {\n const { lesson, language, marpTheme } = input;\n const concepts = lesson.coreConcepts || [];\n\n return `\n# System Methodology: Marp Presentation Slides Deck (@illustrator + @content)\n\nYou are the **@illustrator + @content** presentation architect. Your mission is to produce a pedagogically structured, highly interactive Marp presentation deck built on **Chunky Micro-Cycle Learning (Learn-Apply-Validate Loops)**.\n\n## PEDAGOGICAL PHILOSOPHY (ANTI-FRONT-LOADING)\n⛔ **DO NOT DUMP THEORY ALL AT ONCE:** Never lecture through Concept 1, 2, and 3 consecutively for 30 minutes before giving students a hands-on task. This causes severe cognitive overload and passive disengagement.\n✅ **CHUNKY MICRO-LEARNING & IMMEDIATE APPLICATION:** Break the lesson into self-contained batches. For EACH concept batch, provide foundational theory, followed IMMEDIATELY by a quick hands-on micro-practice / cold-call check. Only after students master the micro-bricks do we transition into the **Integrated Advanced Hands-On Lab**.\n\n---\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all slide titles, bullet points, diagram labels, and presenter notes in **\"${language}\"**.\n- Keep programming keywords and code syntax intact.\n\n## MASTER LESSON CONTRACT\n- **Lesson ID:** ${lesson.lessonId}\n- **Title:** ${lesson.title}\n- **Topic:** ${lesson.topic}\n- **Overview:** ${lesson.overview}\n- **Theme:** ${marpTheme || 'gaia'}\n- **Core Concepts (${concepts.length}):**\n${concepts.map((c, i) => ` ${i + 1}. **${c.name}**: ${c.technicalDepth || ''} (Analogy: ${c.analogy || ''})`).join('\\n')}\n\n---\n\n## DYNAMIC SLIDE ARCHITECTURE (CHUNKY MICRO-CYCLES)\n\n### Phase 1: Anchor Opening (~3-4 slides)\n1. **Title & Mission:** Lesson name, real-world context, and overarching build objective.\n2. **Roadmap & Agenda:** Visual journey breakdown showing the micro-milestones and timing.\n3. **Prior Knowledge Warm-up (Review):** 2 cold-call questions activating existing mental models.\n4. **Hook Scenario (Engage):** High-stakes real-world engineering problem (stakes & constraints, no solution yet).\n\n### Phase 2: Concept Micro-Cycles (Repeat this 4-6 slide loop for EACH Core Concept Batch)\nFor EACH Concept Batch ($i = 1 \\\\dots N$):\n- **Slide A: Core Definition & Mental Model** — What is it? Real-world analogy with visual clarity.\n- **Slide B: Visual Architecture / Diagram** — Mermaid sequence diagram, data flow, or component wiring.\n- **Slide C: Code Demo (I Do)** — Concise, annotated runnable snippet showing the minimal syntax.\n- **Slide D: Quick Micro-Practice / Try It Now (We Do / You Do)** — A 3-5 minute immediate interactive task for students to write/modify 3-5 lines of code at their desks.\n- **Slide E: Concept Check / Cold-Call** — 1 rapid formative check question with instant reveal.\n- **Slide F: Golden Rule / Takeaway** — 1 key takeaway, syntax rule, or anti-pattern to avoid.\n\n### Phase 3: Integrated Advanced Hands-On Lab (~3-4 slides)\n*Only after all concept micro-bricks are learned and verified do we assemble them into the comprehensive project challenge:*\n- **Advanced Challenge Briefing:** The big mission integrating all concepts together.\n- **3-Tier Differentiation:**\n - 🥉 **Bronze:** Complete core working pipeline.\n - 🥈 **Silver:** Error handling, resilience, and input validation.\n - 🥇 **Gold:** Performance optimization, edge cases, and asynchronous polish.\n- **Live Execution Protocol & Gotchas:** Step-by-step workflow, debugging tips, and emergency rollback.\n\n### Phase 4: Reflection & Closing (~2-3 slides)\n- **Formative Checkpoint (Traffic Light):** 🟢 Ready / 🟡 Shaky / 🔴 Stuck with instant troubleshooting tips.\n- **Exit Ticket:** 2 technical scenario questions + 1 metacognitive reflection prompt.\n- **Summary & Next Milestone Preview:** 3 core takeaways and teaser for the next lesson.\n\n---\n\n## COMPOSITION & COGNITIVE LOAD RULES\n- **Max 6 bullet points per slide** (Miller's Law).\n- **Max 15 words per bullet point** — use fragments, code blocks, and visual tables.\n- **Code Slides:** Use fenced code blocks with language tags and line-by-line annotations.\n- **Presenter Notes:** Include detailed teacher talk tracks, cold-call prompts, and facilitation tips for every single slide.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching SlideDeckSchema with these exact keys:\n- \"artifactType\": \"SLIDE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"marpTheme\": \"${marpTheme || 'gaia'}\"\n- \"slides\": array of {\n \"slideNumber\": number (1 to N),\n \"slideType\": \"title\" | \"agenda\" | \"review\" | \"hook\" | \"concept_def\" | \"concept_visual\" | \"concept_compare\" | \"concept_check\" | \"concept_recap\" | \"code_demo\" | \"guided_practice\" | \"activity_intro\" | \"activity_steps\" | \"checkpoint\" | \"exit_ticket\" | \"summary_next\" | \"custom\",\n \"title\": string (in \"${language}\"),\n \"bloomTag\": \"Remember\" | \"Understand\" | \"Apply\" | \"Analyze\" | \"Evaluate\" | \"Create\" | \"None\",\n \"bulletPoints\": string[] (Max 6 points, max 15 words each),\n \"codeSnippet\": string (optional, runnable snippet),\n \"diagramMermaid\": string (optional, valid mermaid code),\n \"presenterNotes\": string (optional, detailed talk track)\n }\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\n\nexport interface TeacherGuidePromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n}\n\nexport function buildTeacherGuidePrompt(input: TeacherGuidePromptInput): string {\n const { lesson, activity, language } = input;\n\n return `\n# System Methodology: Teacher Facilitation Guide (@guide)\n\nYou are the **@guide** instructional coach. Your goal is to produce a practical, insightful Teacher Guide for delivering this lesson and troubleshooting student roadblocks.\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output all rationales, misconceptions, troubleshooting guides, and rubric descriptions strictly in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Overview:** ${lesson.overview}\n- **Activity Context:** ${activity ? activity.objective : 'Standard lesson activities'}\n\n## REQUIREMENTS\n1. **Instructional Rationale:** Why this sequence works and how to guide pacing.\n2. **Common Misconceptions & Counter-Strategies:** Identify what students often confuse and provide actionable counter-explanations.\n3. **Troubleshooting Guide:** Detail at least 2 common technical bugs/symptoms, root causes, and explicit fixes.\n4. **Scoring Rubric:** Provide criteria for \"Meets Standard\" vs \"Exceeds Standard\" student performance.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching TeacherGuideSchema with these exact keys:\n- \"artifactType\": \"GUIDE\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"pedagogicalRationale\": string (the instructional purpose behind this lesson flow)\n- \"commonMisconceptions\": array of {\n \"misconception\": string (what students often wrongly assume or confuse),\n \"counterStrategy\": string (how the teacher should explain or demonstrate the truth)\n }\n- \"troubleshootingGuide\": array of {\n \"symptom\": string (error message or failure symptom),\n \"rootCause\": string (why this occurs),\n \"solution\": string (exact step to fix it)\n }\n- \"scoringRubric\": array of {\n \"criteriaName\": string,\n \"meetsStandard\": string (description of acceptable student performance),\n \"exceedsStandard\": string (description of advanced mastery)\n }\n`.trim();\n}\n","import type { LessonPlan, ActivityLab } from '../../schemas';\n\nexport interface ExtensionPromptInput {\n lesson: LessonPlan;\n activity?: ActivityLab;\n language: string;\n}\n\nexport function buildExtensionPrompt(input: ExtensionPromptInput): string {\n const { lesson, activity, language } = input;\n\n return `\n# System Methodology: Extension Challenges & Novel Context (@extension)\n\nYou are the **@extension** specialist. Your mission is to design advanced, creative extension challenges that apply the lesson skills to novel real-world contexts without altering the core learning objectives.\n\n## TARGET OUTPUT LANGUAGE ENFORCEMENT\n- **Target Language:** **\"${language}\"**\n- Output challenge titles, context narratives, tasks, and guidance in **\"${language}\"**.\n\n## MASTER LESSON CONTRACT\n- **Lesson:** ${lesson.title} (${lesson.lessonId})\n- **Objectives:** ${lesson.learningObjectives.map((lo) => lo.description).join('; ')}\n- **Base Activity:** ${activity ? activity.objective : lesson.overview}\n\n## REQUIREMENTS\n1. Provide at least 2 distinct challenges (e.g. one technical optimization challenge, one authentic real-world application challenge).\n2. Keep the core learning objective preserved while increasing complexity or agency.\n3. Clearly define the expected deliverable for each challenge.\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching ExtensionSchema with these exact keys:\n- \"artifactType\": \"EXT\"\n- \"lessonId\": \"${lesson.lessonId}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"coreLearningObjectivePreserved\": string (the core LO extended by these challenges)\n- \"challenges\": array of {\n \"challengeNumber\": number (1, 2, ...),\n \"title\": string (Catchy title for the extension project),\n \"contextDescription\": string (Novel real-world context for applying the skill),\n \"taskDescription\": string (Specific goal and requirements of the challenge),\n \"expectedDeliverable\": string (What the student produces: code, prototype, or report),\n \"hintOrGuidance\": string (optional open-ended exploration prompt)\n }\n`.trim();\n}\n","export interface JudgePromptInput {\n targetArtifactType: string;\n lessonId: string;\n expectedLanguage: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n generatedContentJson: string;\n /**\n * VERBATIM standard statements relevant to this artifact, keyed by canonical ID\n * (\"packId:statementId\" -> verbatim text). Sourced from the Standards Registry.\n * The judge compares the candidate against the REAL standard text, never memory.\n * Optional for backward compatibility.\n */\n standardStatements?: Record<string, string>;\n}\n\nexport function buildJudgePrompt(input: JudgePromptInput): string {\n const { targetArtifactType, lessonId, expectedLanguage, targetObjectives, generatedContentJson, standardStatements } = input;\n\n return `\n# System Methodology: Multi-Agent LLM-as-Judge & Pedagogical Quality Auditor (@validator)\n\nYou are the **@validator / LLM-as-Judge** expert. Your task is to impartially and rigorously audit the generated curriculum artifact against pedagogical standards, Bloom's Taxonomy alignment, technical validity, and strict language adherence.\n\n## AUDIT TARGET\n- **Artifact Type:** ${targetArtifactType}\n- **Lesson ID:** ${lessonId}\n- **Expected Output Language:** \"${expectedLanguage}\"\n- **Target Learning Objectives:**\n${targetObjectives.map((lo) => ` - ${lo.code}: ${lo.description} (Bloom: ${lo.bloomLevel})`).join('\\n')}\n\n${standardStatements && Object.keys(standardStatements).length > 0 ? `## STANDARDS GROUND TRUTH (VERBATIM - from Standards Registry)\nThe statements below are COPIED VERBATIM from the official standards this course is bound to:\n${Object.entries(standardStatements).map(([id, text]) => `- [${id}] \"${text}\"`).join(\"\\n\")}\n\nYou MUST audit standards alignment ONLY against the statements above. If the candidate claims alignment with a standard NOT listed here, treat that claim as UNVERIFIABLE and score it down.` : \"\"}\n\n## CANDIDATE CONTENT JSON\n\\`\\`\\`json\n${generatedContentJson}\n\\`\\`\\`\n\n## EVALUATION CRITERIA & SCORING RUBRIC (TOTAL 100 POINTS)\nEvaluate the candidate artifact across these 6 dimensions:\n\n1. **Language Adherence (MANDATORY GATE - 15 pts):**\n - 15 pts: 100% of instructions, explanations, and pedagogy strictly in \"${expectedLanguage}\". Technical keywords and code symbols preserved.\n - 0 pts (FAIL GATE): Language contamination or wrong output language detected.\n\n2. **Bloom & Pedagogical Alignment (25 pts):**\n - 25 pts: Cognitive depth of tasks/questions strictly fulfills the targeted Bloom levels (${targetObjectives.map(o => o.bloomLevel).join(', ')}). No superficial recall masquerading as high-level analysis.\n - 15 pts: Minor misalignment in 1 objective or slight depth variance.\n - 0-10 pts: Severe cognitive mismatch (e.g. asking basic definitions for an Evaluate-level objective).\n\n3. **Standards Alignment (20 pts):**\n - 20 pts: Every learning objective and core activity demonstrably serves the VERBATIM standard statements listed in STANDARDS GROUND TRUTH above; cited statement IDs exist and are used faithfully (statement as destination, not script).\n - 12 pts: All statements covered but 1 shows only partial fidelity (taught implicitly, or the assessment measures adjacent rather than the exact statement behavior).\n - 5 pts: Explicit statement IDs referenced but 1+ IDs do not exist in STANDARDS GROUND TRUTH (hallucinated or stale IDs), or statements ignored while claimed as covered.\n - 0 pts: No standards grounding at all despite STANDARDS GROUND TRUTH being present, or fabricated standard citations.\n ${standardStatements && Object.keys(standardStatements).length > 0 ? '- NOTE: STANDARDS GROUND TRUTH IS PRESENT - this dimension is fully in scope.' : '- NOTE: No STANDARDS GROUND TRUTH provided. Award only for absence of fabricated standard citations; treat 20 pts as N/A and redistribute proportionally.'}\n\n4. **Completeness & Structural Integrity (15 pts):**\n - 15 pts: All required schema fields are fully populated with substantive, age-appropriate content. No empty arrays, stubs, or placeholders.\n - 8 pts: Some fields are thin or lack sufficient pedagogical detail.\n - 0 pts: Missing critical sections.\n\n5. **Technical & Conceptual Accuracy (15 pts):**\n - 15 pts: Code snippets, logic flows, architectural descriptions, and Mermaid diagrams are conceptually sound, valid, and free of syntax hallucinations.\n - 8 pts: Minor syntax inaccuracies or unidiomatic code that does not break core concepts.\n - 0 pts: Severe technical hallucinations, broken logic, or invalid diagrams.\n\n6. **Contract Consistency & Zero-Drift (10 pts):**\n - 10 pts: Satellite artifact strictly adheres to the scope, tech stack, and objectives of Lesson ${lessonId} without introducing unrelated topics.\n - 0-5 pts: Scope drift or topic divergence detected.\n\n## VERDICT RULES\n- **PASS:** Score >= 80 AND Language Adherence = true AND Standards Alignment >= 12 (when STANDARDS GROUND TRUTH is present).\n- **NEEDS_REVISION:** Score between 60 and 79, or minor addressable flaws. Provide concrete, actionable repair prompts.\n- **FAIL:** Score < 60, Language Adherence failed, empty sections, critical technical hallucinations, or hallucinated standard IDs when STANDARDS GROUND TRUTH is present.\n\n## REQUIRED JSON KEYS\nPlease return a single JSON object matching these exact keys:\n- \"targetArtifactType\": \"${targetArtifactType}\"\n- \"lessonId\": \"${lessonId}\"\n- \"overallVerdict\": \"PASS\" | \"NEEDS_REVISION\" | \"FAIL\"\n- \"totalScore\": number (0 to 100)\n- \"languageAdherencePassed\": boolean\n- \"criteria\": array of { \"name\": string, \"passed\": boolean, \"score\": number, \"feedback\": string }\n- \"actionableRepairPrompts\": string[]\n`.trim();\n}\n","import type { MilestoneInput, ProjectGraph } from '../../schemas';\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 { SELF_LAB_TEMPLATE } from '../../templates';\n\nexport interface SelfLabPromptInput {\n milestone: MilestoneInput;\n projectGraph?: ProjectGraph;\n language: string;\n targetTechStack?: string[];\n contextContinuity?: string;\n}\n\nexport function buildSelfLabPrompt(input: SelfLabPromptInput): string {\n const { milestone, projectGraph, language, targetTechStack, contextContinuity } = input;\n const techStackList = (targetTechStack && targetTechStack.length > 0)\n ? targetTechStack\n : (milestone.tech_keywords && milestone.tech_keywords.length > 0)\n ? milestone.tech_keywords\n : ['General Engineering'];\n const learningObjectives = milestone.learning_objectives || [];\n const normalizedDifficulty = (milestone.difficulty || 'intermediate').toLowerCase() as 'beginner' | 'intermediate' | 'advanced';\n\n const loList = learningObjectives\n .map((lo) => `- [${lo.bloom_level || 'understand'}] ${lo.code}: ${lo.name || ''} — ${lo.description || ''}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Software Engineering Mentor & Self-Paced Learning Architect**, dedicated to creating autonomous, inquiry-based labs for independent developers.\n\n# MISSION SCOPE & DESIGN PRINCIPLES\nBuild a complete, engaging Self-Paced Hands-On Lab (SELF_LAB) for autonomous learners.\n\n## CRITICAL PILLARS FOR SELF-LEARNERS:\n1. **Progressive Challenges (3 Tiers):**\n - 🥉 **Bronze:** Foundational implementation, basic syntax correctness, verifying environment setup.\n - 🥈 **Silver:** Core logic, state transformation, and explicit error handling (e.g. timeouts, bad inputs).\n - 🥇 **Gold:** Edge cases, optimizations, performance profiling, or asynchronous resilience.\n2. **Progressive Hints System (3 Tiers per Challenge):**\n - 💡 **Hint Level 1 (Conceptual Clue):** High-level architectural hint or mental model. DO NOT give code yet.\n - 🔍 **Hint Level 2 (Structural Skeleton):** Method signature, structural boilerplate, or function signature with TODOs.\n - 🚨 **Hint Level 3 (Full Solution & Post-Mortem):** Complete verified solution code + a concise explanation of *Why this works best*.\n3. **Automated Self-Verification Commands:**\n - For EACH challenge, provide an executable terminal command or test runner (e.g. \\`curl ... | jq .\\`, \\`swift test --filter ...\\`, \\`pytest -k ...\\`) and the **Exact Expected Output**.\n4. **Actionable Troubleshooting Matrix:**\n - At least 3 realistic runtime errors/gotchas, their exact root causes, and step-by-step fixes.\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${SELF_LAB_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Milestone ID:** ${milestone.id || 'F0-S1'}\n- **Title:** ${milestone.name}\n- **Description:** ${milestone.description}\n- **Tech Stack:** ${techStackList.join(', ')}\n- **Difficulty:** ${normalizedDifficulty}\n- **Language Policy:** Output 100% in **\"${language}\"** (code comments and explanations).\n- **Target Learning Objectives:**\n${loList}\n\n${projectGraph ? `- **Project Graph Context:** ${projectGraph.project.name} (${projectGraph.project.purpose || ''})` : ''}\n${contextContinuity ? `- **Prior Knowledge & Continuity:**\\n${contextContinuity}` : ''}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching SelfLabSchema with these exact keys:\n- \"artifactType\": \"SELF_LAB\"\n- \"labId\": \"${milestone.id || 'F0-S1'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"difficulty\": \"beginner\" | \"intermediate\" | \"advanced\"\n- \"estimatedTotalMinutes\": number (e.g. 60)\n- \"techStack\": string[]\n- \"missionBriefing\": string (Authentic scenario framing what we are building and why)\n- \"preflightChecklist\": string[] (3-5 prerequisite tools/configs)\n- \"challenges\": {\n \"bronze\": {\n \"tier\": \"bronze\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n },\n \"silver\": {\n \"tier\": \"silver\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n },\n \"gold\": {\n \"tier\": \"gold\",\n \"title\": string,\n \"estimatedMinutes\": number,\n \"objective\": string,\n \"tasks\": string[],\n \"verifyCommand\": string,\n \"expectedOutput\": string,\n \"hints\": {\n \"hint1Concept\": string,\n \"hint2Skeleton\": string,\n \"hint3Solution\": { \"code\": string, \"explanation\": string }\n }\n }\n }\n- \"troubleshootingMatrix\": array of { \"symptom\": string, \"rootCause\": string, \"exactFix\": string }\n- \"finalSubmissionChecklist\": string[]\n`.trim();\n}\n","import type { MilestoneInput } from '../../schemas';\nimport { QUIZ_TEMPLATE } from '../../templates';\n\nexport interface DiagnosticQuizPromptInput {\n milestone: MilestoneInput;\n language: string;\n questionCount?: number;\n passingScorePct?: number;\n}\n\nexport function buildDiagnosticQuizPrompt(input: DiagnosticQuizPromptInput): string {\n const { milestone, language, questionCount = 4, passingScorePct = 80 } = input;\n const learningObjectives = milestone.learning_objectives || [];\n\n const loList = learningObjectives\n .map((lo) => `- [${lo.bloom_level || 'understand'}] ${lo.code}: ${lo.name || ''} — ${lo.description || ''}`)\n .join('\\n');\n\n return `\n# ROLE & PERSONA\nYou are the **Lead Psychometrician & Technical Assessment Specialist (@assessor)**, expert in designing diagnostic scenario-based tests with high-quality distractors.\n\n# MISSION SCOPE\nGenerate a 3-5 question Diagnostic & Active Recall Quiz that deeply evaluates conceptual understanding, code tracing, and architectural trade-offs.\n\n## RIGOROUS RULES FOR HIGH-QUALITY QUESTIONS:\n\n### Bloom Taxonomy Cognitive Action Mapping (MANDATORY — DO NOT CONFLATE LEVELS):\nUse this mapping to determine which Bloom level each question truly targets. Match questions to the milestone's target level(s) listed in INPUT PARAMETERS.\n\n| Bloom Level | Cognitive Action | Code Task Examples |\n|---|---|---|\n| **Remember** | Recall syntax, definitions, API names | \"What does \\`async/await\\` do?\" |\n| **Understand** | Explain, interpret, classify, **predict execution of existing code**, trace a known algorithm | \"Given this code block, what does it print?\" / \"Why does this loop terminate?\" |\n| **Apply** | Execute a skill in a **new context**, fix a bug in code you haven't seen before, implement from a spec | \"This API response is malformed — rewrite the parsing logic to handle it\" |\n| **Analyze** | Decompose, compare designs, identify root causes, differentiate competing approaches | \"Compare these two caching strategies for a high-read workload\" |\n| **Evaluate** | Justify architectural decisions, critique trade-offs, argue for a design given constraints | \"Which approach is superior for a mobile-first environment and why?\" |\n\n> ⚠️ **CRITICAL RULE:** \"Predict the output of a code snippet\" = **Understand** level, NOT Apply. \"Trace code step by step\" = **Understand**, NOT Apply. Only count as Apply when the student must USE a concept in a context they have NOT seen in the lesson.\n\n### Question Generation Rules:\n1. **Respect Milestone Bloom Level:** The milestone targets \\`${milestone.bloom_level || 'understand'}\\`. Distribute question cognitive demand to match or exceed this level. Do NOT force all questions to Apply+ if the milestone targets Understand.\n2. **Scenario-Based Stems:** Frame questions around realistic engineering problems (e.g. \"A sensor network experiences packet loss...\", \"The UI thread freezes when...\").\n3. **Code-Based Questions:** Include a concise code snippet in at least 2 questions. Tag each with the correct Bloom level using the table above:\n - If students **trace or predict** → tag as \\`\"understand\"\\`\n - If students **debug in a new scenario** → tag as \\`\"apply\"\\`\n - If students **compare architectures** → tag as \\`\"analyze\"\\`\n4. **Plausible Distractors (Cognitive Traps):** Every incorrect option (distractor) MUST represent a common student misconception, subtle edge case, or logical fallacy (e.g. inverted pin modes, millisecond vs second units, blocking delay, forgetting current-limiting resistor, missing pullup).\n - ⛔ PROHIBITED LAZY DISTRACTORS: NEVER use \"All of the above\", \"None of the above\", \"Cả 3 đều đúng\", \"Không có đáp án nào\", or throwaway non-options.\n5. **Comprehensive Explanations:** For EVERY option (A, B, C, D), explain *Why it is right* or *Why it is a trap*.\n\n### FEW-SHOT GOLD EXEMPLARS:\n\n#### Example 1: Understand Level (Code Tracing / Output Prediction)\n- **Stem:** \"Given the following loop with a delay in Arduino C++, what is the exact duration of one complete blink cycle?\"\n- **Code:** \\`digitalWrite(13, HIGH); delay(200); digitalWrite(13, LOW); delay(800);\\`\n- **Options:**\n - A (Correct): \"1000ms (1.0 second) because the total period equals the ON time (200ms) plus the OFF time (800ms).\"\n - B (Trap): \"200ms because only the HIGH state duration is counted as the cycle period.\"\n - C (Trap): \"800ms because the longer delay overrides the shorter delay in the execution queue.\"\n - D (Trap): \"600ms due to subtracting the ON duration from the OFF duration.\"\n\n#### Example 2: Apply Level (Debugging Logic Bug in Novel Scenario)\n- **Stem:** \"A student connects an LED to digital pin 12. In setup(), they wrote \\`pinMode(13, OUTPUT);\\`. In loop(), they call \\`digitalWrite(12, HIGH);\\`. What physical symptom occurs and what is the exact root cause?\"\n- **Options:**\n - A (Correct): \"The LED on pin 12 remains very dim or off because pin 12 was left in default high-impedance INPUT mode.\"\n - B (Trap): \"The microcontroller immediately overheats and triggers an overcurrent reset.\"\n - C (Trap): \"The Arduino IDE compiler rejects the sketch with a 'Pin Mismatch Error'.\"\n - D (Trap): \"The LED on pin 13 blinks instead because digitalWrite redirects to the configured pin.\"\n\n# MANDATORY TEMPLATE STRUCTURE\nYou MUST generate data aligned with this Markdown template:\n---\n${QUIZ_TEMPLATE}\n---\n\n# INPUT PARAMETERS\n- **Milestone ID:** ${milestone.id || 'F0-S1'}\n- **Milestone Name:** ${milestone.name}\n- **Description:** ${milestone.description}\n- **Number of Questions:** ${questionCount}\n- **Passing Score (%):** ${passingScorePct}%\n- **Language Policy:** Output 100% in **\"${language}\"**.\n- **Learning Objectives to Assess:**\n${loList}\n\n# REQUIRED JSON KEYS\nReturn a single valid JSON object matching DiagnosticQuizSchema with these exact keys:\n- \"artifactType\": \"QUIZ\"\n- \"quizId\": \"${milestone.id || 'F0-S1'}\"\n- \"title\": string (in \"${language}\")\n- \"language\": \"${language}\"\n- \"passingScorePct\": ${passingScorePct}\n- \"questions\": array of {\n \"id\": string (e.g. \"Q1\", \"Q2\"),\n \"bloomLevel\": \"understand\" | \"apply\" | \"analyze\" | \"evaluate\",\n \"scenarioOrStem\": string,\n \"codeSnippet\": string (optional, concise code snippet),\n \"codeLanguage\": string (e.g. \"swift\", \"python\", \"typescript\"),\n \"options\": array of {\n \"id\": \"A\" | \"B\" | \"C\" | \"D\",\n \"text\": string,\n \"isCorrect\": boolean (exactly one option true per question),\n \"explanation\": string (detailed breakdown why this option is correct or a pitfall)\n },\n \"takeawayMessage\": string (key takeaway)\n }\n`.trim();\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { LessonPlanSchema, type LessonPlan, type MilestoneInput } from '../../schemas';\nimport { buildLessonMasterPrompt, type LessonPromptInput } from '../prompts';\n\nexport interface GenerateLessonMasterInput extends Omit<LessonPromptInput, 'milestone'> {\n milestone: MilestoneInput;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateLessonMasterFlow(input: GenerateLessonMasterInput): Promise<LessonPlan> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildLessonMasterPrompt({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: input.contextContinuity,\n standardsContext: input.standardsContext,\n });\n\n const { object } = await generateObject({\n model,\n schema: LessonPlanSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { ActivityLabSchema, type ActivityLab, type LessonPlan } from '../../schemas';\nimport { buildActivityPrompt, type ActivityPromptInput } from '../prompts';\n\nexport interface GenerateActivityInput extends Omit<ActivityPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateActivityFlow(input: GenerateActivityInput): Promise<ActivityLab> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildActivityPrompt({\n lesson: input.lesson,\n language: input.language,\n hardwareBOM: input.hardwareBOM,\n softwareTools: input.softwareTools,\n });\n\n const { object } = await generateObject({\n model,\n schema: ActivityLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { CodeLabSchema, type CodeLab, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildCodeLabPrompt, type CodeLabPromptInput } from '../prompts';\n\nexport interface GenerateCodeLabInput extends Omit<CodeLabPromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateCodeLabFlow(input: GenerateCodeLabInput): Promise<CodeLab> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildCodeLabPrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n targetTechStack: input.targetTechStack,\n });\n\n const { object } = await generateObject({\n model,\n schema: CodeLabSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { WorksheetSchema, type Worksheet, type LessonPlan } from '../../schemas';\nimport { buildWorksheetPrompt, type WorksheetPromptInput } from '../prompts';\n\nexport interface GenerateWorksheetInput extends Omit<WorksheetPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateWorksheetFlow(input: GenerateWorksheetInput): Promise<Worksheet> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildWorksheetPrompt({\n lesson: input.lesson,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: WorksheetSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { HandoutSchema, type Handout, type LessonPlan } from '../../schemas';\nimport { buildHandoutPrompt, type HandoutPromptInput } from '../prompts';\n\nexport interface GenerateHandoutInput extends Omit<HandoutPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateHandoutFlow(input: GenerateHandoutInput): Promise<Handout> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildHandoutPrompt({\n lesson: input.lesson,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: HandoutSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { SlideDeckSchema, type SlideDeck, type LessonPlan } from '../../schemas';\nimport { buildSlidesPrompt, type SlidesPromptInput } from '../prompts';\n\nexport interface GenerateSlidesInput extends Omit<SlidesPromptInput, 'lesson'> {\n lesson: LessonPlan;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateSlidesFlow(input: GenerateSlidesInput): Promise<SlideDeck> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildSlidesPrompt({\n lesson: input.lesson,\n language: input.language,\n marpTheme: input.marpTheme,\n });\n\n const { object } = await generateObject({\n model,\n schema: SlideDeckSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { TeacherGuideSchema, type TeacherGuide, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildTeacherGuidePrompt, type TeacherGuidePromptInput } from '../prompts';\n\nexport interface GenerateTeacherGuideInput extends Omit<TeacherGuidePromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateTeacherGuideFlow(input: GenerateTeacherGuideInput): Promise<TeacherGuide> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildTeacherGuidePrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: TeacherGuideSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { ExtensionSchema, type Extension, type LessonPlan, type ActivityLab } from '../../schemas';\nimport { buildExtensionPrompt, type ExtensionPromptInput } from '../prompts';\n\nexport interface GenerateExtensionInput extends Omit<ExtensionPromptInput, 'lesson'> {\n lesson: LessonPlan;\n activity?: ActivityLab;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateExtensionFlow(input: GenerateExtensionInput): Promise<Extension> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildExtensionPrompt({\n lesson: input.lesson,\n activity: input.activity,\n language: input.language,\n });\n\n const { object } = await generateObject({\n model,\n schema: ExtensionSchema,\n prompt,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { CurriculumQualityReportSchema, type CurriculumQualityReport } from '../../schemas';\nimport { buildJudgePrompt, type JudgePromptInput } from '../prompts';\n\nexport interface AuditCurriculumQualityInput extends JudgePromptInput {\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function auditCurriculumQualityFlow(input: AuditCurriculumQualityInput): Promise<CurriculumQualityReport> {\n const model = getAIModel(input.modelOptions);\n const prompt = buildJudgePrompt({\n targetArtifactType: input.targetArtifactType,\n lessonId: input.lessonId,\n expectedLanguage: input.expectedLanguage,\n targetObjectives: input.targetObjectives,\n generatedContentJson: input.generatedContentJson,\n standardStatements: input.standardStatements,\n });\n\n const { object } = await generateObject({\n model,\n schema: CurriculumQualityReportSchema,\n prompt: `${prompt}\\n\\nRespond with a valid JSON object matching the schema.`,\n });\n\n return object;\n}\n","import { generateObject } from 'ai';\nimport { getAIModel, type ModelResolutionOptions } from '../provider-factory';\nimport { 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","export * from './provider-factory';\nexport * from './prompts';\nexport * from './flows';\nexport * from './streamRunner';\nexport * from './tools/specialistTools';\nexport * from './modelPolicyResolver';\nexport * from './llmJudgeEngine';export * from './toolLoopTypes';\nexport * from './chatToolLoop';\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 (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',\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 streamCurriculumAIInference,\n type ChatMessage,\n type StreamRunnerOptions,\n type ChunkType,\n} from './streamRunner';\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';\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 * Chạy trên OpenRouter (mọi model OpenAI-compatible). Tool error KHÔNG làm chết stream:\n * lỗi được đóng gói gửi lại model để tự xử lý (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 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}","import type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n Worksheet,\n Handout,\n SlideDeck,\n TeacherGuide,\n Extension,\n ProjectInstruction,\n} from '../schemas';\n\n/**\n * Serializes a LessonPlan object into canonical LESSON.md (5E Model & Deep Technical Standards)\n */\nexport function serializeLessonToMarkdown(lesson: LessonPlan): string {\n const learningObjectivesStr = lesson.learningObjectives\n .map((lo) => ` - **[${lo.bloomLevel}] \\`${lo.code}\\`**: ${lo.name ? `${lo.name} — ` : ''}${lo.description}${lo.successCriteria ? ` (Indicator: ${lo.successCriteria})` : ''}`)\n .join('\\n');\n\n const coreConceptsStr = (lesson.coreConcepts && lesson.coreConcepts.length > 0)\n ? lesson.coreConcepts\n .map((cc, i) => {\n let str = `### Concept ${i + 1}: ${cc.name}\\n${cc.technicalDepth}`;\n if (cc.analogy) {\n str += `\\n\\n- **Real-World Analogy (Ẩn dụ thực tế):** ${cc.analogy}`;\n }\n if (cc.formulaOrRule) {\n str += `\\n\\n- **Mathematical / Statistical Principle:**\\n ${cc.formulaOrRule}`;\n }\n if (cc.comparisonTable && cc.comparisonTable.headers.length > 0) {\n const headerRow = `| ${cc.comparisonTable.headers.join(' | ')} |`;\n const dividerRow = `| ${cc.comparisonTable.headers.map(() => ':---').join(' | ')} |`;\n const dataRows = cc.comparisonTable.rows.map((r) => `| ${r.join(' | ')} |`).join('\\n');\n str += `\\n\\n#### Comparison & Trade-off Analysis\\n${headerRow}\\n${dividerRow}\\n${dataRows}`;\n }\n return str;\n })\n .join('\\n\\n---\\n\\n')\n : (lesson.sections || [])\n .map((sec, i) => `### Concept ${i + 1}: ${sec.title}\\n* **Teacher Explains:** ${sec.teacherActions}\\n* **Student Observes:** ${sec.studentActions}${sec.analogies.length > 0 ? `\\n* **Analogy:** ${sec.analogies.join('; ')}` : ''}`)\n .join('\\n\\n---\\n\\n');\n\n const guidedPractice = lesson.guidedPractice || {\n title: 'Guided Practice',\n explanation: 'Interactive implementation step.',\n codeSnippet: '# Verified reference code',\n codeLanguage: 'python',\n mermaidDiagram: '',\n };\n\n const mermaidBlock = guidedPractice.mermaidDiagram\n ? `\\`\\`\\`mermaid\\n${guidedPractice.mermaidDiagram.trim()}\\n\\`\\`\\``\n : '';\n\n const troubleshootingRows = (lesson.teacherNotes?.troubleshootingMatrix && lesson.teacherNotes.troubleshootingMatrix.length > 0)\n ? lesson.teacherNotes.troubleshootingMatrix.map((r) => `| ${r.issue} | ${r.potentialCause} | ${r.solution} |`).join('\\n')\n : '| Runtime Timeout / Disconnect | Hardware power fluctuation or wrong IP | Check network broadcast and verify 5V power stability |';\n\n const commonPitfallsStr = (lesson.teacherNotes?.commonPitfalls && lesson.teacherNotes.commonPitfalls.length > 0)\n ? lesson.teacherNotes.commonPitfalls.map((p) => `- ${p}`).join('\\n')\n : '- Forgetting exception handling when payload format changes.';\n\n const effectiveCodeLang = guidedPractice.codeLanguage || (lesson.topic?.toLowerCase().includes('swift') ? 'swift' : 'typescript');\n\n return `<!-- [SME_MANDATE] -->\n<!-- \n Lesson ID: ${lesson.lessonId}\n Title: ${lesson.title}\n Topic: ${lesson.topic}\n Language: ${lesson.language}\n-->\n\n# ${lesson.lessonId}: ${lesson.title}\n\n---\n\n## 0. Overview\n- **Duration:** 90 minutes\n- **Target Audience:** ${lesson.targetGradeOrAudience || 'Learners'}\n- **Learning Objectives (Bloom's Taxonomy):**\n${learningObjectivesStr}\n- **Prerequisites & Continuity:** ${lesson.prerequisites || 'Basic understanding of foundational programming and protocols.'}\n- **Materials & Tools Required:** ${lesson.materialsSummary || 'Developer workstation with terminal and code editor.'}\n- **Core Vocabulary & Keywords:** ${lesson.keywords?.join(', ') || 'N/A'}\n\n---\n\n## 1. ENGAGE (Hook & High-Stakes Scenario) — 10-15 mins\n\n### Real-World Context: \"${lesson.hookTitle || 'The Incident'}\"\n${lesson.hookScenario}\n\n${lesson.hookQuestions && lesson.hookQuestions.length > 0 ? lesson.hookQuestions.map((q, idx) => `- **Inquiry Question ${idx + 1}:** ${q}`).join('\\n') : '- **Inquiry Question 1:** How can our system distinguish between legitimate telemetry and corrupted signals?'}\n\n---\n\n## 2. EXPLORE & EXPLAIN (Core Technical Concepts & Principles) — 30-40 mins\n\n${coreConceptsStr}\n\n---\n\n## 3. GUIDED PRACTICE (Visual Architecture & Annotated Code) — 20-25 mins\n\n### System Architecture & Data Flow (Mermaid Diagram)\n${mermaidBlock}\n\n### Verified Reference Code with Line-by-Line Annotations\n<!-- [SME_MANDATE] -->\n\\`\\`\\`${effectiveCodeLang}\n${guidedPractice.codeSnippet}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n---\n\n## 4. ELABORATE & INDEPENDENT PRACTICE (Technical Challenge & Scaffolding) — 15-20 mins\n\n### Engineering Challenge: \"${lesson.independentPractice?.title || 'System Optimization Challenge'}\"\n${lesson.independentPractice?.description || 'Implement the core logic and test against simulated edge cases.'}\n\n- 🥉 **Bronze (Foundational):** ${lesson.differentiation.bronzeTier || 'Implement the core happy path and run verified test.'}\n- 🥈 **Silver (Application):** ${lesson.differentiation.silverTier || 'Add conditional validation and error handling for malformed inputs.'}\n- 🥇 **Gold (Enrichment / Creative):** ${lesson.differentiation.goldTier || 'Extend with automated retries, metrics logging, or external notification hooks.'}\n\n---\n\n## 5. EVALUATE (Summary, Assessment & Metacognition) — 5-10 mins\n\n### Exit Ticket (Bloom: Apply / Analyze)\n> **Scenario Question:** ${lesson.exitTicket.questionStem} \n> **Expected Response / Rubric:** ${lesson.exitTicket.expectedAnswerOrRubric} \n> **Metacognitive Reflection Prompt:** ${lesson.exitTicket.metacognitivePrompt}\n\n---\n\n## 6. Teacher Notes & Troubleshooting Matrix\n- **Common Pitfalls (What Learners Commonly Misunderstand):**\n${commonPitfallsStr}\n\n- **Troubleshooting & Debugging Matrix:**\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n- **Extension Challenges for Advanced Learners:** ${lesson.teacherNotes?.extensionNotes || 'Explore asynchronous concurrency and resilience patterns.'}\n`.trim();\n}\n\n/**\n * Serializes an ActivityLab object into canonical ACT.md (Inquiry-Based & Computational Thinking)\n */\nexport function serializeActivityToMarkdown(act: ActivityLab): string {\n const hardwareItems = act.materialsBOM.hardware.length > 0\n ? act.materialsBOM.hardware.map((h) => `- ${h}`).join('\\n')\n : '- 1 x Standard developer workstation / simulation board';\n\n const ct = act.computationalThinking || {\n problemStatement: act.objective,\n decomposition: [\n '1. Parse incoming parameters and validate input state.',\n '2. Execute core transformation / hardware communication.',\n '3. Verify response telemetry and handle exceptions.',\n ],\n algorithmDesign: 'Structured data flow ensuring state consistency before and after execution.',\n };\n\n const workflow = act.activeLearningWorkflow;\n const phase1 = workflow?.phase1Planning || {\n durationMinutes: 15,\n studentTask: 'Hand-draw the data flow diagram or state machine on paper before writing code.',\n teacherAction: 'Inspect student flowcharts and ask: \"What happens if network latency spikes?\"',\n inquiryQuestions: ['Where is the primary point of failure?', 'How will the system notify the user upon error?'],\n };\n\n const phase2 = workflow?.phase2Implementation || {\n durationMinutes: 40,\n studentTask: 'Implement the logic step by step using the reference specifications.',\n teacherAction: 'Observe student progress and intervene only when a team is stuck for > 5 mins.',\n codeOrCommands: act.steps.map((s) => `# Step ${s.stepNumber}: ${s.title}\\n${s.studentInstructions}`),\n };\n\n const phase3 = workflow?.phase3Debugging || {\n durationMinutes: 15,\n testingSteps: 'Run test suite or live verification commands to confirm expected output.',\n errorAnalysis: 'Compare error logs against the troubleshooting table to isolate hardware vs software faults.',\n };\n\n const diff3Tier = act.differentiation3Tier || {\n bronzeTier: act.scaffoldingSupport || 'Complete basic verified setup and run happy path test.',\n silverTier: 'Implement validation checks and handle error recovery gracefully.',\n goldTier: act.levelUpExtension || 'Extend with automated regression tests or asynchronous event streaming.',\n };\n\n return `---\nid: \"${act.lessonId}\"\ntitle: \"${act.title}\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n<!-- INJECT_BODY -->\n\n# INQUIRY-BASED ACTIVITY: ${act.title}\n_Lesson: ${act.lessonId} | Estimated Duration: ${act.totalDurationMinutes} mins_\n\n## [REQUIRED] Computational Thinking Focus\n- **Problem Statement (Real-world Scenario):** ${ct.problemStatement}\n- **Decomposition (Sub-problems Breakdown):**\n${ct.decomposition.map((d) => ` ${d}`).join('\\n')}\n- **Algorithm Design (Data Flow & Logic Architecture):** ${ct.algorithmDesign}\n\n## [REQUIRED] Materials & Setup\n- **Reference Material:** Students should use the **HANDOUT** and Technical Reference as their primary technical lifeline.\n- **Hardware/Software:**\n<!-- [HARDWARE_BOM] -->\n${hardwareItems}\n<!-- [/HARDWARE_BOM] -->\n- **Software:** ${act.materialsBOM.software.join(', ') || 'IDE and Terminal'}\n- **Consumables:** ${act.materialsBOM.consumables.join(', ') || 'None'}\n- **Other Resources:** ${act.materialsBOM.otherResources.join(', ') || 'Handout cheat sheet'}\n\n## [REQUIRED] Constraints & Safety\n- ⚠️ **Technical/Safety:** ${act.safetyWarnings.join('; ') || 'Do not expose unencrypted secrets or exceed hardware electrical ratings.'}\n- 💡 **Design Constraint:** ${act.designConstraints?.join('; ') || 'All operations must be idempotent and non-blocking.'}\n\n## [REQUIRED] Active Learning Workflow\n\n### Phase 1: Planning & Design — ${phase1.durationMinutes} mins\n- **Student Task:** ${phase1.studentTask}\n- **Teacher Action:** ${phase1.teacherAction}\n${phase1.inquiryQuestions.map((q) => ` - *Inquiry Question:* ${q}`).join('\\n')}\n\n### Phase 2: Implementation & Discovery — ${phase2.durationMinutes} mins\n- **Student Task:** ${phase2.studentTask}\n- **Teacher Action:** ${phase2.teacherAction}\n\n${phase2.codeOrCommands.map((c) => `\\`\\`\\`text\\n${c}\\n\\`\\`\\``).join('\\n\\n')}\n\n### Phase 3: Debugging & Testing — ${phase3.durationMinutes} mins\n- **Testing:** ${phase3.testingSteps}\n- **Error Analysis:** ${phase3.errorAnalysis}\n\n## [REQUIRED] 3-Tier Differentiation\n- 🥉 **Bronze (Foundational):** ${diff3Tier.bronzeTier}\n- 🥈 **Silver (Application):** ${diff3Tier.silverTier}\n- 🥇 **Gold (Enrichment/Creative):** ${diff3Tier.goldTier}\n\n## [REQUIRED] Reflection & Discussion\n- **Discussion Question:** ${act.reflectionQuestion || 'Why is this architectural design superior to a monolithic direct call? Where is the performance bottleneck?'}\n`.trim();\n}\n\n/**\n * Serializes CodeLab object into canonical LAB.md (LAB_TEMPLATE standard)\n */\nexport function serializeCodeLabToMarkdown(codeLab: CodeLab): string {\n const env = codeLab.environmentSetup || {\n languageFramework: codeLab.techStack.join(', '),\n ideEditor: 'VS Code / Xcode / IDE of choice',\n requiredLibraries: codeLab.techStack,\n hardwareOrEnvConnection: 'Localhost / Embedded connection',\n };\n\n const tasks = codeLab.threeTierTasks || {\n bronze: { mins: 15, objective: 'Basic Setup & Syntax', task: 'Implement starter code skeleton', requirement: 'Clean compilation without errors' },\n silver: { mins: 25, objective: 'Core Logic Implementation', task: 'Implement full data processing logic', requirement: 'All standard test cases pass' },\n gold: { mins: 20, objective: 'Edge Cases & Optimization', task: 'Handle network failures and performance tuning', requirement: 'Resilience under edge-case injection' },\n };\n\n const troubleshootingRows = (codeLab.troubleshootingMatrix && codeLab.troubleshootingMatrix.length > 0)\n ? codeLab.troubleshootingMatrix.map((r) => `| ${r.issue} | ${r.potentialCause} | ${r.solution} |`).join('\\n')\n : (codeLab.commonBugsAndFixes && codeLab.commonBugsAndFixes.length > 0)\n ? codeLab.commonBugsAndFixes.map((b) => `| ${b.bugDescription} | Logical error or misconfiguration | ${b.solutionHint} |`).join('\\n')\n : '| Connection Timeout | Network interface down or bad endpoint | Check IP address and retry with timeout wrapper |';\n\n const checklistStr = (codeLab.submissionChecklist && codeLab.submissionChecklist.length > 0)\n ? codeLab.submissionChecklist.map((c) => `- [ ] ${c}`).join('\\n')\n : `- [ ] Starter code compiles and runs without crashes.\\n- [ ] Solution code passes all automated test cases.\\n- [ ] Code comments explain the reasoning behind key algorithms.`;\n\n return `---\nid: \"${codeLab.lessonId}\"\ntitle: \"${codeLab.title}\"\ntype: \"LAB\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n<!-- INJECT_BODY -->\n\n# 👨‍💻 CODE LAB: ${codeLab.title}\n_Lesson: ${codeLab.lessonId} | Tech Stack: ${codeLab.techStack.join(', ')}_\n\n## 🎯 Overview\nThis lab focuses on the practical implementation of core technical concepts, bridging theory into working, robust, and testable code.\n\n## 🛠️ Environment & Setup\n- **Language / Framework:** ${env.languageFramework}\n- **IDE / Editor:** ${env.ideEditor}\n- **Required Libraries:** ${env.requiredLibraries.join(', ')}\n- **Hardware / Connection Setup:** ${env.hardwareOrEnvConnection || 'Local dev environment'}\n\n## 📝 Lab Tasks (3-Tier Differentiation)\n\n### 🥉 Bronze (Foundational) — ${tasks.bronze.mins} mins\n**Objective:** ${tasks.bronze.objective}\n- **Task:** ${tasks.bronze.task}\n- **Requirement:** ${tasks.bronze.requirement}\n\n### 🥈 Silver (Application) — ${tasks.silver.mins} mins\n**Objective:** ${tasks.silver.objective}\n- **Task:** ${tasks.silver.task}\n- **Requirement:** ${tasks.silver.requirement}\n\n### 🥇 Gold (Enrichment/Creative) — ${tasks.gold.mins} mins\n**Objective:** ${tasks.gold.objective}\n- **Task:** ${tasks.gold.task}\n- **Requirement:** ${tasks.gold.requirement}\n\n## 💻 Technical Reference ([SME_MANDATE])\n<!-- [SME_MANDATE] -->\n> Any code provided in this section is verified for syntax accuracy and runtime execution.\n\n### Starter Code Template (\\`${codeLab.starterCode.filename}\\`)\n\\`\\`\\`${codeLab.starterCode.language}\n${codeLab.starterCode.content}\n\\`\\`\\`\n\n### Solution Code (\\`${codeLab.solutionCode.filename}\\`)\n\\`\\`\\`${codeLab.solutionCode.language}\n${codeLab.solutionCode.content}\n\\`\\`\\`\n<!-- [/SME_MANDATE] -->\n\n## 🔍 Troubleshooting & Debugging Matrix\n| Issue | Potential Cause | Solution |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n## 🏁 Submission & Verification Checklist\n${checklistStr}\n`.trim();\n}\n\n/**\n * Serializes Handout to HANDOUT.md (5-Second Rule Cheat Sheet standard)\n */\nexport function serializeHandoutToMarkdown(handout: Handout): string {\n const conceptsStr = (handout.coreConceptsSummary && handout.coreConceptsSummary.length > 0)\n ? handout.coreConceptsSummary.map((c) => `- **${c.concept}:** ${c.definition}`).join('\\n')\n : (handout.sections || []).map((s) => `### ${s.heading}\\n${s.summaryPoints.map((p) => `- ${p}`).join('\\n')}`).join('\\n\\n');\n\n const syntaxTableRows = (handout.syntaxTable && handout.syntaxTable.length > 0)\n ? handout.syntaxTable.map((r) => `| \\`${r.syntax}\\` | ${r.meaning} | \\`${r.example}\\` |`).join('\\n')\n : '| `execute()` | Main trigger function | `const res = await service.execute()` |';\n\n const procedure = handout.problemSolvingProcedure || {\n step1Trigger: 'Identify input parameters, sensor triggers, or user events.',\n step2Logic: 'Transform data, apply business logic, and handle potential errors.',\n step3Output: 'Update system state, persist results, or transmit telemetry.',\n };\n\n const proTipsStr = (handout.proTips && handout.proTips.length > 0)\n ? handout.proTips.map((t) => `> 💡 **Pro-Tip:** ${t}`).join('\\n')\n : '> 💡 **Pro-Tip:** Always validate inputs at the system boundary before executing heavy processing.';\n\n return `---\nid: \"${handout.lessonId}\"\ntitle: \"${handout.title}\"\ntype: \"HANDOUT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T6\"\nversion: \"1.0.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n\n# STUDENT HANDOUT: ${handout.title}\n**Quick-Reference Cheat Sheet & Concept Summary**\n\n> **For Students:** This document summarizes the core concepts and the most important syntax following the **5-Second Rule** (instant look-up). Use it as a quick reference during your lab tasks or projects.\n\n## 📖 1. Core Concepts\n${conceptsStr}\n\n## ⚡ 2. Common Syntax & Configurations\n| Syntax / Config | Meaning & Function | Example / Snippet |\n| :--- | :--- | :--- |\n${syntaxTableRows}\n\n## 🚀 3. General Problem-Solving Procedure\n*Three general thinking steps when tackling problems in this domain:*\n1. **Step 1 (Input/Trigger):** ${procedure.step1Trigger}\n2. **Step 2 (Logic/Transform):** ${procedure.step2Logic}\n3. **Step 3 (Output/Verify):** ${procedure.step3Output}\n\n---\n\n### 💡 Pro-tips\n${proTipsStr}\n`.trim();\n}\n\n/**\n * Serializes ProjectInstruction to Instructable-style INSTRUCTION.md\n */\nexport function serializeProjectInstructionToMarkdown(instruction: ProjectInstruction): string {\n return `---\nid: \"${instruction.instructionId}\"\ntitle: \"${instruction.title}\"\ntype: \"INSTRUCTION\"\nlanguage: \"${instruction.language}\"\ndifficulty: \"${instruction.difficulty}\"\nestimated_minutes: ${instruction.estimatedTotalMinutes}\ntech_stack: [${instruction.techStack.map((t) => `\"${t}\"`).join(', ')}]\n---\n\n# 🛠️ ${instruction.title}\n\n> ⏱️ **Estimated Duration:** ~${instruction.estimatedTotalMinutes} mins \n> 🎯 **Difficulty:** ${instruction.difficulty.toUpperCase()} \n> 🧰 **Tech Stack:** ${instruction.techStack.join(', ')}\n\n---\n\n## 📋 Prerequisites & Tools\n* **Prerequisites:** ${instruction.prerequisites.join('; ') || 'Basic programming knowledge'}\n* **Materials & Tools:** ${instruction.materialsAndTools.join('; ') || 'Standard developer environment'}\n\n---\n\n${instruction.sections\n .map(\n (sec) => `## Section ${sec.sectionNumber}: ${sec.title}\n> 🎯 **Goal:** ${sec.goal} (~${sec.estimatedMinutes || 15} mins)\n\n${sec.preflightChecks.length > 0 ? `### 🛫 Preflight Checks\\n${sec.preflightChecks.map((p) => `- [ ] ${p}`).join('\\n')}\\n` : ''}\n${sec.steps\n .map(\n (step) => `### Step ${step.stepNumber}: ${step.actionTitle}\n\n${step.explanation}\n\n${step.targetFile ? `📁 **File:** \\`${step.targetFile}\\`` : ''}\n\n${step.codeSnippet ? `\\`\\`\\`${step.codeLanguage || 'text'}\\n# ${step.targetFile || 'Implementation'}\\n${step.codeSnippet}\\n\\`\\`\\`` : ''}\n\n${step.tip ? `> [!TIP]\\n> ${step.tip}` : ''}\n${step.warning ? `> [!WARNING]\\n> ${step.warning}` : ''}\n\n**Expected result:** ${step.expectedResult}\n\n${step.imagePlaceholder ? `[IMAGE: ${step.imagePlaceholder}]` : ''}`\n )\n .join('\\n\\n')}\n\n${sec.rollbackOrCleanup ? `> 🔄 **Rollback / Reset:** ${sec.rollbackOrCleanup}` : ''}`\n )\n .join('\\n\\n---\\n\\n')}\n\n---\n\n## 🏁 Verification Checklist\n${instruction.verificationChecklist.map((c) => `- [ ] ${c}`).join('\\n')}\n`.trim();\n}\n","import type { SelfLab, DiagnosticQuiz } from '../schemas';\n\n/**\n * Serializes SelfLab object into canonical SELF_LAB.md with Progressive Hints (Accordion / Spoilers)\n */\nexport function serializeSelfLabToMarkdown(lab: SelfLab): string {\n const renderChallenge = (c: SelfLab['challenges']['bronze'], label: string) => {\n const tasksList = c.tasks.map((t) => `- ${t}`).join('\\n');\n return `### ${label}: ${c.title} — ~${c.estimatedMinutes} mins\n**Objective:** ${c.objective}\n\n#### Tasks & Implementation Details:\n${tasksList}\n\n#### 🧪 Self-Verification Command:\n\\`\\`\\`bash\n${c.verifyCommand}\n\\`\\`\\`\n*Expected Terminal Output:*\n\\`\\`\\`text\n${c.expectedOutput}\n\\`\\`\\`\n\n#### 💡 Progressive Hints (Expand only if stuck):\n<details>\n<summary><b>💡 Hint Level 1: Conceptual Clue (Hướng tư duy)</b></summary>\n\n${c.hints.hint1Concept}\n</details>\n\n<details>\n<summary><b>🔍 Hint Level 2: Structural Skeleton (Khung code mẫu)</b></summary>\n\n\\`\\`\\`${lab.techStack[0]?.toLowerCase() || 'swift'}\n${c.hints.hint2Skeleton}\n\\`\\`\\`\n</details>\n\n<details>\n<summary><b>🚨 Hint Level 3: Full Solution & Explanation (Lời giải trọn vẹn)</b></summary>\n\n\\`\\`\\`${lab.techStack[0]?.toLowerCase() || 'swift'}\n${c.hints.hint3Solution.code}\n\\`\\`\\`\n\n**Why this solution works:**\n${c.hints.hint3Solution.explanation}\n</details>`;\n };\n\n const troubleshootingRows = (lab.troubleshootingMatrix && lab.troubleshootingMatrix.length > 0)\n ? lab.troubleshootingMatrix.map((r) => `| ${r.symptom} | ${r.rootCause} | ${r.exactFix} |`).join('\\n')\n : '| Network Timeout | Device IP unreachable or firewall blocking port | Verify device is on same subnet and ping IP |';\n\n const preflightList = (lab.preflightChecklist && lab.preflightChecklist.length > 0)\n ? lab.preflightChecklist.map((p) => `- [ ] ${p}`).join('\\n')\n : '- [ ] Development environment configured\\n- [ ] Code editor ready';\n\n const finalChecklist = (lab.finalSubmissionChecklist && lab.finalSubmissionChecklist.length > 0)\n ? lab.finalSubmissionChecklist.map((c) => `- [ ] ${c}`).join('\\n')\n : '- [ ] All verification commands pass with expected outputs\\n- [ ] Code is formatted and clean';\n\n return `---\nid: \"${lab.labId}\"\ntitle: \"${lab.title}\"\ntype: \"SELF_LAB\"\nlanguage: \"${lab.language}\"\ndifficulty: \"${lab.difficulty}\"\nestimated_minutes: ${lab.estimatedTotalMinutes}\ntech_stack: [${lab.techStack.map((t) => `\"${t}\"`).join(', ')}]\n---\n\n# 🚀 Self-Paced Hands-On Lab: ${lab.title}\n\n> ⏱️ **Estimated Duration:** ~${lab.estimatedTotalMinutes} mins \n> 🎯 **Difficulty Level:** ${lab.difficulty.toUpperCase()} \n> 🧰 **Tech Stack:** ${lab.techStack.join(', ')} \n> 💡 **Self-Learner Notice:** You are in full control of this lab. Follow the progressive challenges below. If you get stuck at any point, use the **Progressive Hints System** to get unstuck without ruining the learning experience!\n\n---\n\n## 📋 Mission Briefing & Environment Setup\n${lab.missionBriefing}\n\n### 🛫 Preflight Checklist\n${preflightList}\n\n---\n\n## 🎯 Progressive Challenges (3-Tier Differentiation)\n\n${renderChallenge(lab.challenges.bronze, '🥉 Challenge 1: Foundational Core (Bronze)')}\n\n---\n\n${renderChallenge(lab.challenges.silver, '🥈 Challenge 2: Logic & Error Handling (Silver)')}\n\n---\n\n${renderChallenge(lab.challenges.gold, '🥇 Challenge 3: Edge Cases & Optimization (Gold)')}\n\n---\n\n## 🔍 Self-Learner Troubleshooting Matrix\n| Symptom / Error Message | Root Cause | Exact Fix |\n| :--- | :--- | :--- |\n${troubleshootingRows}\n\n---\n\n## 🏁 Final Lab Submission & Mastery Checklist\n${finalChecklist}\n`.trim();\n}\n\n/**\n * Serializes DiagnosticQuiz object into canonical QUIZ.md\n */\nexport function serializeDiagnosticQuizToMarkdown(quiz: DiagnosticQuiz): string {\n const questionsSection = quiz.questions\n .map((q, qIdx) => {\n let qStr = `### Question ${qIdx + 1} (${q.id}) [Bloom: ${q.bloomLevel.toUpperCase()}]\\n${q.scenarioOrStem}`;\n if (q.codeSnippet) {\n qStr += `\\n\\n\\`\\`\\`${q.codeLanguage || 'text'}\\n${q.codeSnippet}\\n\\`\\`\\``;\n }\n qStr += '\\n\\n' + q.options.map((opt) => `- **${opt.id}.** ${opt.text}`).join('\\n');\n return qStr;\n })\n .join('\\n\\n---\\n\\n');\n\n const answerKeySection = quiz.questions\n .map((q, qIdx) => {\n const correctOpt = q.options.find((o) => o.isCorrect) || q.options[0];\n const optExplanations = q.options\n .map((o) => ` - **${o.id}${o.isCorrect ? ' (✅ CORRECT)' : ' (❌)'}:** ${o.explanation}`)\n .join('\\n');\n\n const takeaway = q.takeawayMessage || q.teacherNote || `The correct answer is ${correctOpt.id}.`;\n return `#### Question ${qIdx + 1} (${q.id}) — Correct Answer: **${correctOpt.id}**\n- **Takeaway:** ${takeaway}\n- **Option Analysis:**\n${optExplanations}`;\n })\n .join('\\n\\n');\n\n return `---\nid: \"${quiz.quizId}\"\ntitle: \"${quiz.title}\"\ntype: \"QUIZ\"\nlanguage: \"${quiz.language}\"\ntotal_questions: ${quiz.questions.length}\npassing_score_pct: ${quiz.passingScorePct}\n---\n\n# 🧠 Diagnostic & Active Recall Quiz: ${quiz.title}\n\n> ⏱️ **Recommended Time:** ~10-15 mins \n> 🎯 **Passing Score:** ${quiz.passingScorePct}% \n> 💡 **Purpose:** Test your conceptual understanding, catch hidden misconceptions, and evaluate architectural trade-offs.\n\n---\n\n${questionsSection}\n\n---\n\n## 🔑 Comprehensive Answer Key & Deep Explanation (Expand after completing)\n<details>\n<summary><b>👉 Click to View Full Explanations & Common Pitfall Analysis</b></summary>\n\n${answerKeySection}\n</details>\n`.trim();\n}\n","import { auditCurriculumQualityFlow } from '../ai/flows';\nimport type { CurriculumQualityReport } from '../schemas';\nimport type { ModelResolutionOptions } from '../ai/provider-factory';\n\nexport interface AutoRepairOptions<T> {\n artifactType: string;\n lessonId: string;\n language: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n maxRetries?: number;\n modelOptions?: ModelResolutionOptions;\n generatorFn: (repairFeedback?: string) => Promise<T>;\n}\n\nexport interface AutoRepairResult<T> {\n artifact: T;\n verdict: 'PASS' | 'NEEDS_REVISION' | 'FAIL';\n attempts: number;\n report: CurriculumQualityReport;\n}\n\n/**\n * Autonomous Proposer -> Judge -> Repair Loop\n * Runs generator, calls LLM-as-Judge to audit, and triggers a repair turn if needed.\n */\nexport async function withAutoRepair<T>(options: AutoRepairOptions<T>): Promise<AutoRepairResult<T>> {\n const maxRetries = options.maxRetries ?? 3;\n let currentAttempt = 1;\n let lastRepairFeedback: string | undefined = undefined;\n let lastArtifact!: T;\n let lastReport!: CurriculumQualityReport;\n\n while (currentAttempt <= maxRetries) {\n // 1. Proposer Step\n lastArtifact = await options.generatorFn(lastRepairFeedback);\n\n // 2. Judge Step\n lastReport = await auditCurriculumQualityFlow({\n targetArtifactType: options.artifactType,\n lessonId: options.lessonId,\n expectedLanguage: options.language,\n targetObjectives: options.targetObjectives,\n generatedContentJson: JSON.stringify(lastArtifact, null, 2),\n modelOptions: options.modelOptions,\n });\n\n if (lastReport.overallVerdict === 'PASS' && lastReport.languageAdherencePassed) {\n return {\n artifact: lastArtifact,\n verdict: 'PASS',\n attempts: currentAttempt,\n report: lastReport,\n };\n }\n\n // Accumulate repair prompts for next attempt\n lastRepairFeedback = `\nPREVIOUS AUDIT VERDICT: ${lastReport.overallVerdict} (Score: ${lastReport.totalScore}/100)\nDetected Issues:\n${lastReport.criteria.filter((c) => !c.passed).map((c) => `- [${c.name}] ${c.feedback}`).join('\\n')}\nActionable Repairs:\n${lastReport.actionableRepairPrompts.map((p) => `* ${p}`).join('\\n')}\nLanguage Adherence Required: \"${options.language}\"\n`.trim();\n\n currentAttempt++;\n }\n\n // If the loop completed without returning (all attempts used), return the best we have.\n // lastArtifact and lastReport are guaranteed non-null because the loop ran at least once.\n return {\n artifact: lastArtifact,\n verdict: lastReport.overallVerdict,\n attempts: currentAttempt - 1,\n report: lastReport,\n };\n}\n","import {\n generateLessonMasterFlow,\n generateActivityFlow,\n generateCodeLabFlow,\n generateWorksheetFlow,\n generateHandoutFlow,\n generateSlidesFlow,\n generateTeacherGuideFlow,\n generateExtensionFlow,\n} from '../ai/flows';\nimport {\n serializeLessonToMarkdown,\n serializeActivityToMarkdown,\n serializeHandoutToMarkdown,\n} from './markdownSerializers';\nimport { withAutoRepair, type AutoRepairResult } from './autonomousRepair';\nimport type {\n MilestoneInput,\n LessonPlan,\n ActivityLab,\n CodeLab,\n Worksheet,\n Handout,\n SlideDeck,\n TeacherGuide,\n Extension,\n} from '../schemas';\nimport type { ModelResolutionOptions } from '../ai/provider-factory';\n\nexport type BundleTier = 'minimum' | 'full';\n\nexport interface MilestoneCurriculumBundle {\n milestoneId: string;\n milestoneName: string;\n language: string;\n lesson: LessonPlan;\n lessonMarkdown: string;\n activity: ActivityLab;\n activityMarkdown: string;\n codeLab: CodeLab;\n handout: Handout;\n handoutMarkdown: string;\n worksheet?: Worksheet;\n slides?: SlideDeck;\n teacherGuide?: TeacherGuide;\n extension?: Extension;\n judgeResults: Record<string, AutoRepairResult<any>>;\n}\n\nexport interface GenerateMilestoneBundleOptions {\n milestone: MilestoneInput;\n language?: string;\n bundleTier?: BundleTier;\n techStack?: string[];\n topic?: string;\n targetAudience?: string;\n enableJudgeRepair?: boolean;\n modelOptions?: ModelResolutionOptions;\n}\n\n/**\n * Generates a complete Pedagogical Learning Bundle for a single Milestone\n */\nexport async function generateMilestoneCurriculumBundle(\n options: GenerateMilestoneBundleOptions\n): Promise<MilestoneCurriculumBundle> {\n const language = options.language || 'vi';\n const bundleTier = options.bundleTier || 'minimum';\n const techStack = options.techStack || options.milestone.tech_keywords || ['General Technology'];\n const enableJudge = options.enableJudgeRepair ?? true;\n const milestoneId = options.milestone.id || options.milestone.concept_code || 'L01';\n\n const judgeResults: Record<string, AutoRepairResult<any>> = {};\n\n const targetObjectives = (options.milestone.learning_objectives || []).map((lo) => ({\n code: lo.code,\n description: lo.description || lo.name,\n bloomLevel: lo.bloom_level || 'understand',\n }));\n\n // 1. Generate Master Lesson (LESSON.md)\n let lesson: LessonPlan;\n if (enableJudge) {\n const repairRes = await withAutoRepair<LessonPlan>({\n artifactType: 'LESSON',\n lessonId: milestoneId,\n language,\n targetObjectives,\n modelOptions: options.modelOptions,\n generatorFn: async (repairFeedback) => {\n return generateLessonMasterFlow({\n milestone: options.milestone,\n language,\n topic: options.topic,\n targetAudience: options.targetAudience,\n contextContinuity: repairFeedback,\n modelOptions: options.modelOptions,\n });\n },\n });\n lesson = repairRes.artifact;\n judgeResults['LESSON'] = repairRes;\n } else {\n lesson = await generateLessonMasterFlow({\n milestone: options.milestone,\n language,\n topic: options.topic,\n targetAudience: options.targetAudience,\n modelOptions: options.modelOptions,\n });\n }\n\n const lessonMarkdown = serializeLessonToMarkdown(lesson);\n\n // 2. Generate Activity (ACT.md)\n let activity: ActivityLab;\n if (enableJudge) {\n const repairRes = await withAutoRepair<ActivityLab>({\n artifactType: 'ACT',\n lessonId: milestoneId,\n language,\n targetObjectives,\n modelOptions: options.modelOptions,\n generatorFn: async () => {\n return generateActivityFlow({\n lesson,\n language,\n modelOptions: options.modelOptions,\n });\n },\n });\n activity = repairRes.artifact;\n judgeResults['ACT'] = repairRes;\n } else {\n activity = await generateActivityFlow({\n lesson,\n language,\n modelOptions: options.modelOptions,\n });\n }\n\n const activityMarkdown = serializeActivityToMarkdown(activity);\n\n // 3. Generate Code Lab (CODE) & Handout (HANDOUT.md)\n const [codeLab, handout] = await Promise.all([\n generateCodeLabFlow({\n lesson,\n activity,\n language,\n targetTechStack: techStack,\n modelOptions: options.modelOptions,\n }),\n generateHandoutFlow({\n lesson,\n language,\n modelOptions: options.modelOptions,\n }),\n ]);\n\n const handoutMarkdown = serializeHandoutToMarkdown(handout);\n\n const bundle: MilestoneCurriculumBundle = {\n milestoneId,\n milestoneName: options.milestone.name,\n language,\n lesson,\n lessonMarkdown,\n activity,\n activityMarkdown,\n codeLab,\n handout,\n handoutMarkdown,\n judgeResults,\n };\n\n // If Full Bundle requested, generate satellite assets\n if (bundleTier === 'full') {\n const [worksheet, slides, teacherGuide, extension] = await Promise.all([\n generateWorksheetFlow({ lesson, language, modelOptions: options.modelOptions }),\n generateSlidesFlow({ lesson, language, modelOptions: options.modelOptions }),\n generateTeacherGuideFlow({ lesson, activity, language, modelOptions: options.modelOptions }),\n generateExtensionFlow({ lesson, activity, language, modelOptions: options.modelOptions }),\n ]);\n\n bundle.worksheet = worksheet;\n bundle.slides = slides;\n bundle.teacherGuide = teacherGuide;\n bundle.extension = extension;\n }\n\n return bundle;\n}\n","import pLimit from 'p-limit';\nimport { generateMilestoneCurriculumBundle, type MilestoneCurriculumBundle, type BundleTier } from './milestoneBundleGenerator';\nimport type { RoadmapInput, PhaseInput, MilestoneInput } from '../schemas';\nimport type { ModelResolutionOptions } from '../ai/provider-factory';\n\nexport interface GenerateRoadmapCurriculumOptions {\n roadmap: RoadmapInput;\n language?: string;\n bundleTier?: BundleTier;\n concurrency?: number;\n enableJudgeRepair?: boolean;\n modelOptions?: ModelResolutionOptions;\n onMilestoneProgress?: (milestoneId: string, current: number, total: number) => void;\n}\n\nexport interface RoadmapCurriculumOutput {\n projectTitle: string;\n language: string;\n totalMilestones: number;\n bundles: MilestoneCurriculumBundle[];\n}\n\n/**\n * Generates curriculum bundles for an entire Roadmap from knowledge-tree\n */\nexport async function generateRoadmapCurriculum(\n options: GenerateRoadmapCurriculumOptions\n): Promise<RoadmapCurriculumOutput> {\n const language = options.language || 'vi';\n const concurrency = options.concurrency || 2;\n const limit = pLimit(concurrency);\n\n const allMilestones: Array<{ phase: PhaseInput; milestone: MilestoneInput }> = [];\n for (const phase of options.roadmap.phases) {\n for (const milestone of phase.milestones) {\n allMilestones.push({ phase, milestone });\n }\n }\n\n const total = allMilestones.length;\n let completedCount = 0;\n\n const tasks = allMilestones.map(({ phase, milestone }, taskIdx) =>\n limit(async () => {\n const bundle = await generateMilestoneCurriculumBundle({\n milestone,\n language,\n bundleTier: options.bundleTier,\n techStack: options.roadmap.project_brief.tech_stack,\n topic: phase.title || phase.phase_name,\n targetAudience: options.roadmap.project_brief.target_learner || options.roadmap.project_brief.audience,\n enableJudgeRepair: options.enableJudgeRepair,\n modelOptions: options.modelOptions,\n });\n\n completedCount++;\n if (options.onMilestoneProgress) {\n options.onMilestoneProgress(bundle.milestoneId, completedCount, total);\n }\n\n return { bundle, taskIdx };\n })\n );\n\n const results = await Promise.all(tasks);\n // Re-sort by original phase/milestone order to guarantee deterministic output\n const bundles = results\n .sort((a, b) => a.taskIdx - b.taskIdx)\n .map((r) => r.bundle);\n\n return {\n projectTitle: options.roadmap.project_brief.title || options.roadmap.project_brief.name || 'Curriculum Project',\n language,\n totalMilestones: total,\n bundles,\n };\n}\n","import { generateProjectInstructionFlow } from '../ai/flows';\nimport { serializeProjectInstructionToMarkdown } from './markdownSerializers';\nimport { withAutoRepair, type AutoRepairResult } from './autonomousRepair';\nimport type {\n ProjectInstruction,\n MilestoneInput,\n ProjectGraph,\n} from '../schemas';\nimport type { ModelResolutionOptions } from '../ai/provider-factory';\n\nexport interface GenerateProjectInstructionOptions {\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 enableJudgeRepair?: boolean;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport interface ProjectInstructionResult {\n instruction: ProjectInstruction;\n instructionMarkdown: string;\n judgeResult?: AutoRepairResult<ProjectInstruction>;\n}\n\n/**\n * Generates an Instructable-style Step-by-Step Project Instruction / Tutorial\n * adhering to researcher/prompts/tutorial.md methodology.\n */\nexport async function generateProjectInstruction(\n options: GenerateProjectInstructionOptions\n): Promise<ProjectInstructionResult> {\n const language = options.language || 'vi';\n const difficulty = options.difficulty || 'intermediate';\n const enableJudge = options.enableJudgeRepair ?? true;\n const milestoneId = options.milestone.id || options.milestone.concept_code || 'M01';\n\n let instruction: ProjectInstruction;\n let judgeResult: AutoRepairResult<ProjectInstruction> | undefined;\n\n const targetObjectives = (options.milestone.learning_objectives || []).map((lo) => ({\n code: lo.code,\n description: lo.description || lo.name,\n bloomLevel: lo.bloom_level || 'apply',\n }));\n\n if (enableJudge) {\n judgeResult = await withAutoRepair<ProjectInstruction>({\n artifactType: 'INSTRUCTION',\n lessonId: milestoneId,\n language,\n targetObjectives,\n modelOptions: options.modelOptions,\n generatorFn: async (repairFeedback) => {\n return generateProjectInstructionFlow({\n projectGraph: options.projectGraph,\n milestone: options.milestone,\n roadmapContext: options.roadmapContext,\n researchNotes: repairFeedback ? `${options.researchNotes || ''}\\n\\n[REPAIR NOTE]: ${repairFeedback}` : options.researchNotes,\n externalResources: options.externalResources,\n language,\n difficulty,\n modelOptions: options.modelOptions,\n });\n },\n });\n instruction = judgeResult.artifact;\n } else {\n instruction = await generateProjectInstructionFlow({\n projectGraph: options.projectGraph,\n milestone: options.milestone,\n roadmapContext: options.roadmapContext,\n researchNotes: options.researchNotes,\n externalResources: options.externalResources,\n language,\n difficulty,\n modelOptions: options.modelOptions,\n });\n }\n\n const instructionMarkdown = serializeProjectInstructionToMarkdown(instruction);\n\n return {\n instruction,\n instructionMarkdown,\n judgeResult,\n };\n}\n","import fs from 'fs';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport {\n generateSelfLabFlow,\n generateDiagnosticQuizFlow,\n generateHandoutFlow,\n generateCodeLabFlow,\n} from '../ai/flows';\nimport { generateProjectInstruction } from './projectInstructionGenerator';\nimport {\n serializeSelfLabToMarkdown,\n serializeDiagnosticQuizToMarkdown,\n} from './selfPacedSerializers';\nimport {\n serializeHandoutToMarkdown,\n serializeCodeLabToMarkdown,\n} from './markdownSerializers';\nimport type {\n MilestoneInput,\n ProjectGraph,\n SelfPacedBundle,\n LessonPlan,\n} from '../schemas';\nimport type { ModelResolutionOptions } from '../ai/provider-factory';\n\nexport interface GenerateSelfPacedBundleInput {\n milestone: MilestoneInput;\n projectGraph?: ProjectGraph;\n language?: string;\n targetTechStack?: string[];\n contextContinuity?: string;\n outputDirectory?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport interface SelfPacedBundleOutput {\n bundle: SelfPacedBundle;\n markdown: {\n instructionMd: string;\n selfLabMd: string;\n quizMd: string;\n cheatSheetMd: string;\n codeLabMd?: string;\n };\n outputDirectory?: string;\n}\n\n/**\n * Orchestrates generation of a complete Autonomous Self-Learner Bundle\n */\nexport async function generateSelfPacedBundle(\n input: GenerateSelfPacedBundleInput\n): Promise<SelfPacedBundleOutput> {\n const language = input.language || 'vi';\n const techStack = input.targetTechStack || input.milestone.tech_keywords || ['Swift'];\n const milestoneId = input.milestone.id || 'F0-S1';\n\n // 1. Generate Instructable Step-by-Step Blueprint\n const instructionResult = await generateProjectInstruction({\n milestone: input.milestone,\n projectGraph: input.projectGraph,\n language,\n modelOptions: input.modelOptions,\n });\n const instruction = instructionResult.instruction;\n const instructionMd = instructionResult.instructionMarkdown;\n\n // 2. Generate Self-Paced Hands-On Lab with Progressive Hints & Verification Commands\n const selfLab = await generateSelfLabFlow({\n milestone: input.milestone,\n projectGraph: input.projectGraph,\n language,\n targetTechStack: techStack,\n contextContinuity: input.contextContinuity,\n modelOptions: input.modelOptions,\n });\n\n // 3. Generate Diagnostic & Active Recall Quiz\n const quiz = await generateDiagnosticQuizFlow({\n milestone: input.milestone,\n language,\n modelOptions: input.modelOptions,\n });\n\n // Canonical Lesson Plan container to feed secondary helpers\n const canonicalLesson: LessonPlan = {\n artifactType: 'LESSON',\n lessonId: milestoneId,\n title: input.milestone.name,\n language,\n topic: input.milestone.feature_name || 'Engineering',\n targetGradeOrAudience: 'Self-Learner',\n overview: input.milestone.description || input.milestone.name,\n learningObjectives: (input.milestone.learning_objectives || []).map((lo) => ({\n code: lo.code,\n name: lo.name,\n description: lo.description || '',\n bloomLevel: lo.bloom_level || 'understand',\n successCriteria: '',\n })),\n prerequisites: 'Foundational programming knowledge',\n materialsSummary: techStack.join(', '),\n keywords: techStack,\n hookTitle: 'Self-Paced Challenge',\n hookScenario: input.milestone.description || input.milestone.name,\n hookQuestions: ['How can we implement this efficiently?'],\n coreConcepts: [],\n differentiation: { bronzeTier: '', silverTier: '', goldTier: '' },\n sections: [\n {\n title: input.milestone.name,\n durationMinutes: 45,\n teacherActions: 'Guide learner through core implementation',\n studentActions: 'Build and verify solution',\n analogies: [],\n formativeCheck: 'Verify test execution',\n },\n ],\n exitTicket: {\n questionStem: 'What was the core takeaway?',\n expectedAnswerOrRubric: 'Successful build and run',\n metacognitivePrompt: 'How can this be optimized?',\n },\n teacherNotes: { commonPitfalls: [], troubleshootingMatrix: [], extensionNotes: '' },\n };\n\n // 4. Generate 5-Second Rule Cheat Sheet (Handout)\n const cheatSheet = await generateHandoutFlow({\n lesson: canonicalLesson,\n language,\n modelOptions: input.modelOptions,\n });\n\n // 5. Generate Code Lab Starter & Solution Code\n const codeLab = await generateCodeLabFlow({\n lesson: canonicalLesson,\n language,\n targetTechStack: techStack,\n modelOptions: input.modelOptions,\n });\n\n // 6. Serialize to High-Fidelity Markdown\n const selfLabMd = serializeSelfLabToMarkdown(selfLab);\n const quizMd = serializeDiagnosticQuizToMarkdown(quiz);\n const cheatSheetMd = serializeHandoutToMarkdown(cheatSheet);\n const codeLabMd = serializeCodeLabToMarkdown(codeLab);\n\n const bundle: SelfPacedBundle = {\n bundleId: milestoneId,\n title: input.milestone.name,\n language,\n techStack,\n instruction,\n selfLab,\n quiz,\n cheatSheet,\n codeLab,\n };\n\n // 7. Save to directory if outputDirectory provided (async to avoid blocking event loop)\n if (input.outputDirectory) {\n await fsPromises.mkdir(input.outputDirectory, { recursive: true });\n\n await Promise.all([\n fsPromises.writeFile(path.join(input.outputDirectory, 'INSTRUCTION.md'), instructionMd, 'utf-8'),\n fsPromises.writeFile(path.join(input.outputDirectory, 'SELF_LAB.md'), selfLabMd, 'utf-8'),\n fsPromises.writeFile(path.join(input.outputDirectory, 'QUIZ.md'), quizMd, 'utf-8'),\n fsPromises.writeFile(path.join(input.outputDirectory, 'QUIZ.json'), JSON.stringify(quiz, null, 2), 'utf-8'),\n fsPromises.writeFile(path.join(input.outputDirectory, 'CHEAT_SHEET.md'), cheatSheetMd, 'utf-8'),\n fsPromises.writeFile(path.join(input.outputDirectory, 'LAB.md'), codeLabMd, 'utf-8'),\n fsPromises.writeFile(path.join(input.outputDirectory, 'bundle.json'), JSON.stringify(bundle, null, 2), 'utf-8'),\n ]);\n }\n\n return {\n bundle,\n markdown: {\n instructionMd,\n selfLabMd,\n quizMd,\n cheatSheetMd,\n codeLabMd,\n },\n outputDirectory: input.outputDirectory,\n };\n}\n","import type { ICurriculumStorage, ProjectStatusReport } from '../storage/types';\n\nexport interface ConvertedSotBundle {\n learnerProfile: string;\n projectBrief: string;\n referencePack: string;\n curriculumFramework: string;\n contentStyleGuide: string;\n artDirection: string;\n projectStatus: string;\n}\n\n/**\n * Normalizes and converts Roadmap JSON and Project Graph JSON from knowledge-tree into 7 Canonical SOT Foundation Files.\n */\nexport function convertRoadmapToFoundationSot(\n roadmapInput: any,\n projectGraphInput?: any\n): ConvertedSotBundle {\n const brief = roadmapInput?.project_brief || roadmapInput?.project || {};\n const projectInfo = projectGraphInput?.project || {};\n const productGoals = projectGraphInput?.product?.goals || [];\n const techStack = projectInfo?.tech_stack || brief?.tech_stack || {};\n const architecture = projectInfo?.architecture || [];\n\n const title = brief?.title || projectInfo?.name || 'Curriculum Project';\n const projectCode = (brief?.project_code || projectInfo?.id || 'PROJECT').toUpperCase();\n const description = brief?.description || projectInfo?.purpose || 'A comprehensive, production-grade learning path.';\n const audience = brief?.audience || brief?.target_learner || 'Intermediate Engineers';\n const estimatedWeeks = brief?.estimated_weeks || 8;\n const estimatedHours = brief?.estimated_hours || 120;\n const phases = roadmapInput?.phases || [];\n\n const allMilestones: any[] = [];\n phases.forEach((p: any) => {\n if (Array.isArray(p.milestones)) {\n p.milestones.forEach((m: any) => {\n allMilestones.push({ ...m, phase_name: p.phase_name, phase_id: p.phase_id });\n });\n }\n });\n\n const totalLessons = allMilestones.length || 16;\n const totalUnits = phases.length || 4;\n\n const dateStr = new Date().toISOString().split('T')[0];\n\n // ─────────────────────────────────────────────────────────────\n // 1. LEARNER_PROFILE.md\n // ─────────────────────────────────────────────────────────────\n const learnerProfile = `---\nid: \"${projectCode}-LEARNER-PROFILE\"\ntitle: \"Learner Profile: ${title}\"\ntype: \"LEARNER_PROFILE\"\ncreated_by: \"Curriculum OS Converter\"\nphase: \"P1\"\ndeliverable: \"P1-T1\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Foundational Info\"\n - \"Entry Level\"\n - \"Goals & Motivations\"\n - \"Client Objectives\"\n---\n\n# LEARNER PROFILE: ${title}\n\n## [REQUIRED] Foundational Info\n- **Đối tượng:** ${audience}\n- **Độ tuổi:** 18+ (Kỹ sư & Lập trình viên)\n- **Quy mô lớp học:** 15 – 25 học viên\n- **Bối cảnh học tập:** Corporate Training / Bootcamp / Self-paced Engineering (Hybrid/Online)\n\n## [REQUIRED] Entry Level\n- **Nền tảng kỹ thuật:** Đã nắm vững logic lập trình cơ bản và cú pháp ngôn ngữ nền tảng.\n- **Yêu cầu công cụ:** Đã làm quen với môi trường IDE và Git version control.\n- **Tiêu chuẩn ngoại ngữ:** Đọc hiểu tài liệu kỹ thuật chuyên ngành bằng Tiếng Anh.\n\n## [REQUIRED] Goals & Motivations\n- **Thời lượng mỗi buổi:** 90 phút (40 phút Lý thuyết, 50 phút Hands-on Lab).\n- **Tổng số bài học:** ${totalLessons} bài học (${totalUnits} Unit x bài học tương ứng).\n- **Tổng thời lượng ước tính:** ${estimatedHours} giờ học (~${estimatedWeeks} tuần).\n- **Thiết bị học viên:** Laptop cá nhân cài đặt đầy đủ công cụ và runtime cần thiết.\n\n## [REQUIRED] Client Objectives\n- **Core Goal 1:** Làm chủ các khái niệm và nguyên lý cốt lõi được định nghĩa trong Knowledge Graph.\n- **Core Goal 2:** Vận dụng thành thạo để xây dựng đồ án thực tế đạt chuẩn công nghiệp.\n- **Standard Alignment:** IEEE/ACM CS2023 Curricula Standards.\n\n## [OPTIONAL] Student Characteristics\n- **Động lực:** Nâng cao năng lực chuyên môn và giải quyết các bài toán sản xuất thực tế.\n- **Phương pháp tiếp cận:** Thực hành Hands-on kết hợp mô hình sư phạm 5E.\n\n---\n- **Global Standard:** v1.2 (Canonical Curriculum OS Standard).\n- **Last Updated:** ${dateStr}.\n`;\n\n // ─────────────────────────────────────────────────────────────\n // 2. PROJECT_BRIEF.md\n // ─────────────────────────────────────────────────────────────\n const goalsSection = productGoals.length > 0\n ? productGoals.map((g: any) => `- **${g.id || 'Goal'}:** ${g.description || g.title}`).join('\\n')\n : `- **G1:** Xây dựng nền tảng kiến thức vững chắc bám sát Knowledge Graph.\\n- **G2:** Thực hành tái cấu trúc mã nguồn theo chuẩn kiến trúc chuyên nghiệp.`;\n\n const projectBrief = `---\nid: \"${projectCode}-PROJECT-BRIEF\"\ntitle: \"Project Brief: ${title}\"\ntype: \"PROJECT_BRIEF\"\ncreated_by: \"Curriculum OS Converter\"\nphase: \"P1\"\ndeliverable: \"P1-T3\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Project Context and Problem Statement\"\n - \"Core Course Objectives\"\n - \"Target Audience Profile\"\n - \"Deliverables and Scope\"\n---\n\n# PROJECT BRIEF: ${title}\n\n## [REQUIRED] Project Context and Problem Statement\n- **Bối cảnh dự án:** ${description}\n- **Vấn đề cần giải quyết:** Xây dựng lộ trình đào tạo chuẩn hóa, chuyển đổi từ lý thuyết trừu tượng sang bài tập thực hành có thể chạy và đánh giá được.\n\n## [REQUIRED] Core Course Objectives\n${goalsSection}\n\n## [REQUIRED] Target Audience Profile\n- **Đối tượng:** ${audience}\n- **Mức độ cam kết:** Hoàn thành các bài lab thực hành sau mỗi buổi học.\n\n## [REQUIRED] Deliverables and Scope\n- **Tài liệu Nền tảng (7 Files SOT):** Learner Profile, Project Brief, Reference Pack, Curriculum Framework, Content Style Guide, Art Direction, Project Status.\n- **Học liệu bài học:** Bộ 4 học liệu (Giáo án 5E, Lab thực hành, Trắc nghiệm, Slide) cho toàn bộ ${totalLessons} bài học.\n\n---\n- **Global Standard:** v1.2 (Canonical Curriculum OS Standard).\n- **Last Updated:** ${dateStr}.\n`;\n\n // ─────────────────────────────────────────────────────────────\n // 3. REFERENCE_PACK.md\n // ─────────────────────────────────────────────────────────────\n const extractedKeywords = new Set<string>();\n allMilestones.forEach(m => {\n if (Array.isArray(m.tech_keywords)) {\n m.tech_keywords.forEach((k: string) => extractedKeywords.add(k));\n }\n });\n\n const keywordsList = Array.from(extractedKeywords).slice(0, 15).join(', ') || 'Core concepts, Standards, Best practices';\n\n const referencePack = `---\nid: \"${projectCode}-REF-PACK\"\ntitle: \"Reference Pack: ${title}\"\ntype: \"REFERENCE_PACK\"\ncreated_by: \"Curriculum OS Converter\"\nphase: \"P1\"\ndeliverable: \"P1-T2\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Official Standards and Specifications\"\n - \"Pedagogical and Engineering References\"\n---\n\n# REFERENCE PACK: ${title}\n\n## [REQUIRED] Official Standards and Specifications\n- **Core Technology Keywords:** ${keywordsList}\n- **Architecture References:** ${architecture.join(', ') || 'Clean Architecture, Modular Components'}\n- **Official Documentation:** Trích dẫn các tài liệu hướng dẫn và đặc tả kỹ thuật chính thức từ nhà sản xuất/tổ chức phát triển.\n\n## [REQUIRED] Pedagogical and Engineering References\n- **5E Instructional Model (Bybee et al.):** Mô hình kiến tạo 5 pha sư phạm.\n- **Bloom's Revised Taxonomy:** Thang đo mục tiêu năng lực nhận thức.\n- **IEEE/ACM CS2023:** Khung chuẩn chương trình Khoa học Máy tính quốc tế.\n\n---\n- **Global Standard:** v1.2 (Canonical Curriculum OS Standard).\n- **Last Updated:** ${dateStr}.\n`;\n\n // ─────────────────────────────────────────────────────────────\n // 4. CURRICULUM_FRAMEWORK.md\n // ─────────────────────────────────────────────────────────────\n let hierarchyRows = '';\n phases.forEach((p: any, idx: number) => {\n const unitNum = String(idx + 1).padStart(2, '0');\n const unitTitle = p.phase_name || `Unit ${unitNum}`;\n const mCount = Array.isArray(p.milestones) ? p.milestones.length : 1;\n hierarchyRows += `| **Unit ${unitNum}: ${unitTitle}** | U${unitNum}_M01: Core Competencies | ${mCount} | ${p.description || p.target_outcome || 'Làm chủ các khái niệm trong Unit'} |\\n`;\n });\n\n let scopeSequenceRows = '';\n let globalCounter = 1;\n phases.forEach((p: any, pIdx: number) => {\n const unitNum = String(pIdx + 1).padStart(2, '0');\n if (Array.isArray(p.milestones)) {\n p.milestones.forEach((m: any, mIdx: number) => {\n const lessonNum = String(mIdx + 1).padStart(2, '0');\n const lessonCode = `U${unitNum}_M01_L${lessonNum}`;\n const lessonTitle = m.name || m.concept_code || `Lesson ${lessonNum}`;\n const concept = m.concept_code || 'Core Concept';\n const prereqs = Array.isArray(m.prerequisite_concept_codes) && m.prerequisite_concept_codes.length > 0\n ? m.prerequisite_concept_codes.join(', ')\n : (mIdx === 0 ? 'None' : `Lesson ${mIdx}`);\n const bloom = m.bloom_level || 'Apply';\n\n scopeSequenceRows += `| ${String(globalCounter).padStart(2, '0')} | **${lessonCode}** | ${lessonTitle} | Unit ${unitNum} | ${concept} | ${prereqs} | ${bloom} |\\n`;\n globalCounter++;\n });\n }\n });\n\n const curriculumFramework = `---\nid: \"${projectCode}-FRAMEWORK\"\ntitle: \"Curriculum Framework: ${title}\"\ntype: \"CURRICULUM_FRAMEWORK\"\ncreated_by: \"Curriculum OS Converter\"\nphase: \"P2\"\ndeliverable: \"P2-T1\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Course Overview\"\n - \"Global Learning Objectives\"\n - \"Structural Hierarchy (Unit & Module)\"\n - \"Scope & Sequence (Detailed Roadmap)\"\n - \"Standard Lesson Format\"\n---\n\n# CURRICULUM FRAMEWORK: ${title}\n\n_Based on: LEARNER_PROFILE.md v1.2_\n\n## [REQUIRED] Course Overview\n- **Official Course Name:** ${title}\n- **Short Description:** ${description}\n- **Total Units:** ${totalUnits} Unit (U01 – U${String(totalUnits).padStart(2, '0')})\n- **Total Lessons:** ${totalLessons} bài học\n- **Total Duration:** ${estimatedHours} giờ học (${totalLessons} buổi x 90 phút).\n\n## [REQUIRED] Global Learning Objectives\n1. **[Bloom 4 - Analyze]:** Phân tích và hiểu sâu các khái niệm kỹ thuật trong lộ trình.\n2. **[Bloom 5 - Evaluate]:** Đánh giá các giải pháp công nghệ và thiết kế kiến trúc phù hợp với ngữ cảnh.\n3. **[Bloom 6 - Create]:** Xây dựng các đồ án thực hành hoàn chỉnh, tối ưu và kiểm thử tự động.\n\n## [REQUIRED] Structural Hierarchy (Unit & Module)\n| Unit | Module | Lessons | Module Objectives |\n|---|---|:---:|---|\n${hierarchyRows || '| **Unit 01: Core Foundations** | U01_M01: Basics | 4 | Nắm vững kiến thức nền tảng |\\n'}\n\n## [REQUIRED] Scope & Sequence (Detailed Roadmap)\n| # | Mã bài | Tên bài học | Unit | Concept chính | Tiền đề (Prerequisites) | Bloom Level |\n|:---:|:---:|---|---|---|---|:---:|\n${scopeSequenceRows || '| 01 | **U01_M01_L01** | Introduction & Setup | Unit 01 | Setup | None | Understand |\\n'}\n\n## [REQUIRED] Standard Lesson Format\n- **Tổng thời lượng mỗi bài:** 90 phút.\n- **Phân bổ sư phạm 5E:**\n * **Engage (10m):** Đặt vấn đề bằng tình huống thực tế.\n * **Explore (20m):** Khám phá mô hình và phân tích cơ chế.\n * **Explain (25m):** Giảng viên phân tích nguyên lý kỹ thuật cốt lõi.\n * **Elaborate (25m):** Hands-on Lab thực hành trên dự án mẫu.\n * **Evaluate (10m):** Câu hỏi trắc nghiệm chẩn đoán và rubric.\n\n---\n- **Global Standard:** v1.2 (Canonical Curriculum OS Standard).\n- **Last Updated:** ${dateStr}.\n`;\n\n // ─────────────────────────────────────────────────────────────\n // 5. CONTENT_STYLE_GUIDE.md\n // ─────────────────────────────────────────────────────────────\n const contentStyleGuide = `---\nid: \"${projectCode}-STYLE-GUIDE\"\ntitle: \"Content Style Guide: ${title}\"\ntype: \"CONTENT_STYLE_GUIDE\"\ncreated_by: \"Curriculum OS Converter\"\nphase: \"P2\"\ndeliverable: \"P2-T2\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Tone and Voice\"\n - \"Code Standards and Conventions\"\n - \"Pedagogical Structure (5E Model)\"\n---\n\n# CONTENT STYLE GUIDE: ${title}\n\n## [REQUIRED] Tone and Voice\n- **Tông điệu:** Chuyên nghiệp, truyền cảm hứng, tính thực tiễn cao (Engineering-first).\n- **Ngôn ngữ:** Tiếng Việt mạch lạc, giữ nguyên thuật ngữ kỹ thuật quốc tế bằng Tiếng Anh.\n\n## [REQUIRED] Code Standards and Conventions\n- **Tính thực thi:** 100% mã nguồn trong bài giảng, lab thực hành và trắc nghiệm phải chạy được không có lỗi cú pháp.\n- **Cấu trúc:** Có chú thích rõ ràng mục đích từng khối lệnh và so sánh giải pháp cũ vs mới.\n\n## [REQUIRED] Pedagogical Structure (5E Model)\nMỗi bài học 90 phút bắt buộc tuân theo 5 pha: Engage (10m) $\\rightarrow$ Explore (20m) $\\rightarrow$ Explain (25m) $\\rightarrow$ Elaborate (25m) $\\rightarrow$ Evaluate (10m).\n\n---\n- **Global Standard:** v1.2 (Canonical Curriculum OS Standard).\n- **Last Updated:** ${dateStr}.\n`;\n\n // ─────────────────────────────────────────────────────────────\n // 6. ART_DIRECTION.md\n // ─────────────────────────────────────────────────────────────\n const artDirection = `---\nid: \"${projectCode}-ART-DIRECTION\"\ntitle: \"Art Direction: ${title}\"\ntype: \"ART_DIRECTION\"\ncreated_by: \"Curriculum OS Converter\"\nphase: \"P2\"\ndeliverable: \"P2-T3\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Design Theme and Mood\"\n - \"Color System and Palette\"\n - \"Diagram and Visualization Guidelines\"\n---\n\n# ART DIRECTION: ${title}\n\n## [REQUIRED] Design Theme and Mood\n- **Phong cách:** Modern Minimalist Dark Mode với Apple Engineering Aesthetics.\n- **Cảm xúc:** Tinh tế, hiện đại, tập trung cao.\n\n## [REQUIRED] Color System and Palette\n- **Màu Chủ Đạo:** Apple Amber (\\`#F59E0B\\`)\n- **Màu Thành Công / An Toàn:** Emerald Green (\\`#10B981\\`)\n- **Màu Luồng Dữ Liệu:** Electric Cyan (\\`#06B6D4\\`)\n- **Màu Cảnh Báo:** Crimson Rose (\\`#F43F5E\\`)\n\n## [REQUIRED] Diagram and Visualization Guidelines\nSử dụng chuẩn Mermaid Sequence Diagram và State Diagram để mô tả luồng thực thi và quan hệ giữa các thành phần.\n\n---\n- **Global Standard:** v1.2 (Canonical Curriculum OS Standard).\n- **Last Updated:** ${dateStr}.\n`;\n\n // ─────────────────────────────────────────────────────────────\n // 7. PROJECT_STATUS.md\n // ─────────────────────────────────────────────────────────────\n let statusMatrixRows = '';\n let lessonCounter = 1;\n phases.forEach((p: any, pIdx: number) => {\n const unitNum = String(pIdx + 1).padStart(2, '0');\n if (Array.isArray(p.milestones)) {\n p.milestones.forEach((m: any, mIdx: number) => {\n const lessonNum = String(mIdx + 1).padStart(2, '0');\n const lessonCode = `U${unitNum}_M01_L${lessonNum}`;\n const lessonTitle = m.name || m.concept_code || `Lesson ${lessonNum}`;\n statusMatrixRows += `| **${lessonCode}** | ${lessonTitle} | ⏳ | ⏳ | ⏳ | ⏳ | **Hàng đợi** |\\n`;\n lessonCounter++;\n });\n }\n });\n\n const projectStatus = `---\nid: \"${projectCode}-PROJECT-STATUS\"\ntitle: \"Project Status: ${title}\"\ntype: \"PROJECT_STATUS\"\ncreated_by: \"Curriculum OS Converter\"\nphase: \"P1\"\ndeliverable: \"P1-T4\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n# PROJECT STATUS: ${title}\n\n## [REQUIRED] Phase Status\n- **Phase 01: SOT & Brief:** ✅ **100% Hoàn thành** (7/7 Files sẵn sàng, Gate 1 Approved).\n- **Phase 02: Kiến trúc & Thiết kế:** ✅ **100% Hoàn thành** (Gate 2 Approved).\n- **Phase 03: Sản xuất Học liệu:** 🚀 **Sẵn sàng khởi chạy** (0/${totalLessons} bài học hoàn tất).\n- **Phase 04: Xuất bản & Đóng gói:** ⏳ Chờ hoàn tất bài học.\n\n## [REQUIRED] Physical Artifacts Matrix\n| Mã bài học | Tên bài học | Giáo án 5E | Lab thực hành | Trắc nghiệm | Slide | Trạng thái |\n| :--- | :--- | :---: | :---: | :---: | :---: | :---: |\n${statusMatrixRows || '| **U01_M01_L01** | Introduction & Setup | ⏳ | ⏳ | ⏳ | ⏳ | **Hàng đợi** |\\n'}\n\n---\n- **Global Standard:** v1.2 (Canonical Curriculum OS Standard).\n- **Last Updated:** ${dateStr}.\n`;\n\n return {\n learnerProfile,\n projectBrief,\n referencePack,\n curriculumFramework,\n contentStyleGuide,\n artDirection,\n projectStatus,\n };\n}\n\n/**\n * High-level function to import Roadmap JSON and Project Graph JSON into storage as a fully initialized SOT project.\n */\nexport async function importRoadmapToProject(\n storage: ICurriculumStorage,\n projectId: string,\n roadmapInput: any,\n projectGraphInput?: any\n): Promise<ProjectStatusReport> {\n const bundle = convertRoadmapToFoundationSot(roadmapInput, projectGraphInput);\n\n await storage.saveArtifact(projectId, '_sot/LEARNER_PROFILE.md', bundle.learnerProfile);\n await storage.saveArtifact(projectId, '_sot/PROJECT_BRIEF.md', bundle.projectBrief);\n await storage.saveArtifact(projectId, '_sot/REFERENCE_PACK.md', bundle.referencePack);\n await storage.saveArtifact(projectId, '_sot/CURRICULUM_FRAMEWORK.md', bundle.curriculumFramework);\n await storage.saveArtifact(projectId, '_sot/CONTENT_STYLE_GUIDE.md', bundle.contentStyleGuide);\n await storage.saveArtifact(projectId, '_sot/ART_DIRECTION.md', bundle.artDirection);\n await storage.saveArtifact(projectId, '_sot/PROJECT_STATUS.md', bundle.projectStatus);\n\n return storage.getProjectStatus(projectId);\n}\n","export * from './markdownSerializers';\nexport * from './selfPacedSerializers';\nexport * from './autonomousRepair';\nexport * from './milestoneBundleGenerator';\nexport * from './roadmapCurriculumGenerator';\nexport * from './projectInstructionGenerator';\nexport * from './generateSelfPacedBundle';\nexport * from './roadmapSotAdapter';\nexport * from './artifactLinter';\n","import fs from 'fs';\nimport path from 'path';\nimport crypto from 'crypto';\nimport type { \n ICurriculumStorage, \n SotDocument, \n LessonArtifactSummary, \n ProjectStatusReport,\n PipelineState,\n ArtifactLifecycleInfo\n} from './types';\n\nexport function computeContentHash(content: string): string {\n return 'sha256:' + crypto.createHash('sha256').update(content.trim(), 'utf-8').digest('hex');\n}\n\nexport const STANDARD_SOT_FILES = [\n 'PROJECT_BRIEF.md',\n 'LEARNER_PROFILE.md',\n 'CURRICULUM_FRAMEWORK.md',\n 'PROJECT_STATUS.md',\n 'CONTENT_STYLE_GUIDE.md',\n 'ART_DIRECTION.md',\n 'REFERENCE_PACK.md'\n];\n\nexport interface FileSystemStorageOptions {\n baseDir?: string;\n}\n\nexport class FileSystemCurriculumAdapter implements ICurriculumStorage {\n private baseDir: string;\n\n constructor(options: FileSystemStorageOptions = {}) {\n this.baseDir = options.baseDir || path.resolve(process.cwd(), 'output', 'projects');\n }\n\n private getProjectDir(projectId: string): string {\n const raw = (projectId || '').replace('proj_', '');\n const directPath = path.join(this.baseDir, raw);\n if (fs.existsSync(directPath)) return directPath;\n const fullIdPath = path.join(this.baseDir, projectId);\n if (fs.existsSync(fullIdPath)) return fullIdPath;\n return directPath;\n }\n\n /** Ensures the resolved path stays within the project directory (prevents path traversal). */\n private assertInsideProject(projectDir: string, targetPath: string): void {\n const resolvedProject = path.resolve(projectDir);\n const resolvedTarget = path.resolve(targetPath);\n if (!resolvedTarget.startsWith(resolvedProject + path.sep) && resolvedTarget !== resolvedProject) {\n throw new Error(`[FileSystemCurriculumAdapter] Path traversal blocked: ${targetPath} is outside project directory ${projectDir}`);\n }\n }\n\n async projectExists(projectId: string): Promise<boolean> {\n return fs.existsSync(this.getProjectDir(projectId));\n }\n\n async readSotDocument(projectId: string, filename: string): Promise<string | null> {\n const projectDir = this.getProjectDir(projectId);\n const possiblePaths = [\n path.join(projectDir, '_sot', filename),\n path.join(projectDir, filename),\n ];\n\n for (const p of possiblePaths) {\n if (fs.existsSync(p) && fs.statSync(p).isFile()) {\n return fs.readFileSync(p, 'utf-8');\n }\n }\n return null;\n }\n\n async listSotDocuments(projectId: string): Promise<SotDocument[]> {\n const projectDir = this.getProjectDir(projectId);\n const sotDir = path.join(projectDir, '_sot');\n\n return STANDARD_SOT_FILES.map(filename => {\n const p = fs.existsSync(path.join(sotDir, filename))\n ? path.join(sotDir, filename)\n : (fs.existsSync(path.join(projectDir, filename)) ? path.join(projectDir, filename) : null);\n\n if (p && fs.existsSync(p)) {\n const stats = fs.statSync(p);\n return {\n name: filename.replace('.md', '').replace(/_/g, ' '),\n filename,\n exists: true,\n sizeBytes: stats.size\n };\n }\n\n return {\n name: filename.replace('.md', '').replace(/_/g, ' '),\n filename,\n exists: false,\n sizeBytes: 0\n };\n });\n }\n\n async readArtifact(projectId: string, relPathOrIdentifier: string): Promise<string | null> {\n const projectDir = this.getProjectDir(projectId);\n\n // Block path traversal attempts\n const directCandidate = path.join(projectDir, relPathOrIdentifier);\n this.assertInsideProject(projectDir, directCandidate);\n\n // 1. Direct file path lookup\n const possiblePaths = [\n directCandidate,\n path.join(projectDir, '_sot', relPathOrIdentifier),\n path.join(projectDir, 'lessons', relPathOrIdentifier),\n path.join(projectDir, '_sot', path.basename(relPathOrIdentifier)),\n path.join(projectDir, 'lessons', path.basename(relPathOrIdentifier)),\n ];\n\n for (const p of possiblePaths) {\n if (fs.existsSync(p) && fs.statSync(p).isFile()) {\n return fs.readFileSync(p, 'utf-8');\n }\n }\n\n // If relPathOrIdentifier was an explicit filename with extension, don't guess\n if (relPathOrIdentifier.includes('.md') || relPathOrIdentifier.includes('/')) {\n return null;\n }\n\n // 2. Intelligent Identifier Resolution for query strings (e.g. \"U01_M01_L01 — Giáo án 5E\")\n const lessonMatch = relPathOrIdentifier.match(/U\\d+_M\\d+_L\\d+/i);\n if (lessonMatch) {\n const lessonId = lessonMatch[0].toUpperCase();\n const lessonDir = path.join(projectDir, 'lessons', lessonId);\n\n if (fs.existsSync(lessonDir) && fs.statSync(lessonDir).isDirectory()) {\n const lower = relPathOrIdentifier.toLowerCase();\n let artifactPrefix = 'LESSON';\n if (lower.includes('act') || lower.includes('lab') || lower.includes('thực hành')) {\n artifactPrefix = 'ACT';\n } else if (lower.includes('quiz') || lower.includes('trắc nghiệm') || lower.includes('đánh giá')) {\n artifactPrefix = 'QUIZ';\n } else if (lower.includes('slide') || lower.includes('bài giảng') || lower.includes('trình chiếu')) {\n artifactPrefix = 'SLIDE';\n } else if (lower.includes('guide') || lower.includes('hướng dẫn')) {\n artifactPrefix = 'GUIDE';\n } else if (lower.includes('wks') || lower.includes('worksheet') || lower.includes('phiếu bài tập')) {\n artifactPrefix = 'WKS';\n } else if (lower.includes('handout') || lower.includes('tài liệu')) {\n artifactPrefix = 'HANDOUT';\n } else if (lower.includes('code')) {\n artifactPrefix = 'CODE';\n } else if (lower.includes('ext') || lower.includes('extension')) {\n artifactPrefix = 'EXT';\n }\n\n const candidateFile = path.join(lessonDir, `${artifactPrefix}_${lessonId}.md`);\n if (fs.existsSync(candidateFile)) {\n return fs.readFileSync(candidateFile, 'utf-8');\n }\n }\n }\n\n return null;\n }\n\n async saveArtifact(projectId: string, relPath: string, content: string): Promise<void> {\n const projectDir = this.getProjectDir(projectId);\n const targetPath = path.join(projectDir, relPath);\n this.assertInsideProject(projectDir, targetPath);\n const targetDir = path.dirname(targetPath);\n\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n // Version history (P2): ghi đè file đã tồn tại → chép bản cũ vào .history/ trước (giữ tối đa 10 bản gần nhất)\n if (fs.existsSync(targetPath)) {\n try {\n const oldContent = fs.readFileSync(targetPath, 'utf-8');\n if (oldContent !== content) {\n const historyDir = path.join(projectDir, '.history', relPath);\n fs.mkdirSync(historyDir, { recursive: true });\n fs.writeFileSync(path.join(historyDir, `${Date.now()}.md`), oldContent, 'utf-8');\n const versions = fs.readdirSync(historyDir).filter((f) => f.endsWith('.md')).sort();\n while (versions.length > 10) {\n fs.unlinkSync(path.join(historyDir, versions.shift() as string));\n }\n }\n } catch (histErr: any) {\n // History failure KHÔNG chặn ghi chính — nhưng không âm thầm: log rõ\n console.warn('[FileSystemCurriculumAdapter] version history snapshot failed:', histErr?.message || histErr);\n }\n }\n\n fs.writeFileSync(targetPath, content, 'utf-8');\n\n // Also auto-sync to lessons/ directory if this is a lesson artifact (e.g. _content/U01/SLIDE_U01_M01_L01.md)\n const filename = path.basename(relPath);\n const match = filename.match(/(LESSON|ACT|QUIZ|SLIDE|GUIDE|HANDOUT|WKS|EXT)_(U\\d+_M\\d+_L\\d+)\\.md/i);\n if (match) {\n const lessonId = match[2].toUpperCase();\n const lessonsDir = path.join(projectDir, 'lessons', lessonId);\n if (!fs.existsSync(lessonsDir)) {\n fs.mkdirSync(lessonsDir, { recursive: true });\n }\n fs.writeFileSync(path.join(lessonsDir, filename), content, 'utf-8');\n\n // Also sync to legacy _content/U01_M01_L01/ folder if it exists\n const legacyContentDir = path.join(projectDir, '_content', lessonId);\n if (fs.existsSync(legacyContentDir)) {\n fs.writeFileSync(path.join(legacyContentDir, filename), content, 'utf-8');\n }\n }\n }\n\n async listLessons(projectId: string): Promise<LessonArtifactSummary[]> {\n const lessonsDir = path.join(this.getProjectDir(projectId), 'lessons');\n if (!fs.existsSync(lessonsDir)) return [];\n\n const lessonFolders = fs.readdirSync(lessonsDir).filter(f => !f.startsWith('.'));\n return lessonFolders.map(folder => {\n const lDir = path.join(lessonsDir, folder);\n const isDir = fs.statSync(lDir).isDirectory();\n if (!isDir) {\n return {\n lessonId: folder,\n artifactsCount: 0,\n isComplete: false,\n artifacts: []\n };\n }\n\n const artifacts = fs.readdirSync(lDir).filter(f => !f.startsWith('.'));\n return {\n lessonId: folder,\n artifactsCount: artifacts.length,\n isComplete: artifacts.length >= 4,\n artifacts\n };\n });\n }\n\n async getProjectStatus(projectId: string): Promise<ProjectStatusReport> {\n const sotList = await this.listSotDocuments(projectId);\n const lessons = await this.listLessons(projectId);\n\n const completedCount = lessons.filter(l => l.isComplete).length;\n const totalLessons = lessons.length || 4;\n const progressPercent = Math.round((completedCount / totalLessons) * 100);\n\n const sotTable = sotList.map(doc => `| \\`${doc.filename}\\` | ${doc.exists ? '✅ Sẵn sàng' : '❌ Chưa có'} |`).join('\\n');\n const lessonTable = lessons.length > 0 \n ? lessons.map(l => `| **${l.lessonId}** | ${l.artifactsCount}/4 Artifacts | ${l.isComplete ? '✅ Hoàn tất' : '⏳ Đang tạo sinh'} | ${l.artifacts.join(', ') || '-'} |`).join('\\n')\n : '| Chưa có bài học nào trên đĩa cứng | 0/4 | ⏳ Chờ chạy | - |';\n\n const rawMarkdownReport = `## 📊 BÁO CÁO TRẠNG THÁI DỰ ÁN: \\`${projectId.toUpperCase()}\\`\n\n### 1. Nền tảng Tài liệu (SOT Readiness)\n| Tài liệu SOT | Trạng thái |\n|---|:---:|\n${sotTable}\n\n### 2. Danh mục Bài học & Học liệu (Lessons & Artifacts Matrix)\n| Mã bài học | Số lượng Artifact | Trạng thái | Danh sách Artifact đã tạo |\n|---|:---:|:---:|---|\n${lessonTable}\n\n**Tiến độ tổng thể:** ${completedCount}/${totalLessons} bài học (${progressPercent}%)\n\n### 3. Đề xuất Hành động Tiếp theo:\n- Sử dụng lệnh \\`/create-lesson <id>\\` để tạo sinh các bài học tiếp theo trong pipeline.\n- Sử dụng lệnh \\`/audit-quality\\` để chạy kiểm thử tiêu chuẩn Bloom và Alignment Matrix.`;\n\n return {\n projectId,\n sotReadiness: sotList,\n lessons,\n completedCount,\n totalLessons,\n progressPercent,\n rawMarkdownReport\n };\n }\n\n async getPipelineState(projectId: string): Promise<PipelineState> {\n const projectDir = this.getProjectDir(projectId);\n const stateFile = path.join(projectDir, '_pipeline', 'state.json');\n\n if (fs.existsSync(stateFile)) {\n try {\n const raw = fs.readFileSync(stateFile, 'utf-8');\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === 'object' && parsed.tasks) {\n return parsed as PipelineState;\n }\n } catch (err) {\n console.warn(`[FileSystemCurriculumAdapter] Error reading pipeline state for ${projectId}:`, err);\n }\n }\n\n // Default empty pipeline state\n return {\n projectId,\n updatedAt: new Date().toISOString(),\n tasks: {}\n };\n }\n\n async savePipelineState(projectId: string, state: PipelineState): Promise<void> {\n const projectDir = this.getProjectDir(projectId);\n const pipelineDir = path.join(projectDir, '_pipeline');\n\n if (!fs.existsSync(pipelineDir)) {\n fs.mkdirSync(pipelineDir, { recursive: true });\n }\n\n const stateFile = path.join(pipelineDir, 'state.json');\n state.updatedAt = new Date().toISOString();\n fs.writeFileSync(stateFile, JSON.stringify(state, null, 2), 'utf-8');\n }\n\n async updateArtifactState(\n projectId: string,\n taskId: string,\n artifactType: string,\n update: Partial<ArtifactLifecycleInfo>\n ): Promise<PipelineState> {\n const current = await this.getPipelineState(projectId);\n if (!current.tasks[taskId]) {\n current.tasks[taskId] = {};\n }\n\n const existingInfo = current.tasks[taskId][artifactType] || {\n state: 'pending',\n };\n\n current.tasks[taskId][artifactType] = {\n ...existingInfo,\n ...update,\n };\n\n await this.savePipelineState(projectId, current);\n return current;\n }\n}\n","import { createClient, type SupabaseClient } from '@supabase/supabase-js';\nimport type { MilestoneCurriculumBundle } from '../pipeline';\nimport type { \n ICurriculumStorage, \n SotDocument, \n LessonArtifactSummary, \n ProjectStatusReport \n} from './types';\nimport { STANDARD_SOT_FILES } from './fileSystemCurriculumAdapter';\n\nexport interface SupabaseStorageConfig {\n supabaseUrl?: string;\n supabaseServiceRoleKey?: string;\n bucketName?: string;\n client?: SupabaseClient;\n}\n\n/**\n * Supabase Curriculum Adapter — Syncs Markdown artifacts to Storage & Database\n * Implements ICurriculumStorage for multi-tenant Cloud deployment (Vercel, Netlify, Cloudflare, etc.).\n */\nexport class SupabaseCurriculumAdapter implements ICurriculumStorage {\n private client: SupabaseClient;\n private bucketName: string;\n\n constructor(config: SupabaseStorageConfig = {}) {\n this.bucketName = config.bucketName || process.env.SUPABASE_STORAGE_BUCKET || 'course-materials';\n\n if (config.client) {\n this.client = config.client;\n } else {\n const url = config.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL || '';\n const key =\n config.supabaseServiceRoleKey ||\n process.env.SUPABASE_SERVICE_ROLE_KEY ||\n process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ||\n '';\n\n if (!url || !key) {\n throw new Error('Supabase URL or Key is missing in SupabaseCurriculumAdapter');\n }\n\n this.client = createClient(url, key);\n }\n }\n\n async projectExists(projectId: string): Promise<boolean> {\n try {\n const { data, error } = await this.client.storage\n .from(this.bucketName)\n .list(projectId, { limit: 5 });\n return !error && !!data && data.length > 0;\n } catch {\n return false;\n }\n }\n\n async readSotDocument(projectId: string, filename: string): Promise<string | null> {\n const paths = [\n `${projectId}/_sot/${filename}`,\n `${projectId}/${filename}`,\n `${projectId}/_designer/${filename}`,\n `${projectId}/_analyst/${filename}`\n ];\n for (const p of paths) {\n try {\n const { data, error } = await this.client.storage.from(this.bucketName).download(p);\n if (!error && data) {\n return await data.text();\n }\n } catch {}\n }\n return null;\n }\n\n async listSotDocuments(projectId: string): Promise<SotDocument[]> {\n const results: SotDocument[] = [];\n for (const filename of STANDARD_SOT_FILES) {\n const content = await this.readSotDocument(projectId, filename);\n results.push({\n name: filename.replace('.md', '').replace(/_/g, ' '),\n filename,\n exists: !!content,\n content: content || undefined,\n sizeBytes: content ? content.length : 0\n });\n }\n return results;\n }\n\n async readArtifact(projectId: string, relPathOrIdentifier: string): Promise<string | null> {\n const cleanPath = relPathOrIdentifier.replace(/^\\//, '');\n\n // 1. Direct path lookup attempts\n const possiblePaths = [\n `${projectId}/${cleanPath}`,\n `${projectId}/_sot/${cleanPath}`,\n `${projectId}/_content/${cleanPath}`,\n `${projectId}/lessons/${cleanPath}`,\n `${projectId}/_sot/${cleanPath.split('/').pop()}`,\n `${projectId}/lessons/${cleanPath.split('/').pop()}`,\n ];\n\n for (const p of possiblePaths) {\n try {\n const { data, error } = await this.client.storage.from(this.bucketName).download(p);\n if (!error && data) {\n return await data.text();\n }\n } catch {}\n }\n\n // 2. Intelligent Identifier Resolution (e.g. \"U01_M01_L01 — Giáo án 5E\" or \"U01_M01_L01\")\n const lessonMatch = relPathOrIdentifier.match(/U\\d+_M\\d+_L\\d+/i);\n if (lessonMatch) {\n const lessonId = lessonMatch[0].toUpperCase();\n const unitCode = lessonId.split('_')[0] || 'U01';\n const lower = relPathOrIdentifier.toLowerCase();\n\n let artifactPrefix = 'LESSON';\n if (lower.includes('act') || lower.includes('lab') || lower.includes('thực hành')) {\n artifactPrefix = 'ACT';\n } else if (lower.includes('quiz') || lower.includes('trắc nghiệm') || lower.includes('đánh giá')) {\n artifactPrefix = 'QUIZ';\n } else if (lower.includes('slide') || lower.includes('bài giảng') || lower.includes('trình chiếu')) {\n artifactPrefix = 'SLIDE';\n } else if (lower.includes('guide') || lower.includes('hướng dẫn')) {\n artifactPrefix = 'GUIDE';\n }\n\n const candidatePaths = [\n `${projectId}/_content/${unitCode}/${artifactPrefix}_${lessonId}.md`,\n `${projectId}/lessons/${lessonId}/${artifactPrefix}_${lessonId}.md`,\n `${projectId}/${artifactPrefix}_${lessonId}.md`,\n ];\n\n for (const p of candidatePaths) {\n try {\n const { data, error } = await this.client.storage.from(this.bucketName).download(p);\n if (!error && data) {\n return await data.text();\n }\n } catch {}\n }\n }\n\n return null;\n }\n\n async saveArtifact(projectId: string, relPath: string, content: string): Promise<void> {\n const fullPath = `${projectId}/${relPath.replace(/^\\//, '')}`;\n const { error } = await this.client.storage\n .from(this.bucketName)\n .upload(fullPath, Buffer.from(content, 'utf-8'), {\n contentType: 'text/markdown',\n upsert: true,\n });\n\n if (error) {\n throw new Error(`Failed to upload artifact to Supabase Storage: ${error.message}`);\n }\n\n // Optional DB Upsert for fast indexed searching if artifacts table exists\n try {\n await this.client.from('curriculum_artifacts').upsert({\n project_id: projectId,\n rel_path: relPath,\n content: content,\n updated_at: new Date().toISOString(),\n }, { onConflict: 'project_id,rel_path' });\n } catch {\n // Ignore if table not yet migrated\n }\n }\n\n async listLessons(projectId: string): Promise<LessonArtifactSummary[]> {\n const summaries: LessonArtifactSummary[] = [];\n const processedLessons = new Set<string>();\n\n try {\n // 1. Scan _content/ folders (e.g. _content/U01/, _content/U02/)\n const { data: unitDirs } = await this.client.storage\n .from(this.bucketName)\n .list(`${projectId}/_content`);\n\n if (unitDirs) {\n for (const u of unitDirs) {\n const { data: files } = await this.client.storage\n .from(this.bucketName)\n .list(`${projectId}/_content/${u.name}`);\n\n if (files) {\n const lessonMap: Record<string, string[]> = {};\n files.forEach(f => {\n const m = f.name.match(/U\\d+_M\\d+_L\\d+/i);\n if (m) {\n const lid = m[0].toUpperCase();\n lessonMap[lid] = lessonMap[lid] || [];\n lessonMap[lid].push(f.name);\n }\n });\n\n for (const [lid, arts] of Object.entries(lessonMap)) {\n if (!processedLessons.has(lid)) {\n processedLessons.add(lid);\n summaries.push({\n lessonId: lid,\n artifactsCount: arts.length,\n isComplete: arts.length >= 4,\n artifacts: arts,\n });\n }\n }\n }\n }\n }\n\n // 2. Scan lessons/ folders (legacy / alternate structure)\n const { data: lessonDirs } = await this.client.storage\n .from(this.bucketName)\n .list(`${projectId}/lessons`);\n\n if (lessonDirs) {\n for (const dir of lessonDirs) {\n if (!processedLessons.has(dir.name)) {\n const { data: files } = await this.client.storage\n .from(this.bucketName)\n .list(`${projectId}/lessons/${dir.name}`);\n \n const artifacts = (files || []).map(f => f.name).filter(n => !n.startsWith('.'));\n processedLessons.add(dir.name);\n summaries.push({\n lessonId: dir.name,\n artifactsCount: artifacts.length,\n isComplete: artifacts.length >= 4,\n artifacts\n });\n }\n }\n }\n } catch {\n // Fallback\n }\n\n return summaries;\n }\n\n async getProjectStatus(projectId: string): Promise<ProjectStatusReport> {\n const sotList = await this.listSotDocuments(projectId);\n const lessons = await this.listLessons(projectId);\n\n const completedCount = lessons.filter(l => l.isComplete).length;\n const totalLessons = lessons.length || 4;\n const progressPercent = Math.round((completedCount / totalLessons) * 100);\n\n const sotTable = sotList.map(doc => `| \\`${doc.filename}\\` | ${doc.exists ? '✅ Sẵn sàng' : '❌ Chưa có'} |`).join('\\n');\n const lessonTable = lessons.length > 0 \n ? lessons.map(l => `| **${l.lessonId}** | ${l.artifactsCount}/4 Artifacts | ${l.isComplete ? '✅ Hoàn tất' : '⏳ Đang tạo sinh'} | ${l.artifacts.join(', ') || '-'} |`).join('\\n')\n : '| Chưa có bài học nào trên cloud storage | 0/4 | ⏳ Chờ chạy | - |';\n\n const rawMarkdownReport = `## 📊 BÁO CÁO TRẠNG THÁI DỰ ÁN (CLOUD): \\`${projectId.toUpperCase()}\\`\n\n### 1. Nền tảng Tài liệu (SOT Readiness)\n| Tài liệu SOT | Trạng thái |\n|---|:---:|\n${sotTable}\n\n### 2. Danh mục Bài học & Học liệu (Lessons & Artifacts Matrix)\n| Mã bài học | Số lượng Artifact | Trạng thái | Danh sách Artifact đã tạo |\n|---|:---:|:---:|---|\n${lessonTable}\n\n**Tiến độ tổng thể:** ${completedCount}/${totalLessons} bài học (${progressPercent}%)`;\n\n return {\n projectId,\n sotReadiness: sotList,\n lessons,\n completedCount,\n totalLessons,\n progressPercent,\n rawMarkdownReport\n };\n }\n\n /**\n * Uploads a complete milestone bundle (Markdown files) to Supabase Storage\n */\n async uploadMilestoneBundle(\n projectSlug: string,\n bundle: MilestoneCurriculumBundle\n ): Promise<{ lessonUrl?: string; activityUrl?: string; handoutUrl?: string }> {\n const basePath = `${projectSlug}/${bundle.milestoneId}`;\n\n const uploads = [\n {\n path: `${basePath}/LESSON.md`,\n content: bundle.lessonMarkdown,\n type: 'text/markdown',\n },\n {\n path: `${basePath}/ACT.md`,\n content: bundle.activityMarkdown,\n type: 'text/markdown',\n },\n {\n path: `${basePath}/HANDOUT.md`,\n content: bundle.handoutMarkdown,\n type: 'text/markdown',\n },\n ];\n\n const results: Record<string, string> = {};\n\n for (const item of uploads) {\n const { data, error } = await this.client.storage\n .from(this.bucketName)\n .upload(item.path, Buffer.from(item.content, 'utf-8'), {\n contentType: item.type,\n upsert: true,\n });\n\n if (!error && data) {\n const { data: publicUrlData } = this.client.storage.from(this.bucketName).getPublicUrl(item.path);\n results[item.path] = publicUrlData.publicUrl;\n }\n }\n\n return {\n lessonUrl: results[`${basePath}/LESSON.md`],\n activityUrl: results[`${basePath}/ACT.md`],\n handoutUrl: results[`${basePath}/HANDOUT.md`],\n };\n }\n\n async getPipelineState(projectId: string): Promise<import('./types').PipelineState> {\n const p = `${projectId}/_pipeline/state.json`;\n try {\n const { data, error } = await this.client.storage.from(this.bucketName).download(p);\n if (!error && data) {\n const text = await data.text();\n return JSON.parse(text);\n }\n } catch {}\n\n return {\n projectId,\n updatedAt: new Date().toISOString(),\n tasks: {}\n };\n }\n\n async savePipelineState(projectId: string, state: import('./types').PipelineState): Promise<void> {\n const p = `${projectId}/_pipeline/state.json`;\n state.updatedAt = new Date().toISOString();\n await this.client.storage.from(this.bucketName).upload(p, Buffer.from(JSON.stringify(state, null, 2), 'utf-8'), {\n contentType: 'application/json',\n upsert: true,\n });\n }\n\n async updateArtifactState(\n projectId: string,\n taskId: string,\n artifactType: string,\n update: Partial<import('./types').ArtifactLifecycleInfo>\n ): Promise<import('./types').PipelineState> {\n const current = await this.getPipelineState(projectId);\n if (!current.tasks[taskId]) {\n current.tasks[taskId] = {};\n }\n current.tasks[taskId][artifactType] = {\n ...(current.tasks[taskId][artifactType] || { state: 'pending' }),\n ...update,\n };\n await this.savePipelineState(projectId, current);\n return current;\n }\n}\n","import type { ICurriculumStorage } from './types';\nimport { FileSystemCurriculumAdapter, FileSystemStorageOptions } from './fileSystemCurriculumAdapter';\nimport { SupabaseCurriculumAdapter, SupabaseStorageConfig } from './supabaseCurriculumAdapter';\n\nexport interface StorageFactoryOptions {\n provider?: 'filesystem' | 'supabase' | 'auto';\n fileSystemOptions?: FileSystemStorageOptions;\n supabaseConfig?: SupabaseStorageConfig;\n}\n\n/**\n * Creates and returns the appropriate ICurriculumStorage instance based on environment or explicit config.\n */\nexport function createCurriculumStorage(options: StorageFactoryOptions = {}): ICurriculumStorage {\n const provider = options.provider || process.env.CURRICULUM_STORAGE_PROVIDER || 'auto';\n\n if (provider === 'supabase') {\n return new SupabaseCurriculumAdapter(options.supabaseConfig);\n }\n\n if (provider === 'auto') {\n const hasSupabase = Boolean(\n (process.env.SUPABASE_URL || process.env.NEXT_PUBLIC_SUPABASE_URL) &&\n (process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) &&\n process.env.STORAGE_USE_SUPABASE === 'true'\n );\n\n if (hasSupabase) {\n try {\n return new SupabaseCurriculumAdapter(options.supabaseConfig);\n } catch (e) {\n console.warn('⚠️ Falling back to FileSystemCurriculumAdapter due to Supabase initialization error:', e);\n }\n }\n }\n\n return new FileSystemCurriculumAdapter(options.fileSystemOptions);\n}\n","import type { ICurriculumStorage, ProjectStatusReport, SmartResumeContext, QualityAuditReport } from '../storage/types';\n\n/**\n * Service to generate high-level status, readiness reports, and resume guidance.\n */\nexport async function getProjectStatusReport(\n storage: ICurriculumStorage,\n projectId: string\n): Promise<ProjectStatusReport> {\n return storage.getProjectStatus(projectId);\n}\n\nexport async function getSmartResumeContext(\n storage: ICurriculumStorage,\n projectId: string\n): Promise<SmartResumeContext> {\n const status = await storage.getProjectStatus(projectId);\n const nextLesson = status.lessons.find(l => !l.isComplete);\n\n const nextLessonId = nextLesson ? nextLesson.lessonId : 'U01_M01_L01';\n const recommendedAction = nextLesson \n ? `Bấm **Khởi chạy** trên bảng Task hoặc dùng lệnh \\`/create-lesson ${nextLessonId}\\` để sinh bộ 4 học liệu.`\n : `Tất cả bài học đã hoàn thành (${status.completedCount}/${status.totalLessons}). Chuyển sang Phase 04 Xuất bản!`;\n\n const rawMarkdownReport = `## 🧭 SMART CONTEXT RESUME: \\`${projectId.toUpperCase()}\\`\n- **Mã dự án:** \\`${projectId}\\`\n- **Vị trí hiện tại:** Phase 03 — Sản xuất Học liệu (Task Pipeline)\n- **Tiến độ:** ${status.completedCount}/${status.totalLessons} bài học (${status.progressPercent}%)\n- **Bài học kế tiếp cần xử lý:** \\`${nextLessonId}\\`\n- **Hành động đề xuất:** ${recommendedAction}`;\n\n return {\n projectId,\n currentPhase: status.progressPercent >= 100 ? 4 : 3,\n nextLessonId,\n recommendedAction,\n rawMarkdownReport\n };\n}\n\n/**\n * Dynamically resolves the required artifact scope from SOT (PROJECT_BRIEF.md or CURRICULUM_FRAMEWORK.md)\n */\nexport async function getProjectArtifactScope(\n storage: ICurriculumStorage,\n projectId: string\n): Promise<string[]> {\n const brief = (await storage.readSotDocument(projectId, 'PROJECT_BRIEF.md')) || '';\n const framework = (await storage.readSotDocument(projectId, 'CURRICULUM_FRAMEWORK.md')) || '';\n \n const match = brief.match(/Artifact Scope:\\s*([^\\n\\r]+)/i) || \n brief.match(/artifact_scope:\\s*\\[?([^\\n\\r\\]]+)\\]?/i) ||\n framework.match(/Artifact Scope:\\s*([^\\n\\r]+)/i);\n\n if (match && match[1]) {\n const raw = match[1].replace(/[\\[\\]'\"`]/g, '');\n const tokens = raw.split(/[,|\\s]+/).map(s => s.trim().toUpperCase()).filter(Boolean);\n const valid = tokens.filter(t => ['LESSON', 'ACT', 'QUIZ', 'SLIDE', 'GUIDE', 'HANDOUT', 'WKS', 'EXT', 'CODE', 'CODE_LAB', 'RUBRIC'].includes(t));\n if (valid.length > 0) {\n if (!valid.includes('LESSON')) valid.unshift('LESSON');\n return Array.from(new Set(valid));\n }\n }\n\n return ['LESSON', 'ACT', 'QUIZ', 'SLIDE'];\n}\n\nexport async function auditQualityReport(\n storage: ICurriculumStorage,\n projectId: string\n): Promise<QualityAuditReport> {\n const status = await storage.getProjectStatus(projectId);\n const pipelineState = await storage.getPipelineState(projectId);\n const sotReady = status.sotReadiness.every(s => s.exists);\n const lessons = status.lessons;\n const artifactScope = await getProjectArtifactScope(storage, projectId);\n\n let pedagogy5ECount = 0;\n let bloomPassCount = 0;\n let syntaxExecutableCount = 0;\n let scopeCompletenessCount = 0;\n const details: string[] = [];\n\n for (const l of lessons) {\n const lid = l.lessonId;\n const unitCode = lid.split('_')[0] || 'U01';\n\n // 1. Read Master LESSON\n const lessonContent = (await storage.readArtifact(projectId, `_content/${unitCode}/LESSON_${lid}.md`)) || \n (await storage.readArtifact(projectId, `lessons/${lid}/LESSON_${lid}.md`)) || '';\n\n // Pedagogy structure check (5E or EDP)\n const has5E = /(?:ENGAGE|EXPLORE|EXPLAIN|ELABORATE|EVALUATE)/i.test(lessonContent);\n const hasEDP = /(?:ASK|IMAGINE|PLAN|CREATE|TEST|IMPROVE)/i.test(lessonContent);\n if (has5E || hasEDP) {\n pedagogy5ECount++;\n }\n\n // Bloom alignment check\n const hasBloom = /(?:Bloom|Apply|Evaluate|Analyze|Understand|Remember|Create)/i.test(lessonContent) &&\n /(?:Objective|Mục tiêu|LO1|LO2)/i.test(lessonContent);\n if (hasBloom) {\n bloomPassCount++;\n }\n\n // 2. Read all other declared artifacts in SOT artifactScope dynamically\n let allScopeArtifactsPresent = true;\n for (const artType of artifactScope) {\n if (artType === 'LESSON') continue;\n const artContent = (await storage.readArtifact(projectId, `_content/${unitCode}/${artType}_${lid}.md`)) || \n (await storage.readArtifact(projectId, `lessons/${lid}/${artType}_${lid}.md`)) || '';\n \n if (!artContent) {\n allScopeArtifactsPresent = false;\n } else {\n if (artType === 'ACT' || artType === 'CODE' || artType === 'CODE_LAB') {\n if (artContent.includes('```')) {\n syntaxExecutableCount++;\n }\n }\n }\n }\n\n if (allScopeArtifactsPresent && lessonContent) {\n scopeCompletenessCount++;\n }\n }\n\n const total = lessons.length || 1;\n const pedagogy5EPass = pedagogy5ECount >= total;\n const bloomAlignmentPass = bloomPassCount >= total;\n const strictConcurrencyPass = syntaxExecutableCount >= total;\n const alignmentMatrixPass = scopeCompletenessCount >= total;\n\n let computedScore = 0;\n if (sotReady) computedScore += 20;\n computedScore += Math.round((pedagogy5ECount / total) * 20);\n computedScore += Math.round((bloomPassCount / total) * 20);\n computedScore += Math.round((Math.min(syntaxExecutableCount, total) / total) * 20);\n computedScore += Math.round((scopeCompletenessCount / total) * 20);\n\n if (sotReady) {\n details.push('✅ Nền tảng SOT (7/7 tài liệu) sẵn sàng.');\n } else {\n details.push('⚠️ Cần hoàn thiện đầy đủ tài liệu SOT cơ sở.');\n }\n\n details.push(`🎯 Phạm vi học liệu theo SOT (Artifact Scope): [${artifactScope.join(', ')}].`);\n\n if (pedagogy5EPass) {\n details.push(`✅ Mô hình sư phạm 5E/EDP: Đạt chuẩn (${pedagogy5ECount}/${total} bài học).`);\n } else {\n details.push(`⚠️ Cần chuẩn hóa cấu trúc 5E/EDP (${pedagogy5ECount}/${total} bài học).`);\n }\n\n if (bloomAlignmentPass) {\n details.push(`✅ Thang đo Bloom & Chuẩn đầu ra: Hoàn thiện (${bloomPassCount}/${total} bài học).`);\n } else {\n details.push(`⚠️ Cần bổ sung ma trận Bloom mục tiêu (${bloomPassCount}/${total} bài học).`);\n }\n\n details.push(`✅ Độ phủ đầy đủ các học liệu trong Artifact Scope: ${scopeCompletenessCount}/${total} bài học.`);\n\n const rawMarkdownReport = `## 🛡️ BÁO CÁO KIỂM ĐỊNH CHẤT LƯỢNG (QUALITY AUDIT): \\`${projectId.toUpperCase()}\\`\n- **Điểm thẩm định chất lượng:** **${computedScore}/100**\n- **Trạng thái SOT:** ${sotReady ? '✅ 7/7 File SOT hoàn tất' : '⚠️ Cần bổ sung tài liệu SOT thiếu'}.\n- **Phạm vi học liệu (SOT Artifact Scope):** \\`${artifactScope.join(', ')}\\`\n- **Cấu trúc Sư phạm (5E / EDP):** ${pedagogy5ECount}/${total} bài học đạt chuẩn phân pha.\n- **Thang đo nhận thức Bloom:** ${bloomPassCount}/${total} bài học đạt ma trận mục tiêu.\n- **Mức độ hoàn tất các học liệu vệ tinh:** ${scopeCompletenessCount}/${total} bài học đạt chuẩn đóng gói.\n- **Tiến độ sản xuất:** ${status.completedCount}/${status.totalLessons} bài học đã xuất bản.`;\n\n return {\n projectId,\n pedagogy5EPass,\n bloomAlignmentPass,\n strictConcurrencyPass,\n alignmentMatrixPass,\n score: computedScore,\n details,\n rawMarkdownReport\n };\n}\n","import type { ICurriculumStorage } from '../storage/types';\n\nexport interface BuildContextOptions {\n activeArtifactRelPath?: string;\n maxContentChars?: number;\n}\n\n/**\n * Builds the complete Ground Truth curriculum context for LLM prompt ingestion.\n */\nexport async function buildCurriculumContext(\n storage: ICurriculumStorage,\n projectId: string,\n options: BuildContextOptions = {}\n): Promise<string> {\n const maxChars = options.maxContentChars || 2000;\n let context = `=== BỐI CẢNH DỰ ÁN GIÁO TRÌNH: ${projectId.toUpperCase()} ===\\n\\n`;\n\n // 1. SOT Documents\n context += `## 📚 1. TÀI LIỆU NỀN TẢNG (SOURCE OF TRUTH):\\n`;\n const sotDocs = await storage.listSotDocuments(projectId);\n for (const doc of sotDocs) {\n if (doc.exists) {\n const content = await storage.readSotDocument(projectId, doc.filename);\n if (content) {\n context += `\\n### [TÀI LIỆU: ${doc.filename}]\\n${content.slice(0, maxChars).trim()}\\n`;\n }\n }\n }\n\n // 2. Lessons & Artifacts State\n context += `\\n## 🛠️ 2. DANH MỤC BÀI HỌC VÀ TIẾN ĐỘ TẠO SINH:\\n`;\n const lessons = await storage.listLessons(projectId);\n if (lessons.length > 0) {\n for (const l of lessons) {\n context += `- Bài học **${l.lessonId}**: ${l.artifactsCount}/4 Học liệu (${l.artifacts.join(', ') || 'Chưa tạo'})\\n`;\n }\n } else {\n context += `- Chưa có bài học nào được sinh ra trong hệ thống lưu trữ.\\n`;\n }\n\n // 3. Active Viewing Document\n if (options.activeArtifactRelPath) {\n const viewedContent = await storage.readArtifact(projectId, options.activeArtifactRelPath);\n if (viewedContent) {\n context += `\\n## 👁️ 3. NỘI DUNG CHI TIẾT TÀI LIỆU NGƯỜI DÙNG ĐANG MỞ XEM TRÊN MÀN HÌNH (${options.activeArtifactRelPath}):\\n`;\n context += `> [HỆ THỐNG GHI CHÚ]: Người dùng đang mở xem trực tiếp tài liệu này. Bạn CÓ TOÀN QUYỀN VÀ ĐẦY ĐỦ NỘI DUNG để phân tích, đánh giá, trích dẫn hoặc chỉnh sửa chi tiết từng câu chữ, code snippet, timing, 5E phases trong tài liệu này:\\n\\n`;\n context += `\\`\\`\\`markdown\\n${viewedContent.slice(0, 10000)}\\n\\`\\`\\`\\n`;\n }\n }\n\n return context;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport type { ICurriculumStorage } from '../storage/types';\nimport { runCurriculumAIInference } from '../ai/streamRunner';\nimport { lintCurriculumFramework, type FrameworkLintReport } from './frameworkLinter';\nimport { buildStandardStackMarkdown } from '../standards/standardStackGenerator';\nimport type { FrameworkPack } from '../standards/frameworkPackSchema';\n\nconst __filename = typeof import.meta?.url === 'string' ? fileURLToPath(import.meta.url) : '';\nconst __dirname = __filename ? path.dirname(__filename) : process.cwd();\n\nexport interface ProjectBriefingData {\n projectName?: string;\n topic?: string;\n context?: string;\n language?: string;\n targetAge?: string;\n targetAgeTier?: string;\n courseDuration?: string;\n courseDurationTier?: string;\n hardwarePlatform?: string | string[];\n hardwareReadiness?: string;\n pedagogy?: string;\n depth?: string;\n capstoneTheme?: string;\n exitVision?: string;\n primaryGoal?: string;\n valueAndCertification?: string;\n budgetAndHardwareBOM?: string;\n cognitiveScaffolding?: string;\n differentiationStrategy?: string;\n assessmentStrategy?: string;\n academicBenchmark?: string;\n /** Adopted Framework Packs (Standards Registry) — STANDARD_STACK.md is rendered deterministically from these. */\n standardsPacks?: FrameworkPack[];\n brandingAndTone?: string;\n recommendedToolchain?: string;\n artifactScope?: string[];\n specialRequirements?: string;\n [key: string]: any;\n}\n\n/**\n * Helper to load Markdown Template from docs/refs/templates\n */\nexport function loadSotTemplate(templateFileName: string): string {\n const possiblePaths = [\n path.resolve(__dirname, '../../docs/refs/templates', templateFileName),\n path.resolve(process.cwd(), 'packages/curriculum-kit/docs/refs/templates', templateFileName),\n path.resolve(process.cwd(), '../learnwell-platform/packages/curriculum-kit/docs/refs/templates', templateFileName),\n path.resolve('/Users/tonypham/MEGA/WebApp/WIP/learnwell-platform/packages/curriculum-kit/docs/refs/templates', templateFileName),\n path.resolve('/Users/tonypham/MEGA/ai-platform/learning-artifact-gen-ui/_templates', templateFileName),\n ];\n for (const p of possiblePaths) {\n if (fs.existsSync(p)) {\n try {\n return fs.readFileSync(p, 'utf-8');\n } catch {}\n }\n }\n return '';\n}\n\n/**\n * Service to generate Phase 1 Foundation SOT artifacts (@analyst & @researcher) from Brief input.\n */\nexport async function generatePhase1SotArtifacts(\n storage: ICurriculumStorage,\n projectId: string,\n briefing: ProjectBriefingData,\n onProgress?: (agent: string, step: string) => void\n): Promise<{ learnerProfile: string; projectBrief: string; referencePack: string; standardStack?: string }> {\n const rawHw = Array.isArray(briefing.hardwarePlatform) \n ? briefing.hardwarePlatform.join(', ') \n : (briefing.hardwarePlatform || briefing.hardwareDeployment || briefing.hardwareReadiness || 'Môi trường thực hành tiêu chuẩn');\n const hw = (rawHw.includes('Chưa có') || rawHw.includes('Đã có sẵn') || rawHw.includes('none_budget') || rawHw.includes('lab_ready'))\n ? (briefing.recommendedToolchain || briefing.hardwareDeployment || 'Phần mềm mô phỏng & Kit thực hành tiêu chuẩn')\n : rawHw;\n\n const briefContext = `COURSE BRIEF & SURVEY SPECIFICATIONS:\n- Course Name: ${briefing.projectName || projectId}\n- Technical Topic: ${briefing.topic || briefing.courseDescription || projectId}\n- Detailed Description / Focus: ${briefing.courseDescription || briefing.topic || 'Chương trình đào tạo chuyên sâu'}\n- Domain / Field: ${briefing.domain || 'tech'}\n- Target Age & Grade: ${briefing.targetAge || '12–15 tuổi (THCS)'} (Tier: ${briefing.targetAgeTier || 'secondary'})\n- Course Duration / Total Sessions: ${briefing.courseDuration || '16–24 buổi'} (Tier: ${briefing.courseDurationTier || 'standard'})\n- Pacing Model: ${briefing.lessonPacingModel || '1 Buổi = 1 Bài học độc lập (single_session_1_1)'}\n- Primary Strategic Goal: ${briefing.primaryGoal || 'Bồi dưỡng Kỹ năng Kỹ thuật Chuyên sâu & Ứng dụng Thực chiến'}\n- Core Exit Vision: ${briefing.exitVision || `Học sinh tự tay hoàn thiện sản phẩm ${briefing.capstoneTheme || 'Capstone'}`}\n- Entry Prerequisite / Bridge: ${briefing.entryBridge || 'Bắt đầu từ số 0, dùng hình ảnh trực quan & mã màu'}\n- Hardware Ecosystem & Toolchain: ${hw} (Toolchain: ${briefing.recommendedToolchain || hw})\n- Delivery Mode / Learning Context: ${briefing.context || 'Trung tâm STEM / Trường học'} (${briefing.deliveryMode || 'Offline Lab Hands-on'})\n- Class Dynamic / Kit Ratio: ${briefing.classDynamic || 'Ghép đôi 2 học sinh / 1 bộ kit thực hành'}\n- Pedagogical Model: ${briefing.pedagogy || '5E Instructional Model & Project-Based Learning'}\n- Voice & Tone (Instructor Persona): ${briefing.voiceAndTone || 'Người cố vấn đồng hành (Encouraging Mentor)'}\n- Teacher Role: ${briefing.teacherRole || 'Giảng viên dẫn dắt & Người cố vấn'}\n- Cognitive Depth (Bloom): ${briefing.depth || briefing.cognitiveDepth || 'Apply (Vận dụng) & Create (Sáng tạo)'}\n- Capstone Project Theme: ${briefing.capstoneTheme || 'Dự án kỹ thuật thông minh ứng dụng thực tiễn'}\n- Value & Certification: ${briefing.valueAndCertification || 'Portfolio số + Chứng nhận + Triển lãm Showcase'}\n- Cognitive Scaffolding: ${briefing.cognitiveScaffolding || 'Code skeleton, sơ đồ mã màu chống chập, quy trình gỡ lỗi 4 bước'}\n- Differentiation: ${briefing.differentiationStrategy || 'Thử thách 3 tầng bậc (Cơ bản / Vận dụng / Nâng cao EXT)'}\n- Assessment Strategy: ${briefing.assessmentStrategy || '40% Đánh giá tiến trình + 60% Đồ án Capstone Rubric'}\n- AI Usage Policy: ${briefing.studentAiUsePolicy || 'AI hỗ trợ gỡ lỗi và đồng sáng tạo có kiểm soát'}\n- Safety Risk Level: ${briefing.safetyRiskLevel || 'An toàn cơ bản (Điện áp thấp)'}\n- Homework Policy: ${briefing.homeworkPolicy || 'Thực hành mô phỏng web / Không bắt buộc bài tập về nhà'}\n- Target Output Language: ${briefing.language || 'vi'}`;\n\n // 1. Generate LEARNER_PROFILE.md using LEARNER_PROFILE_template.md\n onProgress?.('@analyst', 'Analyzing target audience profile and authoring standardized LEARNER_PROFILE.md...');\n const learnerProfileTemplate = loadSotTemplate('LEARNER_PROFILE_template.md');\n const learnerProfilePrompt = `You are @analyst (Lead Learner Profile & Educational Needs Analyst in Curriculum OS).\nFill out the following \\`LEARNER_PROFILE.md\\` template strictly based on the course survey specifications:\n\n[COURSE SURVEY DATA]:\n${briefContext}\n\n[TEMPLATE CONTRACT (Fill all slots, preserve exact YAML Frontmatter and ## [REQUIRED] section headers)]:\n${learnerProfileTemplate || `---\nid: \"${projectId.toUpperCase()}-LEARNER-PROFILE\"\ntitle: \"Learner Profile: ${briefing.projectName || projectId}\"\ntype: \"LEARNER_PROFILE\"\nphase: \"P1\"\ndeliverable: \"P1-T1\"\nversion: \"v1.2\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Foundational Info\"\n - \"Entry Level\"\n - \"Learning Context\"\n - \"Client Objectives\"\n---`}\n\nINSTRUCTIONS:\n1. Strictly preserve the frontmatter and section headers.\n2. Fill every placeholder with deep, authentic pedagogical and cognitive profile analysis tailored to this specific age group, topic, and hardware.\n3. Output 100% clean Markdown document directly.`;\n\n const learnerProfile = await runCurriculumAIInference(\n [{ role: 'user', content: learnerProfilePrompt }],\n briefContext\n );\n await storage.saveArtifact(projectId, '_sot/LEARNER_PROFILE.md', learnerProfile);\n\n // 2. Generate PROJECT_BRIEF.md using PROJECT_BRIEF_template.md\n onProgress?.('@analyst', 'Synthesizing project charter and deliverable scope (PROJECT_BRIEF.md)...');\n const projectBriefTemplate = loadSotTemplate('PROJECT_BRIEF_template.md');\n const projectBriefPrompt = `You are @analyst. Fill out the \\`PROJECT_BRIEF.md\\` template for course: ${briefing.projectName || projectId}\n\n[COURSE SURVEY DATA]:\n${briefContext}\n\n[TEMPLATE CONTRACT]:\n${projectBriefTemplate || `---\nid: \"${projectId.toUpperCase()}-PROJECT-BRIEF\"\ntitle: \"Project Brief: ${briefing.projectName || projectId}\"\ntype: \"PROJECT_BRIEF\"\nphase: \"P1\"\ndeliverable: \"P1-T3\"\nversion: \"v1.2\"\ntemplate_contract: \"artifact-template-v1\"\n---`}\n\nINSTRUCTIONS:\n1. Synthesize all survey parameters into a formal project charter.\n2. Detail the 3-Milestone roadmap (Milestone 1 Discovery -> Milestone 2 Implementation -> Milestone 3 Capstone Integration).\n3. Output 100% clean Markdown document directly.`;\n\n const projectBrief = await runCurriculumAIInference(\n [{ role: 'user', content: projectBriefPrompt }],\n learnerProfile\n );\n await storage.saveArtifact(projectId, '_sot/PROJECT_BRIEF.md', projectBrief);\n\n // 3. Generate REFERENCE_PACK.md using REFERENCE_PACK_template.md\n onProgress?.('@researcher', 'Gathering official technical standards and pedagogical references (REFERENCE_PACK.md)...');\n const refPackTemplate = loadSotTemplate('REFERENCE_PACK_template.md');\n \n const isPhysicalHardware = /arduino|esp32|micro:bit|raspberry|stm32|sensor|robot|mạch|vi điều khiển|nhúng|iot|circuit/i.test(hw) ||\n /arduino|esp32|robotics|iot|maker|mạch/i.test(briefing.topic || '') ||\n (briefing.domain === 'tech' && !/web|design|ai thuần|scratch|thuật toán/i.test(briefing.topic || ''));\n\n const hwGuidance = isPhysicalHardware\n ? `2. Detail the exact hardware pinouts, voltage levels, communication protocols (I2C/SPI/UART), sensor specs, and compiler requirements for ${hw}.`\n : `2. Detail the development environment, required software toolchains, libraries/frameworks, runtime versions, and system requirements for ${hw}.`;\n\n const refPackPrompt = `You are @researcher (Lead Technical Research & Standardization Specialist).\nFill out the \\`REFERENCE_PACK.md\\` template by conducting rigorous grounding research for topic: ${briefing.topic || briefing.projectName || projectId}\n\n[COURSE SURVEY DATA]:\n${briefContext}\n\n[TEMPLATE CONTRACT]:\n${refPackTemplate || `---\nid: \"${projectId.toUpperCase()}-REFERENCE-PACK\"\ntitle: \"Reference Pack: ${briefing.projectName || projectId}\"\ntype: \"REFERENCE_PACK\"\nphase: \"P1\"\ndeliverable: \"P1-T2\"\nversion: \"v1.2\"\n---`}\n\nINSTRUCTIONS:\n1. Cite authentic, authoritative standards (CSTA K-12 CS, ACM/IEEE CS2023, official language/hardware documentation, RFCs, safety guidelines).\n${hwGuidance}\n3. Summarize pedagogical foundations (5E Model, Bruner EIS Scaffolding, Sweller Cognitive Load Theory).\n4. Output 100% clean Markdown document directly.`;\n\n const referencePack = await runCurriculumAIInference(\n [{ role: 'user', content: refPackPrompt }],\n `${briefContext}\\n\\n${learnerProfile}`\n );\n await storage.saveArtifact(projectId, '_sot/REFERENCE_PACK.md', referencePack);\n\n // Phase 2: STANDARD_STACK.md is rendered DETERMINISTICALLY from the Standards Registry packs\n // (verbatim statements + canonical IDs) instead of asking the LLM to cite standards from memory.\n const standardStack = buildStandardStackMarkdown({\n projectId,\n packs: briefing.standardsPacks ?? [],\n language: briefing.language || 'vi',\n });\n await storage.saveArtifact(projectId, '_sot/STANDARD_STACK.md', standardStack);\n\n return { learnerProfile, projectBrief, referencePack, standardStack };\n}\n\n/**\n * Extracts essential required sections from SOT documents to avoid arbitrary truncation\n */\nfunction preserveEssentialSotSections(markdown: string, fallbackMaxLength: number = 8000): string {\n if (!markdown || markdown.length <= fallbackMaxLength) return markdown;\n\n const sections = markdown.split(/\\n(?=##\\s+)/);\n const preservedSections = sections.filter(s => s.includes('[REQUIRED]') || s.startsWith('---') || s.startsWith('# '));\n \n if (preservedSections.length > 0) {\n const combined = preservedSections.join('\\n\\n');\n if (combined.length <= fallbackMaxLength) return combined;\n return combined.slice(0, fallbackMaxLength);\n }\n\n return markdown.slice(0, fallbackMaxLength);\n}\n\n/**\n * Service to generate Phase 2 Architecture SOT artifacts (@designer) from approved Foundation.\n */\nexport async function generatePhase2SotArtifacts(\n storage: ICurriculumStorage,\n projectId: string,\n briefing: ProjectBriefingData,\n onProgress?: (agent: string, step: string) => void\n): Promise<{ framework: string; styleGuide: string; artDirection: string; projectStatus: string }> {\n // Read Foundation SOT files\n const learnerProfile = (await storage.readSotDocument(projectId, 'LEARNER_PROFILE.md')) || '';\n const projectBrief = (await storage.readSotDocument(projectId, 'PROJECT_BRIEF.md')) || '';\n const refPack = (await storage.readSotDocument(projectId, 'REFERENCE_PACK.md')) || '';\n\n const foundationContext = `APPROVED FOUNDATION SOT SPECIFICATIONS (GATE 1 APPROVED):\n[LEARNER_PROFILE.md]:\n${preserveEssentialSotSections(learnerProfile, 6000)}\n\n[PROJECT_BRIEF.md]:\n${preserveEssentialSotSections(projectBrief, 4000)}\n\n[REFERENCE_PACK.md]:\n${preserveEssentialSotSections(refPack, 4000)}`;\n\n const pacing = briefing.lessonPacingModel || 'opt_single_session_1_1';\n const isSingleSession = pacing.includes('single_session') || pacing.includes('1_1') || pacing.includes('1 Buổi = 1 Bài') || (!pacing.includes('thematic') && !pacing.includes('Chuyên đề') && !pacing.includes('hybrid') && !pacing.includes('Kết hợp'));\n const isThematic = pacing.includes('thematic') || pacing.includes('Chuyên đề') || pacing.includes('2–3 Buổi') || pacing.includes('2-3 Buổi');\n\n const pacingInstructions = isSingleSession\n ? `PACING DIRECTIVE (Mô hình 1 Buổi = 1 Bài học độc lập):\n- Every single session (60–90 minutes) MUST correspond to exactly 1 independent Lesson artifact (LESSON_01, LESSON_02, ... up to the total session count).\n- For example, if courseDuration is 16 sessions: generate exactly 16 discrete Lesson rows (LESSON_01 to LESSON_16) across 3-4 Units.\n- Each lesson MUST have its own clear single-session objective, hands-on lab, and exit ticket checkpoint so students who attend weekly/non-consecutively can complete each session self-contained.`\n : isThematic\n ? `PACING DIRECTIVE (Mô hình Chuyên đề lớn 2–3 buổi/bài):\n- Group sessions into 6–8 comprehensive thematic modules/lessons where each lesson is an overarching 5E/EDP cycle lasting 2–3 sessions.\n- In 'Standard Lesson Format' and Scope & Sequence, explicitly detail the multi-session breakdown (e.g. Session 1: Engage + Explore, Session 2: Explain + Elaborate, Session 3: Evaluate + Mini-Showcase).\n- Provide clear guidance on session cut-off points and recap protocols for classes with non-consecutive weekly schedules.`\n : `PACING DIRECTIVE (Mô hình Kết hợp Hybrid):\n- Foundational skill lessons are 1 session each; Capstone integration modules span 2–3 sessions each.`;\n\n // 1. Generate CURRICULUM_FRAMEWORK.md using CURRICULUM_FRAMEWORK_template.md\n onProgress?.('@designer', 'Designing Curriculum Framework (CURRICULUM_FRAMEWORK.md) with Unit/Module breakdown and Scope & Sequence...');\n const frameworkTemplate = loadSotTemplate('CURRICULUM_FRAMEWORK_template.md');\n const frameworkPrompt = `You are @designer (Lead Curriculum Architect).\nFill out the \\`CURRICULUM_FRAMEWORK.md\\` template for course: ${briefing.projectName || projectId}\n\n[COURSE SPECIFICATIONS & PACING]:\n- Course Name: ${briefing.projectName || projectId}\n- Duration / Sessions: ${briefing.courseDuration || '16–24 buổi'}\n- Target Audience: ${briefing.targetAge || '12–15 tuổi'}\n- Hardware / Platform: ${Array.isArray(briefing.hardwarePlatform) ? briefing.hardwarePlatform.join(', ') : (briefing.hardwarePlatform || 'Tiêu chuẩn')}\n- Capstone Project: ${briefing.capstoneTheme || 'Dự án thực tế'}\n- Pacing Model: ${isSingleSession ? '1 Buổi = 1 Bài học độc lập' : isThematic ? 'Chuyên đề lớn 2–3 buổi/bài' : 'Mô hình Kết hợp'}\n\n${pacingInstructions}\n\n[TEMPLATE CONTRACT]:\n${frameworkTemplate || `---\nid: \"${projectId.toUpperCase()}-CURRICULUM-FRAMEWORK\"\ntitle: \"Curriculum Framework: ${briefing.projectName || projectId}\"\ntype: \"CURRICULUM_FRAMEWORK\"\nphase: \"P2\"\ndeliverable: \"P2-T1\"\nversion: \"v1.2\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Course Overview\"\n - \"Global Learning Objectives\"\n - \"Structural Hierarchy (Unit & Module)\"\n - \"Scope & Sequence (Detailed Roadmap)\"\n - \"Standard Lesson Format\"\n---`}\n\nCRITICAL INSTRUCTIONS FOR ROADMAP & SIZING:\n1. The \\`## [REQUIRED] Structural Hierarchy (Unit & Module)\\` and \\`## [REQUIRED] Scope & Sequence (Detailed Roadmap)\\` MUST strictly adhere to the PACING DIRECTIVE above!\n - In the Scope & Sequence table, write out every single lesson row (01, 02, 03, ...) with unique Title, Key Concept, Prerequisites, and Bloom taxonomy level. Do NOT truncate with '...'.\n2. Fill Global Learning Objectives with measurable Bloom action verbs.\n3. In \\`## [REQUIRED] Standard Lesson Format\\`, explicitly define the session structure, timing breakdown (Warm-up, Theory, Lab, Exit Ticket), and resumption/recap protocol between sessions.\n4. Output 100% clean Markdown document directly.`;\n\n const parseExpectedSessions = (duration?: string): number | undefined => {\n if (!duration) return undefined;\n const m = duration.match(/(\\d{1,3})\\s*(?:-|–|to|đến)?\\s*(\\d{1,3})?\\s*(?:buổi|session|buổi)/i);\n if (!m) return undefined;\n // Lấy TRẦN của khoảng (16-24 → 16): bắt buộc đủ số dòng, không để AI viết ít rồi gọi là xong\n return m[2] ? parseInt(m[1] as string, 10) : parseInt(m[1], 10);\n };\n const expectedSessions = parseExpectedSessions(briefing.courseDuration);\n\n const lintFrameworkOrFail = async (draft: string, attempt: number): Promise<{ content: string; report: FrameworkLintReport } | null> => {\n if (!draft || draft.trim().length <= 100) return null;\n const report = lintCurriculumFramework(draft, expectedSessions);\n if (report.passed) return { content: draft, report };\n onProgress?.('@reviewer', `⚠️ Framework lint round ${attempt} FAILED (score ${report.score}/100, ${report.totalLessons} sessions): ${report.findings.filter((f) => f.severity === 'CRITICAL').map((f) => f.code).join(', ')}`);\n return null;\n };\n\n let framework = await runCurriculumAIInference(\n [{ role: 'user', content: frameworkPrompt }],\n foundationContext\n );\n\n // ── Framework quality gate (deterministic, 0 token): \"1 buổi = 1 dòng đầy đủ\" ──\n // Fail → 1 lần retry có mục tiêu với findings cụ thể → vẫn fail → SAVE + cảnh báo rõ (HITL gate sẽ chặn).\n let lintReport: FrameworkLintReport | undefined;\n const firstPass = await lintFrameworkOrFail(framework, 1);\n if (firstPass) {\n lintReport = firstPass.report;\n } else if (framework && framework.trim().length > 100) {\n const firstReport = lintCurriculumFramework(framework, expectedSessions);\n const criticalList = firstReport.findings.map((f) => `- [${f.severity}] ${f.message}`).join('\\n');\n onProgress?.('@designer', '🔧 Framework failed contract lint — retrying once with targeted feedback...');\n const retryDraft = await runCurriculumAIInference(\n [{ role: 'user', content: `Your previously drafted \\`CURRICULUM_FRAMEWORK.md\\` FAILED the per-session contract lint. Rewrite the COMPLETE corrected document: fix EVERY issue below, keep the template contract, output 100% clean Markdown only.\\n\\nLINT FINDINGS:\\n${criticalList}\\n\\nREQUIREMENTS REMINDER:\\n- Mỗi buổi học PHẢI có đúng 1 dòng trong bảng Scope & Sequence với đủ 11 cột: # | Lesson Code (UXX_MYY_LZZ) | Title | Unit | Module | Learning Objective (đo được) | Key Concepts | Hands-on Deliverable | Prerequisites | Bloom | Duration\\n- Số dòng PHẢI bằng tổng số buổi khóa (${expectedSessions || 'theo Course Duration'}) — KHÔNG truncate bằng '...'\\n- Prerequisites chỉ tham chiếu mã bài TRƯỚC đó\\n\\nPREVIOUS DRAFT:\\n${framework}` }],\n foundationContext\n );\n const retryPass = await lintFrameworkOrFail(retryDraft, 2);\n if (retryPass) {\n framework = retryPass.content;\n lintReport = retryPass.report;\n } else {\n // Vẫn fail: vẫn SAVE (người duyệt HITL cần thấy) + cảnh báo NẶNG qua telemetry\n lintReport = lintCurriculumFramework(framework || '', expectedSessions);\n onProgress?.('@reviewer', `❌ CURRICULUM_FRAMEWORK still fails contract lint after retry (score ${lintReport.score}/100). Saved for human review — DO NOT trust this as SOT until fixed.`);\n }\n }\n\n if (framework && framework.trim().length > 100) {\n const lintSuffix = lintReport\n ? `\\n\\n<!-- framework-lint: score=${lintReport.score}/100 sessions=${lintReport.totalLessons} passed=${lintReport.passed} findings=${lintReport.findings.length} -->\\n`\n : '';\n await storage.saveArtifact(projectId, '_sot/CURRICULUM_FRAMEWORK.md', framework + lintSuffix);\n }\n\n // 2. Generate CONTENT_STYLE_GUIDE.md using CONTENT_STYLE_GUIDE_template.md\n onProgress?.('@designer', 'Establishing Content Style Guide and Code Standards (CONTENT_STYLE_GUIDE.md)...');\n const styleGuideTemplate = loadSotTemplate('CONTENT_STYLE_GUIDE_template.md');\n const styleGuidePrompt = `You are @designer. Author the standardized \\`CONTENT_STYLE_GUIDE.md\\` artifact:\n\n[TEMPLATE CONTRACT]:\n${styleGuideTemplate || `---\nid: \"${projectId.toUpperCase()}-CONTENT-STYLE-GUIDE\"\ntitle: \"Content Style Guide: ${briefing.projectName || projectId}\"\ntype: \"CONTENT_STYLE_GUIDE\"\nphase: \"P2\"\ndeliverable: \"P2-T2\"\nversion: \"v1.2\"\n---`}\n\nINSTRUCTIONS:\n1. Tailor the Tone & Voice, Glossary, Code Standards, and Examples strictly to the topic: ${briefing.topic || briefing.projectName || projectId} (NOT generic boilerplate).\n2. Define exact terminology translation pairs, prohibited practices, and 5E lesson timing.\n3. Include Session Pacing & Interruption Handling Protocol: How teachers should warm up, recap previous lessons, and handle weekly/non-consecutive classes.\n4. Output 100% clean Markdown document directly.`;\n\n const styleGuide = await runCurriculumAIInference(\n [{ role: 'user', content: styleGuidePrompt }],\n `${foundationContext}\\n\\n[CURRICULUM_FRAMEWORK]:\\n${preserveEssentialSotSections(framework, 6000)}`\n );\n if (styleGuide && styleGuide.trim().length > 100) {\n await storage.saveArtifact(projectId, '_sot/CONTENT_STYLE_GUIDE.md', styleGuide);\n }\n\n // 3. Generate ART_DIRECTION.md using ART_DIRECTION_template.md\n onProgress?.('@designer', 'Establishing Art Direction, color palette, and Mermaid diagram standards (ART_DIRECTION.md)...');\n const artTemplate = loadSotTemplate('ART_DIRECTION_template.md');\n const artPrompt = `You are @illustrator & @designer. Author the standardized \\`ART_DIRECTION.md\\` artifact:\n\n[TEMPLATE CONTRACT]:\n${artTemplate || `---\nid: \"${projectId.toUpperCase()}-ART-DIRECTION\"\ntitle: \"Art Direction: ${briefing.projectName || projectId}\"\ntype: \"ART_DIRECTION\"\nphase: \"P2\"\ndeliverable: \"P2-T3\"\nversion: \"v1.2\"\n---`}\n\nINSTRUCTIONS:\n1. Define the visual theme, color palette (Primary, Accent, Background), typography, and Mermaid diagram styling for this topic.\n2. Output 100% clean Markdown document directly.`;\n\n const artDirection = await runCurriculumAIInference(\n [{ role: 'user', content: artPrompt }],\n foundationContext\n );\n if (artDirection && artDirection.trim().length > 100) {\n await storage.saveArtifact(projectId, '_sot/ART_DIRECTION.md', artDirection);\n }\n\n // 4. Generate PROJECT_STATUS.md / ALIGNMENT_MATRIX\n onProgress?.('@reviewer', 'Initializing Curriculum Alignment Matrix and tracking ledger (PROJECT_STATUS.md)...');\n const statusPrompt = `You are @reviewer. Author the standardized \\`PROJECT_STATUS.md\\` reflecting current progress:\n- Phase 01: SOT & Brief (100% Complete, Gate 1 Approved)\n- Phase 02: Architecture & Design (100% Complete, Gate 2 Approved)\n- Phase 03: Production Task Pipeline (Ready to start)\n- Tabular Alignment Matrix mapping all lessons defined in the Framework to their required artifacts (LESSON, ACT, QUIZ, SLIDE).`;\n\n const projectStatus = await runCurriculumAIInference(\n [{ role: 'user', content: statusPrompt }],\n `[FRAMEWORK]:\\n${preserveEssentialSotSections(framework, 6000)}`\n );\n if (projectStatus && projectStatus.trim().length > 100) {\n await storage.saveArtifact(projectId, '_sot/PROJECT_STATUS.md', projectStatus);\n }\n\n return { framework, styleGuide, artDirection, projectStatus };\n}\n\n","/**\n * 🛠️ Framework Linter — hợp đồng \"1 buổi = 1 dòng đầy đủ\" cho CURRICULUM_FRAMEWORK.md\n *\n * Framework là SOT của toàn bộ pipeline production: nếu framework thiếu objective/deliverable/prerequisite\n * cho từng buổi, MỌI LESSON phía sau sinh sai. Linter này chạy NGAY SAU khi sinh framework\n * (0 token, deterministic) và trả findings để caller retry có mục tiêu hoặc cảnh báo rõ ràng.\n */\n\nexport interface FrameworkLintFinding {\n code: string;\n severity: 'CRITICAL' | 'MAJOR' | 'MINOR';\n message: string;\n}\n\nexport interface FrameworkLintReport {\n passed: boolean;\n score: number;\n totalLessons: number;\n findings: FrameworkLintFinding[];\n summary: string;\n}\n\n/** Động từ Bloom hợp lệ (VI + EN, bao gồm dạng chia). */\nconst BLOOM_LEVELS = [\n 'remember', 'understand', 'apply', 'analyze', 'evaluate', 'create',\n 'ghi nhớ', 'nhớ', 'hiểu', 'vận dụng', 'áp dụng', 'phân tích', 'đánh giá', 'sáng tạo', 'thiết kế',\n];\n\n/** Động từ trừu tượng không đo được — cấm trong Learning Objective. */\nconst VAGUE_VERBS = /^(?:hiểu|biết|nắm\\s*được|know|understand\\s+about)\\b/i;\n\nfunction normalizeLine(line: string): string {\n return line.replace(/\\u00a0/g, ' ');\n}\n\n/**\n * Trích các dòng dữ liệu từ bảng Scope & Sequence (bỏ header + separator).\n * Nhận diện bảng theo header chứa cả \"Lesson Code\" và \"Learning Objective\".\n */\nexport function extractScopeSequenceRows(framework: string): { headerFound: boolean; rows: string[][] } {\n const lines = framework.split('\\n').map(normalizeLine);\n let headerFound = false;\n const rows: string[][] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith('|')) continue;\n const lower = trimmed.toLowerCase();\n if (lower.includes('lesson code') && lower.includes('learning objective')) {\n headerFound = true;\n continue;\n }\n if (!headerFound) continue;\n if (/^\\|\\s*[-: |]+\\|\\s*$/.test(trimmed)) continue; // separator row\n if (lower.includes('không truncate') || lower.includes('rules:')) break; // ghi chú sau bảng\n const cols = trimmed.split('|').slice(1, -1).map((c) => c.trim());\n if (cols.length >= 10) rows.push(cols);\n }\n return { headerFound, rows };\n}\n\nexport function lintCurriculumFramework(\n framework: string,\n expectedSessions?: number\n): FrameworkLintReport {\n const findings: FrameworkLintFinding[] = [];\n let score = 100;\n\n const { headerFound, rows } = extractScopeSequenceRows(framework);\n\n // 1. Bảng Scope & Sequence phải tồn tại với header hợp đồng\n if (!headerFound) {\n findings.push({\n code: 'FW_MISSING_SCOPE_TABLE',\n severity: 'CRITICAL',\n message: 'Thiếu bảng Scope & Sequence với header hợp đồng (phải có cột Lesson Code + Learning Objective). Framework này KHÔNG đủ làm SOT cho production.',\n });\n score -= 40;\n }\n\n if (headerFound && rows.length === 0) {\n findings.push({\n code: 'FW_EMPTY_SCOPE_TABLE',\n severity: 'CRITICAL',\n message: 'Bảng Scope & Sequence tồn tại nhưng KHÔNG có dòng buổi học nào hợp lệ (mỗi dòng cần ≥10 cột).',\n });\n score -= 35;\n }\n\n // 2. Số buổi phải khớp courseDuration\n if (expectedSessions && rows.length > 0 && rows.length !== expectedSessions) {\n findings.push({\n code: 'FW_SESSION_COUNT_MISMATCH',\n severity: 'CRITICAL',\n message: `Số dòng buổi học (${rows.length}) ≠ tổng số buổi của khóa (${expectedSessions}). Viết ĐỦ, không truncate.`,\n });\n score -= 25;\n }\n\n // 3. Kiểm từng dòng: mã bài, objective, deliverable, bloom, prereq\n const seenCodes = new Set<string>();\n rows.forEach((cols, idx) => {\n const rowNum = idx + 1;\n const lessonCode = cols[1] || '';\n const objective = cols[5] || '';\n const deliverable = cols[7] || '';\n const prerequisites = cols[8] || '';\n const bloom = cols[9] || '';\n const duration = cols[10] || '';\n\n if (!/^[Uu]\\d{2}[_-][Mm]\\d{2}[_-][Ll]\\d{2}$/.test(lessonCode)) {\n findings.push({ code: 'FW_BAD_LESSON_CODE', severity: 'CRITICAL', message: `Dòng ${rowNum}: mã bài \"${lessonCode}\" không đúng format UXX_MYY_LZZ.` });\n score -= 10;\n } else if (seenCodes.has(lessonCode.toUpperCase())) {\n findings.push({ code: 'FW_DUPLICATE_LESSON_CODE', severity: 'MAJOR', message: `Dòng ${rowNum}: mã bài ${lessonCode} bị trùng.` });\n score -= 8;\n } else {\n seenCodes.add(lessonCode.toUpperCase());\n }\n\n if (VAGUE_VERBS.test(objective)) {\n findings.push({ code: 'FW_VAGUE_OBJECTIVE', severity: 'MAJOR', message: `Dòng ${rowNum} (${lessonCode}): Objective dùng động từ trừu tượng (\"hiểu/biết\") — thay bằng động từ Bloom đo được.` });\n score -= 8;\n } else if (objective.length < 20) {\n findings.push({ code: 'FW_WEAK_OBJECTIVE', severity: 'MAJOR', message: `Dòng ${rowNum} (${lessonCode}): Learning Objective quá ngắn/generic — cần mục tiêu đo được với động từ Bloom cụ thể.` });\n score -= 8;\n }\n\n if (deliverable.length < 10) {\n findings.push({ code: 'FW_MISSING_DELIVERABLE', severity: 'MAJOR', message: `Dòng ${rowNum} (${lessonCode}): thiếu Hands-on Deliverable cụ thể (sản phẩm học sinh làm được trong buổi).` });\n score -= 8;\n }\n\n if (!BLOOM_LEVELS.some((b) => bloom.toLowerCase().includes(b))) {\n findings.push({ code: 'FW_BAD_BLOOM', severity: 'MINOR', message: `Dòng ${rowNum} (${lessonCode}): cột Bloom \"${bloom}\" không nhận diện được mức Bloom.` });\n score -= 3;\n }\n\n if (prerequisites && prerequisites.toLowerCase() !== 'none' && !/[Uu]\\d{2}[_-][Mm]\\d{2}[_-][Ll]\\d{2}/.test(prerequisites) && !/bài\\s*\\d+/i.test(prerequisites)) {\n findings.push({ code: 'FW_BAD_PREREQ', severity: 'MINOR', message: `Dòng ${rowNum} (${lessonCode}): Prerequisites \"${prerequisites}\" nên tham chiếu mã bài (UXX_MYY_LZZ) hoặc 'None'.` });\n score -= 3;\n }\n\n if (duration && !/^\\d+$/.test(duration.replace(/\\s*mins?/i, '').trim())) {\n findings.push({ code: 'FW_BAD_DURATION', severity: 'MINOR', message: `Dòng ${rowNum} (${lessonCode}): Duration phải là số phút.` });\n score -= 2;\n }\n });\n\n // 4. Forward-reference prerequisites (phụ thuộc bài sau) — theo vị trí dòng ĐẦU TIÊN của mã được tham chiếu\n const codeFirstIdx = new Map<string, number>();\n rows.forEach((r, i) => {\n const code = (r[1] || '').toUpperCase();\n if (/^[Uu]\\d{2}[_-][Mm]\\d{2}[_-][Ll]\\d{2}$/.test(code) && !codeFirstIdx.has(code)) {\n codeFirstIdx.set(code, i);\n }\n });\n for (let i = 0; i < rows.length; i++) {\n const prereq = (rows[i][8] || '').toUpperCase();\n const match = prereq.match(/[Uu]\\d{2}[_-][Mm]\\d{2}[_-][Ll]\\d{2}/);\n if (match) {\n const refIdx = codeFirstIdx.get(match[0].toUpperCase());\n if (refIdx !== undefined && refIdx > i) {\n findings.push({ code: 'FW_FORWARD_PREREQ', severity: 'MAJOR', message: `Dòng ${i + 1}: Prerequisites ${match[0]} là bài SAU nó (forward-reference không hợp lệ).` });\n score -= 6;\n }\n }\n }\n\n const passed = findings.every((f) => f.severity !== 'CRITICAL') && rows.length > 0;\n score = Math.max(0, score);\n\n return {\n passed,\n score,\n totalLessons: rows.length,\n findings,\n summary: passed\n ? `Framework hợp lệ: ${rows.length} buổi, mỗi buổi đủ objective + deliverable + prereq.`\n : `Framework CHƯA đạt hợp đồng SOT (${findings.filter((f) => f.severity === 'CRITICAL').length} critical): ${findings.slice(0, 5).map((f) => f.message).join(' | ')}`,\n };\n}\n","import type { FrameworkPack } from '../standards/frameworkPackSchema';\n\n/**\n * Deterministic STANDARD_STACK.md generator (Phase 2).\n *\n * Replaces the old anti-pattern where @researcher was asked to \"cite authentic\n * standards\" from memory (hallucinated IDs). The SOT document is now RENDERED\n * from the Standards Registry packs adopted for the course — verbatim statements,\n * canonical IDs, zero LLM involvement.\n */\nexport interface StandardStackOptions {\n projectId: string;\n packs: FrameworkPack[];\n /** Overall course grade band (canonical numeric) for coverage scoping. */\n courseGradeBand?: [number, number];\n language?: string;\n}\n\nfunction bandLabel(band: readonly number[]): string {\n return band[0] === band[1] ? `L${band[0]}` : `L${band[0]}–L${band[1]}`;\n}\n\nexport function buildStandardStackMarkdown(opts: StandardStackOptions): string {\n const { projectId, packs, courseGradeBand, language } = opts;\n const lines: string[] = [];\n\n lines.push('---');\n lines.push(`id: \"${projectId.toUpperCase()}-STANDARD-STACK\"`);\n lines.push(`title: \"Standard Stack: ${projectId}\"`);\n lines.push('type: \"STANDARD_STACK\"');\n lines.push('phase: \"P1\"');\n lines.push('version: \"v2.0-deterministic\"');\n lines.push(`generatedAt: \"${new Date().toISOString()}\"`);\n lines.push('source: \"Standards Registry (deterministic render — not LLM-generated)\"');\n lines.push('---');\n lines.push('');\n lines.push('# STANDARD STACK — Hệ tiêu chuẩn tham chiếu');\n lines.push('');\n\n if (packs.length === 0) {\n lines.push('> ⚠️ No Framework Pack adopted for this course. Generation will run WITHOUT standards grounding');\n lines.push('> (no statement anchoring, no Standards Alignment judge dimension, no coverage gate).');\n lines.push('> Import a pack via the Standards Registry before generating for standards-bound courses.');\n return lines.join('\\n');\n }\n\n for (const pack of packs) {\n const m = pack.manifest;\n lines.push(`## ${m.name}`);\n lines.push('');\n lines.push(`- **Pack ID:** \\`${m.id}\\` (content ${m.contentVersion}, contract v${m.specVersion})`);\n lines.push(`- **Trust:** ${m.trust} — ${m.trust === 'verified' ? 'platform-curated' : 'org-imported'}`);\n lines.push(`- **Nguồn:** ${m.provenance.sourceRef}${m.provenance.sourceUrl ? ' (' + m.provenance.sourceUrl + ')' : ''}`);\n lines.push(`- **License:** ${m.provenance.license}`);\n lines.push(`- **Grade range (manifest):** ${bandLabel(m.gradeModel.range)}`);\n lines.push('');\n lines.push('### Statements (verbatim — binding targets)');\n lines.push('');\n lines.push('| ID | Band | Text (verbatim) | Keywords |');\n lines.push('|---|---|---|---|');\n\n const statements = courseGradeBand\n ? pack.statements.filter((s) => Math.max(s.gradeBand[0], courseGradeBand[0]) <= Math.min(s.gradeBand[1], courseGradeBand[1]))\n : pack.statements;\n\n for (const s of statements) {\n const text = (language && s.texts[language]) || Object.values(s.texts)[0];\n const mapped = (pack.mappings ?? []).filter((mp) => mp.statementId === s.id);\n const mapNote = mapped.length > 0 ? ` → ${mapped.map((mp) => mp.targetRef + ' (' + mp.kind + ')').join(', ')}` : '';\n lines.push(`| \\`${s.id}\\` | ${bandLabel(s.gradeBand)} | ${text.replace(/\\|/g, '\\\\|')} | ${(s.keywords || []).join(', ')}${mapNote ? ' |' + mapNote : ' |'}`);\n }\n lines.push('');\n }\n\n lines.push('---');\n lines.push('');\n lines.push('*Document rendered deterministically from the Standards Registry. Statement texts are COPIED VERBATIM from the cited sources and are binding for generation, judging, and coverage reporting.*');\n return lines.join('\\n');\n}\n","import type { ICurriculumStorage, ProjectStatusReport, PipelineState } from '../storage/types';\nimport { computeContentHash } from '../storage/fileSystemCurriculumAdapter';\nimport { runCurriculumAIInference, type ChunkType } from '../ai/streamRunner';\nimport { LLMJudgeEngine } from '../ai/llmJudgeEngine';\nimport type { JudgeEvaluationResult } from '../ai/llmJudgeEngine';\nimport { lintAndSanitizeArtifact } from '../pipeline/artifactLinter';\nimport { createAiInferenceError, CurriculumError } from '../errors';\nimport { getProjectArtifactScope } from './statusService';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { resolveGateSettings, gateModeFor, type ResolvedGateSettings } from '../workflow/gateSettings';\nimport { ensureExpositionForLesson, type ExpositionResult } from './knowledgeExpositionService';\nimport { buildSessionSliceContext } from './curriculumPlannerService';\nimport { buildStandardsContext } from '../standards/standardsContextInjector';\nimport { resolveStandardsPacks } from '../standards/bundledPacks';\nimport type { FrameworkPack } from '../standards/frameworkPackSchema';\n\nconst __filename = typeof import.meta?.url === 'string' ? fileURLToPath(import.meta.url) : '';\nconst _resolvedDir = __filename ? path.dirname(__filename) : (typeof __dirname !== 'undefined' ? __dirname : process.cwd());\n\n/**\n * Resolves and loads official canonical templates from docs/refs/templates or _templates/\n */\nexport function loadCurriculumTemplate(templateName: string): string {\n const candidatePaths = [\n path.resolve(process.cwd(), '_templates', templateName),\n path.resolve(process.cwd(), 'packages/curriculum-kit/docs/refs/templates', templateName),\n path.resolve(process.cwd(), 'docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../../docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../../../docs/refs/templates', templateName),\n path.resolve(_resolvedDir, '../../../../the-ultimate-curriculum-agent-os/_templates', templateName),\n ];\n\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n try {\n return fs.readFileSync(p, 'utf-8');\n } catch {\n // continue\n }\n }\n }\n console.warn(`[curriculum-kit:loadCurriculumTemplate] ⚠️ Template \"${templateName}\" not found across candidate paths. Falling back to inline structural scaffolding.`);\n return '';\n}\n\nexport type PedagogicalModel = '5e' | 'edp' | 'pbl' | 'general';\n\nexport interface ProduceLessonOptions {\n artifactScope?: string[];\n force?: boolean;\n pedagogy?: PedagogicalModel;\n /** Chiến lược batch (chỉ produceBatchLessons dùng). */\n batchStrategy?: 'depth_first_lesson' | 'breadth_first_artifact';\n /**\n * Gate Settings — NGUỒN DUY NHẤT quyết định \"ai kiểm artifact nào\".\n * Chấp nhận config thô (vd: gateModes từ project.config.json của Composer):\n * { LESSON: 'llm_judge', ACT: 'none', gate1: 'hitl', ... } — kit tự chuẩn hoá.\n * Riêng approvedArtifacts là INPUT của HITL (bản đã được người duyệt), không phải config.\n */\n gateSettings?: unknown;\n /**\n * Standards Registry packs (đã validate + activate) để GROUNDING prompt và Judge.\n * Không truyền → pipeline chạy như cũ, không inject block chuẩn nào.\n */\n standardsPacks?: import('../standards/frameworkPackSchema').FrameworkPack[];\n /** Id pack đóng gói sẵn trong kit (vd: 'csta-k12-2017') — cách Composer truyền chuẩn gọn nhất. */\n standardsPackIds?: string[];\n /** Grade band của lesson (để chọn statement theo lớp). Fallback [6,12]. */\n gradeBand?: [number, number] | number;\n /**\n * Media Ledger policy (nếu có): agent chèn placeholder [IMAGE: slug], Curator duyệt, Fulfiller thực thi.\n * maxGenImagesPerArtifact = quota ảnh AI/gen — search kho ảnh (Pexels) KHÔNG tốn quota này.\n */\n mediaPolicy?: {\n maxGenImagesPerArtifact: number;\n autoFulfill?: boolean;\n preferredProvider?: 'openai' | 'gemini';\n mode?: 'search_only' | 'gen_only' | 'auto';\n };\n approvedArtifacts?: string[]; // e.g. ['LESSON']\n onProgress?: (agent: string, message: string, meta?: any) => void;\n}\n\nexport interface ProduceLessonResult {\n lessonId: string;\n pedagogy: PedagogicalModel;\n producedArtifacts: string[];\n pausedForReview: boolean;\n gateStatus?: string;\n}\n\n/**\n * Detects pedagogical model from SOT (Framework, Style Guide, or Brief)\n */\nexport function detectProjectPedagogy(\n frameworkText: string,\n styleGuideText: string,\n explicitPedagogy?: PedagogicalModel\n): PedagogicalModel {\n if (explicitPedagogy) return explicitPedagogy;\n\n const combined = (frameworkText + ' ' + styleGuideText).toLowerCase();\n if (combined.includes('edp') || combined.includes('engineering design process') || combined.includes('thiết kế kỹ thuật')) {\n return 'edp';\n }\n if (combined.includes('pbl') || combined.includes('project-based') || combined.includes('dựa trên dự án')) {\n return 'pbl';\n }\n if (combined.includes('general') || combined.includes('truyền thống') || combined.includes('standard lesson format')) {\n return 'general';\n }\n return '5e';\n}\n\n/**\n * Extracts lesson information (Title, Concept, Bloom, Unit, Module) from CURRICULUM_FRAMEWORK.md.\n */\nexport async function getLessonMetadata(\n storage: ICurriculumStorage,\n projectId: string,\n lessonId: string\n): Promise<{\n unitCode: string;\n moduleCode: string;\n lessonCode: string;\n lessonTitle: string;\n concept: string;\n prerequisites: string;\n bloomLevel: string;\n}> {\n const framework = (await storage.readSotDocument(projectId, 'CURRICULUM_FRAMEWORK.md')) || '';\n \n const parts = lessonId.split('_');\n const unitCode = parts[0] || 'U01';\n const moduleCode = parts.length >= 2 ? `${parts[0]}_${parts[1]}` : `${unitCode}_M01`;\n const lessonCode = lessonId;\n\n let lessonTitle = `Lesson ${lessonId}`;\n let concept = 'Core Technical Competency';\n let prerequisites = 'None';\n let bloomLevel = 'Apply';\n let objective = '';\n let deliverable = '';\n let found = false;\n\n // ── Đọc bảng Scope & Sequence THEO HEADER (không theo vị trí cứng) ──\n // Hỗ trợ bảng hợp đồng mới (11 cột có Lesson Code + Learning Objective) VÀ bảng legacy (6 cột).\n const lines = framework.split('\\n');\n let headerCols: string[] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith('|')) continue;\n const cols = trimmed.split('|').slice(1, -1).map((c) => c.trim());\n const lower = cols.map((c) => c.toLowerCase());\n\n // Header row? — ghi mapping cột\n if (lower.some((c) => c.includes('lesson code') || c === 'mã bài')) {\n headerCols = cols;\n continue;\n }\n if (/^[-: |]+$/.test(trimmed.slice(1, -1))) continue;\n if (cols.length < 3) continue;\n\n // Tìm dòng của bài này: cột nào chứa mã UXX_MYY_LZZ khớp lessonId\n const codePattern = new RegExp('^' + lessonId.replace(/_/g, '[_-]') + '$', 'i');\n const codeColIdx = cols.findIndex((c) => codePattern.test(c.replace(/\\*\\*/g, '').trim()));\n if (codeColIdx === -1) continue;\n\n if (headerCols.length > 0) {\n // Bảng có header chuẩn → map theo tên cột\n const col = (name: string): string => {\n const idx = headerCols.findIndex((h) => h.toLowerCase().includes(name));\n return idx >= 0 ? (cols[idx] || '') : '';\n };\n lessonTitle = (col('title') || col('tên')).replace(/\\*\\*/g, '') || lessonTitle;\n objective = col('learning objective') || col('objective') || col('mục tiêu') || '';\n concept = col('key concept') || col('concept') || col('khái niệm') || concept;\n deliverable = col('deliverable') || col('sản phẩm') || '';\n prerequisites = col('prerequisit') || col('tiền điều kiện') || prerequisites;\n bloomLevel = col('bloom') || bloomLevel;\n found = true;\n } else {\n // Bảng legacy không có header: đoán theo vị trí (hành vi cũ)\n lessonTitle = cols[2]?.replace(/\\*\\*/g, '') || lessonTitle;\n concept = cols[4] || concept;\n prerequisites = cols[5] || prerequisites;\n bloomLevel = cols[6] || bloomLevel;\n found = true;\n }\n if (found) break;\n }\n\n // Objective/deliverable từ framework chảy thẳng vào metadata — SOT thật cho LESSON prompt\n return {\n unitCode,\n moduleCode,\n lessonCode,\n lessonTitle,\n concept: objective ? `${concept}. Mục tiêu buổi học: ${objective}` : concept,\n prerequisites: deliverable ? `${prerequisites}. Sản phẩm hands-on của buổi: ${deliverable}` : prerequisites,\n bloomLevel,\n };\n}\n\n/**\n * P1: Framework excerpt CÓ CHỦ ĐIỂM cho từng bài — thay cho slice(0,1500) mù:\n * Global Objectives + Structural Hierarchy + dòng bài hiện tại (đủ cột) + 2 dòng lân cận (context trước/sau).\n */\nfunction buildFrameworkExcerptForLesson(framework: string, lessonId: string): string {\n if (!framework) return '';\n const lines = framework.split('\\n');\n\n // 1. Lấy khối Global Learning Objectives\n const objStart = lines.findIndex((l) => /##\\s*\\[?REQUIRED\\]?\\s*Global Learning Objectives/i.test(l));\n let objectivesBlock = '';\n if (objStart >= 0) {\n const objLines: string[] = [];\n for (let i = objStart; i < Math.min(objStart + 12, lines.length); i++) {\n if (i > objStart && /^##\\s/.test(lines[i] as string)) break;\n objLines.push(lines[i] as string);\n }\n objectivesBlock = objLines.join('\\n');\n }\n\n // 2. Tìm các dòng Scope & Sequence: bài hiện tại + lân cận\n const scopeRows: number[] = [];\n lines.forEach((l, idx) => {\n if (l.includes('|') && new RegExp(lessonId.replace(/_/g, '[_-]'), 'i').test(l)) scopeRows.push(idx);\n });\n const rowIdx = scopeRows[0] ?? -1;\n const currentRow = rowIdx >= 0 ? lines[rowIdx] : '';\n const prevRow = rowIdx > 0 && (lines[rowIdx - 1] || '').trim().startsWith('|') ? lines[rowIdx - 1] : '';\n const nextRow = (lines[rowIdx + 1] || '').trim().startsWith('|') ? lines[rowIdx + 1] : '';\n\n // 3. Hierarchy table (structural) — cắt gọn 10 dòng đầu\n const hierStart = lines.findIndex((l) => /Structural Hierarchy/i.test(l));\n let hierarchyBlock = '';\n if (hierStart >= 0) {\n hierarchyBlock = lines.slice(hierStart, Math.min(hierStart + 12, lines.length)).join('\\n');\n }\n\n const parts = [\n objectivesBlock && `[GLOBAL LEARNING OBJECTIVES]:\\n${objectivesBlock}`,\n hierarchyBlock && `[COURSE STRUCTURE]:\\n${hierarchyBlock}`,\n currentRow && `[BÀI HIỆN TẠI (${lessonId}) — dòng Scope & Sequence của chính bài này]:\\n${currentRow}`,\n prevRow && `[BÀI TRƯỚC — học sinh đã biết gì]:\\n${prevRow}`,\n nextRow && `[BÀI SAU — cầu nối cần đặt]:\\n${nextRow}`,\n ].filter(Boolean);\n\n return parts.join('\\n\\n') || framework.slice(0, 1500);\n}\n\n/**\n * Builds the canonical LESSON prompt matching the exact template contract (lesson-plan-v2) for 5E, EDP, or GENERAL.\n */\nfunction buildLessonPrompt(\n pedagogy: PedagogicalModel,\n lessonCode: string,\n unitCode: string,\n lessonTitle: string,\n concept: string,\n bloomLevel: string,\n dateStr: string\n): string {\n const commonFrontmatter = `id: \"LESSON_${lessonCode}\"\ntitle: \"${lessonTitle}\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T1\"\nversion: \"v1.2\"\ndate: \"${dateStr}\"\nlesson_id: \"${lessonCode}\"\nunit_id: \"${unitCode}\"\ntemplate_contract: \"lesson-plan-v2\"\ntemplate_required_sections:\n - \"A. Lesson Design Plan\"\n - \"Learning Objectives & Evidence\"\n - \"Activity Sequence\"\n - \"Resource Map\"\n - \"Assessment Map\"\n - \"Artifact Contract\"\n - \"B. Lesson Flow\"\n - \"Artifact Linkage\"`;\n\n if (pedagogy === 'edp') {\n return `You are @content (Educational Content Editor & EDP Engineering Design Process Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_EDP_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_EDP\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle} (EDP Model - Engineering Design Process)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Project Objective:** [Complete engineering system or functional deliverable students build]\n- **Materials & Equipment:** [Detailed hardware, software libraries, and workstation tools]\n- **Learning Objectives Table:** (LO1, LO2 mapped with EDP Bloom level, Student Evidence, and Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, EDP Phase (Ask, Imagine, Plan, Create, Test & Improve, Share & Evaluate), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map (Slide, Handout, Starter Code, Lab Tools)\n### 4. Assessment Map (Rubric criteria, formative checkpoints, remediation paths)\n### 5. Artifact Contract (Detailed specifications for ACT, SLIDE, QUIZ)\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ASK — [10 mins] (Problem Statement, High-Stakes Real-World Context & Engineering Challenge)\n### 2. IMAGINE — [15 mins] (Brainstorming Design Alternatives & Trade-off Evaluation)\n### 3. PLAN — [15 mins] (System Block Diagrams, Module Architecture & Task Decomposition)\n### 4. CREATE — [25 mins] (Implementation / Verified 100% Executable Code Blueprint)\n### 5. TEST & IMPROVE — [15 mins] (Diagnostic Testing, Telemetry & Iterative Debugging)\n### 6. SHARE & EVALUATE — [10 mins] (Showcase, Metacognitive Reflection & Peer Evaluation)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`ACT_...\\`, \\`QUIZ_...\\`, \\`SLIDE_...\\`, \\`GUIDE_...\\`).\n\n3. Ensure all sample code and schemas are 100% syntax-valid and executable.\n4. Output 100% clean Markdown directly.`;\n }\n\n if (pedagogy === 'pbl' || pedagogy === 'general') {\n return `You are @content (Educational Content Editor & PBL/General Pedagogy Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_GENERAL_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_GENERAL\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle}\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Materials & Equipment:** [Tools, IDE, workstations, resources]\n- **Keywords / Core Concepts:** [Core domain terminology]\n- **Learning Objectives Table:** (LO1, LO2 with Bloom action verbs, Student Evidence, Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, Lesson Stage (Warm-up, Core Concepts, Guided Practice, Independent Practice, Wrap-up), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map\n### 4. Assessment Map\n### 5. Artifact Contract\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. Warm-up & Hook — [10 mins]\n### 2. Core Concepts & Demo — [25 mins] (Accompanied by Mermaid Diagram or Code Blueprint)\n### 3. Guided Practice — [20 mins] (Step-by-step teacher-led scaffolding: I Do -> We Do)\n### 4. Independent Practice / Challenge — [25 mins] (Autonomous student lab / Mini-project)\n### 5. Wrap-up & Evaluation — [10 mins] (Synthesis & Formative Checkpoint)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`ACT_...\\`, \\`QUIZ_...\\`, \\`SLIDE_...\\`).\n\n3. Output 100% clean Markdown directly.`;\n }\n\n // Default: 5E Instructional Model (LESSON_5E_template.md)\n return `You are @content (Educational Content Editor & 5E Instructional Model Specialist).\nAuthor the comprehensive Master Lesson Plan adhering strictly to \\`LESSON_5E_template.md\\` standards for:\n- Lesson Code: ${lessonCode}\n- Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Bloom Level: ${bloomLevel}\n\nMandatory Format Requirements:\n1. Standard YAML Frontmatter:\n---\n${commonFrontmatter}\ntype: \"LESSON_5E\"\n---\n2. Mandatory Document Structure:\n# LESSON [XX]: ${lessonTitle} (5E Model)\n\n## [REQUIRED] A. Lesson Design Plan\n\n### 1. Learning Objectives & Evidence\n- **Estimated Duration:** 90 minutes\n- **Materials & Equipment:** [Tools, IDE, hardware/software specifications]\n- **Keywords / Core Concepts:** [Core domain terminology]\n- **Learning Objectives Table:** (LO1, LO2 with Bloom action verbs, Student Evidence, Success Criteria)\n\n### 2. Activity Sequence\n> Activity Contract table with columns: Seq, 5E Phase (Engage, Explore, Explain, Elaborate, Evaluate), Activity Type, Actor, Purpose, Student Action, Teacher Move, Output/Evidence, LO, Time, Artifact Contract.\n\n### 3. Resource Map\n### 4. Assessment Map\n### 5. Artifact Contract (Detailed specifications for ACT, SLIDE, QUIZ, GUIDE)\n\n---\n\n## [REQUIRED] B. Lesson Flow\n\n### 1. ENGAGE — [10 mins] (High-Stakes Hook Scenario, Inquiry Question, Transition)\n### 2. EXPLORE — [20 mins] (Inquiry-Based Discovery, Hands-on Sandbox)\n### 3. EXPLAIN — [25 mins] (Core Definitions, Relatable Analogies, Mermaid Diagram & Code Blueprints)\n### 4. ELABORATE — [25 mins] (3-Tier Differentiated Scaffolding: 🥉 Bronze, 🥈 Silver, 🥇 Gold tasks)\n### 5. EVALUATE — [10 mins] (Exit Ticket, Metacognitive Reflection)\n\n---\n\n## [REQUIRED] Artifact Linkage (Master Index)\nLinkage ledger mapping all satellite artifacts (\\`GUIDE_...\\`, \\`SLIDE_...\\`, \\`HANDOUT_...\\`, \\`ACT_...\\`, \\`WKS_...\\`, \\`QUIZ_...\\`, \\`EXT_...\\`).\n\n3. Ensure all sample code and syntax are 100% verified and runnable.\n4. Output 100% clean Markdown directly.`;\n}\n\n/**\n * Produces artifacts for a single lesson with support for dynamic pedagogy, HITL gating, and artifact scope.\n */\nexport async function produceSingleLesson(\n storage: ICurriculumStorage,\n projectId: string,\n lessonId: string,\n options: ProduceLessonOptions = {}\n): Promise<ProduceLessonResult> {\n const {\n artifactScope = ['LESSON', 'ACT', 'QUIZ', 'SLIDE'],\n force = false,\n approvedArtifacts = [],\n onProgress\n } = options;\n\n // Gate Settings = nguồn quyết định DUY NHẤT cho \"ai kiểm artifact nào\".\n const gates: ResolvedGateSettings = resolveGateSettings(options.gateSettings);\n\n const metadata = await getLessonMetadata(storage, projectId, lessonId);\n const { unitCode, lessonCode, lessonTitle, concept, prerequisites, bloomLevel } = metadata;\n\n // Standards grounding (Registry packs truyền thẳng từ Composer nếu org có adopt).\n // Không có packs → mọi thứ hoạt động y như cũ (không inject, không judge theo chuẩn).\n const packs: FrameworkPack[] = options.standardsPacks?.length\n ? options.standardsPacks\n : resolveStandardsPacks(options.standardsPackIds);\n let standardsContext = '';\n let standardStatements: Record<string, string> = {};\n if (packs.length > 0) {\n const { block, selected } = buildStandardsContext({\n packs,\n gradeBand: options.gradeBand ?? [6, 12],\n topicText: [lessonTitle, concept, prerequisites].filter(Boolean).join(' '),\n conceptCodes: [],\n });\n standardsContext = block;\n for (const s of selected) {\n standardStatements[s.packId + ':' + s.statement.id] = Object.values(s.statement.texts)[0] || '';\n }\n }\n\n // Read SOT references\n const framework = (await storage.readSotDocument(projectId, 'CURRICULUM_FRAMEWORK.md')) || '';\n const styleGuide = (await storage.readSotDocument(projectId, 'CONTENT_STYLE_GUIDE.md')) || '';\n const refPack = (await storage.readSotDocument(projectId, 'REFERENCE_PACK.md')) || '';\n const learnerProfile = (await storage.readSotDocument(projectId, 'LEARNER_PROFILE.md')) || '';\n\n // ── KNOWLEDGE_EXPOSITION: canonical knowledge source (plan-driven flow).\n // Plan tồn tại → EXPOSITION là nguồn kiến thức chính tắc; không có plan →\n // legacy flow chạy như cũ (explicit, không silent). ──\n let expositionContext = '';\n let sessionSliceContext = '';\n try {\n const exposition = await ensureExpositionForLesson(storage, projectId, lessonCode, {\n gates: resolveGateSettings(options.gateSettings),\n force: options.force,\n });\n if (exposition) {\n expositionContext = exposition.context;\n onProgress?.('@content', `[EXPOSITION] ${exposition.reused ? 'Reused' : 'Generated'} \\`\\${exposition.relPath}\\` (plan-driven knowledge source)...`);\n } else {\n onProgress?.('@content', '[EXPOSITION] No CURRICULUM_PLAN.json — running legacy knowledge flow (no plan-driven exposition).');\n }\n // Session slice [4][6][7]: machine-readable decisions for activity design\n const planRaw = await storage.readArtifact(projectId, '_sot/CURRICULUM_PLAN.json');\n if (planRaw) {\n try {\n const plan = JSON.parse(planRaw) as Parameters<typeof buildSessionSliceContext>[0];\n sessionSliceContext = buildSessionSliceContext(plan, lessonCode);\n } catch {\n sessionSliceContext = ''; // malformed plan — exposition call above already failed hard if invalid\n }\n }\n } catch (err) {\n // Fail-closed: lỗi approval/judge/scope KHÔNG được nuốt — pipeline dừng rõ ràng.\n throw new CurriculumError({\n errorCode: 'ERR_SOT_INVALID_SCHEMA',\n artifactType: 'KNOWLEDGE_EXPOSITION',\n lessonId: lessonCode,\n message: 'KNOWLEDGE_EXPOSITION failed: ' + (err instanceof Error ? err.message : String(err)),\n suggestedAction: 'Fix the domain graph or re-approve the curriculum plan, then retry lesson production',\n retryable: false,\n });\n }\n\n // Detect project pedagogy dynamically from SOT\n const pedagogy = detectProjectPedagogy(framework, styleGuide, options.pedagogy);\n const pedagogyLabel = pedagogy.toUpperCase();\n\n const commonContext = `PROJECT & ACADEMIC CONTEXT:\n- Project ID: ${projectId}\n- Pedagogical Model: ${pedagogyLabel}\n- Lesson Code: ${lessonCode}\n- Lesson Title: ${lessonTitle}\n- Core Concept: ${concept}\n- Prerequisites: ${prerequisites}\n- Target Bloom Level: ${bloomLevel}\n\n[CURRICULUM FRAMEWORK EXCERPT]:\n${buildFrameworkExcerptForLesson(framework, lessonId)}\n\n[CONTENT STYLE GUIDE EXCERPT]:\n${styleGuide.slice(0, 1500)}\n\n[REFERENCE PACK GROUND TRUTH]:\n${refPack.slice(0, 1000)}${standardsContext ? '\\n\\n' + standardsContext : ''}${expositionContext ? '\\n\\n[KNOWLEDGE_EXPOSITION (CANONICAL KNOWLEDGE — teach from this, do not contradict)]:\\n' + expositionContext : ''}${sessionSliceContext ? '\\n\\n' + sessionSliceContext : ''}`;\n\n const producedArtifacts: string[] = [];\n const lessonRelPath = `_content/${unitCode}/LESSON_${lessonCode}.md`;\n const existingLessonContent = await storage.readArtifact(projectId, lessonRelPath);\n\n let lessonContent = existingLessonContent || '';\n\n // ─────────────────────────────────────────────────────────────\n // 1. Produce LESSON Plan matching the detected pedagogy\n // ─────────────────────────────────────────────────────────────\n if (artifactScope.includes('LESSON') && (!existingLessonContent || force)) {\n onProgress?.('@content', `[1/4] Authoring Master Lesson Plan (${pedagogyLabel}): \\`LESSON_${lessonCode}.md\\` (${lessonTitle})...`);\n\n const dateStr = new Date().toISOString().split('T')[0];\n const mediaDirective = options.mediaPolicy && options.mediaPolicy.maxGenImagesPerArtifact > 0\n ? `\\n\\nIMAGE PLANNING (media ledger) — QUOTA GEN: tối đa ${options.mediaPolicy.maxGenImagesPerArtifact} ảnh AI cho bài này (ảnh search kho không giới hạn).\\nKhi nội dung cần minh họa (diagram quy trình, sơ đồ khái niệm, step-by-step visual), chèn placeholder đúng format [IMAGE: slug] (slug chữ thường-gạch ngang, unique trong bài, vd img-for-loop-diagram) TẠI ĐÚNG CHỖ cần ảnh, trên dòng riêng. KHÔNG tự sinh ảnh, KHÔNG dùng markdown image — placeholder sẽ được thay bằng ảnh thật sau khi Media Curator duyệt. Chỉ đặt cho ảnh THỰC SỰ cần thiết.`\n : '';\n const lessonPrompt = buildLessonPrompt(\n pedagogy,\n lessonCode,\n unitCode,\n lessonTitle,\n concept,\n bloomLevel,\n dateStr\n ) + mediaDirective;\n\n const rawLesson = await runCurriculumAIInference(\n [{ role: 'user', content: lessonPrompt }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n\n if (!rawLesson || rawLesson.startsWith('⚠️') || rawLesson.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@content',\n artifactType: 'LESSON',\n lessonId: lessonCode,\n message: `Agent @content failed to author a valid Lesson Plan for ${lessonCode}.`,\n rawError: rawLesson || 'Empty AI response'\n });\n }\n\n // ── Deterministic gate: lint + auto-fix trước khi đốt tiền judge ──\n // 0-token, hàng ms: bắt preamble/fence/postamble/mermaid hỏng/table lệch cột + tự sửa được\n const lintReport = lintAndSanitizeArtifact(rawLesson, `LESSON_${lessonCode}.md`);\n if (lintReport.fixedCount > 0) {\n options.onProgress?.('@linter', `🛠️ Deterministic lint auto-fixed ${lintReport.fixedCount} issue(s) on LESSON_${lessonCode}: ${lintReport.issues.map(i => i.type).join(', ')}`);\n }\n const blockingIssues = lintReport.issues.filter((i) => i.severity === 'ERROR' && !i.autoFixable);\n if (blockingIssues.length > 0) {\n // Lỗi cấu trúc không tự sửa được → retry 1 lần với feedback cụ thể (repair có mục tiêu, không retry mù)\n options.onProgress?.('@linter', `⚠️ ${blockingIssues.length} blocking lint issue(s): ${blockingIssues.map(i => i.message).join('; ')} — retrying once with targeted feedback`);\n const retryRaw = await runCurriculumAIInference(\n [{ role: 'user', content: lessonPrompt + `\\n\\nPREVIOUS ATTEMPT FAILED STRUCTURAL LINT:\\n${blockingIssues.map(i => '- ' + i.message).join('\\n')}\\nFix ALL issues above and output the complete corrected document.` }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n const retryLint = lintAndSanitizeArtifact(retryRaw, `LESSON_${lessonCode}.md`);\n const stillBlocking = retryLint.issues.filter((i) => i.severity === 'ERROR' && !i.autoFixable);\n if (stillBlocking.length > 0) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@content',\n artifactType: 'LESSON',\n lessonId: lessonCode,\n message: `Lesson failed deterministic structural lint after 1 targeted retry: ${stillBlocking.map(i => i.message).join('; ')}`,\n rawError: retryRaw.slice(0, 500)\n });\n }\n lessonContent = retryLint.autoFixedContent || retryRaw;\n } else {\n lessonContent = lintReport.autoFixedContent || rawLesson;\n }\n await storage.saveArtifact(projectId, lessonRelPath, lessonContent);\n producedArtifacts.push(`LESSON_${lessonCode}.md`);\n }\n\n // Compute content hash and load pipeline state\n const contentHash = lessonContent ? computeContentHash(lessonContent) : undefined;\n const pipelineState = await storage.getPipelineState(projectId);\n const taskState = pipelineState.tasks[lessonCode] || {};\n const currentLessonInfo = taskState.LESSON;\n\n const lessonGate = gateModeFor(gates, 'LESSON');\n let isLessonApproved =\n lessonGate !== 'HITL' || // OFF/LLM_JUDGE: không cần duyệt người\n currentLessonInfo?.state === 'approved' ||\n currentLessonInfo?.review?.decision === 'APPROVED' ||\n approvedArtifacts.includes('LESSON') ||\n approvedArtifacts.includes(lessonCode);\n\n // ─────────────────────────────────────────────────────────────\n // 2. Gate LESSON: LLM_JUDGE = Agent kiểm · HITL = human duyệt (xử lý phía caller) · OFF = bỏ qua\n // ─────────────────────────────────────────────────────────────\n if (lessonGate === 'LLM_JUDGE' && !isLessonApproved && lessonContent) {\n onProgress?.('@reviewer', `🤖 Executing LLM-as-Judge academic evaluation on LESSON_${lessonCode}.md...`);\n try {\n const judgeObjectives = parseLessonObjectives(lessonContent, concept, bloomLevel);\n const judgeResult = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: 'LESSON',\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: judgeObjectives,\n generatedContentJson: JSON.stringify({\n lessonContent,\n lessonId: lessonCode,\n title: lessonTitle,\n frameworkExcerpt: framework ? framework.slice(0, 2500) : undefined,\n styleGuideExcerpt: styleGuide ? styleGuide.slice(0, 1500) : undefined,\n }),\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n });\n\nfunction injectYamlReviewMetadata(content: string, meta: Record<string, string>): string {\n const frontmatterMatch = content.match(/^---\\s*\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/);\n if (!frontmatterMatch) {\n const newYaml = Object.entries(meta)\n .map(([k, v]) => `${k}: \"${v}\"`)\n .join('\\n');\n return `---\\n${newYaml}\\n---\\n\\n${content}`;\n }\n\n let yamlBlock = frontmatterMatch[1];\n for (const [k, v] of Object.entries(meta)) {\n const keyRegex = new RegExp(`^${k}:.*$`, 'm');\n if (keyRegex.test(yamlBlock)) {\n yamlBlock = yamlBlock.replace(keyRegex, `${k}: \"${v}\"`);\n } else {\n yamlBlock += `\\n${k}: \"${v}\"`;\n }\n }\n\n return content.replace(frontmatterMatch[0], `---\\n${yamlBlock.trim()}\\n---\\n`);\n}\n\n if (judgeResult.passed && judgeResult.score >= 85) {\n isLessonApproved = true;\n const reviewDate = new Date().toISOString();\n const updatedLessonMarkdown = injectYamlReviewMetadata(lessonContent, {\n review_status: 'APPROVED',\n reviewed_by: '@reviewer (LLM-as-Judge)',\n reviewed_at: reviewDate,\n approved_by: '@reviewer',\n review_decision: 'APPROVED'\n });\n await storage.saveArtifact(projectId, lessonRelPath, updatedLessonMarkdown);\n const updatedHash = computeContentHash(updatedLessonMarkdown);\n\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: reviewDate,\n contentHash: updatedHash,\n review: {\n decision: 'APPROVED',\n reviewedBy: '@agent-as-judge',\n reviewedAt: reviewDate,\n score: judgeResult.score,\n critique: judgeResult.critique,\n }\n });\n onProgress?.('@reviewer', `✅ LLM-as-Judge PASS (${judgeResult.score}/100): ${judgeResult.critique}. Auto-approved for satellite generation.`);\n } else {\n // ── Revision loop tự động (P0): NEEDS_REVISION → repair theo hướng dẫn của Judge → re-judge.\n // Tối đa 2 vòng repair; vẫn fail mới pause HITL. autoRepairInstructions vốn có trong JudgeResult.\n const MAX_REPAIR_ROUNDS = 2;\n let currentContent = lessonContent;\n let currentResult: JudgeEvaluationResult = judgeResult;\n let repaired = false;\n\n for (let round = 1; round <= MAX_REPAIR_ROUNDS; round++) {\n const repairFeedback = [\n currentResult.autoRepairInstructions || '',\n ...currentResult.weaknesses.map((w) => `- ${w}`),\n ].filter(Boolean).join('\\n');\n\n onProgress?.('@repair', `🔧 Repair round ${round}/${MAX_REPAIR_ROUNDS} for LESSON_${lessonCode} (judge score ${currentResult.score}/100)...`);\n\n const repairedRaw = await runCurriculumAIInference(\n [{ role: 'user', content: `You previously authored \\`LESSON_${lessonCode}.md\\` and the academic Judge REJECTED it with the critique below.\\nRewrite the COMPLETE corrected document: fix every listed issue, keep the mandatory structure, frontmatter and all approved sections. Output 100% clean Markdown only.\\n\\nJUDGE CRITIQUE:\\n${repairFeedback}\\n\\nCURRENT DOCUMENT:\\n${currentContent}` }],\n commonContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@repair', chunk, { type: type || 'content', artifactType: 'LESSON' });\n }\n );\n\n if (!repairedRaw || repairedRaw.startsWith('⚠️') || repairedRaw.length < 200) {\n onProgress?.('@repair', `⚠️ Repair round ${round} produced invalid output — stopping repair loop`);\n break;\n }\n\n // Lint + auto-fix bản repaired trước khi re-judge\n const repairLint = lintAndSanitizeArtifact(repairedRaw, `LESSON_${lessonCode}.md`);\n currentContent = repairLint.autoFixedContent || repairedRaw;\n\n onProgress?.('@reviewer', `🤖 Re-judging repaired LESSON_${lessonCode} (round ${round})...`);\n const reJudge = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: 'LESSON',\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: parseLessonObjectives(currentContent, concept, bloomLevel),\n generatedContentJson: JSON.stringify({\n lessonContent: currentContent,\n lessonId: lessonCode,\n title: lessonTitle,\n frameworkExcerpt: framework ? framework.slice(0, 2500) : undefined,\n styleGuideExcerpt: styleGuide ? styleGuide.slice(0, 1500) : undefined,\n }),\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n });\n currentResult = reJudge;\n lessonContent = currentContent;\n await storage.saveArtifact(projectId, lessonRelPath, currentContent);\n producedArtifacts.push(`LESSON_${lessonCode}.md`);\n\n if (reJudge.passed && reJudge.score >= 85) {\n repaired = true;\n break;\n }\n }\n\n if (repaired) {\n isLessonApproved = true;\n const reviewDate = new Date().toISOString();\n const repairedMarkdown = injectYamlReviewMetadata(lessonContent, {\n review_status: 'APPROVED',\n reviewed_by: '@reviewer (LLM-as-Judge)',\n reviewed_at: reviewDate,\n approved_by: '@reviewer',\n review_decision: 'APPROVED'\n });\n await storage.saveArtifact(projectId, lessonRelPath, repairedMarkdown);\n const repairedHash = computeContentHash(repairedMarkdown);\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: reviewDate,\n contentHash: repairedHash,\n review: {\n decision: 'APPROVED',\n reviewedBy: '@agent-as-judge',\n reviewedAt: reviewDate,\n score: currentResult.score,\n critique: `Repaired after ${MAX_REPAIR_ROUNDS > 0 ? 'revision loop' : 'first pass'} — ${currentResult.critique}`,\n }\n });\n onProgress?.('@reviewer', `✅ Repair loop SUCCESS (${currentResult.score}/100) — LESSON_${lessonCode} auto-approved after revision`);\n } else {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'rejected',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n score: currentResult.score,\n critique: currentResult.critique,\n feedback: currentResult.weaknesses.join('; '),\n }\n });\n onProgress?.('@reviewer', `⚠️ LESSON_${lessonCode} still NEEDS_REVISION (${currentResult.score}/100) after ${MAX_REPAIR_ROUNDS} repair rounds: ${currentResult.weaknesses.join('; ')}`);\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'judge_needs_revision',\n };\n }\n }\n } catch (judgeErr: any) {\n // Fail-closed (P0): judge lỗi → KHÔNG âm thầm duyệt. Đánh dấu awaiting judge + trả paused để queue retry/hiện rõ.\n console.error(`[produceSingleLesson] LLM-as-Judge failed for ${lessonCode}:`, judgeErr?.message || judgeErr);\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Judge unavailable (fail-closed, KHÔNG tự duyệt): ${judgeErr?.message || String(judgeErr)}`,\n }\n });\n onProgress?.('@reviewer', `❌ LLM-as-Judge failed for LESSON_${lessonCode} — fail-closed (bài KHÔNG được duyệt ngầm): ${judgeErr?.message || judgeErr}`);\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'judge_error',\n };\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // 3. HITL Checkpoint for LESSON (chỉ khi Gate = HITL và chưa được duyệt)\n // ─────────────────────────────────────────────────────────────\n if (lessonGate === 'HITL' && !isLessonApproved) {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash,\n });\n\n const satellites = artifactScope.filter(s => s !== 'LESSON');\n for (const sat of satellites) {\n const satRelPath = `_content/${unitCode}/${sat}_${lessonCode}.md`;\n const satExists = await storage.readArtifact(projectId, satRelPath);\n if (!satExists) {\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: 'pending'\n });\n }\n }\n\n onProgress?.(\n '@reviewer',\n `🚦 HITL Review Gate Triggered: Completed \\`LESSON_${lessonCode}.md\\` (${pedagogyLabel}). Pausing for user approval before satellite artifact production (${satellites.join(', ')}).`,\n { gate: 'LESSON', lessonId: lessonCode, status: 'awaiting_approval', paused: true }\n );\n\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: true,\n gateStatus: 'awaiting_approval',\n };\n }\n\n // If approved or autonomy, record approved state if not yet recorded\n if (isLessonApproved && currentLessonInfo?.state !== 'approved') {\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: 'approved',\n generatedAt: new Date().toISOString(),\n contentHash,\n });\n }\n\n // Context derived from the canonical LESSON\n const satelliteContext = `${commonContext}\\n\\n[CANONICAL LESSON PLAN (${pedagogyLabel})]:\\n${lessonContent.slice(0, 4000)}`;\n\n // ─────────────────────────────────────────────────────────────\n // 4. Produce ACT (Hands-on Lab Exercise)\n // ─────────────────────────────────────────────────────────────\n const actRelPath = `_content/${unitCode}/ACT_${lessonCode}.md`;\n if (artifactScope.includes('ACT') && (!(await storage.readArtifact(projectId, actRelPath)) || force)) {\n onProgress?.('@activity', `[2/4] Authoring Hands-on Lab: \\`ACT_${lessonCode}.md\\`...`);\n\n const actDateStr = new Date().toISOString().split('T')[0];\n const actPrompt = `You are @activity (Lead Hands-on STEM & Laboratory Exercise Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the comprehensive hands-on lab guide: \\`ACT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter — copy verbatim, then fill in the blanks:\n---\nid: \"ACT_${lessonCode}\"\ntitle: \"[Descriptive lab title based on lesson concept]\"\ntype: \"ACT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T2\"\nversion: \"v1.0\"\ndate: \"${actDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Computational Thinking Focus\"\n - \"Materials & Setup\"\n - \"Constraints & Safety\"\n - \"Active Learning Workflow\"\n - \"3-Tier Differentiation\"\n - \"Reflection\"\n---\n\n2. Mandatory sections (matching ACT_template.md):\n - ## [REQUIRED] Computational Thinking Focus (Problem statement, decomposition, algorithm design)\n - ## [REQUIRED] Materials & Setup (Hardware BOM with <!-- [HARDWARE_BOM] --> marker, software, consumables)\n - ## [REQUIRED] Constraints & Safety (Technical/safety warnings, design constraints)\n - ## [REQUIRED] Active Learning Workflow with 3 phases:\n - ### Phase 1: Planning & Design\n - ### Phase 2: Implementation & Discovery\n - ### Phase 3: Debugging & Testing\n - ## [REQUIRED] 3-Tier Differentiation (Bronze/Silver/Gold tasks)\n - ## [REQUIRED] Reflection (Discussion question)\n3. Output 100% clean Markdown directly — NO code fences around the document.`;\n\n const rawAct = await runCurriculumAIInference(\n [{ role: 'user', content: actPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'content', artifactType: 'ACT' });\n }\n );\n\n if (!rawAct || rawAct.startsWith('⚠️') || rawAct.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@activity',\n artifactType: 'ACT',\n lessonId: lessonCode,\n message: `Agent @activity failed to author a valid ACT Lab for ${lessonCode}.`,\n rawError: rawAct || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, actRelPath, rawAct);\n await storage.updateArtifactState(projectId, lessonCode, 'ACT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawAct)\n });\n producedArtifacts.push(`ACT_${lessonCode}.md`);\n if (gateModeFor(gates, 'ACT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'ACT', content: rawAct,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // 5. Produce QUIZ (Assessment Bank & Rubrics)\n // ─────────────────────────────────────────────────────────────\n const quizRelPath = `_content/${unitCode}/QUIZ_${lessonCode}.md`;\n if (artifactScope.includes('QUIZ') && (!(await storage.readArtifact(projectId, quizRelPath)) || force)) {\n onProgress?.('@assessor', `[3/4] Authoring Assessment Bank: \\`QUIZ_${lessonCode}.md\\`...`);\n\n const quizDateStr = new Date().toISOString().split('T')[0];\n const quizPrompt = `You are @assessor (Lead Psychometrician & Competency Assessment Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the scenario-based diagnostic question bank: \\`QUIZ_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter — copy verbatim, then fill in the blanks:\n---\nid: \"QUIZ_${lessonCode}\"\ntitle: \"[Descriptive quiz title based on lesson concept]\"\ntype: \"QUIZ\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P2\"\ndeliverable: \"P2-T08\"\nversion: \"v1.0\"\ndate: \"${quizDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Assessment Objectives\"\n - \"Multiple-Choice Question Bank\"\n - \"Code Analysis / Debugging Question\"\n - \"Competency Rubric\"\n---\n\n2. Mandatory sections (matching QUIZ_v4.6_template.md):\n - ## 1. Metadata Specs (Lesson ID, Bloom target levels, language)\n - ## [REQUIRED] Assessment Objectives (Bloom taxonomy aligned goals for each LO)\n - ## [REQUIRED] Multiple-Choice Question Bank (≥5 scenario-based 4-option questions with: Question text, A/B/C/D options, Correct answer, Bloom level, Detailed distractor rationale)\n - ## [REQUIRED] Code Analysis / Debugging Question (1 deep code tracing question requiring students to predict output or identify bugs)\n - ## [REQUIRED] Competency Rubric (4-tier matrix: Developing → Proficient → Advanced → Exemplary)\n3. Output 100% clean Markdown directly — NO code fences around the document.`;\n\n const rawQuiz = await runCurriculumAIInference(\n [{ role: 'user', content: quizPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@assessor', chunk, { type: type || 'content', artifactType: 'QUIZ' });\n }\n );\n\n if (!rawQuiz || rawQuiz.startsWith('⚠️') || rawQuiz.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@assessor',\n artifactType: 'QUIZ',\n lessonId: lessonCode,\n message: `Agent @assessor failed to author a valid Quiz for ${lessonCode}.`,\n rawError: rawQuiz || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, quizRelPath, rawQuiz);\n await storage.updateArtifactState(projectId, lessonCode, 'QUIZ', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawQuiz)\n });\n producedArtifacts.push(`QUIZ_${lessonCode}.md`);\n if (gateModeFor(gates, 'QUIZ') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'QUIZ', content: rawQuiz,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // 6. Produce SLIDE (Presentation Deck in Marp format)\n // ─────────────────────────────────────────────────────────────\n const slideRelPath = `_content/${unitCode}/SLIDE_${lessonCode}.md`;\n if (artifactScope.includes('SLIDE') && (!(await storage.readArtifact(projectId, slideRelPath)) || force)) {\n onProgress?.('@illustrator', `[4/4] Authoring Presentation Slide Deck: \\`SLIDE_${lessonCode}.md\\`...`);\n\n const canonicalSlideTemplate = loadCurriculumTemplate('SLIDE_template.md');\n\n const slidePrompt = `You are @illustrator & @content (Pedagogical Slide Deck Presentation Specialists).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, lesson context, and the MARP SLIDE TEMPLATE below, author the complete, highly engaging Marp presentation deck: \\`SLIDE_${lessonCode}.md\\`.\n\n[MARP SLIDE TEMPLATE SCAFFOLD]:\n${canonicalSlideTemplate || `---\nmarp: true\ntheme: default\npaginate: true\nheader: \"${titleHeader(lessonTitle)}\"\nfooter: \"Curriculum OS • ${lessonCode} (${pedagogyLabel})\"\n---`}\n\nMANDATORY 12-14 SLIDE MICRO-CYCLE STRUCTURE (Delimited by '---'):\n1. **Slide 1 [Title & Mission]:** ${lessonCode}: ${lessonTitle} + Real-world inquiry hook\n2. **Slide 2 [Agenda & Roadmap]:** Timing and milestone breakdown (${pedagogyLabel})\n3. **Slide 3 [Warm-Up / Prior Knowledge]:** Prerequisite recall and mental model activator\n4. **Slide 4 [High-Stakes Hook Scenario]:** Authentic engineering/domain crisis scenario\n5. **Slide 5 [Core Concept 1: Mental Model]:** Principle definition, core terminology, and analogy\n6. **Slide 6 [Architecture & Visual Flow]:** Clean Mermaid diagram (flowchart or sequenceDiagram)\n7. **Slide 7 [Core Concept 2: Syntax / Mechanism Anatomy]:** Breakdown of mechanics and key rules\n8. **Slide 8 [Executable Blueprint / Demonstration]:** Annotated runnable code or structured domain walkthrough\n9. **Slide 9 [Guided Practice: Try It Now]:** 3-5 minute active check (I Do -> We Do)\n10. **Slide 10 [Integrated Hands-On Lab]:** 3-tier differentiated challenge (Bronze / Silver / Gold)\n11. **Slide 11 [Traffic Light Checkpoint & Pitfalls]:** Formative self-check & top 2 student misconceptions\n12. **Slide 12 [Exit Ticket & Metacognition]:** Scenario-based check + 1 reflection question\n13. **Slide 13 [Summary & Next Steps]:** 3 core takeaways and preview of next milestone\n\nRules:\n- No empty slides or shallow bullet lists. Every slide must contain substantive pedagogical value, diagrams, or runnable snippets.\n- Output 100% valid Marp Markdown.`;\n\n const rawSlide = await runCurriculumAIInference(\n [{ role: 'user', content: slidePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@illustrator', chunk, { type: type || 'content', artifactType: 'SLIDE' });\n }\n );\n\n if (!rawSlide || rawSlide.startsWith('⚠️') || rawSlide.length < 200) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_RESPONSE_MALFORMED',\n agent: '@illustrator',\n artifactType: 'SLIDE',\n lessonId: lessonCode,\n message: `Agent @illustrator failed to author valid Slides for ${lessonCode}.`,\n rawError: rawSlide || 'Empty AI response'\n });\n }\n\n await storage.saveArtifact(projectId, slideRelPath, rawSlide);\n await storage.updateArtifactState(projectId, lessonCode, 'SLIDE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawSlide)\n });\n producedArtifacts.push(`SLIDE_${lessonCode}.md`);\n if (gateModeFor(gates, 'SLIDE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'SLIDE', content: rawSlide,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // 7. Produce GUIDE (Teacher Instructional Guide)\n // ─────────────────────────────────────────────────────────────\n const guideRelPath = `_content/${unitCode}/GUIDE_${lessonCode}.md`;\n if (artifactScope.includes('GUIDE') && (!(await storage.readArtifact(projectId, guideRelPath)) || force)) {\n onProgress?.('@content', `Authoring Teacher Guide: \\`GUIDE_${lessonCode}.md\\`...`, { artifactType: 'GUIDE' });\n\n const guideDateStr = new Date().toISOString().split('T')[0];\n const guidePrompt = `You are @content (Senior Curriculum Developer & Teacher Facilitation Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\` and pedagogical context, author the comprehensive Teacher Guide: \\`GUIDE_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter — copy verbatim, then fill in the blanks:\n---\nid: \"GUIDE_${lessonCode}\"\ntitle: \"[Descriptive teacher guide title for this lesson]\"\ntype: \"GUIDE\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T5\"\nversion: \"v1.0\"\ndate: \"${guideDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n2. Mandatory sections (matching GUIDE_template.md):\n - ## [REQUIRED] Objectives & Preparation (Pedagogical goal, common blindspots, technical checklist)\n - ## [REQUIRED] Preparation Checklist & Workstation Setup\n - ## [REQUIRED] Facilitation Script & Timeline (Phase-by-phase teacher moves, inquiry questions, transitions)\n - ## [REQUIRED] Common Misconceptions & Diagnostic Remediation Matrix\n - ## [REQUIRED] Differentiated Support Strategies (Support scaffolds vs Extension challenges)\n3. Output 100% clean Markdown directly — NO code fences around the document.`;\n\n const rawGuide = await runCurriculumAIInference(\n [{ role: 'user', content: guidePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'GUIDE' });\n }\n );\n\n if (rawGuide && !rawGuide.startsWith('⚠️') && rawGuide.length >= 200) {\n await storage.saveArtifact(projectId, guideRelPath, rawGuide);\n await storage.updateArtifactState(projectId, lessonCode, 'GUIDE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawGuide)\n });\n producedArtifacts.push(`GUIDE_${lessonCode}.md`);\n if (gateModeFor(gates, 'GUIDE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'GUIDE', content: rawGuide,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // 8. Produce HANDOUT (Student Reference Notes)\n // ─────────────────────────────────────────────────────────────\n const handoutRelPath = `_content/${unitCode}/HANDOUT_${lessonCode}.md`;\n if (artifactScope.includes('HANDOUT') && (!(await storage.readArtifact(projectId, handoutRelPath)) || force)) {\n onProgress?.('@content', `Authoring Student Handout: \\`HANDOUT_${lessonCode}.md\\`...`, { artifactType: 'HANDOUT' });\n\n const handoutDateStr = new Date().toISOString().split('T')[0];\n const handoutPrompt = `You are @content (Educational Content Specialist).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the student self-paced reference handout: \\`HANDOUT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter — copy verbatim, then fill in the blanks:\n---\nid: \"HANDOUT_${lessonCode}\"\ntitle: \"[Descriptive cheat-sheet title for this lesson]\"\ntype: \"HANDOUT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T6\"\nversion: \"v1.0\"\ndate: \"${handoutDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n2. Mandatory sections (matching HANDOUT_template.md):\n - ## [REQUIRED] 📖 Core Concepts (Key terms, definitions, and student-friendly explanations)\n - ## [REQUIRED] Core Syntax & Mechanism Cheat Sheet (Quick-scan reference table)\n - ## [REQUIRED] Visual Mental Model / Architecture Diagram (Mermaid or ASCII diagram)\n - ## [REQUIRED] Step-by-Step Practical Quick-Start Guide\n - ## [REQUIRED] Self-Check Diagnostic Checklist (Can-do statements for student self-assessment)\n3. Output 100% clean Markdown directly — NO code fences around the document.`;\n\n const rawHandout = await runCurriculumAIInference(\n [{ role: 'user', content: handoutPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'HANDOUT' });\n }\n );\n\n if (rawHandout && !rawHandout.startsWith('⚠️') && rawHandout.length >= 200) {\n await storage.saveArtifact(projectId, handoutRelPath, rawHandout);\n await storage.updateArtifactState(projectId, lessonCode, 'HANDOUT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawHandout)\n });\n producedArtifacts.push(`HANDOUT_${lessonCode}.md`);\n if (gateModeFor(gates, 'HANDOUT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'HANDOUT', content: rawHandout,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // 9. Produce WKS (Guided Student Worksheet)\n // ─────────────────────────────────────────────────────────────\n const wksRelPath = `_content/${unitCode}/WKS_${lessonCode}.md`;\n if (artifactScope.includes('WKS') && (!(await storage.readArtifact(projectId, wksRelPath)) || force)) {\n onProgress?.('@content', `Authoring Student Worksheet: \\`WKS_${lessonCode}.md\\`...`, { artifactType: 'WKS' });\n\n const wksDateStr = new Date().toISOString().split('T')[0];\n const wksPrompt = `You are @content (Instructional Activity & Worksheet Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the guided student worksheet: \\`WKS_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter — copy verbatim, then fill in the blanks:\n---\nid: \"WKS_${lessonCode}\"\ntitle: \"[Descriptive worksheet title for this lesson]\"\ntype: \"WKS\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T7\"\nversion: \"v1.0\"\ndate: \"${wksDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n**Student Name:** _______________________ **Class:** _______________ **Date:** _______________\n\n> **For Students:** This document guides you step-by-step through the practical tasks. Read carefully, fill in the blanks, and mark the checkbox [x] once completed. If you encounter errors, refer back to your **HANDOUT**.\n\n2. Mandatory sections (matching WKS_template.md):\n - ## [REQUIRED] Part 1: Knowledge Check (Warm-up — Prior knowledge retrieval tasks)\n - ## [REQUIRED] Part 2: Concept Tracing & Diagram Fill-in\n - ## [REQUIRED] Part 3: Code Analysis & Bug Hunting Challenge\n - ## [REQUIRED] Part 4: Synthesis & Problem-Solving Application\n - ## [REQUIRED] Part 5: Self-Reflection & Learning Log\n3. Output 100% clean Markdown directly — NO code fences around the document.`;\n\n const rawWks = await runCurriculumAIInference(\n [{ role: 'user', content: wksPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@content', chunk, { type: type || 'chunk', artifactType: 'WKS' });\n }\n );\n\n if (rawWks && !rawWks.startsWith('⚠️') && rawWks.length >= 200) {\n await storage.saveArtifact(projectId, wksRelPath, rawWks);\n await storage.updateArtifactState(projectId, lessonCode, 'WKS', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawWks)\n });\n producedArtifacts.push(`WKS_${lessonCode}.md`);\n if (gateModeFor(gates, 'WKS') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'WKS', content: rawWks,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // 10. Produce CODE / CODE_LAB (Executable Code Lab & Starter Projects)\n // ─────────────────────────────────────────────────────────────\n const codeRelPath = `_content/${unitCode}/CODE_${lessonCode}.md`;\n if ((artifactScope.includes('CODE') || artifactScope.includes('CODE_LAB')) && (!(await storage.readArtifact(projectId, codeRelPath)) || force)) {\n onProgress?.('@activity', `Authoring Executable Code Lab: \\`CODE_${lessonCode}.md\\`...`, { artifactType: 'CODE' });\n\n const codeDateStr = new Date().toISOString().split('T')[0];\n const codePrompt = `You are @activity & @tech_sme (Lead Software Engineer & Technical SME).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, hardware platform, and starter code requirements, author the comprehensive executable Code Lab: \\`CODE_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter — copy verbatim, then fill in the blanks:\n---\nid: \"CODE_${lessonCode}\"\ntitle: \"[Descriptive code lab title for this lesson]\"\ntype: \"CODE\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T3\"\nversion: \"v1.0\"\ndate: \"${codeDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\ntemplate_required_sections:\n - \"Technical Overview & Architecture Blueprint\"\n - \"Hardware Pinout & Wiring Configuration Matrix\"\n - \"Starter Code Sandbox\"\n - \"Verified Reference Solution Code\"\n - \"Automated Test / Verification Script\"\n - \"Common Syntax & Runtime Pitfalls Matrix\"\n---\n\n2. Mandatory sections:\n - ## [REQUIRED] Technical Overview & Architecture Blueprint\n - ## [REQUIRED] Hardware Pinout & Wiring Configuration Matrix\n - ## [REQUIRED] Starter Code Sandbox (Skeleton code with explicit TODO comments for students)\n - ## [REQUIRED] Verified Reference Solution Code (100% syntactically valid, production-ready, fully commented)\n - ## [REQUIRED] Automated Test / Verification Script (How to compile, flash, or unit test)\n - ## [REQUIRED] Common Syntax & Runtime Pitfalls Matrix\n3. Output 100% clean Markdown directly with runnable code snippets — NO outer code fences around the document.`;\n\n const rawCode = await runCurriculumAIInference(\n [{ role: 'user', content: codePrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'chunk', artifactType: 'CODE' });\n }\n );\n\n if (rawCode && !rawCode.startsWith('⚠️') && rawCode.length >= 200) {\n await storage.saveArtifact(projectId, codeRelPath, rawCode);\n await storage.updateArtifactState(projectId, lessonCode, 'CODE', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawCode)\n });\n await storage.updateArtifactState(projectId, lessonCode, 'CODE_LAB', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawCode)\n });\n producedArtifacts.push(`CODE_${lessonCode}.md`);\n if (gateModeFor(gates, 'CODE') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'CODE', content: rawCode,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // 11. Produce EXT (Extension / Advanced Challenge)\n // ─────────────────────────────────────────────────────────────\n const extRelPath = `_content/${unitCode}/EXT_${lessonCode}.md`;\n if (artifactScope.includes('EXT') && (!(await storage.readArtifact(projectId, extRelPath)) || force)) {\n onProgress?.('@activity', `Authoring Advanced Extension Challenge: \\`EXT_${lessonCode}.md\\`...`, { artifactType: 'EXT' });\n\n const extDateStr = new Date().toISOString().split('T')[0];\n const extPrompt = `You are @activity (Lead STEM Specialist & Differentiated Extension Designer).\nBased on Master Lesson Plan \\`LESSON_${lessonCode}.md\\`, author the advanced extension challenge: \\`EXT_${lessonCode}.md\\`.\n\nMandatory Format Requirements:\n1. EXACT YAML Frontmatter — copy verbatim, then fill in the blanks:\n---\nid: \"EXT_${lessonCode}\"\ntitle: \"[Descriptive advanced challenge title for this lesson]\"\ntype: \"EXT\"\ncreated_by: \"Curriculum OS Builder\"\nphase: \"P3\"\ndeliverable: \"P3-T8\"\nversion: \"v1.0\"\ndate: \"${extDateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n# EXTENSION TASKS: [LESSON TITLE]\n## For: Advanced Students / Extra Time\n\n2. Mandatory sections (matching EXT_template.md):\n - ### Challenge 1: [Name] (Difficulty: ⭐⭐⭐) — Mission Briefing & Real-World High-Stakes Scenario\n - ### Challenge 2: [Name] (Difficulty: ⭐⭐⭐⭐) — Advanced Architectural Constraints & Edge Cases\n - ### Challenge 3: [Name] (Difficulty: ⭐⭐⭐⭐⭐) — Extension Milestones (Level 1: Ninja → Level 2: Guru → Level 3: Master)\n - ## [REQUIRED] Metacognitive Deep Dive & Engineering Trade-offs\n3. Output 100% clean Markdown directly — NO code fences around the document.`;\n\n const rawExt = await runCurriculumAIInference(\n [{ role: 'user', content: extPrompt }],\n satelliteContext,\n {},\n (chunk: string, type?: ChunkType) => {\n options.onProgress?.('@activity', chunk, { type: type || 'chunk', artifactType: 'EXT' });\n }\n );\n\n if (rawExt && !rawExt.startsWith('⚠️') && rawExt.length >= 200) {\n await storage.saveArtifact(projectId, extRelPath, rawExt);\n await storage.updateArtifactState(projectId, lessonCode, 'EXT', {\n state: 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(rawExt)\n });\n producedArtifacts.push(`EXT_${lessonCode}.md`);\n if (gateModeFor(gates, 'EXT') === 'LLM_JUDGE') {\n await judgeSatelliteArtifact({\n storage, projectId, lessonCode,\n sat: 'EXT', content: rawExt,\n concept, bloomLevel, standardStatements, onProgress,\n });\n }\n }\n }\n\n onProgress?.('@reviewer', `✅ Successfully authored all requested artifacts for \\`${lessonCode}\\` (${pedagogyLabel})!`);\n\n // ── Cross-Artifact Drift Check (P1, deterministic markdown-level): quét satellites đã sinh trong lần chạy này\n // kiểm frontmatter id/type khớp lessonCode + IDEA: phát hiện lệch ID sớm thay vì để Judge người dùng tự thấy.\n if (producedArtifacts.some((a) => !a.startsWith('LESSON_'))) {\n const driftFindings: string[] = [];\n for (const artFile of producedArtifacts) {\n if (artFile.startsWith('LESSON_')) continue;\n const satType = artFile.split('_')[0];\n const relPath = `_content/${unitCode}/${artFile}`;\n const satContent = await storage.readArtifact(projectId, relPath);\n if (!satContent) continue;\n const idMatch = satContent.match(/^id:\\s*\"([^\"]+)\"/m);\n const typeMatch = satContent.match(/^type:\\s*\"([^\"]+)\"/m);\n if (idMatch && !idMatch[1].includes(lessonCode)) {\n driftFindings.push(`${artFile}: frontmatter id \"${idMatch[1]}\" không chứa lessonId \"${lessonCode}\"`);\n }\n if (typeMatch && typeMatch[1] !== satType) {\n driftFindings.push(`${artFile}: frontmatter type \"${typeMatch[1]}\" ≠ expected \"${satType}\"`);\n }\n }\n if (driftFindings.length > 0) {\n onProgress?.('@reviewer', `⚠️ Cross-artifact drift detected (${driftFindings.length}): ${driftFindings.join(' | ')}`);\n // Ghi nhận vào state của LESSON để telemetry/queue thấy (không chặn — chỉ cảnh báo rõ ràng)\n await storage.updateArtifactState(projectId, lessonCode, 'LESSON', {\n state: isLessonApproved ? 'approved' : 'completed',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(lessonContent),\n review: {\n decision: isLessonApproved ? 'APPROVED' : 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Cross-artifact drift: ${driftFindings.slice(0, 5).join('; ')}`,\n }\n });\n }\n }\n\n return {\n lessonId: lessonCode,\n pedagogy,\n producedArtifacts,\n pausedForReview: false,\n };\n}\n\n/**\n * P0: Parse Learning Objectives THẬT từ markdown lesson (bảng LO hoặc bullet **LOx:**)\n * để Judge chấm đúng mục tiêu thay vì LO1 = concept hardcode. Fallback: concept duy nhất.\n */\nfunction parseLessonObjectives(lessonContent: string, concept: string, bloomLevel: string): Array<{ code: string; description: string; bloomLevel: string }> {\n const objectives: Array<{ code: string; description: string; bloomLevel: string }> = [];\n // Bảng: | LO1 | mô tả | ... | hoặc bullet: - **LO1:** mô tả\n const tableRe = /\\|\\s*(LO\\d+)\\s*\\|([^|]+)\\|/g;\n const bulletRe = /\\*\\*(LO\\d+)\\*\\*\\s*[:\\-–]\\s*([^\\n]+)/g;\n let m: RegExpExecArray | null;\n while ((m = tableRe.exec(lessonContent)) !== null) {\n const desc = m[2].trim();\n if (desc && desc.length > 5 && !/^\\**$/.test(desc)) objectives.push({ code: m[1], description: desc, bloomLevel });\n }\n if (objectives.length === 0) {\n while ((m = bulletRe.exec(lessonContent)) !== null) {\n objectives.push({ code: m[1], description: m[2].trim().slice(0, 200), bloomLevel });\n }\n }\n if (objectives.length === 0) {\n objectives.push({ code: 'LO1', description: concept, bloomLevel });\n }\n return objectives.slice(0, 6);\n}\n\n/**\n * Per-artifact LLM-as-Judge cho satellite — CHỈ gọi khi gateModeFor(gates, sat) === 'LLM_JUDGE'.\n * Pass → state 'approved' + review record. Fail → state 'rejected' + review record.\n * KHÔNG chặn pipeline (khác LESSON): satellite kém chỉ bị đánh dấu, người duyệt quyết tiếp theo.\n */\nasync function judgeSatelliteArtifact(\n ctx: {\n storage: ICurriculumStorage;\n projectId: string;\n lessonCode: string;\n sat: string;\n content: string;\n concept: string;\n bloomLevel: string;\n standardStatements: Record<string, string>;\n onProgress?: (agent: string, message: string, meta?: any) => void;\n }\n): Promise<void> {\n const { storage, projectId, lessonCode, sat, content } = ctx;\n try {\n ctx.onProgress?.('@reviewer', `\\u{1F916} Judging ${sat}_${lessonCode}...`);\n const result = await LLMJudgeEngine.evaluateArtifactWithLLM({\n targetArtifactType: sat,\n lessonId: lessonCode,\n expectedLanguage: 'en',\n targetObjectives: parseLessonObjectives(content, ctx.concept, ctx.bloomLevel),\n generatedContentJson: JSON.stringify({ content, artifactType: sat, lessonId: lessonCode }),\n standardStatements: Object.keys(ctx.standardStatements).length > 0 ? ctx.standardStatements : undefined,\n });\n const passed = result.passed && result.score >= 85;\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: passed ? 'approved' : 'rejected',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(content),\n review: {\n decision: passed ? 'APPROVED' : 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n score: result.score,\n critique: result.critique,\n feedback: passed ? undefined : result.weaknesses.join('; '),\n }\n });\n ctx.onProgress?.('@reviewer', passed\n ? `\\u{2705} ${sat} judge PASS (${result.score}/100)`\n : `\\u{26A0}\\u{FE0F} ${sat} judge NEEDS_REVISION (${result.score}/100)`);\n } catch (err: any) {\n // Fail-closed cho satellite: judge lỗi → state 'awaiting_review' + review record rõ ràng, KHÔNG âm thầm để completed\n console.error(`[produceSingleLesson] satellite judge failed for ${sat}_${lessonCode}:`, err?.message || err);\n try {\n await storage.updateArtifactState(projectId, lessonCode, sat, {\n state: 'awaiting_review',\n generatedAt: new Date().toISOString(),\n contentHash: computeContentHash(content),\n review: {\n decision: 'NEEDS_REVISION',\n reviewedBy: '@agent-as-judge',\n reviewedAt: new Date().toISOString(),\n critique: `Judge unavailable (fail-closed): ${err?.message || String(err)}`,\n }\n });\n ctx.onProgress?.('@reviewer', `❌ Judge failed for ${sat}_${lessonCode} — marked awaiting_review (fail-closed)`);\n } catch (stateErr: any) {\n console.error(`[produceSingleLesson] failed to persist judge-error state for ${sat}_${lessonCode}:`, stateErr?.message || stateErr);\n }\n }\n}\nfunction titleHeader(title: string): string {\n return title.replace(/[\"\\n\\r]/g, '');\n}\n\n/**\n * Batch production orchestrator supporting Lesson-by-Lesson (Strategy A) or Artifact-by-Artifact (Strategy B) execution.\n */\nexport async function produceBatchLessons(\n storage: ICurriculumStorage,\n projectId: string,\n lessonIds: string[],\n options: ProduceLessonOptions = {}\n): Promise<{\n totalLessons: number;\n completedLessons: string[];\n pausedLessonId?: string;\n report: ProjectStatusReport;\n}> {\n const { batchStrategy = 'depth_first_lesson', onProgress } = options;\n\n // Gate-driven: có HITL ở bất kỳ gate nào (SOT hoặc artifact) → breadth-first để dừng duyệt sớm.\n const gates = resolveGateSettings(options.gateSettings);\n const hasHitl = Object.values(gates).some((m) => m === 'HITL');\n const effectiveStrategy = hasHitl ? 'breadth_first_artifact' : batchStrategy;\n\n const completedLessons: string[] = [];\n\n // ─────────────────────────────────────────────────────────────\n // Strategy B: Artifact-by-Artifact (Breadth-first) -> Used for HITL\n // ─────────────────────────────────────────────────────────────\n if (effectiveStrategy === 'breadth_first_artifact') {\n onProgress?.('@router', `Bắt đầu sản xuất theo chiến lược [B] (Breadth-first): Chạy toàn bộ Lesson Plan (Giáo án) cho ${lessonIds.length} bài học trước...`);\n\n // Phase 1: Build all LESSON plans\n for (const lid of lessonIds) {\n const res = await produceSingleLesson(storage, projectId, lid, {\n ...options,\n artifactScope: ['LESSON'], // Only produce LESSON\n });\n completedLessons.push(lid);\n\n if (res.pausedForReview) {\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: lid,\n report,\n };\n }\n }\n\n // Check if HITL gate is enabled for LESSON\n if (gates.LESSON === 'HITL') {\n const pipelineState = await storage.getPipelineState(projectId);\n const unapproved = lessonIds.filter(lid => pipelineState.tasks[lid]?.LESSON?.state !== 'approved');\n if (unapproved.length > 0) {\n onProgress?.(\n '@reviewer',\n `🚦 Dừng kiểm duyệt HITL tại Chốt Giáo án: Đã soạn thảo xong Giáo án cho ${lessonIds.length} bài học. Vui lòng kiểm tra và phê duyệt để tiếp tục sản xuất Lab, Quiz, Slide.`,\n { gate: 'BATCH_LESSONS', status: 'awaiting_approval', paused: true }\n );\n\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: unapproved[0],\n report,\n };\n }\n }\n\n // Phase 2: Build Satellite Artifacts after LESSON approval\n const fullScope = options.artifactScope && options.artifactScope.length > 0 \n ? options.artifactScope \n : await getProjectArtifactScope(storage, projectId);\n const satelliteScope = fullScope.filter(s => s !== 'LESSON');\n\n onProgress?.('@router', `Tiếp tục sản xuất các học liệu vệ tinh (${satelliteScope.join(', ')}) cho ${lessonIds.length} bài học...`);\n for (const lid of lessonIds) {\n await produceSingleLesson(storage, projectId, lid, {\n ...options,\n artifactScope: satelliteScope,\n approvedArtifacts: ['LESSON', lid], // LESSON is approved\n });\n }\n } else {\n // ─────────────────────────────────────────────────────────────\n // Strategy A: Lesson-by-Lesson (Depth-first / Full Autonomy)\n // ─────────────────────────────────────────────────────────────\n onProgress?.('@router', `Bắt đầu sản xuất theo chiến lược [A] (Depth-first): Hoàn thành trọn gói từng bài học một...`);\n\n for (const lid of lessonIds) {\n onProgress?.('@router', `--- BẮT ĐẦU SẢN XUẤT BÀI HỌC: ${lid} ---`);\n const res = await produceSingleLesson(storage, projectId, lid, options);\n\n if (res.pausedForReview) {\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n pausedLessonId: lid,\n report,\n };\n }\n\n completedLessons.push(lid);\n }\n }\n\n const report = await storage.getProjectStatus(projectId);\n return {\n totalLessons: lessonIds.length,\n completedLessons,\n report,\n };\n}\n\n","/**\n * Gate Settings — toàn bộ logic \"ai kiểm artifact nào\" nằm ở đây, trong kit.\n * Composer chỉ gọi: resolveGateSettings(projectConfig.gateModes) rồi dùng kết quả.\n *\n * Vocabulary chuẩn (duy nhất, không có biến thể thứ hai):\n * 'OFF' — không kiểm\n * 'LLM_JUDGE' — Agent kiểm (LLM-as-Judge)\n * 'HITL' — Human kiểm (human-in-the-loop)\n *\n * Phạm vi phủ: SOT foundation (Learner Profile, Framework, Style Guide — duyệt trước khi\n * sinh content) + toàn bộ content artifacts.\n */\n\nexport type CurriculumGateMode = 'OFF' | 'LLM_JUDGE' | 'HITL';\n\nexport type CurriculumArtifactType =\n // SOT foundation gates (duyệt nền trước khi sinh content) — khớp SOT_EXECUTION_ORDER của Composer\n | 'LEARNER_PROFILE'\n | 'PROJECT_BRIEF'\n | 'REFERENCE_PACK'\n | 'CURRICULUM_FRAMEWORK'\n | 'KNOWLEDGE_EXPOSITION'\n | 'STYLE_GUIDE'\n | 'ART_DIRECTION'\n // content artifacts — khớp ARTIFACT_EXECUTION_ORDER của Composer\n | 'LESSON'\n | 'ACT'\n | 'QUIZ'\n | 'SLIDE'\n | 'GUIDE'\n | 'WKS'\n | 'HANDOUT'\n | 'EXT'\n | 'CODE'\n | 'MEDIA_SCRIPT'\n | 'EXIT_TICKET';\n\nexport type GateSettings = Partial<Record<CurriculumArtifactType, CurriculumGateMode>>;\n\nexport type ResolvedGateSettings = Readonly<Record<CurriculumArtifactType, CurriculumGateMode>>;\n\n/** Mặc định trùng hành vi production hiện tại: SOT nền = HITL, LESSON/CODE = Agent kiểm, còn lại OFF. */\nexport const DEFAULT_GATE_SETTINGS: ResolvedGateSettings = Object.freeze({\n LEARNER_PROFILE: 'HITL',\n PROJECT_BRIEF: 'HITL',\n REFERENCE_PACK: 'HITL',\n CURRICULUM_FRAMEWORK: 'HITL',\n KNOWLEDGE_EXPOSITION: 'LLM_JUDGE',\n STYLE_GUIDE: 'HITL',\n ART_DIRECTION: 'HITL',\n LESSON: 'LLM_JUDGE',\n ACT: 'OFF',\n QUIZ: 'OFF',\n SLIDE: 'OFF',\n GUIDE: 'OFF',\n WKS: 'OFF',\n HANDOUT: 'OFF',\n EXT: 'OFF',\n CODE: 'LLM_JUDGE',\n MEDIA_SCRIPT: 'OFF',\n EXIT_TICKET: 'OFF',\n});\n\nconst ALL_TYPES = Object.keys(DEFAULT_GATE_SETTINGS) as CurriculumArtifactType[];\n\nconst MODE_ALIASES: Record<string, CurriculumGateMode> = {\n off: 'OFF',\n none: 'OFF',\n llm_judge: 'LLM_JUDGE',\n judge: 'LLM_JUDGE',\n hitl: 'HITL',\n human: 'HITL',\n};\n\nconst TYPE_ALIASES: Record<string, CurriculumArtifactType> = {\n code_lab: 'CODE',\n gate1: 'LEARNER_PROFILE',\n gate2: 'CURRICULUM_FRAMEWORK',\n style_guide: 'STYLE_GUIDE',\n content_style_guide: 'STYLE_GUIDE',\n learner_profile: 'LEARNER_PROFILE',\n project_brief: 'PROJECT_BRIEF',\n reference_pack: 'REFERENCE_PACK',\n curriculum_framework: 'CURRICULUM_FRAMEWORK',\n art_direction: 'ART_DIRECTION',\n media_script: 'MEDIA_SCRIPT',\n exit_ticket: 'EXIT_TICKET',\n};\n\nfunction canonType(key: string): CurriculumArtifactType | undefined {\n const k = key.trim().toLowerCase();\n const t = TYPE_ALIASES[k] ?? (k.toUpperCase() as CurriculumArtifactType);\n return ALL_TYPES.includes(t) ? t : undefined;\n}\n\nfunction canonMode(value: unknown): CurriculumGateMode | undefined {\n if (typeof value !== 'string') return undefined;\n return MODE_ALIASES[value.trim().toLowerCase()];\n}\n\n/**\n * Chuẩn hoá config thô (vd: gateModes đọc từ project.config.json của Composer) thành GateSettings.\n * Key/value không nhận diện được bị bỏ qua — config sai không bao giờ làm workflow chết.\n */\nexport function parseGateSettings(raw: unknown): GateSettings {\n const out: GateSettings = {};\n if (!raw || typeof raw !== 'object') return out;\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n const t = canonType(key);\n const m = canonMode(value);\n if (t && m) out[t] = m;\n }\n return out;\n}\n\n/**\n * Điểm vào DUY NHẤT: raw config (hoặc đã chuẩn hoá) → settings đầy đủ cho mọi artifact type.\n * Key không có trong config nhận DEFAULT_GATE_SETTINGS.\n */\nexport function resolveGateSettings(raw?: unknown): ResolvedGateSettings {\n const parsed = parseGateSettings(raw);\n const resolved = {} as Record<CurriculumArtifactType, CurriculumGateMode>;\n for (const t of ALL_TYPES) resolved[t] = parsed[t] ?? DEFAULT_GATE_SETTINGS[t];\n return resolved;\n}\n\n/** Mode đã resolve cho 1 artifact type. */\nexport function gateModeFor(resolved: ResolvedGateSettings, type: CurriculumArtifactType): CurriculumGateMode {\n return resolved[type] ?? 'OFF';\n}\n","import { createHash } from 'node:crypto';\nimport { validateCurriculumPlan, type CurriculumPlan, type SessionPlan } from '../schemas/curriculumPlanSchema';\nimport { gateModeFor, type ResolvedGateSettings } from '../workflow/gateSettings';\n\n/**\n * KNOWLEDGE_EXPOSITION service — canonical knowledge reference per session,\n * generated ON DEMAND after framework approval (design doc: option b).\n *\n * Guarantees:\n * - fail-closed: refuses without approval.status === 'approved'\n * - hash invalidation: regenerates when plan_hash changed after approval\n * - scope-locked: covers exactly the session's nodes/keywords/depths\n * - student-facing: no teacher-only content (LESSON owns activities)\n */\n\nexport interface ExpositionLlmFn {\n (systemPrompt: string, userPrompt: string): Promise<string>;\n}\n\nexport interface ExpositionStorage {\n readArtifact(projectId: string, relPath: string): Promise<string | null>;\n saveArtifact(projectId: string, relPath: string, content: string): Promise<void>;\n}\n\nexport const EXPOSITION_REL = (lessonCode: string): string => '_sot/expositions/' + lessonCode + '.md';\n\nexport class ExpositionApprovalError extends Error {\n constructor(message: string) { super(message); this.name = 'ExpositionApprovalError'; }\n}\n\n/** Determine whether an existing EXPOSITION can be reused for this lesson. */\nexport function isExpositionFresh(\n existing: string | null,\n plan: CurriculumPlan,\n lessonCode: string,\n): boolean {\n if (!existing) return false;\n if (plan.approval.status !== 'approved' || plan.approval.plan_hash !== plan.plan_hash) return false;\n return existing.includes('plan_hash: \"' + plan.plan_hash + '\"');\n}\n\nconst DEPTH_RULES: Record<string, string> = {\n ulo: 'Write WHAT + WHY only: what it is, why it exists, technology-independent. Do NOT explain internal mechanisms.',\n cio: 'Write WHAT + WHY + HOW: include the mechanism, step by step, still technology-independent.',\n sio: 'Write WHAT + WHY + HOW + SPECIFIC: include concrete implementations and how the real project keywords are used.',\n};\n\nfunction buildSystemPrompt(): string {\n return [\n 'You write KNOWLEDGE_EXPOSITION: self-study reading material for a student in a teacherless program.',\n 'Rules:',\n '1. Cover EXACTLY the scoped keywords and concepts — nothing beyond the session scope.',\n '2. Every Key Term definition must be consistent with the glossary entry provided.',\n '3. Respect each concept depth target (ULO/CIO/SIO) — do not overshoot.',\n '4. Student-facing only: no teacher instructions, no classroom management text.',\n '5. Output the full markdown document following the provided section skeleton exactly (headers and placeholders preserved).',\n '6. English.',\n ].join('\\n');\n}\n\nfunction buildUserPrompt(session: SessionPlan, plan: CurriculumPlan, glossary: Array<{ term: string; definition?: string; example?: string }>): string {\n const depthLines = session.depth_assignments\n .map((d) => '- ' + d.node_id + ' [' + d.depth.toUpperCase() + ']: ' + DEPTH_RULES[d.depth])\n .join('\\n');\n const termLines = glossary\n .map((g) => '- ' + g.term + (g.definition ? ' — ' + g.definition : '') + (g.example ? ' (example: ' + g.example + ')' : ''))\n .join('\\n');\n return [\n 'Session: ' + session.id + ' — ' + session.title,\n 'Objective: ' + session.prose_objective,\n 'New keywords: ' + (session.new_keywords.join(', ') || '(none)'),\n 'Prerequisite keywords (assume known): ' + (session.prerequisite_keywords.join(', ') || '(none)'),\n 'Exit evidence: ' + session.exit_evidence.join('; '),\n '',\n 'Depth targets per concept:',\n depthLines,\n '',\n 'Glossary terms (definitions are canonical):',\n termLines || '(none provided — write definitions and mark them for glossary sync)',\n '',\n 'Section skeleton to fill (replace ONLY the {{placeholders}}):',\n '## Session Scope / ## Key Terms / ## Concept Narratives / ## Worked Micro-Examples / ## Common Mistakes / ## Self-Check Questions',\n 'Plan hash: ' + plan.plan_hash,\n ].join('\\n');\n}\n\nexport interface GenerateExpositionOptions {\n projectId: string;\n lessonCode: string;\n plan: CurriculumPlan;\n glossary: Array<{ term: string; definition?: string; example?: string }>;\n llmFn: ExpositionLlmFn;\n storage: ExpositionStorage;\n gates?: ResolvedGateSettings;\n}\n\nexport interface ExpositionResult {\n relPath: string;\n content: string;\n reused: boolean;\n gateMode: 'OFF' | 'LLM_JUDGE' | 'HITL';\n}\n\n/**\n * Generate (or reuse) the KNOWLEDGE_EXPOSITION for one lesson.\n * Throws ExpositionApprovalError when the plan is not approved or approval\n * hash mismatches the current plan — callers must NOT proceed to LESSON.\n */\nexport async function ensureKnowledgeExposition(options: GenerateExpositionOptions): Promise<ExpositionResult> {\n const { projectId, lessonCode, plan, glossary, llmFn, storage } = options;\n const session = plan.sessions.find((s) => s.id === lessonCode);\n if (!session) throw new Error('Session ' + lessonCode + ' not found in plan ' + plan.plan_id);\n\n const existing = await storage.readArtifact(projectId, EXPOSITION_REL(lessonCode));\n if (isExpositionFresh(existing, plan, lessonCode)) {\n return { relPath: EXPOSITION_REL(lessonCode), content: existing!, reused: true, gateMode: gateModeFor(options.gates ?? ({} as ResolvedGateSettings), 'KNOWLEDGE_EXPOSITION') };\n }\n\n // Fail-closed approval check (only needed when regenerating)\n if (plan.approval.status !== 'approved') {\n throw new ExpositionApprovalError('Plan ' + plan.plan_id + ' is not approved — approve CURRICULUM_FRAMEWORK before generating KNOWLEDGE_EXPOSITION');\n }\n if (plan.approval.plan_hash !== plan.plan_hash) {\n throw new ExpositionApprovalError('Approval hash ' + plan.approval.plan_hash + ' does not match current plan hash ' + plan.plan_hash + ' — re-approve after plan changes');\n }\n\n const content = (await llmFn(buildSystemPrompt(), buildUserPrompt(session, plan, glossary))).trim();\n if (content.length < 200) {\n throw new Error('EXPOSITION too short for ' + lessonCode + ' (' + content.length + ' chars) — refusing to save');\n }\n if (!content.includes('## Key Terms') || !content.includes('## Concept Narratives') || !content.includes('## Self-Check')) {\n throw new Error('EXPOSITION missing required sections for ' + lessonCode + ' — refusing to save');\n }\n\n // Gate: KNOWLEDGE_EXPOSITION default LLM_JUDGE — focused checks on scope,\n // glossary consistency and depth adherence. Fail-closed: failing verdict\n // triggers one repair round, then throws with the critique.\n const gateMode = gateModeFor(options.gates ?? ({} as ResolvedGateSettings), 'KNOWLEDGE_EXPOSITION');\n let finalContent = content;\n if (gateMode === 'LLM_JUDGE') {\n const judgeOnce = async (candidate: string): Promise<{ verdict: string; score: number; critique: string }> => {\n const judgePrompt = [\n 'Judge this KNOWLEDGE_EXPOSITION document for session ' + lessonCode + '.',\n 'Plan scope: nodes=' + session.node_ids.join(',') + '; new keywords=' + session.new_keywords.join(',') + '; depth targets=' + session.depth_assignments.map((d) => d.node_id + ':' + d.depth).join(','),\n 'Glossary terms that MUST be covered: ' + (glossary.map((g) => g.term).join(', ') || '(none scoped)'),\n 'Check: (1) covers every scoped keyword and concept, (2) NO content beyond session scope, (3) depth of each concept matches its target (ulo=what+why, cio=+how, sio=+specific), (4) student-facing self-study tone.',\n 'Reply ONLY JSON: {\"verdict\":\"APPROVED|NEEDS_REVISION|REJECTED\",\"score\":0-100,\"critique\":\"one paragraph\"}',\n '',\n '--- DOCUMENT ---',\n candidate,\n ].join('\\n');\n const raw = await llmFn('You are a strict curriculum judge. Output JSON only.', judgePrompt);\n const match = raw.match(/\\{[\\s\\S]*\\}/);\n if (!match) return { verdict: 'NEEDS_REVISION', score: 0, critique: 'Judge returned non-JSON output' };\n const parsed = JSON.parse(match[0]) as { verdict?: string; score?: number; critique?: string };\n return { verdict: parsed.verdict ?? 'NEEDS_REVISION', score: parsed.score ?? 0, critique: parsed.critique ?? '' };\n };\n let verdict = await judgeOnce(finalContent);\n if (verdict.verdict !== 'APPROVED') {\n const repairPrompt = finalContent + '\\n\\nJUDGE CRITIQUE (fix ALL issues, output the COMPLETE corrected document):\\n' + verdict.critique;\n finalContent = (await llmFn(buildSystemPrompt(), repairPrompt)).trim();\n verdict = await judgeOnce(finalContent);\n }\n if (verdict.verdict !== 'APPROVED') {\n throw new Error('EXPOSITION failed judge for ' + lessonCode + ' (verdict ' + verdict.verdict + ', score ' + verdict.score + '): ' + verdict.critique);\n }\n }\n\n const stamped = finalContent\n + '\\n---\\nplan_hash: \"' + plan.plan_hash + '\"'\n + '\\n- **Plan reference:** ' + plan.plan_hash\n + '\\n- **Last Updated:** ' + new Date().toISOString() + '\\n';\n await storage.saveArtifact(projectId, EXPOSITION_REL(lessonCode), stamped);\n return { relPath: EXPOSITION_REL(lessonCode), content: stamped, reused: false, gateMode: gateModeFor(options.gates ?? ({} as ResolvedGateSettings), 'KNOWLEDGE_EXPOSITION') };\n}\n\n/** Build a compact exposition context block for LESSON / satellite prompts. */\nexport function buildExpositionContext(expositionContent: string, maxChars = 6000): string {\n const trimmed = expositionContent.trim();\n if (trimmed.length <= maxChars) return trimmed;\n // Keep frontmatter + headers + first paragraph of each section\n const sections = trimmed.split(/\\n(?=## )/);\n let out = sections[0];\n for (let i = 1; i < sections.length && out.length < maxChars; i++) {\n const s = sections[i];\n out += '\\n' + s.slice(0, Math.max(400, maxChars - out.length));\n }\n return out.slice(0, maxChars);\n}\n\n/** Integrity hash helper for cache bookkeeping. */\nexport function expositionCacheKey(planHash: string, lessonCode: string): string {\n return createHash('sha256').update(planHash + '|' + lessonCode).digest('hex').slice(0, 16);\n}\n\n// ─── Composer/produce integration (lazy import to avoid cycles) ─────────────\n\nimport type { ICurriculumStorage } from '../storage';\n\n/**\n * End-to-end helper for the produce flow: read plan + glossary from SOT\n * storage, ensure approval, generate/reuse the EXPOSITION, return a compact\n * context block. Returns null when no plan exists (legacy flow) — callers\n * render that state explicitly in telemetry, never silently.\n */\nexport async function ensureExpositionForLesson(\n storage: ICurriculumStorage,\n projectId: string,\n lessonCode: string,\n options: { gates?: ResolvedGateSettings; force?: boolean } = {},\n): Promise<{ relPath: string; context: string; reused: boolean } | null> {\n const planRaw = await storage.readArtifact(projectId, '_sot/CURRICULUM_PLAN.json');\n if (!planRaw) return null; // legacy flow — explicit, logged by caller\n const plan = validateCurriculumPlan(JSON.parse(planRaw)) as CurriculumPlan;\n const session = plan.sessions.find((s) => s.id === lessonCode);\n if (!session) return null; // plan exists but lesson outside plan — explicit\n let glossary: Array<{ term: string; definition?: string; example?: string }> = [];\n const glossaryRaw = await storage.readArtifact(projectId, '_sot/GLOSSARY.json');\n if (glossaryRaw) {\n try { glossary = (JSON.parse(glossaryRaw) as { terms?: typeof glossary }).terms ?? []; } catch { glossary = []; }\n }\n const scopedTerms = new Set(plan.glossary_scope.find((g) => g.session_id === lessonCode)?.terms ?? []);\n glossary = glossary.filter((g) => scopedTerms.has(g.term));\n const { runCurriculumAIInference } = await import('../ai/streamRunner');\n const result = await ensureKnowledgeExposition({\n projectId,\n lessonCode,\n plan,\n glossary,\n llmFn: async (systemPrompt, userPrompt) => {\n const out = await runCurriculumAIInference(\n [{ role: 'user', content: userPrompt + '\\n\\n[SYSTEM RULES]:\\n' + systemPrompt }],\n 'You are generating KNOWLEDGE_EXPOSITION - canonical self-study knowledge for one session. Output the complete markdown document only.',\n {},\n );\n return out;\n },\n storage,\n gates: options.gates,\n });\n return { relPath: result.relPath, context: buildExpositionContext(result.content), reused: result.reused };\n}\n","import { createHash } from 'node:crypto';\nimport {\n CurriculumPlanSchema, PlanningGraphSchema, type CurriculumPlan,\n type PlanningGraph, type PlanningNode, type DependencyEdge,\n type PlanConstraints, type TranslationPolicy, type BloomLevel, type DepthLevel,\n} from '../schemas/curriculumPlanSchema';\n\n/**\n * Curriculum Planner — turns a domain planning graph + constraints into a\n * validated CurriculumPlan (planner outputs [1]-[7] from the design doc).\n *\n * Deterministic-first: LLM is optional and only used for prose objectives via\n * the `llmFn` hook. Packing, depth and prereq/scaffold decisions are pure\n * functions — testable, replayable, no silent fallbacks.\n */\n\nexport interface PlannerLlmFn {\n (systemPrompt: string, userPrompt: string): Promise<string>;\n}\n\nexport interface PlanOptions {\n constraints: PlanConstraints;\n translation?: TranslationPolicy;\n /** Optional LLM for prose objectives; absent => deterministic templates. */\n llmFn?: PlannerLlmFn;\n}\n\nexport interface PlanResult {\n plan: CurriculumPlan;\n warnings: string[];\n}\n\n// ─── helpers ────────────────────────────────────────────────────────────────\n\ntype Raw = Record<string, unknown>;\nconst asArr = (v: unknown): Raw[] => (Array.isArray(v) ? (v as Raw[]) : []);\nconst asStr = (v: unknown, dflt = ''): string => (typeof v === 'string' ? v : dflt);\nconst asNum = (v: unknown, dflt: number): number => (typeof v === 'number' && Number.isFinite(v) ? v : dflt);\nconst asStrArr = (v: unknown): string[] => (Array.isArray(v) ? v.filter((x): x is string => typeof x === 'string') : []);\n\nconst BLOOM_ORDER: BloomLevel[] = ['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create'];\n\nconst pad2 = (n: number): string => String(n).padStart(2, '0');\n\nfunction titleCase(s: string): string {\n return s.replace(/[_-]+/g, ' ').trim().replace(/^\\w/, (c) => c.toUpperCase());\n}\n\n// ─── Stage 0: tolerant normalization of raw domain-kit shapes ───────────────\n\n/**\n * Normalize any accepted input shape into a PlanningGraph.\n * Accepted: CurriculumFeed v2 (learning_nodes), knowledge_graph (concepts),\n * AssembledRoadmap (phases/milestones), raw project_graph (features/steps),\n * hybrid (concepts + features/roadmap + links). Throws on unusable input.\n */\nexport function normalizePlanningGraph(raw: unknown): PlanningGraph {\n if (!raw || typeof raw !== 'object') throw new Error('Planner input graph is missing or not an object');\n const r = raw as Raw;\n const warnings: string[] = [];\n const nodes: PlanningNode[] = [];\n const edges: DependencyEdge[] = [];\n const groupings: PlanningGraph['groupings'] = [];\n const phases: PlanningGraph['phases'] = [];\n let graphType: PlanningGraph['graph_type'] = 'project_graph';\n\n if (Array.isArray(r.learning_nodes)) {\n // ── CurriculumFeed v2 (preferred shape) ──\n graphType = 'curriculum_feed';\n for (const n of asArr(r.learning_nodes)) {\n const kw = (n.keywords ?? {}) as Raw;\n const scaff = (n.scaffolding ?? {}) as Raw;\n nodes.push({\n id: asStr(n.id),\n kind: (asStr(n.kind, 'skill') as PlanningNode['kind']),\n name: asStr(n.name, asStr(n.id)),\n concept_codes: asStrArr(n.concept_codes),\n keywords: asStrArr(kw.all),\n new_keywords: asStrArr(kw.new),\n prerequisite_keywords: asStrArr(kw.prerequisite),\n estimated_minutes: Math.max(0, Math.round(asNum(n.estimated_minutes, 30))),\n bloom_hint: (asStr(n.bloom_hint) || null) as PlanningNode['bloom_hint'],\n depth_hint: (asStr(n.depth_hint) || null) as PlanningNode['depth_hint'],\n completion_level: (asStr(n.completion_level, 'standard') as PlanningNode['completion_level']),\n scaffold_candidates: asArr(scaff.scaffold_candidates).map((c) => ({\n item: asStr(c.item),\n reason: asStr(c.reason),\n minutes_saved: Math.max(0, Math.round(asNum(c.minutes_saved, 0))),\n suggest: (asStr(c.suggest, 'provide_full') as PlanningNode['scaffold_candidates'][number]['suggest']),\n })),\n references: asArr(n.references).map((ref) => ({ file: asStr(ref.file), evidence: asStr(ref.evidence) })).filter((ref) => ref.file),\n phase_id: asStr(n.phase_id),\n });\n }\n for (const e of asArr(r.dependency_edges)) {\n edges.push({\n from: asStr(e.from),\n to: asStr(e.to),\n kind: (asStr(e.kind, 'knowledge') as DependencyEdge['kind']),\n reason: asStr(e.reason),\n });\n }\n for (const g of asArr(r.suggested_groupings)) {\n groupings.push({ id: asStr(g.id), name: asStr(g.name, asStr(g.id)), node_ids: asStrArr(g.node_ids), rationale: asStr(g.rationale) });\n }\n for (const ph of asArr(r.phases)) {\n phases.push({\n id: asStr(ph.id),\n order: Math.max(1, Math.round(asNum(ph.order, phases.length + 1))),\n name: asStr(ph.name, asStr(ph.id)),\n product_completion: asStr(ph.product_completion),\n node_ids: asStrArr(ph.node_ids),\n });\n }\n } else {\n const concepts = asArr(r.concepts);\n if (concepts.length > 0) {\n // ── knowledge_graph / hybrid: concept nodes with prerequisite edges ──\n graphType = Array.isArray(r.features) || Array.isArray(r.phases) ? 'hybrid_graph' : 'knowledge_graph';\n for (const c of concepts) {\n const pt = asArr(c.problem_types)[0];\n nodes.push({\n id: asStr(c.id),\n kind: 'concept',\n name: asStr(c.name, asStr(c.id)),\n // standardized/proposed concept code (STEP_2_5) preferred over raw id\n concept_codes: [asStr(c.code) || asStr(c.id)].filter(Boolean),\n keywords: asStrArr(c.keywords),\n new_keywords: [],\n prerequisite_keywords: [],\n estimated_minutes: Math.max(0, Math.round(asNum(c.estimated_minutes, 30))),\n bloom_hint: (pt ? asStr(pt.bloom_level, 'Understand') : 'Understand') as BloomLevel,\n depth_hint: null,\n completion_level: 'standard',\n scaffold_candidates: [],\n references: [],\n phase_id: '',\n });\n for (const p of asStrArr(c.prerequisites)) {\n edges.push({ from: p, to: asStr(c.id), kind: 'knowledge', reason: 'concept prerequisite' });\n }\n }\n let ci = 0;\n for (const cat of asArr(r.categories)) {\n ci += 1;\n const ids = asStrArr(cat.concept_ids);\n if (ids.length > 0) groupings.push({ id: asStr(cat.id, 'cat' + ci), name: asStr(cat.name, 'Category ' + ci), node_ids: ids, rationale: asStr(cat.description) });\n }\n }\n if (Array.isArray(r.phases)) {\n // ── AssembledRoadmap: phases → milestones ──\n if (concepts.length === 0) graphType = 'project_graph';\n for (const ph of asArr(r.phases)) {\n const phName = asStr(ph.phase_name, 'Phase');\n const msIds: string[] = [];\n let prev = '';\n for (const m of asArr(ph.milestones)) {\n const id = asStr(m.id);\n if (!id) continue;\n msIds.push(id);\n nodes.push({\n id,\n kind: 'skill',\n name: asStr(m.name, id),\n concept_codes: asStrArr(String(m.concept_code ?? '').split(',').map((s) => s.trim())).filter(Boolean),\n keywords: asStrArr(m.all_keywords),\n new_keywords: asStrArr(m.new_keywords),\n prerequisite_keywords: asStrArr(m.prerequisite_keywords),\n estimated_minutes: Math.max(0, Math.round(asNum(m.estimated_minutes, 45))),\n bloom_hint: null,\n depth_hint: null,\n completion_level: 'standard',\n scaffold_candidates: [],\n references: [],\n phase_id: '',\n });\n if (prev) edges.push({ from: prev, to: id, kind: 'task', reason: 'roadmap sequence' });\n prev = id;\n }\n if (msIds.length > 0) {\n const gid = asStr(ph.phase_id) ? 'P' + asStr(ph.phase_id) : phName;\n groupings.push({ id: gid, name: phName, node_ids: msIds, rationale: asStr(ph.description ?? ph.target_outcome) });\n }\n }\n } else if (concepts.length === 0 && Array.isArray(r.features)) {\n // ── raw project_graph: features → steps ──\n graphType = 'project_graph';\n for (const f of asArr(r.features)) {\n const fid = asStr(f.id);\n const steps = asArr(f.steps);\n let prev = '';\n let stepCount = 0;\n for (let i = 0; i < steps.length; i++) {\n const s = steps[i];\n const id = asStr(s.id, fid + '-S' + pad2(i + 1));\n if (!asStr(s.id) && !fid) continue;\n stepCount += 1;\n nodes.push({\n id,\n kind: 'product_step',\n name: asStr(s.name, id),\n concept_codes: asStrArr(s.concept_codes),\n keywords: asStrArr(s.keywords),\n new_keywords: [],\n prerequisite_keywords: [],\n estimated_minutes: Math.max(0, Math.round(asNum(s.estimated_minutes, 45))),\n bloom_hint: 'Apply',\n depth_hint: null,\n completion_level: 'standard',\n scaffold_candidates: [],\n references: [],\n phase_id: '',\n });\n if (prev) edges.push({ from: prev, to: id, kind: 'task', reason: 'feature build order' });\n prev = id;\n }\n if (stepCount === 0 && fid) {\n nodes.push({ id: fid, kind: 'skill', name: asStr(f.name, fid), concept_codes: [], keywords: [], new_keywords: [], prerequisite_keywords: [], estimated_minutes: 45, bloom_hint: 'Apply', depth_hint: null, completion_level: 'standard', scaffold_candidates: [], references: [], phase_id: '' });\n }\n }\n }\n // hybrid links: concept knowledge-edges into the feature's nodes\n for (const l of asArr(r.links)) {\n const conceptId = asStr(l.concept_id);\n const featureId = asStr(l.feature_id);\n if (!conceptId || !featureId) continue;\n const target = nodes.find((n) => n.id === featureId) ?? nodes.find((n) => n.id.startsWith(featureId + '-'));\n if (target) edges.push({ from: conceptId, to: target.id, kind: 'knowledge', reason: asStr(l.relationship, 'hybrid link') });\n }\n }\n\n const validIds = new Set(nodes.map((n) => n.id).filter(Boolean));\n const keptNodes = nodes.filter((n) => n.id);\n const keptEdges = edges.filter((e) => validIds.has(e.from) && validIds.has(e.to) && e.from !== e.to);\n const droppedEdges = edges.length - keptEdges.length;\n if (droppedEdges > 0) warnings.push(droppedEdges + ' edge(s) dropped (unknown endpoint or self-loop)');\n if (keptNodes.length === 0) throw new Error('Planner input produced zero planning nodes — unusable graph');\n if (new Set(keptNodes.map((n) => n.id)).size !== keptNodes.length) throw new Error('Planning graph contains duplicate node ids');\n\n return PlanningGraphSchema.parse({\n graph_type: graphType,\n warnings,\n hallucination_count: Math.max(0, Math.round(asNum(r.hallucination_count, 0))),\n nodes: keptNodes,\n edges: keptEdges,\n groupings,\n phases,\n });\n}\n\n// ─── Cycle guard + topo order (planner never trusts upstream ordering) ──────\n\nexport function assertAcyclic(nodes: PlanningNode[], edges: DependencyEdge[]): void {\n const adj = new Map<string, string[]>();\n for (const n of nodes) adj.set(n.id, []);\n for (const e of edges) adj.get(e.to)!.push(e.from); // to depends on from\n const state = new Map<string, 0 | 1 | 2>();\n const stack: string[] = [];\n const visit = (id: string): void => {\n const st = state.get(id) ?? 0;\n if (st === 1) {\n const start = Math.max(0, stack.indexOf(id));\n throw new Error('Dependency cycle detected: ' + [...stack.slice(start), id].join(' -> '));\n }\n if (st === 2) return;\n state.set(id, 1);\n stack.push(id);\n for (const dep of adj.get(id) ?? []) visit(dep);\n stack.pop();\n state.set(id, 2);\n };\n for (const n of nodes) visit(n.id);\n}\n\nexport function topoSort(nodes: PlanningNode[], edges: DependencyEdge[]): string[] {\n const indeg = new Map<string, number>(nodes.map((n) => [n.id, 0]));\n const out = new Map<string, string[]>(nodes.map((n) => [n.id, []]));\n for (const e of edges) { out.get(e.from)!.push(e.to); indeg.set(e.to, (indeg.get(e.to) ?? 0) + 1); }\n const order: string[] = [];\n const queue = nodes.filter((n) => (indeg.get(n.id) ?? 0) === 0).map((n) => n.id);\n while (queue.length > 0) {\n const id = queue.shift()!;\n order.push(id);\n for (const nxt of out.get(id) ?? []) {\n const d = (indeg.get(nxt) ?? 1) - 1;\n indeg.set(nxt, d);\n if (d === 0) queue.push(nxt);\n }\n }\n if (order.length !== nodes.length) throw new Error('Dependency cycle detected during topo sort');\n return order;\n}\n\n// ─── Stage 1-2: course + unit structure ─────────────────────────────────────\n\nconst MAX_SESSION_NODES = 4;\n\ninterface UnitGrouping { key: string; name: string; orderedIds: string[]; rationale: string; phaseIds: string[]; productCompletion: string }\n\n/**\n * Estimated session count of a group: content minutes over the per-session\n * content budget, inflated by a bin-packing loss factor — nodes cannot be\n * split arbitrarily, so real packing always loses some budget per session\n * (observed ~15% on live runs). Without the factor a unit that estimates at\n * 11.4 sessions packs out to 14.\n */\nfunction groupSessionEstimate(g: UnitGrouping, nodeMinutes: Map<string, number>, sessionMinutes: number, overheadRatio: number): number {\n const PACKING_LOSS = 1.15;\n const total = g.orderedIds.reduce((acc, id) => acc + (nodeMinutes.get(id) || 45), 0);\n const perSession = sessionMinutes * (1 - overheadRatio);\n return Math.max(1, (total / Math.max(1, perSession)) * PACKING_LOSS);\n}\n\n/**\n * Merge consecutive phase groups into units sized by MINUTES (not node count):\n * a unit targets minSessions..maxSessions sessions of real content. A phase is\n * never split — an oversized phase becomes one big unit, never two halves.\n */\nfunction mergeGroupsIntoUnits(\n groups: UnitGrouping[],\n minSessions: number,\n maxSessions: number,\n nodeMinutes: Map<string, number>,\n sessionMinutes: number,\n overheadRatio: number,\n): UnitGrouping[] {\n const merged: UnitGrouping[] = [];\n let cur: UnitGrouping | null = null;\n let span = 0;\n for (const g of groups) {\n const gSpan = groupSessionEstimate(g, nodeMinutes, sessionMinutes, overheadRatio);\n // close current unit when the next group would overflow it; a whole phase\n // that alone exceeds maxSessions stays alone rather than being split later\n const overflow = cur !== null && span + gSpan > maxSessions + 1e-9;\n if (overflow && cur) {\n merged.push(cur);\n cur = null;\n span = 0;\n }\n if (!cur) {\n cur = { key: g.key, name: g.name, orderedIds: [...g.orderedIds], rationale: g.rationale, phaseIds: [...g.phaseIds], productCompletion: g.productCompletion };\n } else {\n cur.orderedIds.push(...g.orderedIds);\n cur.phaseIds.push(...g.phaseIds);\n cur.productCompletion = cur.productCompletion || g.productCompletion;\n cur.rationale = cur.rationale + ' + ' + g.rationale;\n }\n span += gSpan;\n }\n if (cur) merged.push(cur);\n return merged;\n}\n\nfunction buildUnitGroupings(graph: PlanningGraph, orderedIds: string[]): UnitGrouping[] {\n const pos = new Map(orderedIds.map((id, i) => [id, i]));\n const result: UnitGrouping[] = [];\n const covered = new Set<string>();\n // Phase-driven: when the feed carries development phases, they ARE the\n // teaching sequence and the unit backbone (progressive completion).\n if (graph.phases.length > 0) {\n const phases = [...graph.phases].sort((a, b) => a.order - b.order);\n const phaseNodeIds = new Map(phases.map((p) => [p.id, p.node_ids.filter((id) => pos.has(id))]));\n // nodes referenced by no phase (defensive — emitter fail-closes earlier)\n const rest: string[] = orderedIds.filter((id) => !phases.some((p) => p.node_ids.includes(id)));\n for (const ph of phases) {\n const ids = phaseNodeIds.get(ph.id) ?? [];\n if (ids.length === 0) continue;\n for (const id of ids) {\n if (covered.has(id)) throw new Error('Node ' + id + ' appears in multiple phases — cannot form units');\n covered.add(id);\n }\n result.push({\n key: ph.id,\n name: ph.name,\n orderedIds: [...ids].sort((a, b) => pos.get(a)! - pos.get(b)!),\n rationale: ph.product_completion || 'Phase ' + ph.order + ' completion level',\n phaseIds: [ph.id],\n productCompletion: ph.product_completion,\n });\n }\n if (rest.length > 0) {\n for (let i = 0; i < rest.length; i += MAX_SESSION_NODES) {\n const chunk = rest.slice(i, i + MAX_SESSION_NODES);\n result.push({ key: 'R' + pad2(result.length + 1), name: 'Integration ' + pad2(result.length + 1), orderedIds: chunk, rationale: 'Nodes outside declared phases', phaseIds: [], productCompletion: '' });\n }\n }\n if (result.length === 0) throw new Error('Planning graph produced no unit groupings');\n return result;\n }\n const groupings = [...graph.groupings];\n for (const g of groupings) {\n const inGraph = g.node_ids.filter((id) => pos.has(id));\n if (inGraph.length === 0) continue;\n for (const id of inGraph) {\n if (covered.has(id)) throw new Error('Node ' + id + ' appears in multiple groupings — cannot form units');\n covered.add(id);\n }\n result.push({ key: g.id, name: g.name, orderedIds: [...inGraph].sort((a, b) => pos.get(a)! - pos.get(b)!), rationale: g.rationale || 'Domain grouping ' + g.id, phaseIds: [], productCompletion: '' });\n }\n const rest = orderedIds.filter((id) => !covered.has(id));\n for (let i = 0; i < rest.length; i += MAX_SESSION_NODES) {\n const chunk = rest.slice(i, i + MAX_SESSION_NODES);\n result.push({ key: 'R' + pad2(result.length + 1), name: 'Unit ' + pad2(result.length + 1), orderedIds: chunk, rationale: 'Topo-order remainder grouping', phaseIds: [], productCompletion: '' });\n }\n if (result.length === 0) throw new Error('Planning graph produced no unit groupings');\n return result;\n}\n\n// ─── Stage 3: session packing ───────────────────────────────────────────────\n\nexport interface PackingSpec {\n contentBudget: number;\n overheadMinutes: number;\n sessionDurationMinutes: number;\n}\n\nexport function computePackingSpec(constraints: PlanConstraints): PackingSpec {\n const overheadMinutes = Math.round(constraints.session_duration_minutes * constraints.overhead_ratio);\n return {\n contentBudget: constraints.session_duration_minutes - overheadMinutes,\n overheadMinutes,\n sessionDurationMinutes: constraints.session_duration_minutes,\n };\n}\n\ninterface PackedEntry {\n id: string;\n minutes: number;\n part: number;\n totalParts: number;\n}\n\ninterface PackedSession {\n groupId: string;\n nodeIds: string[];\n entries: PackedEntry[];\n knowledgeMinutes: number;\n practiceMinutes: number;\n oversized: boolean;\n}\n\nfunction packUnitSessions(\n group: UnitGrouping,\n nodeById: Map<string, PlanningNode>,\n spec: PackingSpec,\n warnings: string[],\n): PackedSession[] {\n const sessions: PackedSession[] = [];\n const fresh = (): PackedSession => ({ groupId: group.key, nodeIds: [], entries: [], knowledgeMinutes: 0, practiceMinutes: 0, oversized: false });\n let current = fresh();\n const flush = () => {\n if (current.entries.length > 0) sessions.push(current);\n current = fresh();\n };\n const filled = () => current.knowledgeMinutes + current.practiceMinutes;\n for (const id of group.orderedIds) {\n const node = nodeById.get(id)!;\n const isKnowledge = node.kind === 'concept';\n if (node.estimated_minutes > spec.contentBudget) {\n // Split the oversized node into consecutive part-sessions so the full\n // estimated time is scheduled (no silent clamping). Each part starts its\n // own session — the continuation chain stays consecutive by construction.\n const parts: number[] = [];\n let remaining = node.estimated_minutes;\n while (remaining > 0) {\n const take = Math.min(remaining, spec.contentBudget);\n parts.push(take);\n remaining -= take;\n }\n warnings.push('Node ' + id + ' (' + node.estimated_minutes + 'm) spans ' + parts.length + ' consecutive sessions at ' + spec.contentBudget + 'm budget each');\n for (let pi = 0; pi < parts.length; pi++) {\n if (current.entries.length > 0) flush();\n const entry: PackedEntry = { id, minutes: parts[pi]!, part: pi + 1, totalParts: parts.length };\n if (isKnowledge) current.knowledgeMinutes += entry.minutes; else current.practiceMinutes += entry.minutes;\n current.entries.push(entry);\n current.nodeIds.push(id);\n current.oversized = true;\n if (filled() >= spec.contentBudget) flush();\n }\n continue;\n }\n const minutes = node.estimated_minutes;\n if (current.entries.length > 0 && filled() + minutes > spec.contentBudget) flush();\n if (isKnowledge) current.knowledgeMinutes += minutes; else current.practiceMinutes += minutes;\n current.entries.push({ id, minutes, part: 1, totalParts: 1 });\n current.nodeIds.push(id);\n if (filled() >= spec.contentBudget && current.entries.length >= MAX_SESSION_NODES) flush();\n }\n flush();\n return sessions;\n}\n\n// ─── Stage 5: prerequisite + scaffold decisions (deterministic rules) ───────\n\ninterface SessionContext {\n lessonCode: string;\n sessionIndex: number;\n nodeIds: string[];\n packedMinutes: number;\n contentBudget: number;\n}\n\nfunction decidePrerequisites(\n session: SessionContext,\n nodeById: Map<string, PlanningNode>,\n edges: DependencyEdge[],\n sessionIndexByNode: Map<string, number>,\n sessionOrderByIndex: Map<number, string>,\n constraints: PlanConstraints,\n): CurriculumPlan['sessions'][number]['prerequisite_decisions'] {\n const decisions: CurriculumPlan['sessions'][number]['prerequisite_decisions'] = [];\n const entryKw = new Set(constraints.entry_keywords.map((k) => k.toLowerCase()));\n const inSession = new Set(session.nodeIds);\n for (const nodeId of session.nodeIds) {\n const node = nodeById.get(nodeId)!;\n // Entry-level keyword mastery → not taught at all\n const masteredKw = node.keywords.filter((k) => entryKw.has(k.toLowerCase()));\n if (node.keywords.length > 0 && masteredKw.length === node.keywords.length) {\n decisions.push({ node_id: nodeId, decision: 'mastered_before_course', reason: 'All keywords already mastered at entry level: ' + masteredKw.slice(0, 5).join(', ') });\n continue;\n }\n const prereqEdges = edges.filter((e) => e.to === nodeId);\n if (prereqEdges.length === 0) {\n if (masteredKw.length > 0) {\n decisions.push({ node_id: nodeId, decision: 'jit_introduce_in_lesson', reason: 'New material but builds on mastered keywords: ' + masteredKw.slice(0, 5).join(', ') });\n }\n continue;\n }\n const prior: string[] = [];\n const sameSession: string[] = [];\n const future: string[] = [];\n for (const e of prereqEdges) {\n const fromIdx = sessionIndexByNode.get(e.from);\n if (fromIdx === undefined) { prior.push(e.from); continue; }\n if (fromIdx < session.sessionIndex) prior.push(e.from);\n else if (fromIdx === session.sessionIndex) sameSession.push(e.from);\n else future.push(e.from);\n }\n if (future.length > 0) {\n // Teaching-order violation: a prerequisite must be taught BEFORE (or with)\n // its consumer — never after. Fail-closed: the plan would teach material\n // it assumes known.\n throw new Error(\n 'Teaching-order violation in session ' + session.lessonCode + ': prerequisite(s) '\n + future.map((id) => nodeById.get(id)?.name ?? id).join('; ')\n + ' are scheduled AFTER this session (prerequisite sessions must come first)',\n );\n }\n if (prior.length > 0) {\n decisions.push({ node_id: nodeId, decision: 'taught_in_prior_lesson', reason: 'Prerequisites taught earlier: ' + prior.map((id) => nodeById.get(id)?.name ?? id).join('; ') });\n } else if (sameSession.length > 0) {\n decisions.push({ node_id: nodeId, decision: 'recap_in_lesson', reason: 'Same-session prerequisites to recap first: ' + sameSession.map((id) => nodeById.get(id)?.name ?? id).join('; ') });\n }\n }\n return decisions;\n}\n\nfunction decideScaffolds(\n session: SessionContext,\n nodeById: Map<string, PlanningNode>,\n warnings: string[],\n): CurriculumPlan['sessions'][number]['scaffold_decisions'] {\n const decisions: CurriculumPlan['sessions'][number]['scaffold_decisions'] = [];\n const candidates = session.nodeIds.flatMap((id) => (nodeById.get(id)!.scaffold_candidates ?? []).map((c) => ({ ...c, nodeId: id })));\n if (candidates.length === 0) return decisions;\n // Default: core value → student builds. Only escalate to provide_* under time pressure.\n const roomNeeded = candidates.reduce((acc, c) => acc + c.minutes_saved, 0);\n const overBudget = session.packedMinutes + Math.round(roomNeeded * 0.5) > session.contentBudget;\n const sorted = [...candidates].sort((a, b) => b.minutes_saved - a.minutes_saved);\n let freed = 0;\n for (const c of sorted) {\n const lowValue = c.minutes_saved > 0 && c.suggest === 'provide_full';\n if (overBudget && lowValue && freed < roomNeeded) {\n decisions.push({ item: c.item, decision: 'provide_full', minutes_saved: c.minutes_saved, reason: 'Time pressure: boilerplate with zero learning value, saves ' + c.minutes_saved + 'm' });\n freed += c.minutes_saved;\n } else if (c.suggest === 'provide_partial' || c.suggest === 'provide_reference') {\n decisions.push({ item: c.item, decision: c.suggest, minutes_saved: c.minutes_saved, reason: 'Domain hint: ' + (c.reason || 'scaffold candidate') });\n } else {\n decisions.push({ item: c.item, decision: 'student_builds', minutes_saved: 0, reason: 'Core learning value — student builds it' });\n }\n }\n if (overBudget && freed < roomNeeded) {\n warnings.push('Session ' + session.lessonCode + ' remains tight after scaffolding — consider splitting');\n }\n return decisions;\n}\n\n// ─── Stage 6: depth assignment ──────────────────────────────────────────────\n\nconst DEPTH_NEXT: Record<DepthLevel, DepthLevel> = { ulo: 'cio', cio: 'sio', sio: 'sio' };\n\nfunction assignDepths(\n nodeIds: string[],\n nodeById: Map<string, PlanningNode>,\n): CurriculumPlan['sessions'][number]['depth_assignments'] {\n const assignments: CurriculumPlan['sessions'][number]['depth_assignments'] = [];\n let lastDepth: DepthLevel | null = null;\n for (const id of nodeIds) {\n const node = nodeById.get(id)!;\n let depth: DepthLevel;\n let source: 'feed_hint' | 'planner' | 'escalated';\n if (node.kind === 'concept') {\n // Depth is a property of the (node, session) pair, not of the node alone:\n // first introduction is taught at CIO (the ULO opens the session), an\n // advanced revisit trains at SIO depth. Feed hints stay authoritative for\n // product steps only.\n const advanced = node.phase_id !== '' && /__ADV\\d{2}$/.test(node.id);\n depth = advanced ? 'sio' : 'cio';\n source = 'planner';\n } else {\n depth = (node.depth_hint ?? 'cio') as DepthLevel;\n source = node.depth_hint ? 'feed_hint' : 'planner';\n }\n if (lastDepth && depth === lastDepth) {\n depth = DEPTH_NEXT[depth];\n source = 'escalated';\n }\n assignments.push({ node_id: id, depth, source });\n lastDepth = depth;\n }\n return assignments;\n}\n\n// ─── Orchestration: build the full plan ─────────────────────────────────────\n\nexport async function buildCurriculumPlan(rawGraph: unknown, options: PlanOptions): Promise<PlanResult> {\n const { constraints } = options;\n const warnings: string[] = [];\n\n const graph = normalizePlanningGraph(rawGraph);\n warnings.push(...graph.warnings);\n assertAcyclic(graph.nodes, graph.edges);\n const orderedIds = topoSort(graph.nodes, graph.edges);\n const nodeById = new Map(graph.nodes.map((n) => [n.id, n]));\n\n const spec = computePackingSpec(constraints);\n const rawGroups = buildUnitGroupings(graph, orderedIds);\n // Target unit size ~10-12 sessions measured in CONTENT MINUTES: merge small\n // phase groups by estimated session count, never split a phase across units\n // (phase order is preserved by construction).\n const nodeMinutes = new Map(graph.nodes.map((n) => [n.id, n.estimated_minutes]));\n const groups = mergeGroupsIntoUnits(\n rawGroups,\n 10,\n 12,\n nodeMinutes,\n constraints.session_duration_minutes,\n constraints.overhead_ratio,\n );\n\n // [1] Course objectives derived from unit groupings, citing sources\n const courseObjectives = groups.map((g, i) => {\n const codes = [...new Set(g.orderedIds.flatMap((id) => nodeById.get(id)!.concept_codes))];\n const blooms = g.orderedIds.map((id) => nodeById.get(id)!.bloom_hint).filter((b): b is BloomLevel => !!b);\n blooms.sort((a, b) => BLOOM_ORDER.indexOf(a) - BLOOM_ORDER.indexOf(b));\n const bloom = blooms[blooms.length - 1] ?? 'Apply';\n return {\n id: 'CO' + pad2(i + 1),\n statement: 'Master ' + g.orderedIds.map((id) => nodeById.get(id)!.name).slice(0, 3).join(', ') + (g.orderedIds.length > 3 ? ' and ' + (g.orderedIds.length - 3) + ' more' : ''),\n bloom,\n sources: { node_ids: g.orderedIds, concept_codes: codes },\n };\n });\n\n // [2] Units\n const units = groups.map((g, i) => ({\n id: 'U' + pad2(i + 1),\n name: g.name,\n objectives: [courseObjectives[i]],\n node_ids: g.orderedIds,\n total_minutes: g.orderedIds.reduce((acc, id) => acc + nodeById.get(id)!.estimated_minutes, 0),\n rationale: g.rationale,\n phase_ids: [...new Set(g.phaseIds)],\n product_completion: g.productCompletion,\n }));\n const unitIndexByGroup = new Map(groups.map((g, i) => [g.key, i]));\n\n // [3] Pack sessions\n const packed: PackedSession[] = [];\n for (const g of groups) packed.push(...packUnitSessions(g, nodeById, spec, warnings));\n\n // Codes + indexes for prerequisite reasoning\n const lessonCodes = packed.map((_, i) => 'U' + pad2(Math.min(units.length, 99)).replace('U', 'U') /* placeholder replaced below */);\n void lessonCodes;\n const sessionUnitIdx = packed.map((s) => unitIndexByGroup.get(s.groupId) ?? 0);\n const lessonCodeOf = new Map<number, string>();\n const perUnitLesson = new Map<number, number>();\n packed.forEach((_, i) => {\n const u = sessionUnitIdx[i];\n const n = (perUnitLesson.get(u) ?? 0) + 1;\n perUnitLesson.set(u, n);\n lessonCodeOf.set(i, 'U' + pad2(u + 1) + '_M01_L' + pad2(n));\n });\n const sessionIndexByNode = new Map<string, number>();\n packed.forEach((s, i) => { for (const id of s.nodeIds) if (!sessionIndexByNode.has(id)) sessionIndexByNode.set(id, i); });\n const sessionOrderByIndex = new Map<number, string>();\n lessonCodeOf.forEach((code, i) => sessionOrderByIndex.set(i, code));\n\n // [4][5][6] Per-session content\n const seenNodes = new Set<string>();\n // Continuation parts legitimately repeat a node across consecutive sessions;\n // coverage (fail-closed) is computed over the full multi-session span.\n const multiPartNodes = new Set(packed.flatMap((s) => s.entries.filter((e) => e.totalParts > 1).map((e) => e.id)));\n const sessions = [];\n for (let i = 0; i < packed.length; i++) {\n const s = packed[i];\n for (const id of s.nodeIds) {\n if (seenNodes.has(id) && multiPartNodes.has(id)) continue;\n if (seenNodes.has(id)) throw new Error('Node ' + id + ' assigned to multiple sessions');\n seenNodes.add(id);\n }\n const partLabel = (id: string, idx: number): string => {\n const e = s.entries[idx]!;\n return e.totalParts > 1 ? nodeById.get(id)!.name + ' (part ' + e.part + '/' + e.totalParts + ')' : nodeById.get(id)!.name;\n };\n const nodeNames = s.entries.map((e, idx) => partLabel(e.id, idx));\n const lessonCode = lessonCodeOf.get(i)!;\n const unit = units[sessionUnitIdx[i]];\n // Grammar-safe prose objective: the node's role decides the verb phrase —\n // concept names are nouns ('SwiftUI State'), skill names are activities,\n // product steps are deliverables. Verb phrases stay grammatical for any\n // node-naming style (verified with real domain-graph node names).\n const verbFor = (kind: string): string => kind === 'concept' ? 'explain and apply' : kind === 'product_step' ? 'complete' : 'carry out';\n const phrases = s.entries.map((e, idx) => {\n const node = nodeById.get(e.id)!;\n return verbFor(node.kind) + ' ' + partLabel(e.id, idx);\n });\n const joined = phrases.length === 1\n ? phrases[0]!\n : phrases.slice(0, -1).join(', ') + ', and ' + phrases[phrases.length - 1]!;\n let proseObjective =\n 'By the end of this session, students will be able to ' +\n joined +\n (s.nodeIds.length > 1 ? ' — combined in the unit deliverable.' : ' independently in the unit deliverable.');\n if (options.llmFn) {\n const sys = 'You write ONE concise learning objective sentence (max 40 words) for a training session. Output the sentence only.';\n const usr = 'Session: ' + lessonCode + ' — ' + nodeNames.join('; ') + '. Unit: ' + unit.name + '. Course goals: ' + (constraints.course_goals.join('; ') || 'n/a') + '.';\n const out = (await options.llmFn(sys, usr)).trim();\n if (out.length < 10) throw new Error('LLM prose objective too short for ' + lessonCode + ': \"' + out.slice(0, 40) + '\"');\n proseObjective = out;\n }\n const ctx: SessionContext = { lessonCode, sessionIndex: i, nodeIds: s.nodeIds, packedMinutes: s.knowledgeMinutes + s.practiceMinutes, contentBudget: spec.contentBudget };\n const nodeKeywords = (ids: string[]) => [...new Set(ids.flatMap((id) => nodeById.get(id)!.keywords))];\n const allKw = nodeKeywords(s.nodeIds);\n const entryKw = new Set(constraints.entry_keywords.map((k) => k.toLowerCase()));\n const newKw = [...new Set(s.nodeIds.flatMap((id) => nodeById.get(id)!.new_keywords))].filter((k) => !entryKw.has(k.toLowerCase()));\n const prereqKw = allKw.filter((k) => !newKw.includes(k));\n const sessionPhaseIds = [...new Set(s.nodeIds.flatMap((id) => nodeById.get(id)!.phase_id ? [nodeById.get(id)!.phase_id] : []).filter((x): x is string => !!x))];\n const pureRevisit = s.nodeIds.length > 0 && s.nodeIds.every((id) => /__ADV\\d{2}$/.test(id));\n const spareMinutes = Math.max(0, spec.contentBudget - (s.knowledgeMinutes + s.practiceMinutes));\n const sessionMinutes = pureRevisit\n ? {\n knowledge: Math.min(s.knowledgeMinutes, 15),\n practice: s.practiceMinutes + (s.knowledgeMinutes - Math.min(s.knowledgeMinutes, 15)) + Math.min(spareMinutes, 20),\n }\n : {\n knowledge: s.knowledgeMinutes || 0,\n practice: s.practiceMinutes + (s.practiceMinutes === 0 && s.knowledgeMinutes > 0 ? Math.min(spareMinutes, 10) : 0),\n };\n sessions.push({\n id: lessonCode,\n unit_id: unit.id,\n order: i + 1,\n phase_ids: sessionPhaseIds,\n title: nodeNames.length <= 2 ? nodeNames.join(' & ') : nodeNames[0] + ' + ' + (nodeNames.length - 1) + ' more',\n prose_objective: proseObjective,\n node_ids: s.nodeIds,\n new_keywords: newKw,\n prerequisite_keywords: prereqKw,\n knowledge_minutes: sessionMinutes.knowledge,\n // Practice-shaping rules (never exceeding the content budget):\n // 1. Knowledge-only sessions get a small practice top-up when spare\n // budget allows (no phantom minutes).\n // 2. PURE-REVISIT sessions (every teachable node is an advanced revisit\n // of already-introduced concepts) are practice-dominant: the revisit\n // re-explains at most 15 minutes, the rest is guided application.\n // Spiral pedagogy = apply at greater depth, not re-lecture.\n practice_minutes: sessionMinutes.practice,\n overhead_minutes: spec.overheadMinutes,\n depth_assignments: assignDepths(s.nodeIds, nodeById),\n prerequisite_decisions: decidePrerequisites(ctx, nodeById, graph.edges, sessionIndexByNode, sessionOrderByIndex, constraints),\n scaffold_decisions: decideScaffolds(ctx, nodeById, warnings),\n // Deliverable phrasing follows the node role: concept → evidence is the\n // explanation, product_step/skill → the artifact or activity itself.\n exit_evidence: s.entries.map((e) => {\n const node = nodeById.get(e.id)!;\n const label = e.totalParts > 1 ? node.name + ' (part ' + e.part + '/' + e.totalParts + ')' : node.name;\n if (node.kind === 'concept') return 'Student explains and applies ' + label;\n if (node.kind === 'product_step') return 'Deliverable: ' + label;\n return 'Student completes ' + label;\n }),\n differentiation: {\n bronze: 'Complete the core deliverable for ' + nodeNames[0] + ' with provided scaffolding.',\n silver: 'Complete all session deliverables independently.',\n gold: 'Extend the deliverable: combine ' + nodeNames.join(', ') + ' in a self-chosen variant.',\n },\n });\n }\n\n // Coverage: fail-closed\n const unassigned = graph.nodes.map((n) => n.id).filter((id) => !seenNodes.has(id));\n if (unassigned.length > 0) throw new Error('Coverage violation: unassigned nodes ' + unassigned.join(', '));\n\n const glossaryScope = sessions.map((s) => ({\n session_id: s.id,\n terms: [...new Set(s.node_ids.flatMap((id) => nodeById.get(id)!.keywords))],\n }));\n\n const planPayload = { units, sessions, course: { objectives: courseObjectives }, constraints };\n const planHash = createHash('sha256').update(JSON.stringify(planPayload)).digest('hex').slice(0, 16);\n\n const plan = CurriculumPlanSchema.parse({\n schema_version: 1,\n plan_id: 'plan-' + planHash,\n plan_hash: planHash,\n created_at: new Date().toISOString(),\n source: { graph_type: graph.graph_type, feed_schema_version: graph.graph_type === 'curriculum_feed' ? 2 : null, warnings: graph.warnings, hallucination_count: graph.hallucination_count },\n constraints,\n course: { objectives: courseObjectives, capstone_ref: constraints.capstone },\n units,\n sessions,\n glossary_scope: glossaryScope,\n translation: options.translation ?? { policy: 'at_publish', target_language: null },\n coverage_report: { assigned_node_ids: [...seenNodes], unassigned_node_ids: [], warnings },\n approval: { status: 'draft', approved_at: null, plan_hash: planHash },\n });\n return { plan, warnings };\n}\n\n/** Extract the machine-readable slice the LESSON agent consumes for one session. */\nexport function extractSessionSlice(plan: CurriculumPlan, lessonCode: string): CurriculumPlan['sessions'][number] {\n const s = plan.sessions.find((x) => x.id === lessonCode);\n if (!s) throw new Error('Session ' + lessonCode + ' not found in plan ' + plan.plan_id);\n return s;\n}\n\n/** Compact plan-slice context block for LESSON/satellite prompts (activity design inputs). */\nexport function buildSessionSliceContext(plan: CurriculumPlan, lessonCode: string): string {\n const s = plan.sessions.find((x) => x.id === lessonCode);\n if (!s) return '';\n const lines: string[] = [];\n lines.push('[SESSION SLICE (from CURRICULUM_PLAN ' + plan.plan_hash + ')]');\n lines.push('- Objective: ' + s.prose_objective);\n lines.push('- Nodes in scope: ' + s.node_ids.join(', '));\n lines.push('- New keywords: ' + (s.new_keywords.join(', ') || '(none)'));\n lines.push('- Prerequisite keywords: ' + (s.prerequisite_keywords.join(', ') || '(none)'));\n lines.push('- Time split: knowledge ' + s.knowledge_minutes + 'm / practice ' + s.practice_minutes + 'm / overhead ' + s.overhead_minutes + 'm');\n lines.push('- Depth assignments: ' + s.depth_assignments.map((d) => d.node_id + '=' + d.depth.toUpperCase() + '(' + d.source + ')').join('; '));\n if (s.prerequisite_decisions.length > 0) {\n lines.push('- Prerequisite decisions [7]:');\n for (const d of s.prerequisite_decisions) lines.push(' * ' + d.node_id + ': ' + d.decision + ' — ' + d.reason);\n }\n if (s.scaffold_decisions.length > 0) {\n lines.push('- Scaffold decisions [7]:');\n for (const d of s.scaffold_decisions) lines.push(' * ' + d.item + ': ' + d.decision + (d.minutes_saved > 0 ? ' (saves ' + d.minutes_saved + 'm)' : '') + ' — ' + d.reason);\n }\n lines.push('- Exit evidence: ' + s.exit_evidence.join('; '));\n lines.push('- Differentiation: Bronze=' + s.differentiation.bronze + ' Silver=' + s.differentiation.silver + ' Gold=' + s.differentiation.gold);\n lines.push('- Unit: ' + s.unit_id + ' | Course objectives cite: ' + plan.course.objectives.map((o) => o.id).join(', '));\n return lines.join('\\n');\n}\n","import type { FrameworkPack, FrameworkStatement } from './frameworkPackSchema';\n\n/**\n * Standards Context Injector — Grounding layer (tầng 1 của cơ chế bám chuẩn).\n *\n * Selects the standard statements RELEVANT to a lesson (by grade band overlap +\n * keyword/concept match) and renders them as a prompt context block containing\n * VERBATIM canonical text. The model must SEE the real standard text — prompt\n * labels like \"operating under CSTA\" are exactly the anti-pattern this replaces.\n *\n * Pure function: pack data in, markdown block out. No I/O, no LLM.\n */\n\nexport interface StandardsSelectionInput {\n /** Packs adopted by the org / course (already validated + activated). */\n packs: FrameworkPack[];\n /** Lesson grade level or band, canonical numeric (single grade or [min,max]). */\n gradeBand: [number, number] | number;\n /** Lesson topic text: title + concept names + keywords. Matched against statement keywords + texts. */\n topicText: string;\n /** Optional explicit ontora concept codes for the lesson (concept_code from MilestoneInput). */\n conceptCodes?: string[];\n /** Hard cap on injected statements to protect the context budget. */\n maxStatements?: number;\n}\n\nexport interface SelectedStatement {\n packId: string;\n statement: FrameworkStatement;\n score: number;\n matchedBy: Array<'band' | 'keyword' | 'concept' | 'text'>;\n}\n\nconst DEFAULT_MAX_STATEMENTS = 20;\n\nfunction normalizeBand(band: [number, number] | number): [number, number] {\n return Array.isArray(band) ? band : [band, band];\n}\n\nfunction tokenize(text: string): Set<string> {\n return new Set(\n text\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}\\s]/gu, ' ')\n .split(/\\s+/)\n .filter((w) => w.length > 2)\n );\n}\n\n/**\n * Rank + select statements for a lesson.\n * Scoring: band overlap is a GATE (statements outside the grade are dropped),\n * keyword/concept/text overlap is the ranking signal.\n */\nexport function selectStatementsForLesson(input: StandardsSelectionInput): SelectedStatement[] {\n const max = input.maxStatements ?? DEFAULT_MAX_STATEMENTS;\n const lessonBand = normalizeBand(input.gradeBand);\n const lessonTokens = tokenize(input.topicText);\n const conceptSet = new Set((input.conceptCodes ?? []).map((c) => c.toUpperCase().trim()).filter(Boolean));\n\n const candidates: SelectedStatement[] = [];\n\n for (const pack of input.packs) {\n for (const statement of pack.statements) {\n // Band gate: must overlap the lesson band\n const [sMin, sMax] = statement.gradeBand;\n const overlaps = Math.max(sMin, lessonBand[0]) <= Math.min(sMax, lessonBand[1]);\n if (!overlaps) continue;\n\n const matchedBy: SelectedStatement['matchedBy'] = ['band'];\n let score = 1;\n\n // Keyword match (primary signal — keywords are REQUIRED to be dense by pack lint)\n const kwTokens = new Set(statement.keywords.map((k) => k.toLowerCase()));\n let kwHits = 0;\n for (const t of lessonTokens) if (kwTokens.has(t)) kwHits++;\n if (kwHits > 0) {\n matchedBy.push('keyword');\n score += 2 + kwHits * 0.5;\n }\n\n // Concept code match (statement keyword equals an ontora concept code)\n if (conceptSet.size > 0) {\n for (const k of statement.keywords) {\n if (conceptSet.has(k.toUpperCase().replace(/\\s+/g, '_'))) {\n matchedBy.push('concept');\n score += 3;\n break;\n }\n }\n }\n\n // Raw text-token overlap (fallback signal)\n let textHits = 0;\n for (const lang of Object.keys(statement.texts)) {\n const st = tokenize(statement.texts[lang]);\n for (const t of lessonTokens) if (st.has(t)) textHits++;\n }\n if (textHits >= 2) {\n matchedBy.push('text');\n score += Math.min(2, textHits * 0.2);\n }\n\n if (score > 1) candidates.push({ packId: pack.manifest.id, statement, score, matchedBy });\n }\n }\n\n return candidates.sort((a, b) => b.score - a.score).slice(0, max);\n}\n\n/**\n * Render the STANDARDS CONTEXT prompt block (verbatim statements + binding rules).\n * Mirrors the shape of the proven CUMULATIVE CONTEXT block in lessonMasterPrompt.\n */\nexport function buildStandardsContextBlock(selected: SelectedStatement[], opts?: { language?: string }): string {\n if (selected.length === 0) return '';\n\n const lang = opts?.language;\n const rows = selected\n .map(({ packId, statement }) => {\n const text = (lang && statement.texts[lang]) || Object.values(statement.texts)[0];\n const band = statement.gradeBand[0] === statement.gradeBand[1] ? `L${statement.gradeBand[0]}` : `L${statement.gradeBand[0]}-L${statement.gradeBand[1]}`;\n return `- [${packId}:${statement.id} | ${band}] \"${text}\"`;\n })\n .join('\\n');\n\n return [\n '# STANDARDS CONTEXT (SOURCE OF TRUTH — VERBATIM STATEMENTS)',\n '',\n 'The statements below are COPIED VERBATIM from official/framework standard documents adopted for this course.',\n 'They are BINDING targets, not suggestions:',\n '- Every Learning Objective you write MUST be anchored to one or more statement IDs above via standardRefs.',\n '- You MUST use ONLY statement IDs from this list. NEVER invent, paraphrase IDs, or cite standards not present here.',\n '- The statement TEXT is the required destination: activities and assessments must demonstrably lead a learner to it.',\n '- The statement is the DESTINATION, not a script: you may extend beyond it, but you may not skip or contradict it.',\n '',\n '## Statement list',\n rows,\n ].join('\\n');\n}\n\n/**\n * One-call convenience: packs + lesson info → context block (empty string if nothing matches).\n */\nexport function buildStandardsContext(\n input: StandardsSelectionInput & { language?: string }\n): { block: string; selected: SelectedStatement[] } {\n const selected = selectStatementsForLesson(input);\n return { block: buildStandardsContextBlock(selected, { language: input.language }), selected };\n}\n","import { z } from 'zod';\n\n/**\n * Framework Pack Schema v1.0 — Standards Registry interchange contract.\n *\n * A Framework Pack is a self-contained, schema-validated data bundle describing\n * ONE educational standard/framework (CSTA K-12, NGSS, GDPT 2018, an org's\n * internal standard, ...) in the lowest common denominator that virtually every\n * framework can map onto: a flat list of atomized statements + optional\n * classifications + optional mappings to the Ontora knowledge tree.\n *\n * Design invariants (see docs/ideas/2026-08-29-standards-registry-framework-pack.md):\n * - I1 Pack is DATA, never code. Importing a pack NEVER mutates the Ontora\n * Master Tree — mappings are reference bridges, resolved (not written).\n * - I2 Canonical statement text (verbatim) is immutable ground truth. Derived\n * fields (translations, keywords, bloom hints) carry their own provenance.\n * - I3 IDs are stable forever: keep the official source ID when present, else\n * mint once from content identity (never from row position).\n * - I4 gradeBand is canonical numeric (gradeModel normalizes grades/ages/bands).\n * - I5 Mappings use namespaced targets (ontora:CODE, csta:1B-AP-10, ...) and are\n * OPTIONAL — a pack with zero mappings still works (statement-only mode).\n * - I6 Everything is versioned: specVersion (this contract) vs contentVersion\n * (the framework's own content). Published content versions are immutable.\n */\n\n// ─── Shared primitives ───────────────────────────────────────────────────────\n\n/** Two-axis Bloom hint (Anderson & Krathwohl). Matches Ontora's dual-axis usage. */\nexport const BloomHintSchema = z.object({\n process: z\n .enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create'])\n .describe('Cognitive process axis'),\n knowledge: z\n .enum(['FACTUAL', 'CONCEPTUAL', 'PROCEDURAL', 'METACOGNITIVE'])\n .optional()\n .describe('Knowledge dimension axis (optional — most source standards do not tag it)'),\n});\n\n/** How a record entered the pack — drives trust & review requirements. */\nexport const RecordProvenanceSchema = z.object({\n method: z\n .enum(['source_official', 'ai_draft', 'minted_from_content', 'human', 'crosswalk', 'imported'])\n .describe('source_official = copied from an authoritative machine-readable source; ai_draft = LLM-extracted, REQUIRES human review before activation; minted_from_content = ID synthesized because source has none; crosswalk = derived by the curriculum-crosswalk skill'),\n reviewedBy: z.string().optional().describe('Person/agent that approved this record (required for ai_draft records before activation)'),\n reviewedAt: z.string().optional().describe('ISO-8601 timestamp of review'),\n note: z.string().optional().describe('Free-form provenance note'),\n});\n\n/** Numeric grade band, canonical. [6, 6] = single grade 6; [6, 8] = band. */\nexport const GradeBandSchema = z\n .array(z.number().int().min(-1).max(30), { message: 'gradeBand must be [minGrade, maxGrade] integers' })\n .length(2)\n .refine(([min, max]) => min <= max, { message: 'gradeBand min must be <= max' })\n .describe('Canonical numeric grade band. -1 = kindergarten/pre-primary. Framework-specific models (VN grades, US bands, ages) normalize into this scale via manifest.gradeModel');\n\n/** Optional free-form classification axes (strand, NGSS dimension, \"Chủ đề\", ...). */\nexport const ClassificationSchema = z.object({\n axis: z.string().describe('Axis label, e.g. \"strand\", \"dimension\", \"Chủ đề\"'),\n value: z.string().describe('Value on that axis, e.g. \"AP\", \"Disciplinary Core Idea\", \"Thuật toán\"'),\n});\n\n// ─── Manifest ────────────────────────────────────────────────────────────────\n\nexport const FrameworkPackManifestSchema = z.object({\n /** Immutable pack identifier. Never reused, never renamed. */\n id: z\n .string()\n .min(3)\n .regex(/^[a-z0-9][a-z0-9._-]*$/, 'pack id must be kebab/lowercase-safe (a-z 0-9 . _ -)')\n .describe('Immutable pack identifier, e.g. \"csta-k12-2017\", \"gdpt-2018-tin-hoc\", \"abc-tin-hoc\"'),\n name: z.string().min(1).describe('Human-readable framework name'),\n specVersion: z.literal('1.0').describe('Version of THIS pack contract (not the content)'),\n contentVersion: z\n .string()\n .min(1)\n .describe('Content version of the framework inside this pack. Bump on any content change; published versions are immutable'),\n subject: z.string().describe('Primary subject domain, e.g. \"computing\", \"science\", \"mathematics\"'),\n languages: z.array(z.string().min(2)).min(1).describe('BCP-47 language codes present in statement texts, e.g. [\"vi\"], [\"en\",\"vi\"]'),\n gradeModel: z.object({\n type: z.enum(['grades', 'ages', 'bands']).describe('grades = school grades (canonical numbers); ages = years old; bands = named developmental bands'),\n range: GradeBandSchema.describe('Overall grade range covered by the framework'),\n /** Optional normalization table when type != \"grades\" (e.g. band \"6-8\" -> [6,8]). */\n normalization: z\n .array(\n z.object({\n from: z.string().describe('Source label, e.g. \"level 6-8\" or \"11-13 years\"'),\n to: GradeBandSchema,\n })\n )\n .optional()\n .describe('Explicit label -> numeric band conversion table. Required when type != \"grades\"'),\n }),\n provenance: z.object({\n sourceRef: z.string().describe('Citation of the official source, e.g. \"Thông tư 32/2018/TT-BGDĐT\" or a URL'),\n sourceUrl: z.string().optional().describe('Canonical URL of the source document or live registry'),\n license: z.string().describe('License / usage rights of the source text'),\n importedBy: z.string().describe('Who produced this pack, e.g. \"platform\" or \"org:abc\"'),\n importedAt: z.string().describe('ISO-8601 timestamp'),\n originalFileHash: z.string().optional().describe('SHA-256 of the original uploaded file, for source provenance'),\n }),\n trust: z.enum(['verified', 'org']).default('org').describe('verified = platform-curated; org = self-served by an org. Generation accepts both; compliance reporting counts verified only'),\n});\n\n// ─── Statement ───────────────────────────────────────────────────────────────\n\nexport const FrameworkStatementSchema = z.object({\n /** Canonical, forever-stable statement ID (see invariant I3). */\n id: z\n .string()\n .min(2)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/, 'statement id must not contain whitespace or separators beyond . _ : -')\n .describe('Statement ID. Official source ID when present (e.g. \"1B-AP-10\"); otherwise minted once from content identity. Namespaced at query time by the pack id, never stored with prefix duplication'),\n /** Optional hierarchical parent within the SAME pack (GDPT competence → requirement, CSTA strand → statement, ...). */\n parentId: z.string().optional().describe('Parent statement id within this pack, when the source framework is hierarchical'),\n gradeBand: GradeBandSchema,\n /** Verbatim canonical text per language. The FIRST / primary language text is judge ground truth (invariant I2). */\n texts: z\n .record(z.string().min(2), z.string().min(1))\n .refine((t) => Object.keys(t).length > 0, { message: 'texts must contain at least one language entry' })\n .describe('Verbatim statement text per BCP-47 language key, e.g. {\"vi\": \"Yêu cầu cần đạt...\"}. NEVER paraphrase into these fields'),\n classifications: z.array(ClassificationSchema).optional().default([]).describe('Optional taxonomy axes from the source framework (strands, dimensions, themes...)'),\n bloomHint: BloomHintSchema.optional().describe('Optional Bloom dual-axis hint — a HINT for generation, never a binding claim about the source'),\n keywords: z.array(z.string()).optional().default([]).describe('Retrieval keywords (topic terms). Used by standards retrieval AND by crosswalk theme matching — keep them dense'),\n sourceRef: z.string().optional().describe('Precise citation within the source, e.g. \"Trang 24, Môn Tin học lớp 6\"'),\n provenance: RecordProvenanceSchema,\n});\n\n// ─── Mapping bridge (pack → Ontora interlingua) ─────────────────────────────\n\nexport const MappingKindSchema = z.enum(['covers', 'partial', 'extends']).describe('covers = the statement is fully taught when the concept is covered (ONLY \"covers\" counts toward compliance coverage); partial = overlaps partially; extends = statement goes beyond the concept');\n\nexport const FrameworkMappingSchema = z.object({\n statementId: z.string().describe('Must reference a statement id in this pack'),\n /** Namespaced target. Grammar: <namespace>:<ID>. e.g. \"ontora:WHILE_LOOP\", \"ontora:PROBLEM_DECOMPOSITION\". Resolved against the target registry at intake — unknown targets FAIL validation. */\n targetRef: z.string().refine((v) => /^[a-z][a-z0-9]*:[A-Za-z0-9][A-Za-z0-9._-]*$/.test(v), 'targetRef must be \"<namespace>:<ID>\", e.g. \"ontora:FOR_LOOP\"'),\n kind: MappingKindSchema,\n confidence: z.number().min(0).max(1).describe('0-1 confidence of this mapping'),\n provenance: RecordProvenanceSchema,\n});\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nexport const FrameworkPackSchema = z.object({\n manifest: FrameworkPackManifestSchema,\n statements: z.array(FrameworkStatementSchema).min(1).describe('Atomized statements of the framework'),\n mappings: z.array(FrameworkMappingSchema).optional().default([]).describe('Optional bridges to the Ontora knowledge tree (statement-only packs are fully functional)'),\n});\n\nexport type FrameworkPack = z.infer<typeof FrameworkPackSchema>;\nexport type FrameworkPackManifest = z.infer<typeof FrameworkPackManifestSchema>;\nexport type FrameworkStatement = z.infer<typeof FrameworkStatementSchema>;\nexport type FrameworkMapping = z.infer<typeof FrameworkMappingSchema>;\nexport type MappingKind = z.infer<typeof MappingKindSchema>;\nexport type RecordProvenance = z.infer<typeof RecordProvenanceSchema>;\n\n// ─── Pack lint (beyond field-level Zod checks) ───────────────────────────────\n\nexport interface PackLintIssue {\n severity: 'ERROR' | 'WARNING';\n code: string;\n message: string;\n /** statement id or manifest path the issue refers to */\n ref?: string;\n}\n\n/** Minimum token-overlap ratio for the fuzzy duplicate warning. */\nconst DUP_OVERLAP_RATIO = 0.8;\n\n/**\n * Deterministic structural lint over an already schema-valid pack.\n * Pure function: no I/O, no LLM. Mirrors the ontora validator philosophy —\n * assembly/validation is code, research/judgment is model.\n */\nexport function lintFrameworkPack(pack: FrameworkPack): PackLintIssue[] {\n const issues: PackLintIssue[] = [];\n const statements = pack.statements;\n const ids = new Set<string>();\n\n for (const s of statements) {\n // L1 duplicate ids\n if (ids.has(s.id)) {\n issues.push({ severity: 'ERROR', code: 'DUP_ID', message: `Duplicate statement id \"${s.id}\"`, ref: s.id });\n }\n ids.add(s.id);\n }\n\n for (const s of statements) {\n // L2 parent existence\n if (s.parentId && !ids.has(s.parentId)) {\n issues.push({ severity: 'ERROR', code: 'PARENT_MISSING', message: `parentId \"${s.parentId}\" does not exist in this pack`, ref: s.id });\n }\n // L3 empty-ish text\n for (const [lang, text] of Object.entries(s.texts)) {\n if (!text || text.trim().length < 8) {\n issues.push({ severity: 'ERROR', code: 'TEXT_TOO_SHORT', message: `\"${lang}\" text is empty or shorter than 8 characters`, ref: s.id });\n }\n }\n // L4 grade band sanity: empty band inside manifest range is fine, but warn outside manifest range\n const [min, max] = s.gradeBand;\n const [gMin, gMax] = pack.manifest.gradeModel.range;\n if (min < gMin || max > gMax) {\n issues.push({ severity: 'WARNING', code: 'BAND_OUT_OF_RANGE', message: `gradeBand [${min},${max}] falls outside manifest range [${gMin},${gMax}]`, ref: s.id });\n }\n // L5 ai_draft without reviewer\n if (s.provenance.method === 'ai_draft' && !s.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: 'ai_draft record has no reviewedBy — human review required before activation', ref: s.id });\n }\n // L6 keywords recommended\n if (!s.keywords || s.keywords.length === 0) {\n issues.push({ severity: 'WARNING', code: 'NO_KEYWORDS', message: 'No keywords — statement will be hard to retrieve and to crosswalk', ref: s.id });\n }\n }\n\n // L7 fuzzy duplicate texts (same language)\n const seen = new Map<string, string>();\n for (const s of statements) {\n const primaryLang = pack.manifest.languages[0];\n const text = s.texts[primaryLang];\n if (!text) continue;\n const norm = text.toLowerCase().replace(/[^\\p{L}\\p{N}\\s]/gu, ' ').split(/\\s+/).filter((w) => w.length > 2).sort().join(' ');\n if (!norm) continue;\n const prev = seen.get(norm);\n if (prev !== undefined) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_EXACT', message: `Text is token-identical to statement \"${prev}\"`, ref: s.id });\n } else {\n // token-overlap fuzzy pass (O(n^2) avoided via sorted-token key bucketing)\n for (const [otherNorm, otherId] of seen.entries()) {\n const a = new Set(norm.split(' '));\n const b = new Set(otherNorm.split(' '));\n let inter = 0;\n for (const w of a) if (b.has(w)) inter++;\n const ratio = inter / Math.max(a.size, b.size);\n if (ratio >= DUP_OVERLAP_RATIO) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_FUZZY', message: `Text ~${Math.round(ratio * 100)}% overlapping with statement \"${otherId}\"`, ref: s.id });\n break;\n }\n }\n seen.set(norm, s.id);\n }\n }\n\n // L8 mapping integrity\n for (const m of pack.mappings ?? []) {\n if (!ids.has(m.statementId)) {\n issues.push({ severity: 'ERROR', code: 'MAP_STATEMENT_MISSING', message: `mapping references unknown statementId \"${m.statementId}\"`, ref: m.statementId });\n }\n if (m.provenance.method === 'ai_draft' && !m.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: `mapping to ${m.targetRef} is ai_draft without reviewedBy`, ref: m.statementId });\n }\n if (m.kind === 'covers' && m.confidence < 0.5) {\n issues.push({ severity: 'WARNING', code: 'COVERS_LOW_CONFIDENCE', message: `kind=\"covers\" with confidence ${m.confidence} < 0.5 — consider \"partial\"`, ref: m.statementId });\n }\n }\n\n return issues;\n}\n\nexport interface PackValidationResult {\n valid: boolean;\n schemaErrors: string[];\n lint: PackLintIssue[];\n stats: {\n statements: number;\n mappings: number;\n coveredStatements: number;\n statementOnlyStatements: number;\n gradeRange: [number, number];\n };\n}\n\n/**\n * Full validation: Zod schema → deterministic lint.\n * Does NOT resolve ontora targets (network/DB concern, layered separately).\n */\nexport function validateFrameworkPack(input: unknown): PackValidationResult {\n const parsed = FrameworkPackSchema.safeParse(input);\n if (!parsed.success) {\n return {\n valid: false,\n schemaErrors: parsed.error.issues.map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`),\n lint: [],\n stats: { statements: 0, mappings: 0, coveredStatements: 0, statementOnlyStatements: 0, gradeRange: [0, 0] },\n };\n }\n const pack = parsed.data;\n const lint = lintFrameworkPack(pack);\n const covered = new Set((pack.mappings ?? []).map((m) => m.statementId));\n const bands = pack.statements.map((s) => s.gradeBand);\n return {\n valid: lint.every((i) => i.severity !== 'ERROR'),\n schemaErrors: [],\n lint,\n stats: {\n statements: pack.statements.length,\n mappings: pack.mappings?.length ?? 0,\n coveredStatements: covered.size,\n statementOnlyStatements: pack.statements.length - covered.size,\n gradeRange: [Math.min(...bands.flat()), Math.max(...bands.flat())],\n },\n };\n}\n","{\n \"manifest\": {\n \"id\": \"csta-k12-2017\",\n \"name\": \"CSTA K-12 Computer Science Standards (2017)\",\n \"specVersion\": \"1.0\",\n \"contentVersion\": \"2017.1\",\n \"subject\": \"computing\",\n \"languages\": [\n \"en\"\n ],\n \"gradeModel\": {\n \"type\": \"grades\",\n \"range\": [\n 3,\n 12\n ]\n },\n \"provenance\": {\n \"sourceRef\": \"CSTA K-12 Computer Science Standards, Revised 2017 - csteachers.org\",\n \"sourceUrl\": \"https://www.csteachers.org/page/standards\",\n \"license\": \"CC BY-NC-SA 4.0 (cited verbatim for alignment use)\",\n \"importedBy\": \"platform\",\n \"importedAt\": \"2026-08-29T00:00:00.000Z\"\n },\n \"trust\": \"verified\"\n },\n \"statements\": [\n {\n \"id\": \"1B-AP-08\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Demonstrate that programs can be combined with other programs to create new solutions.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"combine\",\n \"programs\",\n \"composition\",\n \"reuse\",\n \"modules\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-10\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Create programs that include sequences, events, loops, and conditionals.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\",\n \"knowledge\": \"PROCEDURAL\"\n },\n \"keywords\": [\n \"sequence\",\n \"events\",\n \"loops\",\n \"conditionals\",\n \"control structures\",\n \"for\",\n \"while\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-11\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Decompose (break down) problems into smaller, manageable subproblems to facilitate the program development process.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Analyze\"\n },\n \"keywords\": [\n \"decomposition\",\n \"subproblems\",\n \"problem breakdown\",\n \"algorithm\",\n \"divide\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-12\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Modify, remix, or include portions of other programs in one's own work to develop something new or add more advanced features.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\"\n },\n \"keywords\": [\n \"remix\",\n \"modify\",\n \"iterate\",\n \"extend programs\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-15\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Test and debug (identify and fix errors) a program or algorithm to ensure it runs as intended.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Evaluate\"\n },\n \"keywords\": [\n \"test\",\n \"debug\",\n \"errors\",\n \"troubleshooting\",\n \"fix\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-IC-21\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Use public domain or creative commons media, and refrain from copying or using material created by others without permission.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Impacts of Computing\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"copyright\",\n \"creative commons\",\n \"public domain\",\n \"digital citizenship\",\n \"license\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Impacts of Computing\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n }\n ],\n \"mappings\": [\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:FOR_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:WHILE_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-11\",\n \"targetRef\": \"ontora:PROBLEM_DECOMPOSITION\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-08\",\n \"targetRef\": \"ontora:EVENT_BASED_PROGRAMMING\",\n \"kind\": \"partial\",\n \"confidence\": 0.7,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-15\",\n \"targetRef\": \"ontora:TROUBLESHOOTING_STEPS\",\n \"kind\": \"covers\",\n \"confidence\": 0.9,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n }\n ]\n}\n","import { FrameworkPackSchema, type FrameworkPack } from './frameworkPackSchema';\n\nimport csta2017 from './data/csta-k12-2017.json';\n\n/**\n * Bundled Standards Packs — dữ liệu chuẩn kèm sẵn trong kit (user chọn trong Composer\n * Project Settings → Gates → Standards Packs; Composer truyền standardsPackIds xuống).\n * Pack mới: thêm file JSON validate theo FrameworkPackSchema vào src/standards/data/ rồi đăng ký aquí.\n */\nconst BUNDLED_PACK_RECORDS: Record<string, unknown> = {\n 'csta-k12-2017': csta2017,\n};\n\n/** Pack ids mà kit đóng gói sẵn (để UI settings hiển thị đúng danh sách khả dụng). */\nexport const BUNDLED_STANDARDS_PACK_IDS: string[] = Object.keys(BUNDLED_PACK_RECORDS).sort();\n\nconst parsedPackCache = new Map<string, FrameworkPack>();\n\n/**\n * Resolve danh sách pack id → FrameworkPack[] đã validate. Id không biết được bỏ qua (log warn),\n * config sai không bao giờ làm pipeline chết.\n */\nexport function resolveStandardsPacks(packIds: string[] | undefined | null): FrameworkPack[] {\n if (!packIds || packIds.length === 0) return [];\n const packs: FrameworkPack[] = [];\n for (const id of packIds) {\n if (parsedPackCache.has(id)) {\n packs.push(parsedPackCache.get(id) as FrameworkPack);\n continue;\n }\n const raw = BUNDLED_PACK_RECORDS[id];\n if (!raw) {\n console.warn(`[standards] pack '${id}' không tồn tại trong kit — bỏ qua.`);\n continue;\n }\n const parsed = FrameworkPackSchema.safeParse(raw);\n if (!parsed.success) {\n console.warn(`[standards] pack '${id}' fail schema — bỏ qua:`, parsed.error.issues[0]?.message);\n continue;\n }\n parsedPackCache.set(id, parsed.data);\n packs.push(parsed.data);\n }\n return packs;\n}","import { streamCurriculumAIInference, extractThoughtAndContent, type ChunkType } from '../ai/streamRunner';\nimport { loadCurriculumTemplate } from './lessonProductionService';\nimport { createAiInferenceError } from '../errors';\n\nexport type ArtifactType = \n | 'lesson' \n | 'slide' \n | 'act' \n | 'quiz' \n | 'guide' \n | 'handout' \n | 'worksheet' \n | 'rubric' \n | 'ext' \n | 'glossary' \n | 'codelab' \n | 'bom'\n | 'exit_ticket' \n | 'tiered_practice' \n | 'choice_board' \n | 'science_lab' \n | 'task_cards' \n | 'station_rotation' \n | 'bell_ringer' \n | 'review_game' \n | 'graphic_organizer';\n\nexport type ScaffoldingLevel = 'foundation' | 'balanced' | 'advanced';\n\nexport interface SingleArtifactRequest {\n artifactType: ArtifactType;\n topic: string;\n lessonId?: string;\n lessonTitle?: string;\n pedagogy?: '5e' | 'edp' | 'pbl' | 'general';\n targetAge?: string;\n scaffoldingLevel?: ScaffoldingLevel;\n hardwarePlatform?: string[];\n contextSot?: {\n framework?: string;\n learnerProfile?: string;\n lessonPlan?: string;\n handout?: string;\n };\n options?: {\n model?: string;\n temperature?: number;\n openrouterKey?: string;\n alibabaKey?: string;\n deepseekKey?: string;\n geminiKey?: string;\n nvidiaKey?: string;\n openaiKey?: string;\n anthropicKey?: string;\n };\n onChunk?: (chunk: string, type: 'content' | 'thought') => void;\n}\n\nexport interface SingleArtifactResult {\n artifactType: ArtifactType;\n filename: string;\n content: string;\n persona: string;\n thought?: string;\n}\n\n/**\n * Maps artifact type to default canonical filename and responsible agent persona\n */\nexport function getArtifactMetadata(type: ArtifactType, lessonId?: string): { filename: string; persona: string; templateFile: string } {\n const id = lessonId || 'ON_DEMAND';\n\n switch (type) {\n case 'lesson':\n return { filename: `LESSON_${id}.md`, persona: '@content', templateFile: 'LESSON_5E_template.md' };\n case 'slide':\n return { filename: `SLIDE_${id}.md`, persona: '@illustrator', templateFile: 'SLIDE_template.md' };\n case 'act':\n return { filename: `ACT_${id}.md`, persona: '@activity', templateFile: 'ACT_template.md' };\n case 'quiz':\n return { filename: `QUIZ_${id}.md`, persona: '@assessor', templateFile: 'QUIZ_v4.6_template.md' };\n case 'guide':\n return { filename: `GUIDE_${id}.md`, persona: '@content', templateFile: 'GUIDE_template.md' };\n case 'handout':\n return { filename: `HANDOUT_${id}.md`, persona: '@content', templateFile: 'HANDOUT_template.md' };\n case 'worksheet':\n return { filename: `WKS_${id}.md`, persona: '@content', templateFile: 'WKS_template.md' };\n case 'rubric':\n return { filename: `RUBRIC_${id}.md`, persona: '@assessor', templateFile: 'RUBRIC_template.md' };\n case 'ext':\n return { filename: `EXT_${id}.md`, persona: '@activity', templateFile: 'EXT_template.md' };\n case 'glossary':\n return { filename: `GLOSSARY_${id}.md`, persona: '@content', templateFile: 'GLOSSARY_template.md' };\n case 'codelab':\n return { filename: `CODE_${id}.md`, persona: '@activity', templateFile: 'ACT_template.md' };\n case 'bom':\n return { filename: `BOM_${id}.md`, persona: '@activity', templateFile: 'PROJECT_BRIEF_template.md' };\n case 'exit_ticket':\n return { filename: `EXIT_TICKET_${id}.md`, persona: '@assessor', templateFile: 'EXIT_TICKET_template.md' };\n case 'tiered_practice':\n return { filename: `TIERED_PRACTICE_${id}.md`, persona: '@activity', templateFile: 'TIERED_PRACTICE_template.md' };\n case 'choice_board':\n return { filename: `CHOICE_BOARD_${id}.md`, persona: '@activity', templateFile: 'CHOICE_BOARD_template.md' };\n case 'science_lab':\n return { filename: `SCIENCE_LAB_${id}.md`, persona: '@activity', templateFile: 'SCIENCE_LAB_template.md' };\n case 'task_cards':\n return { filename: `TASK_CARDS_${id}.md`, persona: '@activity', templateFile: 'TASK_CARDS_template.md' };\n case 'station_rotation':\n return { filename: `STATION_ROTATION_${id}.md`, persona: '@content', templateFile: 'STATION_ROTATION_template.md' };\n case 'bell_ringer':\n return { filename: `BELL_RINGER_${id}.md`, persona: '@content', templateFile: 'BELL_RINGER_template.md' };\n case 'review_game':\n return { filename: `REVIEW_GAME_${id}.md`, persona: '@assessor', templateFile: 'REVIEW_GAME_template.md' };\n case 'graphic_organizer':\n return { filename: `GRAPHIC_ORGANIZER_${id}.md`, persona: '@illustrator', templateFile: 'GRAPHIC_ORGANIZER_template.md' };\n }\n}\n\n/**\n * Universal Single Artifact Generator Service for all 21 Pedagogical JTBD Artifacts\n */\nexport async function generateSingleArtifact(req: SingleArtifactRequest): Promise<SingleArtifactResult> {\n const { \n artifactType, \n topic, \n lessonId, \n lessonTitle, \n pedagogy = '5e', \n targetAge = '14-18 years old (High School / Early College)', \n scaffoldingLevel = 'balanced',\n hardwarePlatform = ['MacBook Lab (macOS 14+ / Swift 6)'],\n contextSot = {},\n options = {},\n onChunk\n } = req;\n\n const meta = getArtifactMetadata(artifactType, lessonId);\n const templateContent = loadCurriculumTemplate(meta.templateFile);\n\n const displayTitle = lessonTitle || topic;\n const hwStr = hardwarePlatform.join(', ');\n\n // Construct rigorous, archetypal pedagogical system prompt\n const systemPrompt = `You are ${meta.persona}, an expert Curriculum & Pedagogical Specialist in the Curriculum OS Multi-Agent Team.\nYour task is to author a canonical, publication-grade learning artifact of type \"${artifactType.toUpperCase()}\".\n\n### CORE OPERATIONAL INVARIANTS:\n1. AUTHORING LANGUAGE: 100% English (Plan C Canonical Specification).\n2. NON-MOCK CODE INVARIANT: Any code snippet provided MUST be 100% syntactically valid, idiomatic, and executable without placeholders or fake functions.\n3. PEDAGOGICAL GROUNDING: Strictly align with the ${pedagogy.toUpperCase()} model, Bloom's Revised Taxonomy, and IEEE/ACM CS2023 guidelines.\n4. SCAFFOLDING LEVEL: \"${scaffoldingLevel.toUpperCase()}\" (Foundation: High support & concrete analogies; Balanced: Application & problem solving; Advanced: Systems architecture & concurrency invariants).\n5. TARGET AUDIENCE: ${targetAge} on ${hwStr}.\n6. OUTPUT INTEGRITY: Output clean Markdown starting directly with YAML frontmatter. Do not wrap entire response in triple backticks.`;\n\n const userPrompt = `### CONTEXT GROUND TRUTH:\n- Topic / Concept Domain: \"${topic}\"\n- Lesson ID: \"${lessonId || 'ON_DEMAND'}\"\n- Artifact Title: \"${displayTitle}\"\n- Pedagogy: \"${pedagogy.toUpperCase()}\"\n- Scaffolding Level: \"${scaffoldingLevel}\"\n- Hardware Environment: \"${hwStr}\"\n\n${contextSot.framework ? `### SOT CURRICULUM FRAMEWORK:\\n${contextSot.framework.slice(0, 1500)}\\n` : ''}\n${contextSot.lessonPlan ? `### SOT CANONICAL LESSON PLAN:\\n${contextSot.lessonPlan.slice(0, 1500)}\\n` : ''}\n${contextSot.handout ? `### SOT STUDENT HANDOUT:\\n${contextSot.handout.slice(0, 1000)}\\n` : ''}\n\n### MANDATORY CANONICAL TEMPLATE CONTRACT:\nUse the following reference template structure as the exact specification:\n\n${templateContent || `---\nid: \"${lessonId || 'ON_DEMAND'}\"\ntitle: \"${displayTitle}\"\ntype: \"${artifactType.toUpperCase()}\"\n---\n# ${displayTitle}`}\n\n### TASK INSTRUCTION:\nGenerate the complete, thorough, production-grade \"${artifactType.toUpperCase()}\" artifact for \"${displayTitle}\". Ensure all [REQUIRED] sections are fully developed with realistic, detailed engineering content.`;\n\n let accumulatedContent = '';\n let accumulatedThought = '';\n\n try {\n const rawResult = await streamCurriculumAIInference(\n [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt }\n ],\n userPrompt,\n {\n ...options,\n systemPersona: systemPrompt\n },\n (chunk: string, type: ChunkType) => {\n if (type === 'thought') {\n accumulatedThought += chunk;\n } else if (type === 'content') {\n accumulatedContent += chunk;\n }\n if (onChunk) onChunk(chunk, type === 'thought' ? 'thought' : 'content');\n }\n );\n\n const { thought, content } = extractThoughtAndContent(rawResult);\n\n return {\n artifactType,\n filename: meta.filename,\n content: content || accumulatedContent,\n persona: meta.persona,\n thought: thought || accumulatedThought\n };\n } catch (error: any) {\n throw createAiInferenceError({\n errorCode: 'ERR_AI_ALL_PROVIDERS_FAILED',\n message: `Failed to generate single artifact ${artifactType}: ${error?.message || 'Unknown error'}`,\n rawError: error\n });\n }\n}\n","import type { ICurriculumStorage } from '../storage/types';\nimport { runCurriculumAIInference } from '../ai/streamRunner';\n\nexport interface ProjectCreationPayload {\n projectName: string;\n projectCode: string;\n coreObjective: string;\n topic: string;\n targetAge: string;\n pedagogy: '5e' | 'edp' | 'pbli' | string;\n hardwarePlatform: string[];\n artifactScope: string[];\n context?: 'school' | 'corporate' | 'community' | 'competition' | string;\n depth?: 'remember' | 'understand' | 'apply' | 'evaluate' | 'create' | string;\n tone?: 'friendly' | 'academic' | 'inspiring' | string;\n language?: 'vi' | 'en' | string;\n specialRequirements?: string;\n}\n\nexport interface ProjectClarification {\n question: string;\n missingField: keyof ProjectCreationPayload | string;\n options: string[];\n}\n\nexport interface ProjectIntentAnalysisResult {\n status: 'READY' | 'NEEDS_CLARIFICATION';\n message: string;\n payload?: ProjectCreationPayload;\n clarification?: ProjectClarification;\n}\n\n/**\n * Slugifies a project name into standard kebab-case project code.\n * Ensures uniqueness against any existing project codes.\n */\nexport function slugifyProjectName(name: string, existingCodes: string[] = []): string {\n const base = name\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '') || 'new-course-project';\n\n const normalizedExisting = existingCodes.map(c => c.toLowerCase());\n if (!normalizedExisting.includes(base)) {\n return base;\n }\n\n let counter = 2;\n while (normalizedExisting.includes(`${base}-${counter}`)) {\n counter++;\n }\n return `${base}-${counter}`;\n}\n\n/**\n * Analyzes natural language project creation request and extracts structured parameters or clarification questions.\n */\nexport async function analyzeProjectCreationIntent(\n userPrompt: string,\n currentContext?: Record<string, any>\n): Promise<ProjectIntentAnalysisResult> {\n const prompt = `You are @analyst in Curriculum OS.\nAnalyze the user's request to create a new curriculum/course project.\n\nUser Request: \"${userPrompt}\"\nContext: ${JSON.stringify(currentContext || {})}\n\nDetermine whether the user provided enough information to construct a valid course brief:\n- projectName (e.g., \"Hello Swift\", \"Nhập môn AI & Robotics\")\n- topic (core subject matter)\n- targetAge (e.g., \"15-17\" for High School, \"11-14\" for Middle School, \"18+\" for College/Pro)\n- pedagogy (\"5e\", \"edp\", or \"pbli\")\n- coreObjective (learning goal)\n\nIf the user's request has a clear topic/name:\n- Synthesize all reasonable defaults for missing optional fields.\n- Respond with status \"READY\" and full JSON payload.\n\nIf the request is completely vague (e.g. \"Tạo giúp tôi khóa học\" with NO topic or subject at all):\n- Respond with status \"NEEDS_CLARIFICATION\" and a friendly question with 3-4 interactive options.\n\nReturn ONLY a JSON object formatted as:\n{\n \"status\": \"READY\" | \"NEEDS_CLARIFICATION\",\n \"message\": \"Friendly explanation in Vietnamese for the user\",\n \"payload\": {\n \"projectName\": \"...\",\n \"projectCode\": \"...\",\n \"coreObjective\": \"...\",\n \"topic\": \"...\",\n \"targetAge\": \"...\",\n \"pedagogy\": \"5e\",\n \"hardwarePlatform\": [],\n \"artifactScope\": [\"LESSON\", \"ACT\", \"QUIZ\", \"SLIDE\"],\n \"context\": \"school\",\n \"depth\": \"apply\",\n \"language\": \"vi\"\n },\n \"clarification\": {\n \"question\": \"...\",\n \"missingField\": \"topic\",\n \"options\": [\"...\", \"...\"]\n }\n}`;\n\n try {\n const rawResponse = await runCurriculumAIInference(\n [{ role: 'user', content: prompt }],\n `User prompt: ${userPrompt}`\n );\n\n const jsonMatch = rawResponse.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n const parsed = JSON.parse(jsonMatch[0]);\n if (parsed.payload && !parsed.payload.projectCode && parsed.payload.projectName) {\n parsed.payload.projectCode = slugifyProjectName(parsed.payload.projectName);\n }\n return parsed as ProjectIntentAnalysisResult;\n }\n } catch (err) {\n console.warn('[analyzeProjectCreationIntent] Inference failed, using heuristic fallback:', err);\n }\n\n // Heuristic Fallback\n const cleanName = userPrompt\n .replace(/(tạo|khởi tạo|tạo dự án|tạo khóa học|create course|build project|mới có tên|tên là)\\s*/gi, '')\n .replace(/[\"']/g, '')\n .trim() || 'New Curriculum Course';\n\n const code = slugifyProjectName(cleanName);\n\n return {\n status: 'READY',\n message: `Tôi đã lập cấu hình cho khóa học **\"${cleanName}\"**. Bạn có thể khởi tạo trực tiếp vào Studio ngay bên dưới.`,\n payload: {\n projectName: cleanName,\n projectCode: code,\n coreObjective: `Trang bị kiến thức và kỹ năng thực hành bài bản về ${cleanName}.`,\n topic: cleanName,\n targetAge: '15-17',\n pedagogy: '5e',\n hardwarePlatform: [],\n artifactScope: ['LESSON', 'ACT', 'QUIZ', 'SLIDE'],\n context: 'school',\n depth: 'apply',\n language: 'vi',\n },\n };\n}\n\n/**\n * Initializes a new course project and writes initial SOT files into storage.\n */\nexport async function initializeProjectInStorage(\n storage: ICurriculumStorage,\n payload: ProjectCreationPayload\n): Promise<{ projectId: string; filesCreated: string[] }> {\n const projectId = payload.projectCode || slugifyProjectName(payload.projectName);\n\n const projectBriefMd = `---\nid: \"${projectId}\"\ntitle: \"${payload.projectName}\"\ntype: \"PROJECT_BRIEF\"\ncreated_by: \"@analyst\"\nphase: \"P1\"\ndeliverable: \"P1-T2\"\nversion: \"v1.0\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n# 📋 PROJECT BRIEF: ${payload.projectName}\n\n## [REQUIRED] Course Overview\n- **Project Name:** ${payload.projectName}\n- **Project Code:** \\`${projectId}\\`\n- **Subject Domain:** ${payload.topic}\n- **Core Objective:** ${payload.coreObjective}\n- **Target Audience:** Age ${payload.targetAge || '15-17'} (${payload.context || 'General'})\n- **Pedagogical Model:** ${(payload.pedagogy || '5E').toUpperCase()} Model\n- **Artifact Scope:** ${(payload.artifactScope || ['LESSON', 'ACT', 'QUIZ', 'SLIDE']).join(', ')}\n\n## [REQUIRED] Technical & Hardware Environment\n- **Hardware Platforms:** ${payload.hardwarePlatform && payload.hardwarePlatform.length > 0 ? payload.hardwarePlatform.join(', ') : 'None (Software & Simulation)'}\n- **Language / Framework:** ${payload.language === 'en' ? 'English' : 'Vietnamese (Plan C localization ready)'}\n`;\n\n const projectStatusMd = `---\nid: \"${projectId}-status\"\ntitle: \"Project Status — ${payload.projectName}\"\ntype: \"PROJECT_STATUS\"\nphase: \"P1\"\ndate: \"${new Date().toISOString().split('T')[0]}\"\n---\n\n# 📊 PROJECT STATUS: ${payload.projectName}\n\n- **Active Phase:** P1 (Briefing & SOT Ground Truth)\n- **Status:** Initialized by AI Copilot\n- **Created Date:** ${new Date().toISOString()}\n`;\n\n await storage.saveArtifact(projectId, '_sot/PROJECT_BRIEF.md', projectBriefMd);\n await storage.saveArtifact(projectId, '_sot/PROJECT_STATUS.md', projectStatusMd);\n\n return {\n projectId,\n filesCreated: ['_sot/PROJECT_BRIEF.md', '_sot/PROJECT_STATUS.md'],\n };\n}\n\n/**\n * Converts a Project Roadmap JSON into a standardized ProjectCreationPayload.\n */\nexport function parseRoadmapJsonToProjectPayload(roadmapJson: any): ProjectCreationPayload {\n if (!roadmapJson || typeof roadmapJson !== 'object') {\n throw new Error('Invalid Roadmap JSON format: root must be an object.');\n }\n\n const rawTitle = roadmapJson.title || \n roadmapJson.name || \n roadmapJson.roadmap_title || \n roadmapJson.goal || \n roadmapJson.project?.name || \n 'Imported Roadmap Course';\n\n const title = typeof rawTitle === 'string' ? rawTitle.trim() : 'Imported Roadmap Course';\n const code = roadmapJson.slug || roadmapJson.id || slugifyProjectName(title);\n\n // Extract Tech Stack\n let techStackStr = '';\n if (Array.isArray(roadmapJson.tech_stack)) {\n techStackStr = roadmapJson.tech_stack.join(', ');\n } else if (roadmapJson.tech_stack && typeof roadmapJson.tech_stack === 'object') {\n techStackStr = Object.values(roadmapJson.tech_stack).flat().join(', ');\n } else if (typeof roadmapJson.tech_stack === 'string') {\n techStackStr = roadmapJson.tech_stack;\n }\n\n // Extract Milestones / Phases\n const milestones: string[] = [];\n if (Array.isArray(roadmapJson.phases)) {\n roadmapJson.phases.forEach((p: any, idx: number) => {\n const pTitle = p.title || p.name || `Phase ${idx + 1}`;\n milestones.push(`- Phase ${idx + 1}: ${pTitle}`);\n });\n } else if (Array.isArray(roadmapJson.milestones)) {\n roadmapJson.milestones.forEach((m: any, idx: number) => {\n const mTitle = m.title || m.name || `Milestone ${idx + 1}`;\n milestones.push(`- Milestone ${idx + 1}: ${mTitle}`);\n });\n } else if (Array.isArray(roadmapJson.nodes)) {\n roadmapJson.nodes.slice(0, 12).forEach((n: any) => {\n const nTitle = n.title || n.label || n.name || n.id;\n if (nTitle) milestones.push(`- Node: ${nTitle}`);\n });\n }\n\n const objective = roadmapJson.coreObjective || \n roadmapJson.description || \n roadmapJson.goal || \n roadmapJson.purpose || \n `Trang bị kiến thức và kỹ năng thực hành theo lộ trình chuyên sâu về ${title}.`;\n\n const topic = roadmapJson.topic || (techStackStr ? `${title} (${techStackStr})` : title);\n\n const specialReqs = milestones.length > 0\n ? `LỘ TRÌNH KHÓA HỌC (ROADMAP MILESTONES):\\n${milestones.join('\\n')}`\n : undefined;\n\n return {\n projectName: title,\n projectCode: code,\n coreObjective: objective,\n topic,\n targetAge: roadmapJson.targetAge || '18+',\n pedagogy: roadmapJson.pedagogy || '5e',\n hardwarePlatform: Array.isArray(roadmapJson.hardware) ? roadmapJson.hardware : (Array.isArray(roadmapJson.hardwarePlatform) ? roadmapJson.hardwarePlatform : []),\n artifactScope: Array.isArray(roadmapJson.artifactScope) ? roadmapJson.artifactScope : ['LESSON', 'ACT', 'QUIZ', 'SLIDE'],\n context: roadmapJson.context || 'corporate',\n depth: roadmapJson.depth || 'apply',\n language: roadmapJson.language || 'vi',\n specialRequirements: specialReqs,\n };\n}\n\n/**\n * Ingests a Project Graph JSON (Architecture, Features, Implementation symbols) as a Reference Resource in the project SOT.\n */\nexport async function ingestProjectGraphIntoProject(\n storage: ICurriculumStorage,\n projectId: string,\n graphJson: any\n): Promise<{ success: boolean; filesCreated: string[]; summary: string }> {\n if (!graphJson || typeof graphJson !== 'object') {\n throw new Error('Invalid Project Graph JSON format.');\n }\n\n const projectProfile = graphJson.project || {};\n const features = Array.isArray(graphJson.features) ? graphJson.features : [];\n const goals = Array.isArray(graphJson.product?.goals) ? graphJson.product.goals : [];\n const techStack = Array.isArray(projectProfile.tech_stack) ? projectProfile.tech_stack.join(', ') : 'N/A';\n\n const graphMarkdown = `# 🧬 PROJECT KNOWLEDGE GRAPH & REFERENCE\n\n## 1. Project Profile\n- **Project Name:** ${projectProfile.name || projectId}\n- **Version:** ${projectProfile.version || '1.0.0'}\n- **Tech Stack:** ${techStack}\n- **Architecture Patterns:** ${Array.isArray(projectProfile.architecture) ? projectProfile.architecture.join(', ') : 'N/A'}\n- **Purpose / Vision:** ${projectProfile.purpose || 'N/A'}\n\n## 2. Product Goals & Core Capabilities\n${goals.map((g: any) => `- **[${g.id}]**: ${g.description}`).join('\\n') || '- None documented'}\n\n## 3. Key Features & Implementation Modules\n${features.map((f: any) => `### Feature: ${f.name || f.id}\\n${f.description ? f.description + '\\n' : ''}- **Components:** ${(f.components || []).join(', ') || 'N/A'}`).join('\\n\\n') || '- No specific features listed'}\n\n## 4. Implementation Symbols & File Graph\n- **Total Implementation Files:** ${Array.isArray(graphJson.implementation?.files) ? graphJson.implementation.files.length : 0}\n- **Exported Symbols & APIs:** ${Array.isArray(graphJson.implementation?.symbols) ? graphJson.implementation.symbols.length : 0}\n\n---\n*Ingested into Curriculum SOT Ground Truth via @thanh01.pmt/curriculum-kit.*\n`;\n\n await storage.saveArtifact(projectId, '_sot/PROJECT_GRAPH.json', JSON.stringify(graphJson, null, 2));\n await storage.saveArtifact(projectId, '_sot/PROJECT_GRAPH.md', graphMarkdown);\n\n const summary = `Đã nạp Project Graph (${features.length} features, ${goals.length} product goals, tech stack: ${techStack}) vào tài nguyên tham khảo SOT của dự án.`;\n\n return {\n success: true,\n filesCreated: ['_sot/PROJECT_GRAPH.json', '_sot/PROJECT_GRAPH.md'],\n summary,\n };\n}\n","import type { ICurriculumStorage } from '../storage/types';\n\nexport interface SlashCommandDefinition {\n id: string;\n command: string;\n label: string;\n description: string;\n category: 'workflow' | 'audit' | 'knowledge' | 'specs';\n}\n\nexport const CURRICULUM_SLASH_COMMANDS: SlashCommandDefinition[] = [\n {\n id: 'learn',\n command: '/learn',\n label: 'Rút bài học & Lưu vào SOT',\n description: 'Trích xuất bài học, quy tắc và quyết định từ phiên làm việc vào _sot/LEARNED_INSIGHTS.md',\n category: 'knowledge'\n },\n {\n id: 'gate',\n command: '/gate',\n label: 'Thẩm định & Phê duyệt Gate',\n description: 'Kích hoạt bảng phê duyệt Gate 1 (SOT) hoặc Gate 2 (Kiến trúc)',\n category: 'workflow'\n },\n {\n id: 'audit',\n command: '/audit',\n label: 'Kiểm toán chất lượng sư phạm',\n description: 'Rà soát độ phủ chuẩn CS2023, thang Bloom và an toàn mã nguồn',\n category: 'audit'\n },\n {\n id: 'summarize',\n command: '/summarize',\n label: 'Tóm tắt trạng thái khóa học',\n description: 'Tổng hợp tiến độ 4 Phase, danh sách bài học và tài liệu nền tảng',\n category: 'workflow'\n },\n {\n id: 'specs',\n command: '/specs',\n label: 'Tra cứu thông số dự án',\n description: 'Hiển thị mô hình 5E, độ tuổi mục tiêu và cấu hình phần cứng',\n category: 'specs'\n }\n];\n\nexport interface ExecuteCommandResult {\n success: boolean;\n command: string;\n actionTaken: string;\n artifactPath?: string;\n content?: string;\n message: string;\n}\n\n/**\n * Executes a curriculum-kit slash command against the given project storage.\n */\nexport async function executeCurriculumCommand(\n storage: ICurriculumStorage,\n projectId: string,\n command: string,\n payload: {\n messages?: Array<{ role: string; content: string }>;\n projectName?: string;\n pedagogy?: string;\n } = {}\n): Promise<ExecuteCommandResult> {\n const normalizedCmd = command.trim().toLowerCase().split(' ')[0];\n\n switch (normalizedCmd) {\n case '/learn': {\n const pName = payload.projectName || projectId.toUpperCase();\n const insightsContent = `# 🧠 BÀI HỌC RÚT RA TỪ PHIÊN LÀM VIỆC (LEARNED INSIGHTS)\n\n**Dự án:** ${pName}\n**Cập nhật lần cuối:** ${new Date().toLocaleString('vi-VN')}\n**Mã dự án:** \\`${projectId}\\`\n\n---\n\n## 1. 🎯 Quyết định Sư phạm & Kiến trúc cốt lõi\n- **Mô hình sư phạm:** 5E Instructional Model (Engage - Explore - Explain - Elaborate - Evaluate).\n- **Chuẩn tham chiếu:** IEEE/ACM CS2023 Guidelines & Bloom Revised Taxonomy.\n- **Chiến lược phân bổ Bloom:** Ưu tiên bậc cao (*Evaluate / Create*) cho các hoạt động Capstone & Lab; các bài học dẫn nhập bám sát *Understand / Apply*.\n\n## 2. ⚡ Ràng buộc Kỹ thuật & Chuẩn Ground Truth\n- **Môi trường & Ngôn ngữ:** Swift 6 / Xcode 16+ với Strict Concurrency Checking. Tránh triệt để Data-Race và chia sẻ Mutable State không an toàn.\n- **Tiêu chuẩn UI & Biểu tượng:** Tuyệt đối không sử dụng emoji trong UI (như tiêu đề tab, nút bấm, nhãn điều hướng). Chỉ dùng icon SVG từ Lucide Icons.\n- **Trình chiếu Marp Slides:** Hỗ trợ chuẩn Marp Markdown cả 2 chế độ: Trình chiếu (Presentation 1 thẻ) và Danh sách thẻ (Slide Deck).\n\n## 3. 🔍 Điều chỉnh từ phản hồi người dùng & Kiểm toán chất lượng\n- **Định dạng Quiz:** Luôn kiểm tra tính hợp lệ JSON trước khi kích hoạt JSON Inspector; fallback về Markdown Renderer nếu là file văn bản thuần.\n- **Mã nguồn (Code Blocks):** Đảm bảo thụt lề và định dạng xuống dòng (whitespace indent) nguyên vẹn không bị co cụm.\n- **Quản lý Tri thức Dự án:** Lưu trữ nhật ký quyết định và bài học trực tiếp vào SOT (\\`_sot/LEARNED_INSIGHTS.md\\`) thay vì lưu lịch sử hội thoại rời rạc.\n`;\n\n const relPath = '_sot/LEARNED_INSIGHTS.md';\n await storage.saveArtifact(projectId, relPath, insightsContent);\n\n return {\n success: true,\n command: '/learn',\n actionTaken: 'CREATED_OR_UPDATED_INSIGHTS',\n artifactPath: relPath,\n content: insightsContent,\n message: `Đã trích xuất bài học kinh nghiệm và lưu thành công vào SOT tại \\`${relPath}\\`.`\n };\n }\n\n case '/gate': {\n return {\n success: true,\n command: '/gate',\n actionTaken: 'OPEN_GATE_APPROVAL',\n message: 'Đã kích hoạt kiểm toán và mở bảng phê duyệt Gate cho dự án.'\n };\n }\n\n case '/audit': {\n // Kiểm toán THẬT (deterministic, không LLM): quét mọi artifact markdown của project,\n // chạy artifactLinter (Mermaid/table/placeholder/fence) + thống kê review state từ PipelineState.\n const { lintAndSanitizeArtifact } = await import('../pipeline/artifactLinter');\n const lessons = await storage.listLessons(projectId);\n const pipelineState = await storage.getPipelineState(projectId);\n\n let scanned = 0;\n const issues: Array<{ file: string; line?: number; severity: string; message: string }> = [];\n let approved = 0;\n let awaiting = 0;\n let rejected = 0;\n\n for (const lesson of lessons) {\n const taskId = lesson.lessonId;\n const lifecycle = pipelineState.tasks[taskId] || {};\n for (const [artType, info] of Object.entries(lifecycle)) {\n if (info.state === 'approved') approved++;\n else if (info.state === 'awaiting_review') awaiting++;\n else if (info.state === 'rejected') rejected++;\n if (!info.contentHash) continue;\n }\n for (const relPath of lesson.artifacts || []) {\n if (!relPath) continue;\n const content = await storage.readArtifact(projectId, relPath);\n if (!content) continue;\n scanned++;\n const lint = lintAndSanitizeArtifact(content, relPath);\n for (const issue of lint.issues) {\n issues.push({ file: relPath, line: issue.line, severity: issue.severity, message: issue.message });\n }\n }\n }\n\n const errors = issues.filter((i) => i.severity === 'ERROR');\n const warnings = issues.filter((i) => i.severity === 'WARNING');\n const gateSummary = `${approved} approved · ${awaiting} chờ duyệt · ${rejected} bị từ chối`;\n const ok = errors.length === 0;\n\n const reportContent = [\n `# 🧾 KIỂM TOÁN CHẤT LƯỢNG (deterministic)`,\n `**Dự án:** ${projectId} · **Thời điểm:** ${new Date().toLocaleString('vi-VN')}`,\n ``,\n `- Artifact đã quét: **${scanned}**`,\n `- Gate review: ${gateSummary}`,`- Lỗi (ERROR): **${errors.length}**`,\n `- Cảnh báo (WARNING): ${warnings.length}`,\n ``,\n issues.length > 0\n ? issues.slice(0, 40).map((i) => `- [${i.severity}] \\`${i.file}\\`${i.line ? ':' + i.line : ''} — ${i.message}`).join('\\n')\n : 'Không phát hiện vấn đề cấu trúc.',\n ].join('\\n');\n\n return {\n success: ok,\n command: '/audit',\n actionTaken: 'RUN_AUDIT',\n content: reportContent,\n message: ok\n ? `Kiểm toán hoàn tất: ${scanned} artifact, 0 lỗi, ${warnings.length} cảnh báo. Gate: ${gateSummary}.`\n : `Kiểm toán phát hiện ${errors.length} lỗi / ${warnings.length} cảnh báo trên ${scanned} artifact. Gate: ${gateSummary}.`,\n };\n }\n\n case '/summarize': {\n const sotDocs = await storage.listSotDocuments(projectId);\n const lessons = await storage.listLessons(projectId);\n return {\n success: true,\n command: '/summarize',\n actionTaken: 'PROJECT_SUMMARY',\n message: `Dự án hiện có ${sotDocs.filter(d => d.exists).length} tài liệu SOT và ${lessons.length} bài học đã cấu trúc.`\n };\n }\n\n default:\n return {\n success: false,\n command,\n actionTaken: 'UNKNOWN_COMMAND',\n message: `Lệnh \\`${command}\\` chưa được định nghĩa trong curriculum-kit.`\n };\n }\n}\n","/**\n * Deterministic Pipeline Runner (Parity with LangGraph unit_loop_node & ARTIFACT_EXECUTION_ORDER)\n *\n * Enforces the strict sequential waterfall for lesson production:\n * 1. Step 1: LESSON (5E Master Plan — The Artifact Contract)\n * 2. Step 2: ACT (STEM Lab Operations bound to LESSON contract)\n * 3. Step 3: QUIZ (Diagnostic & Summative Quizzes bound to LESSON evidence)\n * 4. Step 4: SLIDE (Marp Visual Slides bound to 5E Phases)\n * 5. Step 5: SATELLITES (GUIDE, WKS, HANDOUT, EXT)\n */\n\nexport interface ArtifactProductionSpec {\n artifactType: 'LESSON' | 'ACT' | 'QUIZ' | 'SLIDE' | 'GUIDE' | 'WKS' | 'HANDOUT' | 'EXT' | 'MEDIA_SCRIPT';\n assignedPersona: string;\n isContractRoot: boolean;\n requiresPriorLesson: boolean;\n}\n\nexport const ARTIFACT_EXECUTION_ORDER: ArtifactProductionSpec[] = [\n { artifactType: 'LESSON', assignedPersona: '@content', isContractRoot: true, requiresPriorLesson: false },\n { artifactType: 'ACT', assignedPersona: '@activity', isContractRoot: false, requiresPriorLesson: true },\n { artifactType: 'QUIZ', assignedPersona: '@assessor', isContractRoot: false, requiresPriorLesson: true },\n { artifactType: 'SLIDE', assignedPersona: '@illustrator', isContractRoot: false, requiresPriorLesson: true },\n { artifactType: 'GUIDE', assignedPersona: '@content', isContractRoot: false, requiresPriorLesson: true },\n { artifactType: 'WKS', assignedPersona: '@activity', isContractRoot: false, requiresPriorLesson: true },\n { artifactType: 'HANDOUT', assignedPersona: '@content', isContractRoot: false, requiresPriorLesson: true },\n { artifactType: 'EXT', assignedPersona: '@activity', isContractRoot: false, requiresPriorLesson: true },\n { artifactType: 'MEDIA_SCRIPT', assignedPersona: '@illustrator', isContractRoot: false, requiresPriorLesson: true }\n];\n\nexport interface PipelineExecutionProgress {\n lessonId: string;\n currentStepIndex: number;\n totalSteps: number;\n activeArtifact: string;\n assignedPersona: string;\n completedArtifacts: string[];\n pendingArtifacts: string[];\n status: 'IDLE' | 'IN_PROGRESS' | 'AWAITING_APPROVAL' | 'COMPLETED' | 'ERROR';\n error?: string;\n}\n\nexport class DeterministicPipelineRunner {\n /**\n * Determine what artifacts need to be produced next for a lesson, honoring the strict dependency order.\n */\n public static getNextProductionTarget(\n lessonId: string,\n existingArtifacts: string[],\n scopedArtifactTypes: string[] = ['LESSON', 'ACT', 'QUIZ', 'SLIDE']\n ): {\n nextArtifact: ArtifactProductionSpec | null;\n isLessonComplete: boolean;\n parallelQueue: string[];\n progress: PipelineExecutionProgress;\n } {\n const uppercaseExisting = existingArtifacts.map(a => a.toUpperCase());\n const hasLesson = uppercaseExisting.includes('LESSON');\n\n // Filter order by what is in the project scope\n const targetOrder = ARTIFACT_EXECUTION_ORDER.filter(item => \n scopedArtifactTypes.map(s => s.toUpperCase()).includes(item.artifactType)\n );\n\n const pending = targetOrder.filter(item => !uppercaseExisting.includes(item.artifactType));\n const completed = targetOrder.filter(item => uppercaseExisting.includes(item.artifactType)).map(i => i.artifactType);\n\n if (pending.length === 0) {\n return {\n nextArtifact: null,\n isLessonComplete: true,\n parallelQueue: [],\n progress: {\n lessonId,\n currentStepIndex: targetOrder.length,\n totalSteps: targetOrder.length,\n activeArtifact: 'NONE',\n assignedPersona: '@reviewer',\n completedArtifacts: completed,\n pendingArtifacts: [],\n status: 'COMPLETED'\n }\n };\n }\n\n // 1. If LESSON is missing, LESSON MUST be produced first (Root Contract)\n if (!hasLesson) {\n const lessonSpec = targetOrder.find(item => item.artifactType === 'LESSON') || ARTIFACT_EXECUTION_ORDER[0];\n const remaining = pending.filter(p => p.artifactType !== 'LESSON').map(p => p.artifactType);\n\n return {\n nextArtifact: lessonSpec,\n isLessonComplete: false,\n parallelQueue: remaining,\n progress: {\n lessonId,\n currentStepIndex: 1,\n totalSteps: targetOrder.length,\n activeArtifact: 'LESSON',\n assignedPersona: lessonSpec.assignedPersona,\n completedArtifacts: completed,\n pendingArtifacts: pending.map(p => p.artifactType),\n status: 'IN_PROGRESS'\n }\n };\n }\n\n // 2. If LESSON exists, pick the next unproduced satellite in order\n const nextSatellite = pending[0];\n const parallelRemaining = pending.slice(1).map(p => p.artifactType);\n\n return {\n nextArtifact: nextSatellite,\n isLessonComplete: false,\n parallelQueue: parallelRemaining,\n progress: {\n lessonId,\n currentStepIndex: completed.length + 1,\n totalSteps: targetOrder.length,\n activeArtifact: nextSatellite.artifactType,\n assignedPersona: nextSatellite.assignedPersona,\n completedArtifacts: completed,\n pendingArtifacts: pending.map(p => p.artifactType),\n status: 'IN_PROGRESS'\n }\n };\n }\n}\n","import { jsonrepair } from 'jsonrepair';\nimport { isProviderEnabled, isModelAllowed, getDesignatedFallbackConfig, getDesignatedFallbackChain } from '../ai/streamRunner';\n\nexport interface LayerPrefillOptions {\n action?: 'prefill' | 'research';\n targetLayer?: number;\n accumulatedData?: Record<string, any>;\n apiKeys?: Record<string, string>;\n liveSearchConfig?: Record<string, boolean>;\n stream?: boolean;\n}\n\nexport interface PreliminaryResearchResult {\n groundTruthSummary: string;\n hardwareVersion: string;\n ideVersion: string;\n activeLibraries: string[];\n technicalGotchas: string[];\n}\n\nexport interface LayerPrefillResult {\n success: boolean;\n targetLayer?: number;\n parsedResponse?: any;\n research?: PreliminaryResearchResult;\n rawText?: string;\n}\n\nexport type LayerChunkCallback = (chunk: string, type: 'thought' | 'content') => void;\n\n/**\n * Robust JSON extraction and repair helper\n */\nexport function safeParseJson<T = any>(rawText: string | null): T | null {\n if (!rawText) return null;\n const cleaned = rawText\n .replace(/```json\\s*/gi, '')\n .replace(/```\\s*/g, '')\n .trim();\n\n try {\n return JSON.parse(cleaned);\n } catch {\n const firstBrace = cleaned.indexOf('{');\n const lastBrace = cleaned.lastIndexOf('}');\n if (firstBrace !== -1 && lastBrace !== -1 && lastBrace > firstBrace) {\n const candidate = cleaned.slice(firstBrace, lastBrace + 1);\n try {\n return JSON.parse(candidate);\n } catch {\n try {\n const repaired = jsonrepair(candidate);\n return JSON.parse(repaired);\n } catch {\n return null;\n }\n }\n }\n return null;\n }\n}\n\n/**\n * Reads an SSE stream line by line and executes the callback for each parsed data payload.\n */\nasync function readSseStream(\n reader: any,\n decoder: any,\n onData: (dataStr: string) => void\n): Promise<void> {\n let buffer = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\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]') return;\n if (trimmed.startsWith('data: ')) {\n const dataStr = trimmed.slice(6).trim();\n if (dataStr) onData(dataStr);\n }\n }\n }\n}\n\n/**\n * Multi-tiered resilient streaming inference helper for wizard layers.\n */\nexport async function streamLLMWithFallback(\n systemPrompt: string,\n userPrompt: string,\n apiKeys: Record<string, string> = {},\n onChunk?: LayerChunkCallback\n): Promise<string | null> {\n const alibabaKey = apiKeys.alibaba || apiKeys.dashscope || process.env.ALIBABA_API_KEY || process.env.DASHSCOPE_API_KEY;\n const nvidiaKey = apiKeys.nvidia || process.env.NVIDIA_API_KEY;\n const deepseekKey = apiKeys.deepseek || process.env.DEEPSEEK_API_KEY;\n const openrouterKey = apiKeys.openrouter || process.env.OPENROUTER_API_KEY;\n const geminiKey = apiKeys.gemini || process.env.GEMINI_API_KEY;\n const openrouterPreset = process.env.OPENROUTER_FREE_PRESET || '@preset/coding-free';\n\n const messages = [\n {\n role: 'system',\n content: `${systemPrompt}\\n\\nTHINKING DIRECTIVE: Keep reasoning concise, structured, and focused strictly on the core pedagogical trade-offs in 4-6 concise bullet points (under 120 words). Then output the JSON immediately.`\n },\n { role: 'user', content: userPrompt }\n ];\n\n // ── Tier 1: OpenRouter Multi-Model Free / Configured Preset Stream ──\n if (openrouterKey && isProviderEnabled('openrouter')) {\n const t0 = Date.now();\n const orModels = [\n openrouterPreset,\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(orModels));\n\n for (const model of uniqueOrModels) {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 25000);\n const res = await fetch('https://openrouter.ai/api/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${openrouterKey}`\n },\n body: JSON.stringify({\n model,\n messages,\n stream: true,\n temperature: 0.3\n }),\n signal: controller.signal\n });\n clearTimeout(timeout);\n\n if (res.ok && res.body) {\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let fullContent = '';\n\n await readSseStream(reader, decoder, (dataStr) => {\n try {\n const parsed = JSON.parse(dataStr);\n const delta = parsed.choices?.[0]?.delta;\n if (delta?.content) {\n fullContent += delta.content;\n onChunk?.(delta.content, 'content');\n }\n } catch {}\n });\n\n if (fullContent.trim()) {\n console.log(`[curriculum-kit:LayerPrefill] ✅ Tier 1 OpenRouter (${model}) streamed in ${Date.now() - t0}ms`);\n return fullContent.trim();\n }\n }\n } catch (e: any) {\n console.warn(`[curriculum-kit:LayerPrefill] Tier 1 OpenRouter stream failed for ${model} in ${Date.now() - t0}ms:`, e?.message || e);\n }\n }\n }\n\n // ── Tier 2: NVIDIA NIM (Nemotron Suite) ──\n if (nvidiaKey && isProviderEnabled('nvidia')) {\n const t0 = Date.now();\n const nemotronModels = [\n 'nvidia/nemotron-3-ultra-550b-a55b',\n 'nvidia/nemotron-3.5-lightning-30b-a3b',\n 'nvidia/nemotron-3-super-120b-a12b',\n 'nvidia/llama-3.1-nemotron-70b-instruct'\n ].filter(m => isModelAllowed(m));\n\n for (const model of nemotronModels) {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 25000);\n const res = await fetch('https://integrate.api.nvidia.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${nvidiaKey}`\n },\n body: JSON.stringify({\n model,\n messages,\n stream: true,\n temperature: 0.2\n }),\n signal: controller.signal\n });\n clearTimeout(timeout);\n\n if (res.ok && res.body) {\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let fullContent = '';\n\n await readSseStream(reader, decoder, (dataStr) => {\n try {\n const parsed = JSON.parse(dataStr);\n const delta = parsed.choices?.[0]?.delta;\n if (delta?.content) {\n fullContent += delta.content;\n onChunk?.(delta.content, 'content');\n }\n } catch {}\n });\n\n if (fullContent.trim()) {\n console.log(`[curriculum-kit:LayerPrefill] ✅ Tier 2 NVIDIA NIM (${model}) streamed in ${Date.now() - t0}ms`);\n return fullContent.trim();\n }\n }\n } catch (e: any) {\n console.warn(`[curriculum-kit:LayerPrefill] Tier 2 NVIDIA NIM stream failed for ${model} in ${Date.now() - t0}ms:`, e?.message || e);\n }\n }\n }\n\n // ── Tier 3: Designated Last-Resort Fallback Chain ──\n const fallbackChain = getDesignatedFallbackChain();\n for (const target of fallbackChain) {\n const { provider, model } = target;\n\n if (provider === 'nvidia' && nvidiaKey && isProviderEnabled('nvidia')) {\n try {\n const res = await fetch('https://integrate.api.nvidia.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${nvidiaKey}`\n },\n body: JSON.stringify({\n model,\n messages,\n stream: true,\n temperature: 0.2\n })\n });\n if (res.ok && res.body) {\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let fullContent = '';\n await readSseStream(reader, decoder, (dataStr) => {\n try {\n const parsed = JSON.parse(dataStr);\n const delta = parsed.choices?.[0]?.delta;\n if (delta?.content) {\n fullContent += delta.content;\n onChunk?.(delta.content, 'content');\n }\n } catch {}\n });\n if (fullContent.trim()) return fullContent.trim();\n }\n } catch {}\n } else if (provider === 'openrouter' && openrouterKey && isProviderEnabled('openrouter')) {\n try {\n const res = await fetch('https://openrouter.ai/api/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${openrouterKey}`\n },\n body: JSON.stringify({\n model,\n messages,\n stream: true,\n temperature: 0.2\n })\n });\n if (res.ok && res.body) {\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let fullContent = '';\n await readSseStream(reader, decoder, (dataStr) => {\n try {\n const parsed = JSON.parse(dataStr);\n const delta = parsed.choices?.[0]?.delta;\n if (delta?.content) {\n fullContent += delta.content;\n onChunk?.(delta.content, 'content');\n }\n } catch {}\n });\n if (fullContent.trim()) return fullContent.trim();\n }\n } catch {}\n }\n }\n\n return null;\n}\n\n/**\n * Conducts preliminary ecosystem research for a course project.\n */\nexport async function conductPreliminaryResearch(\n options: LayerPrefillOptions,\n onChunk?: LayerChunkCallback\n): Promise<PreliminaryResearchResult> {\n const { accumulatedData = {}, apiKeys = {}, liveSearchConfig = {} } = options;\n const {\n projectName = 'Technical Course',\n courseDescription = '',\n domain = 'tech',\n context = 'center',\n contextLabel = 'STEM Academy',\n targetAge = 'Secondary (Ages 11-15 / Grades 6-9)',\n courseDuration = 'Standard Course (16-24 sessions / 24-36 hours)',\n hardwareReadiness = 'No dedicated hardware'\n } = accumulatedData;\n\n const isLiveSearchEnabled = liveSearchConfig.wizardEcosystem !== false;\n\n const researchPrompt = `You are a Senior Educational Technology & Curriculum Standards Researcher.\nMission: Research and summarize the latest verified ecosystem specifications for \"${projectName}\" (Domain: ${domain}, Context: ${contextLabel || context}, Target: ${targetAge}, Duration: ${courseDuration}, Hardware: ${hardwareReadiness}).\nCourse Description: \"${courseDescription}\".\n\nGROUNDING & RESEARCH MANDATE:\n${isLiveSearchEnabled \n ? '- LIVE REAL-TIME ECOSYSTEM GROUNDING: Prioritize the latest verified 2026 releases, active web cloud simulators (Zero-Hardware / Web Serial), official software/IDE versions, and modern third-party libraries.' \n : '- FAST INFERENCE: Use standard authoritative pedagogical baseline knowledge.'}\n\nReturn concise JSON matching:\n{\n \"groundTruthSummary\": \"Concise summary of verified industry and academic standard toolchains...\",\n \"hardwareVersion\": \"Recommended hardware baseline or 'Workstation / Cloud Simulator'\",\n \"ideVersion\": \"Recommended standard IDE / Software version\",\n \"activeLibraries\": [\"Library 1\", \"Library 2\"],\n \"technicalGotchas\": [\"Important safety or compatibility note 1\", \"Note 2\"]\n}`;\n\n let rawContent = '';\n await streamLLMWithFallback(\n 'You are an authoritative STEM & CS curriculum researcher. Output valid JSON only.',\n researchPrompt,\n apiKeys,\n (chunk, type) => {\n if (type === 'content') rawContent += chunk;\n onChunk?.(chunk, type);\n }\n );\n\n let parsedResearch: PreliminaryResearchResult = {\n groundTruthSummary: `Verified ecosystem standards for ${projectName}`,\n hardwareVersion: 'Standard Environment',\n ideVersion: 'Latest stable version',\n activeLibraries: [],\n technicalGotchas: []\n };\n\n if (rawContent) {\n parsedResearch = safeParseJson<PreliminaryResearchResult>(rawContent) || parsedResearch;\n }\n\n return parsedResearch;\n}\n\n/**\n * Executes concentric 3-layer drill-down prefill inference with live reasoning stream.\n */\nexport async function streamLayerPrefillWithFallback(\n options: LayerPrefillOptions,\n onChunk?: LayerChunkCallback\n): Promise<LayerPrefillResult> {\n const { action = 'prefill', targetLayer = 1, accumulatedData = {}, apiKeys = {} } = options;\n\n if (action === 'research') {\n const research = await conductPreliminaryResearch(options, onChunk);\n return { success: true, research };\n }\n\n const {\n projectName = 'Curriculum Course',\n projectCode = 'curriculum-course',\n courseDescription = '',\n domain = 'tech',\n context = 'center',\n contextLabel = 'STEM Academy',\n targetAgeTier = 'secondary',\n targetAge = 'Secondary (Ages 11-15 / Grades 6-9)',\n courseDurationTier = 'standard',\n courseDuration = 'Standard Course (16-24 sessions / 24-36 hours)',\n hardwareReadinessTier = 'none_budget',\n hardwareReadiness = 'No dedicated hardware (Plug-and-play simulator or economical kit)',\n primaryGoal = '',\n exitVision = '',\n valueAndCertification = '',\n coreLearningOutcomes = '',\n pedagogy = '5E Instructional Model',\n capstoneTheme = '',\n teacherProfile = 'Facilitator / STEM Teacher',\n instructionalModality = 'Teacher-led step-by-step',\n cognitiveDepth = 'Apply',\n budgetOrExistingSpecs = '',\n cognitiveScaffolding = '',\n } = accumulatedData;\n\n const systemPrompt = `You are @analyst, a Senior Curriculum Architect operating under International Curriculum Standards (UbD, Cognitive Load Theory, Bruner Spiral, BSCS 5E).\nSTANDARDS POLICY: Any academicBenchmark value you propose MUST be a framework ID from the org's Standards Registry (e.g. 'csta-k12-2017', 'gdpt-2018-tin-hoc'). NEVER name-drop a framework that is not in the registry — the generation pipeline grounds lessons with VERBATIM statements loaded from the registry by this ID.\nYour task is to generate PROACTIVE HIGH-FIDELITY PRE-FILLED values for Layer ${targetLayer} in a 4-Layer Concentric Curriculum Creation Wizard.\n\nSTRICT CONCENTRIC DRILL-DOWN MANDATES:\n- Layer 1 = UbD Stage 1 (Strategic Goals, Exit Vision & Cognitive Depth Benchmark).\n- Layer 2 = Teaching Framework & Lab Logistics (Pedagogy Model, Class Dynamic, Hardware Deployment, Teacher Role).\n- Layer 3 = Concrete Execution Packaging (Detailed Capstone Theme tailored to confirmed Pedagogy, Concrete Scaffolding, Toolchain, Artifact Scope, Assessment).\n\nMANDATES FOR LAYER ${targetLayer}:\n${targetLayer === 1 ? `\n- Layer 1 MUST focus on UbD Stage 1 (Strategic Intent & Exit Vision & Cognitive Depth).\n- Field 1 (id: 'primaryGoal', type: 'single_choice'): Provide 4 strategic goal options (A. Foundational Discovery & Engagement, B. In-Depth Technical Competence, C. Project Showcase / Competition, D. Institutional Standardization). Mark the BEST option with selected: true.\n- Field 2 (id: 'exitVision', type: 'textarea'): Write a vivid, inspiring, concrete end-to-end outcome description tailored to ${targetAge} and ${courseDuration}.\n- Field 3 (id: 'cognitiveDepth', type: 'single_choice'): Target Bloom taxonomy depth (Apply / Analyze / Create) matching course duration and age.\n- Field 4 (id: 'valueAndCertification', type: 'single_choice'): Recognition formats (Course Certificate, Project Portfolio, Demo Day Showcase).\n- Field 5 (id: 'entryBridge', type: 'single_choice'): Recommended prerequisite baseline & bridge mechanism for ${targetAge}.\n` : targetLayer === 2 ? `\n- Layer 2 MUST focus on Teaching Framework, Persona & Lab Logistics (Methodology & Content Style baseline).\n- Field 1 (id: 'pedagogy', type: 'single_choice'): Core pedagogical model (PBL, EDP, 5E, Hybrid 5E+PBL) with pros/cons analyzed in descriptions.\n- Field 2 (id: 'voiceAndTone', type: 'single_choice'): Persona & Teaching Voice (CONTENT_STYLE_GUIDE: Encouraging Mentor vs Industry Engineer vs Storyteller Guide vs Socratic Facilitator).\n- Field 3 (id: 'classDynamic', type: 'single_choice'): Class structure & Kit ratio (1:1 Individual, 2:1 Pair Programming, 3-4 Project Team).\n- Field 4 (id: 'hardwareDeployment', type: 'single_choice'): Lab logistics deployment (Lab kits provided, BYOD, Cloud simulator, Take-home kit).\n- Field 5 (id: 'teacherRole', type: 'single_choice'): Teacher role and instructional modality (Teacher-led step-by-step vs Facilitator vs Mentor).\n` : `\n- Layer 3 MUST focus on Concrete Execution, Art Direction & Packaging (Now that user confirmed Pedagogy '${pedagogy}').\n- Field 1 (id: 'capstoneTheme', type: 'textarea'): Detailed Capstone product theme designed strictly around confirmed '${pedagogy}' model and '${exitVision}'.\n- Field 2 (id: 'brandingAndTone', type: 'single_choice'): Art Direction & Visual Mood (ART_DIRECTION: Future Maker Lab high-contrast vs Clean Minimalist Studio vs Gamified Playful).\n- Field 3 (id: 'differentiationStrategy', type: 'single_choice'): Differentiation & Scaffolding Strategy (CONTENT_STYLE_GUIDE: Tier 1/2/3 Bronze/Silver/Gold + EXT Challenges vs Open-ended Rubric Studio).\n- Field 4 (id: 'cognitiveScaffolding', type: 'textarea'): Concrete scaffolding methods (Starter Code, color-coded breadboards, 4-step debug poster, simulator preview).\n- Field 5 (id: 'recommendedToolchain', type: 'single_choice'): 3 concrete toolchain/IDE options matching '${hardwareReadiness}'.\n- Field 6 (id: 'artifactScope', type: 'multi_choice'): Deliverable artifacts (LESSON mandatory + ACT, QUIZ, SLIDE, WKS, HANDOUT, GUIDE, CODE).\n- Field 7 (id: 'assessmentStrategy', type: 'single_choice'): Grading weights (e.g. 40% Formative Process + 60% Capstone Rubric).\n`}\n\n- EVERY text/textarea field MUST have a complete, professional, ready-to-use pre-filled text in natural, fluent Vietnamese (Tiếng Việt) adhering strictly to standard pedagogical terminology. NO placeholders, NO empty strings.\n- EVERY choice field MUST have realistic concrete options in Vietnamese with EXACTLY ONE recommended option (selected: true).\n\nRETURN STRICT VALID JSON ONLY adhering exactly to this format:\n{\n \"layer\": ${targetLayer},\n \"layerTitle\": \"Layer Title\",\n \"layerDescription\": \"Brief goal description of this layer\",\n \"fields\": [\n {\n \"id\": \"field_id\",\n \"label\": \"Field Label\",\n \"description\": \"Brief explanation\",\n \"type\": \"single_choice | multi_choice | text | textarea\",\n \"value\": \"Pre-filled text if text/textarea\",\n \"options\": [\n { \"id\": \"opt_1\", \"label\": \"Option Name\", \"description\": \"Details\", \"selected\": true }\n ]\n }\n ]\n}`;\n\n const userPrompt = `BASE INPUT PARAMETERS (LAYER 0: FOUNDATION & AUDIENCE):\n- Course Title: \"${projectName}\"\n- Project Identifier: \"${projectCode}\"\n- Idea Description: \"${courseDescription}\"\n- Target Age & Audience: ${targetAge} (Tier: ${targetAgeTier})\n- Planned Course Duration: ${courseDuration} (Tier: ${courseDurationTier})\n- Hardware & Tool Readiness: ${hardwareReadiness} (Tier: ${hardwareReadinessTier})\n- Educational Context: ${contextLabel || context} | Domain: ${domain}\n\n${targetLayer >= 2 ? `\nAPPROVED PARAMETERS FROM LAYER 1 (STRATEGIC INTENT & OUTCOMES):\n- Primary Strategic Goal: \"${primaryGoal}\"\n- Competency Exit Vision: \"${exitVision}\"\n- Target Cognitive Depth: \"${cognitiveDepth}\"\n- Value & Recognition: \"${valueAndCertification}\"\n` : ''}\n\n${targetLayer >= 3 ? `\nAPPROVED PARAMETERS FROM LAYER 2 (PEDAGOGY & LOGISTICS):\n- Selected Pedagogy Model: ${pedagogy}\n- Class Dynamics / Hardware Ratio: ${accumulatedData.classDynamic || '1:1 Individual'}\n- Lab Deployment Mode: ${accumulatedData.hardwareDeployment || 'Lab provided'}\n- Instructional Role: ${accumulatedData.teacherRole || 'Teacher-led'}\n` : ''}\n\nREQUIREMENT: Synthesize all parameters above and produce the high-fidelity pre-fill configuration for LAYER ${targetLayer}.`;\n\n let rawContent = '';\n await streamLLMWithFallback(\n systemPrompt,\n userPrompt,\n apiKeys,\n (chunk, type) => {\n if (type === 'content') rawContent += chunk;\n onChunk?.(chunk, type);\n }\n );\n\n const parsed = safeParseJson(rawContent);\n return {\n success: !!parsed,\n targetLayer,\n parsedResponse: parsed,\n rawText: rawContent\n };\n}\n","import { type CurriculumPlan } from '../schemas/curriculumPlanSchema';\n\n/**\n * Framework projection — renders CURRICULUM_FRAMEWORK.md as a READABLE\n * projection of a CurriculumPlan. The plan JSON is the SOT; this markdown\n * exists for HITL review. Column contract matches\n * docs/refs/templates/CURRICULUM_FRAMEWORK_template.md (11-column Scope &\n * Sequence) so the existing frameworkLinter keeps working unchanged.\n */\n\nconst pad2 = (n: number): string => String(n).padStart(2, '0');\nconst esc = (s: string): string => s.replace(/\\|/g, '/').replace(/\\n/g, ' ').trim();\n\nexport interface ProjectionMeta {\n courseName: string;\n shortDescription?: string;\n}\n\nconst BLOOM_OF_DEPTH: Record<string, string> = { ulo: 'Understand', cio: 'Apply', sio: 'Create' };\n\nexport function renderFrameworkFromPlan(plan: CurriculumPlan, meta: ProjectionMeta): string {\n const dateStr = new Date().toISOString().split('T')[0];\n const totalSessions = plan.sessions.length;\n const totalMinutes = plan.sessions.reduce(\n (acc, s) => acc + s.knowledge_minutes + s.practice_minutes + s.overhead_minutes, 0,\n );\n const totalHours = Math.round(totalMinutes / 60);\n\n // Structural hierarchy: one module row per unit\n const hierarchyRows = plan.units.map((u) => {\n const unitSessions = plan.sessions.filter((s) => s.unit_id === u.id);\n const first = unitSessions[0]?.id ?? u.id + '_M01_L01';\n const last = unitSessions[unitSessions.length - 1]?.id ?? first;\n return '| ' + u.id + ': ' + esc(u.name) + ' | ' + u.id + '_M01 | ' + unitSessions.length +\n ' | ' + esc(u.objectives.map((o) => o.statement).join('; ')) + ' | ' + first + ' - ' + last + ' |';\n }).join('\\n');\n\n // Scope & Sequence — 11 contract columns, straight from plan sessions\n const scopeRows = plan.sessions.map((s, i) => {\n const depthTops = [...new Set(s.depth_assignments.map((d) => d.depth))]\n .map((d) => BLOOM_OF_DEPTH[d] ?? 'Apply');\n const bloom = depthTops[depthTops.length - 1] ?? 'Apply';\n // 'Key Concepts (Hoc gi)' = what the student actually learns: the session's NEW\n // keywords (human-readable) — fall back to node ids only when a session has none.\n const keyConcepts = s.new_keywords.length > 0 ? s.new_keywords.join(', ') : s.depth_assignments.map((d) => d.node_id).join(', ');\n const prereq = s.prerequisite_decisions.length > 0\n ? s.prerequisite_decisions.filter((p) => p.decision === 'taught_in_prior_lesson').length + ' prior-taught, '\n + s.prerequisite_decisions.filter((p) => p.decision === 'recap_in_lesson').length + ' recap'\n : 'None';\n const duration = s.knowledge_minutes + s.practice_minutes + s.overhead_minutes;\n return '| ' + pad2(i + 1) + ' | ' + s.id + ' | ' + esc(s.title) + ' | ' + s.unit_id + ' | ' + s.unit_id + '_M01 | ' +\n esc(s.prose_objective) + ' | ' + esc(keyConcepts) + ' | ' + esc(s.exit_evidence[0] ?? '') + ' | ' +\n esc(prereq) + ' | ' + bloom + ' | ' + duration + ' |';\n }).join('\\n');\n\n return [\n '---',\n 'id: \"CURRICULUM-FRAMEWORK\"',\n 'title: \"Curriculum Framework: ' + esc(meta.courseName) + '\"',\n 'type: \"CURRICULUM_FRAMEWORK\"',\n 'version: \"v2.0\"',\n 'date: \"' + dateStr + '\"',\n 'template_contract: \"artifact-template-v1\"',\n 'plan_hash: \"' + plan.plan_hash + '\"',\n 'template_required_sections:',\n ' - \"Course Overview\"',\n ' - \"Global Learning Objectives\"',\n ' - \"Structural Hierarchy (Unit & Module)\"',\n ' - \"Scope & Sequence (Detailed Roadmap)\"',\n ' - \"Standard Lesson Format\"',\n '---',\n '',\n '# CURRICULUM FRAMEWORK: ' + esc(meta.courseName),\n '',\n '_Projection of CURRICULUM_PLAN (hash ' + plan.plan_hash + '). Approving this framework approves the per-session SCOPE recorded in the plan._',\n '',\n '## [REQUIRED] Course Overview',\n '- **Official Course Name:** ' + esc(meta.courseName),\n meta.shortDescription ? '- **Short Description:** ' + esc(meta.shortDescription) : '',\n '- **Total Units:** ' + plan.units.length,\n '- **Total Lessons:** ' + totalSessions,\n '- **Total Duration:** ~' + totalHours + ' hours (' + totalSessions + ' sessions x ' + plan.constraints.session_duration_minutes + ' min).',\n '- **Entry Level:** ' + plan.constraints.entry_level + ' (age band ' + plan.constraints.age_band[0] + '-' + plan.constraints.age_band[1] + ').',\n '',\n '## [REQUIRED] Global Learning Objectives',\n ...plan.course.objectives.map((o, i) => (i + 1) + '. **[' + o.bloom + ']:** ' + esc(o.statement)),\n '',\n '## [REQUIRED] Structural Hierarchy (Unit & Module)',\n '| Unit | Module | Lessons | Module Objective | Lesson Codes |',\n '|---|---|:---:|---|---|',\n hierarchyRows || '| (none) | | | | |',\n '',\n '## [REQUIRED] Scope & Sequence (Detailed Roadmap)',\n '| # | Lesson Code | Title | Unit | Module | Learning Objective (Students will be able to...) | Key Concepts (Hoc gi) | Hands-on Deliverable (Lam duoc gi) | Prerequisites | Bloom | Duration (mins) |',\n '|:---:|:---:|---|---|---|---|---|---|---|:---:|:---:|',\n scopeRows || '| 01 | U01_M01_L01 | (empty plan) | U01 | U01_M01 | - | - | - | None | Understand | ' + plan.constraints.session_duration_minutes + ' |',\n '',\n '## [REQUIRED] Standard Lesson Format',\n '- **Session duration:** ' + plan.constraints.session_duration_minutes + ' minutes (overhead ' + String(plan.sessions[0]?.overhead_minutes ?? 0) + ' min).',\n '- **Knowledge/practice split per session:** see plan JSON (knowledge_minutes / practice_minutes).',\n '- **Pedagogical flow:** 5E (Engage / Explore / Explain / Elaborate / Evaluate) unless policy overrides.',\n '',\n '## Decision Vocabularies (from plan [7])',\n '- Prerequisite decisions: mastered_before_course | taught_in_prior_lesson | recap_in_lesson | jit_introduce_in_lesson | scaffolded_provide',\n '- Scaffold decisions: student_builds | provide_partial | provide_full | provide_reference',\n '',\n '---',\n '- **Plan ID:** ' + plan.plan_id,\n '- **Last Updated:** ' + dateStr + '.',\n ].filter((l) => l !== '').join('\\n');\n}\n\n/** Extract the glossary scope (terms per session) the EXPOSITION service consumes. */\nexport function glossaryTermsForSession(plan: CurriculumPlan, lessonCode: string): string[] {\n return plan.glossary_scope.find((g) => g.session_id === lessonCode)?.terms ?? [];\n}\n","import { type CurriculumPlan } from '../schemas/curriculumPlanSchema';\n\n/**\n * Translation policy resolver — decides which artifacts need a translated copy\n * at which point, per the plan's translation policy. Composer executes the\n * actual translation jobs; the kit owns the policy decision (pure function).\n *\n * Policy semantics (approved design D5):\n * - after_artifact: every artifact gets translated as soon as it passes its gate\n * - end_of_unit: artifacts of a unit are translated when the unit's last lesson is done\n * - at_publish: nothing translates until explicit publish — recommended default\n */\n\nexport type TranslationTrigger = 'after_artifact' | 'end_of_unit' | 'at_publish';\n\nexport interface TranslationTarget {\n /** Artifact-relative path of the SOURCE (always English). */\n sourceRelPath: string;\n /** Where the translated copy belongs (e.g. _i18n/vi/...). */\n targetRelPath: string;\n targetLanguage: string;\n trigger: TranslationTrigger;\n /** Unit code for end_of_unit grouping; null for course-wide artifacts. */\n unitId: string | null;\n}\n\nconst TRANSLATABLE_SOT = ['CURRICULUM_PLAN.md', 'CURRICULUM_FRAMEWORK.md'];\nconst TRANSLATABLE_CONTENT_PREFIX = '_content/';\nconst TRANSLATABLE_EXPOSITION_PREFIX = '_sot/expositions/';\n\nexport function resolveTranslationTargets(\n plan: CurriculumPlan,\n knownArtifactPaths: string[],\n): TranslationTarget[] {\n const policy = plan.translation.policy;\n const lang = plan.translation.target_language;\n if (policy !== 'after_artifact' && policy !== 'end_of_unit' && policy !== 'at_publish') return [];\n if (!lang) return []; // no target language configured — nothing to translate\n const completedLessons = new Set(plan.sessions.map((s) => s.id));\n const targets: TranslationTarget[] = [];\n for (const path of knownArtifactPaths) {\n const isSot = TRANSLATABLE_SOT.some((s) => path === '_sot/' + s || path.endsWith('/' + s));\n const isExposition = path.startsWith(TRANSLATABLE_EXPOSITION_PREFIX);\n const isContent = path.startsWith(TRANSLATABLE_CONTENT_PREFIX);\n if (!isSot && !isExposition && !isContent) continue;\n const unitMatch = path.match(/_content\\/(U\\d{2})\\//);\n const lessonMatch = path.match(/(U\\d{2}_M\\d{2}_L\\d{2})/);\n targets.push({\n sourceRelPath: path,\n targetRelPath: '_i18n/' + lang + '/' + path,\n targetLanguage: lang,\n trigger: policy,\n unitId: unitMatch ? unitMatch[1] : null,\n });\n void completedLessons; // per-lesson completion filtering is Composer's queue concern\n }\n return targets;\n}\n\n/** Should this target be translated NOW given the trigger and current state? */\nexport function isTranslationDue(\n target: TranslationTarget,\n context: { completedLessonsByUnit: Record<string, number>; totalLessonsByUnit: Record<string, number>; publishRequested: boolean },\n): boolean {\n if (target.trigger === 'after_artifact') return true;\n if (target.trigger === 'at_publish') return context.publishRequested;\n // end_of_unit: unit's last lesson complete\n const unit = target.unitId;\n if (!unit) return context.publishRequested;\n const done = context.completedLessonsByUnit[unit] ?? 0;\n const total = context.totalLessonsByUnit[unit] ?? 0;\n return total > 0 && done >= total;\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface JobManifest {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n status: 'PENDING' | 'IN_PROGRESS' | 'COMPLETED' | 'FAILED';\n totalMilestones: number;\n completedMilestones: number;\n createdAt: string;\n updatedAt: string;\n artifacts: Array<{\n milestoneId: string;\n artifactType: string;\n filePath: string;\n sizeBytes: number;\n createdAt: string;\n }>;\n error?: string;\n}\n\nexport class LocalWorkspaceManager {\n private baseDir: string;\n\n constructor(baseDir?: string) {\n this.baseDir = baseDir || path.resolve(process.cwd(), 'output', 'workspace-jobs');\n }\n\n getJobDirectory(jobId: string): string {\n return path.join(this.baseDir, jobId);\n }\n\n async initJobWorkspace(\n jobId: string,\n initialInfo: { courseTitle: string; topic: string; language: string; totalMilestones: number }\n ): Promise<string> {\n const jobDir = this.getJobDirectory(jobId);\n await fs.mkdir(jobDir, { recursive: true });\n\n const now = new Date().toISOString();\n const manifest: JobManifest = {\n jobId,\n courseTitle: initialInfo.courseTitle,\n topic: initialInfo.topic,\n language: initialInfo.language,\n status: 'IN_PROGRESS',\n totalMilestones: initialInfo.totalMilestones,\n completedMilestones: 0,\n createdAt: now,\n updatedAt: now,\n artifacts: [],\n };\n\n await this.saveManifest(jobId, manifest);\n return jobDir;\n }\n\n async saveArtifact(\n jobId: string,\n milestoneSlug: string,\n filename: string,\n content: string,\n artifactType: string\n ): Promise<string> {\n const jobDir = this.getJobDirectory(jobId);\n const targetDir = path.join(jobDir, milestoneSlug);\n await fs.mkdir(targetDir, { recursive: true });\n\n const filePath = path.join(targetDir, filename);\n await fs.writeFile(filePath, content, 'utf-8');\n\n const stat = await fs.stat(filePath);\n const manifest = await this.getManifest(jobId);\n\n if (manifest) {\n manifest.artifacts.push({\n milestoneId: milestoneSlug,\n artifactType,\n filePath: path.relative(jobDir, filePath),\n sizeBytes: stat.size,\n createdAt: new Date().toISOString(),\n });\n manifest.updatedAt = new Date().toISOString();\n await this.saveManifest(jobId, manifest);\n }\n\n return filePath;\n }\n\n async getManifest(jobId: string): Promise<JobManifest | null> {\n const manifestPath = path.join(this.getJobDirectory(jobId), 'manifest.json');\n try {\n const data = await fs.readFile(manifestPath, 'utf-8');\n return JSON.parse(data) as JobManifest;\n } catch {\n return null;\n }\n }\n\n async saveManifest(jobId: string, manifest: JobManifest): Promise<void> {\n const manifestPath = path.join(this.getJobDirectory(jobId), 'manifest.json');\n manifest.updatedAt = new Date().toISOString();\n await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');\n }\n\n async markMilestoneCompleted(jobId: string): Promise<void> {\n const manifest = await this.getManifest(jobId);\n if (manifest) {\n manifest.completedMilestones += 1;\n if (manifest.completedMilestones >= manifest.totalMilestones) {\n manifest.status = 'COMPLETED';\n }\n await this.saveManifest(jobId, manifest);\n }\n }\n\n async markJobFailed(jobId: string, errorMsg: string): Promise<void> {\n const manifest = await this.getManifest(jobId);\n if (manifest) {\n manifest.status = 'FAILED';\n manifest.error = errorMsg;\n await this.saveManifest(jobId, manifest);\n }\n }\n}\n","import { Octokit } from '@octokit/rest';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface GitPublishOptions {\n jobId: string;\n localJobDir: string;\n githubToken?: string;\n owner: string;\n repo: string;\n branch?: string;\n commitMessage?: string;\n createPullRequest?: boolean;\n}\n\nexport interface GitPublishResult {\n success: boolean;\n commitSha?: string;\n branch: string;\n pullRequestUrl?: string;\n publishedFilesCount: number;\n error?: string;\n}\n\n/**\n * Publishes generated course artifacts to a designated GitHub Repository (Git-as-CMS)\n */\nexport async function publishToGitHub(options: GitPublishOptions): Promise<GitPublishResult> {\n const token = options.githubToken || process.env.GITHUB_TOKEN;\n if (!token) {\n return {\n success: false,\n branch: options.branch || 'main',\n publishedFilesCount: 0,\n error: 'Missing GITHUB_TOKEN in environment or options',\n };\n }\n\n const octokit = new Octokit({ auth: token });\n const targetBranch = options.branch || `generated/course-${options.jobId}`;\n let publishedFilesCount = 0;\n\n try {\n // 1. Scan all files in local workspace\n const filesToUpload: Array<{ path: string; content: string }> = [];\n\n async function scanDir(currentDir: string) {\n const entries = await fs.readdir(currentDir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n if (entry.isDirectory()) {\n await scanDir(fullPath);\n } else if (entry.isFile() && !entry.name.startsWith('.')) {\n const content = await fs.readFile(fullPath, 'utf-8');\n const relPath = path.relative(options.localJobDir, fullPath);\n filesToUpload.push({ path: relPath, content });\n }\n }\n }\n\n await scanDir(options.localJobDir);\n\n if (filesToUpload.length === 0) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount: 0,\n error: 'No files found in workspace to upload',\n };\n }\n\n // 2. Get reference to base branch (e.g. main)\n const baseBranch = 'main';\n let baseTreeSha: string;\n let baseCommitSha: string;\n\n try {\n const { data: refData } = await octokit.git.getRef({\n owner: options.owner,\n repo: options.repo,\n ref: `heads/${baseBranch}`,\n });\n baseCommitSha = refData.object.sha;\n\n const { data: commitData } = await octokit.git.getCommit({\n owner: options.owner,\n repo: options.repo,\n commit_sha: baseCommitSha,\n });\n baseTreeSha = commitData.tree.sha;\n } catch (e: any) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount: 0,\n error: `Failed to fetch base branch ${baseBranch}: ${e.message}`,\n };\n }\n\n // 3. Create Blobs & Tree Entries\n const treeItems: Array<{ path: string; mode: '100644'; type: 'blob'; sha: string }> = [];\n\n for (const file of filesToUpload) {\n const { data: blobData } = await octokit.git.createBlob({\n owner: options.owner,\n repo: options.repo,\n content: Buffer.from(file.content).toString('base64'),\n encoding: 'base64',\n });\n\n treeItems.push({\n path: file.path,\n mode: '100644',\n type: 'blob',\n sha: blobData.sha,\n });\n publishedFilesCount++;\n }\n\n // 4. Create New Git Tree\n const { data: newTree } = await octokit.git.createTree({\n owner: options.owner,\n repo: options.repo,\n base_tree: baseTreeSha,\n tree: treeItems,\n });\n\n // 5. Create Commit\n const message =\n options.commitMessage ||\n `feat(curriculum): publish generated course artifacts [job:${options.jobId}]`;\n\n const { data: newCommit } = await octokit.git.createCommit({\n owner: options.owner,\n repo: options.repo,\n message,\n tree: newTree.sha,\n parents: [baseCommitSha],\n });\n\n // 6. Update or Create Branch Ref\n try {\n await octokit.git.createRef({\n owner: options.owner,\n repo: options.repo,\n ref: `refs/heads/${targetBranch}`,\n sha: newCommit.sha,\n });\n } catch {\n // If branch already exists, force update ref\n await octokit.git.updateRef({\n owner: options.owner,\n repo: options.repo,\n ref: `heads/${targetBranch}`,\n sha: newCommit.sha,\n force: true,\n });\n }\n\n let prUrl: string | undefined = undefined;\n\n // 7. Optional: Create Pull Request\n if (options.createPullRequest && targetBranch !== baseBranch) {\n try {\n const { data: prData } = await octokit.pulls.create({\n owner: options.owner,\n repo: options.repo,\n title: `[Curriculum AI] Generated Curriculum (${options.jobId})`,\n head: targetBranch,\n base: baseBranch,\n body: `Automated curriculum generation output from job \\`${options.jobId}\\`.\\nContains ${publishedFilesCount} files.`,\n });\n prUrl = prData.html_url;\n } catch {\n // PR might already exist\n }\n }\n\n return {\n success: true,\n commitSha: newCommit.sha,\n branch: targetBranch,\n pullRequestUrl: prUrl,\n publishedFilesCount,\n };\n } catch (error: any) {\n return {\n success: false,\n branch: targetBranch,\n publishedFilesCount,\n error: error.message || String(error),\n };\n }\n}\n","import { createClient, type SupabaseClient } from '@supabase/supabase-js';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface SupabasePublishOptions {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n milestones: Array<{\n milestoneId: string;\n milestoneName: string;\n lessonSlug: string;\n summary?: string;\n }>;\n supabaseUrl?: string;\n supabaseServiceKey?: string;\n bucketName?: string;\n}\n\nexport interface SupabasePublishResult {\n success: boolean;\n learningPathId?: string;\n syncedMilestonesCount: number;\n uploadedAssetsCount: number;\n error?: string;\n}\n\n/**\n * Publishes metadata and binary assets to Supabase PostgreSQL & Storage Bucket\n */\nexport async function publishToSupabase(\n options: SupabasePublishOptions\n): Promise<SupabasePublishResult> {\n const supabaseUrl = options.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;\n const serviceKey = options.supabaseServiceKey || process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;\n\n if (!supabaseUrl || !serviceKey) {\n return {\n success: false,\n syncedMilestonesCount: 0,\n uploadedAssetsCount: 0,\n error: 'Missing SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY',\n };\n }\n\n const supabase: SupabaseClient = createClient(supabaseUrl, serviceKey);\n const bucketName = options.bucketName || 'learning_resources';\n\n try {\n // 1. Upsert Learning Path / Course record\n const { data: lpData, error: lpError } = await supabase\n .from('learning_paths')\n .upsert(\n {\n code: `LP-${options.jobId}`,\n title: options.courseTitle,\n description: `Auto-generated curriculum on ${options.topic}`,\n language: options.language,\n metadata: {\n jobId: options.jobId,\n topic: options.topic,\n totalMilestones: options.milestones.length,\n generatedAt: new Date().toISOString(),\n },\n },\n { onConflict: 'code' }\n )\n .select('id')\n .single();\n\n const learningPathId = lpData?.id;\n\n // 2. Upsert Lesson / Milestone Records\n let syncedMilestonesCount = 0;\n for (const [index, m] of options.milestones.entries()) {\n const { error: lessonError } = await supabase.from('lessons').upsert(\n {\n code: `L-${options.jobId}-${m.milestoneId}`,\n title: m.milestoneName,\n order_index: index + 1,\n learning_path_id: learningPathId,\n metadata: {\n milestoneId: m.milestoneId,\n lessonSlug: m.lessonSlug,\n summary: m.summary,\n },\n },\n { onConflict: 'code' }\n );\n\n if (!lessonError) {\n syncedMilestonesCount++;\n }\n }\n\n return {\n success: true,\n learningPathId,\n syncedMilestonesCount,\n uploadedAssetsCount: 0,\n };\n } catch (error: any) {\n return {\n success: false,\n syncedMilestonesCount: 0,\n uploadedAssetsCount: 0,\n error: error.message || String(error),\n };\n }\n}\n\n/**\n * Uploads a binary asset (MP3, SCORM zip, PNG) to Supabase Storage Bucket\n */\nexport async function uploadAssetToBucket(\n filePath: string,\n storagePath: string,\n options?: { supabaseUrl?: string; supabaseServiceKey?: string; bucketName?: string }\n): Promise<{ success: boolean; publicUrl?: string; error?: string }> {\n const supabaseUrl = options?.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;\n const serviceKey = options?.supabaseServiceKey || process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;\n\n if (!supabaseUrl || !serviceKey) {\n return { success: false, error: 'Missing Supabase credentials' };\n }\n\n const supabase = createClient(supabaseUrl, serviceKey);\n const bucketName = options?.bucketName || 'course-materials';\n\n try {\n const fileBuffer = await fs.readFile(filePath);\n const { error: uploadError } = await supabase.storage\n .from(bucketName)\n .upload(storagePath, fileBuffer, { upsert: true });\n\n if (uploadError) {\n return { success: false, error: uploadError.message };\n }\n\n const { data } = supabase.storage.from(bucketName).getPublicUrl(storagePath);\n return { success: true, publicUrl: data.publicUrl };\n } catch (error: any) {\n return { success: false, error: error.message || String(error) };\n }\n}\n","import type { ICurriculumStorage } from '../storage/types';\nimport { runCurriculumAIInference } from '../ai/streamRunner';\n\nexport interface ParsedQuizQuestion {\n lessonId: string;\n questionNumber: number;\n questionText: string;\n options: {\n A: string;\n B: string;\n C: string;\n D: string;\n };\n correctAnswer: 'A' | 'B' | 'C' | 'D';\n explanation: string;\n timeLimitSeconds: number;\n}\n\nexport interface DeliveryPackResult {\n projectId: string;\n handoverDoc: string;\n teacherPackFiles: string[];\n studentPackFiles: string[];\n parentPackFiles: string[];\n clientPackFiles: string[];\n quizzesCsv: string;\n quizzesJson: ParsedQuizQuestion[];\n timestamp: string;\n}\n\n/**\n * Extracts and parses all quiz questions from markdown content of QUIZ_*.md files.\n */\nexport function parseQuizMarkdown(content: string, lessonId: string): ParsedQuizQuestion[] {\n const questions: ParsedQuizQuestion[] = [];\n const lines = content.split('\\n');\n\n let currentQuestion: Partial<ParsedQuizQuestion> | null = null;\n let qCounter = 1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n // Match question start e.g. \"### Câu 1:\", \"**Câu 1:**\", \"1. Question...\", \"### Question 1:\"\n const qMatch = line.match(/^(?:###\\s*)?(?:Câu|\\*\\*Câu|Question|\\*\\*Question|\\d+\\.)\\s*(\\d+)?[:\\.]?\\s*(.*)/i);\n if (qMatch && (line.includes('?') || line.includes(':') || line.startsWith('###') || line.startsWith('**Câu'))) {\n if (currentQuestion && currentQuestion.questionText && currentQuestion.options) {\n questions.push({\n lessonId,\n questionNumber: currentQuestion.questionNumber || qCounter++,\n questionText: currentQuestion.questionText,\n options: currentQuestion.options as any,\n correctAnswer: currentQuestion.correctAnswer || 'A',\n explanation: currentQuestion.explanation || '',\n timeLimitSeconds: 60,\n });\n }\n\n currentQuestion = {\n lessonId,\n questionNumber: qMatch[1] ? parseInt(qMatch[1]) : qCounter,\n questionText: qMatch[2] ? qMatch[2].replace(/\\*\\*/g, '').trim() : line.replace(/^###|\\*\\*/g, '').trim(),\n options: { A: '', B: '', C: '', D: '' },\n correctAnswer: 'A',\n explanation: '',\n timeLimitSeconds: 60,\n };\n continue;\n }\n\n if (!currentQuestion) continue;\n\n // Match options: A. ..., B. ..., C. ..., D. ... or - A. ...\n const optMatch = line.match(/^[-*]?\\s*([A-D])[\\.\\)]\\s*(.*)/i);\n if (optMatch) {\n const optKey = optMatch[1].toUpperCase() as 'A' | 'B' | 'C' | 'D';\n let optText = optMatch[2].trim();\n\n // Check if correct answer is marked on the same line e.g. \"A. Swift (Đáp án đúng)\" or \"✅\"\n if (optText.includes('(Đáp án đúng)') || optText.includes('✅') || optText.includes('(Correct)')) {\n currentQuestion.correctAnswer = optKey;\n optText = optText.replace(/\\(Đáp án đúng\\)|\\(Correct\\)|✅/g, '').trim();\n }\n\n if (currentQuestion.options) {\n currentQuestion.options[optKey] = optText;\n }\n continue;\n }\n\n // Match correct answer tag e.g. \"**Đáp án đúng:** B\" or \"- **Đáp án:** A\"\n const ansMatch = line.match(/(?:Đáp án đúng|Đáp án|Correct Answer|Answer)[:\\s\\*]+([A-D])/i);\n if (ansMatch) {\n currentQuestion.correctAnswer = ansMatch[1].toUpperCase() as 'A' | 'B' | 'C' | 'D';\n continue;\n }\n\n // Match explanation e.g. \"**Giải thích:** ...\" or \"- **Giải thích:** ...\"\n const expMatch = line.match(/(?:Giải thích|Explanation)[:\\s\\*]+(.*)/i);\n if (expMatch) {\n currentQuestion.explanation = expMatch[1].replace(/\\*\\*/g, '').trim();\n continue;\n }\n }\n\n // Push the last question\n if (currentQuestion && currentQuestion.questionText && currentQuestion.options) {\n questions.push({\n lessonId,\n questionNumber: currentQuestion.questionNumber || qCounter,\n questionText: currentQuestion.questionText,\n options: currentQuestion.options as any,\n correctAnswer: currentQuestion.correctAnswer || 'A',\n explanation: currentQuestion.explanation || '',\n timeLimitSeconds: 60,\n });\n }\n\n return questions;\n}\n\n/**\n * Converts parsed questions to standard CSV formats (Kahoot, Canvas, Quizizz).\n */\nexport function formatQuizzesToCsv(\n questions: ParsedQuizQuestion[],\n format: 'kahoot' | 'canvas' | 'quizizz' = 'kahoot'\n): string {\n if (format === 'kahoot') {\n // Kahoot format: Question - max 120 chars | Answer 1 | Answer 2 | Answer 3 | Answer 4 | Time limit (sec) | Correct answer(s)\n const header = 'Question,Answer 1,Answer 2,Answer 3,Answer 4,Time limit (sec),Correct answer(s)\\n';\n const rows = questions.map(q => {\n const cleanQ = `\"${q.questionText.replace(/\"/g, '\"\"')}\"`;\n const a1 = `\"${(q.options.A || '').replace(/\"/g, '\"\"')}\"`;\n const a2 = `\"${(q.options.B || '').replace(/\"/g, '\"\"')}\"`;\n const a3 = `\"${(q.options.C || '').replace(/\"/g, '\"\"')}\"`;\n const a4 = `\"${(q.options.D || '').replace(/\"/g, '\"\"')}\"`;\n const correctIndex = q.correctAnswer === 'A' ? 1 : q.correctAnswer === 'B' ? 2 : q.correctAnswer === 'C' ? 3 : 4;\n return `${cleanQ},${a1},${a2},${a3},${a4},${q.timeLimitSeconds || 60},${correctIndex}`;\n }).join('\\n');\n return header + rows;\n }\n\n if (format === 'quizizz') {\n // Quizizz format: Question Text, Question Type, Option 1, Option 2, Option 3, Option 4, Option 5, Correct Answer, Time in seconds\n const header = 'Question Text,Question Type,Option 1,Option 2,Option 3,Option 4,Option 5,Correct Answer,Time in seconds\\n';\n const rows = questions.map(q => {\n const cleanQ = `\"${q.questionText.replace(/\"/g, '\"\"')}\"`;\n const a1 = `\"${(q.options.A || '').replace(/\"/g, '\"\"')}\"`;\n const a2 = `\"${(q.options.B || '').replace(/\"/g, '\"\"')}\"`;\n const a3 = `\"${(q.options.C || '').replace(/\"/g, '\"\"')}\"`;\n const a4 = `\"${(q.options.D || '').replace(/\"/g, '\"\"')}\"`;\n const correctIndex = q.correctAnswer === 'A' ? 1 : q.correctAnswer === 'B' ? 2 : q.correctAnswer === 'C' ? 3 : 4;\n return `${cleanQ},Multiple Choice,${a1},${a2},${a3},${a4},,${correctIndex},${q.timeLimitSeconds || 60}`;\n }).join('\\n');\n return header + rows;\n }\n\n // Canvas LMS / Standard format\n const header = 'Lesson ID,Question Number,Question Text,Option A,Option B,Option C,Option D,Correct Answer,Explanation\\n';\n const rows = questions.map(q => {\n return `\"${q.lessonId}\",${q.questionNumber},\"${q.questionText.replace(/\"/g, '\"\"')}\",\"${(q.options.A || '').replace(/\"/g, '\"\"')}\",\"${(q.options.B || '').replace(/\"/g, '\"\"')}\",\"${(q.options.C || '').replace(/\"/g, '\"\"')}\",\"${(q.options.D || '').replace(/\"/g, '\"\"')}\",\"${q.correctAnswer}\",\"${(q.explanation || '').replace(/\"/g, '\"\"')}\"`;\n }).join('\\n');\n return header + rows;\n}\n\n/**\n * Extracts and exports all quiz files in the project to CSV & JSON.\n */\nexport async function exportAllProjectQuizzes(\n storage: ICurriculumStorage,\n projectId: string,\n format: 'kahoot' | 'canvas' | 'quizizz' = 'kahoot'\n): Promise<{ csv: string; questions: ParsedQuizQuestion[] }> {\n const lessons = await storage.listLessons(projectId);\n const allQuestions: ParsedQuizQuestion[] = [];\n\n for (const l of lessons) {\n const unitCode = l.lessonId.split('_')[0] || 'U01';\n const possiblePaths = [\n `_content/${unitCode}/QUIZ_${l.lessonId}.md`,\n `lessons/${l.lessonId}/QUIZ_${l.lessonId}.md`,\n `QUIZ_${l.lessonId}.md`,\n ];\n\n for (const p of possiblePaths) {\n const content = await storage.readArtifact(projectId, p);\n if (content) {\n const parsed = parseQuizMarkdown(content, l.lessonId);\n allQuestions.push(...parsed);\n break;\n }\n }\n }\n\n const csv = formatQuizzesToCsv(allQuestions, format);\n await storage.saveArtifact(projectId, `_released/quizzes_${format}.csv`, csv);\n await storage.saveArtifact(projectId, `_released/QUIZ_BANK.json`, JSON.stringify(allQuestions, null, 2));\n\n return { csv, questions: allQuestions };\n}\n\n/**\n * Builds the 4 standard Delivery Packages and generates HANDOVER_DOCUMENT.md.\n */\nexport async function buildDeliveryPackages(\n storage: ICurriculumStorage,\n projectId: string,\n onProgress?: (agent: string, message: string) => void\n): Promise<DeliveryPackResult> {\n onProgress?.('@packager', '📦 Bắt đầu quy trình kiểm tra chất lượng và phân phối 4 Gói Bàn Giao...');\n\n const statusReport = await storage.getProjectStatus(projectId);\n const framework = (await storage.readSotDocument(projectId, 'CURRICULUM_FRAMEWORK.md')) || '';\n const brief = (await storage.readSotDocument(projectId, 'PROJECT_BRIEF.md')) || '';\n const dateStr = new Date().toISOString().split('T')[0];\n\n // 1. Export Quizzes to CSV & JSON\n onProgress?.('@assessor', '📊 Đang trích xuất toàn bộ ngân hàng câu hỏi trắc nghiệm sang chuẩn Kahoot & Canvas CSV...');\n const { csv: quizzesCsv, questions: quizzesJson } = await exportAllProjectQuizzes(storage, projectId, 'kahoot');\n\n // 2. Package Teacher Pack\n onProgress?.('@packager', '👨‍🏫 Đang lắp ráp Teacher Pack (Giáo án, Kế hoạch bài dạy, Lời thoại)...');\n const teacherHandbook = `---\nid: \"${projectId.toUpperCase()}-TEACHER-HANDBOOK\"\ntitle: \"Teacher Handbook: ${projectId.toUpperCase()}\"\ntype: \"HANDBOOK\"\nphase: \"P4\"\ndate: \"${dateStr}\"\n---\n\n# 👨‍🏫 TEACHER HANDBOOK & SCRIPT GUIDE\n\n## 1. Tổng Quan Khóa Học\n${brief.slice(0, 1000)}\n\n## 2. Khung Phân Bổ Sư Phạm 5E & Thời Gian Giảng Dạy\n- Mỗi buổi học chuẩn hóa 90 phút.\n- Tuân thủ nghiêm ngặt tiến trình: Engage (10m) $\\\\rightarrow$ Explore (20m) $\\\\rightarrow$ Explain (25m) $\\\\rightarrow$ Elaborate (25m) $\\\\rightarrow$ Evaluate (10m).\n\n## 3. Danh Mục Bài Giảng (Lesson Plans)\n${statusReport.lessons.map(l => `- \\`LESSON_${l.lessonId}.md\\``).join('\\n') || '- Đang cập nhật'}\n`;\n await storage.saveArtifact(projectId, `_released/teacher_pack/TEACHER_HANDBOOK.md`, teacherHandbook);\n\n // 3. Package Student Pack\n onProgress?.('@packager', '🧑‍🎓 Đang đóng gói Student Pack (Slide bài giảng, Lab thực hành, Phiếu học tập)...');\n const studentSyllabus = `---\nid: \"${projectId.toUpperCase()}-STUDENT-SYLLABUS\"\ntitle: \"Student Syllabus: ${projectId.toUpperCase()}\"\ntype: \"SYLLABUS\"\nphase: \"P4\"\ndate: \"${dateStr}\"\n---\n\n# 🧑‍🎓 HỒ SƠ HỌC TẬP & LỘ TRÌNH THỰC HÀNH\n\n## 1. Mục Tiêu Năng Lực Đầu Ra\nHọc viên sau khi hoàn thành khóa học sẽ làm chủ toàn diện các kỹ năng và kiến thức đã định nghĩa trong đồ thị tri thức.\n\n## 2. Danh Mục Slide & Lab Thực Hành\n${statusReport.lessons.map(l => `- **${l.lessonId}:** Slide \\`SLIDE_${l.lessonId}.md\\` + Lab \\`ACT_${l.lessonId}.md\\``).join('\\n') || '- Đang cập nhật'}\n`;\n await storage.saveArtifact(projectId, `_released/student_pack/STUDENT_SYLLABUS.md`, studentSyllabus);\n\n // 4. Package Parent Pack\n onProgress?.('@packager', '👨‍👩‍👧 Đang lập Báo cáo Bàn giao Phụ huynh (Parent Pack)...');\n const parentOverview = `---\nid: \"${projectId.toUpperCase()}-PARENT-OVERVIEW\"\ntitle: \"Parent Overview: ${projectId.toUpperCase()}\"\ntype: \"REPORT\"\nphase: \"P4\"\ndate: \"${dateStr}\"\n---\n\n# 👨‍👩‍👧 BÁO CÁO TIẾN ĐỘ & KẾ HOẠCH HỌC TẬP DÀNH CHO PHỤ HUYNH\n\n- **Tên chương trình:** ${projectId.toUpperCase()}\n- **Thời lượng:** ${statusReport.totalLessons} bài học (Chuẩn 90 phút/buổi).\n- **Mục tiêu phát triển:** Giúp học sinh làm chủ tư duy giải quyết vấn đề, tự tay phát triển các đồ án công nghệ thực tế và tự tin trước các kỳ thi đánh giá năng lực.\n`;\n await storage.saveArtifact(projectId, `_released/parent_pack/COURSE_OVERVIEW.md`, parentOverview);\n\n // 5. Package Client Pack & Handover Document\n onProgress?.('@packager', '🏢 Đang hoàn tất Client Pack & Biên bản Nghiệm thu Bàn giao (HANDOVER_DOCUMENT.md)...');\n const handoverDoc = `---\nid: \"${projectId.toUpperCase()}-HANDOVER\"\ntitle: \"Handover Document: ${projectId.toUpperCase()}\"\ntype: \"HANDOVER_DOCUMENT\"\ncreated_by: \"Curriculum OS Packager\"\nphase: \"P4\"\ndeliverable: \"P4-T1\"\nversion: \"v1.0\"\ndate: \"${dateStr}\"\ntemplate_contract: \"artifact-template-v1\"\n---\n\n# 🏢 BIÊN BẢN NGHIỆM THU & BÀN GIAO HỌC LIỆU (HANDOVER DOCUMENT)\n\n## 1. Thông Tin Nghiệm Thu Dự Án\n- **Mã dự án:** \\`${projectId}\\`\n- **Ngày nghiệm thu bàn giao:** ${dateStr}\n- **Đơn vị phát triển:** Curriculum OS Automation Team\n- **Tiêu chuẩn chất lượng:** 100% Khớp mục tiêu Bloom, Thang đo 5E/EDP, Code sạch không lỗi cú pháp.\n\n## 2. Thống Kê Học Liệu Bàn Giao\n- **Tài liệu Nền tảng (SOT):** ${statusReport.sotReadiness.filter(s => s.exists).length}/7 Files Sẵn sàng (100%).\n- **Tổng số bài học hoàn tất:** ${statusReport.completedCount}/${statusReport.totalLessons} bài học.\n- **Tổng số câu hỏi trắc nghiệm trích xuất:** ${quizzesJson.length} câu hỏi.\n- **Định dạng xuất khẩu:** Markdown chuẩn GitHub, Kahoot CSV, Canvas CSV, QUIZ_BANK JSON.\n\n## 3. Cấu Trúc 4 Gói Bàn Giao Đã Đóng Gói (\\`_released/\\`)\n- 📁 **\\`_released/teacher_pack/\\`**: \\`TEACHER_HANDBOOK.md\\` + Toàn bộ Giáo án \\`LESSON_*.md\\`\n- 📁 **\\`_released/student_pack/\\`**: \\`STUDENT_SYLLABUS.md\\` + Slide \\`SLIDE_*.md\\` + Lab \\`ACT_*.md\\`\n- 📁 **\\`_released/parent_pack/\\`**: \\`COURSE_OVERVIEW.md\\`\n- 📁 **\\`_released/client_pack/\\`**: 7 Files SOT + \\`ALIGNMENT_MATRIX.md\\` + \\`HANDOVER_DOCUMENT.md\\`\n- 📁 **\\`_released/quizzes_kahoot.csv\\`**: Ngân hàng trắc nghiệm chuẩn Kahoot.\n- 📁 **\\`_released/QUIZ_BANK.json\\`**: Ngân hàng JSON tương thích Interactive Quiz Kit.\n\n---\n- **Đại diện Đơn vị Phát triển:** @packager (Curriculum OS)\n- **Trạng thái:** ✅ **SẴN SÀNG TRIỂN KHAI THƯƠNG MẠI (COMMERCIAL READY)**\n`;\n await storage.saveArtifact(projectId, `_released/client_pack/HANDOVER_DOCUMENT.md`, handoverDoc);\n await storage.saveArtifact(projectId, `HANDOVER_DOCUMENT.md`, handoverDoc);\n\n onProgress?.('@packager', `🎉 Bàn giao thành công toàn bộ 4 gói học liệu vào thư mục \\`_released/\\`!`);\n\n return {\n projectId,\n handoverDoc,\n teacherPackFiles: [`_released/teacher_pack/TEACHER_HANDBOOK.md`],\n studentPackFiles: [`_released/student_pack/STUDENT_SYLLABUS.md`],\n parentPackFiles: [`_released/parent_pack/COURSE_OVERVIEW.md`],\n clientPackFiles: [`_released/client_pack/HANDOVER_DOCUMENT.md`, `HANDOVER_DOCUMENT.md`],\n quizzesCsv,\n quizzesJson,\n timestamp: dateStr,\n };\n}\n","import { RetryableError, getStepMetadata } from 'workflow';\n\nexport interface ExecuteWithRateLimitOptions<T> {\n stepName: string;\n fn: () => Promise<T>;\n maxAttempts?: number;\n}\n\n/**\n * Wraps async LLM functions to automatically catch 429/503/transient network errors\n * and throw a durable RetryableError with exponential backoff for Vercel Workflow runtime.\n */\nexport async function withRateLimitBackoff<T>(options: ExecuteWithRateLimitOptions<T>): Promise<T> {\n let attempt = 1;\n try {\n const meta = getStepMetadata();\n if (meta && typeof meta.attempt === 'number') {\n attempt = meta.attempt;\n }\n } catch {\n // If called outside workflow step context\n }\n\n try {\n return await options.fn();\n } catch (error: any) {\n const errorMessage = error?.message || String(error);\n const status = error?.status || error?.statusCode || error?.response?.status;\n\n const isRateLimited =\n status === 429 ||\n errorMessage.includes('429') ||\n errorMessage.toLowerCase().includes('rate limit') ||\n errorMessage.toLowerCase().includes('resource exhausted') ||\n errorMessage.toLowerCase().includes('quota exceeded');\n\n const isTransientError =\n status === 500 ||\n status === 502 ||\n status === 503 ||\n status === 504 ||\n errorMessage.includes('fetch failed') ||\n errorMessage.includes('ECONNRESET') ||\n errorMessage.includes('ETIMEDOUT') ||\n errorMessage.includes('socket hang up');\n\n if (isRateLimited || isTransientError) {\n const retryAfterSeconds = Math.min(120, Math.pow(2, attempt) * 2); // 4s, 8s, 16s, 32s, 64s, 120s\n const reason = isRateLimited ? 'Rate limit exceeded (429)' : `Transient server error (${status || 'network'})`;\n\n throw new RetryableError(`[${options.stepName}] ${reason}. Retrying attempt ${attempt + 1}...`, {\n retryAfter: `${retryAfterSeconds}s`,\n });\n }\n\n // Permanent/fatal error\n throw error;\n }\n}\n","import { generateLessonMasterFlow, auditCurriculumQualityFlow } from '../../ai/flows';\nimport { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport type { MilestoneInput, LessonPlan, CurriculumQualityReport } from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface GenerateMasterLessonStepInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n contextContinuity?: string;\n /** Pre-rendered STANDARDS CONTEXT block (verbatim standard statements). */\n standardsContext?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function generateMasterLessonStep(input: GenerateMasterLessonStepInput): Promise<LessonPlan> {\n 'use step';\n console.log(` ⏳ [Step: Master Lesson] Generating 5E Master Lesson Plan for \"${input.milestone.name}\"...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-master-lesson-${input.milestone.id || 'L01'}`,\n fn: async () => {\n return generateLessonMasterFlow({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: input.contextContinuity,\n standardsContext: input.standardsContext,\n modelOptions: input.modelOptions,\n });\n },\n });\n console.log(` ✅ [Step: Master Lesson] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport interface JudgeMasterLessonStepInput {\n lessonId: string;\n lesson: LessonPlan;\n language: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n /** Verbatim standard statements (canonical ID -> text) for the Standards Alignment judge dimension. */\n standardStatements?: Record<string, string>;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function judgeMasterLessonStep(input: JudgeMasterLessonStepInput): Promise<CurriculumQualityReport> {\n 'use step';\n console.log(` ⚖️ [Step: Quality Judge] Auditing Master Lesson pedagogical quality & language adherence...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `judge-master-lesson-${input.lessonId}`,\n fn: async () => {\n return auditCurriculumQualityFlow({\n targetArtifactType: 'LESSON',\n lessonId: input.lessonId,\n expectedLanguage: input.language,\n targetObjectives: input.targetObjectives,\n generatedContentJson: JSON.stringify(input.lesson, null, 2),\n standardStatements: input.standardStatements,\n modelOptions: input.modelOptions,\n });\n },\n });\n console.log(` ✅ [Step: Quality Judge] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Verdict: ${res.overallVerdict}, Score: ${res.totalScore}/100)`);\n return res;\n}\n\nexport interface RepairMasterLessonStepInput {\n milestone: MilestoneInput;\n language: string;\n topic?: string;\n targetAudience?: string;\n auditReport: CurriculumQualityReport;\n /** Pre-rendered STANDARDS CONTEXT block — kept across repair so grounding is never lost. */\n standardsContext?: string;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport async function repairMasterLessonStep(input: RepairMasterLessonStepInput): Promise<LessonPlan> {\n 'use step';\n console.log(` 🛠️ [Step: Auto-Repair] Repairing Master Lesson based on Judge feedback...`);\n const repairFeedback = `\nPREVIOUS AUDIT VERDICT: ${input.auditReport.overallVerdict} (Score: ${input.auditReport.totalScore}/100)\nDetected Issues:\n${input.auditReport.criteria.filter((c) => !c.passed).map((c) => `- [${c.name}] ${c.feedback}`).join('\\n')}\nActionable Repairs:\n${input.auditReport.actionableRepairPrompts.map((p) => `* ${p}`).join('\\n')}\nLanguage Adherence Required: \"${input.language}\"\n`.trim();\n\n return withRateLimitBackoff({\n stepName: `repair-master-lesson-${input.milestone.id || 'L01'}`,\n fn: async () => {\n return generateLessonMasterFlow({\n milestone: input.milestone,\n language: input.language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n contextContinuity: repairFeedback,\n standardsContext: input.standardsContext,\n modelOptions: input.modelOptions,\n });\n },\n });\n}\n","import {\n generateActivityFlow,\n generateCodeLabFlow,\n generateSelfLabFlow,\n generateDiagnosticQuizFlow,\n generateSlidesFlow,\n generateHandoutFlow,\n generateWorksheetFlow,\n generateTeacherGuideFlow,\n generateExtensionFlow,\n} from '../../ai/flows';\nimport { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n MilestoneInput,\n} from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport async function generateActivityStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<ActivityLab> {\n 'use step';\n console.log(` ⏳ [Step: Activity Lab] Generating hands-on ACT.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-act-${options.lesson.lessonId}`,\n fn: async () => generateActivityFlow(options),\n });\n console.log(` ✅ [Step: Activity Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateCodeLabStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n targetTechStack?: string[];\n modelOptions?: ModelResolutionOptions;\n}): Promise<CodeLab> {\n 'use step';\n console.log(` ⏳ [Step: Code Lab] Generating starter & solution code LAB.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-lab-${options.lesson.lessonId}`,\n fn: async () => generateCodeLabFlow(options),\n });\n console.log(` ✅ [Step: Code Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateSelfLabStep(options: {\n milestone: MilestoneInput;\n language: string;\n targetTechStack?: string[];\n modelOptions?: ModelResolutionOptions;\n}): Promise<SelfLab> {\n 'use step';\n console.log(` ⏳ [Step: Self-Lab] Generating SELF_LAB.md with Progressive Hints...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-self-lab-${options.milestone.id || 'L01'}`,\n fn: async () => generateSelfLabFlow(options),\n });\n console.log(` ✅ [Step: Self-Lab] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Challenges: 3 tiers Bronze/Silver/Gold)`);\n return res;\n}\n\nexport async function generateDiagnosticQuizStep(options: {\n milestone: MilestoneInput;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<DiagnosticQuiz> {\n 'use step';\n console.log(` ⏳ [Step: Diagnostic Quiz] Generating QUIZ.json Bloom Assessment...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-quiz-${options.milestone.id || 'L01'}`,\n fn: async () => generateDiagnosticQuizFlow(options),\n });\n console.log(` ✅ [Step: Diagnostic Quiz] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Questions: ${res.questions.length})`);\n return res;\n}\n\nexport async function generateSlidesStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<SlideDeck> {\n 'use step';\n console.log(` ⏳ [Step: Slides] Generating Marp presentation SLIDE.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-slides-${options.lesson.lessonId}`,\n fn: async () => generateSlidesFlow(options),\n });\n console.log(` ✅ [Step: Slides] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Slides: ${res.slides.length})`);\n return res;\n}\n\nexport async function generateHandoutStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Handout> {\n 'use step';\n console.log(` ⏳ [Step: Handout] Generating 5-Second Rule HANDOUT.md...`);\n const t0 = Date.now();\n const res = await withRateLimitBackoff({\n stepName: `generate-handout-${options.lesson.lessonId}`,\n fn: async () => generateHandoutFlow(options),\n });\n console.log(` ✅ [Step: Handout] Done in ${((Date.now() - t0) / 1000).toFixed(1)}s (Title: \"${res.title}\")`);\n return res;\n}\n\nexport async function generateWorksheetStep(options: {\n lesson: LessonPlan;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Worksheet> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-worksheet-${options.lesson.lessonId}`,\n fn: async () => generateWorksheetFlow(options),\n });\n}\n\nexport async function generateTeacherGuideStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<TeacherGuide> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-teacher-guide-${options.lesson.lessonId}`,\n fn: async () => generateTeacherGuideFlow(options),\n });\n}\n\nexport async function generateExtensionStep(options: {\n lesson: LessonPlan;\n activity: ActivityLab;\n language: string;\n modelOptions?: ModelResolutionOptions;\n}): Promise<Extension> {\n 'use step';\n return withRateLimitBackoff({\n stepName: `generate-extension-${options.lesson.lessonId}`,\n fn: async () => generateExtensionFlow(options),\n });\n}\n","import { withRateLimitBackoff } from '../errors/rateLimitHandler';\nimport { auditCurriculumQualityFlow } from '../../ai/flows/auditCurriculumQualityFlow';\nimport type { CurriculumQualityReport } from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface JudgeSatelliteStepInput {\n artifactType: string; // 'ACT' | 'QUIZ' | 'SLIDE' | 'GUIDE' | 'WKS' | 'HANDOUT' | 'EXT' | 'CODE'\n artifactId: string;\n artifact: unknown;\n language: string;\n targetObjectives: Array<{ code: string; description: string; bloomLevel: string }>;\n standardStatements?: Record<string, string>;\n modelOptions?: ModelResolutionOptions;\n}\n\n/**\n * Gate step for satellite artifacts (LLM_JUDGE mode).\n * Judges any artifact JSON against the same 6-dimension rubric; returns the report.\n * The workflow decides what to do with the verdict (log / block / store) — gate config stays the single source of truth.\n */\nexport async function judgeSatelliteStep(input: JudgeSatelliteStepInput): Promise<CurriculumQualityReport> {\n 'use step';\n const t0 = Date.now();\n console.log(' 🧑‍⚖️ [Step: Satellite Judge] ' + input.artifactType + ' (' + input.artifactId + ')...');\n return withRateLimitBackoff({\n stepName: 'judge-satellite-' + input.artifactType + '-' + input.artifactId,\n fn: async () => {\n return auditCurriculumQualityFlow({\n targetArtifactType: input.artifactType,\n lessonId: input.artifactId,\n expectedLanguage: input.language,\n targetObjectives: input.targetObjectives,\n generatedContentJson: JSON.stringify(input.artifact),\n standardStatements: input.standardStatements,\n modelOptions: input.modelOptions,\n });\n },\n }).then((res) => {\n console.log(' ✅ [Satellite Judge] ' + input.artifactType + ' → ' + res.overallVerdict + ' (' + res.totalScore + '/100) in ' + ((Date.now() - t0) / 1000).toFixed(1) + 's');\n return res;\n });\n}\n","import {\n serializeLessonToMarkdown,\n serializeActivityToMarkdown,\n serializeCodeLabToMarkdown,\n serializeHandoutToMarkdown,\n} from '../../pipeline/markdownSerializers';\nimport {\n serializeSelfLabToMarkdown,\n serializeDiagnosticQuizToMarkdown,\n} from '../../pipeline/selfPacedSerializers';\nimport { LocalWorkspaceManager } from '../../publishers/localWorkspaceManager';\nimport { publishToGitHub, type GitPublishOptions, type GitPublishResult } from '../../publishers/gitPublisher';\nimport { publishToSupabase, type SupabasePublishOptions, type SupabasePublishResult } from '../../publishers/supabasePublisher';\nimport type {\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n} from '../../schemas';\n\nexport interface SaveMilestoneArtifactsInput {\n jobId: string;\n milestoneSlug: string;\n lesson: LessonPlan;\n activity?: ActivityLab;\n codeLab?: CodeLab;\n selfLab?: SelfLab;\n quiz?: DiagnosticQuiz;\n slides?: SlideDeck;\n handout?: Handout;\n worksheet?: Worksheet;\n teacherGuide?: TeacherGuide;\n extension?: Extension;\n cheatSheetMarkdown?: string;\n baseWorkspaceDir?: string;\n}\n\nexport interface SavedMilestoneResult {\n milestoneSlug: string;\n savedFiles: string[];\n}\n\nexport async function saveMilestoneToWorkspaceStep(input: SaveMilestoneArtifactsInput): Promise<SavedMilestoneResult> {\n 'use step';\n const manager = new LocalWorkspaceManager(input.baseWorkspaceDir);\n const savedFiles: string[] = [];\n\n // 1. LESSON_5E.md\n const lessonMd = serializeLessonToMarkdown(input.lesson);\n const p1 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'LESSON_5E.md', lessonMd, 'LESSON');\n savedFiles.push(p1);\n\n // 2. ACT.md\n if (input.activity) {\n const actMd = serializeActivityToMarkdown(input.activity);\n const p2 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'ACT.md', actMd, 'ACT');\n savedFiles.push(p2);\n }\n\n // 3. LAB.md\n if (input.codeLab) {\n const labContent = serializeCodeLabToMarkdown(input.codeLab);\n const p3 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'LAB.md', labContent, 'LAB');\n savedFiles.push(p3);\n }\n\n // 4. SELF_LAB.md (with Progressive Hints)\n if (input.selfLab) {\n const selfLabMd = serializeSelfLabToMarkdown(input.selfLab);\n const p4 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'SELF_LAB.md', selfLabMd, 'SELF_LAB');\n savedFiles.push(p4);\n }\n\n // 5. QUIZ.json & QUIZ.md\n if (input.quiz) {\n const quizMd = serializeDiagnosticQuizToMarkdown(input.quiz);\n const p5a = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'QUIZ.md', quizMd, 'QUIZ_MD');\n const p5b = await manager.saveArtifact(\n input.jobId,\n input.milestoneSlug,\n 'QUIZ.json',\n JSON.stringify(input.quiz, null, 2),\n 'QUIZ_JSON'\n );\n savedFiles.push(p5a, p5b);\n }\n\n // 6. SLIDE.md\n if (input.slides) {\n const slidesContent = `---\nmarp: true\ntheme: default\npaginate: true\n---\n\n# ${input.slides.title}\n\n---\n\n${input.slides.slides.map((s) => `## Slide ${s.slideNumber}: ${s.title}\\n\\n${s.bulletPoints.map((b) => `- ${b}`).join('\\n')}${s.codeSnippet ? `\\n\\n\\`\\`\\`\\n${s.codeSnippet}\\n\\`\\`\\`` : ''}\\n\\n<!-- Presenter Notes: ${s.presenterNotes || ''} -->`).join('\\n\\n---\\n\\n')}\n`.trim();\n const p6 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'SLIDE.md', slidesContent, 'SLIDES');\n savedFiles.push(p6);\n }\n\n // 7. HANDOUT.md\n if (input.handout) {\n const handoutMd = serializeHandoutToMarkdown(input.handout);\n const p7 = await manager.saveArtifact(input.jobId, input.milestoneSlug, 'HANDOUT.md', handoutMd, 'HANDOUT');\n savedFiles.push(p7);\n }\n\n // 8. CHEAT_SHEET.md\n if (input.cheatSheetMarkdown) {\n const p8 = await manager.saveArtifact(\n input.jobId,\n input.milestoneSlug,\n 'CHEAT_SHEET.md',\n input.cheatSheetMarkdown,\n 'CHEAT_SHEET'\n );\n savedFiles.push(p8);\n }\n\n await manager.markMilestoneCompleted(input.jobId);\n\n return {\n milestoneSlug: input.milestoneSlug,\n savedFiles,\n };\n}\n\nexport async function publishToGitStep(options: GitPublishOptions): Promise<GitPublishResult> {\n 'use step';\n return publishToGitHub(options);\n}\n\nexport async function publishToSupabaseStep(options: SupabasePublishOptions): Promise<SupabasePublishResult> {\n 'use step';\n return publishToSupabase(options);\n}\n","import * as workflowPkg from 'workflow';\nimport { z } from 'zod';\n\nexport const approvalPayloadSchema = z.object({\n approved: z.boolean().describe('Whether the human reviewer approves the generated curriculum/lesson'),\n reviewerName: z.string().optional().describe('Name or ID of the reviewer'),\n feedback: z.string().optional().describe('Actionable feedback or required changes if rejected'),\n timestamp: z.string().optional().describe('ISO timestamp of the approval action'),\n});\n\nexport type ApprovalPayload = z.infer<typeof approvalPayloadSchema>;\n\nconst hookFactory = (workflowPkg as any).defineHook || (workflowPkg as any).createHook || ((opts: any) => opts);\n\n/**\n * Durable Hook for Human-in-the-Loop curriculum approval gates.\n * Pauses workflow with zero compute cost until an authorized user approves via UI/API.\n */\nexport const lessonApprovalHook = hookFactory({\n schema: approvalPayloadSchema,\n});\n","import type { FrameworkPack } from './frameworkPackSchema';\n\n/**\n * Standards Coverage Gate — Verification layer (tầng 3 của cơ chế bám chuẩn).\n *\n * Deterministic coverage matrix across the generation chain:\n * standard statement → learning objective → lesson activities → quiz questions\n *\n * Philosophy: \"bám chuẩn\" must be enforced by CODE, not by prompt goodwill.\n * A statement mapped with kind=\"covers\" that has no LO / no activity / no\n * assessment = a compliance hole, reported with an actionable repair hint.\n *\n * Pure function over already-generated artifacts. No LLM, no I/O.\n */\n\nexport interface CoverageGateInput {\n packs: FrameworkPack[];\n /** Learning objectives as generated (code + optional standardRefs anchoring). */\n objectives: Array<{\n code: string;\n standardRefs?: string[];\n conceptRefs?: string[];\n }>;\n /** activitySequence rows of the lesson (lo codes link activities to LOs). Optional: omitted when no structured activity-LO linkage is available. */\n activities?: Array<{ seq?: number; lo: string[] }>;\n /** Quiz questions; each links to assessment objectives → alignedLO. */\n quizQuestions: Array<{ alignedLO?: string; alignedAO?: string }>;\n /** Assessment objectives table (AO → alignedLO). Questions may reference AOs only. */\n assessmentObjectives?: Array<{ aoCode: string; alignedLO: string }>;\n}\n\nexport interface StatementCoverageRow {\n packId: string;\n statementId: string;\n statementText: string;\n status: 'COVERED' | 'PARTIAL' | 'UNCOVERED' | 'UNMAPPED';\n objectives: string[];\n hasActivity: boolean;\n hasAssessment: boolean;\n issues: string[];\n}\n\nexport interface CoverageGateReport {\n verdict: 'PASS' | 'WARN' | 'FAIL';\n coveragePct: number;\n rows: StatementCoverageRow[];\n summary: string;\n rawMarkdownReport: string;\n}\n\n/** statementRef formats accepted in standardRefs: \"1B-AP-10\" or \"csta-k12-2017:1B-AP-10\". */\nfunction resolveStatementRef(ref: string, packs: FrameworkPack[]): { pack: FrameworkPack; statementId: string } | null {\n const [head, ...rest] = ref.split(':');\n const candidatePacks = rest.length > 0 ? packs.filter((p) => p.manifest.id === head) : packs;\n const statementId = rest.length > 0 ? rest.join(':') : ref;\n for (const p of candidatePacks) {\n if (p.statements.some((s) => s.id === statementId)) return { pack: p, statementId };\n }\n return null;\n}\n\nexport function evaluateStandardsCoverage(input: CoverageGateInput): CoverageGateReport {\n const rows: StatementCoverageRow[] = [];\n\n // AO → LO resolution map\n const aoToLo = new Map<string, string>();\n for (const ao of input.assessmentObjectives ?? []) aoToLo.set(ao.aoCode, ao.alignedLO);\n\n // LO → covered statements (explicit anchors)\n const loToRefs = new Map<string, Set<string>>();\n for (const lo of input.objectives) {\n loToRefs.set(lo.code, new Set(lo.standardRefs ?? []));\n }\n\n // LOs actually taught (activities) and assessed (quiz, via direct alignedLO or AO table)\n const taughtLOs = new Set<string>();\n for (const act of input.activities ?? []) for (const lo of act.lo) taughtLOs.add(lo);\n const assessedLOs = new Set<string>();\n for (const q of input.quizQuestions) {\n if (q.alignedLO) assessedLOs.add(q.alignedLO);\n if (q.alignedAO) {\n const lo = aoToLo.get(q.alignedAO);\n if (lo) assessedLOs.add(lo);\n }\n }\n\n for (const pack of input.packs) {\n const mappingByStatement = new Map<string, string>();\n for (const m of pack.mappings ?? []) {\n // first mapping wins for kind resolution; \"covers\" beats \"partial\" beats \"extends\"\n const prev = mappingByStatement.get(m.statementId);\n if (!prev || (prev !== 'covers' && m.kind === 'covers') || (prev === 'extends' && m.kind !== 'extends')) {\n mappingByStatement.set(m.statementId, m.kind);\n }\n }\n\n for (const statement of pack.statements) {\n const refFull = `${pack.manifest.id}:${statement.id}`;\n const issues: string[] = [];\n\n // Objectives anchored to this statement\n const los = input.objectives\n .filter((lo) => (lo.standardRefs ?? []).some((r) => r === statement.id || r === refFull))\n .map((lo) => lo.code);\n\n const kind = mappingByStatement.get(statement.id);\n const hasMapping = kind !== undefined;\n const isComplianceRelevant = kind === 'covers';\n\n const hasActivity = los.some((lo) => taughtLOs.has(lo));\n const hasAssessment = los.some((lo) => assessedLOs.has(lo));\n\n let status: StatementCoverageRow['status'];\n if (!hasMapping) status = 'UNMAPPED';\n else if (!isComplianceRelevant) status = 'PARTIAL';\n else if (los.length > 0 && hasActivity && hasAssessment) status = 'COVERED';\n else status = 'UNCOVERED';\n\n if (status === 'UNCOVERED') {\n if (los.length === 0) issues.push('No learning objective anchors this statement (missing standardRefs).');\n else {\n if (!hasActivity) issues.push(`Anchored LO(s) ${los.join(', ')} have no activity in lesson flow.`);\n if (!hasAssessment) issues.push(`Anchored LO(s) ${los.join(', ')} are not measured by any quiz question.`);\n }\n }\n\n rows.push({\n packId: pack.manifest.id,\n statementId: statement.id,\n statementText: Object.values(statement.texts)[0] ?? '',\n status,\n objectives: los,\n hasActivity,\n hasAssessment,\n issues,\n });\n }\n }\n\n // Unresolvable refs (typo / hallucinated IDs) — reported as issues on no row\n for (const lo of input.objectives) {\n for (const r of lo.standardRefs ?? []) {\n if (!resolveStatementRef(r, input.packs)) {\n rows.push({\n packId: '(unresolved)',\n statementId: r,\n statementText: '',\n status: 'UNCOVERED',\n objectives: [lo.code],\n hasActivity: false,\n hasAssessment: false,\n issues: [`standardRef \"${r}\" does not exist in any adopted pack — likely a hallucinated or stale ID`],\n });\n }\n }\n }\n\n const complianceRows = rows.filter((r) => r.status !== 'UNMAPPED' && r.status !== 'PARTIAL');\n const covered = complianceRows.filter((r) => r.status === 'COVERED').length;\n const coveragePct = complianceRows.length === 0 ? 100 : Math.round((covered / complianceRows.length) * 100);\n const unresolvedCount = rows.filter((r) => r.packId === '(unresolved)').length;\n\n const verdict: CoverageGateReport['verdict'] =\n unresolvedCount > 0 || coveragePct < 60 ? 'FAIL' : coveragePct < 100 ? 'WARN' : 'PASS';\n\n const lines: string[] = [\n '# Standards Coverage Report',\n '',\n `- Verdict: **${verdict}**`,\n `- Compliance coverage: **${coveragePct}%** (${covered}/${complianceRows.length} \"covers\" statements fully taught + assessed)`,\n `- Unresolved standardRefs: ${unresolvedCount}`,\n '',\n '| Pack | Statement | Status | LOs | Activity | Assessment |',\n '|---|---|---|---|---|---|',\n ...rows.map(\n (r) =>\n `|${r.packId}|${r.statementId}|${r.status}|${r.objectives.join(', ') || '—'}|${r.hasActivity ? '✓' : '✗'}|${r.hasAssessment ? '✓' : '✗'}|`\n ),\n ];\n const issueLines = rows.filter((r) => r.issues.length > 0).flatMap((r) => r.issues.map((i) => `- [${r.packId}:${r.statementId}] ${i}`));\n if (issueLines.length > 0) lines.push('', '## Issues', ...issueLines);\n\n return {\n verdict,\n coveragePct,\n rows,\n summary: `Standards coverage ${coveragePct}% — verdict ${verdict}`,\n rawMarkdownReport: lines.join('\\n'),\n };\n}\n","import { createClient, type SupabaseClient } from '@supabase/supabase-js';\nimport {\n FrameworkPackSchema,\n type FrameworkPack,\n type FrameworkMapping,\n type FrameworkStatement,\n} from './frameworkPackSchema';\n\n/**\n * Standards Registry Adapter — Supabase-backed runtime plane for Framework Packs.\n *\n * Read path (generation): loadPacksForCourse() → FrameworkPack[] hydrated from\n * standards_frameworks + standards_statements + standards_mappings (+ overrides\n * applied with resolution order override > pack-embedded, 'retired' removes).\n * Write path (intake): importPack() persists a validated pack; adopt/deprecate\n * manage lifecycle. Write access uses a service-role client (intake runs\n * server-side); RLS governs client-side reads.\n */\n\nexport interface StandardsRegistryConfig {\n supabaseUrl?: string;\n supabaseServiceRoleKey?: string;\n supabaseAnonKey?: string;\n client?: SupabaseClient;\n}\n\nexport interface HydratedPack extends FrameworkPack {\n /** DB id of the standards_frameworks row */\n dbId: string;\n status: 'draft' | 'active' | 'deprecated';\n organizationCode: string | null;\n}\n\nexport interface ImportPackResult {\n frameworkDbId: string;\n statementsInserted: number;\n mappingsInserted: number;\n}\n\nexport class StandardsRegistryAdapter {\n private client: SupabaseClient;\n\n constructor(config: StandardsRegistryConfig = {}) {\n if (config.client) {\n this.client = config.client;\n return;\n }\n const url = config.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL || '';\n const key =\n config.supabaseServiceRoleKey ||\n process.env.SUPABASE_SERVICE_ROLE_KEY ||\n config.supabaseAnonKey ||\n process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ||\n '';\n if (!url || !key) {\n throw new Error('StandardsRegistryAdapter: Supabase URL/key missing (pass client or env).');\n }\n this.client = createClient(url, key);\n }\n\n // ─── Intake (write path — service role) ───────────────────────────────────\n\n /** Persist a schema-validated pack as a new framework (status=draft). */\n async importPack(pack: FrameworkPack, opts?: { organizationCode?: string | null; createdBy?: string; originalFilePath?: string }): Promise<ImportPackResult> {\n const parsed = FrameworkPackSchema.safeParse(pack);\n if (!parsed.success) {\n throw new Error('importPack: pack failed schema validation: ' + parsed.error.issues.map((i) => i.path.join('.') + ': ' + i.message).join('; '));\n }\n const p = parsed.data;\n\n const { data: fw, error: fwErr } = await this.client\n .from('standards_frameworks')\n .insert({\n pack_id: p.manifest.id,\n content_version: p.manifest.contentVersion,\n name: p.manifest.name,\n spec_version: p.manifest.specVersion,\n subject: p.manifest.subject,\n languages: p.manifest.languages,\n grade_model: p.manifest.gradeModel,\n provenance: p.manifest.provenance,\n trust: p.manifest.trust,\n status: 'draft',\n organization_code: opts?.organizationCode ?? (p.manifest.trust === 'verified' ? null : p.manifest.provenance.importedBy?.replace(/^org:/, '') || null),\n original_file_path: opts?.originalFilePath ?? null,\n created_by: opts?.createdBy ?? null,\n })\n .select('id')\n .single();\n if (fwErr) throw new Error('importPack: framework insert failed: ' + fwErr.message);\n\n const frameworkId = fw.id as string;\n\n const statementRows = p.statements.map((s: FrameworkStatement) => ({\n framework_id: frameworkId,\n statement_id: s.id,\n parent_statement_id: s.parentId ?? null,\n grade_min: s.gradeBand[0],\n grade_max: s.gradeBand[1],\n texts: s.texts,\n classifications: s.classifications ?? [],\n bloom_hint: s.bloomHint ?? null,\n keywords: s.keywords ?? [],\n source_ref: s.sourceRef ?? null,\n provenance: s.provenance,\n }));\n\n const { error: stErr, count: stCount } = await this.client\n .from('standards_statements')\n .insert(statementRows, { count: 'exact' });\n if (stErr) throw new Error('importPack: statement insert failed: ' + stErr.message);\n\n let mappingCount = 0;\n if (p.mappings && p.mappings.length > 0) {\n const mappingRows = p.mappings.map((m: FrameworkMapping) => ({\n framework_id: frameworkId,\n statement_id: m.statementId,\n target_ref: m.targetRef,\n kind: m.kind,\n confidence: m.confidence,\n provenance: m.provenance,\n }));\n const { error: mpErr, count: mpCount } = await this.client\n .from('standards_mappings')\n .insert(mappingRows, { count: 'exact' });\n if (mpErr) throw new Error('importPack: mapping insert failed: ' + mpErr.message);\n mappingCount = mpCount ?? mappingRows.length;\n }\n\n return { frameworkDbId: frameworkId, statementsInserted: stCount ?? statementRows.length, mappingsInserted: mappingCount };\n }\n\n /** Activate a draft framework (immutable version is now live). */\n async activatePack(frameworkDbId: string): Promise<void> {\n const { error } = await this.client\n .from('standards_frameworks')\n .update({ status: 'active' })\n .eq('id', frameworkDbId)\n .eq('status', 'draft');\n if (error) throw new Error('activatePack failed: ' + error.message);\n }\n\n async deprecatePack(frameworkDbId: string): Promise<void> {\n const { error } = await this.client\n .from('standards_frameworks')\n .update({ status: 'deprecated' })\n .eq('id', frameworkDbId);\n if (error) throw new Error('deprecatePack failed: ' + error.message);\n }\n\n async adoptPack(frameworkDbId: string, organizationCode: string, adoptedBy?: string): Promise<void> {\n const { error } = await this.client.from('standards_org_adoptions').upsert(\n { framework_id: frameworkDbId, organization_code: organizationCode, adopted_by: adoptedBy ?? null },\n { onConflict: 'organization_code,framework_id' }\n );\n if (error) throw new Error('adoptPack failed: ' + error.message);\n }\n\n // ─── Runtime (read path — generation) ─────────────────────────────────────\n\n /**\n * Load all packs usable by an org: platform packs (verified, org IS NULL) +\n * org packs + org adoptions. Hydrated into the same FrameworkPack shape the\n * in-memory Phase-1 components consume (injector / coverage gate / judge).\n */\n async loadPacksForOrg(organizationCode: string | null): Promise<HydratedPack[]> {\n // Visible frameworks = platform (org NULL, active) OR org-owned OR adopted\n let query = this.client\n .from('standards_frameworks')\n .select('*, standards_org_adoptions(organization_code)')\n .eq('status', 'active');\n const { data: frameworks, error } = await query;\n if (error) throw new Error('loadPacksForOrg: ' + error.message);\n\n const visible = (frameworks ?? []).filter((f: any) => {\n const own = f.organization_code && organizationCode && f.organization_code === organizationCode;\n const global = !f.organization_code;\n const adopted = organizationCode && (f.standards_org_adoptions ?? []).some((a: any) => a.organization_code === organizationCode);\n return global || own || adopted;\n });\n\n if (visible.length === 0) return [];\n\n const ids = visible.map((f: any) => f.id);\n const [{ data: statements, error: stErr }, { data: mappings, error: mpErr }, { data: overrides, error: ovErr }] = await Promise.all([\n this.client.from('standards_statements').select('*').in('framework_id', ids),\n this.client.from('standards_mappings').select('*').in('framework_id', ids),\n this.client.from('standards_mapping_overrides').select('*').in('framework_id', ids),\n ]);\n if (stErr) throw new Error('loadPacksForOrg statements: ' + stErr.message);\n\n const overridesByFw = new Map<string, any[]>();\n for (const o of overrides ?? []) {\n const list = overridesByFw.get(o.framework_id) ?? [];\n list.push(o);\n overridesByFw.set(o.framework_id, list);\n }\n\n return visible.map((f: any) => {\n const stmts = (statements ?? [])\n .filter((s: any) => s.framework_id === f.id)\n .map((s: any) => ({\n id: s.statement_id,\n parentId: s.parent_statement_id ?? undefined,\n gradeBand: [s.grade_min, s.grade_max] as [number, number],\n texts: s.texts,\n classifications: s.classifications ?? [],\n bloomHint: s.bloom_hint ?? undefined,\n keywords: s.keywords ?? [],\n sourceRef: s.source_ref ?? undefined,\n provenance: s.provenance ?? { method: 'imported' },\n }));\n\n // Resolution order: override (unless retired) > pack-embedded\n const ov = overridesByFw.get(f.id) ?? [];\n const retired = new Set(ov.filter((o: any) => o.kind === 'retired').map((o: any) => o.statement_id + '|' + o.target_ref));\n const embedded: FrameworkMapping[] = (mappings ?? [])\n .filter((m: any) => m.framework_id === f.id)\n .map((m: any) => ({\n statementId: m.statement_id,\n targetRef: m.target_ref,\n kind: m.kind,\n confidence: Number(m.confidence),\n provenance: m.provenance ?? { method: 'imported' },\n }));\n const overlay: FrameworkMapping[] = ov\n .filter((o: any) => o.kind !== 'retired')\n .map((o: any) => ({\n statementId: o.statement_id,\n targetRef: o.target_ref,\n kind: o.kind,\n confidence: Number(o.confidence),\n provenance: { method: 'human', reviewedBy: o.created_by ?? 'overlay', note: o.note ?? undefined },\n }));\n\n const bridge = new Map<string, FrameworkMapping>();\n for (const m of embedded) bridge.set(m.statementId + '|' + m.targetRef, m);\n for (const m of overlay) bridge.set(m.statementId + '|' + m.targetRef, m);\n const finalMappings = [...bridge.values()].filter((m) => !retired.has(m.statementId + '|' + m.targetRef));\n\n const hydrated = FrameworkPackSchema.safeParse({\n manifest: {\n id: f.pack_id,\n name: f.name,\n specVersion: f.spec_version || '1.0',\n contentVersion: f.content_version,\n subject: f.subject,\n languages: f.languages,\n gradeModel: f.grade_model,\n provenance: f.provenance,\n trust: f.trust,\n },\n statements: stmts,\n mappings: finalMappings,\n });\n if (!hydrated.success) {\n throw new Error('loadPacksForOrg: hydrated pack \"' + f.pack_id + '\" failed schema: ' + hydrated.error.issues[0]?.message);\n }\n\n return { ...hydrated.data, dbId: f.id, status: f.status, organizationCode: f.organization_code ?? null } as HydratedPack;\n });\n }\n}\n","import {\n generateMasterLessonStep,\n judgeMasterLessonStep,\n repairMasterLessonStep,\n generateActivityStep,\n judgeSatelliteStep,\n generateCodeLabStep,\n generateSelfLabStep,\n generateDiagnosticQuizStep,\n generateSlidesStep,\n generateHandoutStep,\n generateWorksheetStep,\n generateTeacherGuideStep,\n generateExtensionStep,\n saveMilestoneToWorkspaceStep,\n type SavedMilestoneResult,\n} from '../steps';\nimport type {\n MilestoneInput,\n LessonPlan,\n ActivityLab,\n CodeLab,\n SelfLab,\n DiagnosticQuiz,\n SlideDeck,\n Handout,\n Worksheet,\n TeacherGuide,\n Extension,\n CurriculumQualityReport,\n} from '../../schemas';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\nimport { buildStandardsContext, evaluateStandardsCoverage } from '../../standards';\nimport { resolveGateSettings, gateModeFor } from '../gateSettings';\n\nexport interface MilestoneWorkflowInput {\n jobId: string;\n milestone: MilestoneInput;\n language?: string;\n topic?: string;\n targetAudience?: string;\n techStack?: string[];\n bundleTier?: 'minimum' | 'full';\n baseWorkspaceDir?: string;\n modelOptions?: ModelResolutionOptions;\n /** Adopted Framework Packs (hydrated from the Standards Registry) for standards-grounded generation. */\n standardsPacks?: import('../../standards').FrameworkPack[];\n /** Hard-block the milestone when standards coverage FAILs (default: true when packs provided). */\n enforceStandardsCoverage?: boolean;\n /** Gate Settings thô (vd: gateModes từ project.config.json) — kit tự chuẩn hoá. */\n gateSettings?: unknown;\n}\n\nexport interface MilestoneWorkflowResult {\n milestoneId: string;\n milestoneSlug: string;\n status: 'SUCCESS' | 'FAILED';\n savedResult: SavedMilestoneResult;\n judgeReport?: CurriculumQualityReport;\n /** Per-artifact-type judge reports for satellites (Gate mode LLM_JUDGE only). */\n satelliteJudgeReports?: Record<string, CurriculumQualityReport>;\n /** The resolved gate settings actually applied in this run (for traceability). */\n gatesResolved?: Record<string, string>;\n /** Set when a Gate (e.g. HITL rejection) BLOCKED downstream production. */\n gateBlocked?: { artifactType: string; reason: 'HITL_REJECTED' | 'HITL_REJECTED_V2'; feedback?: string };\n standardsCoverage?: import('../../standards').CoverageGateReport;\n artifacts: {\n lesson: LessonPlan;\n activity?: ActivityLab;\n codeLab?: CodeLab;\n selfLab?: SelfLab;\n quiz?: DiagnosticQuiz;\n slides?: SlideDeck;\n handout?: Handout;\n worksheet?: Worksheet;\n teacherGuide?: TeacherGuide;\n extension?: Extension;\n };\n}\n\n/**\n * Child Workflow: Executes fine-grained durable generation for a single Milestone.\n * Uses Step-level memoization, automatic LLM retries, and parallel satellite generation.\n */\nexport async function generateMilestoneWorkflow(\n input: MilestoneWorkflowInput\n): Promise<MilestoneWorkflowResult> {\n 'use workflow';\n\n const language = input.language || 'vi';\n const milestoneId = input.milestone.id || input.milestone.concept_code || 'L01';\n // Avoid double-M prefix: if milestoneId already starts with 'M' or 'U', use it directly\n const slugPrefix = /^\\d+$/.test(milestoneId)\n ? `M${milestoneId.padStart(2, '0')}`\n : milestoneId;\n const milestoneSlug = `${slugPrefix}_${(input.milestone.name || 'milestone')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')}`;\n const bundleTier = input.bundleTier || 'minimum';\n // Gate Settings = nguồn quyết định DUY NHẤT cho việc ai kiểm artifact nào.\n const gates = resolveGateSettings(input.gateSettings);\n const techStack = input.techStack || input.milestone.tech_keywords || ['General Technology'];\n console.log(' 🚦 [Gate] LESSON: ' + gates.LESSON + ' | ACT: ' + gates.ACT + ' | QUIZ: ' + gates.QUIZ);\n\n const targetObjectives = (input.milestone.learning_objectives || []).map((lo) => ({\n code: lo.code,\n description: lo.description || lo.name || '',\n bloomLevel: lo.bloom_level || 'understand',\n }));\n\n // ─── Standards grounding (Phase 2): select verbatim statements for this lesson ───\n const packs = input.standardsPacks ?? [];\n const { block: standardsContext, selected: selectedStatements } = buildStandardsContext({\n packs,\n gradeBand: input.milestone.grade_band ?? [6, 12],\n topicText: [input.topic, input.milestone.name, input.milestone.description, ...(input.milestone.tech_keywords || [])].filter(Boolean).join(' '),\n conceptCodes: (input.milestone.concept_code || '').split(',').map((c) => c.trim()).filter(Boolean),\n language,\n });\n const standardStatements: Record<string, string> = {};\n for (const s of selectedStatements) {\n standardStatements[s.packId + ':' + s.statement.id] = Object.values(s.statement.texts)[0] || '';\n }\n if (selectedStatements.length > 0) {\n console.log(' 📐 [Standards] Grounded with ' + selectedStatements.length + ' verbatim statement(s) from ' + new Set(selectedStatements.map((s) => s.packId)).size + ' pack(s)');\n }\n\n // 1. Step: Generate Master Lesson Plan\n let lesson = await generateMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n\n let auditReport: CurriculumQualityReport | undefined;\n\n // 2. Gate cho LESSON — đúng 1 trong 3 mode chạy, không bao giờ chồng xếp:\n // LLM_JUDGE = Agent kiểm → judge (+ auto-repair khi NEEDS_REVISION/FAIL)\n // HITL = Human kiểm → workflow treo chờ verdict qua durable hook (không judge LLM)\n // OFF = không kiểm\n const lessonGate = gateModeFor(gates, 'LESSON');\n\n if (lessonGate === 'LLM_JUDGE') {\n auditReport = await judgeMasterLessonStep({\n lessonId: milestoneId,\n lesson,\n language,\n targetObjectives,\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n modelOptions: input.modelOptions,\n });\n\n if (auditReport.overallVerdict === 'FAIL' || auditReport.overallVerdict === 'NEEDS_REVISION') {\n lesson = await repairMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n auditReport,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n }\n } else if (lessonGate === 'HITL') {\n // HITL = Human kiểm. Workflow TREO (durable, zero compute) chờ verdict qua hook.\n // Token deterministic theo milestone → API respond tìm được đúng hook.\n const hookToken = 'gate:lesson:' + milestoneId;\n console.log(' ⏸ [Gate] LESSON awaiting HUMAN review (HITL) — hook ' + hookToken);\n const workflowPkg = await import('workflow');\n const createHook = (workflowPkg as any).createHook as ((o: { token: string }) => AsyncIterable<import('../hooks/approvalHook').ApprovalPayload> & { token: string; dispose(): Promise<void> });\n const hook = createHook({ token: hookToken });\n const review = await (hook as unknown as Promise<import('../hooks/approvalHook').ApprovalPayload>);\n console.log(' ✅ [Gate] Human verdict: ' + (review.approved ? 'APPROVED' : 'REJECTED') + (review.feedback ? ' — ' + review.feedback : ''));\n if (!review.approved) {\n // Human từ chối → repair theo feedback → vòng HITL mới trên token v2 (human kiểm lại bản mới)\n const repairReport = {\n overallVerdict: 'NEEDS_REVISION',\n totalScore: 0,\n languageAdherencePassed: true,\n criteria: [],\n actionableRepairPrompts: review.feedback ? [review.feedback] : ['Sửa theo phản hồi của người duyệt'],\n } as unknown as CurriculumQualityReport;\n lesson = await repairMasterLessonStep({\n milestone: input.milestone,\n language,\n topic: input.topic,\n targetAudience: input.targetAudience,\n auditReport: repairReport,\n standardsContext: standardsContext || undefined,\n modelOptions: input.modelOptions,\n });\n const hook2 = createHook({ token: hookToken + ':v2' });\n const review2 = (await (hook2 as unknown as Promise<import('../hooks/approvalHook').ApprovalPayload>));\n console.log(' ✅ [Gate] Human verdict (v2): ' + (review2.approved ? 'APPROVED' : 'REJECTED'));\n if (!review2.approved) {\n // Nguyên lý gate: task phụ thuộc task bị từ chối KHÔNG được thực thi.\n // Chặn toàn bộ downstream — không sinh satellites, không save.\n console.log(' 🛑 [Gate] LESSON rejected twice — satellites & save BLOCKED');\n return {\n milestoneId,\n milestoneSlug,\n status: 'FAILED',\n gateBlocked: { artifactType: 'LESSON', reason: 'HITL_REJECTED_V2', feedback: review2.feedback },\n artifacts: undefined as unknown as MilestoneWorkflowResult['artifacts'],\n } as unknown as MilestoneWorkflowResult;\n }\n }\n }\n\n // 3. Step: Parallel Fan-out for Satellites\n const [activity, selfLab, quiz, slides, handout] = await Promise.all([\n generateActivityStep({ lesson, language, modelOptions: input.modelOptions }),\n generateSelfLabStep({ milestone: input.milestone, language, targetTechStack: techStack, modelOptions: input.modelOptions }),\n generateDiagnosticQuizStep({ milestone: input.milestone, language, modelOptions: input.modelOptions }),\n generateSlidesStep({ lesson, language, modelOptions: input.modelOptions }),\n generateHandoutStep({ lesson, language, modelOptions: input.modelOptions }),\n ]);\n\n const codeLab = await generateCodeLabStep({\n lesson,\n activity,\n language,\n targetTechStack: techStack,\n modelOptions: input.modelOptions,\n });\n\n // 3b. Gate satellites per Gate Settings (LLM_JUDGE → judge; HITL/OFF → skip judging here).\n const satelliteReports: Record<string, CurriculumQualityReport> = {};\n const satelliteCandidates: Array<{ type: import('../gateSettings').CurriculumArtifactType; id: string; artifact: unknown }> = [\n { type: 'ACT', id: 'ACT_' + milestoneId, artifact: activity },\n { type: 'QUIZ', id: 'QUIZ_' + milestoneId, artifact: quiz },\n { type: 'SLIDE', id: 'SLIDE_' + milestoneId, artifact: slides },\n { type: 'HANDOUT', id: 'HANDOUT_' + milestoneId, artifact: handout },\n { type: 'CODE', id: 'CODE_' + milestoneId, artifact: codeLab },\n ];\n const toJudge = satelliteCandidates.filter((c) => c.artifact && gateModeFor(gates, c.type) === 'LLM_JUDGE');\n if (toJudge.length > 0) {\n const reports = await Promise.all(\n toJudge.map((c) =>\n judgeSatelliteStep({\n artifactType: c.type,\n artifactId: c.id,\n artifact: c.artifact,\n language,\n targetObjectives,\n standardStatements: Object.keys(standardStatements).length > 0 ? standardStatements : undefined,\n modelOptions: input.modelOptions,\n }).catch((err: Error) => {\n console.warn(' ⚠ [Gate] satellite judge failed for ' + c.type + ': ' + err.message);\n return undefined;\n })\n )\n );\n for (let i = 0; i < toJudge.length; i++) {\n const r = reports[i];\n if (r) satelliteReports[toJudge[i].type] = r;\n }\n }\n\n let worksheet: Worksheet | undefined;\n let teacherGuide: TeacherGuide | undefined;\n let extension: Extension | undefined;\n\n if (bundleTier === 'full') {\n [worksheet, teacherGuide, extension] = await Promise.all([\n generateWorksheetStep({ lesson, language, modelOptions: input.modelOptions }),\n generateTeacherGuideStep({ lesson, activity, language, modelOptions: input.modelOptions }),\n generateExtensionStep({ lesson, activity, language, modelOptions: input.modelOptions }),\n ]);\n }\n\n // 4. Standards Coverage Gate (deterministic): statement → LO → activity → quiz\n let standardsCoverage: import('../../standards').CoverageGateReport | undefined;\n if (packs.length > 0) {\n standardsCoverage = evaluateStandardsCoverage({\n packs,\n objectives: (lesson.learningObjectives || []).map((lo: any) => ({\n code: lo.code,\n standardRefs: lo.standardRefs,\n conceptRefs: lo.conceptRefs,\n })),\n // NOTE: ActivityLab has no structured LO linkage yet — activity coverage rows are derived\n // from LO→quiz paths inside the gate. Wire ACT.loRefs in a future schema revision.\n activities: [],\n quizQuestions: (quiz?.questions || []).map((q: any) => ({ alignedLO: q.alignedLO, alignedAO: q.alignedAO })),\n assessmentObjectives: quiz?.assessmentObjectives?.map((ao: any) => ({ aoCode: ao.aoCode, alignedLO: ao.alignedLO })),\n });\n console.log(' 📐 [Standards Coverage] ' + standardsCoverage.summary);\n\n const enforce = input.enforceStandardsCoverage ?? true;\n if (enforce && standardsCoverage.verdict === 'FAIL') {\n console.error(' ⛔ [Standards Coverage] HARD BLOCK — ' + standardsCoverage.summary);\n console.error(standardsCoverage.rawMarkdownReport.split('\\n').filter((l) => l.startsWith('- [')).slice(0, 10).join('\\n'));\n return {\n milestoneId,\n milestoneSlug,\n status: 'FAILED',\n savedResult: { workspaceDir: '', files: [] } as unknown as SavedMilestoneResult,\n judgeReport: auditReport,\n standardsCoverage,\n artifacts: { lesson, activity, codeLab, selfLab, quiz, slides, handout, worksheet, teacherGuide, extension },\n };\n }\n }\n\n // 5. Step: Save serialized Markdown/JSON files to Local Workspace Disk\n const savedResult = await saveMilestoneToWorkspaceStep({\n jobId: input.jobId,\n milestoneSlug,\n lesson,\n activity,\n codeLab,\n selfLab,\n quiz,\n slides,\n handout,\n worksheet,\n teacherGuide,\n extension,\n baseWorkspaceDir: input.baseWorkspaceDir,\n });\n\n return {\n milestoneId,\n milestoneSlug,\n status: 'SUCCESS',\n savedResult,\n judgeReport: auditReport,\n satelliteJudgeReports: Object.keys(satelliteReports).length > 0 ? satelliteReports : undefined,\n gatesResolved: gates as unknown as Record<string, string>,\n standardsCoverage,\n artifacts: {\n lesson,\n activity,\n codeLab,\n selfLab,\n quiz,\n slides,\n handout,\n worksheet,\n teacherGuide,\n extension,\n },\n };\n}\n","import { sleep } from 'workflow';\nimport { generateMilestoneWorkflow, type MilestoneWorkflowResult } from './milestoneWorkflow';\nimport { publishToGitStep, publishToSupabaseStep } from '../steps/publishSteps';\nimport { LocalWorkspaceManager } from '../../publishers/localWorkspaceManager';\nimport type { ProjectRoadmap, MilestoneInput } from '../../schemas';\nimport type { GitPublishOptions, GitPublishResult } from '../../publishers/gitPublisher';\nimport type { SupabasePublishOptions, SupabasePublishResult } from '../../publishers/supabasePublisher';\nimport type { ModelResolutionOptions } from '../../ai/provider-factory';\n\nexport interface GenerateRoadmapWorkflowInput {\n jobId?: string;\n roadmap: ProjectRoadmap;\n language?: string;\n bundleTier?: 'minimum' | 'full';\n batchSize?: number;\n /** Gate Settings thô (vd: gateModes từ project.config.json) — kit tự chuẩn hoá. */\n gateSettings?: unknown;\n baseWorkspaceDir?: string;\n gitPublishOptions?: Omit<GitPublishOptions, 'jobId' | 'localJobDir'>;\n supabasePublishOptions?: Omit<SupabasePublishOptions, 'jobId' | 'courseTitle' | 'topic' | 'language' | 'milestones'>;\n modelOptions?: ModelResolutionOptions;\n}\n\nexport interface RoadmapWorkflowSummary {\n jobId: string;\n courseTitle: string;\n topic: string;\n language: string;\n totalMilestones: number;\n successfulMilestones: number;\n failedMilestones: number;\n results: Array<{ milestoneId: string; status: 'FULFILLED' | 'REJECTED'; result?: MilestoneWorkflowResult; error?: string }>;\n gitPublishResult?: GitPublishResult;\n supabasePublishResult?: SupabasePublishResult;\n workspaceDir: string;\n}\n\n/**\n * Parent Workflow: Orchestrates durable generation of an entire Curriculum Roadmap.\n * Implements Batching (Pattern 1), Failure Isolation, and Dual-Target Publishing (Git + Supabase).\n */\nexport async function generateRoadmapWorkflow(\n input: GenerateRoadmapWorkflowInput\n): Promise<RoadmapWorkflowSummary> {\n 'use workflow';\n\n const jobId = input.jobId || `job_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;\n const language = input.language || input.roadmap.target_language || 'vi';\n const topic = input.roadmap.topic || input.roadmap.goal || 'General Curriculum';\n const courseTitle = input.roadmap.title || `Curriculum: ${topic}`;\n const batchSize = input.batchSize || 2;\n const milestones: MilestoneInput[] = input.roadmap.milestones || [];\n\n const workspaceManager = new LocalWorkspaceManager(input.baseWorkspaceDir);\n const workspaceDir = await workspaceManager.initJobWorkspace(jobId, {\n courseTitle,\n topic,\n language,\n totalMilestones: milestones.length,\n });\n\n const milestoneOutcomes: Array<{\n milestoneId: string;\n status: 'FULFILLED' | 'REJECTED';\n result?: MilestoneWorkflowResult;\n error?: string;\n }> = [];\n\n // 1. Process Milestones in Batches with sleep pacing (Pattern 1: Batching)\n for (let i = 0; i < milestones.length; i += batchSize) {\n const batch = milestones.slice(i, i + batchSize);\n\n const batchSettled = await Promise.allSettled(\n batch.map((milestone) =>\n generateMilestoneWorkflow({\n jobId,\n milestone,\n language,\n topic,\n targetAudience: input.roadmap.target_audience,\n techStack: input.roadmap.tech_stack || milestone.tech_keywords,\n bundleTier: input.bundleTier,\n gateSettings: input.gateSettings,\n baseWorkspaceDir: input.baseWorkspaceDir,\n modelOptions: input.modelOptions,\n })\n )\n );\n\n for (const [idx, outcome] of batchSettled.entries()) {\n const targetMilestone = batch[idx];\n const mId = targetMilestone.id || targetMilestone.concept_code || `M${i + idx + 1}`;\n\n if (outcome.status === 'fulfilled') {\n milestoneOutcomes.push({\n milestoneId: mId,\n status: 'FULFILLED',\n result: outcome.value,\n });\n } else {\n milestoneOutcomes.push({\n milestoneId: mId,\n status: 'REJECTED',\n error: outcome.reason instanceof Error ? outcome.reason.message : String(outcome.reason),\n });\n }\n }\n\n // Pace between batches to respect LLM rate limits\n if (i + batchSize < milestones.length) {\n await sleep('2s');\n }\n }\n\n const successfulMilestones = milestoneOutcomes.filter((m) => m.status === 'FULFILLED').length;\n const failedMilestones = milestoneOutcomes.filter((m) => m.status === 'REJECTED').length;\n\n let gitPublishResult: GitPublishResult | undefined = undefined;\n let supabasePublishResult: SupabasePublishResult | undefined = undefined;\n\n // 2. Dual-Target Publishing (if configured)\n if (input.gitPublishOptions) {\n gitPublishResult = await publishToGitStep({\n jobId,\n localJobDir: workspaceDir,\n ...input.gitPublishOptions,\n });\n }\n\n if (input.supabasePublishOptions) {\n supabasePublishResult = await publishToSupabaseStep({\n jobId,\n courseTitle,\n topic,\n language,\n milestones: milestoneOutcomes\n .filter((m) => m.status === 'FULFILLED' && m.result)\n .map((m) => ({\n milestoneId: m.milestoneId,\n milestoneName: m.result!.savedResult.milestoneSlug,\n lessonSlug: m.result!.savedResult.milestoneSlug,\n })),\n ...input.supabasePublishOptions,\n });\n }\n\n return {\n jobId,\n courseTitle,\n topic,\n language,\n totalMilestones: milestones.length,\n successfulMilestones,\n failedMilestones,\n results: milestoneOutcomes,\n gitPublishResult,\n supabasePublishResult,\n workspaceDir,\n };\n}\n","/**\n * @thanh01.pmt/curriculum-kit\n * Core Entrypoint\n */\n\nexport * from './schemas';\nexport * from './ai';\nexport * from './pipeline';\nexport * from './storage';\nexport * from './services';\nexport * from './publishers';\nexport * from './workflow';\nexport * from './errors';\nexport * from './evaluators';\nexport * from './standards';\nexport * from './media';\nexport * from './ai/chatToolLoop';\nexport * from './ai/toolLoopTypes';","import type { LessonPlan, DiagnosticQuizInput, ActivityLab, SlideDeck, CodeLab } from '../schemas';\nimport type { AcademicAuditFinding, DimensionScore } from './types';\n\n/**\n * 🛠️ Deterministic Structural & Contract Linter\n * Strict rule-based checks: Schema completeness, Zero-drift ID alignment, \n * format sanity, and structural safety rules.\n * \n * ⛔ DOES NOT do regex-based semantic parsing or fake semantic understanding.\n * All semantic, cognitive, and pedagogical evaluations are delegated to LLM-as-a-Judge.\n */\nexport class DeterministicStructuralLinter {\n /**\n * Validates structural invariants across a complete lesson bundle.\n */\n public static lintBundle(input: {\n lesson: LessonPlan;\n quiz?: DiagnosticQuizInput;\n activity?: ActivityLab;\n slides?: SlideDeck;\n codeLab?: CodeLab;\n }): {\n passed: boolean;\n structuralScore: number;\n findings: AcademicAuditFinding[];\n strengths: string[];\n } {\n const { lesson, quiz, activity, slides, codeLab } = input;\n const findings: AcademicAuditFinding[] = [];\n const strengths: string[] = [];\n let score = 100;\n\n const baseLessonId = lesson.lessonId;\n const baseLanguage = lesson.language;\n\n // 1. Structural Schema Invariants: Lesson\n if (!lesson.title || lesson.title.trim().length === 0) {\n score -= 20;\n findings.push({\n id: 'struct_missing_lesson_title',\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'CRITICAL',\n title: 'Missing Lesson Title',\n description: 'Lesson plan has an empty or whitespace title.',\n remediationAdvice: 'Provide a non-empty lesson title.',\n });\n }\n\n if (!lesson.learningObjectives || lesson.learningObjectives.length === 0) {\n score -= 25;\n findings.push({\n id: 'struct_empty_learning_objectives',\n dimension: 'CONSTRUCTIVE_ALIGNMENT',\n severity: 'CRITICAL',\n title: 'Empty Learning Objectives Array',\n description: 'Lesson plan contains 0 learning objectives.',\n remediationAdvice: 'Declare at least 2 structured Learning Objectives in the schema.',\n });\n }\n\n if (!lesson.sections || lesson.sections.length === 0) {\n score -= 25;\n findings.push({\n id: 'struct_empty_lesson_sections',\n dimension: '5E_INSTRUCTIONAL_FIDELITY',\n severity: 'CRITICAL',\n title: 'Empty Lesson Sections Array',\n description: 'Lesson plan contains no instructional sections.',\n remediationAdvice: 'Provide structured lesson flow sections.',\n });\n }\n\n // 2. Structural Contract Synchronization (Zero-Drift)\n if (quiz && quiz.quizId !== baseLessonId && !quiz.quizId.includes(baseLessonId)) {\n score -= 15;\n findings.push({\n id: 'struct_quiz_id_mismatch',\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'MAJOR',\n title: 'Quiz ID Contract Mismatch',\n description: `Quiz ID \"${quiz.quizId}\" does not match Lesson ID \"${baseLessonId}\".`,\n remediationAdvice: `Sync Quiz quizId to \"${baseLessonId}\".`,\n affectedElement: quiz.quizId,\n });\n }\n\n if (activity && activity.lessonId !== baseLessonId) {\n score -= 15;\n findings.push({\n id: 'struct_act_id_mismatch',\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'MAJOR',\n title: 'Activity Lesson ID Contract Mismatch',\n description: `Activity lessonId \"${activity.lessonId}\" does not match Lesson ID \"${baseLessonId}\".`,\n remediationAdvice: `Sync Activity lessonId to \"${baseLessonId}\".`,\n affectedElement: activity.lessonId,\n });\n }\n\n if (slides && slides.lessonId !== baseLessonId) {\n score -= 15;\n findings.push({\n id: 'struct_slides_id_mismatch',\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'MAJOR',\n title: 'Slide Deck Lesson ID Contract Mismatch',\n description: `Slide deck lessonId \"${slides.lessonId}\" does not match Lesson ID \"${baseLessonId}\".`,\n remediationAdvice: `Sync Slide deck lessonId to \"${baseLessonId}\".`,\n affectedElement: slides.lessonId,\n });\n }\n\n // 3. Language Uniformity\n const satellites = [\n { type: 'QUIZ', lang: quiz?.language },\n { type: 'ACT', lang: activity?.language },\n { type: 'SLIDE', lang: slides?.language },\n ];\n for (const sat of satellites) {\n if (sat.lang && sat.lang.toLowerCase() !== baseLanguage.toLowerCase()) {\n score -= 25;\n findings.push({\n id: `struct_language_mismatch_${sat.type}`,\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'CRITICAL',\n title: `Language Policy Inconsistency in ${sat.type}`,\n description: `Master Lesson is in \"${baseLanguage}\" but ${sat.type} is declared in \"${sat.lang}\".`,\n remediationAdvice: `Set ${sat.type} language to \"${baseLanguage}\".`,\n });\n }\n }\n\n // 4. Structural Quiz Invariants (4 options, exactly 1 key)\n if (quiz && quiz.questions) {\n for (let i = 0; i < quiz.questions.length; i++) {\n const q = quiz.questions[i];\n const qId = q.id || `Q${i + 1}`;\n const options = q.options || [];\n\n if (options.length < 4) {\n score -= 10;\n findings.push({\n id: `struct_quiz_option_count_${qId}`,\n dimension: 'MISCONCEPTION_RIGOR',\n severity: 'MAJOR',\n title: `Structural Option Count Error in ${qId}`,\n description: `Question ${qId} has ${options.length} options (standard schema requires 4).`,\n remediationAdvice: 'Ensure each question has 4 options (A, B, C, D).',\n affectedElement: qId,\n });\n }\n\n const correctCount = options.filter((o) => o.isCorrect).length;\n if (correctCount !== 1) {\n score -= 20;\n findings.push({\n id: `struct_quiz_key_count_${qId}`,\n dimension: 'MISCONCEPTION_RIGOR',\n severity: 'CRITICAL',\n title: `Key Assignment Error in ${qId}`,\n description: `Question ${qId} has ${correctCount} correct options (must be exactly 1).`,\n remediationAdvice: 'Set `isCorrect: true` on exactly 1 option.',\n affectedElement: qId,\n });\n }\n }\n }\n\n // 5. Hardware BOM Safety Invariant (LED requires current-limiting resistor)\n if (activity?.materialsBOM?.hardware && activity.materialsBOM.hardware.length > 0) {\n const hwText = activity.materialsBOM.hardware.join(' ').toLowerCase();\n const hasLED = hwText.includes('led');\n const hasResistor = hwText.includes('điện trở') || hwText.includes('resistor') || hwText.includes('220') || hwText.includes('330') || hwText.includes('1k');\n\n if (hasLED && !hasResistor) {\n score -= 20;\n findings.push({\n id: 'struct_hardware_unsafe_led_no_resistor',\n dimension: 'TECHNICAL_AUTHENTICITY',\n severity: 'CRITICAL',\n title: 'Unsafe Circuit BOM: LED without Current-Limiting Resistor',\n description: 'Hardware BOM includes LED without a 220Ω-1kΩ resistor, causing circuit overload.',\n remediationAdvice: 'Add a 220Ω current-limiting resistor to the hardware materials list.',\n });\n }\n }\n\n score = Math.max(0, Math.min(100, score));\n const passed = score >= 80 && !findings.some((f) => f.severity === 'CRITICAL');\n\n if (passed) {\n strengths.push('Deterministic structure, ID contracts, and schema invariants strictly verified.');\n }\n\n return {\n passed,\n structuralScore: score,\n findings,\n strengths,\n };\n }\n}\n","import type { LessonPlan, DiagnosticQuizInput, ActivityLab, SlideDeck, CodeLab } from '../schemas';\nimport type { ComprehensiveAcademicReport, AcademicAuditFinding } from './types';\nimport { DeterministicStructuralLinter } from './deterministicStructuralLinter';\nimport { auditCurriculumQualityFlow } from '../ai/flows/auditCurriculumQualityFlow';\nimport type { ModelResolutionOptions } from '../ai/provider-factory';\n\nexport interface AuditBundleInput {\n lesson: LessonPlan;\n quiz?: DiagnosticQuizInput;\n activity?: ActivityLab;\n slides?: SlideDeck;\n codeLab?: CodeLab;\n modelOptions?: ModelResolutionOptions;\n executeLLMJudge?: boolean;\n}\n\nexport class AcademicAuditor {\n /**\n * Evaluates a complete lesson bundle.\n * Step 1 (Deterministic): Fast structural, contract, schema, and safety linting.\n * Step 2 (Semantic LLM-as-a-Judge): Deep pedagogical, cognitive (Bloom), and misconception analysis with live frontier LLM.\n */\n public static async auditLessonBundle(input: AuditBundleInput): Promise<ComprehensiveAcademicReport> {\n const { lesson, quiz, activity, slides, codeLab, modelOptions, executeLLMJudge = true } = input;\n\n // 1. Run Deterministic Structural & Contract Linter\n const structuralResult = DeterministicStructuralLinter.lintBundle({\n lesson,\n quiz,\n activity,\n slides,\n codeLab,\n });\n\n const allFindings: AcademicAuditFinding[] = [...structuralResult.findings];\n const strengths: string[] = [...structuralResult.strengths];\n\n let semanticScore: number | null = null;\n let semanticVerdict: 'PASS' | 'NEEDS_REVISION' | 'FAIL' = 'PASS';\n\n // 2. Semantic Evaluation via LLM-as-a-Judge (If enabled with API model)\n if (executeLLMJudge) {\n try {\n const judgeReport = await auditCurriculumQualityFlow({\n targetArtifactType: 'LESSON_BUNDLE',\n lessonId: lesson.lessonId,\n expectedLanguage: lesson.language,\n targetObjectives: (lesson.learningObjectives || []).map((lo) => ({\n code: lo.code,\n description: lo.description,\n bloomLevel: lo.bloomLevel,\n })),\n generatedContentJson: JSON.stringify({ lesson, quiz, activity, slides, codeLab }),\n modelOptions,\n });\n\n semanticScore = judgeReport.totalScore;\n semanticVerdict = judgeReport.overallVerdict;\n\n for (const criterion of judgeReport.criteria) {\n if (!criterion.passed) {\n allFindings.push({\n id: `llm_judge_${criterion.name.toLowerCase().replace(/\\s+/g, '_')}`,\n dimension: 'CONSTRUCTIVE_ALIGNMENT',\n severity: criterion.score < 50 ? 'CRITICAL' : 'MAJOR',\n title: `LLM-as-Judge Finding: ${criterion.name}`,\n description: criterion.feedback,\n remediationAdvice: judgeReport.actionableRepairPrompts.join('; ') || 'Refine prompt context.',\n });\n } else {\n strengths.push(`[LLM-Judge] ${criterion.name}: ${criterion.feedback}`);\n }\n }\n } catch (err: any) {\n // LLM unavailable: fall back to heuristic — do not invent a fake score\n semanticScore = null;\n semanticVerdict = 'FAIL';\n allFindings.push({\n id: 'llm_judge_connection_error',\n dimension: 'CONSTRUCTIVE_ALIGNMENT',\n severity: 'MINOR',\n title: 'LLM-as-Judge Skipped / Fallback',\n description: `Semantic inference error: ${err.message || String(err)}`,\n remediationAdvice: 'Check API credentials for LLM-as-Judge.',\n });\n }\n }\n\n const criticalCount = allFindings.filter((f) => f.severity === 'CRITICAL').length;\n // When LLM judge succeeds: weighted(40% structural + 60% semantic).\n // When LLM judge fails/unavailable: use structural score only (no inflated default).\n const overallScore = executeLLMJudge && semanticScore !== null\n ? Math.round(structuralResult.structuralScore * 0.4 + semanticScore * 0.6)\n : structuralResult.structuralScore;\n\n const passed = structuralResult.passed && criticalCount === 0 && (executeLLMJudge ? semanticVerdict === 'PASS' : true);\n\n let verdict: ComprehensiveAcademicReport['verdict'] = 'REJECTED';\n if (overallScore >= 90 && criticalCount === 0) {\n verdict = 'EXEMPLARY';\n } else if (overallScore >= 75 && criticalCount === 0) {\n verdict = 'ACADEMICALLY_SOUND';\n } else if (overallScore >= 60) {\n verdict = 'NEEDS_PEDAGOGICAL_REFINEMENT';\n }\n\n const summary = passed\n ? `✅ Lesson Bundle \"${lesson.title}\" (${lesson.lessonId}) passes academic & structural verification with score ${overallScore}/100 (${verdict}).`\n : `⚠️ Lesson Bundle \"${lesson.title}\" requires revision (${overallScore}/100 - ${verdict}). Found ${allFindings.length} finding(s) with ${criticalCount} critical blocker(s).`;\n\n const actionablePromptGuidance = allFindings.map(\n (f, idx) => `[${f.dimension}] ${idx + 1}. ${f.title}: ${f.remediationAdvice}`\n );\n\n // Compute per-dimension scores from findings (not sharing overallScore)\n const computeDimScore = (dimFindings: AcademicAuditFinding[]): { score: number; passed: boolean } => {\n const hasCritical = dimFindings.some((f) => f.severity === 'CRITICAL');\n const majorCount = dimFindings.filter((f) => f.severity === 'MAJOR').length;\n const minorCount = dimFindings.filter((f) => f.severity === 'MINOR').length;\n // Base 100, deduct per finding severity\n let dimScore = 100 - (hasCritical ? 40 : 0) - (majorCount * 15) - (minorCount * 5);\n dimScore = Math.max(0, Math.min(100, dimScore));\n return { score: dimScore, passed: dimScore >= 75 && !hasCritical };\n };\n\n const dimFindings = {\n constructiveAlignment: allFindings.filter((f) => f.dimension === 'CONSTRUCTIVE_ALIGNMENT'),\n bloomProgression: allFindings.filter((f) => f.dimension === 'BLOOM_PROGRESSION'),\n fiveEFidelity: allFindings.filter((f) => f.dimension === '5E_INSTRUCTIONAL_FIDELITY'),\n misconceptionRigor: allFindings.filter((f) => f.dimension === 'MISCONCEPTION_RIGOR'),\n technicalAuthenticity: allFindings.filter((f) => f.dimension === 'TECHNICAL_AUTHENTICITY'),\n };\n const dimScores = Object.fromEntries(\n Object.entries(dimFindings).map(([k, v]) => [k, computeDimScore(v)])\n ) as Record<string, { score: number; passed: boolean }>;\n\n return {\n timestamp: new Date().toISOString(),\n targetId: lesson.lessonId,\n targetType: 'BUNDLE',\n overallScore,\n passed,\n verdict,\n summary,\n dimensionScores: {\n constructiveAlignment: {\n score: dimScores.constructiveAlignment.score,\n weight: 0.20,\n passed: dimScores.constructiveAlignment.passed,\n strengths: dimScores.constructiveAlignment.passed ? ['Constructive alignment verified.'] : [],\n findings: dimFindings.constructiveAlignment,\n },\n bloomProgression: {\n score: dimScores.bloomProgression.score,\n weight: 0.20,\n passed: dimScores.bloomProgression.passed,\n strengths: dimScores.bloomProgression.passed ? ['Bloom taxonomy progression verified.'] : [],\n findings: dimFindings.bloomProgression,\n },\n fiveEFidelity: {\n score: dimScores.fiveEFidelity.score,\n weight: 0.15,\n passed: dimScores.fiveEFidelity.passed,\n strengths: dimScores.fiveEFidelity.passed ? ['5E instructional fidelity verified.'] : [],\n findings: dimFindings.fiveEFidelity,\n },\n misconceptionRigor: {\n score: dimScores.misconceptionRigor.score,\n weight: 0.20,\n passed: dimScores.misconceptionRigor.passed,\n strengths: dimScores.misconceptionRigor.passed ? ['Misconception rigor verified.'] : [],\n findings: dimFindings.misconceptionRigor,\n },\n technicalAuthenticity: {\n score: dimScores.technicalAuthenticity.score,\n weight: 0.15,\n passed: dimScores.technicalAuthenticity.passed,\n strengths: dimScores.technicalAuthenticity.passed ? ['Technical authenticity verified.'] : [],\n findings: dimFindings.technicalAuthenticity,\n },\n crossArtifactZeroDrift: {\n score: structuralResult.structuralScore,\n weight: 0.10,\n passed: structuralResult.passed,\n strengths: structuralResult.passed ? ['Cross-artifact zero drift verified.'] : [],\n findings: allFindings.filter((f) => f.dimension === 'CROSS_ARTIFACT_ZERO_DRIFT'),\n },\n },\n criticalFindingsCount: criticalCount,\n allFindings,\n actionablePromptGuidance,\n };\n }\n}\n","import type { LessonPlan, DiagnosticQuiz, ActivityLab } from '../schemas';\nimport type { AcademicAuditFinding, DimensionScore } from './types';\n\nexport const BLOOM_ACTION_VERBS = {\n remember: [\n 'list', 'define', 'recall', 'state', 'name', 'identify', 'label', 'recognize',\n 'liệt kê', 'định nghĩa', 'gọi tên', 'nhận diện', 'chỉ ra', 'nhắc lại', 'ghi nhớ'\n ],\n understand: [\n 'explain', 'describe', 'summarize', 'classify', 'interpret', 'predict', 'trace', 'paraphrase',\n 'giải thích', 'mô tả', 'tóm tắt', 'phân loại', 'diễn giải', 'dự đoán', 'lần theo', 'hiểu'\n ],\n apply: [\n 'implement', 'execute', 'calculate', 'solve', 'construct', 'debug', 'modify', 'build',\n 'áp dụng', 'thực thi', 'tính toán', 'giải quyết', 'xây dựng', 'sửa lỗi', 'lắp đặt', 'viết mã', 'lập trình'\n ],\n analyze: [\n 'compare', 'contrast', 'decompose', 'differentiate', 'troubleshoot', 'diagnose', 'deconstruct',\n 'so sánh', 'đối chiếu', 'phân tích', 'phân rã', 'chẩn đoán', 'tìm nguyên nhân gốc', 'bóc tách'\n ],\n evaluate: [\n 'justify', 'critique', 'assess', 'defend', 'argue', 'benchmark', 'prioritize',\n 'đánh giá', 'biện minh', 'phê phán', 'thẩm định', 'bảo vệ quan điểm', 'lựa chọn tối ưu'\n ],\n create: [\n 'design', 'synthesize', 'architect', 'formulate', 'invent', 'devise', 'author',\n 'thiết kế', 'tổng hợp', 'sáng tạo', 'kiến trúc', 'phát minh', 'hoàn thiện đồ án'\n ],\n};\n\nconst RECALL_PATTERNS = [\n /^(?:chức năng chính của|định nghĩa của|cú pháp của|lệnh nào là|what is the definition of|which keyword|what does .* stand for)/i,\n /(?:là gì\\?|được gọi là gì\\?|có ý nghĩa gì\\?)/i,\n];\n\nexport class BloomTaxonomyEvaluator {\n /**\n * Audits a LessonPlan for Bloom taxonomy fidelity and cognitive scaffolding.\n */\n public static evaluateLesson(lesson: LessonPlan): DimensionScore {\n const findings: AcademicAuditFinding[] = [];\n const strengths: string[] = [];\n let score = 100;\n\n const los = lesson.learningObjectives || [];\n if (los.length === 0) {\n return {\n score: 0,\n weight: 0.20,\n passed: false,\n strengths: [],\n findings: [\n {\n id: 'bloom_missing_los',\n dimension: 'BLOOM_PROGRESSION',\n severity: 'CRITICAL',\n title: 'Missing Learning Objectives',\n description: 'The lesson plan contains zero declared Learning Objectives.',\n remediationAdvice: 'Add 2-4 clearly articulated LOs with Bloom levels and observable success criteria.',\n },\n ],\n };\n }\n\n // 1. Check LO Bloom verb alignment\n for (const lo of los) {\n const declaredLevel = (lo.bloomLevel || '').toLowerCase();\n const text = `${lo.name || ''} ${lo.description || ''} ${lo.successCriteria || ''}`.toLowerCase();\n\n // Check if text is just recall but marked Apply/Analyze\n const isRecallPattern = RECALL_PATTERNS.some((p) => p.test(text));\n if (isRecallPattern && (declaredLevel === 'apply' || declaredLevel === 'analyze' || declaredLevel === 'evaluate')) {\n score -= 15;\n findings.push({\n id: `bloom_inflation_${lo.code}`,\n dimension: 'BLOOM_PROGRESSION',\n severity: 'MAJOR',\n title: `Bloom Level Inflation in LO \"${lo.code}\"`,\n description: `LO is tagged as \"${lo.bloomLevel}\" but its phrasing reflects low-level Recall (\"${lo.description}\").`,\n remediationAdvice: `Rewrite the objective using authentic \"${declaredLevel}\" active verbs (e.g. build, debug, compare, diagnose) with an explicit application context.`,\n affectedElement: lo.code,\n });\n }\n\n // Check if success criteria is measurable\n if (!lo.successCriteria || lo.successCriteria.trim().length < 15) {\n score -= 10;\n findings.push({\n id: `bloom_unmeasurable_criteria_${lo.code}`,\n dimension: 'BLOOM_PROGRESSION',\n severity: 'MINOR',\n title: `Vague Success Criteria in LO \"${lo.code}\"`,\n description: `Success criteria \"${lo.successCriteria || ''}\" is too brief to provide objective student evidence.`,\n remediationAdvice: 'Specify concrete, observable evidence (e.g. \"LED blinks with 1s period without circuit shorting\").',\n affectedElement: lo.code,\n });\n } else {\n strengths.push(`LO \"${lo.code}\" defines concrete observable student evidence.`);\n }\n }\n\n // 2. Check 3-Tier Differentiation Progression\n const diff = lesson.differentiation;\n if (diff) {\n if (!diff.bronzeTier || !diff.silverTier || !diff.goldTier) {\n score -= 15;\n findings.push({\n id: 'bloom_incomplete_differentiation',\n dimension: 'BLOOM_PROGRESSION',\n severity: 'MAJOR',\n title: 'Incomplete 3-Tier Scaffolding',\n description: 'Differentiation must provide distinct Bronze (Foundation), Silver (Application), and Gold (Extension) challenges.',\n remediationAdvice: 'Define all 3 tiers with increasing cognitive demands (Remember/Understand -> Apply -> Analyze/Create).',\n });\n } else {\n strengths.push('Complete 3-tier scaffolding (Bronze -> Silver -> Gold) present in Lesson Plan.');\n }\n } else {\n score -= 20;\n findings.push({\n id: 'bloom_missing_differentiation',\n dimension: 'BLOOM_PROGRESSION',\n severity: 'CRITICAL',\n title: 'Missing Differentiation Scaffolding',\n description: 'Lesson plan lacks differentiation tiers.',\n remediationAdvice: 'Provide tiered practice instructions for varied learner paces.',\n });\n }\n\n score = Math.max(0, Math.min(100, score));\n return {\n score,\n weight: 0.20,\n passed: score >= 75 && !findings.some((f) => f.severity === 'CRITICAL'),\n strengths,\n findings,\n };\n }\n\n /**\n * Audits a Diagnostic Quiz for true cognitive depth matching declared Bloom levels.\n */\n public static evaluateQuiz(quiz: DiagnosticQuiz): DimensionScore {\n const findings: AcademicAuditFinding[] = [];\n const strengths: string[] = [];\n let score = 100;\n\n const questions = quiz.questions || [];\n if (questions.length < 3) {\n score -= 30;\n findings.push({\n id: 'bloom_quiz_too_short',\n dimension: 'BLOOM_PROGRESSION',\n severity: 'MAJOR',\n title: 'Insufficient Question Pool',\n description: `Quiz only contains ${questions.length} questions. Minimum diagnostic threshold is 3 questions.`,\n remediationAdvice: 'Generate at least 3-5 diagnostic questions covering foundational through analytical depth.',\n });\n }\n\n let understandCount = 0;\n let applyCount = 0;\n let analyzeCount = 0;\n\n for (let i = 0; i < questions.length; i++) {\n const q = questions[i];\n const qId = q.id || `Q${i + 1}`;\n const declaredBloom = (q.bloomLevel || '').toLowerCase();\n const stem = q.scenarioOrStem || '';\n\n if (declaredBloom === 'understand') understandCount++;\n if (declaredBloom === 'apply') applyCount++;\n if (declaredBloom === 'analyze' || declaredBloom === 'evaluate') analyzeCount++;\n\n // Check if question tagged as Apply/Analyze is actually just recall\n const isRecall = RECALL_PATTERNS.some((p) => p.test(stem));\n if (isRecall && (declaredBloom === 'apply' || declaredBloom === 'analyze')) {\n score -= 15;\n findings.push({\n id: `bloom_quiz_misclassification_${qId}`,\n dimension: 'BLOOM_PROGRESSION',\n severity: 'MAJOR',\n title: `Cognitive Level Misclassification in ${qId}`,\n description: `Question stem \"${stem.substring(0, 60)}...\" is pure Recall/Definition, but is tagged as \"${q.bloomLevel}\".`,\n remediationAdvice: 'Either re-tag as \"understand\" or transform the stem into an authentic problem-solving scenario requiring code debugging or design decision.',\n affectedElement: qId,\n });\n }\n\n // Check code snippet inclusion for Apply/Analyze questions\n if ((declaredBloom === 'apply' || declaredBloom === 'analyze') && !q.codeSnippet && !stem.includes('```') && !stem.includes('mạch')) {\n score -= 10;\n findings.push({\n id: `bloom_quiz_missing_code_context_${qId}`,\n dimension: 'BLOOM_PROGRESSION',\n severity: 'MINOR',\n title: `Missing Practical Context in High-Bloom Question ${qId}`,\n description: `Question ${qId} tagged as \"${q.bloomLevel}\" lacks concrete code or circuit context to evaluate hands-on execution.`,\n remediationAdvice: 'Include an annotated code snippet or circuit state for students to trace, debug, or evaluate.',\n affectedElement: qId,\n });\n }\n }\n\n if (questions.length > 0 && (understandCount > 0 || applyCount > 0)) {\n strengths.push(`Quiz features multi-level cognitive questions (Understand: ${understandCount}, Apply: ${applyCount}, Analyze: ${analyzeCount}).`);\n }\n\n score = Math.max(0, Math.min(100, score));\n return {\n score,\n weight: 0.20,\n passed: score >= 75 && !findings.some((f) => f.severity === 'CRITICAL'),\n strengths,\n findings,\n };\n }\n}\n","import type { LessonPlan, DiagnosticQuiz, ActivityLab, SlideDeck } from '../schemas';\nimport type { AcademicAuditFinding, DimensionScore } from './types';\n\nexport class CrossArtifactDriftEvaluator {\n /**\n * Audits consistency, metadata synchronization, and zero-drift across all artifacts in a lesson bundle.\n */\n public static evaluateBundle(\n lesson: LessonPlan,\n quiz?: DiagnosticQuiz,\n activity?: ActivityLab,\n slides?: SlideDeck\n ): DimensionScore {\n const findings: AcademicAuditFinding[] = [];\n const strengths: string[] = [];\n let score = 100;\n\n const baseLessonId = lesson.lessonId;\n const baseLanguage = lesson.language;\n\n // 1. Audit Lesson ID Synchronization\n if (quiz && quiz.quizId && quiz.quizId !== baseLessonId && !quiz.quizId.includes(baseLessonId)) {\n score -= 15;\n findings.push({\n id: 'drift_quiz_id_mismatch',\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'MAJOR',\n title: 'Quiz ID Mismatch with Master Lesson',\n description: `Quiz ID \"${quiz.quizId}\" diverges from master Lesson ID \"${baseLessonId}\".`,\n remediationAdvice: `Align Quiz ID to \"${baseLessonId}\".`,\n affectedElement: quiz.quizId,\n });\n }\n\n if (activity && activity.lessonId && activity.lessonId !== baseLessonId) {\n score -= 15;\n findings.push({\n id: 'drift_act_id_mismatch',\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'MAJOR',\n title: 'Activity Lesson ID Mismatch',\n description: `Activity lessonId \"${activity.lessonId}\" diverges from master Lesson ID \"${baseLessonId}\".`,\n remediationAdvice: `Align Activity lessonId to \"${baseLessonId}\".`,\n affectedElement: activity.lessonId,\n });\n }\n\n if (slides && slides.lessonId && slides.lessonId !== baseLessonId) {\n score -= 15;\n findings.push({\n id: 'drift_slides_id_mismatch',\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'MAJOR',\n title: 'Slide Deck Lesson ID Mismatch',\n description: `Slide deck lessonId \"${slides.lessonId}\" diverges from master Lesson ID \"${baseLessonId}\".`,\n remediationAdvice: `Align Slide deck lessonId to \"${baseLessonId}\".`,\n affectedElement: slides.lessonId,\n });\n }\n\n // 2. Audit Language Uniformity\n const satellites = [\n { type: 'QUIZ', lang: quiz?.language },\n { type: 'ACT', lang: activity?.language },\n { type: 'SLIDE', lang: slides?.language },\n ];\n\n for (const sat of satellites) {\n if (sat.lang && sat.lang.toLowerCase() !== baseLanguage.toLowerCase()) {\n score -= 25;\n findings.push({\n id: `drift_language_mismatch_${sat.type}`,\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'CRITICAL',\n title: `Language Contamination in ${sat.type}`,\n description: `Master Lesson is in \"${baseLanguage}\" but ${sat.type} is declared in \"${sat.lang}\".`,\n remediationAdvice: `Regenerate ${sat.type} strictly in \"${baseLanguage}\".`,\n });\n }\n }\n\n // 3. Audit Lesson Flow Duration Sum\n const sections = lesson.sections || [];\n const totalSectionMins = sections.reduce((sum, s) => sum + (s.durationMinutes || 0), 0);\n if (totalSectionMins > 0 && (totalSectionMins < 40 || totalSectionMins > 180)) {\n score -= 10;\n findings.push({\n id: 'drift_unrealistic_lesson_duration',\n dimension: 'CROSS_ARTIFACT_ZERO_DRIFT',\n severity: 'MINOR',\n title: `Unrealistic Lesson Flow Total Duration (${totalSectionMins} mins)`,\n description: `Sum of 5E section durations is ${totalSectionMins} minutes. Standard K-12/College lessons span 45-120 minutes.`,\n remediationAdvice: 'Adjust individual section timings so total duration matches standard classroom blocks (e.g. 60m or 90m).',\n });\n } else if (totalSectionMins > 0) {\n strengths.push(`Lesson section timings sum up to a realistic classroom block (${totalSectionMins} mins).`);\n }\n\n if (score >= 90) {\n strengths.push('Zero drift verified: IDs, language policies, and pedagogical contracts are strictly aligned across all artifacts.');\n }\n\n score = Math.max(0, Math.min(100, score));\n return {\n score,\n weight: 0.10,\n passed: score >= 75 && !findings.some((f) => f.severity === 'CRITICAL'),\n strengths,\n findings,\n };\n }\n}\n","import type { LessonPlan, DiagnosticQuiz, ActivityLab } from '../schemas';\nimport type { AcademicAuditFinding, DimensionScore } from './types';\n\nexport class ConstructiveAlignmentEvaluator {\n /**\n * Evaluates constructive alignment within a LessonPlan and across its satellite artifacts.\n */\n public static evaluateLesson(\n lesson: LessonPlan,\n quiz?: DiagnosticQuiz,\n activity?: ActivityLab\n ): DimensionScore {\n const findings: AcademicAuditFinding[] = [];\n const strengths: string[] = [];\n let score = 100;\n\n const los = lesson.learningObjectives || [];\n const sections = lesson.sections || [];\n const exitTicket = lesson.exitTicket;\n\n if (los.length === 0) {\n return {\n score: 0,\n weight: 0.20,\n passed: false,\n strengths: [],\n findings: [\n {\n id: 'align_no_los',\n dimension: 'CONSTRUCTIVE_ALIGNMENT',\n severity: 'CRITICAL',\n title: 'No Learning Objectives Defined',\n description: 'Constructive alignment cannot be established without baseline LOs.',\n remediationAdvice: 'Define at least 2 measurable Learning Objectives.',\n },\n ],\n };\n }\n\n // 1. Verify that the lesson sections deliver on the LO concepts\n const combinedSectionText = sections\n .map((s) => `${s.title} ${s.teacherActions} ${s.studentActions} ${(s.analogies || []).join(' ')}`)\n .join(' ')\n .toLowerCase();\n\n for (const lo of los) {\n const loKeywords = (lo.name || lo.description || '')\n .toLowerCase()\n .split(/\\s+/)\n .filter((w) => w.length > 4);\n\n const hasCoverage = loKeywords.some((k) => combinedSectionText.includes(k));\n if (!hasCoverage && loKeywords.length > 0) {\n score -= 15;\n findings.push({\n id: `align_uncovered_lo_${lo.code}`,\n dimension: 'CONSTRUCTIVE_ALIGNMENT',\n severity: 'MAJOR',\n title: `Untaught Objective in Lesson Flow: \"${lo.code}\"`,\n description: `The LO \"${lo.name || lo.code}\" is declared in the objectives table but receives minimal coverage in the 5E lesson sections.`,\n remediationAdvice: `Add explicit Teacher Moves and Student Actions in the Explore/Explain sections addressing \"${lo.name}\".`,\n affectedElement: lo.code,\n });\n }\n }\n\n // 2. Verify Exit Ticket alignment\n if (!exitTicket || !exitTicket.questionStem || exitTicket.questionStem.trim().length < 15) {\n score -= 15;\n findings.push({\n id: 'align_missing_exit_ticket',\n dimension: 'CONSTRUCTIVE_ALIGNMENT',\n severity: 'MAJOR',\n title: 'Missing or Shallow Exit Ticket',\n description: 'The lesson ends without a rigorous formative Exit Ticket to measure LO attainment before class dismissal.',\n remediationAdvice: 'Include an Exit Ticket question matching the primary LO + a metacognitive reflection prompt.',\n });\n } else {\n strengths.push('Formative Exit Ticket is properly anchored at the conclusion of the lesson.');\n }\n\n // 3. Cross-artifact alignment with Quiz (if provided)\n if (quiz) {\n const quizQuestions = quiz.questions || [];\n if (quizQuestions.length > 0) {\n // Check if quiz references concepts from lesson\n const quizText = quizQuestions.map((q) => `${q.scenarioOrStem} ${(q.options || []).map((o) => o.text).join(' ')}`).join(' ').toLowerCase();\n const lessonTopicKeywords = (lesson.topic || lesson.title || '').toLowerCase().split(/\\s+/).filter((w) => w.length > 3);\n const hasTopicMatch = lessonTopicKeywords.some((k) => quizText.includes(k));\n\n if (!hasTopicMatch && lessonTopicKeywords.length > 0) {\n score -= 20;\n findings.push({\n id: 'align_quiz_topic_divergence',\n dimension: 'CONSTRUCTIVE_ALIGNMENT',\n severity: 'CRITICAL',\n title: 'Quiz Topic Divergence from Lesson',\n description: `Quiz questions do not reflect the main topic \"${lesson.topic}\" of the master lesson.`,\n remediationAdvice: 'Re-align quiz questions strictly to the core concepts taught in the lesson.',\n });\n } else {\n strengths.push('Diagnostic Quiz questions tightly reflect the lesson topic and concepts.');\n }\n }\n }\n\n // 4. Cross-artifact alignment with Activity (if provided)\n if (activity) {\n const actObj = (activity.objective || '').toLowerCase();\n const lessonTitleLower = (lesson.title || '').toLowerCase();\n const hasActAlignment = los.some((lo) => actObj.includes((lo.name || '').toLowerCase()) || actObj.includes((lo.description || '').toLowerCase())) ||\n actObj.includes(lessonTitleLower) ||\n lessonTitleLower.split(/\\s+/).some((w) => w.length > 4 && actObj.includes(w));\n\n if (!hasActAlignment && activity.objective) {\n score -= 15;\n findings.push({\n id: 'align_act_objective_divergence',\n dimension: 'CONSTRUCTIVE_ALIGNMENT',\n severity: 'MAJOR',\n title: 'Activity Objective Disconnected from Lesson Plan',\n description: `Activity objective \"${activity.objective}\" does not directly support the lesson LOs.`,\n remediationAdvice: 'Ensure the Activity hands-on lab operationalizes the exact LOs specified in the Master Lesson.',\n });\n } else {\n strengths.push('Activity lab objective directly operationalizes master lesson learning goals.');\n }\n }\n\n score = Math.max(0, Math.min(100, score));\n return {\n score,\n weight: 0.20,\n passed: score >= 75 && !findings.some((f) => f.severity === 'CRITICAL'),\n strengths,\n findings,\n };\n }\n}\n","import type { LessonPlan } from '../schemas';\nimport type { AcademicAuditFinding, DimensionScore } from './types';\n\nconst FIVE_E_STAGES = [\n { key: 'engage', label: 'Engage (Khởi động / Móc neo)', regex: /(?:engage|khởi động|hook|mở đầu|anchor)/i },\n { key: 'explore', label: 'Explore (Khám phá / Trải nghiệm)', regex: /(?:explore|khám phá|trải nghiệm|thử nghiệm)/i },\n { key: 'explain', label: 'Explain (Giải thích / Hình thành kiến thức)', regex: /(?:explain|giải thích|khái niệm|kiến thức cốt lõi)/i },\n { key: 'elaborate', label: 'Elaborate (Vận dụng / Mở rộng)', regex: /(?:elaborate|vận dụng|luyện tập|thực hành|áp dụng)/i },\n { key: 'evaluate', label: 'Evaluate (Đánh giá / Tổng kết)', regex: /(?:evaluate|đánh giá|tổng kết|wrap-up|exit ticket)/i },\n];\n\nexport class FiveEInstructionalEvaluator {\n /**\n * Evaluates the pedagogical structure of a Lesson Plan against the 5E Inquiry Model.\n */\n public static evaluateLesson(lesson: LessonPlan): DimensionScore {\n const findings: AcademicAuditFinding[] = [];\n const strengths: string[] = [];\n let score = 100;\n\n // 1. Audit Hook Scenario & Open-Ended Inquiries\n if (!lesson.hookScenario || lesson.hookScenario.trim().length < 30) {\n score -= 20;\n findings.push({\n id: '5e_weak_hook',\n dimension: '5E_INSTRUCTIONAL_FIDELITY',\n severity: 'MAJOR',\n title: 'Shallow or Missing Real-World Hook',\n description: 'The lesson lacks a compelling, high-stakes real-world scenario to trigger inquiry.',\n remediationAdvice: 'Frame the lesson around an authentic engineering or domain problem (e.g. server crash, sensor failure, clinical anomaly).',\n });\n } else {\n strengths.push('Engaging real-world hook scenario sets high-stakes context for inquiry.');\n }\n\n if (!lesson.hookQuestions || lesson.hookQuestions.length < 2) {\n score -= 10;\n findings.push({\n id: '5e_insufficient_hook_questions',\n dimension: '5E_INSTRUCTIONAL_FIDELITY',\n severity: 'MINOR',\n title: 'Insufficient Inquiry Questions in Hook',\n description: 'Need at least 2 open-ended inquiry questions in the Engage phase to activate prior mental models.',\n remediationAdvice: 'Add 2-3 provocative questions challenging common student assumptions.',\n });\n }\n\n // 2. Audit 5E Stage Coverage in Sections\n const sections = lesson.sections || [];\n const coveredStages = new Set<string>();\n\n for (const section of sections) {\n for (const stage of FIVE_E_STAGES) {\n if (stage.regex.test(section.title)) {\n coveredStages.add(stage.key);\n }\n }\n }\n\n // Also check if Hook and ExitTicket cover Engage & Evaluate\n if (lesson.hookScenario) coveredStages.add('engage');\n if (lesson.exitTicket) coveredStages.add('evaluate');\n\n const missingStages = FIVE_E_STAGES.filter((s) => !coveredStages.has(s.key));\n if (missingStages.length > 0) {\n score -= missingStages.length * 10;\n findings.push({\n id: '5e_missing_phases',\n dimension: '5E_INSTRUCTIONAL_FIDELITY',\n severity: missingStages.length > 2 ? 'CRITICAL' : 'MAJOR',\n title: `Incomplete 5E Instructional Cycle (Missing ${missingStages.length} phase(s))`,\n description: `Lesson plan does not clearly demarcate: ${missingStages.map((s) => s.label).join(', ')}.`,\n remediationAdvice: 'Ensure the lesson explicitly walks through Engage -> Explore -> Explain -> Elaborate -> Evaluate.',\n });\n } else {\n strengths.push('Full 5E Instructional Cycle (Engage, Explore, Explain, Elaborate, Evaluate) is completely covered.');\n }\n\n // 3. Audit Active Learning: Teacher Moves vs Student Actions\n let passiveSections = 0;\n for (let i = 0; i < sections.length; i++) {\n const s = sections[i];\n const studentAct = (s.studentActions || '').trim().toLowerCase();\n\n // Check if student actions are merely passive (listening / sitting)\n if (studentAct.includes('nghe giảng') || studentAct.includes('chép bài') || studentAct.includes('listen passively') || studentAct.length < 10) {\n passiveSections++;\n }\n }\n\n if (passiveSections > 0 && sections.length > 0) {\n score -= passiveSections * 8;\n findings.push({\n id: '5e_passive_student_roles',\n dimension: '5E_INSTRUCTIONAL_FIDELITY',\n severity: 'MAJOR',\n title: 'Passive Student Roles Detected in Lesson Sections',\n description: `${passiveSections} section(s) assign passive roles (listening/copying) to students rather than active inquiry, pair-discussion, or hands-on experimentation.`,\n remediationAdvice: 'Transform student actions into active tasks (e.g. Think-Pair-Share, code tracing, hypothesis testing, live bug hunting).',\n });\n } else if (sections.length > 0) {\n strengths.push('Student roles emphasize active learning and hands-on participation throughout.');\n }\n\n score = Math.max(0, Math.min(100, score));\n return {\n score,\n weight: 0.15,\n passed: score >= 75 && !findings.some((f) => f.severity === 'CRITICAL'),\n strengths,\n findings,\n };\n }\n}\n","import type { LessonPlan, CodeLab, ActivityLab } from '../schemas';\nimport type { AcademicAuditFinding, DimensionScore } from './types';\n\nconst VALID_MERMAID_STARTERS = [\n 'graph', 'flowchart', 'sequencediagram', 'statediagram', 'classdiagram', 'erdiagram', 'gantt', 'gitgraph'\n];\n\nexport class CodeHardwareFeasibilityEvaluator {\n /**\n * Audits technical accuracy, code syntax sanity, and hardware circuit safety.\n */\n public static evaluateTechnicalFeasibility(\n lesson?: LessonPlan,\n codeLab?: CodeLab,\n activity?: ActivityLab\n ): DimensionScore {\n const findings: AcademicAuditFinding[] = [];\n const strengths: string[] = [];\n let score = 100;\n\n // 1. Audit Guided Practice Code in Lesson\n if (lesson?.guidedPractice) {\n const { codeSnippet, codeLanguage, mermaidDiagram } = lesson.guidedPractice;\n\n if (!codeSnippet || codeSnippet.trim().length < 15) {\n score -= 20;\n findings.push({\n id: 'tech_empty_guided_code',\n dimension: 'TECHNICAL_AUTHENTICITY',\n severity: 'MAJOR',\n title: 'Empty or Trivial Guided Practice Code',\n description: 'Guided practice lacks runnable code snippet or domain calculation template.',\n remediationAdvice: 'Provide a complete, runnable code example with explanatory line-by-line comments.',\n });\n } else {\n // Embedded / Arduino specific checks\n if (codeLanguage?.toLowerCase() === 'arduino' || codeLanguage?.toLowerCase() === 'cpp' || codeSnippet.includes('pinMode')) {\n if (codeSnippet.includes('digitalWrite') && !codeSnippet.includes('pinMode') && !codeSnippet.includes('setup()')) {\n score -= 15;\n findings.push({\n id: 'tech_arduino_missing_pinmode',\n dimension: 'TECHNICAL_AUTHENTICITY',\n severity: 'MAJOR',\n title: 'Missing pinMode() Configuration in Arduino Code',\n description: 'Code calls `digitalWrite()` without initializing the pin with `pinMode(pin, OUTPUT)`.',\n remediationAdvice: 'Ensure `setup()` configures pin direction before writing digital states.',\n });\n }\n\n if (codeSnippet.includes('delay(0)') || codeSnippet.includes('delay(-')) {\n score -= 15;\n findings.push({\n id: 'tech_arduino_invalid_delay',\n dimension: 'TECHNICAL_AUTHENTICITY',\n severity: 'MAJOR',\n title: 'Invalid delay() Parameter',\n description: 'delay() duration must be a positive integer in milliseconds.',\n remediationAdvice: 'Use realistic delay timings (e.g. 500ms, 1000ms).',\n });\n }\n }\n strengths.push('Guided practice features runnable code snippet with clear syntax.');\n }\n\n // Check Mermaid diagram syntax\n if (mermaidDiagram) {\n const cleanDiagram = mermaidDiagram.trim().toLowerCase();\n const isValidStarter = VALID_MERMAID_STARTERS.some((starter) => cleanDiagram.startsWith(starter));\n if (!isValidStarter) {\n score -= 15;\n findings.push({\n id: 'tech_invalid_mermaid_syntax',\n dimension: 'TECHNICAL_AUTHENTICITY',\n severity: 'MAJOR',\n title: 'Invalid Mermaid Diagram Syntax',\n description: `Mermaid diagram does not start with a valid declaration (e.g. \"flowchart TD\", \"graph TD\", \"sequenceDiagram\"). Got: \"${mermaidDiagram.substring(0, 30)}...\"`,\n remediationAdvice: 'Format Mermaid diagrams starting with `flowchart TD` or `sequenceDiagram`.',\n });\n } else {\n strengths.push('Valid Mermaid architectural diagram included.');\n }\n }\n }\n\n // 2. Audit CodeLab (if present)\n if (codeLab) {\n const starter = codeLab.starterCode?.content || '';\n const solution = codeLab.solutionCode?.content || '';\n\n if (starter.length < 20 || solution.length < 20) {\n score -= 25;\n findings.push({\n id: 'tech_codelab_incomplete_codes',\n dimension: 'TECHNICAL_AUTHENTICITY',\n severity: 'CRITICAL',\n title: 'Incomplete CodeLab Starter / Solution Code',\n description: 'CodeLab must provide both scaffolding starter code and complete reference solution code.',\n remediationAdvice: 'Populate `starterCode` with TODO markers and `solutionCode` with tested implementation.',\n });\n } else {\n strengths.push('CodeLab provides complete starter skeleton and working solution code.');\n }\n\n if (!codeLab.testCases || codeLab.testCases.length === 0) {\n score -= 15;\n findings.push({\n id: 'tech_codelab_missing_testcases',\n dimension: 'TECHNICAL_AUTHENTICITY',\n severity: 'MAJOR',\n title: 'Missing Automated Verification Test Cases',\n description: 'CodeLab lacks test cases for students to self-verify their implementations.',\n remediationAdvice: 'Add at least 2 concrete test cases with input and expected output assertions.',\n });\n }\n }\n\n // 3. Audit Hardware BOM Safety in Activity (if hardware is involved)\n if (activity?.materialsBOM?.hardware && activity.materialsBOM.hardware.length > 0) {\n const hwText = activity.materialsBOM.hardware.join(' ').toLowerCase();\n const hasLED = hwText.includes('led');\n const hasResistor = hwText.includes('điện trở') || hwText.includes('resistor') || hwText.includes('220') || hwText.includes('330') || hwText.includes('1k');\n\n if (hasLED && !hasResistor) {\n score -= 20;\n findings.push({\n id: 'tech_hardware_unsafe_led_no_resistor',\n dimension: 'TECHNICAL_AUTHENTICITY',\n severity: 'CRITICAL',\n title: 'Dangerous Hardware Circuit: LED without Current-Limiting Resistor',\n description: 'Activity specifies an LED on breadboard/microcontroller without a 220Ω-1kΩ current-limiting resistor, which causes electrical overload and burnout.',\n remediationAdvice: 'Add a 220Ω or 330Ω current-limiting resistor to the hardware BOM.',\n });\n } else if (hasLED && hasResistor) {\n strengths.push('Hardware BOM safely pairs LED with current-limiting resistor protection.');\n }\n }\n\n score = Math.max(0, Math.min(100, score));\n return {\n score,\n weight: 0.15,\n passed: score >= 75 && !findings.some((f) => f.severity === 'CRITICAL'),\n strengths,\n findings,\n };\n }\n}\n","import type { DiagnosticQuiz } from '../schemas';\nimport type { AcademicAuditFinding, DimensionScore } from './types';\n\nconst LAZY_DISTRACTOR_PATTERNS = [\n /^(?:tất cả các đáp án trên đều (?:đúng|sai)|cả a,?\\s*b,?\\s*c đều (?:đúng|sai)|all of the above|none of the above)[\\.\\?!]?$/i,\n /^(?:không có đáp án nào đúng|không có chức năng|không làm gì cả|không ảnh hưởng)[\\.\\?!]?$/i,\n /^(?:đáp án khác|other)[\\.\\?!]?$/i,\n];\n\nexport class MisconceptionEvaluator {\n /**\n * Audits the psychometric and pedagogical rigor of diagnostic questions and their distractors.\n */\n public static evaluateQuiz(quiz: DiagnosticQuiz): DimensionScore {\n const findings: AcademicAuditFinding[] = [];\n const strengths: string[] = [];\n let score = 100;\n\n const questions = quiz.questions || [];\n if (questions.length === 0) {\n return {\n score: 0,\n weight: 0.20,\n passed: false,\n strengths: [],\n findings: [\n {\n id: 'misconception_no_questions',\n dimension: 'MISCONCEPTION_RIGOR',\n severity: 'CRITICAL',\n title: 'Empty Question Bank',\n description: 'No questions provided in quiz artifact.',\n remediationAdvice: 'Generate diagnostic questions with deliberate misconception traps.',\n },\n ],\n };\n }\n\n let validDistractorCount = 0;\n let questionsWithFullExplanations = 0;\n\n for (let i = 0; i < questions.length; i++) {\n const q = questions[i];\n const qId = q.id || `Q${i + 1}`;\n const options = q.options || [];\n\n // 1. Check option count (Must have standard 4 options A, B, C, D)\n if (options.length < 4) {\n score -= 15;\n findings.push({\n id: `misconception_few_options_${qId}`,\n dimension: 'MISCONCEPTION_RIGOR',\n severity: 'MAJOR',\n title: `Insufficient Distractors in ${qId}`,\n description: `Question ${qId} has only ${options.length} options. Standard diagnostic rigor requires 4 plausible choices (1 key + 3 diagnostic distractors).`,\n remediationAdvice: 'Provide 4 full options (A, B, C, D) representing distinct cognitive states.',\n affectedElement: qId,\n });\n }\n\n // 2. Check exactly ONE correct answer\n const correctCount = options.filter((o) => o.isCorrect).length;\n if (correctCount !== 1) {\n score -= 25;\n findings.push({\n id: `misconception_invalid_correct_count_${qId}`,\n dimension: 'MISCONCEPTION_RIGOR',\n severity: 'CRITICAL',\n title: `Key Assignment Error in ${qId}`,\n description: `Question ${qId} has ${correctCount} correct options (must have exactly 1 true answer).`,\n remediationAdvice: 'Set `isCorrect: true` on exactly one option and `isCorrect: false` on all distractors.',\n affectedElement: qId,\n });\n }\n\n // 3. Audit Distractor Quality & Explanation Depth\n let missingExplanation = false;\n let hasLazyDistractor = false;\n\n for (const opt of options) {\n const text = (opt.text || '').trim();\n const explanation = (opt.explanation || '').trim();\n\n // Check for lazy/trivial distractors\n if (LAZY_DISTRACTOR_PATTERNS.some((p) => p.test(text))) {\n hasLazyDistractor = true;\n score -= 10;\n findings.push({\n id: `misconception_lazy_distractor_${qId}_${opt.id}`,\n dimension: 'MISCONCEPTION_RIGOR',\n severity: 'MAJOR',\n title: `Low-Utility Distractor in ${qId} (${opt.id})`,\n description: `Option \"${text}\" is a generic/throwaway distractor (\"All/None of the above\" or \"No effect\") that does not diagnose student cognitive models.`,\n remediationAdvice: 'Replace with an authentic student misconception (e.g. inverted logic, missing pullup, off-by-one boundary, unit confusion).',\n affectedElement: `${qId}.${opt.id}`,\n });\n }\n\n // Check if explanation exists and explains WHY it is right or WHY it is a trap\n if (!explanation || explanation.length < 20) {\n missingExplanation = true;\n } else {\n validDistractorCount++;\n }\n }\n\n if (missingExplanation) {\n score -= 10;\n findings.push({\n id: `misconception_shallow_explanation_${qId}`,\n dimension: 'MISCONCEPTION_RIGOR',\n severity: 'MAJOR',\n title: `Shallow Distractor Explanations in ${qId}`,\n description: `Question ${qId} lacks detailed pedagogical explanations for all options. Students and teachers cannot diagnose root causes without option-level rationale.`,\n remediationAdvice: 'For EVERY option (A, B, C, D), explicitly write why the choice is correct or what mental misconception it represents.',\n affectedElement: qId,\n });\n } else {\n questionsWithFullExplanations++;\n }\n }\n\n if (questionsWithFullExplanations === questions.length && questions.length >= 3) {\n strengths.push('All quiz questions feature rigorous 4-option breakdown with comprehensive misconception analysis.');\n }\n\n score = Math.max(0, Math.min(100, score));\n return {\n score,\n weight: 0.20,\n passed: score >= 75 && !findings.some((f) => f.severity === 'CRITICAL'),\n strengths,\n findings,\n };\n }\n}\n","/**\n * Media Types — image generation, image search, video search cho học liệu.\n * Mục tiêu: mọi artifact instruction step-by-step / slide đều có minh họa phù hợp,\n * sinh bằng AI (Gemini/GPT image) HOẶC tìm kiếm ảnh/video thật có license phù hợp.\n */\n\nexport type MediaProvider = 'openai' | 'gemini';\n/** Default = 'openai' (gpt-image-1): infographic quality preferred. */\n\nexport interface GeneratedImage {\n /** Base64-encoded image data (không kèm prefix data:) */\n base64: string;\n mimeType: string;\n /** Provider dùng để sinh (audit/debug) */\n provider: string;\n /** Prompt đã được dùng (sau khi enrich theo ngữ cảnh) */\n prompt: string;\n revisedPrompt?: string;\n}\n\nexport interface StockImage {\n url: string;\n thumbnailUrl?: string;\n width?: number;\n height?: number;\n photographer?: string;\n source: string;\n license: string;\n pageUrl?: string;\n altText?: string;\n}\n\nexport interface StockVideo {\n url: string;\n thumbnailUrl?: string;\n durationSeconds?: number;\n width?: number;\n height?: number;\n source: string;\n license: string;\n pageUrl?: string;\n}\n\nexport interface GenerateImageOptions {\n /** Mô tả minh họa cần sinh */\n prompt: string;\n /** Ngữ cảnh bài học để enrich prompt (concept, grade band, style guide excerpt) */\n context?: {\n lessonTitle?: string;\n concept?: string;\n gradeBand?: [number, number] | number;\n pedagogy?: string;\n styleGuideExcerpt?: string;\n language?: string;\n };\n /** Tỷ lệ khung: 16:9 cho slide, 4:3/1:1 cho worksheet */\n aspectRatio?: '1:1' | '16:9' | '4:3' | '3:4';\n /** Phong cách hình: phù hợp giáo dục, rõ ràng, an toàn cho học sinh */\n style?: 'educational-diagram' | 'realistic-photo' | 'flat-illustration' | 'technical-schematic';\n provider?: MediaProvider;\n /** API key override (nếu không dùng env) */\n apiKey?: string;\n}\n\nexport interface SearchImageOptions {\n query: string;\n perPage?: number;\n orientation?: 'landscape' | 'portrait' | 'square';\n apiKey?: string;\n}\n\nexport interface SearchVideoOptions {\n query: string;\n perPage?: number;\n apiKey?: string;\n}\n\nexport class MediaError extends Error {\n constructor(message: string, public readonly provider?: string, public readonly status?: number) {\n super(message);\n this.name = 'MediaError';\n }\n}\n\n/** Enrich prompt gốc với ngữ cảnh sư phạm → prompt sinh ảnh chất lượng, nhất quán phong cách */\nexport function buildImagePrompt(options: GenerateImageOptions): string {\n const { prompt, context, style = 'educational-diagram' } = options;\n const parts: string[] = [];\n const styleMap: Record<string, string> = {\n 'educational-diagram': 'clean educational diagram, labeled parts, high contrast, suitable for K-12 textbook',\n 'realistic-photo': 'realistic photograph, natural lighting, educational context',\n 'flat-illustration': 'flat vector illustration, friendly shapes, modern educational style',\n 'technical-schematic': 'precise technical schematic, wiring-style clarity, engineering drawing conventions',\n };\n parts.push(prompt);\n if (context?.concept) parts.push(`Subject concept: ${context.concept}`);\n if (context?.lessonTitle) parts.push(`From lesson: ${context.lessonTitle}`);\n if (context?.gradeBand) {\n const band = Array.isArray(context.gradeBand) ? context.gradeBand : [context.gradeBand, context.gradeBand];\n parts.push(`Audience: grade ${band[0]}-${band[1]} students, age-appropriate, no scary or unsafe imagery`);\n }\n if (context?.styleGuideExcerpt) parts.push(`Visual style guide: ${context.styleGuideExcerpt.slice(0, 200)}`);\n parts.push(styleMap[style] || styleMap['educational-diagram']);\n if (options.aspectRatio === '16:9') parts.push('wide 16:9 composition');\n return parts.join('. ');\n}","import { GeneratedImage, MediaError, GenerateImageOptions, buildImagePrompt } from './types';\n\n/**\n * Image Generation Providers\n * — gemini: Gemini 2.x image generation (generateContent với responseModalities IMAGE)\n * — openai: gpt-image-1 (images/generations endpoint, b64_json)\n * Cả hai trả về GeneratedImage chuẩn — caller không cần biết provider nào.\n */\n\nfunction resolveApiKey(options: GenerateImageOptions): { provider: string; key: string } {\n const provider = options.provider || 'openai';\n const key = options.apiKey\n || (provider === 'openai' ? process.env.OPENAI_API_KEY : undefined)\n || (provider === 'gemini' ? (process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY) : undefined)\n || '';\n if (!key) {\n throw new MediaError(`API key missing for image provider '${provider}'. Set GEMINI_API_KEY or OPENAI_API_KEY.`, provider);\n }\n return { provider, key };\n}\n\nasync function generateWithGemini(options: GenerateImageOptions, key: string): Promise<GeneratedImage> {\n const finalPrompt = buildImagePrompt(options);\n const model = 'gemini-2.0-flash-exp'; // image generation capable\n const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${key}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n contents: [{ parts: [{ text: finalPrompt }] }],\n generationConfig: { responseModalities: ['TEXT', 'IMAGE'] },\n }),\n signal: AbortSignal.timeout(90_000),\n });\n if (!res.ok) {\n const body = await res.text().catch(() => '');\n throw new MediaError(`Gemini image API ${res.status}: ${body.slice(0, 300)}`, 'gemini', res.status);\n }\n const data: any = await res.json();\n const parts = data?.candidates?.[0]?.content?.parts || [];\n const imagePart = parts.find((p: any) => p.inlineData?.data);\n if (!imagePart) {\n throw new MediaError('Gemini returned no image part (may have refused prompt).', 'gemini');\n }\n const textPart = parts.find((p: any) => p.text);\n return {\n base64: imagePart.inlineData.data,\n mimeType: imagePart.inlineData.mimeType || 'image/png',\n provider: 'gemini',\n prompt: finalPrompt,\n revisedPrompt: textPart?.text,\n };\n}\n\nasync function generateWithOpenAI(options: GenerateImageOptions, key: string): Promise<GeneratedImage> {\n const finalPrompt = buildImagePrompt(options);\n const sizeMap: Record<string, string> = { '1:1': '1024x1024', '16:9': '1536x1024', '4:3': '1024x1024', '3:4': '1024x1536' };\n const res = await fetch('https://api.openai.com/v1/images/generations', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${key}` },\n body: JSON.stringify({\n model: 'gpt-image-1',\n prompt: finalPrompt,\n size: sizeMap[options.aspectRatio || '1:1'] || '1024x1024',\n n: 1,\n }),\n signal: AbortSignal.timeout(90_000),\n });\n if (!res.ok) {\n const body = await res.text().catch(() => '');\n throw new MediaError(`OpenAI image API ${res.status}: ${body.slice(0, 300)}`, 'openai', res.status);\n }\n const data: any = await res.json();\n const item = data?.data?.[0];\n if (!item?.b64_json) {\n throw new MediaError('OpenAI returned no image data.', 'openai');\n }\n return {\n base64: item.b64_json,\n mimeType: 'image/png',\n provider: 'openai',\n prompt: finalPrompt,\n revisedPrompt: item.revised_prompt,\n };\n}\n\n/**\n * Sinh ảnh minh họa cho học liệu. Provider mặc định: gemini.\n * Prompt tự động enrich với ngữ cảnh sư phạm (grade band, style guide, khái niệm bài học).\n */\nexport async function generateEducationalImage(options: GenerateImageOptions): Promise<GeneratedImage> {\n const { provider, key } = resolveApiKey(options);\n if (provider === 'openai') return generateWithOpenAI(options, key);\n return generateWithGemini(options, key);\n}","import { MediaError, SearchImageOptions, SearchVideoOptions, StockImage, StockVideo } from './types';\n\n/**\n * Stock Media Search — tìm ảnh/video minh họa THẬT có license mở (Pexels).\n * Dùng khi: không cần sinh AI, muốn ảnh thật của phần cứng (ESP32, breadboard…),\n * hoặc muốn video demo quá trình thực tế cho step-by-step instructions.\n * API key: PEXELS_API_KEY (miễn phí tại pexels.com/api).\n */\n\nexport async function searchEducationalImages(options: SearchImageOptions): Promise<StockImage[]> {\n const key = options.apiKey || process.env.PEXELS_API_KEY || '';\n if (!key) throw new MediaError('Pexels API key missing. Set PEXELS_API_KEY.', 'pexels');\n const params = new URLSearchParams({\n query: options.query,\n per_page: String(options.perPage ?? 6),\n orientation: options.orientation || 'landscape',\n });\n const res = await fetch(`https://api.pexels.com/v1/search?${params}`, {\n headers: { Authorization: key },\n signal: AbortSignal.timeout(30_000),\n });\n if (!res.ok) {\n throw new MediaError(`Pexels image search ${res.status}`, 'pexels', res.status);\n }\n const data: any = await res.json();\n return (data?.photos || []).map((p: any) => ({\n url: p.src?.large2x || p.src?.large || p.src?.original,\n thumbnailUrl: p.src?.medium,\n width: p.width,\n height: p.height,\n photographer: p.photographer,\n source: 'pexels',\n license: 'Pexels License (free to use, attribution appreciated)',\n pageUrl: p.url,\n altText: p.alt,\n }));\n}\n\nexport async function searchEducationalVideos(options: SearchVideoOptions): Promise<StockVideo[]> {\n const key = options.apiKey || process.env.PEXELS_API_KEY || '';\n if (!key) throw new MediaError('Pexels API key missing. Set PEXELS_API_KEY.', 'pexels');\n const params = new URLSearchParams({\n query: options.query,\n per_page: String(options.perPage ?? 4),\n orientation: 'landscape',\n });\n const res = await fetch(`https://api.pexels.com/videos/search?${params}`, {\n headers: { Authorization: key },\n signal: AbortSignal.timeout(30_000),\n });\n if (!res.ok) {\n throw new MediaError(`Pexels video search ${res.status}`, 'pexels', res.status);\n }\n const data: any = await res.json();\n return (data?.videos || []).map((v: any) => {\n const files = v.video_files || [];\n const best = files.filter((f: any) => f.quality === 'hd').sort((a: any, b: any) => (a.width || 0) - (b.width || 0))[0] || files[0];\n return {\n url: best?.link,\n thumbnailUrl: v.image,\n durationSeconds: v.duration,\n width: best?.width,\n height: best?.height,\n source: 'pexels',\n license: 'Pexels License (free to use, attribution appreciated)',\n pageUrl: v.url,\n };\n });\n}","import fs from 'fs';\nimport path from 'path';\n\n/**\n * Media Ledger — sổ cái ảnh per-lesson (JSONL), nguồn chân lý cho quy hoạch ảnh.\n * Vòng đời entry: pending → approved (Curator chốt) → done | failed (kèm lastError)\n * Agent tạo artifact chỉ APPEND (pending). Curator quyết định. Orchestrator thực thi.\n * Idempotent: 1 slug chỉ có 1 entry active; append cùng slug → cập nhật, không trùng.\n */\n\nexport type MediaLedgerMode = 'generate' | 'search';\nexport type MediaLedgerStatus = 'pending' | 'approved' | 'rejected' | 'done' | 'failed';\n\nexport interface MediaLedgerEntry {\n /** Định danh ảnh trong bài, vd 'img-loop-diagram' — unique per lesson */\n slug: string;\n /** Artifact chứa slot, vd 'LESSON_U01_M01_L01' */\n artifactId: string;\n /** Tên ảnh (human-readable) */\n name: string;\n /** Mô tả chi tiết nội dung ảnh — input chính cho Curator enrich + agent con */\n description: string;\n /** 'generate' (AI) hoặc 'search' (ảnh/video thật) */\n mode: MediaLedgerMode;\n /** Vị trí chèn: markdown heading/anchor gần nhất trong artifact */\n anchor?: string;\n status: MediaLedgerStatus;\n /** Provider đã dùng (set khi done) */\n provider?: string;\n /** Path tương đối trong project sau khi done: _media/xxx.png */\n relPath?: string;\n /** Prompt cuối (đã enrich) — audit/debug */\n finalPrompt?: string;\n lastError?: string;\n retryCount?: number;\n /** Quyết định của Curator: mã lý do (duplicate/content_mismatch/...) — audit + user override */\n decisionReasonCode?: string;\n decisionReason?: string;\n updatedAt: string;\n}\n\nexport class MediaLedger {\n readonly filePath: string;\n private entries: Map<string, MediaLedgerEntry> = new Map();\n\n constructor(projectDir: string, lessonId: string) {\n this.filePath = path.join(projectDir, '_media', `ledger-${lessonId.toUpperCase()}.jsonl`);\n this.load();\n }\n\n private load(): void {\n this.entries.clear();\n if (!fs.existsSync(this.filePath)) return;\n const lines = fs.readFileSync(this.filePath, 'utf-8').split('\\n');\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const e = JSON.parse(trimmed) as MediaLedgerEntry;\n this.entries.set(e.slug, e); // last-wins\n } catch { /* dòng hỏng — bỏ qua nhưng không giấu: giữ file nguyên */ }\n }\n }\n\n private persist(): void {\n fs.mkdirSync(path.dirname(this.filePath), { recursive: true });\n fs.writeFileSync(this.filePath, Array.from(this.entries.values()).map(e => JSON.stringify(e)).join('\\n') + '\\n', 'utf-8');\n }\n\n /** Agent tạo artifact ghi entry mới (hoặc cập nhật nếu slug đã có và chưa done) */\n upsert(input: Omit<MediaLedgerEntry, 'status' | 'updatedAt'> & { status?: MediaLedgerStatus }): MediaLedgerEntry {\n const existing = this.entries.get(input.slug);\n if (existing && (existing.status === 'done')) return existing; // done là bất biến\n const entry: MediaLedgerEntry = { ...input, status: input.status ?? 'pending', updatedAt: new Date().toISOString() };\n this.entries.set(input.slug, entry);\n this.persist();\n return entry;\n }\n\n get(slug: string): MediaLedgerEntry | undefined { return this.entries.get(slug); }\n list(): MediaLedgerEntry[] { return Array.from(this.entries.values()); }\n listByStatus(status: MediaLedgerStatus): MediaLedgerEntry[] { return this.list().filter(e => e.status === status); }\n pending(): MediaLedgerEntry[] { return this.listByStatus('pending'); }\n\n setStatus(slug: string, status: MediaLedgerStatus, patch: Partial<MediaLedgerEntry> = {}): MediaLedgerEntry | undefined {\n const e = this.entries.get(slug);\n if (!e) return undefined;\n Object.assign(e, patch, { status, updatedAt: new Date().toISOString() });\n if (status === 'failed') e.retryCount = (e.retryCount ?? 0) + 1;\n this.entries.set(slug, e);\n this.persist();\n return e;\n }\n\n /** Đếm ảnh đã done trong lesson — để Curator tôn trọng maxImages */\n doneCount(): number { return this.listByStatus('done').length; }\n}","import { runCurriculumAIInference, type StreamRunnerOptions } from '../ai/streamRunner';\nimport type { MediaLedger, MediaLedgerEntry } from './ledger';\nimport { MediaError } from './types';\n\nexport type MediaPolicyMode = 'search_only' | 'gen_only' | 'auto';\n\nexport interface MediaPolicy {\n /** Giới hạn số ảnh ĐƯỢC GEN (AI) tối đa per artifact — search kho ảnh KHÔNG tốn quota */\n maxGenImagesPerArtifact: number;\n /** Ưu tiên provider khi mode=generate */\n preferredProvider?: 'openai' | 'gemini';\n /**\n * Chiến lược nguồn ảnh:\n * — search_only: chỉ tìm kho ảnh (Pexels), không sinh AI\n * — gen_only: chỉ sinh AI, bỏ qua kho ảnh\n * — auto: LUÔN search trước, không có kết quả mới generate (mặc định)\n */\n mode?: MediaPolicyMode;\n}\n\nexport interface CurationDecision {\n slug: string;\n action: 'approve' | 'drop' | 're-describe';\n /** Mã lý do máy-đọc-được — bắt buộc khi drop, để audit + user có thể override */\n reasonCode?: 'duplicate' | 'content_mismatch' | 'low_quality_description' | 'over_quota' | 'none_needed';\n /** Mô tả đã enrich (grade band, style, pedagogy) — chỉ khi approve/re-describe */\n enrichedPrompt?: string;\n reason: string;\n}\n\nexport interface CurateOptions {\n ledger: MediaLedger;\n /** Nội dung artifact ĐÃ PASS judge (markdown, strip YAML) */\n artifactContent: string;\n policy: MediaPolicy;\n /** Ngữ cảnh dự án: grade band, style guide, tiêu đề bài */\n context: {\n lessonTitle?: string;\n gradeBand?: [number, number];\n styleGuideExcerpt?: string;\n language?: string;\n };\n llm?: StreamRunnerOptions;\n}\n\n/**\n * Curator: phân tích toàn bộ sổ cái + nội dung đã chốt → quyết định ảnh nào tạo.\n * Tôn trọng maxImagesPerArtifact (count cả ảnh done + pending được approve).\n * LLM trả JSON: [{slug, action, enrichedPrompt, reason}]. Parse lỗi → MediaError rõ ràng.\n */\nexport async function curateMediaLedger(options: CurateOptions): Promise<CurationDecision[]> {\n const { ledger, artifactContent, policy, context } = options;\n const pendingEntries = ledger.pending();\n if (pendingEntries.length === 0) return [];\n\n const genQuota = Math.max(0, (policy.maxGenImagesPerArtifact ?? 3) - ledger.doneCount());\n const entriesBrief = pendingEntries.map(e => `- slug=${e.slug} | mode=${e.mode} | name=${e.name} | desc=${e.description.slice(0, 300)}`).join('\\n');\n\n const prompt = `Bạn là Media Curator cho học liệu giáo dục. Sổ cái có ${pendingEntries.length} ảnh đề xuất (pending), đã có ${ledger.doneCount()} ảnh hoàn tất, quota GEN tối đa ${policy.maxGenImagesPerArtifact} ảnh/bài (search kho ảnh KHÔNG tốn quota — xử ở tầng thực thi).\n${context.lessonTitle ? `Bài học: ${context.lessonTitle}` : ''}\n${context.gradeBand ? `Grade band: ${context.gradeBand[0]}-${context.gradeBand[1]}` : ''}\n\nCác ảnh đề xuất (sổ cái):\n${entriesBrief}\n\nNội dung bài (đã duyệt):\n${artifactContent.slice(0, 12000)}\n\nQUY TẮC PHÂN BỔ THEO 2 TRƯỜNG HỢP:\nA) Nếu ${pendingEntries.length} <= ${genQuota}: APPROVE TẤT CẢ — trừ khi có lý do CỨNG:\n - duplicate: 2+ ảnh cùng chủ đề (chỉ giữ 1, cái còn lại action=drop reasonCode=duplicate)\n - content_mismatch: mô tả không liên quan gì đến nội dung bài\n - low_quality_description: mô tả mơ hồ đến mức không thể tạo ảnh dùng được (vd \"ảnh minh họa chung\")\n KHÔNG được drop vì \"cảm thấy không cần\" — agent tạo đã lọc từ đầu.\nB) Về quota GEN (tối đa ${policy.maxGenImagesPerArtifact} ảnh AI/bài): KHÔNG drop ở bước này vì quota —\n tầng thực thi sẽ search kho ảnh trước cho mọi slot, chỉ những slot search-miss mới được xếp hạng để gen.\n Việc của bạn ở đây: approve/re-describe/drop theo 3 lý do CỨNG ở trên.\n\nVới mỗi ảnh approve/re-describe: viết enrichedPrompt TIẾNG ANH chi tiết (subject, layout, labeled parts, educational-diagram style, age-appropriate).\nKHÔNG BAO GIỜ approve vượt ${genQuota}.\n\nTrả về CHÍNH XÁC JSON (không markdown fence) cho TẤT CẢ các slug:\n[{\"slug\":\"...\",\"action\":\"approve|drop|re-describe\",\"reasonCode\":\"duplicate|content_mismatch|low_quality_description|over_quota\",\"enrichedPrompt\":\"...\",\"reason\":\"...\"}]`;\n\n const raw = await runCurriculumAIInference(\n [{ role: 'user', content: prompt }],\n '',\n options.llm || {}\n );\n\n const jsonMatch = raw.match(/\\[[\\s\\S]*\\]/);\n if (!jsonMatch) throw new MediaError(`Curator LLM trả về không parse được JSON: ${raw.slice(0, 200)}`, 'curator');\n let decisions: CurationDecision[];\n try {\n decisions = JSON.parse(jsonMatch[0]);\n } catch (e: any) {\n throw new MediaError(`Curator JSON invalid: ${e?.message}`, 'curator');\n }\n\n // Validate + enforce maxImages server-side (LLM không được vượt quota) + kiểm định danh\n const validSlugs = new Set(pendingEntries.map(e => e.slug));\n decisions = decisions.filter(d => validSlugs.has(d.slug)); // bỏ slug bịa\n\n const approved = decisions.filter(d => d.action === 'approve' || d.action === 're-describe');\n const overflow = approved.slice(genQuota);\n for (const d of overflow) {\n d.action = 'drop';\n d.reasonCode = 'over_quota';\n d.reason = 'Vượt maxImagesPerArtifact sau kiểm tra server-side';\n }\n\n // Bắt buộc reasonCode khi drop — fallback 'none_needed' nếu LLM quên\n for (const d of decisions) {\n if (d.action === 'drop' && !d.reasonCode) d.reasonCode = 'none_needed';\n }\n\n // Persist quyết định vào sổ cái (kèm reasonCode để audit + user override)\n for (const d of decisions) {\n if (d.action === 'drop') {\n ledger.setStatus(d.slug, 'rejected', { decisionReasonCode: d.reasonCode, decisionReason: d.reason, lastError: d.reason });\n } else {\n ledger.setStatus(d.slug, 'approved', { decisionReasonCode: undefined, decisionReason: d.reason, finalPrompt: d.enrichedPrompt });\n }\n }\n return decisions;\n \n\n}\n/** Input ranking cho 1 gen candidate */\nexport interface GenCandidate {\n slug: string;\n name: string;\n description: string;\n}\n\nexport interface GenRanking {\n /** Slugs được quyền gen (≤ quota) theo thứ tự ưu tiên */\n selected: string[];\n /** Slots không được gen kèm lý do */\n dropped: Array<{ slug: string; rank: number }>;\n}\n\n/**\n * Xếp hạng gen candidates khi số slot search-miss (hoặc gen_only tổng slot) VƯỢT quota gen.\n * Chỉ xếp hạng theo mức cần thiết của minh họa cho hiểu bài — KHÔNG đụng ledger (orchestrate lo persist).\n * LLM fail → fallback first-come theo thứ tự sổ cái + log warning rõ (degradation có chủ đích, không im lặng).\n */\nexport async function rankGenCandidates(\n candidates: GenCandidate[],\n quota: number,\n context: { lessonTitle?: string; gradeBand?: [number, number] },\n llm?: StreamRunnerOptions\n): Promise<GenRanking> {\n if (candidates.length <= quota) {\n return { selected: candidates.map(c => c.slug), dropped: [] };\n }\n\n const brief = candidates.map((c, i) => `${i + 1}. slug=${c.slug} | name=${c.name} | desc=${c.description.slice(0, 250)}`).join('\\n');\n const prompt = `Xếp hạng ${candidates.length} ảnh minh họa giáo dục, chọn ĐÚNG ${quota} ảnh ưu tiên gen (ảnh AI tốn kém).\n${context.lessonTitle ? `Bài học: ${context.lessonTitle}` : ''}\n${context.gradeBand ? `Grade band: ${context.gradeBand[0]}-${context.gradeBand[1]}` : ''}\n\nCandidates:\n${brief}\n\nThứ tự ưu tiên:\n1. Diagram/sơ đồ giải thích khái niệm trừu tượng hoặc quy trình nhiều bước (thiếu là khó hiểu nhất)\n2. Minh họa step-by-step thực hành (wiring, thao tác, UI)\n3. Ảnh bối cảnh/động lực (ít cần nhất)\n\nTrả CHÍNH XÁC JSON (không fence): {\"selected\":[\"slug1\",\"slug2\",...]} — đúng ${quota} slugs, theo thứ tự ưu tiên.`;\n\n try {\n const raw = await runCurriculumAIInference([{ role: 'user', content: prompt }], '', llm || {});\n const m = raw.match(/\\{[\\s\\S]*\\}/);\n if (!m) throw new Error('no JSON in response');\n const parsed = JSON.parse(m[0]) as { selected?: string[] };\n const valid = (parsed.selected || []).filter(s => candidates.some(c => c.slug === s)).slice(0, quota);\n if (valid.length === 0) throw new Error('empty selection');\n const selectedSet = new Set(valid);\n // Fill nếu LLM chọn thiếu quota: lấy theo thứ tự gốc\n for (const c of candidates) {\n if (valid.length >= quota) break;\n if (!selectedSet.has(c.slug)) { valid.push(c.slug); selectedSet.add(c.slug); }\n }\n const dropped = candidates.filter(c => !selectedSet.has(c.slug)).map((c, i) => ({ slug: c.slug, rank: i + 1 }));\n return { selected: valid, dropped };\n } catch (err: any) {\n // KHÔNG giấu lỗi — warn rõ rồi fallback first-come (ổn định, không chặn pipeline)\n console.warn('[curator] rankGenCandidates LLM failed — fallback first-come order:', err?.message || err);\n const selected = candidates.slice(0, quota).map(c => c.slug);\n const dropped = candidates.slice(quota).map((c, i) => ({ slug: c.slug, rank: i + 1 }));\n return { selected, dropped };\n }\n}","import fs from 'fs';\nimport path from 'path';\nimport { generateEducationalImage } from './imageProviders';\nimport { searchEducationalImages, searchEducationalVideos } from './stockSearch';\nimport type { MediaProvider } from './types';\nimport { MediaLedger, type MediaLedgerEntry } from './ledger';\nimport { rankGenCandidates } from './curator';\nimport type { MediaPolicy } from './curator';\nimport type { StreamRunnerOptions } from '../ai/streamRunner';\n\nexport interface FulfillOptions {\n ledger: MediaLedger;\n projectDir: string;\n policy: MediaPolicy;\n /** Tỷ lệ khung mặc định cho artifact type (SLIDE → 16:9) */\n defaultAspect?: '1:1' | '16:9' | '4:3' | '3:4';\n apiKeyOverrides?: { openai?: string; gemini?: string; pexels?: string };\n /** Số lần retry tối đa trước khi đánh dấu failed vĩnh viễn */\n maxRetries?: number;\n /** Ngữ cảnh cho gen-ranking (khi search-miss vượt quota gen) */\n rankingContext?: { lessonTitle?: string; gradeBand?: [number, number] };\n llm?: StreamRunnerOptions;\n onProgress?: (slug: string, status: string, detail?: string) => void;\n}\n\nexport interface FulfillResult {\n done: string[];\n failed: string[];\n skipped: string[];\n}\n\n/**\n * Thực thi các entry approved trong sổ cái (từng ảnh độc lập — lỗi 1 ảnh không chặn ảnh khác).\n * generate → base64 → save file _media/; search → lưu URL đầu tiên (metadata vào ledger).\n * Quá maxRetries → status 'failed', slot giữ placeholder trong markdown (client render).\n */\nexport async function fulfillMediaLedger(options: FulfillOptions): Promise<FulfillResult> {\n const { ledger, projectDir, policy } = options;\n const maxRetries = options.maxRetries ?? 2;\n const approved = ledger.listByStatus('approved');\n const result: FulfillResult = { done: [], failed: [], skipped: [] };\n\n const mediaDir = path.join(projectDir, '_media');\n fs.mkdirSync(mediaDir, { recursive: true });\n\n const mode = policy.mode ?? 'auto';\n const canSearch = mode === 'search_only' || mode === 'auto';\n const canGen = mode === 'gen_only' || mode === 'auto';\n\n // ── PHA 1: SEARCH kho ảnh cho TẤT CẢ slots (search không tốn quota gen) ──\n const searchMisses: typeof approved = [];\n if (canSearch) {\n for (const entry of approved) {\n if ((entry.retryCount ?? 0) >= maxRetries) { result.skipped.push(entry.slug); continue; }\n options.onProgress?.(entry.slug, 'searching');\n try {\n const images = await searchEducationalImages({\n query: entry.finalPrompt || entry.description,\n perPage: 1,\n apiKey: options.apiKeyOverrides?.pexels,\n });\n const target = images[0];\n if (target) {\n ledger.setStatus(entry.slug, 'done', { relPath: target.url, provider: 'pexels' });\n result.done.push(entry.slug);\n options.onProgress?.(entry.slug, 'done', 'source: pexels');\n } else {\n searchMisses.push(entry);\n }\n } catch (err: any) {\n if (mode === 'search_only') {\n // search_only: lỗi search = thất bại slot (đúng nghĩa chế độ)\n const msg = err?.message || String(err);\n ledger.setStatus(entry.slug, 'failed', { lastError: msg });\n options.onProgress?.(entry.slug, 'failed', msg);\n result.failed.push(entry.slug);\n } else {\n searchMisses.push(entry); // auto: search lỗi → coi như miss, thử gen\n }\n }\n }\n } else {\n // gen_only: mọi slot là \"miss\" đối với search\n for (const entry of approved) {\n if ((entry.retryCount ?? 0) >= maxRetries) { result.skipped.push(entry.slug); continue; }\n searchMisses.push(entry);\n }\n }\n\n // ── PHA 2: GEN cho search-miss — nếu vượt genQuota → rankGenCandidates xếp hạng ──\n if (canGen && searchMisses.length > 0) {\n const genQuota = Math.max(0, (policy.maxGenImagesPerArtifact ?? 3) - ledger.doneCount());\n let toGen: typeof approved = [];\n if (searchMisses.length > genQuota) {\n const ranking = await rankGenCandidates(\n searchMisses.map(e => ({ slug: e.slug, name: e.name, description: e.finalPrompt || e.description })),\n genQuota,\n options.rankingContext || {},\n options.llm\n );\n const allowed = new Set(ranking.selected);\n toGen = searchMisses.filter(e => allowed.has(e.slug));\n for (const dropped of ranking.dropped) {\n const entry = searchMisses.find(e => e.slug === dropped.slug);\n if (!entry) continue;\n // Quá quota gen → failed với lý do RÕ (user có thể 'Tạo ảnh bù' sau, hoặc tăng quota)\n ledger.setStatus(entry.slug, 'failed', {\n lastError: `Vượt quota gen (${policy.maxGenImagesPerArtifact}/bài) — hạng ${dropped.rank} khi xếp hạng theo mức cần thiết cho việc hiểu bài`,\n });\n result.failed.push(entry.slug);\n options.onProgress?.(entry.slug, 'failed', 'over gen quota');\n }\n } else {\n toGen = searchMisses;\n }\n\n for (const entry of toGen) {\n options.onProgress?.(entry.slug, 'generating');\n try {\n const provider: MediaProvider = policy.preferredProvider || 'openai';\n const image = await generateEducationalImage({\n prompt: entry.finalPrompt || entry.description,\n aspectRatio: options.defaultAspect || '4:3',\n provider,\n apiKey: provider === 'openai' ? options.apiKeyOverrides?.openai : options.apiKeyOverrides?.gemini,\n });\n const ext = image.mimeType === 'image/jpeg' ? 'jpg' : 'png';\n const filename = `${entry.slug}-${Date.now()}.${ext}`;\n fs.writeFileSync(path.join(mediaDir, filename), Buffer.from(image.base64, 'base64'));\n ledger.setStatus(entry.slug, 'done', { relPath: `_media/${filename}`, provider: image.provider });\n result.done.push(entry.slug);\n options.onProgress?.(entry.slug, 'done', `source: ${image.provider}`);\n } catch (err: any) {\n const msg = err?.message || String(err);\n ledger.setStatus(entry.slug, 'failed', { lastError: msg });\n options.onProgress?.(entry.slug, 'failed', msg);\n result.failed.push(entry.slug);\n }\n }\n }\n\n // search_only slots mà search trống nhưng KHÔNG fail ở pha 1 (đã xử) — không gen\n return result;\n}\n\n/** Sau khi done: thay placeholder [IMAGE: slug] trong markdown bằng ![](relPath) */\nexport function injectMediaIntoMarkdown(markdown: string, ledger: MediaLedger | MediaLedgerEntry[]): string {\n let out = markdown;\n const entries = Array.isArray(ledger) ? ledger : ledger.list();\n for (const entry of entries) {\n if (entry.status !== 'done' || !entry.relPath) continue;\n const placeholder = new RegExp(`\\\\[IMAGE\\\\s*:\\\\s*${entry.slug}\\\\]`, 'g');\n out = out.replace(placeholder, `![${entry.name}](${entry.relPath})`);\n }\n return out;\n}\n\n/** Tạo placeholder hiển thị khi failed/pending — client render rõ trạng thái, không im lặng */\nexport function renderMediaPlaceholder(entry: MediaLedgerEntry): string {\n if (entry.status === 'failed') {\n return `> ⚠️ [Ảnh ${entry.name} chưa tạo được (${entry.lastError || 'lỗi không rõ'}) — bấm \"Tạo ảnh bù\" để thử lại]`;\n }\n return `> 🖼️ [Ảnh đang chờ: ${entry.name} — sẽ được tạo sau khi duyệt media]`;\n}"]}