@dcyfr/ai 1.0.2 → 1.0.4
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/CHANGELOG.md +21 -0
- package/LICENSE +27 -1
- package/README.md +359 -23
- package/bin/cli.js +12 -0
- package/bin/tui/config-wizard.js +107 -0
- package/bin/tui/validation-dashboard.js +123 -0
- package/bin/tui.js +259 -0
- package/dist/ai/agents/agent-loader.d.ts.map +1 -1
- package/dist/ai/agents/agent-loader.js +4 -2
- package/dist/ai/agents/agent-loader.js.map +1 -1
- package/dist/ai/index.d.ts +2 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +2 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/mcp/index.d.ts +14 -2
- package/dist/ai/mcp/index.d.ts.map +1 -1
- package/dist/ai/mcp/index.js +11 -1
- package/dist/ai/mcp/index.js.map +1 -1
- package/dist/ai/mcp/servers/analytics/index.d.ts +19 -0
- package/dist/ai/mcp/servers/analytics/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/analytics/index.js +556 -0
- package/dist/ai/mcp/servers/analytics/index.js.map +1 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.d.ts +61 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.d.ts.map +1 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.js +8 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.js.map +1 -0
- package/dist/ai/mcp/servers/content-manager/index.d.ts +19 -0
- package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/content-manager/index.js +236 -0
- package/dist/ai/mcp/servers/content-manager/index.js.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/index.d.ts +19 -0
- package/dist/ai/mcp/servers/design-tokens/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/index.js +422 -0
- package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts +59 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.js +8 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.js.map +1 -0
- package/dist/ai/mcp/servers/promptintel/index.d.ts +19 -0
- package/dist/ai/mcp/servers/promptintel/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/promptintel/index.js +323 -0
- package/dist/ai/mcp/servers/promptintel/index.js.map +1 -0
- package/dist/ai/mcp/servers/shared/cache.d.ts +62 -0
- package/dist/ai/mcp/servers/shared/cache.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/cache.js +117 -0
- package/dist/ai/mcp/servers/shared/cache.js.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.d.ts +53 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.js +185 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.js.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.d.ts +85 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.js +7 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.js.map +1 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.d.ts +54 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.js +122 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -0
- package/dist/ai/mcp/servers/shared/redis-client.d.ts +54 -0
- package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/redis-client.js +225 -0
- package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -0
- package/dist/ai/mcp/servers/shared/types.d.ts +292 -0
- package/dist/ai/mcp/servers/shared/types.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/types.js +6 -0
- package/dist/ai/mcp/servers/shared/types.js.map +1 -0
- package/dist/ai/mcp/servers/shared/utils.d.ts +41 -0
- package/dist/ai/mcp/servers/shared/utils.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/utils.js +183 -0
- package/dist/ai/mcp/servers/shared/utils.js.map +1 -0
- package/dist/ai/memory/config.d.ts +87 -0
- package/dist/ai/memory/config.d.ts.map +1 -0
- package/dist/ai/memory/config.js +154 -0
- package/dist/ai/memory/config.js.map +1 -0
- package/dist/ai/memory/dcyfr-memory.d.ts +63 -0
- package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -0
- package/dist/ai/memory/dcyfr-memory.js +270 -0
- package/dist/ai/memory/dcyfr-memory.js.map +1 -0
- package/dist/ai/memory/index.d.ts +15 -0
- package/dist/ai/memory/index.d.ts.map +1 -0
- package/dist/ai/memory/index.js +15 -0
- package/dist/ai/memory/index.js.map +1 -0
- package/dist/ai/memory/mem0-client.d.ts +108 -0
- package/dist/ai/memory/mem0-client.d.ts.map +1 -0
- package/dist/ai/memory/mem0-client.js +166 -0
- package/dist/ai/memory/mem0-client.js.map +1 -0
- package/dist/ai/memory/types.d.ts +175 -0
- package/dist/ai/memory/types.d.ts.map +1 -0
- package/dist/ai/memory/types.js +10 -0
- package/dist/ai/memory/types.js.map +1 -0
- package/package.json +46 -8
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DCYFR Memory implementation wrapping mem0 OSS client
|
|
3
|
+
*/
|
|
4
|
+
import { getMem0Client, resetMem0Client as resetClient } from './mem0-client.js';
|
|
5
|
+
// Default limits for memory queries
|
|
6
|
+
const DEFAULTS = {
|
|
7
|
+
USER_MEMORY_LIMIT: 100,
|
|
8
|
+
AGENT_MEMORY_LIMIT: 50,
|
|
9
|
+
SESSION_MEMORY_LIMIT: 30,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* DCYFRMemory implementation using mem0 OSS as the backend
|
|
13
|
+
*/
|
|
14
|
+
export class DCYFRMemoryImpl {
|
|
15
|
+
mem0ClientPromise = null;
|
|
16
|
+
/**
|
|
17
|
+
* Lazy initialization of mem0 client
|
|
18
|
+
*/
|
|
19
|
+
async ensureInitialized() {
|
|
20
|
+
if (!this.mem0ClientPromise) {
|
|
21
|
+
this.mem0ClientPromise = getMem0Client();
|
|
22
|
+
}
|
|
23
|
+
return this.mem0ClientPromise;
|
|
24
|
+
}
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// User Memory Operations
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Add memory associated with a specific user
|
|
30
|
+
*/
|
|
31
|
+
async addUserMemory(userId, message, context) {
|
|
32
|
+
try {
|
|
33
|
+
const client = await this.ensureInitialized();
|
|
34
|
+
const result = await client.add(message, {
|
|
35
|
+
userId,
|
|
36
|
+
metadata: {
|
|
37
|
+
ownerType: 'user',
|
|
38
|
+
topic: context?.topic,
|
|
39
|
+
importance: context?.importance || 0.5,
|
|
40
|
+
...context?.metadata,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
return result.results[0]?.id || '';
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
throw new Error(`Failed to add user memory: ${error.message}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Search user memories using semantic search
|
|
51
|
+
*/
|
|
52
|
+
async searchUserMemories(userId, query, limit = DEFAULTS.USER_MEMORY_LIMIT) {
|
|
53
|
+
try {
|
|
54
|
+
const client = await this.ensureInitialized();
|
|
55
|
+
const result = await client.search(query, {
|
|
56
|
+
userId,
|
|
57
|
+
limit,
|
|
58
|
+
});
|
|
59
|
+
return result.results.map((item) => ({
|
|
60
|
+
id: item.id,
|
|
61
|
+
content: item.memory,
|
|
62
|
+
owner: userId,
|
|
63
|
+
ownerType: 'user',
|
|
64
|
+
importance: item.metadata?.importance || 0.5,
|
|
65
|
+
topic: item.metadata?.topic,
|
|
66
|
+
createdAt: item.createdAt ? new Date(item.createdAt) : new Date(),
|
|
67
|
+
metadata: item.metadata,
|
|
68
|
+
relevance: item.score || 1.0,
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new Error(`Failed to search user memories: ${error.message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get all memories for a user
|
|
77
|
+
*/
|
|
78
|
+
async getUserMemories(userId, topic) {
|
|
79
|
+
try {
|
|
80
|
+
const client = await this.ensureInitialized();
|
|
81
|
+
const result = await client.search('', {
|
|
82
|
+
userId,
|
|
83
|
+
limit: DEFAULTS.USER_MEMORY_LIMIT,
|
|
84
|
+
filters: topic ? { topic } : undefined,
|
|
85
|
+
});
|
|
86
|
+
return result.results.map((item) => ({
|
|
87
|
+
id: item.id,
|
|
88
|
+
content: item.memory,
|
|
89
|
+
owner: userId,
|
|
90
|
+
ownerType: 'user',
|
|
91
|
+
importance: item.metadata?.importance || 0.5,
|
|
92
|
+
topic: item.metadata?.topic,
|
|
93
|
+
createdAt: item.createdAt ? new Date(item.createdAt) : new Date(),
|
|
94
|
+
metadata: item.metadata,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
throw new Error(`Failed to get user memories: ${error.message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Delete all memories for a user
|
|
103
|
+
*/
|
|
104
|
+
async deleteUserMemories(userId) {
|
|
105
|
+
try {
|
|
106
|
+
const client = await this.ensureInitialized();
|
|
107
|
+
await client.deleteAll({ userId });
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
throw new Error(`Failed to delete user memories: ${error.message}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Agent Memory Operations
|
|
115
|
+
// ============================================================================
|
|
116
|
+
/**
|
|
117
|
+
* Store agent workflow state
|
|
118
|
+
*/
|
|
119
|
+
async addAgentMemory(agentId, sessionId, state) {
|
|
120
|
+
try {
|
|
121
|
+
const client = await this.ensureInitialized();
|
|
122
|
+
const message = `Agent state: ${JSON.stringify(state)}`;
|
|
123
|
+
const result = await client.add(message, {
|
|
124
|
+
agentId,
|
|
125
|
+
runId: sessionId,
|
|
126
|
+
metadata: {
|
|
127
|
+
ownerType: 'agent',
|
|
128
|
+
agentId,
|
|
129
|
+
sessionId,
|
|
130
|
+
state,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
return result.results[0]?.id || '';
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throw new Error(`Failed to add agent memory: ${error.message}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Search agent memories
|
|
141
|
+
*/
|
|
142
|
+
async searchAgentMemories(agentId, query, limit = DEFAULTS.AGENT_MEMORY_LIMIT) {
|
|
143
|
+
try {
|
|
144
|
+
const client = await this.ensureInitialized();
|
|
145
|
+
const result = await client.search(query, {
|
|
146
|
+
agentId,
|
|
147
|
+
limit,
|
|
148
|
+
});
|
|
149
|
+
return result.results.map((item) => ({
|
|
150
|
+
id: item.id,
|
|
151
|
+
content: item.memory,
|
|
152
|
+
owner: item.metadata?.agentId || agentId,
|
|
153
|
+
ownerType: 'agent',
|
|
154
|
+
relevance: item.score || 0.5,
|
|
155
|
+
agentId: item.metadata?.agentId || agentId,
|
|
156
|
+
sessionId: item.metadata?.sessionId,
|
|
157
|
+
state: item.metadata?.state,
|
|
158
|
+
createdAt: item.createdAt ? new Date(item.createdAt) : new Date(),
|
|
159
|
+
metadata: item.metadata,
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
throw new Error(`Failed to search agent memories: ${error.message}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get agent workflow state for a specific session
|
|
168
|
+
*/
|
|
169
|
+
async getAgentState(agentId, sessionId) {
|
|
170
|
+
try {
|
|
171
|
+
const client = await this.ensureInitialized();
|
|
172
|
+
const result = await client.search('', {
|
|
173
|
+
agentId,
|
|
174
|
+
runId: sessionId,
|
|
175
|
+
limit: 1,
|
|
176
|
+
});
|
|
177
|
+
if (result.results.length === 0) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
return result.results[0].metadata?.state || null;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
throw new Error(`Failed to get agent state: ${error.message}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// ============================================================================
|
|
187
|
+
// Session Memory Operations
|
|
188
|
+
// ============================================================================
|
|
189
|
+
/**
|
|
190
|
+
* Add temporary session context with TTL
|
|
191
|
+
*/
|
|
192
|
+
async addSessionMemory(sessionId, message, ttl = 3600) {
|
|
193
|
+
try {
|
|
194
|
+
const client = await this.ensureInitialized();
|
|
195
|
+
const expiresAt = new Date(Date.now() + ttl * 1000);
|
|
196
|
+
const result = await client.add(message, {
|
|
197
|
+
runId: sessionId,
|
|
198
|
+
metadata: {
|
|
199
|
+
ownerType: 'session',
|
|
200
|
+
sessionId,
|
|
201
|
+
expiresAt: expiresAt.toISOString(),
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
return result.results[0]?.id || '';
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
throw new Error(`Failed to add session memory: ${error.message}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get concatenated session context (filters out expired memories)
|
|
212
|
+
*/
|
|
213
|
+
async getSessionContext(sessionId) {
|
|
214
|
+
try {
|
|
215
|
+
const client = await this.ensureInitialized();
|
|
216
|
+
const result = await client.search('', {
|
|
217
|
+
runId: sessionId,
|
|
218
|
+
limit: DEFAULTS.SESSION_MEMORY_LIMIT,
|
|
219
|
+
});
|
|
220
|
+
const now = new Date();
|
|
221
|
+
// Filter out expired memories
|
|
222
|
+
const validMemories = result.results.filter((item) => {
|
|
223
|
+
const expiresAt = item.metadata?.expiresAt;
|
|
224
|
+
if (!expiresAt)
|
|
225
|
+
return true; // No expiration = keep
|
|
226
|
+
return new Date(expiresAt) > now;
|
|
227
|
+
});
|
|
228
|
+
// Concatenate all memory content
|
|
229
|
+
return validMemories
|
|
230
|
+
.map((item) => item.memory)
|
|
231
|
+
.join('\n\n');
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
throw new Error(`Failed to get session context: ${error.message}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Delete all memories for a session
|
|
239
|
+
*/
|
|
240
|
+
async deleteSessionMemories(sessionId) {
|
|
241
|
+
try {
|
|
242
|
+
const client = await this.ensureInitialized();
|
|
243
|
+
await client.deleteAll({ runId: sessionId });
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
throw new Error(`Failed to delete session memories: ${error.message}`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// ============================================================================
|
|
251
|
+
// Singleton Factory
|
|
252
|
+
// ============================================================================
|
|
253
|
+
let memoryInstance = null;
|
|
254
|
+
/**
|
|
255
|
+
* Get singleton DCYFRMemory instance
|
|
256
|
+
*/
|
|
257
|
+
export function getMemory() {
|
|
258
|
+
if (!memoryInstance) {
|
|
259
|
+
memoryInstance = new DCYFRMemoryImpl();
|
|
260
|
+
}
|
|
261
|
+
return memoryInstance;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Reset memory instance (for testing)
|
|
265
|
+
*/
|
|
266
|
+
export function resetMemory() {
|
|
267
|
+
memoryInstance = null;
|
|
268
|
+
resetClient();
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=dcyfr-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dcyfr-memory.js","sourceRoot":"","sources":["../../../packages/ai/memory/dcyfr-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Layer Module - Barrel Exports
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for @dcyfr/ai/memory module.
|
|
5
|
+
* Exports all public APIs for memory operations.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/memory
|
|
8
|
+
*/
|
|
9
|
+
export { getMemory, resetMemory, DCYFRMemoryImpl } from './dcyfr-memory.js';
|
|
10
|
+
export { getMemoryConfig, loadMemoryConfig, validateMemoryConfig, DEFAULT_CONFIG, } from './config.js';
|
|
11
|
+
export type { DCYFRMemory, Memory, MemorySearchResult, MemoryContext, AgentMemory, SessionMemory, MemoryProvider, } from './types.js';
|
|
12
|
+
export type { VectorDBProvider, VectorDBConfig, LLMConfig, MemoryConfig, } from './config.js';
|
|
13
|
+
export { createMem0Client, getMem0Client, resetMem0Client, } from './mem0-client.js';
|
|
14
|
+
export type { Mem0Client } from './mem0-client.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/ai/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG5E,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,WAAW,EACX,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Layer Module - Barrel Exports
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for @dcyfr/ai/memory module.
|
|
5
|
+
* Exports all public APIs for memory operations.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/memory
|
|
8
|
+
*/
|
|
9
|
+
// Main API
|
|
10
|
+
export { getMemory, resetMemory, DCYFRMemoryImpl } from './dcyfr-memory.js';
|
|
11
|
+
// Configuration
|
|
12
|
+
export { getMemoryConfig, loadMemoryConfig, validateMemoryConfig, DEFAULT_CONFIG, } from './config.js';
|
|
13
|
+
// Client utilities (for advanced users)
|
|
14
|
+
export { createMem0Client, getMem0Client, resetMem0Client, } from './mem0-client.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/ai/memory/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,WAAW;AACX,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE5E,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AAoBrB,wCAAwC;AACxC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mem0 Client Integration
|
|
3
|
+
*
|
|
4
|
+
* Factory functions and utilities for initializing mem0 memory client.
|
|
5
|
+
* Handles connection to vector database and LLM configuration.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/memory/mem0-client
|
|
8
|
+
*/
|
|
9
|
+
import type { MemoryConfig } from './config.js';
|
|
10
|
+
/**
|
|
11
|
+
* mem0 Memory Item result
|
|
12
|
+
*/
|
|
13
|
+
export interface MemoryItem {
|
|
14
|
+
id: string;
|
|
15
|
+
memory: string;
|
|
16
|
+
hash?: string;
|
|
17
|
+
createdAt?: string;
|
|
18
|
+
updatedAt?: string;
|
|
19
|
+
score?: number;
|
|
20
|
+
metadata?: Record<string, any>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* mem0 Message format
|
|
24
|
+
*/
|
|
25
|
+
export interface Message {
|
|
26
|
+
role: 'user' | 'assistant';
|
|
27
|
+
content: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* mem0 Search Result
|
|
31
|
+
*/
|
|
32
|
+
export interface SearchResult {
|
|
33
|
+
results: MemoryItem[];
|
|
34
|
+
relations?: any[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Add Memory Options
|
|
38
|
+
*/
|
|
39
|
+
export interface AddMemoryOptions {
|
|
40
|
+
userId?: string;
|
|
41
|
+
agentId?: string;
|
|
42
|
+
runId?: string;
|
|
43
|
+
metadata?: Record<string, any>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Search Memory Options
|
|
47
|
+
*/
|
|
48
|
+
export interface SearchMemoryOptions {
|
|
49
|
+
userId?: string;
|
|
50
|
+
agentId?: string;
|
|
51
|
+
runId?: string;
|
|
52
|
+
limit?: number;
|
|
53
|
+
filters?: Record<string, any>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Delete All Memory Options
|
|
57
|
+
*/
|
|
58
|
+
export interface DeleteAllMemoryOptions {
|
|
59
|
+
userId?: string;
|
|
60
|
+
agentId?: string;
|
|
61
|
+
runId?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* mem0 OSS Memory instance interface (from mem0ai/oss)
|
|
65
|
+
*/
|
|
66
|
+
export interface Mem0Client {
|
|
67
|
+
add(messages: string | Message[], config: AddMemoryOptions): Promise<SearchResult>;
|
|
68
|
+
search(query: string, config: SearchMemoryOptions): Promise<SearchResult>;
|
|
69
|
+
get(memoryId: string): Promise<MemoryItem | null>;
|
|
70
|
+
update(memoryId: string, data: string): Promise<{
|
|
71
|
+
message: string;
|
|
72
|
+
}>;
|
|
73
|
+
delete(memoryId: string): Promise<{
|
|
74
|
+
message: string;
|
|
75
|
+
}>;
|
|
76
|
+
deleteAll(config: DeleteAllMemoryOptions): Promise<{
|
|
77
|
+
message: string;
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create and initialize mem0 OSS client
|
|
82
|
+
*
|
|
83
|
+
* This function:
|
|
84
|
+
* 1. Converts DCYFR config to mem0 OSS config format
|
|
85
|
+
* 2. Dynamically imports mem0ai/oss package
|
|
86
|
+
* 3. Initializes Memory client with vector DB and LLM
|
|
87
|
+
* 4. Tests connection (throws on failure)
|
|
88
|
+
*
|
|
89
|
+
* @param config - DCYFR memory configuration
|
|
90
|
+
* @returns Initialized mem0 Memory instance
|
|
91
|
+
* @throws Error if mem0 initialization fails or connection test fails
|
|
92
|
+
*/
|
|
93
|
+
export declare function createMem0Client(config: MemoryConfig): Promise<Mem0Client>;
|
|
94
|
+
/**
|
|
95
|
+
* Get or create singleton mem0 client
|
|
96
|
+
*
|
|
97
|
+
* Reuses existing client if already initialized, otherwise creates new one.
|
|
98
|
+
*
|
|
99
|
+
* @param config - Memory configuration (required on first call)
|
|
100
|
+
* @returns mem0 client instance
|
|
101
|
+
* @throws Error if called without config before initialization
|
|
102
|
+
*/
|
|
103
|
+
export declare function getMem0Client(config?: MemoryConfig): Promise<Mem0Client>;
|
|
104
|
+
/**
|
|
105
|
+
* Reset mem0 client singleton (for testing)
|
|
106
|
+
*/
|
|
107
|
+
export declare function resetMem0Client(): void;
|
|
108
|
+
//# sourceMappingURL=mem0-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem0-client.d.ts","sourceRoot":"","sources":["../../../packages/ai/memory/mem0-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA6B,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1E,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,SAAS,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAC,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AA4HD;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAyChF;AAQD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAW9E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mem0 Client Integration
|
|
3
|
+
*
|
|
4
|
+
* Factory functions and utilities for initializing mem0 memory client.
|
|
5
|
+
* Handles connection to vector database and LLM configuration.
|
|
6
|
+
*
|
|
7
|
+
* @module @dcyfr/ai/memory/mem0-client
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Convert DCYFR VectorDBConfig to mem0 OSS vector_store config
|
|
11
|
+
*/
|
|
12
|
+
function buildVectorStoreConfig(config) {
|
|
13
|
+
switch (config.provider) {
|
|
14
|
+
case 'qdrant':
|
|
15
|
+
const qdrantConfig = {
|
|
16
|
+
collectionName: config.index || 'dcyfr_memories',
|
|
17
|
+
dimension: 1536, // OpenAI text-embedding-3-small dimension
|
|
18
|
+
};
|
|
19
|
+
if (config.url) {
|
|
20
|
+
const url = new URL(config.url);
|
|
21
|
+
qdrantConfig.url = config.url;
|
|
22
|
+
qdrantConfig.host = url.hostname;
|
|
23
|
+
qdrantConfig.port = parseInt(url.port || '6333', 10);
|
|
24
|
+
}
|
|
25
|
+
if (config.apiKey) {
|
|
26
|
+
qdrantConfig.apiKey = config.apiKey;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
provider: 'qdrant',
|
|
30
|
+
config: qdrantConfig,
|
|
31
|
+
};
|
|
32
|
+
case 'pinecone':
|
|
33
|
+
return {
|
|
34
|
+
provider: 'pinecone',
|
|
35
|
+
config: {
|
|
36
|
+
apiKey: config.apiKey,
|
|
37
|
+
collectionName: config.index || 'dcyfr-memories',
|
|
38
|
+
dimension: 1536,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
case 'weaviate':
|
|
42
|
+
const weaviateConfig = {
|
|
43
|
+
collectionName: config.index || 'dcyfr_memories',
|
|
44
|
+
dimension: 1536,
|
|
45
|
+
};
|
|
46
|
+
if (config.url) {
|
|
47
|
+
weaviateConfig.url = config.url;
|
|
48
|
+
}
|
|
49
|
+
if (config.apiKey) {
|
|
50
|
+
weaviateConfig.apiKey = config.apiKey;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
provider: 'weaviate',
|
|
54
|
+
config: weaviateConfig,
|
|
55
|
+
};
|
|
56
|
+
default:
|
|
57
|
+
throw new Error(`Unsupported vector DB provider: ${config.provider}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Convert DCYFR LLMConfig to mem0 OSS llm config
|
|
62
|
+
*/
|
|
63
|
+
function buildLLMConfig(config) {
|
|
64
|
+
return {
|
|
65
|
+
provider: config.provider === 'openai' ? 'openai' : config.provider,
|
|
66
|
+
config: {
|
|
67
|
+
model: config.model || 'gpt-4',
|
|
68
|
+
apiKey: config.apiKey,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Convert DCYFR LLMConfig to mem0 OSS embedder config
|
|
74
|
+
*/
|
|
75
|
+
function buildEmbedderConfig(config) {
|
|
76
|
+
return {
|
|
77
|
+
provider: config.provider === 'openai' ? 'openai' : config.provider,
|
|
78
|
+
config: {
|
|
79
|
+
model: config.embeddingModel || 'text-embedding-3-small',
|
|
80
|
+
apiKey: config.apiKey,
|
|
81
|
+
embeddingDims: 1536, // OpenAI text-embedding-3-small dimension
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create and initialize mem0 OSS client
|
|
87
|
+
*
|
|
88
|
+
* This function:
|
|
89
|
+
* 1. Converts DCYFR config to mem0 OSS config format
|
|
90
|
+
* 2. Dynamically imports mem0ai/oss package
|
|
91
|
+
* 3. Initializes Memory client with vector DB and LLM
|
|
92
|
+
* 4. Tests connection (throws on failure)
|
|
93
|
+
*
|
|
94
|
+
* @param config - DCYFR memory configuration
|
|
95
|
+
* @returns Initialized mem0 Memory instance
|
|
96
|
+
* @throws Error if mem0 initialization fails or connection test fails
|
|
97
|
+
*/
|
|
98
|
+
export async function createMem0Client(config) {
|
|
99
|
+
try {
|
|
100
|
+
// Build mem0 OSS configuration
|
|
101
|
+
const mem0Config = {
|
|
102
|
+
version: 'v1.1',
|
|
103
|
+
embedder: buildEmbedderConfig(config.llm),
|
|
104
|
+
vectorStore: buildVectorStoreConfig(config.vectorDB),
|
|
105
|
+
llm: buildLLMConfig(config.llm),
|
|
106
|
+
disableHistory: true, // Disable history DB for simplicity
|
|
107
|
+
};
|
|
108
|
+
// Dynamic import of mem0ai/oss package
|
|
109
|
+
const { Memory } = await import('mem0ai/oss');
|
|
110
|
+
// Initialize client
|
|
111
|
+
const client = new Memory(mem0Config);
|
|
112
|
+
// Test connection with a simple search
|
|
113
|
+
try {
|
|
114
|
+
await client.search('_health_check', {
|
|
115
|
+
userId: '_system',
|
|
116
|
+
limit: 1,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
// If error is about connection, throw
|
|
121
|
+
if (error.message?.includes('connection') || error.message?.includes('timeout')) {
|
|
122
|
+
throw new Error(`mem0 connection test failed: ${error.message}`);
|
|
123
|
+
}
|
|
124
|
+
// Other errors (like no memories) are acceptable
|
|
125
|
+
}
|
|
126
|
+
return client;
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error.message?.includes('Cannot find module')) {
|
|
130
|
+
throw new Error('mem0ai package not installed. Run: npm install mem0ai\n' +
|
|
131
|
+
'Original error: ' + error.message);
|
|
132
|
+
}
|
|
133
|
+
throw new Error(`Failed to initialize mem0 client: ${error.message}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Singleton mem0 client instance
|
|
138
|
+
* Initialized lazily on first use
|
|
139
|
+
*/
|
|
140
|
+
let mem0ClientInstance = null;
|
|
141
|
+
/**
|
|
142
|
+
* Get or create singleton mem0 client
|
|
143
|
+
*
|
|
144
|
+
* Reuses existing client if already initialized, otherwise creates new one.
|
|
145
|
+
*
|
|
146
|
+
* @param config - Memory configuration (required on first call)
|
|
147
|
+
* @returns mem0 client instance
|
|
148
|
+
* @throws Error if called without config before initialization
|
|
149
|
+
*/
|
|
150
|
+
export async function getMem0Client(config) {
|
|
151
|
+
if (mem0ClientInstance) {
|
|
152
|
+
return mem0ClientInstance;
|
|
153
|
+
}
|
|
154
|
+
if (!config) {
|
|
155
|
+
throw new Error('Memory configuration required for first-time initialization');
|
|
156
|
+
}
|
|
157
|
+
mem0ClientInstance = await createMem0Client(config);
|
|
158
|
+
return mem0ClientInstance;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Reset mem0 client singleton (for testing)
|
|
162
|
+
*/
|
|
163
|
+
export function resetMem0Client() {
|
|
164
|
+
mem0ClientInstance = null;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=mem0-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem0-client.js","sourceRoot":"","sources":["../../../packages/ai/memory/mem0-client.ts"],"names":[],"mappings":"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"}
|