@falai/agent 1.2.8 → 2.0.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 (522) hide show
  1. package/README.md +40 -886
  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.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1191 -1014
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +509 -136
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/providers/AnthropicProvider.d.ts +1 -1
  126. package/dist/cjs/providers/AnthropicProvider.js +1 -1
  127. package/dist/cjs/providers/GeminiProvider.d.ts +1 -1
  128. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  129. package/dist/cjs/providers/GeminiProvider.js +1 -1
  130. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  131. package/dist/cjs/providers/OpenAIProvider.d.ts +1 -1
  132. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  133. package/dist/cjs/providers/OpenAIProvider.js +1 -1
  134. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  135. package/dist/cjs/types/agent.d.ts +183 -54
  136. package/dist/cjs/types/agent.d.ts.map +1 -1
  137. package/dist/cjs/types/agent.js +0 -6
  138. package/dist/cjs/types/agent.js.map +1 -1
  139. package/dist/cjs/types/ai.d.ts +3 -3
  140. package/dist/cjs/types/ai.d.ts.map +1 -1
  141. package/dist/cjs/types/errors.d.ts +15 -0
  142. package/dist/cjs/types/errors.d.ts.map +1 -0
  143. package/dist/cjs/types/errors.js +22 -0
  144. package/dist/cjs/types/errors.js.map +1 -0
  145. package/dist/cjs/types/flow.d.ts +513 -0
  146. package/dist/cjs/types/flow.d.ts.map +1 -0
  147. package/dist/cjs/types/{route.js → flow.js} +2 -2
  148. package/dist/cjs/types/flow.js.map +1 -0
  149. package/dist/cjs/types/index.d.ts +7 -6
  150. package/dist/cjs/types/index.d.ts.map +1 -1
  151. package/dist/cjs/types/index.js +6 -2
  152. package/dist/cjs/types/index.js.map +1 -1
  153. package/dist/cjs/types/persistence.d.ts +11 -7
  154. package/dist/cjs/types/persistence.d.ts.map +1 -1
  155. package/dist/cjs/types/routing.d.ts +1 -1
  156. package/dist/cjs/types/routing.d.ts.map +1 -1
  157. package/dist/cjs/types/session.d.ts +24 -23
  158. package/dist/cjs/types/session.d.ts.map +1 -1
  159. package/dist/cjs/types/signals.d.ts +248 -0
  160. package/dist/cjs/types/signals.d.ts.map +1 -0
  161. package/dist/cjs/types/signals.js +11 -0
  162. package/dist/cjs/types/signals.js.map +1 -0
  163. package/dist/cjs/types/template.d.ts +2 -8
  164. package/dist/cjs/types/template.d.ts.map +1 -1
  165. package/dist/cjs/types/tool.d.ts +36 -29
  166. package/dist/cjs/types/tool.d.ts.map +1 -1
  167. package/dist/cjs/types/tool.js +1 -1
  168. package/dist/cjs/types/tool.js.map +1 -1
  169. package/dist/cjs/utils/condition.d.ts +7 -1
  170. package/dist/cjs/utils/condition.d.ts.map +1 -1
  171. package/dist/cjs/utils/condition.js.map +1 -1
  172. package/dist/cjs/utils/id.d.ts +13 -5
  173. package/dist/cjs/utils/id.d.ts.map +1 -1
  174. package/dist/cjs/utils/id.js +24 -10
  175. package/dist/cjs/utils/id.js.map +1 -1
  176. package/dist/cjs/utils/index.d.ts +2 -2
  177. package/dist/cjs/utils/index.d.ts.map +1 -1
  178. package/dist/cjs/utils/index.js +7 -3
  179. package/dist/cjs/utils/index.js.map +1 -1
  180. package/dist/cjs/utils/session.d.ts +44 -5
  181. package/dist/cjs/utils/session.d.ts.map +1 -1
  182. package/dist/cjs/utils/session.js +197 -38
  183. package/dist/cjs/utils/session.js.map +1 -1
  184. package/dist/constants/index.d.ts +0 -9
  185. package/dist/constants/index.d.ts.map +1 -1
  186. package/dist/constants/index.js +3 -9
  187. package/dist/constants/index.js.map +1 -1
  188. package/dist/core/Agent.d.ts +119 -153
  189. package/dist/core/Agent.d.ts.map +1 -1
  190. package/dist/core/Agent.js +472 -325
  191. package/dist/core/Agent.js.map +1 -1
  192. package/dist/core/AutoChainExecutor.d.ts +107 -0
  193. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  194. package/dist/core/AutoChainExecutor.js +293 -0
  195. package/dist/core/AutoChainExecutor.js.map +1 -0
  196. package/dist/core/BranchEvaluator.d.ts +54 -0
  197. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  198. package/dist/core/BranchEvaluator.js +126 -0
  199. package/dist/core/BranchEvaluator.js.map +1 -0
  200. package/dist/core/DirectiveBus.d.ts +88 -0
  201. package/dist/core/DirectiveBus.d.ts.map +1 -0
  202. package/dist/core/DirectiveBus.js +192 -0
  203. package/dist/core/DirectiveBus.js.map +1 -0
  204. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  205. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  206. package/dist/core/DirectiveChainTracker.js +117 -0
  207. package/dist/core/DirectiveChainTracker.js.map +1 -0
  208. package/dist/core/Flow.d.ts +186 -0
  209. package/dist/core/Flow.d.ts.map +1 -0
  210. package/dist/core/Flow.js +546 -0
  211. package/dist/core/Flow.js.map +1 -0
  212. package/dist/core/FlowRouter.d.ts +182 -0
  213. package/dist/core/FlowRouter.d.ts.map +1 -0
  214. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  215. package/dist/core/FlowRouter.js.map +1 -0
  216. package/dist/core/PersistenceManager.d.ts +2 -2
  217. package/dist/core/PersistenceManager.d.ts.map +1 -1
  218. package/dist/core/PersistenceManager.js +7 -7
  219. package/dist/core/PersistenceManager.js.map +1 -1
  220. package/dist/core/PromptComposer.d.ts +21 -8
  221. package/dist/core/PromptComposer.d.ts.map +1 -1
  222. package/dist/core/PromptComposer.js +183 -106
  223. package/dist/core/PromptComposer.js.map +1 -1
  224. package/dist/core/PromptSectionCache.d.ts +1 -1
  225. package/dist/core/PromptSectionCache.js +1 -1
  226. package/dist/core/ResponseEngine.d.ts +18 -8
  227. package/dist/core/ResponseEngine.d.ts.map +1 -1
  228. package/dist/core/ResponseEngine.js +38 -36
  229. package/dist/core/ResponseEngine.js.map +1 -1
  230. package/dist/core/ResponseModal.d.ts +73 -56
  231. package/dist/core/ResponseModal.d.ts.map +1 -1
  232. package/dist/core/ResponseModal.js +1193 -1016
  233. package/dist/core/ResponseModal.js.map +1 -1
  234. package/dist/core/ResponsePipeline.d.ts +124 -26
  235. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  236. package/dist/core/ResponsePipeline.js +509 -137
  237. package/dist/core/ResponsePipeline.js.map +1 -1
  238. package/dist/core/SignalEvaluator.d.ts +86 -0
  239. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  240. package/dist/core/SignalEvaluator.js +326 -0
  241. package/dist/core/SignalEvaluator.js.map +1 -0
  242. package/dist/core/SignalProcessor.d.ts +152 -0
  243. package/dist/core/SignalProcessor.d.ts.map +1 -0
  244. package/dist/core/SignalProcessor.js +555 -0
  245. package/dist/core/SignalProcessor.js.map +1 -0
  246. package/dist/core/Step.d.ts +43 -32
  247. package/dist/core/Step.d.ts.map +1 -1
  248. package/dist/core/Step.js +220 -126
  249. package/dist/core/Step.js.map +1 -1
  250. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  251. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  252. package/dist/core/StreamingToolExecutor.js.map +1 -1
  253. package/dist/core/ToolManager.d.ts +44 -13
  254. package/dist/core/ToolManager.d.ts.map +1 -1
  255. package/dist/core/ToolManager.js +174 -91
  256. package/dist/core/ToolManager.js.map +1 -1
  257. package/dist/core/createAgent.d.ts +35 -0
  258. package/dist/core/createAgent.d.ts.map +1 -0
  259. package/dist/core/createAgent.js +36 -0
  260. package/dist/core/createAgent.js.map +1 -0
  261. package/dist/core/flow-namespace.d.ts +49 -0
  262. package/dist/core/flow-namespace.d.ts.map +1 -0
  263. package/dist/core/flow-namespace.js +168 -0
  264. package/dist/core/flow-namespace.js.map +1 -0
  265. package/dist/index.d.ts +11 -14
  266. package/dist/index.d.ts.map +1 -1
  267. package/dist/index.js +9 -12
  268. package/dist/index.js.map +1 -1
  269. package/dist/providers/AnthropicProvider.d.ts +1 -1
  270. package/dist/providers/AnthropicProvider.js +1 -1
  271. package/dist/providers/GeminiProvider.d.ts +1 -1
  272. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  273. package/dist/providers/GeminiProvider.js +1 -1
  274. package/dist/providers/GeminiProvider.js.map +1 -1
  275. package/dist/providers/OpenAIProvider.d.ts +1 -1
  276. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  277. package/dist/providers/OpenAIProvider.js +1 -1
  278. package/dist/providers/OpenAIProvider.js.map +1 -1
  279. package/dist/types/agent.d.ts +183 -54
  280. package/dist/types/agent.d.ts.map +1 -1
  281. package/dist/types/agent.js +0 -6
  282. package/dist/types/agent.js.map +1 -1
  283. package/dist/types/ai.d.ts +3 -3
  284. package/dist/types/ai.d.ts.map +1 -1
  285. package/dist/types/errors.d.ts +15 -0
  286. package/dist/types/errors.d.ts.map +1 -0
  287. package/dist/types/errors.js +18 -0
  288. package/dist/types/errors.js.map +1 -0
  289. package/dist/types/flow.d.ts +513 -0
  290. package/dist/types/flow.d.ts.map +1 -0
  291. package/dist/types/flow.js +5 -0
  292. package/dist/types/flow.js.map +1 -0
  293. package/dist/types/index.d.ts +7 -6
  294. package/dist/types/index.d.ts.map +1 -1
  295. package/dist/types/index.js +4 -1
  296. package/dist/types/index.js.map +1 -1
  297. package/dist/types/persistence.d.ts +11 -7
  298. package/dist/types/persistence.d.ts.map +1 -1
  299. package/dist/types/routing.d.ts +1 -1
  300. package/dist/types/routing.d.ts.map +1 -1
  301. package/dist/types/session.d.ts +24 -23
  302. package/dist/types/session.d.ts.map +1 -1
  303. package/dist/types/signals.d.ts +248 -0
  304. package/dist/types/signals.d.ts.map +1 -0
  305. package/dist/types/signals.js +10 -0
  306. package/dist/types/signals.js.map +1 -0
  307. package/dist/types/template.d.ts +2 -8
  308. package/dist/types/template.d.ts.map +1 -1
  309. package/dist/types/tool.d.ts +36 -29
  310. package/dist/types/tool.d.ts.map +1 -1
  311. package/dist/types/tool.js +1 -1
  312. package/dist/types/tool.js.map +1 -1
  313. package/dist/utils/condition.d.ts +7 -1
  314. package/dist/utils/condition.d.ts.map +1 -1
  315. package/dist/utils/condition.js.map +1 -1
  316. package/dist/utils/id.d.ts +13 -5
  317. package/dist/utils/id.d.ts.map +1 -1
  318. package/dist/utils/id.js +22 -9
  319. package/dist/utils/id.js.map +1 -1
  320. package/dist/utils/index.d.ts +2 -2
  321. package/dist/utils/index.d.ts.map +1 -1
  322. package/dist/utils/index.js +2 -2
  323. package/dist/utils/index.js.map +1 -1
  324. package/dist/utils/session.d.ts +44 -5
  325. package/dist/utils/session.d.ts.map +1 -1
  326. package/dist/utils/session.js +193 -37
  327. package/dist/utils/session.js.map +1 -1
  328. package/docs/README.md +22 -200
  329. package/docs/concepts/architecture.md +281 -0
  330. package/docs/concepts/directives.md +400 -0
  331. package/docs/concepts/pipeline.md +399 -0
  332. package/docs/guides/branching.md +263 -0
  333. package/docs/guides/compaction.md +163 -0
  334. package/docs/guides/conditions.md +167 -0
  335. package/docs/guides/error-handling.md +176 -0
  336. package/docs/guides/flow-control.md +409 -0
  337. package/docs/guides/instructions.md +210 -0
  338. package/docs/guides/persistence.md +182 -0
  339. package/docs/guides/streaming.md +137 -0
  340. package/docs/migration/README.md +14 -0
  341. package/docs/migration/route-to-flow.md +561 -0
  342. package/docs/migration/v1-to-v2.md +909 -0
  343. package/docs/reference/adapters.md +481 -0
  344. package/docs/reference/branches.md +241 -0
  345. package/docs/reference/create-agent.md +186 -0
  346. package/docs/reference/directive.md +243 -0
  347. package/docs/reference/errors.md +122 -0
  348. package/docs/reference/flow.md +238 -0
  349. package/docs/reference/instruction.md +177 -0
  350. package/docs/reference/pre-directive.md +131 -0
  351. package/docs/reference/providers.md +227 -0
  352. package/docs/reference/signals.md +356 -0
  353. package/docs/reference/step.md +339 -0
  354. package/docs/reference/tool.md +269 -0
  355. package/docs/start/01-install.md +81 -0
  356. package/docs/start/02-first-agent.md +196 -0
  357. package/docs/start/03-collect-data.md +222 -0
  358. package/docs/start/04-add-tools.md +276 -0
  359. package/docs/start/05-go-to-production.md +216 -0
  360. package/examples/01-quickstart.ts +20 -0
  361. package/examples/02-data-extraction.ts +90 -0
  362. package/examples/03-tools.ts +136 -0
  363. package/examples/04-instructions.ts +100 -0
  364. package/examples/05-branching.ts +140 -0
  365. package/examples/06-flow-control.ts +103 -0
  366. package/examples/07-streaming.ts +69 -0
  367. package/examples/08-persistence.ts +98 -0
  368. package/examples/09-signals.ts +144 -0
  369. package/examples/tsconfig.json +30 -0
  370. package/package.json +2 -1
  371. package/src/adapters/MemoryAdapter.ts +3 -3
  372. package/src/adapters/MongoAdapter.ts +3 -3
  373. package/src/adapters/OpenSearchAdapter.ts +10 -8
  374. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  375. package/src/adapters/PrismaAdapter.ts +6 -6
  376. package/src/adapters/RedisAdapter.ts +3 -3
  377. package/src/adapters/SQLiteAdapter.ts +31 -12
  378. package/src/constants/index.ts +2 -10
  379. package/src/core/Agent.ts +585 -374
  380. package/src/core/AutoChainExecutor.ts +440 -0
  381. package/src/core/BranchEvaluator.ts +167 -0
  382. package/src/core/DirectiveBus.ts +248 -0
  383. package/src/core/DirectiveChainTracker.ts +144 -0
  384. package/src/core/Flow.ts +666 -0
  385. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  386. package/src/core/PersistenceManager.ts +8 -8
  387. package/src/core/PromptComposer.ts +209 -140
  388. package/src/core/PromptSectionCache.ts +1 -1
  389. package/src/core/ResponseEngine.ts +61 -46
  390. package/src/core/ResponseModal.ts +1453 -1240
  391. package/src/core/ResponsePipeline.ts +655 -175
  392. package/src/core/SignalEvaluator.ts +420 -0
  393. package/src/core/SignalProcessor.ts +723 -0
  394. package/src/core/Step.ts +279 -176
  395. package/src/core/StreamingToolExecutor.ts +4 -4
  396. package/src/core/ToolManager.ts +200 -97
  397. package/src/core/createAgent.ts +40 -0
  398. package/src/core/flow-namespace.ts +219 -0
  399. package/src/index.ts +42 -36
  400. package/src/providers/AnthropicProvider.ts +2 -2
  401. package/src/providers/GeminiProvider.ts +2 -2
  402. package/src/providers/OpenAIProvider.ts +2 -2
  403. package/src/types/agent.ts +182 -53
  404. package/src/types/ai.ts +3 -3
  405. package/src/types/errors.ts +18 -0
  406. package/src/types/flow.ts +590 -0
  407. package/src/types/index.ts +43 -16
  408. package/src/types/persistence.ts +12 -8
  409. package/src/types/routing.ts +1 -1
  410. package/src/types/session.ts +26 -23
  411. package/src/types/signals.ts +321 -0
  412. package/src/types/template.ts +3 -11
  413. package/src/types/tool.ts +50 -42
  414. package/src/utils/condition.ts +13 -4
  415. package/src/utils/id.ts +27 -9
  416. package/src/utils/index.ts +6 -2
  417. package/src/utils/session.ts +238 -42
  418. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  419. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  420. package/dist/cjs/core/BatchExecutor.js +0 -861
  421. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  422. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  423. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  424. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  425. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  426. package/dist/cjs/core/Route.d.ts +0 -180
  427. package/dist/cjs/core/Route.d.ts.map +0 -1
  428. package/dist/cjs/core/Route.js +0 -542
  429. package/dist/cjs/core/Route.js.map +0 -1
  430. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  431. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  432. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  433. package/dist/cjs/types/route.d.ts +0 -336
  434. package/dist/cjs/types/route.d.ts.map +0 -1
  435. package/dist/cjs/types/route.js.map +0 -1
  436. package/dist/core/BatchExecutor.d.ts +0 -359
  437. package/dist/core/BatchExecutor.d.ts.map +0 -1
  438. package/dist/core/BatchExecutor.js +0 -856
  439. package/dist/core/BatchExecutor.js.map +0 -1
  440. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  441. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  442. package/dist/core/BatchPromptBuilder.js +0 -219
  443. package/dist/core/BatchPromptBuilder.js.map +0 -1
  444. package/dist/core/Route.d.ts +0 -180
  445. package/dist/core/Route.d.ts.map +0 -1
  446. package/dist/core/Route.js +0 -538
  447. package/dist/core/Route.js.map +0 -1
  448. package/dist/core/RoutingEngine.d.ts +0 -185
  449. package/dist/core/RoutingEngine.d.ts.map +0 -1
  450. package/dist/core/RoutingEngine.js.map +0 -1
  451. package/dist/types/route.d.ts +0 -336
  452. package/dist/types/route.d.ts.map +0 -1
  453. package/dist/types/route.js +0 -5
  454. package/dist/types/route.js.map +0 -1
  455. package/docs/CONTRIBUTING.md +0 -521
  456. package/docs/api/README.md +0 -3299
  457. package/docs/api/overview.md +0 -1410
  458. package/docs/architecture/data-extraction-flow.md +0 -360
  459. package/docs/architecture/multi-step-execution.md +0 -277
  460. package/docs/core/agent/README.md +0 -938
  461. package/docs/core/agent/context-management.md +0 -796
  462. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  463. package/docs/core/agent/session-management.md +0 -693
  464. package/docs/core/ai-integration/prompt-composition.md +0 -355
  465. package/docs/core/ai-integration/providers.md +0 -515
  466. package/docs/core/ai-integration/response-processing.md +0 -433
  467. package/docs/core/conversation-flows/data-collection.md +0 -772
  468. package/docs/core/conversation-flows/route-dsl.md +0 -509
  469. package/docs/core/conversation-flows/routes.md +0 -249
  470. package/docs/core/conversation-flows/step-transitions.md +0 -731
  471. package/docs/core/conversation-flows/steps.md +0 -268
  472. package/docs/core/error-handling.md +0 -830
  473. package/docs/core/persistence/adapters.md +0 -255
  474. package/docs/core/persistence/session-storage.md +0 -656
  475. package/docs/core/routing/intelligent-routing.md +0 -470
  476. package/docs/core/tools/enhanced-tool.md +0 -186
  477. package/docs/core/tools/streaming-execution.md +0 -161
  478. package/docs/core/tools/tool-definition.md +0 -970
  479. package/docs/core/tools/tool-scoping.md +0 -819
  480. package/docs/guides/advanced-patterns/publishing.md +0 -186
  481. package/docs/guides/context-compaction.md +0 -96
  482. package/docs/guides/error-handling-patterns.md +0 -578
  483. package/docs/guides/getting-started/README.md +0 -795
  484. package/docs/guides/migration/README.md +0 -101
  485. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  486. package/docs/guides/migration/multi-step-execution.md +0 -393
  487. package/docs/guides/migration/response-modal-refactor.md +0 -518
  488. package/docs/guides/prompt-optimization.md +0 -164
  489. package/examples/advanced-patterns/context-compaction.ts +0 -223
  490. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  491. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  492. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  493. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  494. package/examples/ai-providers/anthropic-integration.ts +0 -388
  495. package/examples/ai-providers/openai-integration.ts +0 -228
  496. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  497. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  498. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  499. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  500. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  501. package/examples/conversation-flows/completion-transitions.ts +0 -318
  502. package/examples/core-concepts/basic-agent.ts +0 -503
  503. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  504. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  505. package/examples/core-concepts/session-management.ts +0 -494
  506. package/examples/integrations/database-integration.ts +0 -631
  507. package/examples/integrations/healthcare-integration.ts +0 -595
  508. package/examples/integrations/search-integration.ts +0 -530
  509. package/examples/integrations/server-session-management.ts +0 -307
  510. package/examples/persistence/custom-adapter.ts +0 -526
  511. package/examples/persistence/database-persistence.ts +0 -583
  512. package/examples/persistence/memory-sessions.ts +0 -495
  513. package/examples/persistence/prisma-schema.example.prisma +0 -74
  514. package/examples/persistence/redis-persistence.ts +0 -488
  515. package/examples/tools/basic-tools.ts +0 -765
  516. package/examples/tools/data-enrichment-tools.ts +0 -593
  517. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  518. package/examples/tools/streaming-tool-execution.ts +0 -283
  519. package/src/core/BatchExecutor.ts +0 -1187
  520. package/src/core/BatchPromptBuilder.ts +0 -299
  521. package/src/core/Route.ts +0 -678
  522. package/src/types/route.ts +0 -392
