@memextend/cursor 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=inject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/cli/inject.ts"],"names":[],"mappings":""}
@@ -0,0 +1,279 @@
1
+ // packages/adapters/cursor/src/cli/inject.ts
2
+ // Copyright (c) 2026 ZodTTD LLC. MIT License.
3
+ /**
4
+ * Context Injection CLI for Cursor
5
+ *
6
+ * Retrieves and outputs context for a new session.
7
+ * Can be used to populate Cursor's context or copy to clipboard.
8
+ *
9
+ * Usage:
10
+ * memextend-cursor-inject [options]
11
+ * memextend-cursor-inject --workspace <dir> # Specify workspace
12
+ * memextend-cursor-inject --days 14 # Look back 14 days
13
+ * memextend-cursor-inject --no-global # Exclude global preferences
14
+ * memextend-cursor-inject --format json # Output as JSON
15
+ * memextend-cursor-inject --clipboard # Copy to clipboard (macOS)
16
+ *
17
+ * This can be run at the start of a Cursor session.
18
+ */
19
+ import { createHash } from 'crypto';
20
+ import { existsSync } from 'fs';
21
+ import { join, basename, resolve } from 'path';
22
+ import { homedir } from 'os';
23
+ import { execSync } from 'child_process';
24
+ import { SQLiteStorage, LanceDBStorage, MemoryRetriever, createEmbedFunction, formatContextForInjection } from '@memextend/core';
25
+ const MEMEXTEND_DIR = join(homedir(), '.memextend');
26
+ const DB_PATH = join(MEMEXTEND_DIR, 'memextend.db');
27
+ const VECTORS_PATH = join(MEMEXTEND_DIR, 'vectors');
28
+ const MODELS_PATH = join(MEMEXTEND_DIR, 'models');
29
+ function parseArgs() {
30
+ const args = process.argv.slice(2);
31
+ const options = {
32
+ includeGlobal: true,
33
+ format: 'text',
34
+ };
35
+ for (let i = 0; i < args.length; i++) {
36
+ const arg = args[i];
37
+ const next = args[i + 1];
38
+ switch (arg) {
39
+ case '--workspace':
40
+ case '-w':
41
+ options.workspace = next;
42
+ i++;
43
+ break;
44
+ case '--days':
45
+ case '-d':
46
+ options.days = parseInt(next, 10);
47
+ i++;
48
+ break;
49
+ case '--limit':
50
+ case '-l':
51
+ options.limit = parseInt(next, 10);
52
+ i++;
53
+ break;
54
+ case '--no-global':
55
+ options.includeGlobal = false;
56
+ break;
57
+ case '--format':
58
+ case '-f':
59
+ options.format = next;
60
+ i++;
61
+ break;
62
+ case '--clipboard':
63
+ case '-c':
64
+ options.clipboard = true;
65
+ break;
66
+ case '--quiet':
67
+ case '-q':
68
+ options.quiet = true;
69
+ break;
70
+ case '--help':
71
+ case '-h':
72
+ printHelp();
73
+ process.exit(0);
74
+ }
75
+ }
76
+ return options;
77
+ }
78
+ function printHelp() {
79
+ console.log(`
80
+ memextend-cursor-inject - Retrieve context for session start
81
+
82
+ USAGE:
83
+ memextend-cursor-inject [OPTIONS]
84
+
85
+ OPTIONS:
86
+ -w, --workspace <dir> Workspace directory (default: cwd)
87
+ -d, --days <n> Look back N days (default: 7)
88
+ -l, --limit <n> Maximum memories to retrieve (default: 10)
89
+ --no-global Exclude global preferences
90
+ -f, --format <type> Output format: text, json, markdown (default: text)
91
+ -c, --clipboard Copy to clipboard (macOS only)
92
+ -q, --quiet Only output the context (no status messages)
93
+ -h, --help Show this help
94
+
95
+ EXAMPLES:
96
+ # Get context for current workspace
97
+ memextend-cursor-inject
98
+
99
+ # Get context for specific project
100
+ memextend-cursor-inject -w /path/to/project
101
+
102
+ # Get extended history
103
+ memextend-cursor-inject --days 30 --limit 20
104
+
105
+ # Copy to clipboard for pasting into Cursor
106
+ memextend-cursor-inject --clipboard
107
+
108
+ # Get JSON for programmatic use
109
+ memextend-cursor-inject --format json
110
+
111
+ INTEGRATION:
112
+ Run at session start or add to your shell profile.
113
+ Can be piped to Cursor's context via extensions or tasks.
114
+ `);
115
+ }
116
+ function getProjectId(cwd) {
117
+ try {
118
+ const gitRoot = execSync('git rev-parse --show-toplevel', {
119
+ cwd,
120
+ encoding: 'utf-8',
121
+ stdio: ['pipe', 'pipe', 'pipe']
122
+ }).trim();
123
+ return createHash('sha256').update(gitRoot).digest('hex').slice(0, 16);
124
+ }
125
+ catch {
126
+ return createHash('sha256').update(cwd).digest('hex').slice(0, 16);
127
+ }
128
+ }
129
+ function copyToClipboard(text) {
130
+ try {
131
+ // macOS
132
+ if (process.platform === 'darwin') {
133
+ execSync('pbcopy', { input: text });
134
+ return true;
135
+ }
136
+ // Linux with xclip
137
+ if (process.platform === 'linux') {
138
+ execSync('xclip -selection clipboard', { input: text });
139
+ return true;
140
+ }
141
+ // Windows
142
+ if (process.platform === 'win32') {
143
+ execSync('clip', { input: text });
144
+ return true;
145
+ }
146
+ return false;
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ async function main() {
153
+ const options = parseArgs();
154
+ // Check if memextend is initialized
155
+ if (!existsSync(DB_PATH)) {
156
+ if (!options.quiet) {
157
+ console.error('memextend not initialized. Run `memextend init` first.');
158
+ }
159
+ // Output empty context on error
160
+ console.log('<memextend-context>\nNo memories available.\n</memextend-context>');
161
+ process.exit(0); // Don't fail - just return empty context
162
+ }
163
+ // Determine workspace
164
+ const workspace = options.workspace ? resolve(options.workspace) : process.cwd();
165
+ const projectId = getProjectId(workspace);
166
+ // Initialize storage
167
+ const sqlite = new SQLiteStorage(DB_PATH);
168
+ const lancedb = await LanceDBStorage.create(VECTORS_PATH);
169
+ const embedder = await createEmbedFunction(MODELS_PATH);
170
+ try {
171
+ const retriever = new MemoryRetriever(sqlite, lancedb, embedder.embedQuery, {
172
+ defaultLimit: options.limit ?? 0,
173
+ defaultRecentDays: options.days ?? 0,
174
+ });
175
+ // Ensure project is registered
176
+ const project = sqlite.getProject(projectId);
177
+ if (!project) {
178
+ sqlite.insertProject({
179
+ id: projectId,
180
+ name: basename(workspace),
181
+ path: workspace,
182
+ createdAt: new Date().toISOString()
183
+ });
184
+ }
185
+ // Get context for session
186
+ const context = await retriever.getContextForSession(projectId, {
187
+ includeGlobal: options.includeGlobal ?? true,
188
+ recentDays: options.days,
189
+ });
190
+ // Check if there's any content
191
+ const hasContent = context.recentMemories.length > 0 ||
192
+ context.globalProfile.length > 0 ||
193
+ (context.relevantMemories && context.relevantMemories.length > 0);
194
+ let output;
195
+ if (options.format === 'json') {
196
+ output = JSON.stringify({
197
+ projectId,
198
+ projectName: basename(workspace),
199
+ workspace,
200
+ recentMemories: context.recentMemories,
201
+ globalProfile: context.globalProfile,
202
+ relevantMemories: context.relevantMemories,
203
+ hasContent,
204
+ }, null, 2);
205
+ }
206
+ else if (options.format === 'markdown') {
207
+ if (!hasContent) {
208
+ output = `# Memory Context for ${basename(workspace)}\n\nNo memories found. This might be a new project.\n`;
209
+ }
210
+ else {
211
+ output = formatContextAsMarkdown(context, basename(workspace));
212
+ }
213
+ }
214
+ else {
215
+ if (!hasContent) {
216
+ output = `<memextend-context>\n## Project: ${basename(workspace)}\n\nNo memories found. This might be a new project.\n</memextend-context>`;
217
+ }
218
+ else {
219
+ output = formatContextForInjection(context);
220
+ }
221
+ }
222
+ // Handle clipboard
223
+ if (options.clipboard) {
224
+ const copied = copyToClipboard(output);
225
+ if (!options.quiet) {
226
+ if (copied) {
227
+ console.error('Context copied to clipboard!');
228
+ }
229
+ else {
230
+ console.error('Warning: Could not copy to clipboard');
231
+ }
232
+ }
233
+ }
234
+ // Output
235
+ console.log(output);
236
+ }
237
+ finally {
238
+ // Cleanup
239
+ sqlite.close();
240
+ await lancedb.close();
241
+ await embedder.close();
242
+ }
243
+ }
244
+ function formatContextAsMarkdown(context, projectName) {
245
+ const lines = [`# Memory Context for ${projectName}`, ''];
246
+ if (context.recentMemories.length > 0) {
247
+ lines.push('## Recent Work');
248
+ lines.push('');
249
+ for (const memory of context.recentMemories) {
250
+ const date = new Date(memory.createdAt).toLocaleDateString();
251
+ lines.push(`### ${date}`);
252
+ lines.push('');
253
+ lines.push(memory.content);
254
+ lines.push('');
255
+ }
256
+ }
257
+ if (context.globalProfile.length > 0) {
258
+ lines.push('## User Preferences (Global)');
259
+ lines.push('');
260
+ for (const profile of context.globalProfile) {
261
+ lines.push(`- **${profile.key}**: ${profile.content}`);
262
+ }
263
+ lines.push('');
264
+ }
265
+ if (context.relevantMemories && context.relevantMemories.length > 0) {
266
+ lines.push('## Relevant Past Work');
267
+ lines.push('');
268
+ for (const result of context.relevantMemories) {
269
+ lines.push(`- ${result.memory.content.split('\n')[0].slice(0, 100)}`);
270
+ }
271
+ lines.push('');
272
+ }
273
+ return lines.join('\n');
274
+ }
275
+ main().catch(error => {
276
+ console.error('Error:', error.message);
277
+ process.exit(1);
278
+ });
279
+ //# sourceMappingURL=inject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/cli/inject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Cursor Adapter for memextend
3
+ *
4
+ * This adapter provides memextend integration for Cursor IDE through:
5
+ * 1. MCP server - for mid-session memory operations (search, save)
6
+ * 2. CLI tools - for session capture and context injection
7
+ *
8
+ * Unlike Claude Code which has native hooks, Cursor requires a different approach:
9
+ * - MCP server provides tools that Claude/AI can use during sessions
10
+ * - CLI tools allow manual or scripted session capture/injection
11
+ *
12
+ * See README.md for setup instructions.
13
+ */
14
+ export declare const ADAPTER_NAME = "cursor";
15
+ export declare const ADAPTER_VERSION = "0.1.0";
16
+ export declare const ADAPTER_STATUS = "beta";
17
+ export * from './mcp/index.js';
18
+ export * from './cli/index.js';
19
+ export * from './utils/index.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ // @memextend/cursor
2
+ // Copyright (c) 2026 ZodTTD LLC. MIT License.
3
+ /**
4
+ * Cursor Adapter for memextend
5
+ *
6
+ * This adapter provides memextend integration for Cursor IDE through:
7
+ * 1. MCP server - for mid-session memory operations (search, save)
8
+ * 2. CLI tools - for session capture and context injection
9
+ *
10
+ * Unlike Claude Code which has native hooks, Cursor requires a different approach:
11
+ * - MCP server provides tools that Claude/AI can use during sessions
12
+ * - CLI tools allow manual or scripted session capture/injection
13
+ *
14
+ * See README.md for setup instructions.
15
+ */
16
+ export const ADAPTER_NAME = 'cursor';
17
+ export const ADAPTER_VERSION = '0.1.0';
18
+ export const ADAPTER_STATUS = 'beta';
19
+ export * from './mcp/index.js';
20
+ export * from './cli/index.js';
21
+ export * from './utils/index.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,8CAA8C;AAE9C;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MCP server for Cursor integration
3
+ *
4
+ * The MCP server is a standalone script executed by Cursor.
5
+ * It provides memory tools (search, save, recall) that Claude can use during sessions.
6
+ *
7
+ * Configuration: Add to ~/.cursor/mcp.json
8
+ *
9
+ * See README.md for setup instructions.
10
+ */
11
+ export declare const MCP_SERVER_SCRIPT = "server.cjs";
12
+ export declare const MCP_SERVER_NAME = "memextend";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,eAAe,cAAc,CAAC"}
@@ -0,0 +1,15 @@
1
+ // packages/adapters/cursor/src/mcp/index.ts
2
+ // Copyright (c) 2026 ZodTTD LLC. MIT License.
3
+ /**
4
+ * MCP server for Cursor integration
5
+ *
6
+ * The MCP server is a standalone script executed by Cursor.
7
+ * It provides memory tools (search, save, recall) that Claude can use during sessions.
8
+ *
9
+ * Configuration: Add to ~/.cursor/mcp.json
10
+ *
11
+ * See README.md for setup instructions.
12
+ */
13
+ export const MCP_SERVER_SCRIPT = 'server.cjs';
14
+ export const MCP_SERVER_NAME = 'memextend';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,8CAA8C;AAE9C;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC9C,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC"}