@falai/agent 1.2.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/README.md +40 -886
  2. package/dist/adapters/MemoryAdapter.js +2 -2
  3. package/dist/adapters/MemoryAdapter.js.map +1 -1
  4. package/dist/adapters/MongoAdapter.js +2 -2
  5. package/dist/adapters/MongoAdapter.js.map +1 -1
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
  7. package/dist/adapters/OpenSearchAdapter.js +9 -7
  8. package/dist/adapters/OpenSearchAdapter.js.map +1 -1
  9. package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  11. package/dist/adapters/PostgreSQLAdapter.js +25 -9
  12. package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
  13. package/dist/adapters/PrismaAdapter.js +5 -5
  14. package/dist/adapters/PrismaAdapter.js.map +1 -1
  15. package/dist/adapters/RedisAdapter.js +2 -2
  16. package/dist/adapters/RedisAdapter.js.map +1 -1
  17. package/dist/adapters/SQLiteAdapter.d.ts +17 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
  19. package/dist/adapters/SQLiteAdapter.js +30 -11
  20. package/dist/adapters/SQLiteAdapter.js.map +1 -1
  21. package/dist/cjs/adapters/MemoryAdapter.js +2 -2
  22. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
  23. package/dist/cjs/adapters/MongoAdapter.js +2 -2
  24. package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
  25. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
  26. package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
  27. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
  28. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
  29. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  30. package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
  31. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
  32. package/dist/cjs/adapters/PrismaAdapter.js +5 -5
  33. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
  34. package/dist/cjs/adapters/RedisAdapter.js +2 -2
  35. package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
  36. package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
  37. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
  38. package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
  39. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
  40. package/dist/cjs/constants/index.d.ts +0 -9
  41. package/dist/cjs/constants/index.d.ts.map +1 -1
  42. package/dist/cjs/constants/index.js +2 -11
  43. package/dist/cjs/constants/index.js.map +1 -1
  44. package/dist/cjs/core/Agent.d.ts +119 -153
  45. package/dist/cjs/core/Agent.d.ts.map +1 -1
  46. package/dist/cjs/core/Agent.js +471 -324
  47. package/dist/cjs/core/Agent.js.map +1 -1
  48. package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
  49. package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
  50. package/dist/cjs/core/AutoChainExecutor.js +297 -0
  51. package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
  52. package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
  53. package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
  54. package/dist/cjs/core/BranchEvaluator.js +130 -0
  55. package/dist/cjs/core/BranchEvaluator.js.map +1 -0
  56. package/dist/cjs/core/DirectiveBus.d.ts +88 -0
  57. package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
  58. package/dist/cjs/core/DirectiveBus.js +196 -0
  59. package/dist/cjs/core/DirectiveBus.js.map +1 -0
  60. package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
  61. package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
  62. package/dist/cjs/core/DirectiveChainTracker.js +121 -0
  63. package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
  64. package/dist/cjs/core/Flow.d.ts +186 -0
  65. package/dist/cjs/core/Flow.d.ts.map +1 -0
  66. package/dist/cjs/core/Flow.js +550 -0
  67. package/dist/cjs/core/Flow.js.map +1 -0
  68. package/dist/cjs/core/FlowRouter.d.ts +182 -0
  69. package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
  70. package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
  71. package/dist/cjs/core/FlowRouter.js.map +1 -0
  72. package/dist/cjs/core/PersistenceManager.d.ts +2 -2
  73. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
  74. package/dist/cjs/core/PersistenceManager.js +7 -7
  75. package/dist/cjs/core/PersistenceManager.js.map +1 -1
  76. package/dist/cjs/core/PromptComposer.d.ts +21 -8
  77. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  78. package/dist/cjs/core/PromptComposer.js +182 -105
  79. package/dist/cjs/core/PromptComposer.js.map +1 -1
  80. package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
  81. package/dist/cjs/core/PromptSectionCache.js +1 -1
  82. package/dist/cjs/core/ResponseEngine.d.ts +18 -8
  83. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  84. package/dist/cjs/core/ResponseEngine.js +38 -36
  85. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  86. package/dist/cjs/core/ResponseModal.d.ts +73 -56
  87. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  88. package/dist/cjs/core/ResponseModal.js +1196 -1015
  89. package/dist/cjs/core/ResponseModal.js.map +1 -1
  90. package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
  91. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
  92. package/dist/cjs/core/ResponsePipeline.js +524 -134
  93. package/dist/cjs/core/ResponsePipeline.js.map +1 -1
  94. package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
  95. package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
  96. package/dist/cjs/core/SignalEvaluator.js +333 -0
  97. package/dist/cjs/core/SignalEvaluator.js.map +1 -0
  98. package/dist/cjs/core/SignalProcessor.d.ts +152 -0
  99. package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
  100. package/dist/cjs/core/SignalProcessor.js +562 -0
  101. package/dist/cjs/core/SignalProcessor.js.map +1 -0
  102. package/dist/cjs/core/Step.d.ts +43 -32
  103. package/dist/cjs/core/Step.d.ts.map +1 -1
  104. package/dist/cjs/core/Step.js +221 -126
  105. package/dist/cjs/core/Step.js.map +1 -1
  106. package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
  107. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
  108. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
  109. package/dist/cjs/core/ToolManager.d.ts +44 -13
  110. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  111. package/dist/cjs/core/ToolManager.js +174 -91
  112. package/dist/cjs/core/ToolManager.js.map +1 -1
  113. package/dist/cjs/core/createAgent.d.ts +35 -0
  114. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  115. package/dist/cjs/core/createAgent.js +39 -0
  116. package/dist/cjs/core/createAgent.js.map +1 -0
  117. package/dist/cjs/core/flow-namespace.d.ts +49 -0
  118. package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
  119. package/dist/cjs/core/flow-namespace.js +171 -0
  120. package/dist/cjs/core/flow-namespace.js.map +1 -0
  121. package/dist/cjs/index.d.ts +11 -14
  122. package/dist/cjs/index.d.ts.map +1 -1
  123. package/dist/cjs/index.js +18 -22
  124. package/dist/cjs/index.js.map +1 -1
  125. package/dist/cjs/providers/GeminiProvider.d.ts +3 -3
  126. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  127. package/dist/cjs/providers/GeminiProvider.js +16 -14
  128. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  129. package/dist/cjs/types/agent.d.ts +183 -54
  130. package/dist/cjs/types/agent.d.ts.map +1 -1
  131. package/dist/cjs/types/agent.js +0 -6
  132. package/dist/cjs/types/agent.js.map +1 -1
  133. package/dist/cjs/types/ai.d.ts +3 -3
  134. package/dist/cjs/types/ai.d.ts.map +1 -1
  135. package/dist/cjs/types/errors.d.ts +15 -0
  136. package/dist/cjs/types/errors.d.ts.map +1 -0
  137. package/dist/cjs/types/errors.js +22 -0
  138. package/dist/cjs/types/errors.js.map +1 -0
  139. package/dist/cjs/types/flow.d.ts +513 -0
  140. package/dist/cjs/types/flow.d.ts.map +1 -0
  141. package/dist/cjs/types/{route.js → flow.js} +2 -2
  142. package/dist/cjs/types/flow.js.map +1 -0
  143. package/dist/cjs/types/index.d.ts +7 -6
  144. package/dist/cjs/types/index.d.ts.map +1 -1
  145. package/dist/cjs/types/index.js +6 -2
  146. package/dist/cjs/types/index.js.map +1 -1
  147. package/dist/cjs/types/persistence.d.ts +11 -7
  148. package/dist/cjs/types/persistence.d.ts.map +1 -1
  149. package/dist/cjs/types/routing.d.ts +1 -1
  150. package/dist/cjs/types/routing.d.ts.map +1 -1
  151. package/dist/cjs/types/session.d.ts +24 -23
  152. package/dist/cjs/types/session.d.ts.map +1 -1
  153. package/dist/cjs/types/signals.d.ts +248 -0
  154. package/dist/cjs/types/signals.d.ts.map +1 -0
  155. package/dist/cjs/types/signals.js +11 -0
  156. package/dist/cjs/types/signals.js.map +1 -0
  157. package/dist/cjs/types/template.d.ts +2 -8
  158. package/dist/cjs/types/template.d.ts.map +1 -1
  159. package/dist/cjs/types/tool.d.ts +36 -29
  160. package/dist/cjs/types/tool.d.ts.map +1 -1
  161. package/dist/cjs/types/tool.js +1 -1
  162. package/dist/cjs/types/tool.js.map +1 -1
  163. package/dist/cjs/utils/condition.d.ts +7 -1
  164. package/dist/cjs/utils/condition.d.ts.map +1 -1
  165. package/dist/cjs/utils/condition.js.map +1 -1
  166. package/dist/cjs/utils/id.d.ts +13 -5
  167. package/dist/cjs/utils/id.d.ts.map +1 -1
  168. package/dist/cjs/utils/id.js +24 -10
  169. package/dist/cjs/utils/id.js.map +1 -1
  170. package/dist/cjs/utils/index.d.ts +2 -2
  171. package/dist/cjs/utils/index.d.ts.map +1 -1
  172. package/dist/cjs/utils/index.js +7 -3
  173. package/dist/cjs/utils/index.js.map +1 -1
  174. package/dist/cjs/utils/session.d.ts +44 -5
  175. package/dist/cjs/utils/session.d.ts.map +1 -1
  176. package/dist/cjs/utils/session.js +197 -38
  177. package/dist/cjs/utils/session.js.map +1 -1
  178. package/dist/constants/index.d.ts +0 -9
  179. package/dist/constants/index.d.ts.map +1 -1
  180. package/dist/constants/index.js +3 -9
  181. package/dist/constants/index.js.map +1 -1
  182. package/dist/core/Agent.d.ts +119 -153
  183. package/dist/core/Agent.d.ts.map +1 -1
  184. package/dist/core/Agent.js +472 -325
  185. package/dist/core/Agent.js.map +1 -1
  186. package/dist/core/AutoChainExecutor.d.ts +107 -0
  187. package/dist/core/AutoChainExecutor.d.ts.map +1 -0
  188. package/dist/core/AutoChainExecutor.js +293 -0
  189. package/dist/core/AutoChainExecutor.js.map +1 -0
  190. package/dist/core/BranchEvaluator.d.ts +54 -0
  191. package/dist/core/BranchEvaluator.d.ts.map +1 -0
  192. package/dist/core/BranchEvaluator.js +126 -0
  193. package/dist/core/BranchEvaluator.js.map +1 -0
  194. package/dist/core/DirectiveBus.d.ts +88 -0
  195. package/dist/core/DirectiveBus.d.ts.map +1 -0
  196. package/dist/core/DirectiveBus.js +192 -0
  197. package/dist/core/DirectiveBus.js.map +1 -0
  198. package/dist/core/DirectiveChainTracker.d.ts +49 -0
  199. package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
  200. package/dist/core/DirectiveChainTracker.js +117 -0
  201. package/dist/core/DirectiveChainTracker.js.map +1 -0
  202. package/dist/core/Flow.d.ts +186 -0
  203. package/dist/core/Flow.d.ts.map +1 -0
  204. package/dist/core/Flow.js +546 -0
  205. package/dist/core/Flow.js.map +1 -0
  206. package/dist/core/FlowRouter.d.ts +182 -0
  207. package/dist/core/FlowRouter.d.ts.map +1 -0
  208. package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
  209. package/dist/core/FlowRouter.js.map +1 -0
  210. package/dist/core/PersistenceManager.d.ts +2 -2
  211. package/dist/core/PersistenceManager.d.ts.map +1 -1
  212. package/dist/core/PersistenceManager.js +7 -7
  213. package/dist/core/PersistenceManager.js.map +1 -1
  214. package/dist/core/PromptComposer.d.ts +21 -8
  215. package/dist/core/PromptComposer.d.ts.map +1 -1
  216. package/dist/core/PromptComposer.js +183 -106
  217. package/dist/core/PromptComposer.js.map +1 -1
  218. package/dist/core/PromptSectionCache.d.ts +1 -1
  219. package/dist/core/PromptSectionCache.js +1 -1
  220. package/dist/core/ResponseEngine.d.ts +18 -8
  221. package/dist/core/ResponseEngine.d.ts.map +1 -1
  222. package/dist/core/ResponseEngine.js +38 -36
  223. package/dist/core/ResponseEngine.js.map +1 -1
  224. package/dist/core/ResponseModal.d.ts +73 -56
  225. package/dist/core/ResponseModal.d.ts.map +1 -1
  226. package/dist/core/ResponseModal.js +1198 -1017
  227. package/dist/core/ResponseModal.js.map +1 -1
  228. package/dist/core/ResponsePipeline.d.ts +124 -26
  229. package/dist/core/ResponsePipeline.d.ts.map +1 -1
  230. package/dist/core/ResponsePipeline.js +524 -135
  231. package/dist/core/ResponsePipeline.js.map +1 -1
  232. package/dist/core/SignalEvaluator.d.ts +86 -0
  233. package/dist/core/SignalEvaluator.d.ts.map +1 -0
  234. package/dist/core/SignalEvaluator.js +326 -0
  235. package/dist/core/SignalEvaluator.js.map +1 -0
  236. package/dist/core/SignalProcessor.d.ts +152 -0
  237. package/dist/core/SignalProcessor.d.ts.map +1 -0
  238. package/dist/core/SignalProcessor.js +555 -0
  239. package/dist/core/SignalProcessor.js.map +1 -0
  240. package/dist/core/Step.d.ts +43 -32
  241. package/dist/core/Step.d.ts.map +1 -1
  242. package/dist/core/Step.js +220 -126
  243. package/dist/core/Step.js.map +1 -1
  244. package/dist/core/StreamingToolExecutor.d.ts +2 -2
  245. package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
  246. package/dist/core/StreamingToolExecutor.js.map +1 -1
  247. package/dist/core/ToolManager.d.ts +44 -13
  248. package/dist/core/ToolManager.d.ts.map +1 -1
  249. package/dist/core/ToolManager.js +174 -91
  250. package/dist/core/ToolManager.js.map +1 -1
  251. package/dist/core/createAgent.d.ts +35 -0
  252. package/dist/core/createAgent.d.ts.map +1 -0
  253. package/dist/core/createAgent.js +36 -0
  254. package/dist/core/createAgent.js.map +1 -0
  255. package/dist/core/flow-namespace.d.ts +49 -0
  256. package/dist/core/flow-namespace.d.ts.map +1 -0
  257. package/dist/core/flow-namespace.js +168 -0
  258. package/dist/core/flow-namespace.js.map +1 -0
  259. package/dist/index.d.ts +11 -14
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +9 -12
  262. package/dist/index.js.map +1 -1
  263. package/dist/providers/GeminiProvider.d.ts +3 -3
  264. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  265. package/dist/providers/GeminiProvider.js +16 -14
  266. package/dist/providers/GeminiProvider.js.map +1 -1
  267. package/dist/types/agent.d.ts +183 -54
  268. package/dist/types/agent.d.ts.map +1 -1
  269. package/dist/types/agent.js +0 -6
  270. package/dist/types/agent.js.map +1 -1
  271. package/dist/types/ai.d.ts +3 -3
  272. package/dist/types/ai.d.ts.map +1 -1
  273. package/dist/types/errors.d.ts +15 -0
  274. package/dist/types/errors.d.ts.map +1 -0
  275. package/dist/types/errors.js +18 -0
  276. package/dist/types/errors.js.map +1 -0
  277. package/dist/types/flow.d.ts +513 -0
  278. package/dist/types/flow.d.ts.map +1 -0
  279. package/dist/types/flow.js +5 -0
  280. package/dist/types/flow.js.map +1 -0
  281. package/dist/types/index.d.ts +7 -6
  282. package/dist/types/index.d.ts.map +1 -1
  283. package/dist/types/index.js +4 -1
  284. package/dist/types/index.js.map +1 -1
  285. package/dist/types/persistence.d.ts +11 -7
  286. package/dist/types/persistence.d.ts.map +1 -1
  287. package/dist/types/routing.d.ts +1 -1
  288. package/dist/types/routing.d.ts.map +1 -1
  289. package/dist/types/session.d.ts +24 -23
  290. package/dist/types/session.d.ts.map +1 -1
  291. package/dist/types/signals.d.ts +248 -0
  292. package/dist/types/signals.d.ts.map +1 -0
  293. package/dist/types/signals.js +10 -0
  294. package/dist/types/signals.js.map +1 -0
  295. package/dist/types/template.d.ts +2 -8
  296. package/dist/types/template.d.ts.map +1 -1
  297. package/dist/types/tool.d.ts +36 -29
  298. package/dist/types/tool.d.ts.map +1 -1
  299. package/dist/types/tool.js +1 -1
  300. package/dist/types/tool.js.map +1 -1
  301. package/dist/utils/condition.d.ts +7 -1
  302. package/dist/utils/condition.d.ts.map +1 -1
  303. package/dist/utils/condition.js.map +1 -1
  304. package/dist/utils/id.d.ts +13 -5
  305. package/dist/utils/id.d.ts.map +1 -1
  306. package/dist/utils/id.js +22 -9
  307. package/dist/utils/id.js.map +1 -1
  308. package/dist/utils/index.d.ts +2 -2
  309. package/dist/utils/index.d.ts.map +1 -1
  310. package/dist/utils/index.js +2 -2
  311. package/dist/utils/index.js.map +1 -1
  312. package/dist/utils/session.d.ts +44 -5
  313. package/dist/utils/session.d.ts.map +1 -1
  314. package/dist/utils/session.js +193 -37
  315. package/dist/utils/session.js.map +1 -1
  316. package/docs/README.md +15 -202
  317. package/docs/concepts/architecture.md +281 -0
  318. package/docs/concepts/directives.md +400 -0
  319. package/docs/concepts/pipeline.md +399 -0
  320. package/docs/guides/branching.md +263 -0
  321. package/docs/guides/compaction.md +163 -0
  322. package/docs/guides/conditions.md +167 -0
  323. package/docs/guides/error-handling.md +176 -0
  324. package/docs/guides/flow-control.md +409 -0
  325. package/docs/guides/instructions.md +210 -0
  326. package/docs/guides/persistence.md +182 -0
  327. package/docs/guides/streaming.md +137 -0
  328. package/docs/migration/README.md +15 -0
  329. package/docs/migration/route-to-flow.md +560 -0
  330. package/docs/migration/v1-to-v2.md +909 -0
  331. package/docs/reference/adapters.md +481 -0
  332. package/docs/reference/branches.md +241 -0
  333. package/docs/reference/create-agent.md +186 -0
  334. package/docs/reference/directive.md +243 -0
  335. package/docs/reference/errors.md +122 -0
  336. package/docs/reference/flow.md +238 -0
  337. package/docs/reference/instruction.md +177 -0
  338. package/docs/reference/pre-directive.md +131 -0
  339. package/docs/reference/providers.md +227 -0
  340. package/docs/reference/signals.md +356 -0
  341. package/docs/reference/step.md +339 -0
  342. package/docs/reference/tool.md +269 -0
  343. package/docs/start/01-install.md +81 -0
  344. package/docs/start/02-first-agent.md +196 -0
  345. package/docs/start/03-collect-data.md +222 -0
  346. package/docs/start/04-add-tools.md +276 -0
  347. package/docs/start/05-go-to-production.md +216 -0
  348. package/examples/01-quickstart.ts +20 -0
  349. package/examples/02-data-extraction.ts +90 -0
  350. package/examples/03-tools.ts +136 -0
  351. package/examples/04-instructions.ts +100 -0
  352. package/examples/05-branching.ts +140 -0
  353. package/examples/06-flow-control.ts +103 -0
  354. package/examples/07-streaming.ts +69 -0
  355. package/examples/08-persistence.ts +98 -0
  356. package/examples/09-signals.ts +144 -0
  357. package/examples/tsconfig.json +30 -0
  358. package/package.json +2 -1
  359. package/src/adapters/MemoryAdapter.ts +3 -3
  360. package/src/adapters/MongoAdapter.ts +3 -3
  361. package/src/adapters/OpenSearchAdapter.ts +10 -8
  362. package/src/adapters/PostgreSQLAdapter.ts +26 -10
  363. package/src/adapters/PrismaAdapter.ts +6 -6
  364. package/src/adapters/RedisAdapter.ts +3 -3
  365. package/src/adapters/SQLiteAdapter.ts +31 -12
  366. package/src/constants/index.ts +2 -10
  367. package/src/core/Agent.ts +585 -374
  368. package/src/core/AutoChainExecutor.ts +440 -0
  369. package/src/core/BranchEvaluator.ts +167 -0
  370. package/src/core/DirectiveBus.ts +248 -0
  371. package/src/core/DirectiveChainTracker.ts +144 -0
  372. package/src/core/Flow.ts +666 -0
  373. package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
  374. package/src/core/PersistenceManager.ts +8 -8
  375. package/src/core/PromptComposer.ts +209 -140
  376. package/src/core/PromptSectionCache.ts +1 -1
  377. package/src/core/ResponseEngine.ts +61 -46
  378. package/src/core/ResponseModal.ts +1458 -1241
  379. package/src/core/ResponsePipeline.ts +675 -173
  380. package/src/core/SignalEvaluator.ts +420 -0
  381. package/src/core/SignalProcessor.ts +723 -0
  382. package/src/core/Step.ts +279 -176
  383. package/src/core/StreamingToolExecutor.ts +4 -4
  384. package/src/core/ToolManager.ts +200 -97
  385. package/src/core/createAgent.ts +40 -0
  386. package/src/core/flow-namespace.ts +219 -0
  387. package/src/index.ts +42 -36
  388. package/src/providers/GeminiProvider.ts +17 -15
  389. package/src/types/agent.ts +182 -53
  390. package/src/types/ai.ts +3 -3
  391. package/src/types/errors.ts +18 -0
  392. package/src/types/flow.ts +590 -0
  393. package/src/types/index.ts +43 -16
  394. package/src/types/persistence.ts +12 -8
  395. package/src/types/routing.ts +1 -1
  396. package/src/types/session.ts +26 -23
  397. package/src/types/signals.ts +321 -0
  398. package/src/types/template.ts +3 -11
  399. package/src/types/tool.ts +50 -42
  400. package/src/utils/condition.ts +13 -4
  401. package/src/utils/id.ts +27 -9
  402. package/src/utils/index.ts +6 -2
  403. package/src/utils/session.ts +238 -42
  404. package/dist/cjs/core/BatchExecutor.d.ts +0 -359
  405. package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
  406. package/dist/cjs/core/BatchExecutor.js +0 -861
  407. package/dist/cjs/core/BatchExecutor.js.map +0 -1
  408. package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
  409. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
  410. package/dist/cjs/core/BatchPromptBuilder.js +0 -223
  411. package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
  412. package/dist/cjs/core/Route.d.ts +0 -180
  413. package/dist/cjs/core/Route.d.ts.map +0 -1
  414. package/dist/cjs/core/Route.js +0 -542
  415. package/dist/cjs/core/Route.js.map +0 -1
  416. package/dist/cjs/core/RoutingEngine.d.ts +0 -185
  417. package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
  418. package/dist/cjs/core/RoutingEngine.js.map +0 -1
  419. package/dist/cjs/types/route.d.ts +0 -336
  420. package/dist/cjs/types/route.d.ts.map +0 -1
  421. package/dist/cjs/types/route.js.map +0 -1
  422. package/dist/core/BatchExecutor.d.ts +0 -359
  423. package/dist/core/BatchExecutor.d.ts.map +0 -1
  424. package/dist/core/BatchExecutor.js +0 -856
  425. package/dist/core/BatchExecutor.js.map +0 -1
  426. package/dist/core/BatchPromptBuilder.d.ts +0 -89
  427. package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
  428. package/dist/core/BatchPromptBuilder.js +0 -219
  429. package/dist/core/BatchPromptBuilder.js.map +0 -1
  430. package/dist/core/Route.d.ts +0 -180
  431. package/dist/core/Route.d.ts.map +0 -1
  432. package/dist/core/Route.js +0 -538
  433. package/dist/core/Route.js.map +0 -1
  434. package/dist/core/RoutingEngine.d.ts +0 -185
  435. package/dist/core/RoutingEngine.d.ts.map +0 -1
  436. package/dist/core/RoutingEngine.js.map +0 -1
  437. package/dist/types/route.d.ts +0 -336
  438. package/dist/types/route.d.ts.map +0 -1
  439. package/dist/types/route.js +0 -5
  440. package/dist/types/route.js.map +0 -1
  441. package/docs/CONTRIBUTING.md +0 -521
  442. package/docs/api/README.md +0 -3299
  443. package/docs/api/overview.md +0 -1410
  444. package/docs/architecture/data-extraction-flow.md +0 -360
  445. package/docs/architecture/multi-step-execution.md +0 -277
  446. package/docs/core/agent/README.md +0 -938
  447. package/docs/core/agent/context-management.md +0 -796
  448. package/docs/core/agent/rules-and-prohibitions.md +0 -113
  449. package/docs/core/agent/session-management.md +0 -693
  450. package/docs/core/ai-integration/prompt-composition.md +0 -355
  451. package/docs/core/ai-integration/providers.md +0 -515
  452. package/docs/core/ai-integration/response-processing.md +0 -433
  453. package/docs/core/conversation-flows/data-collection.md +0 -772
  454. package/docs/core/conversation-flows/route-dsl.md +0 -509
  455. package/docs/core/conversation-flows/routes.md +0 -249
  456. package/docs/core/conversation-flows/step-transitions.md +0 -731
  457. package/docs/core/conversation-flows/steps.md +0 -268
  458. package/docs/core/error-handling.md +0 -830
  459. package/docs/core/persistence/adapters.md +0 -255
  460. package/docs/core/persistence/session-storage.md +0 -656
  461. package/docs/core/routing/intelligent-routing.md +0 -470
  462. package/docs/core/tools/enhanced-tool.md +0 -186
  463. package/docs/core/tools/streaming-execution.md +0 -161
  464. package/docs/core/tools/tool-definition.md +0 -970
  465. package/docs/core/tools/tool-scoping.md +0 -819
  466. package/docs/guides/advanced-patterns/publishing.md +0 -186
  467. package/docs/guides/context-compaction.md +0 -96
  468. package/docs/guides/error-handling-patterns.md +0 -578
  469. package/docs/guides/getting-started/README.md +0 -795
  470. package/docs/guides/migration/README.md +0 -101
  471. package/docs/guides/migration/flexible-routing-conditions.md +0 -375
  472. package/docs/guides/migration/multi-step-execution.md +0 -393
  473. package/docs/guides/migration/response-modal-refactor.md +0 -518
  474. package/docs/guides/prompt-optimization.md +0 -164
  475. package/examples/advanced-patterns/context-compaction.ts +0 -223
  476. package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
  477. package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
  478. package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
  479. package/examples/advanced-patterns/streaming-responses.ts +0 -656
  480. package/examples/ai-providers/anthropic-integration.ts +0 -388
  481. package/examples/ai-providers/openai-integration.ts +0 -228
  482. package/examples/condition-patterns/function-only-conditions.ts +0 -365
  483. package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
  484. package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
  485. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  486. package/examples/condition-patterns/string-only-conditions.ts +0 -296
  487. package/examples/conversation-flows/completion-transitions.ts +0 -318
  488. package/examples/core-concepts/basic-agent.ts +0 -503
  489. package/examples/core-concepts/modern-streaming-api.ts +0 -309
  490. package/examples/core-concepts/schema-driven-extraction.ts +0 -332
  491. package/examples/core-concepts/session-management.ts +0 -494
  492. package/examples/integrations/database-integration.ts +0 -631
  493. package/examples/integrations/healthcare-integration.ts +0 -595
  494. package/examples/integrations/search-integration.ts +0 -530
  495. package/examples/integrations/server-session-management.ts +0 -307
  496. package/examples/persistence/custom-adapter.ts +0 -526
  497. package/examples/persistence/database-persistence.ts +0 -583
  498. package/examples/persistence/memory-sessions.ts +0 -495
  499. package/examples/persistence/prisma-schema.example.prisma +0 -74
  500. package/examples/persistence/redis-persistence.ts +0 -488
  501. package/examples/tools/basic-tools.ts +0 -765
  502. package/examples/tools/data-enrichment-tools.ts +0 -593
  503. package/examples/tools/enhanced-tool-metadata.ts +0 -268
  504. package/examples/tools/streaming-tool-execution.ts +0 -283
  505. package/src/core/BatchExecutor.ts +0 -1187
  506. package/src/core/BatchPromptBuilder.ts +0 -299
  507. package/src/core/Route.ts +0 -678
  508. package/src/types/route.ts +0 -392
