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.
- package/dist/assets/dashboard.html +559 -14
- package/dist/assets/tutor/references/focus-and-level.md +29 -0
- package/dist/cli.js +648 -20
- package/dist/cli.js.map +1 -1
- package/dist/config-path.js +156 -0
- package/dist/config-path.js.map +1 -0
- package/dist/config.js +231 -2
- package/dist/config.js.map +1 -1
- package/dist/dashboard.js +355 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/eval/retrieval-score.js +77 -0
- package/dist/eval/retrieval-score.js.map +1 -0
- package/dist/hooks/capture-tool.js +107 -0
- package/dist/hooks/capture-tool.js.map +1 -0
- package/dist/hooks/checkpoint-quiz.js +5 -6
- package/dist/hooks/checkpoint-quiz.js.map +1 -1
- package/dist/hooks/lib.js +7 -33
- package/dist/hooks/lib.js.map +1 -1
- package/dist/hooks/memory-lib.js +181 -0
- package/dist/hooks/memory-lib.js.map +1 -0
- package/dist/hooks/prompt-submit-nudge.js +56 -20
- package/dist/hooks/prompt-submit-nudge.js.map +1 -1
- package/dist/hooks/session-start.js +73 -74
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop-quiz-check.js +44 -7
- package/dist/hooks/stop-quiz-check.js.map +1 -1
- package/dist/install.js +37 -0
- package/dist/install.js.map +1 -1
- package/dist/memory/capture.js +123 -0
- package/dist/memory/capture.js.map +1 -0
- package/dist/memory/code.js +186 -0
- package/dist/memory/code.js.map +1 -0
- package/dist/memory/collections.js +87 -0
- package/dist/memory/collections.js.map +1 -0
- package/dist/memory/embed.js +81 -0
- package/dist/memory/embed.js.map +1 -0
- package/dist/memory/hosts.js +71 -0
- package/dist/memory/hosts.js.map +1 -0
- package/dist/memory/identity.js +74 -0
- package/dist/memory/identity.js.map +1 -0
- package/dist/memory/import.js +916 -0
- package/dist/memory/import.js.map +1 -0
- package/dist/memory/learning.js +148 -0
- package/dist/memory/learning.js.map +1 -0
- package/dist/memory/notify.js +220 -0
- package/dist/memory/notify.js.map +1 -0
- package/dist/memory/privacy.js +117 -0
- package/dist/memory/privacy.js.map +1 -0
- package/dist/memory/provider.js +155 -0
- package/dist/memory/provider.js.map +1 -0
- package/dist/memory/recall.js +327 -0
- package/dist/memory/recall.js.map +1 -0
- package/dist/memory/replay.js +174 -0
- package/dist/memory/replay.js.map +1 -0
- package/dist/memory/search.js +143 -0
- package/dist/memory/search.js.map +1 -0
- package/dist/memory/spool.js +93 -0
- package/dist/memory/spool.js.map +1 -0
- package/dist/memory/store.js +399 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/summarize.js +178 -0
- package/dist/memory/summarize.js.map +1 -0
- package/dist/memory/sync.js +595 -0
- package/dist/memory/sync.js.map +1 -0
- package/dist/memory/tokens.js +55 -0
- package/dist/memory/tokens.js.map +1 -0
- package/dist/memory/worker.js +207 -0
- package/dist/memory/worker.js.map +1 -0
- package/dist/migrations/009_memory.sql +226 -0
- package/dist/migrations/010_import.sql +26 -0
- package/dist/migrations/011_sync.sql +76 -0
- package/dist/migrations/012_job_backoff.sql +13 -0
- package/dist/migrations/013_batch_provenance.sql +18 -0
- package/dist/migrations/014_batch_events_index.sql +18 -0
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/agents/tutor.md +3 -1
- package/dist/plugin/hooks/CLAUDE.md +30 -6
- package/dist/plugin/hooks/hooks.json +10 -0
- package/dist/plugin/skills/CLAUDE.md +17 -7
- package/dist/plugin/skills/memory/SKILL.md +88 -0
- package/dist/plugin/skills/setup/SKILL.md +16 -2
- package/dist/plugin/skills/tutor/references/focus-and-level.md +29 -0
- package/dist/time.js +41 -0
- package/dist/time.js.map +1 -0
- package/dist/tools/code_tools.js +73 -0
- package/dist/tools/code_tools.js.map +1 -0
- package/dist/tools/collection_tools.js +92 -0
- package/dist/tools/collection_tools.js.map +1 -0
- package/dist/tools/config_tools.js +104 -1
- package/dist/tools/config_tools.js.map +1 -1
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory_read_tools.js +277 -0
- package/dist/tools/memory_read_tools.js.map +1 -0
- package/dist/tools/memory_write_tools.js +115 -0
- package/dist/tools/memory_write_tools.js.map +1 -0
- package/dist/user-skill/eklavya/SKILL.md +64 -8
- 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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"}
|