@nxuss/lemma 1.41.0 β†’ 1.43.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 (59) hide show
  1. package/README.md +19 -1
  2. package/bin/brain-ingest.js +42 -6
  3. package/bin/doctor.js +2 -1
  4. package/bin/init.js +1 -1
  5. package/dist/cjs/cli/hostHooks.d.ts +13 -1
  6. package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
  7. package/dist/cjs/cli/hostHooks.js +24 -4
  8. package/dist/cjs/cli/hostHooks.js.map +1 -1
  9. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  10. package/dist/cjs/mcp/tools/memory.js +30 -7
  11. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  12. package/dist/cjs/security/SemanticScrubber.d.ts +6 -0
  13. package/dist/cjs/security/SemanticScrubber.d.ts.map +1 -1
  14. package/dist/cjs/security/SemanticScrubber.js +20 -12
  15. package/dist/cjs/security/SemanticScrubber.js.map +1 -1
  16. package/dist/cjs/subconscious/HostRecall.d.ts +14 -0
  17. package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
  18. package/dist/cjs/subconscious/HostRecall.js +32 -0
  19. package/dist/cjs/subconscious/HostRecall.js.map +1 -1
  20. package/dist/cjs/subconscious/LeakWatch.d.ts +21 -0
  21. package/dist/cjs/subconscious/LeakWatch.d.ts.map +1 -0
  22. package/dist/cjs/subconscious/LeakWatch.js +93 -0
  23. package/dist/cjs/subconscious/LeakWatch.js.map +1 -0
  24. package/dist/cjs/subconscious/TheBrainV2.d.ts +7 -0
  25. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  26. package/dist/cjs/subconscious/TheBrainV2.js +25 -0
  27. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  28. package/dist/cjs/utils/SessionCapture.d.ts +13 -2
  29. package/dist/cjs/utils/SessionCapture.d.ts.map +1 -1
  30. package/dist/cjs/utils/SessionCapture.js +71 -10
  31. package/dist/cjs/utils/SessionCapture.js.map +1 -1
  32. package/dist/esm/cli/hostHooks.d.ts +13 -1
  33. package/dist/esm/cli/hostHooks.d.ts.map +1 -1
  34. package/dist/esm/cli/hostHooks.js +23 -3
  35. package/dist/esm/cli/hostHooks.js.map +1 -1
  36. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  37. package/dist/esm/mcp/tools/memory.js +30 -7
  38. package/dist/esm/mcp/tools/memory.js.map +1 -1
  39. package/dist/esm/security/SemanticScrubber.d.ts +6 -0
  40. package/dist/esm/security/SemanticScrubber.d.ts.map +1 -1
  41. package/dist/esm/security/SemanticScrubber.js +19 -11
  42. package/dist/esm/security/SemanticScrubber.js.map +1 -1
  43. package/dist/esm/subconscious/HostRecall.d.ts +14 -0
  44. package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
  45. package/dist/esm/subconscious/HostRecall.js +31 -2
  46. package/dist/esm/subconscious/HostRecall.js.map +1 -1
  47. package/dist/esm/subconscious/LeakWatch.d.ts +21 -0
  48. package/dist/esm/subconscious/LeakWatch.d.ts.map +1 -0
  49. package/dist/esm/subconscious/LeakWatch.js +86 -0
  50. package/dist/esm/subconscious/LeakWatch.js.map +1 -0
  51. package/dist/esm/subconscious/TheBrainV2.d.ts +7 -0
  52. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  53. package/dist/esm/subconscious/TheBrainV2.js +25 -0
  54. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  55. package/dist/esm/utils/SessionCapture.d.ts +13 -2
  56. package/dist/esm/utils/SessionCapture.d.ts.map +1 -1
  57. package/dist/esm/utils/SessionCapture.js +70 -10
  58. package/dist/esm/utils/SessionCapture.js.map +1 -1
  59. package/package.json +1 -1
