@falai/agent 0.7.0 → 0.8.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 (104) hide show
  1. package/README.md +23 -30
  2. package/dist/adapters/MemoryAdapter.d.ts +1 -1
  3. package/dist/adapters/MemoryAdapter.js +1 -1
  4. package/dist/adapters/MongoAdapter.d.ts +1 -1
  5. package/dist/adapters/MongoAdapter.js +1 -1
  6. package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
  7. package/dist/adapters/PostgreSQLAdapter.js +1 -1
  8. package/dist/adapters/PrismaAdapter.d.ts +1 -1
  9. package/dist/adapters/PrismaAdapter.js +1 -1
  10. package/dist/adapters/RedisAdapter.d.ts +1 -1
  11. package/dist/adapters/RedisAdapter.js +1 -1
  12. package/dist/adapters/SQLiteAdapter.d.ts +1 -1
  13. package/dist/adapters/SQLiteAdapter.js +1 -1
  14. package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
  15. package/dist/cjs/adapters/MemoryAdapter.js +1 -1
  16. package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
  17. package/dist/cjs/adapters/MongoAdapter.js +1 -1
  18. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
  19. package/dist/cjs/adapters/PostgreSQLAdapter.js +1 -1
  20. package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
  21. package/dist/cjs/adapters/PrismaAdapter.js +1 -1
  22. package/dist/cjs/adapters/RedisAdapter.d.ts +1 -1
  23. package/dist/cjs/adapters/RedisAdapter.js +1 -1
  24. package/dist/cjs/adapters/SQLiteAdapter.d.ts +1 -1
  25. package/dist/cjs/adapters/SQLiteAdapter.js +1 -1
  26. package/dist/cjs/core/Agent.d.ts +8 -8
  27. package/dist/cjs/core/Agent.d.ts.map +1 -1
  28. package/dist/cjs/core/Agent.js +10 -10
  29. package/dist/cjs/core/Agent.js.map +1 -1
  30. package/dist/cjs/core/PersistenceManager.d.ts +10 -10
  31. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  32. package/dist/cjs/core/PersistenceManager.js +9 -9
  33. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  34. package/dist/cjs/core/RoutingEngine.d.ts +5 -5
  35. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
  36. package/dist/cjs/core/RoutingEngine.js +5 -5
  37. package/dist/cjs/core/RoutingEngine.js.map +1 -1
  38. package/dist/cjs/index.d.ts +1 -1
  39. package/dist/cjs/index.d.ts.map +1 -1
  40. package/dist/cjs/types/agent.d.ts +3 -3
  41. package/dist/cjs/types/agent.d.ts.map +1 -1
  42. package/dist/cjs/types/session.d.ts +9 -9
  43. package/dist/cjs/types/session.d.ts.map +1 -1
  44. package/dist/cjs/types/session.js +2 -2
  45. package/dist/cjs/types/session.js.map +1 -1
  46. package/dist/core/Agent.d.ts +8 -8
  47. package/dist/core/Agent.d.ts.map +1 -1
  48. package/dist/core/Agent.js +10 -10
  49. package/dist/core/Agent.js.map +1 -1
  50. package/dist/core/PersistenceManager.d.ts +10 -10
  51. package/dist/core/PersistenceManager.d.ts.map +1 -1
  52. package/dist/core/PersistenceManager.js +9 -9
  53. package/dist/core/PersistenceManager.js.map +1 -1
  54. package/dist/core/RoutingEngine.d.ts +5 -5
  55. package/dist/core/RoutingEngine.d.ts.map +1 -1
  56. package/dist/core/RoutingEngine.js +5 -5
  57. package/dist/core/RoutingEngine.js.map +1 -1
  58. package/dist/index.d.ts +1 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/types/agent.d.ts +3 -3
  61. package/dist/types/agent.d.ts.map +1 -1
  62. package/dist/types/session.d.ts +9 -9
  63. package/dist/types/session.d.ts.map +1 -1
  64. package/dist/types/session.js +2 -2
  65. package/dist/types/session.js.map +1 -1
  66. package/docs/ADAPTERS.md +1 -1
  67. package/docs/AGENT.md +9 -9
  68. package/docs/API_REFERENCE.md +15 -15
  69. package/docs/CONTEXT_MANAGEMENT.md +6 -6
  70. package/docs/CONTRIBUTING.md +3 -3
  71. package/docs/DOMAINS.md +2 -2
  72. package/docs/EXAMPLES.md +1 -1
  73. package/docs/GETTING_STARTED.md +3 -3
  74. package/docs/PERSISTENCE.md +11 -11
  75. package/docs/PROVIDERS.md +4 -4
  76. package/examples/business-onboarding.ts +1 -1
  77. package/examples/company-qna-agent.ts +1 -1
  78. package/examples/custom-database-persistence.ts +8 -8
  79. package/examples/declarative-agent.ts +1 -1
  80. package/examples/domain-scoping.ts +2 -2
  81. package/examples/extracted-data-modification.ts +1 -1
  82. package/examples/healthcare-agent.ts +1 -1
  83. package/examples/openai-agent.ts +1 -1
  84. package/examples/opensearch-persistence.ts +4 -4
  85. package/examples/persistent-onboarding.ts +2 -2
  86. package/examples/prisma-persistence.ts +4 -4
  87. package/examples/redis-persistence.ts +5 -5
  88. package/examples/route-transitions.ts +4 -4
  89. package/examples/rules-prohibitions.ts +3 -3
  90. package/examples/streaming-agent.ts +5 -5
  91. package/examples/travel-agent.ts +1 -1
  92. package/package.json +1 -1
  93. package/src/adapters/MemoryAdapter.ts +1 -1
  94. package/src/adapters/MongoAdapter.ts +1 -1
  95. package/src/adapters/PostgreSQLAdapter.ts +1 -1
  96. package/src/adapters/PrismaAdapter.ts +1 -1
  97. package/src/adapters/RedisAdapter.ts +1 -1
  98. package/src/adapters/SQLiteAdapter.ts +1 -1
  99. package/src/core/Agent.ts +23 -23
  100. package/src/core/PersistenceManager.ts +13 -13
  101. package/src/core/RoutingEngine.ts +15 -13
  102. package/src/index.ts +1 -1
  103. package/src/types/agent.ts +3 -3
  104. package/src/types/session.ts +15 -15
