@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.
- package/README.md +411 -0
- package/dist/cli/capture.cjs +776 -0
- package/dist/cli/capture.d.ts +2 -0
- package/dist/cli/capture.d.ts.map +1 -0
- package/dist/cli/capture.js +222 -0
- package/dist/cli/capture.js.map +1 -0
- package/dist/cli/index.cjs +245 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +252 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/inject.cjs +1029 -0
- package/dist/cli/inject.d.ts +2 -0
- package/dist/cli/inject.d.ts.map +1 -0
- package/dist/cli/inject.js +279 -0
- package/dist/cli/inject.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +13 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.cjs +14865 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +384 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/utils/index.d.ts +44 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +123 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +65 -0
- package/scripts/build-cli.js +59 -0
- package/scripts/build-mcp.js +46 -0
- package/scripts/postinstall.js +57 -0
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|