eklavya 1.18.0 → 1.18.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.
@@ -66,7 +66,9 @@ to, no re-plan, no "shall I continue?", no second question. A checkpoint that
66
66
  becomes a tutorial is the interruption it existed to replace.
67
67
 
68
68
  **The Stop sweep** — a longer end-of-task message naming the concepts. Run the
69
- quiz, then finish your turn normally. It fires at most once per batch of work.
69
+ quiz, then finish your turn normally. Under `interleaved` it can fire more than
70
+ once in a long session — it is paced by the clock, not by the batch — so treat
71
+ each one as its own single question, not as a sign you missed the last one.
70
72
 
71
73
  **How many questions is not your call — it is the plan's.** Under `interleaved`
72
74
  the plan returns one item, the sweep included. Under `end`, and in enforced mode
@@ -77,7 +79,10 @@ and you ask those one at a time.
77
79
  checkpoint answered is one the sweep no longer asks, so a session that
78
80
  checkpointed through the budget ends in silence. That is intended — do not top it
79
81
  up because the ending felt quiet. What the budget never reached stays unmastered
80
- and comes back as review.
82
+ and comes back in a later plan with `reason: "backlog"`, once that session's own
83
+ concepts and review debt are covered, from the domains that session touches, and
84
+ never in `enforced` mode. It is not spaced repetition that brings it
85
+ back — that only schedules concepts already answered once.
81
86
 
82
87
  `questions_needed: 0` means say nothing and carry on; `reason` says why.
83
88
 
@@ -41,6 +41,16 @@ the task did not touch directly. They are the ideas the diff is an instance of,
41
41
  and they arrive with **`context: null` on purpose** — the code is withheld so
42
42
  you reach for the idea instead. Ask about them on their own terms.
43
43
 
44
+ Items with `reason: "backlog"` are older work — a concept an earlier session
45
+ logged that no question ever reached, offered once this session's own concepts
46
+ and review debt are covered, and only from the domains this session touched --
47
+ there is one database for every project, so the scope is what keeps a Flutter
48
+ session off last month's Terraform. Never in `enforced` mode: a backlog answer
49
+ cannot open a commit gate, so offering one there would only spend the budget the
50
+ gate needs. They also arrive with `context: null`, and for a
51
+ blunter reason: the code that taught them is not on screen and may not even be
52
+ on this branch. Ask about the concept, never about the diff.
53
+
44
54
  Items the session *did* touch keep their `context` even in this focus. That is
45
55
  not an inconsistency: the code is still the motivation, and the transferable
46
56
  question is easier to write well when you can see what prompted it. Read
@@ -14,16 +14,25 @@
14
14
  *
15
15
  * THE LOOP GUARD IS THE POINT OF THIS FILE.
16
16
  * `stop_hook_active` is no longer a documented input (deviation D2), so nothing
17
- * here may depend on the harness noticing we already blocked. The rule that keeps
18
- * this finite:
17
+ * here may depend on the harness noticing we already blocked. What keeps this
18
+ * finite depends on the cadence, because the two cadences block for different
19
+ * reasons:
19
20
  *
20
- * block only when the number of concepts logged for this session has GROWN
21
- * since the last block.
21
+ * `end` block only when the number of concepts logged for this session
22
+ * has GROWN since the last block. Blocking stamps the current
23
+ * count, so a Stop that follows with the same count does not
24
+ * block, whatever happened in between — quiz answered, quiz
25
+ * skipped, model ignored us entirely.
22
26
  *
23
- * Blocking stamps the current count. A Stop that follows with the same count does
24
- * not block, whatever happened in between — quiz answered, quiz skipped, model
25
- * ignored us entirely. Only genuinely new logged work re-arms it, and
26
- * `block_count` caps even that.
27
+ * `interleaved` block whenever the pacing clock has elapsed. This cadence
28
+ * asks one question per block and means to ask several across a
29
+ * task, and the `end` rule cannot deliver that: the model logs its
30
+ * whole batch in one call, so "new work since the last block" is
31
+ * false for the rest of the session and the sweep fired once, ever.
32
+ *
33
+ * Neither can run away. Three caps bound every block: the pacing clock
34
+ * (`min_minutes_between_checkpoints` here, `min_minutes_between_quizzes` under
35
+ * `end`), `max_stop_blocks_per_session`, and the remaining session budget.
27
36
  */
28
37
  import { attributionRule, isCowork } from '../surface.js';
29
38
  import { run, openExisting, config, cwdOf, sessionId, minutesSince, framingFor } from './lib.js';
