eklavya 1.18.2 → 1.19.0

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.
Files changed (98) hide show
  1. package/dist/assets/dashboard.html +559 -14
  2. package/dist/assets/tutor/references/focus-and-level.md +29 -0
  3. package/dist/cli.js +648 -20
  4. package/dist/cli.js.map +1 -1
  5. package/dist/config-path.js +156 -0
  6. package/dist/config-path.js.map +1 -0
  7. package/dist/config.js +231 -2
  8. package/dist/config.js.map +1 -1
  9. package/dist/dashboard.js +355 -0
  10. package/dist/dashboard.js.map +1 -1
  11. package/dist/eval/retrieval-score.js +77 -0
  12. package/dist/eval/retrieval-score.js.map +1 -0
  13. package/dist/hooks/capture-tool.js +107 -0
  14. package/dist/hooks/capture-tool.js.map +1 -0
  15. package/dist/hooks/checkpoint-quiz.js +5 -6
  16. package/dist/hooks/checkpoint-quiz.js.map +1 -1
  17. package/dist/hooks/lib.js +7 -33
  18. package/dist/hooks/lib.js.map +1 -1
  19. package/dist/hooks/memory-lib.js +181 -0
  20. package/dist/hooks/memory-lib.js.map +1 -0
  21. package/dist/hooks/prompt-submit-nudge.js +56 -20
  22. package/dist/hooks/prompt-submit-nudge.js.map +1 -1
  23. package/dist/hooks/session-start.js +73 -74
  24. package/dist/hooks/session-start.js.map +1 -1
  25. package/dist/hooks/stop-quiz-check.js +44 -7
  26. package/dist/hooks/stop-quiz-check.js.map +1 -1
  27. package/dist/install.js +37 -0
  28. package/dist/install.js.map +1 -1
  29. package/dist/memory/capture.js +123 -0
  30. package/dist/memory/capture.js.map +1 -0
  31. package/dist/memory/code.js +186 -0
  32. package/dist/memory/code.js.map +1 -0
  33. package/dist/memory/collections.js +87 -0
  34. package/dist/memory/collections.js.map +1 -0
  35. package/dist/memory/embed.js +81 -0
  36. package/dist/memory/embed.js.map +1 -0
  37. package/dist/memory/hosts.js +71 -0
  38. package/dist/memory/hosts.js.map +1 -0
  39. package/dist/memory/identity.js +74 -0
  40. package/dist/memory/identity.js.map +1 -0
  41. package/dist/memory/import.js +916 -0
  42. package/dist/memory/import.js.map +1 -0
  43. package/dist/memory/learning.js +148 -0
  44. package/dist/memory/learning.js.map +1 -0
  45. package/dist/memory/notify.js +220 -0
  46. package/dist/memory/notify.js.map +1 -0
  47. package/dist/memory/privacy.js +117 -0
  48. package/dist/memory/privacy.js.map +1 -0
  49. package/dist/memory/provider.js +155 -0
  50. package/dist/memory/provider.js.map +1 -0
  51. package/dist/memory/recall.js +327 -0
  52. package/dist/memory/recall.js.map +1 -0
  53. package/dist/memory/replay.js +174 -0
  54. package/dist/memory/replay.js.map +1 -0
  55. package/dist/memory/search.js +143 -0
  56. package/dist/memory/search.js.map +1 -0
  57. package/dist/memory/spool.js +93 -0
  58. package/dist/memory/spool.js.map +1 -0
  59. package/dist/memory/store.js +399 -0
  60. package/dist/memory/store.js.map +1 -0
  61. package/dist/memory/summarize.js +178 -0
  62. package/dist/memory/summarize.js.map +1 -0
  63. package/dist/memory/sync.js +595 -0
  64. package/dist/memory/sync.js.map +1 -0
  65. package/dist/memory/tokens.js +55 -0
  66. package/dist/memory/tokens.js.map +1 -0
  67. package/dist/memory/worker.js +207 -0
  68. package/dist/memory/worker.js.map +1 -0
  69. package/dist/migrations/009_memory.sql +226 -0
  70. package/dist/migrations/010_import.sql +26 -0
  71. package/dist/migrations/011_sync.sql +76 -0
  72. package/dist/migrations/012_job_backoff.sql +13 -0
  73. package/dist/migrations/013_batch_provenance.sql +18 -0
  74. package/dist/migrations/014_batch_events_index.sql +18 -0
  75. package/dist/plugin/.claude-plugin/plugin.json +1 -1
  76. package/dist/plugin/agents/tutor.md +3 -1
  77. package/dist/plugin/hooks/CLAUDE.md +30 -6
  78. package/dist/plugin/hooks/hooks.json +10 -0
  79. package/dist/plugin/skills/CLAUDE.md +17 -7
  80. package/dist/plugin/skills/memory/SKILL.md +88 -0
  81. package/dist/plugin/skills/setup/SKILL.md +16 -2
  82. package/dist/plugin/skills/tutor/references/focus-and-level.md +29 -0
  83. package/dist/time.js +41 -0
  84. package/dist/time.js.map +1 -0
  85. package/dist/tools/code_tools.js +73 -0
  86. package/dist/tools/code_tools.js.map +1 -0
  87. package/dist/tools/collection_tools.js +92 -0
  88. package/dist/tools/collection_tools.js.map +1 -0
  89. package/dist/tools/config_tools.js +104 -1
  90. package/dist/tools/config_tools.js.map +1 -1
  91. package/dist/tools/index.js +15 -0
  92. package/dist/tools/index.js.map +1 -1
  93. package/dist/tools/memory_read_tools.js +277 -0
  94. package/dist/tools/memory_read_tools.js.map +1 -0
  95. package/dist/tools/memory_write_tools.js +115 -0
  96. package/dist/tools/memory_write_tools.js.map +1 -0
  97. package/dist/user-skill/eklavya/SKILL.md +64 -8
  98. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/memory/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { isDomainEnabled } from '../config.js';
