@falai/agent 0.9.0 → 1.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 (654) hide show
  1. package/README.md +304 -72
  2. package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
  3. package/dist/adapters/MemoryAdapter.js.map +1 -0
  4. package/dist/adapters/MongoAdapter.d.ts.map +1 -0
  5. package/dist/adapters/MongoAdapter.js.map +1 -0
  6. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
  7. package/dist/adapters/OpenSearchAdapter.js.map +1 -0
  8. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  9. package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
  10. package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
  11. package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
  12. package/dist/adapters/PrismaAdapter.js.map +1 -0
  13. package/dist/adapters/RedisAdapter.d.ts.map +1 -0
  14. package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
  15. package/dist/adapters/RedisAdapter.js.map +1 -0
  16. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
  17. package/dist/adapters/SQLiteAdapter.js.map +1 -0
  18. package/dist/adapters/index.d.ts.map +1 -0
  19. package/dist/adapters/index.js.map +1 -0
  20. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
  21. package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
  22. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
  23. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
  24. package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
  25. package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
  26. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
  27. package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
  28. package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
  29. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/adapters/index.js.map +1 -0
  31. package/dist/cjs/constants/index.js.map +1 -0
  32. package/dist/{src → cjs}/core/Agent.d.ts +25 -6
  33. package/dist/cjs/core/Agent.d.ts.map +1 -0
  34. package/dist/cjs/{src/core → core}/Agent.js +121 -37
  35. package/dist/cjs/core/Agent.js.map +1 -0
  36. package/dist/cjs/core/BatchExecutor.d.ts +353 -0
  37. package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
  38. package/dist/cjs/core/BatchExecutor.js +842 -0
  39. package/dist/cjs/core/BatchExecutor.js.map +1 -0
  40. package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
  41. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
  42. package/dist/cjs/core/BatchPromptBuilder.js +201 -0
  43. package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
  44. package/dist/cjs/core/Events.js.map +1 -0
  45. package/dist/cjs/core/PersistenceManager.js.map +1 -0
  46. package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
  47. package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
  48. package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
  49. package/dist/cjs/core/PromptComposer.js.map +1 -0
  50. package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
  51. package/dist/cjs/core/ResponseEngine.js +202 -0
  52. package/dist/cjs/core/ResponseEngine.js.map +1 -0
  53. package/dist/{src → cjs}/core/ResponseModal.d.ts +54 -3
  54. package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
  55. package/dist/cjs/{src/core → core}/ResponseModal.js +807 -121
  56. package/dist/cjs/core/ResponseModal.js.map +1 -0
  57. package/dist/{src → cjs}/core/ResponsePipeline.d.ts +10 -6
  58. package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
  59. package/dist/cjs/{src/core → core}/ResponsePipeline.js +60 -25
  60. package/dist/cjs/core/ResponsePipeline.js.map +1 -0
  61. package/dist/{src → cjs}/core/Route.d.ts +46 -10
  62. package/dist/cjs/core/Route.d.ts.map +1 -0
  63. package/dist/cjs/core/Route.js +541 -0
  64. package/dist/cjs/core/Route.js.map +1 -0
  65. package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +35 -5
  66. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
  67. package/dist/cjs/{src/core → core}/RoutingEngine.js +360 -98
  68. package/dist/cjs/core/RoutingEngine.js.map +1 -0
  69. package/dist/{src → cjs}/core/SessionManager.d.ts +9 -1
  70. package/dist/cjs/core/SessionManager.d.ts.map +1 -0
  71. package/dist/cjs/{src/core → core}/SessionManager.js +27 -5
  72. package/dist/cjs/core/SessionManager.js.map +1 -0
  73. package/dist/cjs/core/Step.d.ts +170 -0
  74. package/dist/cjs/core/Step.d.ts.map +1 -0
  75. package/dist/cjs/core/Step.js +448 -0
  76. package/dist/cjs/core/Step.js.map +1 -0
  77. package/dist/cjs/core/ToolManager.d.ts +234 -0
  78. package/dist/cjs/core/ToolManager.d.ts.map +1 -0
  79. package/dist/cjs/core/ToolManager.js +1117 -0
  80. package/dist/cjs/core/ToolManager.js.map +1 -0
  81. package/dist/{src → cjs}/index.d.ts +5 -3
  82. package/dist/cjs/index.d.ts.map +1 -0
  83. package/dist/cjs/{src/index.js → index.js} +16 -3
  84. package/dist/cjs/index.js.map +1 -0
  85. package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
  86. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  87. package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
  88. package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
  89. package/dist/cjs/providers/GeminiProvider.js.map +1 -0
  90. package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
  91. package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
  92. package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
  93. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
  94. package/dist/cjs/providers/index.js.map +1 -0
  95. package/dist/cjs/{src/types → types}/agent.d.ts +12 -4
  96. package/dist/cjs/types/agent.d.ts.map +1 -0
  97. package/dist/cjs/types/agent.js.map +1 -0
  98. package/dist/{src → cjs}/types/ai.js.map +1 -1
  99. package/dist/cjs/types/history.js.map +1 -0
  100. package/dist/cjs/{src/types → types}/index.d.ts +5 -3
  101. package/dist/{src → cjs}/types/index.d.ts.map +1 -1
  102. package/dist/cjs/{src/types → types}/index.js +8 -1
  103. package/dist/cjs/types/index.js.map +1 -0
  104. package/dist/cjs/types/persistence.js.map +1 -0
  105. package/dist/cjs/{src/types → types}/route.d.ts +116 -15
  106. package/dist/cjs/types/route.d.ts.map +1 -0
  107. package/dist/cjs/{src/types → types}/route.js.map +1 -1
  108. package/dist/cjs/types/session.js.map +1 -0
  109. package/dist/cjs/types/template.d.ts +88 -0
  110. package/dist/cjs/types/template.d.ts.map +1 -0
  111. package/dist/cjs/types/tool.d.ts +130 -0
  112. package/dist/cjs/types/tool.d.ts.map +1 -0
  113. package/dist/cjs/types/tool.js +19 -0
  114. package/dist/cjs/types/tool.js.map +1 -0
  115. package/dist/cjs/utils/clone.js.map +1 -0
  116. package/dist/cjs/utils/condition.d.ts +38 -0
  117. package/dist/cjs/utils/condition.d.ts.map +1 -0
  118. package/dist/cjs/utils/condition.js +168 -0
  119. package/dist/cjs/utils/condition.js.map +1 -0
  120. package/dist/cjs/utils/event.js.map +1 -0
  121. package/dist/cjs/utils/history.js.map +1 -0
  122. package/dist/cjs/utils/id.js.map +1 -0
  123. package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
  124. package/dist/cjs/utils/index.d.ts.map +1 -0
  125. package/dist/cjs/{src/utils → utils}/index.js +12 -1
  126. package/dist/cjs/utils/index.js.map +1 -0
  127. package/dist/cjs/utils/json.d.ts +16 -0
  128. package/dist/cjs/utils/json.d.ts.map +1 -0
  129. package/dist/cjs/utils/json.js +47 -0
  130. package/dist/cjs/utils/json.js.map +1 -0
  131. package/dist/cjs/utils/logger.js.map +1 -0
  132. package/dist/{src → cjs}/utils/retry.d.ts +0 -3
  133. package/dist/cjs/utils/retry.d.ts.map +1 -0
  134. package/dist/cjs/{src/utils → utils}/retry.js +8 -7
  135. package/dist/cjs/utils/retry.js.map +1 -0
  136. package/dist/cjs/utils/session.js.map +1 -0
  137. package/dist/{src → cjs}/utils/template.d.ts +48 -0
  138. package/dist/cjs/utils/template.d.ts.map +1 -0
  139. package/dist/cjs/{src/utils → utils}/template.js +100 -0
  140. package/dist/cjs/utils/template.js.map +1 -0
  141. package/dist/constants/index.d.ts.map +1 -0
  142. package/dist/constants/index.js.map +1 -0
  143. package/dist/{cjs/src/core → core}/Agent.d.ts +25 -6
  144. package/dist/core/Agent.d.ts.map +1 -0
  145. package/dist/{src/core → core}/Agent.js +122 -38
  146. package/dist/core/Agent.js.map +1 -0
  147. package/dist/core/BatchExecutor.d.ts +353 -0
  148. package/dist/core/BatchExecutor.d.ts.map +1 -0
  149. package/dist/core/BatchExecutor.js +837 -0
  150. package/dist/core/BatchExecutor.js.map +1 -0
  151. package/dist/core/BatchPromptBuilder.d.ts +86 -0
  152. package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
  153. package/dist/core/BatchPromptBuilder.js +197 -0
  154. package/dist/core/BatchPromptBuilder.js.map +1 -0
  155. package/dist/core/Events.d.ts.map +1 -0
  156. package/dist/core/Events.js.map +1 -0
  157. package/dist/core/PersistenceManager.d.ts.map +1 -0
  158. package/dist/core/PersistenceManager.js.map +1 -0
  159. package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
  160. package/dist/core/PromptComposer.d.ts.map +1 -0
  161. package/dist/{src/core → core}/PromptComposer.js +45 -8
  162. package/dist/core/PromptComposer.js.map +1 -0
  163. package/dist/core/ResponseEngine.d.ts.map +1 -0
  164. package/dist/core/ResponseEngine.js +198 -0
  165. package/dist/core/ResponseEngine.js.map +1 -0
  166. package/dist/{cjs/src/core → core}/ResponseModal.d.ts +54 -3
  167. package/dist/core/ResponseModal.d.ts.map +1 -0
  168. package/dist/{src/core → core}/ResponseModal.js +807 -121
  169. package/dist/core/ResponseModal.js.map +1 -0
  170. package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +10 -6
  171. package/dist/core/ResponsePipeline.d.ts.map +1 -0
  172. package/dist/{src/core → core}/ResponsePipeline.js +60 -25
  173. package/dist/core/ResponsePipeline.js.map +1 -0
  174. package/dist/{cjs/src/core → core}/Route.d.ts +46 -10
  175. package/dist/core/Route.d.ts.map +1 -0
  176. package/dist/core/Route.js +537 -0
  177. package/dist/core/Route.js.map +1 -0
  178. package/dist/{src/core → core}/RoutingEngine.d.ts +35 -5
  179. package/dist/core/RoutingEngine.d.ts.map +1 -0
  180. package/dist/{src/core → core}/RoutingEngine.js +343 -81
  181. package/dist/core/RoutingEngine.js.map +1 -0
  182. package/dist/{cjs/src/core → core}/SessionManager.d.ts +9 -1
  183. package/dist/core/SessionManager.d.ts.map +1 -0
  184. package/dist/{src/core → core}/SessionManager.js +27 -5
  185. package/dist/core/SessionManager.js.map +1 -0
  186. package/dist/core/Step.d.ts +170 -0
  187. package/dist/core/Step.d.ts.map +1 -0
  188. package/dist/core/Step.js +444 -0
  189. package/dist/core/Step.js.map +1 -0
  190. package/dist/core/ToolManager.d.ts +234 -0
  191. package/dist/core/ToolManager.d.ts.map +1 -0
  192. package/dist/core/ToolManager.js +1111 -0
  193. package/dist/core/ToolManager.js.map +1 -0
  194. package/dist/{cjs/src/index.d.ts → index.d.ts} +5 -3
  195. package/dist/index.d.ts.map +1 -0
  196. package/dist/{src/index.js → index.js} +4 -1
  197. package/dist/index.js.map +1 -0
  198. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  199. package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
  200. package/dist/providers/AnthropicProvider.js.map +1 -0
  201. package/dist/providers/GeminiProvider.d.ts.map +1 -0
  202. package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
  203. package/dist/providers/GeminiProvider.js.map +1 -0
  204. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  205. package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
  206. package/dist/providers/OpenAIProvider.js.map +1 -0
  207. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  208. package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
  209. package/dist/providers/OpenRouterProvider.js.map +1 -0
  210. package/dist/providers/index.d.ts.map +1 -0
  211. package/dist/providers/index.js.map +1 -0
  212. package/dist/{src/types → types}/agent.d.ts +12 -4
  213. package/dist/types/agent.d.ts.map +1 -0
  214. package/dist/types/agent.js.map +1 -0
  215. package/dist/types/ai.d.ts.map +1 -0
  216. package/dist/types/ai.js.map +1 -0
  217. package/dist/types/history.d.ts.map +1 -0
  218. package/dist/types/history.js.map +1 -0
  219. package/dist/{src/types → types}/index.d.ts +5 -3
  220. package/dist/types/index.d.ts.map +1 -0
  221. package/dist/{src/types → types}/index.js +2 -0
  222. package/dist/types/index.js.map +1 -0
  223. package/dist/types/persistence.d.ts.map +1 -0
  224. package/dist/types/persistence.js.map +1 -0
  225. package/dist/{src/types → types}/route.d.ts +116 -15
  226. package/dist/types/route.d.ts.map +1 -0
  227. package/dist/{src/types → types}/route.js.map +1 -1
  228. package/dist/types/routing.d.ts.map +1 -0
  229. package/dist/{cjs/src/types → types}/routing.js.map +1 -1
  230. package/dist/types/schema.d.ts.map +1 -0
  231. package/dist/{cjs/src/types → types}/schema.js.map +1 -1
  232. package/dist/types/session.d.ts.map +1 -0
  233. package/dist/{src/types → types}/session.js.map +1 -1
  234. package/dist/types/template.d.ts +88 -0
  235. package/dist/types/template.d.ts.map +1 -0
  236. package/dist/{cjs/src/types → types}/template.js.map +1 -1
  237. package/dist/types/tool.d.ts +130 -0
  238. package/dist/types/tool.d.ts.map +1 -0
  239. package/dist/types/tool.js +16 -0
  240. package/dist/types/tool.js.map +1 -0
  241. package/dist/utils/clone.d.ts.map +1 -0
  242. package/dist/utils/clone.js.map +1 -0
  243. package/dist/utils/condition.d.ts +38 -0
  244. package/dist/utils/condition.d.ts.map +1 -0
  245. package/dist/utils/condition.js +161 -0
  246. package/dist/utils/condition.js.map +1 -0
  247. package/dist/utils/event.d.ts.map +1 -0
  248. package/dist/utils/event.js.map +1 -0
  249. package/dist/utils/history.d.ts.map +1 -0
  250. package/dist/utils/history.js.map +1 -0
  251. package/dist/utils/id.d.ts.map +1 -0
  252. package/dist/utils/id.js.map +1 -0
  253. package/dist/{src/utils → utils}/index.d.ts +3 -1
  254. package/dist/utils/index.d.ts.map +1 -0
  255. package/dist/{src/utils → utils}/index.js +5 -1
  256. package/dist/utils/index.js.map +1 -0
  257. package/dist/utils/json.d.ts +16 -0
  258. package/dist/utils/json.d.ts.map +1 -0
  259. package/dist/utils/json.js +43 -0
  260. package/dist/utils/json.js.map +1 -0
  261. package/dist/utils/logger.d.ts.map +1 -0
  262. package/dist/utils/logger.js.map +1 -0
  263. package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
  264. package/dist/utils/retry.d.ts.map +1 -0
  265. package/dist/{src/utils → utils}/retry.js +5 -4
  266. package/dist/utils/retry.js.map +1 -0
  267. package/dist/utils/session.d.ts.map +1 -0
  268. package/dist/utils/session.js.map +1 -0
  269. package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
  270. package/dist/utils/template.d.ts.map +1 -0
  271. package/dist/{src/utils → utils}/template.js +98 -0
  272. package/dist/utils/template.js.map +1 -0
  273. package/docs/CONTRIBUTING.md +40 -0
  274. package/docs/README.md +12 -5
  275. package/docs/api/README.md +295 -56
  276. package/docs/api/overview.md +272 -31
  277. package/docs/architecture/data-extraction-flow.md +363 -0
  278. package/docs/architecture/multi-step-execution.md +243 -0
  279. package/docs/core/agent/README.md +120 -5
  280. package/docs/core/agent/session-management.md +153 -6
  281. package/docs/core/ai-integration/prompt-composition.md +135 -0
  282. package/docs/core/ai-integration/response-processing.md +261 -4
  283. package/docs/core/conversation-flows/data-collection.md +143 -0
  284. package/docs/core/conversation-flows/routes.md +132 -2
  285. package/docs/core/conversation-flows/step-transitions.md +132 -0
  286. package/docs/core/conversation-flows/steps.md +112 -0
  287. package/docs/core/error-handling.md +831 -0
  288. package/docs/core/routing/intelligent-routing.md +118 -0
  289. package/docs/core/tools/tool-definition.md +684 -60
  290. package/docs/core/tools/tool-scoping.md +244 -53
  291. package/docs/guides/error-handling-patterns.md +578 -0
  292. package/docs/guides/getting-started/README.md +423 -31
  293. package/docs/guides/migration/README.md +23 -0
  294. package/docs/guides/migration/flexible-routing-conditions.md +375 -0
  295. package/docs/guides/migration/multi-step-execution.md +303 -0
  296. package/examples/advanced-patterns/knowledge-based-agent.ts +107 -30
  297. package/examples/advanced-patterns/persistent-onboarding.ts +70 -48
  298. package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
  299. package/examples/advanced-patterns/streaming-responses.ts +2 -2
  300. package/examples/ai-providers/anthropic-integration.ts +13 -9
  301. package/examples/ai-providers/openai-integration.ts +12 -8
  302. package/examples/condition-patterns/function-only-conditions.ts +365 -0
  303. package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
  304. package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
  305. package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
  306. package/examples/condition-patterns/string-only-conditions.ts +296 -0
  307. package/examples/conversation-flows/completion-transitions.ts +48 -7
  308. package/examples/core-concepts/basic-agent.ts +158 -98
  309. package/examples/core-concepts/schema-driven-extraction.ts +43 -16
  310. package/examples/core-concepts/session-management.ts +117 -29
  311. package/examples/integrations/database-integration.ts +6 -6
  312. package/examples/integrations/healthcare-integration.ts +25 -39
  313. package/examples/integrations/search-integration.ts +8 -8
  314. package/examples/integrations/server-session-management.ts +11 -11
  315. package/examples/persistence/database-persistence.ts +15 -15
  316. package/examples/persistence/memory-sessions.ts +6 -6
  317. package/examples/persistence/redis-persistence.ts +7 -9
  318. package/examples/tools/basic-tools.ts +293 -89
  319. package/examples/tools/data-enrichment-tools.ts +189 -79
  320. package/package.json +6 -4
  321. package/src/adapters/PrismaAdapter.ts +3 -2
  322. package/src/adapters/RedisAdapter.ts +3 -3
  323. package/src/core/Agent.ts +152 -46
  324. package/src/core/BatchExecutor.ts +1156 -0
  325. package/src/core/BatchPromptBuilder.ts +275 -0
  326. package/src/core/PromptComposer.ts +53 -16
  327. package/src/core/ResponseEngine.ts +143 -4
  328. package/src/core/ResponseModal.ts +1035 -137
  329. package/src/core/ResponsePipeline.ts +99 -65
  330. package/src/core/Route.ts +262 -34
  331. package/src/core/RoutingEngine.ts +467 -120
  332. package/src/core/SessionManager.ts +39 -7
  333. package/src/core/Step.ts +338 -32
  334. package/src/core/ToolManager.ts +1394 -0
  335. package/src/index.ts +27 -3
  336. package/src/providers/AnthropicProvider.ts +17 -17
  337. package/src/providers/GeminiProvider.ts +129 -60
  338. package/src/providers/OpenAIProvider.ts +18 -18
  339. package/src/providers/OpenRouterProvider.ts +18 -18
  340. package/src/types/agent.ts +12 -4
  341. package/src/types/index.ts +25 -3
  342. package/src/types/route.ts +136 -15
  343. package/src/types/template.ts +70 -2
  344. package/src/types/tool.ts +116 -25
  345. package/src/utils/condition.ts +190 -0
  346. package/src/utils/index.ts +12 -0
  347. package/src/utils/json.ts +46 -0
  348. package/src/utils/retry.ts +5 -4
  349. package/src/utils/template.ts +109 -0
  350. package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
  351. package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
  352. package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
  353. package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
  354. package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
  355. package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
  356. package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  357. package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
  358. package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
  359. package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
  360. package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
  361. package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
  362. package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
  363. package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
  364. package/dist/cjs/src/adapters/index.d.ts.map +0 -1
  365. package/dist/cjs/src/adapters/index.js.map +0 -1
  366. package/dist/cjs/src/constants/index.d.ts.map +0 -1
  367. package/dist/cjs/src/constants/index.js.map +0 -1
  368. package/dist/cjs/src/core/Agent.d.ts.map +0 -1
  369. package/dist/cjs/src/core/Agent.js.map +0 -1
  370. package/dist/cjs/src/core/Events.d.ts.map +0 -1
  371. package/dist/cjs/src/core/Events.js.map +0 -1
  372. package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
  373. package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
  374. package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
  375. package/dist/cjs/src/core/PromptComposer.js.map +0 -1
  376. package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
  377. package/dist/cjs/src/core/ResponseEngine.js +0 -84
  378. package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
  379. package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
  380. package/dist/cjs/src/core/ResponseModal.js.map +0 -1
  381. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
  382. package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
  383. package/dist/cjs/src/core/Route.d.ts.map +0 -1
  384. package/dist/cjs/src/core/Route.js +0 -343
  385. package/dist/cjs/src/core/Route.js.map +0 -1
  386. package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
  387. package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
  388. package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
  389. package/dist/cjs/src/core/SessionManager.js.map +0 -1
  390. package/dist/cjs/src/core/Step.d.ts +0 -96
  391. package/dist/cjs/src/core/Step.d.ts.map +0 -1
  392. package/dist/cjs/src/core/Step.js +0 -206
  393. package/dist/cjs/src/core/Step.js.map +0 -1
  394. package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
  395. package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
  396. package/dist/cjs/src/core/ToolExecutor.js +0 -84
  397. package/dist/cjs/src/core/ToolExecutor.js.map +0 -1
  398. package/dist/cjs/src/index.d.ts.map +0 -1
  399. package/dist/cjs/src/index.js.map +0 -1
  400. package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
  401. package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
  402. package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
  403. package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
  404. package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
  405. package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
  406. package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
  407. package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
  408. package/dist/cjs/src/providers/index.d.ts.map +0 -1
  409. package/dist/cjs/src/providers/index.js.map +0 -1
  410. package/dist/cjs/src/types/agent.d.ts.map +0 -1
  411. package/dist/cjs/src/types/agent.js.map +0 -1
  412. package/dist/cjs/src/types/ai.d.ts.map +0 -1
  413. package/dist/cjs/src/types/ai.js.map +0 -1
  414. package/dist/cjs/src/types/history.d.ts.map +0 -1
  415. package/dist/cjs/src/types/history.js.map +0 -1
  416. package/dist/cjs/src/types/index.d.ts.map +0 -1
  417. package/dist/cjs/src/types/index.js.map +0 -1
  418. package/dist/cjs/src/types/persistence.d.ts.map +0 -1
  419. package/dist/cjs/src/types/persistence.js.map +0 -1
  420. package/dist/cjs/src/types/route.d.ts.map +0 -1
  421. package/dist/cjs/src/types/routing.d.ts.map +0 -1
  422. package/dist/cjs/src/types/schema.d.ts.map +0 -1
  423. package/dist/cjs/src/types/session.d.ts.map +0 -1
  424. package/dist/cjs/src/types/session.js.map +0 -1
  425. package/dist/cjs/src/types/template.d.ts +0 -30
  426. package/dist/cjs/src/types/template.d.ts.map +0 -1
  427. package/dist/cjs/src/types/tool.d.ts +0 -60
  428. package/dist/cjs/src/types/tool.d.ts.map +0 -1
  429. package/dist/cjs/src/types/tool.js +0 -6
  430. package/dist/cjs/src/types/tool.js.map +0 -1
  431. package/dist/cjs/src/utils/clone.d.ts.map +0 -1
  432. package/dist/cjs/src/utils/clone.js.map +0 -1
  433. package/dist/cjs/src/utils/event.d.ts.map +0 -1
  434. package/dist/cjs/src/utils/event.js.map +0 -1
  435. package/dist/cjs/src/utils/history.d.ts.map +0 -1
  436. package/dist/cjs/src/utils/history.js.map +0 -1
  437. package/dist/cjs/src/utils/id.d.ts.map +0 -1
  438. package/dist/cjs/src/utils/id.js.map +0 -1
  439. package/dist/cjs/src/utils/index.d.ts.map +0 -1
  440. package/dist/cjs/src/utils/index.js.map +0 -1
  441. package/dist/cjs/src/utils/logger.d.ts.map +0 -1
  442. package/dist/cjs/src/utils/logger.js.map +0 -1
  443. package/dist/cjs/src/utils/retry.d.ts.map +0 -1
  444. package/dist/cjs/src/utils/retry.js.map +0 -1
  445. package/dist/cjs/src/utils/session.d.ts.map +0 -1
  446. package/dist/cjs/src/utils/session.js.map +0 -1
  447. package/dist/cjs/src/utils/template.d.ts.map +0 -1
  448. package/dist/cjs/src/utils/template.js.map +0 -1
  449. package/dist/src/adapters/MemoryAdapter.js.map +0 -1
  450. package/dist/src/adapters/MongoAdapter.js.map +0 -1
  451. package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
  452. package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
  453. package/dist/src/adapters/PrismaAdapter.js.map +0 -1
  454. package/dist/src/adapters/RedisAdapter.js.map +0 -1
  455. package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
  456. package/dist/src/adapters/index.js.map +0 -1
  457. package/dist/src/constants/index.js.map +0 -1
  458. package/dist/src/core/Agent.d.ts.map +0 -1
  459. package/dist/src/core/Agent.js.map +0 -1
  460. package/dist/src/core/Events.js.map +0 -1
  461. package/dist/src/core/PersistenceManager.js.map +0 -1
  462. package/dist/src/core/PromptComposer.d.ts.map +0 -1
  463. package/dist/src/core/PromptComposer.js.map +0 -1
  464. package/dist/src/core/ResponseEngine.js +0 -80
  465. package/dist/src/core/ResponseEngine.js.map +0 -1
  466. package/dist/src/core/ResponseModal.d.ts.map +0 -1
  467. package/dist/src/core/ResponseModal.js.map +0 -1
  468. package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
  469. package/dist/src/core/ResponsePipeline.js.map +0 -1
  470. package/dist/src/core/Route.d.ts.map +0 -1
  471. package/dist/src/core/Route.js +0 -339
  472. package/dist/src/core/Route.js.map +0 -1
  473. package/dist/src/core/RoutingEngine.d.ts.map +0 -1
  474. package/dist/src/core/RoutingEngine.js.map +0 -1
  475. package/dist/src/core/SessionManager.d.ts.map +0 -1
  476. package/dist/src/core/SessionManager.js.map +0 -1
  477. package/dist/src/core/Step.d.ts +0 -96
  478. package/dist/src/core/Step.d.ts.map +0 -1
  479. package/dist/src/core/Step.js +0 -202
  480. package/dist/src/core/Step.js.map +0 -1
  481. package/dist/src/core/ToolExecutor.d.ts +0 -45
  482. package/dist/src/core/ToolExecutor.d.ts.map +0 -1
  483. package/dist/src/core/ToolExecutor.js +0 -80
  484. package/dist/src/core/ToolExecutor.js.map +0 -1
  485. package/dist/src/index.d.ts.map +0 -1
  486. package/dist/src/index.js.map +0 -1
  487. package/dist/src/providers/AnthropicProvider.js.map +0 -1
  488. package/dist/src/providers/GeminiProvider.js.map +0 -1
  489. package/dist/src/providers/OpenAIProvider.js.map +0 -1
  490. package/dist/src/providers/OpenRouterProvider.js.map +0 -1
  491. package/dist/src/providers/index.js.map +0 -1
  492. package/dist/src/types/agent.d.ts.map +0 -1
  493. package/dist/src/types/agent.js.map +0 -1
  494. package/dist/src/types/history.js.map +0 -1
  495. package/dist/src/types/index.js.map +0 -1
  496. package/dist/src/types/persistence.js.map +0 -1
  497. package/dist/src/types/route.d.ts.map +0 -1
  498. package/dist/src/types/template.d.ts +0 -30
  499. package/dist/src/types/template.d.ts.map +0 -1
  500. package/dist/src/types/tool.d.ts +0 -60
  501. package/dist/src/types/tool.d.ts.map +0 -1
  502. package/dist/src/types/tool.js +0 -5
  503. package/dist/src/types/tool.js.map +0 -1
  504. package/dist/src/utils/clone.js.map +0 -1
  505. package/dist/src/utils/event.js.map +0 -1
  506. package/dist/src/utils/history.js.map +0 -1
  507. package/dist/src/utils/id.js.map +0 -1
  508. package/dist/src/utils/index.d.ts.map +0 -1
  509. package/dist/src/utils/index.js.map +0 -1
  510. package/dist/src/utils/logger.js.map +0 -1
  511. package/dist/src/utils/retry.d.ts.map +0 -1
  512. package/dist/src/utils/retry.js.map +0 -1
  513. package/dist/src/utils/session.js.map +0 -1
  514. package/dist/src/utils/template.d.ts.map +0 -1
  515. package/dist/src/utils/template.js.map +0 -1
  516. package/docs/core/tools/tool-execution.md +0 -815
  517. package/src/core/ToolExecutor.ts +0 -126
  518. /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
  519. /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  520. /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
  521. /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
  522. /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
  523. /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  524. /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
  525. /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  526. /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
  527. /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
  528. /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
  529. /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  530. /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
  531. /package/dist/{src/adapters → adapters}/index.js +0 -0
  532. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
  533. /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
  534. /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
  535. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
  536. /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
  537. /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
  538. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
  539. /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
  540. /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
  541. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
  542. /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
  543. /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
  544. /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
  545. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
  546. /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
  547. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
  548. /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
  549. /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
  550. /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
  551. /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
  552. /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
  553. /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
  554. /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
  555. /package/dist/cjs/{src/constants → constants}/index.js +0 -0
  556. /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
  557. /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
  558. /package/dist/cjs/{src/core → core}/Events.js +0 -0
  559. /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
  560. /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
  561. /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
  562. /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
  563. /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  564. /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
  565. /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  566. /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  567. /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
  568. /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  569. /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
  570. /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
  571. /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
  572. /package/dist/cjs/{src/providers → providers}/index.js +0 -0
  573. /package/dist/cjs/{src/types → types}/agent.js +0 -0
  574. /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
  575. /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
  576. /package/dist/cjs/{src/types → types}/ai.js +0 -0
  577. /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
  578. /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
  579. /package/dist/cjs/{src/types → types}/history.js +0 -0
  580. /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
  581. /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
  582. /package/dist/cjs/{src/types → types}/persistence.js +0 -0
  583. /package/dist/cjs/{src/types → types}/route.js +0 -0
  584. /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
  585. /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
  586. /package/dist/cjs/{src/types → types}/routing.js +0 -0
  587. /package/dist/{src → cjs}/types/routing.js.map +0 -0
  588. /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
  589. /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
  590. /package/dist/cjs/{src/types → types}/schema.js +0 -0
  591. /package/dist/{src → cjs}/types/schema.js.map +0 -0
  592. /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
  593. /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
  594. /package/dist/cjs/{src/types → types}/session.js +0 -0
  595. /package/dist/cjs/{src/types → types}/template.js +0 -0
  596. /package/dist/{src → cjs}/types/template.js.map +0 -0
  597. /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
  598. /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
  599. /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
  600. /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
  601. /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
  602. /package/dist/cjs/{src/utils → utils}/event.js +0 -0
  603. /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
  604. /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
  605. /package/dist/cjs/{src/utils → utils}/history.js +0 -0
  606. /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
  607. /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
  608. /package/dist/cjs/{src/utils → utils}/id.js +0 -0
  609. /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
  610. /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
  611. /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
  612. /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
  613. /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
  614. /package/dist/cjs/{src/utils → utils}/session.js +0 -0
  615. /package/dist/{src/constants → constants}/index.d.ts +0 -0
  616. /package/dist/{src/constants → constants}/index.js +0 -0
  617. /package/dist/{src/core → core}/Events.d.ts +0 -0
  618. /package/dist/{src/core → core}/Events.js +0 -0
  619. /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
  620. /package/dist/{src/core → core}/PersistenceManager.js +0 -0
  621. /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
  622. /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
  623. /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
  624. /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
  625. /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
  626. /package/dist/{src/providers → providers}/index.d.ts +0 -0
  627. /package/dist/{src/providers → providers}/index.js +0 -0
  628. /package/dist/{src/types → types}/agent.js +0 -0
  629. /package/dist/{src/types → types}/ai.d.ts +0 -0
  630. /package/dist/{src/types → types}/ai.js +0 -0
  631. /package/dist/{src/types → types}/history.d.ts +0 -0
  632. /package/dist/{src/types → types}/history.js +0 -0
  633. /package/dist/{src/types → types}/persistence.d.ts +0 -0
  634. /package/dist/{src/types → types}/persistence.js +0 -0
  635. /package/dist/{src/types → types}/route.js +0 -0
  636. /package/dist/{src/types → types}/routing.d.ts +0 -0
  637. /package/dist/{src/types → types}/routing.js +0 -0
  638. /package/dist/{src/types → types}/schema.d.ts +0 -0
  639. /package/dist/{src/types → types}/schema.js +0 -0
  640. /package/dist/{src/types → types}/session.d.ts +0 -0
  641. /package/dist/{src/types → types}/session.js +0 -0
  642. /package/dist/{src/types → types}/template.js +0 -0
  643. /package/dist/{src/utils → utils}/clone.d.ts +0 -0
  644. /package/dist/{src/utils → utils}/clone.js +0 -0
  645. /package/dist/{src/utils → utils}/event.d.ts +0 -0
  646. /package/dist/{src/utils → utils}/event.js +0 -0
  647. /package/dist/{src/utils → utils}/history.d.ts +0 -0
  648. /package/dist/{src/utils → utils}/history.js +0 -0
  649. /package/dist/{src/utils → utils}/id.d.ts +0 -0
  650. /package/dist/{src/utils → utils}/id.js +0 -0
  651. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  652. /package/dist/{src/utils → utils}/logger.js +0 -0
  653. /package/dist/{src/utils → utils}/session.d.ts +0 -0
  654. /package/dist/{src/utils → utils}/session.js +0 -0
