@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,451 @@
1
+ /**
2
+ * JAF ADK Layer - Session Management
3
+ *
4
+ * Functional session management with pluggable providers
5
+ */
6
+ import { throwSessionError, createSessionError } from '../types';
7
+ // ========== Session Creation ==========
8
+ export const generateSessionId = () => {
9
+ // Use timestamp and random number to match expected pattern /^session_\d+_\d+$/
10
+ return `session_${Date.now()}_${Math.floor(Math.random() * 1000000000)}`;
11
+ };
12
+ export const createSession = (appName, userId, sessionId, metadata) => {
13
+ const id = sessionId || generateSessionId();
14
+ const sessionMetadata = {
15
+ created: new Date(),
16
+ tags: [],
17
+ properties: {},
18
+ ...metadata
19
+ };
20
+ return {
21
+ id,
22
+ appName,
23
+ userId,
24
+ messages: [],
25
+ artifacts: {},
26
+ metadata: sessionMetadata
27
+ };
28
+ };
29
+ // ========== In-Memory Session Provider ==========
30
+ export const createInMemorySessionProvider = () => {
31
+ const sessions = new Map();
32
+ return {
33
+ createSession: async (context) => {
34
+ const session = createSession(context.appName, context.userId, context.sessionId);
35
+ sessions.set(session.id, session);
36
+ return session;
37
+ },
38
+ getSession: async (sessionId) => {
39
+ const session = sessions.get(sessionId);
40
+ if (session) {
41
+ // Update last accessed
42
+ session.metadata.lastAccessed = new Date();
43
+ sessions.set(sessionId, session);
44
+ }
45
+ return session || null;
46
+ },
47
+ updateSession: async (session) => {
48
+ session.metadata.lastAccessed = new Date();
49
+ sessions.set(session.id, session);
50
+ return session;
51
+ },
52
+ listSessions: async (userId) => {
53
+ return Array.from(sessions.values())
54
+ .filter(session => session.userId === userId)
55
+ .sort((a, b) => b.metadata.created.getTime() - a.metadata.created.getTime());
56
+ },
57
+ deleteSession: async (sessionId) => {
58
+ return sessions.delete(sessionId);
59
+ }
60
+ };
61
+ };
62
+ // ========== Redis Session Provider ==========
63
+ // Re-export from the real implementation
64
+ export { createRedisSessionProvider } from './redis-provider.js';
65
+ export const createMockRedisSessionProvider = (config) => {
66
+ let redis; // Will be typed properly when ioredis is added
67
+ let isRealRedis = false;
68
+ // Try to use real Redis if available
69
+ try {
70
+ // Dynamic import to avoid breaking if ioredis not installed
71
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
72
+ const Redis = require('ioredis');
73
+ redis = new Redis({
74
+ host: config.host,
75
+ port: config.port,
76
+ password: config.password,
77
+ db: config.database || 0,
78
+ retryStrategy: (times) => {
79
+ const delay = Math.min(times * 50, 2000);
80
+ return delay;
81
+ },
82
+ enableOfflineQueue: true,
83
+ maxRetriesPerRequest: 3,
84
+ lazyConnect: false
85
+ });
86
+ isRealRedis = true;
87
+ // Handle connection errors
88
+ redis.on('error', (err) => {
89
+ console.error('[ADK:Sessions] Redis connection error:', err);
90
+ });
91
+ redis.on('connect', () => {
92
+ console.log('[ADK:Sessions] Connected to Redis');
93
+ });
94
+ }
95
+ catch (error) {
96
+ console.warn('[ADK:Sessions] ioredis not found, falling back to mock implementation');
97
+ // Fallback to mock Map if ioredis not available
98
+ redis = new Map();
99
+ }
100
+ const keyPrefix = config.keyPrefix || 'jaf_adk_session:';
101
+ const getKey = (sessionId) => `${keyPrefix}${sessionId}`;
102
+ const getUserKey = (userId) => `${keyPrefix}user:${userId}`;
103
+ // Helper to deserialize session and restore Date objects
104
+ const deserializeSession = (sessionData) => {
105
+ const session = JSON.parse(sessionData);
106
+ // Restore Date objects from strings
107
+ if (session.metadata.created && typeof session.metadata.created === 'string') {
108
+ session.metadata.created = new Date(session.metadata.created);
109
+ }
110
+ if (session.metadata.lastAccessed && typeof session.metadata.lastAccessed === 'string') {
111
+ session.metadata.lastAccessed = new Date(session.metadata.lastAccessed);
112
+ }
113
+ return session;
114
+ };
115
+ return {
116
+ createSession: async (context) => {
117
+ const session = createSession(context.appName, context.userId, context.sessionId);
118
+ // Store session
119
+ redis.set(getKey(session.id), JSON.stringify(session));
120
+ // Add to user's session list
121
+ const userKey = getUserKey(context.userId);
122
+ const userSessions = redis.get(userKey);
123
+ const sessionIds = userSessions ? JSON.parse(userSessions) : [];
124
+ sessionIds.push(session.id);
125
+ redis.set(userKey, JSON.stringify(sessionIds));
126
+ return session;
127
+ },
128
+ getSession: async (sessionId) => {
129
+ const sessionData = redis.get(getKey(sessionId));
130
+ if (!sessionData) {
131
+ return null;
132
+ }
133
+ try {
134
+ const session = deserializeSession(sessionData);
135
+ // Update last accessed
136
+ session.metadata.lastAccessed = new Date();
137
+ redis.set(getKey(sessionId), JSON.stringify(session));
138
+ return session;
139
+ }
140
+ catch (error) {
141
+ throwSessionError(`Failed to parse session data: ${error}`, sessionId);
142
+ return null; // This will never be reached due to throwSessionError, but needed for TypeScript
143
+ }
144
+ },
145
+ updateSession: async (session) => {
146
+ session.metadata.lastAccessed = new Date();
147
+ redis.set(getKey(session.id), JSON.stringify(session));
148
+ return session;
149
+ },
150
+ listSessions: async (userId) => {
151
+ const userKey = getUserKey(userId);
152
+ const sessionIdsData = redis.get(userKey);
153
+ if (!sessionIdsData) {
154
+ return [];
155
+ }
156
+ try {
157
+ const sessionIds = JSON.parse(sessionIdsData);
158
+ const sessions = [];
159
+ for (const sessionId of sessionIds) {
160
+ const sessionData = redis.get(getKey(sessionId));
161
+ if (sessionData) {
162
+ sessions.push(deserializeSession(sessionData));
163
+ }
164
+ }
165
+ return sessions.sort((a, b) => b.metadata.created.getTime() - a.metadata.created.getTime());
166
+ }
167
+ catch (error) {
168
+ throwSessionError(`Failed to list sessions for user: ${error}`, undefined, { userId });
169
+ return []; // This will never be reached due to throwSessionError, but needed for TypeScript
170
+ }
171
+ },
172
+ deleteSession: async (sessionId) => {
173
+ const sessionData = redis.get(getKey(sessionId));
174
+ if (!sessionData) {
175
+ return false;
176
+ }
177
+ try {
178
+ const session = JSON.parse(sessionData);
179
+ // Remove from Redis
180
+ redis.delete(getKey(sessionId));
181
+ // Remove from user's session list
182
+ const userKey = getUserKey(session.userId);
183
+ const userSessionsData = redis.get(userKey);
184
+ if (userSessionsData) {
185
+ const sessionIds = JSON.parse(userSessionsData);
186
+ const updatedIds = sessionIds.filter(id => id !== sessionId);
187
+ redis.set(userKey, JSON.stringify(updatedIds));
188
+ }
189
+ return true;
190
+ }
191
+ catch (error) {
192
+ throwSessionError(`Failed to delete session: ${error}`, sessionId);
193
+ return false; // This will never be reached due to throwSessionError, but needed for TypeScript
194
+ }
195
+ }
196
+ };
197
+ };
198
+ // ========== Postgres Session Provider ==========
199
+ // Re-export from the real implementation
200
+ export { createPostgresSessionProvider } from './postgres-provider.js';
201
+ // ========== Session Operations ==========
202
+ export const addMessageToSession = (session, message) => {
203
+ return {
204
+ ...session,
205
+ messages: [...session.messages, message],
206
+ metadata: {
207
+ ...session.metadata,
208
+ lastAccessed: new Date()
209
+ }
210
+ };
211
+ };
212
+ export const addArtifactToSession = (session, key, value) => {
213
+ return {
214
+ ...session,
215
+ artifacts: {
216
+ ...session.artifacts,
217
+ [key]: value
218
+ },
219
+ metadata: {
220
+ ...session.metadata,
221
+ lastAccessed: new Date()
222
+ }
223
+ };
224
+ };
225
+ export const removeArtifactFromSession = (session, key) => {
226
+ const { [key]: removed, ...remainingArtifacts } = session.artifacts;
227
+ return {
228
+ ...session,
229
+ artifacts: remainingArtifacts,
230
+ metadata: {
231
+ ...session.metadata,
232
+ lastAccessed: new Date()
233
+ }
234
+ };
235
+ };
236
+ export const updateSessionMetadata = (session, metadata) => {
237
+ return {
238
+ ...session,
239
+ metadata: {
240
+ ...session.metadata,
241
+ ...metadata,
242
+ lastAccessed: new Date()
243
+ }
244
+ };
245
+ };
246
+ export const clearSessionMessages = (session) => {
247
+ return {
248
+ ...session,
249
+ messages: [],
250
+ metadata: {
251
+ ...session.metadata,
252
+ lastAccessed: new Date()
253
+ }
254
+ };
255
+ };
256
+ // ========== Session Validation ==========
257
+ export const validateSession = (session) => {
258
+ const errors = [];
259
+ if (!session.id || session.id.trim().length === 0) {
260
+ errors.push('Session ID is required');
261
+ }
262
+ if (!session.appName || session.appName.trim().length === 0) {
263
+ errors.push('App name is required');
264
+ }
265
+ if (!session.userId || session.userId.trim().length === 0) {
266
+ errors.push('User ID is required');
267
+ }
268
+ if (!Array.isArray(session.messages)) {
269
+ errors.push('Messages must be an array');
270
+ }
271
+ if (typeof session.artifacts !== 'object' || session.artifacts === null) {
272
+ errors.push('Artifacts must be an object');
273
+ }
274
+ if (!session.metadata || !session.metadata.created) {
275
+ errors.push('Session metadata with created date is required');
276
+ }
277
+ if (errors.length > 0) {
278
+ return { success: false, errors };
279
+ }
280
+ return { success: true, data: session };
281
+ };
282
+ export const validateSessionContext = (context) => {
283
+ const errors = [];
284
+ if (!context.appName || context.appName.trim().length === 0) {
285
+ errors.push('App name is required');
286
+ }
287
+ if (!context.userId || context.userId.trim().length === 0) {
288
+ errors.push('User ID is required');
289
+ }
290
+ if (errors.length > 0) {
291
+ return { success: false, errors };
292
+ }
293
+ return { success: true, data: context };
294
+ };
295
+ // ========== Session Utilities ==========
296
+ export const getOrCreateSession = async (provider, context) => {
297
+ // If sessionId is provided, try to get existing session
298
+ if (context.sessionId) {
299
+ const existingSession = await provider.getSession(context.sessionId);
300
+ if (existingSession) {
301
+ return existingSession;
302
+ }
303
+ }
304
+ // Create new session
305
+ return await provider.createSession(context);
306
+ };
307
+ export const getSessionStats = (session) => {
308
+ const messageCount = session.messages.length;
309
+ const userMessages = session.messages.filter(m => m.role === 'user').length;
310
+ const modelMessages = session.messages.filter(m => m.role === 'model').length;
311
+ const systemMessages = session.messages.filter(m => m.role === 'system').length;
312
+ const artifactCount = Object.keys(session.artifacts).length;
313
+ const totalTextLength = session.messages
314
+ .flatMap(m => m.parts)
315
+ .filter(p => p.type === 'text' && p.text)
316
+ .reduce((sum, p) => sum + (p.text?.length || 0), 0);
317
+ return {
318
+ id: session.id,
319
+ appName: session.appName,
320
+ userId: session.userId,
321
+ messageCount,
322
+ userMessages,
323
+ modelMessages,
324
+ systemMessages,
325
+ artifactCount,
326
+ totalTextLength,
327
+ created: session.metadata.created,
328
+ lastAccessed: session.metadata.lastAccessed,
329
+ tags: session.metadata.tags
330
+ };
331
+ };
332
+ export const cloneSession = (session, newId) => {
333
+ return {
334
+ ...session,
335
+ id: newId || generateSessionId(),
336
+ messages: [...session.messages],
337
+ artifacts: { ...session.artifacts },
338
+ metadata: {
339
+ ...session.metadata,
340
+ created: new Date()
341
+ }
342
+ };
343
+ };
344
+ export const mergeSessionArtifacts = (session, artifacts) => {
345
+ return {
346
+ ...session,
347
+ artifacts: {
348
+ ...session.artifacts,
349
+ ...artifacts
350
+ },
351
+ metadata: {
352
+ ...session.metadata,
353
+ lastAccessed: new Date()
354
+ }
355
+ };
356
+ };
357
+ // ========== Session Query Functions ==========
358
+ export const getLastUserMessage = (session) => {
359
+ const userMessages = session.messages.filter(m => m.role === 'user');
360
+ return userMessages.length > 0 ? userMessages[userMessages.length - 1] : null;
361
+ };
362
+ export const getLastModelMessage = (session) => {
363
+ const modelMessages = session.messages.filter(m => m.role === 'model');
364
+ return modelMessages.length > 0 ? modelMessages[modelMessages.length - 1] : null;
365
+ };
366
+ export const getMessagesByRole = (session, role) => {
367
+ return session.messages.filter(m => m.role === role);
368
+ };
369
+ export const hasArtifact = (session, key) => {
370
+ return key in session.artifacts;
371
+ };
372
+ export const getArtifact = (session, key) => {
373
+ return session.artifacts[key] || null;
374
+ };
375
+ export const getArtifactKeys = (session) => {
376
+ return Object.keys(session.artifacts);
377
+ };
378
+ // ========== Error Handling ==========
379
+ // Export createSessionError from types for external use
380
+ export { createSessionError };
381
+ export const withSessionErrorHandling = (fn, sessionId) => {
382
+ return async (...args) => {
383
+ try {
384
+ return await fn(...args);
385
+ }
386
+ catch (error) {
387
+ // Check if error is already a SessionError by checking its properties
388
+ // Handle both Error instances and plain SessionErrorObjects
389
+ if (error && typeof error === 'object' &&
390
+ (error.name === 'SessionError' ||
391
+ error.code === 'SESSION_ERROR')) {
392
+ throw error;
393
+ }
394
+ throwSessionError(`Session operation failed: ${error instanceof Error ? error.message : String(error)}`, sessionId, { originalError: error });
395
+ // This will never be reached due to throwSessionError, but needed for TypeScript
396
+ throw error;
397
+ }
398
+ };
399
+ };
400
+ // ========== Session Provider Bridge ==========
401
+ // Bridge JAF memory providers to ADK session providers
402
+ export const createMemoryProviderBridge = (memoryProvider) => {
403
+ return {
404
+ createSession: async (context) => {
405
+ const memory = await memoryProvider.createMemory(context.userId);
406
+ return sessionFromMemory(memory, context);
407
+ },
408
+ getSession: async (sessionId) => {
409
+ const memory = await memoryProvider.getMemory(sessionId);
410
+ return memory ? sessionFromMemory(memory) : null;
411
+ },
412
+ updateSession: async (session) => {
413
+ const memory = memoryFromSession(session);
414
+ await memoryProvider.updateMemory(session.id, memory);
415
+ return session;
416
+ },
417
+ listSessions: async (userId) => {
418
+ const memories = await memoryProvider.listMemories(userId);
419
+ return memories.map((memory) => sessionFromMemory(memory));
420
+ },
421
+ deleteSession: async (sessionId) => {
422
+ return await memoryProvider.deleteMemory(sessionId);
423
+ }
424
+ };
425
+ };
426
+ const sessionFromMemory = (memory, context) => {
427
+ return {
428
+ id: memory.id || generateSessionId(),
429
+ appName: context?.appName || 'unknown',
430
+ userId: memory.userId || context?.userId || 'unknown',
431
+ messages: memory.messages || [],
432
+ artifacts: memory.metadata || {},
433
+ metadata: {
434
+ created: memory.created || new Date(),
435
+ lastAccessed: memory.lastAccessed,
436
+ tags: [],
437
+ properties: {}
438
+ }
439
+ };
440
+ };
441
+ const memoryFromSession = (session) => {
442
+ return {
443
+ id: session.id,
444
+ userId: session.userId,
445
+ messages: session.messages,
446
+ metadata: session.artifacts,
447
+ created: session.metadata.created,
448
+ lastAccessed: session.metadata.lastAccessed
449
+ };
450
+ };
451
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adk/sessions/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Real PostgreSQL Session Provider Implementation
3
+ *
4
+ * This provides a production-ready PostgreSQL-based session provider
5
+ * with proper connection pooling, transactions, and error handling
6
+ */
7
+ import { SessionProvider } from '../types.js';
8
+ export interface PostgresConfig {
9
+ connectionString: string;
10
+ tableName?: string;
11
+ poolSize?: number;
12
+ idleTimeoutMillis?: number;
13
+ connectionTimeoutMillis?: number;
14
+ }
15
+ export declare const createPostgresSessionProvider: (config: PostgresConfig) => SessionProvider;
16
+ export declare const closePostgresPool: (provider: any) => Promise<void>;
17
+ export declare const getPoolStats: (provider: any) => any;
18
+ export declare const migrateFromRedisToPostgres: (redisProvider: SessionProvider, postgresProvider: SessionProvider, userIds: string[]) => Promise<{
19
+ migrated: number;
20
+ errors: string[];
21
+ }>;
22
+ //# sourceMappingURL=postgres-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-provider.d.ts","sourceRoot":"","sources":["../../../src/adk/sessions/postgres-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,eAAe,EAIhB,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAmBD,eAAO,MAAM,6BAA6B,GAAI,QAAQ,cAAc,KAAG,eAiQtE,CAAC;AAIF,eAAO,MAAM,iBAAiB,GAAU,UAAU,GAAG,KAAG,OAAO,CAAC,IAAI,CAKnE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,UAAU,GAAG,KAAG,GAS5C,CAAC;AAGF,eAAO,MAAM,0BAA0B,GACrC,eAAe,eAAe,EAC9B,kBAAkB,eAAe,EACjC,SAAS,MAAM,EAAE,KAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBhD,CAAC"}