@falai/agent 1.2.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +40 -886
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1191 -1014
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +509 -136
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/types/agent.d.ts +183 -54
  126. package/dist/cjs/types/agent.d.ts.map +1 -1
  127. package/dist/cjs/types/agent.js +0 -6
  128. package/dist/cjs/types/agent.js.map +1 -1
  129. package/dist/cjs/types/ai.d.ts +3 -3
  130. package/dist/cjs/types/ai.d.ts.map +1 -1
  131. package/dist/cjs/types/errors.d.ts +15 -0
  132. package/dist/cjs/types/errors.d.ts.map +1 -0
  133. package/dist/cjs/types/errors.js +22 -0
  134. package/dist/cjs/types/errors.js.map +1 -0
  135. package/dist/cjs/types/flow.d.ts +513 -0
  136. package/dist/cjs/types/flow.d.ts.map +1 -0
  137. package/dist/cjs/types/{route.js → flow.js} +2 -2
  138. package/dist/cjs/types/flow.js.map +1 -0
  139. package/dist/cjs/types/index.d.ts +7 -6
  140. package/dist/cjs/types/index.d.ts.map +1 -1
  141. package/dist/cjs/types/index.js +6 -2
  142. package/dist/cjs/types/index.js.map +1 -1
  143. package/dist/cjs/types/persistence.d.ts +11 -7
  144. package/dist/cjs/types/persistence.d.ts.map +1 -1
  145. package/dist/cjs/types/routing.d.ts +1 -1
  146. package/dist/cjs/types/routing.d.ts.map +1 -1
  147. package/dist/cjs/types/session.d.ts +24 -23
  148. package/dist/cjs/types/session.d.ts.map +1 -1
  149. package/dist/cjs/types/signals.d.ts +248 -0
  150. package/dist/cjs/types/signals.d.ts.map +1 -0
  151. package/dist/cjs/types/signals.js +11 -0
  152. package/dist/cjs/types/signals.js.map +1 -0
  153. package/dist/cjs/types/template.d.ts +2 -8
  154. package/dist/cjs/types/template.d.ts.map +1 -1
  155. package/dist/cjs/types/tool.d.ts +36 -29
  156. package/dist/cjs/types/tool.d.ts.map +1 -1
  157. package/dist/cjs/types/tool.js +1 -1
  158. package/dist/cjs/types/tool.js.map +1 -1
  159. package/dist/cjs/utils/condition.d.ts +7 -1
  160. package/dist/cjs/utils/condition.d.ts.map +1 -1
  161. package/dist/cjs/utils/condition.js.map +1 -1
  162. package/dist/cjs/utils/id.d.ts +13 -5
  163. package/dist/cjs/utils/id.d.ts.map +1 -1
  164. package/dist/cjs/utils/id.js +24 -10
  165. package/dist/cjs/utils/id.js.map +1 -1
  166. package/dist/cjs/utils/index.d.ts +2 -2
  167. package/dist/cjs/utils/index.d.ts.map +1 -1
  168. package/dist/cjs/utils/index.js +7 -3
  169. package/dist/cjs/utils/index.js.map +1 -1
  170. package/dist/cjs/utils/session.d.ts +44 -5
  171. package/dist/cjs/utils/session.d.ts.map +1 -1
  172. package/dist/cjs/utils/session.js +197 -38
  173. package/dist/cjs/utils/session.js.map +1 -1
  174. package/dist/constants/index.d.ts +0 -9
  175. package/dist/constants/index.d.ts.map +1 -1
  176. package/dist/constants/index.js +3 -9
  177. package/dist/constants/index.js.map +1 -1
  178. package/dist/core/Agent.d.ts +119 -153
  179. package/dist/core/Agent.d.ts.map +1 -1
  180. package/dist/core/Agent.js +472 -325
  181. package/dist/core/Agent.js.map +1 -1
  182. package/dist/core/AutoChainExecutor.d.ts +107 -0
  183. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  184. package/dist/core/AutoChainExecutor.js +293 -0
  185. package/dist/core/AutoChainExecutor.js.map +1 -0
  186. package/dist/core/BranchEvaluator.d.ts +54 -0
  187. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  188. package/dist/core/BranchEvaluator.js +126 -0
  189. package/dist/core/BranchEvaluator.js.map +1 -0
  190. package/dist/core/DirectiveBus.d.ts +88 -0
  191. package/dist/core/DirectiveBus.d.ts.map +1 -0
  192. package/dist/core/DirectiveBus.js +192 -0
  193. package/dist/core/DirectiveBus.js.map +1 -0
  194. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  195. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  196. package/dist/core/DirectiveChainTracker.js +117 -0
  197. package/dist/core/DirectiveChainTracker.js.map +1 -0
  198. package/dist/core/Flow.d.ts +186 -0
  199. package/dist/core/Flow.d.ts.map +1 -0
  200. package/dist/core/Flow.js +546 -0
  201. package/dist/core/Flow.js.map +1 -0
  202. package/dist/core/FlowRouter.d.ts +182 -0
  203. package/dist/core/FlowRouter.d.ts.map +1 -0
  204. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  205. package/dist/core/FlowRouter.js.map +1 -0
  206. package/dist/core/PersistenceManager.d.ts +2 -2
  207. package/dist/core/PersistenceManager.d.ts.map +1 -1
  208. package/dist/core/PersistenceManager.js +7 -7
  209. package/dist/core/PersistenceManager.js.map +1 -1
  210. package/dist/core/PromptComposer.d.ts +21 -8
  211. package/dist/core/PromptComposer.d.ts.map +1 -1
  212. package/dist/core/PromptComposer.js +183 -106
  213. package/dist/core/PromptComposer.js.map +1 -1
  214. package/dist/core/PromptSectionCache.d.ts +1 -1
  215. package/dist/core/PromptSectionCache.js +1 -1
  216. package/dist/core/ResponseEngine.d.ts +18 -8
  217. package/dist/core/ResponseEngine.d.ts.map +1 -1
  218. package/dist/core/ResponseEngine.js +38 -36
  219. package/dist/core/ResponseEngine.js.map +1 -1
  220. package/dist/core/ResponseModal.d.ts +73 -56
  221. package/dist/core/ResponseModal.d.ts.map +1 -1
  222. package/dist/core/ResponseModal.js +1193 -1016
  223. package/dist/core/ResponseModal.js.map +1 -1
  224. package/dist/core/ResponsePipeline.d.ts +124 -26
  225. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  226. package/dist/core/ResponsePipeline.js +509 -137
  227. package/dist/core/ResponsePipeline.js.map +1 -1
  228. package/dist/core/SignalEvaluator.d.ts +86 -0
  229. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  230. package/dist/core/SignalEvaluator.js +326 -0
  231. package/dist/core/SignalEvaluator.js.map +1 -0
  232. package/dist/core/SignalProcessor.d.ts +152 -0
  233. package/dist/core/SignalProcessor.d.ts.map +1 -0
  234. package/dist/core/SignalProcessor.js +555 -0
  235. package/dist/core/SignalProcessor.js.map +1 -0
  236. package/dist/core/Step.d.ts +43 -32
  237. package/dist/core/Step.d.ts.map +1 -1
  238. package/dist/core/Step.js +220 -126
  239. package/dist/core/Step.js.map +1 -1
  240. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  241. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  242. package/dist/core/StreamingToolExecutor.js.map +1 -1
  243. package/dist/core/ToolManager.d.ts +44 -13
  244. package/dist/core/ToolManager.d.ts.map +1 -1
  245. package/dist/core/ToolManager.js +174 -91
  246. package/dist/core/ToolManager.js.map +1 -1
  247. package/dist/core/createAgent.d.ts +35 -0
  248. package/dist/core/createAgent.d.ts.map +1 -0
  249. package/dist/core/createAgent.js +36 -0
  250. package/dist/core/createAgent.js.map +1 -0
  251. package/dist/core/flow-namespace.d.ts +49 -0
  252. package/dist/core/flow-namespace.d.ts.map +1 -0
  253. package/dist/core/flow-namespace.js +168 -0
  254. package/dist/core/flow-namespace.js.map +1 -0
  255. package/dist/index.d.ts +11 -14
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +9 -12
  258. package/dist/index.js.map +1 -1
  259. package/dist/types/agent.d.ts +183 -54
  260. package/dist/types/agent.d.ts.map +1 -1
  261. package/dist/types/agent.js +0 -6
  262. package/dist/types/agent.js.map +1 -1
  263. package/dist/types/ai.d.ts +3 -3
  264. package/dist/types/ai.d.ts.map +1 -1
  265. package/dist/types/errors.d.ts +15 -0
  266. package/dist/types/errors.d.ts.map +1 -0
  267. package/dist/types/errors.js +18 -0
  268. package/dist/types/errors.js.map +1 -0
  269. package/dist/types/flow.d.ts +513 -0
  270. package/dist/types/flow.d.ts.map +1 -0
  271. package/dist/types/flow.js +5 -0
  272. package/dist/types/flow.js.map +1 -0
  273. package/dist/types/index.d.ts +7 -6
  274. package/dist/types/index.d.ts.map +1 -1
  275. package/dist/types/index.js +4 -1
  276. package/dist/types/index.js.map +1 -1
  277. package/dist/types/persistence.d.ts +11 -7
  278. package/dist/types/persistence.d.ts.map +1 -1
  279. package/dist/types/routing.d.ts +1 -1
  280. package/dist/types/routing.d.ts.map +1 -1
  281. package/dist/types/session.d.ts +24 -23
  282. package/dist/types/session.d.ts.map +1 -1
  283. package/dist/types/signals.d.ts +248 -0
  284. package/dist/types/signals.d.ts.map +1 -0
  285. package/dist/types/signals.js +10 -0
  286. package/dist/types/signals.js.map +1 -0
  287. package/dist/types/template.d.ts +2 -8
  288. package/dist/types/template.d.ts.map +1 -1
  289. package/dist/types/tool.d.ts +36 -29
  290. package/dist/types/tool.d.ts.map +1 -1
  291. package/dist/types/tool.js +1 -1
  292. package/dist/types/tool.js.map +1 -1
  293. package/dist/utils/condition.d.ts +7 -1
  294. package/dist/utils/condition.d.ts.map +1 -1
  295. package/dist/utils/condition.js.map +1 -1
  296. package/dist/utils/id.d.ts +13 -5
  297. package/dist/utils/id.d.ts.map +1 -1
  298. package/dist/utils/id.js +22 -9
  299. package/dist/utils/id.js.map +1 -1
  300. package/dist/utils/index.d.ts +2 -2
  301. package/dist/utils/index.d.ts.map +1 -1
  302. package/dist/utils/index.js +2 -2
  303. package/dist/utils/index.js.map +1 -1
  304. package/dist/utils/session.d.ts +44 -5
  305. package/dist/utils/session.d.ts.map +1 -1
  306. package/dist/utils/session.js +193 -37
  307. package/dist/utils/session.js.map +1 -1
  308. package/docs/README.md +15 -202
  309. package/docs/concepts/architecture.md +281 -0
  310. package/docs/concepts/directives.md +400 -0
  311. package/docs/concepts/pipeline.md +399 -0
  312. package/docs/guides/branching.md +263 -0
  313. package/docs/guides/compaction.md +163 -0
  314. package/docs/guides/conditions.md +167 -0
  315. package/docs/guides/error-handling.md +176 -0
  316. package/docs/guides/flow-control.md +409 -0
  317. package/docs/guides/instructions.md +210 -0
  318. package/docs/guides/persistence.md +182 -0
  319. package/docs/guides/streaming.md +137 -0
  320. package/docs/migration/README.md +15 -0
  321. package/docs/migration/route-to-flow.md +560 -0
  322. package/docs/migration/v1-to-v2.md +909 -0
  323. package/docs/reference/adapters.md +481 -0
  324. package/docs/reference/branches.md +241 -0
  325. package/docs/reference/create-agent.md +186 -0
  326. package/docs/reference/directive.md +243 -0
  327. package/docs/reference/errors.md +122 -0
  328. package/docs/reference/flow.md +238 -0
  329. package/docs/reference/instruction.md +177 -0
  330. package/docs/reference/pre-directive.md +131 -0
  331. package/docs/reference/providers.md +227 -0
  332. package/docs/reference/signals.md +356 -0
  333. package/docs/reference/step.md +339 -0
  334. package/docs/reference/tool.md +269 -0
  335. package/docs/start/01-install.md +81 -0
  336. package/docs/start/02-first-agent.md +196 -0
  337. package/docs/start/03-collect-data.md +222 -0
  338. package/docs/start/04-add-tools.md +276 -0
  339. package/docs/start/05-go-to-production.md +216 -0
  340. package/examples/01-quickstart.ts +20 -0
  341. package/examples/02-data-extraction.ts +90 -0
  342. package/examples/03-tools.ts +136 -0
  343. package/examples/04-instructions.ts +100 -0
  344. package/examples/05-branching.ts +140 -0
  345. package/examples/06-flow-control.ts +103 -0
  346. package/examples/07-streaming.ts +69 -0
  347. package/examples/08-persistence.ts +98 -0
  348. package/examples/09-signals.ts +144 -0
  349. package/examples/tsconfig.json +30 -0
  350. package/package.json +2 -1
  351. package/src/adapters/MemoryAdapter.ts +3 -3
  352. package/src/adapters/MongoAdapter.ts +3 -3
  353. package/src/adapters/OpenSearchAdapter.ts +10 -8
  354. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  355. package/src/adapters/PrismaAdapter.ts +6 -6
  356. package/src/adapters/RedisAdapter.ts +3 -3
  357. package/src/adapters/SQLiteAdapter.ts +31 -12
  358. package/src/constants/index.ts +2 -10
  359. package/src/core/Agent.ts +585 -374
  360. package/src/core/AutoChainExecutor.ts +440 -0
  361. package/src/core/BranchEvaluator.ts +167 -0
  362. package/src/core/DirectiveBus.ts +248 -0
  363. package/src/core/DirectiveChainTracker.ts +144 -0
  364. package/src/core/Flow.ts +666 -0
  365. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  366. package/src/core/PersistenceManager.ts +8 -8
  367. package/src/core/PromptComposer.ts +209 -140
  368. package/src/core/PromptSectionCache.ts +1 -1
  369. package/src/core/ResponseEngine.ts +61 -46
  370. package/src/core/ResponseModal.ts +1453 -1240
  371. package/src/core/ResponsePipeline.ts +655 -175
  372. package/src/core/SignalEvaluator.ts +420 -0
  373. package/src/core/SignalProcessor.ts +723 -0
  374. package/src/core/Step.ts +279 -176
  375. package/src/core/StreamingToolExecutor.ts +4 -4
  376. package/src/core/ToolManager.ts +200 -97
  377. package/src/core/createAgent.ts +40 -0
  378. package/src/core/flow-namespace.ts +219 -0
  379. package/src/index.ts +42 -36
  380. package/src/types/agent.ts +182 -53
  381. package/src/types/ai.ts +3 -3
  382. package/src/types/errors.ts +18 -0
  383. package/src/types/flow.ts +590 -0
  384. package/src/types/index.ts +43 -16
  385. package/src/types/persistence.ts +12 -8
  386. package/src/types/routing.ts +1 -1
  387. package/src/types/session.ts +26 -23
  388. package/src/types/signals.ts +321 -0
  389. package/src/types/template.ts +3 -11
  390. package/src/types/tool.ts +50 -42
  391. package/src/utils/condition.ts +13 -4
  392. package/src/utils/id.ts +27 -9
  393. package/src/utils/index.ts +6 -2
  394. package/src/utils/session.ts +238 -42
  395. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  396. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  397. package/dist/cjs/core/BatchExecutor.js +0 -861
  398. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  399. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  400. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  401. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  402. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  403. package/dist/cjs/core/Route.d.ts +0 -180
  404. package/dist/cjs/core/Route.d.ts.map +0 -1
  405. package/dist/cjs/core/Route.js +0 -542
  406. package/dist/cjs/core/Route.js.map +0 -1
  407. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  408. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  409. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  410. package/dist/cjs/types/route.d.ts +0 -336
  411. package/dist/cjs/types/route.d.ts.map +0 -1
  412. package/dist/cjs/types/route.js.map +0 -1
  413. package/dist/core/BatchExecutor.d.ts +0 -359
  414. package/dist/core/BatchExecutor.d.ts.map +0 -1
  415. package/dist/core/BatchExecutor.js +0 -856
  416. package/dist/core/BatchExecutor.js.map +0 -1
  417. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  418. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  419. package/dist/core/BatchPromptBuilder.js +0 -219
  420. package/dist/core/BatchPromptBuilder.js.map +0 -1
  421. package/dist/core/Route.d.ts +0 -180
  422. package/dist/core/Route.d.ts.map +0 -1
  423. package/dist/core/Route.js +0 -538
  424. package/dist/core/Route.js.map +0 -1
  425. package/dist/core/RoutingEngine.d.ts +0 -185
  426. package/dist/core/RoutingEngine.d.ts.map +0 -1
  427. package/dist/core/RoutingEngine.js.map +0 -1
  428. package/dist/types/route.d.ts +0 -336
  429. package/dist/types/route.d.ts.map +0 -1
  430. package/dist/types/route.js +0 -5
  431. package/dist/types/route.js.map +0 -1
  432. package/docs/CONTRIBUTING.md +0 -521
  433. package/docs/api/README.md +0 -3299
  434. package/docs/api/overview.md +0 -1410
  435. package/docs/architecture/data-extraction-flow.md +0 -360
  436. package/docs/architecture/multi-step-execution.md +0 -277
  437. package/docs/core/agent/README.md +0 -938
  438. package/docs/core/agent/context-management.md +0 -796
  439. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  440. package/docs/core/agent/session-management.md +0 -693
  441. package/docs/core/ai-integration/prompt-composition.md +0 -355
  442. package/docs/core/ai-integration/providers.md +0 -515
  443. package/docs/core/ai-integration/response-processing.md +0 -433
  444. package/docs/core/conversation-flows/data-collection.md +0 -772
  445. package/docs/core/conversation-flows/route-dsl.md +0 -509
  446. package/docs/core/conversation-flows/routes.md +0 -249
  447. package/docs/core/conversation-flows/step-transitions.md +0 -731
  448. package/docs/core/conversation-flows/steps.md +0 -268
  449. package/docs/core/error-handling.md +0 -830
  450. package/docs/core/persistence/adapters.md +0 -255
  451. package/docs/core/persistence/session-storage.md +0 -656
  452. package/docs/core/routing/intelligent-routing.md +0 -470
  453. package/docs/core/tools/enhanced-tool.md +0 -186
  454. package/docs/core/tools/streaming-execution.md +0 -161
  455. package/docs/core/tools/tool-definition.md +0 -970
  456. package/docs/core/tools/tool-scoping.md +0 -819
  457. package/docs/guides/advanced-patterns/publishing.md +0 -186
  458. package/docs/guides/context-compaction.md +0 -96
  459. package/docs/guides/error-handling-patterns.md +0 -578
  460. package/docs/guides/getting-started/README.md +0 -795
  461. package/docs/guides/migration/README.md +0 -101
  462. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  463. package/docs/guides/migration/multi-step-execution.md +0 -393
  464. package/docs/guides/migration/response-modal-refactor.md +0 -518
  465. package/docs/guides/prompt-optimization.md +0 -164
  466. package/examples/advanced-patterns/context-compaction.ts +0 -223
  467. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  468. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  469. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  470. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  471. package/examples/ai-providers/anthropic-integration.ts +0 -388
  472. package/examples/ai-providers/openai-integration.ts +0 -228
  473. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  474. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  475. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  476. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  477. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  478. package/examples/conversation-flows/completion-transitions.ts +0 -318
  479. package/examples/core-concepts/basic-agent.ts +0 -503
  480. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  481. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  482. package/examples/core-concepts/session-management.ts +0 -494
  483. package/examples/integrations/database-integration.ts +0 -631
  484. package/examples/integrations/healthcare-integration.ts +0 -595
  485. package/examples/integrations/search-integration.ts +0 -530
  486. package/examples/integrations/server-session-management.ts +0 -307
  487. package/examples/persistence/custom-adapter.ts +0 -526
  488. package/examples/persistence/database-persistence.ts +0 -583
  489. package/examples/persistence/memory-sessions.ts +0 -495
  490. package/examples/persistence/prisma-schema.example.prisma +0 -74
  491. package/examples/persistence/redis-persistence.ts +0 -488
  492. package/examples/tools/basic-tools.ts +0 -765
  493. package/examples/tools/data-enrichment-tools.ts +0 -593
  494. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  495. package/examples/tools/streaming-tool-execution.ts +0 -283
  496. package/src/core/BatchExecutor.ts +0 -1187
  497. package/src/core/BatchPromptBuilder.ts +0 -299
  498. package/src/core/Route.ts +0 -678
  499. package/src/types/route.ts +0 -392
@@ -1,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
- }