@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,495 @@
1
+ import { createSuccess, createFailure, createMemoryConnectionError, createMemoryNotFoundError, createMemoryStorageError } from '../types';
2
+ /**
3
+ * PostgreSQL memory provider - fully persistent with advanced querying
4
+ * Best for production environments requiring complex queries and full persistence
5
+ */
6
+ export async function createPostgresProvider(config, postgresClient) {
7
+ const fullConfig = {
8
+ ...config,
9
+ type: 'postgres',
10
+ host: config.host ?? 'localhost',
11
+ port: config.port ?? 5432,
12
+ database: config.database ?? 'jaf_memory',
13
+ username: config.username ?? 'postgres',
14
+ ssl: config.ssl ?? false,
15
+ tableName: config.tableName ?? 'conversations',
16
+ maxConnections: config.maxConnections ?? 10
17
+ };
18
+ try {
19
+ // Test connection and create table if needed
20
+ await initializeSchema(postgresClient, fullConfig);
21
+ console.log(`[MEMORY:Postgres] Connected to PostgreSQL at ${fullConfig.host}:${fullConfig.port}/${fullConfig.database}`);
22
+ }
23
+ catch (error) {
24
+ throw createMemoryConnectionError('PostgreSQL', error);
25
+ }
26
+ const ensureConnected = () => {
27
+ if (!postgresClient) {
28
+ throw createMemoryConnectionError('PostgreSQL', new Error('PostgreSQL client not initialized'));
29
+ }
30
+ return postgresClient;
31
+ };
32
+ const storeMessages = async (conversationId, messages, metadata) => {
33
+ const client = ensureConnected();
34
+ try {
35
+ const now = new Date();
36
+ const conversationMetadata = {
37
+ totalMessages: messages.length,
38
+ traceId: metadata?.traceId,
39
+ ...metadata
40
+ };
41
+ const sql = `
42
+ INSERT INTO ${fullConfig.tableName}
43
+ (conversation_id, user_id, messages, metadata, created_at, updated_at, last_activity)
44
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
45
+ ON CONFLICT (conversation_id)
46
+ DO UPDATE SET
47
+ messages = $3,
48
+ metadata = $4,
49
+ updated_at = $6,
50
+ last_activity = $7
51
+ `;
52
+ await client.query(sql, [
53
+ conversationId,
54
+ metadata?.userId || null,
55
+ JSON.stringify(messages),
56
+ JSON.stringify(conversationMetadata),
57
+ now,
58
+ now,
59
+ now
60
+ ]);
61
+ console.log(`[MEMORY:Postgres] Stored ${messages.length} messages for conversation ${conversationId}`);
62
+ return createSuccess(undefined);
63
+ }
64
+ catch (error) {
65
+ return createFailure(createMemoryStorageError('store messages', 'PostgreSQL', error));
66
+ }
67
+ };
68
+ const getConversation = async (conversationId) => {
69
+ const client = ensureConnected();
70
+ try {
71
+ console.log(`[MEMORY:Postgres] Getting conversation ${conversationId}`);
72
+ const sql = `
73
+ SELECT conversation_id, user_id, messages, metadata, created_at, updated_at, last_activity
74
+ FROM ${fullConfig.tableName}
75
+ WHERE conversation_id = $1
76
+ `;
77
+ console.log(`[MEMORY:Postgres] Executing SQL: ${sql}`);
78
+ console.log(`[MEMORY:Postgres] Parameters:`, [conversationId]);
79
+ const result = await client.query(sql, [conversationId]);
80
+ console.log(`[MEMORY:Postgres] Query result: ${result.rows.length} rows found`);
81
+ if (result.rows.length === 0) {
82
+ console.log(`[MEMORY:Postgres] No conversation found for ${conversationId}`);
83
+ return createSuccess(null);
84
+ }
85
+ const row = result.rows[0];
86
+ console.log(`[MEMORY:Postgres] Raw row data:`, {
87
+ conversation_id: row.conversation_id,
88
+ user_id: row.user_id,
89
+ messages_length: row.messages?.length || 0,
90
+ metadata_length: row.metadata?.length || 0,
91
+ created_at: row.created_at,
92
+ updated_at: row.updated_at,
93
+ last_activity: row.last_activity
94
+ });
95
+ // Update last activity
96
+ const updateSQL = `
97
+ UPDATE ${fullConfig.tableName}
98
+ SET last_activity = NOW()
99
+ WHERE conversation_id = $1
100
+ `;
101
+ await client.query(updateSQL, [conversationId]);
102
+ console.log(`[MEMORY:Postgres] Parsing messages JSON:`, row.messages);
103
+ console.log(`[MEMORY:Postgres] Messages type:`, typeof row.messages);
104
+ // Handle both string and object messages (PostgreSQL JSONB can return either)
105
+ let parsedMessages;
106
+ if (typeof row.messages === 'string') {
107
+ parsedMessages = JSON.parse(row.messages);
108
+ }
109
+ else if (Array.isArray(row.messages)) {
110
+ parsedMessages = row.messages;
111
+ }
112
+ else {
113
+ throw new Error('Invalid messages format: expected string or array');
114
+ }
115
+ console.log(`[MEMORY:Postgres] Parsed ${parsedMessages.length} messages`);
116
+ console.log(`[MEMORY:Postgres] Parsing metadata JSON:`, row.metadata);
117
+ console.log(`[MEMORY:Postgres] Metadata type:`, typeof row.metadata);
118
+ // Handle both string and object metadata (PostgreSQL JSONB can return either)
119
+ let parsedMetadata;
120
+ if (typeof row.metadata === 'string') {
121
+ parsedMetadata = JSON.parse(row.metadata || '{}');
122
+ }
123
+ else if (typeof row.metadata === 'object' && row.metadata !== null) {
124
+ parsedMetadata = row.metadata;
125
+ }
126
+ else {
127
+ parsedMetadata = {};
128
+ }
129
+ console.log(`[MEMORY:Postgres] Parsed metadata:`, parsedMetadata);
130
+ const conversation = {
131
+ conversationId: row.conversation_id,
132
+ userId: row.user_id,
133
+ messages: parsedMessages,
134
+ metadata: {
135
+ ...parsedMetadata,
136
+ createdAt: new Date(row.created_at),
137
+ updatedAt: new Date(row.updated_at),
138
+ lastActivity: new Date(), // Use current time since we just updated it
139
+ totalMessages: parsedMessages.length
140
+ }
141
+ };
142
+ console.log(`[MEMORY:Postgres] Successfully created conversation object with ${conversation.messages.length} messages`);
143
+ console.log(`[MEMORY:Postgres] Retrieved conversation ${conversationId} with ${conversation.messages.length} messages`);
144
+ return createSuccess(conversation);
145
+ }
146
+ catch (error) {
147
+ console.error(`[MEMORY:Postgres] Error in getConversation:`, error);
148
+ console.error(`[MEMORY:Postgres] Error stack:`, error.stack);
149
+ return createFailure(createMemoryStorageError('get conversation', 'PostgreSQL', error));
150
+ }
151
+ };
152
+ const appendMessages = async (conversationId, messages, metadata) => {
153
+ const client = ensureConnected();
154
+ try {
155
+ // Get existing conversation
156
+ const existingResult = await getConversation(conversationId);
157
+ if (!existingResult.success) {
158
+ return existingResult;
159
+ }
160
+ if (!existingResult.data) {
161
+ return createFailure(createMemoryNotFoundError(conversationId, 'PostgreSQL'));
162
+ }
163
+ const existing = existingResult.data;
164
+ const updatedMessages = [...existing.messages, ...messages];
165
+ const now = new Date();
166
+ const updatedMetadata = {
167
+ ...existing.metadata,
168
+ totalMessages: updatedMessages.length,
169
+ traceId: metadata?.traceId || existing.metadata?.traceId,
170
+ ...metadata
171
+ };
172
+ const sql = `
173
+ UPDATE ${fullConfig.tableName}
174
+ SET messages = $1, metadata = $2, updated_at = $3, last_activity = $3
175
+ WHERE conversation_id = $4
176
+ `;
177
+ await client.query(sql, [
178
+ JSON.stringify(updatedMessages),
179
+ JSON.stringify(updatedMetadata),
180
+ now,
181
+ conversationId
182
+ ]);
183
+ console.log(`[MEMORY:Postgres] Appended ${messages.length} messages to conversation ${conversationId} (total: ${updatedMessages.length})`);
184
+ return createSuccess(undefined);
185
+ }
186
+ catch (error) {
187
+ return createFailure(createMemoryStorageError('append messages', 'PostgreSQL', error));
188
+ }
189
+ };
190
+ const findConversations = async (query) => {
191
+ const client = ensureConnected();
192
+ try {
193
+ let sql = `
194
+ SELECT conversation_id, user_id, messages, metadata, created_at, updated_at, last_activity
195
+ FROM ${fullConfig.tableName}
196
+ WHERE 1=1
197
+ `;
198
+ const params = [];
199
+ let paramIndex = 1;
200
+ if (query.conversationId) {
201
+ sql += ` AND conversation_id = $${paramIndex}`;
202
+ params.push(query.conversationId);
203
+ paramIndex++;
204
+ }
205
+ if (query.userId) {
206
+ sql += ` AND user_id = $${paramIndex}`;
207
+ params.push(query.userId);
208
+ paramIndex++;
209
+ }
210
+ if (query.traceId) {
211
+ sql += ` AND metadata->>'traceId' = $${paramIndex}`;
212
+ params.push(query.traceId);
213
+ paramIndex++;
214
+ }
215
+ if (query.since) {
216
+ sql += ` AND created_at >= $${paramIndex}`;
217
+ params.push(query.since);
218
+ paramIndex++;
219
+ }
220
+ if (query.until) {
221
+ sql += ` AND created_at <= $${paramIndex}`;
222
+ params.push(query.until);
223
+ paramIndex++;
224
+ }
225
+ // Sort by last activity (most recent first)
226
+ sql += ` ORDER BY last_activity DESC`;
227
+ // Add pagination
228
+ if (query.limit) {
229
+ sql += ` LIMIT $${paramIndex}`;
230
+ params.push(query.limit);
231
+ paramIndex++;
232
+ }
233
+ if (query.offset) {
234
+ sql += ` OFFSET $${paramIndex}`;
235
+ params.push(query.offset);
236
+ paramIndex++;
237
+ }
238
+ const result = await client.query(sql, params);
239
+ const conversations = result.rows.map(row => {
240
+ // Handle both string and object messages (PostgreSQL JSONB can return either)
241
+ let parsedMessages;
242
+ if (typeof row.messages === 'string') {
243
+ parsedMessages = JSON.parse(row.messages);
244
+ }
245
+ else if (Array.isArray(row.messages)) {
246
+ parsedMessages = row.messages;
247
+ }
248
+ else {
249
+ throw new Error('Invalid messages format: expected string or array');
250
+ }
251
+ // Handle both string and object metadata (PostgreSQL JSONB can return either)
252
+ let parsedMetadata;
253
+ if (typeof row.metadata === 'string') {
254
+ parsedMetadata = JSON.parse(row.metadata || '{}');
255
+ }
256
+ else if (typeof row.metadata === 'object' && row.metadata !== null) {
257
+ parsedMetadata = row.metadata;
258
+ }
259
+ else {
260
+ parsedMetadata = {};
261
+ }
262
+ return {
263
+ conversationId: row.conversation_id,
264
+ userId: row.user_id,
265
+ messages: parsedMessages,
266
+ metadata: {
267
+ ...parsedMetadata,
268
+ createdAt: new Date(row.created_at),
269
+ updatedAt: new Date(row.updated_at),
270
+ lastActivity: new Date(row.last_activity),
271
+ totalMessages: parsedMessages.length
272
+ }
273
+ };
274
+ });
275
+ console.log(`[MEMORY:Postgres] Found ${conversations.length} conversations matching query`);
276
+ return createSuccess(conversations);
277
+ }
278
+ catch (error) {
279
+ return createFailure(createMemoryStorageError('find conversations', 'PostgreSQL', error));
280
+ }
281
+ };
282
+ const getRecentMessages = async (conversationId, limit = 50) => {
283
+ const conversationResult = await getConversation(conversationId);
284
+ if (!conversationResult.success) {
285
+ return conversationResult;
286
+ }
287
+ if (!conversationResult.data) {
288
+ return createSuccess([]);
289
+ }
290
+ const messages = conversationResult.data.messages.slice(-limit);
291
+ console.log(`[MEMORY:Postgres] Retrieved ${messages.length} recent messages for conversation ${conversationId}`);
292
+ return createSuccess(messages);
293
+ };
294
+ const deleteConversation = async (conversationId) => {
295
+ const client = ensureConnected();
296
+ try {
297
+ const sql = `DELETE FROM ${fullConfig.tableName} WHERE conversation_id = $1`;
298
+ const result = await client.query(sql, [conversationId]);
299
+ const deleted = result.rowCount > 0;
300
+ console.log(`[MEMORY:Postgres] ${deleted ? 'Deleted' : 'Attempted to delete non-existent'} conversation ${conversationId}`);
301
+ return createSuccess(deleted);
302
+ }
303
+ catch (error) {
304
+ return createFailure(createMemoryStorageError('delete conversation', 'PostgreSQL', error));
305
+ }
306
+ };
307
+ const clearUserConversations = async (userId) => {
308
+ const client = ensureConnected();
309
+ try {
310
+ const sql = `DELETE FROM ${fullConfig.tableName} WHERE user_id = $1`;
311
+ const result = await client.query(sql, [userId]);
312
+ const deletedCount = result.rowCount;
313
+ console.log(`[MEMORY:Postgres] Cleared ${deletedCount} conversations for user ${userId}`);
314
+ return createSuccess(deletedCount);
315
+ }
316
+ catch (error) {
317
+ return createFailure(createMemoryStorageError('clear user conversations', 'PostgreSQL', error));
318
+ }
319
+ };
320
+ const getStats = async (userId) => {
321
+ const client = ensureConnected();
322
+ try {
323
+ let sql = `
324
+ SELECT
325
+ COUNT(*) as total_conversations,
326
+ MIN(created_at) as oldest_conversation,
327
+ MAX(created_at) as newest_conversation,
328
+ SUM((metadata->>'totalMessages')::int) as total_messages
329
+ FROM ${fullConfig.tableName}
330
+ `;
331
+ const params = [];
332
+ if (userId) {
333
+ sql += ' WHERE user_id = $1';
334
+ params.push(userId);
335
+ }
336
+ const result = await client.query(sql, params);
337
+ const row = result.rows[0];
338
+ return createSuccess({
339
+ totalConversations: parseInt(row.total_conversations) || 0,
340
+ totalMessages: parseInt(row.total_messages) || 0,
341
+ oldestConversation: row.oldest_conversation ? new Date(row.oldest_conversation) : undefined,
342
+ newestConversation: row.newest_conversation ? new Date(row.newest_conversation) : undefined
343
+ });
344
+ }
345
+ catch (error) {
346
+ return createFailure(createMemoryStorageError('get stats', 'PostgreSQL', error));
347
+ }
348
+ };
349
+ const healthCheck = async () => {
350
+ const start = Date.now();
351
+ try {
352
+ const client = ensureConnected();
353
+ // Test basic connectivity
354
+ await client.query('SELECT 1');
355
+ // Test table operations
356
+ const testId = `health-check-${Date.now()}`;
357
+ const storeResult = await storeMessages(testId, [{ role: 'user', content: 'health check' }]);
358
+ if (!storeResult.success) {
359
+ return createSuccess({
360
+ healthy: false,
361
+ latencyMs: Date.now() - start,
362
+ error: storeResult.error.message
363
+ });
364
+ }
365
+ const getResult = await getConversation(testId);
366
+ if (!getResult.success) {
367
+ return createSuccess({
368
+ healthy: false,
369
+ latencyMs: Date.now() - start,
370
+ error: getResult.error.message
371
+ });
372
+ }
373
+ const deleteResult = await deleteConversation(testId);
374
+ if (!deleteResult.success) {
375
+ return createSuccess({
376
+ healthy: false,
377
+ latencyMs: Date.now() - start,
378
+ error: deleteResult.error.message
379
+ });
380
+ }
381
+ const latencyMs = Date.now() - start;
382
+ return createSuccess({ healthy: true, latencyMs });
383
+ }
384
+ catch (error) {
385
+ return createSuccess({
386
+ healthy: false,
387
+ latencyMs: Date.now() - start,
388
+ error: error instanceof Error ? error.message : 'Unknown error'
389
+ });
390
+ }
391
+ };
392
+ const close = async () => {
393
+ try {
394
+ if (postgresClient) {
395
+ console.log('[MEMORY:Postgres] Closing PostgreSQL connection');
396
+ await postgresClient.end();
397
+ }
398
+ return createSuccess(undefined);
399
+ }
400
+ catch (error) {
401
+ return createFailure(createMemoryStorageError('close connection', 'PostgreSQL', error));
402
+ }
403
+ };
404
+ const cleanupOldConversations = async (olderThanDays) => {
405
+ const client = ensureConnected();
406
+ try {
407
+ const sql = `
408
+ DELETE FROM ${fullConfig.tableName}
409
+ WHERE last_activity < NOW() - INTERVAL '${olderThanDays} days'
410
+ `;
411
+ const result = await client.query(sql);
412
+ const deletedCount = result.rowCount;
413
+ console.log(`[MEMORY:Postgres] Cleaned up ${deletedCount} conversations older than ${olderThanDays} days`);
414
+ return createSuccess(deletedCount);
415
+ }
416
+ catch (error) {
417
+ return createFailure(createMemoryStorageError('cleanup old conversations', 'PostgreSQL', error));
418
+ }
419
+ };
420
+ const getAnalytics = async (userId) => {
421
+ const client = ensureConnected();
422
+ try {
423
+ let whereClause = '';
424
+ const params = [];
425
+ if (userId) {
426
+ whereClause = 'WHERE user_id = $1';
427
+ params.push(userId);
428
+ }
429
+ const sql = `
430
+ SELECT
431
+ AVG((metadata->>'totalMessages')::int) as avg_messages,
432
+ COUNT(CASE WHEN created_at >= NOW() - INTERVAL '7 days' THEN 1 END) as last_week,
433
+ COUNT(CASE WHEN created_at >= NOW() - INTERVAL '30 days' THEN 1 END) as last_month,
434
+ EXTRACT(hour FROM last_activity) as activity_hour,
435
+ TO_CHAR(last_activity, 'Day') as activity_day
436
+ FROM ${fullConfig.tableName}
437
+ ${whereClause}
438
+ GROUP BY EXTRACT(hour FROM last_activity), TO_CHAR(last_activity, 'Day')
439
+ ORDER BY COUNT(*) DESC
440
+ LIMIT 1
441
+ `;
442
+ const result = await client.query(sql, params);
443
+ const row = result.rows[0] || {};
444
+ return createSuccess({
445
+ averageMessagesPerConversation: parseFloat(row.avg_messages) || 0,
446
+ conversationsLastWeek: parseInt(row.last_week) || 0,
447
+ conversationsLastMonth: parseInt(row.last_month) || 0,
448
+ mostActiveHour: parseInt(row.activity_hour) || 0,
449
+ mostActiveDay: (row.activity_day || '').trim()
450
+ });
451
+ }
452
+ catch (error) {
453
+ return createFailure(createMemoryStorageError('get analytics', 'PostgreSQL', error));
454
+ }
455
+ };
456
+ return {
457
+ storeMessages,
458
+ getConversation,
459
+ appendMessages,
460
+ findConversations,
461
+ getRecentMessages,
462
+ deleteConversation,
463
+ clearUserConversations,
464
+ getStats,
465
+ healthCheck,
466
+ close
467
+ };
468
+ }
469
+ async function initializeSchema(client, config) {
470
+ const createTableSQL = `
471
+ CREATE TABLE IF NOT EXISTS ${config.tableName} (
472
+ conversation_id VARCHAR(255) PRIMARY KEY,
473
+ user_id VARCHAR(255),
474
+ messages JSONB NOT NULL,
475
+ metadata JSONB,
476
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
477
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
478
+ last_activity TIMESTAMP WITH TIME ZONE DEFAULT NOW()
479
+ );
480
+
481
+ CREATE INDEX IF NOT EXISTS idx_${config.tableName}_user_id
482
+ ON ${config.tableName} (user_id);
483
+ CREATE INDEX IF NOT EXISTS idx_${config.tableName}_created_at
484
+ ON ${config.tableName} (created_at);
485
+ CREATE INDEX IF NOT EXISTS idx_${config.tableName}_last_activity
486
+ ON ${config.tableName} (last_activity);
487
+ CREATE INDEX IF NOT EXISTS idx_${config.tableName}_metadata_gin
488
+ ON ${config.tableName} USING GIN (metadata);
489
+ CREATE INDEX IF NOT EXISTS idx_${config.tableName}_trace_id
490
+ ON ${config.tableName} ((metadata->>'traceId'));
491
+ `;
492
+ await client.query(createTableSQL);
493
+ console.log(`[MEMORY:Postgres] Schema initialized for table ${config.tableName}`);
494
+ }
495
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/memory/providers/postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { MemoryProvider, RedisConfig } from '../types';
2
+ interface RedisClient {
3
+ get(key: string): Promise<string | null>;
4
+ set(key: string, value: string, ...args: any[]): Promise<any>;
5
+ del(key: string): Promise<number>;
6
+ keys(pattern: string): Promise<string[]>;
7
+ exists(key: string): Promise<number>;
8
+ expire(key: string, seconds: number): Promise<number>;
9
+ ping(): Promise<string>;
10
+ quit(): Promise<void>;
11
+ }
12
+ /**
13
+ * Redis memory provider - persistent across server restarts
14
+ * Best for production environments with shared state
15
+ */
16
+ export declare function createRedisProvider(config: RedisConfig, redisClient: RedisClient): Promise<MemoryProvider>;
17
+ export {};
18
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/memory/providers/redis.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EAGd,WAAW,EAOZ,MAAM,UAAU,CAAC;AAGlB,UAAU,WAAW;IACnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAqahH"}