@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,631 +0,0 @@
1
- /**
2
- * Example: Custom Database Integration with New Session Management
3
- *
4
- * This example shows how to integrate with existing database schemas
5
- * while leveraging the new SessionManager for simplified session handling.
6
- *
7
- * Key patterns demonstrated:
8
- * - Using SessionManager with custom database schemas
9
- * - Converting between SessionManager and custom database formats
10
- * - Maintaining backward compatibility with existing systems
11
- * - Session recovery and continuation patterns
12
- */
13
-
14
- import {
15
- Agent,
16
- GeminiProvider,
17
- SessionState,
18
- END_ROUTE,
19
- History,
20
- createSessionId,
21
- } from "../../src";
22
-
23
- /**
24
- * Example: Your existing database structure
25
- * This could be any ORM (Prisma, TypeORM, Drizzle) or query builder
26
- */
27
- interface CustomDatabaseSession {
28
- id: string;
29
- userId: string;
30
- currentRoute?: string;
31
- currentStep?: string;
32
- collectedData?: Record<string, unknown>;
33
- conversationHistory?: Array<{
34
- role: string;
35
- content: string;
36
- name?: string;
37
- timestamp?: string;
38
- }>;
39
- metadata?: Record<string, unknown>;
40
- createdAt: Date;
41
- updatedAt: Date;
42
- }
43
-
44
- interface CustomDatabaseMessage {
45
- id: string;
46
- sessionId: string;
47
- userId: string;
48
- role: string;
49
- content: string;
50
- route?: string;
51
- step?: string;
52
- createdAt: Date;
53
- }
54
-
55
- // Mock database - replace with your actual database
56
- class CustomDatabase {
57
- private sessions: Map<string, CustomDatabaseSession> = new Map();
58
- private messages: Map<string, CustomDatabaseMessage[]> = new Map();
59
-
60
- findSession(id: string): CustomDatabaseSession | null {
61
- return this.sessions.get(id) || null;
62
- }
63
-
64
- createSession(
65
- data: Omit<CustomDatabaseSession, "id" | "createdAt" | "updatedAt">
66
- ): CustomDatabaseSession {
67
- const session: CustomDatabaseSession = {
68
- id: createSessionId(),
69
- ...data,
70
- createdAt: new Date(),
71
- updatedAt: new Date(),
72
- };
73
- this.sessions.set(session.id, session);
74
- return session;
75
- }
76
-
77
- updateSession(
78
- id: string,
79
- data: Partial<CustomDatabaseSession>
80
- ): CustomDatabaseSession | null {
81
- const session = this.sessions.get(id);
82
- if (!session) return null;
83
-
84
- const updated = {
85
- ...session,
86
- ...data,
87
- updatedAt: new Date(),
88
- };
89
- this.sessions.set(id, updated);
90
- return updated;
91
- }
92
-
93
- createMessage(
94
- data: Omit<CustomDatabaseMessage, "id" | "createdAt">
95
- ): CustomDatabaseMessage {
96
- const message: CustomDatabaseMessage = {
97
- id: `msg_${Date.now()}`,
98
- ...data,
99
- createdAt: new Date(),
100
- };
101
-
102
- const messages = this.messages.get(data.sessionId) || [];
103
- messages.push(message);
104
- this.messages.set(data.sessionId, messages);
105
-
106
- return message;
107
- }
108
-
109
- getSessionMessages(sessionId: string): CustomDatabaseMessage[] {
110
- return this.messages.get(sessionId) || [];
111
- }
112
- }
113
-
114
- // Example data type for a customer onboarding route
115
- interface OnboardingData {
116
- fullName: string;
117
- email: string;
118
- companyName: string;
119
- phoneNumber?: string;
120
- industry?: string;
121
- }
122
-
123
- async function example() {
124
- const db = new CustomDatabase();
125
- const userId = "user_123";
126
- const sessionId = "session_user123_onboarding";
127
-
128
- // Define onboarding schema
129
- const onboardingSchema = {
130
- type: "object",
131
- properties: {
132
- fullName: { type: "string" },
133
- email: { type: "string" },
134
- companyName: { type: "string" },
135
- phoneNumber: { type: "string" },
136
- industry: { type: "string" },
137
- },
138
- required: ["fullName", "email", "companyName"],
139
- };
140
-
141
- // Create agent with SessionManager (no persistence adapter)
142
- const agent = new Agent<unknown, OnboardingData>({
143
- name: "Onboarding Assistant",
144
- description: "Help new customers get started",
145
- goal: "Collect customer information efficiently",
146
- provider: new GeminiProvider({
147
- apiKey: process.env.GEMINI_API_KEY!,
148
- model: "models/gemini-2.5-flash",
149
- }),
150
- // NEW: Agent-level schema
151
- schema: onboardingSchema,
152
- // No persistence - we'll sync manually with our database
153
- });
154
-
155
- // Create onboarding route
156
- const onboardingRoute = agent.createRoute({
157
- title: "Customer Onboarding",
158
- description: "Collect customer information",
159
- when: [
160
- "User is a new customer",
161
- "User needs to set up their account",
162
- ],
163
- // NEW: Required fields for route completion
164
- requiredFields: ["fullName", "email", "companyName"],
165
- // NEW: Optional fields that enhance the experience
166
- optionalFields: ["phoneNumber", "industry"],
167
- });
168
-
169
- // Define steps with custom IDs
170
- onboardingRoute.initialStep
171
- .nextStep({
172
- id: "ask_name",
173
- prompt: "Ask for full name",
174
- collect: ["fullName"],
175
- skipIf: (ctx) => !!ctx.data?.fullName,
176
- })
177
- .nextStep({
178
- id: "ask_email",
179
- prompt: "Ask for email address",
180
- collect: ["email"],
181
- skipIf: (ctx) => !!ctx.data?.email,
182
- })
183
- .nextStep({
184
- id: "ask_company",
185
- prompt: "Ask for company name",
186
- collect: ["companyName"],
187
- skipIf: (ctx) => !!ctx.data?.companyName,
188
- })
189
- .nextStep({
190
- id: "ask_phone",
191
- prompt: "Ask for phone number (optional)",
192
- collect: ["phoneNumber"],
193
- })
194
- .nextStep({
195
- id: "ask_industry",
196
- prompt: "Ask for industry",
197
- collect: ["industry"],
198
- })
199
- .nextStep({
200
- id: "confirm_details",
201
- prompt: "Confirm all details",
202
- requires: ["fullName", "email", "companyName"],
203
- })
204
- .nextStep({
205
- id: "complete_onboarding",
206
- prompt:
207
- "Thank you! Your account is set up. You will receive a confirmation email shortly.",
208
- })
209
- .nextStep({ step: END_ROUTE });
210
-
211
- /**
212
- * Load or create session in your custom database
213
- */
214
- let dbSession = db.findSession(sessionId);
215
-
216
- if (!dbSession) {
217
- // Create new session in your database
218
- dbSession = db.createSession({
219
- userId,
220
- collectedData: {},
221
- conversationHistory: [],
222
- });
223
- console.log("✨ Created new database session:", dbSession.id);
224
- } else {
225
- console.log("📥 Found existing database session:", dbSession.id);
226
- }
227
-
228
- /**
229
- * Sync database session with SessionManager
230
- */
231
- // Create or load session in SessionManager
232
- const sessionState = await agent.session.getOrCreate(dbSession.id);
233
-
234
- // Restore conversation history from database
235
- if (dbSession.conversationHistory && dbSession.conversationHistory.length > 0) {
236
- const history = dbSession.conversationHistory.map(msg => {
237
- if (msg.role === 'user') {
238
- return {
239
- role: 'user' as const,
240
- content: msg.content,
241
- name: msg.name,
242
- };
243
- } else {
244
- return {
245
- role: 'assistant' as const,
246
- content: msg.content,
247
- };
248
- }
249
- });
250
- agent.session.setHistory(history);
251
- console.log(`📜 Restored ${history.length} messages from database`);
252
- }
253
-
254
- // Restore collected data from database
255
- if (dbSession.collectedData) {
256
- await agent.session.setData(dbSession.collectedData);
257
- console.log("📊 Restored session data from database");
258
- }
259
-
260
- console.log("✅ Session synchronized:", {
261
- sessionId: agent.session.id,
262
- historyLength: agent.session.getHistory().length,
263
- data: agent.session.getData(),
264
- });
265
-
266
- /**
267
- * Simulate conversation with automatic sync
268
- */
269
- console.log("\n--- Turn 1 ---");
270
-
271
- // Add user message to SessionManager
272
- await agent.session.addMessage("user", "Hi! I'm John Smith and my email is john@acme.com", "User");
273
-
274
- const response1 = await agent.respond({
275
- history: agent.session.getHistory(),
276
- });
277
-
278
- console.log("🤖 Agent:", response1.message);
279
- console.log("📊 Data collected:", agent.session.getData());
280
-
281
- // Add agent response to SessionManager
282
- await agent.session.addMessage("assistant", response1.message);
283
-
284
- // Sync SessionManager state back to your database
285
- await syncSessionToDatabase(agent, db, dbSession.id, userId);
286
- console.log("💾 Session synced to custom database");
287
-
288
- // Turn 2: User provides company
289
- console.log("\n--- Turn 2 ---");
290
-
291
- await agent.session.addMessage("user", "I work for Acme Corporation", "User");
292
-
293
- const response2 = await agent.respond({
294
- history: agent.session.getHistory(),
295
- });
296
-
297
- console.log("🤖 Agent:", response2.message);
298
- console.log("📊 Data collected:", agent.session.getData());
299
-
300
- await agent.session.addMessage("assistant", response2.message);
301
-
302
- // Sync to database again
303
- await syncSessionToDatabase(agent, db, dbSession.id, userId);
304
- console.log("💾 Session synced to custom database");
305
-
306
- // Check for route completion
307
- if (response2.isRouteComplete) {
308
- console.log("\n✅ Onboarding Complete!");
309
- await processOnboarding(agent.session.getData());
310
- }
311
-
312
- /**
313
- * Demonstrate session recovery with new Agent instance
314
- */
315
- console.log("\n--- Session Recovery (New Agent Instance) ---");
316
-
317
- // Create new agent instance (simulating app restart)
318
- const newAgent = new Agent({
319
- name: "Onboarding Assistant",
320
- provider: new GeminiProvider({
321
- apiKey: process.env.GEMINI_API_KEY!,
322
- model: "models/gemini-2.5-flash",
323
- }),
324
- });
325
-
326
- // Load session from database and sync to new SessionManager
327
- const reloadedDbSession = db.findSession(dbSession.id);
328
- if (!reloadedDbSession) throw new Error("Session not found");
329
-
330
- // Load session in new agent's SessionManager
331
- await newAgent.session.getOrCreate(reloadedDbSession.id);
332
-
333
- // Restore history and data
334
- if (reloadedDbSession.conversationHistory) {
335
- const history = reloadedDbSession.conversationHistory.map(msg => {
336
- if (msg.role === 'user') {
337
- return {
338
- role: 'user' as const,
339
- content: msg.content,
340
- name: msg.name,
341
- };
342
- } else {
343
- return {
344
- role: 'assistant' as const,
345
- content: msg.content,
346
- };
347
- }
348
- });
349
- newAgent.session.setHistory(history);
350
- }
351
-
352
- if (reloadedDbSession.collectedData) {
353
- await newAgent.session.setData(reloadedDbSession.collectedData);
354
- }
355
-
356
- console.log("✅ Session recovered in new agent:", {
357
- sessionId: newAgent.session.id,
358
- historyLength: newAgent.session.getHistory().length,
359
- data: newAgent.session.getData(),
360
- });
361
-
362
- // Continue conversation with recovered session
363
- await newAgent.session.addMessage("user", "Can you confirm my details?");
364
-
365
- const confirmResponse = await newAgent.respond({
366
- history: newAgent.session.getHistory(),
367
- });
368
-
369
- console.log("🤖 Confirmation:", confirmResponse.message);
370
- await newAgent.session.addMessage("assistant", confirmResponse.message);
371
-
372
- console.log("\n✅ Example complete!");
373
- }
374
-
375
- /**
376
- * Helper function to sync SessionManager state to custom database
377
- */
378
- async function syncSessionToDatabase(
379
- agent: Agent<unknown, OnboardingData>,
380
- db: CustomDatabase,
381
- sessionId: string,
382
- userId: string
383
- ): Promise<void> {
384
- const sessionData = agent.session.getData();
385
- const history = agent.session.getHistory();
386
-
387
- // Convert SessionManager history to database format
388
- const conversationHistory = history.map(msg => ({
389
- role: msg.role,
390
- content: msg.role === 'assistant' ? (msg.content || '') : msg.content,
391
- name: msg.role === 'user' ? msg.name : undefined,
392
- timestamp: new Date().toISOString(),
393
- }));
394
-
395
- // Update database session
396
- db.updateSession(sessionId, {
397
- collectedData: sessionData,
398
- conversationHistory,
399
- });
400
-
401
- // Save individual messages to database (if needed for your schema)
402
- const existingMessages = db.getSessionMessages(sessionId);
403
- const newMessages = history.slice(existingMessages.length);
404
-
405
- for (const msg of newMessages) {
406
- db.createMessage({
407
- sessionId,
408
- userId,
409
- role: msg.role,
410
- content: msg.content,
411
- });
412
- }
413
- }
414
-
415
- /**
416
- * Mock function to simulate processing the completed onboarding data.
417
- */
418
- async function processOnboarding(data: Partial<OnboardingData>) {
419
- console.log("\n🚀 Processing onboarding data...");
420
- console.log(
421
- ` - Creating account for ${data?.fullName} at ${data?.companyName}`
422
- );
423
- await new Promise((resolve) => setTimeout(resolve, 1000));
424
- console.log(` - Sending welcome email to ${data?.email}`);
425
- await new Promise((resolve) => setTimeout(resolve, 1000));
426
- console.log("✨ Onboarding processed successfully!");
427
- }
428
-
429
- /**
430
- * Advanced Example: SessionManager with Data Validation Hooks
431
- */
432
- async function advancedExample() {
433
- const db = new CustomDatabase();
434
- const sessionId = "session_user456_smart_onboarding";
435
-
436
- const smartOnboardingSchema = {
437
- type: "object",
438
- properties: {
439
- fullName: { type: "string" },
440
- email: { type: "string" },
441
- companyName: { type: "string" },
442
- phoneNumber: { type: "string" },
443
- },
444
- required: ["fullName", "email", "companyName"],
445
- };
446
-
447
- const agent = new Agent<unknown, OnboardingData>({
448
- name: "Smart Onboarding",
449
- provider: new GeminiProvider({
450
- apiKey: process.env.GEMINI_API_KEY!,
451
- model: "models/gemini-2.5-flash",
452
- }),
453
- // NEW: Agent-level schema
454
- schema: smartOnboardingSchema,
455
- hooks: {
456
- // Validate and enrich collected data
457
- onDataUpdate: (data, _previous: Partial<OnboardingData>) => {
458
- console.log("🔄 Data collected, validating...");
459
-
460
- // Normalize email
461
- if (data.email) {
462
- data.email = data.email.toLowerCase().trim();
463
- }
464
-
465
- // Normalize phone
466
- if (data.phoneNumber) {
467
- data.phoneNumber = data.phoneNumber.replace(/\D/g, "");
468
- }
469
-
470
- return data;
471
- },
472
- },
473
- });
474
-
475
- const route = agent.createRoute({
476
- title: "Smart Onboarding",
477
- // NEW: Required fields for route completion
478
- requiredFields: ["fullName", "email", "companyName"],
479
- // NEW: Optional fields
480
- optionalFields: ["phoneNumber"],
481
- });
482
-
483
- route.initialStep.nextStep({
484
- id: "collect_all",
485
- prompt: "Collect all information",
486
- collect: ["fullName", "email", "companyName", "phoneNumber"],
487
- });
488
-
489
- // Create database session
490
- const dbSession = db.createSession({
491
- userId: "user_456",
492
- collectedData: {},
493
- conversationHistory: [],
494
- });
495
-
496
- // Load session in SessionManager
497
- await agent.session.getOrCreate(dbSession.id);
498
-
499
- // Add user message and respond
500
- await agent.session.addMessage(
501
- "user",
502
- "I'm Alice Johnson, alice@EXAMPLE.COM, working for TechCorp. Phone: (555) 123-4567",
503
- "User"
504
- );
505
-
506
- const response = await agent.respond({
507
- history: agent.session.getHistory(),
508
- });
509
-
510
- console.log("🤖 Agent:", response.message);
511
- console.log("📊 Normalized data:", agent.session.getData());
512
- // Shows: { email: "alice@example.com", phoneNumber: "5551234567", ... }
513
-
514
- await agent.session.addMessage("assistant", response.message);
515
-
516
- // Sync to custom database
517
- await syncSessionToDatabase(agent, db, dbSession.id, "user_456");
518
-
519
- console.log("✅ Validated data saved to custom database!");
520
- }
521
-
522
- /**
523
- * Server Endpoint Example: Express-style API with SessionManager
524
- */
525
- async function serverEndpointExample() {
526
- const db = new CustomDatabase();
527
-
528
- // Simulate Express endpoint
529
- async function handleChatRequest(req: {
530
- sessionId?: string;
531
- userId: string;
532
- message: string;
533
- }) {
534
- const { sessionId, userId, message } = req;
535
-
536
- // Create agent with sessionId (loads existing or creates new)
537
- const agent = new Agent<unknown, OnboardingData>({
538
- name: "Customer Support",
539
- provider: new GeminiProvider({
540
- apiKey: process.env.GEMINI_API_KEY!,
541
- model: "models/gemini-2.5-flash",
542
- }),
543
- });
544
-
545
- // Load or create session
546
- const effectiveSessionId = sessionId || createSessionId();
547
- await agent.session.getOrCreate(effectiveSessionId);
548
-
549
- // Try to load from database if session exists
550
- const dbSession = db.findSession(effectiveSessionId);
551
- if (dbSession && dbSession.conversationHistory) {
552
- const history = dbSession.conversationHistory.map(msg => {
553
- if (msg.role === 'user') {
554
- return {
555
- role: 'user' as const,
556
- content: msg.content,
557
- name: msg.name,
558
- };
559
- } else {
560
- return {
561
- role: 'assistant' as const,
562
- content: msg.content,
563
- };
564
- }
565
- });
566
- agent.session.setHistory(history);
567
-
568
- if (dbSession.collectedData) {
569
- await agent.session.setData(dbSession.collectedData);
570
- }
571
- }
572
-
573
- // Add user message and respond
574
- await agent.session.addMessage("user", message);
575
-
576
- const response = await agent.respond({
577
- history: agent.session.getHistory(),
578
- });
579
-
580
- await agent.session.addMessage("assistant", response.message);
581
-
582
- // Sync back to database
583
- if (!dbSession) {
584
- db.createSession({
585
- userId,
586
- collectedData: agent.session.getData(),
587
- conversationHistory: agent.session.getHistory().map(msg => ({
588
- role: msg.role,
589
- content: msg.role === 'assistant' ? (msg.content || '') : msg.content,
590
- name: msg.role === 'user' ? msg.name : undefined,
591
- timestamp: new Date().toISOString(),
592
- })),
593
- });
594
- } else {
595
- await syncSessionToDatabase(agent, db, effectiveSessionId, userId);
596
- }
597
-
598
- // Return API response
599
- return {
600
- message: response.message,
601
- sessionId: agent.session.id,
602
- isComplete: response.isRouteComplete,
603
- data: agent.session.getData(),
604
- };
605
- }
606
-
607
- // Simulate API calls
608
- console.log("🌐 Simulating server endpoint calls...");
609
-
610
- const response1 = await handleChatRequest({
611
- userId: "user_789",
612
- message: "I need help with my account",
613
- });
614
- console.log("📤 Response 1:", response1);
615
-
616
- const response2 = await handleChatRequest({
617
- sessionId: response1.sessionId,
618
- userId: "user_789",
619
- message: "I can't log in",
620
- });
621
- console.log("📤 Response 2:", response2);
622
-
623
- console.log("✅ Server endpoint example complete!");
624
- }
625
-
626
- // Run the example
627
- if (require.main === module) {
628
- example().catch(console.error);
629
- }
630
-
631
- export { example, advancedExample, serverEndpointExample };