eklavya 1.18.3 → 1.19.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.
- package/README.md +1 -1
- package/dist/assets/dashboard.html +570 -15
- package/dist/assets/tutor/SKILL.md +5 -5
- package/dist/assets/tutor/references/focus-and-level.md +34 -5
- package/dist/assets/tutor/references/grading.md +1 -1
- package/dist/cli.js +753 -41
- 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 +448 -31
- package/dist/config.js.map +1 -1
- package/dist/dashboard.js +357 -1
- 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 +2 -2
- package/dist/hooks/checkpoint-quiz.js.map +1 -1
- package/dist/hooks/lib.js +4 -30
- 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/pre-tool-gate.js +2 -2
- package/dist/hooks/pre-tool-gate.js.map +1 -1
- package/dist/hooks/prompt-submit-nudge.js +57 -20
- package/dist/hooks/prompt-submit-nudge.js.map +1 -1
- package/dist/hooks/session-start.js +110 -80
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop-quiz-check.js +58 -38
- package/dist/hooks/stop-quiz-check.js.map +1 -1
- package/dist/hooks/subagent-start.js +2 -2
- package/dist/hooks/subagent-start.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/packs.js +26 -12
- package/dist/packs.js.map +1 -1
- package/dist/paths.js +60 -0
- package/dist/paths.js.map +1 -1
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/agents/tutor.md +3 -1
- package/dist/plugin/cli/CLAUDE.md +32 -8
- package/dist/plugin/cli/eklavya-gate +80 -9
- package/dist/plugin/hooks/CLAUDE.md +44 -19
- package/dist/plugin/hooks/hooks.json +10 -0
- package/dist/plugin/scripts/install-git-hook.sh +2 -1
- package/dist/plugin/skills/CLAUDE.md +29 -17
- package/dist/plugin/skills/gate/SKILL.md +1 -1
- package/dist/plugin/skills/level/SKILL.md +3 -3
- package/dist/plugin/skills/memory/SKILL.md +88 -0
- package/dist/plugin/skills/mode/SKILL.md +24 -16
- package/dist/plugin/skills/pack/SKILL.md +8 -4
- package/dist/plugin/skills/progress/SKILL.md +1 -1
- package/dist/plugin/skills/quiz/SKILL.md +2 -2
- package/dist/plugin/skills/setup/SKILL.md +25 -11
- package/dist/plugin/skills/tutor/SKILL.md +5 -5
- package/dist/plugin/skills/tutor/references/focus-and-level.md +34 -5
- package/dist/plugin/skills/tutor/references/grading.md +1 -1
- package/dist/session.js +1 -1
- package/dist/statusline.js +20 -6
- package/dist/statusline.js.map +1 -1
- package/dist/store.js +2 -2
- package/dist/store.js.map +1 -1
- package/dist/surface.js +1 -1
- 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 +165 -32
- package/dist/tools/config_tools.js.map +1 -1
- package/dist/tools/get_learner_profile.js +2 -1
- package/dist/tools/get_learner_profile.js.map +1 -1
- package/dist/tools/get_session_quiz_plan.js +15 -9
- package/dist/tools/get_session_quiz_plan.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/tools/types.js +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/user-skill/eklavya/SKILL.md +95 -25
- 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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"}
|