@intellectif/lk-core 1.6.0 → 1.7.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 (82) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/{ai-i3jwXnpX.d.cts → ai-B1wYrqcB.d.cts} +39 -15
  3. package/dist/ai-B1wYrqcB.d.cts.map +1 -0
  4. package/dist/{ai-i3jwXnpX.d.ts → ai-B1wYrqcB.d.ts} +39 -15
  5. package/dist/ai-B1wYrqcB.d.ts.map +1 -0
  6. package/dist/ai-check.cjs +13 -6
  7. package/dist/ai-check.cjs.map +1 -1
  8. package/dist/ai-check.d.cts +1 -5
  9. package/dist/ai-check.d.cts.map +1 -1
  10. package/dist/ai-check.d.ts +1 -5
  11. package/dist/ai-check.d.ts.map +1 -1
  12. package/dist/ai-check.js +13 -6
  13. package/dist/ai-check.js.map +1 -1
  14. package/dist/{ai-writing-OJ5m_1EB.js → ai-writing-B7oMCt66.js} +46 -43
  15. package/dist/ai-writing-B7oMCt66.js.map +1 -0
  16. package/dist/{ai-writing-C4YRVrFi.cjs → ai-writing-DrPTV3R2.cjs} +46 -43
  17. package/dist/ai-writing-DrPTV3R2.cjs.map +1 -0
  18. package/dist/{index-DeD8EI1D.d.ts → index-BM8LeDWn.d.cts} +2 -42
  19. package/dist/index-BM8LeDWn.d.cts.map +1 -0
  20. package/dist/{index-Uh1u57yq.d.cts → index-BTkMQtws.d.ts} +2 -42
  21. package/dist/index-BTkMQtws.d.ts.map +1 -0
  22. package/dist/{index-Dj92T76o.d.ts → index-BU99GFTl.d.ts} +2 -8
  23. package/dist/index-BU99GFTl.d.ts.map +1 -0
  24. package/dist/{index-WBHSrIUU.d.ts → index-BdXs4-en.d.ts} +5 -12
  25. package/dist/index-BdXs4-en.d.ts.map +1 -0
  26. package/dist/{index-CFRgZLhH.d.cts → index-DP9rvyOz.d.cts} +5 -12
  27. package/dist/index-DP9rvyOz.d.cts.map +1 -0
  28. package/dist/{index--U7hHV0s.d.cts → index-XCCoPoTU.d.cts} +2 -8
  29. package/dist/index-XCCoPoTU.d.cts.map +1 -0
  30. package/dist/index.cjs +13 -20
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.d.cts +4 -70
  33. package/dist/index.d.cts.map +1 -1
  34. package/dist/index.d.ts +4 -70
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +13 -20
  37. package/dist/index.js.map +1 -1
  38. package/dist/{item-group-CQRbb8Rx.cjs → item-group-8P3WFuUK.cjs} +4 -6
  39. package/dist/{item-group-CQRbb8Rx.cjs.map → item-group-8P3WFuUK.cjs.map} +1 -1
  40. package/dist/{item-group-BbvvH_Ob.js → item-group-CeDk7mfM.js} +4 -6
  41. package/dist/{item-group-BbvvH_Ob.js.map → item-group-CeDk7mfM.js.map} +1 -1
  42. package/dist/{registry-B23o9UWh.js → registry-D92hz9iA.js} +60 -89
  43. package/dist/registry-D92hz9iA.js.map +1 -0
  44. package/dist/{registry-Ih5n4PVZ.cjs → registry-hzrkTeIT.cjs} +61 -91
  45. package/dist/registry-hzrkTeIT.cjs.map +1 -0
  46. package/dist/{schemas-Q2dyOgc2.cjs → schemas-BWeskONy.cjs} +5 -7
  47. package/dist/{schemas-Q2dyOgc2.cjs.map → schemas-BWeskONy.cjs.map} +1 -1
  48. package/dist/{schemas-yId-bJhD.js → schemas-C7TViWCg.js} +5 -7
  49. package/dist/{schemas-yId-bJhD.js.map → schemas-C7TViWCg.js.map} +1 -1
  50. package/dist/schemas.cjs +3 -3
  51. package/dist/schemas.d.cts +1 -1
  52. package/dist/schemas.d.ts +1 -1
  53. package/dist/schemas.js +3 -3
  54. package/dist/{scoring-CaPS6q8b.cjs → scoring-CtkCFyFT.cjs} +22 -42
  55. package/dist/{scoring-CaPS6q8b.cjs.map → scoring-CtkCFyFT.cjs.map} +1 -1
  56. package/dist/{scoring-CLMdk8i9.js → scoring-DD1GHcLI.js} +22 -42
  57. package/dist/{scoring-CLMdk8i9.js.map → scoring-DD1GHcLI.js.map} +1 -1
  58. package/dist/scoring.cjs +2 -2
  59. package/dist/scoring.d.cts +2 -2
  60. package/dist/scoring.d.ts +2 -2
  61. package/dist/scoring.js +2 -2
  62. package/dist/{xapi-BX0hvRRB.cjs → xapi-7btSpx6v.cjs} +5 -8
  63. package/dist/{xapi-BX0hvRRB.cjs.map → xapi-7btSpx6v.cjs.map} +1 -1
  64. package/dist/{xapi-Cdk9fTvV.js → xapi-Cgicg-zU.js} +5 -8
  65. package/dist/{xapi-Cdk9fTvV.js.map → xapi-Cgicg-zU.js.map} +1 -1
  66. package/dist/xapi.cjs +1 -1
  67. package/dist/xapi.d.cts +1 -1
  68. package/dist/xapi.d.ts +1 -1
  69. package/dist/xapi.js +1 -1
  70. package/package.json +2 -2
  71. package/dist/ai-i3jwXnpX.d.cts.map +0 -1
  72. package/dist/ai-i3jwXnpX.d.ts.map +0 -1
  73. package/dist/ai-writing-C4YRVrFi.cjs.map +0 -1
  74. package/dist/ai-writing-OJ5m_1EB.js.map +0 -1
  75. package/dist/index--U7hHV0s.d.cts.map +0 -1
  76. package/dist/index-CFRgZLhH.d.cts.map +0 -1
  77. package/dist/index-DeD8EI1D.d.ts.map +0 -1
  78. package/dist/index-Dj92T76o.d.ts.map +0 -1
  79. package/dist/index-Uh1u57yq.d.cts.map +0 -1
  80. package/dist/index-WBHSrIUU.d.ts.map +0 -1
  81. package/dist/registry-B23o9UWh.js.map +0 -1
  82. package/dist/registry-Ih5n4PVZ.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
