eklavya 1.49.0 → 1.49.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.
@@ -46,12 +46,24 @@ export function prepare(config, identity, event) {
46
46
  return null;
47
47
  if (isOwnTraffic(event.tool, event.body))
48
48
  return null;
49
- const files = (event.files ?? []).filter((f) => !pathExcluded(f, policy));
50
- // A file event whose only file was excluded is the excluded file. Keeping the
51
- // event for its body would re-admit through the back door what the path rule
52
- // just shut out.
53
- if ((event.kind === 'file_edit' || event.kind === 'file_read') && (event.files?.length ?? 0) > 0 && files.length === 0) {
54
- return null;
49
+ const named = event.files ?? [];
50
+ const files = named.filter((f) => !pathExcluded(f, policy));
51
+ if (files.length < named.length) {
52
+ // A file event whose only file was excluded is the excluded file. Keeping
53
+ // the event for its body would re-admit through the back door what the path
54
+ // rule just shut out. A read or edit naming an allowed file too keeps that
55
+ // file: its body is the arguments, not the excluded file's contents.
56
+ if (event.kind === 'file_edit' || event.kind === 'file_read') {
57
+ if (files.length === 0)
58
+ return null;
59
+ }
60
+ else {
61
+ // Any other event naming an excluded file is dropped whole, allowed files
62
+ // or not. A failed Read is a `tool_error`, and an error or a result
63
+ // excerpt quotes whichever file it came from — the body cannot be split
64
+ // by file, so no part of it can be kept safely.
65
+ return null;
66
+ }
55
67
  }
56
68
  // Redact, then cut — never the other way round. Cut first, the cap can land
57
69
  // inside a secret and leave a head too short for any pattern to recognise
@@ -113,6 +125,17 @@ export function captureOrSpool(db, config, identity, event) {
113
125
  }
114
126
  return spoolEvent(input);
115
127
  }
128
+ /** Tools that name their file in a required argument. */
129
+ const FILE_FAILURE_TOOLS = new Set(['Read', 'NotebookRead', 'Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
130
+ /**
131
+ * A failure of a file tool left with no file: before exclusions covered
132
+ * failures, that was a failed read or edit of an excluded file whose error text
133
+ * was kept. `prepare` no longer produces one; a spool line written before the
134
+ * upgrade still can. Migration 024 removes the same shape from the database.
135
+ */
136
+ function excludedFileFailure(input) {
137
+ return input.kind === 'tool_error' && FILE_FAILURE_TOOLS.has(input.tool ?? '') && !input.files?.length;
138
+ }
116
139
  /** Replays whatever the spool holds. Idempotent through `event_uid`. */
117
140
  export function drainSpool(db) {
118
141
  const { records, commit } = takeSpooled();
@@ -123,7 +146,7 @@ export function drainSpool(db) {
123
146
  // A spool line is data this process wrote earlier, but a truncated write or
124
147
  // a hand-edited file is still possible; anything without an identity cannot
125
148
  // be replayed idempotently and is discarded rather than guessed at.
126
- if (!input || typeof input !== 'object' || !input.eventUid || !input.project) {
149
+ if (!input || typeof input !== 'object' || !input.eventUid || !input.project || excludedFileFailure(input)) {
127
150
  skipped++;
128
151
  continue;
129
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/memory/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/memory/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ -- Failed reads and edits of excluded files, captured before the fix.
2
+ --
3
+ -- A failed Read, Edit or Write is `tool_error` evidence, and capture used to
4
+ -- apply the path exclusions only to `file_read` and `file_edit`. The excluded
5
+ -- path was stripped from `files`, but the error text -- which can quote the
6
+ -- file, a `.env` for example -- was kept. Capture now drops those events.
7
+ --
8
+ -- They are identifiable: each of these tools names its file in a required
9
+ -- argument, so a failure of one that is left with no file is a failure whose
10
+ -- only file was excluded. A rare failure the host sent without its arguments
11
+ -- matches too; it named no file, so nothing useful goes with it.
12
+ --
13
+ -- The links are cleared the way retention pruning clears them (`pruneEvidence`
14
+ -- in `src/memory/worker.ts`), so a connection without foreign keys cannot leave
15
+ -- rows pointing at nothing. A learning candidate outlives its event. Entries
16
+ -- already summarised from these events are left as they are.
17
+ -- Keep the tool list in step with `FILE_FAILURE_TOOLS` in
18
+ -- `src/memory/capture.ts`, which guards spool records written before this ran.
19
+ CREATE TEMP TABLE purge_excluded_failures AS
20
+ SELECT id FROM evidence_events
21
+ WHERE kind = 'tool_error'
22
+ AND tool IN ('Read', 'NotebookRead', 'Edit', 'Write', 'MultiEdit', 'NotebookEdit')
23
+ AND (files IS NULL OR files = '[]');
24
+
25
+ UPDATE learning_sources SET event_id = NULL WHERE event_id IN (SELECT id FROM purge_excluded_failures);
26
+ DELETE FROM memory_entry_events WHERE event_id IN (SELECT id FROM purge_excluded_failures);
27
+ DELETE FROM evidence_events WHERE id IN (SELECT id FROM purge_excluded_failures);
28
+
29
+ DROP TABLE purge_excluded_failures;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eklavya",
3
3
  "displayName": "Eklavya",
4
- "version": "1.49.0",
4
+ "version": "1.49.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"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eklavya",
3
- "version": "1.49.0",
3
+ "version": "1.49.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": {