@falai/agent 1.0.2 → 1.1.1

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 (109) hide show
  1. package/dist/adapters/MemoryAdapter.d.ts.map +1 -1
  2. package/dist/adapters/MemoryAdapter.js +2 -1
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.d.ts.map +1 -1
  5. package/dist/adapters/MongoAdapter.js +2 -1
  6. package/dist/adapters/MongoAdapter.js.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  8. package/dist/adapters/OpenSearchAdapter.js +2 -1
  9. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +2 -1
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.d.ts.map +1 -1
  14. package/dist/adapters/PrismaAdapter.js +2 -1
  15. package/dist/adapters/PrismaAdapter.js.map +1 -1
  16. package/dist/adapters/RedisAdapter.d.ts.map +1 -1
  17. package/dist/adapters/RedisAdapter.js.map +1 -1
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  20. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -1
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -1
  24. package/dist/cjs/adapters/MongoAdapter.js +2 -1
  25. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  27. package/dist/cjs/adapters/OpenSearchAdapter.js +2 -1
  28. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +2 -1
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -1
  33. package/dist/cjs/adapters/PrismaAdapter.js +2 -1
  34. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  35. package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -1
  36. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  39. package/dist/cjs/core/BatchExecutor.d.ts +6 -0
  40. package/dist/cjs/core/BatchExecutor.d.ts.map +1 -1
  41. package/dist/cjs/core/BatchExecutor.js +14 -5
  42. package/dist/cjs/core/BatchExecutor.js.map +1 -1
  43. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  44. package/dist/cjs/core/ResponseModal.js +1 -0
  45. package/dist/cjs/core/ResponseModal.js.map +1 -1
  46. package/dist/cjs/core/SessionManager.d.ts.map +1 -1
  47. package/dist/cjs/core/SessionManager.js +4 -11
  48. package/dist/cjs/core/SessionManager.js.map +1 -1
  49. package/dist/cjs/index.d.ts +1 -1
  50. package/dist/cjs/index.d.ts.map +1 -1
  51. package/dist/cjs/index.js +3 -2
  52. package/dist/cjs/index.js.map +1 -1
  53. package/dist/cjs/types/agent.d.ts +11 -0
  54. package/dist/cjs/types/agent.d.ts.map +1 -1
  55. package/dist/cjs/types/route.d.ts +1 -1
  56. package/dist/cjs/types/route.d.ts.map +1 -1
  57. package/dist/cjs/utils/session.d.ts +6 -0
  58. package/dist/cjs/utils/session.d.ts.map +1 -1
  59. package/dist/cjs/utils/session.js +26 -8
  60. package/dist/cjs/utils/session.js.map +1 -1
  61. package/dist/core/BatchExecutor.d.ts +6 -0
  62. package/dist/core/BatchExecutor.d.ts.map +1 -1
  63. package/dist/core/BatchExecutor.js +15 -6
  64. package/dist/core/BatchExecutor.js.map +1 -1
  65. package/dist/core/ResponseModal.d.ts.map +1 -1
  66. package/dist/core/ResponseModal.js +1 -0
  67. package/dist/core/ResponseModal.js.map +1 -1
  68. package/dist/core/SessionManager.d.ts.map +1 -1
  69. package/dist/core/SessionManager.js +4 -11
  70. package/dist/core/SessionManager.js.map +1 -1
  71. package/dist/index.d.ts +1 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -1
  74. package/dist/index.js.map +1 -1
  75. package/dist/types/agent.d.ts +11 -0
  76. package/dist/types/agent.d.ts.map +1 -1
  77. package/dist/types/route.d.ts +1 -1
  78. package/dist/types/route.d.ts.map +1 -1
  79. package/dist/utils/session.d.ts +6 -0
  80. package/dist/utils/session.d.ts.map +1 -1
  81. package/dist/utils/session.js +26 -8
  82. package/dist/utils/session.js.map +1 -1
  83. package/docs/api/README.md +31 -2
  84. package/docs/api/overview.md +19 -11
  85. package/docs/architecture/multi-step-execution.md +37 -3
  86. package/docs/core/conversation-flows/data-collection.md +8 -2
  87. package/docs/core/conversation-flows/route-dsl.md +8 -1
  88. package/docs/core/conversation-flows/step-transitions.md +4 -0
  89. package/docs/core/conversation-flows/steps.md +3 -1
  90. package/docs/core/persistence/session-storage.md +12 -0
  91. package/docs/guides/migration/README.md +2 -0
  92. package/docs/guides/migration/multi-step-execution.md +29 -9
  93. package/examples/integrations/database-integration.ts +10 -9
  94. package/examples/persistence/custom-adapter.ts +12 -15
  95. package/package.json +1 -1
  96. package/src/adapters/MemoryAdapter.ts +6 -8
  97. package/src/adapters/MongoAdapter.ts +6 -8
  98. package/src/adapters/OpenSearchAdapter.ts +6 -8
  99. package/src/adapters/PostgreSQLAdapter.ts +6 -8
  100. package/src/adapters/PrismaAdapter.ts +4 -6
  101. package/src/adapters/RedisAdapter.ts +4 -7
  102. package/src/adapters/SQLiteAdapter.ts +6 -9
  103. package/src/core/BatchExecutor.ts +143 -125
  104. package/src/core/ResponseModal.ts +1 -0
  105. package/src/core/SessionManager.ts +4 -13
  106. package/src/index.ts +11 -11
  107. package/src/types/agent.ts +11 -0
  108. package/src/types/route.ts +8 -7
  109. package/src/utils/session.ts +48 -10
