@intellectif/lk-core 1.11.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +1 -1
  3. package/dist/ai-check.cjs +2 -2
  4. package/dist/ai-check.d.cts +1 -1
  5. package/dist/ai-check.d.ts +1 -1
  6. package/dist/ai-check.js +2 -2
  7. package/dist/{ai-Cu17iVHa.d.ts → ai-hC5pGYeu.d.cts} +122 -5
  8. package/dist/ai-hC5pGYeu.d.cts.map +1 -0
  9. package/dist/{ai-Cu17iVHa.d.cts → ai-hC5pGYeu.d.ts} +122 -5
  10. package/dist/ai-hC5pGYeu.d.ts.map +1 -0
  11. package/dist/{ai-writing-C7f6aKNW.cjs → ai-writing-BDSYuifR.cjs} +18 -5
  12. package/dist/ai-writing-BDSYuifR.cjs.map +1 -0
  13. package/dist/{ai-writing-Dl1bJQbL.js → ai-writing-Dsmvv4T-.js} +18 -5
  14. package/dist/ai-writing-Dsmvv4T-.js.map +1 -0
  15. package/dist/{index-CpamCGyZ.d.cts → index-4x0auNOv.d.cts} +2 -2
  16. package/dist/{index-CpamCGyZ.d.cts.map → index-4x0auNOv.d.cts.map} +1 -1
  17. package/dist/{index-DjZ1vIVg.d.cts → index-BlJU10O4.d.cts} +26 -4
  18. package/dist/index-BlJU10O4.d.cts.map +1 -0
  19. package/dist/{index-BfUyl6ml.d.ts → index-DVW_N4pJ.d.ts} +26 -4
  20. package/dist/index-DVW_N4pJ.d.ts.map +1 -0
  21. package/dist/{index-BTZWUwOe.d.ts → index-Dlei-7PX.d.ts} +2 -2
  22. package/dist/{index-BTZWUwOe.d.ts.map → index-Dlei-7PX.d.ts.map} +1 -1
  23. package/dist/{index-DYnacygI.d.cts → index-DohEHH10.d.cts} +2 -2
  24. package/dist/{index-DYnacygI.d.cts.map → index-DohEHH10.d.cts.map} +1 -1
  25. package/dist/{index-B1zEN1Ur.d.ts → index-Du9Kx_H6.d.ts} +2 -2
  26. package/dist/{index-B1zEN1Ur.d.ts.map → index-Du9Kx_H6.d.ts.map} +1 -1
  27. package/dist/index.cjs +12 -7
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +28 -14
  30. package/dist/index.d.cts.map +1 -1
  31. package/dist/index.d.ts +28 -14
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +12 -8
  34. package/dist/index.js.map +1 -1
  35. package/dist/{item-group-D7M3E7K2.cjs → item-group-CqdByaLR.cjs} +100 -26
  36. package/dist/item-group-CqdByaLR.cjs.map +1 -0
  37. package/dist/{item-group-uNAT5EX5.js → item-group-vTcNy2JF.js} +95 -27
  38. package/dist/item-group-vTcNy2JF.js.map +1 -0
  39. package/dist/{registry-kTqbi4Lb.js → registry-Cn2it-y7.js} +388 -3
  40. package/dist/registry-Cn2it-y7.js.map +1 -0
  41. package/dist/{registry-RPfZZEqi.cjs → registry-DUTE1vtq.cjs} +388 -3
  42. package/dist/registry-DUTE1vtq.cjs.map +1 -0
  43. package/dist/{schemas-C4V5wfOS.cjs → schemas-BrA6CFWz.cjs} +3 -3
  44. package/dist/{schemas-C4V5wfOS.cjs.map → schemas-BrA6CFWz.cjs.map} +1 -1
  45. package/dist/{schemas-rDgIN4Vu.js → schemas-DlxeS7Lu.js} +3 -3
  46. package/dist/{schemas-rDgIN4Vu.js.map → schemas-DlxeS7Lu.js.map} +1 -1
  47. package/dist/schemas.cjs +3 -3
  48. package/dist/schemas.d.cts +2 -2
  49. package/dist/schemas.d.ts +2 -2
  50. package/dist/schemas.js +3 -3
  51. package/dist/{scoring-KpYfR0lO.cjs → scoring-IjLi2fYF.cjs} +2 -2
  52. package/dist/{scoring-KpYfR0lO.cjs.map → scoring-IjLi2fYF.cjs.map} +1 -1
  53. package/dist/{scoring-DshU9i7e.js → scoring-weQ4SzwB.js} +2 -2
  54. package/dist/{scoring-DshU9i7e.js.map → scoring-weQ4SzwB.js.map} +1 -1
  55. package/dist/scoring.cjs +2 -2
  56. package/dist/scoring.d.cts +2 -2
  57. package/dist/scoring.d.ts +2 -2
  58. package/dist/scoring.js +2 -2
  59. package/dist/{xapi-CaM7f1sD.cjs → xapi-BqEbpWag.cjs} +2 -2
  60. package/dist/{xapi-CaM7f1sD.cjs.map → xapi-BqEbpWag.cjs.map} +1 -1
  61. package/dist/{xapi-fFq9KEXG.js → xapi-DbRVH_RB.js} +2 -2
  62. package/dist/{xapi-fFq9KEXG.js.map → xapi-DbRVH_RB.js.map} +1 -1
  63. package/dist/xapi.cjs +1 -1
  64. package/dist/xapi.d.cts +1 -1
  65. package/dist/xapi.d.ts +1 -1
  66. package/dist/xapi.js +1 -1
  67. package/package.json +1 -1
  68. package/vectors/scoring.json +934 -1
  69. package/vectors/validation.json +827 -1
  70. package/dist/ai-Cu17iVHa.d.cts.map +0 -1
  71. package/dist/ai-Cu17iVHa.d.ts.map +0 -1
  72. package/dist/ai-writing-C7f6aKNW.cjs.map +0 -1
  73. package/dist/ai-writing-Dl1bJQbL.js.map +0 -1
  74. package/dist/index-BfUyl6ml.d.ts.map +0 -1
  75. package/dist/index-DjZ1vIVg.d.cts.map +0 -1
  76. package/dist/item-group-D7M3E7K2.cjs.map +0 -1
  77. package/dist/item-group-uNAT5EX5.js.map +0 -1
  78. package/dist/registry-RPfZZEqi.cjs.map +0 -1
  79. package/dist/registry-kTqbi4Lb.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @intellectif/lk-core
2
2
 
