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.
- package/LICENSE +21 -0
- package/README.md +223 -0
- package/dist/ConversationMemory.d.ts +80 -0
- package/dist/ConversationMemory.d.ts.map +1 -0
- package/dist/ConversationMemory.js +203 -0
- package/dist/ConversationMemory.js.map +1 -0
- package/dist/documentation/CodeAnalyzer.d.ts +29 -0
- package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
- package/dist/documentation/CodeAnalyzer.js +122 -0
- package/dist/documentation/CodeAnalyzer.js.map +1 -0
- package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
- package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
- package/dist/documentation/ConversationAnalyzer.js +156 -0
- package/dist/documentation/ConversationAnalyzer.js.map +1 -0
- package/dist/documentation/CrossReferencer.d.ts +67 -0
- package/dist/documentation/CrossReferencer.d.ts.map +1 -0
- package/dist/documentation/CrossReferencer.js +247 -0
- package/dist/documentation/CrossReferencer.js.map +1 -0
- package/dist/documentation/DocumentationGenerator.d.ts +22 -0
- package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
- package/dist/documentation/DocumentationGenerator.js +57 -0
- package/dist/documentation/DocumentationGenerator.js.map +1 -0
- package/dist/documentation/MarkdownFormatter.d.ts +26 -0
- package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
- package/dist/documentation/MarkdownFormatter.js +301 -0
- package/dist/documentation/MarkdownFormatter.js.map +1 -0
- package/dist/documentation/types.d.ts +176 -0
- package/dist/documentation/types.d.ts.map +1 -0
- package/dist/documentation/types.js +5 -0
- package/dist/documentation/types.js.map +1 -0
- package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
- package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingConfig.js +132 -0
- package/dist/embeddings/EmbeddingConfig.js.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts +45 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.js +129 -0
- package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
- package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
- package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingProvider.js +6 -0
- package/dist/embeddings/EmbeddingProvider.js.map +1 -0
- package/dist/embeddings/VectorStore.d.ts +75 -0
- package/dist/embeddings/VectorStore.d.ts.map +1 -0
- package/dist/embeddings/VectorStore.js +220 -0
- package/dist/embeddings/VectorStore.js.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js +132 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js +128 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js +114 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +127 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/ConversationParser.d.ts +138 -0
- package/dist/parsers/ConversationParser.d.ts.map +1 -0
- package/dist/parsers/ConversationParser.js +325 -0
- package/dist/parsers/ConversationParser.js.map +1 -0
- package/dist/parsers/DecisionExtractor.d.ts +76 -0
- package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
- package/dist/parsers/DecisionExtractor.js +305 -0
- package/dist/parsers/DecisionExtractor.js.map +1 -0
- package/dist/parsers/GitIntegrator.d.ts +71 -0
- package/dist/parsers/GitIntegrator.d.ts.map +1 -0
- package/dist/parsers/GitIntegrator.js +283 -0
- package/dist/parsers/GitIntegrator.js.map +1 -0
- package/dist/parsers/MistakeExtractor.d.ts +86 -0
- package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
- package/dist/parsers/MistakeExtractor.js +341 -0
- package/dist/parsers/MistakeExtractor.js.map +1 -0
- package/dist/parsers/RequirementsExtractor.d.ts +70 -0
- package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
- package/dist/parsers/RequirementsExtractor.js +252 -0
- package/dist/parsers/RequirementsExtractor.js.map +1 -0
- package/dist/search/SemanticSearch.d.ts +90 -0
- package/dist/search/SemanticSearch.d.ts.map +1 -0
- package/dist/search/SemanticSearch.js +352 -0
- package/dist/search/SemanticSearch.js.map +1 -0
- package/dist/storage/ConversationStorage.d.ts +53 -0
- package/dist/storage/ConversationStorage.d.ts.map +1 -0
- package/dist/storage/ConversationStorage.js +249 -0
- package/dist/storage/ConversationStorage.js.map +1 -0
- package/dist/storage/SQLiteManager.d.ts +88 -0
- package/dist/storage/SQLiteManager.d.ts.map +1 -0
- package/dist/storage/SQLiteManager.js +281 -0
- package/dist/storage/SQLiteManager.js.map +1 -0
- package/dist/storage/migrations.d.ts +54 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +153 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/schema.sql +321 -0
- package/dist/tools/ToolDefinitions.d.ts +265 -0
- package/dist/tools/ToolDefinitions.d.ts.map +1 -0
- package/dist/tools/ToolDefinitions.js +261 -0
- package/dist/tools/ToolDefinitions.js.map +1 -0
- package/dist/tools/ToolHandlers.d.ts +56 -0
- package/dist/tools/ToolHandlers.d.ts.map +1 -0
- package/dist/tools/ToolHandlers.js +431 -0
- package/dist/tools/ToolHandlers.js.map +1 -0
- package/dist/types/ToolTypes.d.ts +333 -0
- package/dist/types/ToolTypes.d.ts.map +1 -0
- package/dist/types/ToolTypes.js +6 -0
- package/dist/types/ToolTypes.js.map +1 -0
- package/dist/utils/sanitization.d.ts +35 -0
- package/dist/utils/sanitization.d.ts.map +1 -0
- package/dist/utils/sanitization.js +97 -0
- package/dist/utils/sanitization.js.map +1 -0
- 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"}
|