@xynehq/jaf 0.1.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/LICENSE +21 -0
- package/README.md +596 -0
- package/dist/a2a/agent-card.d.ts +28 -0
- package/dist/a2a/agent-card.d.ts.map +1 -0
- package/dist/a2a/agent-card.js +250 -0
- package/dist/a2a/agent-card.js.map +1 -0
- package/dist/a2a/agent.d.ts +38 -0
- package/dist/a2a/agent.d.ts.map +1 -0
- package/dist/a2a/agent.js +223 -0
- package/dist/a2a/agent.js.map +1 -0
- package/dist/a2a/client.d.ts +35 -0
- package/dist/a2a/client.d.ts.map +1 -0
- package/dist/a2a/client.js +337 -0
- package/dist/a2a/client.js.map +1 -0
- package/dist/a2a/examples/client-example.d.ts +104 -0
- package/dist/a2a/examples/client-example.d.ts.map +1 -0
- package/dist/a2a/examples/client-example.js +232 -0
- package/dist/a2a/examples/client-example.js.map +1 -0
- package/dist/a2a/examples/server-example.d.ts +9 -0
- package/dist/a2a/examples/server-example.d.ts.map +1 -0
- package/dist/a2a/examples/server-example.js +209 -0
- package/dist/a2a/examples/server-example.js.map +1 -0
- package/dist/a2a/examples/weather-agent.d.ts +8 -0
- package/dist/a2a/examples/weather-agent.d.ts.map +1 -0
- package/dist/a2a/examples/weather-agent.js +232 -0
- package/dist/a2a/examples/weather-agent.js.map +1 -0
- package/dist/a2a/executor.d.ts +43 -0
- package/dist/a2a/executor.d.ts.map +1 -0
- package/dist/a2a/executor.js +507 -0
- package/dist/a2a/executor.js.map +1 -0
- package/dist/a2a/index.d.ts +378 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +72 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/a2a/memory/cleanup.d.ts +58 -0
- package/dist/a2a/memory/cleanup.d.ts.map +1 -0
- package/dist/a2a/memory/cleanup.js +281 -0
- package/dist/a2a/memory/cleanup.js.map +1 -0
- package/dist/a2a/memory/factory.d.ts +38 -0
- package/dist/a2a/memory/factory.d.ts.map +1 -0
- package/dist/a2a/memory/factory.js +369 -0
- package/dist/a2a/memory/factory.js.map +1 -0
- package/dist/a2a/memory/index.d.ts +13 -0
- package/dist/a2a/memory/index.d.ts.map +1 -0
- package/dist/a2a/memory/index.js +16 -0
- package/dist/a2a/memory/index.js.map +1 -0
- package/dist/a2a/memory/providers/in-memory.d.ts +10 -0
- package/dist/a2a/memory/providers/in-memory.d.ts.map +1 -0
- package/dist/a2a/memory/providers/in-memory.js +539 -0
- package/dist/a2a/memory/providers/in-memory.js.map +1 -0
- package/dist/a2a/memory/providers/postgres.d.ts +10 -0
- package/dist/a2a/memory/providers/postgres.d.ts.map +1 -0
- package/dist/a2a/memory/providers/postgres.js +404 -0
- package/dist/a2a/memory/providers/postgres.js.map +1 -0
- package/dist/a2a/memory/providers/redis.d.ts +10 -0
- package/dist/a2a/memory/providers/redis.d.ts.map +1 -0
- package/dist/a2a/memory/providers/redis.js +435 -0
- package/dist/a2a/memory/providers/redis.js.map +1 -0
- package/dist/a2a/memory/serialization.d.ts +53 -0
- package/dist/a2a/memory/serialization.d.ts.map +1 -0
- package/dist/a2a/memory/serialization.js +233 -0
- package/dist/a2a/memory/serialization.js.map +1 -0
- package/dist/a2a/memory/types.d.ts +395 -0
- package/dist/a2a/memory/types.d.ts.map +1 -0
- package/dist/a2a/memory/types.js +85 -0
- package/dist/a2a/memory/types.js.map +1 -0
- package/dist/a2a/protocol.d.ts +38 -0
- package/dist/a2a/protocol.d.ts.map +1 -0
- package/dist/a2a/protocol.js +211 -0
- package/dist/a2a/protocol.js.map +1 -0
- package/dist/a2a/server.d.ts +343 -0
- package/dist/a2a/server.d.ts.map +1 -0
- package/dist/a2a/server.js +362 -0
- package/dist/a2a/server.js.map +1 -0
- package/dist/a2a/types.d.ts +730 -0
- package/dist/a2a/types.d.ts.map +1 -0
- package/dist/a2a/types.js +73 -0
- package/dist/a2a/types.js.map +1 -0
- package/dist/adk/agents/index.d.ts +48 -0
- package/dist/adk/agents/index.d.ts.map +1 -0
- package/dist/adk/agents/index.js +277 -0
- package/dist/adk/agents/index.js.map +1 -0
- package/dist/adk/artifacts/index.d.ts +62 -0
- package/dist/adk/artifacts/index.d.ts.map +1 -0
- package/dist/adk/artifacts/index.js +394 -0
- package/dist/adk/artifacts/index.js.map +1 -0
- package/dist/adk/config/llm-config.d.ts +75 -0
- package/dist/adk/config/llm-config.d.ts.map +1 -0
- package/dist/adk/config/llm-config.js +422 -0
- package/dist/adk/config/llm-config.js.map +1 -0
- package/dist/adk/content/index.d.ts +58 -0
- package/dist/adk/content/index.d.ts.map +1 -0
- package/dist/adk/content/index.js +220 -0
- package/dist/adk/content/index.js.map +1 -0
- package/dist/adk/examples/advanced-features.d.ts +22 -0
- package/dist/adk/examples/advanced-features.d.ts.map +1 -0
- package/dist/adk/examples/advanced-features.js +380 -0
- package/dist/adk/examples/advanced-features.js.map +1 -0
- package/dist/adk/examples/basic-agent.d.ts +28 -0
- package/dist/adk/examples/basic-agent.d.ts.map +1 -0
- package/dist/adk/examples/basic-agent.js +207 -0
- package/dist/adk/examples/basic-agent.js.map +1 -0
- package/dist/adk/examples/multi-agent.d.ts +24 -0
- package/dist/adk/examples/multi-agent.d.ts.map +1 -0
- package/dist/adk/examples/multi-agent.js +321 -0
- package/dist/adk/examples/multi-agent.js.map +1 -0
- package/dist/adk/examples/streaming-example.d.ts +9 -0
- package/dist/adk/examples/streaming-example.d.ts.map +1 -0
- package/dist/adk/examples/streaming-example.js +193 -0
- package/dist/adk/examples/streaming-example.js.map +1 -0
- package/dist/adk/index.d.ts +65 -0
- package/dist/adk/index.d.ts.map +1 -0
- package/dist/adk/index.js +251 -0
- package/dist/adk/index.js.map +1 -0
- package/dist/adk/models.d.ts +338 -0
- package/dist/adk/models.d.ts.map +1 -0
- package/dist/adk/models.js +466 -0
- package/dist/adk/models.js.map +1 -0
- package/dist/adk/providers/error-handler.d.ts +100 -0
- package/dist/adk/providers/error-handler.d.ts.map +1 -0
- package/dist/adk/providers/error-handler.js +289 -0
- package/dist/adk/providers/error-handler.js.map +1 -0
- package/dist/adk/providers/llm-service.d.ts +41 -0
- package/dist/adk/providers/llm-service.d.ts.map +1 -0
- package/dist/adk/providers/llm-service.js +520 -0
- package/dist/adk/providers/llm-service.js.map +1 -0
- package/dist/adk/providers/type-converters.d.ts +34 -0
- package/dist/adk/providers/type-converters.d.ts.map +1 -0
- package/dist/adk/providers/type-converters.js +436 -0
- package/dist/adk/providers/type-converters.js.map +1 -0
- package/dist/adk/runners/index.d.ts +33 -0
- package/dist/adk/runners/index.d.ts.map +1 -0
- package/dist/adk/runners/index.js +466 -0
- package/dist/adk/runners/index.js.map +1 -0
- package/dist/adk/schemas/index.d.ts +85 -0
- package/dist/adk/schemas/index.d.ts.map +1 -0
- package/dist/adk/schemas/index.js +363 -0
- package/dist/adk/schemas/index.js.map +1 -0
- package/dist/adk/sessions/examples/session-provider-usage.d.ts +10 -0
- package/dist/adk/sessions/examples/session-provider-usage.d.ts.map +1 -0
- package/dist/adk/sessions/examples/session-provider-usage.js +145 -0
- package/dist/adk/sessions/examples/session-provider-usage.js.map +1 -0
- package/dist/adk/sessions/index.d.ts +53 -0
- package/dist/adk/sessions/index.d.ts.map +1 -0
- package/dist/adk/sessions/index.js +451 -0
- package/dist/adk/sessions/index.js.map +1 -0
- package/dist/adk/sessions/postgres-provider.d.ts +22 -0
- package/dist/adk/sessions/postgres-provider.d.ts.map +1 -0
- package/dist/adk/sessions/postgres-provider.js +293 -0
- package/dist/adk/sessions/postgres-provider.js.map +1 -0
- package/dist/adk/sessions/redis-provider.d.ts +19 -0
- package/dist/adk/sessions/redis-provider.d.ts.map +1 -0
- package/dist/adk/sessions/redis-provider.js +237 -0
- package/dist/adk/sessions/redis-provider.js.map +1 -0
- package/dist/adk/streaming/index.d.ts +76 -0
- package/dist/adk/streaming/index.d.ts.map +1 -0
- package/dist/adk/streaming/index.js +419 -0
- package/dist/adk/streaming/index.js.map +1 -0
- package/dist/adk/tools/index.d.ts +27 -0
- package/dist/adk/tools/index.d.ts.map +1 -0
- package/dist/adk/tools/index.js +506 -0
- package/dist/adk/tools/index.js.map +1 -0
- package/dist/adk/types.d.ts +351 -0
- package/dist/adk/types.d.ts.map +1 -0
- package/dist/adk/types.js +107 -0
- package/dist/adk/types.js.map +1 -0
- package/dist/core/engine.d.ts +3 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +438 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +8 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +84 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/tool-results.d.ts +57 -0
- package/dist/core/tool-results.d.ts.map +1 -0
- package/dist/core/tool-results.js +133 -0
- package/dist/core/tool-results.js.map +1 -0
- package/dist/core/tracing.d.ts +32 -0
- package/dist/core/tracing.d.ts.map +1 -0
- package/dist/core/tracing.js +132 -0
- package/dist/core/tracing.js.map +1 -0
- package/dist/core/types.d.ts +165 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/demo/agents.d.ts +23 -0
- package/dist/demo/agents.d.ts.map +1 -0
- package/dist/demo/agents.js +69 -0
- package/dist/demo/agents.js.map +1 -0
- package/dist/demo/index.d.ts +2 -0
- package/dist/demo/index.d.ts.map +1 -0
- package/dist/demo/index.js +250 -0
- package/dist/demo/index.js.map +1 -0
- package/dist/demo/mock-provider.d.ts +22 -0
- package/dist/demo/mock-provider.d.ts.map +1 -0
- package/dist/demo/mock-provider.js +138 -0
- package/dist/demo/mock-provider.js.map +1 -0
- package/dist/demo/tools.d.ts +14 -0
- package/dist/demo/tools.d.ts.map +1 -0
- package/dist/demo/tools.js +115 -0
- package/dist/demo/tools.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/factory.d.ts +22 -0
- package/dist/memory/factory.d.ts.map +1 -0
- package/dist/memory/factory.js +88 -0
- package/dist/memory/factory.js.map +1 -0
- package/dist/memory/providers/in-memory.d.ts +7 -0
- package/dist/memory/providers/in-memory.d.ts.map +1 -0
- package/dist/memory/providers/in-memory.js +287 -0
- package/dist/memory/providers/in-memory.js.map +1 -0
- package/dist/memory/providers/postgres.d.ts +15 -0
- package/dist/memory/providers/postgres.d.ts.map +1 -0
- package/dist/memory/providers/postgres.js +495 -0
- package/dist/memory/providers/postgres.js.map +1 -0
- package/dist/memory/providers/redis.d.ts +18 -0
- package/dist/memory/providers/redis.d.ts.map +1 -0
- package/dist/memory/providers/redis.js +354 -0
- package/dist/memory/providers/redis.js.map +1 -0
- package/dist/memory/types.d.ts +296 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +93 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/policies/handoff.d.ts +16 -0
- package/dist/policies/handoff.d.ts.map +1 -0
- package/dist/policies/handoff.js +20 -0
- package/dist/policies/handoff.js.map +1 -0
- package/dist/policies/validation.d.ts +14 -0
- package/dist/policies/validation.d.ts.map +1 -0
- package/dist/policies/validation.js +92 -0
- package/dist/policies/validation.js.map +1 -0
- package/dist/providers/mcp.d.ts +17 -0
- package/dist/providers/mcp.d.ts.map +1 -0
- package/dist/providers/mcp.js +111 -0
- package/dist/providers/mcp.js.map +1 -0
- package/dist/providers/model.d.ts +3 -0
- package/dist/providers/model.d.ts.map +1 -0
- package/dist/providers/model.js +113 -0
- package/dist/providers/model.js.map +1 -0
- package/dist/server/index.d.ts +35 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +66 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/server.d.ts +12 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +394 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/types.d.ts +456 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +75 -0
- package/dist/server/types.js.map +1 -0
- package/dist/test-utils/db-setup.d.ts +34 -0
- package/dist/test-utils/db-setup.d.ts.map +1 -0
- package/dist/test-utils/db-setup.js +149 -0
- package/dist/test-utils/db-setup.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +199 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/safe-math.d.ts +31 -0
- package/dist/utils/safe-math.d.ts.map +1 -0
- package/dist/utils/safe-math.js +86 -0
- package/dist/utils/safe-math.js.map +1 -0
- package/dist/visualization/example.d.ts +9 -0
- package/dist/visualization/example.d.ts.map +1 -0
- package/dist/visualization/example.js +236 -0
- package/dist/visualization/example.js.map +1 -0
- package/dist/visualization/graphviz.d.ts +42 -0
- package/dist/visualization/graphviz.d.ts.map +1 -0
- package/dist/visualization/graphviz.js +403 -0
- package/dist/visualization/graphviz.js.map +1 -0
- package/dist/visualization/index.d.ts +10 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +12 -0
- package/dist/visualization/index.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { createSuccess, createFailure, createMemoryConnectionError, createMemoryNotFoundError, createMemoryStorageError } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Redis memory provider - persistent across server restarts
|
|
4
|
+
* Best for production environments with shared state
|
|
5
|
+
*/
|
|
6
|
+
export async function createRedisProvider(config, redisClient) {
|
|
7
|
+
const fullConfig = {
|
|
8
|
+
...config,
|
|
9
|
+
type: 'redis',
|
|
10
|
+
host: config.host ?? 'localhost',
|
|
11
|
+
port: config.port ?? 6379,
|
|
12
|
+
db: config.db ?? 0,
|
|
13
|
+
keyPrefix: config.keyPrefix ?? 'jaf:memory:'
|
|
14
|
+
};
|
|
15
|
+
try {
|
|
16
|
+
await redisClient.ping();
|
|
17
|
+
console.log(`[MEMORY:Redis] Connected to Redis at ${fullConfig.host}:${fullConfig.port}`);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
throw createMemoryConnectionError('Redis', error);
|
|
21
|
+
}
|
|
22
|
+
const ensureConnected = () => {
|
|
23
|
+
if (!redisClient) {
|
|
24
|
+
throw createMemoryConnectionError('Redis', new Error('Redis client not initialized'));
|
|
25
|
+
}
|
|
26
|
+
return redisClient;
|
|
27
|
+
};
|
|
28
|
+
const getKey = (conversationId) => {
|
|
29
|
+
return `${fullConfig.keyPrefix}${conversationId}`;
|
|
30
|
+
};
|
|
31
|
+
const getUserKey = (userId) => {
|
|
32
|
+
return `${fullConfig.keyPrefix}user:${userId}:*`;
|
|
33
|
+
};
|
|
34
|
+
const storeMessages = async (conversationId, messages, metadata) => {
|
|
35
|
+
const client = ensureConnected();
|
|
36
|
+
try {
|
|
37
|
+
const now = new Date();
|
|
38
|
+
const conversation = {
|
|
39
|
+
conversationId,
|
|
40
|
+
userId: metadata?.userId,
|
|
41
|
+
messages,
|
|
42
|
+
metadata: {
|
|
43
|
+
createdAt: now,
|
|
44
|
+
updatedAt: now,
|
|
45
|
+
totalMessages: messages.length,
|
|
46
|
+
lastActivity: now,
|
|
47
|
+
traceId: metadata?.traceId,
|
|
48
|
+
...metadata
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const key = getKey(conversationId);
|
|
52
|
+
const value = JSON.stringify(conversation, null, 0); // Compact JSON
|
|
53
|
+
await client.set(key, value);
|
|
54
|
+
// Set TTL if configured
|
|
55
|
+
if (fullConfig.ttl) {
|
|
56
|
+
await client.expire(key, fullConfig.ttl);
|
|
57
|
+
}
|
|
58
|
+
console.log(`[MEMORY:Redis] Stored ${messages.length} messages for conversation ${conversationId}`);
|
|
59
|
+
return createSuccess(undefined);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return createFailure(createMemoryStorageError('store messages', 'Redis', error));
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const getConversation = async (conversationId) => {
|
|
66
|
+
const client = ensureConnected();
|
|
67
|
+
try {
|
|
68
|
+
const key = getKey(conversationId);
|
|
69
|
+
const value = await client.get(key);
|
|
70
|
+
if (!value) {
|
|
71
|
+
return createSuccess(null);
|
|
72
|
+
}
|
|
73
|
+
const conversation = JSON.parse(value);
|
|
74
|
+
// Convert date strings back to Date objects
|
|
75
|
+
const convertedConversation = {
|
|
76
|
+
...conversation,
|
|
77
|
+
metadata: conversation.metadata ? {
|
|
78
|
+
...conversation.metadata,
|
|
79
|
+
createdAt: conversation.metadata.createdAt ? new Date(conversation.metadata.createdAt) : new Date(),
|
|
80
|
+
updatedAt: conversation.metadata.updatedAt ? new Date(conversation.metadata.updatedAt) : new Date(),
|
|
81
|
+
lastActivity: conversation.metadata.lastActivity ? new Date(conversation.metadata.lastActivity) : new Date()
|
|
82
|
+
} : undefined
|
|
83
|
+
};
|
|
84
|
+
// Update last activity
|
|
85
|
+
const updatedConversation = {
|
|
86
|
+
...convertedConversation,
|
|
87
|
+
metadata: {
|
|
88
|
+
...convertedConversation.metadata,
|
|
89
|
+
lastActivity: new Date()
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
// Store updated last activity (fire and forget)
|
|
93
|
+
client.set(key, JSON.stringify(updatedConversation, null, 0)).catch(console.error);
|
|
94
|
+
console.log(`[MEMORY:Redis] Retrieved conversation ${conversationId} with ${convertedConversation.messages.length} messages`);
|
|
95
|
+
return createSuccess(updatedConversation);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return createFailure(createMemoryStorageError('get conversation', 'Redis', error));
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const appendMessages = async (conversationId, messages, metadata) => {
|
|
102
|
+
const client = ensureConnected();
|
|
103
|
+
try {
|
|
104
|
+
const existingResult = await getConversation(conversationId);
|
|
105
|
+
if (!existingResult.success) {
|
|
106
|
+
return existingResult;
|
|
107
|
+
}
|
|
108
|
+
if (!existingResult.data) {
|
|
109
|
+
return createFailure(createMemoryNotFoundError(conversationId, 'Redis'));
|
|
110
|
+
}
|
|
111
|
+
const existing = existingResult.data;
|
|
112
|
+
const updatedMessages = [...existing.messages, ...messages];
|
|
113
|
+
const now = new Date();
|
|
114
|
+
const updatedConversation = {
|
|
115
|
+
...existing,
|
|
116
|
+
messages: updatedMessages,
|
|
117
|
+
metadata: {
|
|
118
|
+
...existing.metadata,
|
|
119
|
+
updatedAt: now,
|
|
120
|
+
lastActivity: now,
|
|
121
|
+
totalMessages: updatedMessages.length,
|
|
122
|
+
traceId: metadata?.traceId || existing.metadata?.traceId,
|
|
123
|
+
...metadata
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const key = getKey(conversationId);
|
|
127
|
+
await client.set(key, JSON.stringify(updatedConversation, null, 0));
|
|
128
|
+
// Refresh TTL if configured
|
|
129
|
+
if (fullConfig.ttl) {
|
|
130
|
+
await client.expire(key, fullConfig.ttl);
|
|
131
|
+
}
|
|
132
|
+
console.log(`[MEMORY:Redis] Appended ${messages.length} messages to conversation ${conversationId} (total: ${updatedMessages.length})`);
|
|
133
|
+
return createSuccess(undefined);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
return createFailure(createMemoryStorageError('append messages', 'Redis', error));
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
const findConversations = async (query) => {
|
|
140
|
+
const client = ensureConnected();
|
|
141
|
+
try {
|
|
142
|
+
// Get all conversation keys
|
|
143
|
+
const pattern = query.userId
|
|
144
|
+
? getUserKey(query.userId)
|
|
145
|
+
: `${fullConfig.keyPrefix}*`;
|
|
146
|
+
const keys = await client.keys(pattern);
|
|
147
|
+
const results = [];
|
|
148
|
+
// Fetch conversations in parallel
|
|
149
|
+
const conversations = await Promise.all(keys.map(async (key) => {
|
|
150
|
+
try {
|
|
151
|
+
const value = await client.get(key);
|
|
152
|
+
return value ? JSON.parse(value) : null;
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return null; // Skip malformed entries
|
|
156
|
+
}
|
|
157
|
+
}));
|
|
158
|
+
// Filter and process results
|
|
159
|
+
for (const conversation of conversations) {
|
|
160
|
+
if (!conversation)
|
|
161
|
+
continue;
|
|
162
|
+
// Convert date strings back to Date objects
|
|
163
|
+
const convertedConversation = {
|
|
164
|
+
...conversation,
|
|
165
|
+
metadata: conversation.metadata ? {
|
|
166
|
+
...conversation.metadata,
|
|
167
|
+
createdAt: conversation.metadata.createdAt ? new Date(conversation.metadata.createdAt) : new Date(),
|
|
168
|
+
updatedAt: conversation.metadata.updatedAt ? new Date(conversation.metadata.updatedAt) : new Date(),
|
|
169
|
+
lastActivity: conversation.metadata.lastActivity ? new Date(conversation.metadata.lastActivity) : new Date()
|
|
170
|
+
} : undefined
|
|
171
|
+
};
|
|
172
|
+
// Apply filters
|
|
173
|
+
let matches = true;
|
|
174
|
+
if (query.conversationId && convertedConversation.conversationId !== query.conversationId) {
|
|
175
|
+
matches = false;
|
|
176
|
+
}
|
|
177
|
+
if (query.traceId && convertedConversation.metadata?.traceId !== query.traceId) {
|
|
178
|
+
matches = false;
|
|
179
|
+
}
|
|
180
|
+
if (query.since && convertedConversation.metadata?.createdAt && convertedConversation.metadata.createdAt < query.since) {
|
|
181
|
+
matches = false;
|
|
182
|
+
}
|
|
183
|
+
if (query.until && convertedConversation.metadata?.createdAt && convertedConversation.metadata.createdAt > query.until) {
|
|
184
|
+
matches = false;
|
|
185
|
+
}
|
|
186
|
+
if (matches) {
|
|
187
|
+
results.push(convertedConversation);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Sort by last activity (most recent first)
|
|
191
|
+
results.sort((a, b) => {
|
|
192
|
+
const aTime = a.metadata?.lastActivity?.getTime() || 0;
|
|
193
|
+
const bTime = b.metadata?.lastActivity?.getTime() || 0;
|
|
194
|
+
return bTime - aTime;
|
|
195
|
+
});
|
|
196
|
+
// Apply pagination
|
|
197
|
+
const offset = query.offset || 0;
|
|
198
|
+
const limit = query.limit || results.length;
|
|
199
|
+
const paginatedResults = results.slice(offset, offset + limit);
|
|
200
|
+
console.log(`[MEMORY:Redis] Found ${paginatedResults.length} conversations matching query`);
|
|
201
|
+
return createSuccess(paginatedResults);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
return createFailure(createMemoryStorageError('find conversations', 'Redis', error));
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
const getRecentMessages = async (conversationId, limit = 50) => {
|
|
208
|
+
const conversationResult = await getConversation(conversationId);
|
|
209
|
+
if (!conversationResult.success) {
|
|
210
|
+
return conversationResult;
|
|
211
|
+
}
|
|
212
|
+
if (!conversationResult.data) {
|
|
213
|
+
return createSuccess([]);
|
|
214
|
+
}
|
|
215
|
+
const messages = conversationResult.data.messages.slice(-limit);
|
|
216
|
+
console.log(`[MEMORY:Redis] Retrieved ${messages.length} recent messages for conversation ${conversationId}`);
|
|
217
|
+
return createSuccess(messages);
|
|
218
|
+
};
|
|
219
|
+
const deleteConversation = async (conversationId) => {
|
|
220
|
+
const client = ensureConnected();
|
|
221
|
+
try {
|
|
222
|
+
const key = getKey(conversationId);
|
|
223
|
+
const deleted = await client.del(key);
|
|
224
|
+
console.log(`[MEMORY:Redis] ${deleted > 0 ? 'Deleted' : 'Attempted to delete non-existent'} conversation ${conversationId}`);
|
|
225
|
+
return createSuccess(deleted > 0);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
return createFailure(createMemoryStorageError('delete conversation', 'Redis', error));
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
const clearUserConversations = async (userId) => {
|
|
232
|
+
const client = ensureConnected();
|
|
233
|
+
try {
|
|
234
|
+
const pattern = getUserKey(userId);
|
|
235
|
+
const keys = await client.keys(pattern);
|
|
236
|
+
if (keys.length === 0) {
|
|
237
|
+
return createSuccess(0);
|
|
238
|
+
}
|
|
239
|
+
// Delete in batches to avoid blocking Redis
|
|
240
|
+
let deletedCount = 0;
|
|
241
|
+
const batchSize = 100;
|
|
242
|
+
for (let i = 0; i < keys.length; i += batchSize) {
|
|
243
|
+
const batch = keys.slice(i, i + batchSize);
|
|
244
|
+
const results = await Promise.all(batch.map(key => client.del(key)));
|
|
245
|
+
deletedCount += results.reduce((sum, result) => sum + result, 0);
|
|
246
|
+
}
|
|
247
|
+
console.log(`[MEMORY:Redis] Cleared ${deletedCount} conversations for user ${userId}`);
|
|
248
|
+
return createSuccess(deletedCount);
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
return createFailure(createMemoryStorageError('clear user conversations', 'Redis', error));
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
const getStats = async (userId) => {
|
|
255
|
+
const client = ensureConnected();
|
|
256
|
+
try {
|
|
257
|
+
const pattern = userId
|
|
258
|
+
? getUserKey(userId)
|
|
259
|
+
: `${fullConfig.keyPrefix}*`;
|
|
260
|
+
const keys = await client.keys(pattern);
|
|
261
|
+
let totalConversations = 0;
|
|
262
|
+
let totalMessages = 0;
|
|
263
|
+
let oldestDate;
|
|
264
|
+
let newestDate;
|
|
265
|
+
// Process conversations in batches
|
|
266
|
+
const batchSize = 50;
|
|
267
|
+
for (let i = 0; i < keys.length; i += batchSize) {
|
|
268
|
+
const batch = keys.slice(i, i + batchSize);
|
|
269
|
+
const conversations = await Promise.all(batch.map(async (key) => {
|
|
270
|
+
try {
|
|
271
|
+
const value = await client.get(key);
|
|
272
|
+
return value ? JSON.parse(value) : null;
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
}));
|
|
278
|
+
for (const conversation of conversations) {
|
|
279
|
+
if (!conversation)
|
|
280
|
+
continue;
|
|
281
|
+
totalConversations++;
|
|
282
|
+
totalMessages += conversation.messages.length;
|
|
283
|
+
const createdAt = conversation.metadata?.createdAt
|
|
284
|
+
? new Date(conversation.metadata.createdAt)
|
|
285
|
+
: undefined;
|
|
286
|
+
if (createdAt) {
|
|
287
|
+
if (!oldestDate || createdAt < oldestDate) {
|
|
288
|
+
oldestDate = createdAt;
|
|
289
|
+
}
|
|
290
|
+
if (!newestDate || createdAt > newestDate) {
|
|
291
|
+
newestDate = createdAt;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return createSuccess({
|
|
297
|
+
totalConversations,
|
|
298
|
+
totalMessages,
|
|
299
|
+
oldestConversation: oldestDate,
|
|
300
|
+
newestConversation: newestDate
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
return createFailure(createMemoryStorageError('get stats', 'Redis', error));
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
const healthCheck = async () => {
|
|
308
|
+
const start = Date.now();
|
|
309
|
+
try {
|
|
310
|
+
const client = ensureConnected();
|
|
311
|
+
await client.ping();
|
|
312
|
+
// Test basic operations
|
|
313
|
+
const testId = `health-check-${Date.now()}`;
|
|
314
|
+
const testKey = getKey(testId);
|
|
315
|
+
await client.set(testKey, JSON.stringify({ test: true }));
|
|
316
|
+
await client.get(testKey);
|
|
317
|
+
await client.del(testKey);
|
|
318
|
+
const latencyMs = Date.now() - start;
|
|
319
|
+
return createSuccess({ healthy: true, latencyMs });
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
return createSuccess({
|
|
323
|
+
healthy: false,
|
|
324
|
+
latencyMs: Date.now() - start,
|
|
325
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
const close = async () => {
|
|
330
|
+
try {
|
|
331
|
+
if (redisClient) {
|
|
332
|
+
console.log('[MEMORY:Redis] Closing Redis connection');
|
|
333
|
+
await redisClient.quit();
|
|
334
|
+
}
|
|
335
|
+
return createSuccess(undefined);
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
return createFailure(createMemoryStorageError('close connection', 'Redis', error));
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
return {
|
|
342
|
+
storeMessages,
|
|
343
|
+
getConversation,
|
|
344
|
+
appendMessages,
|
|
345
|
+
findConversations,
|
|
346
|
+
getRecentMessages,
|
|
347
|
+
deleteConversation,
|
|
348
|
+
clearUserConversations,
|
|
349
|
+
getStats,
|
|
350
|
+
healthCheck,
|
|
351
|
+
close
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=redis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/memory/providers/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Message, TraceId } from '../core/types';
|
|
3
|
+
export type Result<T, E = MemoryErrorUnion> = {
|
|
4
|
+
readonly success: true;
|
|
5
|
+
readonly data: T;
|
|
6
|
+
} | {
|
|
7
|
+
readonly success: false;
|
|
8
|
+
readonly error: E;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Memory management types for the JAF framework
|
|
12
|
+
*/
|
|
13
|
+
export interface ConversationMemory {
|
|
14
|
+
readonly conversationId: string;
|
|
15
|
+
readonly userId?: string;
|
|
16
|
+
readonly messages: readonly Message[];
|
|
17
|
+
readonly metadata?: {
|
|
18
|
+
readonly createdAt: Date;
|
|
19
|
+
readonly updatedAt: Date;
|
|
20
|
+
readonly totalMessages: number;
|
|
21
|
+
readonly lastActivity: Date;
|
|
22
|
+
readonly [key: string]: any;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface MemoryQuery {
|
|
26
|
+
readonly conversationId?: string;
|
|
27
|
+
readonly userId?: string;
|
|
28
|
+
readonly traceId?: TraceId;
|
|
29
|
+
readonly limit?: number;
|
|
30
|
+
readonly offset?: number;
|
|
31
|
+
readonly since?: Date;
|
|
32
|
+
readonly until?: Date;
|
|
33
|
+
}
|
|
34
|
+
export type MemoryProvider = {
|
|
35
|
+
/**
|
|
36
|
+
* Store messages for a conversation
|
|
37
|
+
*/
|
|
38
|
+
readonly storeMessages: (conversationId: string, messages: readonly Message[], metadata?: {
|
|
39
|
+
userId?: string;
|
|
40
|
+
traceId?: TraceId;
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
}) => Promise<Result<void>>;
|
|
43
|
+
/**
|
|
44
|
+
* Retrieve conversation history
|
|
45
|
+
*/
|
|
46
|
+
readonly getConversation: (conversationId: string) => Promise<Result<ConversationMemory | null>>;
|
|
47
|
+
/**
|
|
48
|
+
* Append new messages to existing conversation
|
|
49
|
+
*/
|
|
50
|
+
readonly appendMessages: (conversationId: string, messages: readonly Message[], metadata?: {
|
|
51
|
+
traceId?: TraceId;
|
|
52
|
+
[key: string]: any;
|
|
53
|
+
}) => Promise<Result<void>>;
|
|
54
|
+
/**
|
|
55
|
+
* Search conversations by query
|
|
56
|
+
*/
|
|
57
|
+
readonly findConversations: (query: MemoryQuery) => Promise<Result<ConversationMemory[]>>;
|
|
58
|
+
/**
|
|
59
|
+
* Get recent messages from a conversation
|
|
60
|
+
*/
|
|
61
|
+
readonly getRecentMessages: (conversationId: string, limit?: number) => Promise<Result<readonly Message[]>>;
|
|
62
|
+
/**
|
|
63
|
+
* Delete conversation
|
|
64
|
+
*/
|
|
65
|
+
readonly deleteConversation: (conversationId: string) => Promise<Result<boolean>>;
|
|
66
|
+
/**
|
|
67
|
+
* Clear all conversations for a user
|
|
68
|
+
*/
|
|
69
|
+
readonly clearUserConversations: (userId: string) => Promise<Result<number>>;
|
|
70
|
+
/**
|
|
71
|
+
* Get conversation statistics
|
|
72
|
+
*/
|
|
73
|
+
readonly getStats: (userId?: string) => Promise<Result<{
|
|
74
|
+
totalConversations: number;
|
|
75
|
+
totalMessages: number;
|
|
76
|
+
oldestConversation?: Date;
|
|
77
|
+
newestConversation?: Date;
|
|
78
|
+
}>>;
|
|
79
|
+
/**
|
|
80
|
+
* Health check for the memory provider
|
|
81
|
+
*/
|
|
82
|
+
readonly healthCheck: () => Promise<Result<{
|
|
83
|
+
healthy: boolean;
|
|
84
|
+
latencyMs?: number;
|
|
85
|
+
error?: string;
|
|
86
|
+
}>>;
|
|
87
|
+
/**
|
|
88
|
+
* Close/cleanup the provider
|
|
89
|
+
*/
|
|
90
|
+
readonly close: () => Promise<Result<void>>;
|
|
91
|
+
};
|
|
92
|
+
export interface MemoryConfig {
|
|
93
|
+
readonly provider: MemoryProvider;
|
|
94
|
+
readonly autoStore?: boolean;
|
|
95
|
+
readonly maxMessages?: number;
|
|
96
|
+
readonly ttl?: number;
|
|
97
|
+
readonly compressionThreshold?: number;
|
|
98
|
+
}
|
|
99
|
+
export declare const InMemoryConfigSchema: z.ZodObject<{
|
|
100
|
+
type: z.ZodLiteral<"memory">;
|
|
101
|
+
maxConversations: z.ZodDefault<z.ZodNumber>;
|
|
102
|
+
maxMessagesPerConversation: z.ZodDefault<z.ZodNumber>;
|
|
103
|
+
}, "strip", z.ZodTypeAny, {
|
|
104
|
+
type: "memory";
|
|
105
|
+
maxConversations: number;
|
|
106
|
+
maxMessagesPerConversation: number;
|
|
107
|
+
}, {
|
|
108
|
+
type: "memory";
|
|
109
|
+
maxConversations?: number | undefined;
|
|
110
|
+
maxMessagesPerConversation?: number | undefined;
|
|
111
|
+
}>;
|
|
112
|
+
export declare const RedisConfigSchema: z.ZodObject<{
|
|
113
|
+
type: z.ZodLiteral<"redis">;
|
|
114
|
+
url: z.ZodOptional<z.ZodString>;
|
|
115
|
+
host: z.ZodDefault<z.ZodString>;
|
|
116
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
117
|
+
password: z.ZodOptional<z.ZodString>;
|
|
118
|
+
db: z.ZodDefault<z.ZodNumber>;
|
|
119
|
+
keyPrefix: z.ZodDefault<z.ZodString>;
|
|
120
|
+
ttl: z.ZodOptional<z.ZodNumber>;
|
|
121
|
+
}, "strip", z.ZodTypeAny, {
|
|
122
|
+
type: "redis";
|
|
123
|
+
host: string;
|
|
124
|
+
port: number;
|
|
125
|
+
db: number;
|
|
126
|
+
keyPrefix: string;
|
|
127
|
+
url?: string | undefined;
|
|
128
|
+
password?: string | undefined;
|
|
129
|
+
ttl?: number | undefined;
|
|
130
|
+
}, {
|
|
131
|
+
type: "redis";
|
|
132
|
+
url?: string | undefined;
|
|
133
|
+
host?: string | undefined;
|
|
134
|
+
port?: number | undefined;
|
|
135
|
+
password?: string | undefined;
|
|
136
|
+
db?: number | undefined;
|
|
137
|
+
keyPrefix?: string | undefined;
|
|
138
|
+
ttl?: number | undefined;
|
|
139
|
+
}>;
|
|
140
|
+
export declare const PostgresConfigSchema: z.ZodObject<{
|
|
141
|
+
type: z.ZodLiteral<"postgres">;
|
|
142
|
+
connectionString: z.ZodOptional<z.ZodString>;
|
|
143
|
+
host: z.ZodDefault<z.ZodString>;
|
|
144
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
145
|
+
database: z.ZodDefault<z.ZodString>;
|
|
146
|
+
username: z.ZodDefault<z.ZodString>;
|
|
147
|
+
password: z.ZodOptional<z.ZodString>;
|
|
148
|
+
ssl: z.ZodDefault<z.ZodBoolean>;
|
|
149
|
+
tableName: z.ZodDefault<z.ZodString>;
|
|
150
|
+
maxConnections: z.ZodDefault<z.ZodNumber>;
|
|
151
|
+
}, "strip", z.ZodTypeAny, {
|
|
152
|
+
type: "postgres";
|
|
153
|
+
host: string;
|
|
154
|
+
port: number;
|
|
155
|
+
database: string;
|
|
156
|
+
username: string;
|
|
157
|
+
ssl: boolean;
|
|
158
|
+
tableName: string;
|
|
159
|
+
maxConnections: number;
|
|
160
|
+
password?: string | undefined;
|
|
161
|
+
connectionString?: string | undefined;
|
|
162
|
+
}, {
|
|
163
|
+
type: "postgres";
|
|
164
|
+
host?: string | undefined;
|
|
165
|
+
port?: number | undefined;
|
|
166
|
+
password?: string | undefined;
|
|
167
|
+
connectionString?: string | undefined;
|
|
168
|
+
database?: string | undefined;
|
|
169
|
+
username?: string | undefined;
|
|
170
|
+
ssl?: boolean | undefined;
|
|
171
|
+
tableName?: string | undefined;
|
|
172
|
+
maxConnections?: number | undefined;
|
|
173
|
+
}>;
|
|
174
|
+
export declare const MemoryProviderConfigSchema: z.ZodUnion<[z.ZodObject<{
|
|
175
|
+
type: z.ZodLiteral<"memory">;
|
|
176
|
+
maxConversations: z.ZodDefault<z.ZodNumber>;
|
|
177
|
+
maxMessagesPerConversation: z.ZodDefault<z.ZodNumber>;
|
|
178
|
+
}, "strip", z.ZodTypeAny, {
|
|
179
|
+
type: "memory";
|
|
180
|
+
maxConversations: number;
|
|
181
|
+
maxMessagesPerConversation: number;
|
|
182
|
+
}, {
|
|
183
|
+
type: "memory";
|
|
184
|
+
maxConversations?: number | undefined;
|
|
185
|
+
maxMessagesPerConversation?: number | undefined;
|
|
186
|
+
}>, z.ZodObject<{
|
|
187
|
+
type: z.ZodLiteral<"redis">;
|
|
188
|
+
url: z.ZodOptional<z.ZodString>;
|
|
189
|
+
host: z.ZodDefault<z.ZodString>;
|
|
190
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
191
|
+
password: z.ZodOptional<z.ZodString>;
|
|
192
|
+
db: z.ZodDefault<z.ZodNumber>;
|
|
193
|
+
keyPrefix: z.ZodDefault<z.ZodString>;
|
|
194
|
+
ttl: z.ZodOptional<z.ZodNumber>;
|
|
195
|
+
}, "strip", z.ZodTypeAny, {
|
|
196
|
+
type: "redis";
|
|
197
|
+
host: string;
|
|
198
|
+
port: number;
|
|
199
|
+
db: number;
|
|
200
|
+
keyPrefix: string;
|
|
201
|
+
url?: string | undefined;
|
|
202
|
+
password?: string | undefined;
|
|
203
|
+
ttl?: number | undefined;
|
|
204
|
+
}, {
|
|
205
|
+
type: "redis";
|
|
206
|
+
url?: string | undefined;
|
|
207
|
+
host?: string | undefined;
|
|
208
|
+
port?: number | undefined;
|
|
209
|
+
password?: string | undefined;
|
|
210
|
+
db?: number | undefined;
|
|
211
|
+
keyPrefix?: string | undefined;
|
|
212
|
+
ttl?: number | undefined;
|
|
213
|
+
}>, z.ZodObject<{
|
|
214
|
+
type: z.ZodLiteral<"postgres">;
|
|
215
|
+
connectionString: z.ZodOptional<z.ZodString>;
|
|
216
|
+
host: z.ZodDefault<z.ZodString>;
|
|
217
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
218
|
+
database: z.ZodDefault<z.ZodString>;
|
|
219
|
+
username: z.ZodDefault<z.ZodString>;
|
|
220
|
+
password: z.ZodOptional<z.ZodString>;
|
|
221
|
+
ssl: z.ZodDefault<z.ZodBoolean>;
|
|
222
|
+
tableName: z.ZodDefault<z.ZodString>;
|
|
223
|
+
maxConnections: z.ZodDefault<z.ZodNumber>;
|
|
224
|
+
}, "strip", z.ZodTypeAny, {
|
|
225
|
+
type: "postgres";
|
|
226
|
+
host: string;
|
|
227
|
+
port: number;
|
|
228
|
+
database: string;
|
|
229
|
+
username: string;
|
|
230
|
+
ssl: boolean;
|
|
231
|
+
tableName: string;
|
|
232
|
+
maxConnections: number;
|
|
233
|
+
password?: string | undefined;
|
|
234
|
+
connectionString?: string | undefined;
|
|
235
|
+
}, {
|
|
236
|
+
type: "postgres";
|
|
237
|
+
host?: string | undefined;
|
|
238
|
+
port?: number | undefined;
|
|
239
|
+
password?: string | undefined;
|
|
240
|
+
connectionString?: string | undefined;
|
|
241
|
+
database?: string | undefined;
|
|
242
|
+
username?: string | undefined;
|
|
243
|
+
ssl?: boolean | undefined;
|
|
244
|
+
tableName?: string | undefined;
|
|
245
|
+
maxConnections?: number | undefined;
|
|
246
|
+
}>]>;
|
|
247
|
+
export type InMemoryConfig = z.infer<typeof InMemoryConfigSchema>;
|
|
248
|
+
export type RedisConfig = z.infer<typeof RedisConfigSchema>;
|
|
249
|
+
export type PostgresConfig = z.infer<typeof PostgresConfigSchema>;
|
|
250
|
+
export type MemoryProviderConfig = z.infer<typeof MemoryProviderConfigSchema>;
|
|
251
|
+
export type MemoryError = {
|
|
252
|
+
readonly _tag: 'MemoryError';
|
|
253
|
+
readonly message: string;
|
|
254
|
+
readonly code: string;
|
|
255
|
+
readonly provider: string;
|
|
256
|
+
readonly cause?: Error;
|
|
257
|
+
};
|
|
258
|
+
export type MemoryConnectionError = {
|
|
259
|
+
readonly _tag: 'MemoryConnectionError';
|
|
260
|
+
readonly message: string;
|
|
261
|
+
readonly provider: string;
|
|
262
|
+
readonly cause?: Error;
|
|
263
|
+
};
|
|
264
|
+
export type MemoryNotFoundError = {
|
|
265
|
+
readonly _tag: 'MemoryNotFoundError';
|
|
266
|
+
readonly message: string;
|
|
267
|
+
readonly conversationId: string;
|
|
268
|
+
readonly provider: string;
|
|
269
|
+
};
|
|
270
|
+
export type MemoryStorageError = {
|
|
271
|
+
readonly _tag: 'MemoryStorageError';
|
|
272
|
+
readonly message: string;
|
|
273
|
+
readonly operation: string;
|
|
274
|
+
readonly provider: string;
|
|
275
|
+
readonly cause?: Error;
|
|
276
|
+
};
|
|
277
|
+
export type MemoryErrorUnion = MemoryConnectionError | MemoryNotFoundError | MemoryStorageError;
|
|
278
|
+
export declare const createMemoryError: (message: string, code: string, provider: string, cause?: Error) => MemoryError;
|
|
279
|
+
export declare const createMemoryConnectionError: (provider: string, cause?: Error) => MemoryConnectionError;
|
|
280
|
+
export declare const createMemoryNotFoundError: (conversationId: string, provider: string) => MemoryNotFoundError;
|
|
281
|
+
export declare const createMemoryStorageError: (operation: string, provider: string, cause?: Error) => MemoryStorageError;
|
|
282
|
+
export declare const isMemoryError: (error: any) => error is MemoryErrorUnion;
|
|
283
|
+
export declare const isMemoryConnectionError: (error: any) => error is MemoryConnectionError;
|
|
284
|
+
export declare const isMemoryNotFoundError: (error: any) => error is MemoryNotFoundError;
|
|
285
|
+
export declare const isMemoryStorageError: (error: any) => error is MemoryStorageError;
|
|
286
|
+
export declare const createSuccess: <T>(data: T) => Result<T>;
|
|
287
|
+
export declare const createFailure: <E extends MemoryErrorUnion>(error: E) => Result<never, E>;
|
|
288
|
+
export declare const isSuccess: <T, E>(result: Result<T, E>) => result is {
|
|
289
|
+
success: true;
|
|
290
|
+
data: T;
|
|
291
|
+
};
|
|
292
|
+
export declare const isFailure: <T, E>(result: Result<T, E>) => result is {
|
|
293
|
+
success: false;
|
|
294
|
+
error: E;
|
|
295
|
+
};
|
|
296
|
+
//# sourceMappingURL=types.d.ts.map
|