3
+ ## 1.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#170](https://github.com/intellectif/learning-kit/pull/170) [`5697510`](https://github.com/intellectif/learning-kit/commit/569751058c8bb85015c75f7f59a7d3a1f827f7de) Thanks [@diego28e](https://github.com/diego28e)! - **Matching: prompts matched to a shared list — headings to paragraphs, statements to people, sentence beginnings to endings — with `<Matching>` to draw it**
8
+
9
+ **Action required:** none for content and grades. Install lk-core 1.13.0 with lk-react 23.10.0. **No grade changes:** every stored grade and validation result replays as before. Two type-level additions can need a line of code: `matching` joins `BUILT_IN_ACTIVITY_TYPES`, `INTERACTIVE_VIDEO_ITEM_TYPES` and `READING_ROUTE_ITEM_TYPES`, and `RedactedMatchingData` joins `RedactedActivity`, so a `switch` or `Record` that is exhaustive over one of them needs a `matching` entry. A host that registered an activity type of its own named `matching` must rename it before upgrading: `registerActivityType` refuses a second descriptor for a built-in type.
10
+
11
+ - **lk-core:** the `matching` activity type — `MatchingData` with `prompts`, a shared `options` list (each option a `label` such as "A" or "iv", and its text), an `optionsTitle`, `optionUse: 'once' | 'many'` and a seeded `shuffleOptions`. Scored per prompt by option id, `partial` or `all-or-nothing`; an unanswered prompt is `incorrect-omission`. Redaction keeps the list and the prompts and withholds each prompt's `correctOptionId` (`RedactedMatchingData`). Draft checks under `mt_*` codes, four critic findings (`mt_no_distractor` among them), the xAPI `matching` interaction, and frozen grade and validation vectors.
12
+ - **lk-core, reading routes:** a matching item's prompts are route questions, one per `partId`. The matching strategies — headings, information, features, sentence endings, multiple matching, gapped text and cross-text — accept it, and their elimination step points at the shared list. Route messages now name a part by its kind: "Gap", "Blank" or "Prompt".
13
+ - **lk-core, interactive video:** a video quiz may hold a matching question.
14
+ - **lk-react:** `<Matching>` (also `@intellectif/lk-react/components/Matching`): the list under its title, a native selector per prompt, and — with `optionUse: 'once'` — an option picked again moves from the prompt that held it, announced to screen readers. After a check it marks each prompt and shows the right option beside a wrong one where the delivery policy shows answers. `<ActivitySequence>`, `<ActivityPreview>`, `<ReadingRoute>` and `<InteractiveVideo>` draw it, and the sequence's seed guard covers `shuffleOptions`. New strings: `matchPlaceholder`, `matchOptionsLabel`, `matchOptionUsed`, `matchMoved`, `matchCorrectAnswer`. New class hooks: `.lk-mt` and its parts. See https://github.com/intellectif/learning-kit/blob/main/docs/authoring.md#matching--prompts-matched-to-a-shared-list-113
15
+ - Not yet: AI explanations, hints, drafts and variants for a matching item; `aiSupports('matching', …)` is `false`.
16
+
17
+ ## 1.12.0
18
+
19
+ ### Minor Changes
20
+
21
+ - [#167](https://github.com/intellectif/learning-kit/pull/167) [`6d920d2`](https://github.com/intellectif/learning-kit/commit/6d920d2d8c36bf09ca9a0811081dcacd2554df7a) Thanks [@diego28e](https://github.com/diego28e)! - **Reading quizzes in an interactive video: a quiz the reading route covers opens as a guided reading route in practice**
22
+
23
+ **Action required:** none. Install lk-core 1.12.0 with lk-react 23.9.0: lk-react calls the new lk-core function. **No grade changes:** every question in a reading quiz is recorded and scored by the video as in any quiz. Content 1.11.0 accepted is still accepted; a route in an interactive video, which 1.11.0 refused with `ig_route_with_timeline`, is now valid, and that code is no longer reported.
24
+
25
+ - **lk-core:** a group with a `timeline` may carry a `route` when the video stimulus holds the passage as its text (`stimulus.body`). A quiz whose every question the route covers is a reading quiz; `readingQuizzes(group)` lists them. The new `ig_route_quiz_mixed` refuses a quiz the route covers only part of; a route on a video with no timeline is still refused (`ig_route_stimulus_kind`).
26
+ - **lk-react:** in `practice`, `<InteractiveVideo>` opens a reading quiz as a `<ReadingRoute>` in its quiz panel, with the passage beside the quiz's questions; its new `readingRoute` prop takes the route's settings and `onFinish(result, cueId)`. Each answer is recorded under its own slot, and an answer given but not handed in is handed in when the learner finishes. In `exam` and `review`, a reading quiz is an ordinary quiz. The route is loaded only by a video that has one. See https://github.com/intellectif/learning-kit/blob/main/docs/reading-route.md#in-an-interactive-video
27
+
3
28
  ## 1.11.0
4
29
 
5
30
  ### Minor Changes
package/README.md CHANGED
@@ -14,7 +14,7 @@ npm install @intellectif/lk-core
14
14
 
15
15
  ## What's in the box
16
16
 
17
- - **Activity schemas** for `multiple-choice`, `fill-in-the-blanks`, `written-response`, `gap-select`, `dictation` and `read-aloud`, with semantic refinements (e.g. *at least one correct option*, *single-select ⇒ exactly one correct*, *passage ↔ blank-id bijection*, *image/embed require `alt`*, *a dictation title never contains its whole transcript as words*, *a read-aloud's text leaves at least one word once punctuation is folded away*). Loose at every level, so your sidecar fields survive validation.
17
+ - **Activity schemas** for `multiple-choice`, `fill-in-the-blanks`, `written-response`, `gap-select`, `dictation`, `read-aloud`, `speaking-response` and `matching`, with semantic refinements (e.g. *at least one correct option*, *single-select ⇒ exactly one correct*, *passage ↔ blank-id bijection*, *image/embed require `alt`*, *a dictation title never contains its whole transcript as words*, *a read-aloud's text leaves at least one word once punctuation is folded away*). Loose at every level, so your sidecar fields survive validation.
18
18
  - **Interactive video** — an item group whose stimulus is a video can carry a `timeline`: quizzes at moments of the video, each holding questions of that group. The schema places every question in exactly one quiz, keeps the five embeddable types honest and refuses a dictation with no recording of its own; `readMediaProgress` reads a stored resume point without trusting it, and `composeTimelineScore` folds the video's questions into an attempt's score. See [docs/interactive-video.md](https://github.com/intellectif/learning-kit/blob/main/docs/interactive-video.md).
19
19
  - **`validateActivity(type, data)`** — the authoritative runtime validator. Returns a typed `{ success, data }` or a structured `{ success: false, errors[] }`, and **throws `UnknownActivityTypeError` if `type` is not registered** — so guard it when validating a content bank that may carry types this build does not know. `validateItemGroup(data)` is the equivalent for a `Stimulus` + `ItemGroup` container, which `validateActivity` cannot take.
20
20
  - **`validateDraft(type, draft)`** — for editors. Reports `complete`, `incomplete` (something not written yet) or `invalid` (something wrong), each issue with a `severity` and a `code` — documented for every problem the checks recognise — and deliberately no `success` boolean to misread. Stricter than `validateActivity`, never looser. **`createDraft(type, { newId })`** returns an empty draft to start from; a multiple-choice draft marks no option correct.
package/dist/ai-check.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_ai_writing = require("./ai-writing-C7f6aKNW.cjs");
3
- const require_scoring = require("./scoring-KpYfR0lO.cjs");
2
+ const require_ai_writing = require("./ai-writing-BDSYuifR.cjs");
3
+ const require_scoring = require("./scoring-IjLi2fYF.cjs");
4
4
  // src/ai-check/cases.ts
5
5
  /**
6
6
  * The items the cases are built from. Small, ordinary language-course content
@@ -1,4 +1,4 @@
1
- import { Ct as AiWritingFeedback, E as AiExplanationRequest, L as AiGradingJudgement, R as AiGradingRequest, S as AiDrafts, V as AiHintRequest, Y as AiRefusal, a as AiCoachingRequest, gt as AiVariantsRequest, ht as AiVariants, i as AiCoaching, it as AiTextResult, l as AiCritique, m as AiCritiqueRequest, w as AiDraftsRequest, wt as AiWritingFeedbackRequest } from "./ai-Cu17iVHa.cjs";
1
+ import { Ct as AiWritingFeedback, E as AiExplanationRequest, L as AiGradingJudgement, R as AiGradingRequest, S as AiDrafts, V as AiHintRequest, Y as AiRefusal, a as AiCoachingRequest, gt as AiVariantsRequest, ht as AiVariants, i as AiCoaching, it as AiTextResult, l as AiCritique, m as AiCritiqueRequest, w as AiDraftsRequest, wt as AiWritingFeedbackRequest } from "./ai-hC5pGYeu.cjs";
2
2
  /**
3
3
  * One call to make against a host's port, and what a learner was looking at
4
4
  * when the SDK would have made it.
@@ -1,4 +1,4 @@
1
- import { Ct as AiWritingFeedback, E as AiExplanationRequest, L as AiGradingJudgement, R as AiGradingRequest, S as AiDrafts, V as AiHintRequest, Y as AiRefusal, a as AiCoachingRequest, gt as AiVariantsRequest, ht as AiVariants, i as AiCoaching, it as AiTextResult, l as AiCritique, m as AiCritiqueRequest, w as AiDraftsRequest, wt as AiWritingFeedbackRequest } from "./ai-Cu17iVHa.js";
1
+ import { Ct as AiWritingFeedback, E as AiExplanationRequest, L as AiGradingJudgement, R as AiGradingRequest, S as AiDrafts, V as AiHintRequest, Y as AiRefusal, a as AiCoachingRequest, gt as AiVariantsRequest, ht as AiVariants, i as AiCoaching, it as AiTextResult, l as AiCritique, m as AiCritiqueRequest, w as AiDraftsRequest, wt as AiWritingFeedbackRequest } from "./ai-hC5pGYeu.js";
2
2
  /**
3
3
  * One call to make against a host's port, and what a learner was looking at
4
4
  * when the SDK would have made it.
package/dist/ai-check.js CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as checkAiCoaching, D as checkAiCritique, E as aiCritiqueRequest, Q as aiCoachingRequest, b as aiDraftsRequest, c as aiVariantsRequest, f as aiGradingRequest, it as aiExplanationRequest, l as checkAiVariants, lt as checkAiExplanation, m as checkAiGrading, n as checkAiWritingFeedback, ot as aiHintRequest, t as aiWritingFeedbackRequest, ut as checkAiHint, x as checkAiDrafts } from "./ai-writing-Dl1bJQbL.js";
2
- import { s as gradeReadAloud } from "./scoring-DshU9i7e.js";
1
+ import { $ as checkAiCoaching, D as checkAiCritique, E as aiCritiqueRequest, Q as aiCoachingRequest, b as aiDraftsRequest, c as aiVariantsRequest, f as aiGradingRequest, it as aiExplanationRequest, l as checkAiVariants, lt as checkAiExplanation, m as checkAiGrading, n as checkAiWritingFeedback, ot as aiHintRequest, t as aiWritingFeedbackRequest, ut as checkAiHint, x as checkAiDrafts } from "./ai-writing-Dsmvv4T-.js";
2
+ import { s as gradeReadAloud } from "./scoring-weQ4SzwB.js";
3
3
  // src/ai-check/cases.ts
4
4
  /**
5
5
  * The items the cases are built from. Small, ordinary language-course content
@@ -420,6 +420,7 @@ interface ActivityDataMap {
420
420
  dictation: DictationData;
421
421
  'read-aloud': ReadAloudData;
422
422
  'speaking-response': SpeakingResponseData;
423
+ matching: MatchingData;
423
424
  }
424
425
  /**
425
426
  * The set of activity types supported by learning-kit. Derived from
@@ -833,6 +834,101 @@ interface GapSelectData {
833
834
  /** What an author allows AI to do for this item: see {@link ActivityAiPermissions}. */
834
835
  ai?: ActivityAiPermissions;
835
836
  }
837
+ /**
838
+ * One entry of a matching item's shared list: a heading, a person, a
839
+ * paragraph, a sentence ending.
840
+ */
841
+ interface MatchingOption {
842
+ /** Unique identifier within the item. */
843
+ id: string;
844
+ /**
845
+ * The short key the learner answers with, as on the paper: `"A"`, `"iv"`.
846
+ * Shown before the text. Optional; unique within the item when given.
847
+ */
848
+ label?: string;
849
+ /**
850
+ * What the learner reads: `"The cost of the new lines"`, `"Mary Lee"`. For a
851
+ * list that is only letters (which paragraph contains…), the letter itself.
852
+ */
853
+ text: string;
854
+ }
855
+ /** One statement, question or sentence beginning the learner matches to an option. */
856
+ interface MatchingPrompt {
857
+ /** Unique identifier within the item. */
858
+ id: string;
859
+ /** What the learner reads, as plain text. */
860
+ text: string;
861
+ /** The `id` of the one option that answers it. */
862
+ correctOptionId: string;
863
+ /** Optional feedback shown beside this prompt after submission. */
864
+ feedback?: string;
865
+ }
866
+ /**
867
+ * Data contract for a Matching activity: several prompts, each matched to one
868
+ * entry of a shared list of options.
869
+ *
870
+ * It is the shape of the exam reading tasks that match: headings to
871
+ * paragraphs, statements to the paragraph or the person they come from,
872
+ * sentence beginnings to their endings, questions to the section that answers
873
+ * them. One list serves every prompt, and it is usually longer than the
874
+ * prompts, so the spare options are the distractors.
875
+ *
876
+ * It is **not** a {@link GapSelectData} with a bank, though both score a
877
+ * choice by identity. A matching prompt is a statement of its own, not a gap
878
+ * in a passage, and the list is the content the learner reads first — a list
879
+ * of headings, a list of people — with the labels the paper answers in.
880
+ * `optionUse: 'once'` says each option answers at most one prompt, which a
881
+ * word bank cannot say.
882
+ */
883
+ interface MatchingData {
884
+ schemaVersion: '1.0';
885
+ type: 'matching';
886
+ /** Unique identifier for this activity. */
887
+ id: string;
888
+ /** Human-readable title used in xAPI statements and error boundaries. */
889
+ title: string;
890
+ /**
891
+ * Optional instructions shown to the learner, as plain text: the task, read
892
+ * before the lists ("Choose the correct heading for each paragraph from the
893
+ * list of headings below."). Every AI request about the item carries them.
894
+ */
895
+ instructions?: string;
896
+ /** Optional title of the list of options, shown above it: `"List of Headings"`. */
897
+ optionsTitle?: string;
898
+ /** The statements to match, in the order the learner answers them. At least one. */
899
+ prompts: MatchingPrompt[];
900
+ /** The shared list, in the order shown. At least two. */
901
+ options: MatchingOption[];
902
+ /**
903
+ * `many` (default): an option may answer any number of prompts, as in
904
+ * "You may use any letter more than once". `once`: each option answers at
905
+ * most one prompt — the answer key never repeats one, and a learner who
906
+ * picks an option already used moves it to the new prompt.
907
+ */
908
+ optionUse?: 'once' | 'many';
909
+ /** Scoring algorithm applied when the learner submits. */
910
+ scoringStrategy: 'all-or-nothing' | 'partial';
911
+ /**
912
+ * Whether the SDK shuffles the list of options. Off by default: an exam's
913
+ * list is printed in a fixed order. Seeded as `MultipleChoiceData.shuffle`
914
+ * is, and refused without a seed outside `practice` by `<ActivitySequence>`.
915
+ */
916
+ shuffleOptions?: boolean;
917
+ /** Optional media shown above the lists. */
918
+ media?: ActivityMedia;
919
+ /** Optional authored overall feedback shown after submission. */
920
+ feedback?: ActivityFeedback;
921
+ /** Minimum scaled score [0–1] required to pass. Defaults to {@link DEFAULT_PASS_THRESHOLD} (0.7) when absent. */
922
+ passThreshold?: number;
923
+ /** BCP 47 language tag for the activity content. */
924
+ locale?: string;
925
+ /** IRI references to learning objectives addressed by this activity. */
926
+ learningObjectives?: string[];
927
+ /** Subjective difficulty on a 1–5 scale. */
928
+ difficultyLevel?: 1 | 2 | 3 | 4 | 5;
929
+ /** What an author allows AI to do for this item: see {@link ActivityAiPermissions}. */
930
+ ai?: ActivityAiPermissions;
931
+ }
836
932
  interface FillInTheBlanksData {
837
933
  schemaVersion: '1.0';
838
934
  type: 'fill-in-the-blanks';
@@ -1172,6 +1268,7 @@ interface LearnerResponseMap {
1172
1268
  dictation: DictationLearnerResponse;
1173
1269
  'read-aloud': ReadAloudLearnerResponse;
1174
1270
  'speaking-response': SpeakingResponseLearnerResponse;
1271
+ matching: MatchingLearnerResponse;
1175
1272
  }
1176
1273
  /** Union of all learner response shapes. */
1177
1274
  type LearnerResponse = LearnerResponseMap[keyof LearnerResponseMap];
@@ -1225,6 +1322,26 @@ interface GapSelectLearnerResponse {
1225
1322
  */
1226
1323
  hintsRevealed?: number;
1227
1324
  }
1325
+ /**
1326
+ * Learner response for a Matching activity.
1327
+ *
1328
+ * A prompt the learner has not answered is **absent from the map, or holds an
1329
+ * empty string** — equivalent, as in {@link GapSelectLearnerResponse}, and
1330
+ * scored as `incorrect-omission`, never as a wrong answer.
1331
+ */
1332
+ interface MatchingLearnerResponse {
1333
+ type: 'matching';
1334
+ /** Map of prompt ID to the ID of the option the learner matched it with. */
1335
+ matches: Record<string, string>;
1336
+ /**
1337
+ * Hints the learner was shown before submitting this answer, counted from
1338
+ * the start of the question — the author's and AI hints alike. Written by
1339
+ * the SDK's components in `practice`; absent or 0 means none. A scoring
1340
+ * policy's `hintPenalty` charges for them. Client-reported, like any count
1341
+ * a browser makes.
1342
+ */
1343
+ hintsRevealed?: number;
1344
+ }
1228
1345
  /** Learner response for a Written Response activity. */
1229
1346
  interface WrittenResponseLearnerResponse {
1230
1347
  type: 'written-response';
@@ -1843,7 +1960,7 @@ interface RouteTrap {
1843
1960
  interface RouteQuestion {
1844
1961
  /** The item's `id`. */
1845
1962
  itemId: string;
1846
- /** The blank or gap id. Required for fill-in-the-blanks and gap-select; absent for multiple-choice. */
1963
+ /** The blank, gap or prompt id. Required for fill-in-the-blanks, gap-select and matching; absent for multiple-choice. */
1847
1964
  partId?: string;
1848
1965
  strategy: RouteStrategyId;
1849
1966
  /**
@@ -1894,7 +2011,7 @@ interface ReadingRoute {
1894
2011
  paragraphLabels?: string[];
1895
2012
  /** The stimulus's texts or sections, when it has several (cross-text, multiple matching). Their paragraphs add up to the passage's. */
1896
2013
  sections?: RouteSection[];
1897
- /** One per question of the group, in any order: numbering follows the items and their blanks or gaps. */
2014
+ /** One per question of the group, in any order: numbering follows the items and their blanks, gaps or prompts. */
1898
2015
  questions: RouteQuestion[];
1899
2016
  }
1900
2017
  /**
@@ -1963,7 +2080,7 @@ interface PassageLayout {
1963
2080
  }
1964
2081
  /** A route question with every quote resolved against the passage. */
1965
2082
  interface PlannedQuestion {
1966
- /** `itemId`, or `itemId#partId` for a blank or gap. Names the question in traces and summaries. */
2083
+ /** `itemId`, or `itemId#partId` for a blank, gap or prompt. Names the question in traces and summaries. */
1967
2084
  key: string;
1968
2085
  itemId: string;
1969
2086
  partId?: string;
@@ -3551,5 +3668,5 @@ interface AiVariantsRun {
3551
3668
  /** Every call, in order: the first, then each repair. */
3552
3669
  calls: AiDraftsCall[];
3553
3670
  }
3554
- export { AiSpeakingGradingFacts as $, MediaTrack as $n, RouteMoveId as $t, AiGapSelectFacts as A, ActivityResult as An, XAPIContext as Ar, SequenceSlot as At, AiGroupInput as B, FillInTheBlanksData as Bn, GradeRouting as Br, PlannedPair as Bt, AiDraftsCall as C, VersionFinding as Cn, WrittenResponseData as Cr, AiWritingFeedback as Ct, AiFeature as D, ActivityDataMap as Dn, WrittenResponseRubricLevel as Dr, MediaProgress as Dt, AiExplanationRequest as E, ActivityData as En, WrittenResponseRubricCriterion as Er, ItemGroup as Et, AiGradingCriterionFact as F, DictationData as Fn, XAPIScore as Fr, TimelineCue as Ft, AiOptionFact as G, GapSelectGap as Gn, GraderUsage as Gr, RouteAnswer as Gt, AiItemFacts as H, GapSelectBank as Hn, Grader as Hr, PlannedTrap as Ht, AiGradingFacts as I, DictationEquivalence as In, XAPIStatement as Ir, PassageLayout as It, AiReadingWordFact as J, InteractionKind as Jn, TextMatchPolicy as Jr, RouteFadingOptions as Jt, AiProvenance as K, GapSelectLearnerResponse as Kn, GradingState as Kr, RouteCause as Kt, AiGradingJudgement as L, DictationLearnerResponse as Ln, XAPIVerbObject as Lr, PassageParagraph as Lt, AiGeneratedVariant as M, BlankConfig as Mn, XAPIError as Mr, Stimulus as Mt, AiGrade as N, DeferredReason as Nn, XAPIObject as Nr, StimulusKind as Nt, AiFillInTheBlanksFacts as O, ActivityFeedback as On, XAPIActor as Or, MediaTimeline as Ot, AiGradedCriterion as P, DeferredScoringPartial as Pn, XAPIResult as Pr, TimelineChapter as Pt, AiSpeakingCriterionFact as Q, MediaPlaybackPolicy as Qn, RouteLink as Qt, AiGradingRequest as R, DictationSlowMedia as Rn, CriterionScore as Rr, PassageSection as Rt, AiDrafts as S, VersionComparison as Sn, ValidationResult as Sr, AiWritingFacts as St, AiDraftsRun as T, VersionSlot as Tn, WrittenResponseRubric as Tr, AiWritingFeedbackResult as Tt, AiMaterialFacts as U, GapSelectChoice as Un, GraderConfiguration as Ur, QuotedRange as Ut, AiHintRequest as V, FillInTheBlanksLearnerResponse as Vn, GradeRoutingReason as Vr, PlannedQuestion as Vt, AiMultipleChoiceFacts as W, GapSelectData as Wn, GraderKind as Wr, ReadingRoute as Wt, AiRubricCriterionFact as X, LearnerResponse as Xn, levenshteinDistance as Xr, RouteLearnerState as Xt, AiRefusal as Y, ItemOutcome as Yn, TextMatchResult as Yr, RouteKeyword as Yt, AiSoundFact as Z, LearnerResponseMap as Zn, matchText as Zr, RouteLevel as Zt, AiDraftCaption as _, DraftNotComplete as _n, SpeakingResponseData as _r, AiVariantsRun as _t, AiCoachingRequest as a, RouteSection as an, ReadAloudData as ar, AiVariantDifficulty as at, AiDraftSource as b, ItemFinding as bn, SpeakingRubricCriterion as br, AiWordFact as bt, AiCriterionJudgement as c, RouteStrategySummary as cn, ReadAloudLearnerResponse as cr, AiVariantLevelFacts as ct, AiCritiqueFinding as d, RouteTrap as dn, RecordingRef as dr, AiVariantPair as dt, RoutePlan as en, MultipleChoiceData as er, AiSpeakingGradingRequest as et, AiCritiqueFindingResult as f, RouteTrapKind as fn, ScoringDetail as fr, AiVariantSkip as ft, AiDictationFacts as g, DraftIssue as gn, SpeakingMeasure as gr, AiVariantsRequest as gt, AiCritiqueResult as h, DraftContext as hn, ScriptTurn as hr, AiVariants as ht, AiCoaching as i, RouteQuote as in, NativeControlHint as ir, AiTextResult as it, AiGeneratedDraft as j, ActivityType as jn, XAPIContextActivities as jr, SequenceSlotGroup as jt, AiGapFact as k, ActivityMedia as kn, XAPIConfig as kr, SequenceEntry as kt, AiCritique as l, RouteSummary as ln, ReadAloudSlowMedia as lr, AiVariantMismatch as lt, AiCritiqueRequest as m, DraftComplete as mn, ScoringResult as mr, AiVariantTargets as mt, AiActivityInput as n, RouteQuestionPart as nn, MultipleChoiceOption as nr, AiSpeakingMeasureFact as nt, AiCoachingResult as o, RouteStep as on, ReadAloudDimension as or, AiVariantExemplarFacts as ot, AiCritiqueKind as p, TextRange as pn, ScoringOutcome as pr, AiVariantSkipCode as pt, AiReadingFacts as q, InteractionEvent as qn, InlineCorrection as qr, RouteEvent as qt, AiBlankFact as r, RouteQuestionSummary as rn, MultipleChoiceOptionMedia as rr, AiSupportedActivityType as rt, AiCoachingWord as s, RouteStrategyId as sn, ReadAloudDimensionWeight as sr, AiVariantImage as st, ActivityAiPermissions as t, RouteQuestion as tn, MultipleChoiceLearnerResponse as tr, AiSpeakingGradingRequestProblem as tt, AiCritiqueField as u, RouteTrace as un, RecordingBounds as ur, AiVariantMissing as ut, AiDraftProblem as v, DraftSeverity as vn, SpeakingResponseLearnerResponse as vr, AiVerdict as vt, AiDraftsRequest as w, VersionPaper as wn, WrittenResponseLearnerResponse as wr, AiWritingFeedbackRequest as wt, AiDraftType as x, ItemFindingSeverity as xn, ValidationError as xr, AiWritingCorrection as xt, AiDraftSettings as y, DraftValidationResult as yn, SpeakingRubric as yr, AiVideoDraft as yt, AiGradingRequestProblem as z, DictationTolerance as zn, GradeRecord as zr, PassageSentence as zt };
3555
- //# sourceMappingURL=ai-Cu17iVHa.d.ts.map
3671
+ export { AiSpeakingGradingFacts as $, MatchingLearnerResponse as $n, TextMatchResult as $r, RouteMoveId as $t, AiGapSelectFacts as A, ActivityResult as An, WrittenResponseRubricCriterion as Ar, SequenceSlot as At, AiGroupInput as B, FillInTheBlanksData as Bn, XAPIStatement as Br, PlannedPair as Bt, AiDraftsCall as C, VersionFinding as Cn, SpeakingRubric as Cr, AiWritingFeedback as Ct, AiFeature as D, ActivityDataMap as Dn, WrittenResponseData as Dr, MediaProgress as Dt, AiExplanationRequest as E, ActivityData as En, ValidationResult as Er, ItemGroup as Et, AiGradingCriterionFact as F, DictationData as Fn, XAPIContextActivities as Fr, TimelineCue as Ft, AiOptionFact as G, GapSelectGap as Gn, GradeRoutingReason as Gr, RouteAnswer as Gt, AiItemFacts as H, GapSelectBank as Hn, CriterionScore as Hr, PlannedTrap as Ht, AiGradingFacts as I, DictationEquivalence as In, XAPIError as Ir, PassageLayout as It, AiReadingWordFact as J, InteractionKind as Jn, GraderKind as Jr, RouteFadingOptions as Jt, AiProvenance as K, GapSelectLearnerResponse as Kn, Grader as Kr, RouteCause as Kt, AiGradingJudgement as L, DictationLearnerResponse as Ln, XAPIObject as Lr, PassageParagraph as Lt, AiGeneratedVariant as M, BlankConfig as Mn, XAPIActor as Mr, Stimulus as Mt, AiGrade as N, DeferredReason as Nn, XAPIConfig as Nr, StimulusKind as Nt, AiFillInTheBlanksFacts as O, ActivityFeedback as On, WrittenResponseLearnerResponse as Or, MediaTimeline as Ot, AiGradedCriterion as P, DeferredScoringPartial as Pn, XAPIContext as Pr, TimelineChapter as Pt, AiSpeakingCriterionFact as Q, MatchingData as Qn, TextMatchPolicy as Qr, RouteLink as Qt, AiGradingRequest as R, DictationSlowMedia as Rn, XAPIResult as Rr, PassageSection as Rt, AiDrafts as S, VersionComparison as Sn, SpeakingResponseLearnerResponse as Sr, AiWritingFacts as St, AiDraftsRun as T, VersionSlot as Tn, ValidationError as Tr, AiWritingFeedbackResult as Tt, AiMaterialFacts as U, GapSelectChoice as Un, GradeRecord as Ur, QuotedRange as Ut, AiHintRequest as V, FillInTheBlanksLearnerResponse as Vn, XAPIVerbObject as Vr, PlannedQuestion as Vt, AiMultipleChoiceFacts as W, GapSelectData as Wn, GradeRouting as Wr, ReadingRoute as Wt, AiRubricCriterionFact as X, LearnerResponse as Xn, GradingState as Xr, RouteLearnerState as Xt, AiRefusal as Y, ItemOutcome as Yn, GraderUsage as Yr, RouteKeyword as Yt, AiSoundFact as Z, LearnerResponseMap as Zn, InlineCorrection as Zr, RouteLevel as Zt, AiDraftCaption as _, DraftNotComplete as _n, ScoringOutcome as _r, AiVariantsRun as _t, AiCoachingRequest as a, RouteSection as an, MultipleChoiceLearnerResponse as ar, AiVariantDifficulty as at, AiDraftSource as b, ItemFinding as bn, SpeakingMeasure as br, AiWordFact as bt, AiCriterionJudgement as c, RouteStrategySummary as cn, NativeControlHint as cr, AiVariantLevelFacts as ct, AiCritiqueFinding as d, RouteTrap as dn, ReadAloudDimensionWeight as dr, AiVariantPair as dt, levenshteinDistance as ei, RoutePlan as en, MatchingOption as er, AiSpeakingGradingRequest as et, AiCritiqueFindingResult as f, RouteTrapKind as fn, ReadAloudLearnerResponse as fr, AiVariantSkip as ft, AiDictationFacts as g, DraftIssue as gn, ScoringDetail as gr, AiVariantsRequest as gt, AiCritiqueResult as h, DraftContext as hn, RecordingRef as hr, AiVariants as ht, AiCoaching as i, RouteQuote as in, MultipleChoiceData as ir, AiTextResult as it, AiGeneratedDraft as j, ActivityType as jn, WrittenResponseRubricLevel as jr, SequenceSlotGroup as jt, AiGapFact as k, ActivityMedia as kn, WrittenResponseRubric as kr, SequenceEntry as kt, AiCritique as l, RouteSummary as ln, ReadAloudData as lr, AiVariantMismatch as lt, AiCritiqueRequest as m, DraftComplete as mn, RecordingBounds as mr, AiVariantTargets as mt, AiActivityInput as n, RouteQuestionPart as nn, MediaPlaybackPolicy as nr, AiSpeakingMeasureFact as nt, AiCoachingResult as o, RouteStep as on, MultipleChoiceOption as or, AiVariantExemplarFacts as ot, AiCritiqueKind as p, TextRange as pn, ReadAloudSlowMedia as pr, AiVariantSkipCode as pt, AiReadingFacts as q, InteractionEvent as qn, GraderConfiguration as qr, RouteEvent as qt, AiBlankFact as r, RouteQuestionSummary as rn, MediaTrack as rr, AiSupportedActivityType as rt, AiCoachingWord as s, RouteStrategyId as sn, MultipleChoiceOptionMedia as sr, AiVariantImage as st, ActivityAiPermissions as t, matchText as ti, RouteQuestion as tn, MatchingPrompt as tr, AiSpeakingGradingRequestProblem as tt, AiCritiqueField as u, RouteTrace as un, ReadAloudDimension as ur, AiVariantMissing as ut, AiDraftProblem as v, DraftSeverity as vn, ScoringResult as vr, AiVerdict as vt, AiDraftsRequest as w, VersionPaper as wn, SpeakingRubricCriterion as wr, AiWritingFeedbackRequest as wt, AiDraftType as x, ItemFindingSeverity as xn, SpeakingResponseData as xr, AiWritingCorrection as xt, AiDraftSettings as y, DraftValidationResult as yn, ScriptTurn as yr, AiVideoDraft as yt, AiGradingRequestProblem as z, DictationTolerance as zn, XAPIScore as zr, PassageSentence as zt };
3672
+ //# sourceMappingURL=ai-hC5pGYeu.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-hC5pGYeu.d.cts","names":[],"sources":["../src/scoring/text-match.ts","../src/types/grading.ts","../src/types/xapi.ts","../src/types/activity.ts","../src/types/authoring.ts","../src/types/reading-route.ts","../src/types/item-group.ts","../src/types/ai.ts"],"mappings":"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"}
@@ -420,6 +420,7 @@ interface ActivityDataMap {
420
420
  dictation: DictationData;
421
421
  'read-aloud': ReadAloudData;
422
422
  'speaking-response': SpeakingResponseData;
423
+ matching: MatchingData;
423
424
  }
424
425
  /**
425
426
  * The set of activity types supported by learning-kit. Derived from
@@ -833,6 +834,101 @@ interface GapSelectData {
833
834
  /** What an author allows AI to do for this item: see {@link ActivityAiPermissions}. */
834
835
  ai?: ActivityAiPermissions;
835
836
  }
837
+ /**
838
+ * One entry of a matching item's shared list: a heading, a person, a
839
+ * paragraph, a sentence ending.
840
+ */
841
+ interface MatchingOption {
842
+ /** Unique identifier within the item. */
843
+ id: string;
844
+ /**
845
+ * The short key the learner answers with, as on the paper: `"A"`, `"iv"`.
846
+ * Shown before the text. Optional; unique within the item when given.
847
+ */
848
+ label?: string;
849
+ /**
850
+ * What the learner reads: `"The cost of the new lines"`, `"Mary Lee"`. For a
851
+ * list that is only letters (which paragraph contains…), the letter itself.
852
+ */
853
+ text: string;
854
+ }
855
+ /** One statement, question or sentence beginning the learner matches to an option. */
856
+ interface MatchingPrompt {
857
+ /** Unique identifier within the item. */
858
+ id: string;
859
+ /** What the learner reads, as plain text. */
860
+ text: string;
861
+ /** The `id` of the one option that answers it. */
862
+ correctOptionId: string;
863
+ /** Optional feedback shown beside this prompt after submission. */
864
+ feedback?: string;
865
+ }
866
+ /**
867
+ * Data contract for a Matching activity: several prompts, each matched to one
868
+ * entry of a shared list of options.
869
+ *
870
+ * It is the shape of the exam reading tasks that match: headings to
871
+ * paragraphs, statements to the paragraph or the person they come from,
872
+ * sentence beginnings to their endings, questions to the section that answers
873
+ * them. One list serves every prompt, and it is usually longer than the
874
+ * prompts, so the spare options are the distractors.
875
+ *
876
+ * It is **not** a {@link GapSelectData} with a bank, though both score a
877
+ * choice by identity. A matching prompt is a statement of its own, not a gap
878
+ * in a passage, and the list is the content the learner reads first — a list
879
+ * of headings, a list of people — with the labels the paper answers in.
880
+ * `optionUse: 'once'` says each option answers at most one prompt, which a
881
+ * word bank cannot say.
882
+ */
883
+ interface MatchingData {
884
+ schemaVersion: '1.0';
885
+ type: 'matching';
886
+ /** Unique identifier for this activity. */
887
+ id: string;
888
+ /** Human-readable title used in xAPI statements and error boundaries. */
889
+ title: string;
890
+ /**
891
+ * Optional instructions shown to the learner, as plain text: the task, read
892
+ * before the lists ("Choose the correct heading for each paragraph from the
893
+ * list of headings below."). Every AI request about the item carries them.
894
+ */
895
+ instructions?: string;
896
+ /** Optional title of the list of options, shown above it: `"List of Headings"`. */
897
+ optionsTitle?: string;
898
+ /** The statements to match, in the order the learner answers them. At least one. */
899
+ prompts: MatchingPrompt[];
900
+ /** The shared list, in the order shown. At least two. */
901
+ options: MatchingOption[];
902
+ /**
903
+ * `many` (default): an option may answer any number of prompts, as in
904
+ * "You may use any letter more than once". `once`: each option answers at
905
+ * most one prompt — the answer key never repeats one, and a learner who
906
+ * picks an option already used moves it to the new prompt.
907
+ */
908
+ optionUse?: 'once' | 'many';
909
+ /** Scoring algorithm applied when the learner submits. */
910
+ scoringStrategy: 'all-or-nothing' | 'partial';
911
+ /**
912
+ * Whether the SDK shuffles the list of options. Off by default: an exam's
913
+ * list is printed in a fixed order. Seeded as `MultipleChoiceData.shuffle`
914
+ * is, and refused without a seed outside `practice` by `<ActivitySequence>`.
915
+ */
916
+ shuffleOptions?: boolean;
917
+ /** Optional media shown above the lists. */
918
+ media?: ActivityMedia;
919
+ /** Optional authored overall feedback shown after submission. */
920
+ feedback?: ActivityFeedback;
921
+ /** Minimum scaled score [0–1] required to pass. Defaults to {@link DEFAULT_PASS_THRESHOLD} (0.7) when absent. */
922
+ passThreshold?: number;
923
+ /** BCP 47 language tag for the activity content. */
924
+ locale?: string;
925
+ /** IRI references to learning objectives addressed by this activity. */
926
+ learningObjectives?: string[];
927
+ /** Subjective difficulty on a 1–5 scale. */
928
+ difficultyLevel?: 1 | 2 | 3 | 4 | 5;
929
+ /** What an author allows AI to do for this item: see {@link ActivityAiPermissions}. */
930
+ ai?: ActivityAiPermissions;
931
+ }
836
932
  interface FillInTheBlanksData {
837
933
  schemaVersion: '1.0';
838
934
  type: 'fill-in-the-blanks';
@@ -1172,6 +1268,7 @@ interface LearnerResponseMap {
1172
1268
  dictation: DictationLearnerResponse;
1173
1269
  'read-aloud': ReadAloudLearnerResponse;
1174
1270
  'speaking-response': SpeakingResponseLearnerResponse;
1271
+ matching: MatchingLearnerResponse;
1175
1272
  }
1176
1273
  /** Union of all learner response shapes. */
1177
1274
  type LearnerResponse = LearnerResponseMap[keyof LearnerResponseMap];
@@ -1225,6 +1322,26 @@ interface GapSelectLearnerResponse {
1225
1322
  */
1226
1323
  hintsRevealed?: number;
1227
1324
  }
1325
+ /**
1326
+ * Learner response for a Matching activity.
1327
+ *
1328
+ * A prompt the learner has not answered is **absent from the map, or holds an
1329
+ * empty string** — equivalent, as in {@link GapSelectLearnerResponse}, and
1330
+ * scored as `incorrect-omission`, never as a wrong answer.
1331
+ */
1332
+ interface MatchingLearnerResponse {
1333
+ type: 'matching';
1334
+ /** Map of prompt ID to the ID of the option the learner matched it with. */
1335
+ matches: Record<string, string>;
1336
+ /**
1337
+ * Hints the learner was shown before submitting this answer, counted from
1338
+ * the start of the question — the author's and AI hints alike. Written by
1339
+ * the SDK's components in `practice`; absent or 0 means none. A scoring
1340
+ * policy's `hintPenalty` charges for them. Client-reported, like any count
1341
+ * a browser makes.
1342
+ */
1343
+ hintsRevealed?: number;
1344
+ }
1228
1345
  /** Learner response for a Written Response activity. */
1229
1346
  interface WrittenResponseLearnerResponse {
1230
1347
  type: 'written-response';
@@ -1843,7 +1960,7 @@ interface RouteTrap {
1843
1960
  interface RouteQuestion {
1844
1961
  /** The item's `id`. */
1845
1962
  itemId: string;
1846
- /** The blank or gap id. Required for fill-in-the-blanks and gap-select; absent for multiple-choice. */
1963
+ /** The blank, gap or prompt id. Required for fill-in-the-blanks, gap-select and matching; absent for multiple-choice. */
1847
1964
  partId?: string;
1848
1965
  strategy: RouteStrategyId;
1849
1966
  /**
@@ -1894,7 +2011,7 @@ interface ReadingRoute {
1894
2011
  paragraphLabels?: string[];
1895
2012
  /** The stimulus's texts or sections, when it has several (cross-text, multiple matching). Their paragraphs add up to the passage's. */
1896
2013
  sections?: RouteSection[];
1897
- /** One per question of the group, in any order: numbering follows the items and their blanks or gaps. */
2014
+ /** One per question of the group, in any order: numbering follows the items and their blanks, gaps or prompts. */
1898
2015
  questions: RouteQuestion[];
1899
2016
  }
1900
2017
  /**
@@ -1963,7 +2080,7 @@ interface PassageLayout {
1963
2080
  }
1964
2081
  /** A route question with every quote resolved against the passage. */
1965
2082
  interface PlannedQuestion {
1966
- /** `itemId`, or `itemId#partId` for a blank or gap. Names the question in traces and summaries. */
2083
+ /** `itemId`, or `itemId#partId` for a blank, gap or prompt. Names the question in traces and summaries. */
1967
2084
  key: string;
1968
2085
  itemId: string;
1969
2086
  partId?: string;
@@ -3551,5 +3668,5 @@ interface AiVariantsRun {
3551
3668
  /** Every call, in order: the first, then each repair. */
3552
3669
  calls: AiDraftsCall[];
3553
3670
  }
3554
- export { AiSpeakingGradingFacts as $, MediaTrack as $n, RouteMoveId as $t, AiGapSelectFacts as A, ActivityResult as An, XAPIContext as Ar, SequenceSlot as At, AiGroupInput as B, FillInTheBlanksData as Bn, GradeRouting as Br, PlannedPair as Bt, AiDraftsCall as C, VersionFinding as Cn, WrittenResponseData as Cr, AiWritingFeedback as Ct, AiFeature as D, ActivityDataMap as Dn, WrittenResponseRubricLevel as Dr, MediaProgress as Dt, AiExplanationRequest as E, ActivityData as En, WrittenResponseRubricCriterion as Er, ItemGroup as Et, AiGradingCriterionFact as F, DictationData as Fn, XAPIScore as Fr, TimelineCue as Ft, AiOptionFact as G, GapSelectGap as Gn, GraderUsage as Gr, RouteAnswer as Gt, AiItemFacts as H, GapSelectBank as Hn, Grader as Hr, PlannedTrap as Ht, AiGradingFacts as I, DictationEquivalence as In, XAPIStatement as Ir, PassageLayout as It, AiReadingWordFact as J, InteractionKind as Jn, TextMatchPolicy as Jr, RouteFadingOptions as Jt, AiProvenance as K, GapSelectLearnerResponse as Kn, GradingState as Kr, RouteCause as Kt, AiGradingJudgement as L, DictationLearnerResponse as Ln, XAPIVerbObject as Lr, PassageParagraph as Lt, AiGeneratedVariant as M, BlankConfig as Mn, XAPIError as Mr, Stimulus as Mt, AiGrade as N, DeferredReason as Nn, XAPIObject as Nr, StimulusKind as Nt, AiFillInTheBlanksFacts as O, ActivityFeedback as On, XAPIActor as Or, MediaTimeline as Ot, AiGradedCriterion as P, DeferredScoringPartial as Pn, XAPIResult as Pr, TimelineChapter as Pt, AiSpeakingCriterionFact as Q, MediaPlaybackPolicy as Qn, RouteLink as Qt, AiGradingRequest as R, DictationSlowMedia as Rn, CriterionScore as Rr, PassageSection as Rt, AiDrafts as S, VersionComparison as Sn, ValidationResult as Sr, AiWritingFacts as St, AiDraftsRun as T, VersionSlot as Tn, WrittenResponseRubric as Tr, AiWritingFeedbackResult as Tt, AiMaterialFacts as U, GapSelectChoice as Un, GraderConfiguration as Ur, QuotedRange as Ut, AiHintRequest as V, FillInTheBlanksLearnerResponse as Vn, GradeRoutingReason as Vr, PlannedQuestion as Vt, AiMultipleChoiceFacts as W, GapSelectData as Wn, GraderKind as Wr, ReadingRoute as Wt, AiRubricCriterionFact as X, LearnerResponse as Xn, levenshteinDistance as Xr, RouteLearnerState as Xt, AiRefusal as Y, ItemOutcome as Yn, TextMatchResult as Yr, RouteKeyword as Yt, AiSoundFact as Z, LearnerResponseMap as Zn, matchText as Zr, RouteLevel as Zt, AiDraftCaption as _, DraftNotComplete as _n, SpeakingResponseData as _r, AiVariantsRun as _t, AiCoachingRequest as a, RouteSection as an, ReadAloudData as ar, AiVariantDifficulty as at, AiDraftSource as b, ItemFinding as bn, SpeakingRubricCriterion as br, AiWordFact as bt, AiCriterionJudgement as c, RouteStrategySummary as cn, ReadAloudLearnerResponse as cr, AiVariantLevelFacts as ct, AiCritiqueFinding as d, RouteTrap as dn, RecordingRef as dr, AiVariantPair as dt, RoutePlan as en, MultipleChoiceData as er, AiSpeakingGradingRequest as et, AiCritiqueFindingResult as f, RouteTrapKind as fn, ScoringDetail as fr, AiVariantSkip as ft, AiDictationFacts as g, DraftIssue as gn, SpeakingMeasure as gr, AiVariantsRequest as gt, AiCritiqueResult as h, DraftContext as hn, ScriptTurn as hr, AiVariants as ht, AiCoaching as i, RouteQuote as in, NativeControlHint as ir, AiTextResult as it, AiGeneratedDraft as j, ActivityType as jn, XAPIContextActivities as jr, SequenceSlotGroup as jt, AiGapFact as k, ActivityMedia as kn, XAPIConfig as kr, SequenceEntry as kt, AiCritique as l, RouteSummary as ln, ReadAloudSlowMedia as lr, AiVariantMismatch as lt, AiCritiqueRequest as m, DraftComplete as mn, ScoringResult as mr, AiVariantTargets as mt, AiActivityInput as n, RouteQuestionPart as nn, MultipleChoiceOption as nr, AiSpeakingMeasureFact as nt, AiCoachingResult as o, RouteStep as on, ReadAloudDimension as or, AiVariantExemplarFacts as ot, AiCritiqueKind as p, TextRange as pn, ScoringOutcome as pr, AiVariantSkipCode as pt, AiReadingFacts as q, InteractionEvent as qn, InlineCorrection as qr, RouteEvent as qt, AiBlankFact as r, RouteQuestionSummary as rn, MultipleChoiceOptionMedia as rr, AiSupportedActivityType as rt, AiCoachingWord as s, RouteStrategyId as sn, ReadAloudDimensionWeight as sr, AiVariantImage as st, ActivityAiPermissions as t, RouteQuestion as tn, MultipleChoiceLearnerResponse as tr, AiSpeakingGradingRequestProblem as tt, AiCritiqueField as u, RouteTrace as un, RecordingBounds as ur, AiVariantMissing as ut, AiDraftProblem as v, DraftSeverity as vn, SpeakingResponseLearnerResponse as vr, AiVerdict as vt, AiDraftsRequest as w, VersionPaper as wn, WrittenResponseLearnerResponse as wr, AiWritingFeedbackRequest as wt, AiDraftType as x, ItemFindingSeverity as xn, ValidationError as xr, AiWritingCorrection as xt, AiDraftSettings as y, DraftValidationResult as yn, SpeakingRubric as yr, AiVideoDraft as yt, AiGradingRequestProblem as z, DictationTolerance as zn, GradeRecord as zr, PassageSentence as zt };
3555
- //# sourceMappingURL=ai-Cu17iVHa.d.cts.map
3671
+ export { AiSpeakingGradingFacts as $, MatchingLearnerResponse as $n, TextMatchResult as $r, RouteMoveId as $t, AiGapSelectFacts as A, ActivityResult as An, WrittenResponseRubricCriterion as Ar, SequenceSlot as At, AiGroupInput as B, FillInTheBlanksData as Bn, XAPIStatement as Br, PlannedPair as Bt, AiDraftsCall as C, VersionFinding as Cn, SpeakingRubric as Cr, AiWritingFeedback as Ct, AiFeature as D, ActivityDataMap as Dn, WrittenResponseData as Dr, MediaProgress as Dt, AiExplanationRequest as E, ActivityData as En, ValidationResult as Er, ItemGroup as Et, AiGradingCriterionFact as F, DictationData as Fn, XAPIContextActivities as Fr, TimelineCue as Ft, AiOptionFact as G, GapSelectGap as Gn, GradeRoutingReason as Gr, RouteAnswer as Gt, AiItemFacts as H, GapSelectBank as Hn, CriterionScore as Hr, PlannedTrap as Ht, AiGradingFacts as I, DictationEquivalence as In, XAPIError as Ir, PassageLayout as It, AiReadingWordFact as J, InteractionKind as Jn, GraderKind as Jr, RouteFadingOptions as Jt, AiProvenance as K, GapSelectLearnerResponse as Kn, Grader as Kr, RouteCause as Kt, AiGradingJudgement as L, DictationLearnerResponse as Ln, XAPIObject as Lr, PassageParagraph as Lt, AiGeneratedVariant as M, BlankConfig as Mn, XAPIActor as Mr, Stimulus as Mt, AiGrade as N, DeferredReason as Nn, XAPIConfig as Nr, StimulusKind as Nt, AiFillInTheBlanksFacts as O, ActivityFeedback as On, WrittenResponseLearnerResponse as Or, MediaTimeline as Ot, AiGradedCriterion as P, DeferredScoringPartial as Pn, XAPIContext as Pr, TimelineChapter as Pt, AiSpeakingCriterionFact as Q, MatchingData as Qn, TextMatchPolicy as Qr, RouteLink as Qt, AiGradingRequest as R, DictationSlowMedia as Rn, XAPIResult as Rr, PassageSection as Rt, AiDrafts as S, VersionComparison as Sn, SpeakingResponseLearnerResponse as Sr, AiWritingFacts as St, AiDraftsRun as T, VersionSlot as Tn, ValidationError as Tr, AiWritingFeedbackResult as Tt, AiMaterialFacts as U, GapSelectChoice as Un, GradeRecord as Ur, QuotedRange as Ut, AiHintRequest as V, FillInTheBlanksLearnerResponse as Vn, XAPIVerbObject as Vr, PlannedQuestion as Vt, AiMultipleChoiceFacts as W, GapSelectData as Wn, GradeRouting as Wr, ReadingRoute as Wt, AiRubricCriterionFact as X, LearnerResponse as Xn, GradingState as Xr, RouteLearnerState as Xt, AiRefusal as Y, ItemOutcome as Yn, GraderUsage as Yr, RouteKeyword as Yt, AiSoundFact as Z, LearnerResponseMap as Zn, InlineCorrection as Zr, RouteLevel as Zt, AiDraftCaption as _, DraftNotComplete as _n, ScoringOutcome as _r, AiVariantsRun as _t, AiCoachingRequest as a, RouteSection as an, MultipleChoiceLearnerResponse as ar, AiVariantDifficulty as at, AiDraftSource as b, ItemFinding as bn, SpeakingMeasure as br, AiWordFact as bt, AiCriterionJudgement as c, RouteStrategySummary as cn, NativeControlHint as cr, AiVariantLevelFacts as ct, AiCritiqueFinding as d, RouteTrap as dn, ReadAloudDimensionWeight as dr, AiVariantPair as dt, levenshteinDistance as ei, RoutePlan as en, MatchingOption as er, AiSpeakingGradingRequest as et, AiCritiqueFindingResult as f, RouteTrapKind as fn, ReadAloudLearnerResponse as fr, AiVariantSkip as ft, AiDictationFacts as g, DraftIssue as gn, ScoringDetail as gr, AiVariantsRequest as gt, AiCritiqueResult as h, DraftContext as hn, RecordingRef as hr, AiVariants as ht, AiCoaching as i, RouteQuote as in, MultipleChoiceData as ir, AiTextResult as it, AiGeneratedDraft as j, ActivityType as jn, WrittenResponseRubricLevel as jr, SequenceSlotGroup as jt, AiGapFact as k, ActivityMedia as kn, WrittenResponseRubric as kr, SequenceEntry as kt, AiCritique as l, RouteSummary as ln, ReadAloudData as lr, AiVariantMismatch as lt, AiCritiqueRequest as m, DraftComplete as mn, RecordingBounds as mr, AiVariantTargets as mt, AiActivityInput as n, RouteQuestionPart as nn, MediaPlaybackPolicy as nr, AiSpeakingMeasureFact as nt, AiCoachingResult as o, RouteStep as on, MultipleChoiceOption as or, AiVariantExemplarFacts as ot, AiCritiqueKind as p, TextRange as pn, ReadAloudSlowMedia as pr, AiVariantSkipCode as pt, AiReadingFacts as q, InteractionEvent as qn, GraderConfiguration as qr, RouteEvent as qt, AiBlankFact as r, RouteQuestionSummary as rn, MediaTrack as rr, AiSupportedActivityType as rt, AiCoachingWord as s, RouteStrategyId as sn, MultipleChoiceOptionMedia as sr, AiVariantImage as st, ActivityAiPermissions as t, matchText as ti, RouteQuestion as tn, MatchingPrompt as tr, AiSpeakingGradingRequestProblem as tt, AiCritiqueField as u, RouteTrace as un, ReadAloudDimension as ur, AiVariantMissing as ut, AiDraftProblem as v, DraftSeverity as vn, ScoringResult as vr, AiVerdict as vt, AiDraftsRequest as w, VersionPaper as wn, SpeakingRubricCriterion as wr, AiWritingFeedbackRequest as wt, AiDraftType as x, ItemFindingSeverity as xn, SpeakingResponseData as xr, AiWritingCorrection as xt, AiDraftSettings as y, DraftValidationResult as yn, ScriptTurn as yr, AiVideoDraft as yt, AiGradingRequestProblem as z, DictationTolerance as zn, XAPIScore as zr, PassageSentence as zt };
3672
+ //# sourceMappingURL=ai-hC5pGYeu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-hC5pGYeu.d.ts","names":[],"sources":["../src/scoring/text-match.ts","../src/types/grading.ts","../src/types/xapi.ts","../src/types/activity.ts","../src/types/authoring.ts","../src/types/reading-route.ts","../src/types/item-group.ts","../src/types/ai.ts"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- const require_registry = require("./registry-RPfZZEqi.cjs");
2
- const require_scoring = require("./scoring-KpYfR0lO.cjs");
3
- const require_item_group = require("./item-group-D7M3E7K2.cjs");
1
+ const require_registry = require("./registry-DUTE1vtq.cjs");
2
+ const require_scoring = require("./scoring-IjLi2fYF.cjs");
3
+ const require_item_group = require("./item-group-CqdByaLR.cjs");
4
4
  // src/ai-material.ts
5
5
  /**
6
6
  * What a model is told about the group a question sits in: the material the
@@ -1458,6 +1458,10 @@ function structureTargets(entry) {
1458
1458
  ...banks.length > 0 ? { banks: banks.map((bank) => ({ choices: isRecord$4(bank) ? listOf$3(bank.choices).length : 0 })) } : {}
1459
1459
  };
1460
1460
  }
1461
+ case "matching": return {
1462
+ prompts: listOf$3(entry.prompts).length,
1463
+ options: listOf$3(entry.options).length
1464
+ };
1461
1465
  case "written-response": return {
1462
1466
  minWords: entry.minWords,
1463
1467
  maxWords: entry.maxWords,
@@ -1471,6 +1475,7 @@ const SCORED_ALIKE = {
1471
1475
  "multiple-choice": ["mode", "scoringStrategy"],
1472
1476
  "fill-in-the-blanks": ["scoringStrategy"],
1473
1477
  "gap-select": ["scoringStrategy", "presentation"],
1478
+ matching: ["scoringStrategy", "optionUse"],
1474
1479
  dictation: ["tolerance", "hints"],
1475
1480
  "read-aloud": [
1476
1481
  "recording",
@@ -1496,7 +1501,8 @@ const DIFFERS = {
1496
1501
  rubric: "The rubric differs",
1497
1502
  minWords: "The minimum word count differs",
1498
1503
  maxWords: "The maximum word count differs",
1499
- languageTarget: "The language target differs"
1504
+ languageTarget: "The language target differs",
1505
+ optionUse: "How often an option may be used differs"
1500
1506
  };
1501
1507
  function itemMisses(exemplar, candidate) {
1502
1508
  const misses = [];
@@ -1580,6 +1586,13 @@ function itemMisses(exemplar, candidate) {
1580
1586
  }
1581
1587
  });
1582
1588
  if (exemplar.shuffleChoices === true !== (candidate.shuffleChoices === true)) miss(["shuffleChoices"], "Shuffling the choices differs from the exemplar.");
1589
+ } else if (type === "matching") {
1590
+ for (const [field, noun] of [["prompts", "prompt"], ["options", "option"]]) {
1591
+ const mine = listOf$3(exemplar[field]).length;
1592
+ const theirs = listOf$3(candidate[field]).length;
1593
+ if (mine !== theirs) miss([field], `${count(theirs, noun)}; the exemplar has ${mine}.`);
1594
+ }
1595
+ if (exemplar.shuffleOptions === true !== (candidate.shuffleOptions === true)) miss(["shuffleOptions"], "Shuffling the options differs from the exemplar.");
1583
1596
  }
1584
1597
  return misses;
1585
1598
  }
@@ -5972,4 +5985,4 @@ Object.defineProperty(exports, "validateItemGroupDraft", {
5972
5985
  }
5973
5986
  });
5974
5987
 
5975
- //# sourceMappingURL=ai-writing-C7f6aKNW.cjs.map
5988
+ //# sourceMappingURL=ai-writing-BDSYuifR.cjs.map