@falai/agent 0.9.0-alpha-1 → 0.9.0

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 (217) hide show
  1. package/README.md +34 -22
  2. package/dist/cjs/src/core/Agent.d.ts +77 -59
  3. package/dist/cjs/src/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/src/core/Agent.js +284 -1060
  5. package/dist/cjs/src/core/Agent.js.map +1 -1
  6. package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -1
  7. package/dist/cjs/src/core/PersistenceManager.js +48 -25
  8. package/dist/cjs/src/core/PersistenceManager.js.map +1 -1
  9. package/dist/cjs/src/core/PromptComposer.d.ts +1 -1
  10. package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -1
  11. package/dist/cjs/src/core/PromptComposer.js.map +1 -1
  12. package/dist/cjs/src/core/ResponseEngine.d.ts +13 -12
  13. package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -1
  14. package/dist/cjs/src/core/ResponseEngine.js +4 -4
  15. package/dist/cjs/src/core/ResponseEngine.js.map +1 -1
  16. package/dist/cjs/src/core/ResponseModal.d.ts +205 -0
  17. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
  18. package/dist/cjs/src/core/ResponseModal.js +1328 -0
  19. package/dist/cjs/src/core/ResponseModal.js.map +1 -0
  20. package/dist/cjs/src/core/ResponsePipeline.d.ts +66 -38
  21. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -1
  22. package/dist/cjs/src/core/ResponsePipeline.js +72 -4
  23. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -1
  24. package/dist/cjs/src/core/Route.d.ts +24 -5
  25. package/dist/cjs/src/core/Route.d.ts.map +1 -1
  26. package/dist/cjs/src/core/Route.js +45 -1
  27. package/dist/cjs/src/core/Route.js.map +1 -1
  28. package/dist/cjs/src/core/RoutingEngine.d.ts +31 -6
  29. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -1
  30. package/dist/cjs/src/core/RoutingEngine.js +113 -9
  31. package/dist/cjs/src/core/RoutingEngine.js.map +1 -1
  32. package/dist/cjs/src/core/SessionManager.d.ts +14 -4
  33. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -1
  34. package/dist/cjs/src/core/SessionManager.js +25 -5
  35. package/dist/cjs/src/core/SessionManager.js.map +1 -1
  36. package/dist/cjs/src/core/Step.d.ts +10 -10
  37. package/dist/cjs/src/core/Step.d.ts.map +1 -1
  38. package/dist/cjs/src/core/Step.js.map +1 -1
  39. package/dist/cjs/src/core/ToolExecutor.d.ts +4 -2
  40. package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -1
  41. package/dist/cjs/src/core/ToolExecutor.js +13 -3
  42. package/dist/cjs/src/core/ToolExecutor.js.map +1 -1
  43. package/dist/cjs/src/index.d.ts +3 -1
  44. package/dist/cjs/src/index.d.ts.map +1 -1
  45. package/dist/cjs/src/index.js +7 -1
  46. package/dist/cjs/src/index.js.map +1 -1
  47. package/dist/cjs/src/types/agent.d.ts +42 -21
  48. package/dist/cjs/src/types/agent.d.ts.map +1 -1
  49. package/dist/cjs/src/types/agent.js.map +1 -1
  50. package/dist/cjs/src/types/ai.d.ts +1 -1
  51. package/dist/cjs/src/types/ai.d.ts.map +1 -1
  52. package/dist/cjs/src/types/index.d.ts +1 -1
  53. package/dist/cjs/src/types/index.d.ts.map +1 -1
  54. package/dist/cjs/src/types/index.js.map +1 -1
  55. package/dist/cjs/src/types/persistence.d.ts +0 -1
  56. package/dist/cjs/src/types/persistence.d.ts.map +1 -1
  57. package/dist/cjs/src/types/route.d.ts +22 -16
  58. package/dist/cjs/src/types/route.d.ts.map +1 -1
  59. package/dist/cjs/src/types/session.d.ts +6 -11
  60. package/dist/cjs/src/types/session.d.ts.map +1 -1
  61. package/dist/cjs/src/types/tool.d.ts +12 -6
  62. package/dist/cjs/src/types/tool.d.ts.map +1 -1
  63. package/dist/cjs/src/utils/clone.d.ts.map +1 -1
  64. package/dist/cjs/src/utils/clone.js +0 -4
  65. package/dist/cjs/src/utils/clone.js.map +1 -1
  66. package/dist/cjs/src/utils/history.d.ts +30 -1
  67. package/dist/cjs/src/utils/history.d.ts.map +1 -1
  68. package/dist/cjs/src/utils/history.js +169 -23
  69. package/dist/cjs/src/utils/history.js.map +1 -1
  70. package/dist/cjs/src/utils/index.d.ts +1 -1
  71. package/dist/cjs/src/utils/index.d.ts.map +1 -1
  72. package/dist/cjs/src/utils/index.js +5 -1
  73. package/dist/cjs/src/utils/index.js.map +1 -1
  74. package/dist/cjs/src/utils/session.d.ts +2 -2
  75. package/dist/cjs/src/utils/session.d.ts.map +1 -1
  76. package/dist/cjs/src/utils/session.js +6 -26
  77. package/dist/cjs/src/utils/session.js.map +1 -1
  78. package/dist/src/core/Agent.d.ts +77 -59
  79. package/dist/src/core/Agent.d.ts.map +1 -1
  80. package/dist/src/core/Agent.js +285 -1061
  81. package/dist/src/core/Agent.js.map +1 -1
  82. package/dist/src/core/PersistenceManager.d.ts.map +1 -1
  83. package/dist/src/core/PersistenceManager.js +48 -25
  84. package/dist/src/core/PersistenceManager.js.map +1 -1
  85. package/dist/src/core/PromptComposer.d.ts +1 -1
  86. package/dist/src/core/PromptComposer.d.ts.map +1 -1
  87. package/dist/src/core/PromptComposer.js.map +1 -1
  88. package/dist/src/core/ResponseEngine.d.ts +13 -12
  89. package/dist/src/core/ResponseEngine.d.ts.map +1 -1
  90. package/dist/src/core/ResponseEngine.js +4 -4
  91. package/dist/src/core/ResponseEngine.js.map +1 -1
  92. package/dist/src/core/ResponseModal.d.ts +205 -0
  93. package/dist/src/core/ResponseModal.d.ts.map +1 -0
  94. package/dist/src/core/ResponseModal.js +1323 -0
  95. package/dist/src/core/ResponseModal.js.map +1 -0
  96. package/dist/src/core/ResponsePipeline.d.ts +66 -38
  97. package/dist/src/core/ResponsePipeline.d.ts.map +1 -1
  98. package/dist/src/core/ResponsePipeline.js +72 -4
  99. package/dist/src/core/ResponsePipeline.js.map +1 -1
  100. package/dist/src/core/Route.d.ts +24 -5
  101. package/dist/src/core/Route.d.ts.map +1 -1
  102. package/dist/src/core/Route.js +45 -1
  103. package/dist/src/core/Route.js.map +1 -1
  104. package/dist/src/core/RoutingEngine.d.ts +31 -6
  105. package/dist/src/core/RoutingEngine.d.ts.map +1 -1
  106. package/dist/src/core/RoutingEngine.js +113 -9
  107. package/dist/src/core/RoutingEngine.js.map +1 -1
  108. package/dist/src/core/SessionManager.d.ts +14 -4
  109. package/dist/src/core/SessionManager.d.ts.map +1 -1
  110. package/dist/src/core/SessionManager.js +25 -5
  111. package/dist/src/core/SessionManager.js.map +1 -1
  112. package/dist/src/core/Step.d.ts +10 -10
  113. package/dist/src/core/Step.d.ts.map +1 -1
  114. package/dist/src/core/Step.js.map +1 -1
  115. package/dist/src/core/ToolExecutor.d.ts +4 -2
  116. package/dist/src/core/ToolExecutor.d.ts.map +1 -1
  117. package/dist/src/core/ToolExecutor.js +13 -3
  118. package/dist/src/core/ToolExecutor.js.map +1 -1
  119. package/dist/src/index.d.ts +3 -1
  120. package/dist/src/index.d.ts.map +1 -1
  121. package/dist/src/index.js +2 -1
  122. package/dist/src/index.js.map +1 -1
  123. package/dist/src/types/agent.d.ts +42 -21
  124. package/dist/src/types/agent.d.ts.map +1 -1
  125. package/dist/src/types/agent.js.map +1 -1
  126. package/dist/src/types/ai.d.ts +1 -1
  127. package/dist/src/types/ai.d.ts.map +1 -1
  128. package/dist/src/types/index.d.ts +1 -1
  129. package/dist/src/types/index.d.ts.map +1 -1
  130. package/dist/src/types/index.js.map +1 -1
  131. package/dist/src/types/persistence.d.ts +0 -1
  132. package/dist/src/types/persistence.d.ts.map +1 -1
  133. package/dist/src/types/route.d.ts +22 -16
  134. package/dist/src/types/route.d.ts.map +1 -1
  135. package/dist/src/types/session.d.ts +6 -11
  136. package/dist/src/types/session.d.ts.map +1 -1
  137. package/dist/src/types/tool.d.ts +12 -6
  138. package/dist/src/types/tool.d.ts.map +1 -1
  139. package/dist/src/utils/clone.d.ts.map +1 -1
  140. package/dist/src/utils/clone.js +0 -4
  141. package/dist/src/utils/clone.js.map +1 -1
  142. package/dist/src/utils/history.d.ts +30 -1
  143. package/dist/src/utils/history.d.ts.map +1 -1
  144. package/dist/src/utils/history.js +165 -23
  145. package/dist/src/utils/history.js.map +1 -1
  146. package/dist/src/utils/index.d.ts +1 -1
  147. package/dist/src/utils/index.d.ts.map +1 -1
  148. package/dist/src/utils/index.js +1 -1
  149. package/dist/src/utils/index.js.map +1 -1
  150. package/dist/src/utils/session.d.ts +2 -2
  151. package/dist/src/utils/session.d.ts.map +1 -1
  152. package/dist/src/utils/session.js +6 -26
  153. package/dist/src/utils/session.js.map +1 -1
  154. package/docs/README.md +5 -4
  155. package/docs/api/README.md +195 -4
  156. package/docs/api/overview.md +232 -13
  157. package/docs/core/agent/README.md +162 -17
  158. package/docs/core/agent/context-management.md +39 -15
  159. package/docs/core/agent/session-management.md +49 -16
  160. package/docs/core/ai-integration/prompt-composition.md +38 -14
  161. package/docs/core/ai-integration/response-processing.md +28 -17
  162. package/docs/core/conversation-flows/data-collection.md +103 -25
  163. package/docs/core/conversation-flows/route-dsl.md +45 -22
  164. package/docs/core/conversation-flows/routes.md +74 -18
  165. package/docs/core/conversation-flows/step-transitions.md +3 -3
  166. package/docs/core/conversation-flows/steps.md +39 -15
  167. package/docs/core/routing/intelligent-routing.md +18 -9
  168. package/docs/core/tools/tool-definition.md +8 -8
  169. package/docs/core/tools/tool-execution.md +26 -26
  170. package/docs/core/tools/tool-scoping.md +5 -5
  171. package/docs/guides/getting-started/README.md +54 -32
  172. package/docs/guides/migration/README.md +72 -0
  173. package/docs/guides/migration/response-modal-refactor.md +518 -0
  174. package/examples/advanced-patterns/knowledge-based-agent.ts +37 -28
  175. package/examples/advanced-patterns/persistent-onboarding.ts +70 -41
  176. package/examples/advanced-patterns/route-lifecycle-hooks.ts +28 -2
  177. package/examples/advanced-patterns/streaming-responses.ts +197 -119
  178. package/examples/ai-providers/anthropic-integration.ts +40 -33
  179. package/examples/ai-providers/openai-integration.ts +25 -25
  180. package/examples/conversation-flows/completion-transitions.ts +36 -32
  181. package/examples/core-concepts/basic-agent.ts +76 -78
  182. package/examples/core-concepts/modern-streaming-api.ts +309 -0
  183. package/examples/core-concepts/schema-driven-extraction.ts +20 -16
  184. package/examples/core-concepts/session-management.ts +65 -53
  185. package/examples/integrations/database-integration.ts +49 -34
  186. package/examples/integrations/healthcare-integration.ts +96 -91
  187. package/examples/integrations/search-integration.ts +79 -82
  188. package/examples/integrations/server-session-management.ts +25 -17
  189. package/examples/persistence/database-persistence.ts +61 -45
  190. package/examples/persistence/memory-sessions.ts +52 -63
  191. package/examples/persistence/redis-persistence.ts +81 -95
  192. package/examples/tools/basic-tools.ts +73 -62
  193. package/examples/tools/data-enrichment-tools.ts +52 -44
  194. package/package.json +1 -1
  195. package/src/core/Agent.ts +396 -1499
  196. package/src/core/PersistenceManager.ts +51 -27
  197. package/src/core/PromptComposer.ts +1 -1
  198. package/src/core/ResponseEngine.ts +21 -19
  199. package/src/core/ResponseModal.ts +1722 -0
  200. package/src/core/ResponsePipeline.ts +175 -60
  201. package/src/core/Route.ts +58 -6
  202. package/src/core/RoutingEngine.ts +174 -27
  203. package/src/core/SessionManager.ts +32 -8
  204. package/src/core/Step.ts +20 -12
  205. package/src/core/ToolExecutor.ts +19 -5
  206. package/src/index.ts +11 -0
  207. package/src/types/agent.ts +47 -23
  208. package/src/types/ai.ts +1 -1
  209. package/src/types/index.ts +2 -0
  210. package/src/types/persistence.ts +0 -1
  211. package/src/types/route.ts +22 -16
  212. package/src/types/session.ts +6 -12
  213. package/src/types/tool.ts +15 -9
  214. package/src/utils/clone.ts +6 -8
  215. package/src/utils/history.ts +190 -27
  216. package/src/utils/index.ts +4 -0
  217. package/src/utils/session.ts +6 -31