package/README.md CHANGED
@@ -29,6 +29,15 @@ That's it: your agent now has Lemma's tools. The dashboard opens at `http://loca
29
29
 
30
30
  ## Why Lemma
31
31
 
32
+ | Where coding agents fail | What Lemma does about it |
33
+ | :--- | :--- |
34
+ | Last week's fix is in a note, and the code it describes has changed since. | The memory comes back **stale**, with the diff, instead of confidently wrong. |
35
+ | Two notes disagree and nobody notices. | Storing warns when another memory answers the same question differently or reaches the opposite outcome on the same symbol. |
36
+ | "Continue where we left off" has nothing to continue from. | The session leaves a hand-off built from the transcript and git: the task as given, the files changed, the last test run (Pro). |
37
+ | The same red test is debugged twice. | A red β†’ green run is saved as `fix: <the error>` with its diff, and recalled when the error returns. |
38
+ | A native `cat .env` puts a live key in the conversation. | Lemma's own reads and commands mask it; for the host's native tools, a hook names the kind of secret and tells the agent not to repeat it (it cannot rewrite what the host already showed). |
39
+ | You can't tell what the tool costs you. | The dashboard shows what Lemma saved **and** what it spent, net. |
40
+
32
41
  **🧠 A memory that knows when it's out of date.** The Brain stores fixes, decisions and context
33
42
  in a local index (BM25, no embeddings service, no cloud). Every memory is tied to the files and
34
43
  symbols it's about, so when the code changes it comes back **stale** instead of confidently
@@ -43,6 +52,15 @@ finished it in 3 of 3 runs, Claude Code's built-in memory in 1 of 3 and another
43
52
  cells, one model, our own benchmark: a lead, not a proof). It costs more per task, not less, because the agent
44
53
  does the work the others skip.
45
54
 
55
+ **β†ͺ …and the compaction (Pro, Claude Code only).** When Claude Code compacts a long conversation, a `PreCompact` hook
56
+ saves the same hand-off first, and the `SessionStart` that follows puts its content (the plan exactly as it was given,
57
+ the files, the last run) back in context, not a pointer to it. The agent has the plan in front of it without going
58
+ back to the session transcript: in `bench/compaction` the agents with the hook finished the task in 15 of 15 runs
59
+ (Sonnet and Haiku), the Haiku ones without a single trip back to the transcript, and where the transcript could not be
60
+ read it was 5 of 5 against 2 of 5 without the hook (n=5 per arm). It never blocks the compaction: it prints nothing,
61
+ always exits 0 and takes about 0.1 s on a 1.5 MB transcript. Claude Code only; the other clients have no
62
+ pre-compaction event, so nothing is installed for them.
63
+
46
64
  **✍️ It fills itself.** A test, build or lint command that goes red β†’ green is saved as
47
65
  `fix: <the error>` with the diff that fixed it. Commits become memories. Next time the same
48
66
  error shows up, the agent is pointed at the fix β€” through hooks in Claude Code, Codex, Cursor
@@ -115,7 +133,7 @@ After `npm install -g @nxuss/lemma` and reconnecting the MCP server, a project t
115
133
  | | Comes with the upgrade | Needs `lemma init` again |
116
134
  | :--- | :---: | :---: |
117
135
  | New and fixed tool behaviour (freshness checks, the diff shown on a STALE memory, the hand-off logic) | βœ… | |
118
- | Missing Claude Code hooks (`SessionStart`, prompt recall, the note before an edit, `SessionEnd`), added at the next MCP start | βœ… | |
136
+ | Missing Claude Code hooks (`SessionStart`, prompt recall, the note before an edit, `SessionEnd`, `PreCompact`), added at the next MCP start | βœ… | |
119
137
  | Agent rules in `CLAUDE.md` / `AGENTS.md` (when to search, store and leave a hand-off) | | βœ… |
120
138
  | Pre-approved read and memory tool permissions (otherwise the agent is asked each time) | | βœ… |
121
139
  | Hooks and config for Codex, Cursor, OpenCode, Windsurf and Kiro | | βœ… |
@@ -15,9 +15,11 @@
15
15
  *
16
16
  * Usage: lemma-brain-ingest [projectRoot] [--commits [--max N]] [--changelog] [--team-pull]
17
17
  * lemma-brain-ingest --hook-result [--host=claude|codex|cursor|opencode] < payload.json
18
+ * lemma-brain-ingest --hook-failure < payload.json (PostToolUseFailure: only the leak warning)
18
19
  * lemma-brain-ingest --prompt-submit < payload.json
19
20
  * lemma-brain-ingest --pre-tool < payload.json
20
21
  * lemma-brain-ingest --session-end < payload.json
22
+ * lemma-brain-ingest --pre-compact < payload.json (PreCompact: saves the hand-off; prints nothing, never blocks)
21
23
  *
22
24
  * --team-pull Import the repo's shared memories from .lemma-brain/ (post-merge/post-checkout).
23
25
  * --hook-result Read a host PostToolUse hook payload on stdin (Claude Code shape) and:
@@ -68,10 +70,11 @@ async function reportOffered(dist, root, notes) {
68
70
 
69
71
  async function hookResult(args) {
70
72
  const dist = path.join(__dirname, '..', 'dist', 'cjs');
71
- let recordHookPayload, hookRecall, normalizeHostPayload, formatHostOutput, parseHost;
73
+ let recordHookPayload, hookRecall, leakNote, normalizeHostPayload, formatHostOutput, parseHost;
72
74
  try {
73
75
  ({ recordHookPayload } = require(path.join(dist, 'utils', 'FixCapture.js')));
74
76
  ({ hookRecall } = require(path.join(dist, 'subconscious', 'HostRecall.js')));
77
+ ({ leakNote } = require(path.join(dist, 'subconscious', 'LeakWatch.js')));
75
78
  ({ normalizeHostPayload, formatHostOutput, parseHost } = require(path.join(dist, 'subconscious', 'HostAdapters.js')));
76
79
  } catch {
77
80
  return; // no build β€” a hook must stay silent and harmless
@@ -84,14 +87,32 @@ async function hookResult(args) {
84
87
  } catch {
85
88
  return;
86
89
  }
90
+ // PostToolUseFailure (a command that exited non-zero) carries the output in `error`, with no tool_response. It only
91
+ // feeds the leak warning: a failing run that dumps its environment is the likeliest way a secret reaches the model.
92
+ const failure = args.includes('--hook-failure');
93
+ if (failure) {
94
+ if (!raw || typeof raw.error !== 'string' || raw.tool_name !== 'Bash') return;
95
+ raw = { ...raw, tool_response: { output: raw.error, exit_code: 1, interrupted: raw.is_interrupt === true } };
96
+ }
87
97
  const notes = [];
88
98
  const recalled = [];
89
99
  let root;
90
100
  for (const payload of normalizeHostPayload(host, raw)) {
101
+ if (failure) {
102
+ try {
103
+ const leak = leakNote(payload, payload.cwd);
104
+ if (leak && !notes.includes(leak)) notes.push(leak);
105
+ } catch { /* a warning failing must not fail the hook */ }
106
+ continue;
107
+ }
91
108
  try {
92
109
  const res = recordHookPayload(payload, payload.cwd);
93
110
  if (res && res.captured) console.error(res.note.trim());
94
111
  } catch { /* capture failing must not cost the recall below */ }
112
+ try {
113
+ const leak = leakNote(payload, payload.cwd); // a native tool printed a credential: warn, never echo it
114
+ if (leak && !notes.includes(leak)) notes.push(leak);
115
+ } catch { /* a warning failing must not cost the recall below */ }
95
116
  const recall = hookRecall(payload, payload.cwd);
96
117
  if (recall && !notes.includes(recall.text)) {
97
118
  notes.push(recall.text);
@@ -99,7 +120,7 @@ async function hookResult(args) {
99
120
  root = root || payload.cwd;
100
121
  }
101
122
  }
102
- const out = formatHostOutput(host, notes.join('\n'));
123
+ const out = formatHostOutput(host, notes.join('\n'), failure ? 'PostToolUseFailure' : 'PostToolUse');
103
124
  if (out) process.stdout.write(out);
104
125
  await reportOffered(dist, root, recalled);
105
126
  }
@@ -152,9 +173,9 @@ async function preTool() {
152
173
  // before the first prompt β€” no tool call for the agent to remember or skip.
153
174
  async function sessionStart() {
154
175
  const dist = path.join(__dirname, '..', 'dist', 'cjs');
155
- let sessionRecall, formatHostOutput;
176
+ let sessionRecall, compactRecall, formatHostOutput;
156
177
  try {
157
- ({ sessionRecall } = require(path.join(dist, 'subconscious', 'HostRecall.js')));
178
+ ({ sessionRecall, compactRecall } = require(path.join(dist, 'subconscious', 'HostRecall.js')));
158
179
  ({ formatHostOutput } = require(path.join(dist, 'subconscious', 'HostAdapters.js')));
159
180
  } catch {
160
181
  return;
@@ -174,7 +195,8 @@ async function sessionStart() {
174
195
  } catch {
175
196
  // the reminder is a courtesy; the briefing must still go out
176
197
  }
177
- const recall = sessionRecall(payload, payload.cwd);
198
+ // After a compaction the hand-off's content goes back in; any other start (or no hand-off) is the usual briefing.
199
+ const recall = (payload.source === 'compact' && compactRecall(payload, payload.cwd)) || sessionRecall(payload, payload.cwd);
178
200
  const out = formatHostOutput('claude', recall ? recall.text : '', 'SessionStart');
179
201
  if (out) process.stdout.write(out);
180
202
  await reportOffered(dist, payload.cwd, [recall]);
@@ -194,13 +216,27 @@ async function sessionEnd() {
194
216
  captureSession(payload, payload.cwd);
195
217
  }
196
218
 
219
+ // PreCompact hook (Claude Code): save the hand-off before the host compacts. It must never block the
220
+ // compaction (exit 0, no decision, no stdout) and never be the slow part of it.
221
+ async function preCompact() {
222
+ try {
223
+ const dist = path.join(__dirname, '..', 'dist', 'cjs');
224
+ const payload = JSON.parse(readStdin()) || {};
225
+ const { captureSession } = require(path.join(dist, 'utils', 'SessionCapture.js'));
226
+ captureSession(payload, payload.cwd, undefined, { preCompact: true });
227
+ } catch {
228
+ // no build, no payload, no transcript: the compaction goes ahead untouched
229
+ }
230
+ }
231
+
197
232
  async function main() {
198
233
  const args = process.argv.slice(2);
234
+ if (args.includes('--pre-compact')) return preCompact();
199
235
  if (args.includes('--session-end')) return sessionEnd();
200
236
  if (args.includes('--session-start')) return sessionStart();
201
237
  if (args.includes('--prompt-submit')) return promptSubmit();
202
238
  if (args.includes('--pre-tool')) return preTool();
203
- if (args.includes('--hook-result')) return hookResult(args);
239
+ if (args.includes('--hook-result') || args.includes('--hook-failure')) return hookResult(args);
204
240
  const maxIndex = args.indexOf('--max');
205
241
  const maxCommits = maxIndex >= 0 ? parseInt(args[maxIndex + 1], 10) : undefined;
206
242
  const includeChangelog = args.includes('--changelog');
package/bin/doctor.js CHANGED
@@ -133,8 +133,9 @@ async function main() {
133
133
  ['PostToolUse', 'lemma-brain-ingest --hook-result'],
134
134
  ['UserPromptSubmit', 'lemma-brain-ingest --prompt-submit'],
135
135
  ['SessionStart', 'lemma-brain-ingest --session-start'],
136
+ ['PreCompact', 'lemma-brain-ingest --pre-compact'],
136
137
  ].filter(([, mark]) => !hooksText.includes(mark)).map(([event]) => event);
137
- if (missing.length === 0) ok('Claude Code hooks current (PostToolUse, UserPromptSubmit, SessionStart)');
138
+ if (missing.length === 0) ok('Claude Code hooks current (PostToolUse, UserPromptSubmit, SessionStart, PreCompact)');
138
139
  else warn(`Claude Code hooks missing: ${missing.join(', ')} β€” re-run \`lemma init\` (or restart the MCP server: it repairs an existing install)`);