2
+ import { allConceptSlugs, logSessionConcept, newConceptsThisSession } from '../store.js';
3
+ import { findFuzzyMatch, normalizeSlug } from '../slug.js';
4
+ import { addCandidate, entryById, pendingCandidates, resolveCandidate, timeline, } from './store.js';
5
+ /**
6
+ * The bridge from evidence to the concept graph (PRD LRN-02).
7
+ *
8
+ * The rule this file exists to hold: **an observation is not an assessment**.
9
+ * Nothing here records an attempt, moves a mastery score, clears review debt,
10
+ * promotes a level or opens a gate. It only proposes what a session was *about*,
11
+ * so the tutor has something to ask when the agent forgot to say.
12
+ *
13
+ * Explicit logging stays the fast path. This fills omissions — a session where
14
+ * the model worked for an hour and called `log_session_concepts` not once — and
15
+ * deliberately does not compete with a session that logged properly, because
16
+ * an extractive guess is worse than the model's own account of its work.
17
+ */
18
+ /** Words that are about the tooling rather than about anything worth learning. */
19
+ const STOPWORDS = new Set([
20
+ 'the', 'and', 'for', 'with', 'this', 'that', 'from', 'into', 'were', 'was', 'are', 'but',
21
+ 'add', 'added', 'fix', 'fixed', 'use', 'used', 'make', 'made', 'run', 'ran', 'file', 'files',
22
+ 'test', 'tests', 'code', 'line', 'lines', 'change', 'changed', 'update', 'updated', 'edit',
23
+ 'edited', 'touched', 'failed', 'asked', 'then', 'session', 'work', 'project',
24
+ ]);
25
+ function phrasesFrom(entry) {
26
+ const text = [entry.title, entry.narrative, entry.facts ?? ''].join(' ');
27
+ const words = text
28
+ .toLowerCase()
29
+ .split(/[^\p{L}\p{N}_-]+/u)
30
+ .filter((w) => w.length > 3 && !STOPWORDS.has(w));
31
+ // Bigrams as well as single words: `token` and `rotation` are each too vague
32
+ // to name a concept, and `token-rotation` is exactly one.
33
+ const phrases = new Set();
34
+ for (let i = 0; i < words.length; i++) {
35
+ phrases.add(words[i]);
36
+ if (i + 1 < words.length)
37
+ phrases.add(`${words[i]}-${words[i + 1]}`);
38
+ }
39
+ return [...phrases];
40
+ }
41
+ /**
42
+ * Proposes candidates for one entry by matching its language against concepts
43
+ * the graph already knows.
44
+ *
45
+ * Matching an existing concept only. Minting a new one from an extractive
46
+ * guess is how a graph fills with `edited-auth` and `failed-command`; the
47
+ * provider observer proposes new slugs, and even those arrive as candidates.
48
+ */
49
+ export function proposeFor(db, entry, config) {
50
+ const known = allConceptSlugs(db);
51
+ if (!known.length)
52
+ return 0;
53
+ const seen = new Set();
54
+ let added = 0;
55
+ for (const phrase of phrasesFrom(entry)) {
56
+ const slug = normalizeSlug(phrase);
57
+ if (!slug)
58
+ continue;
59
+ const match = known.find((k) => k.slug === slug) ?? findFuzzyMatch(slug, known);
60
+ if (!match || seen.has(match.id))
61
+ continue;
62
+ if (!isDomainEnabled(config, match.domain))
63
+ continue;
64
+ seen.add(match.id);
65
+ // A bigram that matched a whole slug is far stronger evidence than a single
66
+ // word that fuzzy-matched, and the confidence has to say so or the ordering
67
+ // in `pendingCandidates` is meaningless.
68
+ const exact = match.slug === slug;
69
+ addCandidate(db, {
70
+ entryId: entry.id,
71
+ slug: match.slug,
72
+ name: match.slug,
73
+ domain: match.domain,
74
+ confidence: exact ? 0.7 : 0.4,
75
+ project: entry.project,
76
+ });
77
+ added++;
78
+ }
79
+ return added;
80
+ }
81
+ /** Proposes for every entry of a project that has not been mined yet. */
82
+ export function proposeForProject(db, config, project, limit = 10) {
83
+ // Observations only. A session summary is a roll-up of observation titles
84
+ // this has already mined, so including it proposes the same slugs a second
85
+ // time -- harmless in itself, but it crowds the top five that `fillOmissions`
86
+ // accepts for a session that logged nothing.
87
+ const entries = timeline(db, { project, kind: 'observation', limit }).filter((entry) => {
88
+ const row = db
89
+ .prepare('SELECT 1 AS hit FROM learning_sources WHERE entry_id = ? LIMIT 1')
90
+ .get(entry.id);
91
+ return !row;
92
+ });
93
+ let added = 0;
94
+ for (const entry of entries)
95
+ added += proposeFor(db, entry, config);
96
+ return added;
97
+ }
98
+ /**
99
+ * Logs evidence-derived concepts for a session that logged none of its own.
100
+ *
101
+ * The guard is the whole design. A session that logged properly is left alone:
102
+ * the model's own account of what it wrote beats anything derived from tool
103
+ * arguments, and adding to it would inflate the gate's `required` with guesses.
104
+ * A session that logged nothing had no candidates at all, and one plausible
105
+ * question about real work beats silence.
106
+ *
107
+ * That same check is also what keeps late evidence from reopening a passed gate
108
+ * or re-arming a finished task (PRD LRN-04), and it is why no separate guard for
109
+ * it exists here. It counts the whole of `session_concepts`, and the only other
110
+ * writers are `log_session_concepts` — the one call that raises a gate's
111
+ * `required` — and `record_attempt`, which writes a row before it grades. A
112
+ * session with a gate worth reopening, or a quiz worth not repeating, therefore
113
+ * always has rows, and this returns before its first write. Narrow that count to
114
+ * one origin or one timestamp and the hazard becomes real.
115
+ */
116
+ export function fillOmissions(db, config, sessionId, project) {
117
+ const logged = db
118
+ .prepare('SELECT COUNT(*) AS n FROM session_concepts WHERE session_id = ?')
119
+ .get(sessionId);
120
+ if (logged.n > 0)
121
+ return { accepted: 0, skipped: 0, reason: 'already_logged' };
122
+ proposeForProject(db, config, project);
123
+ const candidates = pendingCandidates(db, project, 20).filter((c) => c.confidence >= 0.7);
124
+ if (!candidates.length)
125
+ return { accepted: 0, skipped: 0, reason: 'no_candidates' };
126
+ // The same budget an explicit log is held to. It is a cap on slug sprawl, and
127
+ // a guess has less right to spend it than the model's own account does.
128
+ const budget = Math.max(0, config.max_new_concepts_per_session - newConceptsThisSession(db, sessionId));
129
+ if (budget === 0)
130
+ return { accepted: 0, skipped: candidates.length, reason: 'budget' };
131
+ let accepted = 0;
132
+ for (const candidate of candidates.slice(0, Math.min(budget, 5))) {
133
+ const concept = conceptFor(db, candidate);
134
+ if (!concept) {
135
+ resolveCandidate(db, candidate.id, 'rejected');
136
+ continue;
137
+ }
138
+ const entry = candidate.entry_id ? entryById(db, candidate.entry_id) : undefined;
139
+ logSessionConcept(db, sessionId, concept.id, entry ? `from memory: ${entry.title}` : 'derived from this session\'s evidence', 'work');
140
+ resolveCandidate(db, candidate.id, 'accepted', concept.id);
141
+ accepted++;
142
+ }
143
+ return { accepted, skipped: candidates.length - accepted };
144
+ }
145
+ function conceptFor(db, candidate) {
146
+ return db.prepare('SELECT id FROM concepts WHERE slug = ?').get(candidate.slug);
147
+ }
148
+ //# sourceMappingURL=learning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning.js","sourceRoot":"","sources":["../../src/memory/learning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createHash } from 'node:crypto';
4
+ import { spawn } from 'node:child_process';
5
+ import { nowIso, parseStamp } from '../time.js';
6
+ import { DEFAULT_PRIVACY, redact } from './privacy.js';
7
+ const DELIVERED_PREFIX = 'notified:';
8
+ const TIMEOUT_MS = 4000;
9
+ /** Retries are for a sink that is briefly down, not for one that is gone. */
10
+ const MAX_ATTEMPTS = 3;
11
+ /** A wrap-up or a paused-queue alert from yesterday is noise, not news. */
12
+ const MAX_AGE_MS = 24 * 60 * 60 * 1000;
13
+ function ledgerKey(eventId, sink) {
14
+ // The target is hashed, not stored: a webhook URL is frequently the whole
15
+ // credential, and a delivery ledger is not a place to keep one.
16
+ const fingerprint = createHash('sha256').update(`${sink.kind}\u0000${sink.target}`).digest('hex').slice(0, 16);
17
+ return `${DELIVERED_PREFIX}${eventId}:${fingerprint}`;
18
+ }
19
+ /** `null` means nothing has been tried yet. */
20
+ function readState(db, key) {
21
+ try {
22
+ const row = db.prepare('SELECT value FROM meta WHERE key = ?').get(key);
23
+ return row ? JSON.parse(row.value) : null;
24
+ }
25
+ catch {
26
+ // A database that cannot answer "have I sent this" — or a row that no
27
+ // longer parses — must not be taken as "no". Sending twice is the worse of
28
+ // the two mistakes, so report a state that is already spent.
29
+ return { ok: true, n: MAX_ATTEMPTS, first: nowIso() };
30
+ }
31
+ }
32
+ function writeState(db, key, state) {
33
+ try {
34
+ db.prepare(`INSERT INTO meta (key, value) VALUES (?, ?)
35
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(key, JSON.stringify(state));
36
+ }
37
+ catch {
38
+ /* A recorded delivery that failed to record is a possible duplicate, not a lost session. */
39
+ }
40
+ }
41
+ function retriable(state, now) {
42
+ if (!state)
43
+ return true;
44
+ if (state.ok || state.n >= MAX_ATTEMPTS)
45
+ return false;
46
+ const first = parseStamp(state.first);
47
+ // An unparseable stamp stops the retries rather than granting them forever.
48
+ return first !== null && now - first < MAX_AGE_MS;
49
+ }
50
+ /**
51
+ * Rows this version does not write, left by a version that keyed the whole
52
+ * event rather than each sink. Treated as delivered so an upgrade does not
53
+ * re-send every alert whose id is still live.
54
+ *
55
+ * ponytail: never cleaned up. These are a handful of `meta` rows that stop
56
+ * mattering once their events age out; a migration to drop them is not worth
57
+ * the forward-only schema bump.
58
+ */
59
+ function sentBeforeUpgrade(db, id) {
60
+ try {
61
+ return Boolean(db.prepare('SELECT 1 FROM meta WHERE key = ?').get(`${DELIVERED_PREFIX}${id}`));
62
+ }
63
+ catch {
64
+ return true;
65
+ }
66
+ }
67
+ function wants(sink, kind) {
68
+ return !sink.events || sink.events.length === 0 || sink.events.includes(kind);
69
+ }
70
+ /**
71
+ * Sends one event to every configured sink that wants it and has not already
72
+ * taken it.
73
+ *
74
+ * The attempt is written *before* the send and only flipped to `ok` after the
75
+ * sink accepted. Recording first is what stops a crash between the send and the
76
+ * write from resending for ever, which is why the ordering was chosen; the flag
77
+ * is what stops a sink that was down for thirty seconds from losing the
78
+ * notification permanently. A crash in that window costs a duplicate, bounded
79
+ * by MAX_ATTEMPTS — the one outcome neither ordering can rule out.
80
+ */
81
+ export async function notify(db, config, event) {
82
+ if (!config.notifications.enabled)
83
+ return [];
84
+ const wanted = config.notifications.sinks.filter((s) => wants(s, event.kind));
85
+ if (!wanted.length)
86
+ return [];
87
+ if (sentBeforeUpgrade(db, event.id))
88
+ return [];
89
+ const now = Date.now();
90
+ const pending = wanted
91
+ .map((sink) => {
92
+ const key = ledgerKey(event.id, sink);
93
+ return { sink, key, state: readState(db, key) };
94
+ })
95
+ .filter((p) => retriable(p.state, now));
96
+ if (!pending.length)
97
+ return [];
98
+ const policy = {
99
+ ...DEFAULT_PRIVACY,
100
+ excludePaths: [...DEFAULT_PRIVACY.excludePaths, ...config.privacy.exclude_paths],
101
+ redactPatterns: config.privacy.redact_patterns,
102
+ };
103
+ const payload = {
104
+ id: event.id,
105
+ kind: event.kind,
106
+ project: event.project,
107
+ at: nowIso(),
108
+ title: redact(event.title, policy).text,
109
+ body: redact(event.body, policy).text,
110
+ data: event.data ?? {},
111
+ };
112
+ return await Promise.all(pending.map(async ({ sink, key, state }) => {
113
+ const attempt = { ok: false, n: (state?.n ?? 0) + 1, first: state?.first ?? nowIso() };
114
+ writeState(db, key, attempt);
115
+ const result = await deliver(sink, payload);
116
+ writeState(db, key, { ...attempt, ok: result.ok, detail: result.detail?.slice(0, 120) });
117
+ return result;
118
+ }));
119
+ }
120
+ async function deliver(sink, payload) {
121
+ try {
122
+ switch (sink.kind) {
123
+ case 'webhook':
124
+ return await postWebhook(sink.target, payload);
125
+ case 'command':
126
+ return await runCommand(sink.target, sink.args ?? [], payload);
127
+ case 'file':
128
+ fs.mkdirSync(path.dirname(sink.target), { recursive: true });
129
+ fs.appendFileSync(sink.target, `${JSON.stringify(payload)}\n`, 'utf8');
130
+ return { sink: 'file', ok: true };
131
+ }
132
+ }
133
+ catch (error) {
134
+ return { sink: sink.kind, ok: false, detail: error instanceof Error ? error.message : String(error) };
135
+ }
136
+ }
137
+ async function postWebhook(url, payload) {
138
+ const controller = new AbortController();
139
+ // Bounded: a wrap-up is never worth making a developer wait on a dead host.
140
+ const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
141
+ try {
142
+ const response = await fetch(url, {
143
+ method: 'POST',
144
+ headers: { 'content-type': 'application/json' },
145
+ body: JSON.stringify(payload),
146
+ signal: controller.signal,
147
+ });
148
+ return response.ok
149
+ ? { sink: 'webhook', ok: true }
150
+ : { sink: 'webhook', ok: false, detail: `HTTP ${response.status}` };
151
+ }
152
+ finally {
153
+ clearTimeout(timer);
154
+ }
155
+ }
156
+ /**
157
+ * The interesting integrations are all somebody's script — a desktop
158
+ * notification, a line in a journal, a message posted by a CLI that already
159
+ * holds the credentials — so the payload goes to stdin and the command is
160
+ * whatever they wrote. It is their machine and their command; Eklavya adds no
161
+ * shell, so nothing here is expanded or interpreted on the way.
162
+ */
163
+ function runCommand(command, args, payload) {
164
+ return new Promise((resolve) => {
165
+ let settled = false;
166
+ const done = (result) => {
167
+ if (!settled) {
168
+ settled = true;
169
+ resolve(result);
170
+ }
171
+ };
172
+ try {
173
+ const child = spawn(command, args, { stdio: ['pipe', 'ignore', 'ignore'], shell: false });
174
+ const timer = setTimeout(() => {
175
+ child.kill('SIGKILL');
176
+ done({ sink: 'command', ok: false, detail: 'timed out' });
177
+ }, TIMEOUT_MS);
178
+ timer.unref?.();
179
+ child.on('error', (error) => {
180
+ clearTimeout(timer);
181
+ done({ sink: 'command', ok: false, detail: error.message });
182
+ });
183
+ child.on('close', (code) => {
184
+ clearTimeout(timer);
185
+ done(code === 0 ? { sink: 'command', ok: true } : { sink: 'command', ok: false, detail: `exit ${code}` });
186
+ });
187
+ child.stdin.on('error', () => {
188
+ /* A command that closed stdin early is not a failure by itself. */
189
+ });
190
+ child.stdin.end(JSON.stringify(payload));
191
+ }
192
+ catch (error) {
193
+ done({ sink: 'command', ok: false, detail: error instanceof Error ? error.message : String(error) });
194
+ }
195
+ });
196
+ }
197
+ /** The wrap-up a finished session produces, when anything was learned or recorded. */
198
+ export function sessionWrapUp(opts) {
199
+ return {
200
+ // Keyed on the session, so a Stop hook that fires twice sends once.
201
+ id: `session:${opts.sessionId}`,
202
+ kind: 'session_summary',
203
+ project: opts.project,
204
+ title: `Eklavya: session finished in ${path.basename(opts.project)}`,
205
+ body: `${opts.entries} memory entries recorded. ${opts.passed}/${opts.questions} questions answered correctly.`,
206
+ data: { entries: opts.entries, questions: opts.questions, passed: opts.passed, session: opts.sessionId },
207
+ };
208
+ }
209
+ /** The one alert worth interrupting for: capture has stopped and will not restart. */
210
+ export function queuePausedAlert(opts) {
211
+ return {
212
+ id: `queue-paused:${opts.project}:${opts.errorClass}`,
213
+ kind: 'queue_paused',
214
+ project: opts.project,
215
+ title: 'Eklavya: memory processing is paused',
216
+ body: `The observation queue is paused (${opts.errorClass}). ${opts.failed} job(s) will not retry until it is resolved.`,
217
+ data: { error_class: opts.errorClass, failed: opts.failed },
218
+ };
219
+ }
220
+ //# sourceMappingURL=notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/memory/notify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import fs from 'node:fs';
2
+ export const DEFAULT_PRIVACY = {
3
+ excludePaths: [
4
+ '.env',
5
+ '.env.',
6
+ '/.ssh/',
7
+ 'id_rsa',
8
+ 'id_ed25519',
9
+ '.pem',
10
+ '.p12',
11
+ '.keystore',
12
+ 'credentials.json',
13
+ '.netrc',
14
+ '.npmrc',
15
+ 'secrets.',
16
+ '.eklavya/knowledge.db',
17
+ ],
18
+ excludeTools: [],
19
+ redactPatterns: [],
20
+ };
21
+ /** Built-in secret shapes. Each keeps its name so the redaction stays readable. */
22
+ const BUILT_IN = [
23
+ { name: 'private-key', re: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g },
24
+ { name: 'anthropic-key', re: /\bsk-ant-[A-Za-z0-9_-]{16,}/g },
25
+ { name: 'openai-key', re: /\bsk-[A-Za-z0-9]{20,}/g },
26
+ { name: 'github-token', re: /\b(?:ghp|gho|ghu|ghs|ghr|github_pat)_[A-Za-z0-9_]{20,}/g },
27
+ { name: 'aws-key-id', re: /\bAKIA[0-9A-Z]{16}\b/g },
28
+ { name: 'slack-token', re: /\bxox[abprs]-[A-Za-z0-9-]{10,}/g },
29
+ { name: 'google-key', re: /\bAIza[0-9A-Za-z_-]{35}\b/g },
30
+ { name: 'jwt', re: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g },
31
+ { name: 'bearer', re: /\b[Bb]earer\s+[A-Za-z0-9._~+/=-]{16,}/g },
32
+ { name: 'assigned-secret', re: /\b(?:password|passwd|secret|api[_-]?key|token|access[_-]?key)\s*[:=]\s*["']?([^\s"'&;]{6,})["']?/gi },
33
+ ];
34
+ export function redact(text, policy = DEFAULT_PRIVACY) {
35
+ if (!text)
36
+ return { text: '', redacted: false, kinds: [] };
37
+ let out = text;
38
+ const kinds = [];
39
+ for (const { name, re } of BUILT_IN) {
40
+ // A fresh RegExp each call: the module-level ones carry `lastIndex`.
41
+ const pattern = new RegExp(re.source, re.flags);
42
+ if (!pattern.test(out))
43
+ continue;
44
+ pattern.lastIndex = 0;
45
+ kinds.push(name);
46
+ out =
47
+ name === 'assigned-secret'
48
+ ? out.replace(pattern, (m, value) => m.replace(value, '[redacted:secret]'))
49
+ : out.replace(pattern, `[redacted:${name}]`);
50
+ }
51
+ for (const source of policy.redactPatterns) {
52
+ let pattern;
53
+ try {
54
+ pattern = new RegExp(source, 'g');
55
+ }
56
+ catch {
57
+ // An unparseable configured pattern is a configuration error, reported
58
+ // elsewhere. Here it must not take the capture path down.
59
+ continue;
60
+ }
61
+ if (!pattern.test(out))
62
+ continue;
63
+ pattern.lastIndex = 0;
64
+ kinds.push('configured');
65
+ out = out.replace(pattern, '[redacted:configured]');
66
+ }
67
+ return { text: out, redacted: kinds.length > 0, kinds: [...new Set(kinds)] };
68
+ }
69
+ /**
70
+ * True when this path must never be captured at all.
71
+ *
72
+ * Case-insensitive, and it follows a symlink where one exists. Both matter for
73
+ * the same reason: the list is a list of *files*, and a match that depends on
74
+ * how the path happened to be spelled is not an exclusion. On macOS and Windows
75
+ * `/repo/.ENV` is the same file as `/repo/.env`, and `notes.txt -> ../.env` is
76
+ * the same file again by another name.
77
+ *
78
+ * The realpath only runs when the literal comparison has already failed, so the
79
+ * common case costs nothing, and a path that does not exist keeps the answer
80
+ * the literal comparison gave.
81
+ */
82
+ export function pathExcluded(file, policy = DEFAULT_PRIVACY) {
83
+ const matches = (candidate) => {
84
+ const normalised = candidate.replace(/\\/g, '/').toLowerCase();
85
+ return policy.excludePaths.some((fragment) => normalised.includes(fragment.toLowerCase()));
86
+ };
87
+ if (matches(file))
88
+ return true;
89
+ try {
90
+ const resolved = fs.realpathSync(file);
91
+ return resolved !== file && matches(resolved);
92
+ }
93
+ catch {
94
+ // Not on disk, or not readable. The literal answer stands.
95
+ return false;
96
+ }
97
+ }
98
+ export function toolExcluded(tool, policy = DEFAULT_PRIVACY) {
99
+ if (!tool)
100
+ return false;
101
+ return policy.excludeTools.includes(tool);
102
+ }
103
+ /**
104
+ * Eklavya's own traffic, which must never become memory (CAP-02).
105
+ *
106
+ * Without this the tutor's question becomes an observation, the observation
107
+ * becomes a concept candidate, and the candidate becomes another question: a
108
+ * loop that teaches the developer nothing but fills the corpus.
109
+ */
110
+ export function isOwnTraffic(tool, body) {
111
+ if (tool && /^mcp__[a-z_]*eklavya/i.test(tool))
112
+ return true;
113
+ if (tool === 'Bash' && /\beklavya\b/.test(body) && /\bdashboard\b|\bgate\b|\bdoctor\b/.test(body))
114
+ return true;
115
+ return /\[Eklavya checkpoint\]|\[Eklavya\]/.test(body);
116
+ }
117
+ //# sourceMappingURL=privacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy.js","sourceRoot":"","sources":["../../src/memory/privacy.ts"],"names":[],"mappings":"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"}