@@ -120,11 +120,37 @@ function createPersistentOnboardingAgent(sessionId: string) {
120
120
  model: "models/gemini-2.5-flash",
121
121
  });
122
122
 
123
- const agent = new Agent<OnboardingContext>({
123
+ // Define the onboarding schema
124
+ const onboardingSchema = {
125
+ type: "object",
126
+ properties: {
127
+ businessName: {
128
+ type: "string",
129
+ description: "Name of the business",
130
+ },
131
+ businessDescription: {
132
+ type: "string",
133
+ description: "Brief description of what the business does",
134
+ },
135
+ industry: {
136
+ type: "string",
137
+ description: "Industry the business operates in",
138
+ },
139
+ contactEmail: {
140
+ type: "string",
141
+ description: "Contact email for the business",
142
+ },
143
+ },
144
+ required: ["businessName", "businessDescription"],
145
+ };
146
+
147
+ const agent = new Agent<OnboardingContext, OnboardingData>({
124
148
  name: "OnboardingBot",
125
149
  description: "A friendly assistant that helps businesses get started",
126
150
  goal: "Collect business information efficiently while being conversational",
127
151
  provider: provider,
152
+ // NEW: Agent-level schema
153
+ schema: onboardingSchema,
128
154
 
129
155
  // Knowledge base with onboarding best practices
130
156
  knowledgeBase: {
@@ -204,9 +230,9 @@ function createPersistentOnboardingAgent(sessionId: string) {
204
230
  // OPTION 1: Using contextUpdate in return value
205
231
  const saveBusinessInfo: Tool<
206
232
  OnboardingContext,
233
+ OnboardingData,
207
234
  unknown[],
208
- unknown,
209
- OnboardingData
235
+ unknown
210
236
  > = {
211
237
  id: "save_business_info",
212
238
  name: "Business Info Saver",
@@ -244,9 +270,9 @@ function createPersistentOnboardingAgent(sessionId: string) {
244
270
  // OPTION 2: Using updateContext method directly
245
271
  const saveIndustry: Tool<
246
272
  OnboardingContext,
273
+ OnboardingData,
247
274
  unknown[],
248
- unknown,
249
- OnboardingData
275
+ unknown
250
276
  > = {
251
277
  id: "save_industry",
252
278
  name: "Industry Classifier",
@@ -277,9 +303,9 @@ function createPersistentOnboardingAgent(sessionId: string) {
277
303
 
278
304
  const saveContactEmail: Tool<
279
305
  OnboardingContext,
306
+ OnboardingData,
280
307
  unknown[],
281
- unknown,
282
- OnboardingData
308
+ unknown
283
309
  > = {
284
310
  id: "save_contact_email",
285
311
  name: "Contact Email Saver",
@@ -311,32 +337,14 @@ function createPersistentOnboardingAgent(sessionId: string) {
311
337
  // ONBOARDING ROUTE WITH DATA EXTRACTION
312
338
  // ============================================================================
313
339
 
314
- const onboardingRoute = agent.createRoute<OnboardingData>({
340
+ const onboardingRoute = agent.createRoute({
315
341
  title: "Business Onboarding",
316
342
  description: "Guide user through business information collection",
317
343
  conditions: ["User is onboarding their business"],
318
- schema: {
319
- type: "object",
320
- properties: {
321
- businessName: {
322
- type: "string",
323
- description: "Name of the business",
324
- },
325
- businessDescription: {
326
- type: "string",
327
- description: "Brief description of what the business does",
328
- },
329
- industry: {
330
- type: "string",
331
- description: "Industry the business operates in",
332
- },
333
- contactEmail: {
334
- type: "string",
335
- description: "Contact email for the business",
336
- },
337
- },
338
- required: ["businessName", "businessDescription"],
339
- },
344
+ // NEW: Required fields for route completion
345
+ requiredFields: ["businessName", "businessDescription"],
346
+ // NEW: Optional fields that enhance the experience
347
+ optionalFields: ["industry", "contactEmail"],
340
348
  endStep: {
341
349
  prompt:
342
350
  "Summarize all collected information warmly and confirm onboarding is complete",
@@ -428,10 +436,36 @@ function createOnboardingAgentWithProvider(sessionId: string) {
428
436
  model: "models/gemini-2.5-flash",
429
437
  });
430
438
 
431
- const agent = new Agent<OnboardingContext>({
439
+ // Define the onboarding schema
440
+ const onboardingSchema = {
441
+ type: "object",
442
+ properties: {
443
+ businessName: {
444
+ type: "string",
445
+ description: "Name of the business",
446
+ },
447
+ businessDescription: {
448
+ type: "string",
449
+ description: "Brief description of what the business does",
450
+ },
451
+ industry: {
452
+ type: "string",
453
+ description: "Industry the business operates in",
454
+ },
455
+ contactEmail: {
456
+ type: "string",
457
+ description: "Contact email for the business",
458
+ },
459
+ },
460
+ required: ["businessName", "businessDescription"],
461
+ };
462
+
463
+ const agent = new Agent<OnboardingContext, OnboardingData>({
432
464
  name: "OnboardingBot",
433
465
  description: "A friendly assistant that helps businesses get started",
434
466
  provider: provider,
467
+ // NEW: Agent-level schema
468
+ schema: onboardingSchema,
435
469
 
436
470
  // Context is always fetched fresh from database
437
471
  contextProvider: () => {
@@ -499,7 +533,7 @@ async function main() {
499
533
  });
500
534
 
501
535
  console.log("šŸ¤– Bot:", response1.message);
502
- console.log("šŸ“Š Data after turn 1:", agent.session.getData<OnboardingData>());
536
+ console.log("šŸ“Š Data after turn 1:", agent.session.getData());
503
537
  console.log("šŸ“Š Route:", response1.session?.currentRoute?.title);
504
538
 
505
539
  // Check route completion after turn 1
@@ -533,7 +567,7 @@ async function main() {
533
567
  name: "Alice",
534
568
  },
535
569
  ];
536
- const response2 = await agent.respond({ history: history2, session });
570
+ const response2 = await agent.respond({ history: history2 });
537
571
  console.log("šŸ¤– Bot:", response2.message);
538
572
  console.log("šŸ“Š Data after turn 2:", response2.session?.data);
539
573
 
@@ -547,8 +581,6 @@ async function main() {
547
581
 
548
582
  console.log();
549
583
 
550
- // Update session again
551
- session = response2.session!;
552
584
 
553
585
  // Turn 3: User provides industry
554
586
  console.log("šŸ“± Turn 3: User provides industry");
@@ -564,7 +596,7 @@ async function main() {
564
596
  name: "Alice",
565
597
  },
566
598
  ];
567
- const response3 = await agent.respond({ history: history3, session });
599
+ const response3 = await agent.respond({ history: history3 });
568
600
  console.log("šŸ¤– Bot:", response3.message);
569
601
  console.log("šŸ“Š Data after turn 3:", response3.session?.data);
570
602
 
@@ -578,9 +610,6 @@ async function main() {
578
610
 
579
611
  console.log();
580
612
 
581
- // Update session again
582
- session = response3.session!;
583
-
584
613
  // Turn 4: User provides contact email, completing the flow
585
614
  console.log("šŸ“± Turn 4: User provides contact email");
586
615
  const history4 = [
@@ -595,7 +624,7 @@ async function main() {
595
624
  name: "Alice",
596
625
  },
597
626
  ];
598
- const response4 = await agent.respond({ history: history4, session });
627
+ const response4 = await agent.respond({ history: history4 });
599
628
  console.log("šŸ¤– Bot:", response4.message);
600
629
  console.log("šŸ“Š Data after turn 4:", response4.session?.data);
601
630
 
@@ -603,7 +632,7 @@ async function main() {
603
632
  if (response4.isRouteComplete) {
604
633
  console.log("\nāœ… Onboarding complete!");
605
634
  await finalizeOnboarding(
606
- agent.getData(response4.session?.id) as unknown as OnboardingData
635
+ agent.getData() as unknown as OnboardingData
607
636
  );
608
637
  }
609
638
 
@@ -16,15 +16,39 @@ const provider = new OpenAIProvider({
16
16
  model: "gpt-5",
17
17
  });
18
18
 
19
+ // Define data schema for feedback collection
20
+ interface ServiceData {
21
+ feedbackRating?: number;
22
+ feedbackComments?: string;
23
+ }
24
+
25
+ const serviceSchema = {
26
+ type: "object",
27
+ properties: {
28
+ feedbackRating: {
29
+ type: "number",
30
+ description: "Rating from 1-5",
31
+ minimum: 1,
32
+ maximum: 5,
33
+ },
34
+ feedbackComments: {
35
+ type: "string",
36
+ description: "Additional feedback comments",
37
+ },
38
+ },
39
+ };
40
+
19
41
  /**
20
42
  * Create a new agent instance with predefined routes and rules/prohibitions.
21
43
  */
22
- const agent = new Agent({
44
+ const agent = new Agent<unknown, ServiceData>({
23
45
  name: "CustomerServiceAgent",
24
46
  description:
25
47
  "A versatile customer service agent that adapts its behavior based on the conversation's context.",
26
48
  goal: "Provide excellent customer service by following route-specific rules and prohibitions.",
27
49
  provider,
50
+ // NEW: Agent-level schema
51
+ schema: serviceSchema,
28
52
  debug: true,
29
53
 
30
54
  // Knowledge base with customer service best practices
@@ -223,12 +247,14 @@ agent.createRoute({
223
247
  * Demonstration function to show how the agent responds to different scenarios.
224
248
  */
225
249
  async function demonstrateRulesAndProhibitions() {
226
- const agent = new Agent({
250
+ const agent = new Agent<unknown, ServiceData>({
227
251
  name: "CustomerServiceAgent",
228
252
  description:
229
253
  "A versatile customer service agent that adapts its behavior based on the conversation's context.",
230
254
  goal: "Provide excellent customer service by following route-specific rules and prohibitions.",
231
255
  provider,
256
+ // NEW: Agent-level schema
257
+ schema: serviceSchema,
232
258
  debug: true,
233
259
  });
234
260