@thanh01.pmt/domain-kit 0.2.0 → 0.3.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 (50) hide show
  1. package/dist/{chunk-RAR5MUUK.mjs → chunk-LKSVTRQE.mjs} +76 -6
  2. package/dist/chunk-LKSVTRQE.mjs.map +1 -0
  3. package/dist/{chunk-KPZKPNOJ.mjs → chunk-MCHHEBH3.mjs} +5 -5
  4. package/dist/{chunk-KPZKPNOJ.mjs.map → chunk-MCHHEBH3.mjs.map} +1 -1
  5. package/dist/{chunk-HH4UX65C.mjs → chunk-MSRKUZLY.mjs} +21 -4
  6. package/dist/chunk-MSRKUZLY.mjs.map +1 -0
  7. package/dist/{chunk-WHBAGJWN.mjs → chunk-VCPIWJ7R.mjs} +4 -4
  8. package/dist/chunk-VCPIWJ7R.mjs.map +1 -0
  9. package/dist/{chunk-JE57VFWX.mjs → chunk-Y7MRFFDJ.mjs} +33 -9
  10. package/dist/chunk-Y7MRFFDJ.mjs.map +1 -0
  11. package/dist/curriculumFeedEmitter-FYAWMPE6.mjs +4 -0
  12. package/dist/{curriculumFeedEmitter-UG664SWY.mjs.map → curriculumFeedEmitter-FYAWMPE6.mjs.map} +1 -1
  13. package/dist/{curriculumFeedSchema-TEeQg2bY.d.ts → curriculumFeedSchema-C8ZP3XMi.d.cts} +8 -8
  14. package/dist/{curriculumFeedSchema-TEeQg2bY.d.cts → curriculumFeedSchema-C8ZP3XMi.d.ts} +8 -8
  15. package/dist/feed/index.cjs +92 -5
  16. package/dist/feed/index.cjs.map +1 -1
  17. package/dist/feed/index.d.cts +1 -1
  18. package/dist/feed/index.d.ts +1 -1
  19. package/dist/feed/index.mjs +2 -2
  20. package/dist/graph/index.cjs +31 -7
  21. package/dist/graph/index.cjs.map +1 -1
  22. package/dist/graph/index.d.cts +2 -2
  23. package/dist/graph/index.d.ts +2 -2
  24. package/dist/graph/index.mjs +1 -1
  25. package/dist/{hybridGraphPipeline-DmWRKYXf.d.cts → hybridGraphPipeline-BhFyh3cm.d.cts} +1 -1
  26. package/dist/{hybridGraphPipeline-DVZYLCAQ.d.ts → hybridGraphPipeline-NZAWAPt_.d.ts} +1 -1
  27. package/dist/{hybridGraphSchema-BCgXicgA.d.ts → hybridGraphSchema-nrUeSwpU.d.cts} +15 -15
  28. package/dist/{hybridGraphSchema-BCgXicgA.d.cts → hybridGraphSchema-nrUeSwpU.d.ts} +15 -15
  29. package/dist/index.cjs +125 -14
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +3 -3
  32. package/dist/index.d.ts +3 -3
  33. package/dist/index.mjs +5 -5
  34. package/dist/pipeline/index.cjs +123 -12
  35. package/dist/pipeline/index.cjs.map +1 -1
  36. package/dist/pipeline/index.d.cts +3 -3
  37. package/dist/pipeline/index.d.ts +3 -3
  38. package/dist/pipeline/index.mjs +4 -4
  39. package/dist/schemas/index.cjs +21 -4
  40. package/dist/schemas/index.cjs.map +1 -1
  41. package/dist/schemas/index.d.cts +2 -2
  42. package/dist/schemas/index.d.ts +2 -2
  43. package/dist/schemas/index.mjs +2 -2
  44. package/package.json +10 -9
  45. package/LICENSE +0 -21
  46. package/dist/chunk-HH4UX65C.mjs.map +0 -1
  47. package/dist/chunk-JE57VFWX.mjs.map +0 -1
  48. package/dist/chunk-RAR5MUUK.mjs.map +0 -1
  49. package/dist/chunk-WHBAGJWN.mjs.map +0 -1
  50. package/dist/curriculumFeedEmitter-UG664SWY.mjs +0 -4
@@ -31,9 +31,10 @@ var FeedNodeSchema = z.object({
31
31
  concept_ref: z.string().nullable().default(null),
32
32
  // Progressive-completion bookkeeping (feed v2, additive):
33
33
  // phase_id = development phase that introduces/uses this node;
34
- // introduce_aspect = how the phase teaches a concept node (first intro vs advanced revisit).
34
+ // introduce_aspect = how the phase teaches a concept node (first intro, advanced
35
+ // revisit, or preview — a light ULO awareness pass that is NOT the introduction).
35
36
  phase_id: z.string().default(""),
36
- introduce_aspect: z.enum(["new", "advanced"]).nullable().default(null)
37
+ introduce_aspect: z.enum(["new", "advanced", "preview"]).nullable().default(null)
37
38
  });
