@vue-skuilder/db 0.1.32-b → 0.1.32-e
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-DF1nUbPQ.d.cts → contentSource-BMlMwSiG.d.cts} +124 -5
- package/dist/{contentSource-Bdwkvqa8.d.ts → contentSource-Ht3N2f-y.d.ts} +124 -5
- package/dist/core/index.d.cts +26 -83
- package/dist/core/index.d.ts +26 -83
- package/dist/core/index.js +767 -71
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +767 -71
- package/dist/core/index.mjs.map +1 -1
- package/dist/{dataLayerProvider-BQdfJuBN.d.cts → dataLayerProvider-BEqB8VBR.d.cts} +1 -1
- package/dist/{dataLayerProvider-BKmVoyJR.d.ts → dataLayerProvider-DObSXjnf.d.ts} +1 -1
- package/dist/impl/couch/index.d.cts +18 -5
- package/dist/impl/couch/index.d.ts +18 -5
- package/dist/impl/couch/index.js +817 -74
- package/dist/impl/couch/index.js.map +1 -1
- package/dist/impl/couch/index.mjs +817 -74
- 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 +763 -67
- package/dist/impl/static/index.js.map +1 -1
- package/dist/impl/static/index.mjs +763 -67
- package/dist/impl/static/index.mjs.map +1 -1
- package/dist/index.d.cts +23 -8
- package/dist/index.d.ts +23 -8
- package/dist/index.js +872 -86
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +872 -86
- package/dist/index.mjs.map +1 -1
- package/docs/navigators-architecture.md +2 -2
- package/package.json +2 -2
- package/src/core/interfaces/contentSource.ts +3 -3
- package/src/core/navigators/Pipeline.ts +104 -32
- package/src/core/navigators/PipelineDebugger.ts +152 -1
- package/src/core/navigators/filters/hierarchyDefinition.ts +90 -6
- package/src/core/navigators/filters/interferenceMitigator.ts +2 -1
- package/src/core/navigators/filters/relativePriority.ts +2 -1
- package/src/core/navigators/filters/userTagPreference.ts +2 -1
- package/src/core/navigators/generators/CompositeGenerator.ts +58 -5
- package/src/core/navigators/generators/elo.ts +7 -7
- package/src/core/navigators/generators/prescribed.ts +710 -46
- package/src/core/navigators/generators/srs.ts +3 -4
- package/src/core/navigators/generators/types.ts +48 -2
- package/src/core/navigators/index.ts +4 -3
- package/src/impl/couch/CourseSyncService.ts +72 -4
- package/src/impl/couch/classroomDB.ts +4 -3
- package/src/impl/couch/courseDB.ts +5 -4
- package/src/impl/static/courseDB.ts +5 -4
- package/src/study/SessionController.ts +58 -10
- package/src/study/TagFilteredContentSource.ts +4 -3
- package/src/study/services/EloService.ts +22 -3
- package/src/study/services/ResponseProcessor.ts +7 -3
|
@@ -1043,14 +1043,133 @@ declare abstract class ContentNavigator implements StudyContentSource {
|
|
|
1043
1043
|
* @param limit - Maximum cards to return
|
|
1044
1044
|
* @returns Cards sorted by score descending, with provenance trails
|
|
1045
1045
|
*/
|
|
1046
|
-
getWeightedCards(_limit: number): Promise<
|
|
1046
|
+
getWeightedCards(_limit: number): Promise<GeneratorResult>;
|
|
1047
1047
|
/**
|
|
1048
1048
|
* Set ephemeral hints for the next pipeline run.
|
|
1049
1049
|
* No-op for non-Pipeline navigators. Pipeline overrides this.
|
|
1050
1050
|
*/
|
|
1051
|
-
setEphemeralHints(_hints:
|
|
1051
|
+
setEphemeralHints(_hints: ReplanHints): void;
|
|
1052
1052
|
}
|
|
1053
1053
|
|
|
1054
|
+
/**
|
|
1055
|
+
* Typed ephemeral pipeline hints for a single run.
|
|
1056
|
+
* All fields are optional. Tag/card patterns support `*` wildcards.
|
|
1057
|
+
*/
|
|
1058
|
+
interface ReplanHints {
|
|
1059
|
+
/** Multiply scores for cards matching these tag patterns. */
|
|
1060
|
+
boostTags?: Record<string, number>;
|
|
1061
|
+
/** Multiply scores for these specific card IDs (glob patterns). */
|
|
1062
|
+
boostCards?: Record<string, number>;
|
|
1063
|
+
/** Cards matching these tag patterns MUST appear in results. */
|
|
1064
|
+
requireTags?: string[];
|
|
1065
|
+
/** These specific card IDs MUST appear in results. */
|
|
1066
|
+
requireCards?: string[];
|
|
1067
|
+
/** Remove cards matching these tag patterns from results. */
|
|
1068
|
+
excludeTags?: string[];
|
|
1069
|
+
/** Remove these specific card IDs from results. */
|
|
1070
|
+
excludeCards?: string[];
|
|
1071
|
+
/**
|
|
1072
|
+
* Debugging label threaded from the replan requester.
|
|
1073
|
+
* Prefixed with `_` to signal it's metadata, not a scoring hint.
|
|
1074
|
+
*/
|
|
1075
|
+
_label?: string;
|
|
1076
|
+
}
|
|
1077
|
+
/**
|
|
1078
|
+
* Context available to generators when producing candidates.
|
|
1079
|
+
*
|
|
1080
|
+
* Built once per getWeightedCards() call by the Pipeline.
|
|
1081
|
+
*/
|
|
1082
|
+
interface GeneratorContext {
|
|
1083
|
+
/** User database interface */
|
|
1084
|
+
user: UserDBInterface;
|
|
1085
|
+
/** Course database interface */
|
|
1086
|
+
course: CourseDBInterface;
|
|
1087
|
+
/** User's global ELO score for this course */
|
|
1088
|
+
userElo: number;
|
|
1089
|
+
/** Orchestration context for evolutionary weighting */
|
|
1090
|
+
orchestration?: OrchestrationContext;
|
|
1091
|
+
}
|
|
1092
|
+
/**
|
|
1093
|
+
* Structured generator result.
|
|
1094
|
+
*
|
|
1095
|
+
* Generators may optionally emit one-shot replan hints alongside their
|
|
1096
|
+
* candidate cards. This allows a generator to shape the broader pipeline
|
|
1097
|
+
* without having to enumerate every affected support card directly.
|
|
1098
|
+
*/
|
|
1099
|
+
interface GeneratorResult {
|
|
1100
|
+
/** Candidate cards produced by the generator */
|
|
1101
|
+
cards: WeightedCard[];
|
|
1102
|
+
/** Optional one-shot hints to apply after the filter chain */
|
|
1103
|
+
hints?: ReplanHints;
|
|
1104
|
+
}
|
|
1105
|
+
/**
|
|
1106
|
+
* A generator that produces candidate cards with initial scores.
|
|
1107
|
+
*
|
|
1108
|
+
* Generators are the "source" stage of a navigation pipeline.
|
|
1109
|
+
* They query the database for eligible cards and assign initial
|
|
1110
|
+
* suitability scores based on their strategy (ELO proximity,
|
|
1111
|
+
* review urgency, fixed order, etc.).
|
|
1112
|
+
*
|
|
1113
|
+
* ## Implementation Guidelines
|
|
1114
|
+
*
|
|
1115
|
+
* 1. **Create provenance**: Each card should have a provenance entry
|
|
1116
|
+
* with action='generated' documenting why it was selected.
|
|
1117
|
+
*
|
|
1118
|
+
* 2. **Score semantics**: Higher scores = more suitable for presentation.
|
|
1119
|
+
* Scores should be in [0, 1] range for composability.
|
|
1120
|
+
*
|
|
1121
|
+
* 3. **Limit handling**: Respect the limit parameter, but may over-fetch
|
|
1122
|
+
* internally if needed for scoring accuracy.
|
|
1123
|
+
*
|
|
1124
|
+
* 4. **Sort before returning**: Return cards sorted by score descending.
|
|
1125
|
+
*
|
|
1126
|
+
* 5. **Hints are optional**: Generators may return structured results with
|
|
1127
|
+
* `hints` when they need to apply pipeline-wide ephemeral pressure.
|
|
1128
|
+
*
|
|
1129
|
+
* ## Example Implementation
|
|
1130
|
+
*
|
|
1131
|
+
* ```typescript
|
|
1132
|
+
* const myGenerator: CardGenerator = {
|
|
1133
|
+
* name: 'My Generator',
|
|
1134
|
+
* async getWeightedCards(limit, context) {
|
|
1135
|
+
* const candidates = await fetchCandidates(context.course, limit);
|
|
1136
|
+
* return candidates.map(c => ({
|
|
1137
|
+
* cardId: c.id,
|
|
1138
|
+
* courseId: context.course.getCourseID(),
|
|
1139
|
+
* score: computeScore(c, context),
|
|
1140
|
+
* provenance: [{
|
|
1141
|
+
* strategy: 'myGenerator',
|
|
1142
|
+
* strategyName: 'My Generator',
|
|
1143
|
+
* strategyId: 'MY_GENERATOR',
|
|
1144
|
+
* action: 'generated',
|
|
1145
|
+
* score: computeScore(c, context),
|
|
1146
|
+
* reason: 'Explanation of selection'
|
|
1147
|
+
* }]
|
|
1148
|
+
* }));
|
|
1149
|
+
* }
|
|
1150
|
+
* };
|
|
1151
|
+
* ```
|
|
1152
|
+
*/
|
|
1153
|
+
interface CardGenerator {
|
|
1154
|
+
/** Human-readable name for this generator */
|
|
1155
|
+
name: string;
|
|
1156
|
+
/**
|
|
1157
|
+
* Produce candidate cards with initial scores.
|
|
1158
|
+
*
|
|
1159
|
+
* @param limit - Maximum number of cards to return
|
|
1160
|
+
* @param context - Shared context (user, course, userElo, etc.)
|
|
1161
|
+
* @returns Cards sorted by score descending, with provenance, optionally
|
|
1162
|
+
* accompanied by one-shot replan hints
|
|
1163
|
+
*/
|
|
1164
|
+
getWeightedCards(limit: number, context: GeneratorContext): Promise<GeneratorResult>;
|
|
1165
|
+
}
|
|
1166
|
+
/**
|
|
1167
|
+
* Factory function type for creating generators from configuration.
|
|
1168
|
+
*
|
|
1169
|
+
* Used by PipelineAssembler to instantiate generators from strategy documents.
|
|
1170
|
+
*/
|
|
1171
|
+
type CardGeneratorFactory<TConfig = unknown> = (config: TConfig) => CardGenerator;
|
|
1172
|
+
|
|
1054
1173
|
type StudySessionFailedItem = StudySessionFailedNewItem | StudySessionFailedReviewItem;
|
|
1055
1174
|
interface StudySessionFailedNewItem extends StudySessionItem {
|
|
1056
1175
|
status: 'failed-new';
|
|
@@ -1101,7 +1220,7 @@ interface StudyContentSource {
|
|
|
1101
1220
|
* @param limit - Maximum number of cards to return
|
|
1102
1221
|
* @returns Cards sorted by score descending
|
|
1103
1222
|
*/
|
|
1104
|
-
getWeightedCards(limit: number): Promise<
|
|
1223
|
+
getWeightedCards(limit: number): Promise<GeneratorResult>;
|
|
1105
1224
|
/**
|
|
1106
1225
|
* Get the orchestration context for this source.
|
|
1107
1226
|
* Used for recording learning outcomes.
|
|
@@ -1111,8 +1230,8 @@ interface StudyContentSource {
|
|
|
1111
1230
|
* Set ephemeral hints for the next pipeline run.
|
|
1112
1231
|
* No-op for sources that don't support hints.
|
|
1113
1232
|
*/
|
|
1114
|
-
setEphemeralHints?(hints:
|
|
1233
|
+
setEphemeralHints?(hints: ReplanHints): void;
|
|
1115
1234
|
}
|
|
1116
1235
|
declare function getStudySource(source: ContentSourceID, user: UserDBInterface): Promise<StudyContentSource>;
|
|
1117
1236
|
|
|
1118
|
-
export {
|
|
1237
|
+
export { Navigators 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 GeneratorResult as G, type ClassroomRegistrationDoc as H, type SessionTrackingData as I, type UserConfig as J, type ActivityRecord as K, type CourseRegistration as L, type UserOutcomeRecord as M, type NavigatorConstructor as N, registerNavigator as O, getRegisteredNavigator as P, hasRegisteredNavigator as Q, type ReplanHints as R, type StudySessionItem as S, type TeacherClassroomDBInterface as T, type UserDBInterface as U, getRegisteredNavigatorRole as V, type WeightedCard as W, getRegisteredNavigatorNames as X, initializeNavigatorRegistry as Y, type StrategyContribution as Z, getCardOrigin as _, type UserDBReader as a, NavigatorRole as a0, NavigatorRoles as a1, isGenerator as a2, isFilter as a3, type CardGenerator as a4, type GeneratorContext as a5, type CardGeneratorFactory as a6, type LearnableWeight as a7, type OrchestrationContext as a8, computeDeviation as a9, computeSpread as aa, computeEffectiveWeight as ab, createOrchestrationContext as ac, type DocumentUpdater as ad, newInterval as ae, 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 };
|
|
@@ -1043,14 +1043,133 @@ declare abstract class ContentNavigator implements StudyContentSource {
|
|
|
1043
1043
|
* @param limit - Maximum cards to return
|
|
1044
1044
|
* @returns Cards sorted by score descending, with provenance trails
|
|
1045
1045
|
*/
|
|
1046
|
-
getWeightedCards(_limit: number): Promise<
|
|
1046
|
+
getWeightedCards(_limit: number): Promise<GeneratorResult>;
|
|
1047
1047
|
/**
|
|
1048
1048
|
* Set ephemeral hints for the next pipeline run.
|
|
1049
1049
|
* No-op for non-Pipeline navigators. Pipeline overrides this.
|
|
1050
1050
|
*/
|
|
1051
|
-
setEphemeralHints(_hints:
|
|
1051
|
+
setEphemeralHints(_hints: ReplanHints): void;
|
|
1052
1052
|
}
|
|
1053
1053
|
|
|
1054
|
+
/**
|
|
1055
|
+
* Typed ephemeral pipeline hints for a single run.
|
|
1056
|
+
* All fields are optional. Tag/card patterns support `*` wildcards.
|
|
1057
|
+
*/
|
|
1058
|
+
interface ReplanHints {
|
|
1059
|
+
/** Multiply scores for cards matching these tag patterns. */
|
|
1060
|
+
boostTags?: Record<string, number>;
|
|
1061
|
+
/** Multiply scores for these specific card IDs (glob patterns). */
|
|
1062
|
+
boostCards?: Record<string, number>;
|
|
1063
|
+
/** Cards matching these tag patterns MUST appear in results. */
|
|
1064
|
+
requireTags?: string[];
|
|
1065
|
+
/** These specific card IDs MUST appear in results. */
|
|
1066
|
+
requireCards?: string[];
|
|
1067
|
+
/** Remove cards matching these tag patterns from results. */
|
|
1068
|
+
excludeTags?: string[];
|
|
1069
|
+
/** Remove these specific card IDs from results. */
|
|
1070
|
+
excludeCards?: string[];
|
|
1071
|
+
/**
|
|
1072
|
+
* Debugging label threaded from the replan requester.
|
|
1073
|
+
* Prefixed with `_` to signal it's metadata, not a scoring hint.
|
|
1074
|
+
*/
|
|
1075
|
+
_label?: string;
|
|
1076
|
+
}
|
|
1077
|
+
/**
|
|
1078
|
+
* Context available to generators when producing candidates.
|
|
1079
|
+
*
|
|
1080
|
+
* Built once per getWeightedCards() call by the Pipeline.
|
|
1081
|
+
*/
|
|
1082
|
+
interface GeneratorContext {
|
|
1083
|
+
/** User database interface */
|
|
1084
|
+
user: UserDBInterface;
|
|
1085
|
+
/** Course database interface */
|
|
1086
|
+
course: CourseDBInterface;
|
|
1087
|
+
/** User's global ELO score for this course */
|
|
1088
|
+
userElo: number;
|
|
1089
|
+
/** Orchestration context for evolutionary weighting */
|
|
1090
|
+
orchestration?: OrchestrationContext;
|
|
1091
|
+
}
|
|
1092
|
+
/**
|
|
1093
|
+
* Structured generator result.
|
|
1094
|
+
*
|
|
1095
|
+
* Generators may optionally emit one-shot replan hints alongside their
|
|
1096
|
+
* candidate cards. This allows a generator to shape the broader pipeline
|
|
1097
|
+
* without having to enumerate every affected support card directly.
|
|
1098
|
+
*/
|
|
1099
|
+
interface GeneratorResult {
|
|
1100
|
+
/** Candidate cards produced by the generator */
|
|
1101
|
+
cards: WeightedCard[];
|
|
1102
|
+
/** Optional one-shot hints to apply after the filter chain */
|
|
1103
|
+
hints?: ReplanHints;
|
|
1104
|
+
}
|
|
1105
|
+
/**
|
|
1106
|
+
* A generator that produces candidate cards with initial scores.
|
|
1107
|
+
*
|
|
1108
|
+
* Generators are the "source" stage of a navigation pipeline.
|
|
1109
|
+
* They query the database for eligible cards and assign initial
|
|
1110
|
+
* suitability scores based on their strategy (ELO proximity,
|
|
1111
|
+
* review urgency, fixed order, etc.).
|
|
1112
|
+
*
|
|
1113
|
+
* ## Implementation Guidelines
|
|
1114
|
+
*
|
|
1115
|
+
* 1. **Create provenance**: Each card should have a provenance entry
|
|
1116
|
+
* with action='generated' documenting why it was selected.
|
|
1117
|
+
*
|
|
1118
|
+
* 2. **Score semantics**: Higher scores = more suitable for presentation.
|
|
1119
|
+
* Scores should be in [0, 1] range for composability.
|
|
1120
|
+
*
|
|
1121
|
+
* 3. **Limit handling**: Respect the limit parameter, but may over-fetch
|
|
1122
|
+
* internally if needed for scoring accuracy.
|
|
1123
|
+
*
|
|
1124
|
+
* 4. **Sort before returning**: Return cards sorted by score descending.
|
|
1125
|
+
*
|
|
1126
|
+
* 5. **Hints are optional**: Generators may return structured results with
|
|
1127
|
+
* `hints` when they need to apply pipeline-wide ephemeral pressure.
|
|
1128
|
+
*
|
|
1129
|
+
* ## Example Implementation
|
|
1130
|
+
*
|
|
1131
|
+
* ```typescript
|
|
1132
|
+
* const myGenerator: CardGenerator = {
|
|
1133
|
+
* name: 'My Generator',
|
|
1134
|
+
* async getWeightedCards(limit, context) {
|
|
1135
|
+
* const candidates = await fetchCandidates(context.course, limit);
|
|
1136
|
+
* return candidates.map(c => ({
|
|
1137
|
+
* cardId: c.id,
|
|
1138
|
+
* courseId: context.course.getCourseID(),
|
|
1139
|
+
* score: computeScore(c, context),
|
|
1140
|
+
* provenance: [{
|
|
1141
|
+
* strategy: 'myGenerator',
|
|
1142
|
+
* strategyName: 'My Generator',
|
|
1143
|
+
* strategyId: 'MY_GENERATOR',
|
|
1144
|
+
* action: 'generated',
|
|
1145
|
+
* score: computeScore(c, context),
|
|
1146
|
+
* reason: 'Explanation of selection'
|
|
1147
|
+
* }]
|
|
1148
|
+
* }));
|
|
1149
|
+
* }
|
|
1150
|
+
* };
|
|
1151
|
+
* ```
|
|
1152
|
+
*/
|
|
1153
|
+
interface CardGenerator {
|
|
1154
|
+
/** Human-readable name for this generator */
|
|
1155
|
+
name: string;
|
|
1156
|
+
/**
|
|
1157
|
+
* Produce candidate cards with initial scores.
|
|
1158
|
+
*
|
|
1159
|
+
* @param limit - Maximum number of cards to return
|
|
1160
|
+
* @param context - Shared context (user, course, userElo, etc.)
|
|
1161
|
+
* @returns Cards sorted by score descending, with provenance, optionally
|
|
1162
|
+
* accompanied by one-shot replan hints
|
|
1163
|
+
*/
|
|
1164
|
+
getWeightedCards(limit: number, context: GeneratorContext): Promise<GeneratorResult>;
|
|
1165
|
+
}
|
|
1166
|
+
/**
|
|
1167
|
+
* Factory function type for creating generators from configuration.
|
|
1168
|
+
*
|
|
1169
|
+
* Used by PipelineAssembler to instantiate generators from strategy documents.
|
|
1170
|
+
*/
|
|
1171
|
+
type CardGeneratorFactory<TConfig = unknown> = (config: TConfig) => CardGenerator;
|
|
1172
|
+
|
|
1054
1173
|
type StudySessionFailedItem = StudySessionFailedNewItem | StudySessionFailedReviewItem;
|
|
1055
1174
|
interface StudySessionFailedNewItem extends StudySessionItem {
|
|
1056
1175
|
status: 'failed-new';
|
|
@@ -1101,7 +1220,7 @@ interface StudyContentSource {
|
|
|
1101
1220
|
* @param limit - Maximum number of cards to return
|
|
1102
1221
|
* @returns Cards sorted by score descending
|
|
1103
1222
|
*/
|
|
1104
|
-
getWeightedCards(limit: number): Promise<
|
|
1223
|
+
getWeightedCards(limit: number): Promise<GeneratorResult>;
|
|
1105
1224
|
/**
|
|
1106
1225
|
* Get the orchestration context for this source.
|
|
1107
1226
|
* Used for recording learning outcomes.
|
|
@@ -1111,8 +1230,8 @@ interface StudyContentSource {
|
|
|
1111
1230
|
* Set ephemeral hints for the next pipeline run.
|
|
1112
1231
|
* No-op for sources that don't support hints.
|
|
1113
1232
|
*/
|
|
1114
|
-
setEphemeralHints?(hints:
|
|
1233
|
+
setEphemeralHints?(hints: ReplanHints): void;
|
|
1115
1234
|
}
|
|
1116
1235
|
declare function getStudySource(source: ContentSourceID, user: UserDBInterface): Promise<StudyContentSource>;
|
|
1117
1236
|
|
|
1118
|
-
export {
|
|
1237
|
+
export { Navigators 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 GeneratorResult as G, type ClassroomRegistrationDoc as H, type SessionTrackingData as I, type UserConfig as J, type ActivityRecord as K, type CourseRegistration as L, type UserOutcomeRecord as M, type NavigatorConstructor as N, registerNavigator as O, getRegisteredNavigator as P, hasRegisteredNavigator as Q, type ReplanHints as R, type StudySessionItem as S, type TeacherClassroomDBInterface as T, type UserDBInterface as U, getRegisteredNavigatorRole as V, type WeightedCard as W, getRegisteredNavigatorNames as X, initializeNavigatorRegistry as Y, type StrategyContribution as Z, getCardOrigin as _, type UserDBReader as a, NavigatorRole as a0, NavigatorRoles as a1, isGenerator as a2, isFilter as a3, type CardGenerator as a4, type GeneratorContext as a5, type CardGeneratorFactory as a6, type LearnableWeight as a7, type OrchestrationContext as a8, computeDeviation as a9, computeSpread as aa, computeEffectiveWeight as ab, createOrchestrationContext as ac, type DocumentUpdater as ad, newInterval as ae, 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 };
|
package/dist/core/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
export { D as DataLayerProvider } from '../dataLayerProvider-
|
|
1
|
+
import { a7 as LearnableWeight, M as UserOutcomeRecord, a8 as OrchestrationContext, W as WeightedCard, U as UserDBInterface, C as CourseDBInterface, Z as StrategyContribution } from '../contentSource-BMlMwSiG.cjs';
|
|
2
|
+
export { K as ActivityRecord, A as AdminDBInterface, v as AssignedCard, g as AssignedContent, u as AssignedCourse, t as AssignedTag, a4 as CardGenerator, a6 as CardGeneratorFactory, c as ClassroomDBInterface, F as ClassroomRegistration, E as ClassroomRegistrationDesignation, H as ClassroomRegistrationDoc, e as ContentNavigationStrategyData, f as ContentNavigator, q as ContentSourceID, d as CourseInfo, L as CourseRegistration, s as CourseRegistrationDoc, b as CoursesDBInterface, a5 as GeneratorContext, G as GeneratorResult, N as NavigatorConstructor, a0 as NavigatorRole, a1 as NavigatorRoles, $ as Navigators, R as ReplanHints, j as ScheduledCard, I as SessionTrackingData, i as StudentClassroomDBInterface, h as StudyContentSource, k as StudySessionFailedItem, l as StudySessionFailedNewItem, m as StudySessionFailedReviewItem, S as StudySessionItem, n as StudySessionNewItem, o as StudySessionReviewItem, T as TeacherClassroomDBInterface, J as UserConfig, z as UserCourseSetting, y as UserCourseSettings, x as UserDBAuthenticator, a as UserDBReader, w as UserDBWriter, B as UsrCrsDataInterface, a9 as computeDeviation, ab as computeEffectiveWeight, aa as computeSpread, ac as createOrchestrationContext, _ as getCardOrigin, P as getRegisteredNavigator, X as getRegisteredNavigatorNames, V as getRegisteredNavigatorRole, r as getStudySource, Q as hasRegisteredNavigator, Y as initializeNavigatorRegistry, a3 as isFilter, a2 as isGenerator, p as isReview, O as registerNavigator } from '../contentSource-BMlMwSiG.cjs';
|
|
3
|
+
export { D as DataLayerProvider } from '../dataLayerProvider-BEqB8VBR.cjs';
|
|
4
4
|
import { D as DocType, i as QuestionRecord, b as DocTypePrefixes, C as CardHistory, c as CardRecord } from '../types-legacy-JXDxinpU.cjs';
|
|
5
5
|
export { d as CardData, e as CourseListData, g as DataShapeData, f as DisplayableData, F as Field, G as GuestUsername, Q as QualifiedCardID, h as QuestionData, S as SkuilderCourseData, a as Tag, T as TagStub, l as log } from '../types-legacy-JXDxinpU.cjs';
|
|
6
6
|
import { DataShape, ParsedCard } from '@vue-skuilder/common';
|
|
@@ -304,85 +304,6 @@ interface CardFilter {
|
|
|
304
304
|
*/
|
|
305
305
|
type CardFilterFactory<TConfig = unknown> = (config: TConfig) => CardFilter;
|
|
306
306
|
|
|
307
|
-
/**
|
|
308
|
-
* Context available to generators when producing candidates.
|
|
309
|
-
*
|
|
310
|
-
* Built once per getWeightedCards() call by the Pipeline.
|
|
311
|
-
*/
|
|
312
|
-
interface GeneratorContext {
|
|
313
|
-
/** User database interface */
|
|
314
|
-
user: UserDBInterface;
|
|
315
|
-
/** Course database interface */
|
|
316
|
-
course: CourseDBInterface;
|
|
317
|
-
/** User's global ELO score for this course */
|
|
318
|
-
userElo: number;
|
|
319
|
-
/** Orchestration context for evolutionary weighting */
|
|
320
|
-
orchestration?: OrchestrationContext;
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* A generator that produces candidate cards with initial scores.
|
|
324
|
-
*
|
|
325
|
-
* Generators are the "source" stage of a navigation pipeline.
|
|
326
|
-
* They query the database for eligible cards and assign initial
|
|
327
|
-
* suitability scores based on their strategy (ELO proximity,
|
|
328
|
-
* review urgency, fixed order, etc.).
|
|
329
|
-
*
|
|
330
|
-
* ## Implementation Guidelines
|
|
331
|
-
*
|
|
332
|
-
* 1. **Create provenance**: Each card should have a provenance entry
|
|
333
|
-
* with action='generated' documenting why it was selected.
|
|
334
|
-
*
|
|
335
|
-
* 2. **Score semantics**: Higher scores = more suitable for presentation.
|
|
336
|
-
* Scores should be in [0, 1] range for composability.
|
|
337
|
-
*
|
|
338
|
-
* 3. **Limit handling**: Respect the limit parameter, but may over-fetch
|
|
339
|
-
* internally if needed for scoring accuracy.
|
|
340
|
-
*
|
|
341
|
-
* 4. **Sort before returning**: Return cards sorted by score descending.
|
|
342
|
-
*
|
|
343
|
-
* ## Example Implementation
|
|
344
|
-
*
|
|
345
|
-
* ```typescript
|
|
346
|
-
* const myGenerator: CardGenerator = {
|
|
347
|
-
* name: 'My Generator',
|
|
348
|
-
* async getWeightedCards(limit, context) {
|
|
349
|
-
* const candidates = await fetchCandidates(context.course, limit);
|
|
350
|
-
* return candidates.map(c => ({
|
|
351
|
-
* cardId: c.id,
|
|
352
|
-
* courseId: context.course.getCourseID(),
|
|
353
|
-
* score: computeScore(c, context),
|
|
354
|
-
* provenance: [{
|
|
355
|
-
* strategy: 'myGenerator',
|
|
356
|
-
* strategyName: 'My Generator',
|
|
357
|
-
* strategyId: 'MY_GENERATOR',
|
|
358
|
-
* action: 'generated',
|
|
359
|
-
* score: computeScore(c, context),
|
|
360
|
-
* reason: 'Explanation of selection'
|
|
361
|
-
* }]
|
|
362
|
-
* }));
|
|
363
|
-
* }
|
|
364
|
-
* };
|
|
365
|
-
* ```
|
|
366
|
-
*/
|
|
367
|
-
interface CardGenerator {
|
|
368
|
-
/** Human-readable name for this generator */
|
|
369
|
-
name: string;
|
|
370
|
-
/**
|
|
371
|
-
* Produce candidate cards with initial scores.
|
|
372
|
-
*
|
|
373
|
-
* @param limit - Maximum number of cards to return
|
|
374
|
-
* @param context - Shared context (user, course, userElo, etc.)
|
|
375
|
-
* @returns Cards sorted by score descending, with provenance
|
|
376
|
-
*/
|
|
377
|
-
getWeightedCards(limit: number, context: GeneratorContext): Promise<WeightedCard[]>;
|
|
378
|
-
}
|
|
379
|
-
/**
|
|
380
|
-
* Factory function type for creating generators from configuration.
|
|
381
|
-
*
|
|
382
|
-
* Used by PipelineAssembler to instantiate generators from strategy documents.
|
|
383
|
-
*/
|
|
384
|
-
type CardGeneratorFactory<TConfig = unknown> = (config: TConfig) => CardGenerator;
|
|
385
|
-
|
|
386
307
|
/**
|
|
387
308
|
* Diagnosis of the full card space for the current user.
|
|
388
309
|
*/
|
|
@@ -432,6 +353,8 @@ interface PipelineRunReport {
|
|
|
432
353
|
timestamp: Date;
|
|
433
354
|
courseId: string;
|
|
434
355
|
courseName?: string;
|
|
356
|
+
/** User's global ELO at the time of this pipeline run */
|
|
357
|
+
userElo?: number;
|
|
435
358
|
generatorName: string;
|
|
436
359
|
generators?: GeneratorSummary[];
|
|
437
360
|
generatedCount: number;
|
|
@@ -444,6 +367,8 @@ interface PipelineRunReport {
|
|
|
444
367
|
courseId: string;
|
|
445
368
|
origin: 'new' | 'review' | 'unknown';
|
|
446
369
|
finalScore: number;
|
|
370
|
+
/** Card's ELO (parsed from ELO generator provenance, if available) */
|
|
371
|
+
cardElo?: number;
|
|
447
372
|
provenance: StrategyContribution[];
|
|
448
373
|
tags?: string[];
|
|
449
374
|
selected: boolean;
|
|
@@ -473,6 +398,17 @@ declare const pipelineDebugAPI: {
|
|
|
473
398
|
* Explain why reviews may or may not have been selected.
|
|
474
399
|
*/
|
|
475
400
|
explainReviews(): void;
|
|
401
|
+
/**
|
|
402
|
+
* Show prescribed-related cards from the most recent run.
|
|
403
|
+
*
|
|
404
|
+
* Highlights:
|
|
405
|
+
* - cards directly generated by the prescribed strategy
|
|
406
|
+
* - blocked prescribed targets mentioned in provenance
|
|
407
|
+
* - support tags resolved for blocked targets
|
|
408
|
+
*
|
|
409
|
+
* @param groupId - Optional prescribed group ID filter (e.g. 'intro-core')
|
|
410
|
+
*/
|
|
411
|
+
showPrescribed(groupId?: string): void;
|
|
476
412
|
/**
|
|
477
413
|
* Show all runs in compact format.
|
|
478
414
|
*/
|
|
@@ -508,6 +444,13 @@ declare const pipelineDebugAPI: {
|
|
|
508
444
|
* @param threshold - Score threshold for "well indicated" (default 0.10)
|
|
509
445
|
*/
|
|
510
446
|
diagnoseCardSpace(threshold?: number): Promise<CardSpaceDiagnosis | null>;
|
|
447
|
+
/**
|
|
448
|
+
* Show user's per-tag ELO data. Useful for diagnosing hierarchy gate status.
|
|
449
|
+
*
|
|
450
|
+
* @param tagFilter - Optional glob pattern(s) to filter tags.
|
|
451
|
+
* Examples: 'gpc:expose:*', 'gpc:intro:t-T', ['gpc:expose:t-*', 'gpc:intro:t-*']
|
|
452
|
+
*/
|
|
453
|
+
showTagElo(tagFilter?: string | string[]): Promise<void>;
|
|
511
454
|
/**
|
|
512
455
|
* Show help.
|
|
513
456
|
*/
|
|
@@ -700,4 +643,4 @@ declare const userDBDebugAPI: {
|
|
|
700
643
|
*/
|
|
701
644
|
declare function mountUserDBDebugger(): void;
|
|
702
645
|
|
|
703
|
-
export { type BulkCardProcessorConfig, type CardFilter, type CardFilterFactory,
|
|
646
|
+
export { type BulkCardProcessorConfig, type CardFilter, type CardFilterFactory, CardHistory, CardRecord, CourseDBInterface, DocType, DocTypePrefixes, type FilterContext, type FilterImpact, type GeneratorSummary, type GradientObservation, type GradientResult, type ImportResult, LearnableWeight, Loggable, OrchestrationContext, type PeriodUpdateInput, type PeriodUpdateResult, type PipelineRunReport, QuestionRecord, type SignalConfig, StrategyContribution, type StrategyLearningState, type StrategyStateDoc, type StrategyStateId, UserDBInterface, UserOutcomeRecord, WeightedCard, aggregateOutcomesForGradient, areQuestionRecords, buildStrategyStateId, computeOutcomeSignal, computeStrategyGradient, docIsDeleted, getCardHistoryID, getDefaultLearnableWeight, importParsedCards, isQuestionRecord, mountPipelineDebugger, mountUserDBDebugger, parseCardHistoryID, pipelineDebugAPI, recordUserOutcome, runPeriodUpdate, scoreAccuracyInZone, updateLearningState, updateStrategyWeight, userDBDebugAPI, validateProcessorConfig };
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
export { D as DataLayerProvider } from '../dataLayerProvider-
|
|
1
|
+
import { a7 as LearnableWeight, M as UserOutcomeRecord, a8 as OrchestrationContext, W as WeightedCard, U as UserDBInterface, C as CourseDBInterface, Z as StrategyContribution } from '../contentSource-Ht3N2f-y.js';
|
|
2
|
+
export { K as ActivityRecord, A as AdminDBInterface, v as AssignedCard, g as AssignedContent, u as AssignedCourse, t as AssignedTag, a4 as CardGenerator, a6 as CardGeneratorFactory, c as ClassroomDBInterface, F as ClassroomRegistration, E as ClassroomRegistrationDesignation, H as ClassroomRegistrationDoc, e as ContentNavigationStrategyData, f as ContentNavigator, q as ContentSourceID, d as CourseInfo, L as CourseRegistration, s as CourseRegistrationDoc, b as CoursesDBInterface, a5 as GeneratorContext, G as GeneratorResult, N as NavigatorConstructor, a0 as NavigatorRole, a1 as NavigatorRoles, $ as Navigators, R as ReplanHints, j as ScheduledCard, I as SessionTrackingData, i as StudentClassroomDBInterface, h as StudyContentSource, k as StudySessionFailedItem, l as StudySessionFailedNewItem, m as StudySessionFailedReviewItem, S as StudySessionItem, n as StudySessionNewItem, o as StudySessionReviewItem, T as TeacherClassroomDBInterface, J as UserConfig, z as UserCourseSetting, y as UserCourseSettings, x as UserDBAuthenticator, a as UserDBReader, w as UserDBWriter, B as UsrCrsDataInterface, a9 as computeDeviation, ab as computeEffectiveWeight, aa as computeSpread, ac as createOrchestrationContext, _ as getCardOrigin, P as getRegisteredNavigator, X as getRegisteredNavigatorNames, V as getRegisteredNavigatorRole, r as getStudySource, Q as hasRegisteredNavigator, Y as initializeNavigatorRegistry, a3 as isFilter, a2 as isGenerator, p as isReview, O as registerNavigator } from '../contentSource-Ht3N2f-y.js';
|
|
3
|
+
export { D as DataLayerProvider } from '../dataLayerProvider-DObSXjnf.js';
|
|
4
4
|
import { D as DocType, i as QuestionRecord, b as DocTypePrefixes, C as CardHistory, c as CardRecord } from '../types-legacy-JXDxinpU.js';
|
|
5
5
|
export { d as CardData, e as CourseListData, g as DataShapeData, f as DisplayableData, F as Field, G as GuestUsername, Q as QualifiedCardID, h as QuestionData, S as SkuilderCourseData, a as Tag, T as TagStub, l as log } from '../types-legacy-JXDxinpU.js';
|
|
6
6
|
import { DataShape, ParsedCard } from '@vue-skuilder/common';
|
|
@@ -304,85 +304,6 @@ interface CardFilter {
|
|
|
304
304
|
*/
|
|
305
305
|
type CardFilterFactory<TConfig = unknown> = (config: TConfig) => CardFilter;
|
|
306
306
|
|
|
307
|
-
/**
|
|
308
|
-
* Context available to generators when producing candidates.
|
|
309
|
-
*
|
|
310
|
-
* Built once per getWeightedCards() call by the Pipeline.
|
|
311
|
-
*/
|
|
312
|
-
interface GeneratorContext {
|
|
313
|
-
/** User database interface */
|
|
314
|
-
user: UserDBInterface;
|
|
315
|
-
/** Course database interface */
|
|
316
|
-
course: CourseDBInterface;
|
|
317
|
-
/** User's global ELO score for this course */
|
|
318
|
-
userElo: number;
|
|
319
|
-
/** Orchestration context for evolutionary weighting */
|
|
320
|
-
orchestration?: OrchestrationContext;
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* A generator that produces candidate cards with initial scores.
|
|
324
|
-
*
|
|
325
|
-
* Generators are the "source" stage of a navigation pipeline.
|
|
326
|
-
* They query the database for eligible cards and assign initial
|
|
327
|
-
* suitability scores based on their strategy (ELO proximity,
|
|
328
|
-
* review urgency, fixed order, etc.).
|
|
329
|
-
*
|
|
330
|
-
* ## Implementation Guidelines
|
|
331
|
-
*
|
|
332
|
-
* 1. **Create provenance**: Each card should have a provenance entry
|
|
333
|
-
* with action='generated' documenting why it was selected.
|
|
334
|
-
*
|
|
335
|
-
* 2. **Score semantics**: Higher scores = more suitable for presentation.
|
|
336
|
-
* Scores should be in [0, 1] range for composability.
|
|
337
|
-
*
|
|
338
|
-
* 3. **Limit handling**: Respect the limit parameter, but may over-fetch
|
|
339
|
-
* internally if needed for scoring accuracy.
|
|
340
|
-
*
|
|
341
|
-
* 4. **Sort before returning**: Return cards sorted by score descending.
|
|
342
|
-
*
|
|
343
|
-
* ## Example Implementation
|
|
344
|
-
*
|
|
345
|
-
* ```typescript
|
|
346
|
-
* const myGenerator: CardGenerator = {
|
|
347
|
-
* name: 'My Generator',
|
|
348
|
-
* async getWeightedCards(limit, context) {
|
|
349
|
-
* const candidates = await fetchCandidates(context.course, limit);
|
|
350
|
-
* return candidates.map(c => ({
|
|
351
|
-
* cardId: c.id,
|
|
352
|
-
* courseId: context.course.getCourseID(),
|
|
353
|
-
* score: computeScore(c, context),
|
|
354
|
-
* provenance: [{
|
|
355
|
-
* strategy: 'myGenerator',
|
|
356
|
-
* strategyName: 'My Generator',
|
|
357
|
-
* strategyId: 'MY_GENERATOR',
|
|
358
|
-
* action: 'generated',
|
|
359
|
-
* score: computeScore(c, context),
|
|
360
|
-
* reason: 'Explanation of selection'
|
|
361
|
-
* }]
|
|
362
|
-
* }));
|
|
363
|
-
* }
|
|
364
|
-
* };
|
|
365
|
-
* ```
|
|
366
|
-
*/
|
|
367
|
-
interface CardGenerator {
|
|
368
|
-
/** Human-readable name for this generator */
|
|
369
|
-
name: string;
|
|
370
|
-
/**
|
|
371
|
-
* Produce candidate cards with initial scores.
|
|
372
|
-
*
|
|
373
|
-
* @param limit - Maximum number of cards to return
|
|
374
|
-
* @param context - Shared context (user, course, userElo, etc.)
|
|
375
|
-
* @returns Cards sorted by score descending, with provenance
|
|
376
|
-
*/
|
|
377
|
-
getWeightedCards(limit: number, context: GeneratorContext): Promise<WeightedCard[]>;
|
|
378
|
-
}
|
|
379
|
-
/**
|
|
380
|
-
* Factory function type for creating generators from configuration.
|
|
381
|
-
*
|
|
382
|
-
* Used by PipelineAssembler to instantiate generators from strategy documents.
|
|
383
|
-
*/
|
|
384
|
-
type CardGeneratorFactory<TConfig = unknown> = (config: TConfig) => CardGenerator;
|
|
385
|
-
|
|
386
307
|
/**
|
|
387
308
|
* Diagnosis of the full card space for the current user.
|
|
388
309
|
*/
|
|
@@ -432,6 +353,8 @@ interface PipelineRunReport {
|
|
|
432
353
|
timestamp: Date;
|
|
433
354
|
courseId: string;
|
|
434
355
|
courseName?: string;
|
|
356
|
+
/** User's global ELO at the time of this pipeline run */
|
|
357
|
+
userElo?: number;
|
|
435
358
|
generatorName: string;
|
|
436
359
|
generators?: GeneratorSummary[];
|
|
437
360
|
generatedCount: number;
|
|
@@ -444,6 +367,8 @@ interface PipelineRunReport {
|
|
|
444
367
|
courseId: string;
|
|
445
368
|
origin: 'new' | 'review' | 'unknown';
|
|
446
369
|
finalScore: number;
|
|
370
|
+
/** Card's ELO (parsed from ELO generator provenance, if available) */
|
|
371
|
+
cardElo?: number;
|
|
447
372
|
provenance: StrategyContribution[];
|
|
448
373
|
tags?: string[];
|
|
449
374
|
selected: boolean;
|
|
@@ -473,6 +398,17 @@ declare const pipelineDebugAPI: {
|
|
|
473
398
|
* Explain why reviews may or may not have been selected.
|
|
474
399
|
*/
|
|
475
400
|
explainReviews(): void;
|
|
401
|
+
/**
|
|
402
|
+
* Show prescribed-related cards from the most recent run.
|
|
403
|
+
*
|
|
404
|
+
* Highlights:
|
|
405
|
+
* - cards directly generated by the prescribed strategy
|
|
406
|
+
* - blocked prescribed targets mentioned in provenance
|
|
407
|
+
* - support tags resolved for blocked targets
|
|
408
|
+
*
|
|
409
|
+
* @param groupId - Optional prescribed group ID filter (e.g. 'intro-core')
|
|
410
|
+
*/
|
|
411
|
+
showPrescribed(groupId?: string): void;
|
|
476
412
|
/**
|
|
477
413
|
* Show all runs in compact format.
|
|
478
414
|
*/
|
|
@@ -508,6 +444,13 @@ declare const pipelineDebugAPI: {
|
|
|
508
444
|
* @param threshold - Score threshold for "well indicated" (default 0.10)
|
|
509
445
|
*/
|
|
510
446
|
diagnoseCardSpace(threshold?: number): Promise<CardSpaceDiagnosis | null>;
|
|
447
|
+
/**
|
|
448
|
+
* Show user's per-tag ELO data. Useful for diagnosing hierarchy gate status.
|
|
449
|
+
*
|
|
450
|
+
* @param tagFilter - Optional glob pattern(s) to filter tags.
|
|
451
|
+
* Examples: 'gpc:expose:*', 'gpc:intro:t-T', ['gpc:expose:t-*', 'gpc:intro:t-*']
|
|
452
|
+
*/
|
|
453
|
+
showTagElo(tagFilter?: string | string[]): Promise<void>;
|
|
511
454
|
/**
|
|
512
455
|
* Show help.
|
|
513
456
|
*/
|
|
@@ -700,4 +643,4 @@ declare const userDBDebugAPI: {
|
|
|
700
643
|
*/
|
|
701
644
|
declare function mountUserDBDebugger(): void;
|
|
702
645
|
|
|
703
|
-
export { type BulkCardProcessorConfig, type CardFilter, type CardFilterFactory,
|
|
646
|
+
export { type BulkCardProcessorConfig, type CardFilter, type CardFilterFactory, CardHistory, CardRecord, CourseDBInterface, DocType, DocTypePrefixes, type FilterContext, type FilterImpact, type GeneratorSummary, type GradientObservation, type GradientResult, type ImportResult, LearnableWeight, Loggable, OrchestrationContext, type PeriodUpdateInput, type PeriodUpdateResult, type PipelineRunReport, QuestionRecord, type SignalConfig, StrategyContribution, type StrategyLearningState, type StrategyStateDoc, type StrategyStateId, UserDBInterface, UserOutcomeRecord, WeightedCard, aggregateOutcomesForGradient, areQuestionRecords, buildStrategyStateId, computeOutcomeSignal, computeStrategyGradient, docIsDeleted, getCardHistoryID, getDefaultLearnableWeight, importParsedCards, isQuestionRecord, mountPipelineDebugger, mountUserDBDebugger, parseCardHistoryID, pipelineDebugAPI, recordUserOutcome, runPeriodUpdate, scoreAccuracyInZone, updateLearningState, updateStrategyWeight, userDBDebugAPI, validateProcessorConfig };
|