tachibot-mcp 2.0.2
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/.env.example +260 -0
- package/CHANGELOG.md +54 -0
- package/CODE_OF_CONDUCT.md +56 -0
- package/CONTRIBUTING.md +54 -0
- package/Dockerfile +36 -0
- package/LICENSE +644 -0
- package/README.md +201 -0
- package/SECURITY.md +95 -0
- package/dist/personality/komaai-expressions.js +12 -0
- package/dist/profiles/balanced.json +33 -0
- package/dist/profiles/code_focus.json +33 -0
- package/dist/profiles/full.json +33 -0
- package/dist/profiles/minimal.json +33 -0
- package/dist/profiles/research_power.json +33 -0
- package/dist/scripts/build-profiles.js +46 -0
- package/dist/src/application/services/focus/FocusModeRegistry.js +46 -0
- package/dist/src/application/services/focus/FocusTool.service.js +109 -0
- package/dist/src/application/services/focus/ModeRegistry.js +46 -0
- package/dist/src/application/services/focus/modes/focus-deep.mode.js +27 -0
- package/dist/src/application/services/focus/modes/status.mode.js +50 -0
- package/dist/src/application/services/focus/modes/tachibot-status.mode.js +50 -0
- package/dist/src/collaborative-orchestrator.js +391 -0
- package/dist/src/config/model-constants.js +188 -0
- package/dist/src/config/model-defaults.js +57 -0
- package/dist/src/config/model-preferences.js +382 -0
- package/dist/src/config/timeout-config.js +130 -0
- package/dist/src/config.js +173 -0
- package/dist/src/domain/interfaces/IFocusMode.js +5 -0
- package/dist/src/domain/interfaces/IProvider.js +6 -0
- package/dist/src/domain/interfaces/ITool.js +5 -0
- package/dist/src/focus-deep.js +245 -0
- package/dist/src/infrastructure/ascii/art/robots.ascii.js +16 -0
- package/dist/src/mcp-client.js +90 -0
- package/dist/src/memory/index.js +17 -0
- package/dist/src/memory/memory-config.js +135 -0
- package/dist/src/memory/memory-interface.js +174 -0
- package/dist/src/memory/memory-manager.js +383 -0
- package/dist/src/memory/providers/devlog-provider.js +385 -0
- package/dist/src/memory/providers/hybrid-provider.js +399 -0
- package/dist/src/memory/providers/local-provider.js +388 -0
- package/dist/src/memory/providers/mem0-provider.js +337 -0
- package/dist/src/modes/architect.js +477 -0
- package/dist/src/modes/auditor.js +362 -0
- package/dist/src/modes/challenger.js +841 -0
- package/dist/src/modes/code-reviewer.js +382 -0
- package/dist/src/modes/commit-guardian.js +424 -0
- package/dist/src/modes/documentation-writer.js +572 -0
- package/dist/src/modes/scout.js +587 -0
- package/dist/src/modes/shared/helpers/challenger-helpers.js +454 -0
- package/dist/src/modes/shared/helpers/index.js +17 -0
- package/dist/src/modes/shared/helpers/scout-helpers.js +270 -0
- package/dist/src/modes/shared/helpers/verifier-helpers.js +332 -0
- package/dist/src/modes/test-architect.js +767 -0
- package/dist/src/modes/verifier.js +378 -0
- package/dist/src/monitoring/performance-monitor.js +435 -0
- package/dist/src/optimization/batch-executor.js +121 -0
- package/dist/src/optimization/context-pruner.js +196 -0
- package/dist/src/optimization/cost-monitor.js +338 -0
- package/dist/src/optimization/index.js +65 -0
- package/dist/src/optimization/model-router.js +264 -0
- package/dist/src/optimization/result-cache.js +114 -0
- package/dist/src/optimization/token-optimizer.js +257 -0
- package/dist/src/optimization/token-tracker.js +118 -0
- package/dist/src/orchestrator-instructions.js +128 -0
- package/dist/src/orchestrator-lite.js +139 -0
- package/dist/src/orchestrator.js +191 -0
- package/dist/src/orchestrators/collaborative/interfaces/IToolExecutionEngine.js +1 -0
- package/dist/src/orchestrators/collaborative/interfaces/IToolExecutionStrategy.js +5 -0
- package/dist/src/orchestrators/collaborative/interfaces/IVisualizationRenderer.js +1 -0
- package/dist/src/orchestrators/collaborative/registries/ModelProviderRegistry.js +95 -0
- package/dist/src/orchestrators/collaborative/registries/ToolAdapterRegistry.js +64 -0
- package/dist/src/orchestrators/collaborative/services/tool-execution/ToolExecutionService.js +502 -0
- package/dist/src/orchestrators/collaborative/services/visualization/VisualizationService.js +206 -0
- package/dist/src/orchestrators/collaborative/types/session-types.js +5 -0
- package/dist/src/profiles/balanced.js +37 -0
- package/dist/src/profiles/code_focus.js +37 -0
- package/dist/src/profiles/debug_intensive.js +59 -0
- package/dist/src/profiles/full.js +37 -0
- package/dist/src/profiles/minimal.js +37 -0
- package/dist/src/profiles/research_code.js +59 -0
- package/dist/src/profiles/research_power.js +37 -0
- package/dist/src/profiles/types.js +5 -0
- package/dist/src/profiles/workflow_builder.js +53 -0
- package/dist/src/prompt-engineer-lite.js +78 -0
- package/dist/src/prompt-engineer.js +399 -0
- package/dist/src/reasoning-chain.js +508 -0
- package/dist/src/sequential-thinking.js +291 -0
- package/dist/src/server-diagnostic.js +74 -0
- package/dist/src/server-raw.js +158 -0
- package/dist/src/server-simple.js +58 -0
- package/dist/src/server.js +514 -0
- package/dist/src/session/session-logger.js +617 -0
- package/dist/src/session/session-manager.js +571 -0
- package/dist/src/session/session-tools.js +400 -0
- package/dist/src/tools/advanced-modes.js +200 -0
- package/dist/src/tools/claude-integration.js +356 -0
- package/dist/src/tools/consolidated/ai-router.js +174 -0
- package/dist/src/tools/consolidated/ai-tool.js +48 -0
- package/dist/src/tools/consolidated/brainstorm-tool.js +87 -0
- package/dist/src/tools/consolidated/environment-detector.js +80 -0
- package/dist/src/tools/consolidated/index.js +50 -0
- package/dist/src/tools/consolidated/search-tool.js +110 -0
- package/dist/src/tools/consolidated/workflow-tool.js +238 -0
- package/dist/src/tools/gemini-tools.js +329 -0
- package/dist/src/tools/grok-enhanced.js +376 -0
- package/dist/src/tools/grok-tools.js +299 -0
- package/dist/src/tools/lmstudio-tools.js +223 -0
- package/dist/src/tools/openai-tools.js +498 -0
- package/dist/src/tools/openrouter-tools.js +317 -0
- package/dist/src/tools/optimized-wrapper.js +204 -0
- package/dist/src/tools/perplexity-tools.js +294 -0
- package/dist/src/tools/pingpong-tool.js +343 -0
- package/dist/src/tools/qwen-wrapper.js +74 -0
- package/dist/src/tools/tool-router.js +444 -0
- package/dist/src/tools/unified-ai-provider.js +260 -0
- package/dist/src/tools/workflow-runner.js +425 -0
- package/dist/src/tools/workflow-validator-tool.js +107 -0
- package/dist/src/types.js +23 -0
- package/dist/src/utils/input-validator.js +130 -0
- package/dist/src/utils/model-router.js +91 -0
- package/dist/src/utils/progress-stream.js +255 -0
- package/dist/src/utils/provider-router.js +88 -0
- package/dist/src/utils/smart-api-client.js +146 -0
- package/dist/src/utils/table-builder.js +218 -0
- package/dist/src/utils/timestamp-formatter.js +134 -0
- package/dist/src/utils/tool-compressor.js +257 -0
- package/dist/src/utils/tool-config.js +201 -0
- package/dist/src/validators/dependency-graph-validator.js +147 -0
- package/dist/src/validators/interpolation-validator.js +222 -0
- package/dist/src/validators/output-usage-validator.js +151 -0
- package/dist/src/validators/syntax-validator.js +102 -0
- package/dist/src/validators/tool-registry-validator.js +123 -0
- package/dist/src/validators/tool-types.js +97 -0
- package/dist/src/validators/types.js +8 -0
- package/dist/src/validators/workflow-validator.js +134 -0
- package/dist/src/visualizer-lite.js +42 -0
- package/dist/src/visualizer.js +179 -0
- package/dist/src/workflows/circuit-breaker.js +199 -0
- package/dist/src/workflows/custom-workflows.js +451 -0
- package/dist/src/workflows/engine/AutoSynthesizer.js +97 -0
- package/dist/src/workflows/engine/StepParameterResolver.js +74 -0
- package/dist/src/workflows/engine/VariableInterpolator.js +123 -0
- package/dist/src/workflows/engine/WorkflowDiscovery.js +125 -0
- package/dist/src/workflows/engine/WorkflowExecutionEngine.js +485 -0
- package/dist/src/workflows/engine/WorkflowExecutor.js +113 -0
- package/dist/src/workflows/engine/WorkflowFileManager.js +244 -0
- package/dist/src/workflows/engine/WorkflowHelpers.js +114 -0
- package/dist/src/workflows/engine/WorkflowOutputFormatter.js +83 -0
- package/dist/src/workflows/engine/events/WorkflowEventBus.js +132 -0
- package/dist/src/workflows/engine/events/interfaces/IEventBus.js +5 -0
- package/dist/src/workflows/engine/handlers/ErrorRecoveryHandler.js +162 -0
- package/dist/src/workflows/engine/handlers/PromptEnhancementHandler.js +115 -0
- package/dist/src/workflows/engine/handlers/SessionPersistenceHandler.js +167 -0
- package/dist/src/workflows/engine/handlers/StepExecutionHandler.js +231 -0
- package/dist/src/workflows/engine/handlers/ToolInvocationHandler.js +46 -0
- package/dist/src/workflows/engine/interfaces/IAutoSynthesizer.js +5 -0
- package/dist/src/workflows/engine/interfaces/IStepParameterResolver.js +5 -0
- package/dist/src/workflows/engine/interfaces/IVariableInterpolator.js +5 -0
- package/dist/src/workflows/engine/interfaces/IWorkflowDiscovery.js +4 -0
- package/dist/src/workflows/engine/interfaces/IWorkflowFileManager.js +5 -0
- package/dist/src/workflows/engine/interfaces/IWorkflowOutputFormatter.js +5 -0
- package/dist/src/workflows/engine/state/WorkflowStateMachine.js +194 -0
- package/dist/src/workflows/engine/state/interfaces/IStateMachine.js +17 -0
- package/dist/src/workflows/fallback-strategies.js +373 -0
- package/dist/src/workflows/message-queue.js +455 -0
- package/dist/src/workflows/model-router.js +189 -0
- package/dist/src/workflows/orchestrator-examples.js +174 -0
- package/dist/src/workflows/orchestrator-integration.js +200 -0
- package/dist/src/workflows/self-healing.js +524 -0
- package/dist/src/workflows/tool-mapper.js +407 -0
- package/dist/src/workflows/tool-orchestrator.js +796 -0
- package/dist/src/workflows/workflow-engine.js +573 -0
- package/dist/src/workflows/workflow-parser.js +283 -0
- package/dist/src/workflows/workflow-types.js +95 -0
- package/dist/src/workflows.js +568 -0
- package/dist/test-workflow-file-output.js +93 -0
- package/docs/API_KEYS.md +570 -0
- package/docs/CLAUDE_CODE_SETUP.md +181 -0
- package/docs/CLAUDE_DESKTOP_MANUAL.md +127 -0
- package/docs/CONFIGURATION.md +745 -0
- package/docs/FOCUS_MODES.md +240 -0
- package/docs/INSTALLATION_BOTH.md +145 -0
- package/docs/TERMS.md +352 -0
- package/docs/TOOLS_REFERENCE.md +1622 -0
- package/docs/TOOL_PARAMETERS.md +496 -0
- package/docs/TOOL_PROFILES.md +236 -0
- package/docs/WORKFLOWS.md +987 -0
- package/docs/WORKFLOW_OUTPUT.md +198 -0
- package/docs/WORKFLOW_PROGRESS_TRACKING.md +305 -0
- package/docs/workflows/design-brainstorm.md +335 -0
- package/package.json +97 -0
- package/profiles/balanced.json +37 -0
- package/profiles/code_focus.json +37 -0
- package/profiles/debug_intensive.json +34 -0
- package/profiles/full.json +37 -0
- package/profiles/minimal.json +37 -0
- package/profiles/research_power.json +37 -0
- package/profiles/workflow_builder.json +37 -0
- package/smithery.yaml +66 -0
- package/start.sh +8 -0
- package/tools.config.json +81 -0
- package/tsconfig.json +18 -0
- package/workflows/accessibility-code-audit.yaml +92 -0
- package/workflows/code-architecture-review.yaml +202 -0
- package/workflows/code-review.yaml +142 -0
- package/workflows/core/iterative-problem-solver.yaml +283 -0
- package/workflows/creative-brainstorm-yaml.yaml +215 -0
- package/workflows/pingpong.yaml +141 -0
- package/workflows/system/README.md +412 -0
- package/workflows/system/challenger.yaml +175 -0
- package/workflows/system/scout.yaml +164 -0
- package/workflows/system/verifier.yaml +133 -0
- package/workflows/ultra-creative-brainstorm.yaml +318 -0
- package/workflows/ux-research-flow.yaml +92 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mem0 Memory Provider
|
|
3
|
+
* Integration with Mem0 for persistent, semantic, and graph-based memory
|
|
4
|
+
*/
|
|
5
|
+
import { BaseMemoryProvider } from '../memory-interface.js';
|
|
6
|
+
// Dynamic import for optional mem0ai package
|
|
7
|
+
let Memory;
|
|
8
|
+
/**
|
|
9
|
+
* Mem0 provider implementation
|
|
10
|
+
*/
|
|
11
|
+
export class Mem0Provider extends BaseMemoryProvider {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
super();
|
|
14
|
+
this.name = 'mem0';
|
|
15
|
+
this.isConnected = false;
|
|
16
|
+
this.config = {
|
|
17
|
+
apiKey: config.apiKey || process.env.MEM0_API_KEY,
|
|
18
|
+
endpoint: config.endpoint || process.env.MEM0_ENDPOINT || 'https://api.mem0.ai',
|
|
19
|
+
userId: config.userId || 'default',
|
|
20
|
+
enableVectorSearch: config.enableVectorSearch !== false,
|
|
21
|
+
enableGraphMemory: config.enableGraphMemory !== false,
|
|
22
|
+
maxTokens: config.maxTokens || 2000,
|
|
23
|
+
...config
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async doInitialize() {
|
|
27
|
+
try {
|
|
28
|
+
// Dynamically import mem0ai if available
|
|
29
|
+
try {
|
|
30
|
+
// @ts-ignore - Optional dependency
|
|
31
|
+
const mem0Module = await import('mem0ai');
|
|
32
|
+
Memory = mem0Module.Memory || mem0Module.default?.Memory;
|
|
33
|
+
}
|
|
34
|
+
catch (importError) {
|
|
35
|
+
// If mem0ai is not installed, try the OSS version
|
|
36
|
+
try {
|
|
37
|
+
// @ts-ignore - Optional dependency
|
|
38
|
+
const mem0OssModule = await import('mem0ai/oss');
|
|
39
|
+
Memory = mem0OssModule.Memory || mem0OssModule.default?.Memory;
|
|
40
|
+
}
|
|
41
|
+
catch (ossError) {
|
|
42
|
+
console.warn('Mem0 package not installed. Install with: npm install mem0ai');
|
|
43
|
+
throw new Error('Mem0 provider requires mem0ai package');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (!this.config.apiKey) {
|
|
47
|
+
throw new Error('Mem0 API key is required');
|
|
48
|
+
}
|
|
49
|
+
// Initialize Mem0 client
|
|
50
|
+
this.memory = new Memory({
|
|
51
|
+
apiKey: this.config.apiKey,
|
|
52
|
+
endpoint: this.config.endpoint
|
|
53
|
+
});
|
|
54
|
+
this.isConnected = true;
|
|
55
|
+
console.error('Mem0 provider initialized successfully');
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error('Failed to initialize Mem0 provider:', error);
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async store(item) {
|
|
63
|
+
if (!this.isConnected) {
|
|
64
|
+
throw new Error('Mem0 provider not initialized');
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
// Convert to Mem0 format
|
|
68
|
+
const messages = [
|
|
69
|
+
{
|
|
70
|
+
role: 'system',
|
|
71
|
+
content: `[${item.tier}] ${item.content}`
|
|
72
|
+
}
|
|
73
|
+
];
|
|
74
|
+
const metadata = {
|
|
75
|
+
tier: item.tier,
|
|
76
|
+
projectId: item.projectId,
|
|
77
|
+
teamId: item.teamId,
|
|
78
|
+
timestamp: item.timestamp.toISOString(),
|
|
79
|
+
tags: item.tags || [],
|
|
80
|
+
...item.metadata
|
|
81
|
+
};
|
|
82
|
+
// Add to Mem0
|
|
83
|
+
const result = await this.memory.add(messages, {
|
|
84
|
+
userId: item.userId || this.config.userId,
|
|
85
|
+
metadata
|
|
86
|
+
});
|
|
87
|
+
// Update metrics
|
|
88
|
+
this.metrics.totalItems++;
|
|
89
|
+
this.metrics.itemsByTier[item.tier]++;
|
|
90
|
+
// Return the ID from Mem0 response
|
|
91
|
+
return result.id || item.id;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error('Failed to store in Mem0:', error);
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async retrieve(query) {
|
|
99
|
+
if (!this.isConnected) {
|
|
100
|
+
throw new Error('Mem0 provider not initialized');
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const startTime = Date.now();
|
|
104
|
+
// Build Mem0 query
|
|
105
|
+
const mem0Query = {
|
|
106
|
+
userId: query.userId || this.config.userId,
|
|
107
|
+
limit: query.limit || 10
|
|
108
|
+
};
|
|
109
|
+
// Add metadata filters
|
|
110
|
+
if (query.projectId) {
|
|
111
|
+
mem0Query.filters = { projectId: query.projectId };
|
|
112
|
+
}
|
|
113
|
+
if (query.tags && query.tags.length > 0) {
|
|
114
|
+
mem0Query.filters = { ...mem0Query.filters, tags: { $in: query.tags } };
|
|
115
|
+
}
|
|
116
|
+
let memories;
|
|
117
|
+
// Use semantic search if text is provided
|
|
118
|
+
if (query.text && this.config.enableVectorSearch) {
|
|
119
|
+
memories = await this.memory.search(query.text, mem0Query);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Get all memories with filters
|
|
123
|
+
memories = await this.memory.getAll(mem0Query);
|
|
124
|
+
}
|
|
125
|
+
// Convert Mem0 results to MemoryItem format
|
|
126
|
+
const items = this.convertMem0Results(memories);
|
|
127
|
+
// Update metrics
|
|
128
|
+
const retrievalTime = Date.now() - startTime;
|
|
129
|
+
this.metrics.avgRetrievalTime =
|
|
130
|
+
(this.metrics.avgRetrievalTime + retrievalTime) / 2;
|
|
131
|
+
return items;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error('Failed to retrieve from Mem0:', error);
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async retrieveContext(query) {
|
|
139
|
+
if (!this.isConnected) {
|
|
140
|
+
throw new Error('Mem0 provider not initialized');
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
// Mem0's built-in context handling
|
|
144
|
+
const memories = await this.retrieve(query);
|
|
145
|
+
// If graph memory is enabled, get related memories
|
|
146
|
+
if (this.config.enableGraphMemory && memories.length > 0) {
|
|
147
|
+
const relatedMemories = await this.getRelatedMemories(memories[0].id);
|
|
148
|
+
memories.push(...relatedMemories);
|
|
149
|
+
}
|
|
150
|
+
// Apply context window limit
|
|
151
|
+
let selectedMemories = memories;
|
|
152
|
+
if (query.contextWindow) {
|
|
153
|
+
selectedMemories = this.limitByTokens(memories, query.contextWindow);
|
|
154
|
+
}
|
|
155
|
+
// Calculate source distribution
|
|
156
|
+
const sources = {
|
|
157
|
+
session: 0,
|
|
158
|
+
working: 0,
|
|
159
|
+
project: 0,
|
|
160
|
+
team: 0,
|
|
161
|
+
global: 0
|
|
162
|
+
};
|
|
163
|
+
selectedMemories.forEach(item => {
|
|
164
|
+
sources[item.tier]++;
|
|
165
|
+
});
|
|
166
|
+
return {
|
|
167
|
+
items: selectedMemories,
|
|
168
|
+
synthesis: this.synthesizeItems(selectedMemories),
|
|
169
|
+
relevanceScore: this.calculateRelevanceScore(selectedMemories, query),
|
|
170
|
+
tokenCount: this.estimateTokenCount(selectedMemories),
|
|
171
|
+
sources
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
console.error('Failed to retrieve context from Mem0:', error);
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async update(id, updates) {
|
|
180
|
+
if (!this.isConnected) {
|
|
181
|
+
throw new Error('Mem0 provider not initialized');
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
// Mem0 doesn't have direct update, so we delete and re-add
|
|
185
|
+
await this.memory.delete(id);
|
|
186
|
+
// Get the original item first (would need to store locally or retrieve)
|
|
187
|
+
// For now, create new with updates
|
|
188
|
+
const newItem = {
|
|
189
|
+
id,
|
|
190
|
+
content: updates.content || '',
|
|
191
|
+
tier: updates.tier || 'session',
|
|
192
|
+
timestamp: updates.timestamp || new Date(),
|
|
193
|
+
...updates
|
|
194
|
+
};
|
|
195
|
+
await this.store(newItem);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error('Failed to update in Mem0:', error);
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async delete(id) {
|
|
204
|
+
if (!this.isConnected) {
|
|
205
|
+
throw new Error('Mem0 provider not initialized');
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
await this.memory.delete(id);
|
|
209
|
+
this.metrics.totalItems--;
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
console.error('Failed to delete from Mem0:', error);
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async semanticSearch(text, limit, threshold) {
|
|
218
|
+
if (!this.isConnected || !this.config.enableVectorSearch) {
|
|
219
|
+
return [];
|
|
220
|
+
}
|
|
221
|
+
try {
|
|
222
|
+
const results = await this.memory.search(text, {
|
|
223
|
+
userId: this.config.userId,
|
|
224
|
+
limit: limit || 10,
|
|
225
|
+
threshold: threshold || 0.7
|
|
226
|
+
});
|
|
227
|
+
return this.convertMem0Results(results);
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
console.error('Failed to perform semantic search in Mem0:', error);
|
|
231
|
+
return [];
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async getRelated(itemId, depth) {
|
|
235
|
+
if (!this.isConnected || !this.config.enableGraphMemory) {
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
return this.getRelatedMemories(itemId, depth);
|
|
239
|
+
}
|
|
240
|
+
async export() {
|
|
241
|
+
if (!this.isConnected) {
|
|
242
|
+
throw new Error('Mem0 provider not initialized');
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
const allMemories = await this.memory.getAll({
|
|
246
|
+
userId: this.config.userId,
|
|
247
|
+
limit: 10000 // Get all memories
|
|
248
|
+
});
|
|
249
|
+
return this.convertMem0Results(allMemories);
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
console.error('Failed to export from Mem0:', error);
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async import(items) {
|
|
257
|
+
if (!this.isConnected) {
|
|
258
|
+
throw new Error('Mem0 provider not initialized');
|
|
259
|
+
}
|
|
260
|
+
let imported = 0;
|
|
261
|
+
for (const item of items) {
|
|
262
|
+
try {
|
|
263
|
+
await this.store(item);
|
|
264
|
+
imported++;
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
console.error(`Failed to import item ${item.id}:`, error);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return imported;
|
|
271
|
+
}
|
|
272
|
+
async isAvailable() {
|
|
273
|
+
if (!this.isConnected)
|
|
274
|
+
return false;
|
|
275
|
+
try {
|
|
276
|
+
// Try a simple operation to check connection
|
|
277
|
+
await this.memory.getAll({ userId: this.config.userId, limit: 1 });
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
async close() {
|
|
285
|
+
this.isConnected = false;
|
|
286
|
+
this.memory = null;
|
|
287
|
+
await super.close();
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Helper methods
|
|
291
|
+
*/
|
|
292
|
+
convertMem0Results(mem0Data) {
|
|
293
|
+
if (!mem0Data)
|
|
294
|
+
return [];
|
|
295
|
+
const results = Array.isArray(mem0Data) ? mem0Data : [mem0Data];
|
|
296
|
+
return results.map(item => ({
|
|
297
|
+
id: item.id || this.generateId(),
|
|
298
|
+
content: item.memory || item.content || '',
|
|
299
|
+
tier: item.metadata?.tier || 'session',
|
|
300
|
+
userId: item.userId || this.config.userId,
|
|
301
|
+
projectId: item.metadata?.projectId,
|
|
302
|
+
teamId: item.metadata?.teamId,
|
|
303
|
+
timestamp: item.metadata?.timestamp ? new Date(item.metadata.timestamp) : new Date(),
|
|
304
|
+
metadata: item.metadata || {},
|
|
305
|
+
tags: item.metadata?.tags || [],
|
|
306
|
+
embedding: item.embedding,
|
|
307
|
+
relationships: item.relationships,
|
|
308
|
+
accessCount: item.metadata?.accessCount || 0,
|
|
309
|
+
lastAccessed: item.metadata?.lastAccessed ? new Date(item.metadata.lastAccessed) : new Date()
|
|
310
|
+
}));
|
|
311
|
+
}
|
|
312
|
+
async getRelatedMemories(itemId, depth = 1) {
|
|
313
|
+
try {
|
|
314
|
+
// This would use Mem0's graph memory features if available
|
|
315
|
+
// For now, return empty array
|
|
316
|
+
return [];
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
console.error('Failed to get related memories:', error);
|
|
320
|
+
return [];
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Factory function to create Mem0 provider
|
|
326
|
+
*/
|
|
327
|
+
export async function createMem0Provider(config) {
|
|
328
|
+
try {
|
|
329
|
+
const provider = new Mem0Provider(config);
|
|
330
|
+
await provider.initialize();
|
|
331
|
+
return provider;
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
console.error('Failed to create Mem0 provider:', error);
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
}
|