@memextend/claude-code 0.1.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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":""}
@@ -0,0 +1,234 @@
1
+ // packages/adapters/claude-code/src/hooks/stop.ts
2
+ // Copyright (c) 2026 ZodTTD LLC. MIT License.
3
+ import { createHash, randomUUID } from 'crypto';
4
+ import { existsSync } from 'fs';
5
+ import { readFile } from 'fs/promises';
6
+ import { join, basename } from 'path';
7
+ import { homedir } from 'os';
8
+ import { execSync } from 'child_process';
9
+ import { SQLiteStorage, LanceDBStorage, TranscriptParser, formatCaptureContent, isTextCapture, isToolCapture, createEmbedFunction, cosineSimilarity } from '@memextend/core';
10
+ import { log, logError } from './logger.js';
11
+ const MEMEXTEND_DIR = join(homedir(), '.memextend');
12
+ const CONFIG_PATH = join(MEMEXTEND_DIR, 'config.json');
13
+ const DB_PATH = join(MEMEXTEND_DIR, 'memextend.db');
14
+ const VECTORS_PATH = join(MEMEXTEND_DIR, 'vectors');
15
+ const MODELS_PATH = join(MEMEXTEND_DIR, 'models');
16
+ async function main() {
17
+ // Read input from stdin
18
+ const chunks = [];
19
+ for await (const chunk of process.stdin) {
20
+ chunks.push(chunk);
21
+ }
22
+ const input = JSON.parse(Buffer.concat(chunks).toString());
23
+ log('Stop', 'Hook fired', {
24
+ session_id: input.session_id,
25
+ cwd: input.cwd,
26
+ has_transcript: !!input.transcript_path
27
+ });
28
+ try {
29
+ // Check if memextend is initialized
30
+ if (!existsSync(DB_PATH)) {
31
+ log('Stop', 'DB not found, skipping');
32
+ outputResult({ continue: true, suppressOutput: true });
33
+ return;
34
+ }
35
+ // Check if transcript exists
36
+ if (!input.transcript_path || !existsSync(input.transcript_path)) {
37
+ log('Stop', 'No transcript path, skipping');
38
+ outputResult({ continue: true, suppressOutput: true });
39
+ return;
40
+ }
41
+ // Load config
42
+ const config = await loadConfig();
43
+ // Read and parse transcript
44
+ const transcriptContent = await readFile(input.transcript_path, 'utf-8');
45
+ // By default: capture reasoning only, all tool capture disabled
46
+ // Users can enable individual tools via config.capture.tools: { Edit: true, Write: true, ... }
47
+ const parser = new TranscriptParser({
48
+ toolConfig: config.capture?.tools ?? {},
49
+ maxReasoningLength: config.capture?.maxReasoningLength ?? 10000,
50
+ maxToolOutputLength: config.capture?.maxToolOutputLength ?? 2000,
51
+ captureReasoning: config.capture?.captureReasoning ?? true
52
+ });
53
+ const captures = parser.parse(transcriptContent);
54
+ if (captures.length === 0) {
55
+ log('Stop', 'No captures found');
56
+ outputResult({ continue: true, suppressOutput: true });
57
+ return;
58
+ }
59
+ const reasoningCount = captures.filter(isTextCapture).length;
60
+ const toolCount = captures.filter(isToolCapture).length;
61
+ log('Stop', `Found ${captures.length} captures to save`, { reasoning: reasoningCount, tools: toolCount });
62
+ // Get project ID
63
+ const projectId = getProjectId(input.cwd);
64
+ // Initialize storage
65
+ const sqlite = new SQLiteStorage(DB_PATH);
66
+ const lancedb = await LanceDBStorage.create(VECTORS_PATH);
67
+ // Ensure project is registered
68
+ const project = sqlite.getProject(projectId);
69
+ if (!project) {
70
+ sqlite.insertProject({
71
+ id: projectId,
72
+ name: basename(input.cwd),
73
+ path: input.cwd,
74
+ createdAt: new Date().toISOString()
75
+ });
76
+ }
77
+ // Create embedding function (uses real model if available, fallback otherwise)
78
+ const embedder = await createEmbedFunction(MODELS_PATH);
79
+ // Save each capture as a memory
80
+ for (const capture of captures) {
81
+ const content = formatCaptureContent(capture);
82
+ const memoryId = randomUUID();
83
+ let memory;
84
+ if (isTextCapture(capture)) {
85
+ memory = {
86
+ id: memoryId,
87
+ projectId,
88
+ content,
89
+ type: 'reasoning',
90
+ sourceTool: null,
91
+ createdAt: new Date().toISOString(),
92
+ sessionId: input.session_id,
93
+ metadata: null
94
+ };
95
+ }
96
+ else {
97
+ memory = {
98
+ id: memoryId,
99
+ projectId,
100
+ content,
101
+ type: 'tool_capture',
102
+ sourceTool: capture.tool,
103
+ createdAt: new Date().toISOString(),
104
+ sessionId: input.session_id,
105
+ metadata: {
106
+ input: capture.input,
107
+ outputPreview: capture.output.slice(0, 200)
108
+ }
109
+ };
110
+ }
111
+ // Store in SQLite
112
+ sqlite.insertMemory(memory);
113
+ // Generate and store embedding
114
+ const vector = await embedder.embed(content);
115
+ await lancedb.insertVector(memoryId, vector);
116
+ }
117
+ // Deduplicate highly similar memories to save space
118
+ const dedupeOnPrune = config.storage?.deduplicateOnPrune ?? true;
119
+ const dedupeThreshold = config.retrieval?.deduplicationThreshold ?? 0.85;
120
+ if (dedupeOnPrune) {
121
+ const dedupedIds = await deduplicateStoredMemories(sqlite, lancedb, projectId, dedupeThreshold);
122
+ if (dedupedIds.length > 0) {
123
+ log('Stop', `Deduplicated ${dedupedIds.length} similar memories`);
124
+ }
125
+ }
126
+ // Prune old memories if storage limits are configured
127
+ const maxPerProject = config.storage?.maxMemoriesPerProject ?? 500;
128
+ const maxTotal = config.storage?.maxTotalMemories ?? 5000;
129
+ if (maxPerProject > 0 || maxTotal > 0) {
130
+ const pruneResult = sqlite.pruneMemories({
131
+ maxPerProject,
132
+ maxTotal,
133
+ projectId
134
+ });
135
+ if (pruneResult.deleted > 0) {
136
+ log('Stop', `Pruned ${pruneResult.deleted} old memories to stay within limits`);
137
+ // Also delete from vector store
138
+ for (const id of pruneResult.deletedIds) {
139
+ await lancedb.deleteVector(id);
140
+ }
141
+ }
142
+ }
143
+ // Close storage and embedder
144
+ sqlite.close();
145
+ await lancedb.close();
146
+ await embedder.close();
147
+ log('Stop', `SUCCESS: Saved ${captures.length} memories`);
148
+ outputResult({ continue: true, suppressOutput: true });
149
+ }
150
+ catch (error) {
151
+ logError('Stop', error);
152
+ console.error('[memextend] Stop hook error:', error);
153
+ outputResult({ continue: true, suppressOutput: true });
154
+ }
155
+ }
156
+ function getProjectId(cwd) {
157
+ try {
158
+ const gitRoot = execSync('git rev-parse --show-toplevel', {
159
+ cwd,
160
+ encoding: 'utf-8',
161
+ stdio: ['pipe', 'pipe', 'pipe']
162
+ }).trim();
163
+ return createHash('sha256').update(gitRoot).digest('hex').slice(0, 16);
164
+ }
165
+ catch {
166
+ return createHash('sha256').update(cwd).digest('hex').slice(0, 16);
167
+ }
168
+ }
169
+ async function loadConfig() {
170
+ try {
171
+ if (existsSync(CONFIG_PATH)) {
172
+ const content = await readFile(CONFIG_PATH, 'utf-8');
173
+ return JSON.parse(content);
174
+ }
175
+ }
176
+ catch {
177
+ // Ignore config errors
178
+ }
179
+ return {};
180
+ }
181
+ function outputResult(result) {
182
+ console.log(JSON.stringify(result));
183
+ }
184
+ /**
185
+ * Deduplicate stored memories by removing older ones that are highly similar to newer ones.
186
+ * Uses cosine similarity on embeddings. Keeps the newest memory when duplicates found.
187
+ */
188
+ async function deduplicateStoredMemories(sqlite, lancedb, projectId, threshold) {
189
+ const deletedIds = [];
190
+ // Get all memories for this project, sorted by date (newest first)
191
+ const memories = sqlite.getRecentMemories(projectId, 0, 0); // 0 = unlimited
192
+ if (memories.length < 2)
193
+ return deletedIds;
194
+ // Get vectors for all memories
195
+ const memoryIds = memories.map(m => m.id);
196
+ const vectors = await lancedb.getVectorsByIds(memoryIds);
197
+ if (vectors.size < 2)
198
+ return deletedIds;
199
+ // Track which memories to keep (newest first wins)
200
+ const keepIds = new Set();
201
+ const keptVectors = [];
202
+ for (const memory of memories) {
203
+ const vector = vectors.get(memory.id);
204
+ if (!vector) {
205
+ keepIds.add(memory.id); // Keep if no vector
206
+ continue;
207
+ }
208
+ // Check if this memory is too similar to any kept memory
209
+ let isDuplicate = false;
210
+ for (const kept of keptVectors) {
211
+ const similarity = cosineSimilarity(vector, kept.vector);
212
+ if (similarity > threshold) {
213
+ isDuplicate = true;
214
+ break;
215
+ }
216
+ }
217
+ if (!isDuplicate) {
218
+ keepIds.add(memory.id);
219
+ keptVectors.push({ id: memory.id, vector });
220
+ }
221
+ else {
222
+ // Delete this duplicate
223
+ sqlite.deleteMemory(memory.id);
224
+ await lancedb.deleteVector(memory.id);
225
+ deletedIds.push(memory.id);
226
+ }
227
+ }
228
+ return deletedIds;
229
+ }
230
+ main().catch(error => {
231
+ console.error('[memextend] Fatal error:', error);
232
+ process.exit(0);
233
+ });
234
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './hooks/index.js';
2
+ export * from './mcp/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // @memextend/claude-code
2
+ // Copyright (c) 2026 ZodTTD LLC. MIT License.
3
+ export * from './hooks/index.js';
4
+ export * from './mcp/index.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,8CAA8C;AAE9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const MCP_SERVER = "server.cjs";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ // packages/adapters/claude-code/src/mcp/index.ts
2
+ // Copyright (c) 2026 ZodTTD LLC. MIT License.
3
+ // MCP server is a standalone script, not a library export
4
+ // It is executed directly by Claude Code
5
+ export const MCP_SERVER = 'server.cjs';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,8CAA8C;AAE9C,0DAA0D;AAC1D,yCAAyC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC"}