eklavya 1.50.2 → 1.51.1

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/README.md CHANGED
@@ -100,7 +100,9 @@ change and a correction of a missed answer, which can also complete a level. An
100
100
  counter that moves on every write it would show, and offers a refresh. A request
101
101
  it cannot parse gets a 400 without stopping the server
102
102
  ([what it is, underneath](https://eklavya-run.web.app/docs/dashboard/#what-it-is-underneath)).
103
- Its Learning page shows your streak and its calendar under the summary tiles. The
103
+ Its Learning page shows your streak and its calendar under the summary tiles; a
104
+ **To be corrected** tile there and on the Artifacts page counts missed answers still
105
+ waiting for a correction. The
104
106
  review queue gives each project a command to copy that starts Claude Code on its due
105
107
  concepts, in the project's folder when that folder is available.
106
108
  Its feature tips use Driver.js, bundled in `dist/` at build and served by the
@@ -1236,7 +1236,7 @@ function startBlocks(title, cmds) {
1236
1236
  <p><strong>${esc(x.name)}</strong> · ${x.count} due</p>
1237
1237
  <div class="cmd"><code>${esc(x.command)}</code><button type="button" class="cmd__copy" data-copy>Copy</button></div>
1238
1238
  ${x.note ? `<p class="cmd__note">${esc(x.note)}</p>` : ''}</div>`).join('')
1239
- + `<p class="cmd__note">Each run asks up to your questions-per-task limit, most overdue first. Run it again for the rest.</p>
1239
+ + `<p class="cmd__note">Each run asks up to your questions-per-task limit, weakest first. Run it again for the rest.</p>
1240
1240
  <span class="sr" id="copy-live" aria-live="polite"></span></section>`;
1241
1241
  }
1242
1242
 
@@ -1738,6 +1738,7 @@ function viewLearningDashboard() {
1738
1738
  ['Accuracy', answered ? pct(passed, answered) + '%' : '—', answered ? `${passed} right of ${answered}` : 'No assessments yet', answered && pct(passed, answered) >= 70 ? 'good' : '', LH('sessions')],
1739
1739
  ['Mastered', mastered.length, `of ${seen.length} asked`, mastered.length ? 'good' : '', LH('concepts', 'mastered')],
1740
1740
  ['Due now', due.length, due.length ? 'ready for review' : 'nothing waiting', due.length ? 'warn' : '', LH('review')],
1741
+ toCorrectTile(),
1741
1742
  ]),
1742
1743
 
1743
1744
  next,
@@ -2775,6 +2776,12 @@ const artifactUrl = (a) => '/artifacts/' + a.id.split('/').map(encodeURIComponen
2775
2776
  // The thumbnail's URL names the ground, and the size busts its cache when a page is rewritten.
2776
2777
  const thumbUrl = (a, mode) => `${artifactUrl(a)}?thumb=${mode}&v=${a.bytes}`;
2777
2778
 
2779
+ /** Missed answers whose explainer still waits for a correction: one tile on both Dashboards. */
2780
+ function toCorrectTile() {
2781
+ const n = artifactsInScope().filter((a) => a.correction === 'open').length;
2782
+ return ['To be corrected', n, n ? `missed answer${n === 1 ? '' : 's'} to correct` : 'nothing to correct', n ? 'warn' : '', AH('dashboard', 'to-correct')];
2783
+ }
2784
+
2778
2785
  function artifactCard(a) {
2779
2786
  const known = a.concept && S.concepts.some((c) => c.slug === a.concept);
2780
2787
  const concept = !a.concept ? ''
@@ -2829,6 +2836,11 @@ function viewArtifacts(param) {
2829
2836
  ${TAB_MAX} stay open. An explainer for a missed question carries a <b>Correct your answer</b> bar: pick the right
2830
2837
  option and the miss shows as corrected. That counts as a pass for the concept's score, but not toward a
2831
2838
  commit gate or a level, and the concept still comes back for review.`),
2839
+ tiles([
2840
+ ['Pages', all.length, 'in scope', '', AH('dashboard')],
2841
+ ['Explainers', counts.explainer, 'one concept each', '', AH('dashboard', 'explainer')],
2842
+ toCorrectTile(),
2843
+ ]),
2832
2844
  card(null, null,
2833
2845
  `<div class="filters">
2834
2846
  <div class="grow"><input type="search" id="aq" value="${esc(t.q)}" placeholder="Search artifacts" aria-label="Search artifacts"></div>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eklavya",
3
3
  "displayName": "Eklavya",
4
- "version": "1.50.2",
4
+ "version": "1.51.1",
5
5
  "description": "Learn while your agent works. Turns coding-agent generation time into adaptive, Socratic learning grounded in the code being written.",
6
6
  "author": {
7
7
  "name": "Ajay Kumar"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eklavya",
3
- "version": "1.50.2",
3
+ "version": "1.51.1",
4
4
  "description": "Learn while your agent works — local knowledge graph, spaced repetition, and quiz gating for agent-assisted development.",
5
5
  "license": "MIT",
6
6
  "repository": {