@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.
Files changed (279) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +596 -0
  3. package/dist/a2a/agent-card.d.ts +28 -0
  4. package/dist/a2a/agent-card.d.ts.map +1 -0
  5. package/dist/a2a/agent-card.js +250 -0
  6. package/dist/a2a/agent-card.js.map +1 -0
  7. package/dist/a2a/agent.d.ts +38 -0
  8. package/dist/a2a/agent.d.ts.map +1 -0
  9. package/dist/a2a/agent.js +223 -0
  10. package/dist/a2a/agent.js.map +1 -0
  11. package/dist/a2a/client.d.ts +35 -0
  12. package/dist/a2a/client.d.ts.map +1 -0
  13. package/dist/a2a/client.js +337 -0
  14. package/dist/a2a/client.js.map +1 -0
  15. package/dist/a2a/examples/client-example.d.ts +104 -0
  16. package/dist/a2a/examples/client-example.d.ts.map +1 -0
  17. package/dist/a2a/examples/client-example.js +232 -0
  18. package/dist/a2a/examples/client-example.js.map +1 -0
  19. package/dist/a2a/examples/server-example.d.ts +9 -0
  20. package/dist/a2a/examples/server-example.d.ts.map +1 -0
  21. package/dist/a2a/examples/server-example.js +209 -0
  22. package/dist/a2a/examples/server-example.js.map +1 -0
  23. package/dist/a2a/examples/weather-agent.d.ts +8 -0
  24. package/dist/a2a/examples/weather-agent.d.ts.map +1 -0
  25. package/dist/a2a/examples/weather-agent.js +232 -0
  26. package/dist/a2a/examples/weather-agent.js.map +1 -0
  27. package/dist/a2a/executor.d.ts +43 -0
  28. package/dist/a2a/executor.d.ts.map +1 -0
  29. package/dist/a2a/executor.js +507 -0
  30. package/dist/a2a/executor.js.map +1 -0
  31. package/dist/a2a/index.d.ts +378 -0
  32. package/dist/a2a/index.d.ts.map +1 -0
  33. package/dist/a2a/index.js +72 -0
  34. package/dist/a2a/index.js.map +1 -0
  35. package/dist/a2a/memory/cleanup.d.ts +58 -0
  36. package/dist/a2a/memory/cleanup.d.ts.map +1 -0
  37. package/dist/a2a/memory/cleanup.js +281 -0
  38. package/dist/a2a/memory/cleanup.js.map +1 -0
  39. package/dist/a2a/memory/factory.d.ts +38 -0
  40. package/dist/a2a/memory/factory.d.ts.map +1 -0
  41. package/dist/a2a/memory/factory.js +369 -0
  42. package/dist/a2a/memory/factory.js.map +1 -0
  43. package/dist/a2a/memory/index.d.ts +13 -0
  44. package/dist/a2a/memory/index.d.ts.map +1 -0
  45. package/dist/a2a/memory/index.js +16 -0
  46. package/dist/a2a/memory/index.js.map +1 -0
  47. package/dist/a2a/memory/providers/in-memory.d.ts +10 -0
  48. package/dist/a2a/memory/providers/in-memory.d.ts.map +1 -0
  49. package/dist/a2a/memory/providers/in-memory.js +539 -0
  50. package/dist/a2a/memory/providers/in-memory.js.map +1 -0
  51. package/dist/a2a/memory/providers/postgres.d.ts +10 -0
  52. package/dist/a2a/memory/providers/postgres.d.ts.map +1 -0
  53. package/dist/a2a/memory/providers/postgres.js +404 -0
  54. package/dist/a2a/memory/providers/postgres.js.map +1 -0
  55. package/dist/a2a/memory/providers/redis.d.ts +10 -0
  56. package/dist/a2a/memory/providers/redis.d.ts.map +1 -0
  57. package/dist/a2a/memory/providers/redis.js +435 -0
  58. package/dist/a2a/memory/providers/redis.js.map +1 -0
  59. package/dist/a2a/memory/serialization.d.ts +53 -0
  60. package/dist/a2a/memory/serialization.d.ts.map +1 -0
  61. package/dist/a2a/memory/serialization.js +233 -0
  62. package/dist/a2a/memory/serialization.js.map +1 -0
  63. package/dist/a2a/memory/types.d.ts +395 -0
  64. package/dist/a2a/memory/types.d.ts.map +1 -0
  65. package/dist/a2a/memory/types.js +85 -0
  66. package/dist/a2a/memory/types.js.map +1 -0
  67. package/dist/a2a/protocol.d.ts +38 -0
  68. package/dist/a2a/protocol.d.ts.map +1 -0
  69. package/dist/a2a/protocol.js +211 -0
  70. package/dist/a2a/protocol.js.map +1 -0
  71. package/dist/a2a/server.d.ts +343 -0
  72. package/dist/a2a/server.d.ts.map +1 -0
  73. package/dist/a2a/server.js +362 -0
  74. package/dist/a2a/server.js.map +1 -0
  75. package/dist/a2a/types.d.ts +730 -0
  76. package/dist/a2a/types.d.ts.map +1 -0
  77. package/dist/a2a/types.js +73 -0
  78. package/dist/a2a/types.js.map +1 -0
  79. package/dist/adk/agents/index.d.ts +48 -0
  80. package/dist/adk/agents/index.d.ts.map +1 -0
  81. package/dist/adk/agents/index.js +277 -0
  82. package/dist/adk/agents/index.js.map +1 -0
  83. package/dist/adk/artifacts/index.d.ts +62 -0
  84. package/dist/adk/artifacts/index.d.ts.map +1 -0
  85. package/dist/adk/artifacts/index.js +394 -0
  86. package/dist/adk/artifacts/index.js.map +1 -0
  87. package/dist/adk/config/llm-config.d.ts +75 -0
  88. package/dist/adk/config/llm-config.d.ts.map +1 -0
  89. package/dist/adk/config/llm-config.js +422 -0
  90. package/dist/adk/config/llm-config.js.map +1 -0
  91. package/dist/adk/content/index.d.ts +58 -0
  92. package/dist/adk/content/index.d.ts.map +1 -0
  93. package/dist/adk/content/index.js +220 -0
  94. package/dist/adk/content/index.js.map +1 -0
  95. package/dist/adk/examples/advanced-features.d.ts +22 -0
  96. package/dist/adk/examples/advanced-features.d.ts.map +1 -0
  97. package/dist/adk/examples/advanced-features.js +380 -0
  98. package/dist/adk/examples/advanced-features.js.map +1 -0
  99. package/dist/adk/examples/basic-agent.d.ts +28 -0
  100. package/dist/adk/examples/basic-agent.d.ts.map +1 -0
  101. package/dist/adk/examples/basic-agent.js +207 -0
  102. package/dist/adk/examples/basic-agent.js.map +1 -0
  103. package/dist/adk/examples/multi-agent.d.ts +24 -0
  104. package/dist/adk/examples/multi-agent.d.ts.map +1 -0
  105. package/dist/adk/examples/multi-agent.js +321 -0
  106. package/dist/adk/examples/multi-agent.js.map +1 -0
  107. package/dist/adk/examples/streaming-example.d.ts +9 -0
  108. package/dist/adk/examples/streaming-example.d.ts.map +1 -0
  109. package/dist/adk/examples/streaming-example.js +193 -0
  110. package/dist/adk/examples/streaming-example.js.map +1 -0
  111. package/dist/adk/index.d.ts +65 -0
  112. package/dist/adk/index.d.ts.map +1 -0
  113. package/dist/adk/index.js +251 -0
  114. package/dist/adk/index.js.map +1 -0
  115. package/dist/adk/models.d.ts +338 -0
  116. package/dist/adk/models.d.ts.map +1 -0
  117. package/dist/adk/models.js +466 -0
  118. package/dist/adk/models.js.map +1 -0
  119. package/dist/adk/providers/error-handler.d.ts +100 -0
  120. package/dist/adk/providers/error-handler.d.ts.map +1 -0
  121. package/dist/adk/providers/error-handler.js +289 -0
  122. package/dist/adk/providers/error-handler.js.map +1 -0
  123. package/dist/adk/providers/llm-service.d.ts +41 -0
  124. package/dist/adk/providers/llm-service.d.ts.map +1 -0
  125. package/dist/adk/providers/llm-service.js +520 -0
  126. package/dist/adk/providers/llm-service.js.map +1 -0
  127. package/dist/adk/providers/type-converters.d.ts +34 -0
  128. package/dist/adk/providers/type-converters.d.ts.map +1 -0
  129. package/dist/adk/providers/type-converters.js +436 -0
  130. package/dist/adk/providers/type-converters.js.map +1 -0
  131. package/dist/adk/runners/index.d.ts +33 -0
  132. package/dist/adk/runners/index.d.ts.map +1 -0
  133. package/dist/adk/runners/index.js +466 -0
  134. package/dist/adk/runners/index.js.map +1 -0
  135. package/dist/adk/schemas/index.d.ts +85 -0
  136. package/dist/adk/schemas/index.d.ts.map +1 -0
  137. package/dist/adk/schemas/index.js +363 -0
  138. package/dist/adk/schemas/index.js.map +1 -0
  139. package/dist/adk/sessions/examples/session-provider-usage.d.ts +10 -0
  140. package/dist/adk/sessions/examples/session-provider-usage.d.ts.map +1 -0
  141. package/dist/adk/sessions/examples/session-provider-usage.js +145 -0
  142. package/dist/adk/sessions/examples/session-provider-usage.js.map +1 -0
  143. package/dist/adk/sessions/index.d.ts +53 -0
  144. package/dist/adk/sessions/index.d.ts.map +1 -0
  145. package/dist/adk/sessions/index.js +451 -0
  146. package/dist/adk/sessions/index.js.map +1 -0
  147. package/dist/adk/sessions/postgres-provider.d.ts +22 -0
  148. package/dist/adk/sessions/postgres-provider.d.ts.map +1 -0
  149. package/dist/adk/sessions/postgres-provider.js +293 -0
  150. package/dist/adk/sessions/postgres-provider.js.map +1 -0
  151. package/dist/adk/sessions/redis-provider.d.ts +19 -0
  152. package/dist/adk/sessions/redis-provider.d.ts.map +1 -0
  153. package/dist/adk/sessions/redis-provider.js +237 -0
  154. package/dist/adk/sessions/redis-provider.js.map +1 -0
  155. package/dist/adk/streaming/index.d.ts +76 -0
  156. package/dist/adk/streaming/index.d.ts.map +1 -0
  157. package/dist/adk/streaming/index.js +419 -0
  158. package/dist/adk/streaming/index.js.map +1 -0
  159. package/dist/adk/tools/index.d.ts +27 -0
  160. package/dist/adk/tools/index.d.ts.map +1 -0
  161. package/dist/adk/tools/index.js +506 -0
  162. package/dist/adk/tools/index.js.map +1 -0
  163. package/dist/adk/types.d.ts +351 -0
  164. package/dist/adk/types.d.ts.map +1 -0
  165. package/dist/adk/types.js +107 -0
  166. package/dist/adk/types.js.map +1 -0
  167. package/dist/core/engine.d.ts +3 -0
  168. package/dist/core/engine.d.ts.map +1 -0
  169. package/dist/core/engine.js +438 -0
  170. package/dist/core/engine.js.map +1 -0
  171. package/dist/core/errors.d.ts +8 -0
  172. package/dist/core/errors.d.ts.map +1 -0
  173. package/dist/core/errors.js +84 -0
  174. package/dist/core/errors.js.map +1 -0
  175. package/dist/core/tool-results.d.ts +57 -0
  176. package/dist/core/tool-results.d.ts.map +1 -0
  177. package/dist/core/tool-results.js +133 -0
  178. package/dist/core/tool-results.js.map +1 -0
  179. package/dist/core/tracing.d.ts +32 -0
  180. package/dist/core/tracing.d.ts.map +1 -0
  181. package/dist/core/tracing.js +132 -0
  182. package/dist/core/tracing.js.map +1 -0
  183. package/dist/core/types.d.ts +165 -0
  184. package/dist/core/types.d.ts.map +1 -0
  185. package/dist/core/types.js +3 -0
  186. package/dist/core/types.js.map +1 -0
  187. package/dist/demo/agents.d.ts +23 -0
  188. package/dist/demo/agents.d.ts.map +1 -0
  189. package/dist/demo/agents.js +69 -0
  190. package/dist/demo/agents.js.map +1 -0
  191. package/dist/demo/index.d.ts +2 -0
  192. package/dist/demo/index.d.ts.map +1 -0
  193. package/dist/demo/index.js +250 -0
  194. package/dist/demo/index.js.map +1 -0
  195. package/dist/demo/mock-provider.d.ts +22 -0
  196. package/dist/demo/mock-provider.d.ts.map +1 -0
  197. package/dist/demo/mock-provider.js +138 -0
  198. package/dist/demo/mock-provider.js.map +1 -0
  199. package/dist/demo/tools.d.ts +14 -0
  200. package/dist/demo/tools.d.ts.map +1 -0
  201. package/dist/demo/tools.js +115 -0
  202. package/dist/demo/tools.js.map +1 -0
  203. package/dist/index.d.ts +20 -0
  204. package/dist/index.d.ts.map +1 -0
  205. package/dist/index.js +30 -0
  206. package/dist/index.js.map +1 -0
  207. package/dist/memory/factory.d.ts +22 -0
  208. package/dist/memory/factory.d.ts.map +1 -0
  209. package/dist/memory/factory.js +88 -0
  210. package/dist/memory/factory.js.map +1 -0
  211. package/dist/memory/providers/in-memory.d.ts +7 -0
  212. package/dist/memory/providers/in-memory.d.ts.map +1 -0
  213. package/dist/memory/providers/in-memory.js +287 -0
  214. package/dist/memory/providers/in-memory.js.map +1 -0
  215. package/dist/memory/providers/postgres.d.ts +15 -0
  216. package/dist/memory/providers/postgres.d.ts.map +1 -0
  217. package/dist/memory/providers/postgres.js +495 -0
  218. package/dist/memory/providers/postgres.js.map +1 -0
  219. package/dist/memory/providers/redis.d.ts +18 -0
  220. package/dist/memory/providers/redis.d.ts.map +1 -0
  221. package/dist/memory/providers/redis.js +354 -0
  222. package/dist/memory/providers/redis.js.map +1 -0
  223. package/dist/memory/types.d.ts +296 -0
  224. package/dist/memory/types.d.ts.map +1 -0
  225. package/dist/memory/types.js +93 -0
  226. package/dist/memory/types.js.map +1 -0
  227. package/dist/policies/handoff.d.ts +16 -0
  228. package/dist/policies/handoff.d.ts.map +1 -0
  229. package/dist/policies/handoff.js +20 -0
  230. package/dist/policies/handoff.js.map +1 -0
  231. package/dist/policies/validation.d.ts +14 -0
  232. package/dist/policies/validation.d.ts.map +1 -0
  233. package/dist/policies/validation.js +92 -0
  234. package/dist/policies/validation.js.map +1 -0
  235. package/dist/providers/mcp.d.ts +17 -0
  236. package/dist/providers/mcp.d.ts.map +1 -0
  237. package/dist/providers/mcp.js +111 -0
  238. package/dist/providers/mcp.js.map +1 -0
  239. package/dist/providers/model.d.ts +3 -0
  240. package/dist/providers/model.d.ts.map +1 -0
  241. package/dist/providers/model.js +113 -0
  242. package/dist/providers/model.js.map +1 -0
  243. package/dist/server/index.d.ts +35 -0
  244. package/dist/server/index.d.ts.map +1 -0
  245. package/dist/server/index.js +66 -0
  246. package/dist/server/index.js.map +1 -0
  247. package/dist/server/server.d.ts +12 -0
  248. package/dist/server/server.d.ts.map +1 -0
  249. package/dist/server/server.js +394 -0
  250. package/dist/server/server.js.map +1 -0
  251. package/dist/server/types.d.ts +456 -0
  252. package/dist/server/types.d.ts.map +1 -0
  253. package/dist/server/types.js +75 -0
  254. package/dist/server/types.js.map +1 -0
  255. package/dist/test-utils/db-setup.d.ts +34 -0
  256. package/dist/test-utils/db-setup.d.ts.map +1 -0
  257. package/dist/test-utils/db-setup.js +149 -0
  258. package/dist/test-utils/db-setup.js.map +1 -0
  259. package/dist/utils/logger.d.ts +63 -0
  260. package/dist/utils/logger.d.ts.map +1 -0
  261. package/dist/utils/logger.js +199 -0
  262. package/dist/utils/logger.js.map +1 -0
  263. package/dist/utils/safe-math.d.ts +31 -0
  264. package/dist/utils/safe-math.d.ts.map +1 -0
  265. package/dist/utils/safe-math.js +86 -0
  266. package/dist/utils/safe-math.js.map +1 -0
  267. package/dist/visualization/example.d.ts +9 -0
  268. package/dist/visualization/example.d.ts.map +1 -0
  269. package/dist/visualization/example.js +236 -0
  270. package/dist/visualization/example.js.map +1 -0
  271. package/dist/visualization/graphviz.d.ts +42 -0
  272. package/dist/visualization/graphviz.d.ts.map +1 -0
  273. package/dist/visualization/graphviz.js +403 -0
  274. package/dist/visualization/graphviz.js.map +1 -0
  275. package/dist/visualization/index.d.ts +10 -0
  276. package/dist/visualization/index.d.ts.map +1 -0
  277. package/dist/visualization/index.js +12 -0
  278. package/dist/visualization/index.js.map +1 -0
  279. 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