@@ -0,0 +1,831 @@
1
+ # Error Handling
2
+
3
+ @fali/agent provides comprehensive error handling mechanisms for streaming operations, route completion detection, and agent-session data synchronization. This document covers error propagation patterns, recovery strategies, and best practices.
4
+
5
+ ## Overview
6
+
7
+ The framework handles errors across multiple layers:
8
+
9
+ - **Streaming Error Propagation** - Proper error handling in streaming AI responses
10
+ - **Route Completion Logic** - Accurate detection of route completion states
11
+ - **Session Data Synchronization** - Consistent error handling for agent-session data operations
12
+ - **Tool Execution Errors** - Graceful handling of tool failures
13
+ - **Validation Errors** - Schema and data validation error recovery
14
+ - **Batch Execution Errors** - Error handling during multi-step batch execution
15
+
16
+ ## Batch Execution Error Handling
17
+
18
+ When executing multiple steps in a batch, errors are handled according to their category and severity.
19
+
20
+ ### Error Categories
21
+
22
+ | Error Type | Severity | Behavior |
23
+ |------------|----------|----------|
24
+ | `pre_extraction` | Warning | Log warning, continue with empty extraction |
25
+ | `skipif_evaluation` | Warning | Treat step as non-skippable, include in batch |
26
+ | `prepare_hook` | Fatal | Stop batch execution, return error response |
27
+ | `llm_call` | Fatal | Stop batch, preserve last successful session state |
28
+ | `data_validation` | Non-fatal | Include errors in response, preserve partial data |
29
+ | `finalize_hook` | Non-fatal | Log error, continue with remaining hooks |
30
+
31
+ ### Pre-Extraction Errors
32
+
33
+ Failures during data extraction from user message:
34
+
35
+ ```typescript
36
+ // Pre-extraction is an optimization; failure shouldn't block execution
37
+ try {
38
+ const preExtracted = await preExtractData(message, route);
39
+ session = mergeCollected(session, preExtracted);
40
+ } catch (error) {
41
+ // Log warning but continue
42
+ console.warn("Pre-extraction failed:", error.message);
43
+ // Continue with empty extraction result
44
+ }
45
+ ```
46
+
47
+ ### SkipIf Evaluation Errors
48
+
49
+ Exceptions thrown by skipIf conditions:
50
+
51
+ ```typescript
52
+ // Safer to execute than skip when condition is indeterminate
53
+ let shouldSkip = false;
54
+ try {
55
+ shouldSkip = await step.evaluateSkipIf(context);
56
+ } catch (error) {
57
+ console.warn(`skipIf error for step ${step.id}, treating as non-skippable`);
58
+ shouldSkip = false; // Include step in batch
59
+ }
60
+ ```
61
+
62
+ ### Prepare Hook Errors
63
+
64
+ Failures in step prepare hooks stop batch execution:
65
+
66
+ ```typescript
67
+ const response = await agent.respond("Process my request");
68
+
69
+ if (response.stoppedReason === 'prepare_error') {
70
+ console.error("Prepare hook failed:", response.error);
71
+ // {
72
+ // type: 'prepare_hook',
73
+ // message: 'Validation failed in prepare hook',
74
+ // stepId: 'validate-step',
75
+ // details: { ... }
76
+ // }
77
+
78
+ // Session state is preserved from before the failed hook
79
+ console.log(response.session); // Last successful state
80
+ }
81
+ ```
82
+
83
+ ### LLM Call Errors
84
+
85
+ Provider failures, timeouts, and rate limits:
86
+
87
+ ```typescript
88
+ const response = await agent.respond("Generate response");
89
+
90
+ if (response.stoppedReason === 'llm_error') {
91
+ console.error("LLM call failed:", response.error);
92
+ // {
93
+ // type: 'llm_call',
94
+ // message: 'Rate limit exceeded',
95
+ // details: { ... }
96
+ // }
97
+
98
+ // Session preserved from before LLM call
99
+ // Can retry with same session
100
+ }
101
+ ```
102
+
103
+ ### Data Validation Errors
104
+
105
+ Schema validation failures for collected data:
106
+
107
+ ```typescript
108
+ const response = await agent.respond("Book for 100 guests");
109
+
110
+ if (response.stoppedReason === 'validation_error') {
111
+ console.warn("Validation failed:", response.error);
112
+ // {
113
+ // type: 'data_validation',
114
+ // message: 'Validation failed for 1 field(s): guests',
115
+ // details: [
116
+ // { field: 'guests', value: 100, message: 'Exceeds maximum of 10' }
117
+ // ]
118
+ // }
119
+
120
+ // Valid partial data is still preserved
121
+ console.log(response.session.data); // Contains valid fields
122
+ }
123
+ ```
124
+
125
+ ### Finalize Hook Errors
126
+
127
+ Failures in finalize hooks are logged but don't stop execution:
128
+
129
+ ```typescript
130
+ // Finalize hooks are for cleanup; one failure shouldn't block others
131
+ const response = await agent.respond("Complete booking");
132
+
133
+ // Even if finalize hooks fail, response is returned
134
+ // Errors are logged and included in response.error if present
135
+ if (response.error?.type === 'finalize_hook') {
136
+ console.warn("Some finalize hooks failed:", response.error.details);
137
+ }
138
+ ```
139
+
140
+ ### Partial Progress Preservation
141
+
142
+ Errors preserve partial progress:
143
+
144
+ ```typescript
145
+ // Batch: [step1, step2, step3]
146
+ // step2's prepare hook fails
147
+
148
+ const response = await agent.respond("Process all steps");
149
+
150
+ // step1 completed successfully
151
+ // step2 failed during prepare
152
+ // step3 never executed
153
+
154
+ console.log(response.executedSteps);
155
+ // [{ id: "step1", routeId: "route" }]
156
+
157
+ console.log(response.stoppedReason);
158
+ // "prepare_error"
159
+
160
+ // Session contains data from step1
161
+ console.log(response.session.data);
162
+ ```
163
+
164
+ ### Error Response Structure
165
+
166
+ ```typescript
167
+ interface BatchExecutionError {
168
+ /** Type of error that occurred */
169
+ type: 'pre_extraction' | 'skipif_evaluation' | 'prepare_hook' |
170
+ 'llm_call' | 'data_validation' | 'finalize_hook';
171
+ /** Error message */
172
+ message: string;
173
+ /** Step where error occurred (if applicable) */
174
+ stepId?: string;
175
+ /** Additional error details */
176
+ details?: unknown;
177
+ }
178
+ ```
179
+
180
+ ### Handling Batch Errors
181
+
182
+ ```typescript
183
+ const response = await agent.respond(message);
184
+
185
+ // Check for errors
186
+ if (response.error) {
187
+ switch (response.error.type) {
188
+ case 'prepare_hook':
189
+ // Fatal - batch stopped
190
+ await handlePrepareError(response.error);
191
+ break;
192
+ case 'llm_call':
193
+ // Fatal - can retry
194
+ await retryWithBackoff(() => agent.respond(message));
195
+ break;
196
+ case 'data_validation':
197
+ // Non-fatal - ask user to correct
198
+ await promptForCorrection(response.error.details);
199
+ break;
200
+ case 'finalize_hook':
201
+ // Non-fatal - log and continue
202
+ console.warn("Finalize error:", response.error);
203
+ break;
204
+ }
205
+ }
206
+ ```
207
+
208
+ ## Streaming Error Propagation
209
+
210
+ ### Error Handling in Streaming Responses
211
+
212
+ When using streaming AI providers, errors must be properly propagated from the underlying provider to the application layer:
213
+
214
+ ```typescript
215
+ import { Agent, OpenAIProvider } from "@falai/agent";
216
+
217
+ const agent = new Agent({
218
+ provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
219
+ });
220
+
221
+ try {
222
+ // Streaming response with proper error handling
223
+ for await (const chunk of agent.respondStream({
224
+ message: "Hello",
225
+ sessionId: "user-123"
226
+ })) {
227
+ if (chunk.error) {
228
+ // Handle streaming errors properly
229
+ console.error("Streaming error:", chunk.error);
230
+ break;
231
+ }
232
+
233
+ if (chunk.delta) {
234
+ process.stdout.write(chunk.delta);
235
+ }
236
+ }
237
+ } catch (error) {
238
+ // Catch provider-level streaming errors
239
+ console.error("Provider streaming error:", error.message);
240
+ }
241
+ ```
242
+
243
+ ### MockProvider Error Testing
244
+
245
+ For testing streaming error scenarios, the MockProvider properly propagates configured errors:
246
+
247
+ ```typescript
248
+ import { MockProvider } from "@falai/agent/testing";
249
+
250
+ const mockProvider = new MockProvider({
251
+ streamingError: "Mock provider streaming error for testing"
252
+ });
253
+
254
+ const agent = new Agent({ provider: mockProvider });
255
+
256
+ try {
257
+ for await (const chunk of agent.respondStream({ message: "test" })) {
258
+ // This will throw the configured streaming error
259
+ }
260
+ } catch (error) {
261
+ // Error message will be exactly: "Mock provider streaming error for testing"
262
+ expect(error.message).toBe("Mock provider streaming error for testing");
263
+ }
264
+ ```
265
+
266
+ **Key Points:**
267
+ - Streaming errors are thrown from the async generator itself
268
+ - Error messages are preserved exactly as configured
269
+ - Test logic catches actual provider errors, not test-generated errors
270
+
271
+ ## Route Completion Error Handling
272
+
273
+ ### Proper Route Completion Detection
274
+
275
+ Routes with conditional steps and `endRoute()` calls require careful completion detection:
276
+
277
+ ```typescript
278
+ const route = agent.createRoute({
279
+ title: "Conditional Route",
280
+ requiredFields: ["name", "email"]
281
+ });
282
+
283
+ // Step with skipIf condition
284
+ const askName = route.initialStep.nextStep({
285
+ prompt: "What's your name?",
286
+ collect: ["name"],
287
+ skipIf: (data) => !!data.name, // Skip if name already collected
288
+ });
289
+
290
+ // Step that calls endRoute()
291
+ const confirmDetails = askName.nextStep({
292
+ prompt: "Confirm your details",
293
+ requires: ["name", "email"],
294
+ onComplete: () => {
295
+ // This step calls endRoute() when complete
296
+ return { endRoute: true };
297
+ }
298
+ });
299
+
300
+ // Check route completion properly
301
+ const response = await agent.respond({
302
+ message: "My name is John and email is john@example.com",
303
+ sessionId: "user-123"
304
+ });
305
+
306
+ // Route should be marked complete when all steps are processed
307
+ if (response.isRouteComplete) {
308
+ console.log("Route completed successfully");
309
+ } else {
310
+ console.log("Route still in progress");
311
+ }
312
+ ```
313
+
314
+ ### Handling Route Completion Edge Cases
315
+
316
+ ```typescript
317
+ // Route completion with error handling
318
+ const checkRouteCompletion = (route: Route, collectedData: any) => {
319
+ try {
320
+ // Check if all required fields are present
321
+ const missingFields = route.getMissingRequiredFields(collectedData);
322
+
323
+ if (missingFields.length === 0) {
324
+ // All required data collected
325
+ return { complete: true, reason: "all_data_collected" };
326
+ }
327
+
328
+ // Check if route explicitly ended
329
+ if (route.hasExplicitEnd()) {
330
+ return { complete: true, reason: "explicit_end" };
331
+ }
332
+
333
+ // Check if all steps are skipped/completed
334
+ if (route.allStepsProcessed()) {
335
+ return { complete: true, reason: "all_steps_processed" };
336
+ }
337
+
338
+ return { complete: false, missingFields };
339
+ } catch (error) {
340
+ console.error("Route completion check failed:", error);
341
+ return { complete: false, error: error.message };
342
+ }
343
+ };
344
+ ```
345
+
346
+ ## Agent-Session Data Synchronization
347
+
348
+ ### Bidirectional Data Sync Error Handling
349
+
350
+ Agent and session data must remain synchronized with proper error handling:
351
+
352
+ ```typescript
353
+ class Agent<TContext, TData> {
354
+ async updateCollectedData(updates: Partial<TData>): Promise<void> {
355
+ try {
356
+ // Update agent data
357
+ this.collectedData = { ...this.collectedData, ...updates };
358
+
359
+ // Sync with session data
360
+ if (this.session) {
361
+ await this.session.setData(this.collectedData);
362
+ }
363
+ } catch (error) {
364
+ // Rollback agent data on session sync failure
365
+ console.error("Failed to sync data with session:", error);
366
+ // Restore previous state
367
+ throw new Error(`Data synchronization failed: ${error.message}`);
368
+ }
369
+ }
370
+
371
+ getCollectedData(): Partial<TData> {
372
+ try {
373
+ // Ensure session data is in sync
374
+ if (this.session) {
375
+ const sessionData = this.session.getData<TData>();
376
+ if (sessionData && Object.keys(sessionData).length > 0) {
377
+ this.collectedData = { ...this.collectedData, ...sessionData };
378
+ }
379
+ }
380
+ return this.collectedData;
381
+ } catch (error) {
382
+ console.error("Failed to retrieve collected data:", error);
383
+ return this.collectedData; // Return agent data as fallback
384
+ }
385
+ }
386
+ }
387
+ ```
388
+
389
+ ### Session Data Operations with Error Recovery
390
+
391
+ ```typescript
392
+ class SessionManager<TData> {
393
+ async setData(data: Partial<TData>): Promise<void> {
394
+ try {
395
+ // Validate data before setting
396
+ if (this.schema) {
397
+ this.validateData(data);
398
+ }
399
+
400
+ // Update session data
401
+ this.session.data = { ...this.session.data, ...data };
402
+
403
+ // Sync with agent if available
404
+ if (this.agent) {
405
+ this.agent.collectedData = { ...this.agent.collectedData, ...data };
406
+ }
407
+
408
+ // Persist changes
409
+ await this.save();
410
+ } catch (error) {
411
+ console.error("Session data update failed:", error);
412
+ // Restore previous session state
413
+ await this.restore();
414
+ throw new Error(`Session data update failed: ${error.message}`);
415
+ }
416
+ }
417
+
418
+ private async restore(): Promise<void> {
419
+ try {
420
+ // Reload session from persistence
421
+ const restored = await this.adapter.getSession(this.session.id);
422
+ if (restored) {
423
+ this.session = restored;
424
+ }
425
+ } catch (error) {
426
+ console.error("Failed to restore session state:", error);
427
+ }
428
+ }
429
+ }
430
+ ```
431
+
432
+ ## Session History Error Handling
433
+
434
+ ### Chat Method with Proper History Management
435
+
436
+ ```typescript
437
+ class Agent<TContext, TData> {
438
+ async chat(message: string, sessionId?: string): Promise<AgentResponse<TData>> {
439
+ try {
440
+ // Ensure session exists
441
+ if (!this.session || this.session.id !== sessionId) {
442
+ await this.loadSession(sessionId);
443
+ }
444
+
445
+ // Add user message to history BEFORE processing
446
+ await this.session.addMessage("user", message);
447
+
448
+ // Process the message
449
+ const response = await this.respond({
450
+ message,
451
+ sessionId: this.session.id
452
+ });
453
+
454
+ // Add assistant response to history
455
+ if (response.message) {
456
+ await this.session.addMessage("assistant", response.message);
457
+ }
458
+
459
+ return response;
460
+ } catch (error) {
461
+ console.error("Chat method failed:", error);
462
+
463
+ // Try to remove the user message if response failed
464
+ try {
465
+ await this.session.removeLastMessage("user");
466
+ } catch (rollbackError) {
467
+ console.error("Failed to rollback user message:", rollbackError);
468
+ }
469
+
470
+ throw new Error(`Chat failed: ${error.message}`);
471
+ }
472
+ }
473
+ }
474
+ ```
475
+
476
+ ### History Persistence with Error Recovery
477
+
478
+ ```typescript
479
+ class SessionManager<TData> {
480
+ async addMessage(role: "user" | "assistant", content: string): Promise<void> {
481
+ try {
482
+ const message: HistoryItem = {
483
+ role,
484
+ content,
485
+ timestamp: new Date().toISOString()
486
+ };
487
+
488
+ // Add to in-memory history
489
+ this.session.history.push(message);
490
+
491
+ // Persist immediately
492
+ await this.save();
493
+ } catch (error) {
494
+ // Remove from in-memory history on persistence failure
495
+ this.session.history.pop();
496
+ console.error("Failed to persist message:", error);
497
+ throw new Error(`Message persistence failed: ${error.message}`);
498
+ }
499
+ }
500
+
501
+ async getHistory(): Promise<HistoryItem[]> {
502
+ try {
503
+ // Ensure we have the latest history from persistence
504
+ await this.refresh();
505
+ return this.session.history || [];
506
+ } catch (error) {
507
+ console.error("Failed to retrieve history:", error);
508
+ // Return in-memory history as fallback
509
+ return this.session.history || [];
510
+ }
511
+ }
512
+ }
513
+ ```
514
+
515
+ ## Tool Execution Error Handling
516
+
517
+ ### Graceful Tool Error Recovery
518
+
519
+ ```typescript
520
+ import { Tool } from "@falai/agent";
521
+
522
+ const searchFlights: Tool<Context, [], void, FlightData> = {
523
+ id: "search_flights",
524
+ description: "Search for available flights",
525
+ parameters: {
526
+ type: "object",
527
+ properties: {
528
+ destination: { type: "string" },
529
+ date: { type: "string" }
530
+ },
531
+ required: ["destination", "date"]
532
+ },
533
+ handler: async (toolContext) => {
534
+ try {
535
+ const { data } = toolContext;
536
+
537
+ // Validate required data
538
+ if (!data.destination || !data.date) {
539
+ return {
540
+ error: "Missing required flight search parameters",
541
+ data: undefined
542
+ };
543
+ }
544
+
545
+ // Perform search
546
+ const results = await flightSearchAPI.search({
547
+ destination: data.destination,
548
+ date: data.date
549
+ });
550
+
551
+ return {
552
+ data: "Flight search completed successfully",
553
+ dataUpdate: {
554
+ availableFlights: results,
555
+ searchPerformed: true
556
+ }
557
+ };
558
+ } catch (error) {
559
+ console.error("Flight search failed:", error);
560
+
561
+ return {
562
+ error: `Flight search failed: ${error.message}`,
563
+ data: "I encountered an error while searching for flights. Please try again.",
564
+ dataUpdate: {
565
+ searchError: error.message,
566
+ searchPerformed: false
567
+ }
568
+ };
569
+ }
570
+ }
571
+ };
572
+ ```
573
+
574
+ ## Validation Error Handling
575
+
576
+ ### Schema Validation with Fallback
577
+
578
+ ```typescript
579
+ const validateAndExtractData = <T>(response: string, schema: JSONSchema): T | null => {
580
+ try {
581
+ // Try to extract structured data
582
+ const extracted = extractStructuredData<T>(response, schema);
583
+
584
+ // Validate against schema
585
+ const validation = validateSchema(extracted, schema);
586
+
587
+ if (validation.valid) {
588
+ return extracted;
589
+ } else {
590
+ console.warn("Schema validation failed:", validation.errors);
591
+ // Fall back to manual extraction
592
+ return manualExtraction<T>(response);
593
+ }
594
+ } catch (error) {
595
+ console.error("Data extraction failed:", error);
596
+ // Return null to indicate extraction failure
597
+ return null;
598
+ }
599
+ };
600
+ ```
601
+
602
+ ## Error Recovery Strategies
603
+
604
+ ### Automatic Retry with Backoff
605
+
606
+ ```typescript
607
+ const retryWithBackoff = async <T>(
608
+ operation: () => Promise<T>,
609
+ maxRetries: number = 3,
610
+ baseDelay: number = 1000
611
+ ): Promise<T> => {
612
+ let lastError: Error;
613
+
614
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
615
+ try {
616
+ return await operation();
617
+ } catch (error) {
618
+ lastError = error as Error;
619
+
620
+ if (attempt < maxRetries - 1) {
621
+ const delay = baseDelay * Math.pow(2, attempt);
622
+ console.warn(`Operation failed, retrying in ${delay}ms:`, error.message);
623
+ await new Promise(resolve => setTimeout(resolve, delay));
624
+ }
625
+ }
626
+ }
627
+
628
+ throw new Error(`Operation failed after ${maxRetries} attempts: ${lastError.message}`);
629
+ };
630
+
631
+ // Usage
632
+ const response = await retryWithBackoff(
633
+ () => agent.respond({ message: "Hello", sessionId: "user-123" }),
634
+ 3,
635
+ 1000
636
+ );
637
+ ```
638
+
639
+ ### Circuit Breaker Pattern
640
+
641
+ ```typescript
642
+ class CircuitBreaker {
643
+ private failures = 0;
644
+ private lastFailureTime = 0;
645
+ private state: 'closed' | 'open' | 'half-open' = 'closed';
646
+
647
+ constructor(
648
+ private threshold: number = 5,
649
+ private timeout: number = 60000
650
+ ) {}
651
+
652
+ async execute<T>(operation: () => Promise<T>): Promise<T> {
653
+ if (this.state === 'open') {
654
+ if (Date.now() - this.lastFailureTime > this.timeout) {
655
+ this.state = 'half-open';
656
+ } else {
657
+ throw new Error('Circuit breaker is open');
658
+ }
659
+ }
660
+
661
+ try {
662
+ const result = await operation();
663
+ this.onSuccess();
664
+ return result;
665
+ } catch (error) {
666
+ this.onFailure();
667
+ throw error;
668
+ }
669
+ }
670
+
671
+ private onSuccess(): void {
672
+ this.failures = 0;
673
+ this.state = 'closed';
674
+ }
675
+
676
+ private onFailure(): void {
677
+ this.failures++;
678
+ this.lastFailureTime = Date.now();
679
+
680
+ if (this.failures >= this.threshold) {
681
+ this.state = 'open';
682
+ }
683
+ }
684
+ }
685
+ ```
686
+
687
+ ## Best Practices
688
+
689
+ ### Error Logging and Monitoring
690
+
691
+ ```typescript
692
+ import { Logger } from "@falai/agent/utils";
693
+
694
+ const logger = new Logger("agent-errors");
695
+
696
+ // Structured error logging
697
+ const logError = (context: string, error: Error, metadata?: any) => {
698
+ logger.error({
699
+ context,
700
+ message: error.message,
701
+ stack: error.stack,
702
+ metadata,
703
+ timestamp: new Date().toISOString()
704
+ });
705
+ };
706
+
707
+ // Usage in error handlers
708
+ try {
709
+ await agent.respond({ message, sessionId });
710
+ } catch (error) {
711
+ logError("agent-response", error, { message, sessionId });
712
+ throw error;
713
+ }
714
+ ```
715
+
716
+ ### Error Boundaries for Route Execution
717
+
718
+ ```typescript
719
+ const executeRouteWithErrorBoundary = async (route: Route, context: any) => {
720
+ try {
721
+ return await route.execute(context);
722
+ } catch (error) {
723
+ // Log the error
724
+ logError("route-execution", error, { routeId: route.id });
725
+
726
+ // Provide fallback response
727
+ return {
728
+ message: "I encountered an error processing your request. Please try again.",
729
+ isRouteComplete: false,
730
+ error: error.message
731
+ };
732
+ }
733
+ };
734
+ ```
735
+
736
+ ### Graceful Degradation
737
+
738
+ ```typescript
739
+ const respondWithFallback = async (agent: Agent, message: string) => {
740
+ try {
741
+ // Try normal response
742
+ return await agent.respond({ message });
743
+ } catch (error) {
744
+ console.warn("Normal response failed, using fallback:", error.message);
745
+
746
+ // Fallback to simple response without routing
747
+ return {
748
+ message: "I'm experiencing some technical difficulties. How can I help you?",
749
+ isRouteComplete: false,
750
+ session: agent.session
751
+ };
752
+ }
753
+ };
754
+ ```
755
+
756
+ ## Testing Error Scenarios
757
+
758
+ ### Unit Tests for Error Handling
759
+
760
+ ```typescript
761
+ describe("Error Handling", () => {
762
+ it("should handle streaming errors properly", async () => {
763
+ const mockProvider = new MockProvider({
764
+ streamingError: "Test streaming error"
765
+ });
766
+
767
+ const agent = new Agent({ provider: mockProvider });
768
+
769
+ await expect(async () => {
770
+ for await (const chunk of agent.respondStream({ message: "test" })) {
771
+ // Should throw before yielding any chunks
772
+ }
773
+ }).rejects.toThrow("Test streaming error");
774
+ });
775
+
776
+ it("should handle route completion errors", async () => {
777
+ const route = agent.createRoute({
778
+ title: "Test Route",
779
+ requiredFields: ["name"]
780
+ });
781
+
782
+ // Mock route completion logic to throw
783
+ jest.spyOn(route, 'isComplete').mockImplementation(() => {
784
+ throw new Error("Completion check failed");
785
+ });
786
+
787
+ const response = await agent.respond({ message: "Hello" });
788
+
789
+ // Should handle error gracefully
790
+ expect(response.isRouteComplete).toBe(false);
791
+ });
792
+ });
793
+ ```
794
+
795
+ ## Monitoring and Observability
796
+
797
+ ### Error Metrics Collection
798
+
799
+ ```typescript
800
+ class ErrorMetrics {
801
+ private errorCounts = new Map<string, number>();
802
+ private errorRates = new Map<string, number[]>();
803
+
804
+ recordError(type: string, error: Error): void {
805
+ // Count errors by type
806
+ this.errorCounts.set(type, (this.errorCounts.get(type) || 0) + 1);
807
+
808
+ // Track error rates
809
+ const now = Date.now();
810
+ const rates = this.errorRates.get(type) || [];
811
+ rates.push(now);
812
+
813
+ // Keep only last hour of data
814
+ const oneHourAgo = now - 3600000;
815
+ this.errorRates.set(type, rates.filter(time => time > oneHourAgo));
816
+ }
817
+
818
+ getErrorRate(type: string): number {
819
+ const rates = this.errorRates.get(type) || [];
820
+ return rates.length; // Errors per hour
821
+ }
822
+
823
+ getTopErrors(limit: number = 10): Array<[string, number]> {
824
+ return Array.from(this.errorCounts.entries())
825
+ .sort(([,a], [,b]) => b - a)
826
+ .slice(0, limit);
827
+ }
828
+ }
829
+ ```
830
+
831
+ This comprehensive error handling documentation covers all the key areas identified in the task requirements, providing practical examples and best practices for handling errors in streaming operations, route completion logic, and agent-session data synchronization.