@falai/agent 1.2.7 → 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 (508) 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 +1196 -1015
  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 +524 -134
  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/GeminiProvider.d.ts +3 -3
  126. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  127. package/dist/cjs/providers/GeminiProvider.js +16 -14
  128. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  129. package/dist/cjs/types/agent.d.ts +183 -54
  130. package/dist/cjs/types/agent.d.ts.map +1 -1
  131. package/dist/cjs/types/agent.js +0 -6
  132. package/dist/cjs/types/agent.js.map +1 -1
  133. package/dist/cjs/types/ai.d.ts +3 -3
  134. package/dist/cjs/types/ai.d.ts.map +1 -1
  135. package/dist/cjs/types/errors.d.ts +15 -0
  136. package/dist/cjs/types/errors.d.ts.map +1 -0
  137. package/dist/cjs/types/errors.js +22 -0
  138. package/dist/cjs/types/errors.js.map +1 -0
  139. package/dist/cjs/types/flow.d.ts +513 -0
  140. package/dist/cjs/types/flow.d.ts.map +1 -0
  141. package/dist/cjs/types/{route.js → flow.js} +2 -2
  142. package/dist/cjs/types/flow.js.map +1 -0
  143. package/dist/cjs/types/index.d.ts +7 -6
  144. package/dist/cjs/types/index.d.ts.map +1 -1
  145. package/dist/cjs/types/index.js +6 -2
  146. package/dist/cjs/types/index.js.map +1 -1
  147. package/dist/cjs/types/persistence.d.ts +11 -7
  148. package/dist/cjs/types/persistence.d.ts.map +1 -1
  149. package/dist/cjs/types/routing.d.ts +1 -1
  150. package/dist/cjs/types/routing.d.ts.map +1 -1
  151. package/dist/cjs/types/session.d.ts +24 -23
  152. package/dist/cjs/types/session.d.ts.map +1 -1
  153. package/dist/cjs/types/signals.d.ts +248 -0
  154. package/dist/cjs/types/signals.d.ts.map +1 -0
  155. package/dist/cjs/types/signals.js +11 -0
  156. package/dist/cjs/types/signals.js.map +1 -0
  157. package/dist/cjs/types/template.d.ts +2 -8
  158. package/dist/cjs/types/template.d.ts.map +1 -1
  159. package/dist/cjs/types/tool.d.ts +36 -29
  160. package/dist/cjs/types/tool.d.ts.map +1 -1
  161. package/dist/cjs/types/tool.js +1 -1
  162. package/dist/cjs/types/tool.js.map +1 -1
  163. package/dist/cjs/utils/condition.d.ts +7 -1
  164. package/dist/cjs/utils/condition.d.ts.map +1 -1
  165. package/dist/cjs/utils/condition.js.map +1 -1
  166. package/dist/cjs/utils/id.d.ts +13 -5
  167. package/dist/cjs/utils/id.d.ts.map +1 -1
  168. package/dist/cjs/utils/id.js +24 -10
  169. package/dist/cjs/utils/id.js.map +1 -1
  170. package/dist/cjs/utils/index.d.ts +2 -2
  171. package/dist/cjs/utils/index.d.ts.map +1 -1
  172. package/dist/cjs/utils/index.js +7 -3
  173. package/dist/cjs/utils/index.js.map +1 -1
  174. package/dist/cjs/utils/session.d.ts +44 -5
  175. package/dist/cjs/utils/session.d.ts.map +1 -1
  176. package/dist/cjs/utils/session.js +197 -38
  177. package/dist/cjs/utils/session.js.map +1 -1
  178. package/dist/constants/index.d.ts +0 -9
  179. package/dist/constants/index.d.ts.map +1 -1
  180. package/dist/constants/index.js +3 -9
  181. package/dist/constants/index.js.map +1 -1
  182. package/dist/core/Agent.d.ts +119 -153
  183. package/dist/core/Agent.d.ts.map +1 -1
  184. package/dist/core/Agent.js +472 -325
  185. package/dist/core/Agent.js.map +1 -1
  186. package/dist/core/AutoChainExecutor.d.ts +107 -0
  187. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  188. package/dist/core/AutoChainExecutor.js +293 -0
  189. package/dist/core/AutoChainExecutor.js.map +1 -0
  190. package/dist/core/BranchEvaluator.d.ts +54 -0
  191. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  192. package/dist/core/BranchEvaluator.js +126 -0
  193. package/dist/core/BranchEvaluator.js.map +1 -0
  194. package/dist/core/DirectiveBus.d.ts +88 -0
  195. package/dist/core/DirectiveBus.d.ts.map +1 -0
  196. package/dist/core/DirectiveBus.js +192 -0
  197. package/dist/core/DirectiveBus.js.map +1 -0
  198. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  199. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  200. package/dist/core/DirectiveChainTracker.js +117 -0
  201. package/dist/core/DirectiveChainTracker.js.map +1 -0
  202. package/dist/core/Flow.d.ts +186 -0
  203. package/dist/core/Flow.d.ts.map +1 -0
  204. package/dist/core/Flow.js +546 -0
  205. package/dist/core/Flow.js.map +1 -0
  206. package/dist/core/FlowRouter.d.ts +182 -0
  207. package/dist/core/FlowRouter.d.ts.map +1 -0
  208. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  209. package/dist/core/FlowRouter.js.map +1 -0
  210. package/dist/core/PersistenceManager.d.ts +2 -2
  211. package/dist/core/PersistenceManager.d.ts.map +1 -1
  212. package/dist/core/PersistenceManager.js +7 -7
  213. package/dist/core/PersistenceManager.js.map +1 -1
  214. package/dist/core/PromptComposer.d.ts +21 -8
  215. package/dist/core/PromptComposer.d.ts.map +1 -1
  216. package/dist/core/PromptComposer.js +183 -106
  217. package/dist/core/PromptComposer.js.map +1 -1
  218. package/dist/core/PromptSectionCache.d.ts +1 -1
  219. package/dist/core/PromptSectionCache.js +1 -1
  220. package/dist/core/ResponseEngine.d.ts +18 -8
  221. package/dist/core/ResponseEngine.d.ts.map +1 -1
  222. package/dist/core/ResponseEngine.js +38 -36
  223. package/dist/core/ResponseEngine.js.map +1 -1
  224. package/dist/core/ResponseModal.d.ts +73 -56
  225. package/dist/core/ResponseModal.d.ts.map +1 -1
  226. package/dist/core/ResponseModal.js +1198 -1017
  227. package/dist/core/ResponseModal.js.map +1 -1
  228. package/dist/core/ResponsePipeline.d.ts +124 -26
  229. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  230. package/dist/core/ResponsePipeline.js +524 -135
  231. package/dist/core/ResponsePipeline.js.map +1 -1
  232. package/dist/core/SignalEvaluator.d.ts +86 -0
  233. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  234. package/dist/core/SignalEvaluator.js +326 -0
  235. package/dist/core/SignalEvaluator.js.map +1 -0
  236. package/dist/core/SignalProcessor.d.ts +152 -0
  237. package/dist/core/SignalProcessor.d.ts.map +1 -0
  238. package/dist/core/SignalProcessor.js +555 -0
  239. package/dist/core/SignalProcessor.js.map +1 -0
  240. package/dist/core/Step.d.ts +43 -32
  241. package/dist/core/Step.d.ts.map +1 -1
  242. package/dist/core/Step.js +220 -126
  243. package/dist/core/Step.js.map +1 -1
  244. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  245. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  246. package/dist/core/StreamingToolExecutor.js.map +1 -1
  247. package/dist/core/ToolManager.d.ts +44 -13
  248. package/dist/core/ToolManager.d.ts.map +1 -1
  249. package/dist/core/ToolManager.js +174 -91
  250. package/dist/core/ToolManager.js.map +1 -1
  251. package/dist/core/createAgent.d.ts +35 -0
  252. package/dist/core/createAgent.d.ts.map +1 -0
  253. package/dist/core/createAgent.js +36 -0
  254. package/dist/core/createAgent.js.map +1 -0
  255. package/dist/core/flow-namespace.d.ts +49 -0
  256. package/dist/core/flow-namespace.d.ts.map +1 -0
  257. package/dist/core/flow-namespace.js +168 -0
  258. package/dist/core/flow-namespace.js.map +1 -0
  259. package/dist/index.d.ts +11 -14
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +9 -12
  262. package/dist/index.js.map +1 -1
  263. package/dist/providers/GeminiProvider.d.ts +3 -3
  264. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  265. package/dist/providers/GeminiProvider.js +16 -14
  266. package/dist/providers/GeminiProvider.js.map +1 -1
  267. package/dist/types/agent.d.ts +183 -54
  268. package/dist/types/agent.d.ts.map +1 -1
  269. package/dist/types/agent.js +0 -6
  270. package/dist/types/agent.js.map +1 -1
  271. package/dist/types/ai.d.ts +3 -3
  272. package/dist/types/ai.d.ts.map +1 -1
  273. package/dist/types/errors.d.ts +15 -0
  274. package/dist/types/errors.d.ts.map +1 -0
  275. package/dist/types/errors.js +18 -0
  276. package/dist/types/errors.js.map +1 -0
  277. package/dist/types/flow.d.ts +513 -0
  278. package/dist/types/flow.d.ts.map +1 -0
  279. package/dist/types/flow.js +5 -0
  280. package/dist/types/flow.js.map +1 -0
  281. package/dist/types/index.d.ts +7 -6
  282. package/dist/types/index.d.ts.map +1 -1
  283. package/dist/types/index.js +4 -1
  284. package/dist/types/index.js.map +1 -1
  285. package/dist/types/persistence.d.ts +11 -7
  286. package/dist/types/persistence.d.ts.map +1 -1
  287. package/dist/types/routing.d.ts +1 -1
  288. package/dist/types/routing.d.ts.map +1 -1
  289. package/dist/types/session.d.ts +24 -23
  290. package/dist/types/session.d.ts.map +1 -1
  291. package/dist/types/signals.d.ts +248 -0
  292. package/dist/types/signals.d.ts.map +1 -0
  293. package/dist/types/signals.js +10 -0
  294. package/dist/types/signals.js.map +1 -0
  295. package/dist/types/template.d.ts +2 -8
  296. package/dist/types/template.d.ts.map +1 -1
  297. package/dist/types/tool.d.ts +36 -29
  298. package/dist/types/tool.d.ts.map +1 -1
  299. package/dist/types/tool.js +1 -1
  300. package/dist/types/tool.js.map +1 -1
  301. package/dist/utils/condition.d.ts +7 -1
  302. package/dist/utils/condition.d.ts.map +1 -1
  303. package/dist/utils/condition.js.map +1 -1
  304. package/dist/utils/id.d.ts +13 -5
  305. package/dist/utils/id.d.ts.map +1 -1
  306. package/dist/utils/id.js +22 -9
  307. package/dist/utils/id.js.map +1 -1
  308. package/dist/utils/index.d.ts +2 -2
  309. package/dist/utils/index.d.ts.map +1 -1
  310. package/dist/utils/index.js +2 -2
  311. package/dist/utils/index.js.map +1 -1
  312. package/dist/utils/session.d.ts +44 -5
  313. package/dist/utils/session.d.ts.map +1 -1
  314. package/dist/utils/session.js +193 -37
  315. package/dist/utils/session.js.map +1 -1
  316. package/docs/README.md +15 -202
  317. package/docs/concepts/architecture.md +281 -0
  318. package/docs/concepts/directives.md +400 -0
  319. package/docs/concepts/pipeline.md +399 -0
  320. package/docs/guides/branching.md +263 -0
  321. package/docs/guides/compaction.md +163 -0
  322. package/docs/guides/conditions.md +167 -0
  323. package/docs/guides/error-handling.md +176 -0
  324. package/docs/guides/flow-control.md +409 -0
  325. package/docs/guides/instructions.md +210 -0
  326. package/docs/guides/persistence.md +182 -0
  327. package/docs/guides/streaming.md +137 -0
  328. package/docs/migration/README.md +15 -0
  329. package/docs/migration/route-to-flow.md +560 -0
  330. package/docs/migration/v1-to-v2.md +909 -0
  331. package/docs/reference/adapters.md +481 -0
  332. package/docs/reference/branches.md +241 -0
  333. package/docs/reference/create-agent.md +186 -0
  334. package/docs/reference/directive.md +243 -0
  335. package/docs/reference/errors.md +122 -0
  336. package/docs/reference/flow.md +238 -0
  337. package/docs/reference/instruction.md +177 -0
  338. package/docs/reference/pre-directive.md +131 -0
  339. package/docs/reference/providers.md +227 -0
  340. package/docs/reference/signals.md +356 -0
  341. package/docs/reference/step.md +339 -0
  342. package/docs/reference/tool.md +269 -0
  343. package/docs/start/01-install.md +81 -0
  344. package/docs/start/02-first-agent.md +196 -0
  345. package/docs/start/03-collect-data.md +222 -0
  346. package/docs/start/04-add-tools.md +276 -0
  347. package/docs/start/05-go-to-production.md +216 -0
  348. package/examples/01-quickstart.ts +20 -0
  349. package/examples/02-data-extraction.ts +90 -0
  350. package/examples/03-tools.ts +136 -0
  351. package/examples/04-instructions.ts +100 -0
  352. package/examples/05-branching.ts +140 -0
  353. package/examples/06-flow-control.ts +103 -0
  354. package/examples/07-streaming.ts +69 -0
  355. package/examples/08-persistence.ts +98 -0
  356. package/examples/09-signals.ts +144 -0
  357. package/examples/tsconfig.json +30 -0
  358. package/package.json +2 -1
  359. package/src/adapters/MemoryAdapter.ts +3 -3
  360. package/src/adapters/MongoAdapter.ts +3 -3
  361. package/src/adapters/OpenSearchAdapter.ts +10 -8
  362. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  363. package/src/adapters/PrismaAdapter.ts +6 -6
  364. package/src/adapters/RedisAdapter.ts +3 -3
  365. package/src/adapters/SQLiteAdapter.ts +31 -12
  366. package/src/constants/index.ts +2 -10
  367. package/src/core/Agent.ts +585 -374
  368. package/src/core/AutoChainExecutor.ts +440 -0
  369. package/src/core/BranchEvaluator.ts +167 -0
  370. package/src/core/DirectiveBus.ts +248 -0
  371. package/src/core/DirectiveChainTracker.ts +144 -0
  372. package/src/core/Flow.ts +666 -0
  373. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  374. package/src/core/PersistenceManager.ts +8 -8
  375. package/src/core/PromptComposer.ts +209 -140
  376. package/src/core/PromptSectionCache.ts +1 -1
  377. package/src/core/ResponseEngine.ts +61 -46
  378. package/src/core/ResponseModal.ts +1458 -1241
  379. package/src/core/ResponsePipeline.ts +675 -173
  380. package/src/core/SignalEvaluator.ts +420 -0
  381. package/src/core/SignalProcessor.ts +723 -0
  382. package/src/core/Step.ts +279 -176
  383. package/src/core/StreamingToolExecutor.ts +4 -4
  384. package/src/core/ToolManager.ts +200 -97
  385. package/src/core/createAgent.ts +40 -0
  386. package/src/core/flow-namespace.ts +219 -0
  387. package/src/index.ts +42 -36
  388. package/src/providers/GeminiProvider.ts +17 -15
  389. package/src/types/agent.ts +182 -53
  390. package/src/types/ai.ts +3 -3
  391. package/src/types/errors.ts +18 -0
  392. package/src/types/flow.ts +590 -0
  393. package/src/types/index.ts +43 -16
  394. package/src/types/persistence.ts +12 -8
  395. package/src/types/routing.ts +1 -1
  396. package/src/types/session.ts +26 -23
  397. package/src/types/signals.ts +321 -0
  398. package/src/types/template.ts +3 -11
  399. package/src/types/tool.ts +50 -42
  400. package/src/utils/condition.ts +13 -4
  401. package/src/utils/id.ts +27 -9
  402. package/src/utils/index.ts +6 -2
  403. package/src/utils/session.ts +238 -42
  404. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  405. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  406. package/dist/cjs/core/BatchExecutor.js +0 -861
  407. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  408. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  409. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  410. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  411. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  412. package/dist/cjs/core/Route.d.ts +0 -180
  413. package/dist/cjs/core/Route.d.ts.map +0 -1
  414. package/dist/cjs/core/Route.js +0 -542
  415. package/dist/cjs/core/Route.js.map +0 -1
  416. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  417. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  418. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  419. package/dist/cjs/types/route.d.ts +0 -336
  420. package/dist/cjs/types/route.d.ts.map +0 -1
  421. package/dist/cjs/types/route.js.map +0 -1
  422. package/dist/core/BatchExecutor.d.ts +0 -359
  423. package/dist/core/BatchExecutor.d.ts.map +0 -1
  424. package/dist/core/BatchExecutor.js +0 -856
  425. package/dist/core/BatchExecutor.js.map +0 -1
  426. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  427. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  428. package/dist/core/BatchPromptBuilder.js +0 -219
  429. package/dist/core/BatchPromptBuilder.js.map +0 -1
  430. package/dist/core/Route.d.ts +0 -180
  431. package/dist/core/Route.d.ts.map +0 -1
  432. package/dist/core/Route.js +0 -538
  433. package/dist/core/Route.js.map +0 -1
  434. package/dist/core/RoutingEngine.d.ts +0 -185
  435. package/dist/core/RoutingEngine.d.ts.map +0 -1
  436. package/dist/core/RoutingEngine.js.map +0 -1
  437. package/dist/types/route.d.ts +0 -336
  438. package/dist/types/route.d.ts.map +0 -1
  439. package/dist/types/route.js +0 -5
  440. package/dist/types/route.js.map +0 -1
  441. package/docs/CONTRIBUTING.md +0 -521
  442. package/docs/api/README.md +0 -3299
  443. package/docs/api/overview.md +0 -1410
  444. package/docs/architecture/data-extraction-flow.md +0 -360
  445. package/docs/architecture/multi-step-execution.md +0 -277
  446. package/docs/core/agent/README.md +0 -938
  447. package/docs/core/agent/context-management.md +0 -796
  448. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  449. package/docs/core/agent/session-management.md +0 -693
  450. package/docs/core/ai-integration/prompt-composition.md +0 -355
  451. package/docs/core/ai-integration/providers.md +0 -515
  452. package/docs/core/ai-integration/response-processing.md +0 -433
  453. package/docs/core/conversation-flows/data-collection.md +0 -772
  454. package/docs/core/conversation-flows/route-dsl.md +0 -509
  455. package/docs/core/conversation-flows/routes.md +0 -249
  456. package/docs/core/conversation-flows/step-transitions.md +0 -731
  457. package/docs/core/conversation-flows/steps.md +0 -268
  458. package/docs/core/error-handling.md +0 -830
  459. package/docs/core/persistence/adapters.md +0 -255
  460. package/docs/core/persistence/session-storage.md +0 -656
  461. package/docs/core/routing/intelligent-routing.md +0 -470
  462. package/docs/core/tools/enhanced-tool.md +0 -186
  463. package/docs/core/tools/streaming-execution.md +0 -161
  464. package/docs/core/tools/tool-definition.md +0 -970
  465. package/docs/core/tools/tool-scoping.md +0 -819
  466. package/docs/guides/advanced-patterns/publishing.md +0 -186
  467. package/docs/guides/context-compaction.md +0 -96
  468. package/docs/guides/error-handling-patterns.md +0 -578
  469. package/docs/guides/getting-started/README.md +0 -795
  470. package/docs/guides/migration/README.md +0 -101
  471. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  472. package/docs/guides/migration/multi-step-execution.md +0 -393
  473. package/docs/guides/migration/response-modal-refactor.md +0 -518
  474. package/docs/guides/prompt-optimization.md +0 -164
  475. package/examples/advanced-patterns/context-compaction.ts +0 -223
  476. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  477. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  478. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  479. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  480. package/examples/ai-providers/anthropic-integration.ts +0 -388
  481. package/examples/ai-providers/openai-integration.ts +0 -228
  482. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  483. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  484. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  485. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  486. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  487. package/examples/conversation-flows/completion-transitions.ts +0 -318
  488. package/examples/core-concepts/basic-agent.ts +0 -503
  489. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  490. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  491. package/examples/core-concepts/session-management.ts +0 -494
  492. package/examples/integrations/database-integration.ts +0 -631
  493. package/examples/integrations/healthcare-integration.ts +0 -595
  494. package/examples/integrations/search-integration.ts +0 -530
  495. package/examples/integrations/server-session-management.ts +0 -307
  496. package/examples/persistence/custom-adapter.ts +0 -526
  497. package/examples/persistence/database-persistence.ts +0 -583
  498. package/examples/persistence/memory-sessions.ts +0 -495
  499. package/examples/persistence/prisma-schema.example.prisma +0 -74
  500. package/examples/persistence/redis-persistence.ts +0 -488
  501. package/examples/tools/basic-tools.ts +0 -765
  502. package/examples/tools/data-enrichment-tools.ts +0 -593
  503. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  504. package/examples/tools/streaming-tool-execution.ts +0 -283
  505. package/src/core/BatchExecutor.ts +0 -1187
  506. package/src/core/BatchPromptBuilder.ts +0 -299
  507. package/src/core/Route.ts +0 -678
  508. package/src/types/route.ts +0 -392
