eklavya 1.52.1 → 1.52.3
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 +1 -1
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/agents/explainer.md +3 -1
- package/dist/plugin/hooks/panel/model.ts +34 -0
- package/dist/plugin/hooks/panel/register.tsx +9 -3
- package/dist/plugin/skills/quiz/SKILL.md +5 -5
- package/dist/tools/record_attempt.js +7 -3
- package/dist/tools/record_attempt.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ level.
|
|
|
72
72
|
right one, 2 for a near miss, 1 for a misconception), the right one in the
|
|
73
73
|
plan's `answer_position` slot, and an explanation. It stores the question and
|
|
74
74
|
returns at once; it writes no attempt. The panel records the answer through
|
|
75
|
-
`panel_answer` with the same code `record_attempt` uses, exactly once. `present_question` returns `panel_disabled` while `quiz.panel` is off, and
|
|
75
|
+
`panel_answer` with the same code `record_attempt` uses, exactly once. On a miss with `explain_on_wrong` on, its reply carries the same `explain` block `record_attempt` returns, and the panel starts the explainer agent from it. `present_question` returns `panel_disabled` while `quiz.panel` is off, and
|
|
76
76
|
`panel_sync` returns `{disabled: true}` and expires the session's open question without recording an attempt, so turning the panel back on cannot revive it; `panel_answer` answers only a question
|
|
77
77
|
that already exists. A round the learner asked for (a topic, `max`) is remembered per session: `present_question` takes each question off it and sets the last one's `more` false, and `get_session_quiz_plan` with `resume_round: true` plans what is left. This is
|
|
78
78
|
a Claude Code mod feature: a standalone MCP client has the tools but not the
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eklavya",
|
|
3
3
|
"displayName": "Eklavya",
|
|
4
|
-
"version": "1.52.
|
|
4
|
+
"version": "1.52.3",
|
|
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"
|
|
@@ -46,7 +46,9 @@ In this order, each under its own `<h2>`:
|
|
|
46
46
|
signal. Under each option's text, its note as `<span class="note">…</span>`
|
|
47
47
|
when you were handed one, so the page reads like the question did. With no
|
|
48
48
|
options (a typed answer), show the stem, their answer and the right answer in
|
|
49
|
-
the same list.
|
|
49
|
+
the same list. When they typed their own answer although options were
|
|
50
|
+
offered, list every option, then their words as one more item with
|
|
51
|
+
`class="picked"`. Skip this section for a page someone asked for.
|
|
50
52
|
- **The short answer.** Two or three sentences a newcomer could repeat: what the
|
|
51
53
|
thing *does*, before what it is called.
|
|
52
54
|
- **Where the answer went wrong.** Name the misconception in the answer given
|
|
@@ -44,6 +44,40 @@ export const STR = {
|
|
|
44
44
|
off: 'The quiz panel is off. Turn it on with: eklavya config set quiz.panel true',
|
|
45
45
|
} as const
|
|
46
46
|
|
|
47
|
+
/** The explainer agent the panel starts itself, so no prompt lands in the transcript. */
|
|
48
|
+
export const EXPLAINER = 'eklavya:eklavya-explainer'
|
|
49
|
+
|
|
50
|
+
/** What `panel_answer`'s explain block carries; `record_attempt` builds it. */
|
|
51
|
+
export type ExplainBlock = {
|
|
52
|
+
concept: string
|
|
53
|
+
name: string
|
|
54
|
+
question: string
|
|
55
|
+
options: string[] | null
|
|
56
|
+
option_notes: (string | null)[] | null
|
|
57
|
+
answer: string | null
|
|
58
|
+
correct: string | null
|
|
59
|
+
attempt_id: number
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** The explainer's task, written from the explain block alone: nothing else saw the question. */
|
|
63
|
+
export function explainerBrief(x: ExplainBlock): string {
|
|
64
|
+
const options = (x.options ?? []).map((o, i) => {
|
|
65
|
+
const note = x.option_notes?.[i]
|
|
66
|
+
return `${String.fromCharCode(65 + i)}. ${o}${note ? ` (note: ${note})` : ''}`
|
|
67
|
+
})
|
|
68
|
+
return [
|
|
69
|
+
`Write an explainer page on ${x.name} (concept slug ${x.concept}) for a question the learner missed.`,
|
|
70
|
+
`Question: ${x.question}`,
|
|
71
|
+
...(options.length ? ['Options, in order:', ...options] : []),
|
|
72
|
+
// Words typed under Other match no option, so say so; the page lists them as their own item.
|
|
73
|
+
x.answer && options.length && !x.options!.includes(x.answer)
|
|
74
|
+
? `The learner typed their own answer instead of picking: ${x.answer}`
|
|
75
|
+
: `The learner answered: ${x.answer ?? '(no answer)'}`,
|
|
76
|
+
...(x.correct ? [`The right answer: ${x.correct}`] : []),
|
|
77
|
+
`Pass --attempt ${x.attempt_id} to eklavya artifacts new.`,
|
|
78
|
+
].join('\n')
|
|
79
|
+
}
|
|
80
|
+
|
|
47
81
|
export const answerWas = (label: string): string => `The answer was: ${label}`
|
|
48
82
|
export const unplacedNotice = (): string => `A question is waiting. ${REOPEN} to open it.`
|
|
49
83
|
export const levelLine = (level: string, project: string): string => `You've cleared ${level} on ${project}.`
|
|
@@ -3,11 +3,13 @@ import type { EngineInterface, Register } from 'claude-code'
|
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
EMPTY,
|
|
6
|
+
EXPLAINER,
|
|
6
7
|
NEXT_PROMPT,
|
|
7
8
|
PANE,
|
|
8
9
|
REOPEN,
|
|
9
10
|
STR,
|
|
10
11
|
answerWas,
|
|
12
|
+
explainerBrief,
|
|
11
13
|
gradingRequest,
|
|
12
14
|
levelLine,
|
|
13
15
|
parseVerdict,
|
|
@@ -217,11 +219,15 @@ async function submit($: EngineInterface, wanted: PanelPending | null): Promise<
|
|
|
217
219
|
message: null,
|
|
218
220
|
}))
|
|
219
221
|
|
|
220
|
-
// A miss with explain_on_wrong on: the
|
|
221
|
-
//
|
|
222
|
+
// A miss with explain_on_wrong on: the panel starts the explainer itself in
|
|
223
|
+
// the background, so no prompt shows in the transcript and nothing waits.
|
|
224
|
+
// A refused spawn falls back to the queued prompt the model acts on.
|
|
222
225
|
if (out.explain?.instruction && explainedAttempt !== out.attempt_id) {
|
|
223
226
|
explainedAttempt = out.attempt_id
|
|
224
|
-
|
|
227
|
+
const spawned = await $.agent
|
|
228
|
+
.spawn({ subagentType: EXPLAINER, description: 'Eklavya explainer', prompt: explainerBrief(out.explain) })
|
|
229
|
+
.catch(() => null)
|
|
230
|
+
if (!spawned || spawned.deny) await $.prompt.submit({ text: String(out.explain.instruction) })
|
|
225
231
|
}
|
|
226
232
|
} catch {
|
|
227
233
|
if (epoch === mine) await fail($, STR.unreachable)
|
|
@@ -10,10 +10,10 @@ Quiz the developer now. Follow the `tutor` skill for how to ask and grade — th
|
|
|
10
10
|
|
|
11
11
|
The developer asked for this, so always pass `ignore_cooldown: true`. The quiz cadence exists to stop Eklavya nagging; it must never refuse a request.
|
|
12
12
|
|
|
13
|
-
**Topic given** (`$ARGUMENTS` is non-empty):
|
|
14
|
-
1. `get_learner_profile` with
|
|
15
|
-
2. `get_session_quiz_plan` with `domain: "<topic>"`
|
|
16
|
-
3. If the topic
|
|
13
|
+
**Topic given** (`$ARGUMENTS` is non-empty): decide between a domain and concept slugs from the profile, not by guessing.
|
|
14
|
+
1. `get_learner_profile` with no `domain`. Its `domains` list names every domain there is; `known` is the list you must not ask about.
|
|
15
|
+
2. If the topic exactly names one of those domains, `get_session_quiz_plan` with `domain: "<topic>"`. Otherwise pass every kebab-case word as a concept slug: `/eklavya:quiz csrf jwt-structure` is `slugs: ["csrf", "jwt-structure"]`. Either way pass `ignore_cooldown: true`. The plan already drops what they have mastered, orders prerequisites first, sets each `tier_to_ask`, and hands you `asked_before` so nothing repeats.
|
|
16
|
+
3. If that plan is empty and the topic was not a domain, nothing by that name is due: the concept is unknown, or already mastered and not due. Say that in one line, offer the closest domain from step 1's list, and name `/eklavya:learn <topic>` for a lesson that adds new concepts. A quiz never mints concepts: do not call `upsert_concepts`, do not offer to build concepts from this repository, and do not invent questions.
|
|
17
17
|
|
|
18
18
|
**No topic**: quiz this session's work.
|
|
19
19
|
1. `get_learner_profile`.
|
|
@@ -21,7 +21,7 @@ The developer asked for this, so always pass `ignore_cooldown: true`. The quiz c
|
|
|
21
21
|
3. If `questions_needed` is 0, say why in one line and stop. The `reason` tells you which:
|
|
22
22
|
- `already_covered` → "Everything from this session has already been asked about. `/eklavya:quiz <topic>` to go wider."
|
|
23
23
|
- `nothing_logged` → "Nothing logged this session yet, so there's nothing grounded to ask about."
|
|
24
|
-
- `no_candidates` (topic mode) →
|
|
24
|
+
- `no_candidates` (topic mode) → for a domain, it is fully mastered and nothing is due; name the closest domain that is not. For slugs, follow step 3 of the topic branch.
|
|
25
25
|
- `quiz_disabled` → "Questions are off for this project. Memory is still recording — `/eklavya:mode` turns the questions back on." Do not say "Eklavya is off": it is not, and saying so is what sent people hunting for a bug that was a setting.
|
|
26
26
|
- `session_off` → they silenced the questions for this session, and then asked for a quiz. Say so and offer the one step back: "Questions are off for this session — say the word and I'll turn them back on." Turn them back on with `set_config`, `scope: "session"`, `quiz: { enabled: true }` if they agree, then run the quiz.
|
|
27
27
|
- `panel_question_open` → a question is already waiting in the side panel: "There's already a question waiting in the panel — answer it there." Ask nothing else.
|
|
@@ -11,7 +11,7 @@ import { CWD_HINT, LIMITS, SESSION_HINT } from './types.js';
|
|
|
11
11
|
* contract: the grade and the one-line verdict are already given, the page is
|
|
12
12
|
* written by a background agent, and the session goes back to the work.
|
|
13
13
|
*/
|
|
14
|
-
export function explainInstruction(name, options, attemptId, notes) {
|
|
14
|
+
export function explainInstruction(name, options, attemptId, notes, answer = null, correct = null) {
|
|
15
15
|
// The tutor relays this in its own words, and a paraphrase kept only the
|
|
16
16
|
// picked and right options. Spelling them out makes the full list the thing
|
|
17
17
|
// it copies.
|
|
@@ -21,10 +21,14 @@ export function explainInstruction(name, options, attemptId, notes) {
|
|
|
21
21
|
// The note under each option is what the learner read in the question; the
|
|
22
22
|
// page shows it too, so the two look alike.
|
|
23
23
|
const noteLine = notes?.length ? ' Hand it the one-line note under each option as well, so the page shows each note under its option.' : '';
|
|
24
|
+
// The panel takes the answer itself, so the agent reading this never saw the
|
|
25
|
+
// pick; without it spelled out the page cannot mark the learner's option.
|
|
26
|
+
const picked = answer ? ` The learner answered: ${answer}.` : '';
|
|
27
|
+
const right = correct ? ` The right answer is: ${correct}.` : '';
|
|
24
28
|
// The attempt id links the page to this row, which is what lets the
|
|
25
29
|
// dashboard offer "Correct your answer" on it.
|
|
26
30
|
const link = ` Tell it to pass --attempt ${attemptId} to eklavya artifacts new.`;
|
|
27
|
-
return `Do not wait for this and do not explain further here. Start the eklavya-explainer agent (eklavya:eklavya-explainer when Eklavya is installed as a plugin) in the background, handing it the concept slug, the question, every option offered, the learner's answer and the right answer, so the page can show the question as it was asked.${list}${noteLine}${link} It writes an explainer page on ${name} and opens it. Tell the learner in one line that they missed it, what the right answer is, and that a page on it is on its way, then carry on with the task.`;
|
|
31
|
+
return `Do not wait for this and do not explain further here. Start the eklavya-explainer agent (eklavya:eklavya-explainer when Eklavya is installed as a plugin) in the background, handing it the concept slug, the question, every option offered, the learner's answer and the right answer, so the page can show the question as it was asked.${list}${picked}${right}${noteLine}${link} It writes an explainer page on ${name} and opens it. Tell the learner in one line that they missed it, what the right answer is, and that a page on it is on its way, then carry on with the task.`;
|
|
28
32
|
}
|
|
29
33
|
export const recordAttempt = {
|
|
30
34
|
name: 'record_attempt',
|
|
@@ -197,7 +201,7 @@ export function recordAttemptCore(db, args) {
|
|
|
197
201
|
answer: args.answer ?? null,
|
|
198
202
|
correct,
|
|
199
203
|
attempt_id: state.attemptId,
|
|
200
|
-
instruction: explainInstruction(concept.name, options, state.attemptId, optionNotes),
|
|
204
|
+
instruction: explainInstruction(concept.name, options, state.attemptId, optionNotes, args.answer ?? null, correct),
|
|
201
205
|
}
|
|
202
206
|
: null;
|
|
203
207
|
const after = levelStanding(db, config, repoRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record_attempt.js","sourceRoot":"","sources":["../../src/tools/record_attempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,aAAa,EACb,aAAa,GAGd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAC;AAE1E;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,OAAwB,EACxB,SAAiB,EACjB,KAAsB;
|
|
1
|
+
{"version":3,"file":"record_attempt.js","sourceRoot":"","sources":["../../src/tools/record_attempt.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED