eklavya 1.61.1 → 1.62.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.
@@ -115,11 +115,16 @@ The reasoning behind each option goes in `option_notes` when you record the
115
115
  attempt (the card path) and in the panel's `explanation` (the panel path), both
116
116
  shown only after the answer.
117
117
 
118
- **5. Placement.** The plan gives each question an `answer_position`, 1 to 4. Put
119
- the correct option in that slot. Left to your own judgement you will put the
120
- right answer first nearly every time, and a learner needs only a handful of
121
- questions to notice that and start picking A without reading; the quiz keeps
122
- looking fine and stops measuring anything.
118
+ **5. Placement.** The plan gives each question an `answer_position`, 1 to 4.
119
+ **Put the correct option in exactly that slot** — slot 4 means the fourth option
120
+ in the list, not the first. Do this mechanically: write the three distractors,
121
+ then insert the key at index `answer_position`. Before sending, re-read the list
122
+ and check the key is in that slot and that `correct` matches it. Left to your
123
+ own judgement you will put the right answer first nearly every time, and a
124
+ learner needs only a handful of questions to notice that and start picking A
125
+ without reading; the quiz keeps looking fine and stops measuring anything. A
126
+ question whose key is in the wrong slot is a failed question however good the
127
+ rest is.
123
128
 
124
129
  **6. `header`.** Set it to `Eklavya`, and then **do what the plan's
125
130
  `ask_attribution` says** — it is the rule for the host you are actually running
@@ -168,7 +173,7 @@ telling you which part to rebuild.
168
173
  no description says why an option is right, wrong or tempting.
169
174
  - Each of the three wrong options came from a different row of the table above.
170
175
  - Only the correct option answers the stem; no expert could argue for another.
171
- - The correct option sits at `answer_position`.
176
+ - The correct option sits at `answer_position`, and `correct` names it.
172
177
  - The tool renders the labels, so the stem does not number them.
173
178
  - The stem is the question and nothing else — the dials are in the developer's
174
179
  status bar.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eklavya",
3
3
  "displayName": "Eklavya",
4
- "version": "1.61.1",
4
+ "version": "1.62.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"
@@ -148,6 +148,10 @@ export const STR = {
148
148
  nothingTyped: 'Write your answer first, or pick one of the options.',
149
149
  graderFailed: "We couldn't check that answer. Your text is saved here — Retry.",
150
150
  explainer: 'A page explaining this is being written.',
151
+ /** What the transcript draws for the mod's own queued prompts; the model still reads the full text. */
152
+ askedNext: 'Eklavya: next quiz question',
153
+ askedExplainer: 'Eklavya: write an explainer page for the missed question',
154
+ askedOther: 'Eklavya: a note for Claude',
151
155
  focus: 'Ctrl+X then Tab moves the keys here.',
152
156
  keys: '1–4 pick · o other · s submit · k skip · Esc back to prompt',
153
157
  keysApp: '1–4 pick · o other · s submit · k skip',
@@ -345,6 +345,17 @@ export const register: Register = on => {
345
345
  }
346
346
  })
347
347
 
348
+ // The mod's queued prompts are instructions for the model, not words for the
349
+ // learner: their transcript row shows one short line, as a tool call does.
350
+ // Only the drawing changes; the model still reads the whole message.
351
+ on('ui.render', { component: 'UserMessage' }, async ($, e, next) => {
352
+ const from = e.props.origin
353
+ if (from.kind !== 'plugin' || from.name !== 'eklavya') return next(e)
354
+ const said = e.props.text
355
+ const text = said === NEXT_PROMPT ? STR.askedNext : said.includes('eklavya-explainer') ? STR.askedExplainer : STR.askedOther
356
+ return next({ ...e, props: { ...e.props, text } })
357
+ })
358
+
348
359
  on('ui.render', { component: 'Pane', requestId: 'eklavya-quiz' }, async ($, e, next) => {
349
360
  // Only our pane: every other pane, and everything else, is the host's.
350
361
  if (e.requestId !== PANE) return next(e)
@@ -115,11 +115,16 @@ The reasoning behind each option goes in `option_notes` when you record the
115
115
  attempt (the card path) and in the panel's `explanation` (the panel path), both
116
116
  shown only after the answer.
117
117
 
118
- **5. Placement.** The plan gives each question an `answer_position`, 1 to 4. Put
119
- the correct option in that slot. Left to your own judgement you will put the
120
- right answer first nearly every time, and a learner needs only a handful of
121
- questions to notice that and start picking A without reading; the quiz keeps
122
- looking fine and stops measuring anything.
118
+ **5. Placement.** The plan gives each question an `answer_position`, 1 to 4.
119
+ **Put the correct option in exactly that slot** — slot 4 means the fourth option
120
+ in the list, not the first. Do this mechanically: write the three distractors,
121
+ then insert the key at index `answer_position`. Before sending, re-read the list
122
+ and check the key is in that slot and that `correct` matches it. Left to your
123
+ own judgement you will put the right answer first nearly every time, and a
124
+ learner needs only a handful of questions to notice that and start picking A
125
+ without reading; the quiz keeps looking fine and stops measuring anything. A
126
+ question whose key is in the wrong slot is a failed question however good the
127
+ rest is.
123
128
 
124
129
  **6. `header`.** Set it to `Eklavya`, and then **do what the plan's
125
130
  `ask_attribution` says** — it is the rule for the host you are actually running
@@ -168,7 +173,7 @@ telling you which part to rebuild.
168
173
  no description says why an option is right, wrong or tempting.
169
174
  - Each of the three wrong options came from a different row of the table above.
170
175
  - Only the correct option answers the stem; no expert could argue for another.
171
- - The correct option sits at `answer_position`.
176
+ - The correct option sits at `answer_position`, and `correct` names it.
172
177
  - The tool renders the labels, so the stem does not number them.
173
178
  - The stem is the question and nothing else — the dials are in the developer's
174
179
  status bar.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eklavya",
3
- "version": "1.61.1",
3
+ "version": "1.62.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": {