@vue-skuilder/db 0.1.23 → 0.1.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{contentSource-BP9hznNV.d.ts → contentSource-BmnmvH8C.d.ts} +268 -3
- package/dist/{contentSource-DsJadoBU.d.cts → contentSource-DfBbaLA-.d.cts} +268 -3
- package/dist/core/index.d.cts +310 -6
- package/dist/core/index.d.ts +310 -6
- package/dist/core/index.js +2606 -666
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +2564 -639
- package/dist/core/index.mjs.map +1 -1
- package/dist/{dataLayerProvider-CHYrQ5pB.d.cts → dataLayerProvider-BeRXVMs5.d.cts} +1 -1
- package/dist/{dataLayerProvider-MDTxXq2l.d.ts → dataLayerProvider-CG9GfaAY.d.ts} +1 -1
- package/dist/impl/couch/index.d.cts +11 -3
- package/dist/impl/couch/index.d.ts +11 -3
- package/dist/impl/couch/index.js +2336 -656
- package/dist/impl/couch/index.js.map +1 -1
- package/dist/impl/couch/index.mjs +2316 -631
- package/dist/impl/couch/index.mjs.map +1 -1
- package/dist/impl/static/index.d.cts +4 -4
- package/dist/impl/static/index.d.ts +4 -4
- package/dist/impl/static/index.js +2312 -632
- package/dist/impl/static/index.js.map +1 -1
- package/dist/impl/static/index.mjs +2315 -630
- package/dist/impl/static/index.mjs.map +1 -1
- package/dist/{index-Dj0SEgk3.d.ts → index-BWvO-_rJ.d.ts} +1 -1
- package/dist/{index-B_j6u5E4.d.cts → index-Ba7hYbHj.d.cts} +1 -1
- package/dist/index.d.cts +278 -20
- package/dist/index.d.ts +278 -20
- package/dist/index.js +3603 -720
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3529 -674
- package/dist/index.mjs.map +1 -1
- package/dist/{types-DQaXnuoc.d.ts → types-CJrLM1Ew.d.ts} +1 -1
- package/dist/{types-Bn0itutr.d.cts → types-W8n-B6HG.d.cts} +1 -1
- package/dist/{types-legacy-DDY4N-Uq.d.cts → types-legacy-JXDxinpU.d.cts} +5 -1
- package/dist/{types-legacy-DDY4N-Uq.d.ts → types-legacy-JXDxinpU.d.ts} +5 -1
- package/dist/util/packer/index.d.cts +3 -3
- package/dist/util/packer/index.d.ts +3 -3
- package/docs/brainstorm-navigation-paradigm.md +40 -34
- package/docs/future-orchestration-vision.md +216 -0
- package/docs/navigators-architecture.md +210 -9
- package/docs/todo-review-urgency-adaptation.md +205 -0
- package/docs/todo-strategy-authoring.md +8 -6
- package/package.json +3 -3
- package/src/core/index.ts +2 -0
- package/src/core/interfaces/contentSource.ts +7 -0
- package/src/core/interfaces/userDB.ts +50 -0
- package/src/core/navigators/Pipeline.ts +132 -5
- package/src/core/navigators/PipelineAssembler.ts +21 -22
- package/src/core/navigators/PipelineDebugger.ts +426 -0
- package/src/core/navigators/filters/WeightedFilter.ts +141 -0
- package/src/core/navigators/filters/types.ts +4 -0
- package/src/core/navigators/generators/CompositeGenerator.ts +82 -19
- package/src/core/navigators/generators/elo.ts +14 -1
- package/src/core/navigators/generators/srs.ts +146 -18
- package/src/core/navigators/generators/types.ts +4 -0
- package/src/core/navigators/index.ts +203 -13
- package/src/core/orchestration/gradient.ts +133 -0
- package/src/core/orchestration/index.ts +210 -0
- package/src/core/orchestration/learning.ts +250 -0
- package/src/core/orchestration/recording.ts +92 -0
- package/src/core/orchestration/signal.ts +67 -0
- package/src/core/types/contentNavigationStrategy.ts +38 -0
- package/src/core/types/learningState.ts +77 -0
- package/src/core/types/types-legacy.ts +4 -0
- package/src/core/types/userOutcome.ts +51 -0
- package/src/courseConfigRegistration.ts +107 -0
- package/src/factory.ts +6 -0
- package/src/impl/common/BaseUserDB.ts +16 -0
- package/src/impl/couch/user-course-relDB.ts +12 -0
- package/src/study/MixerDebugger.ts +555 -0
- package/src/study/SessionController.ts +159 -20
- package/src/study/SessionDebugger.ts +442 -0
- package/src/study/SourceMixer.ts +36 -17
- package/src/study/TODO-session-scheduling.md +133 -0
- package/src/study/index.ts +2 -0
- package/src/study/services/EloService.ts +79 -4
- package/src/study/services/ResponseProcessor.ts +130 -72
- package/src/study/services/SrsService.ts +9 -0
- package/tests/core/navigators/Pipeline.test.ts +2 -0
- package/tests/core/navigators/PipelineAssembler.test.ts +4 -4
- package/docs/todo-evolutionary-orchestration.md +0 -310
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CourseConfig, ClassroomConfig, Status, SkuilderCourseData as SkuilderCourseData$1, CourseElo, DataShape, TagFilter } from '@vue-skuilder/common';
|
|
2
2
|
import { Moment } from 'moment';
|
|
3
|
-
import { S as SkuilderCourseData, b as DocTypePrefixes, D as DocType, Q as QualifiedCardID, T as TagStub, a as Tag, C as CardHistory, c as CardRecord } from './types-legacy-
|
|
3
|
+
import { S as SkuilderCourseData, b as DocTypePrefixes, D as DocType, Q as QualifiedCardID, T as TagStub, a as Tag, C as CardHistory, c as CardRecord } from './types-legacy-JXDxinpU.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Admin functionality
|
|
@@ -91,6 +91,24 @@ interface DataLayerResult {
|
|
|
91
91
|
id?: string;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Configuration for an evolutionarily-weighted strategy.
|
|
96
|
+
*
|
|
97
|
+
* This structure tracks the "learned" weight of a strategy, representing the
|
|
98
|
+
* system's confidence in its utility.
|
|
99
|
+
*
|
|
100
|
+
* - weight: The best-known multiplier (peak of the bell curve)
|
|
101
|
+
* - confidence: How certain we are (inverse of variance / spread)
|
|
102
|
+
* - sampleSize: How many data points informed this weight
|
|
103
|
+
*/
|
|
104
|
+
interface LearnableWeight {
|
|
105
|
+
/** The current best estimate of optimal weight (multiplier) */
|
|
106
|
+
weight: number;
|
|
107
|
+
/** Confidence in this weight (0-1). Higher = narrower exploration spread. */
|
|
108
|
+
confidence: number;
|
|
109
|
+
/** Number of outcome observations that contributed to this weight */
|
|
110
|
+
sampleSize: number;
|
|
111
|
+
}
|
|
94
112
|
/**
|
|
95
113
|
*
|
|
96
114
|
*/
|
|
@@ -108,6 +126,17 @@ interface ContentNavigationStrategyData extends SkuilderCourseData {
|
|
|
108
126
|
by the implementing class's constructor at runtime.
|
|
109
127
|
*/
|
|
110
128
|
serializedData: string;
|
|
129
|
+
/**
|
|
130
|
+
* Evolutionary weighting configuration.
|
|
131
|
+
* If present, the strategy's influence is scaled by this weight.
|
|
132
|
+
* If omitted, weight defaults to 1.0.
|
|
133
|
+
*/
|
|
134
|
+
learnable?: LearnableWeight;
|
|
135
|
+
/**
|
|
136
|
+
* If true, the weight is applied exactly as configured, without
|
|
137
|
+
* per-user deviation. Used for manual tuning or A/B testing.
|
|
138
|
+
*/
|
|
139
|
+
staticWeight?: boolean;
|
|
111
140
|
}
|
|
112
141
|
|
|
113
142
|
/**
|
|
@@ -340,6 +369,50 @@ interface ScheduledCard {
|
|
|
340
369
|
schedulingAgentId: string;
|
|
341
370
|
}
|
|
342
371
|
|
|
372
|
+
/**
|
|
373
|
+
* Record of a user's learning outcome over a specific period.
|
|
374
|
+
*
|
|
375
|
+
* Used by the evolutionary orchestration system to correlate strategy
|
|
376
|
+
* deviations with learning success.
|
|
377
|
+
*
|
|
378
|
+
* Stored in the UserDB.
|
|
379
|
+
*/
|
|
380
|
+
interface UserOutcomeRecord {
|
|
381
|
+
/**
|
|
382
|
+
* Unique ID: "USER_OUTCOME::{courseId}::{userId}::{timestamp}"
|
|
383
|
+
* Timestamp corresponds to periodEnd.
|
|
384
|
+
*/
|
|
385
|
+
_id: string;
|
|
386
|
+
docType: DocType.USER_OUTCOME;
|
|
387
|
+
courseId: string;
|
|
388
|
+
userId: string;
|
|
389
|
+
/** Start of the measurement period (ISO timestamp) */
|
|
390
|
+
periodStart: string;
|
|
391
|
+
/** End of the measurement period (ISO timestamp) */
|
|
392
|
+
periodEnd: string;
|
|
393
|
+
/**
|
|
394
|
+
* The computed signal value (e.g., 0.85 for 85% accuracy).
|
|
395
|
+
* This is the 'Y' in the regression analysis.
|
|
396
|
+
*
|
|
397
|
+
* Higher values indicate better learning outcomes.
|
|
398
|
+
*/
|
|
399
|
+
outcomeValue: number;
|
|
400
|
+
/**
|
|
401
|
+
* Snapshot of active deviations during this period.
|
|
402
|
+
* Maps strategyId -> deviation value used [-1.0, 1.0].
|
|
403
|
+
* This provides the 'X' values for regression analysis.
|
|
404
|
+
*/
|
|
405
|
+
deviations: Record<string, number>;
|
|
406
|
+
metadata: {
|
|
407
|
+
sessionsCount: number;
|
|
408
|
+
cardsSeen: number;
|
|
409
|
+
eloStart: number;
|
|
410
|
+
eloEnd: number;
|
|
411
|
+
/** The algorithm used to compute outcomeValue (e.g. "accuracy_in_zone") */
|
|
412
|
+
signalType: string;
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
|
|
343
416
|
type Update<T> = Partial<T> | ((x: T) => T);
|
|
344
417
|
|
|
345
418
|
interface DocumentUpdater {
|
|
@@ -396,6 +469,11 @@ interface UserDBReader {
|
|
|
396
469
|
* Strategies use this to persist preferences, learned patterns, or temporal
|
|
397
470
|
* tracking data across sessions. Each strategy owns its own namespace.
|
|
398
471
|
*
|
|
472
|
+
* @deprecated Use `getCourseInterface(courseId).getStrategyState(strategyKey)` instead.
|
|
473
|
+
* Direct use bypasses course-scoping safety — the courseId parameter is unguarded,
|
|
474
|
+
* allowing accidental cross-course data access. The course-scoped interface binds
|
|
475
|
+
* courseId once at construction.
|
|
476
|
+
*
|
|
399
477
|
* @param courseId - The course this state applies to
|
|
400
478
|
* @param strategyKey - Unique key identifying the strategy (typically class name)
|
|
401
479
|
* @returns The strategy's data payload, or null if no state exists
|
|
@@ -471,6 +549,11 @@ interface UserDBWriter extends DocumentUpdater {
|
|
|
471
549
|
* Strategies use this to persist preferences, learned patterns, or temporal
|
|
472
550
|
* tracking data across sessions. Each strategy owns its own namespace.
|
|
473
551
|
*
|
|
552
|
+
* @deprecated Use `getCourseInterface(courseId).putStrategyState(strategyKey, data)` instead.
|
|
553
|
+
* Direct use bypasses course-scoping safety — the courseId parameter is unguarded,
|
|
554
|
+
* allowing accidental cross-course data writes. The course-scoped interface binds
|
|
555
|
+
* courseId once at construction.
|
|
556
|
+
*
|
|
474
557
|
* @param courseId - The course this state applies to
|
|
475
558
|
* @param strategyKey - Unique key identifying the strategy (typically class name)
|
|
476
559
|
* @param data - The strategy's data payload to store
|
|
@@ -479,10 +562,17 @@ interface UserDBWriter extends DocumentUpdater {
|
|
|
479
562
|
/**
|
|
480
563
|
* Delete strategy-specific state for a course.
|
|
481
564
|
*
|
|
565
|
+
* @deprecated Use `getCourseInterface(courseId).deleteStrategyState(strategyKey)` instead.
|
|
566
|
+
* Direct use bypasses course-scoping safety.
|
|
567
|
+
*
|
|
482
568
|
* @param courseId - The course this state applies to
|
|
483
569
|
* @param strategyKey - Unique key identifying the strategy (typically class name)
|
|
484
570
|
*/
|
|
485
571
|
deleteStrategyState(courseId: string, strategyKey: string): Promise<void>;
|
|
572
|
+
/**
|
|
573
|
+
* Record a user learning outcome for evolutionary orchestration.
|
|
574
|
+
*/
|
|
575
|
+
putUserOutcome(record: UserOutcomeRecord): Promise<void>;
|
|
486
576
|
}
|
|
487
577
|
/**
|
|
488
578
|
* Authentication and account management operations
|
|
@@ -527,6 +617,34 @@ interface UsrCrsDataInterface {
|
|
|
527
617
|
getScheduledReviewCount(): Promise<number>;
|
|
528
618
|
getCourseSettings(): Promise<UserCourseSettings>;
|
|
529
619
|
updateCourseSettings(updates: UserCourseSetting[]): void;
|
|
620
|
+
/**
|
|
621
|
+
* Get strategy-specific state for this course.
|
|
622
|
+
*
|
|
623
|
+
* Course-scoped alternative to `UserDBInterface.getStrategyState()`.
|
|
624
|
+
* The courseId is bound at construction via `getCourseInterface(courseId)`,
|
|
625
|
+
* so callers cannot accidentally access another course's state.
|
|
626
|
+
*
|
|
627
|
+
* @param strategyKey - Unique key identifying the state document
|
|
628
|
+
* @returns The state payload, or null if no state exists
|
|
629
|
+
*/
|
|
630
|
+
getStrategyState<T>(strategyKey: string): Promise<T | null>;
|
|
631
|
+
/**
|
|
632
|
+
* Store strategy-specific state for this course.
|
|
633
|
+
*
|
|
634
|
+
* Course-scoped alternative to `UserDBInterface.putStrategyState()`.
|
|
635
|
+
*
|
|
636
|
+
* @param strategyKey - Unique key identifying the state document
|
|
637
|
+
* @param data - The state payload to store
|
|
638
|
+
*/
|
|
639
|
+
putStrategyState<T>(strategyKey: string, data: T): Promise<void>;
|
|
640
|
+
/**
|
|
641
|
+
* Delete strategy-specific state for this course.
|
|
642
|
+
*
|
|
643
|
+
* Course-scoped alternative to `UserDBInterface.deleteStrategyState()`.
|
|
644
|
+
*
|
|
645
|
+
* @param strategyKey - Unique key identifying the state document
|
|
646
|
+
*/
|
|
647
|
+
deleteStrategyState(strategyKey: string): Promise<void>;
|
|
530
648
|
}
|
|
531
649
|
type ClassroomRegistrationDesignation = 'student' | 'teacher' | 'aide' | 'admin';
|
|
532
650
|
interface ClassroomRegistration {
|
|
@@ -537,6 +655,127 @@ interface ClassroomRegistrationDoc {
|
|
|
537
655
|
registrations: ClassroomRegistration[];
|
|
538
656
|
}
|
|
539
657
|
|
|
658
|
+
/**
|
|
659
|
+
* Context for orchestration decisions during a session.
|
|
660
|
+
*
|
|
661
|
+
* Provides access to user/course data and helper methods for determining
|
|
662
|
+
* effective strategy weights based on the user's cohort assignment.
|
|
663
|
+
*/
|
|
664
|
+
interface OrchestrationContext {
|
|
665
|
+
user: UserDBInterface;
|
|
666
|
+
course: CourseDBInterface;
|
|
667
|
+
userId: string;
|
|
668
|
+
courseConfig: CourseConfig;
|
|
669
|
+
/**
|
|
670
|
+
* Calculate the effective weight for a strategy for this user.
|
|
671
|
+
*
|
|
672
|
+
* Applies deviation based on the user's cohort assignment (derived from
|
|
673
|
+
* userId, strategyId, and course salt).
|
|
674
|
+
*
|
|
675
|
+
* @param strategyId - Unique ID of the strategy
|
|
676
|
+
* @param learnable - The strategy's learning configuration
|
|
677
|
+
* @returns Effective weight multiplier (typically 0.1 - 3.0)
|
|
678
|
+
*/
|
|
679
|
+
getEffectiveWeight(strategyId: string, learnable: LearnableWeight): number;
|
|
680
|
+
/**
|
|
681
|
+
* Get the deviation factor for this user/strategy.
|
|
682
|
+
* Range [-1.0, 1.0].
|
|
683
|
+
*/
|
|
684
|
+
getDeviation(strategyId: string): number;
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Compute a user's deviation for a specific strategy.
|
|
688
|
+
*
|
|
689
|
+
* Returns a value in [-1, 1] that is:
|
|
690
|
+
* 1. Deterministic for the same (user, strategy, salt) tuple
|
|
691
|
+
* 2. Uniformly distributed across users
|
|
692
|
+
* 3. Uncorrelated between different strategies (due to strategyId in hash)
|
|
693
|
+
* 4. Rotatable by changing the salt
|
|
694
|
+
*
|
|
695
|
+
* @param userId - ID of the user
|
|
696
|
+
* @param strategyId - ID of the strategy
|
|
697
|
+
* @param salt - Random seed from course config
|
|
698
|
+
* @returns Deviation factor between -1.0 and 1.0
|
|
699
|
+
*/
|
|
700
|
+
declare function computeDeviation(userId: string, strategyId: string, salt: string): number;
|
|
701
|
+
/**
|
|
702
|
+
* Compute the exploration spread based on confidence.
|
|
703
|
+
*
|
|
704
|
+
* - Low confidence (0.0) -> Max spread (Explore broadly)
|
|
705
|
+
* - High confidence (1.0) -> Min spread (Exploit known good weight)
|
|
706
|
+
*
|
|
707
|
+
* @param confidence - Confidence level 0-1
|
|
708
|
+
* @returns Spread magnitude (half-width of the distribution)
|
|
709
|
+
*/
|
|
710
|
+
declare function computeSpread(confidence: number): number;
|
|
711
|
+
/**
|
|
712
|
+
* Calculate the effective weight for a strategy instance.
|
|
713
|
+
*
|
|
714
|
+
* Combines the learnable weight (peak) with the user's deviation and the
|
|
715
|
+
* allowed spread (based on confidence).
|
|
716
|
+
*
|
|
717
|
+
* @param learnable - Strategy learning config
|
|
718
|
+
* @param userId - User ID
|
|
719
|
+
* @param strategyId - Strategy ID
|
|
720
|
+
* @param salt - Course salt
|
|
721
|
+
* @returns Effective weight multiplier
|
|
722
|
+
*/
|
|
723
|
+
declare function computeEffectiveWeight(learnable: LearnableWeight, userId: string, strategyId: string, salt: string): number;
|
|
724
|
+
/**
|
|
725
|
+
* Create an orchestration context for a study session.
|
|
726
|
+
*
|
|
727
|
+
* Fetches necessary configuration to enable deterministic weight calculation.
|
|
728
|
+
*
|
|
729
|
+
* @param user - User DB interface
|
|
730
|
+
* @param course - Course DB interface
|
|
731
|
+
* @returns Initialized orchestration context
|
|
732
|
+
*/
|
|
733
|
+
declare function createOrchestrationContext(user: UserDBInterface, course: CourseDBInterface): Promise<OrchestrationContext>;
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* Type for navigator constructor functions.
|
|
737
|
+
*/
|
|
738
|
+
type NavigatorConstructor = new (user: UserDBInterface, course: CourseDBInterface, strategyData: ContentNavigationStrategyData) => ContentNavigator;
|
|
739
|
+
/**
|
|
740
|
+
* Register a navigator implementation.
|
|
741
|
+
*
|
|
742
|
+
* Call this to make a navigator available for instantiation by
|
|
743
|
+
* ContentNavigator.create() without relying on dynamic imports.
|
|
744
|
+
*
|
|
745
|
+
* @param implementingClass - The class name (e.g., 'elo', 'hierarchyDefinition')
|
|
746
|
+
* @param constructor - The navigator class constructor
|
|
747
|
+
*/
|
|
748
|
+
declare function registerNavigator(implementingClass: string, constructor: NavigatorConstructor): void;
|
|
749
|
+
/**
|
|
750
|
+
* Get a navigator constructor from the registry.
|
|
751
|
+
*
|
|
752
|
+
* @param implementingClass - The class name to look up
|
|
753
|
+
* @returns The constructor, or undefined if not registered
|
|
754
|
+
*/
|
|
755
|
+
declare function getRegisteredNavigator(implementingClass: string): NavigatorConstructor | undefined;
|
|
756
|
+
/**
|
|
757
|
+
* Check if a navigator is registered.
|
|
758
|
+
*
|
|
759
|
+
* @param implementingClass - The class name to check
|
|
760
|
+
* @returns true if registered, false otherwise
|
|
761
|
+
*/
|
|
762
|
+
declare function hasRegisteredNavigator(implementingClass: string): boolean;
|
|
763
|
+
/**
|
|
764
|
+
* Get all registered navigator names.
|
|
765
|
+
* Useful for debugging and testing.
|
|
766
|
+
*/
|
|
767
|
+
declare function getRegisteredNavigatorNames(): string[];
|
|
768
|
+
/**
|
|
769
|
+
* Initialize the navigator registry with all built-in navigators.
|
|
770
|
+
*
|
|
771
|
+
* This function dynamically imports all standard navigator implementations
|
|
772
|
+
* and registers them. Call this once at application startup to ensure
|
|
773
|
+
* all navigators are available.
|
|
774
|
+
*
|
|
775
|
+
* In test environments, this may need to be called explicitly before
|
|
776
|
+
* using ContentNavigator.create().
|
|
777
|
+
*/
|
|
778
|
+
declare function initializeNavigatorRegistry(): Promise<void>;
|
|
540
779
|
/**
|
|
541
780
|
* Tracks a single strategy's contribution to a card's final score.
|
|
542
781
|
*
|
|
@@ -583,6 +822,17 @@ interface StrategyContribution {
|
|
|
583
822
|
action: 'generated' | 'passed' | 'boosted' | 'penalized';
|
|
584
823
|
/** Score after this strategy's processing */
|
|
585
824
|
score: number;
|
|
825
|
+
/**
|
|
826
|
+
* The effective weight applied for this strategy instance.
|
|
827
|
+
* If using evolutionary orchestration, this includes deviation.
|
|
828
|
+
* If omitted, implies weight 1.0 (legacy behavior).
|
|
829
|
+
*/
|
|
830
|
+
effectiveWeight?: number;
|
|
831
|
+
/**
|
|
832
|
+
* The deviation factor applied to this user's cohort for this strategy.
|
|
833
|
+
* Range [-1.0, 1.0].
|
|
834
|
+
*/
|
|
835
|
+
deviation?: number;
|
|
586
836
|
/**
|
|
587
837
|
* Human-readable explanation of the strategy's decision.
|
|
588
838
|
*
|
|
@@ -698,6 +948,10 @@ declare abstract class ContentNavigator implements StudyContentSource {
|
|
|
698
948
|
protected strategyName?: string;
|
|
699
949
|
/** Unique document ID for this strategy instance (from ContentNavigationStrategyData._id) */
|
|
700
950
|
protected strategyId?: string;
|
|
951
|
+
/** Evolutionary weighting configuration */
|
|
952
|
+
learnable?: LearnableWeight;
|
|
953
|
+
/** Whether to bypass deviation (manual/static weighting) */
|
|
954
|
+
staticWeight?: boolean;
|
|
701
955
|
/**
|
|
702
956
|
* Constructor for standard navigators.
|
|
703
957
|
* Call this from subclass constructors to initialize common fields.
|
|
@@ -729,7 +983,13 @@ declare abstract class ContentNavigator implements StudyContentSource {
|
|
|
729
983
|
*/
|
|
730
984
|
protected putStrategyState<T>(data: T): Promise<void>;
|
|
731
985
|
/**
|
|
732
|
-
* Factory method to create navigator instances
|
|
986
|
+
* Factory method to create navigator instances.
|
|
987
|
+
*
|
|
988
|
+
* First checks the navigator registry for a pre-registered constructor.
|
|
989
|
+
* If not found, falls back to dynamic import (for custom navigators).
|
|
990
|
+
*
|
|
991
|
+
* For reliable operation in test environments, call initializeNavigatorRegistry()
|
|
992
|
+
* before using this method.
|
|
733
993
|
*
|
|
734
994
|
* @param user - User interface
|
|
735
995
|
* @param course - Course interface
|
|
@@ -816,7 +1076,12 @@ interface StudyContentSource {
|
|
|
816
1076
|
* @returns Cards sorted by score descending
|
|
817
1077
|
*/
|
|
818
1078
|
getWeightedCards(limit: number): Promise<WeightedCard[]>;
|
|
1079
|
+
/**
|
|
1080
|
+
* Get the orchestration context for this source.
|
|
1081
|
+
* Used for recording learning outcomes.
|
|
1082
|
+
*/
|
|
1083
|
+
getOrchestrationContext?(): Promise<OrchestrationContext>;
|
|
819
1084
|
}
|
|
820
1085
|
declare function getStudySource(source: ContentSourceID, user: UserDBInterface): Promise<StudyContentSource>;
|
|
821
1086
|
|
|
822
|
-
export { type AdminDBInterface as A, type UsrCrsDataInterface as B, type CourseDBInterface as C, type DataLayerResult as D, type ClassroomRegistrationDesignation as E, type ClassroomRegistration as F, type ClassroomRegistrationDoc as G, type SessionTrackingData as H, type UserConfig as I, type ActivityRecord as J, type CourseRegistration as K, type
|
|
1087
|
+
export { isGenerator as $, type AdminDBInterface as A, type UsrCrsDataInterface as B, type CourseDBInterface as C, type DataLayerResult as D, type ClassroomRegistrationDesignation as E, type ClassroomRegistration as F, type ClassroomRegistrationDoc as G, type SessionTrackingData as H, type UserConfig as I, type ActivityRecord as J, type CourseRegistration as K, type UserOutcomeRecord as L, registerNavigator as M, type NavigatorConstructor as N, getRegisteredNavigator as O, hasRegisteredNavigator as P, getRegisteredNavigatorNames as Q, initializeNavigatorRegistry as R, type StudySessionItem as S, type TeacherClassroomDBInterface as T, type UserDBInterface as U, type StrategyContribution as V, type WeightedCard as W, getCardOrigin as X, Navigators as Y, NavigatorRole as Z, NavigatorRoles as _, type UserDBReader as a, isFilter as a0, type LearnableWeight as a1, type OrchestrationContext as a2, computeDeviation as a3, computeSpread as a4, computeEffectiveWeight as a5, createOrchestrationContext as a6, type DocumentUpdater as a7, newInterval as a8, type CoursesDBInterface as b, type ClassroomDBInterface as c, type CourseInfo as d, type ContentNavigationStrategyData as e, ContentNavigator as f, type AssignedContent as g, type StudyContentSource as h, type StudentClassroomDBInterface as i, type ScheduledCard as j, type StudySessionFailedItem as k, type StudySessionFailedNewItem as l, type StudySessionFailedReviewItem as m, type StudySessionNewItem as n, type StudySessionReviewItem as o, isReview as p, type ContentSourceID as q, getStudySource as r, type CourseRegistrationDoc as s, type AssignedTag as t, type AssignedCourse as u, type AssignedCard as v, type UserDBWriter as w, type UserDBAuthenticator as x, type UserCourseSettings as y, type UserCourseSetting as z };
|