@falai/agent 1.2.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) 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/types/agent.d.ts +183 -54
  126. package/dist/cjs/types/agent.d.ts.map +1 -1
  127. package/dist/cjs/types/agent.js +0 -6
  128. package/dist/cjs/types/agent.js.map +1 -1
  129. package/dist/cjs/types/ai.d.ts +3 -3
  130. package/dist/cjs/types/ai.d.ts.map +1 -1
  131. package/dist/cjs/types/errors.d.ts +15 -0
  132. package/dist/cjs/types/errors.d.ts.map +1 -0
  133. package/dist/cjs/types/errors.js +22 -0
  134. package/dist/cjs/types/errors.js.map +1 -0
  135. package/dist/cjs/types/flow.d.ts +513 -0
  136. package/dist/cjs/types/flow.d.ts.map +1 -0
  137. package/dist/cjs/types/{route.js → flow.js} +2 -2
  138. package/dist/cjs/types/flow.js.map +1 -0
  139. package/dist/cjs/types/index.d.ts +7 -6
  140. package/dist/cjs/types/index.d.ts.map +1 -1
  141. package/dist/cjs/types/index.js +6 -2
  142. package/dist/cjs/types/index.js.map +1 -1
  143. package/dist/cjs/types/persistence.d.ts +11 -7
  144. package/dist/cjs/types/persistence.d.ts.map +1 -1
  145. package/dist/cjs/types/routing.d.ts +1 -1
  146. package/dist/cjs/types/routing.d.ts.map +1 -1
  147. package/dist/cjs/types/session.d.ts +24 -23
  148. package/dist/cjs/types/session.d.ts.map +1 -1
  149. package/dist/cjs/types/signals.d.ts +248 -0
  150. package/dist/cjs/types/signals.d.ts.map +1 -0
  151. package/dist/cjs/types/signals.js +11 -0
  152. package/dist/cjs/types/signals.js.map +1 -0
  153. package/dist/cjs/types/template.d.ts +2 -8
  154. package/dist/cjs/types/template.d.ts.map +1 -1
  155. package/dist/cjs/types/tool.d.ts +36 -29
  156. package/dist/cjs/types/tool.d.ts.map +1 -1
  157. package/dist/cjs/types/tool.js +1 -1
  158. package/dist/cjs/types/tool.js.map +1 -1
  159. package/dist/cjs/utils/condition.d.ts +7 -1
  160. package/dist/cjs/utils/condition.d.ts.map +1 -1
  161. package/dist/cjs/utils/condition.js.map +1 -1
  162. package/dist/cjs/utils/id.d.ts +13 -5
  163. package/dist/cjs/utils/id.d.ts.map +1 -1
  164. package/dist/cjs/utils/id.js +24 -10
  165. package/dist/cjs/utils/id.js.map +1 -1
  166. package/dist/cjs/utils/index.d.ts +2 -2
  167. package/dist/cjs/utils/index.d.ts.map +1 -1
  168. package/dist/cjs/utils/index.js +7 -3
  169. package/dist/cjs/utils/index.js.map +1 -1
  170. package/dist/cjs/utils/session.d.ts +44 -5
  171. package/dist/cjs/utils/session.d.ts.map +1 -1
  172. package/dist/cjs/utils/session.js +197 -38
  173. package/dist/cjs/utils/session.js.map +1 -1
  174. package/dist/constants/index.d.ts +0 -9
  175. package/dist/constants/index.d.ts.map +1 -1
  176. package/dist/constants/index.js +3 -9
  177. package/dist/constants/index.js.map +1 -1
  178. package/dist/core/Agent.d.ts +119 -153
  179. package/dist/core/Agent.d.ts.map +1 -1
  180. package/dist/core/Agent.js +472 -325
  181. package/dist/core/Agent.js.map +1 -1
  182. package/dist/core/AutoChainExecutor.d.ts +107 -0
  183. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  184. package/dist/core/AutoChainExecutor.js +293 -0
  185. package/dist/core/AutoChainExecutor.js.map +1 -0
  186. package/dist/core/BranchEvaluator.d.ts +54 -0
  187. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  188. package/dist/core/BranchEvaluator.js +126 -0
  189. package/dist/core/BranchEvaluator.js.map +1 -0
  190. package/dist/core/DirectiveBus.d.ts +88 -0
  191. package/dist/core/DirectiveBus.d.ts.map +1 -0
  192. package/dist/core/DirectiveBus.js +192 -0
  193. package/dist/core/DirectiveBus.js.map +1 -0
  194. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  195. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  196. package/dist/core/DirectiveChainTracker.js +117 -0
  197. package/dist/core/DirectiveChainTracker.js.map +1 -0
  198. package/dist/core/Flow.d.ts +186 -0
  199. package/dist/core/Flow.d.ts.map +1 -0
  200. package/dist/core/Flow.js +546 -0
  201. package/dist/core/Flow.js.map +1 -0
  202. package/dist/core/FlowRouter.d.ts +182 -0
  203. package/dist/core/FlowRouter.d.ts.map +1 -0
  204. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  205. package/dist/core/FlowRouter.js.map +1 -0
  206. package/dist/core/PersistenceManager.d.ts +2 -2
  207. package/dist/core/PersistenceManager.d.ts.map +1 -1
  208. package/dist/core/PersistenceManager.js +7 -7
  209. package/dist/core/PersistenceManager.js.map +1 -1
  210. package/dist/core/PromptComposer.d.ts +21 -8
  211. package/dist/core/PromptComposer.d.ts.map +1 -1
  212. package/dist/core/PromptComposer.js +183 -106
  213. package/dist/core/PromptComposer.js.map +1 -1
  214. package/dist/core/PromptSectionCache.d.ts +1 -1
  215. package/dist/core/PromptSectionCache.js +1 -1
  216. package/dist/core/ResponseEngine.d.ts +18 -8
  217. package/dist/core/ResponseEngine.d.ts.map +1 -1
  218. package/dist/core/ResponseEngine.js +38 -36
  219. package/dist/core/ResponseEngine.js.map +1 -1
  220. package/dist/core/ResponseModal.d.ts +73 -56
  221. package/dist/core/ResponseModal.d.ts.map +1 -1
  222. package/dist/core/ResponseModal.js +1193 -1016
  223. package/dist/core/ResponseModal.js.map +1 -1
  224. package/dist/core/ResponsePipeline.d.ts +124 -26
  225. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  226. package/dist/core/ResponsePipeline.js +509 -137
  227. package/dist/core/ResponsePipeline.js.map +1 -1
  228. package/dist/core/SignalEvaluator.d.ts +86 -0
  229. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  230. package/dist/core/SignalEvaluator.js +326 -0
  231. package/dist/core/SignalEvaluator.js.map +1 -0
  232. package/dist/core/SignalProcessor.d.ts +152 -0
  233. package/dist/core/SignalProcessor.d.ts.map +1 -0
  234. package/dist/core/SignalProcessor.js +555 -0
  235. package/dist/core/SignalProcessor.js.map +1 -0
  236. package/dist/core/Step.d.ts +43 -32
  237. package/dist/core/Step.d.ts.map +1 -1
  238. package/dist/core/Step.js +220 -126
  239. package/dist/core/Step.js.map +1 -1
  240. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  241. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  242. package/dist/core/StreamingToolExecutor.js.map +1 -1
  243. package/dist/core/ToolManager.d.ts +44 -13
  244. package/dist/core/ToolManager.d.ts.map +1 -1
  245. package/dist/core/ToolManager.js +174 -91
  246. package/dist/core/ToolManager.js.map +1 -1
  247. package/dist/core/createAgent.d.ts +35 -0
  248. package/dist/core/createAgent.d.ts.map +1 -0
  249. package/dist/core/createAgent.js +36 -0
  250. package/dist/core/createAgent.js.map +1 -0
  251. package/dist/core/flow-namespace.d.ts +49 -0
  252. package/dist/core/flow-namespace.d.ts.map +1 -0
  253. package/dist/core/flow-namespace.js +168 -0
  254. package/dist/core/flow-namespace.js.map +1 -0
  255. package/dist/index.d.ts +11 -14
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +9 -12
  258. package/dist/index.js.map +1 -1
  259. package/dist/types/agent.d.ts +183 -54
  260. package/dist/types/agent.d.ts.map +1 -1
  261. package/dist/types/agent.js +0 -6
  262. package/dist/types/agent.js.map +1 -1
  263. package/dist/types/ai.d.ts +3 -3
  264. package/dist/types/ai.d.ts.map +1 -1
  265. package/dist/types/errors.d.ts +15 -0
  266. package/dist/types/errors.d.ts.map +1 -0
  267. package/dist/types/errors.js +18 -0
  268. package/dist/types/errors.js.map +1 -0
  269. package/dist/types/flow.d.ts +513 -0
  270. package/dist/types/flow.d.ts.map +1 -0
  271. package/dist/types/flow.js +5 -0
  272. package/dist/types/flow.js.map +1 -0
  273. package/dist/types/index.d.ts +7 -6
  274. package/dist/types/index.d.ts.map +1 -1
  275. package/dist/types/index.js +4 -1
  276. package/dist/types/index.js.map +1 -1
  277. package/dist/types/persistence.d.ts +11 -7
  278. package/dist/types/persistence.d.ts.map +1 -1
  279. package/dist/types/routing.d.ts +1 -1
  280. package/dist/types/routing.d.ts.map +1 -1
  281. package/dist/types/session.d.ts +24 -23
  282. package/dist/types/session.d.ts.map +1 -1
  283. package/dist/types/signals.d.ts +248 -0
  284. package/dist/types/signals.d.ts.map +1 -0
  285. package/dist/types/signals.js +10 -0
  286. package/dist/types/signals.js.map +1 -0
  287. package/dist/types/template.d.ts +2 -8
  288. package/dist/types/template.d.ts.map +1 -1
  289. package/dist/types/tool.d.ts +36 -29
  290. package/dist/types/tool.d.ts.map +1 -1
  291. package/dist/types/tool.js +1 -1
  292. package/dist/types/tool.js.map +1 -1
  293. package/dist/utils/condition.d.ts +7 -1
  294. package/dist/utils/condition.d.ts.map +1 -1
  295. package/dist/utils/condition.js.map +1 -1
  296. package/dist/utils/id.d.ts +13 -5
  297. package/dist/utils/id.d.ts.map +1 -1
  298. package/dist/utils/id.js +22 -9
  299. package/dist/utils/id.js.map +1 -1
  300. package/dist/utils/index.d.ts +2 -2
  301. package/dist/utils/index.d.ts.map +1 -1
  302. package/dist/utils/index.js +2 -2
  303. package/dist/utils/index.js.map +1 -1
  304. package/dist/utils/session.d.ts +44 -5
  305. package/dist/utils/session.d.ts.map +1 -1
  306. package/dist/utils/session.js +193 -37
  307. package/dist/utils/session.js.map +1 -1
  308. package/docs/README.md +15 -202
  309. package/docs/concepts/architecture.md +281 -0
  310. package/docs/concepts/directives.md +400 -0
  311. package/docs/concepts/pipeline.md +399 -0
  312. package/docs/guides/branching.md +263 -0
  313. package/docs/guides/compaction.md +163 -0
  314. package/docs/guides/conditions.md +167 -0
  315. package/docs/guides/error-handling.md +176 -0
  316. package/docs/guides/flow-control.md +409 -0
  317. package/docs/guides/instructions.md +210 -0
  318. package/docs/guides/persistence.md +182 -0
  319. package/docs/guides/streaming.md +137 -0
  320. package/docs/migration/README.md +15 -0
  321. package/docs/migration/route-to-flow.md +560 -0
  322. package/docs/migration/v1-to-v2.md +909 -0
  323. package/docs/reference/adapters.md +481 -0
  324. package/docs/reference/branches.md +241 -0
  325. package/docs/reference/create-agent.md +186 -0
  326. package/docs/reference/directive.md +243 -0
  327. package/docs/reference/errors.md +122 -0
  328. package/docs/reference/flow.md +238 -0
  329. package/docs/reference/instruction.md +177 -0
  330. package/docs/reference/pre-directive.md +131 -0
  331. package/docs/reference/providers.md +227 -0
  332. package/docs/reference/signals.md +356 -0
  333. package/docs/reference/step.md +339 -0
  334. package/docs/reference/tool.md +269 -0
  335. package/docs/start/01-install.md +81 -0
  336. package/docs/start/02-first-agent.md +196 -0
  337. package/docs/start/03-collect-data.md +222 -0
  338. package/docs/start/04-add-tools.md +276 -0
  339. package/docs/start/05-go-to-production.md +216 -0
  340. package/examples/01-quickstart.ts +20 -0
  341. package/examples/02-data-extraction.ts +90 -0
  342. package/examples/03-tools.ts +136 -0
  343. package/examples/04-instructions.ts +100 -0
  344. package/examples/05-branching.ts +140 -0
  345. package/examples/06-flow-control.ts +103 -0
  346. package/examples/07-streaming.ts +69 -0
  347. package/examples/08-persistence.ts +98 -0
  348. package/examples/09-signals.ts +144 -0
  349. package/examples/tsconfig.json +30 -0
  350. package/package.json +2 -1
  351. package/src/adapters/MemoryAdapter.ts +3 -3
  352. package/src/adapters/MongoAdapter.ts +3 -3
  353. package/src/adapters/OpenSearchAdapter.ts +10 -8
  354. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  355. package/src/adapters/PrismaAdapter.ts +6 -6
  356. package/src/adapters/RedisAdapter.ts +3 -3
  357. package/src/adapters/SQLiteAdapter.ts +31 -12
  358. package/src/constants/index.ts +2 -10
  359. package/src/core/Agent.ts +585 -374
  360. package/src/core/AutoChainExecutor.ts +440 -0
  361. package/src/core/BranchEvaluator.ts +167 -0
  362. package/src/core/DirectiveBus.ts +248 -0
  363. package/src/core/DirectiveChainTracker.ts +144 -0
  364. package/src/core/Flow.ts +666 -0
  365. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  366. package/src/core/PersistenceManager.ts +8 -8
  367. package/src/core/PromptComposer.ts +209 -140
  368. package/src/core/PromptSectionCache.ts +1 -1
  369. package/src/core/ResponseEngine.ts +61 -46
  370. package/src/core/ResponseModal.ts +1453 -1240
  371. package/src/core/ResponsePipeline.ts +655 -175
  372. package/src/core/SignalEvaluator.ts +420 -0
  373. package/src/core/SignalProcessor.ts +723 -0
  374. package/src/core/Step.ts +279 -176
  375. package/src/core/StreamingToolExecutor.ts +4 -4
  376. package/src/core/ToolManager.ts +200 -97
  377. package/src/core/createAgent.ts +40 -0
  378. package/src/core/flow-namespace.ts +219 -0
  379. package/src/index.ts +42 -36
  380. package/src/types/agent.ts +182 -53
  381. package/src/types/ai.ts +3 -3
  382. package/src/types/errors.ts +18 -0
  383. package/src/types/flow.ts +590 -0
  384. package/src/types/index.ts +43 -16
  385. package/src/types/persistence.ts +12 -8
  386. package/src/types/routing.ts +1 -1
  387. package/src/types/session.ts +26 -23
  388. package/src/types/signals.ts +321 -0
  389. package/src/types/template.ts +3 -11
  390. package/src/types/tool.ts +50 -42
  391. package/src/utils/condition.ts +13 -4
  392. package/src/utils/id.ts +27 -9
  393. package/src/utils/index.ts +6 -2
  394. package/src/utils/session.ts +238 -42
  395. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  396. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  397. package/dist/cjs/core/BatchExecutor.js +0 -861
  398. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  399. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  400. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  401. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  402. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  403. package/dist/cjs/core/Route.d.ts +0 -180
  404. package/dist/cjs/core/Route.d.ts.map +0 -1
  405. package/dist/cjs/core/Route.js +0 -542
  406. package/dist/cjs/core/Route.js.map +0 -1
  407. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  408. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  409. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  410. package/dist/cjs/types/route.d.ts +0 -336
  411. package/dist/cjs/types/route.d.ts.map +0 -1
  412. package/dist/cjs/types/route.js.map +0 -1
  413. package/dist/core/BatchExecutor.d.ts +0 -359
  414. package/dist/core/BatchExecutor.d.ts.map +0 -1
  415. package/dist/core/BatchExecutor.js +0 -856
  416. package/dist/core/BatchExecutor.js.map +0 -1
  417. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  418. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  419. package/dist/core/BatchPromptBuilder.js +0 -219
  420. package/dist/core/BatchPromptBuilder.js.map +0 -1
  421. package/dist/core/Route.d.ts +0 -180
  422. package/dist/core/Route.d.ts.map +0 -1
  423. package/dist/core/Route.js +0 -538
  424. package/dist/core/Route.js.map +0 -1
  425. package/dist/core/RoutingEngine.d.ts +0 -185
  426. package/dist/core/RoutingEngine.d.ts.map +0 -1
  427. package/dist/core/RoutingEngine.js.map +0 -1
  428. package/dist/types/route.d.ts +0 -336
  429. package/dist/types/route.d.ts.map +0 -1
  430. package/dist/types/route.js +0 -5
  431. package/dist/types/route.js.map +0 -1
  432. package/docs/CONTRIBUTING.md +0 -521
  433. package/docs/api/README.md +0 -3299
  434. package/docs/api/overview.md +0 -1410
  435. package/docs/architecture/data-extraction-flow.md +0 -360
  436. package/docs/architecture/multi-step-execution.md +0 -277
  437. package/docs/core/agent/README.md +0 -938
  438. package/docs/core/agent/context-management.md +0 -796
  439. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  440. package/docs/core/agent/session-management.md +0 -693
  441. package/docs/core/ai-integration/prompt-composition.md +0 -355
  442. package/docs/core/ai-integration/providers.md +0 -515
  443. package/docs/core/ai-integration/response-processing.md +0 -433
  444. package/docs/core/conversation-flows/data-collection.md +0 -772
  445. package/docs/core/conversation-flows/route-dsl.md +0 -509
  446. package/docs/core/conversation-flows/routes.md +0 -249
  447. package/docs/core/conversation-flows/step-transitions.md +0 -731
  448. package/docs/core/conversation-flows/steps.md +0 -268
  449. package/docs/core/error-handling.md +0 -830
  450. package/docs/core/persistence/adapters.md +0 -255
  451. package/docs/core/persistence/session-storage.md +0 -656
  452. package/docs/core/routing/intelligent-routing.md +0 -470
  453. package/docs/core/tools/enhanced-tool.md +0 -186
  454. package/docs/core/tools/streaming-execution.md +0 -161
  455. package/docs/core/tools/tool-definition.md +0 -970
  456. package/docs/core/tools/tool-scoping.md +0 -819
  457. package/docs/guides/advanced-patterns/publishing.md +0 -186
  458. package/docs/guides/context-compaction.md +0 -96
  459. package/docs/guides/error-handling-patterns.md +0 -578
  460. package/docs/guides/getting-started/README.md +0 -795
  461. package/docs/guides/migration/README.md +0 -101
  462. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  463. package/docs/guides/migration/multi-step-execution.md +0 -393
  464. package/docs/guides/migration/response-modal-refactor.md +0 -518
  465. package/docs/guides/prompt-optimization.md +0 -164
  466. package/examples/advanced-patterns/context-compaction.ts +0 -223
  467. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  468. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  469. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  470. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  471. package/examples/ai-providers/anthropic-integration.ts +0 -388
  472. package/examples/ai-providers/openai-integration.ts +0 -228
  473. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  474. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  475. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  476. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  477. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  478. package/examples/conversation-flows/completion-transitions.ts +0 -318
  479. package/examples/core-concepts/basic-agent.ts +0 -503
  480. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  481. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  482. package/examples/core-concepts/session-management.ts +0 -494
  483. package/examples/integrations/database-integration.ts +0 -631
  484. package/examples/integrations/healthcare-integration.ts +0 -595
  485. package/examples/integrations/search-integration.ts +0 -530
  486. package/examples/integrations/server-session-management.ts +0 -307
  487. package/examples/persistence/custom-adapter.ts +0 -526
  488. package/examples/persistence/database-persistence.ts +0 -583
  489. package/examples/persistence/memory-sessions.ts +0 -495
  490. package/examples/persistence/prisma-schema.example.prisma +0 -74
  491. package/examples/persistence/redis-persistence.ts +0 -488
  492. package/examples/tools/basic-tools.ts +0 -765
  493. package/examples/tools/data-enrichment-tools.ts +0 -593
  494. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  495. package/examples/tools/streaming-tool-execution.ts +0 -283
  496. package/src/core/BatchExecutor.ts +0 -1187
  497. package/src/core/BatchPromptBuilder.ts +0 -299
  498. package/src/core/Route.ts +0 -678
  499. package/src/types/route.ts +0 -392
