@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
@@ -0,0 +1,248 @@
1
+ /**
2
+ * DirectiveBus — per-turn collection mechanism for directives emitted by
3
+ * hooks, tools, and branches.
4
+ *
5
+ * Two phases per turn:
6
+ * 1. Pre-LLM: collects from `prepare` hooks and `onEnter` hooks.
7
+ * 2. Post-LLM: collects from `finalize`, tools via `executeToolCalls`,
8
+ * branches via `evaluateBranches`.
9
+ *
10
+ * Each entry is stamped with an emitter ID for debug logging. At phase
11
+ * boundaries, the bus contents are merged using `flow.merge` and the
12
+ * result is returned via `drain()`.
13
+ *
14
+ * Algorithm 4: position precedence `abort > complete > goTo/goToStep > reset`,
15
+ * ties broken by emission order (last wins).
16
+ *
17
+ * **Validates: Requirements 1.3, 10.4, 10.5, 10.6**
18
+ */
19
+
20
+ import type { Directive } from "../types/flow";
21
+ import { flow } from "./flow-namespace";
22
+ import { logger } from "../utils";
23
+
24
+ /** Phase of the turn pipeline the bus is currently collecting for. */
25
+ export type DirectiveBusPhase = "pre-llm" | "post-llm";
26
+
27
+ /** A single entry on the bus, stamped with its emitter for debug logging. */
28
+ export interface DirectiveBusEntry<TContext = unknown, TData = unknown> {
29
+ directive: Directive<TContext, TData>;
30
+ emitterId: string;
31
+ phase: DirectiveBusPhase;
32
+ /** Monotonically increasing emission index within the phase. */
33
+ order: number;
34
+ }
35
+
36
+ /**
37
+ * Per-turn directive collection bus.
38
+ *
39
+ * Usage:
40
+ * ```ts
41
+ * const bus = new DirectiveBus();
42
+ * bus.setPhase('pre-llm');
43
+ * bus.emit({ goTo: 'Booking' }, 'step.onEnter:ask_date');
44
+ * bus.emit({ appendPrompt: ['Be concise.'] }, 'step.prepare:ask_date');
45
+ * const merged = bus.drain(); // merges all collected directives
46
+ * bus.setPhase('post-llm');
47
+ * // ... collect post-LLM emissions ...
48
+ * const postMerged = bus.drain();
49
+ * ```
50
+ */
51
+ export class DirectiveBus<TContext = unknown, TData = unknown> {
52
+ private entries: DirectiveBusEntry<TContext, TData>[] = [];
53
+ private currentPhase: DirectiveBusPhase = "pre-llm";
54
+ private orderCounter = 0;
55
+
56
+ /** Set the current collection phase. Resets the order counter for the new phase. */
57
+ setPhase(phase: DirectiveBusPhase): void {
58
+ this.currentPhase = phase;
59
+ // Order counter is NOT reset — emission order is global within the turn
60
+ // so that cross-phase comparisons (if ever needed) remain consistent.
61
+ }
62
+
63
+ /** Get the current phase. */
64
+ getPhase(): DirectiveBusPhase {
65
+ return this.currentPhase;
66
+ }
67
+
68
+ /**
69
+ * Emit a directive onto the bus.
70
+ *
71
+ * @param directive - The directive to collect.
72
+ * @param emitterId - Human-readable identifier of the emitter (for debug logging).
73
+ */
74
+ emit(directive: Directive<TContext, TData>, emitterId: string): void {
75
+ if (!directive || typeof directive !== "object" || Array.isArray(directive)) {
76
+ return; // Silently ignore non-object values (void returns from hooks)
77
+ }
78
+
79
+ // Check if the directive has any meaningful fields set
80
+ const hasFields = Object.keys(directive).some(
81
+ (k) => (directive as Record<string, unknown>)[k] !== undefined
82
+ );
83
+ if (!hasFields) {
84
+ return; // Empty directive — nothing to collect
85
+ }
86
+
87
+ this.entries.push({
88
+ directive,
89
+ emitterId,
90
+ phase: this.currentPhase,
91
+ order: this.orderCounter++,
92
+ });
93
+
94
+ logger.debug(
95
+ `[DirectiveBus] Collected directive from "${emitterId}" (phase=${this.currentPhase}, order=${this.orderCounter - 1})`
96
+ );
97
+ }
98
+
99
+ /**
100
+ * Drain the bus: merge all collected directives for the current phase
101
+ * using Algorithm 4 (position precedence, last-wins tie-breaking,
102
+ * shallow-merge for state writes).
103
+ *
104
+ * Returns `undefined` if no directives were collected.
105
+ * After draining, the entries for the current phase are cleared.
106
+ */
107
+ drain(): Directive<TContext, TData> | undefined {
108
+ const phaseEntries = this.entries.filter(
109
+ (e) => e.phase === this.currentPhase
110
+ );
111
+
112
+ if (phaseEntries.length === 0) {
113
+ return undefined;
114
+ }
115
+
116
+ // Log conflicts when multiple emitters set position or reply fields
117
+ this.logConflicts(phaseEntries);
118
+
119
+ // Merge all directives in emission order using flow.merge (pairwise reduction).
120
+ // flow.merge implements Algorithm 4: position precedence with last-wins tie-breaking.
121
+ let merged: Directive<TContext, TData> = phaseEntries[0].directive;
122
+ for (let i = 1; i < phaseEntries.length; i++) {
123
+ merged = flow.merge(merged, phaseEntries[i].directive);
124
+ }
125
+
126
+ // Strip pre-LLM-only fields from post-LLM phase emissions
127
+ if (this.currentPhase === "post-llm") {
128
+ const asAny = merged as Record<string, unknown>;
129
+ const preLlmFields = ["appendPrompt", "injectTools", "halt"] as const;
130
+
131
+ // Identify which fields are present BEFORE stripping (the merge may
132
+ // alias phaseEntries[0].directive when there is a single emitter, so
133
+ // we must collect emitter names first).
134
+ const droppedFields: string[] = [];
135
+ for (const f of preLlmFields) {
136
+ if (asAny[f] !== undefined) {
137
+ droppedFields.push(f);
138
+ }
139
+ }
140
+
141
+ if (droppedFields.length > 0) {
142
+ // Identify emitters that contributed the dropped fields.
143
+ const emitters = phaseEntries
144
+ .filter((e) => {
145
+ const d = e.directive as Record<string, unknown>;
146
+ return droppedFields.some((f) => d[f] !== undefined);
147
+ })
148
+ .map((e) => e.emitterId);
149
+
150
+ // Now strip the fields from the merged result.
151
+ for (const f of droppedFields) {
152
+ delete asAny[f];
153
+ }
154
+
155
+ logger.debug(
156
+ `[DirectiveBus] Dropped pre-LLM-only fields [${droppedFields.join(", ")}] from post-LLM emitters: ${emitters.join(", ")}`
157
+ );
158
+ }
159
+ }
160
+
161
+ // Clear entries for the drained phase
162
+ this.entries = this.entries.filter((e) => e.phase !== this.currentPhase);
163
+
164
+ return merged;
165
+ }
166
+
167
+ /**
168
+ * Drain ALL entries regardless of phase. Used for final turn cleanup.
169
+ * Returns `undefined` if no directives were collected.
170
+ */
171
+ drainAll(): Directive<TContext, TData> | undefined {
172
+ if (this.entries.length === 0) {
173
+ return undefined;
174
+ }
175
+
176
+ this.logConflicts(this.entries);
177
+
178
+ let merged: Directive<TContext, TData> = this.entries[0].directive;
179
+ for (let i = 1; i < this.entries.length; i++) {
180
+ merged = flow.merge(merged, this.entries[i].directive);
181
+ }
182
+
183
+ this.entries = [];
184
+ return merged;
185
+ }
186
+
187
+ /** Clear all collected entries and reset the bus for a new turn. */
188
+ clear(): void {
189
+ this.entries = [];
190
+ this.orderCounter = 0;
191
+ this.currentPhase = "pre-llm";
192
+ }
193
+
194
+ /** Get the number of entries currently on the bus. */
195
+ get size(): number {
196
+ return this.entries.length;
197
+ }
198
+
199
+ /** Get all entries (for inspection/testing). */
200
+ getEntries(): ReadonlyArray<DirectiveBusEntry<TContext, TData>> {
201
+ return this.entries;
202
+ }
203
+
204
+ /** Check if the bus has any entries for the current phase. */
205
+ hasEntries(): boolean {
206
+ return this.entries.some((e) => e.phase === this.currentPhase);
207
+ }
208
+
209
+ // ─── Private helpers ─────────────────────────────────────────────────────
210
+
211
+ /**
212
+ * Log debug-level conflict warnings when multiple emitters set position
213
+ * fields or reply fields in the same phase.
214
+ */
215
+ private logConflicts(
216
+ entries: DirectiveBusEntry<TContext, TData>[]
217
+ ): void {
218
+ // Check for position field conflicts
219
+ const positionEmitters: Array<{ emitterId: string; field: string }> = [];
220
+ for (const entry of entries) {
221
+ const d = entry.directive as Record<string, unknown>;
222
+ for (const field of ["abort", "complete", "goTo", "goToStep", "reset"]) {
223
+ if (d[field] !== undefined) {
224
+ positionEmitters.push({ emitterId: entry.emitterId, field });
225
+ }
226
+ }
227
+ }
228
+ if (positionEmitters.length > 1) {
229
+ const details = positionEmitters
230
+ .map((e) => `${e.emitterId}(${e.field})`)
231
+ .join(", ");
232
+ logger.debug(
233
+ `[DirectiveBus] Multiple position fields in one turn — conflict resolution applied. Emitters: ${details}`
234
+ );
235
+ }
236
+
237
+ // Check for reply conflicts
238
+ const replyEmitters = entries.filter(
239
+ (e) => (e.directive as Record<string, unknown>).reply !== undefined
240
+ );
241
+ if (replyEmitters.length > 1) {
242
+ const emitterIds = replyEmitters.map((e) => e.emitterId).join(", ");
243
+ logger.debug(
244
+ `[DirectiveBus] Multiple reply fields in one turn — using last emission. Emitters: ${emitterIds}`
245
+ );
246
+ }
247
+ }
248
+ }
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Per-turn directive chain depth tracker.
3
+ *
4
+ * When directives chain (e.g., tool emits goTo → flow.onEnter emits goTo →
5
+ * flow.onComplete emits complete.next → …), the chain can theoretically loop
6
+ * forever. This tracker counts each directive application within a single turn
7
+ * and throws `FlowConfigurationError` when the configured cap is exceeded.
8
+ *
9
+ * Chain breakers (`abort` mid-chain) stop counting and apply the
10
+ * chain-terminating directive immediately.
11
+ *
12
+ * Validates: Requirements 22.1, 22.2, 22.3
13
+ */
14
+
15
+ import { FlowConfigurationError } from "./Step";
16
+ import { logger } from "../utils";
17
+ import type { Directive } from "../types/flow";
18
+
19
+ /**
20
+ * Entry in the directive chain log — records what was emitted and by whom.
21
+ */
22
+ export interface DirectiveChainEntry {
23
+ /** Human-readable description of the directive (e.g., "goTo:Booking", "complete", "abort:timeout") */
24
+ description: string;
25
+ /** Identifier of the emitter (e.g., "tool:lookup_order", "hook:onEnter", "pending") */
26
+ emitter: string;
27
+ }
28
+
29
+ /**
30
+ * Tracks directive chain depth within a single turn.
31
+ * Create one instance per turn; discard at turn end.
32
+ */
33
+ export class DirectiveChainTracker {
34
+ private chain: DirectiveChainEntry[] = [];
35
+ private readonly maxDepth: number;
36
+
37
+ constructor(maxDirectiveChain: number) {
38
+ this.maxDepth = maxDirectiveChain;
39
+ }
40
+
41
+ /**
42
+ * Record a directive application in the chain.
43
+ * Throws `FlowConfigurationError` if the chain exceeds `maxDirectiveChain`.
44
+ *
45
+ * @param directive - The directive being applied
46
+ * @param emitter - Identifier of the emitter (for diagnostics)
47
+ * @returns `true` if the directive is a chain breaker (abort) — caller should
48
+ * apply it and stop the chain without further counting.
49
+ */
50
+ record(directive: Directive, emitter: string): boolean {
51
+ const description = describeDirective(directive);
52
+
53
+ // Check if this is a chain breaker (abort)
54
+ if (directive.abort !== undefined) {
55
+ this.chain.push({ description, emitter });
56
+ logger.debug(
57
+ `[DirectiveChainTracker] Chain breaker (abort) at depth ${this.chain.length}: ${description} from ${emitter}`
58
+ );
59
+ return true; // Chain breaker — apply and stop
60
+ }
61
+
62
+ this.chain.push({ description, emitter });
63
+
64
+ if (this.chain.length > this.maxDepth) {
65
+ const chainDescription = this.chain
66
+ .map((entry, i) => ` ${i + 1}. ${entry.description} (from: ${entry.emitter})`)
67
+ .join("\n");
68
+
69
+ throw new FlowConfigurationError(
70
+ `[FlowConfigurationError] Directive chain cycle detected: ` +
71
+ `chain depth (${this.chain.length}) exceeded maxDirectiveChain (${this.maxDepth}). ` +
72
+ `Review flow hooks and tool handlers for circular redirections.\n` +
73
+ `Chain (in emission order):\n${chainDescription}`
74
+ );
75
+ }
76
+
77
+ logger.debug(
78
+ `[DirectiveChainTracker] Chain depth ${this.chain.length}/${this.maxDepth}: ${description} from ${emitter}`
79
+ );
80
+
81
+ return false; // Not a chain breaker — continue normally
82
+ }
83
+
84
+ /** Current chain depth. */
85
+ get depth(): number {
86
+ return this.chain.length;
87
+ }
88
+
89
+ /** The full chain log (read-only). */
90
+ get entries(): ReadonlyArray<DirectiveChainEntry> {
91
+ return this.chain;
92
+ }
93
+
94
+ /** Reset the tracker (e.g., for testing or if the turn is restarted). */
95
+ reset(): void {
96
+ this.chain = [];
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Produce a human-readable one-line description of a directive for diagnostics.
102
+ */
103
+ function describeDirective(directive: Directive): string {
104
+ if (directive.abort !== undefined) {
105
+ const reason = typeof directive.abort === "string"
106
+ ? directive.abort
107
+ : typeof directive.abort === "object"
108
+ ? directive.abort.reason
109
+ : "";
110
+ return `abort${reason ? `:${reason}` : ""}`;
111
+ }
112
+ if (directive.goTo !== undefined) {
113
+ const target = typeof directive.goTo === "string"
114
+ ? directive.goTo
115
+ : typeof directive.goTo === "object"
116
+ ? directive.goTo.flow ?? "(no flow)"
117
+ : "";
118
+ return `goTo:${target}`;
119
+ }
120
+ if (directive.goToStep !== undefined) {
121
+ const target = typeof directive.goToStep === "string"
122
+ ? directive.goToStep
123
+ : typeof directive.goToStep === "object"
124
+ ? directive.goToStep.step
125
+ : "";
126
+ return `goToStep:${target}`;
127
+ }
128
+ if (directive.complete !== undefined) {
129
+ if (directive.complete === true) return "complete";
130
+ if (typeof directive.complete === "object" && directive.complete.next) {
131
+ return "complete(chained)";
132
+ }
133
+ return "complete";
134
+ }
135
+ if (directive.reset !== undefined) {
136
+ return "reset";
137
+ }
138
+ // State-only or reply-only directive
139
+ const parts: string[] = [];
140
+ if (directive.reply) parts.push("reply");
141
+ if (directive.dataUpdate) parts.push("dataUpdate");
142
+ if (directive.contextUpdate) parts.push("contextUpdate");
143
+ return parts.length > 0 ? parts.join("+") : "(empty)";
144
+ }