@vue-skuilder/platform-ui 0.2.36 → 0.2.37
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/assets/{About-74htcNLT.js → About-BkMENQtD.js} +2 -2
- package/dist/assets/{About-74htcNLT.js.map → About-BkMENQtD.js.map} +1 -1
- package/dist/assets/{AdminDashboard-B00qno2M.js → AdminDashboard-5R-xgY-M.js} +2 -2
- package/dist/assets/{AdminDashboard-B00qno2M.js.map → AdminDashboard-5R-xgY-M.js.map} +1 -1
- package/dist/assets/{AdminLearner-SJNtSyJ_.js → AdminLearner-Br10DFSt.js} +2 -2
- package/dist/assets/{AdminLearner-SJNtSyJ_.js.map → AdminLearner-Br10DFSt.js.map} +1 -1
- package/dist/assets/BaseUserDB-BRgNfdWx.js +1 -0
- package/dist/assets/{ClassroomCtrlPanel-BSAG3h8B.js → ClassroomCtrlPanel-DQJQ0B7M.js} +2 -2
- package/dist/assets/{ClassroomCtrlPanel-BSAG3h8B.js.map → ClassroomCtrlPanel-DQJQ0B7M.js.map} +1 -1
- package/dist/assets/{Classrooms-DXNEbtsM.js → Classrooms-B5tQPFEE.js} +2 -2
- package/dist/assets/{Classrooms-DXNEbtsM.js.map → Classrooms-B5tQPFEE.js.map} +1 -1
- package/dist/assets/CouchDBSyncStrategy-0EgX8AAz.js +1 -0
- package/dist/assets/{CourseRouter-CsVa_92r.js → CourseRouter-W6S7DpZN.js} +2 -2
- package/dist/assets/{CourseRouter-CsVa_92r.js.map → CourseRouter-W6S7DpZN.js.map} +1 -1
- package/dist/assets/CourseSyncService-CrHp0wsl.js +1 -0
- package/dist/assets/{CourseWare-BTFRjgBR-DBp_fIwH.js → CourseWare-BTFRjgBR-lpqcYpAW.js} +3 -3
- package/dist/assets/{CourseWare-BTFRjgBR-DBp_fIwH.js.map → CourseWare-BTFRjgBR-lpqcYpAW.js.map} +1 -1
- package/dist/assets/{Courses-CB6GGtdm.js → Courses-TzwgFdwn.js} +2 -2
- package/dist/assets/{Courses-CB6GGtdm.js.map → Courses-TzwgFdwn.js.map} +1 -1
- package/dist/assets/{EloModeration-DUBgs-Vh.js → EloModeration-BCz7VKla.js} +2 -2
- package/dist/assets/{EloModeration-DUBgs-Vh.js.map → EloModeration-BCz7VKla.js.map} +1 -1
- package/dist/assets/{JoinCode-BBvYapCA.js → JoinCode-CEeZkFOp.js} +2 -2
- package/dist/assets/{JoinCode-BBvYapCA.js.map → JoinCode-CEeZkFOp.js.map} +1 -1
- package/dist/assets/{NewCourseDialog-DBgFVnt3.js → NewCourseDialog-DNzvvz_H.js} +2 -2
- package/dist/assets/{NewCourseDialog-DBgFVnt3.js.map → NewCourseDialog-DNzvvz_H.js.map} +1 -1
- package/dist/assets/{PipelineDebugger-BHaqzqZw.js → PipelineDebugger-DhnKlMgD.js} +3 -3
- package/dist/assets/{PipelineDebugger-BHaqzqZw.js.map → PipelineDebugger-DhnKlMgD.js.map} +1 -1
- package/dist/assets/PouchDataLayerProvider-CAuhZYIc.js +2 -0
- package/dist/assets/PouchDataLayerProvider-CAuhZYIc.js.map +1 -0
- package/dist/assets/{ReleaseNotes-Dg6mLL1C.js → ReleaseNotes-Bvw24QDI.js} +2 -2
- package/dist/assets/{ReleaseNotes-Dg6mLL1C.js.map → ReleaseNotes-Bvw24QDI.js.map} +1 -1
- package/dist/assets/{RequestPasswordReset-CcFMTnTc.js → RequestPasswordReset-YOq1JJ_o.js} +2 -2
- package/dist/assets/{RequestPasswordReset-CcFMTnTc.js.map → RequestPasswordReset-YOq1JJ_o.js.map} +1 -1
- package/dist/assets/{ResetPassword-Dw_cBJU2.js → ResetPassword-CQCb3B_Z.js} +2 -2
- package/dist/assets/{ResetPassword-Dw_cBJU2.js.map → ResetPassword-CQCb3B_Z.js.map} +1 -1
- package/dist/assets/{StaticDataLayerProvider-CtgU3VBh.js → StaticDataLayerProvider-DbGLKpb1.js} +2 -2
- package/dist/assets/{StaticDataLayerProvider-CtgU3VBh.js.map → StaticDataLayerProvider-DbGLKpb1.js.map} +1 -1
- package/dist/assets/{Study-DDsGQCTJ.js → Study-D2mXR27s.js} +2 -2
- package/dist/assets/{Study-DDsGQCTJ.js.map → Study-D2mXR27s.js.map} +1 -1
- package/dist/assets/{TagInformation-DBLoXA2a.js → TagInformation-DHw5jRNt.js} +2 -2
- package/dist/assets/{TagInformation-DBLoXA2a.js.map → TagInformation-DHw5jRNt.js.map} +1 -1
- package/dist/assets/{User-DfXUXjFb.js → User-C0xEcKaU.js} +2 -2
- package/dist/assets/{User-DfXUXjFb.js.map → User-C0xEcKaU.js.map} +1 -1
- package/dist/assets/{UserDBDebugger-DPqlc4O_.js → UserDBDebugger-BXLoT28w.js} +2 -2
- package/dist/assets/{UserDBDebugger-DPqlc4O_.js.map → UserDBDebugger-BXLoT28w.js.map} +1 -1
- package/dist/assets/UserDBDebugger-DHONc_-t.js +1 -0
- package/dist/assets/{UserStats-C04YVYv7.js → UserStats-Blm_daoT.js} +2 -2
- package/dist/assets/{UserStats-C04YVYv7.js.map → UserStats-Blm_daoT.js.map} +1 -1
- package/dist/assets/{VerifyEmail-Y05BSR57.js → VerifyEmail-DTwA6sFY.js} +2 -2
- package/dist/assets/{VerifyEmail-Y05BSR57.js.map → VerifyEmail-DTwA6sFY.js.map} +1 -1
- package/dist/assets/{admin-DcFjvYJw.js → admin-hzNSXp0o.js} +2 -2
- package/dist/assets/{admin-DcFjvYJw.js.map → admin-hzNSXp0o.js.map} +1 -1
- package/dist/assets/{chess-E2uOAyQS-BZi0vihz.js → chess-E2uOAyQS-DDTgqZMJ.js} +2 -2
- package/dist/assets/{chess-E2uOAyQS-BZi0vihz.js.map → chess-E2uOAyQS-DDTgqZMJ.js.map} +1 -1
- package/dist/assets/chess-Lfm7Fsvs-RaFhFnIh.js +1 -0
- package/dist/assets/{contentSource-DwznMSMs.js → contentSource-FGhM_ge8.js} +8 -8
- package/dist/assets/contentSource-FGhM_ge8.js.map +1 -0
- package/dist/assets/dist-5Z6GjIpR.js +1 -0
- package/dist/assets/{dist-CAHkbl3M.js → dist-BJLhyG8r.js} +3 -3
- package/dist/assets/{dist-CAHkbl3M.js.map → dist-BJLhyG8r.js.map} +1 -1
- package/dist/assets/dist-C5-_1l75.js +1 -0
- package/dist/assets/{dist-BsRvt0gH.js → dist-C8EQUxWW.js} +3 -3
- package/dist/assets/{dist-BsRvt0gH.js.map → dist-C8EQUxWW.js.map} +1 -1
- package/dist/assets/{dist-Dp6eBE2S.js → dist-DGbpjpKB.js} +2 -2
- package/dist/assets/{dist-Dp6eBE2S.js.map → dist-DGbpjpKB.js.map} +1 -1
- package/dist/assets/dist-M4o-5YLq.js +1 -0
- package/dist/assets/edit-ui.es-BT7ftsox.js +1 -0
- package/dist/assets/{edit-ui.es-UaQFL_My.js → edit-ui.es-DJgikaS7.js} +2 -2
- package/dist/assets/{edit-ui.es-UaQFL_My.js.map → edit-ui.es-DJgikaS7.js.map} +1 -1
- package/dist/assets/elo-5Z2qkwtw.js +1 -0
- package/dist/assets/{elo-COgu6Hu5.js → elo-C4ZdbMIJ.js} +2 -2
- package/dist/assets/{elo-COgu6Hu5.js.map → elo-C4ZdbMIJ.js.map} +1 -1
- package/dist/assets/{eloDistance-BV7vfiK5.js → eloDistance-CRxxdYPJ.js} +2 -2
- package/dist/assets/{eloDistance-BV7vfiK5.js.map → eloDistance-CRxxdYPJ.js.map} +1 -1
- package/dist/assets/eloDistance-DF4pmPOI.js +1 -0
- package/dist/assets/{french-Dk7YG8Td-CD7Hms2j.js → french-Dk7YG8Td-C2awfrzV.js} +2 -2
- package/dist/assets/{french-Dk7YG8Td-CD7Hms2j.js.map → french-Dk7YG8Td-C2awfrzV.js.map} +1 -1
- package/dist/assets/french-evUMlbbq-4izQyIk4.js +1 -0
- package/dist/assets/{hierarchyDefinition-DLC5DjaA.js → hierarchyDefinition-BbqnGEfR.js} +2 -2
- package/dist/assets/{hierarchyDefinition-DLC5DjaA.js.map → hierarchyDefinition-BbqnGEfR.js.map} +1 -1
- package/dist/assets/{index-CK-rfSIx.js → index-BRaeVAZb.js} +4 -4
- package/dist/assets/{index-CK-rfSIx.js.map → index-BRaeVAZb.js.map} +1 -1
- package/dist/assets/{interferenceMitigator-D78KgOxz.js → interferenceMitigator-BtAQm-0d.js} +2 -2
- package/dist/assets/{interferenceMitigator-D78KgOxz.js.map → interferenceMitigator-BtAQm-0d.js.map} +1 -1
- package/dist/assets/math-DR3fXDcX-Bj6dcLDF.js +1 -0
- package/dist/assets/{math-D_8HiEQR-E4QDLrWp.js → math-D_8HiEQR-CQynsoTm.js} +2 -2
- package/dist/assets/{math-D_8HiEQR-E4QDLrWp.js.map → math-D_8HiEQR-CQynsoTm.js.map} +1 -1
- package/dist/assets/piano-BN5Btq91-onBUnVgA.js +1 -0
- package/dist/assets/{piano-DF1g6yaX-Ck3BH5EK.js → piano-DF1g6yaX-vXbP1jX_.js} +2 -2
- package/dist/assets/{piano-DF1g6yaX-Ck3BH5EK.js.map → piano-DF1g6yaX-vXbP1jX_.js.map} +1 -1
- package/dist/assets/{pitch-CgGJFkZ1-Dd0LzmEe.js → pitch-CgGJFkZ1-DVzOpIVa.js} +2 -2
- package/dist/assets/{pitch-CgGJFkZ1-Dd0LzmEe.js.map → pitch-CgGJFkZ1-DVzOpIVa.js.map} +1 -1
- package/dist/assets/pitch-Dn0iNqiS-L2k4d66s.js +1 -0
- package/dist/assets/prescribed-Cjutx2ct.js +2 -0
- package/dist/assets/prescribed-Cjutx2ct.js.map +1 -0
- package/dist/assets/{relativePriority-DwPMECAp.js → relativePriority-fx6BMJm9.js} +2 -2
- package/dist/assets/{relativePriority-DwPMECAp.js.map → relativePriority-fx6BMJm9.js.map} +1 -1
- package/dist/assets/{server-CqR7xtQy.js → server-CUqWbXPL.js} +2 -2
- package/dist/assets/{server-CqR7xtQy.js.map → server-CUqWbXPL.js.map} +1 -1
- package/dist/assets/{sightsing-BFQ7HRig-DV69ELZf.js → sightsing-BFQ7HRig-CYuNcd8z.js} +2 -2
- package/dist/assets/{sightsing-BFQ7HRig-DV69ELZf.js.map → sightsing-BFQ7HRig-CYuNcd8z.js.map} +1 -1
- package/dist/assets/sightsing-CJX3k0Fd-C4-zGBSZ.js +1 -0
- package/dist/assets/{srs-DOsG9Y-i.js → srs-B3R2C3TU.js} +2 -2
- package/dist/assets/{srs-DOsG9Y-i.js.map → srs-B3R2C3TU.js.map} +1 -1
- package/dist/assets/srs-BD4FD2rw.js +1 -0
- package/dist/assets/{typing-BevtfWlp-CvStu5BY.js → typing-BevtfWlp-C0NbuTKI.js} +2 -2
- package/dist/assets/{typing-BevtfWlp-CvStu5BY.js.map → typing-BevtfWlp-C0NbuTKI.js.map} +1 -1
- package/dist/assets/typing-k-ojjO7G-gZjZ4YQx.js +1 -0
- package/dist/assets/{userDBKeys-DYLGKnVC.js → userDBKeys-3SQjNVdK.js} +4 -4
- package/dist/assets/{userDBKeys-DYLGKnVC.js.map → userDBKeys-3SQjNVdK.js.map} +1 -1
- package/dist/assets/{userTagPreference-cZCPqadC.js → userTagPreference-B23ZX5J4.js} +2 -2
- package/dist/assets/{userTagPreference-cZCPqadC.js.map → userTagPreference-B23ZX5J4.js.map} +1 -1
- package/dist/assets/validators-CnxSFY0I.js +2 -0
- package/dist/assets/{validators-lpYAHmRR.js.map → validators-CnxSFY0I.js.map} +1 -1
- package/dist/assets/{word-work-BOnRlZgd-CCGZdwyf.js → word-work-BOnRlZgd-CsMkeNdI.js} +2 -2
- package/dist/assets/{word-work-BOnRlZgd-CCGZdwyf.js.map → word-work-BOnRlZgd-CsMkeNdI.js.map} +1 -1
- package/dist/assets/word-work-Dd6tIKrt-WI45cKxO.js +1 -0
- package/dist/index.html +9 -9
- package/dist/sw.js +1 -1
- package/dist/sw.js.map +1 -1
- package/package.json +7 -7
- package/dist/assets/BaseUserDB-CV2ZPZOR.js +0 -1
- package/dist/assets/CouchDBSyncStrategy-BjM7ROXC.js +0 -1
- package/dist/assets/CourseSyncService-CPU_Ll1h.js +0 -1
- package/dist/assets/PouchDataLayerProvider-DxsnSIKd.js +0 -2
- package/dist/assets/PouchDataLayerProvider-DxsnSIKd.js.map +0 -1
- package/dist/assets/UserDBDebugger-xmycWjck.js +0 -1
- package/dist/assets/chess-Lfm7Fsvs-DgN08Qx9.js +0 -1
- package/dist/assets/contentSource-DwznMSMs.js.map +0 -1
- package/dist/assets/dist-BcwaOf54.js +0 -1
- package/dist/assets/dist-CgW7D_Gh.js +0 -1
- package/dist/assets/dist-Dnehy0sn.js +0 -1
- package/dist/assets/edit-ui.es-BWqvElsJ.js +0 -1
- package/dist/assets/elo-Cwa8a3Yo.js +0 -1
- package/dist/assets/eloDistance-MReQeAuj.js +0 -1
- package/dist/assets/french-evUMlbbq-nGCjilG6.js +0 -1
- package/dist/assets/math-DR3fXDcX-C9KfHLHP.js +0 -1
- package/dist/assets/piano-BN5Btq91-CnKhyLGE.js +0 -1
- package/dist/assets/pitch-Dn0iNqiS-BxAdpDDb.js +0 -1
- package/dist/assets/prescribed-BWO17Gan.js +0 -2
- package/dist/assets/prescribed-BWO17Gan.js.map +0 -1
- package/dist/assets/sightsing-CJX3k0Fd-CG94OiDr.js +0 -1
- package/dist/assets/srs-DGscV6W4.js +0 -1
- package/dist/assets/typing-k-ojjO7G-AF8vU_q7.js +0 -1
- package/dist/assets/validators-lpYAHmRR.js +0 -2
- package/dist/assets/word-work-Dd6tIKrt-BNTSCq5F.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import{b as e,t}from"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";export{t as MarkdownRenderer,e as piniaPlugin};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import"./chess-E2uOAyQS-BZi0vihz.js";import"./french-Dk7YG8Td-CD7Hms2j.js";import"./math-D_8HiEQR-E4QDLrWp.js";import"./piano-DF1g6yaX-Ck3BH5EK.js";import"./pitch-CgGJFkZ1-Dd0LzmEe.js";import"./sightsing-BFQ7HRig-DV69ELZf.js";import"./typing-BevtfWlp-CvStu5BY.js";import"./word-work-BOnRlZgd-CCGZdwyf.js";import{a as e,r as t,t as n}from"./dist-CAHkbl3M.js";export{n as allCourseWare,t as defaultCourse,e as loadAllSubcourses};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./moment-DbT30ZpG.js";import{z as e}from"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./PipelineDebugger-BHaqzqZw.js";import"./userDBKeys-DYLGKnVC.js";import"./srs-DOsG9Y-i.js";import"./eloDistance-BV7vfiK5.js";import"./UserDBDebugger-DPqlc4O_.js";export{e as CourseLookup};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import{i as e}from"./edit-ui.es-UaQFL_My.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import"./chess-E2uOAyQS-BZi0vihz.js";import"./math-D_8HiEQR-E4QDLrWp.js";import"./piano-DF1g6yaX-Ck3BH5EK.js";import"./sightsing-BFQ7HRig-DV69ELZf.js";import"./typing-BevtfWlp-CvStu5BY.js";export{e as CourseEditor};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./PipelineDebugger-BHaqzqZw.js";import{t as e}from"./elo-COgu6Hu5.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./PipelineDebugger-BHaqzqZw.js";import{a as e,i as t,n,r,t as i}from"./eloDistance-BV7vfiK5.js";export{i as DEFAULT_ELO_DISTANCE_CONFIG,r as createEloDistanceFilter,n as default,t as mountMultiDimEloToggle,e as tagAwareGap};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import{t as e}from"./french-Dk7YG8Td-CD7Hms2j.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import{t as e}from"./math-D_8HiEQR-E4QDLrWp.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import{o as e}from"./piano-DF1g6yaX-Ck3BH5EK.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import{t as e}from"./pitch-CgGJFkZ1-Dd0LzmEe.js";export{e as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import"./chunk-D6hFPZc3.js";import{n as e,r as t}from"./tagRoles-jR-PJAgj.js";import{t as n}from"./defineProperty-y9rbOPYz.js";import{S as r,k as i,l as a}from"./PipelineDebugger-BHaqzqZw.js";var o=3,s=3,c=3,l=2,u=3,d=3,f=4,p=1,m=.8,h=12,g=1,_=2,v=4,y=.5,b=8,x=4,S=`testversion-prescribed-v3`;function dedupe(e){return[...new Set(e)]}function isoNow(){return new Date().toISOString()}function clamp(e,t,n){return Math.max(t,Math.min(n,e))}function matchesTagPattern(e,t){if(t===`*`)return!0;let n=t.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*/g,`.*`);return RegExp(`^${n}$`).test(e)}function extractWordStem(e){for(let t of[`c-ml-`,`c-ws-`,`c-spelling-`])if(e.startsWith(t)){let n=e.slice(t.length),r=n.lastIndexOf(`-`);return r>0?n.slice(0,r):n}return e}function shuffleInPlace(e){for(let t=e.length-1;t>0;t--){let n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}}function formatAge(e){let t=Math.max(0,Math.round(e/6e4));if(t<60)return`${t}m`;let n=Math.round(t/60);return n<24?`${n}h`:`${Math.round(n/24)}d`}function unmetIntroExposeTags(n,r,i){if(i<=0)return[];let a=new Set(n.filter(t=>e(t)===`expose`));for(let r of n){if(e(r)!==`intro`)continue;let n=t(r,`expose`);n&&a.add(n)}return[...a].filter(e=>{let t=r[e];return!t||t.count<i})}function pickTopByScore(e,t){return[...e].sort((e,t)=>t.score-e.score||e.cardId.localeCompare(t.cardId)).slice(0,t)}var PrescribedCardsGenerator=class extends a{constructor(e,t,r){super(e,t,r),n(this,`name`,void 0),n(this,`config`,void 0),this.name=r.name||`Prescribed Cards`,this.config=this.parseConfig(r.serializedData),i.debug(`[Prescribed] Initialized with ${this.config.groups.length} groups and ${this.config.groups.reduce((e,t)=>e+t.targetCardIds.length,0)} targets`)}get strategyKey(){return`PrescribedProgress`}async getWeightedCards(e,t){if(this.config.groups.length===0||e<=0)return{cards:[]};let n=this.course.getCourseID(),r=await this.user.getActiveCards(),a=new Set(r.map(e=>e.cardID)),o=await this.user.getSeenCards(n).catch(()=>[]),s=new Set(o),c=await this.getStrategyState()??{updatedAt:isoNow(),groups:{}},l=await this.loadHierarchyConfigs(),u=await this.user.getCourseRegDoc(n).catch(()=>null),d=typeof u?.elo==`number`?u.elo:u?.elo?.global?.score??t?.userElo??1e3,f=typeof u?.elo==`number`?{}:u?.elo?.tags??{},p=dedupe(this.config.groups.flatMap(e=>e.targetCardIds)),m=dedupe(this.config.groups.flatMap(e=>e.supportCardIds??[])),h=dedupe([...p,...m]),g=h.length>0?await this.course.getAppliedTagsBatch(h):new Map,_=await this.course.getCourseTagStubs().catch(()=>({rows:[],offset:0,total_rows:0})),v=new Map;for(let e of _.rows??[]){let t=e.doc;t?.name&&Array.isArray(t.taggedCards)&&v.set(t.name,[...t.taggedCards])}let y={updatedAt:isoNow(),groups:{}},b=[],x=new Set,C=[],w=c.practiceDebt??{},T={},E=new Map;for(let e of this.config.groups){let t=this.buildGroupRuntimeState({group:e,priorState:c.groups[e.id],activeIds:a,seenIds:s,tagsByCard:g,cardsByTag:v,hierarchyConfigs:l,userTagElo:f,userGlobalElo:d});C.push(t),i.info(`[Prescribed] Group '${e.id}': ${e.targetCardIds.length} targets total, ${t.encounteredTargets.size} encountered, ${t.pendingTargets.length} pending (${t.surfaceableTargets.length} surfaceable, ${t.blockedTargets.length} blocked), ${t.supportCandidates.length} authored support candidates, ${t.discoveredSupportCandidates.length} discovered support candidates, pressure=${t.pressureMultiplier.toFixed(2)}`),t.blockedTargets.length>0&&(i.info(`[Prescribed] Group '${e.id}' blocked targets: ${t.blockedTargets.join(`, `)}`),i.info(`[Prescribed] Group '${e.id}' support tags needed: ${t.supportTags.join(`, `)||`(none)`}`),i.info(`[Prescribed] Group '${e.id}' escalation mode: `+(t.supportCandidates.length>0?`direct-support`:t.discoveredSupportCandidates.length>0?`inserted-support-candidates`:`boost-only`)),t.discoveredSupportCandidates.length>0&&i.info(`[Prescribed] Group '${e.id}' discovered support candidates: ${t.discoveredSupportCandidates.join(`, `)}`)),y.groups[e.id]=this.buildNextGroupState(t,c.groups[e.id]);let r=this.buildDirectTargetCards(t,n,x),o=this.buildSupportCards(t,n,x),u=this.buildDiscoveredSupportCards(t,n,x),p=this.buildPracticeCards({group:e,courseId:n,emittedIds:x,cardsByTag:v,hierarchyConfigs:l,userTagElo:f,userGlobalElo:d,activeIds:a,seenIds:s,priorPracticeDebt:w,nextPracticeDebt:T});E.set(e.id,p.debts),b.push(...r,...o,...u,...p.cards)}y.practiceDebt=T;let D=this.buildSupportHintSummary(C),O=Object.keys(D.boostTags).length>0?{boostTags:D.boostTags,_label:`prescribed-support (${D.supportTags.length} tags; blocked=${D.blockedTargetIds.length}; testversion=${S})`}:void 0;if(O){let e=Object.entries(O.boostTags??{});i.info(`[Prescribed] Emitting ${e.length} boost hint(s): `+e.map(([e,t])=>`${e}×${t.toFixed(1)}`).join(`, `))}else i.info(`[Prescribed] No hints to emit (no blocked targets or no support tags)`);if(this.capturePressureSnapshot(n,C,E,b,O),b.length===0)return i.info(`[Prescribed] 0 cards emitted (all targets blocked, authored/discovered support candidates exhausted)`+(O?` — boost hints emitted but may not survive filters`:``)),await this.putStrategyState(y).catch(e=>{i.debug(`[Prescribed] Failed to persist empty-state update: ${e}`)}),O?{cards:[],hints:O}:{cards:[]};let k=pickTopByScore(b,e),A=new Map;for(let e of k){let t=e.provenance[0];if(t?.reason.includes(`mode=practice`))continue;let n=t?.reason.match(/group=([^;]+)/)?.[1],r=t?.reason.includes(`mode=support`)?`supportIds`:`targetIds`;n&&(A.has(n)||A.set(n,{targetIds:[],supportIds:[]}),A.get(n)[r].push(e.cardId))}for(let e of this.config.groups){let t=y.groups[e.id],n=A.get(e.id);n&&(n.targetIds.length>0||n.supportIds.length>0)&&(t.lastSurfacedAt=isoNow(),t.sessionsSinceSurfaced=0,n.supportIds.length>0&&(t.lastSupportAt=isoNow()))}return await this.putStrategyState(y).catch(e=>{i.debug(`[Prescribed] Failed to persist prescribed progress: ${e}`)}),i.info(`[Prescribed] Emitting ${k.length} cards (${k.filter(e=>e.provenance[0]?.reason.includes(`mode=target`)).length} target, ${k.filter(e=>e.provenance[0]?.reason.includes(`mode=support`)).length} support, ${k.filter(e=>e.provenance[0]?.reason.includes(`mode=discovered-support`)).length} discovered support)`),O?{cards:k,hints:O}:{cards:k}}buildSupportHintSummary(e){let t={},n=new Set,r=new Set;for(let i of e)if(!(i.blockedTargets.length===0||i.supportTags.length===0)){i.blockedTargets.forEach(e=>n.add(e));for(let e of i.supportTags)r.add(e),t[e]=(t[e]??1)*i.supportMultiplier}return{boostTags:t,blockedTargetIds:[...n].sort(),supportTags:[...r].sort()}}capturePressureSnapshot(e,t,n,i,a){let s=Date.now(),c=[];for(let e of t){let t=e.group,r=t.freshnessWindowSessions??o;if(c.push({id:`group:${t.id}:target`,label:`${t.id} targets`,multiplier:e.pressureMultiplier,max:b,detail:`${e.pendingTargets.length} pending (${e.surfaceableTargets.length} surfaceable, ${e.blockedTargets.length} blocked) · sinceSurfaced ${e.sessionsSinceSurfaced}/${r}`,items:e.blockedTargets.map(e=>({label:e,value:`blocked`}))}),e.blockedTargets.length>0){let n=e.supportCandidates.length>0?`direct-support`:e.discoveredSupportCandidates.length>0?`inserted-support`:`boost-only`;c.push({id:`group:${t.id}:support`,label:`${t.id} support`,multiplier:e.supportMultiplier,max:x,detail:`mode=${n} · ${e.supportTags.length} support tag(s)`,items:e.supportTags.map(e=>({label:e}))})}let i=n.get(t.id)??[];i.length>0&&c.push({id:`group:${t.id}:practice-debt`,label:`${t.id} practice debt`,multiplier:Math.max(...i.map(e=>e.multiplier)),max:v,detail:`${i.length} under-practiced skill(s)`,items:i.map(e=>({label:e.tag,value:`×${e.multiplier.toFixed(2)} · open ${formatAge(s-new Date(e.firstOwedAt).getTime())}`}))})}r({source:`prescribed`,courseId:e,gauges:c,topScore:i.length>0?Math.max(...i.map(e=>e.score)):null,hintsLabel:a?._label,timestamp:s})}parseConfig(e){try{let t=JSON.parse(e);return{groups:(Array.isArray(t.groups)?t.groups:[]).map((e,t)=>({id:typeof e.id==`string`&&e.id.trim().length>0?e.id:`group-${t+1}`,targetCardIds:dedupe(Array.isArray(e.targetCardIds)?e.targetCardIds.filter(e=>typeof e==`string`):[]),supportCardIds:dedupe(Array.isArray(e.supportCardIds)?e.supportCardIds.filter(e=>typeof e==`string`):[]),supportTagPatterns:dedupe(Array.isArray(e.supportTagPatterns)?e.supportTagPatterns.filter(e=>typeof e==`string`):[]),freshnessWindowSessions:typeof e.freshnessWindowSessions==`number`?e.freshnessWindowSessions:o,maxDirectTargetsPerRun:typeof e.maxDirectTargetsPerRun==`number`?e.maxDirectTargetsPerRun:s,maxSupportCardsPerRun:typeof e.maxSupportCardsPerRun==`number`?e.maxSupportCardsPerRun:c,introExposeMinCount:typeof e.introExposeMinCount==`number`?e.introExposeMinCount:u,hierarchyWalk:{enabled:e.hierarchyWalk?.enabled!==!1,maxDepth:typeof e.hierarchyWalk?.maxDepth==`number`?e.hierarchyWalk.maxDepth:l},retireOnEncounter:e.retireOnEncounter!==!1,practiceTagPatterns:dedupe(Array.isArray(e.practiceTagPatterns)?e.practiceTagPatterns.filter(e=>typeof e==`string`):[]),practiceMinCount:typeof e.practiceMinCount==`number`?e.practiceMinCount:d,maxPracticeCardsPerRun:typeof e.maxPracticeCardsPerRun==`number`?e.maxPracticeCardsPerRun:f})).filter(e=>e.targetCardIds.length>0)}}catch{return{groups:[]}}}async loadHierarchyConfigs(){try{return(await this.course.getAllNavigationStrategies()).filter(e=>e.implementingClass===`hierarchyDefinition`).map(e=>{try{return{prerequisites:JSON.parse(e.serializedData).prerequisites||{}}}catch{return{prerequisites:{}}}})}catch(e){return i.debug(`[Prescribed] Failed to load hierarchy configs: ${e}`),[]}}buildGroupRuntimeState(e){let{group:t,priorState:n,activeIds:r,seenIds:a,tagsByCard:s,cardsByTag:d,hierarchyConfigs:f,userTagElo:p,userGlobalElo:m}=e,h=new Set;for(let e of t.targetCardIds)(r.has(e)||a.has(e))&&h.add(e);if(n?.encounteredCardIds?.length)for(let e of n.encounteredCardIds)h.add(e);let g=t.targetCardIds.filter(e=>!h.has(e)),_=new Map;for(let e of g)_.set(e,s.get(e)??[]);let v=[],y=[],C=new Set;for(let e of g){let n=_.get(e)??[],r=this.resolveBlockedSupportTags(n,f,p,m,t.hierarchyWalk?.enabled!==!1,t.hierarchyWalk?.maxDepth??l),i=unmetIntroExposeTags(n,p,t.introExposeMinCount??u);i.length>0&&i.forEach(e=>C.add(e)),r.blocked||i.length>0?(v.push(e),r.supportTags.forEach(e=>C.add(e))):y.push(e)}let w=dedupe([...t.supportCardIds??[],...this.findSupportCardsByTags(t,s,[...C])]).filter(e=>!r.has(e)&&!a.has(e)),T=v.length>0&&C.size>0&&w.length===0?this.findDiscoveredSupportCards({supportTags:[...C],cardsByTag:d,activeIds:r,seenIds:a,excludedIds:new Set([...t.targetCardIds,...t.supportCardIds??[]]),limit:t.maxSupportCardsPerRun??c}):[];v.length>0&&C.size>0&&T.length===0&&i.info(`[Prescribed] Group '${t.id}' discovered 0 broader support candidates (blocked=${v.length}; authoredSupport=${w.length})`);let E=n?.sessionsSinceSurfaced??0,D=t.freshnessWindowSessions??o,O=Math.max(0,E-D),k=g.length===0?1:clamp(1+O*.75+Math.min(2,g.length*.1),1,b),A=v.length===0?1:clamp(1+O*.5+Math.min(1.5,v.length*.15),1,x);return{group:t,encounteredTargets:h,pendingTargets:g,blockedTargets:v,surfaceableTargets:y,targetTags:_,supportCandidates:w,discoveredSupportCandidates:T,supportTags:[...C],pressureMultiplier:k,supportMultiplier:A,sessionsSinceSurfaced:E,debugVersion:S}}buildNextGroupState(e,t){let n=t?.sessionsSinceSurfaced??0;return{encounteredCardIds:[...e.encounteredTargets].sort(),pendingTargetIds:[...e.pendingTargets].sort(),lastSurfacedAt:t?.lastSurfacedAt??null,sessionsSinceSurfaced:n+1,lastSupportAt:t?.lastSupportAt??null,blockedTargetIds:[...e.blockedTargets].sort(),lastResolvedSupportTags:[...e.supportTags].sort()}}buildDirectTargetCards(e,t,n){let r=e.group.maxDirectTargetsPerRun??s,i=e.surfaceableTargets.filter(e=>!n.has(e)).slice(0,r),a=[];for(let r of i)n.add(r),a.push({cardId:r,courseId:t,score:p*e.pressureMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:p*e.pressureMultiplier,reason:`mode=target;group=${e.group.id};pending=${e.pendingTargets.length};surfaceable=${e.surfaceableTargets.length};blocked=${e.blockedTargets.length};blockedTargets=${e.blockedTargets.join(`|`)||`none`};supportTags=${e.supportTags.join(`|`)||`none`};multiplier=${e.pressureMultiplier.toFixed(2)};testversion=${e.debugVersion}`}]});return a}buildSupportCards(e,t,n){if(e.blockedTargets.length===0||e.supportCandidates.length===0)return[];let r=e.group.maxSupportCardsPerRun??c,i=e.supportCandidates.filter(e=>!n.has(e)).slice(0,r),a=[];for(let r of i)n.add(r),a.push({cardId:r,courseId:t,score:m*e.supportMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:m*e.supportMultiplier,reason:`mode=support;group=${e.group.id};pending=${e.pendingTargets.length};blocked=${e.blockedTargets.length};blockedTargets=${e.blockedTargets.join(`|`)||`none`};supportCard=${r};supportTags=${e.supportTags.join(`|`)||`none`};multiplier=${e.supportMultiplier.toFixed(2)};testversion=${e.debugVersion}`}]});return a}buildDiscoveredSupportCards(e,t,n){if(e.blockedTargets.length===0||e.discoveredSupportCandidates.length===0)return[];let r=e.group.maxSupportCardsPerRun??c,i=e.discoveredSupportCandidates.filter(e=>!n.has(e)).slice(0,r),a=[];for(let r of i)n.add(r),a.push({cardId:r,courseId:t,score:h*e.supportMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:h*e.supportMultiplier,reason:`mode=discovered-support;group=${e.group.id};pending=${e.pendingTargets.length};blocked=${e.blockedTargets.length};blockedTargets=${e.blockedTargets.join(`|`)||`none`};supportCard=${r};supportTags=${e.supportTags.join(`|`)||`none`};multiplier=${e.supportMultiplier.toFixed(2)};testversion=${e.debugVersion}`}]});return a}buildPracticeCards(e){let{group:t,courseId:n,emittedIds:r,cardsByTag:a,hierarchyConfigs:o,userTagElo:s,userGlobalElo:c,activeIds:l,seenIds:u,priorPracticeDebt:p,nextPracticeDebt:m}=e,h=t.practiceTagPatterns??[];if(h.length===0)return{cards:[],debts:[]};let b=t.practiceMinCount??d,x=t.maxPracticeCardsPerRun??f,C=[...a.keys()].filter(e=>h.some(t=>matchesTagPattern(e,t))&&this.isUnlockedGatedSkill(e,o,s,c)&&(s[e]?.count??0)<b);if(C.length===0)return{cards:[],debts:[]};let w=Date.now(),T=new Map;for(let e of C){let t=p[e]??isoNow();m[e]=t;let n=clamp(_+Math.max(0,(w-new Date(t).getTime())/864e5)*y,_,v);T.set(e,n)}let E=C.map(e=>({tag:e,multiplier:T.get(e)??_,firstOwedAt:m[e]})).sort((e,t)=>t.multiplier-e.multiplier||e.tag.localeCompare(t.tag)),D=this.findDiscoveredSupportCards({supportTags:C,cardsByTag:a,activeIds:l,seenIds:u,excludedIds:r,limit:x});if(D.length===0)return{cards:[],debts:E};i.info(`[Prescribed] Group '${t.id}' practice: ${C.length} unlocked under-practiced skill(s), emitting ${D.length} drill card(s)`);let O=[];for(let e of D){r.add(e);let i=_;for(let t of C)(a.get(t)?.includes(e)??!1)&&(i=Math.max(i,T.get(t)??_));let o=g*i;O.push({cardId:e,courseId:n,score:o,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:o,reason:`mode=practice;group=${t.id};debtMult=×${i.toFixed(2)};underPracticedSkills=${C.length};practiceTags=${C.slice(0,8).join(`|`)}${C.length>8?`|…`:``};testversion=${S}`}]})}return{cards:O,debts:E}}isUnlockedGatedSkill(e,t,n,r){let i=t.map(t=>t.prerequisites[e]).filter(e=>Array.isArray(e)&&e.length>0);return i.length===0?!1:i.every(e=>e.every(e=>this.isPrerequisiteMet(e,n[e.tag],r)))}findSupportCardsByTags(e,t,n){if(n.length===0)return[];let r=e.supportCardIds??[],i=e.supportTagPatterns??[];if(r.length===0&&i.length===0)return[];let a=new Set;for(let e of r){let r=t.get(e)??[],o=n.some(e=>r.includes(e)),s=i.some(e=>r.some(t=>matchesTagPattern(t,e)));(o||s)&&a.add(e)}return[...a]}findDiscoveredSupportCards(e){let{supportTags:t,cardsByTag:n,activeIds:r,seenIds:i,excludedIds:a,limit:o}=e,s=new Map;for(let e of t){let t=n.get(e)??[];for(let e of t){if(r.has(e)||i.has(e)||a.has(e))continue;let t=s.get(e);t?t.matches+=1:s.set(e,{cardId:e,matches:1})}}let c=[...s.values()].sort((e,t)=>t.matches-e.matches||e.cardId.localeCompare(t.cardId)),l=new Set,u=[],d=[];for(let e of c){let t=extractWordStem(e.cardId);l.has(t)?d.push(e):(l.add(t),u.push(e))}return shuffleInPlace(u),shuffleInPlace(d),[...u,...d].slice(0,o).map(e=>e.cardId)}resolveBlockedSupportTags(e,t,n,r,i,a){let o=new Set,s=!1;for(let c of e){let e=t.map(e=>e.prerequisites[c]).filter(e=>Array.isArray(e)&&e.length>0);if(e.length!==0&&e.some(e=>e.some(e=>!this.isPrerequisiteMet(e,n[e.tag],r)))){if(s=!0,!i){for(let t of e)for(let e of t)this.isPrerequisiteMet(e,n[e.tag],r)||o.add(e.tag);continue}for(let i of e)for(let e of i)this.isPrerequisiteMet(e,n[e.tag],r)||this.collectSupportTagsRecursive(e.tag,t,n,r,a,new Set,o)}}return{blocked:s,supportTags:[...o]}}collectSupportTagsRecursive(e,t,n,r,i,a,o){if(i<0||a.has(e))return;a.add(e);let s=!1;for(let c of t){let l=c.prerequisites[e];if(!l||l.length===0)continue;let u=l.filter(e=>!this.isPrerequisiteMet(e,n[e.tag],r));if(u.length>0&&i>0){s=!0;for(let e of u)this.collectSupportTagsRecursive(e.tag,t,n,r,i-1,a,o)}}s||o.add(e)}isPrerequisiteMet(e,t,n){if(!t)return!1;let r=e.masteryThreshold?.minCount??u;return t.count<r?!1:e.masteryThreshold?.minElo===void 0?e.masteryThreshold?.minCount===void 0?t.score>=n:!0:t.score>=e.masteryThreshold.minElo}};export{PrescribedCardsGenerator as default};
|
|
2
|
-
//# sourceMappingURL=prescribed-BWO17Gan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prescribed-BWO17Gan.js","names":[],"sources":["../../../db/dist/core/navigators/generators/prescribed.mjs"],"sourcesContent":["import \"../../../_virtual/_rolldown/runtime.mjs\";\nimport { logger } from \"../../../util/logger.mjs\";\nimport { captureStrategyPressure } from \"../StrategyPressureDebugger.mjs\";\nimport { ContentNavigator } from \"../index.mjs\";\nimport { tagRole, withTagRole } from \"@vue-skuilder/common\";\n//#region src/core/navigators/generators/prescribed.ts\nconst DEFAULT_FRESHNESS_WINDOW = 3;\nconst DEFAULT_MAX_DIRECT_PER_RUN = 3;\nconst DEFAULT_MAX_SUPPORT_PER_RUN = 3;\nconst DEFAULT_HIERARCHY_DEPTH = 2;\nconst DEFAULT_MIN_COUNT = 3;\nconst DEFAULT_PRACTICE_MIN_COUNT = 3;\nconst DEFAULT_MAX_PRACTICE_PER_RUN = 4;\nconst BASE_TARGET_SCORE = 1;\nconst BASE_SUPPORT_SCORE = .8;\nconst DISCOVERED_SUPPORT_SCORE = 12;\nconst BASE_PRACTICE_SCORE = 1;\nconst PRACTICE_BASE_MULT = 2;\nconst MAX_PRACTICE_MULTIPLIER = 4;\nconst PRACTICE_STALENESS_BUMP_PER_DAY = .5;\nconst MAX_TARGET_MULTIPLIER = 8;\nconst MAX_SUPPORT_MULTIPLIER = 4;\nconst PRESCRIBED_DEBUG_VERSION = \"testversion-prescribed-v3\";\nfunction dedupe(arr) {\n\treturn [...new Set(arr)];\n}\nfunction isoNow() {\n\treturn (/* @__PURE__ */ new Date()).toISOString();\n}\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(max, value));\n}\nfunction matchesTagPattern(tag, pattern) {\n\tif (pattern === \"*\") return true;\n\tconst escaped = pattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\*/g, \".*\");\n\treturn new RegExp(`^${escaped}$`).test(tag);\n}\n/**\n* Extract the word stem from a card ID for deduplication.\n* ML: c-ml-{word}-{blanks} → {word}\n* WS: c-ws-{word}-{contrast} → {word}\n* Other: full cardId as fallback.\n*/\nfunction extractWordStem(cardId) {\n\tfor (const prefix of [\n\t\t\"c-ml-\",\n\t\t\"c-ws-\",\n\t\t\"c-spelling-\"\n\t]) if (cardId.startsWith(prefix)) {\n\t\tconst rest = cardId.slice(prefix.length);\n\t\tconst lastDash = rest.lastIndexOf(\"-\");\n\t\treturn lastDash > 0 ? rest.slice(0, lastDash) : rest;\n\t}\n\treturn cardId;\n}\n/** Fisher-Yates shuffle in place. */\nfunction shuffleInPlace(arr) {\n\tfor (let i = arr.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(Math.random() * (i + 1));\n\t\t[arr[i], arr[j]] = [arr[j], arr[i]];\n\t}\n}\n/** Compact age string for debt-open durations: 42m / 7h / 3d. */\nfunction formatAge(ms) {\n\tconst minutes = Math.max(0, Math.round(ms / 6e4));\n\tif (minutes < 60) return `${minutes}m`;\n\tconst hours = Math.round(minutes / 60);\n\tif (hours < 24) return `${hours}h`;\n\treturn `${Math.round(hours / 24)}d`;\n}\n/**\n* The exposure tags an intro target still lacks before it may surface: its own\n* `expose` tags plus the `expose` counterpart of each `intro` tag (tag roles,\n* see common's tagRoles.ts: `gpc:intro:X` → `gpc:expose:X`), each needing\n* `minCount` attempts. A `minCount` of 0 requires nothing — not even an entry\n* in `userTagElo`.\n*/\nfunction unmetIntroExposeTags(tags, userTagElo, minCount) {\n\tif (minCount <= 0) return [];\n\tconst exposeTags = new Set(tags.filter((tag) => tagRole(tag) === \"expose\"));\n\tfor (const tag of tags) {\n\t\tif (tagRole(tag) !== \"intro\") continue;\n\t\tconst expose = withTagRole(tag, \"expose\");\n\t\tif (expose) exposeTags.add(expose);\n\t}\n\treturn [...exposeTags].filter((tag) => {\n\t\tconst tagElo = userTagElo[tag];\n\t\treturn !tagElo || tagElo.count < minCount;\n\t});\n}\nfunction pickTopByScore(cards, limit) {\n\treturn [...cards].sort((a, b) => b.score - a.score || a.cardId.localeCompare(b.cardId)).slice(0, limit);\n}\nvar PrescribedCardsGenerator = class extends ContentNavigator {\n\tname;\n\tconfig;\n\tconstructor(user, course, strategyData) {\n\t\tsuper(user, course, strategyData);\n\t\tthis.name = strategyData.name || \"Prescribed Cards\";\n\t\tthis.config = this.parseConfig(strategyData.serializedData);\n\t\tlogger.debug(`[Prescribed] Initialized with ${this.config.groups.length} groups and ${this.config.groups.reduce((n, g) => n + g.targetCardIds.length, 0)} targets`);\n\t}\n\tget strategyKey() {\n\t\treturn \"PrescribedProgress\";\n\t}\n\tasync getWeightedCards(limit, context) {\n\t\tif (this.config.groups.length === 0 || limit <= 0) return { cards: [] };\n\t\tconst courseId = this.course.getCourseID();\n\t\tconst activeCards = await this.user.getActiveCards();\n\t\tconst activeIds = new Set(activeCards.map((ac) => ac.cardID));\n\t\tconst seenCards = await this.user.getSeenCards(courseId).catch(() => []);\n\t\tconst seenIds = new Set(seenCards);\n\t\tconst progress = await this.getStrategyState() ?? {\n\t\t\tupdatedAt: isoNow(),\n\t\t\tgroups: {}\n\t\t};\n\t\tconst hierarchyConfigs = await this.loadHierarchyConfigs();\n\t\tconst courseReg = await this.user.getCourseRegDoc(courseId).catch(() => null);\n\t\tconst userGlobalElo = typeof courseReg?.elo === \"number\" ? courseReg.elo : courseReg?.elo?.global?.score ?? context?.userElo ?? 1e3;\n\t\tconst userTagElo = typeof courseReg?.elo === \"number\" ? {} : courseReg?.elo?.tags ?? {};\n\t\tconst allTargetIds = dedupe(this.config.groups.flatMap((g) => g.targetCardIds));\n\t\tconst allSupportIds = dedupe(this.config.groups.flatMap((g) => g.supportCardIds ?? []));\n\t\tconst allRelevantIds = dedupe([...allTargetIds, ...allSupportIds]);\n\t\tconst tagsByCard = allRelevantIds.length > 0 ? await this.course.getAppliedTagsBatch(allRelevantIds) : /* @__PURE__ */ new Map();\n\t\tconst courseTagDocs = await this.course.getCourseTagStubs().catch(() => ({\n\t\t\trows: [],\n\t\t\toffset: 0,\n\t\t\ttotal_rows: 0\n\t\t}));\n\t\tconst cardsByTag = /* @__PURE__ */ new Map();\n\t\tfor (const row of courseTagDocs.rows ?? []) {\n\t\t\tconst tagDoc = row.doc;\n\t\t\tif (tagDoc?.name && Array.isArray(tagDoc.taggedCards)) cardsByTag.set(tagDoc.name, [...tagDoc.taggedCards]);\n\t\t}\n\t\tconst nextState = {\n\t\t\tupdatedAt: isoNow(),\n\t\t\tgroups: {}\n\t\t};\n\t\tconst emitted = [];\n\t\tconst emittedIds = /* @__PURE__ */ new Set();\n\t\tconst groupRuntimes = [];\n\t\tconst priorPracticeDebt = progress.practiceDebt ?? {};\n\t\tconst nextPracticeDebt = {};\n\t\tconst practiceDebtsByGroup = /* @__PURE__ */ new Map();\n\t\tfor (const group of this.config.groups) {\n\t\t\tconst runtime = this.buildGroupRuntimeState({\n\t\t\t\tgroup,\n\t\t\t\tpriorState: progress.groups[group.id],\n\t\t\t\tactiveIds,\n\t\t\t\tseenIds,\n\t\t\t\ttagsByCard,\n\t\t\t\tcardsByTag,\n\t\t\t\thierarchyConfigs,\n\t\t\t\tuserTagElo,\n\t\t\t\tuserGlobalElo\n\t\t\t});\n\t\t\tgroupRuntimes.push(runtime);\n\t\t\tlogger.info(`[Prescribed] Group '${group.id}': ${group.targetCardIds.length} targets total, ${runtime.encounteredTargets.size} encountered, ${runtime.pendingTargets.length} pending (${runtime.surfaceableTargets.length} surfaceable, ${runtime.blockedTargets.length} blocked), ${runtime.supportCandidates.length} authored support candidates, ${runtime.discoveredSupportCandidates.length} discovered support candidates, pressure=${runtime.pressureMultiplier.toFixed(2)}`);\n\t\t\tif (runtime.blockedTargets.length > 0) {\n\t\t\t\tlogger.info(`[Prescribed] Group '${group.id}' blocked targets: ${runtime.blockedTargets.join(\", \")}`);\n\t\t\t\tlogger.info(`[Prescribed] Group '${group.id}' support tags needed: ${runtime.supportTags.join(\", \") || \"(none)\"}`);\n\t\t\t\tlogger.info(`[Prescribed] Group '${group.id}' escalation mode: ` + (runtime.supportCandidates.length > 0 ? \"direct-support\" : runtime.discoveredSupportCandidates.length > 0 ? \"inserted-support-candidates\" : \"boost-only\"));\n\t\t\t\tif (runtime.discoveredSupportCandidates.length > 0) logger.info(`[Prescribed] Group '${group.id}' discovered support candidates: ${runtime.discoveredSupportCandidates.join(\", \")}`);\n\t\t\t}\n\t\t\tnextState.groups[group.id] = this.buildNextGroupState(runtime, progress.groups[group.id]);\n\t\t\tconst directCards = this.buildDirectTargetCards(runtime, courseId, emittedIds);\n\t\t\tconst supportCards = this.buildSupportCards(runtime, courseId, emittedIds);\n\t\t\tconst discoveredSupportCards = this.buildDiscoveredSupportCards(runtime, courseId, emittedIds);\n\t\t\tconst practice = this.buildPracticeCards({\n\t\t\t\tgroup,\n\t\t\t\tcourseId,\n\t\t\t\temittedIds,\n\t\t\t\tcardsByTag,\n\t\t\t\thierarchyConfigs,\n\t\t\t\tuserTagElo,\n\t\t\t\tuserGlobalElo,\n\t\t\t\tactiveIds,\n\t\t\t\tseenIds,\n\t\t\t\tpriorPracticeDebt,\n\t\t\t\tnextPracticeDebt\n\t\t\t});\n\t\t\tpracticeDebtsByGroup.set(group.id, practice.debts);\n\t\t\temitted.push(...directCards, ...supportCards, ...discoveredSupportCards, ...practice.cards);\n\t\t}\n\t\tnextState.practiceDebt = nextPracticeDebt;\n\t\tconst hintSummary = this.buildSupportHintSummary(groupRuntimes);\n\t\tconst hints = Object.keys(hintSummary.boostTags).length > 0 ? {\n\t\t\tboostTags: hintSummary.boostTags,\n\t\t\t_label: `prescribed-support (${hintSummary.supportTags.length} tags; blocked=${hintSummary.blockedTargetIds.length}; testversion=${PRESCRIBED_DEBUG_VERSION})`\n\t\t} : void 0;\n\t\tif (hints) {\n\t\t\tconst tagEntries = Object.entries(hints.boostTags ?? {});\n\t\t\tlogger.info(`[Prescribed] Emitting ${tagEntries.length} boost hint(s): ` + tagEntries.map(([tag, mult]) => `${tag}×${mult.toFixed(1)}`).join(\", \"));\n\t\t} else logger.info(\"[Prescribed] No hints to emit (no blocked targets or no support tags)\");\n\t\tthis.capturePressureSnapshot(courseId, groupRuntimes, practiceDebtsByGroup, emitted, hints);\n\t\tif (emitted.length === 0) {\n\t\t\tlogger.info(\"[Prescribed] 0 cards emitted (all targets blocked, authored/discovered support candidates exhausted)\" + (hints ? \" — boost hints emitted but may not survive filters\" : \"\"));\n\t\t\tawait this.putStrategyState(nextState).catch((e) => {\n\t\t\t\tlogger.debug(`[Prescribed] Failed to persist empty-state update: ${e}`);\n\t\t\t});\n\t\t\treturn hints ? {\n\t\t\t\tcards: [],\n\t\t\t\thints\n\t\t\t} : { cards: [] };\n\t\t}\n\t\tconst finalCards = pickTopByScore(emitted, limit);\n\t\tconst surfacedByGroup = /* @__PURE__ */ new Map();\n\t\tfor (const card of finalCards) {\n\t\t\tconst prov = card.provenance[0];\n\t\t\tif (prov?.reason.includes(\"mode=practice\")) continue;\n\t\t\tconst groupId = prov?.reason.match(/group=([^;]+)/)?.[1];\n\t\t\tconst mode = prov?.reason.includes(\"mode=support\") ? \"supportIds\" : \"targetIds\";\n\t\t\tif (!groupId) continue;\n\t\t\tif (!surfacedByGroup.has(groupId)) surfacedByGroup.set(groupId, {\n\t\t\t\ttargetIds: [],\n\t\t\t\tsupportIds: []\n\t\t\t});\n\t\t\tsurfacedByGroup.get(groupId)[mode].push(card.cardId);\n\t\t}\n\t\tfor (const group of this.config.groups) {\n\t\t\tconst groupState = nextState.groups[group.id];\n\t\t\tconst surfaced = surfacedByGroup.get(group.id);\n\t\t\tif (surfaced && (surfaced.targetIds.length > 0 || surfaced.supportIds.length > 0)) {\n\t\t\t\tgroupState.lastSurfacedAt = isoNow();\n\t\t\t\tgroupState.sessionsSinceSurfaced = 0;\n\t\t\t\tif (surfaced.supportIds.length > 0) groupState.lastSupportAt = isoNow();\n\t\t\t}\n\t\t}\n\t\tawait this.putStrategyState(nextState).catch((e) => {\n\t\t\tlogger.debug(`[Prescribed] Failed to persist prescribed progress: ${e}`);\n\t\t});\n\t\tlogger.info(`[Prescribed] Emitting ${finalCards.length} cards (${finalCards.filter((c) => c.provenance[0]?.reason.includes(\"mode=target\")).length} target, ${finalCards.filter((c) => c.provenance[0]?.reason.includes(\"mode=support\")).length} support, ${finalCards.filter((c) => c.provenance[0]?.reason.includes(\"mode=discovered-support\")).length} discovered support)`);\n\t\treturn hints ? {\n\t\t\tcards: finalCards,\n\t\t\thints\n\t\t} : { cards: finalCards };\n\t}\n\tbuildSupportHintSummary(groupRuntimes) {\n\t\tconst boostTags = {};\n\t\tconst blockedTargetIds = /* @__PURE__ */ new Set();\n\t\tconst supportTags = /* @__PURE__ */ new Set();\n\t\tfor (const runtime of groupRuntimes) {\n\t\t\tif (runtime.blockedTargets.length === 0 || runtime.supportTags.length === 0) continue;\n\t\t\truntime.blockedTargets.forEach((cardId) => blockedTargetIds.add(cardId));\n\t\t\tfor (const tag of runtime.supportTags) {\n\t\t\t\tsupportTags.add(tag);\n\t\t\t\tboostTags[tag] = (boostTags[tag] ?? 1) * runtime.supportMultiplier;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tboostTags,\n\t\t\tblockedTargetIds: [...blockedTargetIds].sort(),\n\t\t\tsupportTags: [...supportTags].sort()\n\t\t};\n\t}\n\t/**\n\t* Translate this run's per-group runtimes and practice debts into gauges on\n\t* the generic strategy-pressure debug channel (rendered by the live session\n\t* overlay's \"strategy backpressure\" section).\n\t*/\n\tcapturePressureSnapshot(courseId, groupRuntimes, practiceDebtsByGroup, emitted, hints) {\n\t\tconst now = Date.now();\n\t\tconst gauges = [];\n\t\tfor (const runtime of groupRuntimes) {\n\t\t\tconst group = runtime.group;\n\t\t\tconst window = group.freshnessWindowSessions ?? DEFAULT_FRESHNESS_WINDOW;\n\t\t\tgauges.push({\n\t\t\t\tid: `group:${group.id}:target`,\n\t\t\t\tlabel: `${group.id} targets`,\n\t\t\t\tmultiplier: runtime.pressureMultiplier,\n\t\t\t\tmax: MAX_TARGET_MULTIPLIER,\n\t\t\t\tdetail: `${runtime.pendingTargets.length} pending (${runtime.surfaceableTargets.length} surfaceable, ${runtime.blockedTargets.length} blocked) · sinceSurfaced ${runtime.sessionsSinceSurfaced}/${window}`,\n\t\t\t\titems: runtime.blockedTargets.map((cardId) => ({\n\t\t\t\t\tlabel: cardId,\n\t\t\t\t\tvalue: \"blocked\"\n\t\t\t\t}))\n\t\t\t});\n\t\t\tif (runtime.blockedTargets.length > 0) {\n\t\t\t\tconst mode = runtime.supportCandidates.length > 0 ? \"direct-support\" : runtime.discoveredSupportCandidates.length > 0 ? \"inserted-support\" : \"boost-only\";\n\t\t\t\tgauges.push({\n\t\t\t\t\tid: `group:${group.id}:support`,\n\t\t\t\t\tlabel: `${group.id} support`,\n\t\t\t\t\tmultiplier: runtime.supportMultiplier,\n\t\t\t\t\tmax: MAX_SUPPORT_MULTIPLIER,\n\t\t\t\t\tdetail: `mode=${mode} · ${runtime.supportTags.length} support tag(s)`,\n\t\t\t\t\titems: runtime.supportTags.map((tag) => ({ label: tag }))\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst debts = practiceDebtsByGroup.get(group.id) ?? [];\n\t\t\tif (debts.length > 0) gauges.push({\n\t\t\t\tid: `group:${group.id}:practice-debt`,\n\t\t\t\tlabel: `${group.id} practice debt`,\n\t\t\t\tmultiplier: Math.max(...debts.map((d) => d.multiplier)),\n\t\t\t\tmax: MAX_PRACTICE_MULTIPLIER,\n\t\t\t\tdetail: `${debts.length} under-practiced skill(s)`,\n\t\t\t\titems: debts.map((d) => ({\n\t\t\t\t\tlabel: d.tag,\n\t\t\t\t\tvalue: `×${d.multiplier.toFixed(2)} · open ${formatAge(now - new Date(d.firstOwedAt).getTime())}`\n\t\t\t\t}))\n\t\t\t});\n\t\t}\n\t\tcaptureStrategyPressure({\n\t\t\tsource: \"prescribed\",\n\t\t\tcourseId,\n\t\t\tgauges,\n\t\t\ttopScore: emitted.length > 0 ? Math.max(...emitted.map((c) => c.score)) : null,\n\t\t\thintsLabel: hints?._label,\n\t\t\ttimestamp: now\n\t\t});\n\t}\n\tparseConfig(serializedData) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(serializedData);\n\t\t\treturn { groups: (Array.isArray(parsed.groups) ? parsed.groups : []).map((raw, i) => ({\n\t\t\t\tid: typeof raw.id === \"string\" && raw.id.trim().length > 0 ? raw.id : `group-${i + 1}`,\n\t\t\t\ttargetCardIds: dedupe(Array.isArray(raw.targetCardIds) ? raw.targetCardIds.filter((v) => typeof v === \"string\") : []),\n\t\t\t\tsupportCardIds: dedupe(Array.isArray(raw.supportCardIds) ? raw.supportCardIds.filter((v) => typeof v === \"string\") : []),\n\t\t\t\tsupportTagPatterns: dedupe(Array.isArray(raw.supportTagPatterns) ? raw.supportTagPatterns.filter((v) => typeof v === \"string\") : []),\n\t\t\t\tfreshnessWindowSessions: typeof raw.freshnessWindowSessions === \"number\" ? raw.freshnessWindowSessions : DEFAULT_FRESHNESS_WINDOW,\n\t\t\t\tmaxDirectTargetsPerRun: typeof raw.maxDirectTargetsPerRun === \"number\" ? raw.maxDirectTargetsPerRun : DEFAULT_MAX_DIRECT_PER_RUN,\n\t\t\t\tmaxSupportCardsPerRun: typeof raw.maxSupportCardsPerRun === \"number\" ? raw.maxSupportCardsPerRun : DEFAULT_MAX_SUPPORT_PER_RUN,\n\t\t\t\tintroExposeMinCount: typeof raw.introExposeMinCount === \"number\" ? raw.introExposeMinCount : DEFAULT_MIN_COUNT,\n\t\t\t\thierarchyWalk: {\n\t\t\t\t\tenabled: raw.hierarchyWalk?.enabled !== false,\n\t\t\t\t\tmaxDepth: typeof raw.hierarchyWalk?.maxDepth === \"number\" ? raw.hierarchyWalk.maxDepth : DEFAULT_HIERARCHY_DEPTH\n\t\t\t\t},\n\t\t\t\tretireOnEncounter: raw.retireOnEncounter !== false,\n\t\t\t\tpracticeTagPatterns: dedupe(Array.isArray(raw.practiceTagPatterns) ? raw.practiceTagPatterns.filter((v) => typeof v === \"string\") : []),\n\t\t\t\tpracticeMinCount: typeof raw.practiceMinCount === \"number\" ? raw.practiceMinCount : DEFAULT_PRACTICE_MIN_COUNT,\n\t\t\t\tmaxPracticeCardsPerRun: typeof raw.maxPracticeCardsPerRun === \"number\" ? raw.maxPracticeCardsPerRun : DEFAULT_MAX_PRACTICE_PER_RUN\n\t\t\t})).filter((g) => g.targetCardIds.length > 0) };\n\t\t} catch {\n\t\t\treturn { groups: [] };\n\t\t}\n\t}\n\tasync loadHierarchyConfigs() {\n\t\ttry {\n\t\t\treturn (await this.course.getAllNavigationStrategies()).filter((s) => s.implementingClass === \"hierarchyDefinition\").map((s) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn { prerequisites: JSON.parse(s.serializedData).prerequisites || {} };\n\t\t\t\t} catch {\n\t\t\t\t\treturn { prerequisites: {} };\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tlogger.debug(`[Prescribed] Failed to load hierarchy configs: ${e}`);\n\t\t\treturn [];\n\t\t}\n\t}\n\tbuildGroupRuntimeState(args) {\n\t\tconst { group, priorState, activeIds, seenIds, tagsByCard, cardsByTag, hierarchyConfigs, userTagElo, userGlobalElo } = args;\n\t\tconst encounteredTargets = /* @__PURE__ */ new Set();\n\t\tfor (const cardId of group.targetCardIds) if (activeIds.has(cardId) || seenIds.has(cardId)) encounteredTargets.add(cardId);\n\t\tif (priorState?.encounteredCardIds?.length) for (const cardId of priorState.encounteredCardIds) encounteredTargets.add(cardId);\n\t\tconst pendingTargets = group.targetCardIds.filter((id) => !encounteredTargets.has(id));\n\t\tconst targetTags = /* @__PURE__ */ new Map();\n\t\tfor (const cardId of pendingTargets) targetTags.set(cardId, tagsByCard.get(cardId) ?? []);\n\t\tconst blockedTargets = [];\n\t\tconst surfaceableTargets = [];\n\t\tconst supportTags = /* @__PURE__ */ new Set();\n\t\tfor (const cardId of pendingTargets) {\n\t\t\tconst tags = targetTags.get(cardId) ?? [];\n\t\t\tconst resolution = this.resolveBlockedSupportTags(tags, hierarchyConfigs, userTagElo, userGlobalElo, group.hierarchyWalk?.enabled !== false, group.hierarchyWalk?.maxDepth ?? DEFAULT_HIERARCHY_DEPTH);\n\t\t\tconst unmetExposeTags = unmetIntroExposeTags(tags, userTagElo, group.introExposeMinCount ?? DEFAULT_MIN_COUNT);\n\t\t\tif (unmetExposeTags.length > 0) unmetExposeTags.forEach((tag) => supportTags.add(tag));\n\t\t\tif (resolution.blocked || unmetExposeTags.length > 0) {\n\t\t\t\tblockedTargets.push(cardId);\n\t\t\t\tresolution.supportTags.forEach((t) => supportTags.add(t));\n\t\t\t} else surfaceableTargets.push(cardId);\n\t\t}\n\t\tconst supportCandidates = dedupe([...group.supportCardIds ?? [], ...this.findSupportCardsByTags(group, tagsByCard, [...supportTags])]).filter((id) => !activeIds.has(id) && !seenIds.has(id));\n\t\tconst discoveredSupportCandidates = blockedTargets.length > 0 && supportTags.size > 0 && supportCandidates.length === 0 ? this.findDiscoveredSupportCards({\n\t\t\tsupportTags: [...supportTags],\n\t\t\tcardsByTag,\n\t\t\tactiveIds,\n\t\t\tseenIds,\n\t\t\texcludedIds: new Set([...group.targetCardIds, ...group.supportCardIds ?? []]),\n\t\t\tlimit: group.maxSupportCardsPerRun ?? DEFAULT_MAX_SUPPORT_PER_RUN\n\t\t}) : [];\n\t\tif (blockedTargets.length > 0 && supportTags.size > 0 && discoveredSupportCandidates.length === 0) logger.info(`[Prescribed] Group '${group.id}' discovered 0 broader support candidates (blocked=${blockedTargets.length}; authoredSupport=${supportCandidates.length})`);\n\t\tconst sessionsSinceSurfaced = priorState?.sessionsSinceSurfaced ?? 0;\n\t\tconst freshnessWindow = group.freshnessWindowSessions ?? DEFAULT_FRESHNESS_WINDOW;\n\t\tconst staleSessions = Math.max(0, sessionsSinceSurfaced - freshnessWindow);\n\t\tconst pressureMultiplier = pendingTargets.length === 0 ? 1 : clamp(1 + staleSessions * .75 + Math.min(2, pendingTargets.length * .1), 1, MAX_TARGET_MULTIPLIER);\n\t\tconst supportMultiplier = blockedTargets.length === 0 ? 1 : clamp(1 + staleSessions * .5 + Math.min(1.5, blockedTargets.length * .15), 1, MAX_SUPPORT_MULTIPLIER);\n\t\treturn {\n\t\t\tgroup,\n\t\t\tencounteredTargets,\n\t\t\tpendingTargets,\n\t\t\tblockedTargets,\n\t\t\tsurfaceableTargets,\n\t\t\ttargetTags,\n\t\t\tsupportCandidates,\n\t\t\tdiscoveredSupportCandidates,\n\t\t\tsupportTags: [...supportTags],\n\t\t\tpressureMultiplier,\n\t\t\tsupportMultiplier,\n\t\t\tsessionsSinceSurfaced,\n\t\t\tdebugVersion: PRESCRIBED_DEBUG_VERSION\n\t\t};\n\t}\n\tbuildNextGroupState(runtime, prior) {\n\t\tconst carriedSessions = prior?.sessionsSinceSurfaced ?? 0;\n\t\treturn {\n\t\t\tencounteredCardIds: [...runtime.encounteredTargets].sort(),\n\t\t\tpendingTargetIds: [...runtime.pendingTargets].sort(),\n\t\t\tlastSurfacedAt: prior?.lastSurfacedAt ?? null,\n\t\t\tsessionsSinceSurfaced: carriedSessions + 1,\n\t\t\tlastSupportAt: prior?.lastSupportAt ?? null,\n\t\t\tblockedTargetIds: [...runtime.blockedTargets].sort(),\n\t\t\tlastResolvedSupportTags: [...runtime.supportTags].sort()\n\t\t};\n\t}\n\tbuildDirectTargetCards(runtime, courseId, emittedIds) {\n\t\tconst maxDirect = runtime.group.maxDirectTargetsPerRun ?? DEFAULT_MAX_DIRECT_PER_RUN;\n\t\tconst directIds = runtime.surfaceableTargets.filter((id) => !emittedIds.has(id)).slice(0, maxDirect);\n\t\tconst cards = [];\n\t\tfor (const cardId of directIds) {\n\t\t\temittedIds.add(cardId);\n\t\t\tcards.push({\n\t\t\t\tcardId,\n\t\t\t\tcourseId,\n\t\t\t\tscore: BASE_TARGET_SCORE * runtime.pressureMultiplier,\n\t\t\t\tprovenance: [{\n\t\t\t\t\tstrategy: \"prescribed\",\n\t\t\t\t\tstrategyName: this.strategyName || this.name,\n\t\t\t\t\tstrategyId: this.strategyId || \"NAVIGATION_STRATEGY-prescribed\",\n\t\t\t\t\taction: \"generated\",\n\t\t\t\t\tscore: BASE_TARGET_SCORE * runtime.pressureMultiplier,\n\t\t\t\t\treason: `mode=target;group=${runtime.group.id};pending=${runtime.pendingTargets.length};surfaceable=${runtime.surfaceableTargets.length};blocked=${runtime.blockedTargets.length};blockedTargets=${runtime.blockedTargets.join(\"|\") || \"none\"};supportTags=${runtime.supportTags.join(\"|\") || \"none\"};multiplier=${runtime.pressureMultiplier.toFixed(2)};testversion=${runtime.debugVersion}`\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\t\treturn cards;\n\t}\n\tbuildSupportCards(runtime, courseId, emittedIds) {\n\t\tif (runtime.blockedTargets.length === 0 || runtime.supportCandidates.length === 0) return [];\n\t\tconst maxSupport = runtime.group.maxSupportCardsPerRun ?? DEFAULT_MAX_SUPPORT_PER_RUN;\n\t\tconst supportIds = runtime.supportCandidates.filter((id) => !emittedIds.has(id)).slice(0, maxSupport);\n\t\tconst cards = [];\n\t\tfor (const cardId of supportIds) {\n\t\t\temittedIds.add(cardId);\n\t\t\tcards.push({\n\t\t\t\tcardId,\n\t\t\t\tcourseId,\n\t\t\t\tscore: BASE_SUPPORT_SCORE * runtime.supportMultiplier,\n\t\t\t\tprovenance: [{\n\t\t\t\t\tstrategy: \"prescribed\",\n\t\t\t\t\tstrategyName: this.strategyName || this.name,\n\t\t\t\t\tstrategyId: this.strategyId || \"NAVIGATION_STRATEGY-prescribed\",\n\t\t\t\t\taction: \"generated\",\n\t\t\t\t\tscore: BASE_SUPPORT_SCORE * runtime.supportMultiplier,\n\t\t\t\t\treason: `mode=support;group=${runtime.group.id};pending=${runtime.pendingTargets.length};blocked=${runtime.blockedTargets.length};blockedTargets=${runtime.blockedTargets.join(\"|\") || \"none\"};supportCard=${cardId};supportTags=${runtime.supportTags.join(\"|\") || \"none\"};multiplier=${runtime.supportMultiplier.toFixed(2)};testversion=${runtime.debugVersion}`\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\t\treturn cards;\n\t}\n\tbuildDiscoveredSupportCards(runtime, courseId, emittedIds) {\n\t\tif (runtime.blockedTargets.length === 0 || runtime.discoveredSupportCandidates.length === 0) return [];\n\t\tconst maxSupport = runtime.group.maxSupportCardsPerRun ?? DEFAULT_MAX_SUPPORT_PER_RUN;\n\t\tconst supportIds = runtime.discoveredSupportCandidates.filter((id) => !emittedIds.has(id)).slice(0, maxSupport);\n\t\tconst cards = [];\n\t\tfor (const cardId of supportIds) {\n\t\t\temittedIds.add(cardId);\n\t\t\tcards.push({\n\t\t\t\tcardId,\n\t\t\t\tcourseId,\n\t\t\t\tscore: DISCOVERED_SUPPORT_SCORE * runtime.supportMultiplier,\n\t\t\t\tprovenance: [{\n\t\t\t\t\tstrategy: \"prescribed\",\n\t\t\t\t\tstrategyName: this.strategyName || this.name,\n\t\t\t\t\tstrategyId: this.strategyId || \"NAVIGATION_STRATEGY-prescribed\",\n\t\t\t\t\taction: \"generated\",\n\t\t\t\t\tscore: DISCOVERED_SUPPORT_SCORE * runtime.supportMultiplier,\n\t\t\t\t\treason: `mode=discovered-support;group=${runtime.group.id};pending=${runtime.pendingTargets.length};blocked=${runtime.blockedTargets.length};blockedTargets=${runtime.blockedTargets.join(\"|\") || \"none\"};supportCard=${cardId};supportTags=${runtime.supportTags.join(\"|\") || \"none\"};multiplier=${runtime.supportMultiplier.toFixed(2)};testversion=${runtime.debugVersion}`\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\t\treturn cards;\n\t}\n\t/**\n\t* Emit drill cards for *unlocked-but-under-practiced* skills.\n\t*\n\t* For each course tag matching the group's `practiceTagPatterns` that is both\n\t* unlocked (all hierarchy prerequisites met — i.e. the learner has been\n\t* introduced to it) and under-practiced (per-tag attempt count below\n\t* `practiceMinCount`), this resolves cards carrying that tag and emits them\n\t* into the candidate pool. It exists because global-ELO retrieval\n\t* systematically fails to fetch the (low-ELO) drill cards for a\n\t* freshly-introduced skill — putting them in the pool here guarantees presence.\n\t*\n\t* Emphasis is a **practice-debt pressure** (parallel to SRS backlog pressure):\n\t* cards score `base × multiplier`, where the multiplier starts at\n\t* PRACTICE_BASE_MULT (so a few reps land promptly post-intro, competing with\n\t* pressured reviews) and escalates by how long the debt has stayed open\n\t* (per-tag, time-based via `priorPracticeDebt`/`nextPracticeDebt`), clamped at\n\t* MAX_PRACTICE_MULTIPLIER. The debt is durable and self-discharges the instant\n\t* the skill reaches `practiceMinCount` — so this no longer relies on the\n\t* session-scoped intro boost to actually surface.\n\t*\n\t* Fully data-driven: the unlock relation comes from the hierarchy config and\n\t* practice-status from per-tag ELO. No card-id or tag-namespace hard-coding.\n\t*/\n\tbuildPracticeCards(args) {\n\t\tconst { group, courseId, emittedIds, cardsByTag, hierarchyConfigs, userTagElo, userGlobalElo, activeIds, seenIds, priorPracticeDebt, nextPracticeDebt } = args;\n\t\tconst patterns = group.practiceTagPatterns ?? [];\n\t\tif (patterns.length === 0) return {\n\t\t\tcards: [],\n\t\t\tdebts: []\n\t\t};\n\t\tconst practiceMinCount = group.practiceMinCount ?? DEFAULT_PRACTICE_MIN_COUNT;\n\t\tconst maxPractice = group.maxPracticeCardsPerRun ?? DEFAULT_MAX_PRACTICE_PER_RUN;\n\t\tconst practiceTags = [...cardsByTag.keys()].filter((tag) => patterns.some((p) => matchesTagPattern(tag, p)) && this.isUnlockedGatedSkill(tag, hierarchyConfigs, userTagElo, userGlobalElo) && (userTagElo[tag]?.count ?? 0) < practiceMinCount);\n\t\tif (practiceTags.length === 0) return {\n\t\t\tcards: [],\n\t\t\tdebts: []\n\t\t};\n\t\tconst now = Date.now();\n\t\tconst DAY_MS = 1440 * 60 * 1e3;\n\t\tconst tagMultiplier = /* @__PURE__ */ new Map();\n\t\tfor (const tag of practiceTags) {\n\t\t\tconst firstOwedAt = priorPracticeDebt[tag] ?? isoNow();\n\t\t\tnextPracticeDebt[tag] = firstOwedAt;\n\t\t\tconst mult = clamp(PRACTICE_BASE_MULT + Math.max(0, (now - new Date(firstOwedAt).getTime()) / DAY_MS) * PRACTICE_STALENESS_BUMP_PER_DAY, PRACTICE_BASE_MULT, MAX_PRACTICE_MULTIPLIER);\n\t\t\ttagMultiplier.set(tag, mult);\n\t\t}\n\t\tconst debts = practiceTags.map((tag) => ({\n\t\t\ttag,\n\t\t\tmultiplier: tagMultiplier.get(tag) ?? PRACTICE_BASE_MULT,\n\t\t\tfirstOwedAt: nextPracticeDebt[tag]\n\t\t})).sort((a, b) => b.multiplier - a.multiplier || a.tag.localeCompare(b.tag));\n\t\tconst practiceCardIds = this.findDiscoveredSupportCards({\n\t\t\tsupportTags: practiceTags,\n\t\t\tcardsByTag,\n\t\t\tactiveIds,\n\t\t\tseenIds,\n\t\t\texcludedIds: emittedIds,\n\t\t\tlimit: maxPractice\n\t\t});\n\t\tif (practiceCardIds.length === 0) return {\n\t\t\tcards: [],\n\t\t\tdebts\n\t\t};\n\t\tlogger.info(`[Prescribed] Group '${group.id}' practice: ${practiceTags.length} unlocked under-practiced skill(s), emitting ${practiceCardIds.length} drill card(s)`);\n\t\tconst cards = [];\n\t\tfor (const cardId of practiceCardIds) {\n\t\t\temittedIds.add(cardId);\n\t\t\tlet mult = PRACTICE_BASE_MULT;\n\t\t\tfor (const tag of practiceTags) if (cardsByTag.get(tag)?.includes(cardId) ?? false) mult = Math.max(mult, tagMultiplier.get(tag) ?? PRACTICE_BASE_MULT);\n\t\t\tconst score = BASE_PRACTICE_SCORE * mult;\n\t\t\tcards.push({\n\t\t\t\tcardId,\n\t\t\t\tcourseId,\n\t\t\t\tscore,\n\t\t\t\tprovenance: [{\n\t\t\t\t\tstrategy: \"prescribed\",\n\t\t\t\t\tstrategyName: this.strategyName || this.name,\n\t\t\t\t\tstrategyId: this.strategyId || \"NAVIGATION_STRATEGY-prescribed\",\n\t\t\t\t\taction: \"generated\",\n\t\t\t\t\tscore,\n\t\t\t\t\treason: `mode=practice;group=${group.id};debtMult=×${mult.toFixed(2)};underPracticedSkills=${practiceTags.length};practiceTags=${practiceTags.slice(0, 8).join(\"|\")}${practiceTags.length > 8 ? \"|…\" : \"\"};testversion=${PRESCRIBED_DEBUG_VERSION}`\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tcards,\n\t\t\tdebts\n\t\t};\n\t}\n\t/**\n\t* True for a skill that was *gated and is now reached*: it has at least one\n\t* declared hierarchy prerequisite set, and every set is fully satisfied by the\n\t* learner's per-tag ELO. This deliberately EXCLUDES tags with no prerequisites\n\t* — an ungated tag was never \"introduced\" in the curricular sense, so it isn't\n\t* a post-intro drill target (e.g. whole-word spelling tags that share the\n\t* `gpc:exercise:*` prefix but have no intro gate). Those are left to normal\n\t* ELO retrieval. This is the precise population the retrieval gap strands:\n\t* just-unlocked, low-ELO skills.\n\t*/\n\tisUnlockedGatedSkill(tag, hierarchyConfigs, userTagElo, userGlobalElo) {\n\t\tconst prereqSets = hierarchyConfigs.map((hierarchy) => hierarchy.prerequisites[tag]).filter((prereqs) => Array.isArray(prereqs) && prereqs.length > 0);\n\t\tif (prereqSets.length === 0) return false;\n\t\treturn prereqSets.every((prereqs) => prereqs.every((pr) => this.isPrerequisiteMet(pr, userTagElo[pr.tag], userGlobalElo)));\n\t}\n\tfindSupportCardsByTags(group, tagsByCard, supportTags) {\n\t\tif (supportTags.length === 0) return [];\n\t\tconst explicitSupportIds = group.supportCardIds ?? [];\n\t\tconst explicitPatterns = group.supportTagPatterns ?? [];\n\t\tif (explicitSupportIds.length === 0 && explicitPatterns.length === 0) return [];\n\t\tconst candidates = /* @__PURE__ */ new Set();\n\t\tfor (const cardId of explicitSupportIds) {\n\t\t\tconst cardTags = tagsByCard.get(cardId) ?? [];\n\t\t\tconst matchesResolved = supportTags.some((supportTag) => cardTags.includes(supportTag));\n\t\t\tconst matchesPattern = explicitPatterns.some((pattern) => cardTags.some((tag) => matchesTagPattern(tag, pattern)));\n\t\t\tif (matchesResolved || matchesPattern) candidates.add(cardId);\n\t\t}\n\t\treturn [...candidates];\n\t}\n\tfindDiscoveredSupportCards(args) {\n\t\tconst { supportTags, cardsByTag, activeIds, seenIds, excludedIds, limit } = args;\n\t\tconst byCardId = /* @__PURE__ */ new Map();\n\t\tfor (const supportTag of supportTags) {\n\t\t\tconst taggedCards = cardsByTag.get(supportTag) ?? [];\n\t\t\tfor (const cardId of taggedCards) {\n\t\t\t\tif (activeIds.has(cardId) || seenIds.has(cardId) || excludedIds.has(cardId)) continue;\n\t\t\t\tconst existing = byCardId.get(cardId);\n\t\t\t\tif (existing) existing.matches += 1;\n\t\t\t\telse byCardId.set(cardId, {\n\t\t\t\t\tcardId,\n\t\t\t\t\tmatches: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst candidates = [...byCardId.values()].sort((a, b) => b.matches - a.matches || a.cardId.localeCompare(b.cardId));\n\t\tconst usedStems = /* @__PURE__ */ new Set();\n\t\tconst diverse = [];\n\t\tconst deferred = [];\n\t\tfor (const entry of candidates) {\n\t\t\tconst stem = extractWordStem(entry.cardId);\n\t\t\tif (!usedStems.has(stem)) {\n\t\t\t\tusedStems.add(stem);\n\t\t\t\tdiverse.push(entry);\n\t\t\t} else deferred.push(entry);\n\t\t}\n\t\tshuffleInPlace(diverse);\n\t\tshuffleInPlace(deferred);\n\t\treturn [...diverse, ...deferred].slice(0, limit).map((entry) => entry.cardId);\n\t}\n\tresolveBlockedSupportTags(targetTags, hierarchyConfigs, userTagElo, userGlobalElo, hierarchyWalkEnabled, maxDepth) {\n\t\tconst supportTags = /* @__PURE__ */ new Set();\n\t\tlet blocked = false;\n\t\tfor (const targetTag of targetTags) {\n\t\t\tconst prereqSets = hierarchyConfigs.map((hierarchy) => hierarchy.prerequisites[targetTag]).filter((prereqs) => Array.isArray(prereqs) && prereqs.length > 0);\n\t\t\tif (prereqSets.length === 0) continue;\n\t\t\tif (!prereqSets.some((prereqs) => prereqs.some((pr) => !this.isPrerequisiteMet(pr, userTagElo[pr.tag], userGlobalElo)))) continue;\n\t\t\tblocked = true;\n\t\t\tif (!hierarchyWalkEnabled) {\n\t\t\t\tfor (const prereqs of prereqSets) for (const prereq of prereqs) if (!this.isPrerequisiteMet(prereq, userTagElo[prereq.tag], userGlobalElo)) supportTags.add(prereq.tag);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const prereqs of prereqSets) for (const prereq of prereqs) if (!this.isPrerequisiteMet(prereq, userTagElo[prereq.tag], userGlobalElo)) this.collectSupportTagsRecursive(prereq.tag, hierarchyConfigs, userTagElo, userGlobalElo, maxDepth, /* @__PURE__ */ new Set(), supportTags);\n\t\t}\n\t\treturn {\n\t\t\tblocked,\n\t\t\tsupportTags: [...supportTags]\n\t\t};\n\t}\n\tcollectSupportTagsRecursive(tag, hierarchyConfigs, userTagElo, userGlobalElo, depth, visited, out) {\n\t\tif (depth < 0 || visited.has(tag)) return;\n\t\tvisited.add(tag);\n\t\tlet walkedFurther = false;\n\t\tfor (const hierarchy of hierarchyConfigs) {\n\t\t\tconst prereqs = hierarchy.prerequisites[tag];\n\t\t\tif (!prereqs || prereqs.length === 0) continue;\n\t\t\tconst unmet = prereqs.filter((pr) => !this.isPrerequisiteMet(pr, userTagElo[pr.tag], userGlobalElo));\n\t\t\tif (unmet.length > 0 && depth > 0) {\n\t\t\t\twalkedFurther = true;\n\t\t\t\tfor (const prereq of unmet) this.collectSupportTagsRecursive(prereq.tag, hierarchyConfigs, userTagElo, userGlobalElo, depth - 1, visited, out);\n\t\t\t}\n\t\t}\n\t\tif (!walkedFurther) out.add(tag);\n\t}\n\tisPrerequisiteMet(prereq, userTagElo, userGlobalElo) {\n\t\tif (!userTagElo) return false;\n\t\tconst minCount = prereq.masteryThreshold?.minCount ?? DEFAULT_MIN_COUNT;\n\t\tif (userTagElo.count < minCount) return false;\n\t\tif (prereq.masteryThreshold?.minElo !== void 0) return userTagElo.score >= prereq.masteryThreshold.minElo;\n\t\tif (prereq.masteryThreshold?.minCount !== void 0) return true;\n\t\treturn userTagElo.score >= userGlobalElo;\n\t}\n};\n//#endregion\nexport { PrescribedCardsGenerator as default };\n\n//# sourceMappingURL=prescribed.mjs.map"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import{t as e}from"./sightsing-BFQ7HRig-DV69ELZf.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./moment-DbT30ZpG.js";import"./PipelineDebugger-BHaqzqZw.js";import{t as e}from"./srs-DOsG9Y-i.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import{t as e}from"./typing-BevtfWlp-CvStu5BY.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-BsRvt0gH.js";import"./contentSource-DwznMSMs.js";import"./dist-Dp6eBE2S.js";import"./CourseWare-BTFRjgBR-DBp_fIwH.js";import"./PipelineDebugger-BHaqzqZw.js";import"./eloDistance-BV7vfiK5.js";import{t as e}from"./word-work-BOnRlZgd-CCGZdwyf.js";export{e as default};
|