@falai/agent 0.6.8 → 0.7.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 (231) hide show
  1. package/README.md +62 -59
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.js +7 -7
  7. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  8. package/dist/adapters/PostgreSQLAdapter.js +9 -9
  9. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  10. package/dist/adapters/PrismaAdapter.js +3 -3
  11. package/dist/adapters/PrismaAdapter.js.map +1 -1
  12. package/dist/adapters/RedisAdapter.js +2 -2
  13. package/dist/adapters/RedisAdapter.js.map +1 -1
  14. package/dist/adapters/SQLiteAdapter.d.ts +3 -3
  15. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  16. package/dist/adapters/SQLiteAdapter.js +11 -11
  17. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  18. package/dist/adapters/index.d.ts +1 -1
  19. package/dist/adapters/index.d.ts.map +1 -1
  20. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  21. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  22. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  23. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  24. package/dist/cjs/adapters/OpenSearchAdapter.js +7 -7
  25. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  26. package/dist/cjs/adapters/PostgreSQLAdapter.js +9 -9
  27. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PrismaAdapter.js +3 -3
  29. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  30. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  31. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/SQLiteAdapter.d.ts +3 -3
  33. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  34. package/dist/cjs/adapters/SQLiteAdapter.js +11 -11
  35. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/index.d.ts +1 -1
  37. package/dist/cjs/adapters/index.d.ts.map +1 -1
  38. package/dist/cjs/constants/index.d.ts +4 -4
  39. package/dist/cjs/constants/index.js +5 -5
  40. package/dist/cjs/core/Agent.d.ts +22 -22
  41. package/dist/cjs/core/Agent.d.ts.map +1 -1
  42. package/dist/cjs/core/Agent.js +160 -152
  43. package/dist/cjs/core/Agent.js.map +1 -1
  44. package/dist/cjs/core/Events.d.ts +6 -6
  45. package/dist/cjs/core/Events.d.ts.map +1 -1
  46. package/dist/cjs/core/PersistenceManager.d.ts +13 -13
  47. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  48. package/dist/cjs/core/PersistenceManager.js +24 -24
  49. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  50. package/dist/cjs/core/ResponseEngine.d.ts +3 -8
  51. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  52. package/dist/cjs/core/ResponseEngine.js +8 -8
  53. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  54. package/dist/cjs/core/Route.d.ts +17 -17
  55. package/dist/cjs/core/Route.d.ts.map +1 -1
  56. package/dist/cjs/core/Route.js +33 -33
  57. package/dist/cjs/core/Route.js.map +1 -1
  58. package/dist/cjs/core/RoutingEngine.d.ts +30 -30
  59. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
  60. package/dist/cjs/core/RoutingEngine.js +192 -192
  61. package/dist/cjs/core/RoutingEngine.js.map +1 -1
  62. package/dist/cjs/core/Step.d.ts +72 -0
  63. package/dist/cjs/core/Step.d.ts.map +1 -0
  64. package/dist/cjs/core/Step.js +150 -0
  65. package/dist/cjs/core/Step.js.map +1 -0
  66. package/dist/cjs/core/ToolExecutor.d.ts +5 -5
  67. package/dist/cjs/core/ToolExecutor.d.ts.map +1 -1
  68. package/dist/cjs/core/ToolExecutor.js +8 -8
  69. package/dist/cjs/core/ToolExecutor.js.map +1 -1
  70. package/dist/cjs/core/Transition.d.ts +14 -14
  71. package/dist/cjs/core/Transition.d.ts.map +1 -1
  72. package/dist/cjs/core/Transition.js +48 -19
  73. package/dist/cjs/core/Transition.js.map +1 -1
  74. package/dist/cjs/index.d.ts +7 -7
  75. package/dist/cjs/index.d.ts.map +1 -1
  76. package/dist/cjs/index.js +8 -8
  77. package/dist/cjs/index.js.map +1 -1
  78. package/dist/cjs/types/agent.d.ts +8 -8
  79. package/dist/cjs/types/agent.d.ts.map +1 -1
  80. package/dist/cjs/types/ai.d.ts +2 -2
  81. package/dist/cjs/types/ai.d.ts.map +1 -1
  82. package/dist/cjs/types/history.d.ts +3 -3
  83. package/dist/cjs/types/history.d.ts.map +1 -1
  84. package/dist/cjs/types/index.d.ts +1 -1
  85. package/dist/cjs/types/index.d.ts.map +1 -1
  86. package/dist/cjs/types/persistence.d.ts +5 -5
  87. package/dist/cjs/types/persistence.d.ts.map +1 -1
  88. package/dist/cjs/types/route.d.ts +57 -52
  89. package/dist/cjs/types/route.d.ts.map +1 -1
  90. package/dist/cjs/types/session.d.ts +27 -27
  91. package/dist/cjs/types/session.d.ts.map +1 -1
  92. package/dist/cjs/types/session.js +48 -50
  93. package/dist/cjs/types/session.js.map +1 -1
  94. package/dist/cjs/types/tool.d.ts +13 -13
  95. package/dist/cjs/types/tool.d.ts.map +1 -1
  96. package/dist/cjs/utils/id.d.ts +8 -3
  97. package/dist/cjs/utils/id.d.ts.map +1 -1
  98. package/dist/cjs/utils/id.js +16 -7
  99. package/dist/cjs/utils/id.js.map +1 -1
  100. package/dist/constants/index.d.ts +4 -4
  101. package/dist/constants/index.js +4 -4
  102. package/dist/core/Agent.d.ts +22 -22
  103. package/dist/core/Agent.d.ts.map +1 -1
  104. package/dist/core/Agent.js +162 -154
  105. package/dist/core/Agent.js.map +1 -1
  106. package/dist/core/Events.d.ts +6 -6
  107. package/dist/core/Events.d.ts.map +1 -1
  108. package/dist/core/PersistenceManager.d.ts +13 -13
  109. package/dist/core/PersistenceManager.d.ts.map +1 -1
  110. package/dist/core/PersistenceManager.js +25 -25
  111. package/dist/core/PersistenceManager.js.map +1 -1
  112. package/dist/core/ResponseEngine.d.ts +3 -8
  113. package/dist/core/ResponseEngine.d.ts.map +1 -1
  114. package/dist/core/ResponseEngine.js +8 -8
  115. package/dist/core/ResponseEngine.js.map +1 -1
  116. package/dist/core/Route.d.ts +17 -17
  117. package/dist/core/Route.d.ts.map +1 -1
  118. package/dist/core/Route.js +33 -33
  119. package/dist/core/Route.js.map +1 -1
  120. package/dist/core/RoutingEngine.d.ts +30 -30
  121. package/dist/core/RoutingEngine.d.ts.map +1 -1
  122. package/dist/core/RoutingEngine.js +193 -193
  123. package/dist/core/RoutingEngine.js.map +1 -1
  124. package/dist/core/Step.d.ts +72 -0
  125. package/dist/core/Step.d.ts.map +1 -0
  126. package/dist/core/Step.js +146 -0
  127. package/dist/core/Step.js.map +1 -0
  128. package/dist/core/ToolExecutor.d.ts +5 -5
  129. package/dist/core/ToolExecutor.d.ts.map +1 -1
  130. package/dist/core/ToolExecutor.js +8 -8
  131. package/dist/core/ToolExecutor.js.map +1 -1
  132. package/dist/core/Transition.d.ts +14 -14
  133. package/dist/core/Transition.d.ts.map +1 -1
  134. package/dist/core/Transition.js +48 -19
  135. package/dist/core/Transition.js.map +1 -1
  136. package/dist/index.d.ts +7 -7
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +4 -4
  139. package/dist/index.js.map +1 -1
  140. package/dist/types/agent.d.ts +8 -8
  141. package/dist/types/agent.d.ts.map +1 -1
  142. package/dist/types/ai.d.ts +2 -2
  143. package/dist/types/ai.d.ts.map +1 -1
  144. package/dist/types/history.d.ts +3 -3
  145. package/dist/types/history.d.ts.map +1 -1
  146. package/dist/types/index.d.ts +1 -1
  147. package/dist/types/index.d.ts.map +1 -1
  148. package/dist/types/persistence.d.ts +5 -5
  149. package/dist/types/persistence.d.ts.map +1 -1
  150. package/dist/types/route.d.ts +57 -52
  151. package/dist/types/route.d.ts.map +1 -1
  152. package/dist/types/session.d.ts +27 -27
  153. package/dist/types/session.d.ts.map +1 -1
  154. package/dist/types/session.js +44 -46
  155. package/dist/types/session.js.map +1 -1
  156. package/dist/types/tool.d.ts +13 -13
  157. package/dist/types/tool.d.ts.map +1 -1
  158. package/dist/utils/id.d.ts +8 -3
  159. package/dist/utils/id.d.ts.map +1 -1
  160. package/dist/utils/id.js +14 -6
  161. package/dist/utils/id.js.map +1 -1
  162. package/docs/ADAPTERS.md +21 -21
  163. package/docs/AGENT.md +57 -55
  164. package/docs/API_REFERENCE.md +218 -220
  165. package/docs/ARCHITECTURE.md +99 -104
  166. package/docs/CONTEXT_MANAGEMENT.md +81 -88
  167. package/docs/DOCS.md +18 -18
  168. package/docs/DOMAINS.md +16 -16
  169. package/docs/EXAMPLES.md +43 -43
  170. package/docs/GETTING_STARTED.md +60 -63
  171. package/docs/PERSISTENCE.md +66 -70
  172. package/docs/PROVIDERS.md +2 -2
  173. package/docs/README.md +6 -6
  174. package/docs/ROUTES.md +218 -220
  175. package/docs/STEPS.md +883 -0
  176. package/examples/business-onboarding.ts +84 -81
  177. package/examples/company-qna-agent.ts +68 -67
  178. package/examples/custom-database-persistence.ts +87 -89
  179. package/examples/declarative-agent.ts +32 -32
  180. package/examples/domain-scoping.ts +18 -18
  181. package/examples/extracted-data-modification.ts +92 -97
  182. package/examples/healthcare-agent.ts +89 -91
  183. package/examples/openai-agent.ts +29 -32
  184. package/examples/opensearch-persistence.ts +43 -45
  185. package/examples/persistent-onboarding.ts +65 -66
  186. package/examples/prisma-persistence.ts +108 -112
  187. package/examples/prisma-schema.example.prisma +3 -3
  188. package/examples/redis-persistence.ts +67 -73
  189. package/examples/route-transitions.ts +71 -47
  190. package/examples/rules-prohibitions.ts +28 -28
  191. package/examples/streaming-agent.ts +24 -24
  192. package/examples/travel-agent.ts +94 -109
  193. package/package.json +1 -1
  194. package/src/adapters/MemoryAdapter.ts +3 -3
  195. package/src/adapters/MongoAdapter.ts +3 -3
  196. package/src/adapters/OpenSearchAdapter.ts +8 -8
  197. package/src/adapters/PostgreSQLAdapter.ts +10 -10
  198. package/src/adapters/PrismaAdapter.ts +4 -4
  199. package/src/adapters/RedisAdapter.ts +3 -3
  200. package/src/adapters/SQLiteAdapter.ts +15 -15
  201. package/src/adapters/index.ts +1 -1
  202. package/src/constants/index.ts +4 -4
  203. package/src/core/Agent.ts +210 -206
  204. package/src/core/Events.ts +12 -12
  205. package/src/core/PersistenceManager.ts +32 -36
  206. package/src/core/ResponseEngine.ts +11 -17
  207. package/src/core/Route.ts +55 -49
  208. package/src/core/RoutingEngine.ts +244 -252
  209. package/src/core/Step.ts +197 -0
  210. package/src/core/ToolExecutor.ts +11 -11
  211. package/src/core/Transition.ts +72 -26
  212. package/src/index.ts +8 -8
  213. package/src/types/agent.ts +8 -8
  214. package/src/types/ai.ts +2 -2
  215. package/src/types/history.ts +3 -3
  216. package/src/types/index.ts +1 -1
  217. package/src/types/persistence.ts +6 -6
  218. package/src/types/route.ts +77 -61
  219. package/src/types/session.ts +75 -78
  220. package/src/types/tool.ts +17 -17
  221. package/src/utils/id.ts +15 -6
  222. package/dist/cjs/core/State.d.ts +0 -72
  223. package/dist/cjs/core/State.d.ts.map +0 -1
  224. package/dist/cjs/core/State.js +0 -148
  225. package/dist/cjs/core/State.js.map +0 -1
  226. package/dist/core/State.d.ts +0 -72
  227. package/dist/core/State.d.ts.map +0 -1
  228. package/dist/core/State.js +0 -144
  229. package/dist/core/State.js.map +0 -1
  230. package/docs/STATES.md +0 -888
  231. package/src/core/State.ts +0 -212
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Example: Using Prisma ORM for Persistence with Session State
2
+ * Example: Using Prisma ORM for Persistence with Session Step
3
3
  *
