@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,40 @@
1
+ /**
2
+ * Level-1 factory for constructing an Agent from a single options object.
3
+ *
4
+ * `createAgent` is syntactic sugar over `new Agent(options)` and is the
5
+ * recommended entry point in docs and examples. Generic inference flows
6
+ * from `schema` through `flows[].steps[].collect` identically to `new Agent`.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const agent = createAgent({
11
+ * name: 'BookingBot',
12
+ * provider: new GeminiProvider({ apiKey }),
13
+ * schema: { type: 'object', properties: { name: { type: 'string' }, email: { type: 'string' } } },
14
+ * flows: [{ title: 'Onboarding', steps: [{ collect: ['name', 'email'] }] }],
15
+ * });
16
+ * ```
17
+ *
18
+ * **Validates: Requirements 14.1–14.7**
19
+ */
20
+
21
+ import { Agent } from "./Agent";
22
+ import type { AgentOptions } from "../types";
23
+
24
+ /**
25
+ * Create an Agent from a single options object.
26
+ *
27
+ * This is the recommended entry point for constructing agents in v2.
28
+ * Accepts the same options as `new Agent(options)` — `schema`, `provider`,
29
+ * `instructions`, `flows`, and everything else `AgentOptions` carries.
30
+ *
31
+ * Generic inference flows from `schema` through `flows[].steps[].collect`.
32
+ * Invalid `collect` references throw `FlowConfigurationError` at construction time.
33
+ *
34
+ * Post-construction flow registration is still available via `agent.createFlow(...)`.
35
+ */
36
+ export function createAgent<TContext = unknown, TData = unknown>(
37
+ options: AgentOptions<TContext, TData>
38
+ ): Agent<TContext, TData> {
39
+ return new Agent<TContext, TData>(options);
40
+ }
@@ -0,0 +1,219 @@
1
+ /**
2
+ * `flow` namespace — type guards, merge, and validation helpers for Directives.
3
+ *
4
+ * No builder constructors live here (no `flow.goTo(...)`, `flow.complete(...)` etc.).
5
+ * Directives are plain object literals; this namespace provides runtime utilities only.
6
+ */
7
+
8
+ import type { Directive } from "../types/flow";
9
+ import { FlowConfigurationError } from "./Step";
10
+
11
+ // ─── Position field metadata ─────────────────────────────────────────────────
12
+
13
+ /** Position fields in precedence order (highest first). */
14
+ const POSITION_FIELDS = ["abort", "complete", "goTo", "goToStep", "reset"] as const;
15
+ type PositionField = (typeof POSITION_FIELDS)[number];
16
+
17
+ /** Precedence map: lower number = higher priority. */
18
+ const POSITION_PRECEDENCE: Record<PositionField, number> = {
19
+ abort: 0,
20
+ complete: 1,
21
+ goTo: 2,
22
+ goToStep: 2,
23
+ reset: 3,
24
+ };
25
+
26
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
27
+
28
+ function getSetPositionFields(d: Directive): PositionField[] {
29
+ return POSITION_FIELDS.filter((f) => d[f] !== undefined && d[f] !== null);
30
+ }
31
+
32
+ /**
33
+ * Determines whether `candidate` beats `current` by precedence.
34
+ * Lower precedence number wins. On tie, candidate wins (last-emission-wins).
35
+ */
36
+ function beatsCurrent(
37
+ candidate: PositionField,
38
+ current: PositionField | null
39
+ ): boolean {
40
+ if (current === null) return true;
41
+ return POSITION_PRECEDENCE[candidate] <= POSITION_PRECEDENCE[current];
42
+ }
43
+
44
+ // ─── Public API ──────────────────────────────────────────────────────────────
45
+
46
+ /**
47
+ * Type guard: is `x` a Directive (or any subtype like PreDirective)?
48
+ *
49
+ * A value is considered a Directive if it is a non-null object. The Directive
50
+ * interface has all-optional fields, so any plain object qualifies structurally.
51
+ * This guard filters out primitives, null, undefined, arrays, and functions.
52
+ */
53
+ function isDirective(x: unknown): x is Directive {
54
+ return (
55
+ x !== null &&
56
+ x !== undefined &&
57
+ typeof x === "object" &&
58
+ !Array.isArray(x)
59
+ );
60
+ }
61
+
62
+ /**
63
+ * Merge two directives by Algorithm 4's rules:
64
+ * - Position fields: precedence (abort > complete > goTo/goToStep > reset);
65
+ * ties broken by emission order (b wins over a — last wins).
66
+ * - reply: last-wins (b.reply overrides a.reply if set).
67
+ * - dataUpdate / contextUpdate: shallow-merge (b overrides a on key collision).
68
+ * - appendPrompt / injectTools (PreDirective fields): concatenate then dedupe.
69
+ * - halt: logical-OR.
70
+ */
71
+ function merge<T extends Directive>(a: T, b: T): T {
72
+ const result = {} as Record<string, unknown>;
73
+
74
+ // ── Position field: winner-takes-all by precedence, b wins ties ──
75
+ const aPos = getSetPositionFields(a as Directive);
76
+ const bPos = getSetPositionFields(b as Directive);
77
+
78
+ // Pick the highest-priority position field across both directives.
79
+ // b's fields are evaluated after a's, so b wins on same precedence (last-wins).
80
+ let winnerField: PositionField | null = null;
81
+ let winnerSource: Directive | null = null;
82
+
83
+ for (const field of aPos) {
84
+ if (beatsCurrent(field, winnerField)) {
85
+ winnerField = field;
86
+ winnerSource = a as Directive;
87
+ }
88
+ }
89
+ for (const field of bPos) {
90
+ if (beatsCurrent(field, winnerField)) {
91
+ winnerField = field;
92
+ winnerSource = b as Directive;
93
+ }
94
+ }
95
+
96
+ if (winnerField !== null && winnerSource !== null) {
97
+ result[winnerField] = (winnerSource as Record<string, unknown>)[winnerField];
98
+ }
99
+
100
+ // ── reply: last-wins ──
101
+ if ((b as Directive).reply !== undefined) {
102
+ result.reply = (b as Directive).reply;
103
+ } else if ((a as Directive).reply !== undefined) {
104
+ result.reply = (a as Directive).reply;
105
+ }
106
+
107
+ // ── dataUpdate: shallow merge ──
108
+ const aData = (a as Record<string, unknown>).dataUpdate as
109
+ | Record<string, unknown>
110
+ | undefined;
111
+ const bData = (b as Record<string, unknown>).dataUpdate as
112
+ | Record<string, unknown>
113
+ | undefined;
114
+ if (aData || bData) {
115
+ result.dataUpdate = { ...aData, ...bData };
116
+ }
117
+
118
+ // ── contextUpdate: shallow merge ──
119
+ const aCtx = (a as Record<string, unknown>).contextUpdate as
120
+ | Record<string, unknown>
121
+ | undefined;
122
+ const bCtx = (b as Record<string, unknown>).contextUpdate as
123
+ | Record<string, unknown>
124
+ | undefined;
125
+ if (aCtx || bCtx) {
126
+ result.contextUpdate = { ...aCtx, ...bCtx };
127
+ }
128
+
129
+ // ── appendPrompt (PreDirective): concatenate ──
130
+ const aPrompt = (a as Record<string, unknown>).appendPrompt as
131
+ | string[]
132
+ | undefined;
133
+ const bPrompt = (b as Record<string, unknown>).appendPrompt as
134
+ | string[]
135
+ | undefined;
136
+ if (aPrompt || bPrompt) {
137
+ result.appendPrompt = [...(aPrompt ?? []), ...(bPrompt ?? [])];
138
+ }
139
+
140
+ // ── injectTools (PreDirective): concatenate then dedupe by id (last wins) ──
141
+ const aTools = (a as Record<string, unknown>).injectTools as
142
+ | Array<{ id: string;[k: string]: unknown }>
143
+ | undefined;
144
+ const bTools = (b as Record<string, unknown>).injectTools as
145
+ | Array<{ id: string;[k: string]: unknown }>
146
+ | undefined;
147
+ if (aTools || bTools) {
148
+ const combined = [...(aTools ?? []), ...(bTools ?? [])];
149
+ // Dedupe by id — last definition wins
150
+ const seen = new Map<string, (typeof combined)[number]>();
151
+ for (const tool of combined) {
152
+ seen.set(tool.id, tool);
153
+ }
154
+ result.injectTools = Array.from(seen.values());
155
+ }
156
+
157
+ // ── halt (PreDirective): logical OR ──
158
+ const aHalt = (a as Record<string, unknown>).halt as boolean | undefined;
159
+ const bHalt = (b as Record<string, unknown>).halt as boolean | undefined;
160
+ if (aHalt || bHalt) {
161
+ result.halt = true;
162
+ }
163
+
164
+ return result as T;
165
+ }
166
+
167
+ /**
168
+ * Runtime validator. Throws FlowConfigurationError for invalid combinations:
169
+ * - Multiple position fields set.
170
+ * - `goTo` set as empty object `{}` (no flow target).
171
+ * - `reply` co-existing with `abort` (abort ends the conversation; a reply is nonsensical).
172
+ */
173
+ function validate(d: Directive): void {
174
+ // ── Multiple position fields ──
175
+ const setFields = getSetPositionFields(d);
176
+ if (setFields.length > 1) {
177
+ throw new FlowConfigurationError(
178
+ `[FlowConfigurationError] Invalid directive: multiple position fields set (${setFields.join(", ")}). ` +
179
+ `A directive may have at most one position field. Remove the extras.`
180
+ );
181
+ }
182
+
183
+ // ── Empty goTo object ──
184
+ if (d.goTo !== undefined && d.goTo !== null) {
185
+ if (typeof d.goTo === "object") {
186
+ const goToObj = d.goTo as { flow?: string; step?: string };
187
+ if (!goToObj.flow && !goToObj.step) {
188
+ throw new FlowConfigurationError(
189
+ `[FlowConfigurationError] Invalid directive: goTo is set as an empty object. ` +
190
+ `goTo requires a flow id or title. Provide { flow: "<id>" } or use the string shorthand.`
191
+ );
192
+ }
193
+ }
194
+ }
195
+
196
+ // ── reply co-existing with abort ──
197
+ if (d.reply !== undefined && d.abort !== undefined) {
198
+ throw new FlowConfigurationError(
199
+ `[FlowConfigurationError] Invalid directive: reply cannot co-exist with abort. ` +
200
+ `An aborted conversation cannot deliver a reply. Remove one of the fields.`
201
+ );
202
+ }
203
+ }
204
+
205
+ /**
206
+ * The `flow` namespace object. Exported as a single const for ergonomic usage:
207
+ *
208
+ * ```ts
209
+ * import { flow } from '@falai/agent';
210
+ * if (flow.isDirective(x)) { ... }
211
+ * const merged = flow.merge(a, b);
212
+ * flow.validate(d);
213
+ * ```
214
+ */
215
+ export const flow = {
216
+ isDirective,
217
+ merge,
218
+ validate,
219
+ } as const;
package/src/index.ts CHANGED
@@ -1,30 +1,26 @@
1
1
  /**
2
2
  * @falai/agent - Standalone AI Agent framework
3
3
  *
4
- * A strongly-typed, modular agent framework with route DSL and AI provider strategy
4
+ * A strongly-typed, modular agent framework with flow DSL and AI provider strategy
5
5
  */
