purmemo-mcp 15.2.6 → 15.2.7
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/purmemo_capture.js +9 -5
- package/dist/hooks/purmemo_capture.js.map +1 -1
- package/dist/hooks/purmemo_first_message.js +3 -3
- package/dist/hooks/purmemo_first_message.js.map +1 -1
- package/dist/hooks/purmemo_lib.d.ts +5 -1
- package/dist/hooks/purmemo_lib.d.ts.map +1 -1
- package/dist/hooks/purmemo_lib.js +65 -11
- package/dist/hooks/purmemo_lib.js.map +1 -1
- package/dist/hooks/purmemo_recall.d.ts +8 -3
- package/dist/hooks/purmemo_recall.d.ts.map +1 -1
- package/dist/hooks/purmemo_recall.js +131 -24
- package/dist/hooks/purmemo_recall.js.map +1 -1
- package/dist/lib/api-client.d.ts +38 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +269 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/logger.d.ts +12 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +21 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/remote/start.d.ts +8 -0
- package/dist/remote/start.d.ts.map +1 -0
- package/dist/remote/start.js +1185 -0
- package/dist/remote/start.js.map +1 -0
- package/dist/server.js +200 -3674
- package/dist/server.js.map +1 -1
- package/dist/tools/handlers.d.ts +94 -0
- package/dist/tools/handlers.d.ts.map +1 -0
- package/dist/tools/handlers.js +1692 -0
- package/dist/tools/handlers.js.map +1 -0
- package/dist/tools/handoff.d.ts +28 -0
- package/dist/tools/handoff.d.ts.map +1 -0
- package/dist/tools/handoff.js +374 -0
- package/dist/tools/handoff.js.map +1 -0
- package/dist/workflows/engine.d.ts +180 -0
- package/dist/workflows/engine.d.ts.map +1 -0
- package/dist/workflows/engine.js +476 -0
- package/dist/workflows/engine.js.map +1 -0
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Silent on all errors — never blocks Claude Code.
|
|
22
22
|
*/
|
|
23
23
|
import * as path from 'node:path';
|
|
24
|
-
import { dbg, readState, writeState, loadApiKey, readTranscript, extractMessages, buildContent, apiPost, readHookInput, detectPlatform, initPlatformPaths, normalizeEvent, } from './purmemo_lib.js';
|
|
24
|
+
import { dbg, errLog, readState, writeState, pruneState, loadApiKey, readTranscript, extractMessages, buildContent, apiPost, readHookInput, detectPlatform, initPlatformPaths, normalizeEvent, } from './purmemo_lib.js';
|
|
25
25
|
const TAG = 'capture';
|
|
26
26
|
const COOLDOWNS = { Stop: 120_000, PreCompact: 30_000 };
|
|
27
27
|
const HEARTBEAT_INTERVAL = 10;
|
|
@@ -73,7 +73,11 @@ async function main() {
|
|
|
73
73
|
return;
|
|
74
74
|
// Normalize Gemini event names to internal (Claude) names
|
|
75
75
|
const event = normalizeEvent(hook_event_name || 'unknown');
|
|
76
|
-
|
|
76
|
+
let state = readState();
|
|
77
|
+
// Prune stale keys on Stop (low frequency, good trigger for cleanup)
|
|
78
|
+
if (event === 'Stop') {
|
|
79
|
+
state = pruneState(state);
|
|
80
|
+
}
|
|
77
81
|
// ── Heartbeat: count tool calls, only save at intervals ──────────────────
|
|
78
82
|
if (event === 'PostToolUse') {
|
|
79
83
|
const countKey = `hb_count_${session_id}`;
|
|
@@ -102,7 +106,7 @@ async function main() {
|
|
|
102
106
|
dbg(TAG, `${event} fired — session=${session_id} transcript=${transcript_path || 'none'}`);
|
|
103
107
|
const apiKey = loadApiKey();
|
|
104
108
|
if (!apiKey) {
|
|
105
|
-
|
|
109
|
+
errLog(TAG, 'no API key — set PURMEMO_API_KEY or run purmemo setup');
|
|
106
110
|
return;
|
|
107
111
|
}
|
|
108
112
|
// ── Read and build content ───────────────────────────────────────────────
|
|
@@ -147,9 +151,9 @@ async function main() {
|
|
|
147
151
|
dbg(TAG, `${event} saved — ${messages.length} msgs, ${content.length} chars, convId=${conversationId}`);
|
|
148
152
|
}
|
|
149
153
|
else {
|
|
150
|
-
|
|
154
|
+
errLog(TAG, `${event} save failed — ${messages.length} msgs, ${content.length} chars`);
|
|
151
155
|
}
|
|
152
156
|
}
|
|
153
157
|
// Top-level await keeps the process alive until all HTTP requests complete
|
|
154
|
-
await main().catch(() => { });
|
|
158
|
+
await main().catch((e) => { process.stderr.write(`[purmemo:capture] fatal: ${e.message}\n`); });
|
|
155
159
|
//# sourceMappingURL=purmemo_capture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purmemo_capture.js","sourceRoot":"","sources":["../../src/hooks/purmemo_capture.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"purmemo_capture.js","sourceRoot":"","sources":["../../src/hooks/purmemo_capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import * as fs from 'node:fs';
|
|
10
10
|
import * as os from 'node:os';
|
|
11
|
-
import { dbg, readState, writeState, loadApiKey, apiGet, readHookInput, detectPlatform, initPlatformPaths, platformEvent, } from './purmemo_lib.js';
|
|
11
|
+
import { dbg, errLog, readState, writeState, loadApiKey, apiGet, readHookInput, detectPlatform, initPlatformPaths, platformEvent, } from './purmemo_lib.js';
|
|
12
12
|
const TAG = 'first_msg';
|
|
13
13
|
function countUserMessages(transcriptPath) {
|
|
14
14
|
try {
|
|
@@ -104,10 +104,10 @@ async function main() {
|
|
|
104
104
|
return;
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
|
|
107
|
+
errLog(TAG, `failed to load memory ${memId}`);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
dbg(TAG, `first message — no number shortcut, session ${session_id}`);
|
|
111
111
|
}
|
|
112
|
-
await main().catch(() => { });
|
|
112
|
+
await main().catch((e) => { process.stderr.write(`[purmemo:first_msg] fatal: ${e.message}\n`); });
|
|
113
113
|
//# sourceMappingURL=purmemo_first_message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purmemo_first_message.js","sourceRoot":"","sources":["../../src/hooks/purmemo_first_message.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EACL,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"purmemo_first_message.js","sourceRoot":"","sources":["../../src/hooks/purmemo_first_message.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,10 +47,14 @@ export declare function platformEvent(internalName: string, platform: Platform):
|
|
|
47
47
|
/** Call after detectPlatform() to switch state/debug paths */
|
|
48
48
|
export declare function initPlatformPaths(platform: Platform): void;
|
|
49
49
|
export declare function dbg(tag: string, msg: string): void;
|
|
50
|
+
/** Log errors to stderr so Claude Code can surface them. Use sparingly. */
|
|
51
|
+
export declare function errLog(tag: string, msg: string): void;
|
|
50
52
|
export declare function readState(): Record<string, unknown>;
|
|
51
53
|
export declare function writeState(state: Record<string, unknown>): void;
|
|
54
|
+
/** Remove stale per-session keys older than 7 days. */
|
|
55
|
+
export declare function pruneState(state: Record<string, unknown>): Record<string, unknown>;
|
|
52
56
|
export declare function loadApiKey(): string | null;
|
|
53
|
-
/** Read Claude Code JSONL transcript */
|
|
57
|
+
/** Read Claude Code JSONL or Gemini JSON transcript */
|
|
54
58
|
export declare function readTranscript(transcriptPath: string | undefined): TranscriptEntry[];
|
|
55
59
|
export declare function extractMessages(entries: TranscriptEntry[]): Message[];
|
|
56
60
|
export declare function buildContent(messages: Message[]): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purmemo_lib.d.ts","sourceRoot":"","sources":["../../src/hooks/purmemo_lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC,CAAC;KAC3G,GAAG,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,2EAA2E;AAC3E,eAAO,MAAM,aAAa,sBAAsB,CAAC;AAMjD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAwB3C,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAY1D;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAG9E;AAsBD,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAE1D;AAID,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAElD;
|
|
1
|
+
{"version":3,"file":"purmemo_lib.d.ts","sourceRoot":"","sources":["../../src/hooks/purmemo_lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,12 +88,21 @@ export function dbg(tag, msg) {
|
|
|
88
88
|
}
|
|
89
89
|
catch { }
|
|
90
90
|
}
|
|
91
|
+
/** Log errors to stderr so Claude Code can surface them. Use sparingly. */
|
|
92
|
+
export function errLog(tag, msg) {
|
|
93
|
+
dbg(tag, `ERROR: ${msg}`);
|
|
94
|
+
process.stderr.write(`[purmemo:${tag}] ${msg}\n`);
|
|
95
|
+
}
|
|
91
96
|
// ─── State management ────────────────────────────────────────────────────────
|
|
97
|
+
const STATE_KEY_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
92
98
|
export function readState() {
|
|
93
99
|
try {
|
|
94
100
|
return JSON.parse(fs.readFileSync(_paths.stateFile, 'utf8'));
|
|
95
101
|
}
|
|
96
|
-
catch {
|
|
102
|
+
catch (e) {
|
|
103
|
+
if (e.code !== 'ENOENT') {
|
|
104
|
+
errLog('state', `corrupted state file, resetting: ${e.message}`);
|
|
105
|
+
}
|
|
97
106
|
return {};
|
|
98
107
|
}
|
|
99
108
|
}
|
|
@@ -105,7 +114,36 @@ export function writeState(state) {
|
|
|
105
114
|
fs.writeFileSync(tmp, JSON.stringify(state), 'utf8');
|
|
106
115
|
fs.renameSync(tmp, _paths.stateFile);
|
|
107
116
|
}
|
|
108
|
-
catch {
|
|
117
|
+
catch (e) {
|
|
118
|
+
errLog('state', `write failed: ${e.message}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** Remove stale per-session keys older than 7 days. */
|
|
122
|
+
export function pruneState(state) {
|
|
123
|
+
const now = Date.now();
|
|
124
|
+
const prefixes = ['session_recall_', 'banner_shown_', 'hb_count_', 'cd_', 'stop_', 'precompact_'];
|
|
125
|
+
let pruned = 0;
|
|
126
|
+
for (const key of Object.keys(state)) {
|
|
127
|
+
const isSessionKey = prefixes.some(p => key.startsWith(p));
|
|
128
|
+
if (!isSessionKey)
|
|
129
|
+
continue;
|
|
130
|
+
const val = state[key];
|
|
131
|
+
if (typeof val === 'number' && val < now - STATE_KEY_MAX_AGE_MS) {
|
|
132
|
+
delete state[key];
|
|
133
|
+
pruned++;
|
|
134
|
+
}
|
|
135
|
+
else if (typeof val !== 'number') {
|
|
136
|
+
const sessionId = key.replace(/^(session_recall_|banner_shown_|hb_count_|cd_\w+_|stop_|precompact_)/, '');
|
|
137
|
+
const hasRecentActivity = Object.keys(state).some(k => k.endsWith(sessionId) && typeof state[k] === 'number' && state[k] > now - STATE_KEY_MAX_AGE_MS);
|
|
138
|
+
if (!hasRecentActivity) {
|
|
139
|
+
delete state[key];
|
|
140
|
+
pruned++;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (pruned > 0)
|
|
145
|
+
dbg('state', `pruned ${pruned} stale keys (${Object.keys(state).length} remaining)`);
|
|
146
|
+
return state;
|
|
109
147
|
}
|
|
110
148
|
// ─── Auth ────────────────────────────────────────────────────────────────────
|
|
111
149
|
function getEncryptionKey() {
|
|
@@ -131,7 +169,7 @@ export function loadApiKey() {
|
|
|
131
169
|
}
|
|
132
170
|
}
|
|
133
171
|
// ─── Transcript reading ──────────────────────────────────────────────────────
|
|
134
|
-
/** Read Claude Code JSONL transcript */
|
|
172
|
+
/** Read Claude Code JSONL or Gemini JSON transcript */
|
|
135
173
|
export function readTranscript(transcriptPath) {
|
|
136
174
|
try {
|
|
137
175
|
if (!transcriptPath || !fs.existsSync(transcriptPath))
|
|
@@ -139,8 +177,10 @@ export function readTranscript(transcriptPath) {
|
|
|
139
177
|
const raw = fs.readFileSync(transcriptPath, 'utf8').trim();
|
|
140
178
|
if (!raw)
|
|
141
179
|
return [];
|
|
142
|
-
//
|
|
143
|
-
|
|
180
|
+
// Use platform detection (set by detectPlatform() before this runs).
|
|
181
|
+
// JSONL lines also start with '{', so content-sniffing was wrong — it
|
|
182
|
+
// routed every Claude Code transcript to the Gemini JSON parser.
|
|
183
|
+
if (_detectedPlatform === 'gemini') {
|
|
144
184
|
return readGeminiTranscript(raw);
|
|
145
185
|
}
|
|
146
186
|
const lines = raw.split('\n').filter(Boolean);
|
|
@@ -239,15 +279,22 @@ export function apiGet(apiKey, urlPath, timeout = 8000) {
|
|
|
239
279
|
res.on('data', (chunk) => chunks.push(chunk));
|
|
240
280
|
res.on('end', () => {
|
|
241
281
|
try {
|
|
242
|
-
|
|
282
|
+
const body = JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
283
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
284
|
+
errLog('api', `GET ${urlPath} → ${res.statusCode}: ${body?.error || body?.message || 'unknown'}`);
|
|
285
|
+
resolve(null);
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
resolve(body);
|
|
243
289
|
}
|
|
244
290
|
catch {
|
|
291
|
+
errLog('api', `GET ${urlPath} → ${res.statusCode} (invalid JSON)`);
|
|
245
292
|
resolve(null);
|
|
246
293
|
}
|
|
247
294
|
});
|
|
248
295
|
});
|
|
249
|
-
req.on('error', () => resolve(null));
|
|
250
|
-
req.on('timeout', () => { req.destroy(); resolve(null); });
|
|
296
|
+
req.on('error', (e) => { errLog('api', `GET ${urlPath} → network error: ${e.message}`); resolve(null); });
|
|
297
|
+
req.on('timeout', () => { req.destroy(); errLog('api', `GET ${urlPath} → timeout (${timeout}ms)`); resolve(null); });
|
|
251
298
|
req.end();
|
|
252
299
|
});
|
|
253
300
|
}
|
|
@@ -271,15 +318,22 @@ export function apiPost(apiKey, urlPath, payload, timeout = 15000) {
|
|
|
271
318
|
res.on('data', (chunk) => chunks.push(chunk));
|
|
272
319
|
res.on('end', () => {
|
|
273
320
|
try {
|
|
274
|
-
|
|
321
|
+
const parsed = JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
322
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
323
|
+
errLog('api', `POST ${urlPath} → ${res.statusCode}: ${parsed?.error || parsed?.message || 'unknown'}`);
|
|
324
|
+
resolve(null);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
resolve(parsed);
|
|
275
328
|
}
|
|
276
329
|
catch {
|
|
330
|
+
errLog('api', `POST ${urlPath} → ${res.statusCode} (invalid JSON)`);
|
|
277
331
|
resolve(null);
|
|
278
332
|
}
|
|
279
333
|
});
|
|
280
334
|
});
|
|
281
|
-
req.on('error', () => resolve(null));
|
|
282
|
-
req.on('timeout', () => { req.destroy(); resolve(null); });
|
|
335
|
+
req.on('error', (e) => { errLog('api', `POST ${urlPath} → network error: ${e.message}`); resolve(null); });
|
|
336
|
+
req.on('timeout', () => { req.destroy(); errLog('api', `POST ${urlPath} → timeout (${timeout}ms)`); resolve(null); });
|
|
283
337
|
req.write(body);
|
|
284
338
|
req.end();
|
|
285
339
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purmemo_lib.js","sourceRoot":"","sources":["../../src/hooks/purmemo_lib.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"purmemo_lib.js","sourceRoot":"","sources":["../../src/hooks/purmemo_lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Purmemo Claude Code — Session Recall
|
|
3
|
+
* Purmemo Claude Code — Session Recall + Handoff Brief
|
|
4
4
|
*
|
|
5
5
|
* Fires on SessionStart. Fetches the 5 most recently user-touched memories
|
|
6
|
-
* and
|
|
7
|
-
*
|
|
6
|
+
* and active todos, then composes a handoff brief using 5-layer compaction:
|
|
7
|
+
* Layer 1: Intent (what user was doing — never cut)
|
|
8
|
+
* Layer 2: Decisions & completions
|
|
9
|
+
* Layer 3: Open loops (blockers, todos)
|
|
10
|
+
* Layer 4: Context (tech stack, projects)
|
|
11
|
+
* Layer 5: Content excerpts (trimmed to budget)
|
|
8
12
|
*
|
|
13
|
+
* Sorts by user_updated_at (not updated_at, which gets bumped by Gemini).
|
|
9
14
|
* Skips on compact/clear. Posts a session context heartbeat.
|
|
10
15
|
* Never blocks session start on any error.
|
|
11
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purmemo_recall.d.ts","sourceRoot":"","sources":["../../src/hooks/purmemo_recall.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"purmemo_recall.d.ts","sourceRoot":"","sources":["../../src/hooks/purmemo_recall.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Purmemo Claude Code — Session Recall
|
|
3
|
+
* Purmemo Claude Code — Session Recall + Handoff Brief
|
|
4
4
|
*
|
|
5
5
|
* Fires on SessionStart. Fetches the 5 most recently user-touched memories
|
|
6
|
-
* and
|
|
7
|
-
*
|
|
6
|
+
* and active todos, then composes a handoff brief using 5-layer compaction:
|
|
7
|
+
* Layer 1: Intent (what user was doing — never cut)
|
|
8
|
+
* Layer 2: Decisions & completions
|
|
9
|
+
* Layer 3: Open loops (blockers, todos)
|
|
10
|
+
* Layer 4: Context (tech stack, projects)
|
|
11
|
+
* Layer 5: Content excerpts (trimmed to budget)
|
|
8
12
|
*
|
|
13
|
+
* Sorts by user_updated_at (not updated_at, which gets bumped by Gemini).
|
|
9
14
|
* Skips on compact/clear. Posts a session context heartbeat.
|
|
10
15
|
* Never blocks session start on any error.
|
|
11
16
|
*/
|
|
12
17
|
import * as path from 'node:path';
|
|
13
|
-
import { dbg, readState, writeState, loadApiKey, apiGet, apiPost, readHookInput, checkForUpdate, autoUpdateHooks, HOOKS_VERSION, detectPlatform, initPlatformPaths, platformEvent, } from './purmemo_lib.js';
|
|
18
|
+
import { dbg, errLog, readState, writeState, pruneState, loadApiKey, apiGet, apiPost, readHookInput, checkForUpdate, autoUpdateHooks, HOOKS_VERSION, detectPlatform, initPlatformPaths, platformEvent, } from './purmemo_lib.js';
|
|
14
19
|
const TAG = 'recall';
|
|
15
20
|
const MAX_MEMORIES = 5;
|
|
16
21
|
const MAX_PREVIEW = 300;
|
|
22
|
+
const MAX_TODOS = 8;
|
|
17
23
|
function relativeTime(date) {
|
|
18
24
|
const diff = Date.now() - date.getTime();
|
|
19
25
|
const mins = Math.floor(diff / 60000);
|
|
@@ -27,6 +33,111 @@ function relativeTime(date) {
|
|
|
27
33
|
const days = Math.floor(hrs / 24);
|
|
28
34
|
return `${days}d ago`;
|
|
29
35
|
}
|
|
36
|
+
// ── Handoff Brief Composer ──────────────────────────────────────────────────
|
|
37
|
+
// Compaction hierarchy: Intent → Decisions → Open Loops → Context → Content
|
|
38
|
+
function composeHandoffBrief(memories, todos, projectName) {
|
|
39
|
+
if (!memories.length)
|
|
40
|
+
return '';
|
|
41
|
+
const lines = [`[Purmemo — handoff brief for "${projectName}"]`];
|
|
42
|
+
// Layer 1: Intent — what user was trying to accomplish
|
|
43
|
+
const primary = memories[0];
|
|
44
|
+
if (primary.primary_intent)
|
|
45
|
+
lines.push(`Goal: ${primary.primary_intent}`);
|
|
46
|
+
if (primary.summary)
|
|
47
|
+
lines.push(`Last session: ${primary.summary}`);
|
|
48
|
+
if (primary.key_result)
|
|
49
|
+
lines.push(`Key result: ${primary.key_result}`);
|
|
50
|
+
if (primary.next_phase_hint && primary.next_phase_hint !== 'other') {
|
|
51
|
+
lines.push(`Next phase: ${primary.next_phase_hint}`);
|
|
52
|
+
}
|
|
53
|
+
// Prior session summaries (dedup by project)
|
|
54
|
+
const seenProjects = new Set();
|
|
55
|
+
if (primary.project_name)
|
|
56
|
+
seenProjects.add(primary.project_name);
|
|
57
|
+
for (let i = 1; i < memories.length; i++) {
|
|
58
|
+
const m = memories[i];
|
|
59
|
+
if (!m.summary)
|
|
60
|
+
continue;
|
|
61
|
+
const proj = m.project_name || '';
|
|
62
|
+
if (proj && seenProjects.has(proj))
|
|
63
|
+
continue;
|
|
64
|
+
if (proj)
|
|
65
|
+
seenProjects.add(proj);
|
|
66
|
+
lines.push(`Prior: ${m.summary}`);
|
|
67
|
+
}
|
|
68
|
+
// Layer 2: Decisions & completions (prefer V2.1 decisions[] over work_items)
|
|
69
|
+
const decisions = [];
|
|
70
|
+
const completions = [];
|
|
71
|
+
for (const m of memories) {
|
|
72
|
+
const decisionsList = m.decisions || [];
|
|
73
|
+
if (decisionsList.length > 0) {
|
|
74
|
+
for (const d of decisionsList) {
|
|
75
|
+
if (decisions.length < 4) {
|
|
76
|
+
const rationale = d.rationale ? ` — ${d.rationale}` : '';
|
|
77
|
+
decisions.push(` - ${d.text}${rationale}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const workItems = m.work_items || [];
|
|
83
|
+
for (const item of workItems) {
|
|
84
|
+
if (item.type === 'decision' && decisions.length < 4) {
|
|
85
|
+
decisions.push(` - ${item.text}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const comps = m.completions || [];
|
|
90
|
+
for (const c of comps) {
|
|
91
|
+
if (completions.length < 3)
|
|
92
|
+
completions.push(` - ${c.text}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (decisions.length)
|
|
96
|
+
lines.push(`Decisions:\n${decisions.join('\n')}`);
|
|
97
|
+
if (completions.length)
|
|
98
|
+
lines.push(`Completed:\n${completions.join('\n')}`);
|
|
99
|
+
// Layer 3: Open loops — blockers, open items, todos
|
|
100
|
+
const blockers = [];
|
|
101
|
+
const openItems = [];
|
|
102
|
+
for (const m of memories) {
|
|
103
|
+
const bList = m.blockers || [];
|
|
104
|
+
for (const b of bList) {
|
|
105
|
+
if (blockers.length < 4)
|
|
106
|
+
blockers.push(` - ${b.text}`);
|
|
107
|
+
}
|
|
108
|
+
const wList = m.work_items || [];
|
|
109
|
+
for (const item of wList) {
|
|
110
|
+
if (item.type !== 'decision' && item.status !== 'done' && openItems.length < 4) {
|
|
111
|
+
openItems.push(` - ${item.text}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const activeTodos = [];
|
|
116
|
+
for (const t of todos) {
|
|
117
|
+
if (t.status !== 'done' && activeTodos.length < 4) {
|
|
118
|
+
const prio = t.priority ? ` [${t.priority}]` : '';
|
|
119
|
+
activeTodos.push(` - ${t.text}${prio}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (blockers.length)
|
|
123
|
+
lines.push(`Blockers:\n${blockers.join('\n')}`);
|
|
124
|
+
if (openItems.length)
|
|
125
|
+
lines.push(`Open items:\n${openItems.join('\n')}`);
|
|
126
|
+
if (activeTodos.length)
|
|
127
|
+
lines.push(`Active todos:\n${activeTodos.join('\n')}`);
|
|
128
|
+
// Layer 4: Context — technologies, projects
|
|
129
|
+
const techs = new Set();
|
|
130
|
+
for (const m of memories) {
|
|
131
|
+
const tList = m.technologies || [];
|
|
132
|
+
for (const t of tList)
|
|
133
|
+
techs.add(t);
|
|
134
|
+
}
|
|
135
|
+
if (techs.size > 0)
|
|
136
|
+
lines.push(`Stack: ${Array.from(techs).slice(0, 8).join(', ')}`);
|
|
137
|
+
lines.push('');
|
|
138
|
+
lines.push(`${memories.length} recent memories loaded. Type a number to load fully.`);
|
|
139
|
+
return lines.join('\n');
|
|
140
|
+
}
|
|
30
141
|
async function main() {
|
|
31
142
|
let hookData;
|
|
32
143
|
try {
|
|
@@ -47,7 +158,7 @@ async function main() {
|
|
|
47
158
|
}
|
|
48
159
|
const apiKey = loadApiKey();
|
|
49
160
|
if (!apiKey) {
|
|
50
|
-
|
|
161
|
+
errLog(TAG, 'no API key — set PURMEMO_API_KEY or run purmemo setup');
|
|
51
162
|
return;
|
|
52
163
|
}
|
|
53
164
|
const projectName = path.basename(cwd || process.cwd());
|
|
@@ -56,40 +167,36 @@ async function main() {
|
|
|
56
167
|
apiPost(apiKey, '/api/v1/identity/session', {
|
|
57
168
|
project: projectName, platform: platformName, auto: true,
|
|
58
169
|
}, 5000).then(r => dbg(TAG, `session POST → ${r ? 'ok' : 'error'}`));
|
|
59
|
-
// Fetch
|
|
170
|
+
// Fetch recent memories + active todos in parallel
|
|
60
171
|
const params = new URLSearchParams({
|
|
61
172
|
limit: String(MAX_MEMORIES),
|
|
62
173
|
sort: 'user_updated_at',
|
|
63
174
|
order: 'desc',
|
|
64
175
|
});
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
176
|
+
const [memResult, todosResult] = await Promise.all([
|
|
177
|
+
apiGet(apiKey, `/api/v1/memories/?${params}`),
|
|
178
|
+
apiGet(apiKey, `/api/v1/todos?limit=${MAX_TODOS}`).catch(() => null),
|
|
179
|
+
]);
|
|
180
|
+
const memories = memResult?.memories || [];
|
|
181
|
+
const todos = (Array.isArray(todosResult) ? todosResult : todosResult?.todos) || [];
|
|
182
|
+
dbg(TAG, `recalled ${memories.length} memories, ${todos.length} todos`);
|
|
68
183
|
if (!memories.length) {
|
|
69
184
|
dbg(TAG, 'no memories found');
|
|
70
185
|
return;
|
|
71
186
|
}
|
|
72
|
-
//
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
187
|
+
// Compose handoff brief from V2 intelligence data
|
|
188
|
+
const handoffBrief = composeHandoffBrief(memories, todos, projectName);
|
|
189
|
+
// Also build numbered list for quick-load (backward compat)
|
|
190
|
+
const contextLines = [handoffBrief];
|
|
191
|
+
contextLines.push('');
|
|
77
192
|
memories.forEach((mem, i) => {
|
|
78
193
|
const title = mem.title || 'Untitled';
|
|
79
|
-
const preview = (mem.content_preview || mem.content || '')
|
|
80
|
-
.replace(/\n+/g, ' ').trim().slice(0, MAX_PREVIEW);
|
|
81
194
|
const ts = mem.updated_at || mem.created_at;
|
|
82
195
|
const when = ts ? relativeTime(new Date(ts)) : '';
|
|
83
196
|
contextLines.push(`${i + 1}. ${title}${when ? ` (${when})` : ''}`);
|
|
84
|
-
if (preview)
|
|
85
|
-
contextLines.push(` ${preview}${preview.length >= MAX_PREVIEW ? '…' : ''}`);
|
|
86
|
-
contextLines.push('');
|
|
87
197
|
});
|
|
88
|
-
contextLines.push(source === 'resume'
|
|
89
|
-
? '(Session resumed — context above from Purmemo)'
|
|
90
|
-
: '(New session — context auto-loaded from Purmemo. Type a number to load fully.)');
|
|
91
198
|
// Store recall data for first_message hook
|
|
92
|
-
|
|
199
|
+
let state = pruneState(readState());
|
|
93
200
|
state[`session_recall_${session_id}`] = {
|
|
94
201
|
project: projectName,
|
|
95
202
|
titles: memories.map(m => m.title || 'Untitled'),
|
|
@@ -118,5 +225,5 @@ async function main() {
|
|
|
118
225
|
systemMessage: `${updateNotice}${banner}\n\nType a number to load a memory.`,
|
|
119
226
|
}));
|
|
120
227
|
}
|
|
121
|
-
await main().catch(() => { });
|
|
228
|
+
await main().catch((e) => { process.stderr.write(`[purmemo:recall] fatal: ${e.message}\n`); });
|
|
122
229
|
//# sourceMappingURL=purmemo_recall.js.map
|