@@ -53,7 +62,7 @@ await run(async (input) => {
53
62
  // is what enforced mode is for, and it reads .eklavya.json rather than this.
54
63
  if (isSessionOff(db, sid))
55
64
  return 0;
56
- const { mode, cadence, focus, focus_topic, max_questions_per_task, max_stop_blocks_per_session, min_minutes_between_quizzes, } = config(cwd).config;
65
+ const { mode, cadence, focus, focus_topic, max_questions_per_task, max_stop_blocks_per_session, min_minutes_between_quizzes, min_minutes_between_checkpoints, } = config(cwd).config;
57
66
  if (mode === 'off')
58
67
  return 0;
59
68
  const stats = db
@@ -87,26 +96,61 @@ await run(async (input) => {
87
96
  // "asked me the same thing twice" failure this tool exists to avoid.
88
97
  if (stats.unmastered <= 0)
89
98
  return 0;
90
- // --- the loop guard --------------------------------------------------------
91
- if (!(stats.logged > stats.last_logged))
92
- return 0;
93
- if (stats.blocks >= max_stop_blocks_per_session)
94
- return 0;
99
+ // Under `interleaved` this sweep asks exactly ONE question (see `take` below),
100
+ // so it is paced by the single-question clock rather than the whole-quiz one.
101
+ // Enforced mode is exempt from both, as it always was (decision G5).
102
+ const interleaved = cadence === 'interleaved' && mode !== 'enforced';
103
+ // --- the pacing clock ------------------------------------------------------
95
104
  // Ambient mode respects the quiz cadence. Enforced mode must not, or a cooldown
96
105
  // could make a commit gate unpassable (decision G5).
97
106
  //
107
+ // Which clock depends on what is being paced. `min_minutes_between_quizzes` is
108
+ // the anti-nagging floor between whole quizzes, and under `end` that is exactly
109
+ // what a sweep is. Under `interleaved` a sweep is one question, so gating it on
110
+ // the quiz clock is a category error -- and it was the bug: a 20-minute floor
111
+ // measured from the last *answer* meant the checkpoint question the learner had
112
+ // just answered silenced the sweep for the rest of a typical task, so a session
113
+ // that logged eight concepts was asked one.
114
+ //
98
115
  // Both clocks matter, and for the same reason. get_session_quiz_plan applies its
99
116
  // cooldown from the last *answer*; this hook stamps the last *block*. Checking
100
117
  // only the block would let us block a turn that the quiz plan then refuses as
101
118
  // too soon, which reads to the model as being told to teach and given nothing to
102
- // teach. Whichever happened more recently wins.
119
+ // teach. Whichever happened more recently wins. The plan reads whichever of the
120
+ // two keys this line does, keyed on the same cadence, so the pair cannot desync.
121
+ //
122
+ // Floored at one minute under `interleaved`, because there the clock is the only
123
+ // loop guard left (see below) and `min_minutes_between_checkpoints: 0` is a
124
+ // supported value -- it means "ask at every seam" for the PostToolUse checkpoint,
125
+ // which has a logged concept behind each firing. A Stop sweep has no such event:
126
+ // at a gap of 0 a model that ignores the instruction and stops again immediately
127
+ // gets blocked again immediately, three times in a row with no pause.
103
128
  if (mode === 'ambient') {
104
- if (minutesSince(stats.last_blocked) < min_minutes_between_quizzes)
129
+ const gap = interleaved
130
+ ? Math.max(1, min_minutes_between_checkpoints)
131
+ : min_minutes_between_quizzes;
132
+ if (minutesSince(stats.last_blocked) < gap)
105
133
  return 0;
106
- if (minutesSince(stats.last_answer) < min_minutes_between_quizzes)
134
+ if (minutesSince(stats.last_answer) < gap)
107
135
  return 0;
108
136
  }
109
137
  // ---------------------------------------------------------------------------
138
+ // --- the loop guard --------------------------------------------------------
139
+ // Under `interleaved` the clock above IS this guard, and it has to be: the
140
+ // `logged > last_logged` rule re-arms only on newly logged work, and the model
141
+ // logs its whole batch in one call at the start of a task. That made the sweep
142
+ // a once-per-session event no matter how long the session ran -- a ceiling of
143
+ // two questions against a budget of four. Time re-arms it instead, and three
144
+ // existing caps keep it finite: `gap` minutes between blocks,
145
+ // `max_stop_blocks_per_session`, and `remaining` below.
146
+ //
147
+ // Under `end` the original rule stands. That cadence delivers the whole budget
148
+ // in one sweep, so a second sweep genuinely does need new work behind it.
149
+ if (!interleaved && !(stats.logged > stats.last_logged))
150
+ return 0;
151
+ if (stats.blocks >= max_stop_blocks_per_session)
152
+ return 0;
153
+ // ---------------------------------------------------------------------------
110
154
  // --- what is left of the session budget ------------------------------------
111
155
  // `max_questions_per_task` is a SESSION allowance, not an end-of-session batch
112
156
  // size. Every question answered while the agent was working is one this hook
@@ -123,12 +167,13 @@ await run(async (input) => {
123
167
  // that cadence promises a question at a time, at the seam where the concept was
124
168
  // logged, and a sweep that ends the task with three questions in a row is the
125
169
  // thing it was sold as replacing. What the sweep leaves unasked is not lost --
126
- // the concept stays unmastered and comes back as review in a later session,
127
- // which is what spaced repetition is for. Under `end`, a batch is the setting.
128
- // Enforced mode is exempt, as it is from the cooldown (decision G5): the gate
129
- // needs several passing answers and this hook only re-arms when new work is
130
- // logged, so pacing it to one would leave a commit that cannot be made.
131
- const take = cadence === 'interleaved' && mode !== 'enforced' ? 1 : remaining;
170
+ // the plan's `backlog` source offers it again in a later session. Note that
171
+ // spaced repetition does NOT cover it: `mastery` rows are written only by
172
+ // record_attempt, so a concept never asked has no next_review to come due on.
173
+ // Under `end`, a batch is the setting. Enforced mode is exempt, as it is from
174
+ // the cooldown (decision G5): the gate needs several passing answers, so pacing
175
+ // it to one would leave a commit that cannot be made.
176
+ const take = interleaved ? 1 : remaining;
132
177
  const rows = db
133
178
  .prepare(`SELECT c.slug || COALESCE(' (' || sc.context || ')', '') AS line
134
179
  FROM session_concepts sc
@@ -1 +1 @@
1
- {"version":3,"file":"stop-quiz-check.js","sourceRoot":"","sources":["../../src/hooks/stop-quiz-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stop-quiz-check.js","sourceRoot":"","sources":["../../src/hooks/stop-quiz-check.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eklavya",
3
3
  "displayName": "Eklavya",
4
- "version": "1.18.0",
4
+ "version": "1.18.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"
@@ -71,7 +71,10 @@ and for a stronger reason: it blocks with exit 2. `Stop` is believed to be
71
71
  parent-only, since `SubagentStop` is a separate event — but nothing here has
72
72
  verified that, and this hook is what made the path reachable, because before it
73
73
  a subagent logged nothing and the Stop hook's `logged > last_logged` predicate
74
- could never arm.
74
+ could never arm. Do not read that as making the guard optional now: under
75
+ `interleaved` the clock arms the sweep whether or not anything was logged, so the
76
+ `agent_id` check is the only thing standing between a subagent and a quiz it
77
+ cannot ask.
75
78
 
76
79
  **And it pays the stdin cost on every delegated task.** It needs `agent_type`,
77
80
  so it cannot keep ponytail's stdin-independent fast path; on a host that
@@ -206,22 +209,43 @@ Two rules it is easy to get wrong:
206
209
  ## The loop guard
207
210
 
208
211
  A Stop hook that blocks on every Stop blocks forever, and `stop_hook_active` is
209
- no longer a documented input. So the rule is: block only when the count of
210
- `origin = 'work'` rows in `session_concepts` has **grown** since the last block.
211
- Blocking stamps that count into `stop_markers` (`last_logged_count`,
212
- `last_blocked_at`, `block_count`), *before* the block — a failure after it costs
213
- a missed quiz, never a loop. `max_stop_blocks_per_session` (default 3) caps even
214
- genuinely new work. Counting review-origin rows here would let answering a
215
- question re-arm the block that asked it; don't. `checkpoint-quiz.ts` has the
216
- mirror-image guard for mid-turn bursts, stamping `checkpoints` before it emits.
212
+ no longer a documented input. What bounds it depends on the cadence, because the
213
+ two cadences block for different reasons.
214
+
215
+ Under **`end`**: block only when the count of `origin = 'work'` rows in
216
+ `session_concepts` has **grown** since the last block. That cadence delivers the
217
+ whole budget in one sweep, so a second sweep needs new work behind it.
218
+
219
+ Under **`interleaved`**: the pacing clock is the guard. The `logged > last_logged`
220
+ rule cannot work here — the model logs its whole batch in one call at the start
221
+ of a task, so "new work since the last block" is false for the rest of the
222
+ session and the sweep fired exactly once, ever. That capped a session at two
223
+ questions against a budget of four. Time re-arms it instead.
224
+
225
+ Either way, blocking stamps into `stop_markers` (`last_logged_count`,
226
+ `last_blocked_at`, `block_count`) *before* the block — a failure after it costs
227
+ a missed quiz, never a loop — and three caps bound every block: the pacing clock,
228
+ `max_stop_blocks_per_session` (default 3), and the remaining session budget.
229
+ Counting review-origin rows here would let answering a question re-arm the block
230
+ that asked it; don't. `checkpoint-quiz.ts` has the mirror-image guard for
231
+ mid-turn bursts, stamping `checkpoints` before it emits.
217
232
 
218
233
  ## Pacing
219
234
 
220
- Two different keys, one hook each (`mcp/src/config.ts` is the source of truth):
221
- `min_minutes_between_checkpoints` (default 4) paces the single mid-task question
222
- and is read by `checkpoint-quiz.ts`, against both the last checkpoint and the
223
- last answer; `min_minutes_between_quizzes` (default 20) paces a whole Stop quiz,
224
- is read by `stop-quiz-check.ts`, and applies **in `ambient` only**.
235
+ Two keys, and which one applies depends on what is being paced, not on which
236
+ hook is asking (`mcp/src/config.ts` is the source of truth).
237
+ `min_minutes_between_checkpoints` (default 4) paces a **single question**: the
238
+ mid-task checkpoint in `checkpoint-quiz.ts`, and the Stop sweep too whenever the
239
+ cadence is `interleaved`, since a sweep is one question there.
240
+ `min_minutes_between_quizzes` (default 20) paces a **whole quiz**, which only the
241
+ `end` cadence produces. Both apply **in `ambient` only**, and both are measured
242
+ against the last block *and* the last answer — checking only one would let the
243
+ hook block a turn the quiz plan then refuses as too soon. That is why
244
+ `get_session_quiz_plan` picks between the same two keys on the same cadence: the
245
+ hook's clock and the plan's cooldown have to be the same number, or the hook
246
+ blocks a turn and the plan hands back `questions_needed: 0`. Under `interleaved`
247
+ the Stop sweep floors its gap at one minute, because there the clock is the whole
248
+ loop guard and `0` is a legal value for the checkpoint it borrows.
225
249
  `max_questions_per_task` (default 4) is a session allowance shared by both hooks:
226
250
  every `attempts` row spends it, so the Stop hook asks for whatever the checkpoints
227
251
  left. The two hooks' candidate queries share a WHERE clause verbatim; if you
@@ -59,7 +59,7 @@ It takes `mode` and nothing else. Any other value of `mode` at that scope brings
59
59
 
60
60
  Say one line back — including *which* session it acted on if `set_config` reports a `session_id` you did not pass — and say the limit in it when the effective mode is `enforced`: the questions are silenced, but the commit gate reads `.eklavya.json` and never sees a session id, so a commit still waits for the quiz, and it keeps growing while you work in silence. Someone who wants that gone wants a repo or global `mode` change, and that is a different, deliberate decision — `set_config` returns a `note` saying so.
61
61
 
62
- Nothing is lost while a session is silent: concepts logged stay unmastered and come back as review later.
62
+ Nothing is lost while a session is silent: concepts logged stay unmastered, and a later session offers them again once its own work and review debt are covered.
63
63
 
64
64
  ## Confirm
65
65
 
@@ -66,7 +66,9 @@ to, no re-plan, no "shall I continue?", no second question. A checkpoint that
66
66
  becomes a tutorial is the interruption it existed to replace.
67
67
 
68
68
  **The Stop sweep** — a longer end-of-task message naming the concepts. Run the
69
- quiz, then finish your turn normally. It fires at most once per batch of work.
69
+ quiz, then finish your turn normally. Under `interleaved` it can fire more than
70
+ once in a long session — it is paced by the clock, not by the batch — so treat
71
+ each one as its own single question, not as a sign you missed the last one.
70
72
 
71
73
  **How many questions is not your call — it is the plan's.** Under `interleaved`
72
74
  the plan returns one item, the sweep included. Under `end`, and in enforced mode
@@ -77,7 +79,10 @@ and you ask those one at a time.
77
79
  checkpoint answered is one the sweep no longer asks, so a session that
78
80
  checkpointed through the budget ends in silence. That is intended — do not top it
79
81
  up because the ending felt quiet. What the budget never reached stays unmastered
80
- and comes back as review.
82
+ and comes back in a later plan with `reason: "backlog"`, once that session's own
83
+ concepts and review debt are covered, from the domains that session touches, and
84
+ never in `enforced` mode. It is not spaced repetition that brings it
85
+ back — that only schedules concepts already answered once.
81
86
 
82
87
  `questions_needed: 0` means say nothing and carry on; `reason` says why.
83
88
 
@@ -41,6 +41,16 @@ the task did not touch directly. They are the ideas the diff is an instance of,
41
41
  and they arrive with **`context: null` on purpose** — the code is withheld so
42
42
  you reach for the idea instead. Ask about them on their own terms.
43
43
 
44
+ Items with `reason: "backlog"` are older work — a concept an earlier session
45
+ logged that no question ever reached, offered once this session's own concepts
46
+ and review debt are covered, and only from the domains this session touched --
47
+ there is one database for every project, so the scope is what keeps a Flutter
48
+ session off last month's Terraform. Never in `enforced` mode: a backlog answer
49
+ cannot open a commit gate, so offering one there would only spend the budget the
50
+ gate needs. They also arrive with `context: null`, and for a
51
+ blunter reason: the code that taught them is not on screen and may not even be
52
+ on this branch. Ask about the concept, never about the diff.
53
+
44
54
  Items the session *did* touch keep their `context` even in this focus. That is
45
55
  not an inconsistency: the code is still the motivation, and the transferable
46
56
  question is easier to write well when you can see what prompted it. Read
@@ -42,7 +42,7 @@ export const getSessionQuizPlan = {
42
42
  // '"project" plans from the diff', and the returned `framing` it points at is
43
43
  // already re-pointed on Cowork. A description that still promised a diff
44
44
  // while the framing said otherwise would set the two against each other.
45
- description: withSurfaceNote('What to quiz on right now and at what difficulty tier, chosen from this session\'s concepts and whatever is due for review. Pass a domain to plan a topic quiz instead. Every item carries asked_before (questions this learner has already been asked — never repeat one), already_taught (they blanked and you explained it, so the next question is a follow-up) and prereqs_unmet. In enforced mode, once everything else is exhausted and the gate is still unpassed, it re-offers concepts that were blanked on and taught, a tier lower, with reason "gate_retry". Honours the configured focus: "project" plans from the diff, "concept" widens to prerequisites and domain siblings, "learn" plans from focus_topic and marks overlaps with the session\'s work as bridge_context. Every plan carries focus and framing — follow framing, it is what the setting means. Every question is multiple choice: ask it with AskUserQuestion as four options, never as a blank prompt. Each item also carries answer_position (1-4) — put the correct option in exactly that slot, or the right answer ends up first every time and the learner stops reading the options. Every tier is clamped to this project\'s difficulty level (easy 1-2, medium 2-4, hard 3-5), which is earned per project and returned as level with level_framing — obey it: a tier-4 question at level easy is the failure this exists to prevent. Every plan carries ask_attribution — obey it verbatim: it is the header and stem rule for the host this session is actually running on, and it differs between a terminal and a Claude Desktop question card. The dials this question was pitched from (mode, focus, cadence, level) never go in the stem either way. Under the interleaved cadence a plan is ONE question: ask it, grade it and get back to the work — there is no second question to come back for. Passing max, domain or slugs means the developer asked to be quizzed, and plans the whole budget; so does enforced mode, where the gate needs a round it can pass. Returns questions_needed: 0 when there is nothing worth asking.', ' '),
45
+ description: withSurfaceNote('What to quiz on right now and at what difficulty tier, chosen from this session\'s concepts and whatever is due for review. Pass a domain to plan a topic quiz instead. Every item carries asked_before (questions this learner has already been asked — never repeat one), already_taught (they blanked and you explained it, so the next question is a follow-up) and prereqs_unmet. When this session\'s own concepts and its review debt run out, it falls back to work an earlier session logged but never asked about, oldest first and within the domains this session touched, with reason "backlog" -- those carry no context line, so ask about the concept itself rather than about code that is not on screen. Never in enforced mode, where only this session\'s own work can open the gate. In enforced mode, once everything else is exhausted and the gate is still unpassed, it re-offers concepts that were blanked on and taught, a tier lower, with reason "gate_retry". Honours the configured focus: "project" plans from the diff, "concept" widens to prerequisites and domain siblings, "learn" plans from focus_topic and marks overlaps with the session\'s work as bridge_context. Every plan carries focus and framing — follow framing, it is what the setting means. Every question is multiple choice: ask it with AskUserQuestion as four options, never as a blank prompt. Each item also carries answer_position (1-4) — put the correct option in exactly that slot, or the right answer ends up first every time and the learner stops reading the options. Every tier is clamped to this project\'s difficulty level (easy 1-2, medium 2-4, hard 3-5), which is earned per project and returned as level with level_framing — obey it: a tier-4 question at level easy is the failure this exists to prevent. Every plan carries ask_attribution — obey it verbatim: it is the header and stem rule for the host this session is actually running on, and it differs between a terminal and a Claude Desktop question card. The dials this question was pitched from (mode, focus, cadence, level) never go in the stem either way. Under the interleaved cadence a plan is ONE question: ask it, grade it and get back to the work — there is no second question to come back for. Passing max, domain or slugs means the developer asked to be quizzed, and plans the whole budget; so does enforced mode, where the gate needs a round it can pass. Returns questions_needed: 0 when there is nothing worth asking.', ' '),
46
46
  inputSchema: {
47
47
  session_id: z.string().optional().describe(SESSION_HINT),
48
48
  cwd: z.string().optional().describe(CWD_HINT),
@@ -141,15 +141,26 @@ export const getSessionQuizPlan = {
141
141
  // Cooldown keeps ambient mode from nagging. It must never apply in enforced
142
142
  // mode, or a cooldown could make a commit gate unpassable (decision G5), and
143
143
  // it must never override an explicit request (`ignore_cooldown`).
144
+ //
145
+ // Which clock it reads depends on the cadence, for the same reason the Stop
146
+ // hook picks between them: `min_minutes_between_quizzes` is the floor between
147
+ // whole quizzes, and under `interleaved` a call here asks one question, not a
148
+ // quiz. Reading the quiz clock on every cadence is what desynced the two --
149
+ // the Stop hook would clear its 4-minute checkpoint clock, block the turn,
150
+ // and then this function would refuse on a 20-minute floor, which reads to
151
+ // the model as being told to teach and handed nothing to teach.
144
152
  if (config.mode === 'ambient' && !args.ignore_cooldown) {
153
+ const gap = config.cadence === 'interleaved'
154
+ ? config.min_minutes_between_checkpoints
155
+ : config.min_minutes_between_quizzes;
145
156
  const since = minutesSince(lastAttemptAt(db, sessionId), now);
146
- if (since < config.min_minutes_between_quizzes) {
157
+ if (since < gap) {
147
158
  return {
148
159
  session_id: sessionId,
149
160
  questions_needed: 0,
150
161
  concepts: [],
151
162
  reason: 'cooldown',
152
- minutes_remaining: Math.ceil(config.min_minutes_between_quizzes - since),
163
+ minutes_remaining: Math.ceil(gap - since),
153
164
  };
154
165
  }
155
166
  }
@@ -328,6 +339,55 @@ export const getSessionQuizPlan = {
328
339
  for (const c of rows)
329
340
  add(c, null, 'domain_review');
330
341
  }
342
+ // (d) work an earlier session logged and no question ever reached.
343
+ //
344
+ // This is review debt that spaced repetition cannot see. (c) above joins
345
+ // `mastery`, and a mastery row is written only by record_attempt -- so a
346
+ // concept that was logged, never asked, and left behind when the budget ran
347
+ // out has no next_review to come due on and would never be offered again.
348
+ // It was logged because the work exercised it, which is the same evidence
349
+ // any other pick here rests on, so it belongs in the plan rather than in a
350
+ // table nobody reads.
351
+ //
352
+ // Last, deliberately: it must never displace a concept from the session the
353
+ // developer is actually in. Oldest debt first, and the global attempts
354
+ // filter is its own -- `alreadyAsked` is scoped to this session.
355
+ //
356
+ // The LIMIT is why this differs from (c) above, which has none: review debt
357
+ // grows only as fast as questions get answered, while this grows every time
358
+ // a session logs more than the budget can ask about -- which is most of
359
+ // them. `add` stops at `max` anyway; the limit is on what gets read.
360
+ //
361
+ // Scoped to this session's domains when it has any. `session_concepts` has
362
+ // no repo column and there is one database for every project, so without
363
+ // this a Flutter session gets asked about the Terraform it logged last
364
+ // month -- while `framing` is still telling the tutor to ground the
365
+ // question in this session's diff, which the debt is not in. The unscoped
366
+ // fallback is for a session that logged nothing at all: there is no diff to
367
+ // contradict, and offering the debt beats saying there is nothing to ask.
368
+ //
369
+ // Never in enforced mode. A backlog answer is recorded with
370
+ // `origin = 'review'` and `countAnswered` credits only `origin = 'work'`
371
+ // toward the gate, so here the debt cannot open a commit -- it only fills
372
+ // `picked`, and a non-empty `picked` is exactly what suppresses the
373
+ // `gate_retry` escape hatch below. That would trade a deadlock the retry
374
+ // pass exists to break for four questions that cannot break it.
375
+ if (picked.length < max && config.mode !== 'enforced') {
376
+ const scoped = domains.size > 0;
377
+ const rows = db
378
+ .prepare(`SELECT c.* FROM session_concepts sc
379
+ JOIN concepts c ON c.id = sc.concept_id
380
+ WHERE sc.session_id <> ?
381
+ AND COALESCE(sc.origin, 'work') = 'work'
382
+ AND sc.concept_id NOT IN (SELECT concept_id FROM attempts)
383
+ ${scoped ? `AND c.domain IN (${[...domains].map(() => '?').join(',')})` : ''}
384
+ GROUP BY c.id
385
+ ORDER BY min(sc.ts) ASC
386
+ LIMIT 50`)
387
+ .all(sessionId, ...(scoped ? [...domains] : []));
388
+ for (const c of rows)
389
+ add(c, null, 'backlog');
390
+ }
331
391
  }
332
392
  // Enforced mode only, and only once everything else is exhausted: a session
333
393
  // answered entirely with "I don't know" grades every concept 0, and a graded
@@ -1 +1 @@
1
- {"version":3,"file":"get_session_quiz_plan.js","sourceRoot":"","sources":["../../src/tools/get_session_quiz_plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAc,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAc,MAAM,WAAW,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,GAGd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAC;AAkDlE;;;GAGG;AACH,MAAM,OAAO,GAA0B;IACrC,OAAO,EACL,iHAAiH;IACnH,OAAO,EACL,+TAA+T;IACjU,KAAK,EACH,qRAAqR;CACxR,CAAC;AAEF;;;;GAIG;AACH,MAAM,aAAa,GAA0B;IAC3C,IAAI,EACF,+SAA+S;IACjT,MAAM,EACJ,0JAA0J;IAC5J,IAAI,EACF,kMAAkM;CACrM,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,SAAS,YAAY,CAAC,GAAkB,EAAE,GAAS;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAC1C,2EAA2E;IAC3E,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAY;IACzC,IAAI,EAAE,uBAAuB;IAC7B,KAAK,EAAE,uBAAuB;IAC9B,8EAA8E;IAC9E,8EAA8E;IAC9E,yEAAyE;IACzE,yEAAyE;IACzE,WAAW,EAAE,eAAe,CAC1B,2gEAA2gE,EAC3gE,GAAG,CACJ;IACD,WAAW,EAAE;QACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sEAAsE,CAAC;QAChI,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,qHAAqH,CAAC;QAClI,KAAK,EAAE,CAAC;aACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CAAC,mGAAmG,CAAC;QAChH,eAAe,EAAE,CAAC;aACf,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,qHAAqH,CAAC;QAClI,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;aACrC,QAAQ,EAAE;aACV,QAAQ,CAAC,0EAA0E,CAAC;KACxF;IACD,OAAO,EAAE,CACP,IAQC,EACD,EAAE,EAAE,EAAE,EACN,EAAE;QACF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,KAAK,GAAU,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;QAChD,yEAAyE;QACzE,qEAAqE;QACrE,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAErD,qEAAqE;QACrE,4EAA4E;QAC5E,2EAA2E;QAC3E,4DAA4D;QAC5D,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAEpF,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,kCAAkC;QAClC,EAAE;QACF,uEAAuE;QACvE,6EAA6E;QAC7E,gFAAgF;QAChF,EAAE;QACF,sEAAsE;QACtE,0EAA0E;QAC1E,yEAAyE;QACzE,uEAAuE;QACvE,yEAAyE;QACzE,kCAAkC;QAClC,MAAM,MAAM,GACV,MAAM,CAAC,OAAO,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,aAAa,CAAC;QACnF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAErE,IAAI,CAAC,aAAa,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO;oBACL,UAAU,EAAE,SAAS;oBACrB,gBAAgB,EAAE,CAAC;oBACnB,QAAQ,EAAE,EAAE;oBACZ,KAAK;oBACL,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,uGAAuG;iBAChH,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,MAAM;gBAAE,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;iBACtC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;;gBACnD,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1E,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC1F,CAAC;QAED,qEAAqE;QACrE,oEAAoE;QACpE,gEAAgE;QAChE,kEAAkE;QAClE,IAAI,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,UAAU,EAAE,SAAS;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,qKAAqK;aAC9K,CAAC;QACJ,CAAC;QAED,4EAA4E;QAC5E,6EAA6E;QAC7E,kEAAkE;QAClE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9D,IAAI,KAAK,GAAG,MAAM,CAAC,2BAA2B,EAAE,CAAC;gBAC/C,OAAO;oBACL,UAAU,EAAE,SAAS;oBACrB,gBAAgB,EAAE,CAAC;oBACnB,QAAQ,EAAE,EAAE;oBACZ,MAAM,EAAE,UAAU;oBAClB,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,GAAG,KAAK,CAAC;iBACzE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,+DAA+D;QAC/D,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;gBACL,UAAU,EAAE,SAAS;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,QAAQ,EAAE,EAAE;gBACZ,KAAK;gBACL,KAAK,EAAE,MAAM,CAAC,WAAW;gBACzB,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,iCAAiC,MAAM,CAAC,WAAW,mHAAmH;aAC/K,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,CAAC,OAAO;gBAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,6EAA6E;QAC7E,yEAAyE;QACzE,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,MAAM,GAAG,GAAG,CACV,OAAmB,EACnB,OAAsB,EACtB,MAA0B;QAC1B,uEAAuE;QACvE,qEAAqE;QACrE,gEAAgE;QAChE,OAA4B,EAAE,EACxB,EAAE;YACR,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG;gBAAE,OAAO;YAC3D,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,YAAY,IAAI,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;YAE7D,MAAM,IAAI,GAAG,YAAY,CACvB,aAAa,CAAC;gBACZ,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,cAAc,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI;gBACxC,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI;gBAC9B,KAAK;aACN,CAAC,EACF,QAAQ,CAAC,KAAK,CACf,CAAC;YACF,4EAA4E;YAC5E,kEAAkE;YAClE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE7E,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,WAAW,EAAE,SAAS;gBACtB,OAAO;gBACP,yEAAyE;gBACzE,uEAAuE;gBACvE,kDAAkD;gBAClD,GAAG,CAAC,KAAK,KAAK,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;oBACvD,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAE,EAAE;oBACvD,CAAC,CAAC,EAAE,CAAC;gBACP,UAAU,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI;gBAC/B,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC7C,aAAa,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC;gBAChD,eAAe,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC3D,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACd,0EAA0E;YAC1E,sEAAsE;YACtE,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAc,EAAE,CAAC;YAC7B,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAC3B,CAAC;YAED,MAAM,IAAI,GAAG,EAAE;iBACZ,OAAO,CACN;;qBAEW,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;4CACG,CACnC;iBACA,GAAG,CAAC,GAAG,MAAM,CAAiB,CAAC;YAElC,uEAAuE;YACvE,uEAAuE;YACvE,MAAM,UAAU,GAAG,IAAI;iBACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBACxD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;YAC/F,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;iBAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACb,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;oBAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;oBAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBAClD,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEL,wEAAwE;YACxE,sEAAsE;YACtE,sBAAsB;YACtB,MAAM,WAAW,GAAG,CAAC,aAAa,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;YAClF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAE/C,sEAAsE;YACtE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBACxD,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACzE,CAAC;YAED,4DAA4D;YAC5D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC;oBAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjE,CAAC;YAED,yEAAyE;YACzE,sEAAsE;YACtE,uEAAuE;YACvE,2CAA2C;YAC3C,EAAE;YACF,2EAA2E;YAC3E,+CAA+C;YAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;gBAEpC,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC;oBAC1C,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;wBACjF,4DAA4D;wBAC5D,+DAA+D;wBAC/D,+DAA+D;wBAC/D,mBAAmB;wBACnB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC1D,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG;wBAAE,MAAM;oBAChC,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;wBACjF,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,2EAA2E;YAC3E,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,EAAE;qBACZ,OAAO,CACN;;kCAEsB,YAAY;wCACN,CAC7B;qBACA,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,CAAiB,CAAC;gBACtD,KAAK,MAAM,CAAC,IAAI,IAAI;oBAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,8EAA8E;QAC9E,4EAA4E;QAC5E,mDAAmD;QACnD,EAAE;QACF,2EAA2E;QAC3E,0EAA0E;QAC1E,WAAW;QACX,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC9C,oEAAoE;gBACpE,wEAAwE;gBACxE,kEAAkE;gBAClE,0EAA0E;gBAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;oBACjD,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,6CAA6C;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBACtD,OAAO,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;YACzD,CAAC;YACD,OAAO,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,uEAAuE;YACvE,+CAA+C;YAC/C,OAAO,YAAY,GAAG,CAAC;gBACrB,CAAC,CAAC;oBACE,UAAU,EAAE,SAAS;oBACrB,gBAAgB,EAAE,CAAC;oBACnB,QAAQ,EAAE,EAAE;oBACZ,KAAK;oBACL,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,GAAG,YAAY,uDAAuD;iBAC/E;gBACH,CAAC,CAAC;oBACE,UAAU,EAAE,SAAS;oBACrB,gBAAgB,EAAE,CAAC;oBACnB,QAAQ,EAAE,EAAE;oBACZ,KAAK;oBACL,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB;iBACvD,CAAC;QACR,CAAC;QAED,OAAO;YACL,UAAU,EAAE,SAAS;YACrB,gBAAgB,EAAE,MAAM,CAAC,MAAM;YAC/B,KAAK;YACL,wEAAwE;YACxE,0EAA0E;YAC1E,sEAAsE;YACtE,8CAA8C;YAC9C,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;YAC7C,yEAAyE;YACzE,kEAAkE;YAClE,wEAAwE;YACxE,yEAAyE;YACzE,oEAAoE;YACpE,qEAAqE;YACrE,eAAe,EAAE,eAAe,EAAE;YAClC,GAAG,CAAC,KAAK,KAAK,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5C,cAAc,EAAE;gBACd,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;gBAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;gBAC/B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ;gBAClC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ;gBACzC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ;gBACtC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C;YACD,QAAQ,EAAE,MAAM;SACjB,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"get_session_quiz_plan.js","sourceRoot":"","sources":["../../src/tools/get_session_quiz_plan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eklavya",
3
- "version": "1.18.0",
3
+ "version": "1.18.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": {