- import { $ as DeferredScoringError, Dt as maxUnits, F as levelKey, I as readRubricLevels, L as countWords, P as levelDistribution, Q as ActivitySchemaError, T as SPEECH_ASSESSMENT_MAX_WORDS, at as dictationReferenceWords, dt as codePointLength, et as RedactedScoringError, ft as normalizeDictationText, it as alignSequences, nt as STEP, t as getActivityTypeDescriptor, tt as UnknownActivityTypeError, v as ReadAloudDataSchema, w as SPEECH_ASSESSMENT_MAX_TEXT_LENGTH, y as CANONICAL_LOCALE_RE } from "./registry-B23o9UWh.js";
1
+ import { $ as DeferredScoringError, Dt as maxUnits, F as levelKey, I as readRubricLevels, L as countWords, P as levelDistribution, Q as ActivitySchemaError, T as SPEECH_ASSESSMENT_MAX_WORDS, at as dictationReferenceWords, dt as codePointLength, et as RedactedScoringError, ft as normalizeDictationText, it as alignSequences, nt as STEP, t as getActivityTypeDescriptor, tt as UnknownActivityTypeError, v as ReadAloudDataSchema, w as SPEECH_ASSESSMENT_MAX_TEXT_LENGTH, y as CANONICAL_LOCALE_RE } from "./registry-D92hz9iA.js";
2
2
  import * as z from "zod/v4";
3
- //#region src/scoring/grade-numbers.ts
3
+ // src/scoring/grade-numbers.ts
4
4
  /**
5
5
  * How far past its own maximum a score may sit and still be a grade. A grader
6
6
  * that sums weighted parts lands on `1.0000000000000002` for a perfect answer
@@ -23,8 +23,7 @@ const OVERSHOOT = 1e-9;
23
23
  function isGradeInRange(score, maxScore) {
24
24
  return Number.isFinite(maxScore) && maxScore > 0 && Number.isFinite(score) && score >= 0 && score - maxScore <= maxScore * OVERSHOOT;
25
25
  }
26
- //#endregion
27
- //#region src/is-redacted.ts
26
+ // src/is-redacted.ts
28
27
  /**
29
28
  * True when `data` is a `redact()` projection rather than full activity data.
30
29
  * Grading a redacted item is always a bug: the answer key is gone by design, so
@@ -41,8 +40,7 @@ function isGradeInRange(score, maxScore) {
41
40
  function isRedacted(data) {
42
41
  return typeof data === "object" && data !== null && data.redacted === true;
43
42
  }
44
- //#endregion
45
- //#region src/scoring/item-scoring.ts
43
+ // src/scoring/item-scoring.ts
46
44
  /**
47
45
  * The policy that changes nothing: one try, nothing costs anything, the first
48
46
  * try counts. What an absent policy resolves to, and exactly how questions were
@@ -213,8 +211,7 @@ function scoreTries(tries, policy) {
213
211
  tries: scored
214
212
  };
215
213
  }
216
- //#endregion
217
- //#region src/scoring/rounding.ts
214
+ // src/scoring/rounding.ts
218
215
  const ROUNDING_MODES = [
219
216
  "half-up",
220
217
  "half-even",
@@ -326,8 +323,7 @@ function classifyBand(value, bands) {
326
323
  for (const band of bands) if (value >= band.min - EPSILON && (best === null || band.min > best.min)) best = band;
327
324
  return best;
328
325
  }
329
- //#endregion
330
- //#region src/scoring/pass-threshold.ts
326
+ // src/scoring/pass-threshold.ts
331
327
  /** Default minimum scaled score required to pass when `passThreshold` is absent. */
332
328
  const DEFAULT_PASS_THRESHOLD = .7;
333
329
  /**
@@ -357,8 +353,7 @@ function selectFeedback(activityData, passed) {
357
353
  if (feedback === void 0) return null;
358
354
  return (passed ? feedback.correct : feedback.incorrect) ?? null;
359
355
  }
360
- //#endregion
361
- //#region src/content-hash.ts
356
+ // src/content-hash.ts
362
357
  /**
363
358
  * Content fingerprinting — "is this the same content the learner was served?"
364
359
  *
@@ -429,8 +424,7 @@ function fingerprint(input) {
429
424
  function contentHash(value) {
430
425
  return fingerprint(canonicalJson(value));
431
426
  }
432
- //#endregion
433
- //#region src/scoring/assisted/calibration.ts
427
+ // src/scoring/assisted/calibration.ts
434
428
  const mean = (values) => values.reduce((sum, value) => sum + value, 0) / values.length;
435
429
  /** Population variance. */
436
430
  function variance(values) {
@@ -757,8 +751,7 @@ function calibrationReport(pairs, scope) {
757
751
  }
758
752
  };
759
753
  }
760
- //#endregion
761
- //#region src/grading.ts
754
+ // src/grading.ts
762
755
  /**
763
756
  * Computes the weighted total from per-criterion scores — the arithmetic that
764
757
  * must NOT be delegated to a language model.
@@ -884,8 +877,7 @@ function outcomeFromGrade(grade) {
884
877
  function hasGrade(outcome) {
885
878
  return outcome.status === "scored" || outcome.status === "graded";
886
879
  }
887
- //#endregion
888
- //#region src/scoring/assisted/grade-from-judgement.ts
880
+ // src/scoring/assisted/grade-from-judgement.ts
889
881
  /**
890
882
  * The grade a checked model judgement gives a written response: the total
891
883
  * computed as `gradeFromRubric` computes every grade — never by the model — with
@@ -951,8 +943,7 @@ function gradeFromJudgement(judgement, data, options = {}) {
951
943
  ...provenance?.generatedAt !== void 0 ? { gradedAt: provenance.generatedAt } : {}
952
944
  };
953
945
  }
954
- //#endregion
955
- //#region src/shuffle.ts
946
+ // src/shuffle.ts
956
947
  /**
957
948
  * Seeded, deterministic shuffling — the ONE algorithm every presentation-order
958
949
  * decision in the SDK goes through: option order in a multiple-choice item,
@@ -989,8 +980,7 @@ function shuffleWithSeed(items, seed, version) {
989
980
  function seededShuffle(items, seed, options = {}) {
990
981
  return shuffleWithSeed(items, hashSeed(seed), options.version ?? 1);
991
982
  }
992
- //#endregion
993
- //#region src/scoring/assisted/routing.ts
983
+ // src/scoring/assisted/routing.ts
994
984
  /** A threshold the caller configured: a finite number, and a rate within 0 to 1 where it is one. */
995
985
  function checkThreshold(name, value, rate) {
996
986
  if (value === void 0) return;
@@ -1138,8 +1128,7 @@ function outcomeFromRoutedGrade(grade, routing) {
1138
1128
  pendingGrade: routed
1139
1129
  };
1140
1130
  }
