hippo-memory 0.22.1 → 0.24.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/hooks.js CHANGED
@@ -2,29 +2,32 @@
2
2
  * JSON-hook install/uninstall for AI coding tools.
3
3
  *
4
4
  * Currently supports Claude Code and OpenCode, which share the same
5
- * SessionStart/SessionEnd schema. Hippo installs three entries:
6
- * - SessionEnd: `hippo sleep --log-file <path>` - captures consolidation
7
- * output to a log file because the TUI is tearing down at that point.
8
- * - SessionEnd: `hippo capture --last-session --log-file <path>` - extracts
9
- * actionable memories from the session transcript (one capture per
10
- * session, not per turn) and tees its output to the same log file as
11
- * sleep so `hippo last-sleep` surfaces both on the next session start.
12
- * The SessionEnd payload stdin carries `transcript_path`, which
13
- * `hippo capture` resolves automatically.
14
- * - SessionStart: `hippo last-sleep --path <path>` - prints that log on
15
- * the next startup and clears it, so the user actually sees it.
5
+ * SessionStart/SessionEnd schema. Hippo installs two entries:
6
+ * - SessionEnd: `hippo session-end --log-file <path>` - spawns a detached
7
+ * child that runs `hippo sleep` then `hippo capture --last-session`
8
+ * in sequence, writing both outputs to the log file. The parent returns
9
+ * in <100ms so the TUI teardown can't kill the child before it finishes.
10
+ * - SessionStart: `hippo last-sleep --path <path>` - prints the log written
11
+ * by the previous session's detached worker and then clears it, so the
12
+ * user actually sees what was consolidated.
16
13
  *
17
- * Legacy entries from versions < 0.21.0 (bare `hippo sleep` in SessionEnd, or
18
- * the old `Stop` entry from < 0.20.2) are detected and migrated automatically.
14
+ * Earlier forms are detected and migrated automatically:
15
+ * - < 0.20.2: `Stop` hook firing `hippo sleep` on every assistant turn.
16
+ * - < 0.21.0: bare `hippo sleep` in SessionEnd, no `--log-file`.
17
+ * - 0.22.x: separate sleep + capture SessionEnd entries. Ran in parallel
18
+ * and were both SIGTERM'd by TUI teardown, so completion lines rarely
19
+ * made it to the log. 0.23.0+ collapses them into the single
20
+ * `hippo session-end` entry above.
19
21
  */
20
22
  import * as fs from 'fs';
21
23
  import * as os from 'os';
22
24
  import * as path from 'path';
25
+ import { fileURLToPath } from 'url';
23
26
  const HIPPO_SLEEP_MARKER = 'hippo sleep';
24
27
  const HIPPO_LAST_SLEEP_MARKER = 'hippo last-sleep';
25
28
  const HIPPO_CAPTURE_MARKER = 'hippo capture --last-session';
26
- const CURRENT_SESSIONEND_MARKER = 'hippo sleep --log-file';
27
- const CURRENT_CAPTURE_MARKER = 'hippo capture --last-session --log-file';
29
+ const HIPPO_SESSION_END_MARKER = 'hippo session-end';
30
+ const HIPPO_CODEX_WRAPPER_MARKER = 'hippo codex wrapper';
28
31
  function homeDir() {
29
32
  return process.env.HOME || process.env.USERPROFILE || os.homedir();
30
33
  }
