claude-conversation-memory-mcp 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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +223 -0
  3. package/dist/ConversationMemory.d.ts +80 -0
  4. package/dist/ConversationMemory.d.ts.map +1 -0
  5. package/dist/ConversationMemory.js +203 -0
  6. package/dist/ConversationMemory.js.map +1 -0
  7. package/dist/documentation/CodeAnalyzer.d.ts +29 -0
  8. package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
  9. package/dist/documentation/CodeAnalyzer.js +122 -0
  10. package/dist/documentation/CodeAnalyzer.js.map +1 -0
  11. package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
  12. package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
  13. package/dist/documentation/ConversationAnalyzer.js +156 -0
  14. package/dist/documentation/ConversationAnalyzer.js.map +1 -0
  15. package/dist/documentation/CrossReferencer.d.ts +67 -0
  16. package/dist/documentation/CrossReferencer.d.ts.map +1 -0
  17. package/dist/documentation/CrossReferencer.js +247 -0
  18. package/dist/documentation/CrossReferencer.js.map +1 -0
  19. package/dist/documentation/DocumentationGenerator.d.ts +22 -0
  20. package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
  21. package/dist/documentation/DocumentationGenerator.js +57 -0
  22. package/dist/documentation/DocumentationGenerator.js.map +1 -0
  23. package/dist/documentation/MarkdownFormatter.d.ts +26 -0
  24. package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
  25. package/dist/documentation/MarkdownFormatter.js +301 -0
  26. package/dist/documentation/MarkdownFormatter.js.map +1 -0
  27. package/dist/documentation/types.d.ts +176 -0
  28. package/dist/documentation/types.d.ts.map +1 -0
  29. package/dist/documentation/types.js +5 -0
  30. package/dist/documentation/types.js.map +1 -0
  31. package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
  32. package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
  33. package/dist/embeddings/EmbeddingConfig.js +132 -0
  34. package/dist/embeddings/EmbeddingConfig.js.map +1 -0
  35. package/dist/embeddings/EmbeddingGenerator.d.ts +45 -0
  36. package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
  37. package/dist/embeddings/EmbeddingGenerator.js +129 -0
  38. package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
  39. package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
  40. package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
  41. package/dist/embeddings/EmbeddingProvider.js +6 -0
  42. package/dist/embeddings/EmbeddingProvider.js.map +1 -0
  43. package/dist/embeddings/VectorStore.d.ts +75 -0
  44. package/dist/embeddings/VectorStore.d.ts.map +1 -0
  45. package/dist/embeddings/VectorStore.js +220 -0
  46. package/dist/embeddings/VectorStore.js.map +1 -0
  47. package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
  48. package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
  49. package/dist/embeddings/providers/OllamaEmbeddings.js +132 -0
  50. package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
  51. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
  52. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
  53. package/dist/embeddings/providers/OpenAIEmbeddings.js +128 -0
  54. package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
  55. package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
  56. package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
  57. package/dist/embeddings/providers/TransformersEmbeddings.js +114 -0
  58. package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
  59. package/dist/index.d.ts +7 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +127 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/parsers/ConversationParser.d.ts +138 -0
  64. package/dist/parsers/ConversationParser.d.ts.map +1 -0
  65. package/dist/parsers/ConversationParser.js +325 -0
  66. package/dist/parsers/ConversationParser.js.map +1 -0
  67. package/dist/parsers/DecisionExtractor.d.ts +76 -0
  68. package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
  69. package/dist/parsers/DecisionExtractor.js +305 -0
  70. package/dist/parsers/DecisionExtractor.js.map +1 -0
  71. package/dist/parsers/GitIntegrator.d.ts +71 -0
  72. package/dist/parsers/GitIntegrator.d.ts.map +1 -0
  73. package/dist/parsers/GitIntegrator.js +283 -0
  74. package/dist/parsers/GitIntegrator.js.map +1 -0
  75. package/dist/parsers/MistakeExtractor.d.ts +86 -0
  76. package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
  77. package/dist/parsers/MistakeExtractor.js +341 -0
  78. package/dist/parsers/MistakeExtractor.js.map +1 -0
  79. package/dist/parsers/RequirementsExtractor.d.ts +70 -0
  80. package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
  81. package/dist/parsers/RequirementsExtractor.js +252 -0
  82. package/dist/parsers/RequirementsExtractor.js.map +1 -0
  83. package/dist/search/SemanticSearch.d.ts +90 -0
  84. package/dist/search/SemanticSearch.d.ts.map +1 -0
  85. package/dist/search/SemanticSearch.js +352 -0
  86. package/dist/search/SemanticSearch.js.map +1 -0
  87. package/dist/storage/ConversationStorage.d.ts +53 -0
  88. package/dist/storage/ConversationStorage.d.ts.map +1 -0
  89. package/dist/storage/ConversationStorage.js +249 -0
  90. package/dist/storage/ConversationStorage.js.map +1 -0
  91. package/dist/storage/SQLiteManager.d.ts +88 -0
  92. package/dist/storage/SQLiteManager.d.ts.map +1 -0
  93. package/dist/storage/SQLiteManager.js +281 -0
  94. package/dist/storage/SQLiteManager.js.map +1 -0
  95. package/dist/storage/migrations.d.ts +54 -0
  96. package/dist/storage/migrations.d.ts.map +1 -0
  97. package/dist/storage/migrations.js +153 -0
  98. package/dist/storage/migrations.js.map +1 -0
  99. package/dist/storage/schema.sql +321 -0
  100. package/dist/tools/ToolDefinitions.d.ts +265 -0
  101. package/dist/tools/ToolDefinitions.d.ts.map +1 -0
  102. package/dist/tools/ToolDefinitions.js +261 -0
  103. package/dist/tools/ToolDefinitions.js.map +1 -0
  104. package/dist/tools/ToolHandlers.d.ts +56 -0
  105. package/dist/tools/ToolHandlers.d.ts.map +1 -0
  106. package/dist/tools/ToolHandlers.js +431 -0
  107. package/dist/tools/ToolHandlers.js.map +1 -0
  108. package/dist/types/ToolTypes.d.ts +333 -0
  109. package/dist/types/ToolTypes.d.ts.map +1 -0
  110. package/dist/types/ToolTypes.js +6 -0
  111. package/dist/types/ToolTypes.js.map +1 -0
  112. package/dist/utils/sanitization.d.ts +35 -0
  113. package/dist/utils/sanitization.d.ts.map +1 -0
  114. package/dist/utils/sanitization.js +97 -0
  115. package/dist/utils/sanitization.js.map +1 -0
  116. package/package.json +87 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 xiaolai
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,223 @@
1
+ # Claude Conversation Memory
2
+
3
+ A Model Context Protocol (MCP) server that gives Claude Code long-term memory by indexing your conversation history with semantic search, decision tracking, and mistake prevention.
4
+
5
+ ## 💡 What It Does
6
+
7
+ - **Remembers past conversations** - Search your chat history with natural language
8
+ - **Tracks decisions** - Never forget why you made technical choices
9
+ - **Prevents mistakes** - Learn from past errors and avoid repeating them
10
+ - **Links to git commits** - Connect conversations to code changes
11
+ - **Analyzes file history** - See the complete evolution of files with context
12
+
13
+ ## ⚠️ Important: Claude Code CLI Only
14
+
15
+ **This MCP server works ONLY with [Claude Code CLI](https://github.com/anthropics/claude-code).**
16
+
17
+ It does NOT work with:
18
+ - ❌ Claude Desktop
19
+ - ❌ Claude Web
20
+ - ❌ Other Claude integrations
21
+
22
+ Claude Code CLI is required because it stores conversation history in `~/.claude/projects/` which this MCP indexes.
23
+
24
+ ## 📦 Installation
25
+
26
+ ### Prerequisites
27
+
28
+ **Required:**
29
+ 1. **Claude Code CLI**: https://github.com/anthropics/claude-code
30
+ 2. **Node.js**: Version 18 or higher
31
+ 3. **sqlite-vec extension**: Automatically loaded (bundled with the package)
32
+
33
+ **Recommended for better semantic search quality:**
34
+ 4. **Ollama**: For high-quality local embeddings
35
+ ```bash
36
+ # macOS/Linux
37
+ curl -fsSL https://ollama.com/install.sh | sh
38
+
39
+ # Or download from: https://ollama.com
40
+ ```
41
+
42
+ 5. **Default embedding model** (if using Ollama):
43
+ ```bash
44
+ # Pull the recommended model
45
+ ollama pull mxbai-embed-large
46
+
47
+ # Start Ollama service
48
+ ollama serve
49
+ ```
50
+
51
+ **Note**: Without Ollama, the MCP automatically falls back to Transformers.js (slower but works offline with no setup).
52
+
53
+ ### Install the MCP Server
54
+
55
+ ```bash
56
+ npm install -g claude-conversation-memory-mcp
57
+ ```
58
+
59
+ ### Configure Claude Code CLI
60
+
61
+ Create or edit `~/.claude/config.json`:
62
+
63
+ ```json
64
+ {
65
+ "mcpServers": {
66
+ "conversation-memory": {
67
+ "command": "claude-conversation-memory-mcp"
68
+ }
69
+ }
70
+ }
71
+ ```
72
+
73
+ **Alternative: Use npx without global install**
74
+
75
+ ```json
76
+ {
77
+ "mcpServers": {
78
+ "conversation-memory": {
79
+ "command": "npx",
80
+ "args": ["-y", "claude-conversation-memory-mcp"]
81
+ }
82
+ }
83
+ }
84
+ ```
85
+
86
+ ### Verify Installation
87
+
88
+ Start Claude Code CLI and ask:
89
+
90
+ ```
91
+ "Index my conversation history"
92
+ ```
93
+
94
+ If you see a response like "Indexed 3 conversations with 1247 messages", it's working!
95
+
96
+ ## 🎯 Usage Examples
97
+
98
+ ### First Time Setup
99
+
100
+ ```
101
+ You: "Index my conversation history for this project"
102
+
103
+ Claude: I'll index all conversations for this project...
104
+ ✓ Indexed 5 conversations with 2,341 messages
105
+ ✓ Semantic search enabled (embeddings generated)
106
+ ```
107
+
108
+ ### Search Past Conversations
109
+
110
+ ```
111
+ You: "What did we discuss about the authentication system?"
112
+
113
+ Claude: Let me search our conversation history...
114
+ [Returns relevant messages with context and timestamps]
115
+ ```
116
+
117
+ ### Before Modifying Files
118
+
119
+ ```
120
+ You: "Before I change database.ts, what should I know?"
121
+
122
+ Claude: Let me check the context for database.ts...
123
+ [Shows recent changes, related decisions, and past mistakes]
124
+ ```
125
+
126
+ ### Track Decisions
127
+
128
+ ```
129
+ You: "Why did we choose SQLite over PostgreSQL?"
130
+
131
+ Claude: Let me check our decision history...
132
+ [Returns the decision with rationale and alternatives considered]
133
+ ```
134
+
135
+ ### Learn from Mistakes
136
+
137
+ ```
138
+ You: "Have we had issues with async/await before?"
139
+
140
+ Claude: Let me search past mistakes...
141
+ [Shows previous errors and how they were fixed]
142
+ ```
143
+
144
+ ### Find Related Work
145
+
146
+ ```
147
+ You: "Have we worked on similar API endpoints before?"
148
+
149
+ Claude: Let me find similar sessions...
150
+ [Returns past conversations about similar work]
151
+ ```
152
+
153
+ ### View File History
154
+
155
+ ```
156
+ You: "Show me how auth.ts evolved over time"
157
+
158
+ Claude: Let me trace the file evolution...
159
+ [Shows complete timeline with conversations, commits, and decisions]
160
+ ```
161
+
162
+ ## 🔧 Advanced Usage
163
+
164
+ ### Index Specific Session
165
+
166
+ ```
167
+ You: "Index conversation from session a1172af3-ca62-41be-9b90-701cef39daae"
168
+ ```
169
+
170
+ ### Exclude MCP Conversations
171
+
172
+ By default, conversations about the MCP itself are excluded to prevent self-referential loops. To include them:
173
+
174
+ ```
175
+ You: "Index all conversations, including MCP conversations"
176
+ ```
177
+
178
+ ### Search with Date Filters
179
+
180
+ ```
181
+ You: "What were we working on last week?"
182
+ ```
183
+
184
+ ### Generate Documentation
185
+
186
+ ```
187
+ You: "Generate project documentation from our conversations"
188
+ ```
189
+
190
+ Claude will create comprehensive docs combining code analysis with conversation history.
191
+
192
+ ## 📚 Learn More
193
+
194
+ - **[Tool Examples](docs/TOOL-EXAMPLES.md)** - 50+ natural language examples for each tool
195
+ - **[Quick Reference](docs/QUICK-REFERENCE.md)** - Common phrases cheat sheet
196
+ - **[Embeddings FAQ](docs/EMBEDDINGS-FAQ.md)** - How semantic search works
197
+
198
+
199
+ ## 🐛 Troubleshooting
200
+
201
+ ### "No conversations found"
202
+
203
+ Make sure you're running this in a directory where you've had Claude Code CLI conversations. Check `~/.claude/projects/` to verify conversation files exist.
204
+
205
+ ### "Embeddings failed"
206
+
207
+ The MCP falls back to full-text search if embeddings fail. Everything still works, just without semantic search.
208
+
209
+ ### "MCP not responding"
210
+
211
+ Restart Claude Code CLI to reload the MCP server.
212
+
213
+ ## 📄 License
214
+
215
+ MIT License - See [LICENSE](LICENSE) file for details.
216
+
217
+ ## 🙏 Acknowledgments
218
+
219
+ Inspired by [code-graph-rag-mcp](https://github.com/er77/code-graph-rag-mcp).
220
+
221
+ ---
222
+
223
+ **Made with ❤️ for the Claude Code CLI community**
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Main Orchestrator - Coordinates all components
3
+ */
4
+ import { ConversationStorage } from "./storage/ConversationStorage.js";
5
+ import { SemanticSearch } from "./search/SemanticSearch.js";
6
+ export interface IndexOptions {
7
+ projectPath: string;
8
+ sessionId?: string;
9
+ includeThinking?: boolean;
10
+ enableGitIntegration?: boolean;
11
+ excludeMcpConversations?: boolean | 'self-only' | 'all-mcp';
12
+ excludeMcpServers?: string[];
13
+ }
14
+ export declare class ConversationMemory {
15
+ private sqliteManager;
16
+ private storage;
17
+ private parser;
18
+ private decisionExtractor;
19
+ private mistakeExtractor;
20
+ private requirementsExtractor;
21
+ private semanticSearch;
22
+ constructor();
23
+ /**
24
+ * Index conversations for a project
25
+ */
26
+ indexConversations(options: IndexOptions): Promise<{
27
+ embeddings_generated: boolean;
28
+ embedding_error?: string;
29
+ }>;
30
+ /**
31
+ * Search conversations
32
+ */
33
+ search(query: string, limit?: number): Promise<import("./search/SemanticSearch.js").SearchResult[]>;
34
+ /**
35
+ * Search decisions
36
+ */
37
+ searchDecisions(query: string, limit?: number): Promise<import("./search/SemanticSearch.js").DecisionSearchResult[]>;
38
+ /**
39
+ * Get file timeline
40
+ */
41
+ getFileTimeline(filePath: string): {
42
+ file_path: string;
43
+ edits: import("./parsers/ConversationParser.js").FileEdit[];
44
+ commits: import("./parsers/GitIntegrator.js").GitCommit[];
45
+ decisions: import("./parsers/DecisionExtractor.js").Decision[];
46
+ };
47
+ /**
48
+ * Get statistics
49
+ */
50
+ getStats(): {
51
+ conversations: {
52
+ count: number;
53
+ };
54
+ messages: {
55
+ count: number;
56
+ };
57
+ decisions: {
58
+ count: number;
59
+ };
60
+ mistakes: {
61
+ count: number;
62
+ };
63
+ git_commits: {
64
+ count: number;
65
+ };
66
+ };
67
+ /**
68
+ * Get storage instance
69
+ */
70
+ getStorage(): ConversationStorage;
71
+ /**
72
+ * Get semantic search instance
73
+ */
74
+ getSemanticSearch(): SemanticSearch;
75
+ /**
76
+ * Filter MCP conversations from parse results
77
+ */
78
+ private filterMcpConversations;
79
+ }
80
+ //# sourceMappingURL=ConversationMemory.d.ts.map
@@ -0,0 +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;QAAE,oBAAoB,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA4GrH;;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;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA2D/B"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Main Orchestrator - Coordinates all components
3
+ */
4
+ import { getSQLiteManager } from "./storage/SQLiteManager.js";
5
+ import { ConversationStorage } from "./storage/ConversationStorage.js";
6
+ import { ConversationParser } from "./parsers/ConversationParser.js";
7
+ import { DecisionExtractor } from "./parsers/DecisionExtractor.js";
8
+ import { MistakeExtractor } from "./parsers/MistakeExtractor.js";
9
+ import { GitIntegrator } from "./parsers/GitIntegrator.js";
10
+ import { RequirementsExtractor } from "./parsers/RequirementsExtractor.js";
11
+ import { SemanticSearch } from "./search/SemanticSearch.js";
12
+ export class ConversationMemory {
13
+ sqliteManager;
14
+ storage;
15
+ parser;
16
+ decisionExtractor;
17
+ mistakeExtractor;
18
+ requirementsExtractor;
19
+ semanticSearch;
20
+ constructor() {
21
+ this.sqliteManager = getSQLiteManager();
22
+ this.storage = new ConversationStorage(this.sqliteManager);
23
+ this.parser = new ConversationParser();
24
+ this.decisionExtractor = new DecisionExtractor();
25
+ this.mistakeExtractor = new MistakeExtractor();
26
+ this.requirementsExtractor = new RequirementsExtractor();
27
+ this.semanticSearch = new SemanticSearch(this.sqliteManager);
28
+ }
29
+ /**
30
+ * Index conversations for a project
31
+ */
32
+ async indexConversations(options) {
33
+ console.log("\n=== Indexing Conversations ===");
34
+ console.log(`Project: ${options.projectPath}`);
35
+ if (options.sessionId) {
36
+ console.log(`Session: ${options.sessionId} (single session mode)`);
37
+ }
38
+ else {
39
+ console.log(`Mode: All sessions`);
40
+ }
41
+ // Parse conversations
42
+ let parseResult = this.parser.parseProject(options.projectPath, options.sessionId);
43
+ // Filter MCP conversations if requested
44
+ if (options.excludeMcpConversations || options.excludeMcpServers) {
45
+ parseResult = this.filterMcpConversations(parseResult, options);
46
+ }
47
+ // Store basic entities
48
+ await this.storage.storeConversations(parseResult.conversations);
49
+ await this.storage.storeMessages(parseResult.messages);
50
+ await this.storage.storeToolUses(parseResult.tool_uses);
51
+ await this.storage.storeToolResults(parseResult.tool_results);
52
+ await this.storage.storeFileEdits(parseResult.file_edits);
53
+ if (options.includeThinking !== false) {
54
+ await this.storage.storeThinkingBlocks(parseResult.thinking_blocks);
55
+ }
56
+ // Extract decisions
57
+ console.log("\n=== Extracting Decisions ===");
58
+ const decisions = this.decisionExtractor.extractDecisions(parseResult.messages, parseResult.thinking_blocks);
59
+ await this.storage.storeDecisions(decisions);
60
+ // Extract mistakes
61
+ console.log("\n=== Extracting Mistakes ===");
62
+ const mistakes = this.mistakeExtractor.extractMistakes(parseResult.messages, parseResult.tool_results);
63
+ await this.storage.storeMistakes(mistakes);
64
+ // Extract requirements and validations
65
+ console.log("\n=== Extracting Requirements ===");
66
+ const requirements = this.requirementsExtractor.extractRequirements(parseResult.messages);
67
+ await this.storage.storeRequirements(requirements);
68
+ const validations = this.requirementsExtractor.extractValidations(parseResult.tool_uses, parseResult.tool_results, parseResult.messages);
69
+ await this.storage.storeValidations(validations);
70
+ // Git integration
71
+ if (options.enableGitIntegration !== false) {
72
+ try {
73
+ console.log("\n=== Integrating Git History ===");
74
+ const gitIntegrator = new GitIntegrator(options.projectPath);
75
+ const commits = await gitIntegrator.linkCommitsToConversations(parseResult.conversations, parseResult.file_edits, decisions);
76
+ await this.storage.storeGitCommits(commits);
77
+ console.log(`✓ Linked ${commits.length} git commits`);
78
+ }
79
+ catch (error) {
80
+ console.error("⚠️ Git integration failed:", error);
81
+ console.error(" Conversations will be indexed without git commit links");
82
+ console.error(" This is normal if the project is not a git repository");
83
+ }
84
+ }
85
+ // Index for semantic search
86
+ console.log("\n=== Indexing for Semantic Search ===");
87
+ let embeddingError;
88
+ try {
89
+ await this.semanticSearch.indexMessages(parseResult.messages);
90
+ await this.semanticSearch.indexDecisions(decisions);
91
+ console.log("✓ Semantic indexing complete");
92
+ }
93
+ catch (error) {
94
+ embeddingError = error.message;
95
+ console.error("⚠️ Semantic indexing failed:", error);
96
+ console.error(" Embeddings may not be available - falling back to full-text search");
97
+ console.error(" Install @xenova/transformers for semantic search: npm install @xenova/transformers");
98
+ // Don't throw - allow indexing to complete with FTS fallback
99
+ }
100
+ // Print stats
101
+ console.log("\n=== Indexing Complete ===");
102
+ const stats = this.storage.getStats();
103
+ console.log(`Conversations: ${stats.conversations.count}`);
104
+ console.log(`Messages: ${stats.messages.count}`);
105
+ console.log(`Decisions: ${stats.decisions.count}`);
106
+ console.log(`Mistakes: ${stats.mistakes.count}`);
107
+ console.log(`Git Commits: ${stats.git_commits.count}`);
108
+ // Return embedding status
109
+ return {
110
+ embeddings_generated: !embeddingError,
111
+ embedding_error: embeddingError
112
+ };
113
+ }
114
+ /**
115
+ * Search conversations
116
+ */
117
+ async search(query, limit = 10) {
118
+ return this.semanticSearch.searchConversations(query, limit);
119
+ }
120
+ /**
121
+ * Search decisions
122
+ */
123
+ async searchDecisions(query, limit = 10) {
124
+ return this.semanticSearch.searchDecisions(query, limit);
125
+ }
126
+ /**
127
+ * Get file timeline
128
+ */
129
+ getFileTimeline(filePath) {
130
+ return this.storage.getFileTimeline(filePath);
131
+ }
132
+ /**
133
+ * Get statistics
134
+ */
135
+ getStats() {
136
+ return this.storage.getStats();
137
+ }
138
+ /**
139
+ * Get storage instance
140
+ */
141
+ getStorage() {
142
+ return this.storage;
143
+ }
144
+ /**
145
+ * Get semantic search instance
146
+ */
147
+ getSemanticSearch() {
148
+ return this.semanticSearch;
149
+ }
150
+ /**
151
+ * Filter MCP conversations from parse results
152
+ */
153
+ filterMcpConversations(result, options) {
154
+ const shouldExcludeConversation = (conv) => {
155
+ const metadata = conv.metadata;
156
+ if (!metadata.mcp_usage?.detected) {
157
+ return false; // No MCP usage, don't exclude
158
+ }
159
+ // Check exclude_mcp_servers first (most specific)
160
+ if (options.excludeMcpServers && options.excludeMcpServers.length > 0) {
161
+ return metadata.mcp_usage.servers.some(server => options.excludeMcpServers?.includes(server));
162
+ }
163
+ // Check exclude_mcp_conversations setting
164
+ if (options.excludeMcpConversations === 'self-only') {
165
+ return metadata.mcp_usage.servers.includes('conversation-memory');
166
+ }
167
+ if (options.excludeMcpConversations === 'all-mcp' || options.excludeMcpConversations === true) {
168
+ return true; // Exclude all MCP conversations
169
+ }
170
+ return false;
171
+ };
172
+ // Build set of excluded conversation IDs
173
+ const excludedConvIds = new Set(result.conversations
174
+ .filter(shouldExcludeConversation)
175
+ .map(c => c.id));
176
+ if (excludedConvIds.size > 0) {
177
+ console.log(`\n⚠️ Excluding ${excludedConvIds.size} MCP conversation(s) from indexing`);
178
+ }
179
+ // Filter all related entities
180
+ return {
181
+ conversations: result.conversations.filter(c => !excludedConvIds.has(c.id)),
182
+ messages: result.messages.filter(m => !excludedConvIds.has(m.conversation_id)),
183
+ tool_uses: result.tool_uses.filter(t => {
184
+ const msg = result.messages.find(m => m.id === t.message_id);
185
+ return msg && !excludedConvIds.has(msg.conversation_id);
186
+ }),
187
+ tool_results: result.tool_results.filter(tr => {
188
+ const toolUse = result.tool_uses.find(tu => tu.id === tr.tool_use_id);
189
+ if (!toolUse) {
190
+ return false;
191
+ }
192
+ const msg = result.messages.find(m => m.id === toolUse.message_id);
193
+ return msg && !excludedConvIds.has(msg.conversation_id);
194
+ }),
195
+ file_edits: result.file_edits.filter(fe => !excludedConvIds.has(fe.conversation_id)),
196
+ thinking_blocks: result.thinking_blocks.filter(tb => {
197
+ const msg = result.messages.find(m => m.id === tb.message_id);
198
+ return msg && !excludedConvIds.has(msg.conversation_id);
199
+ }),
200
+ };
201
+ }
202
+ }
203
+ //# sourceMappingURL=ConversationMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationMemory.js","sourceRoot":"","sources":["../src/ConversationMemory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * CodeAnalyzer - Processes code graph data from CODE-GRAPH-RAG-MCP
3
+ *
4
+ * Note: This class processes data that should be fetched from CODE-GRAPH-RAG-MCP
5
+ * The actual MCP calls should be made by the tool handler and passed to this analyzer
6
+ */
7
+ import type { CodeData, RawEntity, RawHotspot, RawClone } from './types.js';
8
+ export interface CodeGraphRagData {
9
+ entities?: RawEntity[];
10
+ hotspots?: RawHotspot[];
11
+ clones?: RawClone[];
12
+ graph?: Record<string, unknown>;
13
+ }
14
+ export declare class CodeAnalyzer {
15
+ /**
16
+ * Process code graph data from CODE-GRAPH-RAG-MCP
17
+ */
18
+ analyze(codeGraphData: CodeGraphRagData): Promise<CodeData>;
19
+ private parseEntities;
20
+ private normalizeEntityType;
21
+ private groupEntitiesByFile;
22
+ private parseHotspots;
23
+ private parseClones;
24
+ /**
25
+ * Extract file paths from code data for cross-referencing
26
+ */
27
+ extractFilePaths(codeData: CodeData): string[];
28
+ }
29
+ //# sourceMappingURL=CodeAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeAnalyzer.d.ts","sourceRoot":"","sources":["../../src/documentation/CodeAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,QAAQ,EAKR,SAAS,EACT,UAAU,EACV,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,qBAAa,YAAY;IACvB;;OAEG;IACG,OAAO,CAAC,aAAa,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmBjE,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE;CAqB/C"}