6
6
 
7
7
  // Core
8
8
  export { Agent } from "./core/Agent";
9
- export { Route } from "./core/Route";
10
- export { Step } from "./core/Step";
11
- export { ResponseModal } from "./core/ResponseModal";
12
- export type {
13
- ResponseModalOptions,
14
- RespondParams,
15
- StreamOptions,
16
- GenerateOptions
17
- } from "./core/ResponseModal";
9
+ export { createAgent } from "./core/createAgent";
10
+ export { Flow } from "./core/Flow";
11
+ export { Step, FlowConfigurationError } from "./core/Step";
12
+ export { flow } from "./core/flow-namespace";
13
+ export { DirectiveChainTracker } from "./core/DirectiveChainTracker";
14
+ export type { DirectiveChainEntry } from "./core/DirectiveChainTracker";
15
+
18
16
  export { adaptEvent, convertHistoryToEvents } from "./core/Events";
19
17
  export { PersistenceManager } from "./core/PersistenceManager";
20
18
  export { SessionManager } from "./core/SessionManager";
21
19
  export { ToolManager, ToolCreationError, ToolExecutionError } from "./core/ToolManager";
22
- export { BatchExecutor, needsInput, type NeedsInputStep, type DetermineBatchParams } from "./core/BatchExecutor";
23
- export { BatchPromptBuilder, type BuildBatchPromptParams, type BatchPromptResult } from "./core/BatchPromptBuilder";
24
- export { CompactionEngine } from "./core/CompactionEngine";
20
+ export { NotImplementedError } from "./types/errors";
21
+
25
22
  export { StreamingToolExecutor } from "./core/StreamingToolExecutor";