@@ -1,296 +0,0 @@
1
- /**
2
- * String-Only Conditions Example
3
- *
4
- * This example demonstrates using string-only conditions for AI context-driven routing.
5
- * String conditions are perfect when you want the AI to make routing decisions based
6
- * on natural language understanding rather than programmatic logic.
7
- *
8
- * Key concepts:
9
- * - String conditions provide AI context only
10
- * - No programmatic evaluation - pure AI decision making
11
- * - Perfect for natural language routing scenarios
12
- * - Ideal for conversational flows where intent matters more than data
13
- */
14
-
15
- import {
16
- Agent,
17
- GeminiProvider,
18
- type Guideline,
19
- } from "../../src/index";
20
-
21
- // Context for a customer service chatbot
22
- interface CustomerContext {
23
- customerId: string;
24
- customerTier: "basic" | "premium" | "enterprise";
25
- previousInteractions: number;
26
- }
27
-
28
- // Simple data schema for customer interactions
29
- interface CustomerData {
30
- issueType?: string;
31
- satisfactionRating?: number;
32
- followUpNeeded?: boolean;
33
- }
34
-
35
- const customerSchema = {
36
- type: "object",
37
- properties: {
38
- issueType: { type: "string" },
39
- satisfactionRating: { type: "number", minimum: 1, maximum: 5 },
40
- followUpNeeded: { type: "boolean" },
41
- },
42
- };
43
-
44
- // Create agent with string-only condition examples
45
- const agent = new Agent<CustomerContext, CustomerData>({
46
- name: "CustomerServiceBot",
47
- description: "A customer service bot that uses AI context for routing decisions",
48
- provider: new GeminiProvider({
49
- apiKey: process.env.GEMINI_API_KEY || "demo-key",
50
- model: "models/gemini-2.5-flash",
51
- }),
52
- context: {
53
- customerId: "cust_12345",
54
- customerTier: "premium",
55
- previousInteractions: 3,
56
- },
57
- schema: customerSchema,
58
- });
59
-
60
- // Guidelines with string-only conditions for AI context
61
- const guidelines: Guideline<CustomerContext>[] = [
62
- {
63
- // String-only condition - AI interprets the context
64
- condition: "Customer is expressing frustration or anger",
65
- action: "Acknowledge their feelings, apologize for the inconvenience, and escalate to a human agent if needed",
66
- tags: ["empathy", "escalation"],
67
- },
68
- {
69
- // String-only condition - AI understands satisfaction cues
70
- condition: "Customer seems satisfied with the resolution",
71
- action: "Thank them for their patience and ask if there's anything else you can help with",
72
- tags: ["satisfaction", "closure"],
73
- },
74
- {
75
- // String-only condition - AI detects urgency
76
- condition: "Customer indicates this is an urgent or time-sensitive issue",
77
- action: "Prioritize their request and provide immediate assistance or escalation",
78
- tags: ["urgency", "priority"],
79
- },
80
- ];
81
-
82
- // Add guidelines to agent
83
- guidelines.forEach(guideline => agent.createGuideline(guideline));
84
-
85
- // Route 1: Billing Issues - String-only condition
86
- agent.createRoute({
87
- title: "Billing Support",
88
- description: "Handle billing questions and payment issues",
89
- // String-only condition - AI interprets billing-related intent
90
- when: "Customer has questions about billing, payments, charges, or invoices",
91
- steps: [
92
- {
93
- id: "understand_billing_issue",
94
- description: "Understand the specific billing concern",
95
- prompt: "I'd be happy to help with your billing question. Can you tell me more about the specific issue you're experiencing?",
96
- collect: ["issueType"],
97
- },
98
- {
99
- id: "resolve_billing",
100
- description: "Provide billing assistance",
101
- prompt: "Let me help resolve your billing concern. Based on what you've told me, here's what I can do...",
102
- requires: ["issueType"],
103
- },
104
- ],
105
- });
106
-
107
- // Route 2: Technical Support - String-only condition
108
- agent.createRoute({
109
- title: "Technical Support",
110
- description: "Help with technical problems and troubleshooting",
111
- // String-only condition - AI understands technical issues
112
- when: "Customer is experiencing technical difficulties, errors, or product malfunctions",
113
- steps: [
114
- {
115
- id: "diagnose_technical_issue",
116
- description: "Understand the technical problem",
117
- prompt: "I'm here to help with your technical issue. Can you describe what's happening and when the problem started?",
118
- collect: ["issueType"],
119
- },
120
- {
121
- id: "provide_technical_solution",
122
- description: "Offer technical assistance",
123
- prompt: "Based on your description, let me walk you through some troubleshooting steps...",
124
- requires: ["issueType"],
125
- },
126
- ],
127
- });
128
-
129
- // Route 3: Account Management - String-only condition
130
- agent.createRoute({
131
- title: "Account Management",
132
- description: "Handle account changes, updates, and settings",
133
- // String-only condition - AI recognizes account-related requests
134
- when: "Customer wants to make changes to their account, update information, or modify settings",
135
- steps: [
136
- {
137
- id: "identify_account_request",
138
- description: "Understand what account changes are needed",
139
- prompt: "I can help you with your account. What changes would you like to make?",
140
- collect: ["issueType"],
141
- },
142
- {
143
- id: "process_account_changes",
144
- description: "Assist with account modifications",
145
- prompt: "I'll help you make those account changes. Let me guide you through the process...",
146
- requires: ["issueType"],
147
- },
148
- ],
149
- });
150
-
151
- // Route 4: General Inquiry - String-only condition
152
- agent.createRoute({
153
- title: "General Information",
154
- description: "Answer general questions about products and services",
155
- // String-only condition - AI handles general questions
156
- when: "Customer has general questions about products, services, or company information",
157
- steps: [
158
- {
159
- id: "answer_general_question",
160
- description: "Provide information and answer questions",
161
- prompt: "I'd be happy to answer your question. Let me provide you with the information you need...",
162
- },
163
- ],
164
- });
165
-
166
- // Route 5: Feedback Collection - String-only condition
167
- agent.createRoute({
168
- title: "Customer Feedback",
169
- description: "Collect customer feedback and satisfaction ratings",
170
- // String-only condition - AI detects feedback intent
171
- when: "Customer wants to provide feedback, leave a review, or share their experience",
172
- requiredFields: ["satisfactionRating"],
173
- optionalFields: ["followUpNeeded"],
174
- steps: [
175
- {
176
- id: "collect_satisfaction_rating",
177
- description: "Ask for satisfaction rating",
178
- prompt: "Thank you for wanting to share feedback! On a scale of 1 to 5, how satisfied are you with our service today?",
179
- collect: ["satisfactionRating"],
180
- },
181
- {
182
- id: "ask_for_follow_up",
183
- description: "Check if follow-up is needed",
184
- prompt: "Thank you for the rating! Would you like someone from our team to follow up with you about your experience?",
185
- collect: ["followUpNeeded"],
186
- requires: ["satisfactionRating"],
187
- },
188
- {
189
- id: "thank_for_feedback",
190
- description: "Thank customer for feedback",
191
- prompt: "We really appreciate your feedback! It helps us improve our service for all customers.",
192
- requires: ["satisfactionRating"],
193
- },
194
- ],
195
- });
196
-
197
- // Route 6: Greeting and Welcome - String-only condition
198
- agent.createRoute({
199
- title: "Welcome and Greeting",
200
- description: "Welcome new customers and handle greetings",
201
- // String-only condition - AI recognizes greetings and welcomes
202
- when: "Customer is greeting, saying hello, or appears to be new to the service",
203
- steps: [
204
- {
205
- id: "welcome_customer",
206
- description: "Provide warm welcome",
207
- prompt: "Hello! Welcome to our customer service. I'm here to help you with any questions or concerns you might have. How can I assist you today?",
208
- },
209
- ],
210
- });
211
-
212
- // Demonstration function
213
- async function demonstrateStringOnlyConditions() {
214
- console.log("=== String-Only Conditions Demo ===\n");
215
- console.log("This demo shows how string conditions let the AI make routing decisions based on natural language understanding.\n");
216
-
217
- const testScenarios = [
218
- {
219
- name: "Billing Issue",
220
- message: "Hi, I was charged twice for my subscription this month and I need help getting a refund",
221
- expectedRoute: "Billing Support"
222
- },
223
- {
224
- name: "Technical Problem",
225
- message: "My app keeps crashing every time I try to upload a file, can you help me fix this?",
226
- expectedRoute: "Technical Support"
227
- },
228
- {
229
- name: "Account Changes",
230
- message: "I need to update my email address and change my password on my account",
231
- expectedRoute: "Account Management"
232
- },
233
- {
234
- name: "General Question",
235
- message: "What are your business hours and do you offer phone support?",
236
- expectedRoute: "General Information"
237
- },
238
- {
239
- name: "Feedback",
240
- message: "I had a great experience with your support team yesterday and wanted to leave some positive feedback",
241
- expectedRoute: "Customer Feedback"
242
- },
243
- {
244
- name: "Greeting",
245
- message: "Hello! I'm new to your service and not sure where to start",
246
- expectedRoute: "Welcome and Greeting"
247
- },
248
- ];
249
-
250
- for (const scenario of testScenarios) {
251
- console.log(`🔍 Testing: ${scenario.name}`);
252
- console.log(`📝 Message: "${scenario.message}"`);
253
-
254
- try {
255
- const response = await agent.respond({
256
- history: [
257
- {
258
- role: "user",
259
- content: scenario.message,
260
- name: "Customer",
261
- },
262
- ],
263
- });
264
-
265
- console.log(`🎯 Routed to: ${response.session?.currentRoute?.title || "No route"}`);
266
- console.log(`✅ Expected: ${scenario.expectedRoute}`);
267
- console.log(`🤖 Response: ${response.message.substring(0, 100)}...`);
268
- console.log();
269
- } catch (error) {
270
- console.log(`❌ Error: ${error}`);
271
- console.log();
272
- }
273
- }
274
-
275
- console.log("💡 Key Benefits of String-Only Conditions:");
276
- console.log(" - Natural language understanding for routing");
277
- console.log(" - No need to write complex programmatic logic");
278
- console.log(" - AI handles intent recognition automatically");
279
- console.log(" - Easy to maintain and update conditions");
280
- console.log(" - Perfect for conversational, intent-based routing");
281
- }
282
-
283
- // Run demonstration
284
- async function main() {
285
- try {
286
- await demonstrateStringOnlyConditions();
287
- } catch (error) {
288
- console.error("Error:", error);
289
- }
290
- }
291
-
292
- if (import.meta.url === `file://${process.argv[1]}`) {
293
- main().catch(console.error);
294
- }
295
-
296
- export { agent, demonstrateStringOnlyConditions };
@@ -1,318 +0,0 @@
1
- /**
2
- * Route Transitions Example
3
- *
4
- * Demonstrates how to use onComplete to automatically transition between routes
5
- * after a route completes, enabling flows like:
6
- * - Post-booking feedback collection
7
- * - Upsell after purchase
8
- * - Satisfaction surveys after support
9
- *
10
- * NEW: Enhanced with flexible ConditionTemplate patterns:
11
- * - Mixed route conditions: ["AI context", (ctx) => programmatic_check]
12
- * - Route skipIf examples: Dynamic route exclusion based on state
13
- * - Step skipIf examples: Enhanced conditional step skipping
14
- * - AI context strings in action for better routing decisions
15
- */
16
-
17
- import {
18
- Agent,
19
- GeminiProvider,
20
- History,
21
- type SessionState,
22
- } from "../../src/index";
23
-
24
- // Type definitions for our unified data collection
25
- interface UnifiedBookingData {
26
- // Booking fields
27
- hotelName: string;
28
- date: string;
29
- guests: number;
30
- // Feedback fields
31
- rating: number;
32
- comments?: string;
33
- }
34
-
35
- async function main() {
36
- // Define unified schema for both booking and feedback data
37
- const unifiedSchema = {
38
- type: "object",
39
- properties: {
40
- // Booking fields
41
- hotelName: { type: "string" },
42
- date: { type: "string" },
43
- guests: { type: "number" },
44
- // Feedback fields
45
- rating: { type: "number", minimum: 1, maximum: 5 },
46
- comments: { type: "string" },
47
- },
48
- required: ["hotelName", "date", "guests"], // Only booking fields are required initially
49
- };
50
-
51
- // Create agent with unified schema
52
- const agent = new Agent<any, UnifiedBookingData>({
53
- name: "HotelBot",
54
- description: "A hotel booking assistant with feedback collection",
55
- provider: new GeminiProvider({
56
- apiKey: process.env.GEMINI_API_KEY!,
57
- model: "models/gemini-2.5-flash",
58
- }),
59
- debug: true,
60
- schema: unifiedSchema,
61
- });
62
-
63
- // Route 1: Hotel Booking with automatic transition to feedback
64
- agent.createRoute({
65
- title: "Book Hotel",
66
- description: "Collects hotel booking information",
67
- // Mixed condition: AI context + programmatic validation
68
- when: [
69
- "User wants to book a hotel",
70
- (ctx) => {
71
- const event = ctx.history?.[ctx.history.length - 1]
72
- if(event && "content" in event){
73
- const message = (event.content as string).toLocaleLowerCase() || '';
74
- return message.includes('book') || message.includes('hotel') || message.includes('reservation');
75
- }
76
- return false;
77
- }
78
- ],
79
- // Skip if user already has a booking
80
- skipIf: [
81
- "user already has an active booking",
82
- (ctx) => !!ctx.data?.hotelName && !!ctx.data?.date
83
- ],
84
- // NEW: Required fields for route completion
85
- requiredFields: ["hotelName", "date", "guests"],
86
- // Sequential steps for booking flow
87
- steps: [
88
- {
89
- id: "ask_hotel",
90
- description: "Ask for hotel preference",
91
- prompt: "Which hotel would you like to book?",
92
- collect: ["hotelName"],
93
- // String-only skipIf for AI context
94
- skipIf: "hotel already selected",
95
- },
96
- {
97
- id: "ask_date",
98
- description: "Ask for booking date",
99
- prompt: "What date would you like to book for?",
100
- collect: ["date"],
101
- requires: ["hotelName"],
102
- // Function-only skipIf for programmatic check
103
- skipIf: (data) => !!data.context.date,
104
- },
105
- {
106
- id: "ask_guests",
107
- description: "Ask for number of guests",
108
- prompt: "How many guests will be staying?",
109
- collect: ["guests"],
110
- requires: ["hotelName", "date"],
111
- // Mixed skipIf: AI context + programmatic logic
112
- skipIf: [
113
- "guest count already provided",
114
- (data) => data.context.guests !== undefined
115
- ],
116
- },
117
- {
118
- id: "confirm_booking",
119
- description: "Confirm the booking",
120
- prompt:
121
- "Confirm the booking with a summary of the hotel, date, and number of guests. Be enthusiastic!",
122
- requires: ["hotelName", "date", "guests"],
123
- },
124
- ],
125
- // Automatic transition to feedback collection when booking completes
126
- onComplete: "Collect Feedback",
127
- });
128
-
129
- // Route 2: Feedback Collection
130
- agent.createRoute({
131
- title: "Collect Feedback",
132
- description: "Collects user feedback after booking",
133
- // Function-only condition for programmatic logic
134
- when: (ctx) => {
135
- // Only activate if we have booking data but no feedback yet
136
- return !!ctx.data?.hotelName && ctx.data?.rating === undefined;
137
- },
138
- // Skip if feedback already collected
139
- skipIf: [
140
- "feedback already provided",
141
- (ctx) => ctx.data?.rating !== undefined
142
- ],
143
- // NEW: Required fields for route completion
144
- requiredFields: ["rating"],
145
- // NEW: Optional fields that enhance the experience
146
- optionalFields: ["comments"],
147
- // Sequential steps for feedback collection
148
- steps: [
149
- {
150
- id: "ask_rating",
151
- description: "Ask for rating",
152
- prompt: "How would you rate your booking experience from 1 to 5?",
153
- collect: ["rating"],
154
- // Mixed skipIf: AI context + programmatic check
155
- skipIf: [
156
- "rating already provided",
157
- (data) => data.context.rating !== undefined
158
- ],
159
- },
160
- {
161
- id: "ask_comments",
162
- description: "Ask for comments",
163
- prompt:
164
- "Would you like to share any additional comments about your experience?",
165
- collect: ["comments"],
166
- },
167
- {
168
- id: "thank_feedback",
169
- description: "Thank user for feedback",
170
- prompt:
171
- "Thank the user warmly for their feedback and let them know their input is valuable",
172
- requires: ["rating"],
173
- },
174
- ],
175
- // End conversation after feedback is collected
176
- onComplete: undefined, // No transition - conversation ends
177
- });
178
-
179
- console.log("\n=== Route Transitions Example ===\n");
180
-
181
- // Conversation 1: User provides all booking info at once
182
- let session: SessionState | undefined;
183
- let history: History = [
184
- {
185
- role: "user" as const,
186
- content: "I want to book the Grand Hotel for 2 guests on December 25th",
187
- name: "Alice",
188
- },
189
- ];
190
-
191
- console.log("User:", history[0].content);
192
-
193
- // First response - should handle booking
194
- const response1 = await agent.respond({ history, session });
195
- console.log("\nBot:", response1.message);
196
- console.log("Route complete?", response1.isRouteComplete);
197
- console.log(
198
- "Pending transition?",
199
- response1.session?.pendingTransition?.targetRouteId
200
- );
201
- console.log("Collected data:", response1.session?.data);
202
-
203
- session = response1.session;
204
- history = [
205
- ...history,
206
- {
207
- role: "assistant" as const,
208
- content: response1.message,
209
- },
210
- ] as History;
211
-
212
- // Second response - should auto-transition to a feedback route
213
- history = [
214
- ...history,
215
- {
216
- role: "user" as const,
217
- content: "Yes, please proceed!",
218
- name: "Alice",
219
- },
220
- ];
221
- console.log("\nUser:", "Yes, please proceed!");
222
-
223
- const response2 = await agent.respond({ history, session });
224
- console.log("\nBot:", response2.message);
225
- console.log("Current route:", response2.session?.currentRoute?.title);
226
- console.log("Route complete?", response2.isRouteComplete);
227
-
228
- session = response2.session;
229
- history = [
230
- ...history,
231
- {
232
- role: "assistant" as const,
233
- content: response2.message,
234
- },
235
- ];
236
-
237
- // Third response - provide rating
238
- history = [
239
- ...history,
240
- {
241
- role: "user" as const,
242
- content: "I'd rate it 5 stars! The process was very smooth.",
243
- name: "Alice",
244
- },
245
- ];
246
- console.log("\nUser:", "I'd rate it 5 stars! The process was very smooth.");
247
-
248
- const response3 = await agent.respond({ history, session });
249
- console.log("\nBot:", response3.message);
250
- console.log("Current route:", response3.session?.currentRoute?.title);
251
- console.log("Collected data:", response3.session?.data);
252
- console.log("Route complete?", response3.isRouteComplete);
253
-
254
- console.log("\n=== Manual Transition Example ===\n");
255
-
256
- // Demonstrate manual transition using agent.nextStepRoute()
257
- let session2: SessionState | undefined;
258
- let history2: History = [
259
- {
260
- role: "user" as const,
261
- content:
262
- "I want to book the Sunset Resort for 4 people on New Year's Eve",
263
- name: "Bob",
264
- },
265
- ];
266
-
267
- console.log("User:", history2[0].content);
268
-
269
- const manualResponse = await agent.respond({
270
- history: history2,
271
- session: session2,
272
- });
273
- console.log("\nBot:", manualResponse.message);
274
- console.log("Route complete?", manualResponse.isRouteComplete);
275
-
276
- if (manualResponse.isRouteComplete && manualResponse.session) {
277
- // Manually trigger transition instead of auto-transition
278
- console.log("\n[Manually transitioning to feedback route...]");
279
- session2 = await agent.nextStepRoute(
280
- "Collect Feedback",
281
- manualResponse.session,
282
- "if booking was successful"
283
- );
284
- console.log(
285
- "Pending transition set:",
286
- session2.pendingTransition?.targetRouteId
287
- );
288
-
289
- history2 = [
290
- ...history2,
291
- {
292
- role: "assistant" as const,
293
- content: manualResponse.message,
294
- },
295
- {
296
- role: "user" as const,
297
- content: "Great!",
298
- name: "Bob",
299
- },
300
- ];
301
-
302
- const feedbackResponse = await agent.respond({
303
- history: history2,
304
- session: session2,
305
- });
306
- console.log("\nBot:", feedbackResponse.message);
307
- console.log(
308
- "Current route:",
309
- feedbackResponse.session?.currentRoute?.title
310
- );
311
- }
312
-
313
- console.log("\n=== Done ===\n");
314
- }
315
-
316
- if (import.meta.url === `file://${process.argv[1]}`) {
317
- main().catch(console.error);
318
- }