1141
- //#endregion
1142
- //#region src/scoring/compose.ts
1131
+ // src/scoring/compose.ts
1143
1132
  function earned(item) {
1144
1133
  const { outcome } = item;
1145
1134
  if (hasGrade(outcome)) {
@@ -1270,8 +1259,7 @@ function composeAssessmentScore(sections, policy) {
1270
1259
  unscorableSlotIds: unscorableAll
1271
1260
  };
1272
1261
  }
1273
- //#endregion
1274
- //#region src/scoring/dictation/chars.ts
1262
+ // src/scoring/dictation/chars.ts
1275
1263
  /**
1276
1264
  * The code-point edit operations between two NORMALISED strings — the
1277
1265
  * `reference` and `attempt` of a `DictationAlignment`, or one word pair from
@@ -1306,8 +1294,7 @@ function diffDictationChars(reference, attempt) {
1306
1294
  };
1307
1295
  });
1308
1296
  }
1309
- //#endregion
1310
- //#region src/scoring/speech/tokens.ts
1297
+ // src/scoring/speech/tokens.ts
1311
1298
  /**
1312
1299
  * The normalised tokens of the words that can be marked, each remembering the
1313
1300
  * word it came from, up to what {@link SPEECH_ASSESSMENT_MAX_TEXT_LENGTH} code
@@ -1348,8 +1335,7 @@ function heardTokens(words) {
1348
1335
  length
1349
1336
  };
1350
1337
  }
1351
- //#endregion
1352
- //#region src/scoring/speech/assessment.ts
1338
+ // src/scoring/speech/assessment.ts
1353
1339
  /** A score on the assessment's 0..100 scale. `z.number()` refuses NaN and both infinities. */
1354
1340
  const Score = z.number().min(0).max(100);
1355
1341
  /** A confidence, 0..1. */
@@ -1571,8 +1557,7 @@ function validateSpeechAssessment(value) {
1571
1557
  errors
1572
1558
  };
1573
1559
  }
1574
- //#endregion
1575
- //#region src/scoring/speech/align.ts
1560
+ // src/scoring/speech/align.ts
1576
1561
  /**
1577
1562
  * The word's accuracy when it has one. Absent means the assessor did not
1578
1563
  * measure the word, which is never the same as measuring it at 0.
@@ -1711,8 +1696,7 @@ function placeInsertions(assessment, entries) {
1711
1696
  });
1712
1697
  });
1713
1698
  }
1714
- //#endregion
1715
- //#region src/scoring/speech/grade.ts
1699
+ // src/scoring/speech/grade.ts
1716
1700
  /**
1717
1701
  * The read-aloud grade: the arithmetic over a pronunciation assessment's
1718
1702
  * dimension scores, and the checks that decide whether that evidence may be
@@ -1903,8 +1887,7 @@ function gradeReadAloud(data, response, assessment, options) {
1903
1887
  function referenceWordsOf(data) {
1904
1888
  return dictationReferenceWords({ transcript: data.referenceText })[0];
1905
1889
  }
1906
- //#endregion
1907
- //#region src/scoring/speech/wav.ts
1890
+ // src/scoring/speech/wav.ts
1908
1891
  /** `RIFF` + the file size + `WAVE`, before the first chunk. */
1909
1892
  const HEADER_BYTES = 12;
1910
1893
  /** A chunk's four-character id and its little-endian size. */
@@ -2052,8 +2035,7 @@ function inspectWav(bytes, policy) {
2052
2035
  voicedMs: Math.min(voicedMs, durationMs)
2053
2036
  };
2054
2037
  }
2055
- //#endregion
2056
- //#region src/scoring/unscorable.ts
2038
+ // src/scoring/unscorable.ts
2057
2039
  /**
2058
2040
  * Lifts a result that cannot be graded — a `SpeechUnscorable` from
2059
2041
  * `gradeReadAloud`, or anything else carrying a `code` and a `reason` — into
@@ -2071,8 +2053,7 @@ function outcomeFromUnscorable(result) {
2071
2053
  code: result.code
2072
2054
  };
2073
2055
  }
2074
- //#endregion
2075
- //#region src/scoring/index.ts
2056
+ // src/scoring/index.ts
2076
2057
  /**
2077
2058
  * Scores a learner response against activity data and returns a full
2078
2059
  * {@link ScoringResult}.
@@ -2252,7 +2233,6 @@ function costed(data, opening, graded, rules, rounding) {
2252
2233
  tries: result.tries
2253
2234
  };
2254
2235
  }
2255
- //#endregion
2256
2236
  export { DEFAULT_ITEM_SCORING_POLICY as A, contentHash as C, classifyBand as D, computePassThreshold as E, isGradeInRange as F, resolveItemScoringPolicy as M, scoreTries as N, gte as O, validateItemScoringPolicy as P, canonicalJson as S, DEFAULT_PASS_THRESHOLD as T, gradeFromRubric as _, inspectWav as a, calibrationReport as b, validateSpeechAssessment as c, inAuditSample as d, outcomeFromRoutedGrade as f, gradeFromJudgement as g, seededShuffle as h, outcomeFromUnscorable as i, ITEM_SCORING_MAX_RETRIES as j, roundGrade as k, diffDictationChars as l, hashSeed as m, evaluateTries as n, gradeReadAloud as o, routeGrade as p, score as r, alignReadAloud as s, evaluate as t, composeAssessmentScore as u, hasGrade as v, fingerprint as w, graderConfiguration as x, outcomeFromGrade as y };
2257
2237
 
2258
- //# sourceMappingURL=scoring-CLMdk8i9.js.map
2238
+ //# sourceMappingURL=scoring-DD1GHcLI.js.map