claude-conversation-memory-mcp 0.5.0 → 1.0.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 (55) hide show
  1. package/README.md +16 -0
  2. package/dist/ConversationMemory.d.ts +151 -10
  3. package/dist/ConversationMemory.d.ts.map +1 -1
  4. package/dist/ConversationMemory.js +127 -10
  5. package/dist/ConversationMemory.js.map +1 -1
  6. package/dist/cache/QueryCache.d.ts +215 -0
  7. package/dist/cache/QueryCache.d.ts.map +1 -0
  8. package/dist/cache/QueryCache.js +294 -0
  9. package/dist/cache/QueryCache.js.map +1 -0
  10. package/dist/mcp-server.d.ts.map +1 -1
  11. package/dist/mcp-server.js +3 -0
  12. package/dist/mcp-server.js.map +1 -1
  13. package/dist/parsers/ConversationParser.d.ts +62 -3
  14. package/dist/parsers/ConversationParser.d.ts.map +1 -1
  15. package/dist/parsers/ConversationParser.js +50 -3
  16. package/dist/parsers/ConversationParser.js.map +1 -1
  17. package/dist/parsers/DecisionExtractor.d.ts +61 -3
  18. package/dist/parsers/DecisionExtractor.d.ts.map +1 -1
  19. package/dist/parsers/DecisionExtractor.js +47 -3
  20. package/dist/parsers/DecisionExtractor.js.map +1 -1
  21. package/dist/parsers/GitIntegrator.d.ts +88 -3
  22. package/dist/parsers/GitIntegrator.d.ts.map +1 -1
  23. package/dist/parsers/GitIntegrator.js +68 -3
  24. package/dist/parsers/GitIntegrator.js.map +1 -1
  25. package/dist/parsers/MistakeExtractor.d.ts +62 -3
  26. package/dist/parsers/MistakeExtractor.d.ts.map +1 -1
  27. package/dist/parsers/MistakeExtractor.js +50 -3
  28. package/dist/parsers/MistakeExtractor.js.map +1 -1
  29. package/dist/parsers/RequirementsExtractor.d.ts +95 -4
  30. package/dist/parsers/RequirementsExtractor.d.ts.map +1 -1
  31. package/dist/parsers/RequirementsExtractor.js +73 -4
  32. package/dist/parsers/RequirementsExtractor.js.map +1 -1
  33. package/dist/storage/ConversationStorage.d.ts +271 -2
  34. package/dist/storage/ConversationStorage.d.ts.map +1 -1
  35. package/dist/storage/ConversationStorage.js +356 -7
  36. package/dist/storage/ConversationStorage.js.map +1 -1
  37. package/dist/tools/ToolDefinitions.d.ts +39 -0
  38. package/dist/tools/ToolDefinitions.d.ts.map +1 -1
  39. package/dist/tools/ToolDefinitions.js +37 -0
  40. package/dist/tools/ToolDefinitions.js.map +1 -1
  41. package/dist/tools/ToolHandlers.d.ts +528 -14
  42. package/dist/tools/ToolHandlers.d.ts.map +1 -1
  43. package/dist/tools/ToolHandlers.js +691 -14
  44. package/dist/tools/ToolHandlers.js.map +1 -1
  45. package/dist/types/ToolTypes.d.ts +54 -0
  46. package/dist/types/ToolTypes.d.ts.map +1 -1
  47. package/dist/utils/Logger.d.ts +67 -0
  48. package/dist/utils/Logger.d.ts.map +1 -0
  49. package/dist/utils/Logger.js +119 -0
  50. package/dist/utils/Logger.js.map +1 -0
  51. package/dist/utils/constants.d.ts +75 -0
  52. package/dist/utils/constants.d.ts.map +1 -0
  53. package/dist/utils/constants.js +105 -0
  54. package/dist/utils/constants.js.map +1 -0
  55. package/package.json +1 -1
