eklavya 1.49.2 → 1.50.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.
- package/README.md +3 -0
- package/dist/assets/dashboard.html +193 -38
- package/dist/dashboard.js +2 -2
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/tools/get_session_quiz_plan.js +14 -1
- package/dist/tools/get_session_quiz_plan.js.map +1 -1
- package/dist/user-skill/eklavya/SKILL.md +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -100,6 +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
|
|
104
|
+
review queue gives each project a command to copy that starts Claude Code on its due
|
|
105
|
+
concepts, in the project's folder when that folder is available.
|
|
103
106
|
Its feature tips use Driver.js, bundled in `dist/` at build and served by the
|
|
104
107
|
dashboard itself at `/vendor/driver-hints.js` and `/vendor/driver-hints.css`, so
|
|
105
108
|
the page still requests nothing from another host. [Configuration](https://eklavya-run.web.app/docs/configuration/) lists
|
|
@@ -484,6 +484,28 @@
|
|
|
484
484
|
.heat { overflow-x:auto; }
|
|
485
485
|
.heat svg { width:auto; max-width:none; }
|
|
486
486
|
.heat rect.cell { stroke:var(--panel); stroke-width:1; }
|
|
487
|
+
.heat rect.cell.is-run { stroke:var(--ink); stroke-width:1.5; }
|
|
488
|
+
.streak__head { display:flex; align-items:flex-start; justify-content:space-between; gap:var(--space-2) var(--space-4);
|
|
489
|
+
flex-wrap:wrap; margin-bottom:var(--space-4); }
|
|
490
|
+
.streak h2 { font-family:var(--font-disp); font-size:var(--text-2xl); font-weight:var(--weight-extra);
|
|
491
|
+
letter-spacing:-.03em; line-height:1.15; margin:0; }
|
|
492
|
+
.streak__sub { color:var(--dim); font-size:13.5px; margin:var(--space-1) 0 0; }
|
|
493
|
+
.streak__best { font-size:10.5px; font-family:var(--font-mono); font-weight:var(--weight-medium); margin:var(--space-2) 0 0;
|
|
494
|
+
letter-spacing:var(--tracking-caps); text-transform:uppercase; color:var(--faint); }
|
|
495
|
+
.streak__cal { display:flex; align-items:flex-start; gap:var(--space-1); }
|
|
496
|
+
.streak__cal .heat { flex:1 1 auto; min-width:0; }
|
|
497
|
+
.streak__arr { flex:none; width:28px; height:22px; padding:0; border:1px solid var(--line-2); background:var(--panel);
|
|
498
|
+
color:var(--ink); font:inherit; font-size:15px; line-height:1; cursor:pointer;
|
|
499
|
+
transition:border-color var(--duration-fast) var(--ease), color var(--duration-fast) var(--ease); }
|
|
500
|
+
.streak__arr:hover:not(:disabled) { border-color:var(--spot); color:var(--spot); }
|
|
501
|
+
.streak__arr:focus-visible { outline:none; box-shadow:var(--ring); }
|
|
502
|
+
.streak__arr:disabled { color:var(--faint-2); cursor:default; }
|
|
503
|
+
.streak__arr[hidden] { display:none; }
|
|
504
|
+
.streak__legend { display:flex; justify-content:space-between; gap:var(--space-2) var(--space-5); flex-wrap:wrap;
|
|
505
|
+
margin-top:var(--space-3); font-size:12px; color:var(--faint); }
|
|
506
|
+
.streak__legend span { display:inline-flex; align-items:center; gap:3px; }
|
|
507
|
+
.streak__legend b { display:inline-block; width:10px; height:10px; }
|
|
508
|
+
.streak__legend span:last-child b { margin-right:var(--space-1); }
|
|
487
509
|
|
|
488
510
|
/* ---------- question & answer records ---------- */
|
|
489
511
|
.qa { border:1px solid var(--line); padding:var(--space-4) var(--space-5); }
|
|
@@ -638,6 +660,20 @@
|
|
|
638
660
|
.next p strong { color:var(--ink); }
|
|
639
661
|
.next code { background:var(--mass); padding:2px 6px; font-size:12.5px; color:var(--ink); }
|
|
640
662
|
.next.ok { border-left-color:var(--spot); }
|
|
663
|
+
.next.start { display:block; }
|
|
664
|
+
.next.start + .next.start { margin-top:var(--space-3); }
|
|
665
|
+
.cmd { display:flex; align-items:stretch; gap:var(--space-2); margin-top:var(--space-3); }
|
|
666
|
+
.cmd code { flex:1 1 auto; min-width:0; overflow-x:auto; white-space:pre; background:var(--code-bg); color:var(--ink);
|
|
667
|
+
font-family:var(--font-mono); font-size:12.5px; line-height:1.6; padding:var(--space-2) var(--space-3);
|
|
668
|
+
border:1px solid var(--line-2); }
|
|
669
|
+
.cmd__copy { flex:none; padding:0 var(--space-4); border:1px solid var(--line-2); background:var(--panel); color:var(--ink);
|
|
670
|
+
font:inherit; font-size:13px; cursor:pointer; min-width:76px;
|
|
671
|
+
transition:border-color var(--duration-fast) var(--ease), color var(--duration-fast) var(--ease); }
|
|
672
|
+
.cmd__copy:hover { border-color:var(--spot); color:var(--spot); }
|
|
673
|
+
.cmd__copy:focus-visible { outline:none; box-shadow:var(--ring); }
|
|
674
|
+
.cmd__note { margin:var(--space-2) 0 0; color:var(--dim); font-size:13px; }
|
|
675
|
+
.starts > .cmd__note { margin-top:var(--space-3); }
|
|
676
|
+
.sr { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
|
|
641
677
|
|
|
642
678
|
/* One line per item: a name, a quiet second line, and one number on the right. */
|
|
643
679
|
.lines { list-style:none; margin:0; padding:0; }
|
|
@@ -888,6 +924,11 @@ const DAY_MS = 86400000;
|
|
|
888
924
|
const parse = (ts) => (ts ? new Date(String(ts).replace(' ', 'T') + (String(ts).endsWith('Z') ? '' : 'Z')) : null);
|
|
889
925
|
const dayKey = (d) => d.toISOString().slice(0, 10);
|
|
890
926
|
const fromKey = (k) => new Date(k + 'T00:00:00Z');
|
|
927
|
+
/* A day is the learner's local calendar day, as the server's `'localtime'`
|
|
928
|
+
grouping is: an answer at 01:00 in India is today's, not yesterday's. Only
|
|
929
|
+
"today" is read from the local clock; stepping between keys stays in UTC. */
|
|
930
|
+
const localKey = (d) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
|
|
931
|
+
const todayKey = () => localKey(new Date());
|
|
891
932
|
|
|
892
933
|
const fmtDay = (k) => fromKey(k).toLocaleDateString(undefined, { month:'short', day:'numeric', timeZone:'UTC' });
|
|
893
934
|
const fmtDate = (ts) => {
|
|
@@ -993,8 +1034,7 @@ function dailyInScope() {
|
|
|
993
1034
|
/** Fills every day in a window, including the empty ones — the gaps are data. */
|
|
994
1035
|
function fillDays(map, n, endKey) {
|
|
995
1036
|
const out = [];
|
|
996
|
-
const end =
|
|
997
|
-
end.setUTCHours(0, 0, 0, 0);
|
|
1037
|
+
const end = fromKey(endKey ?? todayKey());
|
|
998
1038
|
const cur = new Date(end.getTime() - (n - 1) * DAY_MS);
|
|
999
1039
|
for (let i = 0; i < n; i++) {
|
|
1000
1040
|
const k = dayKey(cur);
|
|
@@ -1007,18 +1047,19 @@ function fillDays(map, n, endKey) {
|
|
|
1007
1047
|
/** Consecutive days with at least one answer, counting back from today. */
|
|
1008
1048
|
function streaks(map) {
|
|
1009
1049
|
const active = new Set([...map.values()].filter((d) => d.total > 0).map((d) => d.day));
|
|
1010
|
-
|
|
1011
|
-
const cur =
|
|
1012
|
-
|
|
1013
|
-
|
|
1050
|
+
const run = new Set();
|
|
1051
|
+
const cur = fromKey(todayKey());
|
|
1052
|
+
const today = active.has(dayKey(cur));
|
|
1053
|
+
if (!today) cur.setUTCDate(cur.getUTCDate() - 1); // today may not have started yet
|
|
1054
|
+
while (active.has(dayKey(cur))) { run.add(dayKey(cur)); cur.setUTCDate(cur.getUTCDate() - 1); }
|
|
1014
1055
|
|
|
1015
|
-
let best = 0,
|
|
1056
|
+
let best = 0, len = 0, prev = null;
|
|
1016
1057
|
for (const k of [...active].sort()) {
|
|
1017
|
-
|
|
1018
|
-
best = Math.max(best,
|
|
1058
|
+
len = prev && fromKey(k).getTime() - fromKey(prev).getTime() === DAY_MS ? len + 1 : 1;
|
|
1059
|
+
best = Math.max(best, len);
|
|
1019
1060
|
prev = k;
|
|
1020
1061
|
}
|
|
1021
|
-
return { current, best, days: active.size };
|
|
1062
|
+
return { current: run.size, best, days: active.size, run, today };
|
|
1022
1063
|
}
|
|
1023
1064
|
|
|
1024
1065
|
/** Sessions, rebuilt from the two row sets that mention a session id. */
|
|
@@ -1154,6 +1195,63 @@ function fold(id, title, peek, body, opts = {}) {
|
|
|
1154
1195
|
/** The one thing waiting on the reader, or nothing. `html` is escaped by the caller. */
|
|
1155
1196
|
const nextStep = (html, ok) => `<div class="next${ok ? ' ok' : ''}"><p>${html}</p></div>`;
|
|
1156
1197
|
|
|
1198
|
+
/* ---------- start-review commands ---------- */
|
|
1199
|
+
|
|
1200
|
+
const isWindows = () => navigator.userAgent.includes('Windows');
|
|
1201
|
+
/**
|
|
1202
|
+
* A command per project that starts Claude Code there on the given due
|
|
1203
|
+
* concepts: `[{ name, count, command, note }]`, most due first. An answer
|
|
1204
|
+
* counts in the project of the session it is given in, so the command goes
|
|
1205
|
+
* to the concept's last project, or to `into` (the selected project). Slugs
|
|
1206
|
+
* are kebab-case already; anything else is dropped rather than quoted.
|
|
1207
|
+
*/
|
|
1208
|
+
function startCommand(concepts, into = null) {
|
|
1209
|
+
const groups = new Map();
|
|
1210
|
+
for (const c of concepts) {
|
|
1211
|
+
if (!c.due || !/^[a-z0-9-]+$/.test(c.slug)) continue;
|
|
1212
|
+
const id = into ?? pid(c.repo);
|
|
1213
|
+
if (!groups.has(id)) groups.set(id, []);
|
|
1214
|
+
groups.get(id).push(c);
|
|
1215
|
+
}
|
|
1216
|
+
return [...groups].map(([id, cs]) => {
|
|
1217
|
+
const slugs = cs.sort((a, b) => (b.overdue_days ?? 0) - (a.overdue_days ?? 0)).slice(0, 20).map((c) => c.slug);
|
|
1218
|
+
const quiz = `claude "/eklavya:quiz ${slugs.join(' ')}"`;
|
|
1219
|
+
const p = projectById(id);
|
|
1220
|
+
const here = p?.path && p.available;
|
|
1221
|
+
const command = !here ? quiz
|
|
1222
|
+
: isWindows() ? `Set-Location -LiteralPath '${p.path.replace(/'/g, "''")}'; ${quiz}`
|
|
1223
|
+
: `cd '${p.path.replace(/'/g, "'\\''")}' && ${quiz}`;
|
|
1224
|
+
return { name: p?.name ?? base(id), count: cs.length, command,
|
|
1225
|
+
note: here ? '' : 'Run it inside the project you want these answers counted in.' };
|
|
1226
|
+
}).sort((a, b) => b.count - a.count);
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
/** The commands as copyable blocks under one heading, or nothing. */
|
|
1230
|
+
function startBlocks(title, cmds) {
|
|
1231
|
+
if (!cmds.length) return '';
|
|
1232
|
+
return `<section class="starts"><div class="head"><h2>${esc(title)}</h2></div>`
|
|
1233
|
+
+ cmds.map((x) => `<div class="next start">
|
|
1234
|
+
<p><strong>${esc(x.name)}</strong> · ${x.count} due</p>
|
|
1235
|
+
<div class="cmd"><code>${esc(x.command)}</code><button type="button" class="cmd__copy" data-copy>Copy</button></div>
|
|
1236
|
+
${x.note ? `<p class="cmd__note">${esc(x.note)}</p>` : ''}</div>`).join('')
|
|
1237
|
+
+ `<p class="cmd__note">Each run asks up to your questions-per-task limit, most overdue first. Run it again for the rest.</p>
|
|
1238
|
+
<span class="sr" id="copy-live" aria-live="polite"></span></section>`;
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
/** Copies a block's command; if the clipboard refuses, selects it for the keyboard shortcut instead. */
|
|
1242
|
+
function copyCommand(btn) {
|
|
1243
|
+
const code = btn.parentElement.querySelector('code');
|
|
1244
|
+
const live = $('copy-live');
|
|
1245
|
+
Promise.resolve().then(() => navigator.clipboard.writeText(code.textContent)).then(() => {
|
|
1246
|
+
btn.textContent = 'Copied';
|
|
1247
|
+
live.textContent = 'Command copied';
|
|
1248
|
+
setTimeout(() => { btn.textContent = 'Copy'; }, 1500);
|
|
1249
|
+
}, () => {
|
|
1250
|
+
getSelection().selectAllChildren(code);
|
|
1251
|
+
live.textContent = `Press ${/Mac|iPhone|iPad/.test(navigator.userAgent) ? '⌘C' : 'Ctrl+C'} to copy`;
|
|
1252
|
+
});
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1157
1255
|
/**
|
|
1158
1256
|
* One line per item: `{ t, s, v, go, cls }` — a title, a quiet mono second
|
|
1159
1257
|
* line, one value on the right, and where it opens. All HTML the caller escaped.
|
|
@@ -1300,35 +1398,52 @@ function chartActivity(el, days) {
|
|
|
1300
1398
|
* window gets a cell, empty ones included — a fortnight of silence has to read
|
|
1301
1399
|
* as a fortnight of silence, not close up into the next session.
|
|
1302
1400
|
*/
|
|
1303
|
-
|
|
1401
|
+
const HEAT_STEP = [0, 30, 55, 80, 100]; // % of --spot over --mass for steps 1..4
|
|
1402
|
+
const heatFill = (s) => `color-mix(in srgb, var(--spot) ${HEAT_STEP[s]}%, var(--mass))`;
|
|
1403
|
+
let HEAT_OFF = 0; // weeks paged back; a view position, reset by render()
|
|
1404
|
+
const HEAT_ARROWS = 64; // the two arrow buttons beside the grid
|
|
1405
|
+
|
|
1406
|
+
function chartHeatmap(el, map, run = new Set()) {
|
|
1304
1407
|
const CELL = 13, GAP = 3, PAD_T = 18, PAD_L = 26;
|
|
1305
1408
|
// The window is chosen from the width rather than the width from the window:
|
|
1306
1409
|
// a wide card shows a year, a phone shows a quarter, and the cell stays the
|
|
1307
1410
|
// same size on both. Capped at 53 because that is all the payload carries.
|
|
1308
|
-
const
|
|
1309
|
-
const
|
|
1310
|
-
const
|
|
1311
|
-
|
|
1411
|
+
const box = el.closest('.streak__cal') ?? el.parentElement;
|
|
1412
|
+
const fit = (w) => Math.floor((w - PAD_L - 2) / (CELL + GAP));
|
|
1413
|
+
const room = box.clientWidth || 700;
|
|
1414
|
+
const paged = fit(room) < 53;
|
|
1415
|
+
const weeks = paged ? Math.max(12, fit(room - HEAT_ARROWS)) : 53;
|
|
1416
|
+
if (!paged) HEAT_OFF = 0;
|
|
1417
|
+
const today = fromKey(todayKey());
|
|
1418
|
+
const end = new Date(today);
|
|
1419
|
+
end.setUTCDate(end.getUTCDate() + (6 - end.getUTCDay()) - HEAT_OFF * 7); // to the end of this week, paged back
|
|
1312
1420
|
const total = weeks * 7;
|
|
1313
1421
|
const days = fillDays(map, total, dayKey(end));
|
|
1314
1422
|
const max = Math.max(...days.map((d) => d.total), 1);
|
|
1423
|
+
const year = today.getUTCFullYear();
|
|
1424
|
+
const label = (k) => fromKey(k).toLocaleDateString(undefined,
|
|
1425
|
+
{ month:'short', day:'numeric', year: fromKey(k).getUTCFullYear() === year ? undefined : 'numeric', timeZone:'UTC' });
|
|
1315
1426
|
|
|
1316
|
-
let out = '', lastMonth = '';
|
|
1427
|
+
let out = '', lastMonth = '', lastCol = -9;
|
|
1317
1428
|
days.forEach((d, i) => {
|
|
1318
1429
|
const col = Math.floor(i / 7), row = i % 7;
|
|
1319
1430
|
const x = PAD_L + col * (CELL + GAP), y = PAD_T + row * (CELL + GAP);
|
|
1320
|
-
const date = fromKey(d.day);
|
|
1321
1431
|
if (row === 0) {
|
|
1322
|
-
const m =
|
|
1432
|
+
const m = fromKey(d.day).toLocaleDateString(undefined, { month:'short', timeZone:'UTC' });
|
|
1323
1433
|
// Not in the last two columns: a month label starting there runs off the
|
|
1324
|
-
// right edge of the card.
|
|
1325
|
-
if (m !== lastMonth) {
|
|
1434
|
+
// right edge of the card. Nor within three columns of the previous label, which it would overprint.
|
|
1435
|
+
if (m !== lastMonth) {
|
|
1436
|
+
if (col < weeks - 2 && col - lastCol >= 3) { out += `<text class="axis" x="${x}" y="${PAD_T - 6}">${m}</text>`; lastCol = col; }
|
|
1437
|
+
lastMonth = m;
|
|
1438
|
+
}
|
|
1326
1439
|
}
|
|
1327
|
-
const
|
|
1328
|
-
const fill =
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1440
|
+
const step = d.total ? Math.min(4, Math.ceil((4 * d.total) / max)) : 0;
|
|
1441
|
+
const fill = step ? heatFill(step) : d.day > todayKey() ? 'transparent' : 'var(--mass)';
|
|
1442
|
+
// The current run is outlined inside its own cell, so neighbours never touch.
|
|
1443
|
+
const on = run.has(d.day), inset = on ? 0.75 : 0;
|
|
1444
|
+
const title = `${label(d.day)} — ${d.total ? `${plural(d.total, 'answer')} (${d.passed + d.corrected} right)` : 'nothing'}${on ? ' · current streak' : ''}`;
|
|
1445
|
+
out += `<rect class="cell${on ? ' is-run' : ''}" data-step="${step}" x="${x + inset}" y="${y + inset}" width="${CELL - 2 * inset}" height="${CELL - 2 * inset}" fill="${fill}">`
|
|
1446
|
+
+ `<title>${esc(title)}</title></rect>`;
|
|
1332
1447
|
});
|
|
1333
1448
|
['Mon', 'Wed', 'Fri'].forEach((label, n) => {
|
|
1334
1449
|
const row = [1, 3, 5][n];
|
|
@@ -1338,6 +1453,41 @@ function chartHeatmap(el, map) {
|
|
|
1338
1453
|
el.setAttribute('viewBox', `0 0 ${W} ${H}`);
|
|
1339
1454
|
el.setAttribute('width', W); el.setAttribute('height', H);
|
|
1340
1455
|
el.innerHTML = out;
|
|
1456
|
+
|
|
1457
|
+
// The arrows page by the window's own width: back until its first day is a
|
|
1458
|
+
// year old (all the payload carries), forward until this week.
|
|
1459
|
+
const prev = $('heat-prev'), next = $('heat-next');
|
|
1460
|
+
if (prev && next) {
|
|
1461
|
+
prev.hidden = next.hidden = !paged;
|
|
1462
|
+
prev.dataset.weeks = next.dataset.weeks = weeks;
|
|
1463
|
+
next.disabled = HEAT_OFF === 0;
|
|
1464
|
+
prev.disabled = today.getTime() - fromKey(days[0].day).getTime() >= 365 * DAY_MS;
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
|
|
1468
|
+
/** The streak, up front: the run, the longest, and the calendar it is counted from. */
|
|
1469
|
+
function streakCard(daily, st) {
|
|
1470
|
+
chart('c-heat', (el) => chartHeatmap(el, daily, st.run));
|
|
1471
|
+
const sub = st.current && !st.today ? `Answer one today to make it ${st.current + 1}.`
|
|
1472
|
+
: !st.current && st.best ? `Your longest was ${plural(st.best, 'day')}.`
|
|
1473
|
+
: !st.best ? 'Answer one question to start one.' : '';
|
|
1474
|
+
const sq = (style) => `<b style="${style}"></b>`;
|
|
1475
|
+
return `<section class="card streak">
|
|
1476
|
+
<div class="streak__head">
|
|
1477
|
+
<div><h2>${st.current ? `${st.current} day streak` : 'No streak yet'}</h2>
|
|
1478
|
+
${sub ? `<p class="streak__sub">${esc(sub)}</p>` : ''}</div>
|
|
1479
|
+
${st.best ? `<p class="streak__best">Longest streak <span aria-hidden="true">|</span> ${esc(plural(st.best, 'day'))}</p>` : ''}
|
|
1480
|
+
</div>
|
|
1481
|
+
<div class="streak__cal">
|
|
1482
|
+
<button type="button" class="streak__arr" id="heat-prev" aria-label="Earlier weeks" hidden>‹</button>
|
|
1483
|
+
<div class="heat"><svg id="c-heat" role="img" aria-label="Calendar of daily answers, up to a year back"></svg></div>
|
|
1484
|
+
<button type="button" class="streak__arr" id="heat-next" aria-label="Later weeks" hidden>›</button>
|
|
1485
|
+
</div>
|
|
1486
|
+
<div class="streak__legend">
|
|
1487
|
+
<span>More ${[4, 3, 2, 1].map((n) => sq(`background:${heatFill(n)}`)).join('')} Less</span>
|
|
1488
|
+
<span>${sq('box-shadow:inset 0 0 0 1.5px var(--ink)')} Current streak</span>
|
|
1489
|
+
</div>
|
|
1490
|
+
</section>`;
|
|
1341
1491
|
}
|
|
1342
1492
|
|
|
1343
1493
|
/** Review load for the next fortnight, with everything overdue in one column. */
|
|
@@ -1559,13 +1709,11 @@ function viewLearningDashboard() {
|
|
|
1559
1709
|
const unassessed = inv.filter((p) => !p.learning.answers && p.learning.logged_concepts);
|
|
1560
1710
|
|
|
1561
1711
|
chart('c-activity', (el) => chartActivity(el, last30));
|
|
1562
|
-
chart('c-heat', (el) => chartHeatmap(el, daily));
|
|
1563
1712
|
|
|
1564
1713
|
// One next step, the most useful one. Due work outranks an empty scope.
|
|
1565
1714
|
const next = due.length
|
|
1566
1715
|
? nextStep(`<strong>${plural(due.length, 'concept')} ${due.length === 1 ? 'is' : 'are'} due.</strong>
|
|
1567
|
-
|
|
1568
|
-
<a class="link" data-go="${esc(LH('review'))}">review queue</a>.`)
|
|
1716
|
+
Open the <a class="link" data-go="${esc(LH('review'))}">review queue</a> for the command to run.`)
|
|
1569
1717
|
: PROJECT !== null && !answered
|
|
1570
1718
|
? nextStep(`<strong>No assessments yet in ${esc(scopeName())}.</strong>
|
|
1571
1719
|
${logged.size ? `${plural(logged.size, 'concept')} recorded from its work will come up in a quiz.` : 'Nothing has been logged here either.'}`, true)
|
|
@@ -1588,11 +1736,12 @@ function viewLearningDashboard() {
|
|
|
1588
1736
|
['Accuracy', answered ? pct(passed, answered) + '%' : '—', answered ? `${passed} right of ${answered}` : 'No assessments yet', answered && pct(passed, answered) >= 70 ? 'good' : '', LH('sessions')],
|
|
1589
1737
|
['Mastered', mastered.length, `of ${seen.length} asked`, mastered.length ? 'good' : '', LH('concepts', 'mastered')],
|
|
1590
1738
|
['Due now', due.length, due.length ? 'ready for review' : 'nothing waiting', due.length ? 'warn' : '', LH('review')],
|
|
1591
|
-
['Streak', st.current ? plural(st.current, 'day') : '—', st.best ? `best ${plural(st.best, 'day')}` : 'no answers yet'],
|
|
1592
1739
|
]),
|
|
1593
1740
|
|
|
1594
1741
|
next,
|
|
1595
1742
|
|
|
1743
|
+
streakCard(daily, st),
|
|
1744
|
+
|
|
1596
1745
|
card('Answers, last 30 days', null,
|
|
1597
1746
|
`<div class="legend">
|
|
1598
1747
|
<span><b style="background:var(--spot)"></b>Right</span>
|
|
@@ -1628,10 +1777,6 @@ function viewLearningDashboard() {
|
|
|
1628
1777
|
{ label:'Learning', n:seen.length - mastered.length, color:'color-mix(in srgb, var(--spot) 45%, var(--mass))' },
|
|
1629
1778
|
{ label:'Not asked', n:Math.max(0, scoped.length - seen.length), color:'var(--mass)' },
|
|
1630
1779
|
])),
|
|
1631
|
-
|
|
1632
|
-
fold('learn:heat', 'Practice history', plural(st.days, 'active day'),
|
|
1633
|
-
`<div class="heat"><svg id="c-heat" role="img" aria-label="Calendar heatmap of daily answers"></svg></div>`,
|
|
1634
|
-
{ hint: 'One cell per day, up to a year back. Darker means more answered that day.' }),
|
|
1635
1780
|
].join('');
|
|
1636
1781
|
}
|
|
1637
1782
|
|
|
@@ -1748,6 +1893,8 @@ function viewConcept(slug) {
|
|
|
1748
1893
|
['Next review', c.owed ? whenDue(c.next_review) : '—', c.interval_d ? `every ${Math.round(c.interval_d)}d · ease ${c.ease ? c.ease.toFixed(2) : '—'} · ${plural(c.reps, 'rep')}` : 'not scheduled', c.due ? 'warn' : ''],
|
|
1749
1894
|
]),
|
|
1750
1895
|
|
|
1896
|
+
startBlocks('This one is due', startCommand([c])),
|
|
1897
|
+
|
|
1751
1898
|
card('Every question you were asked', atts.length ? `${plural(atts.length, 'attempt')}, newest first. Open one for the options and the feedback.` : '',
|
|
1752
1899
|
atts.length ? history + pager('concept', atts.length, p, PER_Q)
|
|
1753
1900
|
: '<p class="empty">Not asked yet. It will come up when your work touches it.</p>'),
|
|
@@ -1790,12 +1937,12 @@ function viewReview(param) {
|
|
|
1790
1937
|
// sees.
|
|
1791
1938
|
const buckets = [{ label:'Overdue', short:'late', n:due.length, overdue:true }];
|
|
1792
1939
|
for (let i = 0; i < 14; i++) {
|
|
1793
|
-
const d =
|
|
1940
|
+
const d = fromKey(todayKey()); d.setUTCDate(d.getUTCDate() + i);
|
|
1794
1941
|
const k = dayKey(d);
|
|
1795
1942
|
buckets.push({
|
|
1796
1943
|
label: i === 0 ? 'Today' : fmtDay(k),
|
|
1797
1944
|
short: i === 0 ? 'today' : String(fromKey(k).getUTCDate()),
|
|
1798
|
-
n: upcoming.filter((c) =>
|
|
1945
|
+
n: upcoming.filter((c) => localKey(parse(c.next_review)) === k).length,
|
|
1799
1946
|
overdue: false,
|
|
1800
1947
|
});
|
|
1801
1948
|
}
|
|
@@ -1830,9 +1977,7 @@ function viewReview(param) {
|
|
|
1830
1977
|
ease. A score decays about 5% a week while a review is overdue, so this list is also the list of
|
|
1831
1978
|
things quietly getting weaker. A skipped question comes back a tier lower.`),
|
|
1832
1979
|
|
|
1833
|
-
due
|
|
1834
|
-
? nextStep(`<strong>${plural(due.length, 'concept')} waiting.</strong> Run <code>/eklavya:quiz</code> in Claude Code to work through them.`)
|
|
1835
|
-
: '',
|
|
1980
|
+
startBlocks('Start your reviews', startCommand(due, PROJECT)),
|
|
1836
1981
|
|
|
1837
1982
|
card('The next fortnight', null,
|
|
1838
1983
|
`<div class="chart"><svg id="c-forecast" role="img" aria-label="Scheduled reviews for the next fourteen days"></svg></div>`),
|
|
@@ -4114,6 +4259,7 @@ function render(keepFocus) {
|
|
|
4114
4259
|
|
|
4115
4260
|
AFTER.length = 0;
|
|
4116
4261
|
LAZY.clear();
|
|
4262
|
+
HEAT_OFF = 0;
|
|
4117
4263
|
// A bubble never survives a navigation.
|
|
4118
4264
|
TIP.hints?.close();
|
|
4119
4265
|
// A screen that still has a correction open re-arms this when it draws its bar.
|
|
@@ -4157,6 +4303,15 @@ function setQuery(changes) {
|
|
|
4157
4303
|
}
|
|
4158
4304
|
|
|
4159
4305
|
function onActivate(e) {
|
|
4306
|
+
const copy = e.target.closest('[data-copy]');
|
|
4307
|
+
if (copy) return copyCommand(copy);
|
|
4308
|
+
const arr = e.target.closest('.streak__arr');
|
|
4309
|
+
if (arr) {
|
|
4310
|
+
if (arr.disabled) return;
|
|
4311
|
+
HEAT_OFF = Math.max(0, HEAT_OFF + (arr.id === 'heat-prev' ? 1 : -1) * +arr.dataset.weeks);
|
|
4312
|
+
const st = streaks(dailyInScope());
|
|
4313
|
+
return chartHeatmap($('c-heat'), dailyInScope(), st.run);
|
|
4314
|
+
}
|
|
4160
4315
|
const pg = e.target.closest('[data-page]');
|
|
4161
4316
|
if (pg && !pg.disabled) { T[pg.dataset.pager].page = +pg.dataset.page; render(); return; }
|
|
4162
4317
|
// The filter and the tab live in the hash, so a filtered list is a link the
|
package/dist/dashboard.js
CHANGED
|
@@ -629,7 +629,7 @@ export function dashboardState(db) {
|
|
|
629
629
|
// One row per calendar day per project, split three ways. `grade >= 3` is the
|
|
630
630
|
// same pass line the level ladder uses, so the chart and the promotion agree.
|
|
631
631
|
const daily = db
|
|
632
|
-
.prepare(`SELECT date(a.ts) AS day,
|
|
632
|
+
.prepare(`SELECT date(a.ts, 'localtime') AS day,
|
|
633
633
|
NULLIF(trim(COALESCE(a.repo, '')), '') AS repo,
|
|
634
634
|
sum(CASE WHEN a.grade >= ? THEN 1 ELSE 0 END) AS passed,
|
|
635
635
|
sum(CASE WHEN a.grade < ? AND (a.outcome IS NULL OR a.outcome = 'answered') AND fix.id IS NULL THEN 1 ELSE 0 END) AS missed,
|
|
@@ -807,7 +807,7 @@ export function dashboardState(db) {
|
|
|
807
807
|
sum(CASE WHEN a.grade < ? AND (a.outcome IS NULL OR a.outcome = 'answered') AND fix.id IS NULL THEN 1 ELSE 0 END) AS missed,
|
|
808
808
|
sum(CASE WHEN a.outcome IN ('declined','dont_know') AND fix.id IS NULL THEN 1 ELSE 0 END) AS skipped,
|
|
809
809
|
count(fix.id) AS corrected,
|
|
810
|
-
count(DISTINCT date(a.ts)) AS active_days,
|
|
810
|
+
count(DISTINCT date(a.ts, 'localtime')) AS active_days,
|
|
811
811
|
min(a.ts) AS first_answer
|
|
812
812
|
FROM attempts a LEFT JOIN attempts fix ON fix.retry_of = a.id
|
|
813
813
|
WHERE a.${NOT_CORRECTION}`)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eklavya",
|
|
3
3
|
"displayName": "Eklavya",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.50.0",
|
|
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"
|
|
@@ -45,7 +45,7 @@ export const getSessionQuizPlan = {
|
|
|
45
45
|
.string()
|
|
46
46
|
.max(LIMITS.domain)
|
|
47
47
|
.optional()
|
|
48
|
-
.describe('Plan a topic quiz on this domain instead of this session\'s work, e.g. "web-auth". Prerequisites are ordered first.'),
|
|
48
|
+
.describe('Plan a topic quiz on this domain instead of this session\'s work, e.g. "web-auth". Prerequisites are ordered first. When no domain has this name and every word in it is a concept slug ("csrf jwt-structure"), it plans those concepts as slugs would.'),
|
|
49
49
|
slugs: z
|
|
50
50
|
.array(z.string().max(LIMITS.slug))
|
|
51
51
|
.max(LIMITS.concepts)
|
|
@@ -82,6 +82,19 @@ export const getSessionQuizPlan = {
|
|
|
82
82
|
// stored slug exactly, so "HttpOnly Cookies" found nothing and the plan came
|
|
83
83
|
// back empty for a concept that exists.
|
|
84
84
|
let effSlugs = args.slugs?.map(normalizeSlug).filter(Boolean);
|
|
85
|
+
// `/eklavya:quiz csrf jwt-structure` reaches here as a domain whenever the
|
|
86
|
+
// model reads the argument as one, and a domain named after a concept
|
|
87
|
+
// matches nothing. When no domain has that name and every word is an
|
|
88
|
+
// existing slug, those concepts are what was asked for. Exact slugs only:
|
|
89
|
+
// a word that is not one means it was not a slug list, so no guessing.
|
|
90
|
+
if (effDomain && !db.prepare('SELECT 1 FROM concepts WHERE domain = ?').get(effDomain)) {
|
|
91
|
+
const words = effDomain.split(/[\s,]+/).map(normalizeSlug).filter(Boolean);
|
|
92
|
+
const known = db.prepare('SELECT 1 FROM concepts WHERE slug = ?');
|
|
93
|
+
if (words.length && words.every((w) => known.get(w))) {
|
|
94
|
+
effSlugs = [...(effSlugs ?? []), ...words];
|
|
95
|
+
effDomain = undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
85
98
|
let topicUnresolved = false;
|
|
86
99
|
const explicitTopic = Boolean(args.domain || (effSlugs && effSlugs.length > 0));
|
|
87
100
|
// The cadence decides how big a plan is allowed to be, and this is the only
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_session_quiz_plan.js","sourceRoot":"","sources":["../../src/tools/get_session_quiz_plan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"get_session_quiz_plan.js","sourceRoot":"","sources":["../../src/tools/get_session_quiz_plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -309,7 +309,7 @@ project; the ids are the ones `/api/projects` lists.
|
|
|
309
309
|
|---|---|
|
|
310
310
|
| how am I doing, streaks, activity | `/#/learning/dashboard` |
|
|
311
311
|
| what am I learning, search a concept | `/#/learning/concepts` (or `/#/learning/concepts/due`, `/mastered`, `/unseen`), `/#/learning/concept/<slug>` for one |
|
|
312
|
-
| what is due, what is scheduled, what I skipped | `/#/learning/review`, `/#/learning/review/upcoming`, `/#/learning/review/skipped` |
|
|
312
|
+
| what is due, how to start my reviews, what is scheduled, what I skipped | `/#/learning/review`, `/#/learning/review/upcoming`, `/#/learning/review/skipped` |
|
|
313
313
|
| what did that session teach me | `/#/learning/sessions`, `/#/learning/session/<id>` |
|
|
314
314
|
| how hard is this repo allowed to get, which projects have no answers yet | `/#/learning/projects` |
|
|
315
315
|
| where are the gaps | `/#/learning/domains` |
|
package/package.json
CHANGED