38
39
  var FeedEdgeSchema = z.object({
39
40
  from: z.string().min(1),
@@ -92,9 +93,25 @@ function validateCurriculumFeed(feed) {
92
93
  }
93
94
  const phaseIds = parsed.phases.map((p) => p.id);
94
95
  if (new Set(phaseIds).size !== phaseIds.length) throw new Error("curriculum feed contains duplicate phase ids");
96
+ if (parsed.phases.length > 0) {
97
+ const phaseIndexOf = /* @__PURE__ */ new Map();
98
+ parsed.phases.forEach((p, i) => {
99
+ for (const id of p.node_ids) phaseIndexOf.set(id, i);
100
+ });
101
+ for (const e of parsed.dependency_edges) {
102
+ const fromIdx = phaseIndexOf.get(e.from);
103
+ const toIdx = phaseIndexOf.get(e.to);
104
+ if (fromIdx === void 0 || toIdx === void 0) continue;
105
+ if (fromIdx > toIdx) {
106
+ throw new Error(
107
+ "curriculum feed teaching-order violation: prerequisite " + e.from + " (phase " + (fromIdx + 1) + ") is scheduled AFTER its consumer " + e.to + " (phase " + (toIdx + 1) + ")"
108
+ );
109
+ }
110
+ }
111
+ }
95
112
  return parsed;
96
113
  }
97
114
 
98
115
  export { CurriculumFeedSchema, FeedEdgeSchema, FeedGroupingSchema, FeedKeywordsSchema, FeedNodeSchema, FeedPhaseSchema, FeedScaffoldCandidateSchema, validateCurriculumFeed };
99
- //# sourceMappingURL=chunk-HH4UX65C.mjs.map
100
- //# sourceMappingURL=chunk-HH4UX65C.mjs.map
116
+ //# sourceMappingURL=chunk-MSRKUZLY.mjs.map
117
+ //# sourceMappingURL=chunk-MSRKUZLY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/curriculumFeedSchema.ts"],"names":[],"mappings":"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","file":"chunk-MSRKUZLY.mjs","sourcesContent":["import { z } from 'zod';\n\n/**\n * CurriculumFeed v2 — normalized, planner-ready projection of a domain graph.\n * Consumers: curriculum-kit Curriculum Planner (see docs/ideas/2026-08-30-curriculum-feed-v2-output.md).\n * Guarantees enforced here: cycle-free is the CALLER's verifier job; the feed\n * itself guarantees resolution (edges/keywords reference emitted nodes) and\n * non-emptiness.\n */\n\nexport const FeedKeywordsSchema = z.object({\n all: z.array(z.string()).default([]),\n new: z.array(z.string()).default([]),\n prerequisite: z.array(z.string()).default([]),\n});\n\nexport const FeedScaffoldCandidateSchema = z.object({\n item: z.string(),\n reason: z.string().default(''),\n minutes_saved: z.number().int().nonnegative().default(0),\n suggest: z.enum(['provide_full', 'provide_partial', 'provide_reference']).default('provide_full'),\n});\n\nexport const FeedNodeSchema = z.object({\n id: z.string().min(1),\n kind: z.enum(['skill', 'concept', 'product_step']),\n name: z.string().min(1),\n concept_codes: z.array(z.string()).default([]),\n keywords: FeedKeywordsSchema,\n estimated_minutes: z.number().int().nonnegative(),\n bloom_hint: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create']).nullable().default(null),\n depth_hint: z.enum(['ulo', 'cio', 'sio']).nullable().default(null),\n completion_level: z.enum(['mvp', 'standard', 'stretch']).default('standard'),\n scaffolding: z.object({\n scaffold_candidates: z.array(FeedScaffoldCandidateSchema).default([]),\n core_value_minutes: z.number().int().nonnegative().default(0),\n }).default({ scaffold_candidates: [], core_value_minutes: 0 }),\n references: z.array(z.object({ file: z.string().min(1), evidence: z.string().default('') })).default([]),\n feature_id: z.string().nullable().default(null),\n concept_ref: z.string().nullable().default(null),\n // Progressive-completion bookkeeping (feed v2, additive):\n // phase_id = development phase that introduces/uses this node;\n // introduce_aspect = how the phase teaches a concept node (first intro, advanced\n // revisit, or preview — a light ULO awareness pass that is NOT the introduction).\n phase_id: z.string().default(''),\n introduce_aspect: z.enum(['new', 'advanced', 'preview']).nullable().default(null),\n});\n\nexport const FeedEdgeSchema = z.object({\n from: z.string().min(1),\n to: z.string().min(1),\n kind: z.enum(['knowledge', 'task']),\n reason: z.string().default(''),\n});\n\nexport const FeedGroupingSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n node_ids: z.array(z.string()).min(1),\n rationale: z.string().default(''),\n});\n\nexport const FeedPhaseSchema = z.object({\n id: z.string().min(1),\n order: z.number().int().positive(),\n name: z.string().min(1),\n product_completion: z.string().min(1),\n node_ids: z.array(z.string()).min(1),\n});\nexport type FeedPhase = z.infer<typeof FeedPhaseSchema>;\n\nexport const CurriculumFeedSchema = z.object({\n schema_version: z.literal(2),\n source: z.object({\n graph_type: z.enum(['project_graph', 'knowledge_graph', 'hybrid_graph']),\n warnings: z.array(z.string()).default([]),\n hallucination_count: z.number().int().nonnegative().default(0),\n }),\n learning_nodes: z.array(FeedNodeSchema).min(1, 'curriculum feed must contain at least one learning node'),\n dependency_edges: z.array(FeedEdgeSchema).default([]),\n suggested_groupings: z.array(FeedGroupingSchema).default([]),\n // Progressive completion phases (cross-feature). When non-empty, these — not\n // suggested_groupings — define the teaching sequence and unit structure.\n phases: z.array(FeedPhaseSchema).default([]),\n});\n\nexport type CurriculumFeed = z.infer<typeof CurriculumFeedSchema>;\nexport type FeedNode = z.infer<typeof FeedNodeSchema>;\nexport type FeedEdge = z.infer<typeof FeedEdgeSchema>;\nexport type FeedGrouping = z.infer<typeof FeedGroupingSchema>;\n\n/** Strict pre-save resolution validation — fail-closed, no defaulted-empty graphs. */\nexport function validateCurriculumFeed(feed: unknown): CurriculumFeed {\n const parsed = CurriculumFeedSchema.parse(feed);\n const ids = new Set(parsed.learning_nodes.map((n) => n.id));\n if (ids.size !== parsed.learning_nodes.length) {\n throw new Error('curriculum feed contains duplicate node ids');\n }\n for (const e of parsed.dependency_edges) {\n if (!ids.has(e.from) || !ids.has(e.to)) {\n throw new Error('curriculum feed edge ' + e.from + ' -> ' + e.to + ' references unknown node');\n }\n if (e.from === e.to) throw new Error('curriculum feed self-loop edge on ' + e.from);\n }\n for (const g of parsed.suggested_groupings) {\n for (const id of g.node_ids) {\n if (!ids.has(id)) throw new Error('grouping ' + g.id + ' references unknown node ' + id);\n }\n }\n for (const ph of parsed.phases) {\n for (const id of ph.node_ids) {\n if (!ids.has(id)) throw new Error('phase ' + ph.id + ' references unknown node ' + id);\n }\n }\n const phaseIds = parsed.phases.map((p) => p.id);\n if (new Set(phaseIds).size !== phaseIds.length) throw new Error('curriculum feed contains duplicate phase ids');\n // Teaching-order invariant (2026-09-17 incident): when phases define the\n // teaching sequence, a prerequisite must live in the same or an EARLIER\n // phase than its consumer. Without this check a self-contradictory feed\n // (backwards phase-crossing edge) sailed through emission and only exploded\n // much later inside the planner as \"Teaching-order violation in session ...\"\n // — far from the constructor that produced the contradiction.\n if (parsed.phases.length > 0) {\n const phaseIndexOf = new Map<string, number>();\n parsed.phases.forEach((p, i) => {\n for (const id of p.node_ids) phaseIndexOf.set(id, i);\n });\n for (const e of parsed.dependency_edges) {\n const fromIdx = phaseIndexOf.get(e.from);\n const toIdx = phaseIndexOf.get(e.to);\n if (fromIdx === undefined || toIdx === undefined) continue; // node outside the phase sequence\n if (fromIdx > toIdx) {\n throw new Error(\n 'curriculum feed teaching-order violation: prerequisite ' + e.from +\n ' (phase ' + (fromIdx + 1) + ') is scheduled AFTER its consumer ' + e.to +\n ' (phase ' + (toIdx + 1) + ')',\n );\n }\n }\n }\n return parsed;\n}\n"]}
@@ -444,8 +444,8 @@ var ProjectConceptLinkSchema = z.object({
444
444
  });
445
445
  var ConceptIntroductionSchema = z.object({
446
446
  concept_id: z.string().describe("Concept ID from knowledge_graph"),
447
- aspect: z.enum(["new", "advanced"]).default("new").describe(
448
- "new = concept introduced for the first time; advanced = previously introduced concept revisited at higher depth"
447
+ aspect: z.enum(["new", "advanced", "preview"]).default("new").describe(
448
+ "new = concept introduced for the first time; advanced = previously introduced concept revisited at higher depth; preview = light ULO awareness pass ('know it exists') placed at the consuming phase BEFORE the full introduction \u2014 the anchor phase still owns the full 'new' teach"
449
449
  ),
450
450
  note: z.string().optional().default("").describe("Which advanced aspect of the concept this phase develops")
451
451
  });
@@ -557,5 +557,5 @@ var DomainProfileSchema = z.object({
557
557
  });
558
558
 
559
559
  export { ArchEdgeSchema, ArchNodeSchema, ArchitectureDetailSchema, CapabilitySchema, ConceptCategorySchema, ConceptIntroductionSchema, ConceptSchema, DataIntegrationSchema, DecompositionSchema, DetectionConfidenceSchema, DevelopmentPhaseSchema, DevelopmentStageSchema, DomainCategorySchema, DomainProfileSchema, ExperienceComponentSchema, ExperienceSchema, ExperimentProcedureSchema, FeatureSchema, GrammarRuleSchema, GraphTypeSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, HybridGraphSchema, ImplementationSchema, InputTypeSchema, JourneySchema, JourneyStepSchema, KnowledgeGraphSchema, LanguageConceptExtensionSchema, LearningModeSchema, LearningPathStepSchema, MathConceptExtensionSchema, MathTheoremSchema, MilestoneDecompositionSchema, MissingGapSchema, NavigationSchema, ProblemTypeSchema, ProductGoalSchema, ProductSchema, ProductUserSchema, ProjectConceptLinkSchema, ProjectGraphSchema, ProjectInfoSchema, RequirementSchema, ScienceConceptExtensionSchema, ScreenSchema, ShapeSchema, StepEffortSchema, StepOutcomeSchema, StepSchema, SubjectInfoSchema, TaskEffortSchema, TaskOutcomeSchema, TaskSchema, TechDebtSchema, TechStackSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, UiStateSchema, WiringSchema };
560
- //# sourceMappingURL=chunk-WHBAGJWN.mjs.map
561
- //# sourceMappingURL=chunk-WHBAGJWN.mjs.map
560
+ //# sourceMappingURL=chunk-VCPIWJ7R.mjs.map
561
+ //# sourceMappingURL=chunk-VCPIWJ7R.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/projectGraphSchema.ts","../src/schemas/knowledgeGraphSchema.ts","../src/schemas/domainExtensions.ts","../src/schemas/hybridGraphSchema.ts","../src/schemas/domainProfileSchema.ts"],"names":["z"],"mappings":"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","file":"chunk-VCPIWJ7R.mjs","sourcesContent":["import { z } from 'zod';\n\n// ─── Step (trong Feature) ────────────────────────────────────────────────────\nexport const StepEffortSchema = z.object({\n estimated_minutes: z.number().optional(),\n complexity: z.enum(['low', 'medium', 'high']).optional(),\n concepts_count: z.number().optional(),\n files_touched: z.number().optional(),\n});\n\nexport const StepOutcomeSchema = z.object({\n user_visible: z.string().optional(),\n technical: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nexport const StepSchema = z.object({\n id: z.string(),\n sequence: z.number(),\n name: z.string(),\n description: z.string().optional().default(''),\n files: z.array(z.string()).optional().default([]),\n api_usage: z.array(z.string()).optional().default([]),\n keywords: z.array(z.string()).optional().default([]),\n completion_level: z.enum(['base', 'mvp', 'extend', 'polish']).optional().default('mvp'),\n platform: z.string().optional().default('app'),\n intent: z.string().optional().default(''),\n outcome: StepOutcomeSchema.optional(),\n acceptance: z.array(z.string()).optional().default([]),\n effort: StepEffortSchema.optional(),\n requirement_ids: z.array(z.string()).optional().default([]),\n concept_codes: z.array(z.string()).optional().default([]),\n});\nexport type Step = z.infer<typeof StepSchema>;\n\n// ─── Feature ─────────────────────────────────────────────────────────────────\nexport const FeatureSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n purpose: z.string().optional().default(''),\n priority: z.enum(['core', 'supporting', 'polish']).optional().default('core'),\n status: z.enum(['PLANNED', 'IMPLEMENTED', 'IN_PROGRESS']).optional().default('PLANNED'),\n platform: z.string().optional().default('app'),\n requirement_ids: z.array(z.string()).optional().default([]),\n journey_ids: z.array(z.string()).optional().default([]),\n depends_on: z.array(z.string()).optional().default([]),\n api_usage: z.array(z.string()).optional().default([]),\n steps: z.array(StepSchema).optional().default([]),\n});\nexport type Feature = z.infer<typeof FeatureSchema>;\n\n// ─── Journey ─────────────────────────────────────────────────────────────────\nexport const JourneyStepSchema = 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\nexport const JourneySchema = z.object({\n id: z.string(),\n name: z.string(),\n steps: z.array(z.string()).optional().default([]),\n feature_ids: z.array(z.string()).optional().default([]),\n requirement_ids: z.array(z.string()).optional().default([]),\n});\n\n// ─── Requirement ─────────────────────────────────────────────────────────────\nexport const RequirementSchema = z.object({\n id: z.string(),\n statement: z.string(),\n priority: z.enum(['core', 'supporting', 'polish']).optional().default('core'),\n acceptance: z.array(z.string()).optional().default([]),\n completion_level: z.string().optional().default('base'),\n});\n\n// ─── Development Stage ───────────────────────────────────────────────────────\nexport const DevelopmentStageSchema = z.object({\n stage: z.string(),\n product_state: z.string().optional().default(''),\n need: z.array(z.string()).optional().default([]),\n learn: z.array(z.string()).optional().default([]),\n validation: z.string().optional().default(''),\n cross_feature_value: z.string().optional().default(''),\n temporary_approach: z.string().optional().default(''),\n});\n\n// ─── Product ─────────────────────────────────────────────────────────────────\nexport const ProductGoalSchema = z.object({\n id: z.string(),\n description: z.string(),\n});\n\nexport const ProductUserSchema = z.object({\n id: z.string(),\n goals: z.array(z.string()),\n});\n\nexport const ProductSchema = z.object({\n goals: z.array(ProductGoalSchema).optional().default([]),\n users: z.array(ProductUserSchema).optional().default([]),\n journeys: z.array(JourneySchema).optional().default([]),\n requirements: z.array(RequirementSchema).optional().default([]),\n development_stages: z.array(DevelopmentStageSchema).optional().default([]),\n purpose: z.string().optional().default(''),\n problem_statement: z.string().optional().default(''),\n primary_users: z.array(z.string()).optional().default([]),\n});\n\n// ─── Project ─────────────────────────────────────────────────────────────────\nexport const TechStackSchema = z.record(z.string(), z.array(z.string()));\n\nexport const ProjectInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n version: z.string().optional().default('0.1.0'),\n purpose: z.string().optional().default(''),\n project_type: z.string().optional().default('app'),\n platform: z.array(z.string()).optional().default([]),\n tech_stack: TechStackSchema.optional(),\n architecture: z.array(z.string()).optional().default([]),\n source: z.object({\n repository: z.string().optional().default(''),\n commit: z.string().optional().default(''),\n scan_dir: z.string().optional().default(''),\n }).optional(),\n});\n\n// ─── Capability ──────────────────────────────────────────────────────────────\nexport const CapabilitySchema = z.object({\n id: z.string(),\n feature_id: z.string(),\n purpose: z.string().optional().default(''),\n depends_on: z.array(z.string()).optional().default([]),\n produces: z.array(z.string()).optional().default([]),\n});\n\n// ─── Architecture ────────────────────────────────────────────────────────────\nexport const ArchNodeSchema = z.object({\n id: z.string(),\n type: z.string().optional().default('component'),\n custom_type: z.string().optional(),\n layer: z.string().optional().default('presentation'),\n responsibility: z.string().optional().default(''),\n depends_on: z.array(z.string()).optional().default([]),\n used_by: z.array(z.string()).optional().default([]),\n evidence_type: z.string().optional().default('INFERRED'),\n confidence: z.number().optional().default(0.5),\n});\n\nexport const ArchEdgeSchema = z.object({\n from: z.string(),\n to: z.string(),\n type: z.string().optional().default('USES'),\n});\n\nexport const ArchitectureDetailSchema = z.object({\n pattern: z.array(z.string()).optional().default([]),\n confidence: z.number().optional().default(0.5),\n evidence: z.array(z.string()).optional().default([]),\n nodes: z.array(ArchNodeSchema).optional().default([]),\n edges: z.array(ArchEdgeSchema).optional().default([]),\n});\n\n// ─── Experience ──────────────────────────────────────────────────────────────\nexport const ScreenSchema = z.object({\n id: z.string(),\n name: z.string().optional().default(''),\n purpose: z.string().optional().default(''),\n entry_point: z.boolean().optional().default(false),\n components: z.array(z.string()).optional().default([]),\n states: z.array(z.string()).optional().default([]),\n navigates_to: z.array(z.string()).optional().default([]),\n keywords: z.array(z.string()).optional().default([]),\n});\n\nexport const ExperienceComponentSchema = z.object({\n id: z.string(),\n type: z.string().optional().default('component'),\n purpose: z.string().optional().default(''),\n inputs: z.array(z.string()).optional().default([]),\n outputs: z.array(z.string()).optional().default([]),\n state: z.array(z.string()).optional().default([]),\n});\n\nexport const UiStateSchema = z.object({\n id: z.string(),\n owner: z.string().optional().default(''),\n triggered_by: z.array(z.string()).optional().default([]),\n transitions_to: z.array(z.string()).optional().default([]),\n});\n\nexport const NavigationSchema = z.object({\n from: z.string(),\n to: z.string(),\n trigger: z.string().optional().default(''),\n presentation: z.string().optional().default('push'),\n});\n\nexport const ExperienceSchema = z.object({\n screens: z.array(ScreenSchema).optional().default([]),\n components: z.array(ExperienceComponentSchema).optional().default([]),\n ui_states: z.array(UiStateSchema).optional().default([]),\n navigation: z.array(NavigationSchema).optional().default([]),\n});\n\n// ─── Data Integration ────────────────────────────────────────────────────────\nexport const DataIntegrationSchema = z.object({\n data_flows: z.array(z.any()).optional().default([]),\n models: z.array(z.any()).optional().default([]),\n integrations: z.array(z.any()).optional().default([]),\n persistence: z.array(z.any()).optional().default([]),\n});\n\n// ─── Implementation ──────────────────────────────────────────────────────────\nexport const TaskEffortSchema = z.object({\n concepts_count: z.number().optional().default(0),\n files_touched: z.number().optional().default(0),\n estimated_minutes: z.number().optional().default(0),\n});\n\nexport const TaskOutcomeSchema = z.object({\n user_visible: z.string().optional().default(''),\n technical: z.array(z.string()).optional().default([]),\n});\n\nexport const TaskSchema = z.object({\n id: z.string(),\n capability_id: z.string().optional().default(''),\n action: z.string(),\n modifies: z.array(z.string()).optional().default([]),\n creates: z.array(z.string()).optional().default([]),\n depends_on: z.array(z.string()).optional().default([]),\n acceptance: z.array(z.string()).optional().default([]),\n intent: z.string().optional().default(''),\n outcome: TaskOutcomeSchema.optional(),\n source_evidence: z.array(z.string()).optional().default([]),\n keywords: z.array(z.string()).optional().default([]),\n concurrency: z.array(z.string()).optional().default([]),\n effort: TaskEffortSchema.optional(),\n requirement_ids: z.array(z.string()).optional().default([]),\n});\n\nexport const ImplementationSchema = z.object({\n tasks: z.array(TaskSchema).optional().default([]),\n});\n\n// ─── Missing Gap & Tech Debt ─────────────────────────────────────────────────\nexport const MissingGapSchema = z.object({\n gap: z.string(),\n location: z.string().optional().default(''),\n suggested_lo: z.string().optional().default(''),\n});\n\nexport const TechDebtSchema = z.object({\n issue: z.string(),\n location: z.string().optional().default(''),\n severity: z.enum(['low', 'medium', 'high']).optional().default('medium'),\n});\n\n// ─── Decomposition ───────────────────────────────────────────────────────────\nexport const MilestoneDecompositionSchema = z.object({\n id: z.string(),\n phase: z.string().optional().default(''),\n name: z.string().optional().default(''),\n goal: z.string().optional().default(''),\n feature_ids: z.array(z.string()).optional().default([]),\n});\n\nexport const DecompositionSchema = z.object({\n milestones: z.array(MilestoneDecompositionSchema).optional().default([]),\n});\n\n// ─── Project Graph (Root) ────────────────────────────────────────────────────\nexport const ProjectGraphSchema = z.object({\n schema_version: z.literal(3).optional().default(3),\n project: ProjectInfoSchema,\n product: ProductSchema,\n features: z.array(FeatureSchema).optional().default([]),\n capabilities: z.array(CapabilitySchema).optional().default([]),\n architecture_detail: ArchitectureDetailSchema.optional(),\n experience: ExperienceSchema.optional(),\n data_integration: DataIntegrationSchema.optional(),\n implementation: ImplementationSchema,\n decomposition: DecompositionSchema.optional(),\n missing_gaps: z.array(MissingGapSchema).optional().default([]),\n tech_debt: z.array(TechDebtSchema).optional().default([]),\n});\n\nexport type ProjectGraph = z.infer<typeof ProjectGraphSchema>;\nexport type Product = z.infer<typeof ProductSchema>;\nexport type Capability = z.infer<typeof CapabilitySchema>;\nexport type ArchitectureDetail = z.infer<typeof ArchitectureDetailSchema>;\nexport type Experience = z.infer<typeof ExperienceSchema>;\nexport type DataIntegration = z.infer<typeof DataIntegrationSchema>;\nexport type Implementation = z.infer<typeof ImplementationSchema>;\nexport type Decomposition = z.infer<typeof DecompositionSchema>;\n","/**\n * Knowledge Graph Schema — for concept-driven learning domains\n * (Math, Science, Language, Arts, Research)\n *\n * Unlike ProjectGraph (product decomposition), KnowledgeGraph represents\n * concept decomposition with ULO/CIO/SIO levels and prerequisite chains.\n */\n\nimport { z } from 'zod';\n\n// ─── Problem Type ────────────────────────────────────────────────────────────\nexport const ProblemTypeSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n bloom_level: z.enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create']).optional().default('Understand'),\n difficulty: z.enum(['easy', 'medium', 'hard']).optional().default('medium'),\n estimated_minutes: z.number().optional().default(10),\n examples: z.array(z.string()).optional().default([]),\n common_mistakes: z.array(z.string()).optional().default([]),\n});\nexport type ProblemType = z.infer<typeof ProblemTypeSchema>;\n\n// ─── Concept ─────────────────────────────────────────────────────────────────\nexport const ConceptSchema = z.object({\n id: z.string(),\n // Production-standard neutral code (UPPER_SNAKE_CASE, Naming Conventions v2.2).\n // After STEP_2_5 standardization this is either a knowledge-tree code\n // (standardized) or a provisional proposed code (tracked in the proposals\n // artifact for later merge).\n code: z.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),\n // Knowledge-tree provenance (STEP_2_5): standardized | proposed_new | unset\n standardization: z.enum(['standardized', 'proposed_new']).optional(),\n tree_code: z.string().optional().describe('Exact knowledge-tree CONCEPT code when standardization=standardized'),\n tree_prerequisites: z.array(z.string()).optional().default([]).describe('Knowledge-tree prerequisite concept codes (seed for prereq edges)'),\n name: z.string(),\n description: z.string().optional().default(''),\n category: z.string().optional().default(''),\n\n // ULO/CIO/SIO — technology-independent knowledge levels.\n // Text fields use the production clause \"The learner will be able to ...\".\n ulo: z.string().optional().default('').describe('WHAT + WHY: What is this concept? Why does it exist? What problem does it solve?'),\n ulo_code: z.string().optional().describe('ULO-[CONCEPT]-NN per Naming Conventions v2.2'),\n cio: z.string().optional().default('').describe('HOW: How does it solve the problem? What is the mechanism?'),\n cio_code: z.string().optional().describe('CIO-[CONCEPT]-NN-ACTION per Naming Conventions v2.2'),\n sio: z.array(z.string()).optional().default([]).describe('IMPLEMENTATION: Specific implementations in concrete technologies'),\n sio_codes: z.array(z.string()).optional().describe('SIO-[TECH]-[CONCEPT]-NN, one per sio item'),\n\n // Prerequisites and timing\n prerequisites: z.array(z.string()).optional().default([]).describe('Concept IDs that must be learned first'),\n estimated_minutes: z.number().optional().default(30),\n\n // Problem types associated with this concept\n problem_types: z.array(ProblemTypeSchema).optional().default([]),\n\n // Supporting materials\n techniques: z.array(z.string()).optional().default([]).describe('Methods, formulas, tools, procedures'),\n materials: z.array(z.string()).optional().default([]).describe('Physical materials needed (lab equipment, instruments)'),\n visual_aids: z.array(z.string()).optional().default([]).describe('Diagrams, images, animations needed'),\n common_mistakes: z.array(z.string()).optional().default([]).describe('Frequently confused ideas or errors'),\n\n // Metadata\n keywords: z.array(z.string()).optional().default([]).describe('Technology-specific keywords (SIO level)'),\n tech_stack: z.array(z.string()).optional().default([]).describe('Specific technologies if applicable'),\n});\nexport type Concept = z.infer<typeof ConceptSchema>;\n\n// ─── Category ────────────────────────────────────────────────────────────────\nexport const ConceptCategorySchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n concept_ids: z.array(z.string()).optional().default([]),\n order: z.number().optional().default(0).describe('Teaching order within the subject'),\n});\nexport type ConceptCategory = z.infer<typeof ConceptCategorySchema>;\n\n// ─── Subject ─────────────────────────────────────────────────────────────────\nexport const SubjectInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().default(''),\n domain: z.enum(['math', 'science', 'language', 'arts', 'research', 'business', 'other']).optional().default('other'),\n grade_band: z.tuple([z.number().int(), z.number().int()]).optional(),\n estimated_hours: z.number().optional().default(0),\n estimated_weeks: z.number().optional().default(0),\n syllabus_ref: z.string().optional().default('').describe('Reference to original syllabus/curriculum'),\n});\nexport type SubjectInfo = z.infer<typeof SubjectInfoSchema>;\n\n// ─── Learning Path ───────────────────────────────────────────────────────────\nexport const LearningPathStepSchema = z.object({\n concept_id: z.string(),\n order: z.number(),\n depends_on: z.array(z.string()).optional().default([]),\n milestone_name: z.string().optional().default(''),\n});\nexport type LearningPathStep = z.infer<typeof LearningPathStepSchema>;\n\n// ─── Knowledge Graph (Root) ──────────────────────────────────────────────────\nexport const KnowledgeGraphSchema = z.object({\n schema_version: z.literal(1).optional().default(1),\n type: z.literal('knowledge_graph').optional().default('knowledge_graph'),\n subject: SubjectInfoSchema,\n concepts: z.array(ConceptSchema).optional().default([]),\n categories: z.array(ConceptCategorySchema).optional().default([]),\n learning_path: z.array(LearningPathStepSchema).optional().default([]).describe('Recommended teaching order'),\n});\nexport type KnowledgeGraph = z.infer<typeof KnowledgeGraphSchema>;\n","/**\n * Domain-specific extensions for ProjectGraph and KnowledgeGraph.\n * These are overlay schemas that add domain-specific fields to the base graphs.\n */\n\nimport { z } from 'zod';\n\n// ─── Hardware/IoT Extension (Product-Driven) ─────────────────────────────────\n\nexport const WiringSchema = z.object({\n component: z.string(),\n pin: z.string(),\n connection: z.string(),\n wire_color: z.string().optional(),\n notes: z.string().optional(),\n});\n\nexport const HardwareStepSchema = z.object({\n action: z.string(),\n tool: z.string().optional(),\n safety_note: z.string().optional(),\n estimated_minutes: z.number().optional(),\n});\n\nexport const HardwareFeatureExtensionSchema = z.object({\n wiring: z.array(WiringSchema).optional().default([]),\n components_used: z.array(z.string()).optional().default([]),\n circuit_diagram_ref: z.string().optional(),\n});\n\nexport const HardwareTaskExtensionSchema = z.object({\n techniques: z.array(z.string()).optional().default([]).describe('soldering, breadboarding, debugging'),\n hardware_steps: z.array(HardwareStepSchema).optional().default([]),\n safety_notes: z.array(z.string()).optional().default([]),\n multimeter_readings: z.boolean().optional().default(false),\n});\n\nexport const HardwareTechStackExtensionSchema = z.object({\n materials: z.array(z.string()).optional().default([]).describe('Physical components: Arduino Uno, LED, Servo'),\n tools: z.array(z.string()).optional().default([]).describe('Arduino IDE, USB cable, Multimeter'),\n protocols: z.array(z.string()).optional().default([]).describe('I2C, PWM, SPI, UART'),\n pin_config: z.record(z.string(), z.string()).optional().default({}).describe('Pin assignments'),\n power_requirements: z.string().optional(),\n});\n\n// ─── 3D Design Extension (Product-Driven) ─────────────────────────────────────\n\nexport const ShapeSchema = z.object({\n id: z.string(),\n type: z.string().describe('Box, Cylinder, Sphere, Roof, Torus, Hole, etc.'),\n dimensions: z.string().describe('e.g. \"200x150x5mm\"'),\n position: z.string().describe('e.g. \"0,0,0\"'),\n color: z.string().optional(),\n rotation: z.string().optional(),\n});\n\nexport const ThreeDesignFeatureExtensionSchema = z.object({\n shapes: z.array(ShapeSchema).optional().default([]),\n assembly_order: z.array(z.string()).optional().default([]).describe('Shape IDs in assembly order'),\n group_operations: z.array(z.string()).optional().default([]).describe('Group/hole operations'),\n});\n\nexport const ThreeDesignTaskExtensionSchema = z.object({\n operations: z.array(z.string()).optional().default([]).describe('create, resize, position, group, align, hole'),\n dimensions: z.record(z.string(), z.string()).optional().default({}),\n shape_type: z.string().optional(),\n constraints: z.array(z.string()).optional().default([]),\n});\n\nexport const ThreeDesignTechStackExtensionSchema = z.object({\n design_software: z.string().optional().describe('Tinkercad, Fusion360, Blender'),\n units: z.string().optional().default('mm'),\n canvas_size: z.string().optional(),\n export_formats: z.array(z.string()).optional().default([]).describe('STL, OBJ, STEP'),\n});\n\n// ─── Math Extension (Concept-Driven) ──────────────────────────────────────────\n\nexport const MathTheoremSchema = z.object({\n name: z.string(),\n statement: z.string(),\n proof_outline: z.string().optional(),\n converse_statement: z.string().optional(),\n});\n\nexport const MathConceptExtensionSchema = z.object({\n formulas: z.array(z.string()).optional().default([]).describe('Mathematical formulas, e.g. a^2 + b^2 = c^2'),\n theorems: z.array(MathTheoremSchema).optional().default([]),\n constructions: z.array(z.string()).optional().default([]).describe('Compass and ruler constructions, auxiliary lines'),\n visual_aids: z.array(z.string()).optional().default([]).describe('Geometric figures, function graphs'),\n common_mistakes: z.array(z.string()).optional().default([]).describe('False intuitions or algebraic traps'),\n});\nexport type MathConceptExtension = z.infer<typeof MathConceptExtensionSchema>;\n\n// ─── Science Extension (Concept-Driven) ───────────────────────────────────────\n\nexport const ExperimentProcedureSchema = z.object({\n name: z.string(),\n apparatus: z.array(z.string()).optional().default([]),\n steps: z.array(z.string()).optional().default([]),\n safety_warnings: z.array(z.string()).optional().default([]),\n expected_observation: z.string().optional(),\n});\n\nexport const ScienceConceptExtensionSchema = z.object({\n experiments: z.array(ExperimentProcedureSchema).optional().default([]),\n instruments: z.array(z.string()).optional().default([]).describe('Lab equipment: microscope, beaker, sensor'),\n variables: z.object({\n independent: z.string().optional(),\n dependent: z.string().optional(),\n controlled: z.array(z.string()).optional().default([]),\n }).optional(),\n hypotheses: z.array(z.string()).optional().default([]),\n laws_and_theories: z.array(z.string()).optional().default([]),\n});\nexport type ScienceConceptExtension = z.infer<typeof ScienceConceptExtensionSchema>;\n\n// ─── Language & Humanities Extension (Concept-Driven) ─────────────────────────\n\nexport const GrammarRuleSchema = z.object({\n rule_name: z.string(),\n pattern: z.string(),\n example_correct: z.string(),\n example_incorrect: z.string().optional(),\n exceptions: z.array(z.string()).optional().default([]),\n});\n\nexport const LanguageConceptExtensionSchema = z.object({\n reading_genres: z.array(z.string()).optional().default([]).describe('argumentative, narrative, expository'),\n grammar_rules: z.array(GrammarRuleSchema).optional().default([]),\n writing_tasks: z.array(z.string()).optional().default([]),\n lexicon_keywords: z.array(z.string()).optional().default([]),\n rhetorical_devices: z.array(z.string()).optional().default([]),\n});\nexport type LanguageConceptExtension = z.infer<typeof LanguageConceptExtensionSchema>;\n","/**\n * Hybrid Graph Schema — for projects that combine product-driven and concept-driven learning.\n *\n * Example: \"Build an Arduino robot but need to understand electronics theory first\"\n * Links project_graph (what to build) with knowledge_graph (what to understand).\n */\n\nimport { z } from 'zod';\nimport { ProjectGraphSchema } from './projectGraphSchema';\nimport { KnowledgeGraphSchema } from './knowledgeGraphSchema';\n\n// ─── Link between Project and Knowledge ──────────────────────────────────────\nexport const ProjectConceptLinkSchema = z.object({\n feature_id: z.string().describe('Feature ID from project_graph'),\n concept_id: z.string().describe('Concept ID from knowledge_graph'),\n relationship: z.enum([\n 'requires', // Feature requires understanding this concept\n 'demonstrates', // Feature demonstrates this concept in practice\n 'applies', // Feature applies this concept\n 'extends', // Feature extends this concept to new context\n ]).optional().default('requires'),\n depth: z.enum([\n 'ulo', // Feature only needs WHAT+WHY understanding\n 'cio', // Feature needs HOW understanding\n 'sio', // Feature needs specific implementation knowledge\n ]).optional().default('cio'),\n description: z.string().optional().default(''),\n estimated_prereq_minutes: z.number().optional().default(0).describe('How many minutes of concept learning before this feature'),\n phase_id: z.string().optional().default('').describe('Development phase this link belongs to'),\n});\n\n// ─── Development Phase (progressive completion) ──────────────────────────────\nexport const ConceptIntroductionSchema = z.object({\n concept_id: z.string().describe('Concept ID from knowledge_graph'),\n aspect: z.enum(['new', 'advanced', 'preview']).default('new').describe(\n \"new = concept introduced for the first time; advanced = previously introduced concept revisited at higher depth; preview = light ULO awareness pass ('know it exists') placed at the consuming phase BEFORE the full introduction — the anchor phase still owns the full 'new' teach\"\n ),\n note: z.string().optional().default('').describe('Which advanced aspect of the concept this phase develops'),\n});\n\nexport const DevelopmentPhaseSchema = z.object({\n id: z.string().describe('Phase id, e.g. PH1'),\n order: z.number().int().positive().describe('1-based phase execution order'),\n name: z.string().min(1).describe('Short phase name'),\n product_completion: z.string().min(1).describe(\n 'What the product can demonstrably DO once this phase is complete (completion level description)'\n ),\n feature_ids: z.array(z.string()).default([]).describe('Every feature built during this phase (each feature in EXACTLY one phase)'),\n introduces: z.array(ConceptIntroductionSchema).default([]).describe(\n 'Concepts introduced (new) or revisited at advanced depth (advanced) at the start of this phase'\n ),\n});\n\n// ─── Hybrid Graph (Root) ─────────────────────────────────────────────────────\nexport const HybridGraphSchema = z.object({\n schema_version: z.literal(1).optional().default(1),\n type: z.literal('hybrid_graph').optional().default('hybrid_graph'),\n\n // Product decomposition (what to build)\n project_graph: ProjectGraphSchema,\n\n // Concept decomposition (what to understand)\n knowledge_graph: KnowledgeGraphSchema,\n\n // Links between features and concepts\n links: z.array(ProjectConceptLinkSchema).optional().default([]),\n\n // Progressive completion phases (cross-feature decomposition). Empty for\n // pre-phase legacy graphs — emitters fall back to feature ordering.\n phases: z.array(DevelopmentPhaseSchema).optional().default([]),\n\n // Metadata\n description: z.string().optional().default(''),\n total_project_minutes: z.number().optional().default(0),\n total_concept_minutes: z.number().optional().default(0),\n estimated_total_minutes: z.number().optional().default(0),\n});\nexport type HybridGraph = z.infer<typeof HybridGraphSchema>;\nexport type ProjectConceptLink = z.infer<typeof ProjectConceptLinkSchema>;\nexport type DevelopmentPhase = z.infer<typeof DevelopmentPhaseSchema>;\nexport type ConceptIntroduction = z.infer<typeof ConceptIntroductionSchema>;\n","/**\n * Domain Profile Schema — output of domain detection.\n *\n * Determines:\n * 1. Input type (repository, description, syllabus, files, mixed)\n * 2. Domain category (software, hardware, math, science, etc.)\n * 3. Learning mode (product, concept, hybrid)\n * 4. Which graph type and pipeline to use\n */\n\nimport { z } from 'zod';\n\n// ─── Input Type ──────────────────────────────────────────────────────────────\nexport const InputTypeSchema = z.enum([\n 'repository', // Source code repo (git URL or local dir)\n 'description', // Text description of subject/project\n 'syllabus', // Syllabus, curriculum framework, textbook outline\n 'files', // Non-code files (3D models, images, documents)\n 'mixed', // Combination of the above\n]);\n\n// ─── Domain Category ─────────────────────────────────────────────────────────\nexport const DomainCategorySchema = z.enum([\n 'software', // App, web, API, CLI, library\n 'hardware_iot', // Arduino, robotics, ESP32, Raspberry Pi\n '3d_design', // Tinkercad, Fusion360, Blender, CAD\n 'math', // Hình học, đại số, giải tích, xác suất\n 'science', // Lý, hóa, sinh, địa lý\n 'language', // Tiếng Việt, English, writing, grammar\n 'arts', // Âm nhạc, hội họa, thiết kế, nhiếp ảnh\n 'research', // Nghiên cứu, thống kê, phân tích dữ liệu\n 'business', // Kinh doanh, tài chính, quản lý\n 'other',\n]);\n\n// ─── Learning Mode ───────────────────────────────────────────────────────────\nexport const LearningModeSchema = z.enum([\n 'product', // Build a product (project-driven)\n 'concept', // Understand concepts (knowledge-driven)\n 'hybrid', // Both: build product while understanding concepts\n]);\n\n// ─── Graph Type ──────────────────────────────────────────────────────────────\nexport const GraphTypeSchema = z.enum([\n 'project_graph', // Product decomposition (software, hardware, 3d_design)\n 'knowledge_graph', // Concept decomposition (math, science, language, etc.)\n 'hybrid_graph', // Both linked together\n]);\n\n// ─── Confidence ──────────────────────────────────────────────────────────────\nexport const DetectionConfidenceSchema = z.object({\n inputType: z.number().min(0).max(1).optional().default(0.5),\n domainCategory: z.number().min(0).max(1).optional().default(0.5),\n learningMode: z.number().min(0).max(1).optional().default(0.5),\n});\n\n// ─── Domain Profile (Root) ───────────────────────────────────────────────────\nexport const DomainProfileSchema = z.object({\n // Detection results\n inputType: InputTypeSchema,\n domainCategory: DomainCategorySchema,\n learningMode: LearningModeSchema,\n graphType: GraphTypeSchema,\n\n // Confidence scores\n confidence: DetectionConfidenceSchema.optional(),\n\n // Evidence for detection decisions\n evidence: z.array(z.string()).optional().default([]),\n\n // Detected metadata (optional, populated during detection)\n detectedTechStack: z.array(z.string()).optional().default([]),\n detectedSubject: z.string().optional().default(''),\n detectedGradeBand: z.tuple([z.number().int(), z.number().int()]).optional(),\n detectedDomain: z.string().optional().default(''),\n\n // User-provided context (pass-through)\n goal: z.string().optional().default(''),\n description: z.string().optional().default(''),\n repoUrl: z.string().optional().default(''),\n repoDir: z.string().optional().default(''),\n syllabusText: z.string().optional().default(''),\n});\nexport type DomainProfile = z.infer<typeof DomainProfileSchema>;\nexport type InputType = z.infer<typeof InputTypeSchema>;\nexport type DomainCategory = z.infer<typeof DomainCategorySchema>;\nexport type LearningMode = z.infer<typeof LearningModeSchema>;\nexport type GraphType = z.infer<typeof GraphTypeSchema>;\n"]}
@@ -24,8 +24,8 @@ function resolveProviderChain(config) {
24
24
  }
25
25
  push("legacy", process.env.LLM_BASE_URL || process.env.OPENAI_BASE_URL || "", process.env.LLM_API_KEY || process.env.OPENAI_API_KEY || "", process.env.LLM_MODEL || process.env.LLM_TIER_FAST || "");
26
26
  push("dashscope", process.env.DASHSCOPE_BASE_URL || process.env.ALIBABA_BASE_URL || "", process.env.DASHSCOPE_API_KEY || process.env.ALIBABA_API_KEY || "", process.env.DASHSCOPE_MODEL || process.env.DEFAULT_AI_MODEL || "");
27
- push("nvidia", "https://integrate.api.nvidia.com/v1", process.env.NVIDIA_API_KEY || "", process.env.NVIDIA_MODEL || "nvidia/nemotron-3-ultra-550b-a55b");
28
- push("openrouter", "https://openrouter.ai/api/v1", process.env.OPENROUTER_API_KEY || "", process.env.OPENROUTER_MODEL || "nvidia/nemotron-3-ultra-550b-a55b");
27
+ push("nvidia", "https://integrate.api.nvidia.com/v1", process.env.NVIDIA_API_KEY || "", process.env.NVIDIA_MODEL || "nvidia/nemotron-3-ultra-550b-a55b:free");
28
+ push("openrouter", "https://openrouter.ai/api/v1", process.env.OPENROUTER_API_KEY || "", process.env.OPENROUTER_MODEL || "nvidia/nemotron-3-ultra-550b-a55b:free");
29
29
  if (process.env.OPENROUTER_MODEL) {
30
30
  const or = chain.find((c) => c.label === "openrouter");
31
31
  if (or) {
@@ -2120,6 +2120,8 @@ function auditPhasePlan(plan, features, concepts, links, warnings, log) {
2120
2120
  const phases = [];
2121
2121
  const featurePhase = /* @__PURE__ */ new Map();
2122
2122
  const newIntroPhase = /* @__PURE__ */ new Map();
2123
+ const previewsSeen = /* @__PURE__ */ new Set();
2124
+ const previewPhase = /* @__PURE__ */ new Map();
2123
2125
  const errors = [];
2124
2126
  plan.forEach((rp, idx) => {
2125
2127
  const id = String(rp.id || "PH" + (idx + 1));
@@ -2151,7 +2153,22 @@ function auditPhasePlan(plan, features, concepts, links, warnings, log) {
2151
2153
  errors.push("Phase " + id + ": introduces unknown concept " + cid);
2152
2154
  continue;
2153
2155
  }
2154
- const aspect = String(ri.aspect || "new") === "advanced" ? "advanced" : "new";
2156
+ const rawAspect = String(ri.aspect || "new");
2157
+ const aspect = rawAspect === "advanced" || rawAspect === "preview" ? rawAspect : "new";
2158
+ if (aspect === "preview") {
2159
+ if (newIntroPhase.has(cid)) {
2160
+ errors.push("Phase " + id + ": preview of " + cid + " after its new introduction in phase " + newIntroPhase.get(cid) + " - preview must precede the anchor teach");
2161
+ continue;
2162
+ }
2163
+ if (previewsSeen.has(cid)) {
2164
+ errors.push("Phase " + id + ": duplicate preview of " + cid);
2165
+ continue;
2166
+ }
2167
+ previewsSeen.add(cid);
2168
+ previewPhase.set(cid, order);
2169
+ introductions.push({ concept_id: cid, aspect, note: String(ri.note || "") });
2170
+ continue;
2171
+ }
2155
2172
  if (aspect === "advanced") {
2156
2173
  const first = newIntroPhase.get(cid);
2157
2174
  if (first === void 0) {
@@ -2199,10 +2216,17 @@ function auditPhasePlan(plan, features, concepts, links, warnings, log) {
2199
2216
  }
2200
2217
  for (const [cid, consumerOrder] of firstConsumerPhase) {
2201
2218
  const intro = newIntroPhase.get(cid);
2202
- if (intro === void 0) {
2219
+ const prev = previewPhase.get(cid);
2220
+ if (intro === void 0 && prev === void 0) {
2203
2221
  errors.push("Concept " + cid + " is consumed from phase " + consumerOrder + " but never introduced in any phase");
2204
- } else if (intro > consumerOrder) {
2205
- errors.push("Concept " + cid + " introduced in phase " + intro + " but first consumed in phase " + consumerOrder + " - introduction must come no later than first consumption");
2222
+ } else if (intro !== void 0 && intro > consumerOrder && (prev === void 0 || prev > consumerOrder)) {
2223
+ errors.push("Concept " + cid + " introduced in phase " + intro + " but first consumed in phase " + consumerOrder + " - introduction must come no later than first consumption (or a preview must cover the dependency)");
2224
+ }
2225
+ }
2226
+ for (const [cid, pOrder] of previewPhase) {
2227
+ const anchor = newIntroPhase.get(cid);
2228
+ if (anchor !== void 0 && anchor <= pOrder) {
2229
+ errors.push("Concept " + cid + " previewed in phase " + pOrder + " but fully introduced in phase " + anchor + " - preview must precede the anchor introduction");
2206
2230
  }
2207
2231
  }
2208
2232
  return { phases, errors };
@@ -2218,7 +2242,7 @@ async function decomposePhases(args) {
2218
2242
  const linkList = links.map(
2219
2243
  (l) => "- " + l.feature_id + " -> " + l.concept_id + " (" + l.depth + ")"
2220
2244
  ).join("\n") || "(none)";
2221
- const systemPrompt = "You decompose a software project build into PROGRESSIVE COMPLETION PHASES for learning purposes.\n\nA phase is NOT a feature and NOT a milestone list: it is a cross-feature slice of the\nproduct whose completion yields a DEMONSTRABLY more complete product. Build up gradually:\nthe product grows feature by feature across phases, and each phase adds its features to\nwhat previous phases already built.\n\nRULES:\n1. Every feature must be assigned to EXACTLY ONE phase (no feature reused, none skipped).\n2. Phases are ordered; later phases depend on earlier ones and yield a more complete product.\n3. product_completion describes concretely what the product can DO once the phase is done.\n4. introduces lists which concepts the phase must teach BEFORE its feature work starts:\n - aspect new: first time the concept appears in the course\n - aspect advanced: a concept introduced in an EARLIER phase, revisited here at a\n higher depth (an advanced aspect of the same concept, e.g. validation rules on top\n of basic data modeling). Use the note field to say which aspect.\n5. A concept MUST be introduced (new) no later than the first phase that consumes it.\n6. A concept must not be introduced before its own prerequisites are introduced.\n7. Typically 3-6 phases for a small project; keep phases balanced.\n8. Phase 1 usually covers project setup/foundation features plus the first minimal slice.\n9. Return JSON only.";
2245
+ const systemPrompt = 'You decompose a software project build into PROGRESSIVE COMPLETION PHASES for learning purposes.\n\nA phase is NOT a feature and NOT a milestone list: it is a cross-feature slice of the\nproduct whose completion yields a DEMONSTRABLY more complete product. Build up gradually:\nthe product grows feature by feature across phases, and each phase adds its features to\nwhat previous phases already built.\n\nRULES:\n1. Every feature must be assigned to EXACTLY ONE phase (no feature reused, none skipped).\n2. Phases are ordered; later phases depend on earlier ones and yield a more complete product.\n3. product_completion describes concretely what the product can DO once the phase is done.\n4. introduces lists which concepts the phase must teach BEFORE its feature work starts:\n - aspect new: first time the concept appears in the course\n - aspect advanced: a concept introduced in an EARLIER phase, revisited here at a\n higher depth (an advanced aspect of the same concept, e.g. validation rules on top\n of basic data modeling). Use the note field to say which aspect.\n - aspect preview: a light awareness pass ("know it exists", ULO depth only, ~5 min)\n placed in an EARLIER phase when its feature work needs the vocabulary before the\n full teach. The anchor phase still owns the full new introduction.\n5. A concept MUST be introduced (new) no later than the first phase that consumes it.\n6. A concept must not be introduced before its own prerequisites are introduced.\n7. Typically 3-6 phases for a small project; keep phases balanced.\n8. Phase 1 usually covers project setup/foundation features plus the first minimal slice.\n9. Return JSON only.';
2222
2246
  const baseUserPrompt = "FEATURES:\n" + featureList + "\n\nCONCEPTS:\n" + conceptList + "\n\nFEATURE-CONCEPT LINKS:\n" + linkList + "\n\nReturn JSON with a phases array. Each phase: { id: PH1, name, product_completion, feature_ids: [F0, F1], introduces: [{ concept_id: C1, aspect: new or advanced, note }] }.\n";
2223
2247
  const MAX_DECOMPOSE_ATTEMPTS = 3;
2224
2248
  let auditErrors = [];
@@ -2257,5 +2281,5 @@ async function decomposePhases(args) {
2257
2281
  }
2258
2282
 
2259
2283
  export { CIO_CODE_RE, CONCEPT_CODE_RE, LEARNER_CLAUSE, SIO_CODE_RE, ULO_CODE_RE, assignConceptCodes, auditDepthLayers, auditSyllabusCoverage, breakPrerequisiteCycles, cioActionSlug, cioCode, conceptCodeFromName, createLlmClient, detectPrerequisiteCycles, escalateAndMapConcepts, extractFeatureSteps, extractFeatureStepsBatched, extractProjectOverview, extractScaffold, generateHybridGraph, generateKnowledgeGraph, llmChatJson, sioCode, standardStatement, techTagFor, uloCode, verifyKnowledgeGraph, verifyProjectGraph };
2260
- //# sourceMappingURL=chunk-JE57VFWX.mjs.map
2261
- //# sourceMappingURL=chunk-JE57VFWX.mjs.map
2284
+ //# sourceMappingURL=chunk-Y7MRFFDJ.mjs.map
2285
+ //# sourceMappingURL=chunk-Y7MRFFDJ.mjs.map