@@ -35,6 +38,331 @@ function homeDir() {
35
38
  export function defaultSleepLogPath() {
36
39
  return path.join(homeDir(), '.hippo', 'logs', 'last-sleep.log');
37
40
  }
41
+ export function resolveCodexWrapperPaths() {
42
+ const home = homeDir();
43
+ const codexHome = path.join(home, '.codex');
44
+ const wrapperDir = path.join(home, '.hippo', 'bin');
45
+ return {
46
+ wrapperDir,
47
+ metadataPath: path.join(home, '.hippo', 'integrations', 'codex.json'),
48
+ wrapperCmdPath: path.join(wrapperDir, 'codex.cmd'),
49
+ wrapperPs1Path: path.join(wrapperDir, 'codex.ps1'),
50
+ wrapperShPath: path.join(wrapperDir, 'codex'),
51
+ logFile: path.join(home, '.hippo', 'logs', 'codex-sleep.log'),
52
+ runsDir: path.join(home, '.hippo', 'runs', 'codex'),
53
+ historyPath: path.join(codexHome, 'history.jsonl'),
54
+ sessionsDir: path.join(codexHome, 'sessions'),
55
+ };
56
+ }
57
+ function pathEquals(a, b) {
58
+ return path.resolve(a).toLowerCase() === path.resolve(b).toLowerCase();
59
+ }
60
+ function readCodexWrapperMetadata() {
61
+ const { metadataPath } = resolveCodexWrapperPaths();
62
+ if (!fs.existsSync(metadataPath))
63
+ return null;
64
+ try {
65
+ return JSON.parse(fs.readFileSync(metadataPath, 'utf8'));
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ function readTextFile(filePath) {
72
+ try {
73
+ return fs.readFileSync(filePath, 'utf8');
74
+ }
75
+ catch {
76
+ return null;
77
+ }
78
+ }
79
+ function isHippoCodexWrapperFile(filePath) {
80
+ if (!fs.existsSync(filePath))
81
+ return false;
82
+ const text = readTextFile(filePath);
83
+ return typeof text === 'string' && text.includes(HIPPO_CODEX_WRAPPER_MARKER);
84
+ }
85
+ function isCodexWrapperMetadataValid(metadata) {
86
+ if (!metadata)
87
+ return false;
88
+ return (typeof metadata.originalCodexPath === 'string' &&
89
+ typeof metadata.realCodexPath === 'string' &&
90
+ typeof metadata.commandPath === 'string' &&
91
+ typeof metadata.backupPath === 'string' &&
92
+ fs.existsSync(metadata.realCodexPath) &&
93
+ fs.existsSync(metadata.backupPath) &&
94
+ isHippoCodexWrapperFile(metadata.commandPath));
95
+ }
96
+ function resolveHippoCliPath() {
97
+ return fileURLToPath(new URL('../bin/hippo.js', import.meta.url));
98
+ }
99
+ function quoteForShell(value) {
100
+ return `"${value.replace(/(["\\$`])/g, '\\$1')}"`;
101
+ }
102
+ function quoteForPowerShell(value) {
103
+ return `'${value.replace(/'/g, "''")}'`;
104
+ }
105
+ function quoteForCmd(value) {
106
+ return `"${value.replace(/"/g, '""')}"`;
107
+ }
108
+ function resolveCodexInstallPlan(originalCodexPath) {
109
+ const dir = path.dirname(originalCodexPath);
110
+ const ext = path.extname(originalCodexPath).toLowerCase();
111
+ const name = path.basename(originalCodexPath, ext);
112
+ const backupPath = path.join(dir, `${name}.hippo-real${ext}`);
113
+ if (process.platform === 'win32' && ext === '.exe') {
114
+ return {
115
+ commandPath: path.join(dir, `${name}.cmd`),
116
+ backupPath,
117
+ installMode: 'cmd-shim',
118
+ };
119
+ }
120
+ return {
121
+ commandPath: originalCodexPath,
122
+ backupPath,
123
+ installMode: 'same-path',
124
+ };
125
+ }
126
+ function writeCodexLauncherWrapper(commandPath) {
127
+ const ext = path.extname(commandPath).toLowerCase();
128
+ const nodePath = process.execPath;
129
+ const hippoCliPath = resolveHippoCliPath();
130
+ if (process.platform === 'win32' && ext === '.ps1') {
131
+ writeExecutableFile(commandPath, [
132
+ `# ${HIPPO_CODEX_WRAPPER_MARKER}`,
133
+ `& ${quoteForPowerShell(nodePath)} ${quoteForPowerShell(hippoCliPath)} codex-run -- @args`,
134
+ '',
135
+ ].join('\n'));
136
+ return;
137
+ }
138
+ if (process.platform === 'win32' && (ext === '.cmd' || ext === '.bat')) {
139
+ writeExecutableFile(commandPath, [
140
+ '@echo off',
141
+ `REM ${HIPPO_CODEX_WRAPPER_MARKER}`,
142
+ `${quoteForCmd(nodePath)} ${quoteForCmd(hippoCliPath)} codex-run -- %*`,
143
+ '',
144
+ ].join('\r\n'));
145
+ return;
146
+ }
147
+ writeExecutableFile(commandPath, [
148
+ '#!/usr/bin/env sh',
149
+ `# ${HIPPO_CODEX_WRAPPER_MARKER}`,
150
+ `exec ${quoteForShell(nodePath)} ${quoteForShell(hippoCliPath)} codex-run -- "$@"`,
151
+ '',
152
+ ].join('\n'));
153
+ }
154
+ function cleanupLegacyCodexPathWrappers(paths) {
155
+ for (const filePath of [paths.wrapperCmdPath, paths.wrapperPs1Path, paths.wrapperShPath]) {
156
+ if (fs.existsSync(filePath))
157
+ fs.rmSync(filePath, { force: true });
158
+ }
159
+ }
160
+ export function detectRealCodexPath() {
161
+ const metadata = readCodexWrapperMetadata();
162
+ if (isCodexWrapperMetadataValid(metadata))
163
+ return metadata.realCodexPath;
164
+ const { wrapperDir } = resolveCodexWrapperPaths();
165
+ const entries = (process.env.PATH ?? '')
166
+ .split(path.delimiter)
167
+ .map((entry) => entry.trim())
168
+ .filter(Boolean)
169
+ .filter((entry) => !pathEquals(entry, wrapperDir));
170
+ const names = process.platform === 'win32'
171
+ ? ['codex.cmd', 'codex.ps1', 'codex.exe', 'codex']
172
+ : ['codex'];
173
+ for (const entry of entries) {
174
+ for (const name of names) {
175
+ const candidate = path.join(entry, name);
176
+ if (fs.existsSync(candidate))
177
+ return candidate;
178
+ }
179
+ }
180
+ return null;
181
+ }
182
+ function ensureDir(dir) {
183
+ if (!fs.existsSync(dir))
184
+ fs.mkdirSync(dir, { recursive: true });
185
+ }
186
+ function writeExecutableFile(filePath, content) {
187
+ fs.writeFileSync(filePath, content, 'utf8');
188
+ try {
189
+ fs.chmodSync(filePath, 0o755);
190
+ }
191
+ catch {
192
+ // chmod is best-effort on Windows
193
+ }
194
+ }
195
+ export function installCodexWrapper(realCodexPath) {
196
+ const existingMetadata = readCodexWrapperMetadata();
197
+ if (isCodexWrapperMetadataValid(existingMetadata) && !realCodexPath) {
198
+ cleanupLegacyCodexPathWrappers(resolveCodexWrapperPaths());
199
+ return {
200
+ installed: true,
201
+ metadataPath: resolveCodexWrapperPaths().metadataPath,
202
+ realCodexPath: existingMetadata.realCodexPath,
203
+ commandPath: existingMetadata.commandPath,
204
+ backupPath: existingMetadata.backupPath,
205
+ installMode: existingMetadata.installMode,
206
+ };
207
+ }
208
+ const resolvedRealCodexPath = realCodexPath ?? detectRealCodexPath();
209
+ if (!resolvedRealCodexPath) {
210
+ throw new Error('Could not locate the real Codex executable on PATH.');
211
+ }
212
+ const paths = resolveCodexWrapperPaths();
213
+ ensureDir(path.dirname(paths.metadataPath));
214
+ ensureDir(path.dirname(paths.logFile));
215
+ ensureDir(paths.runsDir);
216
+ cleanupLegacyCodexPathWrappers(paths);
217
+ const plan = resolveCodexInstallPlan(resolvedRealCodexPath);
218
+ ensureDir(path.dirname(plan.commandPath));
219
+ if (isCodexWrapperMetadataValid(existingMetadata)) {
220
+ uninstallCodexWrapper();
221
+ }
222
+ if (!fs.existsSync(plan.backupPath)) {
223
+ fs.renameSync(resolvedRealCodexPath, plan.backupPath);
224
+ }
225
+ writeCodexLauncherWrapper(plan.commandPath);
226
+ const metadata = {
227
+ originalCodexPath: resolvedRealCodexPath,
228
+ realCodexPath: plan.backupPath,
229
+ commandPath: plan.commandPath,
230
+ backupPath: plan.backupPath,
231
+ installMode: plan.installMode,
232
+ logFile: paths.logFile,
233
+ historyPath: paths.historyPath,
234
+ sessionsDir: paths.sessionsDir,
235
+ installedAt: new Date().toISOString(),
236
+ };
237
+ fs.writeFileSync(paths.metadataPath, JSON.stringify(metadata, null, 2) + '\n', 'utf8');
238
+ return {
239
+ installed: true,
240
+ metadataPath: paths.metadataPath,
241
+ realCodexPath: metadata.realCodexPath,
242
+ commandPath: metadata.commandPath,
243
+ backupPath: metadata.backupPath,
244
+ installMode: metadata.installMode,
245
+ };
246
+ }
247
+ export function uninstallCodexWrapper() {
248
+ const paths = resolveCodexWrapperPaths();
249
+ let changed = false;
250
+ const metadata = readCodexWrapperMetadata();
251
+ if (metadata) {
252
+ if (fs.existsSync(metadata.commandPath) && isHippoCodexWrapperFile(metadata.commandPath)) {
253
+ fs.rmSync(metadata.commandPath, { force: true });
254
+ changed = true;
255
+ }
256
+ if (fs.existsSync(metadata.backupPath)) {
257
+ fs.renameSync(metadata.backupPath, metadata.originalCodexPath);
258
+ changed = true;
259
+ }
260
+ }
261
+ cleanupLegacyCodexPathWrappers(paths);
262
+ if (fs.existsSync(paths.metadataPath)) {
263
+ fs.rmSync(paths.metadataPath, { force: true });
264
+ changed = true;
265
+ }
266
+ return changed;
267
+ }
268
+ export function ensureCodexWrapperInstalled() {
269
+ const metadata = readCodexWrapperMetadata();
270
+ if (isCodexWrapperMetadataValid(metadata)) {
271
+ cleanupLegacyCodexPathWrappers(resolveCodexWrapperPaths());
272
+ return {
273
+ status: 'already-installed',
274
+ metadataPath: resolveCodexWrapperPaths().metadataPath,
275
+ realCodexPath: metadata.realCodexPath,
276
+ commandPath: metadata.commandPath,
277
+ backupPath: metadata.backupPath,
278
+ };
279
+ }
280
+ if (metadata) {
281
+ uninstallCodexWrapper();
282
+ }
283
+ const detectedRealCodexPath = detectRealCodexPath();
284
+ if (!detectedRealCodexPath) {
285
+ return { status: 'not-found' };
286
+ }
287
+ const result = installCodexWrapper(detectedRealCodexPath);
288
+ return {
289
+ status: 'installed',
290
+ metadataPath: result.metadataPath,
291
+ realCodexPath: result.realCodexPath,
292
+ commandPath: result.commandPath,
293
+ backupPath: result.backupPath,
294
+ };
295
+ }
296
+ function collectFiles(dir) {
297
+ if (!fs.existsSync(dir))
298
+ return [];
299
+ const out = [];
300
+ const stack = [dir];
301
+ while (stack.length > 0) {
302
+ const current = stack.pop();
303
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
304
+ const full = path.join(current, entry.name);
305
+ if (entry.isDirectory()) {
306
+ stack.push(full);
307
+ }
308
+ else if (entry.isFile()) {
309
+ out.push(full);
310
+ }
311
+ }
312
+ }
313
+ return out;
314
+ }
315
+ function readCodexSessionIdsFromHistoryDelta(historyPath, startOffsetBytes) {
316
+ if (!fs.existsSync(historyPath))
317
+ return [];
318
+ const raw = fs.readFileSync(historyPath);
319
+ if (startOffsetBytes >= raw.length)
320
+ return [];
321
+ const delta = raw.subarray(startOffsetBytes).toString('utf8');
322
+ const seen = new Set();
323
+ const ordered = [];
324
+ for (const line of delta.split('\n')) {
325
+ if (!line.trim())
326
+ continue;
327
+ try {
328
+ const parsed = JSON.parse(line);
329
+ const sessionId = parsed.session_id;
330
+ if (typeof sessionId === 'string' && sessionId && !seen.has(sessionId)) {
331
+ seen.add(sessionId);
332
+ ordered.push(sessionId);
333
+ }
334
+ }
335
+ catch {
336
+ // ignore malformed JSONL lines
337
+ }
338
+ }
339
+ return ordered;
340
+ }
341
+ function findCodexTranscriptBySessionId(sessionsDir, sessionId) {
342
+ const matches = collectFiles(sessionsDir).filter((filePath) => filePath.endsWith('.jsonl') && filePath.includes(sessionId));
343
+ if (matches.length === 0)
344
+ return null;
345
+ matches.sort((a, b) => fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs);
346
+ return matches[0];
347
+ }
348
+ function findNewestCodexTranscriptSince(sessionsDir, startedAtMs) {
349
+ const matches = collectFiles(sessionsDir)
350
+ .filter((filePath) => filePath.endsWith('.jsonl'))
351
+ .map((filePath) => ({ filePath, mtimeMs: fs.statSync(filePath).mtimeMs }))
352
+ .filter((entry) => entry.mtimeMs >= startedAtMs)
353
+ .sort((a, b) => b.mtimeMs - a.mtimeMs);
354
+ return matches[0]?.filePath ?? null;
355
+ }
356
+ export function resolveCodexSessionTranscript(options) {
357
+ const { codexHome, historyPath, startOffsetBytes, startedAtMs } = options;
358
+ const sessionsDir = path.join(codexHome, 'sessions');
359
+ for (const sessionId of readCodexSessionIdsFromHistoryDelta(historyPath, startOffsetBytes).reverse()) {
360
+ const transcript = findCodexTranscriptBySessionId(sessionsDir, sessionId);
361
+ if (transcript)
362
+ return transcript;
363
+ }
364
+ return findNewestCodexTranscriptSince(sessionsDir, startedAtMs);
365
+ }
38
366
  export function resolveJsonHookPaths(target) {
39
367
  const home = homeDir();
40
368
  const logsDir = path.join(home, '.hippo', 'logs');
@@ -58,11 +386,21 @@ function hookArrayContains(hookArray, marker) {
58
386
  return false;
59
387
  return JSON.stringify(hookArray).includes(marker);
60
388
  }
61
- function hasCurrentFormatSessionEnd(hookArray) {
62
- return hookArrayContains(hookArray, CURRENT_SESSIONEND_MARKER);
389
+ function hasCurrentSessionEnd(hookArray) {
390
+ return hookArrayContains(hookArray, HIPPO_SESSION_END_MARKER);
63
391
  }
64
- function hasCurrentFormatCapture(hookArray) {
65
- return hookArrayContains(hookArray, CURRENT_CAPTURE_MARKER);
392
+ /**
393
+ * Returns true when `hooks.SessionEnd` still contains either of the legacy
394
+ * v0.22.x split entries (bare `hippo sleep` / `hippo capture --last-session`)
395
+ * without the current consolidated `hippo session-end` entry.
396
+ */
397
+ function hasLegacySplitSessionEnd(hookArray) {
398
+ if (!Array.isArray(hookArray))
399
+ return false;
400
+ const serialized = JSON.stringify(hookArray);
401
+ const hasSleep = serialized.includes(HIPPO_SLEEP_MARKER);
402
+ const hasCapture = serialized.includes(HIPPO_CAPTURE_MARKER);
403
+ return (hasSleep || hasCapture) && !serialized.includes(HIPPO_SESSION_END_MARKER);
66
404
  }
67
405
  export function installJsonHooks(target) {
68
406
  const { settings: settingsPath, logFile } = resolveJsonHookPaths(target);
@@ -80,9 +418,9 @@ export function installJsonHooks(target) {
80
418
  settingsPath,
81
419
  installedSessionEnd: false,
82
420
  installedSessionStart: false,
83
- installedSessionCapture: false,
84
421
  migratedFromStop: false,
85
422
  migratedLegacySessionEnd: false,
423
+ migratedSplitSessionEnd: false,
86
424
  };
87
425
  }
88
426
  }
@@ -96,25 +434,36 @@ export function installJsonHooks(target) {
96
434
  delete hooks.Stop;
97
435
  migratedFromStop = true;
98
436
  }
437
+ // Migrate legacy SessionEnd forms:
438
+ // - pre-0.21 bare `hippo sleep`
439
+ // - 0.21.x+ `hippo sleep --log-file` split across two entries
440
+ // - 0.22.x `hippo capture --last-session --log-file` second entry
441
+ // All of these get collapsed into the single `hippo session-end` entry.
99
442
  let migratedLegacySessionEnd = false;
100
- if (Array.isArray(hooks.SessionEnd) &&
101
- hookArrayContains(hooks.SessionEnd, HIPPO_SLEEP_MARKER) &&
102
- !hasCurrentFormatSessionEnd(hooks.SessionEnd)) {
103
- hooks.SessionEnd = hooks.SessionEnd.filter((entry) => !JSON.stringify(entry).includes(HIPPO_SLEEP_MARKER));
443
+ let migratedSplitSessionEnd = false;
444
+ if (Array.isArray(hooks.SessionEnd) && hasLegacySplitSessionEnd(hooks.SessionEnd)) {
445
+ const before = hooks.SessionEnd.length;
446
+ hooks.SessionEnd = hooks.SessionEnd.filter((entry) => {
447
+ const s = JSON.stringify(entry);
448
+ return !s.includes(HIPPO_SLEEP_MARKER) && !s.includes(HIPPO_CAPTURE_MARKER);
449
+ });
104
450
  if (hooks.SessionEnd.length === 0)
105
451
  delete hooks.SessionEnd;
106
- migratedLegacySessionEnd = true;
452
+ // If the removed entries used the log-file pattern (0.21.x-0.22.x) we
453
+ // call it a "split" migration; otherwise it was the older bare form.
454
+ migratedSplitSessionEnd = true;
455
+ migratedLegacySessionEnd = before > 1;
107
456
  }
108
457
  let installedSessionEnd = false;
109
- if (!hasCurrentFormatSessionEnd(hooks.SessionEnd)) {
458
+ if (!hasCurrentSessionEnd(hooks.SessionEnd)) {
110
459
  if (!Array.isArray(hooks.SessionEnd))
111
460
  hooks.SessionEnd = [];
112
461
  hooks.SessionEnd.push({
113
462
  hooks: [
114
463
  {
115
464
  type: 'command',
116
- command: `hippo sleep --log-file "${logFile}"`,
117
- timeout: 60,
465
+ command: `hippo session-end --log-file "${logFile}"`,
466
+ timeout: 5,
118
467
  },
119
468
  ],
120
469
  });
@@ -135,37 +484,11 @@ export function installJsonHooks(target) {
135
484
  });
136
485
  installedSessionStart = true;
137
486
  }
138
- // Migrate legacy capture entries from 0.22.0 (which installed
139
- // `hippo capture --last-session` without --log-file, so its output was
140
- // swallowed by the TUI teardown). 0.22.1+ writes to the same log file as
141
- // `hippo sleep` so `hippo last-sleep` surfaces both on the next startup.
142
- if (Array.isArray(hooks.SessionEnd) &&
143
- hookArrayContains(hooks.SessionEnd, HIPPO_CAPTURE_MARKER) &&
144
- !hasCurrentFormatCapture(hooks.SessionEnd)) {
145
- hooks.SessionEnd = hooks.SessionEnd.filter((entry) => !JSON.stringify(entry).includes(HIPPO_CAPTURE_MARKER));
146
- if (hooks.SessionEnd.length === 0)
147
- delete hooks.SessionEnd;
148
- }
149
- let installedSessionCapture = false;
150
- if (!hasCurrentFormatCapture(hooks.SessionEnd)) {
151
- if (!Array.isArray(hooks.SessionEnd))
152
- hooks.SessionEnd = [];
153
- hooks.SessionEnd.push({
154
- hooks: [
155
- {
156
- type: 'command',
157
- command: `hippo capture --last-session --log-file "${logFile}"`,
158
- timeout: 15,
159
- },
160
- ],
161
- });
162
- installedSessionCapture = true;
163
- }
164
487
  if (installedSessionEnd ||
165
488
  installedSessionStart ||
166
- installedSessionCapture ||
167
489
  migratedFromStop ||
168
- migratedLegacySessionEnd) {
490
+ migratedLegacySessionEnd ||
491
+ migratedSplitSessionEnd) {
169
492
  fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
170
493
  }
171
494
  return {
@@ -173,9 +496,9 @@ export function installJsonHooks(target) {
173
496
  settingsPath,
174
497
  installedSessionEnd,
175
498
  installedSessionStart,
176
- installedSessionCapture,
177
499
  migratedFromStop,
178
500
  migratedLegacySessionEnd,
501
+ migratedSplitSessionEnd,
179
502
  };
180
503
  }
181
504
  export function uninstallJsonHooks(target) {
@@ -194,7 +517,7 @@ export function uninstallJsonHooks(target) {
194
517
  return false;
195
518
  let changed = false;
196
519
  const markersByKey = {
197
- SessionEnd: [HIPPO_SLEEP_MARKER, HIPPO_CAPTURE_MARKER],
520
+ SessionEnd: [HIPPO_SESSION_END_MARKER, HIPPO_SLEEP_MARKER, HIPPO_CAPTURE_MARKER],
198
521
  SessionStart: [HIPPO_LAST_SLEEP_MARKER],
199
522
  Stop: [HIPPO_SLEEP_MARKER],
200
523
  };
@@ -227,7 +550,7 @@ export function detectInstalledTools() {
227
550
  { name: 'claude-code', configDir: '~/.claude', detected: exists('.claude'), kind: 'json-hook' },
228
551
  { name: 'opencode', configDir: '~/.config/opencode', detected: exists('.config', 'opencode'), kind: 'json-hook' },
229
552
  { name: 'openclaw', configDir: '~/.openclaw', detected: exists('.openclaw'), kind: 'plugin', notes: 'install via `openclaw plugins install hippo-memory`' },
230
- { name: 'codex', configDir: '~/.codex', detected: exists('.codex'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
553
+ { name: 'codex', configDir: '~/.codex', detected: exists('.codex'), kind: 'wrapper', notes: 'wraps the detected codex launcher for session-end consolidation' },
231
554
  { name: 'cursor', configDir: '~/.cursor', detected: exists('.cursor'), kind: 'markdown-instruction', notes: 'no hook API - patches .cursorrules in the project' },
232
555
  { name: 'pi', configDir: '~/.pi', detected: exists('.pi'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
233
556
  ];
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=postinstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { ensureCodexWrapperInstalled } from './hooks.js';
2
+ function main() {
3
+ if (process.env.HIPPO_SKIP_POSTINSTALL === '1')
4
+ return;
5
+ try {
6
+ ensureCodexWrapperInstalled();
7
+ }
8
+ catch {
9
+ // Never fail package install because auto-integration could not be applied.
10
+ }
11
+ }
12
+ main();
13
+ //# sourceMappingURL=postinstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD,SAAS,IAAI;IACX,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG;QAAE,OAAO;IAEvD,IAAI,CAAC;QACH,2BAA2B,EAAE,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -2,7 +2,7 @@
2
2
  "id": "hippo-memory",
3
3
  "name": "Hippo Memory",
4
4
  "description": "Biologically-inspired memory for AI agents. Decay by default, retrieval strengthening, sleep consolidation.",
5
- "version": "0.22.1",
5
+ "version": "0.24.0",
6
6
 
7
7
  "configSchema": {
8
8
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hippo-memory",
3
- "version": "0.22.1",
3
+ "version": "0.24.0",
4
4
  "description": "Hippo Memory plugin for OpenClaw - biologically-inspired agent memory",
5
5
  "main": "index.ts",
6
6
  "openclaw": {
@@ -2,7 +2,7 @@
2
2
  "id": "hippo-memory",
3
3
  "name": "Hippo Memory",
4
4
  "description": "Biologically-inspired memory for AI agents. Decay by default, retrieval strengthening, sleep consolidation.",
5
- "version": "0.22.1",
5
+ "version": "0.24.0",
6
6
  "configSchema": {
7
7
  "type": "object",
8
8
  "additionalProperties": false,