139
140
 
140
141
  const allow = (claudeSettings.permissions && claudeSettings.permissions.allow) || [];
package/bin/init.js CHANGED
@@ -289,7 +289,7 @@ El servidor MCP \`lemma\` recuerda entre sesiones y avisa cuando el cΓ³digo del
289
289
  - Un aviso 🧠 nombra memorias β†’ \`mcp__lemma__get_memory\` de la primera.
290
290
  - Un fix quedΓ³ verificado (tests pasan) β†’ \`mcp__lemma__store_memory\` con \`filePaths\`: la causa raΓ­z o la trampa, no un resumen del cambio.
291
291
  - Terminas una sesiΓ³n con trabajo a medias o por partes β†’ \`store_memory\` (o \`update_memory\` si ya hay una) con lo HECHO, lo PENDIENTE y los nombres/firmas exactos de lo especificado; no resumas la especificaciΓ³n.
292
- - Una memoria quedΓ³ desactualizada β†’ \`update_memory\` (o \`forget_memory\`); no guardes otra al lado.
292
+ - Una memoria quedΓ³ desactualizada β†’ \`update_memory\` (o \`forget_memory\`); no guardes otra al lado. Para aΓ±adir a una memoria larga (un Γ­ndice vivo) usa \`append\`; para corregir un pasaje, \`patch\` \`{find, replace}\`; \`response\` reescribe todo y exige \`get_memory\` antes.
293
293
  - Tests, build o lint con salida larga β†’ \`mcp__lemma__run_workspace_command\`: devuelve los fallos y el resumen; el resto se abre con \`output_region\`.
294
294
  - CΓ³digo que aΓΊn no ubicaste o que puede tener secretos β†’ \`search_workspace\` / \`read_workspace_file\`.
295
295
 
@@ -4,7 +4,7 @@
4
4
  * FixCapture). Without them the Brain only ever saw Lemma's MCP tools β€” and agents mostly read,
5
5
  * edit and test with their native ones.
6
6
  *
7
- * - Claude Code β€” `.claude/settings.local.json` PostToolUse + UserPromptSubmit + SessionStart (personal, never the team's
7
+ * - Claude Code β€” `.claude/settings.local.json` PostToolUse + UserPromptSubmit + SessionStart + PreCompact (personal, never the team's
8
8
  * versioned settings.json; gitignored if the repo doesn't ignore it yet).
9
9
  * - Codex β€” `~/.codex/hooks.json` PostToolUse, same format as Claude Code.
10
10
  * - Cursor β€” `~/.cursor/hooks.json` postToolUse + postToolUseFailure.
@@ -31,6 +31,18 @@ export declare const CLAUDE_PRE_TOOL_MATCHER = "Edit|MultiEdit|Write|NotebookEdi
31
31
  export declare const CLAUDE_SESSION_HOOK_COMMAND = "command -v lemma-brain-ingest >/dev/null 2>&1 && lemma-brain-ingest --session-start || true";
32
32
  /** SessionEnd: a session that stored nothing still leaves its closing answer β€” see SessionCapture. */
33
33
  export declare const CLAUDE_SESSION_END_HOOK_COMMAND = "command -v lemma-brain-ingest >/dev/null 2>&1 && lemma-brain-ingest --session-end || true";
34
+ /**
35
+ * PreCompact: save the hand-off before the host compacts; SessionStart(compact) puts it back β€” see SessionCapture.
36
+ * Claude Code only: no other host has a verified pre-compaction event. The hook prints nothing and always exits 0,
37
+ * so it can never block the compaction.
38
+ */
39
+ export declare const CLAUDE_PRE_COMPACT_HOOK_COMMAND = "command -v lemma-brain-ingest >/dev/null 2>&1 && lemma-brain-ingest --pre-compact || true";
40
+ /**
41
+ * PostToolUseFailure (Bash): Claude Code sends a command that exits non-zero here and NOT to PostToolUse, so
42
+ * a failing run that dumps its environment never reached the leak warning. Only the warning is wired to it.
43
+ */
44
+ export declare const CLAUDE_FAILURE_HOOK_COMMAND = "command -v lemma-brain-ingest >/dev/null 2>&1 && lemma-brain-ingest --hook-failure || true";
45
+ export declare const CLAUDE_FAILURE_MATCHER = "Bash";
34
46
  export declare const CLAUDE_HOOK_MATCHER = "Bash|Read|Edit|MultiEdit|Write|NotebookEdit";
35
47
  export declare const CODEX_HOOK_MATCHER = "Bash|apply_patch|Edit|Write";
36
48
  export declare const CURSOR_POST_MATCHER = "Read|Shell|Write";
@@ -1 +1 @@
1
- {"version":3,"file":"hostHooks.d.ts","sourceRoot":"","sources":["../../../src/cli/hostHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAaH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAGvE;AAED,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,0FAA0F;AAC1F,eAAO,MAAM,0BAA0B,gGAA4E,CAAC;AACpH,uGAAuG;AACvG,eAAO,MAAM,4BAA4B,2FAA8E,CAAC;AACxH,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,4FAA4F;AAC5F,eAAO,MAAM,2BAA2B,gGAA6E,CAAC;AACtH,sGAAsG;AACtG,eAAO,MAAM,+BAA+B,8FAAiF,CAAC;AAC9H,eAAO,MAAM,mBAAmB,gDAAgD,CAAC;AACjF,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAChE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,UAWD,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA6FD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,kBAAkB,CAwB3H;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAEjF;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAkClF;AAID;;;;;GAKG;AACH,eAAO,MAAM,eAAe,szCA0B3B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAYrF;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtD,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,EAAE,IAAI,GAAE,MAAqB,GAAG,cAAc,EAAE,CAO3G;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,kBAAkB,GAAG,IAAI,CAWxF"}
1
+ {"version":3,"file":"hostHooks.d.ts","sourceRoot":"","sources":["../../../src/cli/hostHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAeH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAGvE;AAED,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,0FAA0F;AAC1F,eAAO,MAAM,0BAA0B,gGAA4E,CAAC;AACpH,uGAAuG;AACvG,eAAO,MAAM,4BAA4B,2FAA8E,CAAC;AACxH,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,4FAA4F;AAC5F,eAAO,MAAM,2BAA2B,gGAA6E,CAAC;AACtH,sGAAsG;AACtG,eAAO,MAAM,+BAA+B,8FAAiF,CAAC;AAC9H;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,8FAAiF,CAAC;AAC9H;;;GAGG;AACH,eAAO,MAAM,2BAA2B,+FAA6E,CAAC;AACtH,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,mBAAmB,gDAAgD,CAAC;AACjF,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAChE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,UAWD,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA6FD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,kBAAkB,CA4B3H;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAEjF;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAkClF;AAID;;;;;GAKG;AACH,eAAO,MAAM,eAAe,szCA0B3B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,MAAqB,GAAG,kBAAkB,CAYrF;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtD,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,EAAE,IAAI,GAAE,MAAqB,GAAG,cAAc,EAAE,CAO3G;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,kBAAkB,GAAG,IAAI,CAWxF"}
@@ -5,7 +5,7 @@
5
5
  * FixCapture). Without them the Brain only ever saw Lemma's MCP tools β€” and agents mostly read,
6
6
  * edit and test with their native ones.
7
7
  *
8
- * - Claude Code β€” `.claude/settings.local.json` PostToolUse + UserPromptSubmit + SessionStart (personal, never the team's
8
+ * - Claude Code β€” `.claude/settings.local.json` PostToolUse + UserPromptSubmit + SessionStart + PreCompact (personal, never the team's
9
9
  * versioned settings.json; gitignored if the repo doesn't ignore it yet).
10
10
  * - Codex β€” `~/.codex/hooks.json` PostToolUse, same format as Claude Code.
11
11
  * - Cursor β€” `~/.cursor/hooks.json` postToolUse + postToolUseFailure.
@@ -25,7 +25,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  return (mod && mod.__esModule) ? mod : { "default": mod };
26
26
  };
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.OPENCODE_PLUGIN = exports.CLAUDE_ALLOWED_TOOLS = exports.CURSOR_FAILURE_MATCHER = exports.CURSOR_POST_MATCHER = exports.CODEX_HOOK_MATCHER = exports.CLAUDE_HOOK_MATCHER = exports.CLAUDE_SESSION_END_HOOK_COMMAND = exports.CLAUDE_SESSION_HOOK_COMMAND = exports.CLAUDE_PRE_TOOL_MATCHER = exports.CLAUDE_PRE_TOOL_HOOK_COMMAND = exports.CLAUDE_PROMPT_HOOK_COMMAND = exports.CLAUDE_HOOK_COMMAND = void 0;
28
+ exports.OPENCODE_PLUGIN = exports.CLAUDE_ALLOWED_TOOLS = exports.CURSOR_FAILURE_MATCHER = exports.CURSOR_POST_MATCHER = exports.CODEX_HOOK_MATCHER = exports.CLAUDE_HOOK_MATCHER = exports.CLAUDE_FAILURE_MATCHER = exports.CLAUDE_FAILURE_HOOK_COMMAND = exports.CLAUDE_PRE_COMPACT_HOOK_COMMAND = exports.CLAUDE_SESSION_END_HOOK_COMMAND = exports.CLAUDE_SESSION_HOOK_COMMAND = exports.CLAUDE_PRE_TOOL_MATCHER = exports.CLAUDE_PRE_TOOL_HOOK_COMMAND = exports.CLAUDE_PROMPT_HOOK_COMMAND = exports.CLAUDE_HOOK_COMMAND = void 0;
29
29
  exports.hookCommand = hookCommand;
30
30
  exports.installClaudeHooks = installClaudeHooks;
31
31
  exports.installCodexHooks = installCodexHooks;
@@ -42,6 +42,8 @@ const PROMPT_MARK = 'lemma-brain-ingest --prompt-submit';
42
42
  const PRE_TOOL_MARK = 'lemma-brain-ingest --pre-tool';
43
43
  const SESSION_MARK = 'lemma-brain-ingest --session-start';
44
44
  const SESSION_END_MARK = 'lemma-brain-ingest --session-end';
45
+ const PRE_COMPACT_MARK = 'lemma-brain-ingest --pre-compact';
46
+ const FAILURE_MARK = 'lemma-brain-ingest --hook-failure';
45
47
  function hookCommand(host) {
46
48
  const flag = host === 'claude' ? '' : ` --host=${host}`;
47
49
  return `command -v lemma-brain-ingest >/dev/null 2>&1 && ${HOOK_MARK}${flag} || true`;
@@ -56,6 +58,18 @@ exports.CLAUDE_PRE_TOOL_MATCHER = 'Edit|MultiEdit|Write|NotebookEdit';
56
58
  exports.CLAUDE_SESSION_HOOK_COMMAND = `command -v lemma-brain-ingest >/dev/null 2>&1 && ${SESSION_MARK} || true`;
57
59
  /** SessionEnd: a session that stored nothing still leaves its closing answer β€” see SessionCapture. */
58
60
  exports.CLAUDE_SESSION_END_HOOK_COMMAND = `command -v lemma-brain-ingest >/dev/null 2>&1 && ${SESSION_END_MARK} || true`;
61
+ /**
62
+ * PreCompact: save the hand-off before the host compacts; SessionStart(compact) puts it back β€” see SessionCapture.
63
+ * Claude Code only: no other host has a verified pre-compaction event. The hook prints nothing and always exits 0,
64
+ * so it can never block the compaction.
65
+ */
66
+ exports.CLAUDE_PRE_COMPACT_HOOK_COMMAND = `command -v lemma-brain-ingest >/dev/null 2>&1 && ${PRE_COMPACT_MARK} || true`;
67
+ /**
68
+ * PostToolUseFailure (Bash): Claude Code sends a command that exits non-zero here and NOT to PostToolUse, so
69
+ * a failing run that dumps its environment never reached the leak warning. Only the warning is wired to it.
70
+ */
71
+ exports.CLAUDE_FAILURE_HOOK_COMMAND = `command -v lemma-brain-ingest >/dev/null 2>&1 && ${FAILURE_MARK} || true`;
72
+ exports.CLAUDE_FAILURE_MATCHER = 'Bash';
59
73
  exports.CLAUDE_HOOK_MATCHER = 'Bash|Read|Edit|MultiEdit|Write|NotebookEdit';
60
74
  exports.CODEX_HOOK_MATCHER = 'Bash|apply_patch|Edit|Write';
61
75
  exports.CURSOR_POST_MATCHER = 'Read|Shell|Write';
@@ -184,12 +198,18 @@ function installClaudeHooks(cwd = process.cwd(), options = {}) {
184
198
  const sessionEnd = mergeMatcherHooks(file, 'SessionEnd', undefined, exports.CLAUDE_SESSION_END_HOOK_COMMAND, SESSION_END_MARK);
185
199
  if (sessionEnd.status === 'manual')
186
200
  return sessionEnd;
201
+ const preCompact = mergeMatcherHooks(file, 'PreCompact', undefined, exports.CLAUDE_PRE_COMPACT_HOOK_COMMAND, PRE_COMPACT_MARK);
202
+ if (preCompact.status === 'manual')
203
+ return preCompact;
204
+ const failure = mergeMatcherHooks(file, 'PostToolUseFailure', exports.CLAUDE_FAILURE_MATCHER, exports.CLAUDE_FAILURE_HOOK_COMMAND, FAILURE_MARK);
205
+ if (failure.status === 'manual')
206
+ return failure;
187
207
  // The permission grant is only for an explicit init: repairClaudeHooks runs on every MCP start
188
208
  // and must not widen what the user's agent may do without asking.
189
209
  const perms = options.permissions === false ? null : mergeClaudePermissions(file);
190
210
  const gitignored = ensureClaudeLocalIgnored(cwd);
191
211
  // All new β†’ a fresh install. Extending a project that already had some of them is an update.
192
- const parts = [post.status, pre.status, prompt.status, session.status, sessionEnd.status];
212
+ const parts = [post.status, pre.status, prompt.status, session.status, sessionEnd.status, failure.status, preCompact.status];
193
213
  const status = parts.every((x) => x === 'unchanged') && perms?.status !== 'updated'
194
214
  ? 'unchanged'
195
215
  : parts.every((x) => x === 'installed')
@@ -322,7 +342,7 @@ function repairClaudeHooks(cwd = process.cwd()) {
322
342
  catch {
323
343
  return null;
324
344
  }
325
- if (![HOOK_MARK, PROMPT_MARK, PRE_TOOL_MARK, SESSION_MARK, SESSION_END_MARK].some((mark) => text.includes(mark)))
345
+ if (![HOOK_MARK, PROMPT_MARK, PRE_TOOL_MARK, SESSION_MARK, SESSION_END_MARK, FAILURE_MARK, PRE_COMPACT_MARK].some((mark) => text.includes(mark)))
326
346
  return null;
327
347
  const outcome = installClaudeHooks(cwd, { permissions: false });
328
348
  return outcome.status === 'unchanged' || outcome.status === 'manual' ? null : outcome;
@@ -1 +1 @@
1
- {"version":3,"file":"hostHooks.js","sourceRoot":"","sources":["../../../src/cli/hostHooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hostHooks.js","sourceRoot":"","sources":["../../../src/cli/hostHooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAShE,eAAO,MAAM,uBAAuB,EAAE,cAAc,EAyVnD,CAAC;AAyUF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOvD;AAgoBD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAiB5D,CAAC"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAShE,eAAO,MAAM,uBAAuB,EAAE,cAAc,EAgWnD,CAAC;AAmVF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOvD;AAuoBD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAiB5D,CAAC"}
@@ -161,13 +161,20 @@ exports.MEMORY_TOOL_DEFINITIONS = [
161
161
  {
162
162
  name: "update_memory",
163
163
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
164
- description: "Rewrite a memory in place, keeping its id, hits, downvotes and derivedFrom edges β€” the way to correct or extend one (store_memory mints a new id). get_memory first, then pass the whole new body; omitted fields are kept. Evidence is re-anchored like refresh_memory, so call it only once the new content is true.",
164
+ description: "Edit a memory in place, keeping id, hits, downvotes and derivedFrom (store_memory mints a new id). append extends it, patch fixes one passage, response rewrites it whole (get_memory first). Omitted fields are kept. Evidence is re-anchored like refresh_memory: call it only once the new content is true.",
165
165
  inputSchema: {
166
166
  type: "object",
167
167
  properties: {
168
168
  id: { type: "string", description: "Memory id." },
169
169
  query: { type: "string", description: "Replacement key; omit to keep." },
170
170
  response: { type: "string", description: "Complete replacement text, not a diff." },
171
+ append: { type: "string", description: "Added after the stored body. Alone." },
172
+ patch: {
173
+ type: "object",
174
+ properties: { find: { type: "string" }, replace: { type: "string" } },
175
+ required: ["find", "replace"],
176
+ description: "Exact passage swap; find must occur once. Alone.",
177
+ },
171
178
  filePaths: { type: "array", items: { type: "string" }, description: "Files the new content depends on, replacing the tracked set; omit to re-hash the current set." },
172
179
  symbols: {
173
180
  type: "array",
@@ -205,7 +212,7 @@ exports.MEMORY_TOOL_DEFINITIONS = [
205
212
  refs: { type: "array", items: { type: "object" }, description: "Replacement refs (store_memory shape); [] clears." },
206
213
  domain: { type: "string", description: "Replacement domain; '' clears." },
207
214
  derivedFrom: { type: "array", items: { type: "string" }, description: "Replacement upstream ids; [] clears." },
208
- supersededBy: { type: "string", description: "Id of the memory that replaces this one; excludes it from search_memory (get_memory still works and points to the successor). Use when two memories contradict. '' un-supersedes." },
215
+ supersededBy: { type: "string", description: "Id of the memory replacing this one (hidden from search_memory); for contradictions. '' undoes." },
209
216
  },
210
217
  required: ["id"],
211
218
  },
@@ -601,6 +608,10 @@ async function handleUpdateMemory(args) {
601
608
  throw new Error("id is required");
602
609
  const query = typeof args?.query === "string" ? args.query : undefined;
603
610
  const response = typeof args?.response === "string" ? args.response : undefined;
611
+ const append = typeof args?.append === "string" && args.append.length > 0 ? args.append : undefined;
612
+ const patch = args?.patch && typeof args.patch.find === "string" && typeof args.patch.replace === "string"
613
+ ? { find: args.patch.find, replace: args.patch.replace }
614
+ : undefined;
604
615
  const filePaths = Array.isArray(args?.filePaths) ? args.filePaths.filter((p) => typeof p === "string" && p) : undefined;
605
616
  const symbols = Array.isArray(args?.symbols)
606
617
  ? args.symbols.filter((sym) => sym?.filePath && sym?.symbolName)
@@ -615,7 +626,7 @@ async function handleUpdateMemory(args) {
615
626
  : undefined;
616
627
  const supersededBy = typeof args?.supersededBy === "string" ? args.supersededBy : undefined;
617
628
  const refs = Array.isArray(args?.refs) ? (0, ExternalRefs_1.sanitizeRefs)(args.refs) : undefined;
618
- if (query === undefined && response === undefined && filePaths === undefined && symbols === undefined &&
629
+ if (query === undefined && response === undefined && append === undefined && patch === undefined && filePaths === undefined && symbols === undefined &&
619
630
  claims === undefined && outcome === undefined && domain === undefined && derivedFrom === undefined &&
620
631
  supersededBy === undefined && refs === undefined) {
621
632
  return {
@@ -628,7 +639,7 @@ async function handleUpdateMemory(args) {
628
639
  try {
629
640
  // Refs alone must not re-anchor the entry's file hashes (update() would): attaching "also
630
641
  // depends on MR !1061" is not an assertion that the tracked code was re-checked.
631
- const refsOnly = refs !== undefined && query === undefined && response === undefined && filePaths === undefined &&
642
+ const refsOnly = refs !== undefined && query === undefined && response === undefined && append === undefined && patch === undefined && filePaths === undefined &&
632
643
  symbols === undefined && claims === undefined && outcome === undefined && domain === undefined &&
633
644
  derivedFrom === undefined && supersededBy === undefined;
634
645
  if (refsOnly) {
@@ -641,18 +652,24 @@ async function handleUpdateMemory(args) {
641
652
  let trackSymbols = symbols;
642
653
  if (filePaths && filePaths.length > 0 && !symbols) {
643
654
  const current = (0, TheBrainV2_1.getBrain)().getEntry(id);
644
- const narrowed = (0, NarrowEvidence_1.narrowEvidence)(filePaths, `${query ?? current?.query ?? ""}\n${response ?? current?.response ?? ""}`);
655
+ const narrowed = (0, NarrowEvidence_1.narrowEvidence)(filePaths, `${query ?? current?.query ?? ""}\n${response ?? current?.response ?? ""}\n${append ?? ""}`);
645
656
  if (narrowed.symbols.length > 0) {
646
657
  trackFiles = narrowed.filePaths;
647
658
  trackSymbols = narrowed.symbols;
648
659
  }
649
660
  }
650
661
  // An automatic hand-off keeps what Lemma captured: the agent's text is added under it, not over it.
651
- const target = response !== undefined ? (0, TheBrainV2_1.getBrain)().getEntry(id) : undefined;
662
+ const agentText = response ?? append;
663
+ const target = agentText !== undefined || patch !== undefined ? (0, TheBrainV2_1.getBrain)().getEntry(id) : undefined;
652
664
  const keepsHandoff = !!target && (0, TheBrainV2_1.entrySource)(target) === "auto-handoff" && (0, SessionCapture_1.isMachineHandoff)(target.response);
665
+ if (keepsHandoff && patch !== undefined) {
666
+ return { content: [{ type: "text", text: `"${id}" is an automatic hand-off: Lemma owns its text, so patch is refused. Use append (or response) to add your note.` }] };
667
+ }
653
668
  const result = (0, TheBrainV2_1.getBrain)().update(id, {
654
669
  query,
655
- response: keepsHandoff ? (0, SessionCapture_1.withAgentNote)(target.response, response) : response,
670
+ response: keepsHandoff && agentText !== undefined ? (0, SessionCapture_1.withAgentNote)(target.response, agentText) : response,
671
+ append: keepsHandoff ? undefined : append,
672
+ patch,
656
673
  filePaths: trackFiles, symbols: trackSymbols, claims, outcome, domain, derivedFrom, supersededBy, refs,
657
674
  });
658
675
  if (!result.ok)
@@ -746,6 +763,12 @@ async function handleStoreMemory(args) {
746
763
  try {
747
764
  const brain = (0, TheBrainV2_1.getBrain)();
748
765
  const storeRes = brain.store(query, responseText, provider, 0.92, filePaths, undefined, outcome, symbols, claims, domain, derivedFrom, { source: "manual" });
766
+ // Nothing was written. Saying "Success" here sent agents looking for a way around the guard
767
+ // instead of extending the memory that already says this.
768
+ if (!storeRes.stored && storeRes.duplicate) {
769
+ const dup = storeRes.duplicate;
770
+ return { content: [{ type: "text", text: `Not stored: ${storeRes.reason} β€” memory ${dup.id} ("${String(dup.query).substring(0, 120)}") already covers this. To add to it without rewriting it: update_memory(id="${dup.id}", append="…"); to fix one passage: patch={find, replace}. get_memory ${dup.id} first only if you need to read it.` }] };
771
+ }
749
772
  if (refs.length > 0 && storeRes.id)
750
773
  brain.setRefs(storeRes.id, refs);
751
774
  // Storing a memory saves nothing β€” it only creates the chance of a saving later.