@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,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
- }