package/README.md CHANGED
@@ -10,6 +10,7 @@ A Model Context Protocol (MCP) server that gives Claude Code long-term memory by
10
10
  - **Links to git commits** - Connect conversations to code changes
11
11
  - **Analyzes file history** - See the complete evolution of files with context
12
12
  - **Migrates conversation history** - Keep your history when renaming or moving projects
13
+ - **Context transfer** - Recall past work and apply it to current tasks ("remember X, now do Y based on that")
13
14
 
14
15
  ## ⚠️ Important: Claude Code CLI Only
15
16
 
@@ -294,6 +295,21 @@ Claude: Let me trace the file evolution...
294
295
  [Shows complete timeline with conversations, commits, and decisions]
295
296
  ```
296
297
 
298
+ ### Recall and Apply Context
299
+
300
+ ```
301
+ You: "Recall how we implemented authentication, now add OAuth support using that same pattern"
302
+
303
+ Claude: Let me recall the authentication implementation context...
304
+ [Returns relevant conversations, decisions, mistakes, file changes, and commits]
305
+ [Provides suggestions for applying this context to OAuth implementation]
306
+ ```
307
+
308
+ **More examples:**
309
+ - "Remember the bug we fixed in parser.ts, check if similar issue exists in lexer.ts"
310
+ - "Recall all decisions about database schema, now design the migration strategy"
311
+ - "Find mistakes we made with async/await, avoid them in this new async function"
312
+
297
313
  ## 🔧 Advanced Usage
298
314
 
299
315
  ### Index Specific Session
@@ -1,16 +1,64 @@
1
1
  /**
2
- * Main Orchestrator - Coordinates all components
2
+ * Main Orchestrator - Coordinates all components for conversation memory indexing and retrieval.
3
+ *
4
+ * ConversationMemory is the primary interface for the conversation-memory-mcp system.
5
+ * It orchestrates parsing, storage, extraction, and search of Claude Code conversation history.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const memory = new ConversationMemory();
10
+ * await memory.indexConversations({
11
+ * projectPath: '/path/to/project',
12
+ * enableGitIntegration: true
13
+ * });
14
+ * ```
3
15
  */
4
16
  import { ConversationStorage } from "./storage/ConversationStorage.js";
5
17
  import { SemanticSearch } from "./search/SemanticSearch.js";
18
+ /**
19
+ * Configuration options for indexing conversations.
20
+ */
6
21
  export interface IndexOptions {
22
+ /** Absolute path to the project directory to index */
7
23
  projectPath: string;
24
+ /** Optional: Index only a specific session ID instead of all sessions */
8
25
  sessionId?: string;
26
+ /**
27
+ * Whether to include thinking blocks in the index.
28
+ * Thinking blocks can be large and are excluded by default.
29
+ * @default false
30
+ */
9
31
  includeThinking?: boolean;
32
+ /**
33
+ * Enable git integration to link commits to conversations.
34
+ * Requires the project to be a git repository.
35
+ * @default true
36
+ */
10
37
  enableGitIntegration?: boolean;
38
+ /**
39
+ * Exclude MCP tool conversations from indexing.
40
+ * - `false`: Index all conversations (default)
41
+ * - `'self-only'`: Exclude only conversation-memory MCP conversations (prevents self-referential loops)
42
+ * - `'all-mcp'` or `true`: Exclude all MCP tool conversations
43
+ * @default false
44
+ */
11
45
  excludeMcpConversations?: boolean | 'self-only' | 'all-mcp';
46
+ /**
47
+ * List of specific MCP server names to exclude.
48
+ * More granular than `excludeMcpConversations`.
49
+ * @example ['conversation-memory', 'code-graph-rag']
50
+ */
12
51
  excludeMcpServers?: string[];
13
52
  }