26
- export { PromptSectionCache } from "./core/PromptSectionCache";
27
- export type { PromptSectionType, PromptCacheConfig, SectionCompute } from "./core/PromptSectionCache";
23
+
28
24
 
29
25
  // Providers
30
26
  export { GeminiProvider } from "./providers/GeminiProvider";
@@ -71,11 +67,8 @@ export type {
71
67
  OpenSearchAdapterOptions,
72
68
  } from "./adapters/OpenSearchAdapter";
73
69
 
74
- // Constants
75
- export { END_ROUTE, END_ROUTE_ID } from "./constants";
76
-
77
70
  // Utils
78
- export { generateRouteId, generateStepId, generateToolId } from "./utils/id";
71
+ export { generateFlowId, generateStepId, generateToolId } from "./utils/id";
79
72
  export { formatKnowledgeBase } from "./utils/template";
80
73
  export {
81
74
  ConditionEvaluator,
@@ -101,30 +94,40 @@ export type {
101
94
  AgentCompactionConfig,
102
95
  AgentResponse,
103
96
  Term,
104
- Guideline,
105
- GuidelineMatch,
97
+ Instruction,
98
+ ScopedInstructions,
99
+ AppliedInstruction,
106
100
  ContextLifecycleHooks,
107
101
  ContextProvider,
102
+ HookContext,
103
+ ExitReason,
108
104
  Event,
109
105
  EmittedEvent,
110
106
  MessageEventData,
111
107
  ToolEventData,
112
108
  StatusEventData,
113
109
  Participant,
114
- RouteRef,
110
+ FlowRef,
115
111
  StepRef,
116
- RouteOptions,
112
+ FlowOptions,
117
113
  StepOptions,
118
- RouteTransitionConfig,
119
- RouteCompletionHandler,
114
+ FlowLifecycleHooks,
115
+ StepLifecycleHooks,
120
116
  SessionState,
121
- PendingTransition,
117
+ SignalsState,
118
+ SignalTriggerState,
119
+ Signal,
120
+ SignalContext,
121
+ SignalDirective,
122
+ SignalPredicate,
123
+ SignalPredicateContext,
124
+ SignalFiring,
125
+ SignalSchema,
122
126
  ToolContext,
123
127
  ToolResult,
124
128
  ToolHandler,
125
129
  Tool,
126
130
 
127
- EnhancedTool,
128
131
  ToolValidationResult,
129
132
  ToolPermissionResult,
130
133
  ToolCallRequest,
@@ -161,20 +164,23 @@ export type {
161
164
  PersistenceAdapter,
162
165
  Template,
163
166
  TemplateContext,
164
- ConditionTemplate,
165
167
  ConditionEvaluationResult,
166
168
  UserHistoryItem,
167
169
  AssistantHistoryItem,
168
170
  ToolHistoryItem,
169
171
  SystemHistoryItem,
170
- // Multi-step execution types
172
+ // Flow execution types
171
173
  StoppedReason,
172
- BatchResult,
173
- BatchExecutionResult,
174
- BatchExecutionEvent,
175
- BatchExecutionEventType,
176
- BatchExecutionTiming,
177
- BatchExecutionError,
174
+ PrepareResult,
175
+ Directive,
176
+ PreDirective,
177
+ BranchEntry,
178
+ BranchMap,
179
+ BranchPredicate,
180
+ BranchPredicateContext,
181
+ ConditionPredicate,
182
+ ConditionIf,
183
+ ConditionWhen,
178
184
  } from "./types";
179
185
  export { CompositionMode, EventKind, MessageRole } from "./types";
180
- export { createSession, createSessionId, enterRoute, enterStep, mergeCollected } from "./utils";
186
+ export { createSession, createSessionId, enterFlow, enterStep, completeCurrentFlow, isFlowCompletedThisSession, mergeCollected } from "./utils";
@@ -231,24 +231,26 @@ export class GeminiProvider implements AiProvider {
231
231
 
232
232
  /**
233
233
  * Safely extract text from a Gemini response or chunk.
234
- * The `.text` getter can throw when the response contains only function calls
235
- * (observed in some SDK versions). This method falls back to manually
236
- * extracting text parts from candidates.
234
+ * Bypasses the SDK's `.text` getter entirely to avoid warnings about
235
+ * non-text parts (e.g., "thoughtSignature") in the response.
236
+ * Manually concatenates only text parts from candidates.
237
237
  *
238
238
  * @private
239
239
  */
240
240
  private safeExtractText(responseOrChunk: { text?: string; candidates?: Array<{ content?: { parts?: Array<{ text?: string; functionCall?: unknown }> } }> }): string {
241
+ // Always extract text parts manually to avoid SDK warnings about
242
+ // non-text parts like "thoughtSignature" in the response.
243
+ const parts = responseOrChunk.candidates?.[0]?.content?.parts;
244
+ if (parts) {
245
+ return parts
246
+ .filter((p) => p.text != null)
247
+ .map((p) => p.text)
248
+ .join("");
249
+ }
250
+ // Fallback: try the .text getter if no candidates structure exists
241
251
  try {
242
252
  return responseOrChunk.text || "";
243
253
  } catch {
244
- // .text getter threw — extract text parts manually
245
- const parts = responseOrChunk.candidates?.[0]?.content?.parts;
246
- if (parts) {
247
- return parts
248
- .filter((p) => p.text != null)
249
- .map((p) => p.text)
250
- .join("");
251
- }
252
254
  return "";
253
255
  }
254
256
  }
@@ -534,17 +536,17 @@ export class GeminiProvider implements AiProvider {
534
536
  }
535
537
  }
536
538
 
539
+ // Safely extract text — avoids SDK warning about non-text parts
540
+ const message = this.safeExtractText(response);
541
+
537
542
  // Debug logging for response structure
538
- if (!response.text && toolCalls.length === 0) {
543
+ if (!message && toolCalls.length === 0) {
539
544
  logger.debug(`[GeminiProvider] Debug - Response structure:`, {
540
545
  candidatesCount: response.candidates?.length || 0,
541
546
  firstCandidateParts: response.candidates?.[0]?.content?.parts?.length || 0,
542
547
  });
543
548
  }
544
549
 
545
- // Safely extract text — .text getter can throw when response has only function calls
546
- const message = this.safeExtractText(response);
547
-
548
550
  // Only throw error if we have no text AND no function calls
549
551
  if (!message && toolCalls.length === 0) {
550
552
  logger.error(`[GeminiProvider] Empty response - no text or function calls`);