@@ -17,6 +17,7 @@ import {
17
17
  SessionState,
18
18
  END_ROUTE,
19
19
  History,
20
+ createSessionId,
20
21
  } from "../../src";
21
22
 
22
23
  /**
@@ -64,7 +65,7 @@ class CustomDatabase {
64
65
  data: Omit<CustomDatabaseSession, "id" | "createdAt" | "updatedAt">
65
66
  ): CustomDatabaseSession {
66
67
  const session: CustomDatabaseSession = {
67
- id: `session_${Date.now()}`,
68
+ id: createSessionId(),
68
69
  ...data,
69
70
  createdAt: new Date(),
70
71
  updatedAt: new Date(),
@@ -266,7 +267,7 @@ async function example() {
266
267
  * Simulate conversation with automatic sync
267
268
  */
268
269
  console.log("\n--- Turn 1 ---");
269
-
270
+
270
271
  // Add user message to SessionManager
271
272
  await agent.session.addMessage("user", "Hi! I'm John Smith and my email is john@acme.com", "User");
272
273
 
@@ -286,7 +287,7 @@ async function example() {
286
287
 
287
288
  // Turn 2: User provides company
288
289
  console.log("\n--- Turn 2 ---");
289
-
290
+
290
291
  await agent.session.addMessage("user", "I work for Acme Corporation", "User");
291
292
 
292
293
  const response2 = await agent.respond({
@@ -312,7 +313,7 @@ async function example() {
312
313
  * Demonstrate session recovery with new Agent instance
313
314
  */
314
315
  console.log("\n--- Session Recovery (New Agent Instance) ---");
315
-
316
+
316
317
  // Create new agent instance (simulating app restart)
317
318
  const newAgent = new Agent({
318
319
  name: "Onboarding Assistant",
@@ -360,11 +361,11 @@ async function example() {
360
361
 
361
362
  // Continue conversation with recovered session
362
363
  await newAgent.session.addMessage("user", "Can you confirm my details?");
363
-
364
+
364
365
  const confirmResponse = await newAgent.respond({
365
366
  history: newAgent.session.getHistory(),
366
367
  });
367
-
368
+
368
369
  console.log("🤖 Confirmation:", confirmResponse.message);
369
370
  await newAgent.session.addMessage("assistant", confirmResponse.message);
370
371
 
@@ -414,7 +415,7 @@ async function syncSessionToDatabase(
414
415
  /**
415
416
  * Mock function to simulate processing the completed onboarding data.
416
417
  */
417
- async function processOnboarding(data) {
418
+ async function processOnboarding(data: Partial<OnboardingData>) {
418
419
  console.log("\n🚀 Processing onboarding data...");
419
420
  console.log(
420
421
  ` - Creating account for ${data?.fullName} at ${data?.companyName}`
@@ -542,7 +543,7 @@ async function serverEndpointExample() {
542
543
  });
543
544
 
544
545
  // Load or create session
545
- const effectiveSessionId = sessionId || `session_${userId}_${Date.now()}`;
546
+ const effectiveSessionId = sessionId || createSessionId();
546
547
  await agent.session.getOrCreate(effectiveSessionId);
547
548
 
548
549
  // Try to load from database if session exists
@@ -571,7 +572,7 @@ async function serverEndpointExample() {
571
572
 
572
573
  // Add user message and respond
573
574
  await agent.session.addMessage("user", message);
574
-
575
+
575
576
  const response = await agent.respond({
576
577
  history: agent.session.getHistory(),
577
578
  });
@@ -22,7 +22,7 @@ import type {
22
22
  SessionStatus,
23
23
  CollectedStateData,
24
24
  } from "../../src/types";
25
- import { Agent, GeminiProvider } from "../../src";
25
+ import { Agent, GeminiProvider, createSessionId } from "../../src";
26
26
 
27
27
  /**
28
28
  * Simple in-memory storage for demonstration
@@ -40,7 +40,7 @@ class InMemoryStorage {
40
40
  }
41
41
  ): SessionData {
42
42
  const id =
43
- data.id || `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
43
+ data.id || createSessionId();
44
44
  const session: SessionData = {
45
45
  ...data,
46
46
  id,
@@ -249,9 +249,8 @@ class InMemoryStorage {
249
249
  * Custom Session Repository implementation
250
250
  */
251
251
  class CustomSessionRepository<TData = Record<string, unknown>>
252
- implements SessionRepository<TData>
253
- {
254
- constructor(private storage: InMemoryStorage) {}
252
+ implements SessionRepository<TData> {
253
+ constructor(private storage: InMemoryStorage) { }
255
254
 
256
255
  async create(
257
256
  data: Omit<SessionData<TData>, "createdAt" | "updatedAt"> & {
@@ -263,7 +262,7 @@ class CustomSessionRepository<TData = Record<string, unknown>>
263
262
  ...data,
264
263
  id:
265
264
  data.id ||
266
- `session_${Date.now()}_${Math.random().toString(36).slice(2)}`,
265
+ createSessionId(),
267
266
  }) as SessionData<TData>
268
267
  );
269
268
  }
@@ -278,7 +277,7 @@ class CustomSessionRepository<TData = Record<string, unknown>>
278
277
  const sessions = this.storage.getSessionsByUserId(userId);
279
278
  return Promise.resolve(
280
279
  (sessions.find((s) => s.status === "active") as SessionData<TData>) ||
281
- null
280
+ null
282
281
  );
283
282
  }
284
283
 
@@ -354,7 +353,7 @@ class CustomSessionRepository<TData = Record<string, unknown>>
354
353
  * Custom Message Repository implementation
355
354
  */
356
355
  class CustomMessageRepository implements MessageRepository {
357
- constructor(private storage: InMemoryStorage) {}
356
+ constructor(private storage: InMemoryStorage) { }
358
357
 
359
358
  async create(
360
359
  data: Omit<MessageData, "id" | "createdAt">
@@ -398,9 +397,7 @@ class CustomMessageRepository implements MessageRepository {
398
397
  * This adapter demonstrates how to implement a custom persistence layer.
399
398
  * Replace the InMemoryStorage with actual database calls for production use.
400
399
  */
401
- export class CustomAdapter<TData = Record<string, unknown>>
402
- implements PersistenceAdapter<TData>
403
- {
400
+ export class CustomAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
404
401
  private storage = new InMemoryStorage();
405
402
 
406
403
  readonly sessionRepository: SessionRepository<TData>;
@@ -479,9 +476,9 @@ async function demonstrateCustomAdapter() {
479
476
 
480
477
  // First interaction
481
478
  console.log("\n💬 First interaction:");
482
-
479
+
483
480
  await agent.session.addMessage("user", "Hi, I need help booking a flight", "Alice");
484
-
481
+
485
482
  const response1 = await agent.respond({
486
483
  history: agent.session.getHistory(),
487
484
  });
@@ -493,9 +490,9 @@ async function demonstrateCustomAdapter() {
493
490
 
494
491
  // Second interaction
495
492
  console.log("\n💬 Second interaction:");
496
-
493
+
497
494
  await agent.session.addMessage("user", "I want to fly to Paris next week", "Alice");
498
-
495
+
499
496
  const response2 = await agent.respond({
500
497
  history: agent.session.getHistory(),
501
498
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@falai/agent",
3
- "version": "1.0.2",
3
+ "version": "1.1.1",
4
4
  "description": "Standalone, strongly-typed AI Agent framework with route DSL and AI provider strategy",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -14,6 +14,7 @@ import type {
14
14
  CreateSessionData,
15
15
  } from "../types";
16
16
  import { cloneDeep } from "../utils/clone";
17
+ import { createSessionId } from "../utils";
17
18
 
18
19
  /**
19
20
  * Memory Adapter - Provider-style API for in-memory persistence
@@ -38,9 +39,7 @@ import { cloneDeep } from "../utils/clone";
38
39
  * });
39
40
  * ```
40
41
  */
41
- export class MemoryAdapter<TData = Record<string, unknown>>
42
- implements PersistenceAdapter<TData>
43
- {
42
+ export class MemoryAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
44
43
  public readonly sessionRepository: SessionRepository<TData>;
45
44
  public readonly messageRepository: MessageRepository;
46
45
  private sessions: Map<string, SessionData<TData>>;
@@ -80,13 +79,12 @@ export class MemoryAdapter<TData = Record<string, unknown>>
80
79
  * Memory Session Repository
81
80
  */
82
81
  class MemorySessionRepository<TData = Record<string, unknown>>
83
- implements SessionRepository<TData>
84
- {
85
- constructor(private sessions: Map<string, SessionData<TData>>) {}
82
+ implements SessionRepository<TData> {
83
+ constructor(private sessions: Map<string, SessionData<TData>>) { }
86
84
 
87
85
  create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
88
86
  const id =
89
- data.id || `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
87
+ data.id || createSessionId();
90
88
  const now = new Date();
91
89
 
92
90
  const session: SessionData<TData> = {
@@ -208,7 +206,7 @@ class MemorySessionRepository<TData = Record<string, unknown>>
208
206
  * Memory Message Repository
209
207
  */
210
208
  class MemoryMessageRepository implements MessageRepository {
211
- constructor(private messages: Map<string, MessageData>) {}
209
+ constructor(private messages: Map<string, MessageData>) { }
212
210
 
213
211
  async create(
214
212
  data: Omit<MessageData, "id" | "createdAt">
@@ -13,6 +13,7 @@ import type {
13
13
  CollectedStateData,
14
14
  CreateSessionData,
15
15
  } from "../types";
16
+ import { createSessionId } from "../utils";
16
17
 
17
18
  /**
18
19
  * MongoDB collection interface - matches mongodb driver
@@ -100,9 +101,7 @@ export interface MongoAdapterOptions {
100
101
  * });
101
102
  * ```
102
103
  */
103
- export class MongoAdapter<TData = Record<string, unknown>>
104
- implements PersistenceAdapter<TData>
105
- {
104
+ export class MongoAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
106
105
  public readonly sessionRepository: SessionRepository<TData>;
107
106
  public readonly messageRepository: MessageRepository;
108
107
  private client: MongoClient;
@@ -133,9 +132,8 @@ export class MongoAdapter<TData = Record<string, unknown>>
133
132
  * MongoDB Session Repository
134
133
  */
135
134
  class MongoSessionRepository<TData = Record<string, unknown>>
136
- implements SessionRepository<TData>
137
- {
138
- constructor(private collection: MongoCollection<SessionData<TData>>) {}
135
+ implements SessionRepository<TData> {
136
+ constructor(private collection: MongoCollection<SessionData<TData>>) { }
139
137
 
140
138
  async create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
141
139
  const now = new Date();
@@ -143,7 +141,7 @@ class MongoSessionRepository<TData = Record<string, unknown>>
143
141
  ...data,
144
142
  id:
145
143
  data.id ||
146
- `session_${Date.now()}_${Math.random().toString(36).slice(2)}`,
144
+ createSessionId(),
147
145
  status: data.status || "active",
148
146
  messageCount: data.messageCount || 0,
149
147
  createdAt: now,
@@ -249,7 +247,7 @@ class MongoSessionRepository<TData = Record<string, unknown>>
249
247
  * MongoDB Message Repository
250
248
  */
251
249
  class MongoMessageRepository implements MessageRepository {
252
- constructor(private collection: MongoCollection<MessageData>) {}
250
+ constructor(private collection: MongoCollection<MessageData>) { }
253
251
 
254
252
  async create(
255
253
  data: Omit<MessageData, "id" | "createdAt">
@@ -33,6 +33,7 @@
33
33
  */
34
34
 
35
35
  import { cloneDeep } from "../utils/clone";
36
+ import { createSessionId } from "../utils";
36
37
  import type {
37
38
  PersistenceAdapter,
38
39
  SessionRepository,
@@ -140,9 +141,7 @@ export interface OpenSearchAdapterOptions {
140
141
  * Stores sessions and messages as documents in OpenSearch indices.
141
142
  * Compatible with OpenSearch 1.x, 2.x and Elasticsearch 7.x.
142
143
  */
143
- export class OpenSearchAdapter<TData = Record<string, unknown>>
144
- implements PersistenceAdapter<TData>
145
- {
144
+ export class OpenSearchAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
146
145
  readonly sessionRepository: SessionRepository<TData>;
147
146
  readonly messageRepository: MessageRepository;
148
147
 
@@ -248,17 +247,16 @@ export class OpenSearchAdapter<TData = Record<string, unknown>>
248
247
  * OpenSearch-based session repository implementation
249
248
  */
250
249
  class OpenSearchSessionRepository<TData = Record<string, unknown>>
251
- implements SessionRepository<TData>
252
- {
250
+ implements SessionRepository<TData> {
253
251
  constructor(
254
252
  private client: OpenSearchClient,
255
253
  private index: string,
256
254
  private refresh: boolean | "wait_for"
257
- ) {}
255
+ ) { }
258
256
 
259
257
  async create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
260
258
  const id =
261
- data.id || `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
259
+ data.id || createSessionId();
262
260
  const now = new Date();
263
261
 
264
262
  const session: SessionData<TData> = {
@@ -514,7 +512,7 @@ class OpenSearchMessageRepository implements MessageRepository {
514
512
  private client: OpenSearchClient,
515
513
  private index: string,
516
514
  private refresh: boolean | "wait_for"
517
- ) {}
515
+ ) { }
518
516
 
519
517
  async create(
520
518
  data: Omit<MessageData, "id" | "createdAt">
@@ -12,6 +12,7 @@ import type {
12
12
  SessionStatus,
13
13
  PersistenceAdapter,
14
14
  } from "../types";
15
+ import { createSessionId } from "../utils";
15
16
 
16
17
  /**
17
18
  * PostgreSQL query result interface
@@ -77,9 +78,7 @@ export interface PostgreSQLAdapterOptions {
77
78
  * });
78
79
  * ```
79
80
  */
80
- export class PostgreSQLAdapter<TData = Record<string, unknown>>
81
- implements PersistenceAdapter<TData>
82
- {
81
+ export class PostgreSQLAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
83
82
  public readonly sessionRepository: SessionRepository<TData>;
84
83
  public readonly messageRepository: MessageRepository;
85
84
  private client: PgClient;
@@ -159,9 +158,8 @@ export class PostgreSQLAdapter<TData = Record<string, unknown>>
159
158
  * PostgreSQL Session Repository
160
159
  */
161
160
  class PostgreSQLSessionRepository<TData = Record<string, unknown>>
162
- implements SessionRepository<TData>
163
- {
164
- constructor(private client: PgClient, private tableName: string) {}
161
+ implements SessionRepository<TData> {
162
+ constructor(private client: PgClient, private tableName: string) { }
165
163
 
166
164
  async create(
167
165
  data: Omit<SessionData<TData>, "createdAt" | "updatedAt"> & {
@@ -169,7 +167,7 @@ class PostgreSQLSessionRepository<TData = Record<string, unknown>>
169
167
  }
170
168
  ): Promise<SessionData<TData>> {
171
169
  const id =
172
- data.id || `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
170
+ data.id || createSessionId();
173
171
  const now = new Date();
174
172
 
175
173
  const result = await this.client.query<SessionData<TData>>(
@@ -335,7 +333,7 @@ class PostgreSQLSessionRepository<TData = Record<string, unknown>>
335
333
  * PostgreSQL Message Repository
336
334
  */
337
335
  class PostgreSQLMessageRepository implements MessageRepository {
338
- constructor(private client: PgClient, private tableName: string) {}
336
+ constructor(private client: PgClient, private tableName: string) { }
339
337
 
340
338
  async create(
341
339
  data: Omit<MessageData, "id" | "createdAt">
@@ -16,6 +16,7 @@ import type {
16
16
  CreateSessionData,
17
17
  } from "../types";
18
18
  import { logger } from '../utils'
19
+ import { createSessionId } from '../utils';
19
20
 
20
21
  /**
21
22
  * Prisma model operations
@@ -120,9 +121,7 @@ export interface PrismaAdapterOptions {
120
121
  * });
121
122
  * ```
122
123
  */
123
- export class PrismaAdapter<TData = Record<string, unknown>>
124
- implements PersistenceAdapter<TData>
125
- {
124
+ export class PrismaAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
126
125
  public readonly sessionRepository: SessionRepository<TData>;
127
126
  public readonly messageRepository: MessageRepository;
128
127
  private prisma: PrismaClient;
@@ -199,8 +198,7 @@ export class PrismaAdapter<TData = Record<string, unknown>>
199
198
  * Internal implementation - users should use PrismaAdapter instead
200
199
  */
201
200
  class PrismaSessionRepository<TData = Record<string, unknown>>
202
- implements SessionRepository<TData>
203
- {
201
+ implements SessionRepository<TData> {
204
202
  private prisma: PrismaClient;
205
203
  private tableName: string;
206
204
  private fieldMap: Partial<Record<keyof SessionData<TData>, string>>;
@@ -270,7 +268,7 @@ class PrismaSessionRepository<TData = Record<string, unknown>>
270
268
  ...data,
271
269
  id:
272
270
  data.id ||
273
- `session_${Date.now()}_${Math.random().toString(36).slice(2)}`,
271
+ createSessionId(),
274
272
  });
275
273
  const result = await this.getModel().create({
276
274
  data: mapped,
@@ -74,9 +74,7 @@ export interface RedisAdapterOptions {
74
74
  * });
75
75
  * ```
76
76
  */
77
- export class RedisAdapter<TData = Record<string, unknown>>
78
- implements PersistenceAdapter<TData>
79
- {
77
+ export class RedisAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
80
78
  public readonly sessionRepository: SessionRepository<TData>;
81
79
  public readonly messageRepository: MessageRepository;
82
80
  private redis: RedisClient;
@@ -112,13 +110,12 @@ export class RedisAdapter<TData = Record<string, unknown>>
112
110
  * Redis Session Repository
113
111
  */
114
112
  class RedisSessionRepository<TData = Record<string, unknown>>
115
- implements SessionRepository<TData>
116
- {
113
+ implements SessionRepository<TData> {
117
114
  constructor(
118
115
  private redis: RedisClient,
119
116
  private keyPrefix: string,
120
117
  private ttl: number
121
- ) {}
118
+ ) { }
122
119
 
123
120
  private getKey(id: string): string {
124
121
  return `${this.keyPrefix}session:${id}`;
@@ -267,7 +264,7 @@ class RedisMessageRepository implements MessageRepository {
267
264
  private redis: RedisClient,
268
265
  private keyPrefix: string,
269
266
  private ttl: number
270
- ) {}
267
+ ) { }
271
268
 
272
269
  private getKey(id: string): string {
273
270
  return `${this.keyPrefix}message:${id}`;
@@ -71,9 +71,7 @@ export interface SQLiteAdapterOptions {
71
71
  * });
72
72
  * ```
73
73
  */
74
- export class SQLiteAdapter<TData = Record<string, unknown>>
75
- implements PersistenceAdapter<TData>
76
- {
74
+ export class SQLiteAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
77
75
  public readonly sessionRepository: SessionRepository<TData>;
78
76
  public readonly messageRepository: MessageRepository;
79
77
  private db: SqliteDatabase;
@@ -154,9 +152,8 @@ export class SQLiteAdapter<TData = Record<string, unknown>>
154
152
  * SQLite Session Repository
155
153
  */
156
154
  class SQLiteSessionRepository<TData = Record<string, unknown>>
157
- implements SessionRepository<TData>
158
- {
159
- constructor(private db: SqliteDatabase, private tableName: string) {}
155
+ implements SessionRepository<TData> {
156
+ constructor(private db: SqliteDatabase, private tableName: string) { }
160
157
 
161
158
  create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
162
159
  const id = data.id || createSessionId();
@@ -332,8 +329,8 @@ class SQLiteSessionRepository<TData = Record<string, unknown>>
332
329
  currentStep: (row.current_step as string) || undefined,
333
330
  collectedData: row.collected_data
334
331
  ? (JSON.parse(
335
- row.collected_data as string
336
- ) as CollectedStateData<TData>)
332
+ row.collected_data as string
333
+ ) as CollectedStateData<TData>)
337
334
  : undefined,
338
335
  messageCount: (row.message_count as number) || 0,
339
336
  lastMessageAt: row.last_message_at
@@ -352,7 +349,7 @@ class SQLiteSessionRepository<TData = Record<string, unknown>>
352
349
  * SQLite Message Repository
353
350
  */
354
351
  class SQLiteMessageRepository implements MessageRepository {
355
- constructor(private db: SqliteDatabase, private tableName: string) {}
352
+ constructor(private db: SqliteDatabase, private tableName: string) { }
356
353
 
357
354
  create(data: Omit<MessageData, "id" | "createdAt">): Promise<MessageData> {
358
355
  const id = `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`;