eklavya 1.69.4 → 1.69.5

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eklavya",
3
3
  "displayName": "Eklavya",
4
- "version": "1.69.4",
4
+ "version": "1.69.5",
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"
@@ -20,6 +20,8 @@ export const TIER: Record<number, string> = { 1: 'recall', 2: 'mechanism', 3: 'j
20
20
 
21
21
  /** Brand verdigris (`--vd-300`): the selected card's border and the name. */
22
22
  export const BRAND = '#79D5C4'
23
+ /** The fill and text of the picked answer: set together so the contrast holds in a light or a dark theme. */
24
+ export const PICKED = { bg: '#1E5A52', text: '#FFFFFF', note: '#C9E8E3' }
23
25
 
24
26
  /**
25
27
  * The logo: the Claude mascot (orange) holding an Eklavya bow and arrow (white), drawn on a
@@ -3,6 +3,7 @@ import type { EngineInterface, Register } from 'claude-code'
3
3
 
4
4
  import {
5
5
  BRAND,
6
+ PICKED,
6
7
  EMPTY,
7
8
  EXPLAINER,
8
9
  NEXT_PROMPT,
@@ -419,6 +420,7 @@ export const register: Register = on => {
419
420
  // One answer: a bordered block. The Button holds the whole answer text, so a press anywhere on it
420
421
  // selects; the border and a tick show the pick, and nothing implies it is right. The desktop app gives
421
422
  // the text more room inside the border; the terminal keeps its tight cards.
423
+ // Other is never filled: the learner types inside it, in the host's own text colour, which a fixed fill could hide.
422
424
  const card = (id: string, selected: boolean, button: unknown, body: unknown[], roomy = false) => (
423
425
  <Box
424
426
  key={`card-${id}`}
@@ -426,8 +428,9 @@ export const register: Register = on => {
426
428
  paddingX={app ? 2 : 1}
427
429
  paddingY={app || roomy ? 1 : 0}
428
430
  gap={roomy ? 1 : 0}
429
- borderStyle="single"
431
+ borderStyle={selected ? 'bold' : 'single'}
430
432
  borderColor={selected ? BRAND : 'inactive'}
433
+ backgroundColor={selected && id !== 'other' ? PICKED.bg : undefined}
431
434
  >
432
435
  {button}
433
436
  {body}
@@ -480,29 +483,33 @@ export const register: Register = on => {
480
483
  const locked = s.step === 'grading'
481
484
  // Submit looks disabled until there is something to send; pressing it then does nothing.
482
485
  const hasDraft = s.draft.other ? s.draft.text.trim().length > 0 : s.draft.picked !== null
483
- // Markdown marks cannot show inside a Button's label, so the code and bold marks are dropped there; the note keeps them.
484
- const answer = (id: string, key: string, hotkey: string, label: string, chosen: boolean) => (
486
+ // The answer and its note are the Button's own inline Text, so a press anywhere on them selects.
487
+ // Markdown marks cannot show inside a Button, so the code and bold marks are dropped from both.
488
+ const answer = (id: string, key: string, hotkey: string, label: string, chosen: boolean, note?: string) => (
485
489
  <Button
486
490
  key={key}
487
491
  plain
488
492
  hotkey={hotkey}
489
- label={`${chosen ? '✓ ' : ''}${label}`}
493
+ label={label}
490
494
  onPress={() => (locked ? undefined : id === 'other' ? chooseOther($) : pick($, id))}
491
- />
495
+ >
496
+ <Text bold={chosen} color={chosen && id !== 'other' ? PICKED.text : undefined}>{`${chosen ? '✓ ' : ''}${label}`}</Text>
497
+ {note ? <Text dimColor={!chosen} color={chosen ? PICKED.note : undefined}>{`\n ${note}`}</Text> : null}
498
+ </Button>
492
499
  )
493
500
  const options = q.options.map((o, i) => {
494
501
  const chosen = !s.draft.other && s.draft.picked === o.id
495
502
  return card(
496
503
  o.id,
497
504
  chosen,
498
- answer(o.id, `opt-${o.id}`, String(i + 1), plainLabel(o.label), chosen),
499
- [o.note ? <Box key={`note-${o.id}`} paddingLeft={3}><Markdown text={codify(o.note)} dimColor /></Box> : null],
505
+ answer(o.id, `opt-${o.id}`, String(i + 1), plainLabel(o.label), chosen, o.note ? plainLabel(o.note) : undefined),
506
+ [],
500
507
  )
501
508
  })
502
509
 
503
510
  return frame(
504
511
  stem,
505
- <Box flexDirection="column" gap={app ? 1 : 0}>
512
+ <Box flexDirection="column" gap={app ? 2 : 0}>
506
513
  {options}
507
514
  {card(
508
515
  'other',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eklavya",
3
- "version": "1.69.4",
3
+ "version": "1.69.5",
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": {