@rangerchaz/aimem 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.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +380 -0
  3. package/dist/cli/commands/git.d.ts +6 -0
  4. package/dist/cli/commands/git.d.ts.map +1 -0
  5. package/dist/cli/commands/git.js +298 -0
  6. package/dist/cli/commands/git.js.map +1 -0
  7. package/dist/cli/commands/hook-session-end.d.ts +7 -0
  8. package/dist/cli/commands/hook-session-end.d.ts.map +1 -0
  9. package/dist/cli/commands/hook-session-end.js +109 -0
  10. package/dist/cli/commands/hook-session-end.js.map +1 -0
  11. package/dist/cli/commands/hook-session-start.d.ts +7 -0
  12. package/dist/cli/commands/hook-session-start.d.ts.map +1 -0
  13. package/dist/cli/commands/hook-session-start.js +116 -0
  14. package/dist/cli/commands/hook-session-start.js.map +1 -0
  15. package/dist/cli/commands/import.d.ts +14 -0
  16. package/dist/cli/commands/import.d.ts.map +1 -0
  17. package/dist/cli/commands/import.js +527 -0
  18. package/dist/cli/commands/import.js.map +1 -0
  19. package/dist/cli/commands/init.d.ts +2 -0
  20. package/dist/cli/commands/init.d.ts.map +1 -0
  21. package/dist/cli/commands/init.js +32 -0
  22. package/dist/cli/commands/init.js.map +1 -0
  23. package/dist/cli/commands/mcp-serve.d.ts +2 -0
  24. package/dist/cli/commands/mcp-serve.d.ts.map +1 -0
  25. package/dist/cli/commands/mcp-serve.js +5 -0
  26. package/dist/cli/commands/mcp-serve.js.map +1 -0
  27. package/dist/cli/commands/query.d.ts +8 -0
  28. package/dist/cli/commands/query.d.ts.map +1 -0
  29. package/dist/cli/commands/query.js +83 -0
  30. package/dist/cli/commands/query.js.map +1 -0
  31. package/dist/cli/commands/setup.d.ts +10 -0
  32. package/dist/cli/commands/setup.d.ts.map +1 -0
  33. package/dist/cli/commands/setup.js +504 -0
  34. package/dist/cli/commands/setup.js.map +1 -0
  35. package/dist/cli/commands/start.d.ts +8 -0
  36. package/dist/cli/commands/start.d.ts.map +1 -0
  37. package/dist/cli/commands/start.js +90 -0
  38. package/dist/cli/commands/start.js.map +1 -0
  39. package/dist/cli/commands/status.d.ts +2 -0
  40. package/dist/cli/commands/status.d.ts.map +1 -0
  41. package/dist/cli/commands/status.js +85 -0
  42. package/dist/cli/commands/status.js.map +1 -0
  43. package/dist/cli/commands/stop.d.ts +7 -0
  44. package/dist/cli/commands/stop.d.ts.map +1 -0
  45. package/dist/cli/commands/stop.js +46 -0
  46. package/dist/cli/commands/stop.js.map +1 -0
  47. package/dist/cli/commands/visualize.d.ts +8 -0
  48. package/dist/cli/commands/visualize.d.ts.map +1 -0
  49. package/dist/cli/commands/visualize.js +96 -0
  50. package/dist/cli/commands/visualize.js.map +1 -0
  51. package/dist/cli/index.d.ts +3 -0
  52. package/dist/cli/index.d.ts.map +1 -0
  53. package/dist/cli/index.js +114 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/db/index.d.ts +55 -0
  56. package/dist/db/index.d.ts.map +1 -0
  57. package/dist/db/index.js +464 -0
  58. package/dist/db/index.js.map +1 -0
  59. package/dist/db/schema.d.ts +4 -0
  60. package/dist/db/schema.d.ts.map +1 -0
  61. package/dist/db/schema.js +200 -0
  62. package/dist/db/schema.js.map +1 -0
  63. package/dist/extractor/index.d.ts +27 -0
  64. package/dist/extractor/index.d.ts.map +1 -0
  65. package/dist/extractor/index.js +227 -0
  66. package/dist/extractor/index.js.map +1 -0
  67. package/dist/git/extractor.d.ts +30 -0
  68. package/dist/git/extractor.d.ts.map +1 -0
  69. package/dist/git/extractor.js +126 -0
  70. package/dist/git/extractor.js.map +1 -0
  71. package/dist/git/hooks.d.ts +36 -0
  72. package/dist/git/hooks.d.ts.map +1 -0
  73. package/dist/git/hooks.js +142 -0
  74. package/dist/git/hooks.js.map +1 -0
  75. package/dist/git/index.d.ts +69 -0
  76. package/dist/git/index.d.ts.map +1 -0
  77. package/dist/git/index.js +250 -0
  78. package/dist/git/index.js.map +1 -0
  79. package/dist/indexer/index.d.ts +20 -0
  80. package/dist/indexer/index.d.ts.map +1 -0
  81. package/dist/indexer/index.js +173 -0
  82. package/dist/indexer/index.js.map +1 -0
  83. package/dist/indexer/parsers/base.d.ts +19 -0
  84. package/dist/indexer/parsers/base.d.ts.map +1 -0
  85. package/dist/indexer/parsers/base.js +46 -0
  86. package/dist/indexer/parsers/base.js.map +1 -0
  87. package/dist/indexer/parsers/cpp.d.ts +3 -0
  88. package/dist/indexer/parsers/cpp.d.ts.map +1 -0
  89. package/dist/indexer/parsers/cpp.js +180 -0
  90. package/dist/indexer/parsers/cpp.js.map +1 -0
  91. package/dist/indexer/parsers/go.d.ts +3 -0
  92. package/dist/indexer/parsers/go.d.ts.map +1 -0
  93. package/dist/indexer/parsers/go.js +98 -0
  94. package/dist/indexer/parsers/go.js.map +1 -0
  95. package/dist/indexer/parsers/java.d.ts +3 -0
  96. package/dist/indexer/parsers/java.d.ts.map +1 -0
  97. package/dist/indexer/parsers/java.js +204 -0
  98. package/dist/indexer/parsers/java.js.map +1 -0
  99. package/dist/indexer/parsers/javascript.d.ts +3 -0
  100. package/dist/indexer/parsers/javascript.d.ts.map +1 -0
  101. package/dist/indexer/parsers/javascript.js +157 -0
  102. package/dist/indexer/parsers/javascript.js.map +1 -0
  103. package/dist/indexer/parsers/kotlin.d.ts +3 -0
  104. package/dist/indexer/parsers/kotlin.d.ts.map +1 -0
  105. package/dist/indexer/parsers/kotlin.js +182 -0
  106. package/dist/indexer/parsers/kotlin.js.map +1 -0
  107. package/dist/indexer/parsers/php.d.ts +3 -0
  108. package/dist/indexer/parsers/php.d.ts.map +1 -0
  109. package/dist/indexer/parsers/php.js +190 -0
  110. package/dist/indexer/parsers/php.js.map +1 -0
  111. package/dist/indexer/parsers/python.d.ts +3 -0
  112. package/dist/indexer/parsers/python.d.ts.map +1 -0
  113. package/dist/indexer/parsers/python.js +101 -0
  114. package/dist/indexer/parsers/python.js.map +1 -0
  115. package/dist/indexer/parsers/ruby.d.ts +3 -0
  116. package/dist/indexer/parsers/ruby.d.ts.map +1 -0
  117. package/dist/indexer/parsers/ruby.js +92 -0
  118. package/dist/indexer/parsers/ruby.js.map +1 -0
  119. package/dist/indexer/parsers/rust.d.ts +3 -0
  120. package/dist/indexer/parsers/rust.d.ts.map +1 -0
  121. package/dist/indexer/parsers/rust.js +190 -0
  122. package/dist/indexer/parsers/rust.js.map +1 -0
  123. package/dist/indexer/watcher-daemon.d.ts +2 -0
  124. package/dist/indexer/watcher-daemon.d.ts.map +1 -0
  125. package/dist/indexer/watcher-daemon.js +27 -0
  126. package/dist/indexer/watcher-daemon.js.map +1 -0
  127. package/dist/indexer/watcher.d.ts +7 -0
  128. package/dist/indexer/watcher.d.ts.map +1 -0
  129. package/dist/indexer/watcher.js +77 -0
  130. package/dist/indexer/watcher.js.map +1 -0
  131. package/dist/mcp/server.d.ts +2 -0
  132. package/dist/mcp/server.d.ts.map +1 -0
  133. package/dist/mcp/server.js +241 -0
  134. package/dist/mcp/server.js.map +1 -0
  135. package/dist/proxy/interceptor-mockttp.d.ts +27 -0
  136. package/dist/proxy/interceptor-mockttp.d.ts.map +1 -0
  137. package/dist/proxy/interceptor-mockttp.js +274 -0
  138. package/dist/proxy/interceptor-mockttp.js.map +1 -0
  139. package/dist/proxy/proxy-daemon.d.ts +5 -0
  140. package/dist/proxy/proxy-daemon.d.ts.map +1 -0
  141. package/dist/proxy/proxy-daemon.js +26 -0
  142. package/dist/proxy/proxy-daemon.js.map +1 -0
  143. package/dist/query/index.d.ts +32 -0
  144. package/dist/query/index.d.ts.map +1 -0
  145. package/dist/query/index.js +135 -0
  146. package/dist/query/index.js.map +1 -0
  147. package/dist/types/index.d.ts +89 -0
  148. package/dist/types/index.d.ts.map +1 -0
  149. package/dist/types/index.js +3 -0
  150. package/dist/types/index.js.map +1 -0
  151. package/dist/visualize/index.d.ts +144 -0
  152. package/dist/visualize/index.d.ts.map +1 -0
  153. package/dist/visualize/index.js +707 -0
  154. package/dist/visualize/index.js.map +1 -0
  155. package/dist/visualize/server.d.ts +7 -0
  156. package/dist/visualize/server.d.ts.map +1 -0
  157. package/dist/visualize/server.js +77 -0
  158. package/dist/visualize/server.js.map +1 -0
  159. package/dist/visualize/template.d.ts +3 -0
  160. package/dist/visualize/template.d.ts.map +1 -0
  161. package/dist/visualize/template.js +3465 -0
  162. package/dist/visualize/template.js.map +1 -0
  163. package/package.json +56 -0
