@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,735 +0,0 @@
1
- /* eslint @typescript-eslint/no-unused-vars: "off" */
2
- /**
3
- * Example: Company Q&A Agent (Stepless, Knowledge-Based)
4
- *
5
- * This demonstrates:
6
- * 1. Schema-first architecture for stepless Q&A routes (no schema)
7
- * 2. Tools for context enrichment (not data extraction)
8
- * 3. Session step management even for stepless conversations
9
- * 4. Always-on routing with context awareness
10
- * 5. Three-phase pipeline: PREPARATION → ROUTING → RESPONSE
11
- * 6. NEW: Complex ConditionTemplate patterns for intelligent routing:
12
- * - Mixed conditions: ["AI context", (ctx) => programmatic_check]
13
- * - Route skipIf: Dynamic route exclusion based on message content
14
- * - Function-only conditions: (ctx) => sophisticated_logic
15
- * - String-only conditions: "simple AI context"
16
- * - Fallback routing with programmatic logic
17
- */
18
-
19
- import {
20
- Agent,
21
- END_ROUTE,
22
- EventKind,
23
- MessageRole,
24
- OpenAIProvider,
25
- type Tool,
26
- } from "../../src/index";
27
-
28
- // ==============================================================================
29
- // CONTEXT: Company Knowledge Base
30
- // ==============================================================================
31
-
32
- interface CompanyContext {
33
- companyInfo: {
34
- name: string;
35
- founded: number;
36
- employees: number;
37
- headquarters: string;
38
- };
39
- products: Array<{
40
- id: string;
41
- name: string;
42
- description: string;
43
- price: string;
44
- category: string;
45
- }>;
46
- policies: {
47
- returnPolicy: string;
48
- shippingPolicy: string;
49
- warrantyPolicy: string;
50
- };
51
- faqs: Array<{
52
- question: string;
53
- answer: string;
54
- category: string;
55
- }>;
56
- recentNews?: Array<{
57
- title: string;
58
- date: string;
59
- summary: string;
60
- }>;
61
- }
62
-
63
- interface FeedbackData {
64
- rating?: number;
65
- comments?: string;
66
- contactPermission?: boolean;
67
- }
68
-
69
- // ==============================================================================
70
- // TOOLS: Context Enrichment (PREPARATION Phase)
71
- // ==============================================================================
72
-
73
- // Tool: Fetch latest company news (context enrichment)
74
- const fetchNewsTool: Tool<CompanyContext, UnifiedData> = {
75
- id: "fetch_news",
76
- name: "Company News Fetcher",
77
- description: "Retrieve latest company news and updates",
78
- handler: (context, args) => {
79
- // Simulate API call to news service
80
- const news = [
81
- {
82
- title: "New Product Launch: Acme Widget Pro",
83
- date: "2025-10-10",
84
- summary: "We're excited to announce the Acme Widget Pro...",
85
- },
86
- {
87
- title: "Company Expands to European Market",
88
- date: "2025-10-01",
89
- summary: "Acme Corp opens new offices in London and Berlin...",
90
- },
91
- ];
92
-
93
- console.log(`[Tool] Fetched ${news.length} news articles`);
94
-
95
- return {
96
- data: `Fetched ${news.length} latest news articles`,
97
- contextUpdate: {
98
- recentNews: news,
99
- },
100
- };
101
- },
102
- };
103
-
104
- // Tool: Search knowledge base (context enrichment)
105
- const searchKnowledgeTool: Tool<CompanyContext, UnifiedData> = {
106
- id: "search_knowledge",
107
- name: "Knowledge Base Search",
108
- description: "Search FAQs and documentation",
109
- handler: (toolContext, args) => {
110
- const { history } = toolContext;
111
-
112
- // Get last user message
113
- const lastMessage = history
114
- .filter(
115
- (e) => e.kind === EventKind.MESSAGE && e.source === MessageRole.USER
116
- )
117
- .pop();
118
-
119
- if (!lastMessage) {
120
- return { data: "No query found" };
121
- }
122
-
123
- const query = (
124
- lastMessage.data as { message: string }
125
- ).message.toLowerCase();
126
-
127
- // Simple keyword matching (in real app, use vector search)
128
- const relevantFaqs = toolContext.context.faqs.filter(
129
- (faq) =>
130
- faq.question.toLowerCase().includes(query) ||
131
- faq.answer.toLowerCase().includes(query)
132
- );
133
-
134
- console.log(`[Tool] Found ${relevantFaqs.length} relevant FAQs`);
135
-
136
- return {
137
- data: relevantFaqs
138
- .map((faq) => `Q: ${faq.question}\nA: ${faq.answer}`)
139
- .join("\n\n"),
140
- };
141
- },
142
- };
143
-
144
- // ==============================================================================
145
- // AGENT SETUP
146
- // ==============================================================================
147
-
148
- // Define unified data schema for all interactions
149
- interface UnifiedData extends FeedbackData {}
150
-
151
- const unifiedSchema = {
152
- type: "object",
153
- properties: {
154
- // Feedback fields
155
- rating: {
156
- type: "number",
157
- description: "A rating from 1 to 5",
158
- minimum: 1,
159
- maximum: 5,
160
- },
161
- comments: { type: "string", description: "Open-ended feedback" },
162
- contactPermission: {
163
- type: "boolean",
164
- description: "Permission to contact the user for more details",
165
- },
166
- },
167
- };
168
-
169
- const agent = new Agent<CompanyContext, UnifiedData>({
170
- name: "Acme Support Agent",
171
- goal: "Answer questions about Acme Corp and our products",
172
- description:
173
- "I'm here to help you learn about Acme Corp, our products, and policies",
174
- personality:
175
- "Friendly, helpful, and knowledgeable. Always professional but approachable.",
176
- provider: new OpenAIProvider({
177
- apiKey: process.env.OPENAI_API_KEY || "test-key",
178
- model: "gpt-5o-mini",
179
- }),
180
- // NEW: Agent-level schema
181
- schema: unifiedSchema,
182
-
183
- // Initialize with company knowledge
184
- context: {
185
- companyInfo: {
186
- name: "Acme Corporation",
187
- founded: 2010,
188
- employees: 500,
189
- headquarters: "San Francisco, CA",
190
- },
191
- products: [
192
- {
193
- id: "widget-1",
194
- name: "Acme Widget",
195
- description: "Our flagship product for all your widget needs",
196
- price: "$99.99",
197
- category: "widgets",
198
- },
199
- {
200
- id: "gadget-1",
201
- name: "Acme Gadget",
202
- description: "The revolutionary gadget that changed everything",
203
- price: "$149.99",
204
- category: "gadgets",
205
- },
206
- ],
207
- policies: {
208
- returnPolicy: "30-day money-back guarantee, no questions asked",
209
- shippingPolicy:
210
- "Free shipping on orders over $50. 2-5 business days delivery",
211
- warrantyPolicy: "1-year warranty on all products",
212
- },
213
- faqs: [
214
- {
215
- question: "What is your return policy?",
216
- answer: "We offer a 30-day money-back guarantee on all products.",
217
- category: "returns",
218
- },
219
- {
220
- question: "Do you ship internationally?",
221
- answer: "Yes, we ship to over 50 countries worldwide.",
222
- category: "shipping",
223
- },
224
- {
225
- question: "How long is the warranty?",
226
- answer: "All products come with a 1-year manufacturer warranty.",
227
- category: "warranty",
228
- },
229
- ],
230
- },
231
-
232
- // Add domain terms for better understanding
233
- terms: [
234
- {
235
- name: "Widget",
236
- description: "Our core product line for task automation",
237
- },
238
- {
239
- name: "Gadget",
240
- description: "Advanced tools for power users",
241
- },
242
- ],
243
-
244
- // General guidelines (no tools attached - just behavioral)
245
- guidelines: [
246
- {
247
- action: "Always be polite and professional",
248
- enabled: true,
249
- },
250
- {
251
- action:
252
- "If you don't know the answer, admit it and offer to connect them with a human",
253
- enabled: true,
254
- },
255
- {
256
- action: "Provide specific, accurate information from the knowledge base",
257
- enabled: true,
258
- },
259
- ],
260
- });
261
-
262
- // ==============================================================================
263
- // ROUTES: STEPLESS Q&A ROUTES (Schema-First Architecture)
264
- // ==============================================================================
265
-
266
- // Route 1: Company Information (stepless - no data extraction)
267
-
268
- agent.createRoute({
269
- title: "Company Information",
270
- description: "Answer general questions about Acme Corp",
271
- // Mixed condition: AI context + programmatic validation
272
- when: [
273
- "User asks about the company",
274
- "Questions about company history, size, location",
275
- "When was the company founded",
276
- "How many employees",
277
- "Where is the headquarters",
278
- (ctx) => {
279
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
280
- return message.includes('company') || message.includes('acme') || message.includes('founded');
281
- }
282
- ],
283
- // Skip if user is asking about specific products instead
284
- skipIf: [
285
- "user is asking about specific products or services",
286
- (ctx) => {
287
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
288
- return message.includes('widget') || message.includes('gadget') || message.includes('product');
289
- }
290
- ],
291
- // Route-specific knowledge base for company information
292
- knowledgeBase: {
293
- company: {
294
- name: "Acme Corporation",
295
- founded: "1985",
296
- headquarters: "San Francisco, CA",
297
- employees: "2,500+",
298
- mission:
299
- "To build software that makes businesses more efficient and people more productive",
300
- },
301
- history: {
302
- founding: "Founded in 1985 by tech entrepreneurs",
303
- milestones: [
304
- "IPO in 1998",
305
- "Acquired 3 companies in 2010s",
306
- "Expanded to 20 countries by 2020",
307
- ],
308
- },
309
- },
310
- // NO schema - stepless Q&A route
311
- // Just use initial step with prompt for response generation
312
- });
313
-
314
- // Initial step: Answer from knowledge base (no data collecting needed)
315
-
316
- // Route 2: Product Information (stepless)
317
-
318
- agent.createRoute({
319
- title: "Product Information",
320
- description: "Answer questions about products",
321
- // Function-only condition for programmatic logic
322
- when: (ctx) => {
323
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
324
- return message.includes('product') || message.includes('widget') ||
325
- message.includes('gadget') || message.includes('price') ||
326
- message.includes('feature');
327
- },
328
- // Skip if user is asking about company policies instead
329
- skipIf: (ctx) => {
330
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
331
- return message.includes('policy') || message.includes('return') || message.includes('warranty');
332
- },
333
- // NO schema - just answering questions
334
- });
335
-
336
- // Initial step is enough - no transitions needed for simple Q&A
337
-
338
- // Route 3: Policy Questions (stepless)
339
-
340
- agent.createRoute({
341
- title: "Policy Information",
342
- description: "Answer questions about company policies",
343
- // Mixed condition: AI context + programmatic check
344
- when: [
345
- "User asks about policies",
346
- "Return policy",
347
- "Shipping information",
348
- "Warranty questions",
349
- (ctx) => {
350
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
351
- return message.includes('policy') || message.includes('return') ||
352
- message.includes('shipping') || message.includes('warranty');
353
- }
354
- ],
355
- // Skip if user is asking about news or updates
356
- skipIf: [
357
- "user wants latest news or updates",
358
- (ctx) => {
359
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
360
- return message.includes('news') || message.includes('update') || message.includes('new');
361
- }
362
- ],
363
- // NO schema
364
- });
365
-
366
- // Initial step is enough - no extra setup needed
367
-
368
- // Route 4: News & Updates (uses tool, but still stepless)
369
- const newsRoute = agent.createRoute({
370
- title: "Company News",
371
- description: "Share latest company news and updates",
372
- // String-only condition for AI context
373
- when: "User asks about news, updates, or recent announcements",
374
- // Skip if user is asking about general FAQ topics
375
- skipIf: (ctx) => {
376
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
377
- return message.includes('how do i') || message.includes('can i') || message.includes('is there');
378
- },
379
- });
380
-
381
- // Add tool to initial step to fetch news
382
- const fetchNews = newsRoute.initialStep.nextStep({
383
- tools: [fetchNewsTool],
384
- });
385
-
386
- fetchNews.nextStep({
387
- prompt: "Share the latest company news from context",
388
- });
389
-
390
- // Route 5: General FAQ Search (uses tool)
391
- const faqRoute = agent.createRoute({
392
- title: "FAQ Search",
393
- description: "Search FAQs for relevant answers",
394
- // Mixed condition: AI context + programmatic pattern matching
395
- when: [
396
- "User has a question that might be in FAQs",
397
- "How do I...",
398
- "Can I...",
399
- "Is there...",
400
- (ctx) => {
401
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
402
- return message.startsWith('how ') || message.startsWith('can ') ||
403
- message.startsWith('is ') || message.includes('?');
404
- }
405
- ],
406
- // Skip if user is clearly asking for news or company info
407
- skipIf: [
408
- "user wants company news or general company information",
409
- (ctx) => {
410
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
411
- return message.includes('news') || message.includes('company') || message.includes('founded');
412
- }
413
- ],
414
- });
415
-
416
- const searchFaqs = faqRoute.initialStep.nextStep({
417
- tools: [searchKnowledgeTool],
418
- });
419
-
420
- searchFaqs.nextStep({
421
- prompt: "Provide answer based on FAQ search results",
422
- });
423
-
424
- // Route 6: Fallback (generic response)
425
-
426
- agent.createRoute({
427
- title: "General Conversation",
428
- description: "Handle general conversation or unclear questions",
429
- // Function-only condition for fallback logic
430
- when: (ctx) => {
431
- // This route catches everything that doesn't match other routes
432
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
433
- return !message.includes('product') && !message.includes('policy') &&
434
- !message.includes('news') && !message.includes('company');
435
- },
436
- // Never skip the fallback route
437
- skipIf: ()=>false,
438
- });
439
-
440
- // Initial step is enough for fallback conversations
441
-
442
- // Route 7: Collect Feedback (Stepful Example)
443
- const feedbackRoute = agent.createRoute({
444
- title: "Collect Feedback",
445
- description: "Collect user feedback about their experience",
446
- // Mixed condition: AI context + sentiment analysis
447
- when: [
448
- "User wants to leave feedback",
449
- "User seems satisfied or upset",
450
- (ctx) => {
451
- const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
452
- return message.includes('feedback') || message.includes('review') ||
453
- message.includes('satisfied') || message.includes('disappointed');
454
- }
455
- ],
456
- // Skip if user is in the middle of another task
457
- skipIf: [
458
- "user is actively getting help with something else",
459
- (ctx) => {
460
- const recentMessages = ctx.history?.filter((m) => "content" in m).slice(-3) || [];
461
- return recentMessages.some(msg =>
462
- (msg.content as string)?.toLowerCase().includes('help') ||
463
- (msg.content as string)?.toLowerCase().includes('problem')
464
- );
465
- }
466
- ],
467
- // NEW: Required fields for route completion
468
- requiredFields: ["rating", "comments"],
469
- // NEW: Optional fields
470
- optionalFields: ["contactPermission"],
471
- endStep: {
472
- prompt:
473
- "Thank the user warmly for their valuable feedback and let them know we appreciate their time",
474
- },
475
- });
476
-
477
- feedbackRoute.initialStep
478
- .nextStep({
479
- id: "ask_rating",
480
- prompt:
481
- "I'd love to hear your feedback. On a scale of 1 to 5, how would you rate your experience with me today?",
482
- collect: ["rating"],
483
- })
484
- .nextStep({
485
- id: "ask_comments",
486
- prompt:
487
- "Thanks for the rating! Do you have any specific comments or suggestions?",
488
- collect: ["comments"],
489
- requires: ["rating"],
490
- })
491
- .nextStep({
492
- id: "ask_permission",
493
- prompt:
494
- "Thank you for the detailed feedback. Would it be okay if our team contacted you for more details?",
495
- collect: ["contactPermission"],
496
- requires: ["comments"],
497
- })
498
- .nextStep({ step: END_ROUTE }); // Uses route-level endStep configuration
499
-
500
- // ==============================================================================
501
- // USAGE EXAMPLES: Three-Phase Pipeline Demonstration
502
- // ==============================================================================
503
-
504
- async function exampleConversations() {
505
- // Session is automatically managed by the agent
506
- console.log("✨ Session ready:", agent.session.id);
507
-
508
- // =========================================================================
509
- // Example 1: Simple company info question (stepless)
510
- // =========================================================================
511
- console.log("\n=== EXAMPLE 1: Company Info (Stepless Q&A) ===");
512
-
513
- await agent.session.addMessage("user", "How many employees does Acme have?", "User");
514
-
515
- const response1 = await agent.respond({
516
- history: agent.session.getHistory()
517
- });
518
-
519
- console.log("AI:", response1.message);
520
- console.log("Route:", response1.session?.currentRoute?.title);
521
-
522
- await agent.session.addMessage("assistant", response1.message);
523
-
524
- /*
525
- * ARCHITECTURE FLOW:
526
- * 1. PREPARATION: No tools needed for simple Q&A
527
- * 2. ROUTING: Framework routes to "Company Information" (score: 95)
528
- * 3. RESPONSE: AI answers from context knowledge
529
- * - Route: "Company Information"
530
- * - Session: Updated with route/step (even for stepless)
531
- * - No data extraction (stepless route)
532
- */
533
-
534
- // =========================================================================
535
- // Example 2: Product question (stepless)
536
- // =========================================================================
537
- console.log("\n=== EXAMPLE 2: Product Info ===");
538
- const history2 = [
539
- {
540
- role: "user" as const,
541
- content: "What products do you offer?",
542
- name: "User",
543
- },
544
- ];
545
-
546
- const response2 = await agent.respond({ history: history2 });
547
- console.log("AI:", response2.message);
548
- console.log("Route:", response2.session?.currentRoute?.title);
549
- // Expected: "We offer two main products: Acme Widget ($99.99)..."
550
- // Route: "Product Information"
551
-
552
- // =========================================================================
553
- // Example 3: Policy question (stepless)
554
- // =========================================================================
555
- console.log("\n=== EXAMPLE 3: Policy Question ===");
556
- const history3 = [
557
- {
558
- role: "user" as const,
559
- content: "What's your return policy?",
560
- name: "User",
561
- },
562
- ];
563
-
564
- const response3 = await agent.respond({ history: history3 });
565
- console.log("AI:", response3.message);
566
- console.log("Route:", response3.session?.currentRoute?.title);
567
- // Expected: "We offer a 30-day money-back guarantee..."
568
- // Route: "Policy Information"
569
-
570
- // =========================================================================
571
- // Example 4: News request (tool execution, but still stepless)
572
- // =========================================================================
573
- console.log("\n=== EXAMPLE 4: Latest News ===");
574
- const history4 = [
575
- {
576
- role: "user" as const,
577
- content: "What's new at Acme?",
578
- name: "User",
579
- },
580
- ];
581
-
582
- const response4 = await agent.respond({ history: history4 });
583
- console.log("AI:", response4.message);
584
- console.log("Route:", response4.session?.currentRoute?.title);
585
- // Tool fetches news → Updates context → AI responds with news
586
- // Route: "Company News"
587
- // NO data extraction - tool just enriches context
588
-
589
- // =========================================================================
590
- // Example 5: Multi-turn conversation (context maintained)
591
- // =========================================================================
592
- console.log("\n=== EXAMPLE 5: Multi-turn ===");
593
-
594
- // Turn 1
595
- const turn1 = [
596
- {
597
- role: "user" as const,
598
- content: "Tell me about the Acme Widget",
599
- name: "User",
600
- },
601
- ];
602
- const resp1 = await agent.respond({ history: turn1 });
603
- console.log("User: Tell me about the Acme Widget");
604
- console.log("AI:", resp1.message);
605
-
606
- // Turn 2 - follow-up question
607
- const turn2 = [
608
- ...turn1,
609
- {
610
- role: "assistant" as const,
611
- content: resp1.message,
612
- },
613
- {
614
- role: "user" as const,
615
- content: "How much does it cost?",
616
- name: "User",
617
- },
618
- ];
619
- const resp2 = await agent.respond({
620
- history: turn2,
621
- session: resp1.session, // Pass previous session
622
- });
623
- console.log("User: How much does it cost?");
624
- console.log("AI:", resp2.message);
625
- // AI understands "it" refers to Acme Widget from context
626
-
627
- // =========================================================================
628
- // Example 6: Stepful feedback collection
629
- // =========================================================================
630
- console.log("\n=== EXAMPLE 6: Stepful Feedback Collection ===");
631
- const feedbackHistory = [
632
- {
633
- role: "user" as const,
634
- content: "This was very helpful, I want to leave some feedback.",
635
- name: "User",
636
- },
637
- ];
638
-
639
- const feedbackResponse = await agent.respond({
640
- history: feedbackHistory,
641
- });
642
- console.log("AI:", feedbackResponse.message);
643
- console.log("Route:", feedbackResponse.session?.currentRoute?.title);
644
-
645
- if (feedbackResponse.isRouteComplete) {
646
- console.log("\n✅ Feedback collection complete!");
647
- await processFeedback(agent.getCollectedData());
648
- } else {
649
- console.log("\n⏳ Feedback collection in progress...");
650
- }
651
- }
652
-
653
- /**
654
- * Mock function to process collected feedback.
655
- * @param data The feedback data collected from the user.
656
- */
657
- async function processFeedback(data: Partial<UnifiedData>) {
658
- console.log("\n" + "=".repeat(60));
659
- console.log("Processing user feedback...");
660
- console.log("=".repeat(60));
661
- console.log("Rating:", data.rating);
662
- console.log("Comments:", data.comments);
663
- console.log("Permission to contact:", data.contactPermission);
664
-
665
- // Here you would typically save this to a database or send it to a support system.
666
- await new Promise((resolve) => setTimeout(resolve, 500)); // Simulate async operation
667
- console.log("Feedback logged successfully!");
668
- console.log("=".repeat(60));
669
- }
670
-
671
- // ==============================================================================
672
- // KEY TAKEAWAYS FOR Q&A USE CASES
673
- // ==============================================================================
674
-
675
- /*
676
- * 1. NO STEP MACHINES REQUIRED
677
- * - Just use the initial step with a prompt description
678
- * - No collect, no skipIf, no step transitions
679
- * - Perfect for stepless question-answering
680
- *
681
- * 2. ROUTING STILL WORKS
682
- * - Framework routes to most relevant Q&A route
683
- * - Always-on routing handles topic switches
684
- * - Conditions guide the AI to the right knowledge domain
685
- *
686
- * 3. TOOLS FOR CONTEXT ENRICHMENT
687
- * - Tools fetch additional data (news, search results)
688
- * - Updates context (not collected data)
689
- * - AI uses enriched context to answer
690
- *
691
- * 4. KNOWLEDGE IN CONTEXT
692
- * - Store company knowledge in context
693
- * - Use contextProvider for always-fresh data
694
- * - Tools can augment context at runtime
695
- *
696
- * 5. MIX STEPFUL & STEPLESS
697
- * - Have Q&A routes (stepless)
698
- * - AND booking/onboarding routes (stepful)
699
- * - Framework handles both seamlessly
700
- *
701
- * 6. GUIDELINES FOR BEHAVIOR
702
- * - Use guidelines for general behavioral rules
703
- * - No need for complex step machines for simple policies
704
- * - Keep it simple!
705
- *
706
- * ARCHITECTURE FOR Q&A:
707
- *
708
- * User Question
709
- * ↓
710
- * Routing (score all Q&A routes)
711
- * ↓
712
- * Tool Execution (if needed - fetch data)
713
- * ↓
714
- * Response (AI answers from context)
715
- * ↓
716
- * Done (no step tracking needed)
717
- *
718
- * vs. STEPFUL FLOWS (booking, onboarding):
719
- *
720
- * User Intent
721
- * ↓
722
- * Routing
723
- * ↓
724
- * Step Machine (collect data step-by-step)
725
- * ↓
726
- * Tools (validate/enrich collected data)
727
- * ↓
728
- * Response (continue conversation)
729
- * ↓
730
- * Track Session (collected data, current step)
731
- */
732
-
733
- if (require.main === module) {
734
- exampleConversations().catch(console.error);
735
- }