@@ -1,309 +0,0 @@
1
- /**
2
- * Example: Modern Streaming API
3
- *
4
- * This example demonstrates the new agent.stream() method introduced in the
5
- * ResponseModal refactor. The modern API provides automatic session management
6
- * and a simpler interface compared to the legacy respondStream() method.
7
- */
8
-
9
- import {
10
- Agent,
11
- AnthropicProvider,
12
- OpenAIProvider,
13
- } from "../../src/index";
14
-
15
- // Context type for our examples
16
- interface UserContext {
17
- userId: string;
18
- preferences: {
19
- language?: string;
20
- verbosity: "concise" | "detailed";
21
- };
22
- }
23
-
24
- async function basicModernStreaming() {
25
- console.log("\n🚀 Example 1: Basic Modern Streaming API\n");
26
-
27
- const provider = new AnthropicProvider({
28
- apiKey: process.env.ANTHROPIC_API_KEY || "",
29
- model: "claude-sonnet-4-5",
30
- });
31
-
32
- const agent = new Agent<UserContext, unknown>({
33
- name: "ModernStreamingAgent",
34
- description: "Demonstrates the new stream() API",
35
- context: {
36
- userId: "user123",
37
- preferences: {
38
- language: "English",
39
- verbosity: "concise",
40
- },
41
- },
42
- provider,
43
- });
44
-
45
- try {
46
- console.log("📤 Using modern stream() API...\n");
47
- console.log("Response: ");
48
-
49
- // NEW: Simple streaming with automatic session management
50
- for await (const chunk of agent.stream("What is machine learning?")) {
51
- if (chunk.delta) {
52
- process.stdout.write(chunk.delta);
53
- }
54
-
55
- if (chunk.done) {
56
- console.log("\n\n✅ Stream complete!");
57
- console.log(`📊 Session has ${agent.session.getHistory().length} messages`);
58
- console.log("💡 Session history was automatically managed!");
59
- }
60
- }
61
- } catch (error) {
62
- console.error("❌ Error:", error);
63
- }
64
- }
65
-
66
- async function streamingWithOptions() {
67
- console.log("\n🚀 Example 2: Streaming with Options\n");
68
-
69
- const provider = new OpenAIProvider({
70
- apiKey: process.env.OPENAI_API_KEY || "",
71
- model: "gpt-4",
72
- });
73
-
74
- const agent = new Agent<UserContext, unknown>({
75
- name: "OptionsStreamingAgent",
76
- description: "Demonstrates streaming with options",
77
- context: {
78
- userId: "user456",
79
- preferences: {
80
- language: "English",
81
- verbosity: "detailed",
82
- },
83
- },
84
- provider,
85
- });
86
-
87
- try {
88
- console.log("📤 Streaming with context override and abort signal...\n");
89
- console.log("Response: ");
90
-
91
- // Create abort controller for cancellation
92
- const abortController = new AbortController();
93
-
94
- // Cancel after 10 seconds
95
- setTimeout(() => {
96
- console.log("\n⚠️ Aborting stream...");
97
- abortController.abort();
98
- }, 10000);
99
-
100
- // Stream with options
101
- for await (const chunk of agent.stream("Explain quantum computing in detail", {
102
- contextOverride: {
103
- preferences: { verbosity: "concise" } // Override to be more concise
104
- },
105
- signal: abortController.signal
106
- })) {
107
- if (chunk.delta) {
108
- process.stdout.write(chunk.delta);
109
- }
110
-
111
- if (chunk.done) {
112
- console.log("\n\n✅ Stream complete!");
113
- console.log("💡 Context was overridden for this response only");
114
- clearTimeout();
115
- }
116
- }
117
- } catch (error) {
118
- if (error instanceof Error && error.name === "AbortError") {
119
- console.log("\n🛑 Stream was successfully aborted!");
120
- } else {
121
- console.error("❌ Error:", error);
122
- }
123
- }
124
- }
125
-
126
- async function conversationFlow() {
127
- console.log("\n🚀 Example 3: Multi-turn Conversation Flow\n");
128
-
129
- const provider = new AnthropicProvider({
130
- apiKey: process.env.ANTHROPIC_API_KEY || "",
131
- model: "claude-sonnet-4-5",
132
- });
133
-
134
- const agent = new Agent<UserContext, unknown>({
135
- name: "ConversationAgent",
136
- description: "Demonstrates multi-turn conversations",
137
- context: {
138
- userId: "user789",
139
- preferences: {
140
- language: "English",
141
- verbosity: "detailed",
142
- },
143
- },
144
- provider,
145
- });
146
-
147
- const messages = [
148
- "What is TypeScript?",
149
- "How is it different from JavaScript?",
150
- "Can you give me a simple example?",
151
- "Thank you for the explanation!"
152
- ];
153
-
154
- try {
155
- console.log("📤 Multi-turn conversation with automatic session management...\n");
156
-
157
- for (let i = 0; i < messages.length; i++) {
158
- console.log(`\n${"=".repeat(60)}`);
159
- console.log(`💬 Turn ${i + 1}: ${messages[i]}`);
160
- console.log(`${"=".repeat(60)}`);
161
- console.log("Response: ");
162
-
163
- // Each stream() call automatically manages the session
164
- for await (const chunk of agent.stream(messages[i])) {
165
- if (chunk.delta) {
166
- process.stdout.write(chunk.delta);
167
- }
168
-
169
- if (chunk.done) {
170
- console.log(`\n📊 Session now has ${agent.session.getHistory().length} messages`);
171
- }
172
- }
173
- }
174
-
175
- console.log("\n✅ Conversation complete!");
176
- console.log("💡 All session management was handled automatically");
177
- console.log(`📊 Final session has ${agent.session.getHistory().length} messages`);
178
-
179
- } catch (error) {
180
- console.error("❌ Error:", error);
181
- }
182
- }
183
-
184
- async function migrationComparison() {
185
- console.log("\n🚀 Example 4: Migration from respondStream() to stream()\n");
186
-
187
- const provider = new AnthropicProvider({
188
- apiKey: process.env.ANTHROPIC_API_KEY || "",
189
- model: "claude-sonnet-4-5",
190
- });
191
-
192
- const agent = new Agent<UserContext, unknown>({
193
- name: "MigrationAgent",
194
- description: "Shows migration from old to new API",
195
- context: {
196
- userId: "migration-user",
197
- preferences: {
198
- language: "English",
199
- verbosity: "concise",
200
- },
201
- },
202
- provider,
203
- });
204
-
205
- const userMessage = "What are the benefits of TypeScript?";
206
-
207
- try {
208
- // ========================================================================
209
- // OLD WAY: respondStream() - Manual session management
210
- // ========================================================================
211
- console.log("🔸 OLD WAY: Using respondStream() with manual session management");
212
- console.log("Code: agent.respondStream({ history: agent.session.getHistory() })");
213
- console.log("Response: ");
214
-
215
- // Manual session management required
216
- await agent.session.addMessage("user", userMessage);
217
-
218
- let oldResponse = "";
219
- for await (const chunk of agent.respondStream({
220
- history: agent.session.getHistory()
221
- })) {
222
- if (chunk.delta) {
223
- process.stdout.write(chunk.delta);
224
- oldResponse += chunk.delta;
225
- }
226
-
227
- if (chunk.done) {
228
- // Manual history update required
229
- await agent.session.addMessage("assistant", oldResponse);
230
- console.log("\n ✅ Manual session update completed");
231
- }
232
- }
233
-
234
- console.log("\n" + "=".repeat(60));
235
-
236
- // ========================================================================
237
- // NEW WAY: stream() - Automatic session management
238
- // ========================================================================
239
- console.log("🔸 NEW WAY: Using stream() with automatic session management");
240
- console.log("Code: agent.stream('message')");
241
- console.log("Response: ");
242
-
243
- // Automatic session management - just pass the message!
244
- for await (const chunk of agent.stream("Can you elaborate on the type safety benefits?")) {
245
- if (chunk.delta) {
246
- process.stdout.write(chunk.delta);
247
- }
248
-
249
- if (chunk.done) {
250
- console.log("\n ✅ Automatic session update - no manual work needed!");
251
- }
252
- }
253
-
254
- console.log("\n📊 Migration Benefits:");
255
- console.log(" ✅ Simpler API: agent.stream('message') vs complex parameters");
256
- console.log(" ✅ Automatic session management - no manual addMessage() calls");
257
- console.log(" ✅ Same performance and features as respondStream()");
258
- console.log(" ✅ Backward compatibility - respondStream() still works");
259
- console.log(" ✅ Consistent with chat() API patterns");
260
-
261
- console.log(`\n📊 Final session has ${agent.session.getHistory().length} messages`);
262
-
263
- } catch (error) {
264
- console.error("❌ Error:", error);
265
- }
266
- }
267
-
268
- async function main() {
269
- console.log("🚀 Modern Streaming API Examples");
270
- console.log("=".repeat(60));
271
-
272
- const examples = [
273
- { name: "Basic Modern Streaming", fn: basicModernStreaming },
274
- { name: "Streaming with Options", fn: streamingWithOptions },
275
- { name: "Multi-turn Conversation", fn: conversationFlow },
276
- { name: "Migration Comparison", fn: migrationComparison },
277
- ];
278
-
279
- console.log("\nAvailable Examples:");
280
- examples.forEach((ex, i) => {
281
- console.log(` ${i + 1}. ${ex.name}`);
282
- });
283
-
284
- console.log("\n💡 Key Benefits of Modern stream() API:");
285
- console.log(" - Simple interface: agent.stream('message')");
286
- console.log(" - Automatic session management");
287
- console.log(" - No manual history updates needed");
288
- console.log(" - Same performance as respondStream()");
289
- console.log(" - Full backward compatibility maintained");
290
-
291
- console.log("\n" + "=".repeat(60));
292
-
293
- // Run examples if API key is available
294
- if (process.env.ANTHROPIC_API_KEY || process.env.OPENAI_API_KEY) {
295
- await basicModernStreaming();
296
- await migrationComparison();
297
- } else {
298
- console.log(
299
- "\n⚠️ Set ANTHROPIC_API_KEY or OPENAI_API_KEY to run examples."
300
- );
301
- }
302
- }
303
-
304
- // Run if executed directly
305
- if (import.meta.url === `file://${process.argv[1]}`) {
306
- main().catch(console.error);
307
- }
308
-
309
- export { main };
@@ -1,332 +0,0 @@
1
- /**
2
- * Schema-Driven Data Extraction Example
3
- *
4
- * This example demonstrates how to use JSON Schema to define data contracts
5
- * and extract structured data reliably from conversations.
6
- *
7
- * Key concepts:
8
- * - Schema-first data definition
9
- * - Type-safe data extraction
10
- * - Automatic validation
11
- * - NEW: Flexible ConditionTemplate patterns for routing and step control:
12
- * - String-only conditions: "user wants to register" (AI context only)
13
- * - Function-only conditions: (ctx) => ctx.data?.complete (programmatic only)
14
- * - Mixed arrays: ["user provided info", (ctx) => !!ctx.data?.name] (hybrid)
15
- * - Enhanced skipIf conditions for smart flow control
16
- */
17
-
18
- import { Agent, GeminiProvider, type Tool } from "../../src/index";
19
-
20
- // Define the data structure we want to collect
21
- interface UserProfileData {
22
- name: string;
23
- email: string;
24
- age: number;
25
- interests: string[];
26
- preferredContact: "email" | "phone" | "sms";
27
- newsletterOptIn: boolean;
28
- }
29
-
30
- // Define a tool that uses the collected data - using unified Tool interface
31
- const saveUserProfileTool: Tool<unknown, UserProfileData> = {
32
- id: "save_user_profile",
33
- description: "Save the collected user profile information",
34
- parameters: {
35
- type: "object",
36
- properties: {},
37
- },
38
- handler: async (context, args) => {
39
- console.log("Saving user profile:", context.data);
40
-
41
- // Simulate saving to database
42
- console.log("Profile data:", context.data);
43
-
44
- return {
45
- data: `Profile saved successfully! Welcome ${context.data?.name}!`,
46
- };
47
- },
48
- };
49
-
50
- // Define the schema for data validation and extraction
51
- const userProfileSchema = {
52
- type: "object",
53
- properties: {
54
- name: {
55
- type: "string",
56
- description: "The user's full name",
57
- minLength: 2,
58
- maxLength: 100,
59
- },
60
- email: {
61
- type: "string",
62
- format: "email",
63
- description: "The user's email address",
64
- },
65
- age: {
66
- type: "number",
67
- description: "The user's age in years",
68
- minimum: 13,
69
- maximum: 120,
70
- },
71
- interests: {
72
- type: "array",
73
- items: { type: "string" },
74
- description: "User's interests and hobbies",
75
- minItems: 1,
76
- maxItems: 10,
77
- },
78
- preferredContact: {
79
- type: "string",
80
- enum: ["email", "phone", "sms"],
81
- description: "Preferred contact method",
82
- default: "email",
83
- },
84
- newsletterOptIn: {
85
- type: "boolean",
86
- description: "Whether user wants to receive newsletters",
87
- default: false,
88
- },
89
- },
90
- required: ["name", "email"],
91
- };
92
-
93
- // Create the agent with agent-level schema
94
- const agent = new Agent<unknown, UserProfileData>({
95
- name: "ProfileBot",
96
- description:
97
- "A bot that collects user profile information using schema-driven extraction",
98
- provider: new GeminiProvider({
99
- apiKey: process.env.GEMINI_API_KEY!,
100
- model: "models/gemini-2.5-flash",
101
- }),
102
- // NEW: Agent-level schema definition
103
- schema: userProfileSchema,
104
- });
105
-
106
- // Add tool using unified interface
107
- agent.addTool(saveUserProfileTool);
108
-
109
- // Create a route that collects profile information step by step
110
- agent.createRoute({
111
- title: "User Profile Collection",
112
- description: "Collect comprehensive user profile information",
113
- // Mixed condition: AI context + programmatic validation
114
- when: [
115
- "user wants to create a profile or register",
116
- (ctx) => {
117
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
118
- return message.includes('profile') || message.includes('register') || message.includes('sign up');
119
- }
120
- ],
121
- // Skip if user already has a complete profile
122
- skipIf: (ctx) => Boolean(ctx.data?.name && ctx.data?.email && ctx.data?.age),
123
- // NEW: Required fields for route completion (instead of schema)
124
- requiredFields: ["name", "email"],
125
- // NEW: Optional fields that enhance the experience
126
- optionalFields: ["age", "interests", "preferredContact", "newsletterOptIn"],
127
- // Use sequential steps for a linear flow with smart skipIf conditions
128
- steps: [
129
- {
130
- id: "ask_name",
131
- description: "Ask for user's name",
132
- prompt: "Hi! I'd like to create a profile for you. What's your name?",
133
- collect: ["name"],
134
- // String-only skipIf for AI context
135
- skipIf: "user already provided their name",
136
- },
137
- {
138
- id: "ask_email",
139
- description: "Ask for user's email",
140
- prompt: "What's your email address?",
141
- collect: ["email"],
142
- requires: ["name"],
143
- // Function-only skipIf for programmatic logic
144
- skipIf: (ctx) => !!ctx.data?.email,
145
- },
146
- {
147
- id: "ask_age",
148
- description: "Ask for user's age (optional)",
149
- prompt: "How old are you? (optional)",
150
- collect: ["age"],
151
- requires: ["name", "email"],
152
- // Mixed skipIf: AI context + programmatic check
153
- skipIf: [
154
- "age already collected",
155
- (ctx) => ctx.data?.age !== undefined
156
- ],
157
- },
158
- {
159
- id: "ask_interests",
160
- description: "Ask for user's interests (optional)",
161
- prompt: "What are your interests or hobbies? (optional)",
162
- collect: ["interests"],
163
- requires: ["name", "email"],
164
- // Mixed skipIf with complex logic
165
- skipIf: [
166
- "interests already provided",
167
- (ctx) => !!(ctx.data?.interests && ctx.data.interests.length > 0)
168
- ],
169
- },
170
- {
171
- id: "ask_contact_preference",
172
- description: "Ask for preferred contact method",
173
- prompt: "What's your preferred contact method?",
174
- collect: ["preferredContact"],
175
- requires: ["name", "email"],
176
- // Function-only skipIf
177
- skipIf: (ctx) => !!ctx.data?.preferredContact,
178
- },
179
- {
180
- id: "ask_newsletter",
181
- description: "Ask about newsletter subscription",
182
- prompt: "Would you like to subscribe to our newsletter?",
183
- collect: ["newsletterOptIn"],
184
- requires: ["name", "email"],
185
- // String-only skipIf for simple cases
186
- skipIf: "newsletter preference already collected",
187
- },
188
- {
189
- id: "save_profile",
190
- description: "Save the collected profile",
191
- prompt:
192
- "Thanks for providing your information! Let me save your profile.",
193
- tools: ["save_user_profile"], // Reference by ID
194
- requires: ["name", "email"],
195
- },
196
- ],
197
- });
198
-
199
- // Example conversation demonstrating schema-driven extraction
200
- async function demonstrateSchemaExtraction() {
201
- console.log("=== Schema-Driven Data Extraction Demo ===\n");
202
-
203
- // First message - user provides name and email
204
- console.log("User: Hi, I'm John Doe and my email is john@example.com");
205
- const response1 = await agent.respond({
206
- history: [
207
- {
208
- role: "user",
209
- content: "Hi, I'm John Doe and my email is john@example.com",
210
- name: "John",
211
- },
212
- ],
213
- });
214
-
215
- console.log("Bot:", response1.message);
216
- console.log(
217
- "Collected data:",
218
- JSON.stringify(response1.session?.data as Partial<UserProfileData>, null, 2)
219
- );
220
-
221
- // Second message - user provides more information
222
- console.log(
223
- "\nUser: I'm 30 years old and I like hiking, reading, and photography"
224
- );
225
- const response2 = await agent.respond({
226
- history: [
227
- {
228
- role: "user",
229
- content: "Hi, I'm John Doe and my email is john@example.com",
230
- name: "John",
231
- },
232
- {
233
- role: "assistant",
234
- content: response1.message,
235
- },
236
- {
237
- role: "user",
238
- content: "I'm 30 years old and I like hiking, reading, and photography",
239
- name: "John",
240
- },
241
- ],
242
- session: response1.session,
243
- });
244
-
245
- console.log("Bot:", response2.message);
246
- console.log(
247
- "Collected data:",
248
- JSON.stringify(response2.session?.data as Partial<UserProfileData>, null, 2)
249
- );
250
-
251
- // Third message - user provides contact preference and completes profile
252
- console.log(
253
- "\nUser: Please contact me by email and yes, I'd like the newsletter"
254
- );
255
- const response3 = await agent.respond({
256
- history: [
257
- {
258
- role: "user",
259
- content: "Hi, I'm John Doe and my email is john@example.com",
260
- name: "John",
261
- },
262
- {
263
- role: "assistant",
264
- content: response1.message,
265
- },
266
- {
267
- role: "user",
268
- content: "I'm 30 years old and I like hiking, reading, and photography",
269
- name: "John",
270
- },
271
- {
272
- role: "assistant",
273
- content: response2.message,
274
- },
275
- {
276
- role: "user",
277
- content: "Please contact me by email and yes, I'd like the newsletter",
278
- name: "John",
279
- },
280
- ],
281
- session: response2.session,
282
- });
283
-
284
- console.log("Bot:", response3.message);
285
- console.log(
286
- "Final collected data:",
287
- JSON.stringify(response3.session?.data as Partial<UserProfileData>, null, 2)
288
- );
289
- console.log("Route complete:", response3.isRouteComplete);
290
- }
291
-
292
- // Demonstrate with a single comprehensive message
293
- async function demonstrateSmartSkipping() {
294
- console.log("\n=== Smart Skipping Demo ===\n");
295
-
296
- console.log("User provides everything in one message:");
297
- console.log(
298
- "User: I'm Sarah Johnson, sarah@email.com, 28 years old. I enjoy cooking, travel, and music. Contact me by phone and yes to newsletter."
299
- );
300
-
301
- const response = await agent.respond({
302
- history: [
303
- {
304
- role: "user",
305
- content:
306
- "I'm Sarah Johnson, sarah@email.com, 28 years old. I enjoy cooking, travel, and music. Contact me by phone and yes to newsletter.",
307
- name: "Sarah",
308
- },
309
- ],
310
- });
311
-
312
- console.log("Bot:", response.message);
313
- console.log(
314
- "Collected data:",
315
- JSON.stringify(response.session?.data as Partial<UserProfileData>, null, 2)
316
- );
317
- console.log("Route complete:", response.isRouteComplete);
318
- }
319
-
320
- // Run the demonstrations
321
- async function main() {
322
- try {
323
- await demonstrateSchemaExtraction();
324
- await demonstrateSmartSkipping();
325
- } catch (error) {
326
- console.error("Error:", error);
327
- }
328
- }
329
-
330
- if (import.meta.url === `file://${process.argv[1]}`) {
331
- main().catch(console.error);
332
- }