@thanh01.pmt/curriculum-kit 1.4.47 → 1.4.49
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/README.md +23 -0
- package/dist/ai/index.cjs +21 -3
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.mjs +21 -3
- package/dist/ai/index.mjs.map +1 -1
- package/dist/index.cjs +240 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +86 -1
- package/dist/index.d.ts +86 -1
- package/dist/index.mjs +237 -14
- package/dist/index.mjs.map +1 -1
- package/dist/pipeline/index.cjs +21 -3
- package/dist/pipeline/index.cjs.map +1 -1
- package/dist/pipeline/index.mjs +21 -3
- package/dist/pipeline/index.mjs.map +1 -1
- package/dist/schemas/index.cjs +19 -1
- package/dist/schemas/index.cjs.map +1 -1
- package/dist/schemas/index.d.cts +140 -0
- package/dist/schemas/index.d.ts +140 -0
- package/dist/schemas/index.mjs +19 -1
- package/dist/schemas/index.mjs.map +1 -1
- package/dist/workflow/index.cjs +22 -3
- package/dist/workflow/index.cjs.map +1 -1
- package/dist/workflow/index.mjs +22 -3
- package/dist/workflow/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -4007,7 +4007,25 @@ var PlanningNodeSchema = z.object({
|
|
|
4007
4007
|
file: z.string(),
|
|
4008
4008
|
evidence: z.string().default("")
|
|
4009
4009
|
})).default([]),
|
|
4010
|
-
phase_id: z.string().default("")
|
|
4010
|
+
phase_id: z.string().default(""),
|
|
4011
|
+
// P52/T2.1: tangible user-visible outcome projected from the graph step
|
|
4012
|
+
// (checkpoint candidate for session cutting). Empty = not a checkpoint.
|
|
4013
|
+
user_visible_deliverable: z.string().default(""),
|
|
4014
|
+
// P52/T3.1 — depth-reconcile inputs (mirrored from the feed; optional so
|
|
4015
|
+
// raw graphs without variants keep planning unchanged):
|
|
4016
|
+
// • depth_variants: minutes to teach this node at each depth level (ULO ≤
|
|
4017
|
+
// CIO ≤ SIO) — the reconciler's price list for downgrades.
|
|
4018
|
+
// • depth_scaffold_candidates: parallel to scaffold_candidates but acting
|
|
4019
|
+
// on DEPTH (SIO→CIO, CIO→ULO) instead of lesson time.
|
|
4020
|
+
// • is_core: Master-Tree core concept — never downgraded; escalate instead.
|
|
4021
|
+
depth_variants: z.object({ ulo: z.number().int().nonnegative(), cio: z.number().int().nonnegative(), sio: z.number().int().nonnegative() }).optional(),
|
|
4022
|
+
depth_scaffold_candidates: z.array(z.object({
|
|
4023
|
+
from_depth: DepthLevelSchema,
|
|
4024
|
+
to_depth: DepthLevelSchema,
|
|
4025
|
+
minutes_saved: z.number().int().nonnegative(),
|
|
4026
|
+
reason: z.string().default("")
|
|
4027
|
+
})).optional(),
|
|
4028
|
+
is_core: z.boolean().default(false)
|
|
4011
4029
|
});
|
|
4012
4030
|
var DependencyEdgeSchema = z.object({
|
|
4013
4031
|
from: z.string(),
|
|
@@ -4845,9 +4863,9 @@ Evaluate the candidate artifact across these 6 dimensions:
|
|
|
4845
4863
|
- 0 pts: Missing critical sections.
|
|
4846
4864
|
|
|
4847
4865
|
5. **Technical & Conceptual Accuracy (15 pts):**
|
|
4848
|
-
- 15 pts: Code snippets, logic flows, architectural descriptions, and Mermaid diagrams are conceptually sound and valid. If \`canonicalExposition\` or \`[KNOWLEDGE_EXPOSITION]\` is provided, content strictly adheres to canonical concepts without contradicting definitions or examples.
|
|
4866
|
+
- 15 pts: Code snippets, logic flows, architectural descriptions, and Mermaid diagrams are conceptually sound and valid. Every code identifier uses the REAL standard-library/API spelling of the declared stack (grounded in REFERENCE_PACK / canonical LESSON) \u2014 internal consistency with a glossary term name is NOT evidence of correctness. If \`canonicalExposition\` or \`[KNOWLEDGE_EXPOSITION]\` is provided, content strictly adheres to canonical concepts without contradicting definitions or examples.
|
|
4849
4867
|
- 8 pts: Minor syntax inaccuracies or unidiomatic code that does not break core concepts.
|
|
4850
|
-
- 0 pts: Severe technical hallucinations, broken logic, invalid diagrams, or direct contradiction of canonical exposition knowledge.
|
|
4868
|
+
- 0 pts: Severe technical hallucinations, broken logic, invalid diagrams, invented casing/spelling rules for standard-library identifiers, or direct contradiction of canonical exposition knowledge.
|
|
4851
4869
|
|
|
4852
4870
|
6. **Contract Consistency & Zero-Drift (10 pts):**
|
|
4853
4871
|
- 10 pts: Satellite artifact strictly adheres to the scope, tech stack, and objectives of Lesson ${lessonId} without introducing unrelated topics. If \`canonicalLessonExcerpt\` is present in candidate JSON, all satellite phases/activities strictly operationalize the master Lesson Flow and Activity Sequence without inventing divergent timelines.
|
|
@@ -5424,6 +5442,7 @@ var MAX_NEW_CONCEPTS_PER_SESSION_K12 = 2;
|
|
|
5424
5442
|
var MAX_NEW_CONCEPTS_PER_SESSION_ADULT = 3;
|
|
5425
5443
|
var DEFAULT_OVERHEAD_RATIO = 0.15;
|
|
5426
5444
|
var MAX_IN_SESSION_SETUP_MINUTES = 15;
|
|
5445
|
+
var SESSION_CUT_TOLERANCE = 0.15;
|
|
5427
5446
|
var ENVIRONMENT_PROVISIONING_MODELS = [
|
|
5428
5447
|
"PRE_INSTALLED_LAB",
|
|
5429
5448
|
"CLOUD_MANAGED",
|
|
@@ -10177,6 +10196,38 @@ function checkScopeDrift(content, scopedKeywords, tolerance = 0) {
|
|
|
10177
10196
|
evidence: drift
|
|
10178
10197
|
};
|
|
10179
10198
|
}
|
|
10199
|
+
function checkIdentifierCasing(content, refPack) {
|
|
10200
|
+
if (!refPack || !refPack.trim()) return null;
|
|
10201
|
+
const canonical = /* @__PURE__ */ new Map();
|
|
10202
|
+
const remember = (id) => {
|
|
10203
|
+
if (id.length < 2) return;
|
|
10204
|
+
const key = id.toLowerCase().replace(/_/g, "");
|
|
10205
|
+
if (!canonical.has(key)) canonical.set(key, id);
|
|
10206
|
+
};
|
|
10207
|
+
for (const m of refPack.matchAll(/`([A-Za-z_][A-Za-z0-9_]*)\s*\(/g)) remember(m[1]);
|
|
10208
|
+
for (const m of refPack.matchAll(/\b([A-Za-z_][A-Za-z0-9_]*)\s*\(/g)) remember(m[1]);
|
|
10209
|
+
for (const m of refPack.matchAll(/`([A-Za-z_][A-Za-z0-9_]*)`/g)) remember(m[1]);
|
|
10210
|
+
if (canonical.size === 0) return null;
|
|
10211
|
+
const RESERVED = /* @__PURE__ */ new Set(["if", "for", "while", "switch", "func", "return", "guard", "catch", "else", "in"]);
|
|
10212
|
+
const violations = [];
|
|
10213
|
+
const fenceRe = /```[a-zA-Z]*\n([\s\S]*?)```/g;
|
|
10214
|
+
for (const fence of content.matchAll(fenceRe)) {
|
|
10215
|
+
for (const m of fence[1].matchAll(/\b([A-Za-z_][A-Za-z0-9_]*)\s*\(/g)) {
|
|
10216
|
+
const tok = m[1];
|
|
10217
|
+
if (RESERVED.has(tok.toLowerCase())) continue;
|
|
10218
|
+
const real = canonical.get(tok.toLowerCase().replace(/_/g, ""));
|
|
10219
|
+
if (real && real !== tok && !violations.includes(`${tok} \u2192 ${real}`)) {
|
|
10220
|
+
violations.push(`${tok} \u2192 ${real}`);
|
|
10221
|
+
}
|
|
10222
|
+
}
|
|
10223
|
+
}
|
|
10224
|
+
if (violations.length === 0) return null;
|
|
10225
|
+
return {
|
|
10226
|
+
code: "identifier-casing",
|
|
10227
|
+
detail: `Code d\xF9ng identifier l\u1EC7ch casing so v\u1EDBi REFERENCE_PACK (ngu\u1ED3n s\u1EF1 th\u1EADt k\u1EF9 thu\u1EADt): ${violations.join(", ")}. Identifier trong code PH\u1EA2I copy nguy\xEAn d\u1EA1ng t\u1EEB REFERENCE_PACK \u2014 KH\xD4NG suy ra casing t\u1EEB t\xEAn keyword/concept (ch\xFAng l\xE0 nh\xE3n s\u01B0 ph\u1EA1m, kh\xF4ng ph\u1EA3i API).`,
|
|
10228
|
+
evidence: violations.slice(0, 5)
|
|
10229
|
+
};
|
|
10230
|
+
}
|
|
10180
10231
|
function validateArtifactDeterministic(input) {
|
|
10181
10232
|
const issues = [];
|
|
10182
10233
|
const cjk = scanCjkLeaks(input.content);
|
|
@@ -10184,6 +10235,8 @@ function validateArtifactDeterministic(input) {
|
|
|
10184
10235
|
if (input.refPack) {
|
|
10185
10236
|
const ver = checkVersionGroundTruth(input.content, input.refPack);
|
|
10186
10237
|
if (ver) issues.push(ver);
|
|
10238
|
+
const casing = checkIdentifierCasing(input.content, input.refPack);
|
|
10239
|
+
if (casing) issues.push(casing);
|
|
10187
10240
|
}
|
|
10188
10241
|
if (input.scopedKeywords && input.scopedKeywords.length > 0) {
|
|
10189
10242
|
const scope = checkScopeDrift(input.content, input.scopedKeywords);
|
|
@@ -10295,9 +10348,10 @@ function buildSystemPrompt(targetLanguage = "vi", techStack, hardwarePlatform) {
|
|
|
10295
10348
|
"Rules:",
|
|
10296
10349
|
"1. Cover EXACTLY the scoped keywords and concepts \u2014 nothing beyond the session scope.",
|
|
10297
10350
|
"2. Every Key Term definition must be consistent with the glossary entry provided.",
|
|
10298
|
-
|
|
10299
|
-
"4.
|
|
10300
|
-
"5.
|
|
10351
|
+
'3. IDENTIFIER GROUND TRUTH: glossary/keyword names are pedagogical concept labels \u2014 NEVER derive code identifier casing or spelling from them. In code samples, copy identifiers EXACTLY from the REFERENCE_PACK ground truth (e.g. the standard library function is `print` lowercase; "Print" as a topic label is not an API symbol).',
|
|
10352
|
+
"4. Respect each concept depth target (ULO/CIO/SIO) \u2014 do not overshoot.",
|
|
10353
|
+
"5. Student-facing only: no teacher instructions, no classroom management text.",
|
|
10354
|
+
"6. Output the full markdown document following the provided section skeleton exactly (headers and placeholders preserved).",
|
|
10301
10355
|
domainGuardrails,
|
|
10302
10356
|
langDirective
|
|
10303
10357
|
].join("\n");
|
|
@@ -10535,6 +10589,98 @@ async function ensureExpositionForLesson(storage, projectId, lessonCode, options
|
|
|
10535
10589
|
return { relPath: result.relPath, context: buildExpositionContext(result.content), reused: result.reused, rawContent: result.content };
|
|
10536
10590
|
}
|
|
10537
10591
|
init_errors();
|
|
10592
|
+
|
|
10593
|
+
// src/services/depthReconciler.ts
|
|
10594
|
+
function tierOf(node, isLeaf) {
|
|
10595
|
+
if (node.phase_id !== "" && /__ADV\d{2}$/.test(node.id)) return 1;
|
|
10596
|
+
const depth = node.depth_hint ?? "cio";
|
|
10597
|
+
if (depth === "sio") return isLeaf ? 2 : 3;
|
|
10598
|
+
if (depth === "cio") return isLeaf ? 4 : 5;
|
|
10599
|
+
return -1;
|
|
10600
|
+
}
|
|
10601
|
+
function classifyDepthCandidates(nodes, edges) {
|
|
10602
|
+
const baseConcept = (id) => id.replace(/__(ADV|PREV)\d{2}$/, "");
|
|
10603
|
+
const conceptIds = new Set(nodes.filter((n) => n.kind === "concept").map((n) => baseConcept(n.id)));
|
|
10604
|
+
const hasDependent = /* @__PURE__ */ new Set();
|
|
10605
|
+
for (const e of edges) {
|
|
10606
|
+
if (e.kind !== "knowledge") continue;
|
|
10607
|
+
const from = baseConcept(e.from);
|
|
10608
|
+
const to = baseConcept(e.to);
|
|
10609
|
+
if (conceptIds.has(from) && conceptIds.has(to)) hasDependent.add(from);
|
|
10610
|
+
}
|
|
10611
|
+
const isLeaf = /* @__PURE__ */ new Map();
|
|
10612
|
+
for (const n of nodes) {
|
|
10613
|
+
if (n.kind !== "concept") continue;
|
|
10614
|
+
const base = baseConcept(n.id);
|
|
10615
|
+
if (!isLeaf.has(base)) isLeaf.set(base, !hasDependent.has(base));
|
|
10616
|
+
}
|
|
10617
|
+
return isLeaf;
|
|
10618
|
+
}
|
|
10619
|
+
function reconcilePlanDepth(nodes, edges, spec, budgetMinutes) {
|
|
10620
|
+
const MAX_ROUNDS = 5;
|
|
10621
|
+
const total = () => nodes.reduce((acc, n) => acc + n.estimated_minutes, 0);
|
|
10622
|
+
const isLeaf = classifyDepthCandidates(nodes, edges);
|
|
10623
|
+
const baseConcept = (id) => id.replace(/__(ADV|PREV)\d{2}$/, "");
|
|
10624
|
+
const applied = [];
|
|
10625
|
+
const mutated = /* @__PURE__ */ new Set();
|
|
10626
|
+
let rounds = 0;
|
|
10627
|
+
while (total() > budgetMinutes && rounds < MAX_ROUNDS) {
|
|
10628
|
+
rounds++;
|
|
10629
|
+
let overBy = total() - budgetMinutes;
|
|
10630
|
+
const candidates = [];
|
|
10631
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
10632
|
+
const n = nodes[i];
|
|
10633
|
+
if (n.kind !== "concept") continue;
|
|
10634
|
+
if (n.is_core) continue;
|
|
10635
|
+
if (n.depth_hint == null) continue;
|
|
10636
|
+
const base = baseConcept(n.id);
|
|
10637
|
+
const leaf = isLeaf.get(base) ?? true;
|
|
10638
|
+
const tier = tierOf(n, leaf);
|
|
10639
|
+
if (tier < 0) continue;
|
|
10640
|
+
const depth = n.depth_hint ?? "cio";
|
|
10641
|
+
const toDepth = depth === "sio" ? "cio" : "ulo";
|
|
10642
|
+
const variants = n.depth_variants;
|
|
10643
|
+
const target = variants ? variants[toDepth] : Math.max(5, Math.round(n.estimated_minutes * 0.6));
|
|
10644
|
+
const saved = n.estimated_minutes - target;
|
|
10645
|
+
if (saved <= 0) continue;
|
|
10646
|
+
candidates.push({
|
|
10647
|
+
nodeId: n.id,
|
|
10648
|
+
fromDepth: depth,
|
|
10649
|
+
toDepth,
|
|
10650
|
+
minutesSaved: saved,
|
|
10651
|
+
reason: n.depth_scaffold_candidates?.find((c) => c.to_depth === toDepth)?.reason ?? `depth downgrade ${depth}\u2192${toDepth} (tier ${tier}${leaf ? ", leaf" : ""})`,
|
|
10652
|
+
node: n,
|
|
10653
|
+
tier,
|
|
10654
|
+
index: i
|
|
10655
|
+
});
|
|
10656
|
+
}
|
|
10657
|
+
if (candidates.length === 0) break;
|
|
10658
|
+
candidates.sort((a, b) => a.tier - b.tier || b.minutesSaved - a.minutesSaved);
|
|
10659
|
+
for (const c of candidates) {
|
|
10660
|
+
if (overBy <= 0) break;
|
|
10661
|
+
const n = c.node;
|
|
10662
|
+
const target = n.depth_variants ? n.depth_variants[c.toDepth] : Math.max(5, Math.round(n.estimated_minutes * 0.6));
|
|
10663
|
+
const saved = n.estimated_minutes - target;
|
|
10664
|
+
if (saved <= 0) continue;
|
|
10665
|
+
n.estimated_minutes = target;
|
|
10666
|
+
n.depth_hint = c.toDepth;
|
|
10667
|
+
applied.push({ nodeId: n.id, fromDepth: c.fromDepth, toDepth: c.toDepth, minutesSaved: saved, reason: c.reason });
|
|
10668
|
+
mutated.add(n.id);
|
|
10669
|
+
overBy -= saved;
|
|
10670
|
+
}
|
|
10671
|
+
}
|
|
10672
|
+
const finalTotal = total();
|
|
10673
|
+
const deficitMinutes = Math.max(0, finalTotal - budgetMinutes);
|
|
10674
|
+
return {
|
|
10675
|
+
unchanged: applied.length === 0,
|
|
10676
|
+
applied,
|
|
10677
|
+
mutatedNodeIds: [...mutated],
|
|
10678
|
+
escalate: deficitMinutes > 0,
|
|
10679
|
+
deficitMinutes
|
|
10680
|
+
};
|
|
10681
|
+
}
|
|
10682
|
+
|
|
10683
|
+
// src/services/curriculumPlannerService.ts
|
|
10538
10684
|
var asArr = (v) => Array.isArray(v) ? v : [];
|
|
10539
10685
|
var asStr = (v, dflt = "") => typeof v === "string" ? v : dflt;
|
|
10540
10686
|
var asNum = (v, dflt) => typeof v === "number" && Number.isFinite(v) ? v : dflt;
|
|
@@ -10574,7 +10720,20 @@ function normalizePlanningGraph(raw) {
|
|
|
10574
10720
|
suggest: asStr(c.suggest, "provide_full")
|
|
10575
10721
|
})),
|
|
10576
10722
|
references: asArr(n.references).map((ref) => ({ file: asStr(ref.file), evidence: asStr(ref.evidence) })).filter((ref) => ref.file),
|
|
10577
|
-
phase_id: asStr(n.phase_id)
|
|
10723
|
+
phase_id: asStr(n.phase_id),
|
|
10724
|
+
user_visible_deliverable: asStr(n.user_visible_deliverable),
|
|
10725
|
+
depth_variants: (() => {
|
|
10726
|
+
const dv = n.depth_variants;
|
|
10727
|
+
if (!dv) return void 0;
|
|
10728
|
+
return { ulo: Math.max(0, Math.round(asNum(dv.ulo, 0))), cio: Math.max(0, Math.round(asNum(dv.cio, 0))), sio: Math.max(0, Math.round(asNum(dv.sio, 0))) };
|
|
10729
|
+
})(),
|
|
10730
|
+
depth_scaffold_candidates: asArr(n.depth_scaffold_candidates).map((c) => ({
|
|
10731
|
+
from_depth: asStr(c.from_depth, "sio"),
|
|
10732
|
+
to_depth: asStr(c.to_depth, "cio"),
|
|
10733
|
+
minutes_saved: Math.max(0, Math.round(asNum(c.minutes_saved, 0))),
|
|
10734
|
+
reason: asStr(c.reason)
|
|
10735
|
+
})),
|
|
10736
|
+
is_core: n.is_core === true
|
|
10578
10737
|
});
|
|
10579
10738
|
}
|
|
10580
10739
|
for (const e of asArr(r.dependency_edges)) {
|
|
@@ -10618,7 +10777,9 @@ function normalizePlanningGraph(raw) {
|
|
|
10618
10777
|
completion_level: "standard",
|
|
10619
10778
|
scaffold_candidates: [],
|
|
10620
10779
|
references: [],
|
|
10621
|
-
phase_id: ""
|
|
10780
|
+
phase_id: "",
|
|
10781
|
+
user_visible_deliverable: "",
|
|
10782
|
+
is_core: false
|
|
10622
10783
|
});
|
|
10623
10784
|
for (const p of asStrArr(c.prerequisites)) {
|
|
10624
10785
|
edges.push({ from: p, to: asStr(c.id), kind: "knowledge", reason: "concept prerequisite" });
|
|
@@ -10655,7 +10816,9 @@ function normalizePlanningGraph(raw) {
|
|
|
10655
10816
|
completion_level: "standard",
|
|
10656
10817
|
scaffold_candidates: [],
|
|
10657
10818
|
references: [],
|
|
10658
|
-
phase_id: ""
|
|
10819
|
+
phase_id: "",
|
|
10820
|
+
user_visible_deliverable: "",
|
|
10821
|
+
is_core: false
|
|
10659
10822
|
});
|
|
10660
10823
|
if (prev) edges.push({ from: prev, to: id, kind: "task", reason: "roadmap sequence" });
|
|
10661
10824
|
prev = id;
|
|
@@ -10691,13 +10854,15 @@ function normalizePlanningGraph(raw) {
|
|
|
10691
10854
|
completion_level: "standard",
|
|
10692
10855
|
scaffold_candidates: [],
|
|
10693
10856
|
references: [],
|
|
10694
|
-
phase_id: ""
|
|
10857
|
+
phase_id: "",
|
|
10858
|
+
user_visible_deliverable: "",
|
|
10859
|
+
is_core: false
|
|
10695
10860
|
});
|
|
10696
10861
|
if (prev) edges.push({ from: prev, to: id, kind: "task", reason: "feature build order" });
|
|
10697
10862
|
prev = id;
|
|
10698
10863
|
}
|
|
10699
10864
|
if (stepCount === 0 && fid) {
|
|
10700
|
-
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: "" });
|
|
10865
|
+
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: "", user_visible_deliverable: "", is_core: false });
|
|
10701
10866
|
}
|
|
10702
10867
|
}
|
|
10703
10868
|
}
|
|
@@ -10859,6 +11024,39 @@ function computePackingSpec(constraints) {
|
|
|
10859
11024
|
sessionDurationMinutes: constraints.session_duration_minutes
|
|
10860
11025
|
};
|
|
10861
11026
|
}
|
|
11027
|
+
var filledOf = (s) => s.knowledgeMinutes + s.practiceMinutes;
|
|
11028
|
+
function cutBackToCheckpoint(current, nodeById, spec, warnings) {
|
|
11029
|
+
const budget = spec.contentBudget;
|
|
11030
|
+
const minFill = budget * (1 - SESSION_CUT_TOLERANCE);
|
|
11031
|
+
const hasPartAfter = new Array(current.entries.length).fill(false);
|
|
11032
|
+
let seenPart = false;
|
|
11033
|
+
for (let i = current.entries.length - 1; i >= 0; i--) {
|
|
11034
|
+
hasPartAfter[i] = seenPart;
|
|
11035
|
+
if (current.entries[i].totalParts > 1) seenPart = true;
|
|
11036
|
+
}
|
|
11037
|
+
let bestIdx = -1;
|
|
11038
|
+
let cumulative = 0;
|
|
11039
|
+
for (let i = 0; i < current.entries.length; i++) {
|
|
11040
|
+
const e = current.entries[i];
|
|
11041
|
+
cumulative += e.minutes;
|
|
11042
|
+
if (hasPartAfter[i] || e.totalParts > 1) continue;
|
|
11043
|
+
const n = nodeById.get(e.id);
|
|
11044
|
+
if (!n || n.user_visible_deliverable.trim().length === 0) continue;
|
|
11045
|
+
if (cumulative > budget || cumulative < minFill) continue;
|
|
11046
|
+
bestIdx = i;
|
|
11047
|
+
}
|
|
11048
|
+
if (bestIdx < 0) {
|
|
11049
|
+
warnings.push("no-checkpoint-within-tolerance: session cut at " + filledOf(current) + "m without a user-visible deliverable");
|
|
11050
|
+
return [];
|
|
11051
|
+
}
|
|
11052
|
+
const displacedEntries = current.entries.splice(bestIdx + 1);
|
|
11053
|
+
for (const e of displacedEntries) {
|
|
11054
|
+
if (nodeById.get(e.id)?.kind === "concept") current.knowledgeMinutes -= e.minutes;
|
|
11055
|
+
else current.practiceMinutes -= e.minutes;
|
|
11056
|
+
}
|
|
11057
|
+
current.nodeIds = current.entries.map((e) => e.id);
|
|
11058
|
+
return displacedEntries.map((e) => nodeById.get(e.id)).filter((n) => n != null);
|
|
11059
|
+
}
|
|
10862
11060
|
function packUnitSessions(group, nodeById, spec, warnings) {
|
|
10863
11061
|
const sessions = [];
|
|
10864
11062
|
const fresh = () => ({ groupId: group.key, nodeIds: [], entries: [], knowledgeMinutes: 0, practiceMinutes: 0, oversized: false });
|
|
@@ -10868,7 +11066,9 @@ function packUnitSessions(group, nodeById, spec, warnings) {
|
|
|
10868
11066
|
current = fresh();
|
|
10869
11067
|
};
|
|
10870
11068
|
const filled = () => current.knowledgeMinutes + current.practiceMinutes;
|
|
10871
|
-
|
|
11069
|
+
const ids = [...group.orderedIds];
|
|
11070
|
+
while (ids.length > 0) {
|
|
11071
|
+
const id = ids.shift();
|
|
10872
11072
|
const node = nodeById.get(id);
|
|
10873
11073
|
const isKnowledge = node.kind === "concept";
|
|
10874
11074
|
if (node.estimated_minutes > spec.contentBudget) {
|
|
@@ -10904,7 +11104,16 @@ function packUnitSessions(group, nodeById, spec, warnings) {
|
|
|
10904
11104
|
continue;
|
|
10905
11105
|
}
|
|
10906
11106
|
const minutes = node.estimated_minutes;
|
|
10907
|
-
if (current.entries.length > 0 && filled() + minutes > spec.contentBudget)
|
|
11107
|
+
if (current.entries.length > 0 && filled() + minutes > spec.contentBudget) {
|
|
11108
|
+
const displaced = cutBackToCheckpoint(current, nodeById, spec, warnings);
|
|
11109
|
+
if (displaced.length > 0) {
|
|
11110
|
+
ids.unshift(id);
|
|
11111
|
+
for (let di = displaced.length - 1; di >= 0; di--) ids.unshift(displaced[di].id);
|
|
11112
|
+
flush();
|
|
11113
|
+
continue;
|
|
11114
|
+
}
|
|
11115
|
+
flush();
|
|
11116
|
+
}
|
|
10908
11117
|
if (isKnowledge) current.knowledgeMinutes += minutes;
|
|
10909
11118
|
else current.practiceMinutes += minutes;
|
|
10910
11119
|
current.entries.push({ id, minutes, part: 1, totalParts: 1 });
|
|
@@ -11214,6 +11423,19 @@ async function buildCurriculumPlan(rawGraph, options) {
|
|
|
11214
11423
|
const graph = normalizePlanningGraph(rawGraph);
|
|
11215
11424
|
warnings.push(...graph.warnings);
|
|
11216
11425
|
assertAcyclic(graph.nodes, graph.edges);
|
|
11426
|
+
let reconcileSummary = null;
|
|
11427
|
+
if (typeof constraints.total_sessions === "number" && constraints.total_sessions > 0) {
|
|
11428
|
+
const spec0 = computePackingSpec(constraints);
|
|
11429
|
+
const budgetMinutes = constraints.total_sessions * spec0.contentBudget;
|
|
11430
|
+
reconcileSummary = reconcilePlanDepth(graph.nodes, graph.edges, spec0, budgetMinutes);
|
|
11431
|
+
if (!reconcileSummary.unchanged) {
|
|
11432
|
+
const saved = reconcileSummary.applied.reduce((a, x) => a + x.minutesSaved, 0);
|
|
11433
|
+
warnings.push(`depth reconcile: ${reconcileSummary.applied.length} downgrade(s), saved ${saved}m across ${reconcileSummary.mutatedNodeIds.length} node(s)`);
|
|
11434
|
+
}
|
|
11435
|
+
if (reconcileSummary.escalate) {
|
|
11436
|
+
warnings.push(`budget_escalation: deficit ${reconcileSummary.deficitMinutes}m after exhausting non-core depth candidates (budget ${constraints.total_sessions * computePackingSpec(constraints).contentBudget}m) \u2014 human review required`);
|
|
11437
|
+
}
|
|
11438
|
+
}
|
|
11217
11439
|
const orderedIds = topoSort(graph.nodes, graph.edges);
|
|
11218
11440
|
const nodeById = new Map(graph.nodes.map((n) => [n.id, n]));
|
|
11219
11441
|
const spec = computePackingSpec(constraints);
|
|
@@ -27157,6 +27379,7 @@ Your task is to author a canonical, publication-grade learning artifact of type
|
|
|
27157
27379
|
${langDirective}
|
|
27158
27380
|
${headingDirective}
|
|
27159
27381
|
2. NON-MOCK CODE INVARIANT: Any code snippet provided MUST be 100% syntactically valid, idiomatic, and executable without placeholders or fake functions.
|
|
27382
|
+
2b. IDENTIFIER GROUND TRUTH: Never derive identifier casing/spelling from glossary term or concept names (they are pedagogical labels). Copy identifiers EXACTLY from the canonical LESSON and REFERENCE_PACK ground truth present in the context.
|
|
27160
27383
|
3. PEDAGOGICAL GROUNDING: Strictly align with the ${pedagogy.toUpperCase()} model, Bloom's Revised Taxonomy, and IEEE/ACM CS2023 guidelines.
|
|
27161
27384
|
4. SCAFFOLDING LEVEL: "${scaffoldingLevel.toUpperCase()}".${scaffoldingRule}
|
|
27162
27385
|
5. TARGET AUDIENCE: ${gradeLevel ? `Grade ${gradeLevel}, ` : ""}${targetAge} on ${hwStr}.${deviceRule}${classDynamicsRule}${extraContextRule}
|
|
@@ -31514,6 +31737,6 @@ function renderMediaPlaceholder(entry) {
|
|
|
31514
31737
|
return `> \u{1F5BC}\uFE0F [\u1EA2nh \u0111ang ch\u1EDD: ${entry.name} \u2014 s\u1EBD \u0111\u01B0\u1EE3c t\u1EA1o sau khi duy\u1EC7t media]`;
|
|
31515
31738
|
}
|
|
31516
31739
|
|
|
31517
|
-
export { ARTIFACT_DEPENDENCY_ROUTING, ARTIFACT_EXECUTION_ORDER, AcademicAuditor, ActionableRepairActionSchema, ActionableRepairPromptSchema, ActiveLearningWorkflowSchema, ActivityLabSchema, ActivitySeqRowSchema, ActivityStepSchema, ArtifactContractRowSchema, AssessmentMapRowSchema, AssessmentObjectiveSchema, BLOOM_ACTION_VERBS, BUNDLED_STANDARDS_PACK_IDS, BellRingerDaySchema, BellRingerSchema, BloomHintSchema, BloomLevelSchema, BloomTaxonomyEvaluator, BronzeTierSchema, CERConclusionSchema, CURRICULUM_SLASH_COMMANDS, CardTierEnum, ChoiceBoardRubricRowSchema, ChoiceBoardSchema, ChoiceRuleSchema, ChoiceSquareSchema, ClassificationSchema, CodeHardwareFeasibilityEvaluator, CodeLabSchema, CodeSnippetSchema, CompetencyRubricRowSchema, ComputationalThinkingSchema, ConceptPrerequisiteEdgeSchema, ConceptSpiralEncounterSchema, ConstructiveAlignmentEvaluator, CoreConceptSchema, CourseObjectiveSchema, CoverageReportSchema, CrossArtifactDriftEvaluator, CurriculumArtifactSchema, CurriculumError, CurriculumPlanSchema, CurriculumQualityReportSchema, DEFAULT_ARTIFACT_STREAM_IDLE_MS, DEFAULT_ARTIFACT_STREAM_TOTAL_MS, DEFAULT_ENABLED_PROVIDERS, DEFAULT_GATE_SETTINGS, DEFAULT_KX_PRIORITIES, DEFAULT_LESSON_PRIORITIES, DEFAULT_OVERHEAD_RATIO, DEFAULT_STREAM_IDLE_MS, DEFAULT_STREAM_TOTAL_MS, DependencyEdgeSchema, DepthAssignmentSchema, DepthLevelSchema, DeterministicPipelineRunner, DeterministicStructuralLinter, DiagnosticQuestionSchema, DiagnosticQuizSchema, EDPPhaseEnum, ENVIRONMENT_PROVISIONING_MODELS, EXPOSITION_REL, EntryLevelSchema, ExitTicketBugHuntSchema, ExitTicketMetacognitionSchema, ExitTicketQuickItemSchema, ExitTicketRecallPromptSchema, ExitTicketSchema, ExperimentalDesignSchema, ExpositionApprovalError, ExtensionChallengeSchema, ExtensionSchema, FileSystemCurriculumAdapter, FiveEFlowPhaseSchema, FiveEInstructionalEvaluator, FiveEPhaseEnum, FrameworkMappingSchema, FrameworkPackManifestSchema, FrameworkPackSchema, FrameworkStatementSchema, GeneratedSlideArraySchema, GeneratedSlideSchema, GlossaryQuickRefRowSchema, GlossarySchema, GlossaryTermSchema, GoldTierSchema, GradeBandSchema, GraphicOrganizerItemSchema, GraphicOrganizerSchema, HandoutSchema, HandoutSectionSchema, HybridBlueprintArraySchema, HybridBlueprintItemSchema, HybridDeckSlideArraySchema, HybridDeckSlideSchema, HybridPipelineError, InstructionSectionSchema, InstructionStepSchema, JUDGE_AUTO_APPROVE_THRESHOLD, JUDGE_ESCALATE_THRESHOLD, JudgeCriterionSchema, LAYER_IDLE_BUDGET_MS, LAYER_TOTAL_BUDGET_MS, LLMJudgeEngine, LabTierTaskSchema, LearningObjectiveInputSchema, LearningObjectiveRowSchema, LessonEntitySchema, LessonFlowPhaseSchema, LessonPlan5ESchema, LessonPlanEDPSchema, LessonPlanSchema, LessonSectionSchema, LocalWorkspaceManager, MAX_AUTONOMOUS_REPAIR_TURNS, MAX_IN_SESSION_SETUP_MINUTES, MAX_NEW_CONCEPTS_PER_SESSION_ADULT, MAX_NEW_CONCEPTS_PER_SESSION_K12, MacroPedagogyPlanAuditSchema, MappingKindSchema, MarpSlideSchema, MasteryGateSchema, MediaError, MediaLedger, MentorCheatsheetSchema, MilestoneInputSchema, MisconceptionEvaluator, MisconceptionSchema, ModelPolicyResolver, NVIDIA_MODELS, NodeKindSchema, OrganizerTypeEnum, PhaseInputSchema, PlanConstraintsSchema, PlannerInputSchema, PlanningGraphSchema, PlanningNodeSchema, PrerequisiteDecisionEntrySchema, PrerequisiteDecisionSchema, ProductGoalSchema, ProgressiveHintsSchema, ProjectGraphAuditSchema, ProjectGraphSchema, ProjectInstructionSchema, ProjectProfileSchema, QualityAuditVerdictSchema, QuizOptionSchema, RecordProvenanceSchema, ResourceMapRowSchema, ReviewGameExportRowSchema, ReviewGameQuestionSchema, ReviewGameSchema, RoadmapInputSchema, RotationStationSchema, RubricCriteriaSchema, RubricSchema, SATELLITE_LESSON_PRIORITIES, SLIDE_CANONICAL_METHODOLOGY, STANDARD_REF_REGEX, STANDARD_SOT_FILES, STUDENT_FRICTION_MULTIPLIER, ScaffoldDecisionEntrySchema, ScaffoldDecisionSchema, ScienceLabSchema, ScoringRubricRowSchema, SelfLabSchema, SelfPacedBundleSchema, SelfPacedChallengeSchema, SessionPlanSchema, SessionZpdStatusSchema, SilverTierSchema, SlideBlueprintArraySchema, SlideBlueprintItemSchema, SlideDeckSchema, StandardizedTermRowSchema, StandardsRegistryAdapter, StationRecordRowSchema, StationRotationSchema, StationTypeEnum, SupabaseCurriculumAdapter, TaskCardSchema, TaskCardsSchema, TeacherGuideSchema, TeachingScriptPhaseSchema, TierLevelEnum, TierObjectiveSchema, TieredPracticeSchema, TranslationPolicySchema, TroubleshootingEntrySchema, TroubleshootingRowSchema, UnitPlanSchema, UserJourneySchema, WalkingSkeletonSchema, WorksheetItemSchema, WorksheetItemTypeEnum, WorksheetPartSchema, WorksheetSchema, ZpdVerdictSchema, activityTools, analystTools, analyzeProjectCreationIntent, assembleTranslatedTemplate, assertAcyclic, assessorTools, assignDepths, atomicWriteFileSync, auditCurriculumPlanFlow, auditCurriculumQualityFlow, auditProjectGraphFlow, auditQualityReport, buildActivityPrompt, buildArtifactPrompt, buildCodeLabPrompt, buildConceptPrerequisites, buildCurriculumContext, buildCurriculumPlan, buildCurriculumPlanJudgePrompt, buildDeliveryPackages, buildDiagnosticQuizPrompt, buildDomainLexiconGuardrail, buildExpositionContext, buildExpositionExcerpt, buildExtensionPrompt, buildHandoutPrompt, buildHeadingDirective, buildHtmlDeckSlidePrompt, buildImagePrompt, buildJudgePrompt, buildLanguageDirective, buildLessonEntityJson, buildLessonExcerpt, buildLessonMasterPrompt, buildMarpMarkdownSlidePrompt, buildMasteryGates, buildProjectGraphJudgePrompt, buildProjectInstructionPrompt, buildSatelliteContext, buildSectionAwareExcerpt, buildSelfLabPrompt, buildSessionSliceContext, buildSlidesPrompt, buildStandardStackMarkdown, buildStandardsContext, buildStandardsContextBlock, buildTeacherGuidePrompt, buildWalkingSkeleton, buildWorksheetPrompt, checkSessionZpd, closeTruncatedJson, computeConceptSpiralProgression, computeContentHash, computePackingSpec, conductPreliminaryResearch, contentTools, convertRoadmapToFoundationSot, createAiInferenceError, createContextMissingError, createCurriculumStorage, createIdleAbortController, createStreamAbortController, createStreamAbortSignal, createStreamChunkExtractor, curateMediaLedger, designerTools, detectProjectPedagogy, dropCyclicConceptEdges, emitUsage, ensureExpositionForLesson, ensureKnowledgeExposition, entityRowAssignedTo, evaluateActivityAlignment, evaluateStandardsCoverage, executeCurriculumCommand, executeSlideProductionWorkflow, exportAllProjectQuizzes, expositionCacheKey, extractActivityContractRows, extractAssessmentMap, extractConditionalSections, extractCurriculumHorizon, extractDeclaredLanguage, extractEchoSections, extractJsonArray, extractRequiredSections, extractScopeSequenceRows, extractSectionHeadings, extractSessionSlice, extractStandardRefs, extractStreamChunk, extractSymbolLedger, extractThoughtAndContent, extractTieredScaffoldingBlock, findStandardStatement, formatQuizzesToCsv, fulfillMediaLedger, gateModeFor, generateActivityFlow, generateCodeLabFlow, generateDiagnosticQuizFlow, generateEducationalImage, generateExtensionFlow, generateHandoutFlow, generateLessonMasterFlow, generateMilestoneCurriculumBundle, generatePhase1SotArtifacts, generatePhase2SotArtifacts, generateProjectInstruction, generateProjectInstructionFlow, generateRoadmapCurriculum, generateSelfLabFlow, generateSelfPacedBundle, generateSingleArtifact, generateSlidesFlow, generateTeacherGuideFlow, generateWorksheetFlow, getAIModel, getArtifactMetadata, getDesignatedFallbackChain, getDesignatedFallbackConfig, getLessonMetadata, getProjectArtifactScope, getProjectStatusReport, getSmartResumeContext, glossaryTermsForSession, illustratorTools, importRoadmapToProject, ingestProjectGraphIntoProject, initializeProjectInStorage, injectMediaIntoMarkdown, isActivityAlignmentLogOnly, isExpositionFresh, isModelAllowed, isProviderEnabled, isTranslationDue, lintAndSanitizeArtifact, lintCurriculumFramework, lintFrameworkPack, loadAuthoringTemplate, loadCurriculumTemplate, loadSotTemplate, normalizePlanningGraph, packagerTools, parseAllSessions, parseGateSettings, parseQuizMarkdown, parseRoadmapJsonToProjectPayload, produceBatchLessons, produceSingleLesson, publishToGitHub, publishToSupabase, rankGenCandidates, renderAssignedRowsTable, renderEntitySlotsForType, renderFrameworkFromPlan, renderHorizonPromptBlock, renderMediaPlaceholder, researcherTools, resolveApiKey, resolveArtifactTemplate, resolveGateSettings, resolveStandardsPacks, resolveStreamBudget, resolveTargetLanguageCode, resolveTranslationTargets, reviewerTools, runCurriculumAIInference, safeParseJson, searchEducationalImages, searchEducationalVideos, selectStatementsForLesson, serializeActivityToMarkdown, serializeCodeLabToMarkdown, serializeDiagnosticQuizToMarkdown, serializeHandoutToMarkdown, serializeLessonToMarkdown, serializeProjectInstructionToMarkdown, serializeSelfLabToMarkdown, slugifyProjectName, streamCurriculumAIInference, streamCurriculumAIInferenceWithTools, streamDiagnosticQuizFlow, streamLLMWithFallback, streamLayerPrefillWithFallback, streamLessonMasterFlow, streamSelfLabFlow, stripHeadingKey, stripLlmJsonWrappers, stripTemplateFrontmatter, targetLanguageDisplayName, techSmeTools, topoSort, translateTemplate, uploadAssetToBucket, validateArtifactDependencies, validateCurriculumPlan, validateFrameworkPack, validateHorizonCompliance, validateHybridDeckSlides, validateMarkdownTables, validateMermaidSyntax, withAutoRepair };
|
|
31740
|
+
export { ARTIFACT_DEPENDENCY_ROUTING, ARTIFACT_EXECUTION_ORDER, AcademicAuditor, ActionableRepairActionSchema, ActionableRepairPromptSchema, ActiveLearningWorkflowSchema, ActivityLabSchema, ActivitySeqRowSchema, ActivityStepSchema, ArtifactContractRowSchema, AssessmentMapRowSchema, AssessmentObjectiveSchema, BLOOM_ACTION_VERBS, BUNDLED_STANDARDS_PACK_IDS, BellRingerDaySchema, BellRingerSchema, BloomHintSchema, BloomLevelSchema, BloomTaxonomyEvaluator, BronzeTierSchema, CERConclusionSchema, CURRICULUM_SLASH_COMMANDS, CardTierEnum, ChoiceBoardRubricRowSchema, ChoiceBoardSchema, ChoiceRuleSchema, ChoiceSquareSchema, ClassificationSchema, CodeHardwareFeasibilityEvaluator, CodeLabSchema, CodeSnippetSchema, CompetencyRubricRowSchema, ComputationalThinkingSchema, ConceptPrerequisiteEdgeSchema, ConceptSpiralEncounterSchema, ConstructiveAlignmentEvaluator, CoreConceptSchema, CourseObjectiveSchema, CoverageReportSchema, CrossArtifactDriftEvaluator, CurriculumArtifactSchema, CurriculumError, CurriculumPlanSchema, CurriculumQualityReportSchema, DEFAULT_ARTIFACT_STREAM_IDLE_MS, DEFAULT_ARTIFACT_STREAM_TOTAL_MS, DEFAULT_ENABLED_PROVIDERS, DEFAULT_GATE_SETTINGS, DEFAULT_KX_PRIORITIES, DEFAULT_LESSON_PRIORITIES, DEFAULT_OVERHEAD_RATIO, DEFAULT_STREAM_IDLE_MS, DEFAULT_STREAM_TOTAL_MS, DependencyEdgeSchema, DepthAssignmentSchema, DepthLevelSchema, DeterministicPipelineRunner, DeterministicStructuralLinter, DiagnosticQuestionSchema, DiagnosticQuizSchema, EDPPhaseEnum, ENVIRONMENT_PROVISIONING_MODELS, EXPOSITION_REL, EntryLevelSchema, ExitTicketBugHuntSchema, ExitTicketMetacognitionSchema, ExitTicketQuickItemSchema, ExitTicketRecallPromptSchema, ExitTicketSchema, ExperimentalDesignSchema, ExpositionApprovalError, ExtensionChallengeSchema, ExtensionSchema, FileSystemCurriculumAdapter, FiveEFlowPhaseSchema, FiveEInstructionalEvaluator, FiveEPhaseEnum, FrameworkMappingSchema, FrameworkPackManifestSchema, FrameworkPackSchema, FrameworkStatementSchema, GeneratedSlideArraySchema, GeneratedSlideSchema, GlossaryQuickRefRowSchema, GlossarySchema, GlossaryTermSchema, GoldTierSchema, GradeBandSchema, GraphicOrganizerItemSchema, GraphicOrganizerSchema, HandoutSchema, HandoutSectionSchema, HybridBlueprintArraySchema, HybridBlueprintItemSchema, HybridDeckSlideArraySchema, HybridDeckSlideSchema, HybridPipelineError, InstructionSectionSchema, InstructionStepSchema, JUDGE_AUTO_APPROVE_THRESHOLD, JUDGE_ESCALATE_THRESHOLD, JudgeCriterionSchema, LAYER_IDLE_BUDGET_MS, LAYER_TOTAL_BUDGET_MS, LLMJudgeEngine, LabTierTaskSchema, LearningObjectiveInputSchema, LearningObjectiveRowSchema, LessonEntitySchema, LessonFlowPhaseSchema, LessonPlan5ESchema, LessonPlanEDPSchema, LessonPlanSchema, LessonSectionSchema, LocalWorkspaceManager, MAX_AUTONOMOUS_REPAIR_TURNS, MAX_IN_SESSION_SETUP_MINUTES, MAX_NEW_CONCEPTS_PER_SESSION_ADULT, MAX_NEW_CONCEPTS_PER_SESSION_K12, MacroPedagogyPlanAuditSchema, MappingKindSchema, MarpSlideSchema, MasteryGateSchema, MediaError, MediaLedger, MentorCheatsheetSchema, MilestoneInputSchema, MisconceptionEvaluator, MisconceptionSchema, ModelPolicyResolver, NVIDIA_MODELS, NodeKindSchema, OrganizerTypeEnum, PhaseInputSchema, PlanConstraintsSchema, PlannerInputSchema, PlanningGraphSchema, PlanningNodeSchema, PrerequisiteDecisionEntrySchema, PrerequisiteDecisionSchema, ProductGoalSchema, ProgressiveHintsSchema, ProjectGraphAuditSchema, ProjectGraphSchema, ProjectInstructionSchema, ProjectProfileSchema, QualityAuditVerdictSchema, QuizOptionSchema, RecordProvenanceSchema, ResourceMapRowSchema, ReviewGameExportRowSchema, ReviewGameQuestionSchema, ReviewGameSchema, RoadmapInputSchema, RotationStationSchema, RubricCriteriaSchema, RubricSchema, SATELLITE_LESSON_PRIORITIES, SESSION_CUT_TOLERANCE, SLIDE_CANONICAL_METHODOLOGY, STANDARD_REF_REGEX, STANDARD_SOT_FILES, STUDENT_FRICTION_MULTIPLIER, ScaffoldDecisionEntrySchema, ScaffoldDecisionSchema, ScienceLabSchema, ScoringRubricRowSchema, SelfLabSchema, SelfPacedBundleSchema, SelfPacedChallengeSchema, SessionPlanSchema, SessionZpdStatusSchema, SilverTierSchema, SlideBlueprintArraySchema, SlideBlueprintItemSchema, SlideDeckSchema, StandardizedTermRowSchema, StandardsRegistryAdapter, StationRecordRowSchema, StationRotationSchema, StationTypeEnum, SupabaseCurriculumAdapter, TaskCardSchema, TaskCardsSchema, TeacherGuideSchema, TeachingScriptPhaseSchema, TierLevelEnum, TierObjectiveSchema, TieredPracticeSchema, TranslationPolicySchema, TroubleshootingEntrySchema, TroubleshootingRowSchema, UnitPlanSchema, UserJourneySchema, WalkingSkeletonSchema, WorksheetItemSchema, WorksheetItemTypeEnum, WorksheetPartSchema, WorksheetSchema, ZpdVerdictSchema, activityTools, analystTools, analyzeProjectCreationIntent, assembleTranslatedTemplate, assertAcyclic, assessorTools, assignDepths, atomicWriteFileSync, auditCurriculumPlanFlow, auditCurriculumQualityFlow, auditProjectGraphFlow, auditQualityReport, buildActivityPrompt, buildArtifactPrompt, buildCodeLabPrompt, buildConceptPrerequisites, buildCurriculumContext, buildCurriculumPlan, buildCurriculumPlanJudgePrompt, buildDeliveryPackages, buildDiagnosticQuizPrompt, buildDomainLexiconGuardrail, buildExpositionContext, buildExpositionExcerpt, buildExtensionPrompt, buildHandoutPrompt, buildHeadingDirective, buildHtmlDeckSlidePrompt, buildImagePrompt, buildJudgePrompt, buildLanguageDirective, buildLessonEntityJson, buildLessonExcerpt, buildLessonMasterPrompt, buildMarpMarkdownSlidePrompt, buildMasteryGates, buildProjectGraphJudgePrompt, buildProjectInstructionPrompt, buildSatelliteContext, buildSectionAwareExcerpt, buildSelfLabPrompt, buildSessionSliceContext, buildSlidesPrompt, buildStandardStackMarkdown, buildStandardsContext, buildStandardsContextBlock, buildTeacherGuidePrompt, buildWalkingSkeleton, buildWorksheetPrompt, checkSessionZpd, classifyDepthCandidates, closeTruncatedJson, computeConceptSpiralProgression, computeContentHash, computePackingSpec, conductPreliminaryResearch, contentTools, convertRoadmapToFoundationSot, createAiInferenceError, createContextMissingError, createCurriculumStorage, createIdleAbortController, createStreamAbortController, createStreamAbortSignal, createStreamChunkExtractor, curateMediaLedger, designerTools, detectProjectPedagogy, dropCyclicConceptEdges, emitUsage, ensureExpositionForLesson, ensureKnowledgeExposition, entityRowAssignedTo, evaluateActivityAlignment, evaluateStandardsCoverage, executeCurriculumCommand, executeSlideProductionWorkflow, exportAllProjectQuizzes, expositionCacheKey, extractActivityContractRows, extractAssessmentMap, extractConditionalSections, extractCurriculumHorizon, extractDeclaredLanguage, extractEchoSections, extractJsonArray, extractRequiredSections, extractScopeSequenceRows, extractSectionHeadings, extractSessionSlice, extractStandardRefs, extractStreamChunk, extractSymbolLedger, extractThoughtAndContent, extractTieredScaffoldingBlock, findStandardStatement, formatQuizzesToCsv, fulfillMediaLedger, gateModeFor, generateActivityFlow, generateCodeLabFlow, generateDiagnosticQuizFlow, generateEducationalImage, generateExtensionFlow, generateHandoutFlow, generateLessonMasterFlow, generateMilestoneCurriculumBundle, generatePhase1SotArtifacts, generatePhase2SotArtifacts, generateProjectInstruction, generateProjectInstructionFlow, generateRoadmapCurriculum, generateSelfLabFlow, generateSelfPacedBundle, generateSingleArtifact, generateSlidesFlow, generateTeacherGuideFlow, generateWorksheetFlow, getAIModel, getArtifactMetadata, getDesignatedFallbackChain, getDesignatedFallbackConfig, getLessonMetadata, getProjectArtifactScope, getProjectStatusReport, getSmartResumeContext, glossaryTermsForSession, illustratorTools, importRoadmapToProject, ingestProjectGraphIntoProject, initializeProjectInStorage, injectMediaIntoMarkdown, isActivityAlignmentLogOnly, isExpositionFresh, isModelAllowed, isProviderEnabled, isTranslationDue, lintAndSanitizeArtifact, lintCurriculumFramework, lintFrameworkPack, loadAuthoringTemplate, loadCurriculumTemplate, loadSotTemplate, normalizePlanningGraph, packUnitSessions, packagerTools, parseAllSessions, parseGateSettings, parseQuizMarkdown, parseRoadmapJsonToProjectPayload, produceBatchLessons, produceSingleLesson, publishToGitHub, publishToSupabase, rankGenCandidates, reconcilePlanDepth, renderAssignedRowsTable, renderEntitySlotsForType, renderFrameworkFromPlan, renderHorizonPromptBlock, renderMediaPlaceholder, researcherTools, resolveApiKey, resolveArtifactTemplate, resolveGateSettings, resolveStandardsPacks, resolveStreamBudget, resolveTargetLanguageCode, resolveTranslationTargets, reviewerTools, runCurriculumAIInference, safeParseJson, searchEducationalImages, searchEducationalVideos, selectStatementsForLesson, serializeActivityToMarkdown, serializeCodeLabToMarkdown, serializeDiagnosticQuizToMarkdown, serializeHandoutToMarkdown, serializeLessonToMarkdown, serializeProjectInstructionToMarkdown, serializeSelfLabToMarkdown, slugifyProjectName, streamCurriculumAIInference, streamCurriculumAIInferenceWithTools, streamDiagnosticQuizFlow, streamLLMWithFallback, streamLayerPrefillWithFallback, streamLessonMasterFlow, streamSelfLabFlow, stripHeadingKey, stripLlmJsonWrappers, stripTemplateFrontmatter, targetLanguageDisplayName, techSmeTools, topoSort, translateTemplate, uploadAssetToBucket, validateArtifactDependencies, validateCurriculumPlan, validateFrameworkPack, validateHorizonCompliance, validateHybridDeckSlides, validateMarkdownTables, validateMermaidSyntax, withAutoRepair };
|
|
31518
31741
|
//# sourceMappingURL=index.mjs.map
|
|
31519
31742
|
//# sourceMappingURL=index.mjs.map
|