@@ -98,7 +98,7 @@ interface BookingData {
98
98
 
99
99
  const agent = new Agent({
100
100
  name: "My Agent",
101
- ai: new GeminiProvider({ apiKey: "..." }),
101
+ provider: new GeminiProvider({ apiKey: "..." }),
102
102
  // ✨ Just add this!
103
103
  persistence: {
104
104
  adapter: new PrismaAdapter({ prisma }),
@@ -219,7 +219,7 @@ Enable automatic message persistence:
219
219
  ```typescript
220
220
  const agent = new Agent({
221
221
  name: "My Agent",
222
- ai: provider,
222
+ provider: provider,
223
223
  persistence: {
224
224
  adapter: new PrismaAdapter({ prisma }),
225
225
  autoSave: true, // Default: true
@@ -235,7 +235,7 @@ The most powerful pattern - auto-sync context with database:
235
235
  ```typescript
236
236
  const agent = new Agent({
237
237
  name: "Smart Assistant",
238
- ai: provider,
238
+ provider: provider,
239
239
  context: {
240
240
  userId: "user_123",
241
241
  sessionId: session.id,
@@ -270,7 +270,7 @@ await agent.updateContext({ preferences: { theme: "dark" } });
270
270
 
271
271
  ## Session Step Integration
272
272
 
273
- The new architecture automatically saves and loads `SessionStep<TData>` which includes:
273
+ The new architecture automatically saves and loads `SessionState<TData>` which includes:
274
274
 
275
275
  - **Current route and step** - Track conversation progress
276
276
  - **Collected data** - All data collected via `schema` and `collect` fields
@@ -280,7 +280,7 @@ The new architecture automatically saves and loads `SessionStep<TData>` which in
280
280
  ### How It Works
281
281
 
282
282
  1. **Auto-Save**: When `autoSave: true`, session step is automatically persisted after each `respond()` call
283
- 2. **Conversion**: `SessionStep` is automatically converted to `SessionData` for storage
283
+ 2. **Conversion**: `SessionState` is automatically converted to `SessionData` for storage
284
284
  3. **Recovery**: Load session step from database to resume conversations
285
285
 
286
286
  ### Create Session with Step
@@ -303,14 +303,14 @@ const { sessionData, sessionStep } =
303
303
 
304
304
  ```typescript
305
305
  // Manual save (not needed if autoSave: true)
306
- await persistence.saveSessionStep(sessionId, sessionStep);
306
+ await persistence.saveSessionState(sessionId, sessionStep);
307
307
  ```
308
308
 
309
309
  ### Load Session Step
310
310
 
311
311
  ```typescript
312
312
  // Load session step from database
313
- const sessionStep = await persistence.loadSessionStep<YourDataType>(sessionId);
313
+ const sessionStep = await persistence.loadSessionState<YourDataType>(sessionId);
314
314
 
315
315
  // Load message history
316
316
  const history = await persistence.loadSessionHistory(sessionId);
@@ -374,10 +374,10 @@ const { sessionData, sessionStep } =
374
374
  });
375
375
 
376
376
  // Save session step (NEW!)
377
- await persistence.saveSessionStep(sessionId, sessionStep);
377
+ await persistence.saveSessionState(sessionId, sessionStep);
378
378
 
379
379
  // Load session step (NEW!)
380
- const sessionStep = await persistence.loadSessionStep<YourDataType>(sessionId);
380
+ const sessionStep = await persistence.loadSessionState<YourDataType>(sessionId);
381
381
 
382
382
  // Create session (legacy)
383
383
  await persistence.createSession({
@@ -478,7 +478,7 @@ import { PrismaClient } from "@prisma/client";
478
478
  const prisma = new PrismaClient();
479
479
  const agent = new Agent({
480
480
  name: "Assistant",
481
- ai: provider,
481
+ provider: provider,
482
482
  persistence: {
483
483
  adapter: new PrismaAdapter({ prisma }),
484
484
  },
@@ -531,7 +531,7 @@ await persistence.saveMessage({
531
531
  2. ✅ **Enable `autoSave: true`** - Automatically persist session step after each response
532
532
  3. ✅ **Define extraction schemas** - Use `schema` in routes for structured data collection
533
533
  4. ✅ **Pass session step** - Always pass `session` parameter to `agent.respond()`
534
- 5. ✅ **Load session step** - Use `loadSessionStep()` to resume conversations
534
+ 5. ✅ **Load session step** - Use `loadSessionState()` to resume conversations
535
535
  6. ✅ **Store collected data** - Leverage `collectedData.data` for user input tracking
536
536
  7. ✅ **Index frequently queried fields** - Add database indexes on `userId`, `status`, etc.
537
537
  8. ✅ **Use cascading deletes** - Clean up messages automatically when deleting sessions
package/docs/PROVIDERS.md CHANGED
@@ -385,7 +385,7 @@ import {
385
385
  // Use Anthropic (Claude)
386
386
  const claudeAgent = new Agent({
387
387
  name: "Claude Assistant",
388
- ai: new AnthropicProvider({
388
+ provider: new AnthropicProvider({
389
389
  apiKey: process.env.ANTHROPIC_API_KEY!,
390
390
  model: "claude-sonnet-4-5",
391
391
  }),
@@ -394,7 +394,7 @@ const claudeAgent = new Agent({
394
394
  // Use Gemini
395
395
  const geminiAgent = new Agent({
396
396
  name: "Gemini Assistant",
397
- ai: new GeminiProvider({
397
+ provider: new GeminiProvider({
398
398
  apiKey: process.env.GEMINI_API_KEY!,
399
399
  model: "models/gemini-2.5-flash",
400
400
  }),
@@ -403,7 +403,7 @@ const geminiAgent = new Agent({
403
403
  // Use OpenAI
404
404
  const openaiAgent = new Agent({
405
405
  name: "OpenAI Assistant",
406
- ai: new OpenAIProvider({
406
+ provider: new OpenAIProvider({
407
407
  apiKey: process.env.OPENAI_API_KEY!,
408
408
  model: "gpt-5",
409
409
  }),
@@ -412,7 +412,7 @@ const openaiAgent = new Agent({
412
412
  // Use OpenRouter (access to 200+ models)
413
413
  const openrouterAgent = new Agent({
414
414
  name: "OpenRouter Assistant",
415
- ai: new OpenRouterProvider({
415
+ provider: new OpenRouterProvider({
416
416
  apiKey: process.env.OPENROUTER_API_KEY!,
417
417
  model: "anthropic/claude-sonnet-4-5",
418
418
  }),
@@ -379,7 +379,7 @@ async function createBusinessOnboardingAgent(
379
379
  description:
380
380
  "A specialized assistant that helps businesses set up intelligent conversation routes for their customers.",
381
381
  goal: "Collect comprehensive business information and create personalized conversation routes",
382
- ai: provider,
382
+ provider: provider,
383
383
  context: {
384
384
  userId,
385
385
  userName,
@@ -146,7 +146,7 @@ const agent = new Agent<CompanyContext>({
146
146
  "I'm here to help you learn about Acme Corp, our products, and policies",
147
147
  personality:
148
148
  "Friendly, helpful, and knowledgeable. Always professional but approachable.",
149
- ai: new OpenAIProvider({
149
+ provider: new OpenAIProvider({
150
150
  apiKey: process.env.OPENAI_API_KEY || "test-key",
151
151
  model: "gpt-5o-mini",
152
152
  }),
@@ -16,7 +16,7 @@ import {
16
16
  createMessageEvent,
17
17
  EventSource,
18
18
  createSession,
19
- SessionStep,
19
+ SessionState,
20
20
  MessageEventData,
21
21
  Event,
22
22
  END_ROUTE,
@@ -133,7 +133,7 @@ async function example() {
133
133
  name: "Onboarding Assistant",
134
134
  description: "Help new customers get started",
135
135
  goal: "Collect customer information efficiently",
136
- ai: new GeminiProvider({
136
+ provider: new GeminiProvider({
137
137
  apiKey: process.env.GEMINI_API_KEY!,
138
138
  model: "models/gemini-2.0-flash-exp",
139
139
  }),
@@ -218,9 +218,9 @@ async function example() {
218
218
  }
219
219
 
220
220
  /**
221
- * Convert database session to agent SessionStep
221
+ * Convert database session to agent SessionState
222
222
  */
223
- let agentSession: SessionStep<OnboardingData>;
223
+ let agentSession: SessionState<OnboardingData>;
224
224
 
225
225
  if (dbSession.currentRoute && dbSession.collectedData) {
226
226
  // Restore existing session from database
@@ -248,7 +248,7 @@ async function example() {
248
248
  >) || {},
249
249
  routeHistory:
250
250
  (dbSession.collectedData
251
- ?.routeHistory as SessionStep<OnboardingData>["routeHistory"]) || [],
251
+ ?.routeHistory as SessionState<OnboardingData>["routeHistory"]) || [],
252
252
  metadata: {
253
253
  sessionId: dbSession.id,
254
254
  userId,
@@ -404,7 +404,7 @@ async function example() {
404
404
  if (!reloadedDbSession) throw new Error("Session not found");
405
405
 
406
406
  // Reconstruct session step
407
- const recoveredSession: SessionStep<OnboardingData> = {
407
+ const recoveredSession: SessionState<OnboardingData> = {
408
408
  currentRoute: reloadedDbSession.currentRoute
409
409
  ? {
410
410
  id: reloadedDbSession.currentRoute,
@@ -430,7 +430,7 @@ async function example() {
430
430
  >) || {},
431
431
  routeHistory:
432
432
  (reloadedDbSession.collectedData
433
- ?.routeHistory as SessionStep<OnboardingData>["routeHistory"]) || [],
433
+ ?.routeHistory as SessionState<OnboardingData>["routeHistory"]) || [],
434
434
  metadata: {
435
435
  sessionId: reloadedDbSession.id,
436
436
  userId,
@@ -479,7 +479,7 @@ async function advancedExample() {
479
479
 
480
480
  const agent = new Agent({
481
481
  name: "Smart Onboarding",
482
- ai: new GeminiProvider({
482
+ provider: new GeminiProvider({
483
483
  apiKey: process.env.GEMINI_API_KEY!,
484
484
  model: "models/gemini-2.0-flash-exp",
485
485
  }),
@@ -296,7 +296,7 @@ const agent = new Agent<HealthcareContext>({
296
296
  patientId: "p_12345",
297
297
  patientName: "Alice Johnson",
298
298
  },
299
- ai: new GeminiProvider({
299
+ provider: new GeminiProvider({
300
300
  apiKey: process.env.GEMINI_API_KEY || "demo-key",
301
301
  model: "models/gemini-2.5-flash",
302
302
  }),
@@ -23,7 +23,7 @@ import {
23
23
  import { OpenRouterProvider } from "../src/providers";
24
24
 
25
25
  // Initialize AI provider
26
- const ai = new OpenRouterProvider({
26
+ const provider = new OpenRouterProvider({
27
27
  apiKey: process.env.OPENROUTER_API_KEY || "your-api-key-here",
28
28
  model: "google/gemini-2.0-flash-exp",
29
29
  backupModels: ["anthropic/claude-sonnet-4-5"],
@@ -34,7 +34,7 @@ const agent = new Agent({
34
34
  name: "Multi-Domain Assistant",
35
35
  description:
36
36
  "An assistant that handles different tasks with domain-scoped tools",
37
- ai,
37
+ provider,
38
38
  });
39
39
 
40
40
  // Register different domains with their tools
@@ -252,7 +252,7 @@ const agent = new Agent<FlightBookingContext>({
252
252
  name: "Flight Booking Agent",
253
253
  goal: "Help users book flights efficiently",
254
254
  description: "I help you find and book flights",
255
- ai: new OpenAIProvider({
255
+ provider: new OpenAIProvider({
256
256
  apiKey: process.env.OPENAI_API_KEY || "your-api-key-here",
257
257
  model: "gpt-5o-mini",
258
258
  }),
@@ -106,7 +106,7 @@ async function createHealthcareAgent() {
106
106
  const agent = new Agent<HealthcareContext>({
107
107
  name: "Healthcare Agent",
108
108
  description: "Is empathetic and calming to the patient.",
109
- ai: provider,
109
+ provider: provider,
110
110
  context: {
111
111
  patientId: "patient-123",
112
112
  patientName: "Test Patient",
@@ -84,7 +84,7 @@ async function main() {
84
84
  name: "Alice",
85
85
  preferences: ["concise answers", "weather updates"],
86
86
  },
87
- ai: openaiProvider,
87
+ provider: openaiProvider,
88
88
  });
89
89
 
90
90
  // Add domain knowledge
@@ -81,7 +81,7 @@ async function example() {
81
81
  name: "Customer Service Agent",
82
82
  description: "Handle customer complaints with full-text search",
83
83
  goal: "Resolve customer issues efficiently",
84
- ai: new GeminiProvider({
84
+ provider: new GeminiProvider({
85
85
  apiKey: process.env.GEMINI_API_KEY!,
86
86
  model: "models/gemini-2.0-flash-exp",
87
87
  }),
@@ -248,7 +248,7 @@ async function example() {
248
248
 
249
249
  // Load session from OpenSearch
250
250
  console.log("\n--- Loading Session from OpenSearch ---");
251
- const loadedSession = await persistence.loadSessionStep<ComplaintData>(
251
+ const loadedSession = await persistence.loadSessionState<ComplaintData>(
252
252
  sessionData.id
253
253
  );
254
254
 
@@ -331,7 +331,7 @@ async function analyticsExample() {
331
331
 
332
332
  const agent = new Agent({
333
333
  name: "Support Analyzer",
334
- ai: new GeminiProvider({
334
+ provider: new GeminiProvider({
335
335
  apiKey: process.env.GEMINI_API_KEY!,
336
336
  model: "models/gemini-2.0-flash-exp",
337
337
  }),
@@ -442,7 +442,7 @@ async function timeSeriesExample() {
442
442
 
443
443
  const agent = new Agent({
444
444
  name: "Metrics Agent",
445
- ai: new GeminiProvider({
445
+ provider: new GeminiProvider({
446
446
  apiKey: process.env.GEMINI_API_KEY!,
447
447
  model: "models/gemini-2.0-flash-exp",
448
448
  }),
@@ -130,7 +130,7 @@ async function createPersistentOnboardingAgent(sessionId: string) {
130
130
  name: "OnboardingBot",
131
131
  description: "A friendly assistant that helps businesses get started",
132
132
  goal: "Collect business information efficiently while being conversational",
133
- ai: provider,
133
+ provider: provider,
134
134
  // Context is loaded fresh from database on each respond() call
135
135
  contextProvider: async () => {
136
136
  console.log("🔄 Loading fresh context from database...");
@@ -359,7 +359,7 @@ async function createOnboardingAgentWithProvider(sessionId: string) {
359
359
  const agent = new Agent<OnboardingContext>({
360
360
  name: "OnboardingBot",
361
361
  description: "A friendly assistant that helps businesses get started",
362
- ai: provider,
362
+ provider: provider,
363
363
 
364
364
  // Context is always fetched fresh from database
365
365
  contextProvider: async () => {
@@ -85,7 +85,7 @@ async function example() {
85
85
  name: "Travel Assistant",
86
86
  description: "A helpful travel booking assistant",
87
87
  goal: "Help users book flights with ease",
88
- ai: new GeminiProvider({
88
+ provider: new GeminiProvider({
89
89
  apiKey: process.env.GEMINI_API_KEY!,
90
90
  model: "models/gemini-2.0-flash-exp",
91
91
  }),
@@ -333,7 +333,7 @@ async function example() {
333
333
  * Load session step from database (demonstrates persistence)
334
334
  */
335
335
  console.log("\n--- Loading Session from Database ---");
336
- const loadedSession = await persistence.loadSessionStep<FlightBookingData>(
336
+ const loadedSession = await persistence.loadSessionState<FlightBookingData>(
337
337
  dbSessionId
338
338
  );
339
339
 
@@ -383,7 +383,7 @@ async function advancedExample() {
383
383
  const agent = new Agent<UserContext>({
384
384
  name: "Onboarding Assistant",
385
385
  description: "Help new users get started",
386
- ai: new GeminiProvider({
386
+ provider: new GeminiProvider({
387
387
  apiKey: process.env.GEMINI_API_KEY!,
388
388
  model: "models/gemini-2.0-flash-exp",
389
389
  }),
@@ -517,7 +517,7 @@ async function quickStart() {
517
517
 
518
518
  const agent = new Agent({
519
519
  name: "Support Agent",
520
- ai: new GeminiProvider({
520
+ provider: new GeminiProvider({
521
521
  apiKey: process.env.GEMINI_API_KEY!,
522
522
  model: "models/gemini-2.0-flash-exp",
523
523
  }),
@@ -69,7 +69,7 @@ async function example() {
69
69
  name: "Support Assistant",
70
70
  description: "Fast, real-time support assistant",
71
71
  goal: "Help users resolve issues quickly",
72
- ai: new GeminiProvider({
72
+ provider: new GeminiProvider({
73
73
  apiKey: process.env.GEMINI_API_KEY!,
74
74
  model: "models/gemini-2.0-flash-exp",
75
75
  }),
@@ -251,7 +251,7 @@ async function example() {
251
251
 
252
252
  // Load session step from Redis (demonstrates persistence)
253
253
  console.log("\n--- Loading Session from Redis ---");
254
- const loadedSession = await persistence.loadSessionStep<SupportTicketData>(
254
+ const loadedSession = await persistence.loadSessionState<SupportTicketData>(
255
255
  sessionData.id
256
256
  );
257
257
 
@@ -281,7 +281,7 @@ async function highThroughputExample() {
281
281
  const agent = new Agent({
282
282
  name: "Chat Bot",
283
283
  description: "Fast chat responses",
284
- ai: new GeminiProvider({
284
+ provider: new GeminiProvider({
285
285
  apiKey: process.env.GEMINI_API_KEY!,
286
286
  model: "models/gemini-2.0-flash-exp",
287
287
  }),
@@ -366,7 +366,7 @@ async function sessionRecoveryExample() {
366
366
 
367
367
  const agent = new Agent({
368
368
  name: "Order Assistant",
369
- ai: new GeminiProvider({
369
+ provider: new GeminiProvider({
370
370
  apiKey: process.env.GEMINI_API_KEY!,
371
371
  model: "models/gemini-2.0-flash-exp",
372
372
  }),
@@ -433,7 +433,7 @@ async function sessionRecoveryExample() {
433
433
  console.log("\n--- User Reconnects ---");
434
434
 
435
435
  // Load session from Redis
436
- const recoveredSession = await persistence.loadSessionStep<OrderData>(
436
+ const recoveredSession = await persistence.loadSessionState<OrderData>(
437
437
  sessionId
438
438
  );
439
439
 
@@ -14,7 +14,7 @@ import {
14
14
  createMessageEvent,
15
15
  EventSource,
16
16
  END_ROUTE,
17
- type SessionStep,
17
+ type SessionState,
18
18
  } from "../src/index";
19
19
 
20
20
  // Type definitions for our booking data
@@ -34,7 +34,7 @@ async function main() {
34
34
  const agent = new Agent({
35
35
  name: "HotelBot",
36
36
  description: "A hotel booking assistant with feedback collection",
37
- ai: new GeminiProvider({
37
+ provider: new GeminiProvider({
38
38
  apiKey: process.env.GEMINI_API_KEY!,
39
39
  model: "models/gemini-2.0-flash-exp",
40
40
  }),
@@ -138,7 +138,7 @@ async function main() {
138
138
  console.log("\n=== Route Transitions Example ===\n");
139
139
 
140
140
  // Conversation 1: User provides all booking info at once
141
- let session: SessionStep | undefined;
141
+ let session: SessionState | undefined;
142
142
  let history = [
143
143
  createMessageEvent(
144
144
  EventSource.CUSTOMER,
@@ -209,7 +209,7 @@ async function main() {
209
209
  console.log("\n=== Manual Transition Example ===\n");
210
210
 
211
211
  // Demonstrate manual transition using agent.nextStepRoute()
212
- let session2: SessionStep | undefined;
212
+ let session2: SessionState | undefined;
213
213
  let history2 = [
214
214
  createMessageEvent(
215
215
  EventSource.CUSTOMER,
@@ -19,7 +19,7 @@ import { OpenAIProvider } from "../src/providers/OpenAIProvider";
19
19
  /**
20
20
  * Configuration for the AI provider
21
21
  */
22
- const ai = new OpenAIProvider({
22
+ const provider = new OpenAIProvider({
23
23
  apiKey: process.env.OPENAI_API_KEY || "your-api-key-here",
24
24
  model: "gpt-5",
25
25
  });
@@ -32,7 +32,7 @@ const agent = new Agent({
32
32
  description:
33
33
  "A versatile customer service agent that adapts its behavior based on the conversation's context.",
34
34
  goal: "Provide excellent customer service by following route-specific rules and prohibitions.",
35
- ai,
35
+ provider,
36
36
  debug: true,
37
37
  });
38
38
 
@@ -166,7 +166,7 @@ async function demonstrateRulesAndProhibitions() {
166
166
  description:
167
167
  "A versatile customer service agent that adapts its behavior based on the conversation's context.",
168
168
  goal: "Provide excellent customer service by following route-specific rules and prohibitions.",
169
- ai,
169
+ provider,
170
170
  debug: true,
171
171
  });
172
172
 
@@ -51,7 +51,7 @@ async function streamingWithAnthropic() {
51
51
  streamingEnabled: true,
52
52
  },
53
53
  },
54
- ai: provider,
54
+ provider: provider,
55
55
  });
56
56
 
57
57
  // Add guidelines
@@ -127,7 +127,7 @@ async function streamingWithOpenAI() {
127
127
  streamingEnabled: true,
128
128
  },
129
129
  },
130
- ai: provider,
130
+ provider: provider,
131
131
  });
132
132
 
133
133
  const history = [
@@ -187,7 +187,7 @@ async function streamingWithGemini() {
187
187
  streamingEnabled: true,
188
188
  },
189
189
  },
190
- ai: provider,
190
+ provider: provider,
191
191
  });
192
192
 
193
193
  const history = [
@@ -244,7 +244,7 @@ async function streamingWithRoutes() {
244
244
  streamingEnabled: true,
245
245
  },
246
246
  },
247
- ai: provider,
247
+ provider: provider,
248
248
  });
249
249
 
250
250
  // Create a route
@@ -357,7 +357,7 @@ async function streamingWithAbortSignal() {
357
357
  streamingEnabled: true,
358
358
  },
359
359
  },
360
- ai: provider,
360
+ provider: provider,
361
361
  });
362
362
 
363
363
  const history = [
@@ -189,7 +189,7 @@ async function createTravelAgent() {
189
189
  description:
190
190
  "A knowledgeable travel agent who helps book flights, answer travel questions, and manage reservations.",
191
191
  goal: "Help customers book travel and manage their reservations",
192
- ai: provider,
192
+ provider: provider,
193
193
  context: {
194
194
  customerId: "test-123",
195
195
  customerName: "Test Customer",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@falai/agent",
3
- "version": "0.7.0",
3
+ "version": "0.8.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",
@@ -27,7 +27,7 @@ import type {
27
27
  *
28
28
  * const agent = new Agent({
29
29
  * name: "My Agent",
30
- * ai: provider,
30
+ * provider: provider,
31
31
  * persistence: {
32
32
  * adapter: new MemoryAdapter(),
33
33
  * userId: "user_123",
@@ -87,7 +87,7 @@ export interface MongoAdapterOptions {
87
87
  *
88
88
  * const agent = new Agent({
89
89
  * name: "My Agent",
90
- * ai: provider,
90
+ * provider: provider,
91
91
  * persistence: {
92
92
  * adapter: new MongoAdapter({
93
93
  * client,
@@ -68,7 +68,7 @@ export interface PostgreSQLAdapterOptions {
68
68
  *
69
69
  * const agent = new Agent({
70
70
  * name: "My Agent",
71
- * ai: provider,
71
+ * provider: provider,
72
72
  * persistence: {
73
73
  * adapter: new PostgreSQLAdapter({ client }),
74
74
  * userId: "user_123",
@@ -107,7 +107,7 @@ export interface PrismaAdapterOptions {
107
107
  *
108
108
  * const agent = new Agent({
109
109
  * name: "My Agent",
110
- * ai: provider,
110
+ * provider: provider,
111
111
  * persistence: {
112
112
  * adapter: new PrismaAdapter({ prisma }),
113
113
  * userId: "user_123",
@@ -64,7 +64,7 @@ export interface RedisAdapterOptions {
64
64
  *
65
65
  * const agent = new Agent({
66
66
  * name: "My Agent",
67
- * ai: provider,
67
+ * provider: provider,
68
68
  * persistence: {
69
69
  * adapter: new RedisAdapter({ redis }),
70
70
  * userId: "user_123",
@@ -60,7 +60,7 @@ export interface SQLiteAdapterOptions {
60
60
  *
61
61
  * const agent = new Agent({
62
62
  * name: "My Agent",
63
- * ai: provider,
63
+ * provider: provider,
64
64
  * persistence: {
65
65
  * adapter: new SQLiteAdapter({ db }),
66
66
  * userId: "user_123",