@@ -0,0 +1,420 @@
1
+ /**
2
+ * SignalEvaluator — Batched AI classifier + extraction for signals.
3
+ *
4
+ * Handles:
5
+ * - `evaluateIf`: code-first predicate evaluation (AND semantics, short-circuit)
6
+ * - `evaluateSignals`: single batched provider call for detection + extraction
7
+ * - `buildSignalClassifierPrompt` / `buildMergedSchema`: prompt & schema construction
8
+ *
9
+ * @module SignalEvaluator
10
+ */
11
+
12
+ import type { AiProvider } from "../types/ai";
13
+ import type { Event } from "../types/history";
14
+ import type { SessionState } from "../types/session";
15
+ import type {
16
+ Signal,
17
+ SignalPredicate,
18
+ SignalPredicateContext,
19
+ } from "../types/signals";
20
+ import { eventsToHistory, logger } from "../utils";
21
+
22
+ // ──────────────────────────────────────────────────────────────────────────────
23
+ // Types
24
+ // ──────────────────────────────────────────────────────────────────────────────
25
+
26
+ export interface SignalEvaluationResult {
27
+ matched: boolean;
28
+ reason?: string;
29
+ extracted?: unknown;
30
+ }
31
+
32
+ export interface EvaluateSignalsParams<TContext = unknown, TData = unknown> {
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ signals: Signal<TContext, TData, any>[];
35
+ session: SessionState<TData>;
36
+ history: Event[];
37
+ context: TContext;
38
+ }
39
+
40
+ // ──────────────────────────────────────────────────────────────────────────────
41
+ // Prompt builder (exported for testing)
42
+ // ──────────────────────────────────────────────────────────────────────────────
43
+
44
+ /**
45
+ * Builds the classifier prompt for a batch of signals.
46
+ *
47
+ * Splits `when` entries by `!` prefix at render time:
48
+ * - Non-`!` → "TRIGGER WHEN (ALL must match)"
49
+ * - `!` entries → prefix stripped, "DO NOT TRIGGER WHEN (ANY inhibits)"
50
+ *
51
+ * Extraction schemas render under "WHEN MATCHED, EXTRACT".
52
+ * Unconditional + extract signals render under "ALWAYS EXTRACT".
53
+ */
54
+ export function buildSignalClassifierPrompt<TContext = unknown, TData = unknown>(
55
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
+ signals: Signal<TContext, TData, any>[],
57
+ history: Event[],
58
+ _context: TContext,
59
+ ): string {
60
+ const header = [
61
+ "You are evaluating signals for this conversation.",
62
+ "",
63
+ "For each signal, decide whether it matched based on the most recent user message AND the conversation context. Be conservative: only mark a signal matched when there is CLEAR, EXPLICIT evidence.",
64
+ ].join("\n");
65
+
66
+ const signalBlocks: string[] = [];
67
+
68
+ for (const signal of signals) {
69
+ const id = signal.id ?? "unknown";
70
+ const title = signal.title ?? id;
71
+ const lines: string[] = [];
72
+
73
+ // Header
74
+ lines.push(`- SIGNAL "${id}" | "${title}"`);
75
+
76
+ // Description
77
+ if (signal.description) {
78
+ lines.push(` DESCRIPTION: ${signal.description}`);
79
+ }
80
+
81
+ // Split when entries
82
+ const whenEntries = normalizeWhen(signal.when);
83
+ const positiveEntries = whenEntries.filter(w => !w.startsWith("!"));
84
+ const negativeEntries = whenEntries.filter(w => w.startsWith("!")).map(w => w.slice(1));
85
+
86
+ const isUnconditional = whenEntries.length === 0;
87
+
88
+ if (isUnconditional && signal.extract) {
89
+ // Unconditional + extract → ALWAYS EXTRACT
90
+ lines.push(` ALWAYS EXTRACT`);
91
+ } else if (positiveEntries.length > 0) {
92
+ lines.push(` TRIGGER WHEN (ALL must match):`);
93
+ for (const entry of positiveEntries) {
94
+ lines.push(` • ${entry}`);
95
+ }
96
+ }
97
+
98
+ if (negativeEntries.length > 0) {
99
+ lines.push(` DO NOT TRIGGER WHEN (ANY inhibits):`);
100
+ for (const entry of negativeEntries) {
101
+ lines.push(` • ${entry}`);
102
+ }
103
+ }
104
+
105
+ // Extraction schema
106
+ if (signal.extract) {
107
+ lines.push(` WHEN MATCHED, EXTRACT:`);
108
+ const schemaLines = renderExtractionSchema(signal.extract);
109
+ for (const line of schemaLines) {
110
+ lines.push(` • ${line}`);
111
+ }
112
+ }
113
+
114
+ signalBlocks.push(lines.join("\n"));
115
+ }
116
+
117
+ // Render conversation history
118
+ const historySection = renderHistoryForClassifier(history);
119
+
120
+ const outputInstructions = [
121
+ "# OUTPUT",
122
+ "For each signal, return:",
123
+ " { id, matched, reason (required when matched=true) }",
124
+ " + extracted fields (when signal defines extraction and matched=true)",
125
+ ].join("\n");
126
+
127
+ return [
128
+ header,
129
+ "",
130
+ "# SIGNALS",
131
+ "",
132
+ signalBlocks.join("\n\n"),
133
+ "",
134
+ historySection,
135
+ "",
136
+ outputInstructions,
137
+ ].join("\n");
138
+ }
139
+
140
+ // ──────────────────────────────────────────────────────────────────────────────
141
+ // Schema builder (exported for testing)
142
+ // ──────────────────────────────────────────────────────────────────────────────
143
+
144
+ /**
145
+ * Builds the merged JSON schema for the classifier response.
146
+ *
147
+ * Shape: `{ signals: [{ id, matched, reason?, extracted? }, ...] }`
148
+ * where `extracted` is only present for signals with `extract` set.
149
+ */
150
+ export function buildMergedSchema<TContext = unknown, TData = unknown>(
151
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
+ signals: Signal<TContext, TData, any>[],
153
+ ): Record<string, unknown> {
154
+ const signalEntrySchemas = signals.map(signal => {
155
+ const entry: Record<string, unknown> = {
156
+ type: "object",
157
+ properties: {
158
+ id: { type: "string", description: "Signal identifier" },
159
+ matched: { type: "boolean", description: "Whether the signal matched" },
160
+ reason: { type: "string", description: "Reason for the match (required when matched=true)" },
161
+ },
162
+ required: ["id", "matched"],
163
+ additionalProperties: false,
164
+ };
165
+
166
+ // Add extracted field only when signal has extract schema
167
+ if (signal.extract) {
168
+ (entry.properties as Record<string, unknown>).extracted = signal.extract;
169
+ entry.additionalProperties = false;
170
+ }
171
+
172
+ return entry;
173
+ });
174
+
175
+ return {
176
+ type: "object",
177
+ properties: {
178
+ signals: {
179
+ type: "array",
180
+ items: {
181
+ anyOf: signalEntrySchemas,
182
+ },
183
+ description: "Evaluation results for each signal",
184
+ },
185
+ },
186
+ required: ["signals"],
187
+ additionalProperties: false,
188
+ };
189
+ }
190
+
191
+ // ──────────────────────────────────────────────────────────────────────────────
192
+ // SignalEvaluator class
193
+ // ──────────────────────────────────────────────────────────────────────────────
194
+
195
+ export class SignalEvaluator<TContext = unknown, TData = unknown> {
196
+ constructor(private readonly provider: AiProvider) { }
197
+
198
+ /**
199
+ * Code-first predicate evaluation with AND semantics and short-circuit.
200
+ *
201
+ * Normalizes predicates to an array. Awaits each; returns false on first
202
+ * falsy result. Catches throws/rejections, logs at ERROR with predicate
203
+ * index, and returns false (signal treated as non-match).
204
+ */
205
+ async evaluateIf(
206
+ predicates: SignalPredicate<TContext, TData> | SignalPredicate<TContext, TData>[],
207
+ ctx: SignalPredicateContext<TContext, TData>,
208
+ ): Promise<boolean> {
209
+ const predicateArray = Array.isArray(predicates) ? predicates : [predicates];
210
+
211
+ for (let i = 0; i < predicateArray.length; i++) {
212
+ try {
213
+ const result = await predicateArray[i](ctx);
214
+ if (!result) {
215
+ return false;
216
+ }
217
+ } catch (error) {
218
+ logger.error(
219
+ `[Signals] Predicate at index ${i} threw: ${error instanceof Error ? error.message : String(error)}`,
220
+ );
221
+ return false;
222
+ }
223
+ }
224
+
225
+ return true;
226
+ }
227
+
228
+ /**
229
+ * Batched AI classifier + extraction call (Algorithm 3).
230
+ *
231
+ * Builds the classifier prompt and merged schema, makes a single provider
232
+ * call, and parses the response into an id → result map. Any signal absent
233
+ * from the response defaults to `{ matched: false }`. Provider errors are
234
+ * caught and logged; all signals default to non-match.
235
+ */
236
+ async evaluateSignals(
237
+ params: EvaluateSignalsParams<TContext, TData>,
238
+ ): Promise<Record<string, SignalEvaluationResult>> {
239
+ const { signals, history, context } = params;
240
+
241
+ // Build prompt and schema
242
+ const prompt = buildSignalClassifierPrompt(signals, history, context);
243
+ const jsonSchema = buildMergedSchema(signals);
244
+
245
+ try {
246
+ const response = await this.provider.generateMessage<TContext, { signals: Array<{ id: string; matched: boolean; reason?: string; extracted?: unknown }> }>({
247
+ prompt,
248
+ history: eventsToHistory(history),
249
+ context,
250
+ parameters: {
251
+ jsonSchema,
252
+ schemaName: "signal_evaluation",
253
+ },
254
+ });
255
+
256
+ // Parse response into id → result map
257
+ const results: Record<string, SignalEvaluationResult> = {};
258
+ const entries = response.structured?.signals ?? [];
259
+
260
+ for (const entry of entries) {
261
+ results[entry.id] = {
262
+ matched: entry.matched,
263
+ reason: entry.matched ? entry.reason : undefined,
264
+ extracted: entry.matched ? entry.extracted : undefined,
265
+ };
266
+ }
267
+
268
+ // Defensive defaults: any signal absent from the response → matched: false
269
+ for (const signal of signals) {
270
+ const id = signal.id ?? "unknown";
271
+ if (!results[id]) {
272
+ results[id] = { matched: false };
273
+ }
274
+ }
275
+
276
+ return results;
277
+ } catch (error) {
278
+ logger.error(
279
+ `[Signals] Classifier call failed: ${error instanceof Error ? error.message : String(error)}`,
280
+ );
281
+
282
+ // On provider error, all signals default to non-match
283
+ const results: Record<string, SignalEvaluationResult> = {};
284
+ for (const signal of signals) {
285
+ const id = signal.id ?? "unknown";
286
+ results[id] = { matched: false };
287
+ }
288
+ return results;
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Parallel batched evaluation. Splits signals into batches of `batchSize`,
294
+ * evaluates each batch via `evaluateSignals` in parallel using `Promise.all`,
295
+ * and merges all result maps into a single record.
296
+ *
297
+ * No key collisions because signal ids are unique within a phase.
298
+ */
299
+ async evaluateSignalsBatched(params: {
300
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
301
+ signals: Signal<TContext, TData, any>[];
302
+ batchSize?: number;
303
+ session: SessionState<TData>;
304
+ history: Event[];
305
+ context: TContext;
306
+ }): Promise<Record<string, SignalEvaluationResult>> {
307
+ const { signals, batchSize = 10, session, history, context } = params;
308
+
309
+ if (signals.length === 0) return {};
310
+
311
+ const batches = splitIntoBatches(signals, batchSize);
312
+
313
+ const batchResults = await Promise.all(
314
+ batches.map(batch =>
315
+ this.evaluateSignals({ signals: batch, session, history, context }),
316
+ ),
317
+ );
318
+
319
+ // Merge all batch result maps into a single record
320
+ const merged: Record<string, SignalEvaluationResult> = {};
321
+ for (const result of batchResults) {
322
+ Object.assign(merged, result);
323
+ }
324
+ return merged;
325
+ }
326
+ }
327
+
328
+ // ──────────────────────────────────────────────────────────────────────────────
329
+ // Batch helper (exported for testing)
330
+ // ──────────────────────────────────────────────────────────────────────────────
331
+
332
+ /**
333
+ * Splits an array into fixed-size chunks.
334
+ *
335
+ * Returns an array of sub-arrays, each of at most `batchSize` elements.
336
+ * The last chunk may be shorter. Returns an empty array when `items` is empty.
337
+ */
338
+ export function splitIntoBatches<T>(items: T[], batchSize: number): T[][] {
339
+ if (items.length === 0) return [];
340
+
341
+ const batches: T[][] = [];
342
+ for (let i = 0; i < items.length; i += batchSize) {
343
+ batches.push(items.slice(i, i + batchSize));
344
+ }
345
+ return batches;
346
+ }
347
+
348
+ // ──────────────────────────────────────────────────────────────────────────────
349
+ // Internal helpers
350
+ // ──────────────────────────────────────────────────────────────────────────────
351
+
352
+ /** Normalize `when` to a string array. */
353
+ function normalizeWhen(when: string | string[] | undefined): string[] {
354
+ if (!when) return [];
355
+ return Array.isArray(when) ? when : [when];
356
+ }
357
+
358
+ /**
359
+ * Render extraction schema properties as human-readable lines for the prompt.
360
+ * Lists each property's name, type, and constraints (enum, min/max, format).
361
+ */
362
+ function renderExtractionSchema(schema: Record<string, unknown>): string[] {
363
+ const lines: string[] = [];
364
+ const properties = schema.properties as Record<string, Record<string, unknown>> | undefined;
365
+
366
+ if (!properties) return lines;
367
+
368
+ for (const [name, fieldSchema] of Object.entries(properties)) {
369
+ if (!fieldSchema || typeof fieldSchema !== "object") continue;
370
+
371
+ const type = (fieldSchema.type as string) ?? "unknown";
372
+ let line = `${name} (${type})`;
373
+
374
+ // Add constraints
375
+ const constraints: string[] = [];
376
+
377
+ if (fieldSchema.enum && Array.isArray(fieldSchema.enum)) {
378
+ constraints.push((fieldSchema.enum as string[]).join("|"));
379
+ }
380
+ if (fieldSchema.minimum !== undefined || fieldSchema.maximum !== undefined) {
381
+ const min = fieldSchema.minimum !== undefined ? `${fieldSchema.minimum as number}` : "";
382
+ const max = fieldSchema.maximum !== undefined ? `${fieldSchema.maximum as number}` : "";
383
+ constraints.push(`${min}-${max}`);
384
+ }
385
+ if (fieldSchema.format) {
386
+ constraints.push(fieldSchema.format as string);
387
+ }
388
+
389
+ if (constraints.length > 0) {
390
+ line += `, ${constraints.join(", ")}`;
391
+ }
392
+
393
+ // Add description
394
+ if (fieldSchema.description) {
395
+ line += `: ${fieldSchema.description as string}`;
396
+ }
397
+
398
+ lines.push(line);
399
+ }
400
+
401
+ return lines;
402
+ }
403
+
404
+ /**
405
+ * Render conversation history into a simple text block for the classifier prompt.
406
+ */
407
+ function renderHistoryForClassifier(history: Event[]): string {
408
+ if (history.length === 0) return "# CONVERSATION HISTORY\n(empty)";
409
+
410
+ const lines: string[] = ["# CONVERSATION HISTORY"];
411
+ for (const event of history) {
412
+ const source = event.source ?? "unknown";
413
+ const data = event.data as { message?: string } | undefined;
414
+ const message = data?.message ?? "";
415
+ if (message) {
416
+ lines.push(`${source}: ${message}`);
417
+ }
418
+ }
419
+ return lines.join("\n");
420
+ }