@falai/agent 1.1.0 → 1.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 (122) 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/Agent.d.ts +202 -67
  40. package/dist/cjs/core/Agent.d.ts.map +1 -1
  41. package/dist/cjs/core/Agent.js +366 -158
  42. package/dist/cjs/core/Agent.js.map +1 -1
  43. package/dist/cjs/core/BatchExecutor.js +5 -6
  44. package/dist/cjs/core/BatchExecutor.js.map +1 -1
  45. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -1
  46. package/dist/cjs/core/BatchPromptBuilder.js +5 -2
  47. package/dist/cjs/core/BatchPromptBuilder.js.map +1 -1
  48. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  49. package/dist/cjs/core/ResponseEngine.js +6 -3
  50. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  51. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  52. package/dist/cjs/core/ResponseModal.js +18 -17
  53. package/dist/cjs/core/ResponseModal.js.map +1 -1
  54. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
  55. package/dist/cjs/core/RoutingEngine.js +8 -73
  56. package/dist/cjs/core/RoutingEngine.js.map +1 -1
  57. package/dist/cjs/core/SessionManager.d.ts.map +1 -1
  58. package/dist/cjs/core/SessionManager.js +4 -11
  59. package/dist/cjs/core/SessionManager.js.map +1 -1
  60. package/dist/cjs/index.d.ts +1 -1
  61. package/dist/cjs/index.d.ts.map +1 -1
  62. package/dist/cjs/index.js +3 -2
  63. package/dist/cjs/index.js.map +1 -1
  64. package/dist/cjs/utils/session.d.ts +6 -0
  65. package/dist/cjs/utils/session.d.ts.map +1 -1
  66. package/dist/cjs/utils/session.js +26 -8
  67. package/dist/cjs/utils/session.js.map +1 -1
  68. package/dist/core/Agent.d.ts +202 -67
  69. package/dist/core/Agent.d.ts.map +1 -1
  70. package/dist/core/Agent.js +366 -158
  71. package/dist/core/Agent.js.map +1 -1
  72. package/dist/core/BatchExecutor.js +6 -7
  73. package/dist/core/BatchExecutor.js.map +1 -1
  74. package/dist/core/BatchPromptBuilder.d.ts.map +1 -1
  75. package/dist/core/BatchPromptBuilder.js +5 -2
  76. package/dist/core/BatchPromptBuilder.js.map +1 -1
  77. package/dist/core/ResponseEngine.d.ts.map +1 -1
  78. package/dist/core/ResponseEngine.js +6 -3
  79. package/dist/core/ResponseEngine.js.map +1 -1
  80. package/dist/core/ResponseModal.d.ts.map +1 -1
  81. package/dist/core/ResponseModal.js +18 -17
  82. package/dist/core/ResponseModal.js.map +1 -1
  83. package/dist/core/RoutingEngine.d.ts.map +1 -1
  84. package/dist/core/RoutingEngine.js +8 -73
  85. package/dist/core/RoutingEngine.js.map +1 -1
  86. package/dist/core/SessionManager.d.ts.map +1 -1
  87. package/dist/core/SessionManager.js +4 -11
  88. package/dist/core/SessionManager.js.map +1 -1
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +1 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/utils/session.d.ts +6 -0
  94. package/dist/utils/session.d.ts.map +1 -1
  95. package/dist/utils/session.js +26 -8
  96. package/dist/utils/session.js.map +1 -1
  97. package/docs/api/README.md +33 -4
  98. package/docs/api/overview.md +9 -5
  99. package/docs/architecture/data-extraction-flow.md +17 -19
  100. package/docs/core/conversation-flows/data-collection.md +9 -3
  101. package/docs/core/conversation-flows/route-dsl.md +8 -1
  102. package/docs/core/error-handling.md +3 -4
  103. package/docs/core/persistence/session-storage.md +12 -0
  104. package/examples/integrations/database-integration.ts +10 -9
  105. package/examples/persistence/custom-adapter.ts +12 -15
  106. package/package.json +2 -2
  107. package/src/adapters/MemoryAdapter.ts +6 -8
  108. package/src/adapters/MongoAdapter.ts +6 -8
  109. package/src/adapters/OpenSearchAdapter.ts +6 -8
  110. package/src/adapters/PostgreSQLAdapter.ts +6 -8
  111. package/src/adapters/PrismaAdapter.ts +4 -6
  112. package/src/adapters/RedisAdapter.ts +4 -7
  113. package/src/adapters/SQLiteAdapter.ts +6 -9
  114. package/src/core/Agent.ts +427 -195
  115. package/src/core/BatchExecutor.ts +129 -129
  116. package/src/core/BatchPromptBuilder.ts +41 -38
  117. package/src/core/ResponseEngine.ts +56 -53
  118. package/src/core/ResponseModal.ts +79 -81
  119. package/src/core/RoutingEngine.ts +67 -149
  120. package/src/core/SessionManager.ts +4 -13
  121. package/src/index.ts +11 -11
  122. package/src/utils/session.ts +48 -10
@@ -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)}`;