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