53
+ /**
54
+ * Main orchestrator for conversation memory operations.
55
+ *
56
+ * Coordinates parsing, storage, extraction, and search across:
57
+ * - Conversation parsing from JSONL files
58
+ * - Decision, mistake, and requirement extraction
59
+ * - Git commit integration
60
+ * - Semantic search with embeddings
61
+ */
14
62
  export declare class ConversationMemory {
15
63
  private sqliteManager;
16
64
  private storage;
@@ -21,7 +69,39 @@ export declare class ConversationMemory {
21
69
  private semanticSearch;
22
70
  constructor();
23
71
  /**
24
- * Index conversations for a project
72
+ * Index conversations for a project.
73
+ *
74
+ * This is the main entry point for processing conversation history.
75
+ * It performs the following operations:
76
+ * 1. Parse conversation JSONL files from the project
77
+ * 2. Store conversations, messages, and tool interactions
78
+ * 3. Extract decisions, mistakes, and requirements
79
+ * 4. Link git commits (if enabled)
80
+ * 5. Generate semantic embeddings for search
81
+ *
82
+ * @param options - Configuration options for indexing
83
+ * @returns Result object containing:
84
+ * - `embeddings_generated`: Whether embeddings were successfully generated
85
+ * - `embedding_error`: Error message if embedding generation failed
86
+ * - `indexed_folders`: List of folders that were indexed
87
+ * - `database_path`: Path to the SQLite database
88
+ *
89
+ * @throws {Error} If project path doesn't exist or conversation files can't be parsed
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * const result = await memory.indexConversations({
94
+ * projectPath: '/Users/me/my-project',
95
+ * enableGitIntegration: true,
96
+ * excludeMcpConversations: 'self-only'
97
+ * });
98
+ *
99
+ * if (result.embeddings_generated) {
100
+ * console.log('Indexed folders:', result.indexed_folders);
101
+ * } else {
102
+ * console.warn('Embeddings failed:', result.embedding_error);
103
+ * }
104
+ * ```
25
105
  */
26
106
  indexConversations(options: IndexOptions): Promise<{
27
107
  embeddings_generated: boolean;
@@ -30,15 +110,55 @@ export declare class ConversationMemory {
30
110
  database_path?: string;
31
111
  }>;
32
112
  /**
33
- * Search conversations
113
+ * Search conversations using natural language query.
114
+ *
115
+ * Uses semantic search with embeddings if available, otherwise falls back to full-text search.
116
+ *
117
+ * @param query - Natural language search query
118
+ * @param limit - Maximum number of results to return (default: 10)
119
+ * @returns Array of search results with messages, conversations, and similarity scores
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * const results = await memory.search('authentication bug fix', 5);
124
+ * results.forEach(r => {
125
+ * console.log(`${r.similarity}: ${r.snippet}`);
126
+ * });
127
+ * ```
34
128
  */
35
129
  search(query: string, limit?: number): Promise<import("./search/SemanticSearch.js").SearchResult[]>;
36
130
  /**
37
- * Search decisions
131
+ * Search for decisions using natural language query.
132
+ *
133
+ * Searches through extracted decisions to find relevant architectural choices and technical decisions.
134
+ *
135
+ * @param query - Natural language search query
136
+ * @param limit - Maximum number of results to return (default: 10)
137
+ * @returns Array of decision search results with similarity scores
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * const decisions = await memory.searchDecisions('database choice', 3);
142
+ * decisions.forEach(d => {
143
+ * console.log(`Decision: ${d.decision.decision_text}`);
144
+ * console.log(`Rationale: ${d.decision.rationale}`);
145
+ * });
146
+ * ```
38
147
  */
39
148
  searchDecisions(query: string, limit?: number): Promise<import("./search/SemanticSearch.js").DecisionSearchResult[]>;
40
149
  /**
41
- * Get file timeline
150
+ * Get the timeline of changes for a specific file.
151
+ *
152
+ * Returns all edits, commits, and related conversations for a file across its history.
153
+ *
154
+ * @param filePath - Path to the file (relative to project root)
155
+ * @returns Timeline of file changes with conversations and commits
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const timeline = memory.getFileTimeline('src/index.ts');
160
+ * console.log(`${timeline.length} changes to this file`);
161
+ * ```
42
162
  */
43
163
  getFileTimeline(filePath: string): {
44
164
  file_path: string;
@@ -47,7 +167,16 @@ export declare class ConversationMemory {
47
167
  decisions: import("./parsers/DecisionExtractor.js").Decision[];
48
168
  };
49
169
  /**
50
- * Get statistics
170
+ * Get statistics about the indexed conversation data.
171
+ *
172
+ * @returns Object containing counts for conversations, messages, decisions, mistakes, and commits
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const stats = memory.getStats();
177
+ * console.log(`Indexed ${stats.conversations.count} conversations`);
178
+ * console.log(`Extracted ${stats.decisions.count} decisions`);
179
+ * ```
51
180
  */
52
181
  getStats(): {
53
182
  conversations: {
@@ -67,16 +196,28 @@ export declare class ConversationMemory {
67
196
  };
68
197
  };
69
198
  /**
70
- * Get storage instance
199
+ * Get the underlying storage instance for direct database access.
200
+ *
201
+ * Use with caution - prefer using the high-level methods when possible.
202
+ *
203
+ * @returns ConversationStorage instance
204
+ * @internal
71
205
  */
72
206
  getStorage(): ConversationStorage;
73
207
  /**
74
- * Get semantic search instance
208
+ * Get the semantic search instance for advanced search operations.
209
+ *
210
+ * @returns SemanticSearch instance
211
+ * @internal
75
212
  */
76
213
  getSemanticSearch(): SemanticSearch;
77
214
  /**
78
- * Filter MCP conversations from parse results
79
- * Strategy: Filter at MESSAGE level, not conversation level
215
+ * Filter MCP conversations from parse results.
216
+ *
217
+ * Implements the exclusion logic for MCP tool conversations to prevent
218
+ * self-referential loops and reduce noise in the index.
219
+ *
220
+ * Strategy: Filter at MESSAGE level, not conversation level.
80
221
  * - Keep all conversations
81
222
  * - Exclude only messages that invoke specified MCP tools and their responses
82
223
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationMemory.d.ts","sourceRoot":"","sources":["../src/ConversationMemory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAMvE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5D,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,cAAc,CAAiB;;IAYvC;;OAEG;IACG,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;QACvD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IA8GF;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IAI9C;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IAIvD;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM;;;;;;IAIhC;;OAEG;IACH,QAAQ;;;;;;;;;;;;;;;;;IAIR;;OAEG;IACH,UAAU;IAIV;;OAEG;IACH,iBAAiB;IAIjB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;CAqE/B"}
1
+ {"version":3,"file":"ConversationMemory.d.ts","sourceRoot":"","sources":["../src/ConversationMemory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAMvE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IAEpB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IAE5D;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,cAAc,CAAiB;;IAiBvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;QACvD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IA8GF;;;;;;;;;;;;;;;;OAgBG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IAI9C;;;;;;;;;;;;;;;;;OAiBG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IAIvD;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM;;;;;;IAIhC;;;;;;;;;;;OAWG;IACH,QAAQ;;;;;;;;;;;;;;;;;IAIR;;;;;;;OAOG;IACH,UAAU;IAIV;;;;;OAKG;IACH,iBAAiB;IAIjB;;;;;;;;;OASG;IACH,OAAO,CAAC,sBAAsB;CAqE/B"}
@@ -1,5 +1,17 @@
1
1
  /**
2
- * Main Orchestrator - Coordinates all components
2
+ * Main Orchestrator - Coordinates all components for conversation memory indexing and retrieval.
3
+ *
4
+ * ConversationMemory is the primary interface for the conversation-memory-mcp system.
5
+ * It orchestrates parsing, storage, extraction, and search of Claude Code conversation history.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const memory = new ConversationMemory();
10
+ * await memory.indexConversations({
11
+ * projectPath: '/path/to/project',
12
+ * enableGitIntegration: true
13
+ * });
14
+ * ```
3
15
  */
4
16
  import { getSQLiteManager } from "./storage/SQLiteManager.js";
5
17
  import { ConversationStorage } from "./storage/ConversationStorage.js";
@@ -9,6 +21,15 @@ import { MistakeExtractor } from "./parsers/MistakeExtractor.js";
9
21
  import { GitIntegrator } from "./parsers/GitIntegrator.js";
10
22
  import { RequirementsExtractor } from "./parsers/RequirementsExtractor.js";
11
23
  import { SemanticSearch } from "./search/SemanticSearch.js";
24
+ /**
25
+ * Main orchestrator for conversation memory operations.
26
+ *
27
+ * Coordinates parsing, storage, extraction, and search across:
28
+ * - Conversation parsing from JSONL files
29
+ * - Decision, mistake, and requirement extraction
30
+ * - Git commit integration
31
+ * - Semantic search with embeddings
32
+ */
12
33
  export class ConversationMemory {
13
34
  sqliteManager;
14
35
  storage;
@@ -20,6 +41,9 @@ export class ConversationMemory {
20
41
  constructor() {
21
42
  this.sqliteManager = getSQLiteManager();
22
43
  this.storage = new ConversationStorage(this.sqliteManager);
44
+ // Enable caching by default for better performance
45
+ // Cache up to 100 query results for 5 minutes
46
+ this.storage.enableCache({ maxSize: 100, ttlMs: 300000 });
23
47
  this.parser = new ConversationParser();
24
48
  this.decisionExtractor = new DecisionExtractor();
25
49
  this.mistakeExtractor = new MistakeExtractor();
@@ -27,7 +51,39 @@ export class ConversationMemory {
27
51
  this.semanticSearch = new SemanticSearch(this.sqliteManager);
28
52
  }
29
53
  /**
30
- * Index conversations for a project
54
+ * Index conversations for a project.
55
+ *
56
+ * This is the main entry point for processing conversation history.
57
+ * It performs the following operations:
58
+ * 1. Parse conversation JSONL files from the project
59
+ * 2. Store conversations, messages, and tool interactions
60
+ * 3. Extract decisions, mistakes, and requirements
61
+ * 4. Link git commits (if enabled)
62
+ * 5. Generate semantic embeddings for search
63
+ *
64
+ * @param options - Configuration options for indexing
65
+ * @returns Result object containing:
66
+ * - `embeddings_generated`: Whether embeddings were successfully generated
67
+ * - `embedding_error`: Error message if embedding generation failed
68
+ * - `indexed_folders`: List of folders that were indexed
69
+ * - `database_path`: Path to the SQLite database
70
+ *
71
+ * @throws {Error} If project path doesn't exist or conversation files can't be parsed
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const result = await memory.indexConversations({
76
+ * projectPath: '/Users/me/my-project',
77
+ * enableGitIntegration: true,
78
+ * excludeMcpConversations: 'self-only'
79
+ * });
80
+ *
81
+ * if (result.embeddings_generated) {
82
+ * console.log('Indexed folders:', result.indexed_folders);
83
+ * } else {
84
+ * console.warn('Embeddings failed:', result.embedding_error);
85
+ * }
86
+ * ```
31
87
  */
32
88
  async indexConversations(options) {
33
89
  console.log("\n=== Indexing Conversations ===");
@@ -114,44 +170,105 @@ export class ConversationMemory {
114
170
  };
115
171
  }
116
172
  /**
117
- * Search conversations
173
+ * Search conversations using natural language query.
174
+ *
175
+ * Uses semantic search with embeddings if available, otherwise falls back to full-text search.
176
+ *
177
+ * @param query - Natural language search query
178
+ * @param limit - Maximum number of results to return (default: 10)
179
+ * @returns Array of search results with messages, conversations, and similarity scores
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * const results = await memory.search('authentication bug fix', 5);
184
+ * results.forEach(r => {
185
+ * console.log(`${r.similarity}: ${r.snippet}`);
186
+ * });
187
+ * ```
118
188
  */
119
189
  async search(query, limit = 10) {
120
190
  return this.semanticSearch.searchConversations(query, limit);
121
191
  }
122
192
  /**
123
- * Search decisions
193
+ * Search for decisions using natural language query.
194
+ *
195
+ * Searches through extracted decisions to find relevant architectural choices and technical decisions.
196
+ *
197
+ * @param query - Natural language search query
198
+ * @param limit - Maximum number of results to return (default: 10)
199
+ * @returns Array of decision search results with similarity scores
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const decisions = await memory.searchDecisions('database choice', 3);
204
+ * decisions.forEach(d => {
205
+ * console.log(`Decision: ${d.decision.decision_text}`);
206
+ * console.log(`Rationale: ${d.decision.rationale}`);
207
+ * });
208
+ * ```
124
209
  */
125
210
  async searchDecisions(query, limit = 10) {
126
211
  return this.semanticSearch.searchDecisions(query, limit);
127
212
  }
128
213
  /**
129
- * Get file timeline
214
+ * Get the timeline of changes for a specific file.
215
+ *
216
+ * Returns all edits, commits, and related conversations for a file across its history.
217
+ *
218
+ * @param filePath - Path to the file (relative to project root)
219
+ * @returns Timeline of file changes with conversations and commits
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * const timeline = memory.getFileTimeline('src/index.ts');
224
+ * console.log(`${timeline.length} changes to this file`);
225
+ * ```
130
226
  */
131
227
  getFileTimeline(filePath) {
132
228
  return this.storage.getFileTimeline(filePath);
133
229
  }
134
230
  /**
135
- * Get statistics
231
+ * Get statistics about the indexed conversation data.
232
+ *
233
+ * @returns Object containing counts for conversations, messages, decisions, mistakes, and commits
234
+ *
235
+ * @example
236
+ * ```typescript
237
+ * const stats = memory.getStats();
238
+ * console.log(`Indexed ${stats.conversations.count} conversations`);
239
+ * console.log(`Extracted ${stats.decisions.count} decisions`);
240
+ * ```
136
241
  */
137
242
  getStats() {
138
243
  return this.storage.getStats();
139
244
  }
140
245
  /**
141
- * Get storage instance
246
+ * Get the underlying storage instance for direct database access.
247
+ *
248
+ * Use with caution - prefer using the high-level methods when possible.
249
+ *
250
+ * @returns ConversationStorage instance
251
+ * @internal
142
252
  */
143
253
  getStorage() {
144
254
  return this.storage;
145
255
  }
146
256
  /**
147
- * Get semantic search instance
257
+ * Get the semantic search instance for advanced search operations.
258
+ *
259
+ * @returns SemanticSearch instance
260
+ * @internal
148
261
  */
149
262
  getSemanticSearch() {
150
263
  return this.semanticSearch;
151
264
  }
152
265
  /**
153
- * Filter MCP conversations from parse results
154
- * Strategy: Filter at MESSAGE level, not conversation level
266
+ * Filter MCP conversations from parse results.
267
+ *
268
+ * Implements the exclusion logic for MCP tool conversations to prevent
269
+ * self-referential loops and reduce noise in the index.
270
+ *
271
+ * Strategy: Filter at MESSAGE level, not conversation level.
155
272
  * - Keep all conversations
156
273
  * - Exclude only messages that invoke specified MCP tools and their responses
157
274
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationMemory.js","sourceRoot":"","sources":["../src/ConversationMemory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConversationMemory.js","sourceRoot":"","sources":["../src/ConversationMemory.ts"],"names":[],"mappings":"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"}