@@ -0,0 +1,527 @@
1
+ /**
2
+ * Import command: Import old conversations from various AI coding tools
3
+ */
4
+ import { existsSync, readdirSync, readFileSync } from 'fs';
5
+ import { join, basename } from 'path';
6
+ import { homedir } from 'os';
7
+ import chalk from 'chalk';
8
+ import { getDb, getProjectByPath, ensureDataDir, } from '../../db/index.js';
9
+ // Decision extraction patterns (same as proxy)
10
+ const DECISION_PATTERNS = [
11
+ /(?:we should|let's|I'll|I will|going to|decided to|will use|using|chose|choosing|the best approach is|recommend using)\s+(.+?)(?:\.|$)/gi,
12
+ /(?:the approach|the solution|the fix|the implementation|the strategy)\s+(?:is|will be|should be)\s+(.+?)(?:\.|$)/gi,
13
+ /(?:because|since|the reason is|this is because)\s+(.+?)(?:\.|$)/gi,
14
+ /(?:I've implemented|I've added|I've created|I've updated)\s+(.+?)(?:\.|$)/gi,
15
+ ];
16
+ const REJECTION_PATTERNS = [
17
+ /(?:instead of|rather than|not using|won't use|shouldn't use|avoid using|don't use)\s+(.+?)(?:\.|$)/gi,
18
+ /(?:rejected|ruled out|decided against|not recommended|wouldn't work)\s+(.+?)(?:\.|$)/gi,
19
+ /(?:the problem with|the issue with|doesn't work because)\s+(.+?)(?:\.|$)/gi,
20
+ ];
21
+ // ============================================================================
22
+ // Shared utilities
23
+ // ============================================================================
24
+ function getSentenceAround(text, index) {
25
+ const start = Math.max(0, text.lastIndexOf('.', index) + 1, text.lastIndexOf('\n', index) + 1);
26
+ let endDot = text.indexOf('.', index);
27
+ let endNewline = text.indexOf('\n', index);
28
+ let end = text.length;
29
+ if (endDot !== -1)
30
+ end = Math.min(end, endDot + 1);
31
+ if (endNewline !== -1)
32
+ end = Math.min(end, endNewline);
33
+ return text.slice(start, end).trim();
34
+ }
35
+ function isValidExtraction(sentence) {
36
+ if (sentence.length < 30 || sentence.length > 500)
37
+ return false;
38
+ if ((sentence.match(/{/g) || []).length + (sentence.match(/}/g) || []).length > 3)
39
+ return false;
40
+ if (sentence.includes('```'))
41
+ return false;
42
+ return true;
43
+ }
44
+ function extractDecisions(content) {
45
+ const extractions = [];
46
+ const seen = new Set();
47
+ for (const pattern of DECISION_PATTERNS) {
48
+ pattern.lastIndex = 0;
49
+ let match;
50
+ while ((match = pattern.exec(content)) !== null) {
51
+ const sentence = getSentenceAround(content, match.index);
52
+ if (isValidExtraction(sentence)) {
53
+ const key = sentence.slice(0, 80).toLowerCase();
54
+ if (!seen.has(key)) {
55
+ seen.add(key);
56
+ extractions.push({ type: 'decision', content: sentence });
57
+ }
58
+ }
59
+ }
60
+ }
61
+ for (const pattern of REJECTION_PATTERNS) {
62
+ pattern.lastIndex = 0;
63
+ let match;
64
+ while ((match = pattern.exec(content)) !== null) {
65
+ const sentence = getSentenceAround(content, match.index);
66
+ if (isValidExtraction(sentence)) {
67
+ const key = sentence.slice(0, 80).toLowerCase();
68
+ if (!seen.has(key)) {
69
+ seen.add(key);
70
+ extractions.push({ type: 'rejection', content: sentence });
71
+ }
72
+ }
73
+ }
74
+ }
75
+ return extractions;
76
+ }
77
+ // ============================================================================
78
+ // Claude Code import
79
+ // ============================================================================
80
+ function getClaudeProjectsDir() {
81
+ return join(homedir(), '.claude', 'projects');
82
+ }
83
+ function encodeProjectPath(projectPath) {
84
+ return '-' + projectPath.replace(/\//g, '-').replace(/^-/, '');
85
+ }
86
+ function findClaudeProject(projectPath) {
87
+ const claudeProjectsDir = getClaudeProjectsDir();
88
+ if (!existsSync(claudeProjectsDir))
89
+ return null;
90
+ const encoded = encodeProjectPath(projectPath);
91
+ const fullPath = join(claudeProjectsDir, encoded);
92
+ if (existsSync(fullPath)) {
93
+ return fullPath;
94
+ }
95
+ const dirs = readdirSync(claudeProjectsDir);
96
+ for (const dir of dirs) {
97
+ if (dir.includes(basename(projectPath))) {
98
+ return join(claudeProjectsDir, dir);
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+ function extractClaudeAssistantText(message) {
104
+ if (!message.message || message.message.role !== 'assistant') {
105
+ return '';
106
+ }
107
+ const content = message.message.content;
108
+ if (typeof content === 'string') {
109
+ return content;
110
+ }
111
+ if (Array.isArray(content)) {
112
+ return content
113
+ .filter((block) => block.type === 'text' && block.text)
114
+ .map((block) => block.text)
115
+ .join('\n');
116
+ }
117
+ return '';
118
+ }
119
+ function parseClaudeConversationFile(filePath) {
120
+ const content = readFileSync(filePath, 'utf-8');
121
+ const messages = [];
122
+ for (const line of content.split('\n')) {
123
+ if (!line.trim())
124
+ continue;
125
+ try {
126
+ const parsed = JSON.parse(line);
127
+ if (parsed.type === 'assistant') {
128
+ messages.push(parsed);
129
+ }
130
+ }
131
+ catch {
132
+ // Skip invalid lines
133
+ }
134
+ }
135
+ return messages;
136
+ }
137
+ async function importFromClaude(projectPath, projectId, existingExtractions, dryRun, limit, full = false) {
138
+ const claudeProjectDir = findClaudeProject(projectPath);
139
+ if (!claudeProjectDir) {
140
+ return null;
141
+ }
142
+ console.log(chalk.bold('\n📁 Claude Code'));
143
+ console.log(` ${chalk.gray(claudeProjectDir)}`);
144
+ const db = getDb();
145
+ const files = readdirSync(claudeProjectDir)
146
+ .filter((f) => f.endsWith('.jsonl') && !f.startsWith('agent-'))
147
+ .map((f) => join(claudeProjectDir, f));
148
+ if (files.length === 0) {
149
+ console.log(chalk.gray(' No conversation files found'));
150
+ return null;
151
+ }
152
+ console.log(` Found ${files.length} conversation files`);
153
+ let totalMessages = 0;
154
+ let totalExtractions = 0;
155
+ let skippedDuplicates = 0;
156
+ for (const file of files) {
157
+ const fileName = basename(file);
158
+ const messages = parseClaudeConversationFile(file);
159
+ if (messages.length === 0)
160
+ continue;
161
+ for (const msg of messages) {
162
+ if (totalExtractions >= limit)
163
+ break;
164
+ const text = extractClaudeAssistantText(msg);
165
+ if (!text || text.length < 100)
166
+ continue;
167
+ totalMessages++;
168
+ const extractions = extractDecisions(text);
169
+ const newExtractions = extractions.filter((e) => {
170
+ const key = e.content.slice(0, 80).toLowerCase();
171
+ if (existingExtractions.has(key)) {
172
+ skippedDuplicates++;
173
+ return false;
174
+ }
175
+ existingExtractions.add(key);
176
+ return true;
177
+ });
178
+ if (newExtractions.length === 0)
179
+ continue;
180
+ if (dryRun) {
181
+ if (full) {
182
+ console.log(chalk.gray(` [full] ${text.slice(0, 80)}...`));
183
+ }
184
+ for (const ext of newExtractions) {
185
+ console.log(chalk.gray(` [${ext.type}] ${ext.content.slice(0, 50)}...`));
186
+ totalExtractions++;
187
+ }
188
+ }
189
+ else {
190
+ const timestamp = msg.timestamp || new Date().toISOString();
191
+ // Store full content if --full flag is set, otherwise just metadata
192
+ const rawContent = full ? text : JSON.stringify({ imported: true, source: fileName });
193
+ const result = db.prepare(`
194
+ INSERT INTO conversations (project_id, model, tool, raw_content, timestamp)
195
+ VALUES (?, ?, ?, ?, ?)
196
+ `).run(projectId, 'imported', 'claude-code', rawContent, timestamp);
197
+ const conversationId = result.lastInsertRowid;
198
+ for (const ext of newExtractions) {
199
+ db.prepare(`
200
+ INSERT INTO extractions (conversation_id, type, content, metadata)
201
+ VALUES (?, ?, ?, ?)
202
+ `).run(conversationId, ext.type, ext.content, JSON.stringify({ imported: true, source: 'claude' }));
203
+ totalExtractions++;
204
+ }
205
+ }
206
+ }
207
+ if (totalExtractions >= limit)
208
+ break;
209
+ }
210
+ return { source: 'claude', messages: totalMessages, extractions: totalExtractions, duplicates: skippedDuplicates };
211
+ }
212
+ // ============================================================================
213
+ // Aider import
214
+ // ============================================================================
215
+ function findAiderHistoryFiles(projectPath) {
216
+ const files = [];
217
+ // Check for .aider.chat.history.md in project root
218
+ const historyFile = join(projectPath, '.aider.chat.history.md');
219
+ if (existsSync(historyFile)) {
220
+ files.push(historyFile);
221
+ }
222
+ // Also check for .aider.input.history and .aider.tags.cache.v3 patterns
223
+ try {
224
+ const projectFiles = readdirSync(projectPath);
225
+ for (const f of projectFiles) {
226
+ if (f.startsWith('.aider') && f.includes('history') && f.endsWith('.md')) {
227
+ const fullPath = join(projectPath, f);
228
+ if (!files.includes(fullPath)) {
229
+ files.push(fullPath);
230
+ }
231
+ }
232
+ }
233
+ }
234
+ catch {
235
+ // Ignore read errors
236
+ }
237
+ return files;
238
+ }
239
+ function parseAiderHistory(content) {
240
+ // Aider format:
241
+ // #### /ask or #### user message
242
+ // User content
243
+ //
244
+ // #### assistant or #### Claude response
245
+ // Assistant content
246
+ const assistantBlocks = [];
247
+ const lines = content.split('\n');
248
+ let inAssistantBlock = false;
249
+ let currentBlock = '';
250
+ for (const line of lines) {
251
+ // Check for block headers
252
+ if (line.startsWith('#### ')) {
253
+ // Save previous assistant block
254
+ if (inAssistantBlock && currentBlock.trim()) {
255
+ assistantBlocks.push(currentBlock.trim());
256
+ }
257
+ currentBlock = '';
258
+ // Check if this is an assistant block
259
+ const header = line.slice(5).toLowerCase();
260
+ inAssistantBlock = !header.startsWith('/') &&
261
+ !header.includes('user') &&
262
+ !header.includes('human') &&
263
+ (header.includes('assistant') ||
264
+ header.includes('claude') ||
265
+ header.includes('gpt') ||
266
+ header.includes('aider') ||
267
+ header === '');
268
+ }
269
+ else if (inAssistantBlock) {
270
+ currentBlock += line + '\n';
271
+ }
272
+ }
273
+ // Don't forget the last block
274
+ if (inAssistantBlock && currentBlock.trim()) {
275
+ assistantBlocks.push(currentBlock.trim());
276
+ }
277
+ return assistantBlocks;
278
+ }
279
+ async function importFromAider(projectPath, projectId, existingExtractions, dryRun, limit, full = false) {
280
+ const historyFiles = findAiderHistoryFiles(projectPath);
281
+ if (historyFiles.length === 0) {
282
+ return null;
283
+ }
284
+ console.log(chalk.bold('\n📁 Aider'));
285
+ console.log(` Found ${historyFiles.length} history file(s)`);
286
+ const db = getDb();
287
+ let totalMessages = 0;
288
+ let totalExtractions = 0;
289
+ let skippedDuplicates = 0;
290
+ for (const file of historyFiles) {
291
+ const fileName = basename(file);
292
+ console.log(` ${chalk.gray(fileName)}`);
293
+ const content = readFileSync(file, 'utf-8');
294
+ const assistantBlocks = parseAiderHistory(content);
295
+ if (assistantBlocks.length === 0) {
296
+ console.log(chalk.gray(' No assistant messages found'));
297
+ continue;
298
+ }
299
+ console.log(` ${assistantBlocks.length} assistant messages`);
300
+ for (const block of assistantBlocks) {
301
+ if (totalExtractions >= limit)
302
+ break;
303
+ if (block.length < 100)
304
+ continue;
305
+ totalMessages++;
306
+ const extractions = extractDecisions(block);
307
+ const newExtractions = extractions.filter((e) => {
308
+ const key = e.content.slice(0, 80).toLowerCase();
309
+ if (existingExtractions.has(key)) {
310
+ skippedDuplicates++;
311
+ return false;
312
+ }
313
+ existingExtractions.add(key);
314
+ return true;
315
+ });
316
+ if (newExtractions.length === 0)
317
+ continue;
318
+ if (dryRun) {
319
+ if (full) {
320
+ console.log(chalk.gray(` [full] ${block.slice(0, 80)}...`));
321
+ }
322
+ for (const ext of newExtractions) {
323
+ console.log(chalk.gray(` [${ext.type}] ${ext.content.slice(0, 50)}...`));
324
+ totalExtractions++;
325
+ }
326
+ }
327
+ else {
328
+ // Store full content if --full flag is set, otherwise just metadata
329
+ const rawContent = full ? block : JSON.stringify({ imported: true, source: fileName });
330
+ const result = db.prepare(`
331
+ INSERT INTO conversations (project_id, model, tool, raw_content, timestamp)
332
+ VALUES (?, ?, ?, ?, ?)
333
+ `).run(projectId, 'imported', 'aider', rawContent, new Date().toISOString());
334
+ const conversationId = result.lastInsertRowid;
335
+ for (const ext of newExtractions) {
336
+ db.prepare(`
337
+ INSERT INTO extractions (conversation_id, type, content, metadata)
338
+ VALUES (?, ?, ?, ?)
339
+ `).run(conversationId, ext.type, ext.content, JSON.stringify({ imported: true, source: 'aider' }));
340
+ totalExtractions++;
341
+ }
342
+ }
343
+ }
344
+ if (totalExtractions >= limit)
345
+ break;
346
+ }
347
+ return { source: 'aider', messages: totalMessages, extractions: totalExtractions, duplicates: skippedDuplicates };
348
+ }
349
+ // ============================================================================
350
+ // Continue.dev import
351
+ // ============================================================================
352
+ function getContinueSessionsDir() {
353
+ return join(homedir(), '.continue', 'sessions');
354
+ }
355
+ async function importFromContinue(projectPath, projectId, existingExtractions, dryRun, limit, full = false) {
356
+ const sessionsDir = getContinueSessionsDir();
357
+ if (!existsSync(sessionsDir)) {
358
+ return null;
359
+ }
360
+ console.log(chalk.bold('\n📁 Continue.dev'));
361
+ console.log(` ${chalk.gray(sessionsDir)}`);
362
+ const db = getDb();
363
+ let totalMessages = 0;
364
+ let totalExtractions = 0;
365
+ let skippedDuplicates = 0;
366
+ try {
367
+ const files = readdirSync(sessionsDir).filter((f) => f.endsWith('.json'));
368
+ if (files.length === 0) {
369
+ console.log(chalk.gray(' No session files found'));
370
+ return null;
371
+ }
372
+ console.log(` Found ${files.length} session files`);
373
+ for (const file of files) {
374
+ if (totalExtractions >= limit)
375
+ break;
376
+ try {
377
+ const content = readFileSync(join(sessionsDir, file), 'utf-8');
378
+ const session = JSON.parse(content);
379
+ if (!session.history || !Array.isArray(session.history))
380
+ continue;
381
+ const assistantMessages = session.history.filter((m) => m.role === 'assistant' && m.content);
382
+ for (const msg of assistantMessages) {
383
+ if (totalExtractions >= limit)
384
+ break;
385
+ if (msg.content.length < 100)
386
+ continue;
387
+ totalMessages++;
388
+ const extractions = extractDecisions(msg.content);
389
+ const newExtractions = extractions.filter((e) => {
390
+ const key = e.content.slice(0, 80).toLowerCase();
391
+ if (existingExtractions.has(key)) {
392
+ skippedDuplicates++;
393
+ return false;
394
+ }
395
+ existingExtractions.add(key);
396
+ return true;
397
+ });
398
+ if (newExtractions.length === 0)
399
+ continue;
400
+ if (dryRun) {
401
+ if (full) {
402
+ console.log(chalk.gray(` [full] ${msg.content.slice(0, 80)}...`));
403
+ }
404
+ for (const ext of newExtractions) {
405
+ console.log(chalk.gray(` [${ext.type}] ${ext.content.slice(0, 50)}...`));
406
+ totalExtractions++;
407
+ }
408
+ }
409
+ else {
410
+ // Store full content if --full flag is set, otherwise just metadata
411
+ const rawContent = full ? msg.content : JSON.stringify({ imported: true, source: file });
412
+ const result = db.prepare(`
413
+ INSERT INTO conversations (project_id, model, tool, raw_content, timestamp)
414
+ VALUES (?, ?, ?, ?, ?)
415
+ `).run(projectId, 'imported', 'continue', rawContent, new Date().toISOString());
416
+ const conversationId = result.lastInsertRowid;
417
+ for (const ext of newExtractions) {
418
+ db.prepare(`
419
+ INSERT INTO extractions (conversation_id, type, content, metadata)
420
+ VALUES (?, ?, ?, ?)
421
+ `).run(conversationId, ext.type, ext.content, JSON.stringify({ imported: true, source: 'continue' }));
422
+ totalExtractions++;
423
+ }
424
+ }
425
+ }
426
+ }
427
+ catch {
428
+ // Skip invalid files
429
+ }
430
+ }
431
+ }
432
+ catch {
433
+ return null;
434
+ }
435
+ if (totalMessages === 0) {
436
+ return null;
437
+ }
438
+ return { source: 'continue', messages: totalMessages, extractions: totalExtractions, duplicates: skippedDuplicates };
439
+ }
440
+ // ============================================================================
441
+ // Main import command
442
+ // ============================================================================
443
+ export async function importCommand(options) {
444
+ ensureDataDir();
445
+ const db = getDb();
446
+ const projectPath = options.project || process.cwd();
447
+ const source = options.source || 'all';
448
+ const dryRun = options.dryRun || false;
449
+ const limit = options.limit || 1000;
450
+ const full = options.full || false;
451
+ console.log(chalk.bold('Importing conversation history...\n'));
452
+ // Find the aimem project
453
+ const aimemProject = getProjectByPath(projectPath);
454
+ if (!aimemProject) {
455
+ console.log(chalk.red(`Project not indexed: ${projectPath}`));
456
+ console.log(chalk.yellow('Run `aimem init` first to index this project.'));
457
+ process.exit(1);
458
+ }
459
+ console.log(`Project: ${chalk.cyan(aimemProject.path)}`);
460
+ console.log(`Source: ${chalk.cyan(source)}`);
461
+ if (dryRun)
462
+ console.log(chalk.yellow('Mode: dry-run'));
463
+ if (full)
464
+ console.log(chalk.green('Mode: full (storing complete conversation content)'));
465
+ // Load existing extractions to avoid duplicates
466
+ const existingExtractions = new Set();
467
+ const existingRows = db.prepare(`
468
+ SELECT e.content FROM extractions e
469
+ JOIN conversations c ON e.conversation_id = c.id
470
+ WHERE c.project_id = ?
471
+ `).all(aimemProject.id);
472
+ for (const row of existingRows) {
473
+ existingExtractions.add(row.content.slice(0, 80).toLowerCase());
474
+ }
475
+ console.log(`Existing extractions: ${existingExtractions.size}`);
476
+ const results = [];
477
+ // Import from selected sources
478
+ if (source === 'all' || source === 'claude') {
479
+ const result = await importFromClaude(projectPath, aimemProject.id, existingExtractions, dryRun, limit, full);
480
+ if (result)
481
+ results.push(result);
482
+ }
483
+ if (source === 'all' || source === 'aider') {
484
+ const result = await importFromAider(projectPath, aimemProject.id, existingExtractions, dryRun, limit, full);
485
+ if (result)
486
+ results.push(result);
487
+ }
488
+ if (source === 'all' || source === 'continue') {
489
+ const result = await importFromContinue(projectPath, aimemProject.id, existingExtractions, dryRun, limit, full);
490
+ if (result)
491
+ results.push(result);
492
+ }
493
+ // Summary
494
+ console.log(chalk.bold('\n━━━ Summary ━━━'));
495
+ if (results.length === 0) {
496
+ console.log(chalk.yellow('No conversation history found for any source.'));
497
+ console.log(chalk.gray('\nSupported sources:'));
498
+ console.log(chalk.gray(' - Claude Code: ~/.claude/projects/'));
499
+ console.log(chalk.gray(' - Aider: .aider.chat.history.md in project'));
500
+ console.log(chalk.gray(' - Continue.dev: ~/.continue/sessions/'));
501
+ return;
502
+ }
503
+ let totalMessages = 0;
504
+ let totalExtractions = 0;
505
+ let totalDuplicates = 0;
506
+ for (const r of results) {
507
+ console.log(`\n${chalk.cyan(r.source)}:`);
508
+ console.log(` Messages: ${r.messages}`);
509
+ console.log(` Extractions: ${chalk.green(r.extractions)}`);
510
+ console.log(` Duplicates: ${r.duplicates}`);
511
+ totalMessages += r.messages;
512
+ totalExtractions += r.extractions;
513
+ totalDuplicates += r.duplicates;
514
+ }
515
+ console.log(chalk.bold('\n━━━ Total ━━━'));
516
+ console.log(`Messages: ${totalMessages}`);
517
+ console.log(`Extractions: ${chalk.green(totalExtractions)}`);
518
+ console.log(`Duplicates: ${totalDuplicates}`);
519
+ if (dryRun) {
520
+ console.log(chalk.yellow('\nDry run - no changes made. Remove --dry-run to import.'));
521
+ }
522
+ else if (totalExtractions > 0) {
523
+ console.log(chalk.green('\nImport complete!'));
524
+ console.log(chalk.gray('Query with: aimem_decisions <topic>'));
525
+ }
526
+ }
527
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/cli/commands/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function initCommand(targetPath?: string): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BpE"}
@@ -0,0 +1,32 @@
1
+ import { resolve } from 'path';
2
+ import { existsSync } from 'fs';
3
+ import chalk from 'chalk';
4
+ import { createProject, getProjectByPath, getDataDir } from '../../db/index.js';
5
+ import { indexProject } from '../../indexer/index.js';
6
+ export async function initCommand(targetPath) {
7
+ const projectPath = resolve(targetPath || process.cwd());
8
+ if (!existsSync(projectPath)) {
9
+ console.error(chalk.red(`Error: Path does not exist: ${projectPath}`));
10
+ process.exit(1);
11
+ }
12
+ // Check if already initialized
13
+ const existing = getProjectByPath(projectPath);
14
+ if (existing) {
15
+ console.log(chalk.yellow(`Project already initialized: ${existing.name}`));
16
+ console.log(chalk.gray(`Re-indexing...`));
17
+ await indexProject(existing.id, projectPath);
18
+ console.log(chalk.green(`Re-indexed: ${projectPath}`));
19
+ return;
20
+ }
21
+ // Create new project
22
+ const name = projectPath.split('/').pop() || 'project';
23
+ const project = createProject(projectPath, name);
24
+ console.log(chalk.green(`Initialized aimem for: ${projectPath}`));
25
+ console.log(chalk.gray(`Data stored in: ${getDataDir()}`));
26
+ console.log(chalk.gray(`Project ID: ${project.id}`));
27
+ // Index the project
28
+ console.log(chalk.blue(`Indexing codebase...`));
29
+ await indexProject(project.id, projectPath);
30
+ console.log(chalk.green(`Done!`));
31
+ }
32
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAmB;IACnD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1C,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;IACvD,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAErD,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function mcpServeCommand(): Promise<void>;
2
+ //# sourceMappingURL=mcp-serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp-serve.ts"],"names":[],"mappings":"AAEA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD"}
@@ -0,0 +1,5 @@
1
+ import { startMcpServer } from '../../mcp/server.js';
2
+ export async function mcpServeCommand() {
3
+ await startMcpServer();
4
+ }
5
+ //# sourceMappingURL=mcp-serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-serve.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp-serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface QueryOptions {
2
+ type?: 'all' | 'structures' | 'conversations';
3
+ limit?: number;
4
+ global?: boolean;
5
+ }
6
+ export declare function queryCommand(searchQuery: string, options: QueryOptions): void;
7
+ export {};
8
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,eAAe,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA2BD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAgE7E"}