@thanh01.pmt/curriculum-kit 1.4.12 → 1.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -10,8 +10,8 @@ export { A as AutoRepairOptions, a as AutoRepairResult, B as BundleTier, G as Ge
10
10
  import { I as ICurriculumStorage, P as ProjectStatusReport, S as SmartResumeContext, Q as QualityAuditReport } from './types-BUJGYiep.cjs';
11
11
  export { b as ArtifactLifecycleInfo, A as ArtifactLifecycleState, L as LessonArtifactSummary, c as PipelineState, R as ReviewRecord, a as SotDocument, T as TaskLifecycleState } from './types-BUJGYiep.cjs';
12
12
  export { FileSystemCurriculumAdapter, FileSystemStorageOptions, STANDARD_SOT_FILES, StorageFactoryOptions, SupabaseCurriculumAdapter, SupabaseStorageConfig, computeContentHash, createCurriculumStorage } from './storage/index.cjs';
13
- import { F as FrameworkPack, C as CoverageGateReport } from './standardsCoverageGate-CwBk5P6m.cjs';
14
- export { B as BloomHintSchema, a as ClassificationSchema, m as CoverageGateInput, h as FrameworkMapping, d as FrameworkMappingSchema, f as FrameworkPackManifest, b as FrameworkPackManifestSchema, e as FrameworkPackSchema, g as FrameworkStatement, c as FrameworkStatementSchema, G as GradeBandSchema, i as MappingKind, M as MappingKindSchema, P as PackLintIssue, k as PackValidationResult, j as RecordProvenance, R as RecordProvenanceSchema, S as StatementCoverageRow, n as evaluateStandardsCoverage, l as lintFrameworkPack, v as validateFrameworkPack } from './standardsCoverageGate-CwBk5P6m.cjs';
13
+ import { F as FrameworkPack, C as CoverageGateReport } from './standardsCoverageGate-DR5YTtlt.cjs';
14
+ export { B as BloomHintSchema, a as ClassificationSchema, m as CoverageGateInput, h as FrameworkMapping, d as FrameworkMappingSchema, f as FrameworkPackManifest, b as FrameworkPackManifestSchema, e as FrameworkPackSchema, g as FrameworkStatement, c as FrameworkStatementSchema, G as GradeBandSchema, i as MappingKind, M as MappingKindSchema, P as PackLintIssue, k as PackValidationResult, j as RecordProvenance, R as RecordProvenanceSchema, S as StatementCoverageRow, n as evaluateStandardsCoverage, l as lintFrameworkPack, v as validateFrameworkPack } from './standardsCoverageGate-DR5YTtlt.cjs';
15
15
  import { R as ResolvedGateSettings } from './gateSettings-L3FR2-MO.cjs';
16
16
  export { A as ArtifactType, b as CurriculumArtifactType, C as CurriculumGateMode, D as DEFAULT_GATE_SETTINGS, G as GateSettings, c as ScaffoldingLevel, S as SingleArtifactRequest, a as SingleArtifactResult, g as gateModeFor, e as generateSingleArtifact, d as getArtifactMetadata, p as parseGateSettings, r as resolveGateSettings } from './gateSettings-L3FR2-MO.cjs';
17
17
  export { DeliveryPackResult, JobManifest, LocalWorkspaceManager, ParsedQuizQuestion, buildDeliveryPackages, exportAllProjectQuizzes, formatQuizzesToCsv, parseQuizMarkdown } from './publishers/index.cjs';
package/dist/index.d.ts CHANGED
@@ -10,8 +10,8 @@ export { A as AutoRepairOptions, a as AutoRepairResult, B as BundleTier, G as Ge
10
10
  import { I as ICurriculumStorage, P as ProjectStatusReport, S as SmartResumeContext, Q as QualityAuditReport } from './types-BUJGYiep.js';
11
11
  export { b as ArtifactLifecycleInfo, A as ArtifactLifecycleState, L as LessonArtifactSummary, c as PipelineState, R as ReviewRecord, a as SotDocument, T as TaskLifecycleState } from './types-BUJGYiep.js';
12
12
  export { FileSystemCurriculumAdapter, FileSystemStorageOptions, STANDARD_SOT_FILES, StorageFactoryOptions, SupabaseCurriculumAdapter, SupabaseStorageConfig, computeContentHash, createCurriculumStorage } from './storage/index.js';
13
- import { F as FrameworkPack, C as CoverageGateReport } from './standardsCoverageGate-CwBk5P6m.js';
14
- export { B as BloomHintSchema, a as ClassificationSchema, m as CoverageGateInput, h as FrameworkMapping, d as FrameworkMappingSchema, f as FrameworkPackManifest, b as FrameworkPackManifestSchema, e as FrameworkPackSchema, g as FrameworkStatement, c as FrameworkStatementSchema, G as GradeBandSchema, i as MappingKind, M as MappingKindSchema, P as PackLintIssue, k as PackValidationResult, j as RecordProvenance, R as RecordProvenanceSchema, S as StatementCoverageRow, n as evaluateStandardsCoverage, l as lintFrameworkPack, v as validateFrameworkPack } from './standardsCoverageGate-CwBk5P6m.js';
13
+ import { F as FrameworkPack, C as CoverageGateReport } from './standardsCoverageGate-DR5YTtlt.js';
14
+ export { B as BloomHintSchema, a as ClassificationSchema, m as CoverageGateInput, h as FrameworkMapping, d as FrameworkMappingSchema, f as FrameworkPackManifest, b as FrameworkPackManifestSchema, e as FrameworkPackSchema, g as FrameworkStatement, c as FrameworkStatementSchema, G as GradeBandSchema, i as MappingKind, M as MappingKindSchema, P as PackLintIssue, k as PackValidationResult, j as RecordProvenance, R as RecordProvenanceSchema, S as StatementCoverageRow, n as evaluateStandardsCoverage, l as lintFrameworkPack, v as validateFrameworkPack } from './standardsCoverageGate-DR5YTtlt.js';
15
15
  import { R as ResolvedGateSettings } from './gateSettings-L3FR2-MO.js';
16
16
  export { A as ArtifactType, b as CurriculumArtifactType, C as CurriculumGateMode, D as DEFAULT_GATE_SETTINGS, G as GateSettings, c as ScaffoldingLevel, S as SingleArtifactRequest, a as SingleArtifactResult, g as gateModeFor, e as generateSingleArtifact, d as getArtifactMetadata, p as parseGateSettings, r as resolveGateSettings } from './gateSettings-L3FR2-MO.js';
17
17
  export { DeliveryPackResult, JobManifest, LocalWorkspaceManager, ParsedQuizQuestion, buildDeliveryPackages, exportAllProjectQuizzes, formatQuizzesToCsv, parseQuizMarkdown } from './publishers/index.js';
package/dist/index.mjs CHANGED
@@ -1278,7 +1278,7 @@ var init_lessonFlowParser = __esm({
1278
1278
 
1279
1279
  // src/ai/prompts/slideBlueprintPrompt.ts
1280
1280
  function buildSlideBlueprintPrompt(params) {
1281
- const { lessonFlow, targetSlideCount = 20, stylePresetName = "Blue Professional" } = params;
1281
+ const { lessonFlow, targetSlideCount, stylePresetName = "Blue Professional" } = params;
1282
1282
  const activitiesSummary = lessonFlow.activities.map(
1283
1283
  (a) => `Seq ${a.seq} [${a.phase}]: ${a.purpose} (Teacher: ${a.teacherMove} | Student: ${a.studentAction} | Time: ${a.time})`
1284
1284
  ).join("\n");
@@ -1286,9 +1286,11 @@ function buildSlideBlueprintPrompt(params) {
1286
1286
  (p) => `Phase "${p.phaseName}" (${p.timing || "Standard"}):
1287
1287
  ${p.content.slice(0, 500)}...`
1288
1288
  ).join("\n\n");
1289
+ const countGuidance = targetSlideCount ? `The target is approximately ${targetSlideCount} slides.` : `Determine the organic, optimal number of slides (typically 12 to 25 slides) based directly on the number of activities, instructional moves, and depth of content in the LESSON plan.`;
1289
1290
  return `
1290
1291
  You are @illustrator, Chief Slide Architect for the Course Builder OS.
1291
- Your task is to analyze the canonical LESSON plan and architect an authoritative, high-fidelity **SLIDE BLUEPRINT** of EXACTLY ${targetSlideCount} slides.
1292
+ Your task is to analyze the canonical LESSON plan and architect an authoritative, high-fidelity **SLIDE BLUEPRINT**.
1293
+ ${countGuidance}
1292
1294
 
1293
1295
  ### \u{1F3DB}\uFE0F PEDAGOGICAL GROUND TRUTH (FROM CANONICAL LESSON):
1294
1296
  - Lesson Title: "${lessonFlow.lessonTitle}"
@@ -1306,17 +1308,18 @@ ${phasesSummary || lessonFlow.rawContent.slice(0, 3e3)}
1306
1308
  ---
1307
1309
 
1308
1310
  ### \u{1F3AF} ARCHITECTURAL RULES (STRICTLY INVARIANT):
1309
- 1. **PEDAGOGICAL FIDELITY (1-TO-1 PROJECTION)**:
1311
+ 1. **ORGANIC PEDAGOGICAL FIDELITY (1-TO-1 PROJECTION)**:
1310
1312
  - The slide sequence MUST follow the EXACT flow of the LESSON phases (${lessonFlow.pedagogicalModel.toUpperCase()}).
1313
+ - The number of slides is determined by the substance of the lesson \u2014 do NOT stretch thin content or cram rich multi-step labs into too few slides.
1311
1314
  - Do NOT invent artificial phases that do not exist in the lesson plan.
1312
1315
  - For example:
1313
- * If 5E: Engage (slides 1-4) -> Explore (slides 5-8) -> Explain (slides 9-13) -> Elaborate (slides 14-17) -> Evaluate (slides 18-20).
1314
- * If EDP: Ask/Problem (slides 1-4) -> Imagine & Plan (slides 5-8) -> Create & Prototype (slides 9-14) -> Test & Debug (slides 15-17) -> Improve & Share (slides 18-20).
1315
- * If PBL: Driving Question (slides 1-4) -> Inquiry (slides 5-9) -> Milestone Sprint (slides 10-15) -> Review & Exhibition (slides 16-20).
1316
+ * If 5E: Engage -> Explore -> Explain -> Elaborate -> Evaluate.
1317
+ * If EDP: Ask/Problem -> Imagine & Plan -> Create & Prototype -> Test & Debug -> Improve & Share.
1318
+ * If PBL: Driving Question -> Inquiry -> Milestone Sprint -> Review & Exhibition.
1316
1319
 
1317
- 2. **CHUNKY CLUSTERS (3 TO 4 CLUSTERS)**:
1318
- - Group the ${targetSlideCount} slides into 3 to 4 natural clusters (each cluster contains 4 to 6 slides).
1319
- - Each cluster corresponds to a major pedagogical transition in the lesson.
1320
+ 2. **CHUNKY CLUSTERS (4 TO 6 SLIDES PER CLUSTER)**:
1321
+ - Partition the slides into natural clusters corresponding to the major pedagogical transitions in the lesson.
1322
+ - Each cluster MUST contain 4 to 6 slides to ensure downstream token generation remains focused, high-fidelity, and non-repetitive.
1320
1323
 
1321
1324
  3. **SEMANTIC LAYOUT SLOTS (CHOOSE FROM VERIFIED TEMPLATES)**:
1322
1325
  Use one of these valid layoutIds for each slide:
@@ -1463,7 +1466,7 @@ async function executeSlideProductionWorkflow(options) {
1463
1466
  lessonMarkdown,
1464
1467
  lessonCode,
1465
1468
  lessonTitle,
1466
- targetSlideCount = 20,
1469
+ targetSlideCount,
1467
1470
  stylePresetId = "blue-professional",
1468
1471
  language = "Vietnamese",
1469
1472
  languageDirective = "",
@@ -1482,7 +1485,8 @@ async function executeSlideProductionWorkflow(options) {
1482
1485
  presentationKitCore = await import('@thanh01.pmt/presentation-kit');
1483
1486
  } catch {
1484
1487
  }
1485
- onProgress?.("@illustrator", `[1/4] Ph\xE2n t\xEDch m\u1EA1ch b\xE0i gi\u1EA3ng LESSON & L\u1EADp D\xE0n \xFD ${targetSlideCount} Slides...`);
1488
+ const countLabel = targetSlideCount ? `${targetSlideCount} ` : "h\u1EEFu c\u01A1 ";
1489
+ onProgress?.("@illustrator", `[1/4] Ph\xE2n t\xEDch m\u1EA1ch b\xE0i gi\u1EA3ng LESSON & L\u1EADp D\xE0n \xFD ${countLabel}Slides...`);
1486
1490
  const lessonFlow = parseLessonFlow(lessonMarkdown);
1487
1491
  const stylePreset = presentationKitSkills?.getStylePreset ? presentationKitSkills.getStylePreset(stylePresetId) : { name: "Blue Professional" };
1488
1492
  const blueprintPrompt = buildSlideBlueprintPrompt({
@@ -1506,12 +1510,13 @@ async function executeSlideProductionWorkflow(options) {
1506
1510
  blueprintItems = JSON.parse(jsonrepair(extractCleanJson(rawBlueprint)));
1507
1511
  } catch (e) {
1508
1512
  console.warn(`[SlideProductionWorkflow] Failed parsing blueprint JSON, constructing fallback:`, e);
1509
- blueprintItems = Array.from({ length: targetSlideCount }, (_, i) => ({
1513
+ const fallbackCount = targetSlideCount || Math.max(12, Math.min(24, Math.max(lessonFlow.phases.length, 4) * 4));
1514
+ blueprintItems = Array.from({ length: fallbackCount }, (_, i) => ({
1510
1515
  slideIndex: i + 1,
1511
1516
  clusterId: Math.floor(i / 5) + 1,
1512
1517
  clusterTitle: `Cluster ${Math.floor(i / 5) + 1}`,
1513
1518
  lessonPhase: lessonFlow.phases[Math.min(i, lessonFlow.phases.length - 1)]?.phaseName || "Content",
1514
- layoutId: i === 0 ? "hero-cover" : i === targetSlideCount - 1 ? "summary-takeaways" : "split-concept-code",
1519
+ layoutId: i === 0 ? "hero-cover" : i === fallbackCount - 1 ? "summary-takeaways" : "split-concept-code",
1515
1520
  title: `Slide ${i + 1}: ${lessonTitle}`,
1516
1521
  pedagogicalGoal: `Teach step ${i + 1} of ${lessonTitle}`,
1517
1522
  contentFocus: ["Key point 1", "Key point 2", "Key point 3"]
@@ -25816,7 +25821,6 @@ ${buildHeadingDirective("QUIZ", slcMarkdown, targetLang)}`;
25816
25821
  lessonMarkdown: lessonContent || "",
25817
25822
  lessonCode,
25818
25823
  lessonTitle,
25819
- targetSlideCount: 20,
25820
25824
  stylePresetId: "blue-professional",
25821
25825
  language: targetLang || "Vietnamese",
25822
25826
  languageDirective,