4
4
  * This example shows how to use @falai/agent with Prisma for automatic
5
- * session state persistence - with the new data-driven architecture!
5
+ * session step persistence - with the new data-driven architecture!
6
6
  */
7
7
 
8
8
  import {
@@ -11,7 +11,7 @@ import {
11
11
  PrismaAdapter,
12
12
  createMessageEvent,
13
13
  EventSource,
14
- END_STATE,
14
+ END_ROUTE,
15
15
  } from "../src/index";
16
16
 
17
17
  // @ts-ignore
@@ -48,7 +48,7 @@ interface ConversationContext {
48
48
  };
49
49
  }
50
50
 
51
- // Extracted data type for flight booking
51
+ // Collected data type for flight booking
52
52
  interface FlightBookingData {
53
53
  destination: string;
54
54
  departureDate: string;
@@ -57,7 +57,7 @@ interface FlightBookingData {
57
57
  cabinClass: "economy" | "premium" | "business" | "first";
58
58
  }
59
59
 
60
- // Extracted data type for onboarding
60
+ // Collected data type for onboarding
61
61
  interface OnboardingData {
62
62
  fullName: string;
63
63
  email: string;
@@ -65,7 +65,7 @@ interface OnboardingData {
65
65
  country: string;
66
66
  }
67
67
 
68
- // Extracted data type for contact form
68
+ // Collected data type for contact form
69
69
  interface ContactFormData {
70
70
  name: string;
71
71
  email: string;
@@ -96,7 +96,7 @@ async function example() {
96
96
  // ✨ Just pass the adapter - that's it!
97
97
  persistence: {
98
98
  adapter: new PrismaAdapter({ prisma }),
99
- autoSave: true, // Auto-saves session state after each response
99
+ autoSave: true, // Auto-saves session step after each response
100
100
  userId,
101
101
  },
102
102
  });
@@ -111,7 +111,7 @@ async function example() {
111
111
  "User wants to book a flight",
112
112
  "User mentions travel, flying, or booking tickets",
113
113
  ],
114
- extractionSchema: {
114
+ schema: {
115
115
  type: "object",
116
116
  properties: {
117
117
  destination: {
@@ -143,45 +143,45 @@ async function example() {
143
143
  },
144
144
  });
145
145
 
146
- // State flow with smart data gathering and custom IDs
147
- const askDestination = flightRoute.initialState.transitionTo({
148
- id: "ask_destination", // Custom state ID for easier tracking
149
- chatState: "Ask where they want to fly",
150
- gather: ["destination"],
151
- skipIf: (extracted) => !!extracted.destination,
146
+ // Step flow with smart data collecting and custom IDs
147
+ const askDestination = flightRoute.initialStep.nextStep({
148
+ id: "ask_destination", // Custom step ID for easier tracking
149
+ instructions: "Ask where they want to fly",
150
+ collect: ["destination"],
151
+ skipIf: (data) => !!data.destination,
152
152
  });
153
153
 
154
- const askDates = askDestination.transitionTo({
155
- id: "ask_dates", // Custom state ID
156
- chatState: "Ask about travel dates",
157
- gather: ["departureDate", "returnDate"],
158
- skipIf: (extracted) => !!extracted.departureDate,
159
- requiredData: ["destination"],
154
+ const askDates = askDestination.nextStep({
155
+ id: "ask_dates", // Custom step ID
156
+ instructions: "Ask about travel dates",
157
+ collect: ["departureDate", "returnDate"],
158
+ skipIf: (data) => !!data.departureDate,
159
+ requires: ["destination"],
160
160
  });
161
161
 
162
- const askPassengers = askDates.transitionTo({
163
- id: "ask_passengers", // Custom state ID
164
- chatState: "Ask how many passengers",
165
- gather: ["passengers"],
166
- skipIf: (extracted) => !!extracted.passengers,
167
- requiredData: ["destination", "departureDate"],
162
+ const askPassengers = askDates.nextStep({
163
+ id: "ask_passengers", // Custom step ID
164
+ instructions: "Ask how many passengers",
165
+ collect: ["passengers"],
166
+ skipIf: (data) => !!data.passengers,
167
+ requires: ["destination", "departureDate"],
168
168
  });
169
169
 
170
- const askCabinClass = askPassengers.transitionTo({
171
- id: "ask_cabin_class", // Custom state ID
172
- chatState: "Ask about cabin class preference",
173
- gather: ["cabinClass"],
174
- skipIf: (extracted) => !!extracted.cabinClass,
175
- requiredData: ["destination", "departureDate", "passengers"],
170
+ const askCabinClass = askPassengers.nextStep({
171
+ id: "ask_cabin_class", // Custom step ID
172
+ instructions: "Ask about cabin class preference",
173
+ collect: ["cabinClass"],
174
+ skipIf: (data) => !!data.cabinClass,
175
+ requires: ["destination", "departureDate", "passengers"],
176
176
  });
177
177
 
178
- const confirmBooking = askCabinClass.transitionTo({
179
- id: "confirm_booking", // Custom state ID
180
- chatState: "Present options and confirm booking details",
181
- requiredData: ["destination", "departureDate", "passengers", "cabinClass"],
178
+ const confirmBooking = askCabinClass.nextStep({
179
+ id: "confirm_booking", // Custom step ID
180
+ instructions: "Present options and confirm booking details",
181
+ requires: ["destination", "departureDate", "passengers", "cabinClass"],
182
182
  });
183
183
 
184
- confirmBooking.transitionTo({ state: END_STATE });
184
+ confirmBooking.nextStep({ step: END_ROUTE });
185
185
 
186
186
  /**
187
187
  * Get persistence manager from agent
@@ -196,7 +196,7 @@ async function example() {
196
196
  * Create or find a session - New Pattern!
197
197
  */
198
198
  let sessionResult =
199
- await persistence.createSessionWithState<FlightBookingData>({
199
+ await persistence.createSessionWithStep<FlightBookingData>({
200
200
  userId,
201
201
  agentName: "Travel Assistant",
202
202
  initialData: {
@@ -204,7 +204,7 @@ async function example() {
204
204
  },
205
205
  });
206
206
 
207
- let session = sessionResult.sessionState;
207
+ let session = sessionResult.sessionStep;
208
208
  const dbSessionId = sessionResult.sessionData.id;
209
209
 
210
210
  console.log("✨ Created new session:", dbSessionId);
@@ -212,9 +212,9 @@ async function example() {
212
212
  sessionId: session.metadata?.sessionId, // Same as dbSessionId
213
213
  createdAt: session.metadata?.createdAt,
214
214
  });
215
- console.log("šŸ“Š Initial session state:", {
215
+ console.log("šŸ“Š Initial session step:", {
216
216
  currentRoute: session.currentRoute,
217
- extracted: session.extracted,
217
+ data: session.data,
218
218
  });
219
219
 
220
220
  /**
@@ -237,16 +237,16 @@ async function example() {
237
237
 
238
238
  const response1 = await agent.respond({
239
239
  history,
240
- session, // Pass session state
240
+ session, // Pass session step
241
241
  });
242
242
 
243
243
  console.log("šŸ¤– Agent:", response1.message);
244
- console.log("šŸ“Š Session state after turn 1:", {
244
+ console.log("šŸ“Š Session step after turn 1:", {
245
245
  sessionId: response1.session?.metadata?.sessionId,
246
246
  currentRoute: response1.session?.currentRoute?.title,
247
- currentStateId: response1.session?.currentState?.id, // Custom ID like "ask_destination"
248
- currentStateDescription: response1.session?.currentState?.description,
249
- extracted: response1.session?.extracted,
247
+ currentStepId: response1.session?.currentStep?.id, // Custom ID like "ask_destination"
248
+ currentStepDescription: response1.session?.currentStep?.description,
249
+ data: response1.session?.data,
250
250
  });
251
251
 
252
252
  // Save user message
@@ -258,14 +258,14 @@ async function example() {
258
258
  event: userMessage1,
259
259
  });
260
260
 
261
- // Save agent message (session state is auto-saved by Agent!)
261
+ // Save agent message (session step is auto-saved by Agent!)
262
262
  await persistence.saveMessage({
263
263
  sessionId: dbSessionId,
264
264
  userId,
265
265
  role: "agent",
266
266
  content: response1.message,
267
267
  route: response1.session?.currentRoute?.id,
268
- state: response1.session?.currentState?.id,
268
+ step: response1.session?.currentStep?.id,
269
269
  });
270
270
 
271
271
  // Update session for next turn
@@ -296,10 +296,10 @@ async function example() {
296
296
  });
297
297
 
298
298
  console.log("šŸ¤– Agent:", response2.message);
299
- console.log("šŸ“Š Session state after turn 2:", {
299
+ console.log("šŸ“Š Session step after turn 2:", {
300
300
  currentRoute: response2.session?.currentRoute?.title,
301
- currentState: response2.session?.currentState?.id,
302
- extracted: response2.session?.extracted,
301
+ currentStep: response2.session?.currentStep?.id,
302
+ data: response2.session?.data,
303
303
  });
304
304
 
305
305
  // Save messages
@@ -317,7 +317,7 @@ async function example() {
317
317
  role: "agent",
318
318
  content: response2.message,
319
319
  route: response2.session?.currentRoute?.id,
320
- state: response2.session?.currentState?.id,
320
+ step: response2.session?.currentStep?.id,
321
321
  });
322
322
 
323
323
  session = response2.session!;
@@ -325,22 +325,22 @@ async function example() {
325
325
  if (response2.isRouteComplete) {
326
326
  console.log("\nāœ… Flight booking complete!");
327
327
  await sendFlightConfirmation(
328
- agent.getExtractedData(session.id) as FlightBookingData
328
+ agent.getData(session.id) as FlightBookingData
329
329
  );
330
330
  }
331
331
 
332
332
  /**
333
- * Load session state from database (demonstrates persistence)
333
+ * Load session step from database (demonstrates persistence)
334
334
  */
335
335
  console.log("\n--- Loading Session from Database ---");
336
- const loadedSession = await persistence.loadSessionState<FlightBookingData>(
336
+ const loadedSession = await persistence.loadSessionStep<FlightBookingData>(
337
337
  dbSessionId
338
338
  );
339
339
 
340
- console.log("šŸ“„ Loaded session state:", {
340
+ console.log("šŸ“„ Loaded session step:", {
341
341
  currentRoute: loadedSession?.currentRoute?.title,
342
- currentState: loadedSession?.currentState?.id,
343
- extracted: loadedSession?.extracted,
342
+ currentStep: loadedSession?.currentStep?.id,
343
+ data: loadedSession?.data,
344
344
  });
345
345
 
346
346
  /**
@@ -365,7 +365,7 @@ async function example() {
365
365
  }
366
366
 
367
367
  /**
368
- * Advanced Example: Session State with Lifecycle Hooks
368
+ * Advanced Example: Session Step with Lifecycle Hooks
369
369
  */
370
370
  async function advancedExample() {
371
371
  const prisma = new PrismaClient();
@@ -395,26 +395,26 @@ async function advancedExample() {
395
395
  language: "en",
396
396
  },
397
397
  },
398
- // Lifecycle hooks for session state enrichment
398
+ // Lifecycle hooks for session step enrichment
399
399
  hooks: {
400
- // Enrich extracted data before saving
401
- onExtractedUpdate: async (extracted, previous) => {
402
- console.log("šŸ”„ Extracted data updated:", { extracted, previous });
400
+ // Enrich collected data before saving
401
+ onDataUpdate: async (data, previous) => {
402
+ console.log("šŸ”„ Collected data updated:", { data, previous });
403
403
 
404
404
  // Normalize phone numbers
405
- if (extracted.phoneNumber) {
406
- extracted.phoneNumber = extracted.phoneNumber.replace(/\D/g, "");
405
+ if (data.phoneNumber) {
406
+ data.phoneNumber = data.phoneNumber.replace(/\D/g, "");
407
407
  }
408
408
 
409
409
  // Validate email
410
- if (extracted.email && !extracted.email.includes("@")) {
410
+ if (data.email && !data.email.includes("@")) {
411
411
  console.warn("āš ļø Invalid email detected");
412
412
  }
413
413
 
414
- return extracted;
414
+ return data;
415
415
  },
416
416
 
417
- // Update context when session state changes
417
+ // Update context when session step changes
418
418
  onContextUpdate: async (newContext, oldContext) => {
419
419
  console.log("šŸ”„ Context updated:", { newContext, oldContext });
420
420
  },
@@ -430,7 +430,7 @@ async function advancedExample() {
430
430
  const onboardingRoute = agent.createRoute<OnboardingData>({
431
431
  title: "User Onboarding",
432
432
  description: "Collect user information for account setup",
433
- extractionSchema: {
433
+ schema: {
434
434
  type: "object",
435
435
  properties: {
436
436
  fullName: { type: "string" },
@@ -442,36 +442,36 @@ async function advancedExample() {
442
442
  },
443
443
  });
444
444
 
445
- onboardingRoute.initialState
446
- .transitionTo({
447
- chatState: "Welcome and ask for name",
448
- gather: ["fullName"],
445
+ onboardingRoute.initialStep
446
+ .nextStep({
447
+ instructions: "Welcome and ask for name",
448
+ collect: ["fullName"],
449
449
  skipIf: (data) => !!data.fullName,
450
450
  })
451
- .transitionTo({
452
- chatState: "Ask for email",
453
- gather: ["email"],
451
+ .nextStep({
452
+ instructions: "Ask for email",
453
+ collect: ["email"],
454
454
  skipIf: (data) => !!data.email,
455
455
  })
456
- .transitionTo({
457
- chatState: "Ask for phone number (optional)",
458
- gather: ["phoneNumber"],
456
+ .nextStep({
457
+ instructions: "Ask for phone number (optional)",
458
+ collect: ["phoneNumber"],
459
459
  })
460
- .transitionTo({
461
- chatState: "Ask for country",
462
- gather: ["country"],
460
+ .nextStep({
461
+ instructions: "Ask for country",
462
+ collect: ["country"],
463
463
  skipIf: (data) => !!data.country,
464
464
  })
465
- .transitionTo({
466
- chatState: "Confirm and complete onboarding",
465
+ .nextStep({
466
+ instructions: "Confirm and complete onboarding",
467
467
  })
468
- .transitionTo({ state: END_STATE });
468
+ .nextStep({ step: END_ROUTE });
469
469
 
470
470
  const persistence = agent.getPersistenceManager()!;
471
471
 
472
- // Create session with state
473
- const { sessionData, sessionState } =
474
- await persistence.createSessionWithState<OnboardingData>({
472
+ // Create session with step
473
+ const { sessionData, sessionStep } =
474
+ await persistence.createSessionWithStep<OnboardingData>({
475
475
  userId,
476
476
  agentName: "Onboarding Assistant",
477
477
  });
@@ -480,7 +480,7 @@ async function advancedExample() {
480
480
 
481
481
  // Simulate conversation
482
482
  const history = [];
483
- let session = sessionState;
483
+ let session = sessionStep;
484
484
 
485
485
  const response = await agent.respond({
486
486
  history: [
@@ -490,7 +490,7 @@ async function advancedExample() {
490
490
  });
491
491
 
492
492
  console.log("šŸ¤– Agent:", response.message);
493
- console.log("šŸ“Š Extracted so far:", response.session?.extracted);
493
+ console.log("šŸ“Š Data so far:", response.session?.data);
494
494
 
495
495
  await persistence.saveMessage({
496
496
  sessionId: sessionData.id,
@@ -501,12 +501,10 @@ async function advancedExample() {
501
501
 
502
502
  if (response.isRouteComplete) {
503
503
  console.log("\nāœ… Onboarding complete!");
504
- await sendOnboardingEmail(
505
- agent.getExtractedData(sessionData.id) as OnboardingData
506
- );
504
+ await sendOnboardingEmail(agent.getData(sessionData.id) as OnboardingData);
507
505
  }
508
506
 
509
- console.log("āœ… Session state automatically saved to database!");
507
+ console.log("āœ… Session step automatically saved to database!");
510
508
 
511
509
  await prisma.$disconnect();
512
510
  }
@@ -526,14 +524,14 @@ async function quickStart() {
526
524
  persistence: {
527
525
  adapter: new PrismaAdapter({ prisma }),
528
526
  userId: "user_789",
529
- autoSave: true, // ✨ Automatically saves session state!
527
+ autoSave: true, // ✨ Automatically saves session step!
530
528
  },
531
529
  });
532
530
 
533
531
  // Create a simple contact form route
534
532
  const contactRoute = agent.createRoute<ContactFormData>({
535
533
  title: "Contact Form",
536
- extractionSchema: {
534
+ schema: {
537
535
  type: "object",
538
536
  properties: {
539
537
  name: { type: "string" },
@@ -544,21 +542,21 @@ async function quickStart() {
544
542
  },
545
543
  });
546
544
 
547
- contactRoute.initialState
548
- .transitionTo({
549
- chatState: "Collect all information",
550
- gather: ["name", "email", "message"],
545
+ contactRoute.initialStep
546
+ .nextStep({
547
+ instructions: "Collect all information",
548
+ collect: ["name", "email", "message"],
551
549
  })
552
- .transitionTo({
553
- chatState: "Confirm submission",
550
+ .nextStep({
551
+ instructions: "Confirm submission",
554
552
  })
555
- .transitionTo({ state: END_STATE });
553
+ .nextStep({ step: END_ROUTE });
556
554
 
557
555
  const persistence = agent.getPersistenceManager()!;
558
556
 
559
- // Create session with state support
560
- const { sessionData, sessionState } =
561
- await persistence.createSessionWithState<ContactFormData>({
557
+ // Create session with step support
558
+ const { sessionData, sessionStep } =
559
+ await persistence.createSessionWithStep<ContactFormData>({
562
560
  userId: "user_789",
563
561
  agentName: "Support Agent",
564
562
  });
@@ -572,20 +570,18 @@ async function quickStart() {
572
570
  "I need help, my name is John and my email is john@example.com"
573
571
  ),
574
572
  ],
575
- session: sessionState,
573
+ session: sessionStep,
576
574
  });
577
575
 
578
576
  console.log("āœ… Response:", response.message);
579
- console.log("šŸ“Š Extracted:", response.session?.extracted);
577
+ console.log("šŸ“Š Data:", response.session?.data);
580
578
 
581
579
  if (response.isRouteComplete) {
582
580
  console.log("\nāœ… Contact form submitted!");
583
- await logContactForm(
584
- agent.getExtractedData(sessionData.id) as ContactFormData
585
- );
581
+ await logContactForm(agent.getData(sessionData.id) as ContactFormData);
586
582
  }
587
583
 
588
- console.log("šŸ’¾ Session state auto-saved to Prisma!");
584
+ console.log("šŸ’¾ Session step auto-saved to Prisma!");
589
585
 
590
586
  await prisma.$disconnect();
591
587
  }
@@ -11,14 +11,14 @@ generator client {
11
11
  }
12
12
 
13
13
  // Agent Session model
14
- // Stores conversation session state
14
+ // Stores conversation session step
15
15
  model AgentSession {
16
16
  id String @id @default(cuid())
17
17
  userId String? @map("user_id")
18
18
  agentName String? @map("agent_name")
19
19
  status String @default("active") // "active" | "completed" | "abandoned"
20
20
  currentRoute String? @map("current_route")
21
- currentState String? @map("current_state")
21
+ currentStep String? @map("current_step")
22
22
  collectedData Json? @map("collected_data")
23
23
  messageCount Int @default(0) @map("message_count")
24
24
  lastMessageAt DateTime? @map("last_message_at")
@@ -44,7 +44,7 @@ model AgentMessage {
44
44
  role String // "user" | "agent" | "system"
45
45
  content String @db.Text
46
46
  route String?
47
- state String?
47
+ step String?
48
48
  toolCalls Json? @map("tool_calls")
49
49
  event Json? // Optional: store full event data
50
50
  createdAt DateTime @default(now()) @map("created_at")