/** * REST API Types * * Type definitions for the LearnGraph REST API. * * @packageDocumentation */ import type { SkillId, QuestionId } from '../types/index.js'; /** * Learner identifier (string alias for readability) */ export type LearnerId = string; /** * API Response wrapper */ export interface ApiResponse { success: boolean; data?: T; error?: ApiError; meta?: ResponseMeta; } /** * API Error */ export interface ApiError { code: string; message: string; details?: Record; } /** * Response metadata (pagination, timing, etc.) */ export interface ResponseMeta { total?: number; page?: number; pageSize?: number; hasMore?: boolean; requestId?: string; timing?: number; } /** * Common pagination parameters */ export interface PaginationParams { page?: number; pageSize?: number; offset?: number; limit?: number; } /** * Skill query parameters */ export interface SkillQueryParams extends PaginationParams { tags?: string[]; bloomLevel?: string; difficulty?: { min?: number; max?: number; }; search?: string; expand?: string[]; sortBy?: 'name' | 'difficulty' | 'createdAt' | 'updatedAt'; sortOrder?: 'asc' | 'desc'; } /** * Learner query parameters */ export interface LearnerQueryParams extends PaginationParams { search?: string; minMastery?: number; maxMastery?: number; } /** * Create skill request */ export interface CreateSkillRequest { name: string; description: string; bloomLevel: string; difficulty?: number; isThresholdConcept?: boolean; masteryThreshold?: number; estimatedMinutes?: number; tags?: string[]; metadata?: Record; } /** * Update skill request */ export interface UpdateSkillRequest { name?: string; description?: string; bloomLevel?: string; difficulty?: number; isThresholdConcept?: boolean; masteryThreshold?: number; estimatedMinutes?: number; tags?: string[]; metadata?: Record; } /** * Skill with expansion data */ export interface SkillWithExpansions { id: SkillId; name: string; description: string; bloomLevel: string; difficulty: number; isThresholdConcept: boolean; masteryThreshold: number; estimatedMinutes: number; tags: string[]; metadata: Record; createdAt: string; updatedAt: string; prerequisites?: PrerequisiteSummary[]; dependents?: DependentSummary[]; questions?: QuestionSummary[]; } /** * Prerequisite skill summary */ export interface PrerequisiteSummary { id: SkillId; name: string; strength: number; } /** * Dependent skill summary */ export interface DependentSummary { id: SkillId; name: string; strength: number; } /** * Question summary */ export interface QuestionSummary { id: QuestionId; prompt: string; type: string; } /** * Create edge request */ export interface CreateEdgeRequest { from: SkillId; to: SkillId; strength?: number; type?: string; metadata?: Record; } /** * Update edge request */ export interface UpdateEdgeRequest { strength?: number; type?: string; metadata?: Record; } /** * Create learner request */ export interface CreateLearnerRequest { name?: string; email?: string; metadata?: Record; } /** * Learner profile response */ export interface LearnerProfileResponse { id: LearnerId; name?: string; email?: string; masteryCount: number; averageMastery: number; createdAt: string; updatedAt: string; } /** * Learner dashboard response */ export interface LearnerDashboardResponse { profile: LearnerProfileResponse; mastery: MasterySummary; zpd: ZPDSummary; reviews: ReviewSummary; progress: ProgressSummary; } /** * Mastery summary for dashboard */ export interface MasterySummary { totalSkills: number; masteredSkills: number; inProgressSkills: number; notStartedSkills: number; averageMastery: number; } /** * ZPD summary for dashboard */ export interface ZPDSummary { readyToLearn: number; recommendedNext: SkillId[]; } /** * Review summary for dashboard */ export interface ReviewSummary { dueNow: number; dueSoon: number; nextReviewSkill?: SkillId; } /** * Progress summary for dashboard */ export interface ProgressSummary { streak: number; lastActiveAt?: string; skillsThisWeek: number; totalTimeMinutes: number; } /** * Record response request */ export interface RecordResponseRequest { correct: boolean; responseTimeMs?: number; questionId?: QuestionId; metadata?: Record; } /** * Mastery state response */ export interface MasteryStateResponse { skillId: SkillId; skillName: string; mastery: number; confidence: number; isMastered: boolean; lastPracticed?: string; responseCount: number; } /** * Learning path response */ export interface LearningPathResponse { targetSkill?: SkillId; skills: PathSkill[]; totalMinutes: number; sessions: PathSession[]; } /** * Skill in learning path */ export interface PathSkill { id: SkillId; name: string; bloomLevel: string; estimatedMinutes: number; currentMastery: number; isCheckpoint: boolean; } /** * Study session in path */ export interface PathSession { skills: SkillId[]; estimatedMinutes: number; } /** * Start assessment session request */ export interface StartSessionRequest { assessmentId: string; config?: { maxQuestions?: number; timeLimit?: number; targetPrecision?: number; }; } /** * Assessment session response */ export interface SessionResponse { sessionId: string; status: 'active' | 'completed' | 'terminated'; currentQuestion?: QuestionResponse; questionsAnswered: number; estimatedAbility?: number; standardError?: number; } /** * Question response */ export interface QuestionResponse { id: QuestionId; prompt: string; type: string; options?: string[]; skillId: SkillId; } /** * Submit answer request */ export interface SubmitAnswerRequest { answer: unknown; responseTimeMs?: number; } /** * Assessment result response */ export interface AssessmentResultResponse { sessionId: string; abilityEstimate: number; standardError: number; percentile: number; questionsAnswered: number; correctCount: number; masteryUpdates: MasteryStateResponse[]; recommendations: SkillId[]; } /** * Learning goal */ export interface LearningGoal { id: string; targetSkillId: SkillId; targetSkillName: string; targetDate?: string; progress: number; createdAt: string; } /** * Create goal request */ export interface CreateGoalRequest { targetSkillId: SkillId; targetDate?: string; } /** * Study session request */ export interface StartStudySessionRequest { minutes: number; skillIds?: SkillId[]; focus?: 'new' | 'review' | 'mixed'; } /** * Study session response */ export interface StudySessionResponse { sessionId: string; estimatedMinutes: number; skills: PathSkill[]; questionsTotal: number; reviewsTotal: number; } /** * Skill analytics response */ export interface SkillAnalyticsResponse { skillId: SkillId; skillName: string; learnerCount: number; averageMastery: number; masteryDistribution: number[]; averageTimeToMastery: number; commonMistakes: string[]; } /** * Cohort analytics response */ export interface CohortAnalyticsResponse { learnerCount: number; averageMastery: number; masteryDistribution: number[]; strugglingSkills: SkillId[]; topPerformers: LearnerId[]; atRiskLearners: LearnerId[]; } /** * Prerequisites response */ export interface PrerequisitesResponse { skillId: SkillId; skillName: string; prerequisites: PrerequisiteDetail[]; depth?: number; } /** * Prerequisite detail */ export interface PrerequisiteDetail { id: SkillId; name: string; bloomLevel: string; strength: number; depth: number; mastery?: number; } /** * Dependents response */ export interface DependentsResponse { skillId: SkillId; skillName: string; dependents: DependentDetail[]; depth?: number; } /** * Dependent detail */ export interface DependentDetail { id: SkillId; name: string; bloomLevel: string; strength: number; depth: number; } /** * Path between skills response */ export interface SkillPathResponse { from: SkillId; to: SkillId; path: PathNode[]; totalSteps: number; exists: boolean; } /** * Node in skill path */ export interface PathNode { id: SkillId; name: string; step: number; } //# sourceMappingURL=types.d.ts.map