@@ -1,583 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
2
- /**
3
- * Example: Using Prisma ORM for Persistence with New Session Management
4
- *
5
- * This example demonstrates the new automatic session management features:
6
- * - Automatic session creation and loading with sessionId
7
- * - Built-in conversation history management
8
- * - Simplified server-side usage patterns
9
- * - SessionManager API for direct session control
10
- */
11
-
12
- import {
13
- Agent,
14
- GeminiProvider,
15
- PrismaAdapter,
16
- END_ROUTE,
17
- } from "../../src";
18
-
19
- // @ts-expect-error - PrismaClient is not typed
20
- import { PrismaClient } from "@prisma/client";
21
-
22
- /**
23
- * Setup Steps:
24
- *
25
- * 1. Install dependencies:
26
- * npm install prisma @prisma/client
27
- *
28
- * 2. Initialize Prisma:
29
- * npx prisma init
30
- *
31
- * 3. Copy schema from examples/prisma-schema.example.prisma
32
- * to your prisma/schema.prisma file
33
- *
34
- * 4. Generate Prisma client:
35
- * npx prisma generate
36
- *
37
- * 5. Run migrations:
38
- * npx prisma migrate dev --name init
39
- */
40
-
41
- // Example context type
42
- interface ConversationContext {
43
- userId: string;
44
- userName: string;
45
- currentBooking?: {
46
- destination?: string;
47
- departureDate?: string;
48
- returnDate?: string;
49
- passengers?: number;
50
- };
51
- }
52
-
53
- // Collected data type for flight booking
54
- interface FlightBookingData {
55
- destination: string;
56
- departureDate: string;
57
- returnDate?: string;
58
- passengers: number;
59
- cabinClass: "economy" | "premium" | "business" | "first";
60
- }
61
-
62
- // Collected data type for onboarding
63
- interface OnboardingData {
64
- fullName: string;
65
- email: string;
66
- phoneNumber: string;
67
- country: string;
68
- }
69
-
70
- // Collected data type for contact form
71
- interface ContactFormData {
72
- name: string;
73
- email: string;
74
- message: string;
75
- }
76
-
77
- async function example() {
78
- // Initialize Prisma client
79
- const prisma = new PrismaClient();
80
-
81
- /**
82
- * Server-Style Usage: Create Agent per request with sessionId
83
- * This is the recommended pattern for server environments
84
- */
85
- const sessionId = "session_user123_booking"; // Could be from request params
86
-
87
- const agent = new Agent<ConversationContext, FlightBookingData>({
88
- name: "Travel Assistant",
89
- description: "A helpful travel booking assistant",
90
- goal: "Help users book flights with ease",
91
- provider: new GeminiProvider({
92
- apiKey: process.env.GEMINI_API_KEY!,
93
- model: "models/gemini-2.5-flash",
94
- }),
95
- context: {
96
- userId: "user_123",
97
- userName: "Alice",
98
- },
99
- persistence: {
100
- adapter: new PrismaAdapter({ prisma }),
101
- autoSave: true, // Auto-saves session after each response
102
- },
103
- schema: {
104
- type: "object",
105
- properties: {
106
- destination: {
107
- type: "string",
108
- description: "Destination city or airport",
109
- },
110
- departureDate: {
111
- type: "string",
112
- description: "Departure date (YYYY-MM-DD)",
113
- },
114
- returnDate: {
115
- type: "string",
116
- description: "Return date (YYYY-MM-DD)",
117
- },
118
- passengers: {
119
- type: "number",
120
- minimum: 1,
121
- maximum: 9,
122
- description: "Number of passengers",
123
- },
124
- cabinClass: {
125
- type: "string",
126
- enum: ["economy", "premium", "business", "first"],
127
- default: "economy",
128
- description: "Cabin class preference",
129
- },
130
- },
131
- required: ["destination", "departureDate", "passengers", "cabinClass"],
132
- },
133
- sessionId, // ✨ Agent will automatically load or create this session
134
- });
135
-
136
- /**
137
- * Create a route with data extraction schema
138
- */
139
- const flightRoute = agent.createRoute({
140
- title: "Book a Flight",
141
- description: "Help user book a flight ticket",
142
- when: [
143
- "User wants to book a flight",
144
- "User mentions travel, flying, or booking tickets",
145
- ],
146
- });
147
-
148
- // Step flow with smart data collecting and custom IDs
149
- const askDestination = flightRoute.initialStep.nextStep({
150
- id: "ask_destination", // Custom step ID for easier tracking
151
- prompt: "Ask where they want to fly",
152
- collect: ["destination"],
153
- skipIf: (ctx) => !!ctx.data?.destination,
154
- });
155
-
156
- const askDates = askDestination.nextStep({
157
- id: "ask_dates", // Custom step ID
158
- prompt: "Ask about travel dates",
159
- collect: ["departureDate", "returnDate"],
160
- skipIf: (ctx) => !!ctx.data?.departureDate,
161
- requires: ["destination"],
162
- });
163
-
164
- const askPassengers = askDates.nextStep({
165
- id: "ask_passengers", // Custom step ID
166
- prompt: "Ask how many passengers",
167
- collect: ["passengers"],
168
- skipIf: (ctx) => !!ctx.data?.passengers,
169
- requires: ["destination", "departureDate"],
170
- });
171
-
172
- const askCabinClass = askPassengers.nextStep({
173
- id: "ask_cabin_class", // Custom step ID
174
- prompt: "Ask about cabin class preference",
175
- collect: ["cabinClass"],
176
- skipIf: (ctx) => !!ctx.data?.cabinClass,
177
- requires: ["destination", "departureDate", "passengers"],
178
- });
179
-
180
- const confirmBooking = askCabinClass.nextStep({
181
- id: "confirm_booking", // Custom step ID
182
- prompt: "Present options and confirm booking details",
183
- requires: ["destination", "departureDate", "passengers", "cabinClass"],
184
- });
185
-
186
- confirmBooking.nextStep({ step: END_ROUTE });
187
-
188
- /**
189
- * Session is automatically loaded/created by Agent constructor
190
- * Access it through agent.session
191
- */
192
- console.log("✨ Session ready:", agent.session.id);
193
- console.log("šŸ“Š Session data:", agent.session.getData());
194
- console.log("šŸ“œ Conversation history:", agent.session.getHistory().length, "messages");
195
-
196
- // Set some initial data if this is a new session
197
- if (!agent.session.getData()?.cabinClass) {
198
- await agent.session.setData({ cabinClass: "economy" });
199
- }
200
-
201
- /**
202
- * Turn 1: Simple message-based conversation
203
- * SessionManager automatically handles history and persistence
204
- */
205
- console.log("\n--- Turn 1 ---");
206
-
207
- // Add user message to session history and get response
208
- await agent.session.addMessage("user", "I want to fly to Paris on June 15 with 2 people", "Alice");
209
-
210
- const response1 = await agent.respond({
211
- history: agent.session.getHistory(), // Use session-managed history
212
- });
213
-
214
- console.log("šŸ¤– Agent:", response1.message);
215
- console.log("šŸ“Š Session after turn 1:", {
216
- sessionId: agent.session.id,
217
- currentRoute: response1.session?.currentRoute?.title,
218
- currentStepId: response1.session?.currentStep?.id,
219
- data: agent.session.getData(),
220
- });
221
-
222
- // Add agent response to session history
223
- await agent.session.addMessage("assistant", response1.message);
224
-
225
- /**
226
- * Turn 2: User changes their mind
227
- */
228
- console.log("\n--- Turn 2 ---");
229
-
230
- await agent.session.addMessage("user", "Actually, make that Tokyo instead, and premium class", "Alice");
231
-
232
- const response2 = await agent.respond({
233
- history: agent.session.getHistory(),
234
- });
235
-
236
- console.log("šŸ¤– Agent:", response2.message);
237
- console.log("šŸ“Š Session after turn 2:", {
238
- currentRoute: response2.session?.currentRoute?.title,
239
- currentStep: response2.session?.currentStep?.id,
240
- data: agent.session.getData(),
241
- });
242
-
243
- await agent.session.addMessage("assistant", response2.message);
244
-
245
- if (response2.isRouteComplete) {
246
- console.log("\nāœ… Flight booking complete!");
247
- await sendFlightConfirmation(agent.session.getData());
248
- }
249
-
250
- /**
251
- * Demonstrate session recovery - create new Agent instance with same sessionId
252
- */
253
- console.log("\n--- Session Recovery (New Agent Instance) ---");
254
-
255
- const newAgent = new Agent<ConversationContext, FlightBookingData>({
256
- name: "Travel Assistant",
257
- provider: new GeminiProvider({
258
- apiKey: process.env.GEMINI_API_KEY!,
259
- model: "models/gemini-2.5-flash",
260
- }),
261
- context: {
262
- userId: "user_123",
263
- userName: "Alice",
264
- },
265
- // NEW: Agent-level schema (same as original agent)
266
- schema: {
267
- type: "object",
268
- properties: {
269
- destination: { type: "string" },
270
- departureDate: { type: "string" },
271
- returnDate: { type: "string" },
272
- passengers: { type: "number", minimum: 1, maximum: 9 },
273
- cabinClass: { type: "string", enum: ["economy", "premium", "business", "first"] },
274
- },
275
- required: ["destination", "departureDate", "passengers", "cabinClass"],
276
- },
277
- persistence: {
278
- adapter: new PrismaAdapter({ prisma }),
279
- },
280
- sessionId, // Same sessionId - will load existing session
281
- });
282
-
283
- console.log("šŸ“„ Recovered session:", {
284
- sessionId: newAgent.session.id,
285
- historyLength: newAgent.session.getHistory().length,
286
- data: newAgent.session.getData(),
287
- });
288
-
289
- /**
290
- * Continue conversation with recovered session
291
- */
292
- await newAgent.session.addMessage("user", "Can you confirm my booking details?");
293
-
294
- const confirmResponse = await newAgent.respond({
295
- history: newAgent.session.getHistory(),
296
- });
297
-
298
- console.log("šŸ¤– Confirmation:", confirmResponse.message);
299
- await newAgent.session.addMessage("assistant", confirmResponse.message);
300
-
301
- /**
302
- * Cleanup
303
- */
304
- await prisma.$disconnect();
305
- }
306
-
307
- /**
308
- * Advanced Example: SessionManager with History Management
309
- */
310
- async function advancedExample() {
311
- const prisma = new PrismaClient();
312
- const sessionId = "session_user456_onboarding";
313
-
314
- interface UserContext {
315
- userId: string;
316
- userName: string;
317
- preferences: {
318
- currency: string;
319
- language: string;
320
- };
321
- }
322
-
323
- const agent = new Agent<UserContext, OnboardingData>({
324
- name: "Onboarding Assistant",
325
- description: "Help new users get started",
326
- provider: new GeminiProvider({
327
- apiKey: process.env.GEMINI_API_KEY!,
328
- model: "models/gemini-2.5-flash",
329
- }),
330
- context: {
331
- userId: "user_456",
332
- userName: "Bob",
333
- preferences: {
334
- currency: "USD",
335
- language: "en",
336
- },
337
- },
338
- // Lifecycle hooks for data enrichment
339
- hooks: {
340
- onDataUpdate: async (
341
- data,
342
- previous
343
- ) => {
344
- console.log("šŸ”„ Data updated:", { data, previous });
345
-
346
- // Normalize phone numbers
347
- if (data.phoneNumber) {
348
- data.phoneNumber = data.phoneNumber.replace(/\D/g, "");
349
- }
350
-
351
- // Validate email
352
- if (data.email && !data.email.includes("@")) {
353
- console.warn("āš ļø Invalid email detected");
354
- }
355
-
356
- return data as OnboardingData;
357
- },
358
-
359
- onContextUpdate: async (
360
- newContext: UserContext,
361
- oldContext: UserContext
362
- ) => {
363
- console.log("šŸ”„ Context updated:", { newContext, oldContext });
364
- return Promise.resolve();
365
- },
366
- },
367
- persistence: {
368
- adapter: new PrismaAdapter({ prisma }),
369
- autoSave: true,
370
- },
371
- sessionId,
372
- schema: {
373
- type: "object",
374
- properties: {
375
- fullName: { type: "string" },
376
- email: { type: "string" },
377
- phoneNumber: { type: "string" },
378
- country: { type: "string" },
379
- },
380
- required: ["fullName", "email", "country"],
381
- },
382
- });
383
-
384
- // Create onboarding route
385
- const onboardingRoute = agent.createRoute({
386
- title: "User Onboarding",
387
- description: "Collect user information for account setup",
388
- });
389
-
390
- onboardingRoute.initialStep
391
- .nextStep({
392
- prompt: "Welcome and ask for name",
393
- collect: ["fullName"],
394
- skipIf: (ctx) => !!ctx.data?.fullName,
395
- })
396
- .nextStep({
397
- prompt: "Ask for email",
398
- collect: ["email"],
399
- skipIf: (ctx) => !!ctx.data?.email,
400
- })
401
- .nextStep({
402
- prompt: "Ask for phone number (optional)",
403
- collect: ["phoneNumber"],
404
- })
405
- .nextStep({
406
- prompt: "Ask for country",
407
- collect: ["country"],
408
- skipIf: (ctx) => !!ctx.data?.country,
409
- })
410
- .nextStep({
411
- prompt: "Confirm and complete onboarding",
412
- })
413
- .nextStep({ step: END_ROUTE });
414
-
415
- console.log("✨ Onboarding session ready:", agent.session.id);
416
-
417
- // Demonstrate history override for context setting
418
- const contextHistory = [
419
- { role: "system" as const, content: "User is starting onboarding process" },
420
- { role: "user" as const, content: "I'd like to create an account" },
421
- ];
422
-
423
- const response = await agent.respond({
424
- history: contextHistory, // Override session history for this response
425
- });
426
-
427
- console.log("šŸ¤– Agent:", response.message);
428
- console.log("šŸ“Š Data collected:", agent.session.getData());
429
-
430
- // Add to session history for future responses
431
- await agent.session.addMessage("user", "I'd like to create an account");
432
- await agent.session.addMessage("assistant", response.message);
433
-
434
- // Continue with session-managed history
435
- await agent.session.addMessage("user", "My name is Bob Johnson and email is bob@example.com");
436
-
437
- const response2 = await agent.respond({
438
- history: agent.session.getHistory(),
439
- });
440
-
441
- console.log("šŸ¤– Agent:", response2.message);
442
- console.log("šŸ“Š Normalized data:", agent.session.getData());
443
- // Shows normalized phone and email
444
-
445
- if (response2.isRouteComplete) {
446
- console.log("\nāœ… Onboarding complete!");
447
- await sendOnboardingEmail(agent.session.getData());
448
- }
449
-
450
- await prisma.$disconnect();
451
- }
452
-
453
- /**
454
- * Minimal Example - Server Endpoint Pattern
455
- */
456
- async function serverEndpointExample() {
457
- const prisma = new PrismaClient();
458
-
459
- // Simulate server endpoint receiving request
460
- const requestData = {
461
- sessionId: "session_user789_support", // From client
462
- message: "I need help, my name is John and my email is john@example.com",
463
- };
464
-
465
- // Define contact form schema
466
- const contactFormSchema = {
467
- type: "object",
468
- properties: {
469
- name: { type: "string" },
470
- email: { type: "string" },
471
- message: { type: "string" },
472
- },
473
- required: ["name", "email", "message"],
474
- };
475
-
476
- // Create agent with sessionId (loads existing or creates new)
477
- const agent = new Agent<unknown, ContactFormData>({
478
- name: "Support Agent",
479
- provider: new GeminiProvider({
480
- apiKey: process.env.GEMINI_API_KEY!,
481
- model: "models/gemini-2.5-flash",
482
- }),
483
- // NEW: Agent-level schema
484
- schema: contactFormSchema,
485
- persistence: {
486
- adapter: new PrismaAdapter<unknown>({ prisma }),
487
- autoSave: true,
488
- },
489
- sessionId: requestData.sessionId, // ✨ Automatic session management
490
- });
491
-
492
- // Create a simple contact form route
493
- const contactRoute = agent.createRoute({
494
- title: "Contact Form",
495
- });
496
-
497
- contactRoute.initialStep
498
- .nextStep({
499
- prompt: "Collect all information",
500
- collect: ["name", "email", "message"],
501
- })
502
- .nextStep({
503
- prompt: "Confirm submission",
504
- })
505
- .nextStep({ step: END_ROUTE });
506
-
507
- // Add user message and respond
508
- await agent.session.addMessage("user", requestData.message);
509
-
510
- const response = await agent.respond({
511
- history: agent.session.getHistory(),
512
- });
513
-
514
- await agent.session.addMessage("assistant", response.message);
515
-
516
- // Return response (like in a REST API)
517
- const apiResponse = {
518
- message: response.message,
519
- sessionId: agent.session.id,
520
- isComplete: response.isRouteComplete,
521
- data: agent.session.getData(),
522
- };
523
-
524
- console.log("āœ… API Response:", apiResponse);
525
-
526
- if (response.isRouteComplete) {
527
- console.log("\nāœ… Contact form submitted!");
528
- await logContactForm(agent.session.getData());
529
- }
530
-
531
- await prisma.$disconnect();
532
- return apiResponse;
533
- }
534
-
535
- /**
536
- * Mock function to send a flight confirmation email.
537
- */
538
- async function sendFlightConfirmation(
539
- data
540
- ) {
541
- console.log("\n" + "=".repeat(60));
542
- console.log("šŸš€ Sending Flight Confirmation...");
543
- console.log("=".repeat(60));
544
- console.log("Booking Details:", JSON.stringify(data, null, 2));
545
- console.log(
546
- ` - Sending confirmation for ${data?.passengers} passengers to ${data?.destination}.`
547
- );
548
- await new Promise((resolve) => setTimeout(resolve, 1000));
549
- console.log("✨ Confirmation sent!");
550
- }
551
-
552
- /**
553
- * Mock function to send an onboarding email.
554
- */
555
- async function sendOnboardingEmail(data) {
556
- console.log("\n" + "=".repeat(60));
557
- console.log("šŸš€ Sending Onboarding Email...");
558
- console.log("=".repeat(60));
559
- console.log("Onboarding Details:", JSON.stringify(data, null, 2));
560
- console.log(` - Sending welcome email to ${data?.email}.`);
561
- await new Promise((resolve) => setTimeout(resolve, 1000));
562
- console.log("✨ Email sent!");
563
- }
564
-
565
- /**
566
- * Mock function to log a contact form submission.
567
- */
568
- async function logContactForm(data: Partial<ContactFormData> | undefined) {
569
- console.log("\n" + "=".repeat(60));
570
- console.log("šŸ“ Logging Contact Form Submission...");
571
- console.log("=".repeat(60));
572
- console.log("Submission Details:", JSON.stringify(data, null, 2));
573
- console.log(` - Logging message from ${data?.name}.`);
574
- await new Promise((resolve) => setTimeout(resolve, 500));
575
- console.log("✨ Submission logged!");
576
- }
577
-
578
- // Run the example
579
- if (require.main === module) {
580
- example().catch(console.error);
581
- }
582
-
583
- export { example, advancedExample, serverEndpointExample };